From 09d9139cc2316110d26ac6aed75704f4cea6d7ab Mon Sep 17 00:00:00 2001 From: thbsp Date: Sun, 14 Nov 2021 16:14:16 +0900 Subject: [PATCH 001/255] Use term "iron person" consistently in interface Elsewhere in the Tabbycat interface, the phrase "iron man" and related terms have been replaced with "iron person". I noticed they are still present in the interface and documentation. --- docs/features/data-entry.rst | 2 +- docs/guide/tournament-logistics.rst | 2 +- tabbycat/results/templates/BallotEntryHeader.vue | 2 +- tabbycat/results/templates/ballot/ballot_speaks.html | 2 +- tabbycat/utils/tables.py | 6 +++--- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/features/data-entry.rst b/docs/features/data-entry.rst index 696aee3c240..4feb1691174 100644 --- a/docs/features/data-entry.rst +++ b/docs/features/data-entry.rst @@ -45,7 +45,7 @@ Duplicate/Swing Speeches .. image:: images/iron-speakers.png -When entering the ballots there is a toggle label *'Iron' speeches*. When set to "yes" this allows you to have the same speaker deliver multiple speeches provided their extra speeches are labelled on the form as 'duplicates'. Typically, most tournaments require that lesser 'iron man' speech is discarded from the tab, which would mean that you would mark the lower speaker of the two scores as the duplicate (note that this may require you to check each score's average across a panel). +When entering the ballots there is a toggle label *'Iron' speeches*. When set to "yes" this allows you to have the same speaker deliver multiple speeches provided their extra speeches are labelled on the form as 'duplicates'. Typically, most tournaments require that the lesser 'iron-person' speech is discarded from the tab, which would mean that you would mark the lower speaker of the two scores as the duplicate (note that this may require you to check each score's average across a panel). Speeches marked as duplicates are not included in the speaker tab. This means that they can also be used to exclude swing speakers from the tab as needed; even if they do not actually speak twice. To do so, change the name of the swing speaker to be that of an existing team member and ensure that that speech is marked as a duplicate. diff --git a/docs/guide/tournament-logistics.rst b/docs/guide/tournament-logistics.rst index 3d4c5e2e8a1..997dd35aeb9 100644 --- a/docs/guide/tournament-logistics.rst +++ b/docs/guide/tournament-logistics.rst @@ -330,7 +330,7 @@ If at all feasible you want to train that volunteers acting as runners and/or da - Run through this in the actual tab room; illustrating examples with actual ballots and going through the roles in the actual spots which they will occur. - Run through how the seating/table/box arrangement works and the types of roles at different positions. - Emphasise that in general, any ambiguities should be raised with the tab directors/assistants; i.e. that you should never guess about ballots but instead always delegate resolving issues to someone else. - - Run through the different edge cases and things to check during entry. For example Iron Person speeches, mismatched totals, entering the wrong ballot for the wrong panellist, etc (see section below). Be sure to also go through what happens when the validation step fails; i.e. when a ballot needs to be re-entered. + - Run through the different edge cases and things to check during entry. For example, iron-person speeches, mismatched totals, entering the wrong ballot for the wrong panellist, etc. (see section below). Be sure to also go through what happens when the validation step fails; i.e. when a ballot needs to be re-entered. Training the adjudication core ------------------------------ diff --git a/tabbycat/results/templates/BallotEntryHeader.vue b/tabbycat/results/templates/BallotEntryHeader.vue index 8125104355d..0af90ed38af 100644 --- a/tabbycat/results/templates/BallotEntryHeader.vue +++ b/tabbycat/results/templates/BallotEntryHeader.vue @@ -70,7 +70,7 @@
Speeches marked as 'duplicates' are hidden from the speaker tab and often need to be - tracked in order to determine break eligibility. If a speaker is 'iron-manning' you would + tracked in order to determine break eligibility. If a speaker is 'iron-personing' you would typically set their lowest-scoring speech as the 'duplicate'.
diff --git a/tabbycat/results/templates/ballot/ballot_speaks.html b/tabbycat/results/templates/ballot/ballot_speaks.html index 306e00fef16..b13285a4565 100644 --- a/tabbycat/results/templates/ballot/ballot_speaks.html +++ b/tabbycat/results/templates/ballot/ballot_speaks.html @@ -16,7 +16,7 @@
{% if feedback.source_adjudicator %} - {% person_display_name feedback.source_adjudicator tournament as source %} + {% person_display_name feedback.source_adjudicator.adjudicator as source %} {% blocktrans trimmed with source=source relationship=feedback.source_adjudicator.get_type_display %} From {{ source }} (their {{ relationship }}) {% endblocktrans %} diff --git a/tabbycat/participants/templates/current_round/round_adj.html b/tabbycat/participants/templates/current_round/round_adj.html index 607fa71056a..74586c1c606 100644 --- a/tabbycat/participants/templates/current_round/round_adj.html +++ b/tabbycat/participants/templates/current_round/round_adj.html @@ -3,7 +3,7 @@ {# Position, teams and room #}
- {% person_display_name adjudicator as adjudicator_name %} + {% person_display_name debateadjudicator.adjudicator as adjudicator_name %} {# (Two-team formats) #} {% if pref.teams_in_debate == 'two' %} From 0366cc8493011df4d513b6920e8392af9e0cddd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 9 Oct 2022 14:43:51 -0300 Subject: [PATCH 004/255] Bump version number for 2.8 (Q) --- .github/CHANGELOG.rst | 5 +++++ docs/conf.py | 4 ++-- tabbycat/settings/core.py | 6 +++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/CHANGELOG.rst b/.github/CHANGELOG.rst index ad8c7314285..0701e28a9ba 100644 --- a/.github/CHANGELOG.rst +++ b/.github/CHANGELOG.rst @@ -2,6 +2,11 @@ Change Log ========== +2.8.0 (Q) +--------- +*Release date: TBD* + + 2.7.0 (Pixie-bob) --------- *Release date: 1 October 2022* diff --git a/docs/conf.py b/docs/conf.py index bd2224d0b86..4740d1c7a45 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -58,9 +58,9 @@ # built documents. # # The short X.Y version. -version = '2.7' +version = '2.8' # The full version, including alpha/beta/rc tags. -release = '2.7.0-dev' +release = '2.8.0-dev' rst_epilog = """ .. |vrelease| replace:: v{release} diff --git a/tabbycat/settings/core.py b/tabbycat/settings/core.py index b74c3ebf686..bc013d486e7 100644 --- a/tabbycat/settings/core.py +++ b/tabbycat/settings/core.py @@ -22,9 +22,9 @@ # Version # ============================================================================== -TABBYCAT_VERSION = '2.7.0-dev' -TABBYCAT_CODENAME = 'Pixie-bob' -READTHEDOCS_VERSION = 'v2.7.0' +TABBYCAT_VERSION = '2.8.0-dev' +TABBYCAT_CODENAME = 'Q' +READTHEDOCS_VERSION = 'v2.8.0' # ============================================================================== # Internationalization and Localization From b1ca6967603586ec6f774175a32c13f79c18f06a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 9 Oct 2022 14:44:12 -0300 Subject: [PATCH 005/255] Remove instruction to update `kitten` branch The `kitten` branch is no longer supported as it is very out-of-date and its purpose rendered pointless with Heroku removing the free tier, so a payment method would always be required, even with using that branch. --- .github/CONTRIBUTING.rst | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/CONTRIBUTING.rst b/.github/CONTRIBUTING.rst index bdd0c4c07b1..0daf2d72269 100644 --- a/.github/CONTRIBUTING.rst +++ b/.github/CONTRIBUTING.rst @@ -170,7 +170,6 @@ Release checklist 8. Shift remaining issues from the Github Milestone 9. Create and finish the release branch as per git-flow 10. Ensure the tag is correct (``vX.Y.Z``) and published to GitHub -11. Back-merge ``master`` to the ``kitten`` branch -12. Back-merge ``develop`` to the in-progress feature branches -13. Issue a formal release with change notes on GitHub -14. Post change notes on the Facebook page/group +11. Back-merge ``develop`` to the in-progress feature branches +12. Issue a formal release with change notes on GitHub +13. Post change notes on the Facebook page/group From 95ef69ce56086b20fcc86d5a7857c16ee326efe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 9 Oct 2022 14:52:20 -0300 Subject: [PATCH 006/255] Update Pipfile This commit updates the Pipfile, with the main feature being Django 4.1. Django 4.1 did introduce some bugs which were fixed in 2588afcace and 11c5237140. It also includes Malay as a default language! Calico already uses Django 4.1. --- Pipfile.lock | 1059 +++++++++++++++++++------------------ tabbycat/settings/core.py | 10 +- 2 files changed, 537 insertions(+), 532 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 2613332de96..dba0bfb1bfe 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -16,13 +16,6 @@ ] }, "default": { - "aioredis": { - "hashes": [ - "sha256:15f8af30b044c771aee6787e5ec24694c048184c7b9e54c3b60c750a4b93273a", - "sha256:b61808d7e97b7cd5a92ed574937a079c9387fdadd22bfbfa7ad2fd319ecc26e3" - ], - "version": "==1.3.1" - }, "appnope": { "hashes": [ "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24", @@ -33,11 +26,11 @@ }, "asgiref": { "hashes": [ - "sha256:2f8abc20f7248433085eda803936d98992f1343ddb022065779f37c5da0181d0", - "sha256:88d59c13d634dcffe0510be048210188edd79aeccb6a6c9028cdad6f31d730a9" + "sha256:1d2880b792ae8757289136f1db2b7b99100ce959b2aa57fd69dab783d05afac4", + "sha256:4a29362a6acebe09bf1d6640db38c1dc3d9217c68e6f9f6204d72667fc19a424" ], "index": "pypi", - "version": "==3.5.0" + "version": "==3.5.2" }, "async-timeout": { "hashes": [ @@ -49,18 +42,18 @@ }, "attrs": { "hashes": [ - "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4", - "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd" + "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6", + "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==21.4.0" + "markers": "python_version >= '3.5'", + "version": "==22.1.0" }, "autobahn": { "hashes": [ - "sha256:58a887c7a196bb08d8b6624cb3695f493a9e5c9f00fd350d8d6f829b47ff9036" + "sha256:8b462ea2e6aad6b4dc0ed45fb800b6cbfeb0325e7fe6983907f122f2be4a1fe9" ], "markers": "python_version >= '3.7'", - "version": "==22.3.2" + "version": "==22.7.1" }, "automat": { "hashes": [ @@ -76,91 +69,128 @@ ], "version": "==0.2.0" }, + "backports.zoneinfo": { + "hashes": [ + "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf", + "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328", + "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546", + "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6", + "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570", + "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9", + "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7", + "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987", + "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722", + "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582", + "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc", + "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b", + "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1", + "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08", + "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac", + "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2" + ], + "markers": "python_version < '3.9'", + "version": "==0.2.1" + }, "bleach": { "hashes": [ - "sha256:08a1fe86d253b5c88c92cc3d810fd8048a16d15762e1e5b74d502256e5926aa1", - "sha256:c6d6cc054bdc9c83b48b8083e236e5f00f238428666d2ce2e083eaa5fd568565" + "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a", + "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c" ], "markers": "python_version >= '3.7'", - "version": "==5.0.0" + "version": "==5.0.1" }, "certifi": { "hashes": [ - "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872", - "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569" + "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14", + "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382" ], - "version": "==2021.10.8" + "markers": "python_version >= '3.6'", + "version": "==2022.9.24" }, "cffi": { "hashes": [ - "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3", - "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2", - "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636", - "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20", - "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728", - "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27", - "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66", - "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443", - "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0", - "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7", - "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39", - "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605", - "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a", - "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37", - "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029", - "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139", - "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc", - "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df", - "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14", - "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880", - "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2", - "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a", - "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e", - "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474", - "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024", - "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8", - "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0", - "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e", - "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a", - "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e", - "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032", - "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6", - "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e", - "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b", - "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e", - "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954", - "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962", - "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c", - "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4", - "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55", - "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962", - "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023", - "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c", - "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6", - "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8", - "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382", - "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7", - "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc", - "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997", - "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796" - ], - "version": "==1.15.0" + "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5", + "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef", + "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104", + "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426", + "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405", + "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375", + "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a", + "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e", + "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc", + "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf", + "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185", + "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497", + "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3", + "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35", + "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c", + "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83", + "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21", + "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca", + "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984", + "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac", + "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd", + "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee", + "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a", + "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2", + "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192", + "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7", + "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585", + "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f", + "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e", + "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27", + "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b", + "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e", + "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e", + "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d", + "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c", + "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415", + "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82", + "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02", + "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314", + "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325", + "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", + "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3", + "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914", + "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045", + "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d", + "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9", + "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5", + "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2", + "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c", + "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3", + "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2", + "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8", + "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d", + "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d", + "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9", + "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162", + "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76", + "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4", + "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e", + "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9", + "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6", + "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b", + "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01", + "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0" + ], + "version": "==1.15.1" }, "channels": { "hashes": [ - "sha256:0ff0422b4224d10efac76e451575517f155fe7c97d369b5973b116f22eeaf86c", - "sha256:fdd9a94987a23d8d7ebd97498ed8b8cc83163f37e53fc6c85098aba7a3bb8b75" + "sha256:3813b8025bf85509769793aca720e6c3b1c5bde1cb253a961252bf0242b60a26", + "sha256:a3dc3339cc033e7c2afe083fb3dedf74fc5009815967e317e080e7bfdc92ea26" ], "index": "pypi", - "version": "==3.0.4" + "version": "==3.0.5" }, "channels-redis": { "hashes": [ - "sha256:5dffd4cc16174125bd4043fc8fe7462ca7403cf801d59a9fa7410ed101fa6a57", - "sha256:6e4565b7c11c6bcde5d48556cb83bd043779697ff03811867d2f895aa6170d56" + "sha256:122414f29f525f7b9e0c9d59cdcfc4dc1b0eecba16fbb6a1c23f1d9b58f49dcb", + "sha256:81b59d68f53313e1aa891f23591841b684abb936b42e4d1a966d9e4dc63a95ec" ], "index": "pypi", - "version": "==3.4.0" + "version": "==4.0.0" }, "constantly": { "hashes": [ @@ -171,29 +201,35 @@ }, "cryptography": { "hashes": [ - "sha256:0a3bf09bb0b7a2c93ce7b98cb107e9170a90c51a0162a20af1c61c765b90e60b", - "sha256:1f64a62b3b75e4005df19d3b5235abd43fa6358d5516cfc43d87aeba8d08dd51", - "sha256:32db5cc49c73f39aac27574522cecd0a4bb7384e71198bc65a0d23f901e89bb7", - "sha256:4881d09298cd0b669bb15b9cfe6166f16fc1277b4ed0d04a22f3d6430cb30f1d", - "sha256:4e2dddd38a5ba733be6a025a1475a9f45e4e41139d1321f412c6b360b19070b6", - "sha256:53e0285b49fd0ab6e604f4c5d9c5ddd98de77018542e88366923f152dbeb3c29", - "sha256:70f8f4f7bb2ac9f340655cbac89d68c527af5bb4387522a8413e841e3e6628c9", - "sha256:7b2d54e787a884ffc6e187262823b6feb06c338084bbe80d45166a1cb1c6c5bf", - "sha256:7be666cc4599b415f320839e36367b273db8501127b38316f3b9f22f17a0b815", - "sha256:8241cac0aae90b82d6b5c443b853723bcc66963970c67e56e71a2609dc4b5eaf", - "sha256:82740818f2f240a5da8dfb8943b360e4f24022b093207160c77cadade47d7c85", - "sha256:8897b7b7ec077c819187a123174b645eb680c13df68354ed99f9b40a50898f77", - "sha256:c2c5250ff0d36fd58550252f54915776940e4e866f38f3a7866d92b32a654b86", - "sha256:ca9f686517ec2c4a4ce930207f75c00bf03d94e5063cbc00a1dc42531511b7eb", - "sha256:d2b3d199647468d410994dbeb8cec5816fb74feb9368aedf300af709ef507e3e", - "sha256:da73d095f8590ad437cd5e9faf6628a218aa7c387e1fdf67b888b47ba56a17f0", - "sha256:e167b6b710c7f7bc54e67ef593f8731e1f45aa35f8a8a7b72d6e42ec76afd4b3", - "sha256:ea634401ca02367c1567f012317502ef3437522e2fc44a3ea1844de028fa4b84", - "sha256:ec6597aa85ce03f3e507566b8bcdf9da2227ec86c4266bd5e6ab4d9e0cc8dab2", - "sha256:f64b232348ee82f13aac22856515ce0195837f6968aeaa94a3d0353ea2ec06a6" + "sha256:0297ffc478bdd237f5ca3a7dc96fc0d315670bfa099c04dc3a4a2172008a405a", + "sha256:10d1f29d6292fc95acb597bacefd5b9e812099d75a6469004fd38ba5471a977f", + "sha256:16fa61e7481f4b77ef53991075de29fc5bacb582a1244046d2e8b4bb72ef66d0", + "sha256:194044c6b89a2f9f169df475cc167f6157eb9151cc69af8a2a163481d45cc407", + "sha256:1db3d807a14931fa317f96435695d9ec386be7b84b618cc61cfa5d08b0ae33d7", + "sha256:3261725c0ef84e7592597606f6583385fed2a5ec3909f43bc475ade9729a41d6", + "sha256:3b72c360427889b40f36dc214630e688c2fe03e16c162ef0aa41da7ab1455153", + "sha256:3e3a2599e640927089f932295a9a247fc40a5bdf69b0484532f530471a382750", + "sha256:3fc26e22840b77326a764ceb5f02ca2d342305fba08f002a8c1f139540cdfaad", + "sha256:5067ee7f2bce36b11d0e334abcd1ccf8c541fc0bbdaf57cdd511fdee53e879b6", + "sha256:52e7bee800ec869b4031093875279f1ff2ed12c1e2f74923e8f49c916afd1d3b", + "sha256:64760ba5331e3f1794d0bcaabc0d0c39e8c60bf67d09c93dc0e54189dfd7cfe5", + "sha256:765fa194a0f3372d83005ab83ab35d7c5526c4e22951e46059b8ac678b44fa5a", + "sha256:79473cf8a5cbc471979bd9378c9f425384980fcf2ab6534b18ed7d0d9843987d", + "sha256:896dd3a66959d3a5ddcfc140a53391f69ff1e8f25d93f0e2e7830c6de90ceb9d", + "sha256:89ed49784ba88c221756ff4d4755dbc03b3c8d2c5103f6d6b4f83a0fb1e85294", + "sha256:ac7e48f7e7261207d750fa7e55eac2d45f720027d5703cd9007e9b37bbb59ac0", + "sha256:ad7353f6ddf285aeadfaf79e5a6829110106ff8189391704c1d8801aa0bae45a", + "sha256:b0163a849b6f315bf52815e238bc2b2346604413fa7c1601eea84bcddb5fb9ac", + "sha256:b6c9b706316d7b5a137c35e14f4103e2115b088c412140fdbd5f87c73284df61", + "sha256:c2e5856248a416767322c8668ef1845ad46ee62629266f84a8f007a317141013", + "sha256:ca9f6784ea96b55ff41708b92c3f6aeaebde4c560308e5fbbd3173fbc466e94e", + "sha256:d1a5bd52d684e49a36582193e0b89ff267704cd4025abefb9e26803adeb3e5fb", + "sha256:d3971e2749a723e9084dd507584e2a2761f78ad2c638aa31e80bc7a15c9db4f9", + "sha256:d4ef6cc305394ed669d4d9eebf10d3a101059bdcf2669c366ec1d14e4fb227bd", + "sha256:d9e69ae01f99abe6ad646947bba8941e896cb3aa805be2597a0400e0764b5818" ], "markers": "python_version >= '3.6'", - "version": "==36.0.2" + "version": "==38.0.1" }, "daphne": { "hashes": [ @@ -237,19 +273,19 @@ }, "dj-database-url": { "hashes": [ - "sha256:4aeaeb1f573c74835b0686a2b46b85990571159ffc21aa57ecd4d1e1cb334163", - "sha256:851785365761ebe4994a921b433062309eb882fedd318e1b0fcecc607ed02da9" + "sha256:ccf3e8718f75ddd147a1e212fca88eecdaa721759ee48e38b485481c77bca3dc", + "sha256:cd354a3b7a9136d78d64c17b2aec369e2ae5616fbca6bfbe435ef15bb372ce39" ], "index": "pypi", - "version": "==0.5.0" + "version": "==1.0.0" }, "django": { "hashes": [ - "sha256:07c8638e7a7f548dc0acaaa7825d84b7bd42b10e8d22268b3d572946f1e9b687", - "sha256:4e8177858524417563cc0430f29ea249946d831eacb0068a1455686587df40b5" + "sha256:26dc24f99c8956374a054bcbf58aab8dc0cad2e6ac82b0fe036b752c00eee793", + "sha256:b8d843714810ab88d59344507d4447be8b2cf12a49031363b6eed9f1b9b2280f" ], "index": "pypi", - "version": "==4.0.4" + "version": "==4.1.2" }, "django-appconf": { "hashes": [ @@ -269,35 +305,34 @@ }, "django-cors-headers": { "hashes": [ - "sha256:a22be2befd4069c4fc174f11cf067351df5c061a3a5f94a01650b4e928b0372b", - "sha256:eb98389bf7a2afc5d374806af4a9149697e3a6955b5a2dc2bf049f7d33647456" + "sha256:37e42883b5f1f2295df6b4bba96eb2417a14a03270cb24b2a07f021cd4487cf4", + "sha256:f9dc6b4e3f611c3199700b3e5f3398c28757dcd559c2f82932687f3d0443cfdf" ], "index": "pypi", - "version": "==3.11.0" + "version": "==3.13.0" }, "django-dynamic-preferences": { "hashes": [ - "sha256:06cc20998429e008fe0e9a06f50bedd09bf42eeb9afcbc9df440127ff524bc1b", - "sha256:cd8987cf8e4dd36e019ad3e8a25c589bc4b410ca4a66cdfcbe5c25a517a7c0ad" + "sha256:c00abcb8d524067390a66518cfcd32683b87ad3cc620d5913649fc7707b80833" ], "index": "pypi", - "version": "==1.12.0" + "version": "==1.14.0" }, "django-extensions": { "hashes": [ - "sha256:28e1e1bf49f0e00307ba574d645b0af3564c981a6dfc87209d48cb98f77d0b1a", - "sha256:9238b9e016bb0009d621e05cf56ea8ce5cce9b32e91ad2026996a7377ca28069" + "sha256:2a4f4d757be2563cd1ff7cfdf2e57468f5f931cc88b23cf82ca75717aae504a4", + "sha256:421464be390289513f86cb5e18eb43e5dc1de8b4c27ba9faa3b91261b0d67e09" ], "index": "pypi", - "version": "==3.1.5" + "version": "==3.2.1" }, "django-formtools": { "hashes": [ - "sha256:4699937e19ee041d803943714fe0c1c7ad4cab802600eb64bbf4cdd0a1bfe7d9", - "sha256:9663b6eca64777b68d6d4142efad8597fe9a685924673b25aa8a1dcff4db00c3" + "sha256:deb932be55b1d9419e37dc4d65dfbfeb8d307b71c8c11fd52f159aba5fc0deed", + "sha256:f5f32f62ec8192cd1bc55bd929ca7dff5a5f2addf9027db95a5906ecfaa64836" ], "index": "pypi", - "version": "==2.3" + "version": "==2.4" }, "django-gfklookupwidget": { "hashes": [ @@ -316,10 +351,10 @@ }, "django-jet-reboot": { "hashes": [ - "sha256:616e14435cd7b994ace28c7c251ecf908c3d9f1851a012b4bc20b0a176c94b1c" + "sha256:415f109a0b521e6048d7bb2f181d256c36af835d1f55b8ce12f2030983ddce7a" ], "index": "pypi", - "version": "==1.3.1" + "version": "==1.3.2" }, "django-polymorphic": { "hashes": [ @@ -339,19 +374,19 @@ }, "django-split-settings": { "hashes": [ - "sha256:5d97ae64cf9ed14a831722d82ac725944667ac8c08307b7cfd22e91367b411d0", - "sha256:6b3aed89667a95525152026eab93a9f038ff22df6883006318b8b4a3d0ca6888" + "sha256:31415a618256b54c5cee8662cbaa72a890683b8b7465d64ba88fdd3affdd6c60", + "sha256:4b3be146776d49c61bd9dcf89fad40edb1544f13ab27a87a0b1aecf5a0d636f4" ], "index": "pypi", - "version": "==1.1.0" + "version": "==1.2.0" }, "django-statici18n": { "hashes": [ - "sha256:81450c42da4aaa0f8de8307aad167883d8bbfa1c84a459084e1eacc2e7957648", - "sha256:dbcdac190d93e0b4eabcab8875c8eb68795eceb442f926843ec5cbe1432fe628" + "sha256:00079579035d5b45320830191e2c047f8643b7906307eff9833f0fa95068a603", + "sha256:5f4bb3d58670def2df490babe338524927cfb2ebe2e5e20538b98d9424e83d0e" ], "index": "pypi", - "version": "==2.2.0" + "version": "==2.3.1" }, "django-summernote": { "hashes": [ @@ -362,11 +397,11 @@ }, "djangorestframework": { "hashes": [ - "sha256:0c33407ce23acc68eca2a6e46424b008c9c02eceb8cf18581921d0092bc1f2ee", - "sha256:24c4bf58ed7e85d1fe4ba250ab2da926d263cd57d64b03e8dcef0ac683f8b1aa" + "sha256:579a333e6256b09489cbe0a067e66abe55c6595d8926be6b99423786334350c8", + "sha256:eb63f58c9f218e1a7d064d17a70751f528ed4e1d35547fdade9aaf4cd103fd08" ], "index": "pypi", - "version": "==3.13.1" + "version": "==3.14.0" }, "gunicorn": { "hashes": [ @@ -376,53 +411,6 @@ "index": "pypi", "version": "==20.1.0" }, - "hiredis": { - "hashes": [ - "sha256:04026461eae67fdefa1949b7332e488224eac9e8f2b5c58c98b54d29af22093e", - "sha256:04927a4c651a0e9ec11c68e4427d917e44ff101f761cd3b5bc76f86aaa431d27", - "sha256:07bbf9bdcb82239f319b1f09e8ef4bdfaec50ed7d7ea51a56438f39193271163", - "sha256:09004096e953d7ebd508cded79f6b21e05dff5d7361771f59269425108e703bc", - "sha256:0adea425b764a08270820531ec2218d0508f8ae15a448568109ffcae050fee26", - "sha256:0b39ec237459922c6544d071cdcf92cbb5bc6685a30e7c6d985d8a3e3a75326e", - "sha256:0d5109337e1db373a892fdcf78eb145ffb6bbd66bb51989ec36117b9f7f9b579", - "sha256:0f41827028901814c709e744060843c77e78a3aca1e0d6875d2562372fcb405a", - "sha256:11d119507bb54e81f375e638225a2c057dda748f2b1deef05c2b1a5d42686048", - "sha256:1233e303645f468e399ec906b6b48ab7cd8391aae2d08daadbb5cad6ace4bd87", - "sha256:139705ce59d94eef2ceae9fd2ad58710b02aee91e7fa0ccb485665ca0ecbec63", - "sha256:1f03d4dadd595f7a69a75709bc81902673fa31964c75f93af74feac2f134cc54", - "sha256:240ce6dc19835971f38caf94b5738092cb1e641f8150a9ef9251b7825506cb05", - "sha256:294a6697dfa41a8cba4c365dd3715abc54d29a86a40ec6405d677ca853307cfb", - "sha256:3d55e36715ff06cdc0ab62f9591607c4324297b6b6ce5b58cb9928b3defe30ea", - "sha256:3dddf681284fe16d047d3ad37415b2e9ccdc6c8986c8062dbe51ab9a358b50a5", - "sha256:3f5f7e3a4ab824e3de1e1700f05ad76ee465f5f11f5db61c4b297ec29e692b2e", - "sha256:508999bec4422e646b05c95c598b64bdbef1edf0d2b715450a078ba21b385bcc", - "sha256:5d2a48c80cf5a338d58aae3c16872f4d452345e18350143b3bf7216d33ba7b99", - "sha256:5dc7a94bb11096bc4bffd41a3c4f2b958257085c01522aa81140c68b8bf1630a", - "sha256:65d653df249a2f95673976e4e9dd7ce10de61cfc6e64fa7eeaa6891a9559c581", - "sha256:7492af15f71f75ee93d2a618ca53fea8be85e7b625e323315169977fae752426", - "sha256:7f0055f1809b911ab347a25d786deff5e10e9cf083c3c3fd2dd04e8612e8d9db", - "sha256:807b3096205c7cec861c8803a6738e33ed86c9aae76cac0e19454245a6bbbc0a", - "sha256:81d6d8e39695f2c37954d1011c0480ef7cf444d4e3ae24bc5e89ee5de360139a", - "sha256:87c7c10d186f1743a8fd6a971ab6525d60abd5d5d200f31e073cd5e94d7e7a9d", - "sha256:8b42c0dc927b8d7c0eb59f97e6e34408e53bc489f9f90e66e568f329bff3e443", - "sha256:a00514362df15af041cc06e97aebabf2895e0a7c42c83c21894be12b84402d79", - "sha256:a39efc3ade8c1fb27c097fd112baf09d7fd70b8cb10ef1de4da6efbe066d381d", - "sha256:a4ee8000454ad4486fb9f28b0cab7fa1cd796fc36d639882d0b34109b5b3aec9", - "sha256:a7928283143a401e72a4fad43ecc85b35c27ae699cf5d54d39e1e72d97460e1d", - "sha256:adf4dd19d8875ac147bf926c727215a0faf21490b22c053db464e0bf0deb0485", - "sha256:ae8427a5e9062ba66fc2c62fb19a72276cf12c780e8db2b0956ea909c48acff5", - "sha256:b4c8b0bc5841e578d5fb32a16e0c305359b987b850a06964bd5a62739d688048", - "sha256:b84f29971f0ad4adaee391c6364e6f780d5aae7e9226d41964b26b49376071d0", - "sha256:c39c46d9e44447181cd502a35aad2bb178dbf1b1f86cf4db639d7b9614f837c6", - "sha256:cb2126603091902767d96bcb74093bd8b14982f41809f85c9b96e519c7e1dc41", - "sha256:dcef843f8de4e2ff5e35e96ec2a4abbdf403bd0f732ead127bd27e51f38ac298", - "sha256:e3447d9e074abf0e3cd85aef8131e01ab93f9f0e86654db7ac8a3f73c63706ce", - "sha256:f52010e0a44e3d8530437e7da38d11fb822acfb0d5b12e9cd5ba655509937ca0", - "sha256:f8196f739092a78e4f6b1b2172679ed3343c39c61a3e9d722ce6fcf1dac2824a" - ], - "markers": "python_version >= '3.6'", - "version": "==2.0.0" - }, "honcho": { "hashes": [ "sha256:a4d6e3a88a7b51b66351ecfc6e9d79d8f4b87351db9ad7e923f5632cc498122f", @@ -448,11 +436,11 @@ }, "idna": { "hashes": [ - "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff", - "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d" + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" ], "markers": "python_version >= '3.5'", - "version": "==3.3" + "version": "==3.4" }, "incremental": { "hashes": [ @@ -463,11 +451,11 @@ }, "ipython": { "hashes": [ - "sha256:468abefc45c15419e3c8e8c0a6a5c115b2127bafa34d7c641b1d443658793909", - "sha256:86df2cf291c6c70b5be6a7b608650420e89180c8ec74f376a34e2dc15c3400e7" + "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6", + "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e" ], "index": "pypi", - "version": "==7.32.0" + "version": "==7.34.0" }, "jedi": { "hashes": [ @@ -479,50 +467,68 @@ }, "matplotlib-inline": { "hashes": [ - "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee", - "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c" + "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311", + "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304" ], "markers": "python_version >= '3.5'", - "version": "==0.1.3" + "version": "==0.1.6" }, "msgpack": { "hashes": [ - "sha256:0d8c332f53ffff01953ad25131272506500b14750c1d0ce8614b17d098252fbc", - "sha256:1c58cdec1cb5fcea8c2f1771d7b5fec79307d056874f746690bd2bdd609ab147", - "sha256:2c3ca57c96c8e69c1a0d2926a6acf2d9a522b41dc4253a8945c4c6cd4981a4e3", - "sha256:2f30dd0dc4dfe6231ad253b6f9f7128ac3202ae49edd3f10d311adc358772dba", - "sha256:2f97c0f35b3b096a330bb4a1a9247d0bd7e1f3a2eba7ab69795501504b1c2c39", - "sha256:36a64a10b16c2ab31dcd5f32d9787ed41fe68ab23dd66957ca2826c7f10d0b85", - "sha256:3d875631ecab42f65f9dce6f55ce6d736696ced240f2634633188de2f5f21af9", - "sha256:40fb89b4625d12d6027a19f4df18a4de5c64f6f3314325049f219683e07e678a", - "sha256:47d733a15ade190540c703de209ffbc42a3367600421b62ac0c09fde594da6ec", - "sha256:494471d65b25a8751d19c83f1a482fd411d7ca7a3b9e17d25980a74075ba0e88", - "sha256:51fdc7fb93615286428ee7758cecc2f374d5ff363bdd884c7ea622a7a327a81e", - "sha256:6eef0cf8db3857b2b556213d97dd82de76e28a6524853a9beb3264983391dc1a", - "sha256:6f4c22717c74d44bcd7af353024ce71c6b55346dad5e2cc1ddc17ce8c4507c6b", - "sha256:73a80bd6eb6bcb338c1ec0da273f87420829c266379c8c82fa14c23fb586cfa1", - "sha256:89908aea5f46ee1474cc37fbc146677f8529ac99201bc2faf4ef8edc023c2bf3", - "sha256:8a3a5c4b16e9d0edb823fe54b59b5660cc8d4782d7bf2c214cb4b91a1940a8ef", - "sha256:96acc674bb9c9be63fa8b6dabc3248fdc575c4adc005c440ad02f87ca7edd079", - "sha256:973ad69fd7e31159eae8f580f3f707b718b61141838321c6fa4d891c4a2cca52", - "sha256:9b6f2d714c506e79cbead331de9aae6837c8dd36190d02da74cb409b36162e8a", - "sha256:9c0903bd93cbd34653dd63bbfcb99d7539c372795201f39d16fdfde4418de43a", - "sha256:9fce00156e79af37bb6db4e7587b30d11e7ac6a02cb5bac387f023808cd7d7f4", - "sha256:a598d0685e4ae07a0672b59792d2cc767d09d7a7f39fd9bd37ff84e060b1a996", - "sha256:b0a792c091bac433dfe0a70ac17fc2087d4595ab835b47b89defc8bbabcf5c73", - "sha256:bb87f23ae7d14b7b3c21009c4b1705ec107cb21ee71975992f6aca571fb4a42a", - "sha256:bf1e6bfed4860d72106f4e0a1ab519546982b45689937b40257cfd820650b920", - "sha256:c1ba333b4024c17c7591f0f372e2daa3c31db495a9b2af3cf664aef3c14354f7", - "sha256:c2140cf7a3ec475ef0938edb6eb363fa704159e0bf71dde15d953bacc1cf9d7d", - "sha256:c7e03b06f2982aa98d4ddd082a210c3db200471da523f9ac197f2828e80e7770", - "sha256:d02cea2252abc3756b2ac31f781f7a98e89ff9759b2e7450a1c7a0d13302ff50", - "sha256:da24375ab4c50e5b7486c115a3198d207954fe10aaa5708f7b65105df09109b2", - "sha256:e4c309a68cb5d6bbd0c50d5c71a25ae81f268c2dc675c6f4ea8ab2feec2ac4e2", - "sha256:f01b26c2290cbd74316990ba84a14ac3d599af9cebefc543d241a66e785cf17d", - "sha256:f201d34dc89342fabb2a10ed7c9a9aaaed9b7af0f16a5923f1ae562b31258dea", - "sha256:f74da1e5fcf20ade12c6bf1baa17a2dc3604958922de8dc83cbe3eff22e8b611" - ], - "version": "==1.0.3" + "sha256:002b5c72b6cd9b4bafd790f364b8480e859b4712e91f43014fe01e4f957b8467", + "sha256:0a68d3ac0104e2d3510de90a1091720157c319ceeb90d74f7b5295a6bee51bae", + "sha256:0df96d6eaf45ceca04b3f3b4b111b86b33785683d682c655063ef8057d61fd92", + "sha256:0dfe3947db5fb9ce52aaea6ca28112a170db9eae75adf9339a1aec434dc954ef", + "sha256:0e3590f9fb9f7fbc36df366267870e77269c03172d086fa76bb4eba8b2b46624", + "sha256:11184bc7e56fd74c00ead4f9cc9a3091d62ecb96e97653add7a879a14b003227", + "sha256:112b0f93202d7c0fef0b7810d465fde23c746a2d482e1e2de2aafd2ce1492c88", + "sha256:1276e8f34e139aeff1c77a3cefb295598b504ac5314d32c8c3d54d24fadb94c9", + "sha256:1576bd97527a93c44fa856770197dec00d223b0b9f36ef03f65bac60197cedf8", + "sha256:1e91d641d2bfe91ba4c52039adc5bccf27c335356055825c7f88742c8bb900dd", + "sha256:26b8feaca40a90cbe031b03d82b2898bf560027160d3eae1423f4a67654ec5d6", + "sha256:2999623886c5c02deefe156e8f869c3b0aaeba14bfc50aa2486a0415178fce55", + "sha256:2a2df1b55a78eb5f5b7d2a4bb221cd8363913830145fad05374a80bf0877cb1e", + "sha256:2bb8cdf50dd623392fa75525cce44a65a12a00c98e1e37bf0fb08ddce2ff60d2", + "sha256:2cc5ca2712ac0003bcb625c96368fd08a0f86bbc1a5578802512d87bc592fe44", + "sha256:35bc0faa494b0f1d851fd29129b2575b2e26d41d177caacd4206d81502d4c6a6", + "sha256:3c11a48cf5e59026ad7cb0dc29e29a01b5a66a3e333dc11c04f7e991fc5510a9", + "sha256:449e57cc1ff18d3b444eb554e44613cffcccb32805d16726a5494038c3b93dab", + "sha256:462497af5fd4e0edbb1559c352ad84f6c577ffbbb708566a0abaaa84acd9f3ae", + "sha256:4733359808c56d5d7756628736061c432ded018e7a1dff2d35a02439043321aa", + "sha256:48f5d88c99f64c456413d74a975bd605a9b0526293218a3b77220a2c15458ba9", + "sha256:49565b0e3d7896d9ea71d9095df15b7f75a035c49be733051c34762ca95bbf7e", + "sha256:4ab251d229d10498e9a2f3b1e68ef64cb393394ec477e3370c457f9430ce9250", + "sha256:4d5834a2a48965a349da1c5a79760d94a1a0172fbb5ab6b5b33cbf8447e109ce", + "sha256:4dea20515f660aa6b7e964433b1808d098dcfcabbebeaaad240d11f909298075", + "sha256:545e3cf0cf74f3e48b470f68ed19551ae6f9722814ea969305794645da091236", + "sha256:63e29d6e8c9ca22b21846234913c3466b7e4ee6e422f205a2988083de3b08cae", + "sha256:6916c78f33602ecf0509cc40379271ba0f9ab572b066bd4bdafd7434dee4bc6e", + "sha256:6a4192b1ab40f8dca3f2877b70e63799d95c62c068c84dc028b40a6cb03ccd0f", + "sha256:6c9566f2c39ccced0a38d37c26cc3570983b97833c365a6044edef3574a00c08", + "sha256:76ee788122de3a68a02ed6f3a16bbcd97bc7c2e39bd4d94be2f1821e7c4a64e6", + "sha256:7760f85956c415578c17edb39eed99f9181a48375b0d4a94076d84148cf67b2d", + "sha256:77ccd2af37f3db0ea59fb280fa2165bf1b096510ba9fe0cc2bf8fa92a22fdb43", + "sha256:81fc7ba725464651190b196f3cd848e8553d4d510114a954681fd0b9c479d7e1", + "sha256:85f279d88d8e833ec015650fd15ae5eddce0791e1e8a59165318f371158efec6", + "sha256:9667bdfdf523c40d2511f0e98a6c9d3603be6b371ae9a238b7ef2dc4e7a427b0", + "sha256:a75dfb03f8b06f4ab093dafe3ddcc2d633259e6c3f74bb1b01996f5d8aa5868c", + "sha256:ac5bd7901487c4a1dd51a8c58f2632b15d838d07ceedaa5e4c080f7190925bff", + "sha256:aca0f1644d6b5a73eb3e74d4d64d5d8c6c3d577e753a04c9e9c87d07692c58db", + "sha256:b17be2478b622939e39b816e0aa8242611cc8d3583d1cd8ec31b249f04623243", + "sha256:c1683841cd4fa45ac427c18854c3ec3cd9b681694caf5bff04edb9387602d661", + "sha256:c23080fdeec4716aede32b4e0ef7e213c7b1093eede9ee010949f2a418ced6ba", + "sha256:d5b5b962221fa2c5d3a7f8133f9abffc114fe218eb4365e40f17732ade576c8e", + "sha256:d603de2b8d2ea3f3bcb2efe286849aa7a81531abc52d8454da12f46235092bcb", + "sha256:e83f80a7fec1a62cf4e6c9a660e39c7f878f603737a0cdac8c13131d11d97f52", + "sha256:eb514ad14edf07a1dbe63761fd30f89ae79b42625731e1ccf5e1f1092950eaa6", + "sha256:eba96145051ccec0ec86611fe9cf693ce55f2a3ce89c06ed307de0e085730ec1", + "sha256:ed6f7b854a823ea44cf94919ba3f727e230da29feb4a99711433f25800cf747f", + "sha256:f0029245c51fd9473dc1aede1160b0a29f4a912e6b1dd353fa6d317085b219da", + "sha256:f5d869c18f030202eb412f08b28d2afeea553d6613aee89e200d7aca7ef01f5f", + "sha256:fb62ea4b62bfcb0b380d5680f9a4b3f9a2d166d9394e9bbd9666c0ee09a3645c", + "sha256:fcb8a47f43acc113e24e910399376f7277cf8508b27e5b88499f053de6b115a8" + ], + "version": "==1.0.4" }, "munkres": { "hashes": [ @@ -550,9 +556,10 @@ }, "persisting-theory": { "hashes": [ - "sha256:00ff7dcc8f481ff75c770ca5797d968e8725b6df1f77fe0cf7d20fa1e5790c0a" + "sha256:0f840fa22247bcaa514094da7f3b26c602359429ab12d2cd88be06b49a336290", + "sha256:73fe3ba1ea7ab67632a1c292fc5c9fa6d3ebfd0e2ad74defa56e316abf3c8d21" ], - "version": "==0.2.1" + "version": "==1.0" }, "pexpect": { "hashes": [ @@ -571,73 +578,76 @@ }, "prompt-toolkit": { "hashes": [ - "sha256:62291dad495e665fca0bda814e342c69952086afb0f4094d0893d357e5c78752", - "sha256:bd640f60e8cecd74f0dc249713d433ace2ddc62b65ee07f96d358e0b152b6ea7" + "sha256:9696f386133df0fc8ca5af4895afe5d78f5fcfe5258111c2a79a1c3e41ffa96d", + "sha256:9ada952c9d1787f52ff6d5f3484d0b4df8952787c087edf6a1f7c2cb1ea88148" ], "markers": "python_full_version >= '3.6.2'", - "version": "==3.0.29" + "version": "==3.0.31" }, "psycopg2-binary": { "hashes": [ - "sha256:01310cf4cf26db9aea5158c217caa92d291f0500051a6469ac52166e1a16f5b7", - "sha256:083a55275f09a62b8ca4902dd11f4b33075b743cf0d360419e2051a8a5d5ff76", - "sha256:090f3348c0ab2cceb6dfbe6bf721ef61262ddf518cd6cc6ecc7d334996d64efa", - "sha256:0a29729145aaaf1ad8bafe663131890e2111f13416b60e460dae0a96af5905c9", - "sha256:0c9d5450c566c80c396b7402895c4369a410cab5a82707b11aee1e624da7d004", - "sha256:10bb90fb4d523a2aa67773d4ff2b833ec00857f5912bafcfd5f5414e45280fb1", - "sha256:12b11322ea00ad8db8c46f18b7dfc47ae215e4df55b46c67a94b4effbaec7094", - "sha256:152f09f57417b831418304c7f30d727dc83a12761627bb826951692cc6491e57", - "sha256:15803fa813ea05bef089fa78835118b5434204f3a17cb9f1e5dbfd0b9deea5af", - "sha256:15c4e4cfa45f5a60599d9cec5f46cd7b1b29d86a6390ec23e8eebaae84e64554", - "sha256:183a517a3a63503f70f808b58bfbf962f23d73b6dccddae5aa56152ef2bcb232", - "sha256:1f14c8b0942714eb3c74e1e71700cbbcb415acbc311c730370e70c578a44a25c", - "sha256:1f6b813106a3abdf7b03640d36e24669234120c72e91d5cbaeb87c5f7c36c65b", - "sha256:280b0bb5cbfe8039205c7981cceb006156a675362a00fe29b16fbc264e242834", - "sha256:2d872e3c9d5d075a2e104540965a1cf898b52274a5923936e5bfddb58c59c7c2", - "sha256:2f9ffd643bc7349eeb664eba8864d9e01f057880f510e4681ba40a6532f93c71", - "sha256:3303f8807f342641851578ee7ed1f3efc9802d00a6f83c101d21c608cb864460", - "sha256:35168209c9d51b145e459e05c31a9eaeffa9a6b0fd61689b48e07464ffd1a83e", - "sha256:3a79d622f5206d695d7824cbf609a4f5b88ea6d6dab5f7c147fc6d333a8787e4", - "sha256:404224e5fef3b193f892abdbf8961ce20e0b6642886cfe1fe1923f41aaa75c9d", - "sha256:46f0e0a6b5fa5851bbd9ab1bc805eef362d3a230fbdfbc209f4a236d0a7a990d", - "sha256:47133f3f872faf28c1e87d4357220e809dfd3fa7c64295a4a148bcd1e6e34ec9", - "sha256:526ea0378246d9b080148f2d6681229f4b5964543c170dd10bf4faaab6e0d27f", - "sha256:53293533fcbb94c202b7c800a12c873cfe24599656b341f56e71dd2b557be063", - "sha256:539b28661b71da7c0e428692438efbcd048ca21ea81af618d845e06ebfd29478", - "sha256:57804fc02ca3ce0dbfbef35c4b3a4a774da66d66ea20f4bda601294ad2ea6092", - "sha256:63638d875be8c2784cfc952c9ac34e2b50e43f9f0a0660b65e2a87d656b3116c", - "sha256:6472a178e291b59e7f16ab49ec8b4f3bdada0a879c68d3817ff0963e722a82ce", - "sha256:68641a34023d306be959101b345732360fc2ea4938982309b786f7be1b43a4a1", - "sha256:6e82d38390a03da28c7985b394ec3f56873174e2c88130e6966cb1c946508e65", - "sha256:761df5313dc15da1502b21453642d7599d26be88bff659382f8f9747c7ebea4e", - "sha256:7af0dd86ddb2f8af5da57a976d27cd2cd15510518d582b478fbb2292428710b4", - "sha256:7b1e9b80afca7b7a386ef087db614faebbf8839b7f4db5eb107d0f1a53225029", - "sha256:874a52ecab70af13e899f7847b3e074eeb16ebac5615665db33bce8a1009cf33", - "sha256:887dd9aac71765ac0d0bac1d0d4b4f2c99d5f5c1382d8b770404f0f3d0ce8a39", - "sha256:8b344adbb9a862de0c635f4f0425b7958bf5a4b927c8594e6e8d261775796d53", - "sha256:8fc53f9af09426a61db9ba357865c77f26076d48669f2e1bb24d85a22fb52307", - "sha256:91920527dea30175cc02a1099f331aa8c1ba39bf8b7762b7b56cbf54bc5cce42", - "sha256:93cd1967a18aa0edd4b95b1dfd554cf15af657cb606280996d393dadc88c3c35", - "sha256:99485cab9ba0fa9b84f1f9e1fef106f44a46ef6afdeec8885e0b88d0772b49e8", - "sha256:9d29409b625a143649d03d0fd7b57e4b92e0ecad9726ba682244b73be91d2fdb", - "sha256:a29b3ca4ec9defec6d42bf5feb36bb5817ba3c0230dd83b4edf4bf02684cd0ae", - "sha256:a9e1f75f96ea388fbcef36c70640c4efbe4650658f3d6a2967b4cc70e907352e", - "sha256:accfe7e982411da3178ec690baaceaad3c278652998b2c45828aaac66cd8285f", - "sha256:adf20d9a67e0b6393eac162eb81fb10bc9130a80540f4df7e7355c2dd4af9fba", - "sha256:af9813db73395fb1fc211bac696faea4ca9ef53f32dc0cfa27e4e7cf766dcf24", - "sha256:b1c8068513f5b158cf7e29c43a77eb34b407db29aca749d3eb9293ee0d3103ca", - "sha256:bda845b664bb6c91446ca9609fc69f7db6c334ec5e4adc87571c34e4f47b7ddb", - "sha256:c381bda330ddf2fccbafab789d83ebc6c53db126e4383e73794c74eedce855ef", - "sha256:c3ae8e75eb7160851e59adc77b3a19a976e50622e44fd4fd47b8b18208189d42", - "sha256:d1c1b569ecafe3a69380a94e6ae09a4789bbb23666f3d3a08d06bbd2451f5ef1", - "sha256:def68d7c21984b0f8218e8a15d514f714d96904265164f75f8d3a70f9c295667", - "sha256:dffc08ca91c9ac09008870c9eb77b00a46b3378719584059c034b8945e26b272", - "sha256:e3699852e22aa68c10de06524a3721ade969abf382da95884e6a10ff798f9281", - "sha256:e847774f8ffd5b398a75bc1c18fbb56564cda3d629fe68fd81971fece2d3c67e", - "sha256:ffb7a888a047696e7f8240d649b43fb3644f14f0ee229077e7f6b9f9081635bd" + "sha256:02cde837df012fa5d579b9cf4bc8e1feb460f38d61f7a4ab4a919d55a9f6eeef", + "sha256:044b6ab68613de7ea1e63856627deea091bfea09dea5ab4f050b13250fd18cab", + "sha256:0a9465f0aa36480c8e7614991cbe8ca8aa16b0517c5398a49648ce345e446c19", + "sha256:0d8e0c9eec79fe1ae66691e06e3cc714da6fbd77981209bf32fa823c03dbaff8", + "sha256:0eae72190be519bf2629062eab7ac8d4ceec5bd132953cefa1596584d86964fe", + "sha256:15e0ac0ed8a85f6049e836e95ddee627766561c85be8d23f4b3edb6ddbaa7310", + "sha256:161dc52a617f0bb610a87d391cb2e77fe65b89ebfbd752f4f3217dde701ea196", + "sha256:181ac372a5a5308b4076933601a9b5f0cd139b389b0aa5e164786a2abbcdb978", + "sha256:1c22c59ab7d9dc110d409445f111f58556bf699b0548f3fc5176684a29c629c4", + "sha256:226f11be577b70a57f4910c0ee28591d4d9fcb3d455e966267179156ae2e0c41", + "sha256:24d627ed69e754c48dd142a914124858c600b4108c92546eb0ba822e63c0c6e2", + "sha256:2535f44b00f26f6af0e949c825e6aecb9adcb56c965c17af5b97137fb69f00c0", + "sha256:25e0517ad7ee3c5c3c69dbe3c1d95504c811e42f452b39a3505d0763b1f6caa0", + "sha256:2903bf90b1e6bfc9bbfc94a1db0b50ffa9830a0ca4c042fbc38d93890c02ce08", + "sha256:2f1ded23d17af0d738e7e78087f0b88a53228887845b1989b03af4dfd3fef703", + "sha256:30200b07779446760813eef06098ec6d084131e4365b4e023eb43100de758b11", + "sha256:33ac8b4754e6b6b21f3ee180da169d8526d91aee9408ec1fc573c16ab32b0207", + "sha256:34fd249275faa782c3a2016e86ac2330636ac58d731a1580e7d686e3976b9536", + "sha256:44f5dc9b4384bafca8429759ce76c8960ffc2b583fcad9e5dfb3e5f4894269e4", + "sha256:451550e0bb5889bbabbf92575a6d6eafced941cc28c86be6ae4667f81bf32d67", + "sha256:52383e932e6de5595963f9178cf2af7b9e1f3daacf5135b9c0e21aabbc5bf7c4", + "sha256:55137faec669c4277c5687c6ce7c1fbc4dece0e2f14256ee808f4a652f0a2170", + "sha256:576b9dfbcd154a0e8b5d9dae6316d037450e64a3b31df87dec71d88e2a2d5e5f", + "sha256:59a3010d566a48b919490a982f6807f68842686941dc12d568e129d9cd7703d6", + "sha256:61c6a258469c66412ae8358a0501df6ccb3bb48aa9c43b56624571ff9767f91d", + "sha256:63edc507f8cbfbb5903adb75bad8a99f9798981c854df9119dbebab2ec3ee0e1", + "sha256:65d5f4e70a2d3fbaa1349236968792611088f3f2dccead36c1626e1d183cc327", + "sha256:6a1618260a112a9c93504511f0b6254b4402a8c41b7130dc6d4c9e39aff3aa0c", + "sha256:704f1fcdc5b606b70563ea696c69bda90caee3a2f45ffc9cee60a901b394a79f", + "sha256:7751b11cd7f6b952b4b5ec5b93b5be9ce20faba786c18c25c354f5d8717a173c", + "sha256:7ad9d032dc1a31a86ca7b059f43554a049a2bfda8fe32d1492ad25f6686aff03", + "sha256:7b01d07006a0ac2216921b69a220b9f0974345d0b1b36efaeabdc7550b1cc4f8", + "sha256:7b47643c45e7619788c081d42e1d9d98c7c8a4933010a9967d097cc3c4c29f41", + "sha256:80ed219ce6cb21a5b53ead0edf5b56b6d23de4cb95389ac606f47670474f4816", + "sha256:82df4a8600999c4c0cb7d6614df1bbdb3c74732f63e79f78487893ffbed3d083", + "sha256:8660112e9127a019969a23c878e1b4a419e8a6427f9a9050c19830f152628c8a", + "sha256:89a86c2b35460700d04b4d6461153ab39ee85af5a5385acac9563a8310e6320a", + "sha256:8d7bc25729bb6d96b44f49ad78fde0e27a1a867cb205322b7e5f5b49e04d6f1f", + "sha256:97e4f3d9b17d12e7c00cb1c29c0040044135cd5146838da4274615dbe0baae78", + "sha256:a431deb6ffdfa551f7400b3a94fa4b964837e67f49e3c37aa26d90dc75970816", + "sha256:a6a2d3d75d8698dee492f4af7ad07606d0734e581edf9e2ce2f74b6fce90f42e", + "sha256:ae5b41dbf7731b838021923edfbe3b5ccdec84d92d5795f5229c0d08d32509d9", + "sha256:aff258af03dda9a990960a53759d10c3a9b936837c71fe2f3b581acd356b9121", + "sha256:b216a15e13f6e763db40ac3beb74b588650bc030d10a78fde182b88d273b82b5", + "sha256:b23b25b1243576b952689966205ef7d4285688068b966a1ca0e620bcb390d483", + "sha256:b896637091cde69d170a89253dde9aee814b25ca204b7e213fd0a6462e666638", + "sha256:d5f27b1d1b56470385faa2b2636fcb823e7ac5b5b734e0aa76b14637c66eb3b7", + "sha256:d6ba33f39436191ece7ea2b3d0b4dff00af71acd5c6e6f1d6b7563aa7286e9f2", + "sha256:d6c5e1df6f427d7a82606cf8f07cf3ba9fb3f366804b01e65f1f00f8df6b54f1", + "sha256:e02f77b620ad6b36564fe41980865436912e21a3b1138cdde175cf24afde1bc5", + "sha256:e72491d72870c3cb2f0d6f4174485533caec0e9ed7e717e2859b7cc7ff2ae1c4", + "sha256:ea8d5cd689fa7225d81ae0a049ba03e0165f4ed9ca083b19a405be9ad0b36845", + "sha256:eb5341fc7c53fdd95ac2415be77b1de854ab266488cff71174ebb007baf0e675", + "sha256:edf0a66ce9517365c7dcfed597894d8dd1f27b59e550b77a089054101435213b", + "sha256:f225784812b2b57d340f2eb0d2cebef989dcc82c288f5553e28ee9767c7c8344", + "sha256:f5fbb3b325c65010e04af206a9243e2df8606736c510c7f268aca6a93e5294a9", + "sha256:f78cafa25731e0b5aa16fe20bea1abf643d4e853f6bfb8a64421b06b878e2b88", + "sha256:fb639a0e65dce4a9cccbcbdd8ddd0c8c6ab10bca317b827a5c52ac3c3a4ad60a", + "sha256:ffb2f288f577a748cc23c65a818290755a4c2da1f87a40d7055b61a096d31e20" ], "index": "pypi", - "version": "==2.9.3" + "version": "==2.9.4" }, "ptyprocess": { "hashes": [ @@ -691,33 +701,33 @@ }, "pygments": { "hashes": [ - "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65", - "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a" + "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1", + "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42" ], - "markers": "python_version >= '3.5'", - "version": "==2.11.2" + "markers": "python_version >= '3.6'", + "version": "==2.13.0" }, "pyopenssl": { "hashes": [ - "sha256:660b1b1425aac4a1bea1d94168a85d99f0b3144c869dd4390d27629d0087f1bf", - "sha256:ea252b38c87425b64116f808355e8da644ef9b07e429398bfece610f893ee2e0" + "sha256:7a83b7b272dd595222d672f5ce29aa030f1fb837630ef229f62e72e395ce8968", + "sha256:b28437c9773bb6c6958628cf9c3bebe585de661dba6f63df17111966363dd15e" ], - "version": "==22.0.0" + "version": "==22.1.0" }, "pyparsing": { "hashes": [ - "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954", - "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06" + "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", + "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" ], "markers": "python_full_version >= '3.6.8'", - "version": "==3.0.8" + "version": "==3.0.9" }, "pytz": { "hashes": [ - "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7", - "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c" + "sha256:2c0784747071402c6e99f0bafdb7da0fa22645f06554c7ae06bf6358897e9c91", + "sha256:48ce799d83b6f8aab2020e369b627446696619e79645419610b9facd909b3174" ], - "version": "==2022.1" + "version": "==2022.4" }, "qrcode": { "hashes": [ @@ -728,19 +738,19 @@ }, "redis": { "hashes": [ - "sha256:0107dc8e98a4f1d1d4aa00100e044287f77121a1e6d2085545c4b7fa94a7a27f", - "sha256:4e95f4ec5f49e636efcf20061a5a9110c20852f607cfca6865c07aaa8a739ee2" + "sha256:a52d5694c9eb4292770084fa8c863f79367ca19884b329ab574d5cb2036b3e54", + "sha256:ddf27071df4adf3821c4f2ca59d67525c3a82e5f268bed97b813cb4fabf87880" ], "index": "pypi", - "version": "==4.2.2" + "version": "==4.3.4" }, "sentry-sdk": { "hashes": [ - "sha256:0a9eb20a84f4c17c08c57488d59fdad18669db71ebecb28fb0721423a33535f9", - "sha256:972c8fe9318a415b5cf35f687f568321472ef94b36806407c370ce9c88a67f2e" + "sha256:2469240f6190aaebcb453033519eae69cfe8cc602065b4667e18ee14fc1e35dc", + "sha256:4fbace9a763285b608c06f01a807b51acb35f6059da6a01236654e08b0ee81ff" ], "index": "pypi", - "version": "==1.5.10" + "version": "==1.9.10" }, "service-identity": { "hashes": [ @@ -751,11 +761,11 @@ }, "setuptools": { "hashes": [ - "sha256:26ead7d1f93efc0f8c804d9fafafbe4a44b179580a7105754b245155f9af05a8", - "sha256:47c7b0c0f8fc10eec4cf1e71c6fdadf8decaa74ffa087e68cd1c20db7ad6a592" + "sha256:1b6bdc6161661409c5f21508763dc63ab20a9ac2f8ba20029aaaa7fdb9118012", + "sha256:3050e338e5871e70c72983072fe34f6032ae1cdeeeb67338199c2f74e083a80e" ], "markers": "python_version >= '3.7'", - "version": "==62.1.0" + "version": "==65.4.1" }, "six": { "hashes": [ @@ -767,30 +777,30 @@ }, "sqlparse": { "hashes": [ - "sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae", - "sha256:48719e356bb8b42991bdbb1e8b83223757b93789c00910a616a071910ca4a64d" + "sha256:0323c0ec29cd52bceabc1b4d9d579e311f3e4961b98d174201d5622a23b85e34", + "sha256:69ca804846bb114d2ec380e4360a8a340db83f0ccf3afceeb1404df028f57268" ], "markers": "python_version >= '3.5'", - "version": "==0.4.2" + "version": "==0.4.3" }, "traitlets": { "hashes": [ - "sha256:059f456c5a7c1c82b98c2e8c799f39c9b8128f6d0d46941ee118daace9eb70c7", - "sha256:2d313cc50a42cd6c277e7d7dc8d4d7fedd06a2c215f78766ae7b1a66277e0033" + "sha256:3f2c4e435e271592fe4390f1746ea56836e3a080f84e7833f0f801d9613fec39", + "sha256:93663cc8236093d48150e2af5e2ed30fc7904a11a6195e21bab0408af4e6d6c8" ], "markers": "python_version >= '3.7'", - "version": "==5.1.1" + "version": "==5.4.0" }, "twisted": { "extras": [ "tls" ], "hashes": [ - "sha256:a047990f57dfae1e0bd2b7df2526d4f16dcdc843774dc108b78c52f2a5f13680", - "sha256:f9f7a91f94932477a9fc3b169d57f54f96c6e74a23d78d9ce54039a7f48928a2" + "sha256:8d4718d1e48dcc28933f8beb48dc71cfe77a125e37ad1eb7a3d0acc49baf6c99", + "sha256:e5b60de39f2d1da153fbe1874d885fe3fcbdb21fcc446fa759a53e8fc3513bed" ], - "markers": "python_full_version >= '3.6.7'", - "version": "==22.4.0" + "markers": "python_full_version >= '3.7.1'", + "version": "==22.8.0" }, "txaio": { "hashes": [ @@ -802,19 +812,19 @@ }, "typing-extensions": { "hashes": [ - "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42", - "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2" + "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", + "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" ], - "markers": "python_version >= '3.6'", - "version": "==4.1.1" + "markers": "python_version >= '3.7'", + "version": "==4.4.0" }, "urllib3": { "hashes": [ - "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", - "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e" + "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e", + "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4.0'", - "version": "==1.26.9" + "markers": "python_version >= '3.6'", + "version": "==1.26.12" }, "wcwidth": { "hashes": [ @@ -832,81 +842,81 @@ }, "whitenoise": { "hashes": [ - "sha256:08c42bc535f9777eea1a599289d9433f081921f97887eaf6f559446b2a080374", - "sha256:5a4aff543ee860fbe40d743e556adf92ccd41b7df45697cae074afdf657056b9" + "sha256:8e9c600a5c18bd17655ef668ad55b5edf6c24ce9bdca5bf607649ca4b1e8e2c2", + "sha256:8fa943c6d4cd9e27673b70c21a07b0aa120873901e099cd46cab40f7cc96d567" ], "index": "pypi", - "version": "==6.0.0" + "version": "==6.2.0" }, "wrapt": { "hashes": [ - "sha256:00108411e0f34c52ce16f81f1d308a571df7784932cc7491d1e94be2ee93374b", - "sha256:01f799def9b96a8ec1ef6b9c1bbaf2bbc859b87545efbecc4a78faea13d0e3a0", - "sha256:09d16ae7a13cff43660155383a2372b4aa09109c7127aa3f24c3cf99b891c330", - "sha256:14e7e2c5f5fca67e9a6d5f753d21f138398cad2b1159913ec9e9a67745f09ba3", - "sha256:167e4793dc987f77fd476862d32fa404d42b71f6a85d3b38cbce711dba5e6b68", - "sha256:1807054aa7b61ad8d8103b3b30c9764de2e9d0c0978e9d3fc337e4e74bf25faa", - "sha256:1f83e9c21cd5275991076b2ba1cd35418af3504667affb4745b48937e214bafe", - "sha256:21b1106bff6ece8cb203ef45b4f5778d7226c941c83aaaa1e1f0f4f32cc148cd", - "sha256:22626dca56fd7f55a0733e604f1027277eb0f4f3d95ff28f15d27ac25a45f71b", - "sha256:23f96134a3aa24cc50614920cc087e22f87439053d886e474638c68c8d15dc80", - "sha256:2498762814dd7dd2a1d0248eda2afbc3dd9c11537bc8200a4b21789b6df6cd38", - "sha256:28c659878f684365d53cf59dc9a1929ea2eecd7ac65da762be8b1ba193f7e84f", - "sha256:2eca15d6b947cfff51ed76b2d60fd172c6ecd418ddab1c5126032d27f74bc350", - "sha256:354d9fc6b1e44750e2a67b4b108841f5f5ea08853453ecbf44c81fdc2e0d50bd", - "sha256:36a76a7527df8583112b24adc01748cd51a2d14e905b337a6fefa8b96fc708fb", - "sha256:3a0a4ca02752ced5f37498827e49c414d694ad7cf451ee850e3ff160f2bee9d3", - "sha256:3a71dbd792cc7a3d772ef8cd08d3048593f13d6f40a11f3427c000cf0a5b36a0", - "sha256:3a88254881e8a8c4784ecc9cb2249ff757fd94b911d5df9a5984961b96113fff", - "sha256:47045ed35481e857918ae78b54891fac0c1d197f22c95778e66302668309336c", - "sha256:4775a574e9d84e0212f5b18886cace049a42e13e12009bb0491562a48bb2b758", - "sha256:493da1f8b1bb8a623c16552fb4a1e164c0200447eb83d3f68b44315ead3f9036", - "sha256:4b847029e2d5e11fd536c9ac3136ddc3f54bc9488a75ef7d040a3900406a91eb", - "sha256:59d7d92cee84a547d91267f0fea381c363121d70fe90b12cd88241bd9b0e1763", - "sha256:5a0898a640559dec00f3614ffb11d97a2666ee9a2a6bad1259c9facd01a1d4d9", - "sha256:5a9a1889cc01ed2ed5f34574c90745fab1dd06ec2eee663e8ebeefe363e8efd7", - "sha256:5b835b86bd5a1bdbe257d610eecab07bf685b1af2a7563093e0e69180c1d4af1", - "sha256:5f24ca7953f2643d59a9c87d6e272d8adddd4a53bb62b9208f36db408d7aafc7", - "sha256:61e1a064906ccba038aa3c4a5a82f6199749efbbb3cef0804ae5c37f550eded0", - "sha256:65bf3eb34721bf18b5a021a1ad7aa05947a1767d1aa272b725728014475ea7d5", - "sha256:6807bcee549a8cb2f38f73f469703a1d8d5d990815c3004f21ddb68a567385ce", - "sha256:68aeefac31c1f73949662ba8affaf9950b9938b712fb9d428fa2a07e40ee57f8", - "sha256:6915682f9a9bc4cf2908e83caf5895a685da1fbd20b6d485dafb8e218a338279", - "sha256:6d9810d4f697d58fd66039ab959e6d37e63ab377008ef1d63904df25956c7db0", - "sha256:729d5e96566f44fccac6c4447ec2332636b4fe273f03da128fff8d5559782b06", - "sha256:748df39ed634851350efa87690c2237a678ed794fe9ede3f0d79f071ee042561", - "sha256:763a73ab377390e2af26042f685a26787c402390f682443727b847e9496e4a2a", - "sha256:8323a43bd9c91f62bb7d4be74cc9ff10090e7ef820e27bfe8815c57e68261311", - "sha256:8529b07b49b2d89d6917cfa157d3ea1dfb4d319d51e23030664a827fe5fd2131", - "sha256:87fa943e8bbe40c8c1ba4086971a6fefbf75e9991217c55ed1bcb2f1985bd3d4", - "sha256:88236b90dda77f0394f878324cfbae05ae6fde8a84d548cfe73a75278d760291", - "sha256:891c353e95bb11abb548ca95c8b98050f3620a7378332eb90d6acdef35b401d4", - "sha256:89ba3d548ee1e6291a20f3c7380c92f71e358ce8b9e48161401e087e0bc740f8", - "sha256:8c6be72eac3c14baa473620e04f74186c5d8f45d80f8f2b4eda6e1d18af808e8", - "sha256:9a242871b3d8eecc56d350e5e03ea1854de47b17f040446da0e47dc3e0b9ad4d", - "sha256:9a3ff5fb015f6feb78340143584d9f8a0b91b6293d6b5cf4295b3e95d179b88c", - "sha256:9a5a544861b21e0e7575b6023adebe7a8c6321127bb1d238eb40d99803a0e8bd", - "sha256:9d57677238a0c5411c76097b8b93bdebb02eb845814c90f0b01727527a179e4d", - "sha256:9d8c68c4145041b4eeae96239802cfdfd9ef927754a5be3f50505f09f309d8c6", - "sha256:9d9fcd06c952efa4b6b95f3d788a819b7f33d11bea377be6b8980c95e7d10775", - "sha256:a0057b5435a65b933cbf5d859cd4956624df37b8bf0917c71756e4b3d9958b9e", - "sha256:a65bffd24409454b889af33b6c49d0d9bcd1a219b972fba975ac935f17bdf627", - "sha256:b0ed6ad6c9640671689c2dbe6244680fe8b897c08fd1fab2228429b66c518e5e", - "sha256:b21650fa6907e523869e0396c5bd591cc326e5c1dd594dcdccac089561cacfb8", - "sha256:b3f7e671fb19734c872566e57ce7fc235fa953d7c181bb4ef138e17d607dc8a1", - "sha256:b77159d9862374da213f741af0c361720200ab7ad21b9f12556e0eb95912cd48", - "sha256:bb36fbb48b22985d13a6b496ea5fb9bb2a076fea943831643836c9f6febbcfdc", - "sha256:d066ffc5ed0be00cd0352c95800a519cf9e4b5dd34a028d301bdc7177c72daf3", - "sha256:d332eecf307fca852d02b63f35a7872de32d5ba8b4ec32da82f45df986b39ff6", - "sha256:d808a5a5411982a09fef6b49aac62986274ab050e9d3e9817ad65b2791ed1425", - "sha256:d9bdfa74d369256e4218000a629978590fd7cb6cf6893251dad13d051090436d", - "sha256:db6a0ddc1282ceb9032e41853e659c9b638789be38e5b8ad7498caac00231c23", - "sha256:debaf04f813ada978d7d16c7dfa16f3c9c2ec9adf4656efdc4defdf841fc2f0c", - "sha256:f0408e2dbad9e82b4c960274214af533f856a199c9274bd4aff55d4634dedc33", - "sha256:f2f3bc7cd9c9fcd39143f11342eb5963317bd54ecc98e3650ca22704b69d9653" + "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3", + "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b", + "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4", + "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2", + "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656", + "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3", + "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff", + "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310", + "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a", + "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57", + "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069", + "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383", + "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe", + "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87", + "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d", + "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b", + "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907", + "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f", + "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0", + "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28", + "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1", + "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853", + "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc", + "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3", + "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3", + "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164", + "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1", + "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c", + "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1", + "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7", + "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1", + "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320", + "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed", + "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1", + "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248", + "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c", + "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456", + "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77", + "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef", + "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1", + "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7", + "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86", + "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4", + "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d", + "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d", + "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8", + "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5", + "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471", + "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00", + "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68", + "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3", + "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d", + "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735", + "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d", + "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569", + "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7", + "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59", + "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5", + "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb", + "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b", + "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f", + "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462", + "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015", + "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==1.14.0" + "version": "==1.14.1" }, "zope.interface": { "hashes": [ @@ -976,26 +986,49 @@ }, "asgiref": { "hashes": [ - "sha256:2f8abc20f7248433085eda803936d98992f1343ddb022065779f37c5da0181d0", - "sha256:88d59c13d634dcffe0510be048210188edd79aeccb6a6c9028cdad6f31d730a9" + "sha256:1d2880b792ae8757289136f1db2b7b99100ce959b2aa57fd69dab783d05afac4", + "sha256:4a29362a6acebe09bf1d6640db38c1dc3d9217c68e6f9f6204d72667fc19a424" ], "index": "pypi", - "version": "==3.5.0" + "version": "==3.5.2" }, "babel": { "hashes": [ - "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9", - "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0" + "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51", + "sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.9.1" + "markers": "python_version >= '3.6'", + "version": "==2.10.3" + }, + "backports.zoneinfo": { + "hashes": [ + "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf", + "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328", + "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546", + "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6", + "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570", + "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9", + "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7", + "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987", + "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722", + "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582", + "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc", + "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b", + "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1", + "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08", + "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac", + "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2" + ], + "markers": "python_version < '3.9'", + "version": "==0.2.1" }, "certifi": { "hashes": [ - "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872", - "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569" + "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14", + "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382" ], - "version": "==2021.10.8" + "markers": "python_version >= '3.6'", + "version": "==2022.9.24" }, "cfgv": { "hashes": [ @@ -1007,50 +1040,50 @@ }, "charset-normalizer": { "hashes": [ - "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597", - "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df" + "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845", + "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f" ], - "markers": "python_version >= '3'", - "version": "==2.0.12" + "markers": "python_version >= '3.6'", + "version": "==2.1.1" }, "click": { "hashes": [ - "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e", - "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72" + "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", + "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" ], "markers": "python_version >= '3.7'", - "version": "==8.1.2" + "version": "==8.1.3" }, "colorama": { "hashes": [ - "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b", - "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2" + "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da", + "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==0.4.4" + "version": "==0.4.5" }, "distlib": { "hashes": [ - "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b", - "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579" + "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46", + "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e" ], - "version": "==0.3.4" + "version": "==0.3.6" }, "django": { "hashes": [ - "sha256:07c8638e7a7f548dc0acaaa7825d84b7bd42b10e8d22268b3d572946f1e9b687", - "sha256:4e8177858524417563cc0430f29ea249946d831eacb0068a1455686587df40b5" + "sha256:26dc24f99c8956374a054bcbf58aab8dc0cad2e6ac82b0fe036b752c00eee793", + "sha256:b8d843714810ab88d59344507d4447be8b2cf12a49031363b6eed9f1b9b2280f" ], "index": "pypi", - "version": "==4.0.4" + "version": "==4.1.2" }, "django-debug-toolbar": { "hashes": [ - "sha256:644bbd5c428d3283aa9115722471769cac1bec189edf3a0c855fd8ff870375a9", - "sha256:6b633b6cfee24f232d73569870f19aa86c819d750e7f3e833f2344a9eb4b4409" + "sha256:1e3acad24e3d351ba45c6fa2072e4164820307332a776b16c9f06d1f89503465", + "sha256:80de23066b624d3970fd296cf02d61988e5d56c31aa0dc4a428970b46e2883a8" ], "index": "pypi", - "version": "==3.2.4" + "version": "==3.7.0" }, "docutils": { "hashes": [ @@ -1062,51 +1095,51 @@ }, "filelock": { "hashes": [ - "sha256:9cd540a9352e432c7246a48fe4e8712b10acb1df2ad1f30e8c070b82ae1fed85", - "sha256:f8314284bfffbdcfa0ff3d7992b023d4c628ced6feb957351d4c48d059f56bc0" + "sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc", + "sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4" ], "markers": "python_version >= '3.7'", - "version": "==3.6.0" + "version": "==3.8.0" }, "identify": { "hashes": [ - "sha256:3f3244a559290e7d3deb9e9adc7b33594c1bc85a9dd82e0f1be519bf12a1ec17", - "sha256:5f06b14366bd1facb88b00540a1de05b69b310cbc2654db3c7e07fa3a4339323" + "sha256:6c32dbd747aa4ceee1df33f25fed0b0f6e0d65721b15bd151307ff7056d50245", + "sha256:b276db7ec52d7e89f5bc4653380e33054ddc803d25875952ad90b0f012cbcdaa" ], "markers": "python_version >= '3.7'", - "version": "==2.4.12" + "version": "==2.5.6" }, "idna": { "hashes": [ - "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff", - "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d" + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" ], "markers": "python_version >= '3.5'", - "version": "==3.3" + "version": "==3.4" }, "imagesize": { "hashes": [ - "sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c", - "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d" + "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", + "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.3.0" + "version": "==1.4.1" }, "importlib-metadata": { "hashes": [ - "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6", - "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539" + "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab", + "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43" ], "markers": "python_version < '3.10'", - "version": "==4.11.3" + "version": "==5.0.0" }, "jinja2": { "hashes": [ - "sha256:539835f51a74a69f41b848a9645dbdc35b4f20a3b601e2d9a7e22947b15ff119", - "sha256:640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9" + "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", + "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" ], "markers": "python_version >= '3.7'", - "version": "==3.1.1" + "version": "==3.1.2" }, "livereload": { "hashes": [ @@ -1162,10 +1195,11 @@ }, "nodeenv": { "hashes": [ - "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b", - "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7" + "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e", + "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b" ], - "version": "==1.6.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", + "version": "==1.7.0" }, "packaging": { "hashes": [ @@ -1177,45 +1211,46 @@ }, "platformdirs": { "hashes": [ - "sha256:7535e70dfa32e84d4b34996ea99c5e432fa29a708d0f4e394bbcb2a8faa4f16d", - "sha256:bcae7cab893c2d310a711b70b24efb93334febe65f8de776ee320b517471e227" + "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788", + "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19" ], "markers": "python_version >= '3.7'", - "version": "==2.5.1" + "version": "==2.5.2" }, "pre-commit": { "hashes": [ - "sha256:02226e69564ebca1a070bd1f046af866aa1c318dbc430027c50ab832ed2b73f2", - "sha256:5d445ee1fa8738d506881c5d84f83c62bb5be6b2838e32207433647e8e5ebe10" + "sha256:51a5ba7c480ae8072ecdb6933df22d2f812dc897d5fe848778116129a681aac7", + "sha256:a978dac7bc9ec0bcee55c18a277d553b0f419d259dadb4b9418ff2d00eb43959" ], "index": "pypi", - "version": "==2.18.1" + "version": "==2.20.0" }, "pygments": { "hashes": [ - "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65", - "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a" + "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1", + "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42" ], - "markers": "python_version >= '3.5'", - "version": "==2.11.2" + "markers": "python_version >= '3.6'", + "version": "==2.13.0" }, "pyparsing": { "hashes": [ - "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954", - "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06" + "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", + "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" ], "markers": "python_full_version >= '3.6.8'", - "version": "==3.0.8" + "version": "==3.0.9" }, "pytz": { "hashes": [ - "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7", - "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c" + "sha256:2c0784747071402c6e99f0bafdb7da0fa22645f06554c7ae06bf6358897e9c91", + "sha256:48ce799d83b6f8aab2020e369b627446696619e79645419610b9facd909b3174" ], - "version": "==2022.1" + "version": "==2022.4" }, "pyyaml": { "hashes": [ + "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf", "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293", "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b", "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57", @@ -1227,26 +1262,32 @@ "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287", "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513", "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0", + "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782", "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0", "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92", "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f", "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2", "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc", + "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1", "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c", "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86", "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4", "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c", "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34", "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b", + "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d", "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c", "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb", + "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7", "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737", "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3", "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d", + "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358", "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53", "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78", "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803", "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a", + "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f", "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174", "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5" ], @@ -1255,11 +1296,11 @@ }, "requests": { "hashes": [ - "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61", - "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d" + "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983", + "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==2.27.1" + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==2.28.1" }, "selenium": { "hashes": [ @@ -1271,11 +1312,11 @@ }, "setuptools": { "hashes": [ - "sha256:26ead7d1f93efc0f8c804d9fafafbe4a44b179580a7105754b245155f9af05a8", - "sha256:47c7b0c0f8fc10eec4cf1e71c6fdadf8decaa74ffa087e68cd1c20db7ad6a592" + "sha256:1b6bdc6161661409c5f21508763dc63ab20a9ac2f8ba20029aaaa7fdb9118012", + "sha256:3050e338e5871e70c72983072fe34f6032ae1cdeeeb67338199c2f74e083a80e" ], "markers": "python_version >= '3.7'", - "version": "==62.1.0" + "version": "==65.4.1" }, "six": { "hashes": [ @@ -1294,11 +1335,11 @@ }, "sphinx": { "hashes": [ - "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6", - "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226" + "sha256:5b10cb1022dac8c035f75767799c39217a05fc0fe2d6fe5597560d38e44f0363", + "sha256:7abf6fabd7b58d0727b7317d5e2650ef68765bbe0ccb63c8795fa8683477eaa2" ], "index": "pypi", - "version": "==4.5.0" + "version": "==5.2.3" }, "sphinx-autobuild": { "hashes": [ @@ -1374,11 +1415,11 @@ }, "sqlparse": { "hashes": [ - "sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae", - "sha256:48719e356bb8b42991bdbb1e8b83223757b93789c00910a616a071910ca4a64d" + "sha256:0323c0ec29cd52bceabc1b4d9d579e311f3e4961b98d174201d5622a23b85e34", + "sha256:69ca804846bb114d2ec380e4360a8a340db83f0ccf3afceeb1404df028f57268" ], "markers": "python_version >= '3.5'", - "version": "==0.4.2" + "version": "==0.4.3" }, "toml": { "hashes": [ @@ -1390,74 +1431,44 @@ }, "tornado": { "hashes": [ - "sha256:0a00ff4561e2929a2c37ce706cb8233b7907e0cdc22eab98888aca5dd3775feb", - "sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c", - "sha256:1e8225a1070cd8eec59a996c43229fe8f95689cb16e552d130b9793cb570a288", - "sha256:20241b3cb4f425e971cb0a8e4ffc9b0a861530ae3c52f2b0434e6c1b57e9fd95", - "sha256:25ad220258349a12ae87ede08a7b04aca51237721f63b1808d39bdb4b2164558", - "sha256:33892118b165401f291070100d6d09359ca74addda679b60390b09f8ef325ffe", - "sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791", - "sha256:3447475585bae2e77ecb832fc0300c3695516a47d46cefa0528181a34c5b9d3d", - "sha256:34ca2dac9e4d7afb0bed4677512e36a52f09caa6fded70b4e3e1c89dbd92c326", - "sha256:3e63498f680547ed24d2c71e6497f24bca791aca2fe116dbc2bd0ac7f191691b", - "sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4", - "sha256:6196a5c39286cc37c024cd78834fb9345e464525d8991c21e908cc046d1cc02c", - "sha256:61b32d06ae8a036a6607805e6720ef00a3c98207038444ba7fd3d169cd998910", - "sha256:6286efab1ed6e74b7028327365cf7346b1d777d63ab30e21a0f4d5b275fc17d5", - "sha256:65d98939f1a2e74b58839f8c4dab3b6b3c1ce84972ae712be02845e65391ac7c", - "sha256:66324e4e1beede9ac79e60f88de548da58b1f8ab4b2f1354d8375774f997e6c0", - "sha256:6c77c9937962577a6a76917845d06af6ab9197702a42e1346d8ae2e76b5e3675", - "sha256:70dec29e8ac485dbf57481baee40781c63e381bebea080991893cd297742b8fd", - "sha256:7250a3fa399f08ec9cb3f7b1b987955d17e044f1ade821b32e5f435130250d7f", - "sha256:748290bf9112b581c525e6e6d3820621ff020ed95af6f17fedef416b27ed564c", - "sha256:7da13da6f985aab7f6f28debab00c67ff9cbacd588e8477034c0652ac141feea", - "sha256:8f959b26f2634a091bb42241c3ed8d3cedb506e7c27b8dd5c7b9f745318ddbb6", - "sha256:9de9e5188a782be6b1ce866e8a51bc76a0fbaa0e16613823fc38e4fc2556ad05", - "sha256:a48900ecea1cbb71b8c71c620dee15b62f85f7c14189bdeee54966fbd9a0c5bd", - "sha256:b87936fd2c317b6ee08a5741ea06b9d11a6074ef4cc42e031bc6403f82a32575", - "sha256:c77da1263aa361938476f04c4b6c8916001b90b2c2fdd92d8d535e1af48fba5a", - "sha256:cb5ec8eead331e3bb4ce8066cf06d2dfef1bfb1b2a73082dfe8a161301b76e37", - "sha256:cc0ee35043162abbf717b7df924597ade8e5395e7b66d18270116f8745ceb795", - "sha256:d14d30e7f46a0476efb0deb5b61343b1526f73ebb5ed84f23dc794bdb88f9d9f", - "sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32", - "sha256:d3d20ea5782ba63ed13bc2b8c291a053c8d807a8fa927d941bd718468f7b950c", - "sha256:d3f7594930c423fd9f5d1a76bee85a2c36fd8b4b16921cae7e965f22575e9c01", - "sha256:dcef026f608f678c118779cd6591c8af6e9b4155c44e0d1bc0c87c036fb8c8c4", - "sha256:e0791ac58d91ac58f694d8d2957884df8e4e2f6687cdf367ef7eb7497f79eaa2", - "sha256:e385b637ac3acaae8022e7e47dfa7b83d3620e432e3ecb9a3f7f58f150e50921", - "sha256:e519d64089b0876c7b467274468709dadf11e41d65f63bba207e04217f47c085", - "sha256:e7229e60ac41a1202444497ddde70a48d33909e484f96eb0da9baf8dc68541df", - "sha256:ed3ad863b1b40cd1d4bd21e7498329ccaece75db5a5bf58cd3c9f130843e7102", - "sha256:f0ba29bafd8e7e22920567ce0d232c26d4d47c8b5cf4ed7b562b5db39fa199c5", - "sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68", - "sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5" + "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca", + "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72", + "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23", + "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8", + "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b", + "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9", + "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13", + "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75", + "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac", + "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e", + "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b" ], "markers": "python_version > '2.7'", - "version": "==6.1" + "version": "==6.2" }, "urllib3": { "hashes": [ - "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", - "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e" + "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e", + "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4.0'", - "version": "==1.26.9" + "markers": "python_version >= '3.6'", + "version": "==1.26.12" }, "virtualenv": { "hashes": [ - "sha256:e617f16e25b42eb4f6e74096b9c9e37713cf10bf30168fb4a739f3fa8f898a3a", - "sha256:ef589a79795589aada0c1c5b319486797c03b67ac3984c48c669c0e4f50df3a5" + "sha256:227ea1b9994fdc5ea31977ba3383ef296d7472ea85be9d6732e42a91c04e80da", + "sha256:d07dfc5df5e4e0dbc92862350ad87a36ed505b978f6c39609dc489eadd5b0d27" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==20.14.1" + "markers": "python_version >= '3.6'", + "version": "==20.16.5" }, "zipp": { "hashes": [ - "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad", - "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099" + "sha256:3a7af91c3db40ec72dd9d154ae18e008c69efe8ca88dde4f9a731bb82fe2f9eb", + "sha256:972cfa31bc2fedd3fa838a51e9bc7e64b7fb725a8c00e7431554311f180e9980" ], "markers": "python_version >= '3.7'", - "version": "==3.8.0" + "version": "==3.9.0" } } } diff --git a/tabbycat/settings/core.py b/tabbycat/settings/core.py index bc013d486e7..a4f63b065bd 100644 --- a/tabbycat/settings/core.py +++ b/tabbycat/settings/core.py @@ -40,14 +40,8 @@ os.path.join(BASE_DIR, 'locale'), ] -# Languages that should be available in the switcher +# Add custom languages not provided by Django EXTRA_LANG_INFO = { - 'ms': { - 'bidi': False, - 'code': 'ms', - 'name': 'Malay', - 'name_local': 'Bahasa Melayu', #unicode codepoints here - }, 'tzl': { # Use code for Talossan; can't use proper reserved code... # Talossan is a constructed language, without native speakers, @@ -58,7 +52,7 @@ }, } -# Add custom languages not provided by Django +# Languages that should be available in the switcher import django.conf.locale LANG_INFO = dict(django.conf.locale.LANG_INFO, **EXTRA_LANG_INFO) django.conf.locale.LANG_INFO = LANG_INFO From 03b99f9783a81e1880b734cee68cbb7f1c8ae322 Mon Sep 17 00:00:00 2001 From: Daan Koning Date: Mon, 10 Oct 2022 01:47:39 +0200 Subject: [PATCH 007/255] Added support for Unicode 12.0 and 13.0 emoji (#2143) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added the unicode 12.0 emoji * Added Unicode 13 emojis * Fixed EOF errors * Shortened ice (🧊) emoji name * Removed duplicate names * Trim whitespace Co-authored-by: Étienne Beaulé --- tabbycat/participants/emoji.py | 122 ++++++++++++++++++++++++++++++++- 1 file changed, 121 insertions(+), 1 deletion(-) diff --git a/tabbycat/participants/emoji.py b/tabbycat/participants/emoji.py index 27691a179a6..325474672b8 100644 --- a/tabbycat/participants/emoji.py +++ b/tabbycat/participants/emoji.py @@ -1355,7 +1355,7 @@ def populate_code_names_from_emoji(teams, overwrite=True): ("🦃", True , "Turkey"), ("🦀", True , "Crab"), ("🦂", True , "Scorpion"), - ("🧀", True , "Mouse Trap"), + ("🧀", True , "Cheese"), ("🌭", False, "Hot Dog"), # dull ("🌮", True , "Taco"), ("🌯", True , "Burrito"), @@ -1570,6 +1570,126 @@ def populate_code_names_from_emoji(teams, overwrite=True): ("🧼", True , "Soap"), ("🧽", True , "Fun sponge"), ("🧯", True , "Anti-fire Can"), + + # Unicode Version 12.0 + ("🥱", True , "Yawning Face"), + ("🤎", False, "Brown Heart"), # too similar to another + ("🤍", False, "White Heart"), # too similar to another + ("🤏", True , "Pinching Hand"), + ("🦾", False, "Mechanical Arm"), # potentially offensive + ("🦿", False, "Mechanical Leg"), # potentially offensive + ("🦻", False, "Ear with Hearing Aid"), # potentially offensive + ("🧏", False, "Deaf Person"), # potentially offensive + ("🧍", False, "Person Standing"), # too similar to another + ("🧎", False, "Person Kneeling"), # dull + ("🦧", False, "Orangutan"), # potentially offensive + ("🦮", True , "Guide Dog"), + ("🦥", True , "Lazy Tree Dog"), + ("🦦", True , "Water Dog"), + ("🦨", True , "Stinky dog"), + ("🦩", True , "Pink Dog"), + ("🧄", False, "Garlic"), # dull + ("🧅", False, "Onion"), # dull + ("🧇", True , "Waffle"), + ("🧆", True , "Falafel"), + ("🧈", True , "Butter"), + ("🦪", True , "Oyster"), + ("🧃", True , "Beverage Box"), + ("🧉", False, "Mate"), # too similar to another + ("🧊", True , "Cold Cuboid"), + ("🛕", False, "Hindu Temple"), # potentially offensive + ("🦽", False, "Manual Wheelchair"), # potentially offensive + ("🦼", False, "Motorized Wheelchair"), # potentially offensive + ("🛺", True , "Auto Rickshaw"), + ("🪂", True , "Parachute"), + ("🪐", True , "Ringed Planet"), + ("🤿", True , "Diving Mask"), + ("🪀", False, "Yo-Yo"), # too similar to another + ("🪁", True , "Kite"), + ("🦺", True , "Safety Vest"), + ("🥻", True , "Sari"), + ("🩱", False, "One-Piece Swimsuit"), # potentially offensive + ("🩲", False, "Briefs"), # potentially offensive + ("🩳", True , "Shorts"), + ("🩰", True , "Ballet Shoes"), + ("🪕", True , "Banjo"), + ("🪔", False, "Diya Lamp"), # dull + ("🪓", True , "Axe"), + ("🦯", False, "White Cane"), # potentially offensive + ("🩸", False, "Drop of Blood"), # potentially offensive + ("🩹", False, "Adhesive Bandage"), # dull + ("🩺", True , "Stethoscope"), + ("🪑", True , "Chair"), + ("🪒", True , "Razor"), + ("🟠", False, "Orange Circle"), # dull + ("🟡", False, "Yellow Circle"), # dull + ("🟢", False, "Green Circle"), # dull + ("🟣", False, "Purple Circle"), # dull + ("🟤", False, "Brown Circle"), # dull + ("🟥", False, "Red Square"), # dull + ("🟧", False, "Orange Square"), # dull + ("🟨", False, "Yellow Square"), # dull + ("🟩", False, "Green Square"), # dull + ("🟦", False, "Blue Square"), # dull + ("🟪", False, "Purple Square"), # dull + ("🟫", False, "Brown Square"), # dull + + # Unicode Version 13.0 + ("🥲", False, "Smiling Face with Tear"), # too similar to another + ("🥸", True , "Disguised Face"), + ("🤌", False, "Pinched Fingers"), # potentially offensive + ("🫀", True , "Anatomical Heart"), + ("🫁", True , "Lungs"), + ("🥷", True , "Ninja"), + ("🫂", True , "People Hugging"), + ("🦬", True , "Bison"), + ("🦣", True , "Mammoth"), + ("🦫", True , "Beaver"), + ("🦤", True , "Dodo"), + ("🪶", True , "Feather"), + ("🦭", True , "Seal"), + ("🪲", False, "Beetle"), # potentially offensive + ("🪳", False, "Cockroach"), # potentially offensive + ("🪰", False, "Fly"), # potentially offensive + ("🪱", False, "Worm"), # potentially offensive + ("🪴", True , "Potted Plant"), + ("🫐", True , "Blueberries"), + ("🫒", True , "Olive"), + ("🫑", True , "Bell Pepper"), + ("🫓", True , "Flatbread"), + ("🫔", True , "Tamale"), + ("🫕", False, "Fondue"), # too similar to another + ("🫖", True , "Teapot"), + ("🧋", True , "Bubble Tea"), + ("🪨", True , "Rock"), + ("🪵", True , "Wood"), + ("🛖", False, "Hut"), # potentially offensive + ("🛻", True , "Pickup Truck"), + ("🛼", True , "Roller Skate"), + ("🪄", True , "Magic Wand"), + ("🪅", True , "Piñata"), + ("🪆", True , "Nesting Dolls"), + ("🪡", False, "Sewing Needle"), # dull + ("🪢", True , "Knot"), + ("🩴", True , "Thong Sandal"), + ("🪖", False, "Military Helmet"), # potentially offensive + ("🪗", True , "Accordion"), + ("🪘", True , "Long Drum"), + ("🪙", True , "Coin"), + ("🪃", True , "Boomerang"), + ("🪚", True , "Carpentry Saw"), + ("🪛", True , "Screwdriver"), + ("🪝", True , "Hook"), + ("🪜", True , "Ladder"), + ("🛗", False, "Elevator"), # dull + ("🪞", False, "Mirror"), # dull + ("🪟", False, "Window"), # dull + ("🪠", True , "Plunger"), + ("🪤", True , "Mouse Trap"), + ("🪣", True , "Bucket"), + ("🪥", True , "Toothbrush"), + ("🪦", False, "Headstone"), # potentially offensive + ("🪧", False, "Placard"), # dull ) # The field choices are the permissible values From fc0deb7219863ffb64364a386189cb837ad964d5 Mon Sep 17 00:00:00 2001 From: Daan Koning Date: Mon, 10 Oct 2022 03:03:25 +0200 Subject: [PATCH 008/255] Fixed dead links and changed 2020 to 2022 (#2145) --- .github/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/README.md b/.github/README.md index bf12f4828cb..60c8a83776a 100644 --- a/.github/README.md +++ b/.github/README.md @@ -13,7 +13,7 @@
-Tabbycat is a draw tabulation system for British Parliamentary and a variety of two-team formats. It was used at Australs 2010 and 2012–2019, EUDC 2018, WUDC 2019–2020 and many other tournaments of all sizes and formats. To see an example of a post-tournament website, have a look at the [WUDC 2020 tab website](https://wudc2020.herokuapp.com). +Tabbycat is a draw tabulation system for British Parliamentary and a variety of two-team formats. It was used at Australs 2010 and 2012–2019, EUDC 2018, WUDC 2019–2022 and many other tournaments of all sizes and formats. To see an example of a post-tournament website, have a look at the [WUDC 2022 tab website](https://wudc2022.calicotab.com/wudc/). **Want to try it out?** The best way to trial Tabbycat is just to launch a new site, as described [below](#%EF%B8%8F-installation)). It takes just a few clicks, requires no technical background, and you can always deploy a fresh copy when you're ready to run your tournament. From 9418e9755ad7593d773308969590c5514ff2031d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Mon, 10 Oct 2022 00:05:07 -0300 Subject: [PATCH 009/255] Changelog: Add new emoji 67 new included emoji! --- .github/CHANGELOG.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/CHANGELOG.rst b/.github/CHANGELOG.rst index 0701e28a9ba..9c8ecae9aa3 100644 --- a/.github/CHANGELOG.rst +++ b/.github/CHANGELOG.rst @@ -6,6 +6,8 @@ Change Log --------- *Release date: TBD* +- Added new emoji from Unicode 12 and 13. Thank you to Daan Koning for the pull request! (`#2143 `_) + 2.7.0 (Pixie-bob) --------- From 001cfc73ca17a35af36dde4fd14f5573a6b48ddf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Fri, 28 Oct 2022 16:48:20 -0400 Subject: [PATCH 010/255] Sort base scores numerically --- tabbycat/adjfeedback/tables.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tabbycat/adjfeedback/tables.py b/tabbycat/adjfeedback/tables.py index 2e393041d23..dffe9c08f4c 100644 --- a/tabbycat/adjfeedback/tables.py +++ b/tabbycat/adjfeedback/tables.py @@ -63,11 +63,13 @@ def add_base_score_columns(self, adjudicators, editable=False): 'modal': adj.id, 'class': 'edit-base-score', 'tooltip': _("Click to edit base score"), + 'sort': adj.base_score, } for adj in adjudicators] else: test_data = [{ 'text': self.get_formatted_adj_score(adj.base_score), 'tooltip': _("Assigned base score"), + 'sort': adj.base_score, } for adj in adjudicators] self.add_column(test_header, test_data) From 0f7f0f50f9950943c89551af218dc517939a64c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 29 Oct 2022 16:27:07 -0400 Subject: [PATCH 011/255] Fix checkboxes overlapping with table header Fixes #2149 --- tabbycat/templates/scss/modules/tables.scss | 4 ++++ tabbycat/templates/tables/CheckCell.vue | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/tabbycat/templates/scss/modules/tables.scss b/tabbycat/templates/scss/modules/tables.scss index fcfb3aacf42..094b1ba9a7b 100644 --- a/tabbycat/templates/scss/modules/tables.scss +++ b/tabbycat/templates/scss/modules/tables.scss @@ -213,6 +213,10 @@ thead, } } +.table-check { + padding-left: 1.25rem; +} + //------------------------------------------------------------------------------ // MOBILE TWEAKS //------------------------------------------------------------------------------ diff --git a/tabbycat/templates/tables/CheckCell.vue b/tabbycat/templates/tables/CheckCell.vue index a5e6db8ad07..22e99ca17ba 100644 --- a/tabbycat/templates/tables/CheckCell.vue +++ b/tabbycat/templates/tables/CheckCell.vue @@ -5,7 +5,7 @@ -
+
From da2852e99e7cdb7d8b7d1cf8d2e0ab82282f62b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 30 Oct 2022 20:26:01 -0400 Subject: [PATCH 012/255] API: Create endpoints for Preformed Panels This commit creates a viewset for the creation and handling of preformed panels, attempting to use the polymorphism of AdjudicatorAllocation be- tween Debates and Preformed Panels. In addition to the regular CRUD methods, DELETE and PUT have been added to the list endpoint, allowing for all preformed panels for the round to be deleted, and for anticipated (blank) panels to be added, respectively. --- tabbycat/api/serializers.py | 61 ++++++++++++++++++++++++++++--------- tabbycat/api/urls.py | 9 ++++++ tabbycat/api/views.py | 51 +++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+), 15 deletions(-) diff --git a/tabbycat/api/serializers.py b/tabbycat/api/serializers.py index eef95e9517d..dd02069496a 100644 --- a/tabbycat/api/serializers.py +++ b/tabbycat/api/serializers.py @@ -14,7 +14,7 @@ from rest_framework.relations import Hyperlink from rest_framework.settings import api_settings -from adjallocation.models import DebateAdjudicator +from adjallocation.models import DebateAdjudicator, PreformedPanel from adjfeedback.models import AdjudicatorFeedback, AdjudicatorFeedbackQuestion from breakqual.models import BreakCategory, BreakingTeam from draw.models import Debate, DebateTeam @@ -881,6 +881,21 @@ class SpeakerStandingsSerializer(BaseStandingsSerializer): speaker = fields.AnonymisingHyperlinkedTournamentRelatedField(view_name='api-speaker-detail', anonymous_source='anonymous') +class DebateAdjudicatorSerializer(serializers.Serializer): + adjudicators = Adjudicator.objects.all() + chair = fields.TournamentHyperlinkedRelatedField(view_name='api-adjudicator-detail', queryset=adjudicators) + panellists = fields.TournamentHyperlinkedRelatedField(many=True, view_name='api-adjudicator-detail', queryset=adjudicators) + trainees = fields.TournamentHyperlinkedRelatedField(many=True, view_name='api-adjudicator-detail', queryset=adjudicators) + + def save(self, **kwargs): + aa = kwargs['debate'].adjudicators + aa.chair = self.validated_data.get('chair') + aa.panellists = self.validated_data.get('panellists') + aa.trainees = self.validated_data.get('trainees') + aa.save() + return aa + + class RoundPairingSerializer(serializers.ModelSerializer): class DebateTeamSerializer(serializers.ModelSerializer): team = fields.TournamentHyperlinkedRelatedField(view_name='api-team-detail', queryset=Team.objects.all()) @@ -889,20 +904,6 @@ class Meta: model = DebateTeam fields = ('team', 'side') - class DebateAdjudicatorSerializer(serializers.Serializer): - adjudicators = Adjudicator.objects.all() - chair = fields.TournamentHyperlinkedRelatedField(view_name='api-adjudicator-detail', queryset=adjudicators) - panellists = fields.TournamentHyperlinkedRelatedField(many=True, view_name='api-adjudicator-detail', queryset=adjudicators) - trainees = fields.TournamentHyperlinkedRelatedField(many=True, view_name='api-adjudicator-detail', queryset=adjudicators) - - def save(self, **kwargs): - aa = kwargs['debate'].adjudicators - aa.chair = self.validated_data.get('chair') - aa.panellists = self.validated_data.get('panellists') - aa.trainees = self.validated_data.get('trainees') - aa.save() - return aa - url = fields.RoundHyperlinkedIdentityField(view_name='api-pairing-detail', lookup_url_kwarg='debate_pk') venue = fields.TournamentHyperlinkedRelatedField(view_name='api-venue-detail', queryset=Venue.objects.all(), required=False, allow_null=True) @@ -1285,3 +1286,33 @@ def update(self, instance, validated_data): instance.discarded = validated_data['discarded'] instance.save() return instance + + +class PreformedPanelSerializer(serializers.ModelSerializer): + url = fields.RoundHyperlinkedIdentityField(view_name='api-preformedpanel-detail', lookup_url_kwarg='debate_pk') + adjudicators = DebateAdjudicatorSerializer(required=False, allow_null=True) + + class Meta: + model = PreformedPanel + exclude = ('round',) + + def create(self, validated_data): + adjs_data = validated_data.pop('adjudicators', None) + + validated_data['round'] = self.context['round'] + debate = super().create(validated_data) + + if adjs_data is not None: + adjudicators = self.DebateAdjudicatorSerializer() + adjudicators._validated_data = adjs_data + adjudicators.save(debate=debate) + + return debate + + def update(self, instance, validated_data): + if validated_data.get('adjudicators', None) is not None: + adjudicators = self.DebateAdjudicatorSerializer() + adjudicators._validated_data = validated_data.pop('adjudicators') + adjudicators.save(debate=instance) + + return super().update(instance, validated_data) diff --git a/tabbycat/api/urls.py b/tabbycat/api/urls.py index e95537fc43f..a0fd55605a7 100644 --- a/tabbycat/api/urls.py +++ b/tabbycat/api/urls.py @@ -92,6 +92,15 @@ ])), ])), ])), + + path('/preformed-panels', include([ + path('', + views.PreformedPanelViewSet.as_view({'get': 'list', 'post': 'create', 'delete': 'delete_all', 'put': 'add_blank'}), + name='api-preformedpanel-list'), + path('/', + views.PreformedPanelViewSet.as_view(detail_methods), + name='api-preformedpanel-detail'), + ])), ])), ])), diff --git a/tabbycat/api/views.py b/tabbycat/api/views.py index ee53ec379e0..88c9542eaeb 100644 --- a/tabbycat/api/views.py +++ b/tabbycat/api/views.py @@ -15,6 +15,8 @@ from rest_framework.views import APIView from rest_framework.viewsets import GenericViewSet, ModelViewSet +from adjallocation.models import PreformedPanel +from adjallocation.preformed.anticipated import calculate_anticipated_draw from adjfeedback.models import AdjudicatorFeedbackQuestion from availability.models import RoundAvailability from breakqual.models import BreakCategory @@ -656,3 +658,52 @@ def delete(self, request, *args, **kwargs): # Delete class of availabilities self.get_queryset().delete() return Response(status=204) + + +class PreformedPanelViewSet(RoundAPIMixin, AdministratorAPIMixin, ModelViewSet): + + serializer_class = serializers.PreformedPanelSerializer + lookup_url_kwarg = 'debate_pk' + + @property + def debate(self): + if hasattr(self, '_debate'): + return self._debate + + self._debate = get_object_or_404(PreformedPanel, pk=self.kwargs.get('debate_pk')) + return self._debate + + def perform_create(self, serializer): + serializer.save(**{'debate': self.debate}) + + def lookup_kwargs(self): + kwargs = super().lookup_kwargs() + kwargs['debate'] = self.debate + return kwargs + + def get_serializer_context(self): + context = super().get_serializer_context() + context['debate'] = self.debate + return context + + def get_queryset(self): + return super().get_queryset().select_related('round', 'round__tournament').prefetch_related( + 'debateteam_set', 'debateteam_set__team', 'debateteam_set__team__tournament', + 'preformedpaneladjudicator_set', 'preformedpaneladjudicator_set__adjudicator', + 'preformedpaneladjudicator_set__adjudicator__tournament', + ) + + def delete_all(self, request, *args, **kwargs): + self.get_queryset().delete() + return Response(status=204) # No content + + def add_blank(self, request, *args, **kwargs): + """Add blank preformed panel objects with calculated bracket and liveness for round.""" + for i, (bracket_min, bracket_max, liveness) in enumerate(calculate_anticipated_draw(self.round), start=1): + PreformedPanel.objects.update_or_create(round=self.round, room_rank=i, defaults={ + 'bracket_max': bracket_max, + 'bracket_min': bracket_min, + 'liveness': liveness, + }) + + return self.get(request, *args, **kwargs) From d05341390375dd757e8d03f7c1706b43eee63515 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Mon, 31 Oct 2022 17:52:56 -0400 Subject: [PATCH 013/255] API: Add documentation for preformed panels --- docs/api-schema.yml | 215 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 214 insertions(+), 1 deletion(-) diff --git a/docs/api-schema.yml b/docs/api-schema.yml index 1c323430600..f53c289aae6 100644 --- a/docs/api-schema.yml +++ b/docs/api-schema.yml @@ -9,7 +9,7 @@ info: license: name: Tabbycat url: 'https://tabbycat.readthedocs.io/en/stable/about/licence.html' - version: 1.2.0 + version: 1.3.0 security: - Token: [] paths: @@ -2679,6 +2679,152 @@ paths: required: true schema: type: string + '/v1/tournaments/{tournament_slug}/rounds/{round_seq}/preformed-panels': + get: + operationId: v1_tournaments_rounds_preformedpanel_list + description: List preformed panels in the round + parameters: + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/PreformedPanel' + tags: + - v1 + - preformed + post: + operationId: v1_tournaments_rounds_preformedpanel_create + description: Create a preformed panel for the round + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/PreformedPanel' + tags: + - v1 + - preformed + requestBody: + $ref: '#/components/requestBodies/PreformedPanel' + delete: + operationId : v1_tournaments_rounds_preformedpanel_delete_all + description: Delete all preformed panels in the round + responses: + '204': + description: 'All preformed panels have been deleted' + tags: + - v1 + - preformed + put: + operationId: v1_tournaments_rounds_preformedpanel_put + description: Add blank preformed panels for the round + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/PreformedPanel' + tags: + - v1 + - preformed + parameters: + - name: round_seq + in: path + required: true + schema: + type: integer + - name: tournament_slug + in: path + required: true + schema: + type: string + '/v1/tournaments/{tournament_slug}/rounds/{round_seq}/preformed-panels/{debate_pk}': + get: + operationId: v1_tournaments_rounds_preformedpanel_read + description: Retrieve a preformed panel of the round + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/PreformedPanel' + tags: + - v1 + - preformed + post: + operationId: v1_tournaments_rounds_preformedpanel_update + description: Modify a preformed panel + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/PreformedPanel' + tags: + - v1 + - preformed + requestBody: + $ref: '#/components/requestBodies/PreformedPanel' + delete: + operationId: v1_tournaments_rounds_preformedpanel_delete + description: Delete a preformed panel + responses: + '204': + description: '' + tags: + - v1 + - preformed + patch: + operationId: v1_tournaments_rounds_preformedpanel_partial_update + description: Update a preformed panel + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/PreformedPanel' + tags: + - v1 + - preformed + requestBody: + $ref: '#/components/requestBodies/PreformedPanel' + parameters: + - name: debate_pk + in: path + required: true + schema: + type: integer + - name: round_seq + in: path + required: true + schema: + type: integer + - name: tournament_slug + in: path + required: true + schema: + type: string servers: - url: 'https://{server}/api' variables: @@ -2800,6 +2946,12 @@ components: schema: $ref: '#/components/schemas/DebateResult' required: true + PreformedPanel: + content: + application/json: + schema: + $ref: '#/components/schemas/PreformedPanel' + required: true PartialBreakingTeam: content: application/json: @@ -4444,3 +4596,64 @@ components: - t - w - null + PreformedPanel: + required: + - teams + type: object + properties: + url: + title: Url + readOnly: true + type: string + format: uri + id: + title: ID + readOnly: true + type: integer + adjudicators: + title: Adjudicators + type: object + nullable: true + required: + - chair + - panellists + - trainees + properties: + chair: + title: Chair + type: string + format: uri + nullable: true + panellists: + title: Panellists + type: array + items: + type: string + format: uri + trainees: + title: Trainees + type: array + items: + type: string + format: uri + bracket_min: + title: Minimum Bracket + description: >- + Estimate of the lowest bracket for which this panel might be + type: number + bracket_max: + title: Maximum Bracket + description: >- + Estimate of the highest bracket for which this panel might be + type: number + room_rank: + title: room rank + description: Sequential number of panel, not used in any algorithms + type: integer + importance: + title: importance + type: integer + liveness: + title: Liveness + description: Number of categories this room is expected to be live for + type: integer From 2de41a46da3599f9d17a3b8f267ba39d766f2d4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Fri, 18 Nov 2022 23:12:36 -0400 Subject: [PATCH 014/255] Change column for team emoji to code name Instead of showing the name of the team emoji in the Database area, show the emoji and the code name, as these may be different, yet the emoji and custom code name are often seen together. Fixes #2161 --- tabbycat/participants/admin.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tabbycat/participants/admin.py b/tabbycat/participants/admin.py index 249db11c07c..c298a8ba7f1 100644 --- a/tabbycat/participants/admin.py +++ b/tabbycat/participants/admin.py @@ -118,7 +118,7 @@ def formfield_for_foreignkey(self, db_field, request, **kwargs): @admin.register(Team) class TeamAdmin(ModelAdmin): form = TeamForm - list_display = ('long_name', 'short_name', 'emoji', 'institution', + list_display = ('long_name', 'short_name', 'emoji_code', 'institution', 'tournament') search_fields = ('reference', 'short_name', 'code_name', 'institution__name', 'institution__code', 'tournament__name') @@ -132,6 +132,10 @@ def get_queryset(self, request): # can't use select_related, because TeamManager always puts a select_related on this return super().get_queryset(request).select_related('tournament') + def emoji_code(self, obj): + return "%s %s" % (obj.emoji or '-', obj.code_name) + emoji_code.short_description = _("Emoji & Code") + def formfield_for_choice_field(self, db_field, request, **kwargs): if db_field.name == 'emoji' and kwargs.get("initial") is None: kwargs["initial"] = pick_unused_emoji()[0] From 0d133d732127f4c6c4dc38833f562ee541a4279c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Fri, 18 Nov 2022 23:14:50 -0400 Subject: [PATCH 015/255] Unset round sequence and draw status as editable The Database area Rounds list has the sequence and draw status editable right in the list. Editing sequences is liable to fail with a 500 error as the sequence has a uniqueness contraint. The draw status is dangerous to have modifyable in a list as the status can change through the use of Tabbycat in ways that aren't immediately reflected. If the page is saved when out-of-date, the statuses get reverted, leading to confusion which can lead to data loss. Fixes BACKEND-9MV --- tabbycat/tournaments/admin.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tabbycat/tournaments/admin.py b/tabbycat/tournaments/admin.py index 2fe990b2c47..741e1ecbd32 100644 --- a/tabbycat/tournaments/admin.py +++ b/tabbycat/tournaments/admin.py @@ -24,8 +24,7 @@ class RoundAdmin(ModelAdmin): list_display = ('name', 'tournament', 'seq', 'abbreviation', 'stage', 'draw_type', 'draw_status', 'feedback_weight', 'silent', 'motions_released', 'starts_at', 'completed') - list_editable = ('seq', 'draw_status', 'feedback_weight', 'silent', - 'motions_released', 'completed') + list_editable = ('feedback_weight', 'silent', 'motions_released', 'completed') list_filter = ('tournament', ) search_fields = ('name', 'seq', 'abbreviation', 'stage', 'draw_type', 'draw_status') ordering = ('tournament__slug', 'seq') From 206765cb685364c679291c1ed66e681c5761c5b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 19 Nov 2022 12:06:05 -0400 Subject: [PATCH 016/255] Remove "mark debate as status" dropdown actions This commit removes the status dropdown actions from the database area for Debates as that field is modifiable more intuitively with the drop- downs available on each row. --- tabbycat/draw/admin.py | 27 ++------------------------- 1 file changed, 2 insertions(+), 25 deletions(-) diff --git a/tabbycat/draw/admin.py b/tabbycat/draw/admin.py index bb95b1919bb..40a5a30c476 100644 --- a/tabbycat/draw/admin.py +++ b/tabbycat/draw/admin.py @@ -1,6 +1,6 @@ from django.contrib import admin from django.db.models import Prefetch -from django.utils.translation import gettext_lazy, ngettext +from django.utils.translation import ngettext from adjallocation.models import DebateAdjudicator from utils.admin import ModelAdmin, TabbycatModelAdminFieldsMixin @@ -49,6 +49,7 @@ class DebateAdmin(ModelAdmin): list_editable = ('result_status', 'sides_confirmed') inlines = (DebateTeamInline, DebateAdjudicatorInline) raw_id_fields = ('venue',) + actions = ('mark_as_sides_confirmed', 'mark_as_sides_not_confirmed') def get_queryset(self, request): return super().get_queryset(request).select_related( @@ -58,28 +59,6 @@ def get_queryset(self, request): 'venue__venuecategory_set', ) - actions = list() - for value, verbose_name in Debate.STATUS_CHOICES: - - def _make_set_result_status(value, verbose_name): # noqa: N805 - def _set_result_status(modeladmin, request, queryset): - count = queryset.update(result_status=value) - for obj in queryset: - modeladmin.log_change(request, obj, [{"changed": {"fields": ["result_status"]}}]) - message = ngettext("%(count)d debate had its status set to %(status)s.", - "%(count)d debates had their statuses set to %(status)s.", count) % { - 'count': count, 'status': verbose_name} - modeladmin.message_user(request, message) - - # so that they look different to DebateAdmin - _set_result_status.__name__ = "set_result_status_%s" % verbose_name.lower() - _set_result_status.short_description = gettext_lazy("Set result status to " - "%(status)s") % {'status': verbose_name} - return _set_result_status - - actions.append(_make_set_result_status(value, verbose_name)) - del value, verbose_name # for fail-fast - def mark_as_sides_confirmed(self, request, queryset): updated = queryset.update(sides_confirmed=True) for obj in queryset: @@ -101,5 +80,3 @@ def mark_as_sides_not_confirmed(self, request, queryset): updated, ) % {'count': updated} self.message_user(request, message) - - actions.extend(['mark_as_sides_confirmed', 'mark_as_sides_not_confirmed']) From 63a998c88aa546defd72dc45a1cd598f38ea2aa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 19 Nov 2022 12:43:08 -0400 Subject: [PATCH 017/255] Use new @admin.display decorator for DB pages Custom columns and actions in the Database area were translated by setting an attribute to the methods previously, but a new decorator was created to be more pythonic. This commit changes all the instances of .short_description to the new decorator. It further de-duplicated a field and marked missing text for translation. --- tabbycat/adjfeedback/admin.py | 12 +++++------- tabbycat/checkins/admin.py | 2 ++ tabbycat/draw/admin.py | 6 ++++-- tabbycat/notifications/admin.py | 2 +- tabbycat/participants/admin.py | 10 +++++----- tabbycat/results/admin.py | 6 +----- tabbycat/utils/admin.py | 18 +++++++++--------- 7 files changed, 27 insertions(+), 29 deletions(-) diff --git a/tabbycat/adjfeedback/admin.py b/tabbycat/adjfeedback/admin.py index d830e6a856f..0333db710fb 100644 --- a/tabbycat/adjfeedback/admin.py +++ b/tabbycat/adjfeedback/admin.py @@ -1,8 +1,7 @@ from django import forms from django.contrib import admin, messages from django.db.models import Prefetch -from django.utils.translation import gettext, ngettext -from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext, gettext_lazy as _, ngettext from django_better_admin_arrayfield.admin.mixins import DynamicArrayMixin from draw.models import DebateTeam @@ -76,9 +75,11 @@ class AdjudicatorFeedbackAnswerAdmin(ModelAdmin): ) raw_id_fields = ('feedback',) + @admin.display(description=_("Target")) def get_target(self, obj): return obj.feedback.adjudicator.name + @admin.display(description=_("Source")) def get_source(self, obj): if obj.feedback.source_team and obj.feedback.source_adjudicator: return "" @@ -87,16 +88,13 @@ def get_source(self, obj): elif obj.feedback.source_adjudicator: return obj.feedback.source_adjudicator.adjudicator.name + @admin.display(description=_("Feedback timestamp and version")) def get_feedback_description(self, obj): return gettext("%(timestamp)s (version %(version)s)") % { 'timestamp': obj.feedback.timestamp.isoformat(), 'version': obj.feedback.version, } - get_target.short_description = _("Target") - get_source.short_description = _("Source") - get_feedback_description.short_description = _("Feedback timestamp and version") - class BaseAdjudicatorFeedbackAnswerInline(admin.TabularInline): model = None # Must be set by subclasses @@ -154,12 +152,12 @@ def get_queryset(self, request): Prefetch('source_adjudicator__debate__debateteam_set', queryset=DebateTeam.objects.select_related('team')), ) + @admin.display(description=_("Source")) def get_source(self, obj): if obj.source_team and obj.source_adjudicator: return "" else: return obj.source_team or obj.source_adjudicator - get_source.short_description = _("Source") # Dynamically generate inline tables for different answer types inlines = [] diff --git a/tabbycat/checkins/admin.py b/tabbycat/checkins/admin.py index ee54d9a79e8..45751319eb6 100644 --- a/tabbycat/checkins/admin.py +++ b/tabbycat/checkins/admin.py @@ -1,4 +1,5 @@ from django.contrib import admin +from django.utils.translation import gettext_lazy as _ from utils.admin import ModelAdmin @@ -41,5 +42,6 @@ def polymorphic_ctype(self, obj): def get_queryset(self, request): return super().get_queryset(request).select_related(None).prefetch_related('identifier__polymorphic_ctype') + @admin.display(description=_("Checkin time")) def checkin_time(self, obj): return obj.time.strftime("%d %b %Y %H:%M:%S.%f") diff --git a/tabbycat/draw/admin.py b/tabbycat/draw/admin.py index bb95b1919bb..5df2373b3f9 100644 --- a/tabbycat/draw/admin.py +++ b/tabbycat/draw/admin.py @@ -1,6 +1,6 @@ from django.contrib import admin from django.db.models import Prefetch -from django.utils.translation import gettext_lazy, ngettext +from django.utils.translation import gettext_lazy as _, ngettext from adjallocation.models import DebateAdjudicator from utils.admin import ModelAdmin, TabbycatModelAdminFieldsMixin @@ -73,13 +73,14 @@ def _set_result_status(modeladmin, request, queryset): # so that they look different to DebateAdmin _set_result_status.__name__ = "set_result_status_%s" % verbose_name.lower() - _set_result_status.short_description = gettext_lazy("Set result status to " + _set_result_status.short_description = _("Set result status to " "%(status)s") % {'status': verbose_name} return _set_result_status actions.append(_make_set_result_status(value, verbose_name)) del value, verbose_name # for fail-fast + @admin.display(description=_("Mark sides as confirmed")) def mark_as_sides_confirmed(self, request, queryset): updated = queryset.update(sides_confirmed=True) for obj in queryset: @@ -91,6 +92,7 @@ def mark_as_sides_confirmed(self, request, queryset): ) % {'count': updated} self.message_user(request, message) + @admin.display(description=_("Mark sides as not confirmed")) def mark_as_sides_not_confirmed(self, request, queryset): updated = queryset.update(sides_confirmed=False) for obj in queryset: diff --git a/tabbycat/notifications/admin.py b/tabbycat/notifications/admin.py index 8b07fc9c39f..365d8c4c93b 100644 --- a/tabbycat/notifications/admin.py +++ b/tabbycat/notifications/admin.py @@ -7,9 +7,9 @@ def precise_timestamp_isoformat(model, field_name): + @admin.display(description=model._meta.get_field(field_name).verbose_name) def precise_timestamp(self, obj): return timezone.localtime(getattr(obj, field_name)).isoformat() - precise_timestamp.short_description = model._meta.get_field(field_name).verbose_name return precise_timestamp diff --git a/tabbycat/participants/admin.py b/tabbycat/participants/admin.py index c298a8ba7f1..a2838a98261 100644 --- a/tabbycat/participants/admin.py +++ b/tabbycat/participants/admin.py @@ -132,9 +132,9 @@ def get_queryset(self, request): # can't use select_related, because TeamManager always puts a select_related on this return super().get_queryset(request).select_related('tournament') + @admin.display(description=_("Emoji & Code")) def emoji_code(self, obj): return "%s %s" % (obj.emoji or '-', obj.code_name) - emoji_code.short_description = _("Emoji & Code") def formfield_for_choice_field(self, db_field, request, **kwargs): if db_field.name == 'emoji' and kwargs.get("initial") is None: @@ -147,6 +147,7 @@ def formfield_for_manytomany(self, db_field, request, **kwargs): kwargs["initial"] = BreakCategory.objects.filter(is_general=True) return super().formfield_for_manytomany(db_field, request, **kwargs) + @admin.display(description=_("Delete URL Key")) def delete_url_key(self, request, queryset): num_speakers = Speaker.objects.filter(team__in=queryset).update(url_key=None) for obj in queryset: @@ -156,8 +157,8 @@ def delete_url_key(self, request, queryset): "%(count)d speakers had their URL keys removed.", num_speakers) % {'count': num_speakers} self.message_user(request, message) - delete_url_key.short_description = _("Delete URL key") + @admin.display(description=_("Reset emoji")) def assign_emoji(self, request, queryset): count = queryset.update(emoji=None) for tournament, teams in groupby(queryset.select_related('tournament').order_by('tournament_id'), lambda t: t.tournament): @@ -170,8 +171,8 @@ def assign_emoji(self, request, queryset): "%(count)d teams had their emojis reset.", count) % {'count': count} self.message_user(request, message) - assign_emoji.short_description = _("Reset emoji") + @admin.display(description=_("Reset code name")) def assign_code_names(self, request, queryset): count = populate_code_names_from_emoji(queryset, overwrite=True) for obj in queryset: @@ -182,7 +183,6 @@ def assign_code_names(self, request, queryset): "%(count)d teams had their code names reset.", count) % {'count': count} self.message_user(request, message) - assign_code_names.short_description = _("Reset code name") # ============================================================================== @@ -233,6 +233,7 @@ def get_queryset(self, request): # can't use select_related, because TeamManager always puts a select_related on this return super().get_queryset(request).select_related('tournament') + @admin.display(description=_("Delete URL Key")) def delete_url_key(self, request, queryset): updated = queryset.update(url_key=None) for obj in queryset: @@ -243,4 +244,3 @@ def delete_url_key(self, request, queryset): updated, ) % {'count': updated} self.message_user(request, message) - delete_url_key.short_description = _("Delete URL key") diff --git a/tabbycat/results/admin.py b/tabbycat/results/admin.py index 4b36da8bc2e..8a8a20b3acc 100644 --- a/tabbycat/results/admin.py +++ b/tabbycat/results/admin.py @@ -32,6 +32,7 @@ def get_queryset(self, request): 'submitter', 'confirmer', 'debate__round__tournament').prefetch_related( Prefetch('debate__debateteam_set', queryset=DebateTeam.objects.select_related('team'))) + @admin.display(description=_("Resave results")) def resave_ballots(self, request, queryset): q = queryset.select_related('debate__round__tournament').order_by('tournament_id') count = q.count() @@ -44,7 +45,6 @@ def resave_ballots(self, request, queryset): "Resaved results for %(count)d ballot submission.", "Resaved results for %(count)d ballot submissions.", count) % {'count': count}) - resave_ballots.short_description = _("Resave results") # ============================================================================== @@ -144,7 +144,3 @@ def get_queryset(self, request): Prefetch('ballot_submission__debate__debateteam_set', queryset=DebateTeam.objects.select_related('team')), ).annotate(speaker_name=Subquery(speaker_person.values('speaker__name'))) - - def get_speaker_name(self, obj): - return obj.speaker_name - get_speaker_name.short_description = "Speaker" diff --git a/tabbycat/utils/admin.py b/tabbycat/utils/admin.py index 5741e4eb9ce..deb91899425 100644 --- a/tabbycat/utils/admin.py +++ b/tabbycat/utils/admin.py @@ -1,5 +1,6 @@ from django.contrib import admin from django.contrib.admin.options import get_content_type_for_model +from django.utils.translation import gettext_lazy as _ from .misc import get_ip_address @@ -40,44 +41,43 @@ def log_deletion(self, request, object, object_repr, message=[]): class TabbycatModelAdminFieldsMixin: + @admin.display(description=_("Round")) def get_round(self, obj): if hasattr(obj, 'debate'): return obj.debate.round.name else: return obj.debate_team.debate.round.name - get_round.short_description = 'Round' + @admin.display(description=_("Team")) def get_team(self, obj): return obj.debate_team.team - get_team.short_description = 'Team' + @admin.display(description=_("Speaker")) def get_speaker_name(self, obj): return obj.speaker.name - get_speaker_name.short_description = 'Speaker' + @admin.display(description=_("Tournament")) def get_tournament(self, obj): if hasattr(obj, 'round'): return obj.round.tournament else: return obj.debate.round.tournament - get_tournament.short_description = 'Tournament' - + @admin.display(description=_("Side")) def get_team_side(self, obj): return obj.debate_team.side - get_team_side.short_description = 'Side' + @admin.display(description=_("Motion")) def get_motion_ref(self, obj): return obj.motion.reference - get_motion_ref.short_description = 'Motion' + @admin.display(description=_("Confirmed")) def get_confirmed(self, obj): return obj.ballot_submission.confirmed - get_confirmed.short_description = 'Confirmed' + @admin.display(description=_("Adjudicator")) def get_adj_name(self, obj): return obj.debate_adjudicator.adjudicator.name - get_adj_name.short_description = "Adjudicator" def custom_titled_filter(title): From fc1a92af96d0d3ffc8cb49b9724e87cb5ec18a52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 19 Nov 2022 12:50:36 -0400 Subject: [PATCH 018/255] Show model name for checkin events type To be more user-friendly than the ContentType object name, and is better translatable. --- tabbycat/checkins/admin.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tabbycat/checkins/admin.py b/tabbycat/checkins/admin.py index 45751319eb6..5fd10fd0296 100644 --- a/tabbycat/checkins/admin.py +++ b/tabbycat/checkins/admin.py @@ -33,11 +33,13 @@ class VenueIdentifierAdmin(ModelAdmin): @admin.register(Event) class CheckinEventAdmin(ModelAdmin): - list_display = ('identifier', 'polymorphic_ctype', 'checkin_time') + list_display = ('identifier', 'checkin_type', 'checkin_time') list_filter = ('identifier', 'identifier__polymorphic_ctype') - def polymorphic_ctype(self, obj): - return obj.identifier.polymorphic_ctype.model + @admin.display(description=_("Type")) + def checkin_type(self, obj): + klass = obj.identifier.polymorphic_ctype.model_class() + return klass._meta.get_field(klass.instance_attr).remote_field.model._meta.verbose_name def get_queryset(self, request): return super().get_queryset(request).select_related(None).prefetch_related('identifier__polymorphic_ctype') From d518cc40e9bab56b601b3186ea8aaae53ed60bba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 20 Nov 2022 00:09:43 -0400 Subject: [PATCH 019/255] Update flake8 to fix build --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index acebc1104be..6109c35fda9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,8 +12,8 @@ repos: - svg - id: check-yaml - id: check-added-large-files -- repo: https://gitlab.com/pycqa/flake8 - rev: 3.7.9 +- repo: https://github.com/PyCQA/flake8 + rev: 5.0.4 hooks: - id: flake8 additional_dependencies: From 2f724a6dd9ab2b0dc2f3e6c35c34c9d4835a497e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 20 Nov 2022 00:20:03 -0400 Subject: [PATCH 020/255] Lint fixes for new version of flake8 --- tabbycat/draw/generator/bpelimination.py | 2 +- tabbycat/draw/generator/powerpair.py | 4 ++-- tabbycat/draw/tests/generate_standings.py | 2 +- tabbycat/importer/importers/__init__.py | 2 +- tabbycat/importer/importers/base.py | 4 ++-- tabbycat/importer/management/commands/importtournament.py | 6 +++--- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/tabbycat/draw/generator/bpelimination.py b/tabbycat/draw/generator/bpelimination.py index 7a2e70e41e1..d5354376087 100644 --- a/tabbycat/draw/generator/bpelimination.py +++ b/tabbycat/draw/generator/bpelimination.py @@ -71,7 +71,7 @@ def make_pairings(self): ndebates = nbypassing // 2 if len(self.results) != ndebates: raise DrawUserError(_("The room ranks of the partial elimination round indicate " - "that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from " + "that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from " "it." % {'nbypassing': nbypassing, 'nadvancing': ndebates * 2})) # Fold the bypassing teams two-way diff --git a/tabbycat/draw/generator/powerpair.py b/tabbycat/draw/generator/powerpair.py index 46ba4a7c94b..fd3b0786c4c 100644 --- a/tabbycat/draw/generator/powerpair.py +++ b/tabbycat/draw/generator/powerpair.py @@ -377,8 +377,8 @@ def _one_up_one_down(self, pairings): swaps = swapper.swaps for i, (pairing, orig, new) in enumerate(zip(bracket, pairs_orig, pairs_new)): - assert(tuple(pairing.teams) == orig) - assert((i in swaps or i-1 in swaps) == (orig != new)) + assert tuple(pairing.teams) == orig + assert (i in swaps or i-1 in swaps) == (orig != new) if orig != new: if pairing.conflict_hist: pairing.add_flag("1u1d_hist") diff --git a/tabbycat/draw/tests/generate_standings.py b/tabbycat/draw/tests/generate_standings.py index 3b35efbc68a..ea49a1045bb 100644 --- a/tabbycat/draw/tests/generate_standings.py +++ b/tabbycat/draw/tests/generate_standings.py @@ -34,7 +34,7 @@ T = args.teams K = args.insts -assert(T % 2 == 0) +assert T % 2 == 0 teams = list() for i in range(1, T+1): diff --git a/tabbycat/importer/importers/__init__.py b/tabbycat/importer/importers/__init__.py index 529ce39015a..9f54f8d0c6b 100644 --- a/tabbycat/importer/importers/__init__.py +++ b/tabbycat/importer/importers/__init__.py @@ -1,4 +1,4 @@ -from .base import DUPLICATE_INFO, TournamentDataImporterFatal, TournamentDataImporterError +from .base import DUPLICATE_INFO, TournamentDataImporterFatalError, TournamentDataImporterError from . import anorak from . import boots diff --git a/tabbycat/importer/importers/base.py b/tabbycat/importer/importers/base.py index d57b08fbbbe..9db9bec3799 100644 --- a/tabbycat/importer/importers/base.py +++ b/tabbycat/importer/importers/base.py @@ -70,7 +70,7 @@ def lookup(val): return staticmethod(lookup) -class TournamentDataImporterFatal(Exception): +class TournamentDataImporterFatalError(Exception): pass @@ -289,7 +289,7 @@ def _import(self, csvfile, model, interpreter=make_interpreter(), expect_unique= self.logger.error("If you're writing a new importer, it might be that you " "need to delete some columns from the dict in your interpreter.") self.logger.error("If using construct_interpreter(), you can do this with the DELETE argument.") - raise TournamentDataImporterFatal(message) + raise TournamentDataImporterFatalError(message) else: raise except ValueError as e: diff --git a/tabbycat/importer/management/commands/importtournament.py b/tabbycat/importer/management/commands/importtournament.py index 03afd3960c1..859065183f2 100644 --- a/tabbycat/importer/management/commands/importtournament.py +++ b/tabbycat/importer/management/commands/importtournament.py @@ -8,7 +8,7 @@ import participants.models as pm import venues.models as vm from draw.models import DebateTeam -from importer.importers import DUPLICATE_INFO, importer_registry, TournamentDataImporterFatal +from importer.importers import DUPLICATE_INFO, importer_registry, TournamentDataImporterFatalError from tournaments.models import Tournament from tournaments.utils import auto_make_rounds @@ -117,7 +117,7 @@ def _print_result(self): message = "\033[1;32m" + message + "\033[0m\n" self.stdout.write(message) count_strs = ("{1:d} {0}".format(model._meta.verbose_name_plural, count) for model, count in counts.items()) - message = "Imported " + ", ".join(count_strs) + ", hit {1:d} errors".format(counts, len(errors)) + message = "Imported " + ", ".join(count_strs) + ", hit {0:d} errors".format(len(errors)) if self.color: "\033[0;36m" + message + "\033[0m\n" self.stdout.write(message) @@ -160,7 +160,7 @@ def make(self, model): self.importer.reset_counts() try: import_method(f) - except TournamentDataImporterFatal as e: + except TournamentDataImporterFatalError as e: raise CommandError(e) self._print_result() From a3d3bb7ecae8c6f8c47f3bd907480a6a83b9d7f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 20 Nov 2022 15:06:31 -0400 Subject: [PATCH 021/255] Install drf-spectacular `drf-spectacular` is a package that supplants DRF's native OpenAPI generation with more advanced capabilities like our nested routes/seri- alizers. --- Pipfile | 1 + Pipfile.lock | 647 +++++++++++++++----------------------- tabbycat/settings/core.py | 12 + 3 files changed, 261 insertions(+), 399 deletions(-) diff --git a/Pipfile b/Pipfile index 2311d8374f9..44949b97768 100644 --- a/Pipfile +++ b/Pipfile @@ -36,6 +36,7 @@ honcho = "*" gunicorn = "*" sentry-sdk = "*" whitenoise = "*" +drf-spectacular = "*" [dev-packages] pre-commit = "*" diff --git a/Pipfile.lock b/Pipfile.lock index dba0bfb1bfe..77daad21165 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "036dee7b6d16c12031d427302f220e2a9cf4a7063a879e5128b371febc97cf36" + "sha256": "719d28a0d4f5a2c1e5b2b5219d29ac9e5aa866310595547ee609935a2799ba65" }, "pipfile-spec": 6, "requires": { @@ -48,20 +48,6 @@ "markers": "python_version >= '3.5'", "version": "==22.1.0" }, - "autobahn": { - "hashes": [ - "sha256:8b462ea2e6aad6b4dc0ed45fb800b6cbfeb0325e7fe6983907f122f2be4a1fe9" - ], - "markers": "python_version >= '3.7'", - "version": "==22.7.1" - }, - "automat": { - "hashes": [ - "sha256:7979803c74610e11ef0c0d68a2942b152df52da55336e0c9d58daf1831cbdf33", - "sha256:b6feb6455337df834f6c9962d6ccf771515b7d939bca142b29c20c2376bc6111" - ], - "version": "==20.2.0" - }, "backcall": { "hashes": [ "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e", @@ -107,82 +93,13 @@ "markers": "python_version >= '3.6'", "version": "==2022.9.24" }, - "cffi": { - "hashes": [ - "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5", - "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef", - "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104", - "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426", - "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405", - "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375", - "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a", - "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e", - "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc", - "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf", - "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185", - "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497", - "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3", - "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35", - "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c", - "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83", - "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21", - "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca", - "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984", - "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac", - "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd", - "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee", - "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a", - "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2", - "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192", - "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7", - "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585", - "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f", - "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e", - "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27", - "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b", - "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e", - "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e", - "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d", - "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c", - "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415", - "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82", - "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02", - "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314", - "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325", - "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", - "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3", - "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914", - "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045", - "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d", - "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9", - "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5", - "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2", - "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c", - "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3", - "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2", - "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8", - "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d", - "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d", - "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9", - "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162", - "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76", - "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4", - "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e", - "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9", - "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6", - "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b", - "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01", - "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0" - ], - "version": "==1.15.1" - }, "channels": { "hashes": [ - "sha256:3813b8025bf85509769793aca720e6c3b1c5bde1cb253a961252bf0242b60a26", - "sha256:a3dc3339cc033e7c2afe083fb3dedf74fc5009815967e317e080e7bfdc92ea26" + "sha256:0ce53507a7da7b148eaa454526e0e05f7da5e5d1c23440e4886cf146981d8420", + "sha256:2253334ac76f67cba68c2072273f7e0e67dbdac77eeb7e318f511d2f9a53c5e4" ], "index": "pypi", - "version": "==3.0.5" + "version": "==4.0.0" }, "channels-redis": { "hashes": [ @@ -192,53 +109,6 @@ "index": "pypi", "version": "==4.0.0" }, - "constantly": { - "hashes": [ - "sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35", - "sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d" - ], - "version": "==15.1.0" - }, - "cryptography": { - "hashes": [ - "sha256:0297ffc478bdd237f5ca3a7dc96fc0d315670bfa099c04dc3a4a2172008a405a", - "sha256:10d1f29d6292fc95acb597bacefd5b9e812099d75a6469004fd38ba5471a977f", - "sha256:16fa61e7481f4b77ef53991075de29fc5bacb582a1244046d2e8b4bb72ef66d0", - "sha256:194044c6b89a2f9f169df475cc167f6157eb9151cc69af8a2a163481d45cc407", - "sha256:1db3d807a14931fa317f96435695d9ec386be7b84b618cc61cfa5d08b0ae33d7", - "sha256:3261725c0ef84e7592597606f6583385fed2a5ec3909f43bc475ade9729a41d6", - "sha256:3b72c360427889b40f36dc214630e688c2fe03e16c162ef0aa41da7ab1455153", - "sha256:3e3a2599e640927089f932295a9a247fc40a5bdf69b0484532f530471a382750", - "sha256:3fc26e22840b77326a764ceb5f02ca2d342305fba08f002a8c1f139540cdfaad", - "sha256:5067ee7f2bce36b11d0e334abcd1ccf8c541fc0bbdaf57cdd511fdee53e879b6", - "sha256:52e7bee800ec869b4031093875279f1ff2ed12c1e2f74923e8f49c916afd1d3b", - "sha256:64760ba5331e3f1794d0bcaabc0d0c39e8c60bf67d09c93dc0e54189dfd7cfe5", - "sha256:765fa194a0f3372d83005ab83ab35d7c5526c4e22951e46059b8ac678b44fa5a", - "sha256:79473cf8a5cbc471979bd9378c9f425384980fcf2ab6534b18ed7d0d9843987d", - "sha256:896dd3a66959d3a5ddcfc140a53391f69ff1e8f25d93f0e2e7830c6de90ceb9d", - "sha256:89ed49784ba88c221756ff4d4755dbc03b3c8d2c5103f6d6b4f83a0fb1e85294", - "sha256:ac7e48f7e7261207d750fa7e55eac2d45f720027d5703cd9007e9b37bbb59ac0", - "sha256:ad7353f6ddf285aeadfaf79e5a6829110106ff8189391704c1d8801aa0bae45a", - "sha256:b0163a849b6f315bf52815e238bc2b2346604413fa7c1601eea84bcddb5fb9ac", - "sha256:b6c9b706316d7b5a137c35e14f4103e2115b088c412140fdbd5f87c73284df61", - "sha256:c2e5856248a416767322c8668ef1845ad46ee62629266f84a8f007a317141013", - "sha256:ca9f6784ea96b55ff41708b92c3f6aeaebde4c560308e5fbbd3173fbc466e94e", - "sha256:d1a5bd52d684e49a36582193e0b89ff267704cd4025abefb9e26803adeb3e5fb", - "sha256:d3971e2749a723e9084dd507584e2a2761f78ad2c638aa31e80bc7a15c9db4f9", - "sha256:d4ef6cc305394ed669d4d9eebf10d3a101059bdcf2669c366ec1d14e4fb227bd", - "sha256:d9e69ae01f99abe6ad646947bba8941e896cb3aa805be2597a0400e0764b5818" - ], - "markers": "python_version >= '3.6'", - "version": "==38.0.1" - }, - "daphne": { - "hashes": [ - "sha256:76ffae916ba3aa66b46996c14fa713e46004788167a4873d647544e750e0e99f", - "sha256:a9af943c79717bc52fe64a3c236ae5d3adccc8b5be19c881b442d2c3db233393" - ], - "markers": "python_version >= '3.6'", - "version": "==3.0.2" - }, "decorator": { "hashes": [ "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", @@ -281,11 +151,11 @@ }, "django": { "hashes": [ - "sha256:26dc24f99c8956374a054bcbf58aab8dc0cad2e6ac82b0fe036b752c00eee793", - "sha256:b8d843714810ab88d59344507d4447be8b2cf12a49031363b6eed9f1b9b2280f" + "sha256:678bbfc8604eb246ed54e2063f0765f13b321a50526bdc8cb1f943eda7fa31f1", + "sha256:6b1de6886cae14c7c44d188f580f8ba8da05750f544c80ae5ad43375ab293cd5" ], "index": "pypi", - "version": "==4.1.2" + "version": "==4.1.3" }, "django-appconf": { "hashes": [ @@ -351,10 +221,10 @@ }, "django-jet-reboot": { "hashes": [ - "sha256:415f109a0b521e6048d7bb2f181d256c36af835d1f55b8ce12f2030983ddce7a" + "sha256:87263acbbbd56b5e92c98987d2e8132034d65261473cceb8cca57dafaab85b87" ], "index": "pypi", - "version": "==1.3.2" + "version": "==1.3.3" }, "django-polymorphic": { "hashes": [ @@ -403,6 +273,14 @@ "index": "pypi", "version": "==3.14.0" }, + "drf-spectacular": { + "hashes": [ + "sha256:b276e6f7bda6dfb911e742dab87c6e97bc67da2dafe82d6fd8df7cec6c8b03ec", + "sha256:be32417594080a52f996afd83fd47ea9c2b83cbf13f6d3fbf3de809a0dfa7ead" + ], + "index": "pypi", + "version": "==0.24.2" + }, "gunicorn": { "hashes": [ "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e", @@ -427,27 +305,21 @@ "index": "pypi", "version": "==2020.1.16" }, - "hyperlink": { + "importlib-resources": { "hashes": [ - "sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b", - "sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4" + "sha256:c01b1b94210d9849f286b86bb51bcea7cd56dde0600d8db721d7b81330711668", + "sha256:ee17ec648f85480d523596ce49eae8ead87d5631ae1551f913c0100b5edd3437" ], - "version": "==21.0.0" + "markers": "python_version < '3.9'", + "version": "==5.10.0" }, - "idna": { + "inflection": { "hashes": [ - "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", - "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417", + "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2" ], "markers": "python_version >= '3.5'", - "version": "==3.4" - }, - "incremental": { - "hashes": [ - "sha256:02f5de5aff48f6b9f665d99d48bfc7ec03b6e3943210de7cfc88856d755d6f57", - "sha256:92014aebc6a20b78a8084cdd5645eeaa7f74b8933f70fa3ada2cfbd1e3b54321" - ], - "version": "==21.3.0" + "version": "==0.5.1" }, "ipython": { "hashes": [ @@ -465,6 +337,14 @@ "markers": "python_version >= '3.6'", "version": "==0.18.1" }, + "jsonschema": { + "hashes": [ + "sha256:5bfcf2bca16a087ade17e02b282d34af7ccd749ef76241e7f9bd7c0cb8a9424d", + "sha256:f660066c3966db7d6daeaea8a75e0b68237a48e51cf49882087757bb59916248" + ], + "markers": "python_version >= '3.7'", + "version": "==4.17.0" + }, "matplotlib-inline": { "hashes": [ "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311", @@ -576,78 +456,98 @@ ], "version": "==0.7.5" }, + "pkgutil-resolve-name": { + "hashes": [ + "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174", + "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" + ], + "markers": "python_version < '3.9'", + "version": "==1.3.10" + }, "prompt-toolkit": { "hashes": [ - "sha256:9696f386133df0fc8ca5af4895afe5d78f5fcfe5258111c2a79a1c3e41ffa96d", - "sha256:9ada952c9d1787f52ff6d5f3484d0b4df8952787c087edf6a1f7c2cb1ea88148" + "sha256:24becda58d49ceac4dc26232eb179ef2b21f133fecda7eed6018d341766ed76e", + "sha256:e7f2129cba4ff3b3656bbdda0e74ee00d2f874a8bcdb9dd16f5fec7b3e173cae" ], "markers": "python_full_version >= '3.6.2'", - "version": "==3.0.31" + "version": "==3.0.32" }, "psycopg2-binary": { "hashes": [ - "sha256:02cde837df012fa5d579b9cf4bc8e1feb460f38d61f7a4ab4a919d55a9f6eeef", - "sha256:044b6ab68613de7ea1e63856627deea091bfea09dea5ab4f050b13250fd18cab", - "sha256:0a9465f0aa36480c8e7614991cbe8ca8aa16b0517c5398a49648ce345e446c19", - "sha256:0d8e0c9eec79fe1ae66691e06e3cc714da6fbd77981209bf32fa823c03dbaff8", - "sha256:0eae72190be519bf2629062eab7ac8d4ceec5bd132953cefa1596584d86964fe", - "sha256:15e0ac0ed8a85f6049e836e95ddee627766561c85be8d23f4b3edb6ddbaa7310", - "sha256:161dc52a617f0bb610a87d391cb2e77fe65b89ebfbd752f4f3217dde701ea196", - "sha256:181ac372a5a5308b4076933601a9b5f0cd139b389b0aa5e164786a2abbcdb978", - "sha256:1c22c59ab7d9dc110d409445f111f58556bf699b0548f3fc5176684a29c629c4", - "sha256:226f11be577b70a57f4910c0ee28591d4d9fcb3d455e966267179156ae2e0c41", - "sha256:24d627ed69e754c48dd142a914124858c600b4108c92546eb0ba822e63c0c6e2", - "sha256:2535f44b00f26f6af0e949c825e6aecb9adcb56c965c17af5b97137fb69f00c0", - "sha256:25e0517ad7ee3c5c3c69dbe3c1d95504c811e42f452b39a3505d0763b1f6caa0", - "sha256:2903bf90b1e6bfc9bbfc94a1db0b50ffa9830a0ca4c042fbc38d93890c02ce08", - "sha256:2f1ded23d17af0d738e7e78087f0b88a53228887845b1989b03af4dfd3fef703", - "sha256:30200b07779446760813eef06098ec6d084131e4365b4e023eb43100de758b11", - "sha256:33ac8b4754e6b6b21f3ee180da169d8526d91aee9408ec1fc573c16ab32b0207", - "sha256:34fd249275faa782c3a2016e86ac2330636ac58d731a1580e7d686e3976b9536", - "sha256:44f5dc9b4384bafca8429759ce76c8960ffc2b583fcad9e5dfb3e5f4894269e4", - "sha256:451550e0bb5889bbabbf92575a6d6eafced941cc28c86be6ae4667f81bf32d67", - "sha256:52383e932e6de5595963f9178cf2af7b9e1f3daacf5135b9c0e21aabbc5bf7c4", - "sha256:55137faec669c4277c5687c6ce7c1fbc4dece0e2f14256ee808f4a652f0a2170", - "sha256:576b9dfbcd154a0e8b5d9dae6316d037450e64a3b31df87dec71d88e2a2d5e5f", - "sha256:59a3010d566a48b919490a982f6807f68842686941dc12d568e129d9cd7703d6", - "sha256:61c6a258469c66412ae8358a0501df6ccb3bb48aa9c43b56624571ff9767f91d", - "sha256:63edc507f8cbfbb5903adb75bad8a99f9798981c854df9119dbebab2ec3ee0e1", - "sha256:65d5f4e70a2d3fbaa1349236968792611088f3f2dccead36c1626e1d183cc327", - "sha256:6a1618260a112a9c93504511f0b6254b4402a8c41b7130dc6d4c9e39aff3aa0c", - "sha256:704f1fcdc5b606b70563ea696c69bda90caee3a2f45ffc9cee60a901b394a79f", - "sha256:7751b11cd7f6b952b4b5ec5b93b5be9ce20faba786c18c25c354f5d8717a173c", - "sha256:7ad9d032dc1a31a86ca7b059f43554a049a2bfda8fe32d1492ad25f6686aff03", - "sha256:7b01d07006a0ac2216921b69a220b9f0974345d0b1b36efaeabdc7550b1cc4f8", - "sha256:7b47643c45e7619788c081d42e1d9d98c7c8a4933010a9967d097cc3c4c29f41", - "sha256:80ed219ce6cb21a5b53ead0edf5b56b6d23de4cb95389ac606f47670474f4816", - "sha256:82df4a8600999c4c0cb7d6614df1bbdb3c74732f63e79f78487893ffbed3d083", - "sha256:8660112e9127a019969a23c878e1b4a419e8a6427f9a9050c19830f152628c8a", - "sha256:89a86c2b35460700d04b4d6461153ab39ee85af5a5385acac9563a8310e6320a", - "sha256:8d7bc25729bb6d96b44f49ad78fde0e27a1a867cb205322b7e5f5b49e04d6f1f", - "sha256:97e4f3d9b17d12e7c00cb1c29c0040044135cd5146838da4274615dbe0baae78", - "sha256:a431deb6ffdfa551f7400b3a94fa4b964837e67f49e3c37aa26d90dc75970816", - "sha256:a6a2d3d75d8698dee492f4af7ad07606d0734e581edf9e2ce2f74b6fce90f42e", - "sha256:ae5b41dbf7731b838021923edfbe3b5ccdec84d92d5795f5229c0d08d32509d9", - "sha256:aff258af03dda9a990960a53759d10c3a9b936837c71fe2f3b581acd356b9121", - "sha256:b216a15e13f6e763db40ac3beb74b588650bc030d10a78fde182b88d273b82b5", - "sha256:b23b25b1243576b952689966205ef7d4285688068b966a1ca0e620bcb390d483", - "sha256:b896637091cde69d170a89253dde9aee814b25ca204b7e213fd0a6462e666638", - "sha256:d5f27b1d1b56470385faa2b2636fcb823e7ac5b5b734e0aa76b14637c66eb3b7", - "sha256:d6ba33f39436191ece7ea2b3d0b4dff00af71acd5c6e6f1d6b7563aa7286e9f2", - "sha256:d6c5e1df6f427d7a82606cf8f07cf3ba9fb3f366804b01e65f1f00f8df6b54f1", - "sha256:e02f77b620ad6b36564fe41980865436912e21a3b1138cdde175cf24afde1bc5", - "sha256:e72491d72870c3cb2f0d6f4174485533caec0e9ed7e717e2859b7cc7ff2ae1c4", - "sha256:ea8d5cd689fa7225d81ae0a049ba03e0165f4ed9ca083b19a405be9ad0b36845", - "sha256:eb5341fc7c53fdd95ac2415be77b1de854ab266488cff71174ebb007baf0e675", - "sha256:edf0a66ce9517365c7dcfed597894d8dd1f27b59e550b77a089054101435213b", - "sha256:f225784812b2b57d340f2eb0d2cebef989dcc82c288f5553e28ee9767c7c8344", - "sha256:f5fbb3b325c65010e04af206a9243e2df8606736c510c7f268aca6a93e5294a9", - "sha256:f78cafa25731e0b5aa16fe20bea1abf643d4e853f6bfb8a64421b06b878e2b88", - "sha256:fb639a0e65dce4a9cccbcbdd8ddd0c8c6ab10bca317b827a5c52ac3c3a4ad60a", - "sha256:ffb2f288f577a748cc23c65a818290755a4c2da1f87a40d7055b61a096d31e20" + "sha256:00475004e5ed3e3bf5e056d66e5dcdf41a0dc62efcd57997acd9135c40a08a50", + "sha256:01ad49d68dd8c5362e4bfb4158f2896dc6e0c02e87b8a3770fc003459f1a4425", + "sha256:024030b13bdcbd53d8a93891a2cf07719715724fc9fee40243f3bd78b4264b8f", + "sha256:02551647542f2bf89073d129c73c05a25c372fc0a49aa50e0de65c3c143d8bd0", + "sha256:043a9fd45a03858ff72364b4b75090679bd875ee44df9c0613dc862ca6b98460", + "sha256:05b3d479425e047c848b9782cd7aac9c6727ce23181eb9647baf64ffdfc3da41", + "sha256:0775d6252ccb22b15da3b5d7adbbf8cfe284916b14b6dc0ff503a23edb01ee85", + "sha256:1764546ffeaed4f9428707be61d68972eb5ede81239b46a45843e0071104d0dd", + "sha256:1e491e6489a6cb1d079df8eaa15957c277fdedb102b6a68cfbf40c4994412fd0", + "sha256:212757ffcecb3e1a5338d4e6761bf9c04f750e7d027117e74aa3cd8a75bb6fbd", + "sha256:215d6bf7e66732a514f47614f828d8c0aaac9a648c46a831955cb103473c7147", + "sha256:25382c7d174c679ce6927c16b6fbb68b10e56ee44b1acb40671e02d29f2fce7c", + "sha256:2abccab84d057723d2ca8f99ff7b619285d40da6814d50366f61f0fc385c3903", + "sha256:2d964eb24c8b021623df1c93c626671420c6efadbdb8655cb2bd5e0c6fa422ba", + "sha256:2ec46ed947801652c9643e0b1dc334cfb2781232e375ba97312c2fc256597632", + "sha256:2ef892cabdccefe577088a79580301f09f2a713eb239f4f9f62b2b29cafb0577", + "sha256:33e632d0885b95a8b97165899006c40e9ecdc634a529dca7b991eb7de4ece41c", + "sha256:3520d7af1ebc838cc6084a3281145d5cd5bdd43fdef139e6db5af01b92596cb7", + "sha256:3d790f84201c3698d1bfb404c917f36e40531577a6dda02e45ba29b64d539867", + "sha256:3fc33295cfccad697a97a76dec3f1e94ad848b7b163c3228c1636977966b51e2", + "sha256:422e3d43b47ac20141bc84b3d342eead8d8099a62881a501e97d15f6addabfe9", + "sha256:426c2ae999135d64e6a18849a7d1ad0e1bd007277e4a8f4752eaa40a96b550ff", + "sha256:46512486be6fbceef51d7660dec017394ba3e170299d1dc30928cbedebbf103a", + "sha256:46850a640df62ae940e34a163f72e26aca1f88e2da79148e1862faaac985c302", + "sha256:484405b883630f3e74ed32041a87456c5e0e63a8e3429aa93e8714c366d62bd1", + "sha256:4e7904d1920c0c89105c0517dc7e3f5c20fb4e56ba9cdef13048db76947f1d79", + "sha256:56b2957a145f816726b109ee3d4e6822c23f919a7d91af5a94593723ed667835", + "sha256:5c6527c8efa5226a9e787507652dd5ba97b62d29b53c371a85cd13f957fe4d42", + "sha256:5cbc554ba47ecca8cd3396ddaca85e1ecfe3e48dd57dc5e415e59551affe568e", + "sha256:5d28ecdf191db558d0c07d0f16524ee9d67896edf2b7990eea800abeb23ebd61", + "sha256:5fc447058d083b8c6ac076fc26b446d44f0145308465d745fba93a28c14c9e32", + "sha256:63e318dbe52709ed10d516a356f22a635e07a2e34c68145484ed96a19b0c4c68", + "sha256:68d81a2fe184030aa0c5c11e518292e15d342a667184d91e30644c9d533e53e1", + "sha256:6e63814ec71db9bdb42905c925639f319c80e7909fb76c3b84edc79dadef8d60", + "sha256:6f8a9bcab7b6db2e3dbf65b214dfc795b4c6b3bb3af922901b6a67f7cb47d5f8", + "sha256:70831e03bd53702c941da1a1ad36c17d825a24fbb26857b40913d58df82ec18b", + "sha256:74eddec4537ab1f701a1647214734bc52cee2794df748f6ae5908e00771f180a", + "sha256:7b3751857da3e224f5629400736a7b11e940b5da5f95fa631d86219a1beaafec", + "sha256:7cf1d44e710ca3a9ce952bda2855830fe9f9017ed6259e01fcd71ea6287565f5", + "sha256:7d07f552d1e412f4b4e64ce386d4c777a41da3b33f7098b6219012ba534fb2c2", + "sha256:7d88db096fa19d94f433420eaaf9f3c45382da2dd014b93e4bf3215639047c16", + "sha256:7ee3095d02d6f38bd7d9a5358fcc9ea78fcdb7176921528dd709cc63f40184f5", + "sha256:902844f9c4fb19b17dfa84d9e2ca053d4a4ba265723d62ea5c9c26b38e0aa1e6", + "sha256:937880290775033a743f4836aa253087b85e62784b63fd099ee725d567a48aa1", + "sha256:95076399ec3b27a8f7fa1cc9a83417b1c920d55cf7a97f718a94efbb96c7f503", + "sha256:9c38d3869238e9d3409239bc05bc27d6b7c99c2a460ea337d2814b35fb4fea1b", + "sha256:9e32cedc389bcb76d9f24ea8a012b3cb8385ee362ea437e1d012ffaed106c17d", + "sha256:9ffdc51001136b699f9563b1c74cc1f8c07f66ef7219beb6417a4c8aaa896c28", + "sha256:a0adef094c49f242122bb145c3c8af442070dc0e4312db17e49058c1702606d4", + "sha256:a36a0e791805aa136e9cbd0ffa040d09adec8610453ee8a753f23481a0057af5", + "sha256:a7e518a0911c50f60313cb9e74a169a65b5d293770db4770ebf004245f24b5c5", + "sha256:af0516e1711995cb08dc19bbd05bec7dbdebf4185f68870595156718d237df3e", + "sha256:b8104f709590fff72af801e916817560dbe1698028cd0afe5a52d75ceb1fce5f", + "sha256:b911dfb727e247340d36ae20c4b9259e4a64013ab9888ccb3cbba69b77fd9636", + "sha256:b9a794cef1d9c1772b94a72eec6da144c18e18041d294a9ab47669bc77a80c1d", + "sha256:b9c33d4aef08dfecbd1736ceab8b7b3c4358bf10a0121483e5cd60d3d308cc64", + "sha256:b9d38a4656e4e715d637abdf7296e98d6267df0cc0a8e9a016f8ba07e4aa3eeb", + "sha256:bcda1c84a1c533c528356da5490d464a139b6e84eb77cc0b432e38c5c6dd7882", + "sha256:bef7e3f9dc6f0c13afdd671008534be5744e0e682fb851584c8c3a025ec09720", + "sha256:c15ba5982c177bc4b23a7940c7e4394197e2d6a424a2d282e7c236b66da6d896", + "sha256:c5254cbd4f4855e11cebf678c1a848a3042d455a22a4ce61349c36aafd4c2267", + "sha256:c5682a45df7d9642eff590abc73157c887a68f016df0a8ad722dcc0f888f56d7", + "sha256:c5e65c6ac0ae4bf5bef1667029f81010b6017795dcb817ba5c7b8a8d61fab76f", + "sha256:d4c7b3a31502184e856df1f7bbb2c3735a05a8ce0ade34c5277e1577738a5c91", + "sha256:d892bfa1d023c3781a3cab8dd5af76b626c483484d782e8bd047c180db590e4c", + "sha256:dbc332beaf8492b5731229a881807cd7b91b50dbbbaf7fe2faf46942eda64a24", + "sha256:dc85b3777068ed30aff8242be2813038a929f2084f69e43ef869daddae50f6ee", + "sha256:e59137cdb970249ae60be2a49774c6dfb015bd0403f05af1fe61862e9626642d", + "sha256:e67b3c26e9b6d37b370c83aa790bbc121775c57bfb096c2e77eacca25fd0233b", + "sha256:e72c91bda9880f097c8aa3601a2c0de6c708763ba8128006151f496ca9065935", + "sha256:f95b8aca2703d6a30249f83f4fe6a9abf2e627aa892a5caaab2267d56be7ab69" ], "index": "pypi", - "version": "==2.9.4" + "version": "==2.9.5" }, "ptyprocess": { "hashes": [ @@ -656,49 +556,6 @@ ], "version": "==0.7.0" }, - "pyasn1": { - "hashes": [ - "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359", - "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576", - "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf", - "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7", - "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", - "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00", - "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8", - "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86", - "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12", - "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776", - "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba", - "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2", - "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3" - ], - "version": "==0.4.8" - }, - "pyasn1-modules": { - "hashes": [ - "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8", - "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199", - "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811", - "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed", - "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4", - "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e", - "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74", - "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb", - "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45", - "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd", - "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0", - "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d", - "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405" - ], - "version": "==0.2.8" - }, - "pycparser": { - "hashes": [ - "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", - "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" - ], - "version": "==2.21" - }, "pygments": { "hashes": [ "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1", @@ -707,13 +564,6 @@ "markers": "python_version >= '3.6'", "version": "==2.13.0" }, - "pyopenssl": { - "hashes": [ - "sha256:7a83b7b272dd595222d672f5ce29aa030f1fb837630ef229f62e72e395ce8968", - "sha256:b28437c9773bb6c6958628cf9c3bebe585de661dba6f63df17111966363dd15e" - ], - "version": "==22.1.0" - }, "pyparsing": { "hashes": [ "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", @@ -722,12 +572,86 @@ "markers": "python_full_version >= '3.6.8'", "version": "==3.0.9" }, + "pyrsistent": { + "hashes": [ + "sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed", + "sha256:111156137b2e71f3a9936baf27cb322e8024dac3dc54ec7fb9f0bcf3249e68bb", + "sha256:187d5730b0507d9285a96fca9716310d572e5464cadd19f22b63a6976254d77a", + "sha256:21455e2b16000440e896ab99e8304617151981ed40c29e9507ef1c2e4314ee95", + "sha256:2aede922a488861de0ad00c7630a6e2d57e8023e4be72d9d7147a9fcd2d30712", + "sha256:3ba4134a3ff0fc7ad225b6b457d1309f4698108fb6b35532d015dca8f5abed73", + "sha256:456cb30ca8bff00596519f2c53e42c245c09e1a4543945703acd4312949bfd41", + "sha256:71d332b0320642b3261e9fee47ab9e65872c2bd90260e5d225dabeed93cbd42b", + "sha256:879b4c2f4d41585c42df4d7654ddffff1239dc4065bc88b745f0341828b83e78", + "sha256:9cd3e9978d12b5d99cbdc727a3022da0430ad007dacf33d0bf554b96427f33ab", + "sha256:a178209e2df710e3f142cbd05313ba0c5ebed0a55d78d9945ac7a4e09d923308", + "sha256:b39725209e06759217d1ac5fcdb510e98670af9e37223985f330b611f62e7425", + "sha256:bfa0351be89c9fcbcb8c9879b826f4353be10f58f8a677efab0c017bf7137ec2", + "sha256:bfd880614c6237243ff53a0539f1cb26987a6dc8ac6e66e0c5a40617296a045e", + "sha256:c43bec251bbd10e3cb58ced80609c5c1eb238da9ca78b964aea410fb820d00d6", + "sha256:d690b18ac4b3e3cab73b0b7aa7dbe65978a172ff94970ff98d82f2031f8971c2", + "sha256:d6982b5a0237e1b7d876b60265564648a69b14017f3b5f908c5be2de3f9abb7a", + "sha256:dec3eac7549869365fe263831f576c8457f6c833937c68542d08fde73457d291", + "sha256:e371b844cec09d8dc424d940e54bba8f67a03ebea20ff7b7b0d56f526c71d584", + "sha256:e5d8f84d81e3729c3b506657dddfe46e8ba9c330bf1858ee33108f8bb2adb38a", + "sha256:ea6b79a02a28550c98b6ca9c35b9f492beaa54d7c5c9e9949555893c8a9234d0", + "sha256:f1258f4e6c42ad0b20f9cfcc3ada5bd6b83374516cd01c0960e3cb75fdca6770" + ], + "markers": "python_version >= '3.7'", + "version": "==0.19.2" + }, "pytz": { "hashes": [ - "sha256:2c0784747071402c6e99f0bafdb7da0fa22645f06554c7ae06bf6358897e9c91", - "sha256:48ce799d83b6f8aab2020e369b627446696619e79645419610b9facd909b3174" + "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427", + "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2" ], - "version": "==2022.4" + "version": "==2022.6" + }, + "pyyaml": { + "hashes": [ + "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf", + "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293", + "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b", + "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57", + "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b", + "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4", + "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07", + "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba", + "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9", + "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287", + "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513", + "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0", + "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782", + "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0", + "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92", + "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f", + "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2", + "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc", + "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1", + "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c", + "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86", + "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4", + "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c", + "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34", + "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b", + "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d", + "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c", + "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb", + "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7", + "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737", + "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3", + "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d", + "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358", + "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53", + "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78", + "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803", + "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a", + "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f", + "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174", + "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5" + ], + "markers": "python_version >= '3.6'", + "version": "==6.0" }, "qrcode": { "hashes": [ @@ -746,26 +670,19 @@ }, "sentry-sdk": { "hashes": [ - "sha256:2469240f6190aaebcb453033519eae69cfe8cc602065b4667e18ee14fc1e35dc", - "sha256:4fbace9a763285b608c06f01a807b51acb35f6059da6a01236654e08b0ee81ff" + "sha256:e7b78a1ddf97a5f715a50ab8c3f7a93f78b114c67307785ee828ef67a5d6f117", + "sha256:f467e6c7fac23d4d42bc83eb049c400f756cd2d65ab44f0cc1165d0c7c3d40bc" ], "index": "pypi", - "version": "==1.9.10" - }, - "service-identity": { - "hashes": [ - "sha256:6e6c6086ca271dc11b033d17c3a8bea9f24ebff920c587da090afc9519419d34", - "sha256:f0b0caac3d40627c3c04d7a51b6e06721857a0e10a8775f2d1d7e72901b3a7db" - ], - "version": "==21.1.0" + "version": "==1.11.0" }, "setuptools": { "hashes": [ - "sha256:1b6bdc6161661409c5f21508763dc63ab20a9ac2f8ba20029aaaa7fdb9118012", - "sha256:3050e338e5871e70c72983072fe34f6032ae1cdeeeb67338199c2f74e083a80e" + "sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840", + "sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d" ], "markers": "python_version >= '3.7'", - "version": "==65.4.1" + "version": "==65.6.0" }, "six": { "hashes": [ @@ -785,38 +702,19 @@ }, "traitlets": { "hashes": [ - "sha256:3f2c4e435e271592fe4390f1746ea56836e3a080f84e7833f0f801d9613fec39", - "sha256:93663cc8236093d48150e2af5e2ed30fc7904a11a6195e21bab0408af4e6d6c8" + "sha256:1201b2c9f76097195989cdf7f65db9897593b0dfd69e4ac96016661bb6f0d30f", + "sha256:b122f9ff2f2f6c1709dab289a05555be011c87828e911c0cf4074b85cb780a79" ], "markers": "python_version >= '3.7'", - "version": "==5.4.0" - }, - "twisted": { - "extras": [ - "tls" - ], - "hashes": [ - "sha256:8d4718d1e48dcc28933f8beb48dc71cfe77a125e37ad1eb7a3d0acc49baf6c99", - "sha256:e5b60de39f2d1da153fbe1874d885fe3fcbdb21fcc446fa759a53e8fc3513bed" - ], - "markers": "python_full_version >= '3.7.1'", - "version": "==22.8.0" + "version": "==5.5.0" }, - "txaio": { + "uritemplate": { "hashes": [ - "sha256:2e4582b70f04b2345908254684a984206c0d9b50e3074a24a4c55aba21d24d01", - "sha256:41223af4a9d5726e645a8ee82480f413e5e300dd257db94bc38ae12ea48fb2e5" + "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0", + "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e" ], "markers": "python_version >= '3.6'", - "version": "==22.2.1" - }, - "typing-extensions": { - "hashes": [ - "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", - "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" - ], - "markers": "python_version >= '3.7'", - "version": "==4.4.0" + "version": "==4.1.1" }, "urllib3": { "hashes": [ @@ -918,62 +816,13 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==1.14.1" }, - "zope.interface": { - "hashes": [ - "sha256:08f9636e99a9d5410181ba0729e0408d3d8748026ea938f3b970a0249daa8192", - "sha256:0b465ae0962d49c68aa9733ba92a001b2a0933c317780435f00be7ecb959c702", - "sha256:0cba8477e300d64a11a9789ed40ee8932b59f9ee05f85276dbb4b59acee5dd09", - "sha256:0cee5187b60ed26d56eb2960136288ce91bcf61e2a9405660d271d1f122a69a4", - "sha256:0ea1d73b7c9dcbc5080bb8aaffb776f1c68e807767069b9ccdd06f27a161914a", - "sha256:0f91b5b948686659a8e28b728ff5e74b1be6bf40cb04704453617e5f1e945ef3", - "sha256:15e7d1f7a6ee16572e21e3576d2012b2778cbacf75eb4b7400be37455f5ca8bf", - "sha256:17776ecd3a1fdd2b2cd5373e5ef8b307162f581c693575ec62e7c5399d80794c", - "sha256:194d0bcb1374ac3e1e023961610dc8f2c78a0f5f634d0c737691e215569e640d", - "sha256:1c0e316c9add0db48a5b703833881351444398b04111188069a26a61cfb4df78", - "sha256:205e40ccde0f37496904572035deea747390a8b7dc65146d30b96e2dd1359a83", - "sha256:273f158fabc5ea33cbc936da0ab3d4ba80ede5351babc4f577d768e057651531", - "sha256:2876246527c91e101184f63ccd1d716ec9c46519cc5f3d5375a3351c46467c46", - "sha256:2c98384b254b37ce50eddd55db8d381a5c53b4c10ee66e1e7fe749824f894021", - "sha256:2e5a26f16503be6c826abca904e45f1a44ff275fdb7e9d1b75c10671c26f8b94", - "sha256:334701327f37c47fa628fc8b8d28c7d7730ce7daaf4bda1efb741679c2b087fc", - "sha256:3748fac0d0f6a304e674955ab1365d515993b3a0a865e16a11ec9d86fb307f63", - "sha256:3c02411a3b62668200910090a0dff17c0b25aaa36145082a5a6adf08fa281e54", - "sha256:3dd4952748521205697bc2802e4afac5ed4b02909bb799ba1fe239f77fd4e117", - "sha256:3f24df7124c323fceb53ff6168da70dbfbae1442b4f3da439cd441681f54fe25", - "sha256:469e2407e0fe9880ac690a3666f03eb4c3c444411a5a5fddfdabc5d184a79f05", - "sha256:4de4bc9b6d35c5af65b454d3e9bc98c50eb3960d5a3762c9438df57427134b8e", - "sha256:5208ebd5152e040640518a77827bdfcc73773a15a33d6644015b763b9c9febc1", - "sha256:52de7fc6c21b419078008f697fd4103dbc763288b1406b4562554bd47514c004", - "sha256:5bb3489b4558e49ad2c5118137cfeaf59434f9737fa9c5deefc72d22c23822e2", - "sha256:5dba5f530fec3f0988d83b78cc591b58c0b6eb8431a85edd1569a0539a8a5a0e", - "sha256:5dd9ca406499444f4c8299f803d4a14edf7890ecc595c8b1c7115c2342cadc5f", - "sha256:5f931a1c21dfa7a9c573ec1f50a31135ccce84e32507c54e1ea404894c5eb96f", - "sha256:63b82bb63de7c821428d513607e84c6d97d58afd1fe2eb645030bdc185440120", - "sha256:66c0061c91b3b9cf542131148ef7ecbecb2690d48d1612ec386de9d36766058f", - "sha256:6f0c02cbb9691b7c91d5009108f975f8ffeab5dff8f26d62e21c493060eff2a1", - "sha256:71aace0c42d53abe6fc7f726c5d3b60d90f3c5c055a447950ad6ea9cec2e37d9", - "sha256:7d97a4306898b05404a0dcdc32d9709b7d8832c0c542b861d9a826301719794e", - "sha256:7df1e1c05304f26faa49fa752a8c690126cf98b40b91d54e6e9cc3b7d6ffe8b7", - "sha256:8270252effc60b9642b423189a2fe90eb6b59e87cbee54549db3f5562ff8d1b8", - "sha256:867a5ad16892bf20e6c4ea2aab1971f45645ff3102ad29bd84c86027fa99997b", - "sha256:877473e675fdcc113c138813a5dd440da0769a2d81f4d86614e5d62b69497155", - "sha256:8892f89999ffd992208754851e5a052f6b5db70a1e3f7d54b17c5211e37a98c7", - "sha256:9a9845c4c6bb56e508651f005c4aeb0404e518c6f000d5a1123ab077ab769f5c", - "sha256:a1e6e96217a0f72e2b8629e271e1b280c6fa3fe6e59fa8f6701bec14e3354325", - "sha256:a8156e6a7f5e2a0ff0c5b21d6bcb45145efece1909efcbbbf48c56f8da68221d", - "sha256:a9506a7e80bcf6eacfff7f804c0ad5350c8c95b9010e4356a4b36f5322f09abb", - "sha256:af310ec8335016b5e52cae60cda4a4f2a60a788cbb949a4fbea13d441aa5a09e", - "sha256:b0297b1e05fd128d26cc2460c810d42e205d16d76799526dfa8c8ccd50e74959", - "sha256:bf68f4b2b6683e52bec69273562df15af352e5ed25d1b6641e7efddc5951d1a7", - "sha256:d0c1bc2fa9a7285719e5678584f6b92572a5b639d0e471bb8d4b650a1a910920", - "sha256:d4d9d6c1a455d4babd320203b918ccc7fcbefe308615c521062bc2ba1aa4d26e", - "sha256:db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48", - "sha256:dd93ea5c0c7f3e25335ab7d22a507b1dc43976e1345508f845efc573d3d779d8", - "sha256:f44e517131a98f7a76696a7b21b164bcb85291cee106a23beccce454e1f433a4", - "sha256:f7ee479e96f7ee350db1cf24afa5685a5899e2b34992fb99e1f7c1b0b758d263" + "zipp": { + "hashes": [ + "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1", + "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==5.4.0" + "markers": "python_version < '3.10'", + "version": "==3.10.0" } }, "develop": { @@ -994,11 +843,11 @@ }, "babel": { "hashes": [ - "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51", - "sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb" + "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe", + "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6" ], "markers": "python_version >= '3.6'", - "version": "==2.10.3" + "version": "==2.11.0" }, "backports.zoneinfo": { "hashes": [ @@ -1056,11 +905,11 @@ }, "colorama": { "hashes": [ - "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da", - "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4" + "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", + "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==0.4.5" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", + "version": "==0.4.6" }, "distlib": { "hashes": [ @@ -1071,11 +920,11 @@ }, "django": { "hashes": [ - "sha256:26dc24f99c8956374a054bcbf58aab8dc0cad2e6ac82b0fe036b752c00eee793", - "sha256:b8d843714810ab88d59344507d4447be8b2cf12a49031363b6eed9f1b9b2280f" + "sha256:678bbfc8604eb246ed54e2063f0765f13b321a50526bdc8cb1f943eda7fa31f1", + "sha256:6b1de6886cae14c7c44d188f580f8ba8da05750f544c80ae5ad43375ab293cd5" ], "index": "pypi", - "version": "==4.1.2" + "version": "==4.1.3" }, "django-debug-toolbar": { "hashes": [ @@ -1103,11 +952,11 @@ }, "identify": { "hashes": [ - "sha256:6c32dbd747aa4ceee1df33f25fed0b0f6e0d65721b15bd151307ff7056d50245", - "sha256:b276db7ec52d7e89f5bc4653380e33054ddc803d25875952ad90b0f012cbcdaa" + "sha256:906036344ca769539610436e40a684e170c3648b552194980bb7b617a8daeb9f", + "sha256:a390fb696e164dbddb047a0db26e57972ae52fbd037ae68797e5ae2f4492485d" ], "markers": "python_version >= '3.7'", - "version": "==2.5.6" + "version": "==2.5.9" }, "idna": { "hashes": [ @@ -1211,11 +1060,11 @@ }, "platformdirs": { "hashes": [ - "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788", - "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19" + "sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7", + "sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10" ], "markers": "python_version >= '3.7'", - "version": "==2.5.2" + "version": "==2.5.4" }, "pre-commit": { "hashes": [ @@ -1243,10 +1092,10 @@ }, "pytz": { "hashes": [ - "sha256:2c0784747071402c6e99f0bafdb7da0fa22645f06554c7ae06bf6358897e9c91", - "sha256:48ce799d83b6f8aab2020e369b627446696619e79645419610b9facd909b3174" + "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427", + "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2" ], - "version": "==2022.4" + "version": "==2022.6" }, "pyyaml": { "hashes": [ @@ -1312,11 +1161,11 @@ }, "setuptools": { "hashes": [ - "sha256:1b6bdc6161661409c5f21508763dc63ab20a9ac2f8ba20029aaaa7fdb9118012", - "sha256:3050e338e5871e70c72983072fe34f6032ae1cdeeeb67338199c2f74e083a80e" + "sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840", + "sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d" ], "markers": "python_version >= '3.7'", - "version": "==65.4.1" + "version": "==65.6.0" }, "six": { "hashes": [ @@ -1335,11 +1184,11 @@ }, "sphinx": { "hashes": [ - "sha256:5b10cb1022dac8c035f75767799c39217a05fc0fe2d6fe5597560d38e44f0363", - "sha256:7abf6fabd7b58d0727b7317d5e2650ef68765bbe0ccb63c8795fa8683477eaa2" + "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d", + "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5" ], "index": "pypi", - "version": "==5.2.3" + "version": "==5.3.0" }, "sphinx-autobuild": { "hashes": [ @@ -1359,11 +1208,11 @@ }, "sphinx-rtd-theme": { "hashes": [ - "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8", - "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c" + "sha256:31faa07d3e97c8955637fc3f1423a5ab2c44b74b8cc558a51498c202ce5cbda7", + "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103" ], "index": "pypi", - "version": "==1.0.0" + "version": "==1.1.1" }, "sphinxcontrib-applehelp": { "hashes": [ @@ -1456,19 +1305,19 @@ }, "virtualenv": { "hashes": [ - "sha256:227ea1b9994fdc5ea31977ba3383ef296d7472ea85be9d6732e42a91c04e80da", - "sha256:d07dfc5df5e4e0dbc92862350ad87a36ed505b978f6c39609dc489eadd5b0d27" + "sha256:8691e3ff9387f743e00f6bb20f70121f5e4f596cae754531f2b3b3a1b1ac696e", + "sha256:efd66b00386fdb7dbe4822d172303f40cd05e50e01740b19ea42425cbe653e29" ], "markers": "python_version >= '3.6'", - "version": "==20.16.5" + "version": "==20.16.7" }, "zipp": { "hashes": [ - "sha256:3a7af91c3db40ec72dd9d154ae18e008c69efe8ca88dde4f9a731bb82fe2f9eb", - "sha256:972cfa31bc2fedd3fa838a51e9bc7e64b7fb725a8c00e7431554311f180e9980" + "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1", + "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8" ], - "markers": "python_version >= '3.7'", - "version": "==3.9.0" + "markers": "python_version < '3.10'", + "version": "==3.10.0" } } } diff --git a/tabbycat/settings/core.py b/tabbycat/settings/core.py index a4f63b065bd..1bfe40ad10d 100644 --- a/tabbycat/settings/core.py +++ b/tabbycat/settings/core.py @@ -146,6 +146,7 @@ 'corsheaders', 'rest_framework', 'rest_framework.authtoken', + 'drf_spectacular', 'django_better_admin_arrayfield', ) @@ -333,6 +334,17 @@ 'rest_framework.authentication.TokenAuthentication', ], 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', + 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema', +} + +SPECTACULAR_SETTINGS = { + 'TITLE': 'Tabbycat API', + 'DESCRIPTION': 'Parliamentary debate tabulation software', + 'VERSION': '1.3.0', + 'SERVE_INCLUDE_SCHEMA': False, + 'SCHEMA_PATH_PREFIX': r'api/v\d+', + 'CONTACT': {'name': 'Étienne Beaulé', 'email': 'ebeaule@tabbycat-debate.org'}, + 'LICENSE': {'name': 'AGPL 3', 'url': 'https://www.gnu.org/licenses/agpl-3.0.en.html'}, } # ---------------------------------------- From caf4ce65acde685f98ff799f9ebbc3c678eae989 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 20 Nov 2022 15:09:02 -0400 Subject: [PATCH 022/255] API: Avoid popping fields in documentation This commit fixes errors found when trying to create a schema where fields were being popped. Spectacular sometimes doesn't include the "context" kwarg to the serializers, and is unauthenticated, which makes the serializers pop sensitive fields. As the host is always "testserver", we can test for that and give access to the schema generator. --- tabbycat/api/serializers.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/tabbycat/api/serializers.py b/tabbycat/api/serializers.py index dd02069496a..a871d09286d 100644 --- a/tabbycat/api/serializers.py +++ b/tabbycat/api/serializers.py @@ -42,6 +42,11 @@ def _validate_field(self, field, value): return value +def is_staff(context): + # OpenAPI generation uses a host called 'testserver' (sometimes context is also None in that circumstance) + return context is None or context['request'].get_host() == 'testserver' or context['request'].user.is_staff + + class BaseSourceField(fields.TournamentHyperlinkedRelatedField): """Taken from REST_Framework: rest_framework.relations.HyperlinkedRelatedField @@ -237,7 +242,7 @@ class RoundLinksSerializer(serializers.Serializer): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - if not kwargs['context']['request'].user.is_staff: + if not is_staff(kwargs.get('context')): self.fields.pop('feedback_weight') # Can't show in a ListSerializer @@ -504,7 +509,7 @@ class LinksSerializer(serializers.Serializer): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - if not kwargs['context']['request'].user.is_staff: + if not is_staff(kwargs.get('context')): self.fields.pop('gender') self.fields.pop('email') self.fields.pop('phone') @@ -569,7 +574,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Remove private fields in the public endpoint if needed - if not kwargs['context']['request'].user.is_staff: + if not is_staff(kwargs.get('context')): self.fields.pop('institution_conflicts') self.fields.pop('team_conflicts') self.fields.pop('adjudicator_conflicts') @@ -668,7 +673,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Remove private fields in the public endpoint if needed - if not kwargs['context']['request'].user.is_staff: + if not is_staff(kwargs.get('context')): self.fields.pop('institution_conflicts') self.fields.pop('venue_constraints') @@ -775,7 +780,7 @@ class Meta: def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - if not kwargs['context']['request'].user.is_staff: + if not is_staff(kwargs.get('context')): self.fields.pop('venue_constraints') def create(self, validated_data): @@ -817,7 +822,7 @@ class PerTournamentInstitutionSerializer(InstitutionSerializer): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - if not kwargs['context']['request'].user.is_staff: + if not is_staff(kwargs.get('context')): self.fields.pop('teams') self.fields.pop('adjudicators') @@ -912,7 +917,7 @@ class Meta: def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - if not kwargs['context']['request'].user.is_staff: + if not is_staff(kwargs.get('context')): self.fields.pop('bracket') self.fields.pop('room_rank') self.fields.pop('importance') From 1fc71ab7e83675e6a1e1e706317287515080a057 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 20 Nov 2022 15:15:16 -0400 Subject: [PATCH 023/255] API: Fix warnings on schema generation A couple distinct warnings: * Serializers don't exist for certain paths They're added as dummies but aren't used in requests * Field types are not specified The untyped fields have typing specs added --- tabbycat/api/serializers.py | 38 ++++++++++++++++++++++++++++--------- tabbycat/api/views.py | 3 +++ tabbycat/venues/models.py | 2 +- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/tabbycat/api/serializers.py b/tabbycat/api/serializers.py index a871d09286d..972a40fdf6b 100644 --- a/tabbycat/api/serializers.py +++ b/tabbycat/api/serializers.py @@ -123,6 +123,26 @@ def get_url_options(self, value, format): return self.get_url(obj, view_name, self.context['request'], format) +class RootSerializer(serializers.Serializer): + class RootLinksSerializer(serializers.Serializer): + v1 = serializers.HyperlinkedIdentityField(view_name='api-v1-root') + + _links = RootLinksSerializer(source='*', read_only=True) + version = serializers.CharField() + + +class V1RootSerializer(serializers.Serializer): + class V1LinksSerializer(serializers.Serializer): + tournaments = serializers.HyperlinkedIdentityField(view_name='api-tournament-list') + institutions = serializers.HyperlinkedIdentityField(view_name='api-global-institution-list') + + _links = V1LinksSerializer(source='*', read_only=True) + + +class AvailabilitiesSerializer(serializers.ListSerializer): + child = fields.ParticipantAvailabilityForeignKeyField(view_name='api-availability-list') + + class VenueConstraintSerializer(serializers.ModelSerializer): category = fields.TournamentHyperlinkedRelatedField(view_name='api-venuecategory-detail', queryset=VenueCategory.objects.all()) @@ -495,7 +515,7 @@ def save(self, **kwargs): class SpeakerSerializer(serializers.ModelSerializer): - class LinksSerializer(serializers.Serializer): + class SpeakerLinksSerializer(serializers.Serializer): checkin = fields.TournamentHyperlinkedIdentityField(tournament_field='team__tournament', view_name='api-speaker-checkin') url = fields.TournamentHyperlinkedIdentityField(tournament_field='team__tournament', view_name='api-speaker-detail') @@ -505,7 +525,7 @@ class LinksSerializer(serializers.Serializer): view_name='api-speakercategory-detail', queryset=SpeakerCategory.objects.all(), ) - _links = LinksSerializer(source='*', read_only=True) + _links = SpeakerLinksSerializer(source='*', read_only=True) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -542,7 +562,7 @@ def create(self, validated_data): class AdjudicatorSerializer(serializers.ModelSerializer): - class LinksSerializer(serializers.Serializer): + class AdjudicatorLinksSerializer(serializers.Serializer): checkin = fields.TournamentHyperlinkedIdentityField(view_name='api-adjudicator-checkin') url = fields.TournamentHyperlinkedIdentityField(view_name='api-adjudicator-detail') @@ -568,7 +588,7 @@ class LinksSerializer(serializers.Serializer): queryset=Adjudicator.objects.all(), ) venue_constraints = VenueConstraintSerializer(many=True, required=False) - _links = LinksSerializer(source='*', read_only=True) + _links = AdjudicatorLinksSerializer(source='*', read_only=True) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -829,7 +849,7 @@ def __init__(self, *args, **kwargs): class VenueSerializer(serializers.ModelSerializer): - class LinksSerializer(serializers.Serializer): + class VenueLinksSerializer(serializers.Serializer): checkin = fields.TournamentHyperlinkedIdentityField(view_name='api-venue-checkin') url = fields.TournamentHyperlinkedIdentityField(view_name='api-venue-detail') @@ -840,7 +860,7 @@ class LinksSerializer(serializers.Serializer): ) display_name = serializers.ReadOnlyField() external_url = serializers.URLField(source='url', required=False, allow_blank=True) - _links = LinksSerializer(source='*', read_only=True) + _links = VenueLinksSerializer(source='*', read_only=True) class Meta: model = Venue @@ -865,13 +885,13 @@ class BaseStandingsSerializer(serializers.Serializer): tied = serializers.SerializerMethodField() metrics = serializers.SerializerMethodField() - def get_rank(self, obj): + def get_rank(self, obj) -> int: return obj.rankings['rank'][0] - def get_tied(self, obj): + def get_tied(self, obj) -> bool: return obj.rankings['rank'][1] - def get_metrics(self, obj): + def get_metrics(self, obj) -> list: return [{'metric': s, 'value': v} for s, v in obj.metrics.items()] def __init__(self, *args, **kwargs): diff --git a/tabbycat/api/views.py b/tabbycat/api/views.py index 88c9542eaeb..00d9eb2e545 100644 --- a/tabbycat/api/views.py +++ b/tabbycat/api/views.py @@ -41,6 +41,7 @@ class APIRootView(PublicAPIMixin, GenericAPIView): name = "API Root" + serializer_class = serializers.RootSerializer def get(self, request, format=None): return Response({ @@ -53,6 +54,7 @@ def get(self, request, format=None): class APIV1RootView(PublicAPIMixin, GenericAPIView): name = "API Version 1 Root" + serializer_class = serializers.V1RootSerializer lookup_field = 'slug' lookup_url_kwarg = 'tournament_slug' @@ -591,6 +593,7 @@ def get_queryset(self): class AvailabilitiesViewSet(RoundAPIMixin, AdministratorAPIMixin, APIView): + serializer_class = serializers.AvailabilitiesSerializer # Isn't actually used def get_field(self): field = ParticipantAvailabilityForeignKeyField(many=True, view_name='api-availability-list') # Dummy view name diff --git a/tabbycat/venues/models.py b/tabbycat/venues/models.py index 98c9be61c78..a1c02761fb8 100644 --- a/tabbycat/venues/models.py +++ b/tabbycat/venues/models.py @@ -27,7 +27,7 @@ class Meta: verbose_name_plural = _("rooms") @property - def display_name(self): + def display_name(self) -> str: categories = self.venuecategory_set.all() prefixes = [] suffixes = [] From a2687133e0ca3fd531e21ecfb43ed52d8078b523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 20 Nov 2022 15:19:40 -0400 Subject: [PATCH 024/255] API: Add a couple hints to Ballot fields --- tabbycat/api/serializers.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tabbycat/api/serializers.py b/tabbycat/api/serializers.py index 972a40fdf6b..c795b77a0c0 100644 --- a/tabbycat/api/serializers.py +++ b/tabbycat/api/serializers.py @@ -24,7 +24,7 @@ from participants.utils import populate_code_names from privateurls.utils import populate_url_keys from results.mixins import TabroomSubmissionFieldsMixin -from results.models import BallotSubmission +from results.models import BallotSubmission, SpeakerScore from results.result import DebateResult from tournaments.models import Round, Tournament from venues.models import Venue, VenueCategory, VenueConstraint @@ -1109,7 +1109,7 @@ class ResultSerializer(serializers.Serializer): class SheetSerializer(serializers.Serializer): class TeamResultSerializer(serializers.Serializer): - side = serializers.CharField() + side = serializers.ChoiceField(choices=DebateTeam.SIDE_CHOICES) points = serializers.IntegerField(required=False) win = serializers.BooleanField(required=False) score = serializers.FloatField(required=False, allow_null=True) @@ -1120,7 +1120,7 @@ class TeamResultSerializer(serializers.Serializer): ) class SpeechSerializer(serializers.Serializer): - ghost = serializers.BooleanField(required=False) + ghost = serializers.BooleanField(required=False, help_text=SpeakerScore._meta.get_field('ghost').help_text) score = serializers.FloatField() speaker = fields.TournamentHyperlinkedRelatedField( From cb38cdbe62aa5305fd4110a62484504295039736 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 20 Nov 2022 15:20:06 -0400 Subject: [PATCH 025/255] Remove pagination from the API The pagination changes the schema when applied and messes up the docu- mentation. Don't think it was ever used either. --- tabbycat/settings/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tabbycat/settings/core.py b/tabbycat/settings/core.py index 1bfe40ad10d..7b678227ec2 100644 --- a/tabbycat/settings/core.py +++ b/tabbycat/settings/core.py @@ -333,7 +333,7 @@ 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.TokenAuthentication', ], - 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', + #'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema', } From 38c98bd8abcd91ddd4b4a9b105deeb667b3a5de0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 20 Nov 2022 15:23:05 -0400 Subject: [PATCH 026/255] Add documentation to API endpoints This commit adds parameters and tags to all the endpoints, and descipt- ions to some (but should be added to the others later for speccy) --- tabbycat/api/serializers.py | 7 ++ tabbycat/api/views.py | 211 ++++++++++++++++++++++++++++++++++-- 2 files changed, 211 insertions(+), 7 deletions(-) diff --git a/tabbycat/api/serializers.py b/tabbycat/api/serializers.py index c795b77a0c0..4ed22ede6f5 100644 --- a/tabbycat/api/serializers.py +++ b/tabbycat/api/serializers.py @@ -139,6 +139,13 @@ class V1LinksSerializer(serializers.Serializer): _links = V1LinksSerializer(source='*', read_only=True) +class CheckinSerializer(serializers.Serializer): + object = serializers.HyperlinkedIdentityField(view_name='api-root') + barcode = serializers.IntegerField() + checked = serializers.BooleanField() + timestamp = serializers.DateTimeField() + + class AvailabilitiesSerializer(serializers.ListSerializer): child = fields.ParticipantAvailabilityForeignKeyField(view_name='api-availability-list') diff --git a/tabbycat/api/views.py b/tabbycat/api/views.py index 00d9eb2e545..fbfc2b48c6f 100644 --- a/tabbycat/api/views.py +++ b/tabbycat/api/views.py @@ -5,6 +5,7 @@ from django.conf import settings from django.contrib.contenttypes.models import ContentType from django.db.models import Count, Prefetch, Q +from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiParameter from dynamic_preferences.api.serializers import PreferenceSerializer from dynamic_preferences.api.viewsets import PerInstancePreferenceViewSet from rest_framework.exceptions import NotFound @@ -39,11 +40,25 @@ from .permissions import APIEnabledPermission, PublicPreferencePermission +tournament_parameter = OpenApiParameter('tournament_slug', description="The tournament's slug", type=str, location="path") +round_parameters = [ + tournament_parameter, + OpenApiParameter('round_seq', description="The round's sequence number", type=int, location="path"), +] +debate_parameters = [ + *round_parameters, + OpenApiParameter('debate_pk', description="The debate's primary key", type=int, location="path"), +] +id_parameter = OpenApiParameter('id', description="The object's primary key", type=int, location="path") + + +@extend_schema(tags=['root']) class APIRootView(PublicAPIMixin, GenericAPIView): name = "API Root" serializer_class = serializers.RootSerializer def get(self, request, format=None): + """API Entrypoint; info about versions""" return Response({ "_links": { "v1": reverse('api-v1-root', request=request, format=format), @@ -52,6 +67,7 @@ def get(self, request, format=None): }) +@extend_schema(tags=['root']) class APIV1RootView(PublicAPIMixin, GenericAPIView): name = "API Version 1 Root" serializer_class = serializers.V1RootSerializer @@ -59,6 +75,7 @@ class APIV1RootView(PublicAPIMixin, GenericAPIView): lookup_url_kwarg = 'tournament_slug' def get(self, request, format=None): + """Entrypoint for version 1 of the API""" tournaments_create_url = reverse('api-tournament-list', request=request, format=format) institution_create_url = reverse('api-global-institution-list', request=request, format=format) return Response({ @@ -69,6 +86,13 @@ def get(self, request, format=None): }) +@extend_schema(tags=['tournaments']) +@extend_schema_view( + retrieve=extend_schema(parameters=[tournament_parameter]), + update=extend_schema(parameters=[tournament_parameter]), + partial_update=extend_schema(parameters=[tournament_parameter]), + destroy=extend_schema(parameters=[tournament_parameter]), +) class TournamentViewSet(PublicAPIMixin, ModelViewSet): # Don't use TournamentAPIMixin here, it's not filtering objects by tournament. queryset = Tournament.objects.all().prefetch_related( @@ -82,6 +106,7 @@ class TournamentViewSet(PublicAPIMixin, ModelViewSet): lookup_url_kwarg = 'tournament_slug' +@extend_schema(tags=['tournaments'], parameters=[tournament_parameter]) class TournamentPreferenceViewSet(TournamentFromUrlMixin, AdministratorAPIMixin, PerInstancePreferenceViewSet): queryset = TournamentPreferenceModel.objects.all() serializer_class = PreferenceSerializer @@ -90,6 +115,15 @@ def get_related_instance(self): return self.tournament +@extend_schema(tags=['rounds']) +@extend_schema_view( + list=extend_schema(parameters=[tournament_parameter]), + create=extend_schema(parameters=[tournament_parameter]), + retrieve=extend_schema(parameters=round_parameters), + update=extend_schema(parameters=round_parameters), + partial_update=extend_schema(parameters=round_parameters), + destroy=extend_schema(parameters=round_parameters), +) class RoundViewSet(TournamentAPIMixin, PublicAPIMixin, ModelViewSet): serializer_class = serializers.RoundSerializer lookup_field = 'seq' @@ -101,6 +135,13 @@ def get_queryset(self): ).prefetch_related('roundmotion_set', 'roundmotion_set__motion', 'roundmotion_set__motion__tournament') +@extend_schema(tags=['motions'], parameters=[tournament_parameter]) +@extend_schema_view( + retrieve=extend_schema(parameters=[id_parameter]), + update=extend_schema(parameters=[id_parameter]), + partial_update=extend_schema(parameters=[id_parameter]), + destroy=extend_schema(parameters=[id_parameter]), +) class MotionViewSet(TournamentAPIMixin, TournamentPublicAPIMixin, ModelViewSet): serializer_class = serializers.MotionSerializer access_preference = ('public_motions', 'motion_tab_released') @@ -113,10 +154,24 @@ def get_queryset(self): return super().get_queryset().filter(filters).prefetch_related('roundmotion_set', 'roundmotion_set__round') +@extend_schema(tags=['break-categories'], parameters=[tournament_parameter]) +@extend_schema_view( + retrieve=extend_schema(parameters=[id_parameter]), + update=extend_schema(parameters=[id_parameter]), + partial_update=extend_schema(parameters=[id_parameter]), + destroy=extend_schema(parameters=[id_parameter]), +) class BreakCategoryViewSet(TournamentAPIMixin, PublicAPIMixin, ModelViewSet): serializer_class = serializers.BreakCategorySerializer +@extend_schema(tags=['speaker-categories'], parameters=[tournament_parameter]) +@extend_schema_view( + retrieve=extend_schema(parameters=[id_parameter]), + update=extend_schema(parameters=[id_parameter]), + partial_update=extend_schema(parameters=[id_parameter]), + destroy=extend_schema(parameters=[id_parameter]), +) class SpeakerCategoryViewSet(TournamentAPIMixin, PublicAPIMixin, ModelViewSet): serializer_class = serializers.SpeakerCategorySerializer @@ -126,6 +181,7 @@ def get_queryset(self): return super().get_queryset() +@extend_schema(tags=['break-categories'], parameters=[tournament_parameter, id_parameter]) class BreakEligibilityView(TournamentAPIMixin, TournamentPublicAPIMixin, RetrieveUpdateAPIView): serializer_class = serializers.BreakEligibilitySerializer access_preference = 'public_break_categories' @@ -134,6 +190,7 @@ def get_queryset(self): return super().get_queryset().prefetch_related('team_set') +@extend_schema(tags=['speaker-categories'], parameters=[tournament_parameter, id_parameter]) class SpeakerEligibilityView(TournamentAPIMixin, TournamentPublicAPIMixin, RetrieveUpdateAPIView): serializer_class = serializers.SpeakerEligibilitySerializer access_preference = 'public_participants' @@ -145,6 +202,7 @@ def get_queryset(self): return qs +@extend_schema(tags=['break-categories'], parameters=[tournament_parameter, id_parameter]) class BreakingTeamsView(TournamentAPIMixin, TournamentPublicAPIMixin, GenerateBreakMixin, GenericViewSet): serializer_class = serializers.BreakingTeamSerializer tournament_field = 'break_category__tournament' @@ -166,17 +224,26 @@ def get_serializer_context(self): return context def list(self, request, *args, **kwargs): - """Pagination might be dangerous here, so disabled.""" + """ + Get breaking teams + --- + Pagination might be dangerous here, so disabled. + """ queryset = self.filter_queryset(self.get_queryset()) serializer = self.get_serializer(queryset, many=True) return Response(serializer.data) def create(self, request, *args, **kwargs): + """Generate break""" self.generate_break((self.break_category,)) return self.list(request, *args, **kwargs) def destroy(self, request, *args, **kwargs): - """Destroy is normally for a specific instance, now QuerySet.""" + """ + Delete break + --- + Destroy is normally for a specific instance, now QuerySet. + """ self.filter_queryset(self.get_queryset()).delete() return Response(status=204) # No content @@ -189,6 +256,12 @@ def update(self, request, *args, **kwargs): return self.create(request, *args, **kwargs) +@extend_schema(tags=['institutions'], parameters=[tournament_parameter]) +@extend_schema_view( + list=extend_schema(parameters=[ + OpenApiParameter('region', description='Only include institutions from the region', required=False, type=str), + ]), +) class InstitutionViewSet(TournamentAPIMixin, TournamentPublicAPIMixin, ModelViewSet): serializer_class = serializers.PerTournamentInstitutionSerializer access_preference = 'public_institutions_list' @@ -211,6 +284,13 @@ def get_queryset(self): ) +@extend_schema(tags=['teams'], parameters=[tournament_parameter]) +@extend_schema_view( + retrieve=extend_schema(parameters=[id_parameter]), + update=extend_schema(parameters=[id_parameter]), + partial_update=extend_schema(parameters=[id_parameter]), + destroy=extend_schema(parameters=[id_parameter]), +) class TeamViewSet(TournamentAPIMixin, TournamentPublicAPIMixin, ModelViewSet): serializer_class = serializers.TeamSerializer access_preference = 'public_participants' @@ -230,6 +310,16 @@ def get_queryset(self): ) +@extend_schema(tags=['adjudicators'], parameters=[tournament_parameter]) +@extend_schema_view( + list=extend_schema(parameters=[ + OpenApiParameter('break', description='Only include breaking adjudicators', required=False, type=bool, default=False), + ]), + retrieve=extend_schema(parameters=[id_parameter]), + update=extend_schema(parameters=[id_parameter]), + partial_update=extend_schema(parameters=[id_parameter]), + destroy=extend_schema(parameters=[id_parameter]), +) class AdjudicatorViewSet(TournamentAPIMixin, TournamentPublicAPIMixin, ModelViewSet): serializer_class = serializers.AdjudicatorSerializer access_preference = 'public_participants' @@ -249,6 +339,16 @@ def get_queryset(self): ).filter(filters) +@extend_schema(tags=['institutions']) +@extend_schema_view( + list=extend_schema(parameters=[ + OpenApiParameter('region', description='Only include institutions from the region', required=False, type=str), + ]), + retrieve=extend_schema(parameters=[id_parameter]), + update=extend_schema(parameters=[id_parameter]), + partial_update=extend_schema(parameters=[id_parameter]), + destroy=extend_schema(parameters=[id_parameter]), +) class GlobalInstitutionViewSet(AdministratorAPIMixin, ModelViewSet): serializer_class = serializers.InstitutionSerializer @@ -259,6 +359,13 @@ def get_queryset(self): return Institution.objects.filter(filters).select_related('region').prefetch_related('venue_constraints__category__tournament') +@extend_schema(tags=['teams'], parameters=[tournament_parameter]) +@extend_schema_view( + retrieve=extend_schema(parameters=[id_parameter]), + update=extend_schema(parameters=[id_parameter]), + partial_update=extend_schema(parameters=[id_parameter]), + destroy=extend_schema(parameters=[id_parameter]), +) class SpeakerViewSet(TournamentAPIMixin, TournamentPublicAPIMixin, ModelViewSet): serializer_class = serializers.SpeakerSerializer tournament_field = "team__tournament" @@ -275,6 +382,13 @@ def get_queryset(self): return super().get_queryset().prefetch_related(category_prefetch) +@extend_schema(tags=['venues'], parameters=[tournament_parameter]) +@extend_schema_view( + retrieve=extend_schema(parameters=[id_parameter]), + update=extend_schema(parameters=[id_parameter]), + partial_update=extend_schema(parameters=[id_parameter]), + destroy=extend_schema(parameters=[id_parameter]), +) class VenueViewSet(TournamentAPIMixin, PublicAPIMixin, ModelViewSet): serializer_class = serializers.VenueSerializer @@ -284,6 +398,13 @@ def get_queryset(self): Prefetch('venuecategory_set', queryset=VenueCategory.objects.select_related('tournament').filter(tournament__isnull=False))) +@extend_schema(tags=['venues'], parameters=[tournament_parameter]) +@extend_schema_view( + retrieve=extend_schema(parameters=[id_parameter]), + update=extend_schema(parameters=[id_parameter]), + partial_update=extend_schema(parameters=[id_parameter]), + destroy=extend_schema(parameters=[id_parameter]), +) class VenueCategoryViewSet(TournamentAPIMixin, PublicAPIMixin, ModelViewSet): serializer_class = serializers.VenueCategorySerializer @@ -293,6 +414,7 @@ def get_queryset(self): Prefetch('venues', queryset=Venue.objects.select_related('tournament').filter(tournament__isnull=False))) +@extend_schema(tags=['checkins'], parameters=[tournament_parameter]) class BaseCheckinsView(AdministratorAPIMixin, TournamentAPIMixin, APIView): name = "Check-ins" @@ -352,24 +474,29 @@ def get_response_dict(self, request, obj, checked, event, **kwargs): def get_queryset(self): return self.model.objects.filter(**self.lookup_kwargs()).select_related(self.tournament_field) + @extend_schema(request=None, responses=serializers.CheckinSerializer, parameters=[id_parameter]) def get(self, request, *args, **kwargs): + """Get checkin status""" obj = self.get_object() event = get_unexpired_checkins(self.tournament, self.window_preference_pref).filter(identifier=obj.checkin_identifier) return Response(self.get_response_dict(request, obj, event.exists(), event.first())) + @extend_schema(request=None, responses=serializers.CheckinSerializer, parameters=[id_parameter]) def delete(self, request, *args, **kwargs): """Checks out""" obj = self.get_object() self.broadcast_checkin(obj, False) return Response(self.get_response_dict(request, obj, False, None)) + @extend_schema(request=None, responses=serializers.CheckinSerializer, parameters=[id_parameter]) def put(self, request, *args, **kwargs): """Checks in""" obj = self.get_object() e = self.broadcast_checkin(obj, True) return Response(self.get_response_dict(request, obj, True, e)) + @extend_schema(request=None, responses=serializers.CheckinSerializer, parameters=[id_parameter]) def patch(self, request, *args, **kwargs): """Toggles the check-in status""" obj = self.get_object() @@ -378,6 +505,7 @@ def patch(self, request, *args, **kwargs): e = self.broadcast_checkin(obj, not check) return Response(self.get_response_dict(request, obj, not check, e)) + @extend_schema(request=None, responses=serializers.CheckinSerializer, parameters=[id_parameter]) def post(self, request, *args, **kwargs): """Creates an identifier""" obj = self.get_object_queryset() # Don't .get() as create_identifiers expects a queryset @@ -388,12 +516,14 @@ def post(self, request, *args, **kwargs): return Response(self.get_response_dict(request, obj.get(), False, None), status=status) +@extend_schema(tags=['adjudicators']) class AdjudicatorCheckinsView(BaseCheckinsView): model = Adjudicator object_api_view = 'api-adjudicator-detail' window_preference_pref = 'checkin_window_people' +@extend_schema(tags=['teams']) class SpeakerCheckinsView(BaseCheckinsView): model = Speaker object_api_view = 'api-speaker-detail' @@ -401,6 +531,7 @@ class SpeakerCheckinsView(BaseCheckinsView): tournament_field = 'team__tournament' +@extend_schema(tags=['venues']) class VenueCheckinsView(BaseCheckinsView): model = Venue object_api_view = 'api-venue-detail' @@ -425,7 +556,12 @@ def get_queryset(self): def get_max_round(self): return None + @extend_schema(tags=['standings'], parameters=[ + tournament_parameter, + OpenApiParameter('category', description='Only include participants in a category (ID)', required=False, type=int), + ]) def get(self, request, **kwargs): + """Get current standings""" metrics, extra_metrics = self.get_metrics() generator = self.generator(metrics, ('rank',), extra_metrics) standings = generator.generate(self.get_queryset(), round=self.get_max_round()) @@ -458,6 +594,14 @@ class TeamStandingsView(BaseStandingsView): generator = TeamStandingsGenerator +@extend_schema(tags=['debates'], parameters=round_parameters) +@extend_schema_view( + list=extend_schema(parameters=round_parameters), + retrieve=extend_schema(parameters=debate_parameters), + update=extend_schema(parameters=debate_parameters), + partial_update=extend_schema(parameters=debate_parameters), + destroy=extend_schema(parameters=debate_parameters), +) class PairingViewSet(RoundAPIMixin, ModelViewSet): class Permission(PublicPreferencePermission): @@ -494,10 +638,21 @@ def get_queryset(self): ) def delete_all(self, request, *args, **kwargs): + """Deletes all pairings in the round""" self.get_queryset().delete() return Response(status=204) # No content +@extend_schema(tags=['results'], parameters=debate_parameters) +@extend_schema_view( + list=extend_schema(parameters=[ + OpenApiParameter('confirmed', description='Only include confirmed ballots', required=False, type=bool, default=False), + ]), + retrieve=extend_schema(parameters=[id_parameter]), + update=extend_schema(parameters=[id_parameter]), + partial_update=extend_schema(parameters=[id_parameter]), + destroy=extend_schema(parameters=[id_parameter]), +) class BallotViewSet(RoundAPIMixin, TournamentPublicAPIMixin, ModelViewSet): serializer_class = serializers.BallotSerializer access_preference = 'ballots_released' @@ -538,6 +693,17 @@ def get_queryset(self): 'participant_submitter__adjudicator__tournament') +@extend_schema(tags=['feedback'], parameters=[tournament_parameter]) +@extend_schema_view( + list=extend_schema(parameters=[ + OpenApiParameter('from_adj', description='Only include questions given to adjudicators', required=False, type=bool, default=False), + OpenApiParameter('from_team', description='Only include questions given to teams', required=False, type=bool, default=False), + ]), + retrieve=extend_schema(parameters=[id_parameter]), + update=extend_schema(parameters=[id_parameter]), + partial_update=extend_schema(parameters=[id_parameter]), + destroy=extend_schema(parameters=[id_parameter]), +) class FeedbackQuestionViewSet(TournamentAPIMixin, PublicAPIMixin, ModelViewSet): serializer_class = serializers.FeedbackQuestionSerializer @@ -550,6 +716,19 @@ def get_queryset(self): return super().get_queryset().filter(filters) +@extend_schema(tags=['feedback'], parameters=[tournament_parameter]) +@extend_schema_view( + list=extend_schema(parameters=[ + OpenApiParameter('source_type', description='The type of participant submitter of the feedback', required=False, type=str, enum=['adjudicator', 'team']), + OpenApiParameter('source', description='The ID of the participant submitting feedback; must be used in conjunction with `source_type`', required=False, type=int), + OpenApiParameter('round', description='The sequence of the round of the submitted feedback', required=False, type=int), + OpenApiParameter('target', description='The ID of the adjudicator receiving feedback', required=False, type=int), + ]), + retrieve=extend_schema(parameters=[id_parameter]), + update=extend_schema(parameters=[id_parameter]), + partial_update=extend_schema(parameters=[id_parameter]), + destroy=extend_schema(parameters=[id_parameter]), +) class FeedbackViewSet(TournamentAPIMixin, AdministratorAPIMixin, ModelViewSet): serializer_class = serializers.FeedbackSerializer tournament_field = 'adjudicator__tournament' @@ -592,9 +771,16 @@ def get_queryset(self): ).prefetch_related(*answers_prefetch) +@extend_schema(tags=['availabilities'], parameters=round_parameters) class AvailabilitiesViewSet(RoundAPIMixin, AdministratorAPIMixin, APIView): serializer_class = serializers.AvailabilitiesSerializer # Isn't actually used + extra_params = [ + OpenApiParameter('adjudicators', description='Only include adjudicators', required=False, type=bool, default=False), + OpenApiParameter('teams', description='Only include teams', required=False, type=bool, default=False), + OpenApiParameter('venues', description='Only include rooms', required=False, type=bool, default=False), + ] + def get_field(self): field = ParticipantAvailabilityForeignKeyField(many=True, view_name='api-availability-list') # Dummy view name field.root._context = {'request': self.request} @@ -614,12 +800,13 @@ def get_queryset(self): return RoundAvailability.objects.filter( ~self.get_filters(), round=self.round).select_related('content_type', 'round__tournament') + @extend_schema(parameters=extra_params) def get(self, request, *args, **kwargs): - # Get all availabilities of the round + """Get all availabilities of the round""" return Response(self.get_field().to_representation(self.get_queryset())) def patch(self, request, *args, **kwargs): - # Toggle the availabilities of the included objects + """Toggle the availabilities of the included objects""" objs = sorted(self.get_field().to_internal_value(request.data), key=lambda o: type(o).__name__) for model, participants in groupby(objs, key=type): contenttype = ContentType.objects.get_for_model(model) @@ -638,7 +825,7 @@ def patch(self, request, *args, **kwargs): return self.get(request, *args, **kwargs) def put(self, request, *args, **kwargs): - # Mark objects as available + """Mark objects as available""" objs = sorted(self.get_field().to_internal_value(request.data), key=lambda o: type(o).__name__) for model, participants in groupby(objs, key=type): contenttype = ContentType.objects.get_for_model(model) @@ -647,7 +834,7 @@ def put(self, request, *args, **kwargs): return self.get(request, *args, **kwargs) def post(self, request, *args, **kwargs): - # Mark objects as unavailable + """Mark objects as unavailable""" objs = sorted(self.get_field().to_internal_value(request.data), key=lambda o: type(o).__name__) for model, participants in groupby(objs, key=type): contenttype = ContentType.objects.get_for_model(model) @@ -657,12 +844,21 @@ def post(self, request, *args, **kwargs): ).delete() return self.get(request, *args, **kwargs) + @extend_schema(parameters=extra_params) def delete(self, request, *args, **kwargs): - # Delete class of availabilities + """Delete class of availabilities""" self.get_queryset().delete() return Response(status=204) +@extend_schema(tags=['debates'], parameters=round_parameters) +@extend_schema_view( + list=extend_schema(parameters=round_parameters), + retrieve=extend_schema(parameters=debate_parameters), + update=extend_schema(parameters=debate_parameters), + partial_update=extend_schema(parameters=debate_parameters), + destroy=extend_schema(parameters=debate_parameters), +) class PreformedPanelViewSet(RoundAPIMixin, AdministratorAPIMixin, ModelViewSet): serializer_class = serializers.PreformedPanelSerializer @@ -697,6 +893,7 @@ def get_queryset(self): ) def delete_all(self, request, *args, **kwargs): + """Delete all preformed panels from round""" self.get_queryset().delete() return Response(status=204) # No content From de7b07c7fa66f52292198ddf842fc9fd84e6673f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 20 Nov 2022 15:28:03 -0400 Subject: [PATCH 027/255] Add URLs to visualize the schema --- tabbycat/api/urls.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tabbycat/api/urls.py b/tabbycat/api/urls.py index a0fd55605a7..7b17559ab5c 100644 --- a/tabbycat/api/urls.py +++ b/tabbycat/api/urls.py @@ -1,4 +1,5 @@ from django.urls import include, path +from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView from rest_framework.routers import SimpleRouter from . import views @@ -15,6 +16,11 @@ views.APIRootView.as_view(), name='api-root'), + path('/schema', include([ + path('.yml', SpectacularAPIView.as_view(), name='api-schema'), + path('/redoc/', SpectacularRedocView.as_view(url_name='api-schema'), name='redoc'), + ])), + path('/v1', include([ path('', views.APIV1RootView.as_view(), From 31d42035b3c955574cb2159e8e2a151eb5e01a67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 20 Nov 2022 16:28:28 -0400 Subject: [PATCH 028/255] Delete outdated schema file --- .github/CONTRIBUTING.rst | 4 +- docs/api-schema.yml | 4659 -------------------------------------- 2 files changed, 2 insertions(+), 4661 deletions(-) delete mode 100644 docs/api-schema.yml diff --git a/.github/CONTRIBUTING.rst b/.github/CONTRIBUTING.rst index 0daf2d72269..f3149f623d5 100644 --- a/.github/CONTRIBUTING.rst +++ b/.github/CONTRIBUTING.rst @@ -157,8 +157,8 @@ Release checklist 1. Check that all migrations have been generated and committed into Git 2. Merge translations from the Crowdin pull request and compile messages -3. Bump version number in ``docs/conf.py`` and ``docs/api-schema.yml`` (if applicable) -4. Bump version number and (if applicable) codename in ``tabbycat/settings/core.py`` +3. Bump version number in ``docs/conf.py`` +4. Bump version number, API version number and (if applicable) codename in ``tabbycat/settings/core.py`` 5. Update the main ``CHANGELOG.rst`` file (including release date) 6. Check the major current deployment options, including: 1. The ``deploy_heroku.py`` script diff --git a/docs/api-schema.yml b/docs/api-schema.yml deleted file mode 100644 index f53c289aae6..00000000000 --- a/docs/api-schema.yml +++ /dev/null @@ -1,4659 +0,0 @@ -openapi: 3.0.0 -info: - title: Tabbycat API - description: Parliamentary debate tabulation software - termsOfService: 'https://tabbycat.readthedocs.io/en/stable/' - contact: - email: ebeaule@tabbycat-debate.org - name: Étienne Beaulé - license: - name: Tabbycat - url: 'https://tabbycat.readthedocs.io/en/stable/about/licence.html' - version: 1.3.0 -security: - - Token: [] -paths: - /: - get: - operationId: _list - description: API Root - security: [] - responses: - '200': - description: '' - '401': - description: The API has been disabled on this site. - parameters: [] - /v1: - get: - operationId: v1_list - description: API Version 1 Root - security: [] - responses: - '200': - description: '' - content: - application/json: - schema: - type: object - properties: - _links: - title: links - type: object - readOnly: true - properties: - v1: - title: v1 - type: string - format: uri - readOnly: true - version: - title: Tabbycat version - type: string - readOnly: true - tags: - - v1 - parameters: [] - /v1/institutions: - get: - operationId: v1_institutions_list - description: List all institutions - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - - name: region - in: query - description: Name of the region to include. - required: false - schema: - type: string - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Institution' - tags: - - v1 - - institutions - post: - operationId: v1_institutions_create - description: Create an institution - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Institution' - tags: - - v1 - - institutions - requestBody: - $ref: '#/components/requestBodies/Institution' - parameters: [] - '/v1/institutions/{id}': - get: - operationId: v1_institutions_read - description: Retrieve an institution - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Institution' - tags: - - v1 - - institutions - post: - operationId: v1_institutions_update - description: Modify an institution - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Institution' - tags: - - v1 - - institutions - requestBody: - $ref: '#/components/requestBodies/Institution' - delete: - operationId: v1_institutions_delete - description: Delete an institution - responses: - '204': - description: '' - tags: - - v1 - - institutions - parameters: - - name: id - in: path - required: true - schema: - type: integer - /v1/tournaments: - get: - operationId: v1_tournaments_list - description: List all tournaments - security: [] - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Tournament' - tags: - - v1 - - tournaments - post: - operationId: v1_tournaments_create - description: Create a tournament - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Tournament' - tags: - - v1 - - tournaments - requestBody: - $ref: '#/components/requestBodies/Tournament' - parameters: [] - '/v1/tournaments/{tournament_slug}': - get: - operationId: v1_tournaments_read - description: Retrieve a tournament - security: [] - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Tournament' - tags: - - v1 - - tournaments - post: - operationId: v1_tournaments_update - description: Modify a tournament - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Tournament' - tags: - - v1 - - tournaments - requestBody: - $ref: '#/components/requestBodies/Tournament' - delete: - operationId: v1_tournaments_delete - description: Delete a tournament - responses: - '204': - description: '' - tags: - - v1 - - tournaments - patch: - operationId: v1_tournaments_partial_update - description: Update a tournament - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Tournament' - tags: - - v1 - - tournaments - requestBody: - $ref: '#/components/requestBodies/Tournament' - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/adjudicators': - get: - operationId: v1_tournaments_adjudicators_list - description: List adjudicators of a tournament - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - - name: break - in: query - description: >- - If present, only show breaking adjudicators, if permissions allow. - required: false - schema: - type: boolean - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Adjudicator' - tags: - - v1 - - adjudicators - post: - operationId: v1_tournaments_adjudicators_create - description: Create an adjudicator for the tournament - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Adjudicator' - tags: - - v1 - - adjudicators - requestBody: - $ref: '#/components/requestBodies/Adjudicator' - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/adjudicators/{id}': - get: - operationId: v1_tournaments_adjudicators_read - description: Retrieve an adjudicator - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Adjudicator' - tags: - - v1 - - adjudicators - post: - operationId: v1_tournaments_adjudicators_update - description: Modify an adjudicator - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Adjudicator' - tags: - - v1 - - adjudicators - requestBody: - $ref: '#/components/requestBodies/Adjudicator' - delete: - operationId: v1_tournaments_adjudicators_delete - description: Delete an adjudicator - responses: - '204': - description: '' - tags: - - v1 - - adjudicators - patch: - operationId: v1_tournaments_adjudicators_partial_update - description: Update an adjudicator - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Adjudicator' - tags: - - v1 - - adjudicators - requestBody: - $ref: '#/components/requestBodies/Adjudicator' - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/adjudicators/{id}/checkin': - get: - operationId: v1_tournaments_adjudicators_checkin_list - description: Check if adjudicator is currently checked in - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Checkin' - '404': - description: 'No identifier. Use POST to generate.' - tags: - - v1 - - adjudicators - - checkins - post: - operationId: v1_tournaments_adjudicators_checkin_create - description: Create an check-in identifier for the adjudicator - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Checkin' - tags: - - v1 - - adjudicators - - checkins - put: - operationId: v1_tournaments_adjudicators_checkin_update - description: Check in the adjudicator - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Checkin' - '404': - description: 'No identifier. Use POST to generate.' - tags: - - v1 - - adjudicators - - checkins - patch: - operationId: v1_tournaments_adjudicators_checkin_partial_update - description: Toggle the adjudicator''s check-in status - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Checkin' - '404': - description: 'No identifier. Use POST to generate.' - tags: - - v1 - - adjudicators - - checkins - delete: - operationId: v1_tournaments_adjudicators_checkin_delete - description: Check out the adjudicator - responses: - '204': - description: '' - '404': - description: 'No identifier. Use POST to generate.' - tags: - - v1 - - adjudicators - - checkins - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/break-categories': - get: - operationId: v1_tournaments_break-categories_list - description: List the tournament''s break categories. - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/BreakCategory' - tags: - - v1 - - break-categories - post: - operationId: v1_tournaments_break-categories_create - description: Create a break category - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/BreakCategory' - tags: - - v1 - - break-categories - requestBody: - $ref: '#/components/requestBodies/BreakCategory' - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/break-categories/{id}': - get: - operationId: v1_tournaments_break-categories_read - description: Retrieve a break category - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/BreakCategory' - tags: - - v1 - - break-categories - post: - operationId: v1_tournaments_break-categories_update - description: Modify a break category - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/BreakCategory' - tags: - - v1 - - break-categories - requestBody: - $ref: '#/components/requestBodies/BreakCategory' - delete: - operationId: v1_tournaments_break-categories_delete - description: Delete a break category - responses: - '204': - description: '' - tags: - - v1 - - break-categories - patch: - operationId: v1_tournaments_break-categories_partial_update - description: Update a break category - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/BreakCategory' - tags: - - v1 - - break-categories - requestBody: - $ref: '#/components/requestBodies/BreakCategory' - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/break-categories/{id}/eligibility': - get: - operationId: v1_tournaments_break-categories_eligibility_read - description: Get team eligibility for all the break category - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/BreakEligibility' - tags: - - v1 - - break-categories - - eligibility - put: - operationId: v1_tournaments_break-categories_eligibility_update - description: Set the teams eligible for the break category - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/BreakEligibility' - tags: - - v1 - - break-categories - - eligibility - requestBody: - $ref: '#/components/requestBodies/BreakEligibility' - patch: - operationId: v1_tournaments_break-categories_eligibility_partial_update - description: Add eligible teams to the break category - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/BreakEligibility' - tags: - - v1 - - break-categories - - eligibility - requestBody: - $ref: '#/components/requestBodies/BreakEligibility' - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/break-categories/{id}/break': - get: - operationId: v1_tournaments_break-categories_break_read - description: Get team breaks for the break category - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/BreakingTeam' - tags: - - v1 - - break-categories - post: - operationId: v1_tournaments_break-categories_break_create - description: Create a break for a break category - responses: - '201': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/BreakingTeam' - tags: - - v1 - - break-categories - delete: - operationId: v1_tournaments_break-categories_break_delete - description: Delete a break category''s break - responses: - '204': - description: '' - tags: - - v1 - - break-categories - patch: - operationId: v1_tournaments_break-categories_break_partial_update - description: Update remark on team and regenerate break - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/BreakingTeam' - tags: - - v1 - - break-categories - requestBody: - $ref: '#/components/requestBodies/PartialBreakingTeam' - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/feedback': - get: - operationId: v1_tournaments_feedback_list - description: >- - List all adjudicator feedback for a tournament. - Warning: Expensive operation. - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - - name: source_type - in: query - description: The type of participant submitter of the feedback - required: false - schema: - type: string - enum: - - adjudicator - - team - - name: source - in: query - description: >- - The ID of the participant submitting feedback; must be used in - conjunction with `source_type` - required: false - schema: - type: integer - - name: target - in: query - description: The ID of the adjudicator receiving feedback - required: false - schema: - type: integer - - name: round - in: query - description: The sequence of the round of the submitted feedback. - required: false - schema: - type: integer - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Feedback' - tags: - - v1 - - feedback - post: - operationId: v1_tournaments_feedback_create - description: Submit feedback on an adjudicator - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Feedback' - tags: - - v1 - - feedback - requestBody: - $ref: '#/components/requestBodies/Feedback' - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/feedback-questions': - get: - operationId: v1_tournaments_feedback-questions_list - description: List questions posed in adjudicator feedback - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - - name: from_adj - in: query - description: >- - Filter to the questions posed to adjudicators. (Determined by - presence of parameter) - required: false - schema: - type: boolean - - name: from_team - in: query - description: >- - Filter by whether the question is posed to teams. (Determined by - presence of parameter) - required: false - schema: - type: boolean - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/FeedbackQuestion' - tags: - - v1 - - questions - post: - operationId: v1_tournaments_feedback-questions_create - description: Create a question for adjudicator feedback - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/FeedbackQuestion' - tags: - - v1 - - questions - requestBody: - $ref: '#/components/requestBodies/FeedbackQuestion' - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/feedback-questions/{id}': - get: - operationId: v1_tournaments_feedback-questions_read - description: Retrieve a question for adjudicator feedback - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/FeedbackQuestion' - tags: - - v1 - - questions - post: - operationId: v1_tournaments_feedback-questions_update - description: Modify a question for adjuicator feedback - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/FeedbackQuestion' - tags: - - v1 - - questions - requestBody: - $ref: '#/components/requestBodies/FeedbackQuestion' - delete: - operationId: v1_tournaments_feedback-questions_delete - description: Delete an adjudicator feedback question including answers - responses: - '204': - description: '' - tags: - - v1 - - questions - patch: - operationId: v1_tournaments_feedback-questions_partial_update - description: Update a feedback question - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/FeedbackQuestion' - tags: - - v1 - - questions - requestBody: - $ref: '#/components/requestBodies/FeedbackQuestion' - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/feedback/{id}': - get: - operationId: v1_tournaments_feedback_read - description: Retrieve submitted feedback - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Feedback' - tags: - - v1 - - feedback - post: - operationId: v1_tournaments_feedback_update - description: >- - Modify feedback. Only the confirmed and ignored fields can be updated; - all other fields are ignored. - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Feedback' - tags: - - v1 - - feedback - requestBody: - $ref: '#/components/requestBodies/Feedback' - delete: - operationId: v1_tournaments_feedback_delete - description: Delete feedback - responses: - '204': - description: '' - tags: - - v1 - - feedback - patch: - operationId: v1_tournaments_feedback_partial_update - description: Update feedback - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Feedback' - tags: - - v1 - - feedback - requestBody: - $ref: '#/components/requestBodies/Feedback' - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/institutions': - get: - operationId: v1_tournaments_institutions_list - description: >- - List all institutions with an affiliated participant in the tournament - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - - name: region - in: query - description: Name of the region to include. - required: false - schema: - type: string - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/TournamentInstitution' - tags: - - v1 - - institutions - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/motions': - get: - operationId: v1_tournaments_motions_list - description: List motions of a tournament - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Motion' - tags: - - v1 - - motions - post: - operationId: v1_tournaments_motions_create - description: Create a motion - responses: - '201': - description: '' - tags: - - v1 - - motions - requestBody: - $ref: '#/components/requestBodies/Motion' - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/motions/{id}': - get: - operationId: v1_tournaments_motions_read - description: Retrieve a motion - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Motion' - tags: - - v1 - - motions - post: - operationId: v1_tournaments_motions_update - description: Modify a motion - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Motion' - tags: - - v1 - - motions - requestBody: - $ref: '#/components/requestBodies/Motion' - delete: - operationId: v1_tournaments_motions_delete - description: Delete a motion - responses: - '204': - description: '' - tags: - - v1 - - motions - patch: - operationId: v1_tournaments_motions_partial_update - description: Update a motion - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Motion' - tags: - - v1 - - motions - requestBody: - $ref: '#/components/requestBodies/Motion' - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/preferences': - get: - operationId: v1_tournaments_preferences_list - description: List tournament preferences - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Preference' - tags: - - v1 - - preferences - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/preferences/bulk': - post: - operationId: v1_tournaments_preferences_bulk - summary: Update multiple preferences at once - description: |- - this is a long method because we ensure everything is valid - before actually persisting the changes - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Preference' - tags: - - v1 - - preferences - requestBody: - $ref: '#/components/requestBodies/Preference' - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/preferences/{id}': - get: - operationId: v1_tournaments_preferences_read - description: Retrieve specific tournament preference - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Preference' - tags: - - v1 - - preferences - put: - operationId: v1_tournaments_preferences_update - description: Update a tournament preference - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Preference' - tags: - - v1 - - preferences - requestBody: - $ref: '#/components/requestBodies/Preference' - patch: - operationId: v1_tournaments_preferences_partial_update - description: Partially update tournament preference - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Preference' - tags: - - v1 - - preferences - requestBody: - $ref: '#/components/requestBodies/Preference' - parameters: - - name: id - in: path - description: >- - A unique integer value identifying this tournament preference. - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/rounds': - get: - operationId: v1_tournaments_rounds_list - description: List rounds of the tournament - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Round' - tags: - - v1 - - rounds - post: - operationId: v1_tournaments_rounds_create - description: Create round in tournament - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Round' - tags: - - v1 - - rounds - requestBody: - $ref: '#/components/requestBodies/Round' - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/rounds/{round_seq}': - get: - operationId: v1_tournaments_rounds_read - description: Retrieve a round - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Round' - tags: - - v1 - - rounds - post: - operationId: v1_tournaments_rounds_update - description: >- - Modify a round. Motions are modified by sequence, so their text fields - can be modified. To move motions, placeholder sequences are needed - through Motion endpoints, as well as for deleting motions. Motions can - be appended through this method. An empty field has no effect. - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Round' - tags: - - v1 - - rounds - requestBody: - $ref: '#/components/requestBodies/Round' - delete: - operationId: v1_tournaments_rounds_delete - description: Delete a round - responses: - '204': - description: '' - tags: - - v1 - - rounds - patch: - operationId: v1_tournaments_rounds_partial_update - description: Update a round - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Round' - tags: - - v1 - - rounds - requestBody: - $ref: '#/components/requestBodies/Round' - parameters: - - name: round_seq - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/rounds/{round_seq}/pairings': - get: - operationId: v1_tournaments_rounds_pairings_list - description: List debates in the round - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Debate' - tags: - - v1 - - debates - post: - operationId: v1_tournaments_rounds_pairings_create - description: Create a debate between teams with adjudicators in the round - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Debate' - tags: - - v1 - - debates - requestBody: - $ref: '#/components/requestBodies/Debate' - delete: - operationId : v1_tournaments_rounds_pairings_delete_all - description: Delete all pairings of the round - responses: - '204': - description: 'All pairings have been deleted' - tags: - - v1 - - debates - parameters: - - name: round_seq - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/rounds/{round_seq}/pairings/{debate_pk}': - get: - operationId: v1_tournaments_rounds_pairings_read - description: Retrieve a debate in the round - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Debate' - tags: - - v1 - - debates - post: - operationId: v1_tournaments_rounds_pairings_update - description: >- - Modify a pairing in the round. Teams can be modified, but cannot be - moved between sides. This method thus cannot be used when confirming - sides. An empty field has no effect. - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Debate' - tags: - - v1 - - debates - requestBody: - $ref: '#/components/requestBodies/Debate' - delete: - operationId: v1_tournaments_rounds_pairings_delete - description: Delete a matchup including panel - responses: - '204': - description: '' - tags: - - v1 - - debates - patch: - operationId: v1_tournaments_rounds_pairings_partial_update - description: Update a pairing - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Debate' - tags: - - v1 - - debates - requestBody: - $ref: '#/components/requestBodies/Debate' - parameters: - - name: debate_pk - in: path - required: true - schema: - type: integer - - name: round_seq - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/rounds/{round_seq}/pairings/{debate_pk}/ballots': - get: - operationId: v1_tournaments_rounds_pairings_ballots_list - description: Retrieve ballots for a debate - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/DebateResult' - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - - name: confirmed - in: query - description: Whether to include unconfirmed ballots - required: false - schema: - type: boolean - tags: - - v1 - - results - post: - operationId: v1_tournaments_rounds_pairings_ballots_create - description: Create a result for a debate - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/DebateResult' - tags: - - v1 - - results - requestBody: - $ref: '#/components/requestBodies/DebateResult' - parameters: - - name: debate_pk - in: path - required: true - schema: - type: integer - - name: round_seq - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/rounds/{round_seq}/pairings/{debate_pk}/ballots/{id}': - get: - operationId: v1_tournaments_rounds_pairings_ballots_read - description: Retrieve a ballot of a debate - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/DebateResult' - tags: - - v1 - - results - post: - operationId: v1_tournaments_rounds_pairings_ballots_update - description: Modify a debate ballot. Cannot re-edit scores. - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/DebateResult' - tags: - - v1 - - results - requestBody: - $ref: '#/components/requestBodies/DebateResult' - delete: - operationId: v1_tournaments_rounds_pairings_ballots_delete - description: Delete a ballot of the debate - responses: - '204': - description: '' - tags: - - v1 - - results - patch: - operationId: v1_tournaments_rounds_pairings_ballots_partial_update - description: Update a ballot - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/DebateResult' - tags: - - v1 - - results - requestBody: - $ref: '#/components/requestBodies/DebateResult' - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: debate_pk - in: path - required: true - schema: - type: integer - - name: round_seq - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/rounds/{round_seq}/availabilities': - get: - operationId: v1_tournaments_rounds_availabilities_list - description: List all participants marked as available for the round - parameters: - - name: adjudicators - in: query - description: Whether to list available adjudicators - required: false - schema: - type: boolean - - name: teams - in: query - description: Whether to list available teams - required: false - schema: - type: boolean - - name: venues - in: query - description: Whether to list available rooms - required: false - schema: - type: boolean - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - title: Participant - type: string - format: uri - tags: - - v1 - - availabilities - post: - operationId: v1_tournaments_rounds_availabilities_post - description: Marks participants as unavailable for a round - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - title: Participant - type: string - format: uri - tags: - - v1 - - availabilities - requestBody: - content: - application/json: - schema: - type: array - items: - title: Participant - type: string - format: uri - put: - operationId: v1_tournaments_rounds_availabilities_put - description: Marks participants as available for a round - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - title: Participant - type: string - format: uri - tags: - - v1 - - availabilities - requestBody: - content: - application/json: - schema: - type: array - items: - title: Participant - type: string - format: uri - patch: - operationId: v1_tournaments_rounds_availabilities_patch - description: Toggles participants' availabilities for a round - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - title: Participant - type: string - format: uri - tags: - - v1 - - availabilities - requestBody: - content: - application/json: - schema: - type: array - items: - title: Participant - type: string - format: uri - delete: - operationId: v1_tournaments_rounds_availabilities_delete - description: >- - Marks all participants of specified type as unavailable for the round - parameters: - - name: adjudicators - in: query - description: Whether to unmark available adjudicators - required: false - schema: - type: boolean - - name: teams - in: query - description: Whether to unmark available teams - required: false - schema: - type: boolean - - name: venues - in: query - description: Whether to unmark available rooms - required: false - schema: - type: boolean - responses: - '204': - description: '' - tags: - - v1 - - availabilities - parameters: - - name: round_seq - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/speaker-categories': - get: - operationId: v1_tournaments_speaker-categories_list - description: List all speaker categories of the tournament - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/SpeakerCategory' - tags: - - v1 - - speaker-categories - post: - operationId: v1_tournaments_speaker-categories_create - description: Create a speaker category - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/SpeakerCategory' - tags: - - v1 - - speaker-categories - requestBody: - $ref: '#/components/requestBodies/SpeakerCategory' - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/speaker-categories/{id}': - get: - operationId: v1_tournaments_speaker-categories_read - description: Retrieve a speaker category - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/SpeakerCategory' - tags: - - v1 - - speaker-categories - post: - operationId: v1_tournaments_speaker-categories_update - description: Modify a speaker category - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/SpeakerCategory' - tags: - - v1 - - speaker-categories - requestBody: - $ref: '#/components/requestBodies/SpeakerCategory' - delete: - operationId: v1_tournaments_speaker-categories_delete - description: Delete a speaker category with eligibilities - responses: - '204': - description: '' - tags: - - v1 - - speaker-categories - patch: - operationId: v1_tournaments_speaker-categories_partial_update - description: Update a speaker category - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/SpeakerCategory' - tags: - - v1 - - speaker-categories - requestBody: - $ref: '#/components/requestBodies/SpeakerCategory' - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/speaker-categories/{id}/eligibility': - get: - operationId: v1_tournaments_speaker-categories_eligibility_read - description: List speakers included in the category - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/SpeakerEligibility' - tags: - - v1 - - speaker-categories - - eligibility - put: - operationId: v1_tournaments_speaker-categories_eligibility_update - description: Set eligible speakers of the category - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/SpeakerEligibility' - tags: - - v1 - - speaker-categories - - eligibility - requestBody: - $ref: '#/components/requestBodies/SpeakerEligibility' - patch: - operationId: v1_tournaments_speaker-categories_eligibility_partial_update - description: Add speakers to the category - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/SpeakerEligibility' - tags: - - v1 - - speaker-categories - - eligibility - requestBody: - $ref: '#/components/requestBodies/SpeakerEligibility' - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/speakers': - get: - operationId: v1_tournaments_speakers_list - description: List speakers of tournament teams - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Speaker' - tags: - - v1 - - speakers - post: - operationId: v1_tournaments_speakers_create - description: Create new speaker to team - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Speaker' - tags: - - v1 - - speakers - requestBody: - $ref: '#/components/requestBodies/Speaker' - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/speakers/standings': - get: - operationId: v1_tournaments_speakers_standings_list - description: Get speaker standings in the tournament - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - - name: category - in: query - description: Restrict the standings to a speaker category - required: false - schema: - type: integer - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/SpeakerStandings' - tags: - - v1 - - speakers - - standings - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/speakers/{id}': - get: - operationId: v1_tournaments_speakers_read - description: Retrieve a speaker - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Speaker' - tags: - - v1 - - speakers - post: - operationId: v1_tournaments_speakers_update - description: Modify a speaker - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Speaker' - tags: - - v1 - - speakers - requestBody: - $ref: '#/components/requestBodies/Speaker' - delete: - operationId: v1_tournaments_speakers_delete - description: Delete a speaker - responses: - '204': - description: '' - tags: - - v1 - - speakers - patch: - operationId: v1_tournaments_speakers_partial_update - description: Update a speaker - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Speaker' - tags: - - v1 - - speakers - requestBody: - $ref: '#/components/requestBodies/Speaker' - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/speakers/{id}/checkin': - get: - operationId: v1_tournaments_speakers_checkin_list - description: Check if speaker is currently checked in - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Checkin' - '404': - description: 'No identifier. Use POST to generate.' - tags: - - v1 - - speakers - - checkins - post: - operationId: v1_tournaments_speakers_checkin_create - description: Create an check-in identifier for the speaker - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Checkin' - tags: - - v1 - - speakers - - checkins - put: - operationId: v1_tournaments_speakers_checkin_update - description: Check in the speaker - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Checkin' - '404': - description: 'No identifier. Use POST to generate.' - tags: - - v1 - - speakers - - checkins - patch: - operationId: v1_tournaments_speakers_checkin_partial_update - description: Toggle the speaker''s check-in status - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Checkin' - '404': - description: 'No identifier. Use POST to generate.' - tags: - - v1 - - speakers - - checkins - delete: - operationId: v1_tournaments_speakers_checkin_delete - description: Check out the speaker - responses: - '204': - description: '' - '404': - description: 'No identifier. Use POST to generate.' - tags: - - v1 - - speakers - - checkins - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/teams': - get: - operationId: v1_tournaments_teams_list - description: List teams in the tournament - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Team' - tags: - - v1 - - teams - post: - operationId: v1_tournaments_teams_create - description: Create team in the tournament - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Team' - tags: - - v1 - - teams - requestBody: - $ref: '#/components/requestBodies/Team' - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/teams/standings': - get: - operationId: v1_tournaments_teams_standings_list - description: Get the team standings - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - - name: category - in: query - description: Restrict the standings to a break category - required: false - schema: - type: integer - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/TeamStandings' - tags: - - v1 - - teams - - standings - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/teams/{id}': - get: - operationId: v1_tournaments_teams_read - description: Retrieve a team - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Team' - tags: - - v1 - - teams - post: - operationId: v1_tournaments_teams_update - description: >- - Modify a team. The speakers field can only create speakers, not - modify or remove them. Leave empty if none are being added. - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Team' - tags: - - v1 - - teams - requestBody: - $ref: '#/components/requestBodies/Team' - delete: - operationId: v1_tournaments_teams_delete - description: Delete a team - responses: - '204': - description: '' - tags: - - v1 - - teams - patch: - operationId: v1_tournaments_team_partial_update - description: Update a team - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Team' - tags: - - v1 - - teams - requestBody: - $ref: '#/components/requestBodies/Team' - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/venue-categories': - get: - operationId: v1_tournaments_venue-categories_list - description: List venue categories - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/VenueCategory' - tags: - - v1 - - venue-categories - post: - operationId: v1_tournaments_venue-categories_create - description: Create a venue category - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/VenueCategory' - tags: - - v1 - - venue-categories - requestBody: - $ref: '#/components/requestBodies/VenueCategory' - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/venue-categories/{id}': - get: - operationId: v1_tournaments_venue-categories_read - description: Retrieve venue category - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/VenueCategory' - tags: - - v1 - - venue-categories - post: - operationId: v1_tournaments_venue-categories_update - description: Modify a venue category - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/VenueCategory' - tags: - - v1 - - venue-categories - requestBody: - $ref: '#/components/requestBodies/VenueCategory' - delete: - operationId: v1_tournaments_venue-categories_delete - description: Delete a venue category - responses: - '204': - description: '' - tags: - - v1 - - venue-categories - patch: - operationId: v1_tournaments_venue-categories_partial_update - description: Update a venue category - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/VenueCategory' - tags: - - v1 - - venue-categories - requestBody: - $ref: '#/components/requestBodies/VenueCategory' - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/venues': - get: - operationId: v1_tournaments_venues_list - description: List venues added for the tournament - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Venue' - tags: - - v1 - - venues - post: - operationId: v1_tournaments_venues_create - description: Add a venue to the tournament - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Venue' - tags: - - v1 - - venues - requestBody: - $ref: '#/components/requestBodies/Venue' - parameters: - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/venues/{id}': - get: - operationId: v1_tournaments_venues_read - description: Retrieve a venue - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Venue' - tags: - - v1 - - venues - post: - operationId: v1_tournaments_venues_update - description: Modify a venue - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Venue' - tags: - - v1 - - venues - requestBody: - $ref: '#/components/requestBodies/Venue' - delete: - operationId: v1_tournaments_venues_delete - description: Delete a venue - responses: - '204': - description: '' - tags: - - v1 - - venues - patch: - operationId: v1_tournaments_venues_partial_update - description: Update a venue - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Venue' - tags: - - v1 - - venues - requestBody: - $ref: '#/components/requestBodies/Venue' - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/venues/{id}/checkin': - get: - operationId: v1_tournaments_venues_checkin_list - description: Check if venue is currently checked in - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Checkin' - '404': - description: 'No identifier. Use POST to generate.' - tags: - - v1 - - venues - - checkins - post: - operationId: v1_tournaments_venues_checkin_create - description: Create an check-in identifier for the venue - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Checkin' - tags: - - v1 - - venues - - checkins - put: - operationId: v1_tournaments_venues_checkin_update - description: Check in the venue - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Checkin' - '404': - description: 'No identifier. Use POST to generate.' - tags: - - v1 - - venues - - checkins - patch: - operationId: v1_tournaments_venues_checkin_partial_update - description: Toggle the venue''s check-in status - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/Checkin' - '404': - description: 'No identifier. Use POST to generate.' - tags: - - v1 - - venues - - checkins - delete: - operationId: v1_tournaments_venues_checkin_delete - description: Check out the venue - responses: - '204': - description: '' - '404': - description: 'No identifier. Use POST to generate.' - tags: - - v1 - - venues - - checkins - parameters: - - name: id - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/rounds/{round_seq}/preformed-panels': - get: - operationId: v1_tournaments_rounds_preformedpanel_list - description: List preformed panels in the round - parameters: - - name: limit - in: query - description: Number of results to return per page. - required: false - schema: - type: integer - - name: offset - in: query - description: The initial index from which to return the results. - required: false - schema: - type: integer - responses: - '200': - description: '' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/PreformedPanel' - tags: - - v1 - - preformed - post: - operationId: v1_tournaments_rounds_preformedpanel_create - description: Create a preformed panel for the round - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/PreformedPanel' - tags: - - v1 - - preformed - requestBody: - $ref: '#/components/requestBodies/PreformedPanel' - delete: - operationId : v1_tournaments_rounds_preformedpanel_delete_all - description: Delete all preformed panels in the round - responses: - '204': - description: 'All preformed panels have been deleted' - tags: - - v1 - - preformed - put: - operationId: v1_tournaments_rounds_preformedpanel_put - description: Add blank preformed panels for the round - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/PreformedPanel' - tags: - - v1 - - preformed - parameters: - - name: round_seq - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string - '/v1/tournaments/{tournament_slug}/rounds/{round_seq}/preformed-panels/{debate_pk}': - get: - operationId: v1_tournaments_rounds_preformedpanel_read - description: Retrieve a preformed panel of the round - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/PreformedPanel' - tags: - - v1 - - preformed - post: - operationId: v1_tournaments_rounds_preformedpanel_update - description: Modify a preformed panel - responses: - '201': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/PreformedPanel' - tags: - - v1 - - preformed - requestBody: - $ref: '#/components/requestBodies/PreformedPanel' - delete: - operationId: v1_tournaments_rounds_preformedpanel_delete - description: Delete a preformed panel - responses: - '204': - description: '' - tags: - - v1 - - preformed - patch: - operationId: v1_tournaments_rounds_preformedpanel_partial_update - description: Update a preformed panel - responses: - '200': - description: '' - content: - application/json: - schema: - $ref: '#/components/schemas/PreformedPanel' - tags: - - v1 - - preformed - requestBody: - $ref: '#/components/requestBodies/PreformedPanel' - parameters: - - name: debate_pk - in: path - required: true - schema: - type: integer - - name: round_seq - in: path - required: true - schema: - type: integer - - name: tournament_slug - in: path - required: true - schema: - type: string -servers: - - url: 'https://{server}/api' - variables: - server: - default: localhost -components: - requestBodies: - TournamentInstitution: - content: - application/json: - schema: - $ref: '#/components/schemas/TournamentInstitution' - required: true - Venue: - content: - application/json: - schema: - $ref: '#/components/schemas/Venue' - required: true - FeedbackQuestion: - content: - application/json: - schema: - $ref: '#/components/schemas/FeedbackQuestion' - required: true - Preference: - content: - application/json: - schema: - $ref: '#/components/schemas/Preference' - required: true - Motion: - content: - application/json: - schema: - $ref: '#/components/schemas/Motion' - required: true - SpeakerEligibility: - content: - application/json: - schema: - $ref: '#/components/schemas/SpeakerEligibility' - required: true - Feedback: - content: - application/json: - schema: - $ref: '#/components/schemas/Feedback' - required: true - VenueCategory: - content: - application/json: - schema: - $ref: '#/components/schemas/VenueCategory' - required: true - Institution: - content: - application/json: - schema: - $ref: '#/components/schemas/Institution' - required: true - Tournament: - content: - application/json: - schema: - $ref: '#/components/schemas/Tournament' - required: true - Adjudicator: - content: - application/json: - schema: - $ref: '#/components/schemas/Adjudicator' - required: true - BreakCategory: - content: - application/json: - schema: - $ref: '#/components/schemas/BreakCategory' - required: true - BreakEligibility: - content: - application/json: - schema: - $ref: '#/components/schemas/BreakEligibility' - required: true - Round: - content: - application/json: - schema: - $ref: '#/components/schemas/Round' - required: true - Debate: - content: - application/json: - schema: - $ref: '#/components/schemas/Debate' - required: true - SpeakerCategory: - content: - application/json: - schema: - $ref: '#/components/schemas/SpeakerCategory' - required: true - Speaker: - content: - application/json: - schema: - $ref: '#/components/schemas/Speaker' - required: true - Team: - content: - application/json: - schema: - $ref: '#/components/schemas/Team' - required: true - DebateResult: - content: - application/json: - schema: - $ref: '#/components/schemas/DebateResult' - required: true - PreformedPanel: - content: - application/json: - schema: - $ref: '#/components/schemas/PreformedPanel' - required: true - PartialBreakingTeam: - content: - application/json: - schema: - required: - - team - type: object - properties: - team: - title: Team - type: string - format: uri - remark: - title: Remark - type: string - nullable: true - enum: - - C - - I - - D - - d - - t - - w - - null - securitySchemes: - Token: - type: apiKey - name: Authorization - in: header - schemas: - VenueConstraint: - required: - - category - - priority - type: object - properties: - category: - title: Category - description: The venue category to constrain to - type: string - format: uri - priority: - title: Priority - description: How important is the constraint - type: integer - Institution: - required: - - name - - code - type: object - properties: - id: - title: ID - type: integer - readOnly: true - url: - title: Url - type: string - format: uri - readOnly: true - name: - title: Name - description: >- - The institution's full name, e.g., "University of Cambridge", - "Victoria University of Wellington" - type: string - maxLength: 100 - minLength: 1 - code: - title: Code - description: >- - What the institution is typically called for short, e.g., - "Cambridge", "Vic Wellington" - type: string - maxLength: 20 - minLength: 1 - region: - title: Region - type: string - maxLength: 100 - nullable: true - venue_constraints: - type: array - items: - $ref: '#/components/schemas/VenueConstraint' - TournamentInstitution: - required: - - name - - code - type: object - properties: - id: - title: ID - type: integer - readOnly: true - url: - title: Url - type: string - format: uri - readOnly: true - name: - title: Name - description: >- - The institution's full name, e.g., "University of Cambridge", - "Victoria University of Wellington" - type: string - maxLength: 100 - minLength: 1 - code: - title: Code - description: >- - What the institution is typically called for short, e.g., - "Cambridge", "Vic Wellington" - type: string - maxLength: 20 - minLength: 1 - region: - title: Region - type: string - maxLength: 100 - nullable: true - teams: - title: Teams - type: array - items: - type: string - format: uri - adjudicators: - title: Adjudicators - type: array - items: - type: string - format: uri - venue_constraints: - type: array - items: - $ref: '#/components/schemas/VenueConstraint' - Tournament: - required: - - name - - slug - type: object - properties: - id: - title: ID - type: integer - readOnly: true - url: - title: Url - type: string - format: uri - readOnly: true - current_rounds: - type: array - items: - type: string - format: uri - readOnly: true - uniqueItems: true - _links: - title: links - type: object - readOnly: true - properties: - rounds: - title: Rounds - type: string - format: uri - readOnly: true - break_categories: - title: Break categories - type: string - format: uri - readOnly: true - speaker_categories: - title: Speaker categories - type: string - format: uri - readOnly: true - institutions: - title: Institutions - type: string - format: uri - readOnly: true - teams: - title: Teams - type: string - format: uri - readOnly: true - adjudicators: - title: Adjudicators - type: string - format: uri - readOnly: true - speakers: - title: Speakers - type: string - format: uri - readOnly: true - venues: - title: Venues - type: string - format: uri - readOnly: true - venue_categories: - title: Venue categories - type: string - format: uri - readOnly: true - motions: - title: Motions - type: string - format: uri - readOnly: true - feedback: - title: Feedback - type: string - format: uri - readOnly: true - feedback_questions: - title: Feedback questions - type: string - format: uri - readOnly: true - preferences: - title: Preferences - type: string - format: uri - readOnly: true - name: - title: Name - description: >- - The full name, e.g. "Australasian Intervarsity Debating - Championships 2016" - type: string - maxLength: 100 - minLength: 1 - short_name: - title: Short name - description: 'The name used in the menu, e.g. "Australs 2016"' - type: string - maxLength: 25 - seq: - title: Sequence number - description: >- - A number that determines the relative order in which tournaments - are displayed on the homepage. - type: integer - maximum: 2147483647 - minimum: -2147483648 - nullable: true - slug: - title: Slug - description: >- - The sub-URL of the tournament, cannot have spaces, e.g. - "australs2016" - type: string - format: slug - pattern: '^[-a-zA-Z0-9_]+$' - maxLength: 50 - minLength: 1 - active: - title: Active - type: boolean - Preference: - required: - - value - type: object - properties: - section: - title: Section - type: string - readOnly: true - minLength: 1 - name: - title: Name - type: string - readOnly: true - minLength: 1 - identifier: - title: Identifier - type: string - readOnly: true - default: - title: Default - type: string - readOnly: true - value: - title: Value - type: string - verbose_name: - title: Verbose name - type: string - readOnly: true - help_text: - title: Help text - type: string - readOnly: true - additional_data: - title: Additional data - type: string - readOnly: true - field: - title: Field - type: string - readOnly: true - Checkin: - type: object - properties: - object: - title: object - type: string - format: uri - readOnly: true - barcode: - title: barcode - type: integer - pattern: '^[1-9]\d*$' - readOnly: true - nullable: true - checked: - title: Checked - type: boolean - readOnly: true - timestamp: - title: Timestamp - type: string - format: date-time - readOnly: true - nullable: true - Adjudicator: - required: - - name - - institution - - institution_conflicts - - team_conflicts - - adjudicator_conflicts - type: object - properties: - id: - title: ID - type: integer - readOnly: true - url: - title: Url - type: string - format: uri - readOnly: true - name: - title: Name - type: string - maxLength: 70 - gender: - title: Gender - description: >- - Gender is displayed in the adjudicator allocation interface, and - nowhere else - enum: - - M - - F - - O - email: - title: E-mail address - type: string - format: email - maxLength: 254 - nullable: true - phone: - title: Phone - type: string - maxLength: 40 - anonymous: - title: Anonymous - description: >- - Anonymous persons will have their name and team redacted on public - tab releases - type: boolean - pronoun: - title: Pronoun - description: >- - If printing ballots using Tabbycat, there is the option to - pre-print pronouns - type: string - maxLength: 10 - institution: - title: Institution - type: string - format: uri - nullable: true - base_score: - title: Base score - type: number - format: float - breaking: - title: Breaking - type: boolean - trainee: - title: Always trainee - description: >- - If checked, this adjudicator will never be auto-allocated a voting - position, regardless of their score - type: boolean - independent: - title: Independent - type: boolean - adj_core: - title: Adjudication core - type: boolean - institution_conflicts: - title: Institution conflicts - type: array - items: - type: string - format: uri - team_conflicts: - title: Team conflicts - type: array - items: - type: string - format: uri - adjudicator_conflicts: - title: Adjudicator conflicts - type: array - items: - type: string - format: uri - url_key: - title: URL Key - description: >- - Set null to automatically generate; set as empty string to have no URL key. - type: string - format: slug - pattern: '^[-a-zA-Z0-9_]+$' - maxLength: 24 - nullable: true - _links: - title: links - type: object - readOnly: true - properties: - checkin: - title: Checkins - type: string - format: uri - readOnly: true - venue_constraints: - type: array - items: - $ref: '#/components/schemas/VenueConstraint' - BreakCategory: - required: - - name - - slug - - seq - - break_size - - is_general - - priority - type: object - properties: - id: - title: ID - type: integer - readOnly: true - name: - title: Name - description: 'Name to be displayed, e.g., "ESL"' - type: string - maxLength: 50 - slug: - title: Slug - description: 'Slug for URLs, e.g., "esl"' - type: string - format: slug - seq: - title: Sequence number - description: The order in which the categories are displayed - type: integer - break_size: - title: Break size - description: Number of breaking teams in this category - type: integer - minimum: 2 - is_general: - title: Is general - description: >- - True if most teams eligible for this category, e.g. Open, False - otherwise - type: boolean - priority: - title: Priority - description: >- - If a team breaks in multiple categories, higher priority numbers - take precedence; teams can break into multiple categories if and - only if they all have the same priority - type: integer - limit: - title: Limit - description: >- - At most this many teams will be shown on the public tab for this - category, or use 0 for no limit - type: integer - rule: - title: Rule - description: >- - Rule for how the break is calculated (most tournaments should use - "Standard") - type: string - enum: - - standard - - aida-1996 - - aida-2016-easters - - aida-2016-australs - - aida-2019-australs-open - url: - title: Url - type: string - format: uri - readOnly: true - _links: - title: links - type: object - readOnly: true - properties: - eligibility: - title: Eligibility - type: string - format: uri - readOnly: true - SpeakerCategory: - required: - - name - - slug - - seq - type: object - properties: - id: - title: ID - type: integer - readOnly: true - name: - title: Name - description: 'Name to be displayed, e.g., "ESL"' - type: string - maxLength: 50 - slug: - title: Slug - description: 'Slug for URLs, e.g., "esl"' - type: string - format: slug - seq: - title: Sequence number - description: The order in which the categories are displayed - type: integer - limit: - title: Limit - description: >- - At most this many speakers will be shown on the public tab for this - category, or use 0 for no limit - type: integer - public: - title: Public - description: >- - If checked, this category will be included in the speaker category - tabs shown to the public - type: boolean - url: - title: Url - type: string - format: uri - readOnly: true - _links: - title: links - type: object - readOnly: true - properties: - eligibility: - title: Eligibility - type: string - format: uri - readOnly: true - BreakEligibility: - required: - - team_set - type: object - properties: - slug: - title: Slug - description: 'Slug for URLs, e.g., "esl"' - type: string - format: slug - readOnly: true - team_set: - title: Team set - type: array - items: - type: string - format: uri - SpeakerEligibility: - required: - - speaker_set - type: object - properties: - slug: - title: Slug - description: 'Slug for URLs, e.g., "esl"' - type: string - format: slug - readOnly: true - speaker_set: - title: Speaker set - type: array - items: - type: string - format: uri - Feedback: - required: - - adjudicator - - source - - debate - - score - type: object - properties: - id: - title: ID - type: integer - readOnly: true - url: - title: Url - type: string - format: uri - readOnly: true - adjudicator: - title: Adjudicator - type: string - format: uri - source: - title: Source - description: The adjudicator or team submitting this feedback - type: string - format: uri - debate: - title: Debate - description: The debate for which this feedback originates - type: string - format: uri - answers: - title: Answers - type: array - items: - type: object - required: - - question - - answer - properties: - question: - title: question - type: string - format: uri - answer: - title: Answer - type: string - timestamp: - type: string - format: date-time - title: Timestamp - version: - title: Version - type: integer - readOnly: true - submitter_type: - title: Submitter type - type: string - enum: - - T - - P - readOnly: true - confirmed: - title: Confirmed - type: boolean - confirm_timestamp: - title: Confirm timestamp - type: string - format: date-time - readOnly: true - nullable: true - ip_address: - title: IP address - type: string - format: ipv4 - readOnly: true - score: - title: Score - type: number - format: float - ignored: - title: Ignored - description: Whether the feedback should affect the judge's score - type: boolean - participant_submitter: - title: Participant submitter - description: The submitting participant, adjudicator or speaker - type: string - format: uri - nullable: true - readOnly: true - private_url: - title: Private URL - description: >- - Whether the feedback was submitted through the participant's - private URL. - type: boolean - readOnly: true - submitter: - title: Submitter - type: integer - nullable: true - readOnly: true - confirmer: - title: Confirmer - type: integer - nullable: true - readOnly: true - FeedbackQuestion: - required: - - choices - - seq - - text - - name - - reference - - from_adj - - from_team - - answer_type - type: object - properties: - id: - title: ID - type: integer - readOnly: true - url: - title: Url - type: string - format: uri - readOnly: true - choices: - title: Choices - type: array - items: - type: string - seq: - title: Sequence number - description: The order in which questions are displayed - type: integer - text: - title: Text - description: >- - The question displayed to participants, e.g., "Did you agree with - the decision?" - type: string - maxLength: 255 - name: - title: Name - description: >- - 'A short name for the question, e.g., "Agree with decision"' - type: string - maxLength: 30 - reference: - title: Reference - description: 'Code-compatible reference, e.g., "agree_with_decision"' - type: string - maxLength: 50 - from_adj: - title: From adjudicator - description: >- - Adjudicators should be asked this question (about other - adjudicators) - type: boolean - from_team: - title: From team - description: Teams should be asked this question - type: boolean - answer_type: - title: Answer type - type: string - enum: - - bc - - bs - - i - - is - - f - - t - - tl - - ss - - ms - required: - title: Required - description: Whether participants are required to fill out this field - type: boolean - min_value: - title: Minimum value - description: >- - Minimum allowed value for numeric fields (ignored for text or - boolean fields) - nullable: true - max_value: - title: Maximum value - description: >- - Maximum allowed value for numeric fields (ignored for text or - boolean fields) - nullable: true - Motion: - required: - - rounds - - text - - reference - type: object - properties: - id: - title: ID - type: integer - readOnly: true - url: - title: Url - type: string - format: uri - readOnly: true - rounds: - title: Rounds - type: array - items: - type: object - required: - - round - properties: - round: - title: Round - type: string - format: uri - seq: - title: Sequence number - description: The order in which motions are displayed - type: integer - text: - title: Text - description: >- - 'The full motion e.g., "This House would straighten all bananas"' - type: string - maxLength: 500 - reference: - title: Reference - description: 'Shortcode for the motion, e.g., "Bananas"' - maxLength: 100 - info_slide: - title: Info slide - description: The information slide for this topic; if it has one - Round: - required: - - break_category - - motions - - seq - - name - - abbreviation - - draw_type - type: object - properties: - id: - title: ID - type: integer - readOnly: true - url: - title: Url - type: string - format: uri - readOnly: true - break_category: - title: Break category - type: string - format: uri - nullable: true - motions: - title: Motions - type: array - items: - type: object - required: - - text - - reference - properties: - id: - title: ID - type: integer - readOnly: true - url: - title: Url - type: string - format: uri - readOnly: true - seq: - title: Sequence number - description: The order in which motions are displayed - type: integer - text: - title: Text - description: >- - The full motion e.g., "This House would straighten all - bananas" - type: string - maxLength: 500 - reference: - title: Reference - description: 'Shortcode for the motion, e.g., "Bananas"' - maxLength: 100 - info_slide: - title: Info slide - description: >- - The information slide for this topic; if it has one - _links: - title: links - readOnly: true - type: object - properties: - pairing: - title: Pairing - type: string - format: uri - readOnly: true - seq: - title: Sequence number - description: >- - A number that determines the order of the round, should count - consecutively from 1 for the first round - type: integer - completed: - title: completed - description: >- - True if the round is over, which normally means all results have - been entered and confirmed - type: boolean - name: - title: Name - description: e.g. "Round 1" - type: string - maxLength: 40 - abbreviation: - title: Abbreviation - description: e.g. "R1" - type: string - maxLength: 10 - stage: - title: stage - description: 'Preliminary = inrounds, elimination = outrounds' - type: string - enum: - - P - - E - draw_type: - title: Draw type - description: Which draw method to use - type: string - enum: - - R - - M - - D - - P - - E - draw_status: - title: Draw status - description: The status of this round's draw - type: string - enum: - - 'N' - - D - - C - - R - feedback_weight: - title: Feedback weight - description: >- - The extent to which each adjudicator's overall score depends on - feedback vs their base score. At 0, it is 100% drawn from their - base score, at 1 it is 100% drawn from feedback. - type: number - format: float - silent: - title: Silent - description: >- - If marked silent, information about this round (such as its - results) will not be shown publicly. - type: boolean - motions_released: - title: Motions released - description: >- - Whether motions will appear on the public website, assuming that - feature is turned on - type: boolean - starts_at: - title: Starts at - type: string - format: time - weight: - title: Weight - description: >- - A factor for the points received in the round. For example, if 2, - all points are doubled. - type: integer - Debate: - required: - - teams - type: object - properties: - url: - title: Url - readOnly: true - type: string - format: uri - id: - title: ID - readOnly: true - type: integer - venue: - title: Venue - type: string - format: uri - nullable: true - teams: - title: Teams - type: array - items: - required: - - team - - side - type: object - properties: - team: - title: Team - type: string - format: uri - side: - title: Side - type: string - enum: - - aff - - neg - - og - - oo - - cg - - co - adjudicators: - title: Adjudicators - type: object - nullable: true - required: - - chair - - panellists - - trainees - properties: - chair: - title: Chair - type: string - format: uri - nullable: true - panellists: - title: Panellists - type: array - items: - type: string - format: uri - trainees: - title: Trainees - type: array - items: - type: string - format: uri - bracket: - title: Bracket - type: number - room_rank: - title: room rank - type: integer - importance: - title: importance - type: integer - result_status: - title: result status - type: string - enum: - - N - - P - - D - - C - sides_confirmed: - title: Sides confirmed - description: >- - If unchecked, the sides assigned to teams in this debate are just - placeholders. - type: boolean - Speaker: - required: - - name - - categories - type: object - properties: - id: - title: ID - type: integer - readOnly: true - url: - title: Url - type: string - format: uri - readOnly: true - name: - title: Name - type: string - maxLength: 70 - gender: - title: Gender - description: >- - Gender is displayed in the adjudicator allocation interface, and - nowhere else - enum: - - M - - F - - O - email: - title: E-mail address - type: string - format: email - maxLength: 254 - nullable: true - phone: - title: Phone - type: string - maxLength: 40 - anonymous: - title: Anonymous - description: >- - Anonymous persons will have their name and team redacted on public - tab releases - type: boolean - pronoun: - title: Pronoun - description: >- - If printing ballots using Tabbycat, there is the option to pre-print - pronouns - type: string - maxLength: 10 - categories: - title: Categories - type: array - items: - type: string - format: uri - url_key: - title: URL Key - description: >- - Set null to automatically generate; set as empty string to have no URL key. - type: string - format: slug - pattern: '^[-a-zA-Z0-9_]+$' - maxLength: 24 - nullable: true - _links: - title: links - type: object - readOnly: true - properties: - checkin: - title: Checkins - type: string - format: uri - readOnly: true - Team: - type: object - required: - - institution - - break_categories - - institution_conflicts - properties: - url: - title: Url - type: string - format: uri - readOnly: true - id: - title: ID - type: integer - readOnly: true - reference: - title: Full name/suffix - description: >- - Do not include institution name (see "uses institutional prefix" - below) - type: string - maxLength: 150 - short_reference: - title: Short name/suffix - description: >- - The decoded name shown in the draw, not including institution name - (see "uses institutional prefix" below) - type: string - maxLength: 35 - code_name: - title: Code name - description: >- - Name used to obscure institutional identity on public-facing pages - type: string - maxLength: 150 - emoji: - title: Emoji - type: string - maxLength: 2 - nullable: true - short_name: - title: Short name - description: >- - The decoded name shown in the draw, including institution name. This - is autogenerated. - type: string - readOnly: true - long_name: - title: Long name - description: >- - The full name of the team, including institution name. This is - autogenerated. - type: string - readOnly: true - institution: - title: Institution - type: string - format: uri - nullable: true - speakers: - title: Speakers - type: array - items: - $ref: '#/components/schemas/Speaker' - use_institution_prefix: - title: Uses institutional prefix - description: >- - If ticked, a team called "1" from Victoria will be shown as - "Victoria 1" - type: boolean - break_categories: - title: Break categories - type: array - items: - type: string - format: uri - institution_conflicts: - title: Institution conflicts - type: array - items: - type: string - format: uri - venue_constraints: - type: array - items: - $ref: '#/components/schemas/VenueConstraint' - SpeakerStandings: - type: array - items: - type: object - properties: - rank: - title: Rank - type: integer - tied: - title: Tied - type: boolean - metrics: - title: Metrics - type: array - items: - type: object - properties: - metric: - title: Metric - type: string - enum: - - total - - average - - trimmed_mean - - team_points - - stdev - - count - - replies_sum - - replies_avg - - replies_stddev - - replies_count - value: - title: Value - type: number - speaker: - title: Speaker - type: string - format: uri - TeamStandings: - type: array - items: - type: object - properties: - rank: - title: Rank - type: integer - tied: - title: Tied - type: boolean - metrics: - title: Metrics - type: array - items: - type: object - properties: - metric: - title: Metric - type: string - enum: - - points - - wins - - speaks_sum - - speaks_avg - - speaks_ind_avg - - speaks_stddev - - draw_strength - - draw_strength_speaks - - margin_sum - - margin_avg - - npullups - - num_adjs - - firsts - - seconds - - wbw - value: - title: Value - type: number - team: - title: Team - type: string - format: uri - Venue: - required: - - categories - - name - - priority - type: object - properties: - url: - title: Url - type: string - format: uri - readOnly: true - id: - title: ID - type: integer - readOnly: true - categories: - title: Categories - type: array - items: - type: string - format: uri - display_name: - title: Display name - type: string - readOnly: true - _links: - title: links - type: object - readOnly: true - properties: - checkin: - title: Checkins - type: string - format: uri - readOnly: true - name: - title: Name - type: string - format: uri - maxLength: 40 - priority: - title: Priority - description: >- - Venues with a higher priority number will be preferred when - allocating venues to debates - type: integer - external_url: - title: External URL - type: string - format: uri - nullable: true - VenueCategory: - required: - - venues - - name - type: object - properties: - url: - title: Url - type: string - format: uri - readOnly: true - id: - title: ID - type: integer - readOnly: true - venues: - title: Venues - type: array - items: - type: string - format: uri - name: - title: Name - description: >- - Name of category, e.g., "Purple", "Step-free access", "Close to tab - room". This name is shown when the category is prefixed or suffixed - to a venue name in the draw, e.g., "Purple – G05". - type: string - maxLength: 80 - description: - title: Description - description: >- - Description, as the predicate of a sentence, e.g. "has step-free - access", "is close to the briefing hall". This description follows - "This venue" when shown in tooltips, e.g., "This venue is close to - the briefing hall.". - type: string - maxLength: 200 - display_in_venue_name: - title: Display in venue name - description: 'Prefix: "Purple – G05", Suffix: "G05 – Purple"' - type: string - enum: - - '-' - - P - - S - display_in_public_tooltip: - title: Display in public tooltip - description: >- - Displays the description in the tooltip for the venue on public - pages. The description, if not blank, will always show on admin - pages. - type: boolean - DebateResult: - required: - - result - type: object - properties: - url: - title: Url - type: string - format: uri - readOnly: true - id: - title: ID - type: integer - readOnly: true - result: - title: Result - type: object - properties: - sheets: - title: Sheets - type: array - items: - type: object - required: - - teams - properties: - adjudicator: - title: Adjudicator - type: string - format: uri - nullable: true - teams: - title: Teams - type: array - items: - type: object - required: - - side - - team - properties: - side: - title: Side - type: string - enum: - - aff - - neg - - og - - oo - - cg - - co - points: - title: Points - type: integer - win: - title: Win - type: boolean - score: - title: Score - type: number - team: - title: Team - type: string - format: uri - speeches: - title: Speeches - description: Speeches must be given in speaker order. - type: array - items: - type: object - required: - - score - - speaker - properties: - ghost: - title: Ghost - description: >- - If checked, this score does not count towards - the speaker tab. This is typically checked - for speeches where someone spoke twice to - make up for an absent teammate (sometimes - known as iron-person or iron-man speeches). - type: boolean - score: - title: Score - type: number - speaker: - title: Speaker - type: string - format: uri - motion: - title: Motion - type: string - format: uri - nullable: true - vetos: - title: Vetos - type: array - items: - type: object - properties: - team: - title: Team - type: string - format: uri - motion: - title: Motion - type: string - format: uri - nullable: true - timestamp: - title: Timestamp - type: string - format: date-time - readOnly: true - version: - title: Version - type: integer - readOnly: true - submitter_type: - title: Submitter type - type: string - enum: - - T - - P - readOnly: true - confirmed: - title: Confirmed - type: boolean - confirm_timestamp: - title: Confirm timestamp - type: string - format: date-time - readOnly: true - nullable: true - ip_address: - title: IP address - type: string - format: ipv4 - readOnly: true - discarded: - title: Discarded - type: boolean - participant_submitter: - title: Participant submitter - description: The submitting adjudicator (if by private URL) - type: string - format: uri - nullable: true - readOnly: true - private_url: - title: Private URL - description: >- - Whether the ballot was submitted through the participant's - private URL. - type: boolean - readOnly: true - single_adj: - title: Single adjudicator - description: >- - If the ballot only has the scores of one adjudicator, - rather than from all. - type: boolean - readOnly: true - submitter: - title: Submitter - type: integer - nullable: true - readOnly: true - confirmer: - title: Confirmer - type: integer - nullable: true - readOnly: true - BreakingTeam: - required: - - team - - rank - type: object - properties: - team: - title: Team - type: string - format: uri - rank: - title: Rank - type: integer - break_rank: - title: Break rank - type: integer - remark: - title: Remark - type: string - nullable: true - enum: - - C - - I - - D - - d - - t - - w - - null - PreformedPanel: - required: - - teams - type: object - properties: - url: - title: Url - readOnly: true - type: string - format: uri - id: - title: ID - readOnly: true - type: integer - adjudicators: - title: Adjudicators - type: object - nullable: true - required: - - chair - - panellists - - trainees - properties: - chair: - title: Chair - type: string - format: uri - nullable: true - panellists: - title: Panellists - type: array - items: - type: string - format: uri - trainees: - title: Trainees - type: array - items: - type: string - format: uri - bracket_min: - title: Minimum Bracket - description: >- - Estimate of the lowest bracket for which this panel might be - type: number - bracket_max: - title: Maximum Bracket - description: >- - Estimate of the highest bracket for which this panel might be - type: number - room_rank: - title: room rank - description: Sequential number of panel, not used in any algorithms - type: integer - importance: - title: importance - type: integer - liveness: - title: Liveness - description: Number of categories this room is expected to be live for - type: integer From c4c6be4bc624b89211bb736bfca704942851f9c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 26 Nov 2022 11:10:09 -0400 Subject: [PATCH 029/255] API: Check existence of view rather than host Checking the request host for API spec generation can lead to errors if "testserver" is not an allowed host. Instead, we can check if the context includes the view, which it doesn't for spec generation. --- tabbycat/api/serializers.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tabbycat/api/serializers.py b/tabbycat/api/serializers.py index 4ed22ede6f5..b0bec192d85 100644 --- a/tabbycat/api/serializers.py +++ b/tabbycat/api/serializers.py @@ -43,8 +43,9 @@ def _validate_field(self, field, value): def is_staff(context): - # OpenAPI generation uses a host called 'testserver' (sometimes context is also None in that circumstance) - return context is None or context['request'].get_host() == 'testserver' or context['request'].user.is_staff + # OpenAPI generation does not have a view (sometimes context is also None in that circumstance). + # Avoid redacting fields. + return context is None or 'view' not in context or context['request'].user.is_staff class BaseSourceField(fields.TournamentHyperlinkedRelatedField): From ea4f9da01ce661613b14fb26d1260dd8c178ce74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 26 Nov 2022 11:15:01 -0400 Subject: [PATCH 030/255] Disallow deletion of ballots Rather, mark them as discarded. --- tabbycat/api/views.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tabbycat/api/views.py b/tabbycat/api/views.py index fbfc2b48c6f..985e37186d7 100644 --- a/tabbycat/api/views.py +++ b/tabbycat/api/views.py @@ -651,7 +651,6 @@ def delete_all(self, request, *args, **kwargs): retrieve=extend_schema(parameters=[id_parameter]), update=extend_schema(parameters=[id_parameter]), partial_update=extend_schema(parameters=[id_parameter]), - destroy=extend_schema(parameters=[id_parameter]), ) class BallotViewSet(RoundAPIMixin, TournamentPublicAPIMixin, ModelViewSet): serializer_class = serializers.BallotSerializer @@ -692,6 +691,14 @@ def get_queryset(self): 'motion', 'motion__tournament', 'participant_submitter__adjudicator__tournament') + @extend_schema(summary="Delete ballot", parameters=[id_parameter], responses={200: serializers.BallotSerializer}) + def destroy(self, request, *args, **kwargs): + """Only mark as discarded; don't allow object deletion.""" + instance = self.get_object() + instance.discarded = True + instance.save() + return self.retrieve(request, *args, **kwargs) + @extend_schema(tags=['feedback'], parameters=[tournament_parameter]) @extend_schema_view( From ba7b8dc8b89765069d089de4a8da8fd12c2fe8df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 26 Nov 2022 11:20:18 -0400 Subject: [PATCH 031/255] API: Add summaries to all endpoints --- tabbycat/api/serializers.py | 7 + tabbycat/api/views.py | 252 +++++++++++++++++++++++------------- 2 files changed, 168 insertions(+), 91 deletions(-) diff --git a/tabbycat/api/serializers.py b/tabbycat/api/serializers.py index b0bec192d85..77862728530 100644 --- a/tabbycat/api/serializers.py +++ b/tabbycat/api/serializers.py @@ -1321,6 +1321,13 @@ def update(self, instance, validated_data): return instance +class UpdateBallotSerializer(serializers.ModelSerializer): + """Unused, just for OpenAPI with BallotSerializer.update()""" + class Meta: + model = BallotSubmission + fields = ('confirmed', 'discarded') + + class PreformedPanelSerializer(serializers.ModelSerializer): url = fields.RoundHyperlinkedIdentityField(view_name='api-preformedpanel-detail', lookup_url_kwarg='debate_pk') adjudicators = DebateAdjudicatorSerializer(required=False, allow_null=True) diff --git a/tabbycat/api/views.py b/tabbycat/api/views.py index 985e37186d7..7ef43133789 100644 --- a/tabbycat/api/views.py +++ b/tabbycat/api/views.py @@ -52,7 +52,7 @@ id_parameter = OpenApiParameter('id', description="The object's primary key", type=int, location="path") -@extend_schema(tags=['root']) +@extend_schema(tags=['root'], summary="API root") class APIRootView(PublicAPIMixin, GenericAPIView): name = "API Root" serializer_class = serializers.RootSerializer @@ -67,7 +67,7 @@ def get(self, request, format=None): }) -@extend_schema(tags=['root']) +@extend_schema(tags=['root'], summary="API v1 root") class APIV1RootView(PublicAPIMixin, GenericAPIView): name = "API Version 1 Root" serializer_class = serializers.V1RootSerializer @@ -88,10 +88,12 @@ def get(self, request, format=None): @extend_schema(tags=['tournaments']) @extend_schema_view( - retrieve=extend_schema(parameters=[tournament_parameter]), - update=extend_schema(parameters=[tournament_parameter]), - partial_update=extend_schema(parameters=[tournament_parameter]), - destroy=extend_schema(parameters=[tournament_parameter]), + list=extend_schema(summary="List tournaments"), + create=extend_schema(summary="Create tournament"), + retrieve=extend_schema(summary="Get tournament", parameters=[tournament_parameter]), + update=extend_schema(summary="Change tournament", parameters=[tournament_parameter]), + partial_update=extend_schema(summary="Patch tournament", parameters=[tournament_parameter]), + destroy=extend_schema(summary="Delete tournament", parameters=[tournament_parameter]), ) class TournamentViewSet(PublicAPIMixin, ModelViewSet): # Don't use TournamentAPIMixin here, it's not filtering objects by tournament. @@ -107,7 +109,17 @@ class TournamentViewSet(PublicAPIMixin, ModelViewSet): @extend_schema(tags=['tournaments'], parameters=[tournament_parameter]) +@extend_schema_view( + list=extend_schema(summary="List tournament preferences"), + retrieve=extend_schema(summary="Get tournament preference"), + update=extend_schema(summary="Modify tournament preference"), + partial_update=extend_schema(summary="Patch tournament preference"), + bulk=extend_schema(summary="Update multiple tournament preferences"), +) class TournamentPreferenceViewSet(TournamentFromUrlMixin, AdministratorAPIMixin, PerInstancePreferenceViewSet): + """ + """ + # Blank comment to avoid comment from TournamentFromUrlMixin appearing. queryset = TournamentPreferenceModel.objects.all() serializer_class = PreferenceSerializer @@ -117,12 +129,12 @@ def get_related_instance(self): @extend_schema(tags=['rounds']) @extend_schema_view( - list=extend_schema(parameters=[tournament_parameter]), - create=extend_schema(parameters=[tournament_parameter]), - retrieve=extend_schema(parameters=round_parameters), - update=extend_schema(parameters=round_parameters), - partial_update=extend_schema(parameters=round_parameters), - destroy=extend_schema(parameters=round_parameters), + list=extend_schema(summary="List rounds of a tournament", parameters=[tournament_parameter]), + create=extend_schema(summary="Create round", parameters=[tournament_parameter]), + retrieve=extend_schema(summary="Get round", parameters=round_parameters), + update=extend_schema(summary="Update round", parameters=round_parameters), + partial_update=extend_schema(summary="Patch round", parameters=round_parameters), + destroy=extend_schema(summary="Delete round", parameters=round_parameters), ) class RoundViewSet(TournamentAPIMixin, PublicAPIMixin, ModelViewSet): serializer_class = serializers.RoundSerializer @@ -137,10 +149,12 @@ def get_queryset(self): @extend_schema(tags=['motions'], parameters=[tournament_parameter]) @extend_schema_view( - retrieve=extend_schema(parameters=[id_parameter]), - update=extend_schema(parameters=[id_parameter]), - partial_update=extend_schema(parameters=[id_parameter]), - destroy=extend_schema(parameters=[id_parameter]), + list=extend_schema(summary="List tournament motions"), + create=extend_schema(summary="Create motion"), + retrieve=extend_schema(summary="Get motion", parameters=[id_parameter]), + update=extend_schema(summary="Update motion", parameters=[id_parameter]), + partial_update=extend_schema(summary="Patch motion", parameters=[id_parameter]), + destroy=extend_schema(summary="Delete motion", parameters=[id_parameter]), ) class MotionViewSet(TournamentAPIMixin, TournamentPublicAPIMixin, ModelViewSet): serializer_class = serializers.MotionSerializer @@ -156,10 +170,12 @@ def get_queryset(self): @extend_schema(tags=['break-categories'], parameters=[tournament_parameter]) @extend_schema_view( - retrieve=extend_schema(parameters=[id_parameter]), - update=extend_schema(parameters=[id_parameter]), - partial_update=extend_schema(parameters=[id_parameter]), - destroy=extend_schema(parameters=[id_parameter]), + list=extend_schema(summary="List tournament break categories"), + create=extend_schema(summary="Create break category"), + retrieve=extend_schema(summary="Get break category", parameters=[id_parameter]), + update=extend_schema(summary="Update break category", parameters=[id_parameter]), + partial_update=extend_schema(summary="Patch break category", parameters=[id_parameter]), + destroy=extend_schema(summary="Delete break category", parameters=[id_parameter]), ) class BreakCategoryViewSet(TournamentAPIMixin, PublicAPIMixin, ModelViewSet): serializer_class = serializers.BreakCategorySerializer @@ -167,10 +183,12 @@ class BreakCategoryViewSet(TournamentAPIMixin, PublicAPIMixin, ModelViewSet): @extend_schema(tags=['speaker-categories'], parameters=[tournament_parameter]) @extend_schema_view( - retrieve=extend_schema(parameters=[id_parameter]), - update=extend_schema(parameters=[id_parameter]), - partial_update=extend_schema(parameters=[id_parameter]), - destroy=extend_schema(parameters=[id_parameter]), + list=extend_schema(summary="List tournament speaker categories"), + create=extend_schema(summary="Create speaker category"), + retrieve=extend_schema(summary="Get speaker category", parameters=[id_parameter]), + update=extend_schema(summary="Update speaker category", parameters=[id_parameter]), + partial_update=extend_schema(summary="Patch speaker category", parameters=[id_parameter]), + destroy=extend_schema(summary="Delete speaker category", parameters=[id_parameter]), ) class SpeakerCategoryViewSet(TournamentAPIMixin, PublicAPIMixin, ModelViewSet): serializer_class = serializers.SpeakerCategorySerializer @@ -182,6 +200,11 @@ def get_queryset(self): @extend_schema(tags=['break-categories'], parameters=[tournament_parameter, id_parameter]) +@extend_schema_view( + get=extend_schema(summary="Get break-eligible teams for category"), + put=extend_schema(summary="Update break eligibility of teams"), + patch=extend_schema(summary="Add teams as break-eligible"), +) class BreakEligibilityView(TournamentAPIMixin, TournamentPublicAPIMixin, RetrieveUpdateAPIView): serializer_class = serializers.BreakEligibilitySerializer access_preference = 'public_break_categories' @@ -191,6 +214,11 @@ def get_queryset(self): @extend_schema(tags=['speaker-categories'], parameters=[tournament_parameter, id_parameter]) +@extend_schema_view( + get=extend_schema(summary="Get speaker category membership"), + put=extend_schema(summary="Update membership of speaker category"), + patch=extend_schema(summary="Add speakers to category"), +) class SpeakerEligibilityView(TournamentAPIMixin, TournamentPublicAPIMixin, RetrieveUpdateAPIView): serializer_class = serializers.SpeakerEligibilitySerializer access_preference = 'public_participants' @@ -223,32 +251,30 @@ def get_serializer_context(self): context['break_category'] = self.break_category return context + @extend_schema(summary="Get breaking teams") def list(self, request, *args, **kwargs): """ - Get breaking teams - --- Pagination might be dangerous here, so disabled. """ queryset = self.filter_queryset(self.get_queryset()) serializer = self.get_serializer(queryset, many=True) return Response(serializer.data) + @extend_schema(summary="Generate break") def create(self, request, *args, **kwargs): - """Generate break""" self.generate_break((self.break_category,)) return self.list(request, *args, **kwargs) + @extend_schema(summary="Delete break") def destroy(self, request, *args, **kwargs): """ - Delete break - --- Destroy is normally for a specific instance, now QuerySet. """ self.filter_queryset(self.get_queryset()).delete() return Response(status=204) # No content + @extend_schema(summary="Update remark and regenerate break") def update(self, request, *args, **kwargs): - """Update team remark and then regenerate break.""" serializer = serializers.PartialBreakingTeamSerializer(data=request.data, context=self.get_serializer_context()) serializer.is_valid(raise_exception=True) serializer.save() @@ -258,7 +284,7 @@ def update(self, request, *args, **kwargs): @extend_schema(tags=['institutions'], parameters=[tournament_parameter]) @extend_schema_view( - list=extend_schema(parameters=[ + list=extend_schema(summary="List institutions in tournament", parameters=[ OpenApiParameter('region', description='Only include institutions from the region', required=False, type=str), ]), ) @@ -286,10 +312,12 @@ def get_queryset(self): @extend_schema(tags=['teams'], parameters=[tournament_parameter]) @extend_schema_view( - retrieve=extend_schema(parameters=[id_parameter]), - update=extend_schema(parameters=[id_parameter]), - partial_update=extend_schema(parameters=[id_parameter]), - destroy=extend_schema(parameters=[id_parameter]), + list=extend_schema(summary="List teams in tournament"), + create=extend_schema(summary="Create team"), + retrieve=extend_schema(summary="Get team", parameters=[id_parameter]), + update=extend_schema(summary="Update team", parameters=[id_parameter]), + partial_update=extend_schema(summary="Patch team", parameters=[id_parameter]), + destroy=extend_schema(summary="Delete team", parameters=[id_parameter]), ) class TeamViewSet(TournamentAPIMixin, TournamentPublicAPIMixin, ModelViewSet): serializer_class = serializers.TeamSerializer @@ -312,13 +340,14 @@ def get_queryset(self): @extend_schema(tags=['adjudicators'], parameters=[tournament_parameter]) @extend_schema_view( - list=extend_schema(parameters=[ + list=extend_schema(summary="Get adjudicators in tournament", parameters=[ OpenApiParameter('break', description='Only include breaking adjudicators', required=False, type=bool, default=False), ]), - retrieve=extend_schema(parameters=[id_parameter]), - update=extend_schema(parameters=[id_parameter]), - partial_update=extend_schema(parameters=[id_parameter]), - destroy=extend_schema(parameters=[id_parameter]), + create=extend_schema(summary="Create adjudicator"), + retrieve=extend_schema(summary="Get adjudicator", parameters=[id_parameter]), + update=extend_schema(summary="Update adjudicator", parameters=[id_parameter]), + partial_update=extend_schema(summary="Patch adjudicator", parameters=[id_parameter]), + destroy=extend_schema(summary="Delete adjudicator", parameters=[id_parameter]), ) class AdjudicatorViewSet(TournamentAPIMixin, TournamentPublicAPIMixin, ModelViewSet): serializer_class = serializers.AdjudicatorSerializer @@ -341,13 +370,14 @@ def get_queryset(self): @extend_schema(tags=['institutions']) @extend_schema_view( - list=extend_schema(parameters=[ + list=extend_schema(summary="List all institutions", parameters=[ OpenApiParameter('region', description='Only include institutions from the region', required=False, type=str), ]), - retrieve=extend_schema(parameters=[id_parameter]), - update=extend_schema(parameters=[id_parameter]), - partial_update=extend_schema(parameters=[id_parameter]), - destroy=extend_schema(parameters=[id_parameter]), + create=extend_schema(summary="Create institution"), + retrieve=extend_schema(summary="Get institution", parameters=[id_parameter]), + update=extend_schema(summary="Update institution", parameters=[id_parameter]), + partial_update=extend_schema(summary="Patch institution", parameters=[id_parameter]), + destroy=extend_schema(summary="Delete institution", parameters=[id_parameter]), ) class GlobalInstitutionViewSet(AdministratorAPIMixin, ModelViewSet): serializer_class = serializers.InstitutionSerializer @@ -361,10 +391,12 @@ def get_queryset(self): @extend_schema(tags=['teams'], parameters=[tournament_parameter]) @extend_schema_view( - retrieve=extend_schema(parameters=[id_parameter]), - update=extend_schema(parameters=[id_parameter]), - partial_update=extend_schema(parameters=[id_parameter]), - destroy=extend_schema(parameters=[id_parameter]), + list=extend_schema(summary="List speakers in tournament"), + create=extend_schema(summary="Add speaker"), + retrieve=extend_schema(summary="Get speaker", parameters=[id_parameter]), + update=extend_schema(summary="Update speaker", parameters=[id_parameter]), + partial_update=extend_schema(summary="Patch speaker", parameters=[id_parameter]), + destroy=extend_schema(summary="Delete speaker", parameters=[id_parameter]), ) class SpeakerViewSet(TournamentAPIMixin, TournamentPublicAPIMixin, ModelViewSet): serializer_class = serializers.SpeakerSerializer @@ -384,10 +416,12 @@ def get_queryset(self): @extend_schema(tags=['venues'], parameters=[tournament_parameter]) @extend_schema_view( - retrieve=extend_schema(parameters=[id_parameter]), - update=extend_schema(parameters=[id_parameter]), - partial_update=extend_schema(parameters=[id_parameter]), - destroy=extend_schema(parameters=[id_parameter]), + list=extend_schema(summary="List rooms in tournament"), + create=extend_schema(summary="Create room"), + retrieve=extend_schema(summary="Get room", parameters=[id_parameter]), + update=extend_schema(summary="Update room", parameters=[id_parameter]), + partial_update=extend_schema(summary="Patch room", parameters=[id_parameter]), + destroy=extend_schema(summary="Delete room", parameters=[id_parameter]), ) class VenueViewSet(TournamentAPIMixin, PublicAPIMixin, ModelViewSet): serializer_class = serializers.VenueSerializer @@ -400,10 +434,12 @@ def get_queryset(self): @extend_schema(tags=['venues'], parameters=[tournament_parameter]) @extend_schema_view( - retrieve=extend_schema(parameters=[id_parameter]), - update=extend_schema(parameters=[id_parameter]), - partial_update=extend_schema(parameters=[id_parameter]), - destroy=extend_schema(parameters=[id_parameter]), + list=extend_schema(summary="List tournament venue categories"), + create=extend_schema(summary="Create venue category"), + retrieve=extend_schema(summary="Get venue category", parameters=[id_parameter]), + update=extend_schema(summary="Update venue category", parameters=[id_parameter]), + partial_update=extend_schema(summary="Patch venue category", parameters=[id_parameter]), + destroy=extend_schema(summary="Delete venue category", parameters=[id_parameter]), ) class VenueCategoryViewSet(TournamentAPIMixin, PublicAPIMixin, ModelViewSet): serializer_class = serializers.VenueCategorySerializer @@ -517,6 +553,13 @@ def post(self, request, *args, **kwargs): @extend_schema(tags=['adjudicators']) +@extend_schema_view( + get=extend_schema(summary="Get adjudicator checkin status"), + delete=extend_schema(summary="Check out adjudicator"), + put=extend_schema(summary="Check in adjudicator"), + patch=extend_schema(summary="Toggle adjudicator checkin status"), + post=extend_schema(summary="Create adjudicator checkin identifier"), +) class AdjudicatorCheckinsView(BaseCheckinsView): model = Adjudicator object_api_view = 'api-adjudicator-detail' @@ -524,6 +567,13 @@ class AdjudicatorCheckinsView(BaseCheckinsView): @extend_schema(tags=['teams']) +@extend_schema_view( + get=extend_schema(summary="Get speaker checkin status"), + delete=extend_schema(summary="Check out speaker"), + put=extend_schema(summary="Check in speaker"), + patch=extend_schema(summary="Toggle speaker checkin status"), + post=extend_schema(summary="Create speaker checkin identifier"), +) class SpeakerCheckinsView(BaseCheckinsView): model = Speaker object_api_view = 'api-speaker-detail' @@ -532,6 +582,13 @@ class SpeakerCheckinsView(BaseCheckinsView): @extend_schema(tags=['venues']) +@extend_schema_view( + get=extend_schema(summary="Get room checkin status"), + delete=extend_schema(summary="Check out room"), + put=extend_schema(summary="Check in room"), + patch=extend_schema(summary="Toggle room checkin status"), + post=extend_schema(summary="Create room checkin identifier"), +) class VenueCheckinsView(BaseCheckinsView): model = Venue object_api_view = 'api-venue-detail' @@ -569,6 +626,9 @@ def get(self, request, **kwargs): return Response(serializer.data) +@extend_schema_view( + get=extend_schema(summary="Get substantive speaker standings", responses=serializers.SpeakerStandingsSerializer(many=True)), +) class SubstantiveSpeakerStandingsView(BaseStandingsView): name = "Speaker Standings" serializer_class = serializers.SpeakerStandingsSerializer @@ -581,11 +641,17 @@ def get_max_round(self): return self.tournament.round_set.last() +@extend_schema_view( + get=extend_schema(summary="Get reply speaker standings", responses=serializers.SpeakerStandingsSerializer(many=True)), +) class ReplySpeakerStandingsView(SubstantiveSpeakerStandingsView): def get_metrics(self): return ('replies_avg',), ('replies_stddev', 'replies_count') +@extend_schema_view( + get=extend_schema(summary="Get team standings", responses=serializers.TeamStandingsSerializer(many=True)), +) class TeamStandingsView(BaseStandingsView): name = 'Team Standings' serializer_class = serializers.TeamStandingsSerializer @@ -596,11 +662,12 @@ class TeamStandingsView(BaseStandingsView): @extend_schema(tags=['debates'], parameters=round_parameters) @extend_schema_view( - list=extend_schema(parameters=round_parameters), - retrieve=extend_schema(parameters=debate_parameters), - update=extend_schema(parameters=debate_parameters), - partial_update=extend_schema(parameters=debate_parameters), - destroy=extend_schema(parameters=debate_parameters), + list=extend_schema(summary="List pairings in round"), + create=extend_schema(summary="Create pairing"), + retrieve=extend_schema(summary="Get pairing", parameters=debate_parameters), + update=extend_schema(summary="Update pairing", parameters=debate_parameters), + partial_update=extend_schema(summary="Patch pairing", parameters=debate_parameters), + destroy=extend_schema(summary="Delete pairing", parameters=debate_parameters), ) class PairingViewSet(RoundAPIMixin, ModelViewSet): @@ -637,20 +704,21 @@ def get_queryset(self): 'debateadjudicator_set', 'debateadjudicator_set__adjudicator', 'debateadjudicator_set__adjudicator__tournament', ) + @extend_schema(summary="Delete all pairings in the round") def delete_all(self, request, *args, **kwargs): - """Deletes all pairings in the round""" self.get_queryset().delete() return Response(status=204) # No content @extend_schema(tags=['results'], parameters=debate_parameters) @extend_schema_view( - list=extend_schema(parameters=[ + list=extend_schema(summary="Get debate ballots", parameters=[ OpenApiParameter('confirmed', description='Only include confirmed ballots', required=False, type=bool, default=False), ]), - retrieve=extend_schema(parameters=[id_parameter]), - update=extend_schema(parameters=[id_parameter]), - partial_update=extend_schema(parameters=[id_parameter]), + create=extend_schema(summary="Create ballot"), + retrieve=extend_schema(summary="Get ballot", parameters=[id_parameter]), + update=extend_schema(summary="Update ballot", parameters=[id_parameter], request=serializers.UpdateBallotSerializer), + partial_update=extend_schema(summary="Patch ballot", parameters=[id_parameter], request=serializers.UpdateBallotSerializer), ) class BallotViewSet(RoundAPIMixin, TournamentPublicAPIMixin, ModelViewSet): serializer_class = serializers.BallotSerializer @@ -702,14 +770,15 @@ def destroy(self, request, *args, **kwargs): @extend_schema(tags=['feedback'], parameters=[tournament_parameter]) @extend_schema_view( - list=extend_schema(parameters=[ + list=extend_schema(summary="List tournament feedback questions", parameters=[ OpenApiParameter('from_adj', description='Only include questions given to adjudicators', required=False, type=bool, default=False), OpenApiParameter('from_team', description='Only include questions given to teams', required=False, type=bool, default=False), ]), - retrieve=extend_schema(parameters=[id_parameter]), - update=extend_schema(parameters=[id_parameter]), - partial_update=extend_schema(parameters=[id_parameter]), - destroy=extend_schema(parameters=[id_parameter]), + create=extend_schema(summary="Create feedback question"), + retrieve=extend_schema(summary="Get feedback question", parameters=[id_parameter]), + update=extend_schema(summary="Update feedback question", parameters=[id_parameter]), + partial_update=extend_schema(summary="Patch feedback question", parameters=[id_parameter]), + destroy=extend_schema(summary="Delete feedback question", parameters=[id_parameter]), ) class FeedbackQuestionViewSet(TournamentAPIMixin, PublicAPIMixin, ModelViewSet): serializer_class = serializers.FeedbackQuestionSerializer @@ -725,16 +794,17 @@ def get_queryset(self): @extend_schema(tags=['feedback'], parameters=[tournament_parameter]) @extend_schema_view( - list=extend_schema(parameters=[ + list=extend_schema(summary="List all tournament feedback", parameters=[ OpenApiParameter('source_type', description='The type of participant submitter of the feedback', required=False, type=str, enum=['adjudicator', 'team']), OpenApiParameter('source', description='The ID of the participant submitting feedback; must be used in conjunction with `source_type`', required=False, type=int), OpenApiParameter('round', description='The sequence of the round of the submitted feedback', required=False, type=int), OpenApiParameter('target', description='The ID of the adjudicator receiving feedback', required=False, type=int), ]), - retrieve=extend_schema(parameters=[id_parameter]), - update=extend_schema(parameters=[id_parameter]), - partial_update=extend_schema(parameters=[id_parameter]), - destroy=extend_schema(parameters=[id_parameter]), + create=extend_schema(summary="Create feedback"), + retrieve=extend_schema(summary="Get feedback", parameters=[id_parameter]), + update=extend_schema(summary="Update feedback", parameters=[id_parameter]), + partial_update=extend_schema(summary="Patch feedback", parameters=[id_parameter]), + destroy=extend_schema(summary="Delete feedback", parameters=[id_parameter]), ) class FeedbackViewSet(TournamentAPIMixin, AdministratorAPIMixin, ModelViewSet): serializer_class = serializers.FeedbackSerializer @@ -807,13 +877,12 @@ def get_queryset(self): return RoundAvailability.objects.filter( ~self.get_filters(), round=self.round).select_related('content_type', 'round__tournament') - @extend_schema(parameters=extra_params) + @extend_schema(summary="Get all availabilities of the round", parameters=extra_params) def get(self, request, *args, **kwargs): - """Get all availabilities of the round""" return Response(self.get_field().to_representation(self.get_queryset())) + @extend_schema(summary="Toggle the availabilities of the included objects") def patch(self, request, *args, **kwargs): - """Toggle the availabilities of the included objects""" objs = sorted(self.get_field().to_internal_value(request.data), key=lambda o: type(o).__name__) for model, participants in groupby(objs, key=type): contenttype = ContentType.objects.get_for_model(model) @@ -831,8 +900,8 @@ def patch(self, request, *args, **kwargs): return self.get(request, *args, **kwargs) + @extend_schema(summary="Mark objects as available") def put(self, request, *args, **kwargs): - """Mark objects as available""" objs = sorted(self.get_field().to_internal_value(request.data), key=lambda o: type(o).__name__) for model, participants in groupby(objs, key=type): contenttype = ContentType.objects.get_for_model(model) @@ -840,8 +909,8 @@ def put(self, request, *args, **kwargs): [RoundAvailability(content_type=contenttype, round=self.round, object_id=p.id) for p in participants]) return self.get(request, *args, **kwargs) + @extend_schema(summary="Mark objects as unavailable") def post(self, request, *args, **kwargs): - """Mark objects as unavailable""" objs = sorted(self.get_field().to_internal_value(request.data), key=lambda o: type(o).__name__) for model, participants in groupby(objs, key=type): contenttype = ContentType.objects.get_for_model(model) @@ -851,20 +920,20 @@ def post(self, request, *args, **kwargs): ).delete() return self.get(request, *args, **kwargs) - @extend_schema(parameters=extra_params) + @extend_schema(summary="Delete class of availabilities", parameters=extra_params) def delete(self, request, *args, **kwargs): - """Delete class of availabilities""" self.get_queryset().delete() return Response(status=204) @extend_schema(tags=['debates'], parameters=round_parameters) @extend_schema_view( - list=extend_schema(parameters=round_parameters), - retrieve=extend_schema(parameters=debate_parameters), - update=extend_schema(parameters=debate_parameters), - partial_update=extend_schema(parameters=debate_parameters), - destroy=extend_schema(parameters=debate_parameters), + list=extend_schema(summary="List all preformed panels in the round"), + create=extend_schema(summary="Create preformed panel"), + retrieve=extend_schema(summary="Get preformed panel", parameters=debate_parameters), + update=extend_schema(summary="Update preformed panel", parameters=debate_parameters), + partial_update=extend_schema(summary="Patch preformed panel", parameters=debate_parameters), + destroy=extend_schema(summary="Delete preformed panel", parameters=debate_parameters), ) class PreformedPanelViewSet(RoundAPIMixin, AdministratorAPIMixin, ModelViewSet): @@ -899,13 +968,14 @@ def get_queryset(self): 'preformedpaneladjudicator_set__adjudicator__tournament', ) + @extend_schema(summary="Delete all preformed panels from round") def delete_all(self, request, *args, **kwargs): - """Delete all preformed panels from round""" self.get_queryset().delete() return Response(status=204) # No content + @extend_schema(summary="Add blank preformed panels") def add_blank(self, request, *args, **kwargs): - """Add blank preformed panel objects with calculated bracket and liveness for round.""" + """Adds new complete set of panels, with calculated bracket and liveness.""" for i, (bracket_min, bracket_max, liveness) in enumerate(calculate_anticipated_draw(self.round), start=1): PreformedPanel.objects.update_or_create(round=self.round, room_rank=i, defaults={ 'bracket_max': bracket_max, From 4549b48229e298fa5087d1265b1a3cf43eff899f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 27 Nov 2022 12:02:44 -0400 Subject: [PATCH 032/255] Add field for iron-person on TeamScore This commit adds a new boolean field to TeamScore to indicate whether a team had an iron-person speech. The migration adding the field also runs that check to update existing TeamScores. The field will be useful to make it easier to count the number of times a team was an iron, which is often a break criterion. --- .../migrations/0013_teamscore_has_ghost.py | 22 +++++++++++++++++++ tabbycat/results/models.py | 1 + 2 files changed, 23 insertions(+) create mode 100644 tabbycat/results/migrations/0013_teamscore_has_ghost.py diff --git a/tabbycat/results/migrations/0013_teamscore_has_ghost.py b/tabbycat/results/migrations/0013_teamscore_has_ghost.py new file mode 100644 index 00000000000..870bd911ee4 --- /dev/null +++ b/tabbycat/results/migrations/0013_teamscore_has_ghost.py @@ -0,0 +1,22 @@ +# Generated by Django 4.0.6 on 2022-11-10 21:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('results', '0012_alter_ballotsubmission_confirmer_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='teamscore', + name='has_ghost', + field=models.BooleanField(blank=True, null=True, verbose_name='has ghost score'), + ), + migrations.RunSQL( + "WITH has_ghost_q AS (SELECT ts.id teamscore, MAX(ss.ghost::int)::bool has_ghost FROM results_speakerscore ss INNER JOIN results_teamscore ts ON ts.ballot_submission_id=ss.ballot_submission_id AND ts.debate_team_id=ss.debate_team_id GROUP BY ts.id) UPDATE results_teamscore ts SET has_ghost=hsq.has_ghost FROM has_ghost_q hsq WHERE ts.id=hsq.teamscore", + migrations.RunSQL.noop, + ), + ] diff --git a/tabbycat/results/models.py b/tabbycat/results/models.py index ffc9d2ddcd5..bc7ebfd59d3 100644 --- a/tabbycat/results/models.py +++ b/tabbycat/results/models.py @@ -318,6 +318,7 @@ class TeamScore(models.Model): verbose_name=_("votes given")) votes_possible = models.PositiveSmallIntegerField(null=True, blank=True, verbose_name=_("votes possible")) + has_ghost = models.BooleanField(null=True, blank=True, verbose_name=_("has ghost score")) class Meta: unique_together = [('debate_team', 'ballot_submission')] From 7458cab46e35357030e18b32777235253531c5cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 27 Nov 2022 12:12:20 -0400 Subject: [PATCH 033/255] Add "number of times ironed" metric annotator This commit uses the new `has_ghost` field on `TeamScore` to create a metric counting the number of times the team was iron-ing. --- tabbycat/standings/teams.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tabbycat/standings/teams.py b/tabbycat/standings/teams.py index dfcc816e61a..957f07727f4 100644 --- a/tabbycat/standings/teams.py +++ b/tabbycat/standings/teams.py @@ -305,6 +305,18 @@ class NumberOfThirdsMetricAnnotator(TeamScoreQuerySetMetricAnnotator): where_value = 1 +class IronsMetricAnnotator(TeamScoreQuerySetMetricAnnotator): + """Metric annotator for total number of times the team had a duplicate speech.""" + key = "num_iron" + name = _("number of times ironed") + abbr = _("Irons") + ascending = True + + function = Count + field = "has_ghost" + where_value = True + + class WhoBeatWhomMetricAnnotator(RepeatedMetricAnnotator): """Metric annotator for who-beat-whom. Use once for every who-beat-whom in the precedence.""" @@ -388,6 +400,7 @@ class TeamStandingsGenerator(BaseStandingsGenerator): "firsts" : NumberOfFirstsMetricAnnotator, "seconds" : NumberOfSecondsMetricAnnotator, "thirds" : NumberOfThirdsMetricAnnotator, + "num_iron" : IronsMetricAnnotator, "wbw" : WhoBeatWhomMetricAnnotator, } From 439a9a1c2d3fe8a9b281cf49687ef35b347694a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Mon, 28 Nov 2022 22:34:25 -0400 Subject: [PATCH 034/255] Add handling for has_ghost in DebateResult This will populate the has_ghost field when saving ballots. --- tabbycat/results/result.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tabbycat/results/result.py b/tabbycat/results/result.py index 4084a3602fe..7ba2f7638e2 100644 --- a/tabbycat/results/result.py +++ b/tabbycat/results/result.py @@ -141,7 +141,7 @@ class BaseDebateResult: field, which normally means that the field will be left as null. """ - teamscore_fields = ['points', 'win', 'margin', 'score', 'votes_given', 'votes_possible'] + teamscore_fields = ['points', 'win', 'margin', 'score', 'votes_given', 'votes_possible', 'has_ghost'] is_voting = False uses_declared_winners = True @@ -579,6 +579,9 @@ def teamscore_field_votes_given(self, side): def teamscore_field_votes_possible(self, side): return len(self.scoresheets) + def teamscore_field_has_ghost(self, side): + return False + def teamscorebyadj_field_win(self, adj, side): return side in self.scoresheets[adj].winners() @@ -741,6 +744,9 @@ def speakerscore_field_ghost(self, side, position): def teamscore_field_margin(self, side): return self.calculate_full_margin(side) + def teamscore_field_has_ghost(self, side): + return any(self.ghosts[side].values()) + # -------------------------------------------------------------------------- # Other common functionality (helper functions) # -------------------------------------------------------------------------- @@ -881,6 +887,9 @@ def teamscore_field_win(self, side): def teamscore_field_score(self, side): return None # Placeholder for subclasses with scores + def teamscore_field_has_ghost(self, side): + return False + def as_dicts(self): yield {'teams': self.sheet_as_dicts(self.scoresheet)} @@ -922,6 +931,9 @@ def teamscore_field_score(self, side): return self.scoresheet.get_total(side) return sum(self.get_score(side, pos) for pos in self.positions if not self.get_ghost(side, pos)) + def teamscore_field_has_ghost(self, side): + return any(self.ghosts[side].values()) + class DebateResultByAdjudicatorWithScores(DebateResultWithScoresMixin, DebateResultByAdjudicator): """Gives access to SpeakerScoreByAdj and scores of TeamScoreByAdj""" @@ -1004,6 +1016,9 @@ def teamscore_field_score(self, side): self._calculate_decision() return mean(self._teamscore_score_component(adj, side) for adj in self.relevant_adjudicators()) + def teamscore_field_has_ghost(self, side): + return any(self.ghosts[side].values()) + def speakerscorebyadj_field_score(self, adjudicator, side, position): return self.scoresheets[adjudicator].get_score(side, position) get_score = speakerscorebyadj_field_score From ad038d2a027b784968832b9488b3cfee5b176095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Mon, 28 Nov 2022 22:36:18 -0400 Subject: [PATCH 035/255] Reconfigure iron checks to use TeamScore This removes the need for DISTINCT in ballots and is a bit clearer. Also added some missing filters. --- tabbycat/results/templates/ballot_entry.html | 2 +- tabbycat/results/views.py | 20 ++++++++++++++------ tabbycat/tournaments/models.py | 12 ++++++------ 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/tabbycat/results/templates/ballot_entry.html b/tabbycat/results/templates/ballot_entry.html index b25c00e67d7..242650dc18a 100644 --- a/tabbycat/results/templates/ballot_entry.html +++ b/tabbycat/results/templates/ballot_entry.html @@ -48,7 +48,7 @@ :is-confirmed="{% if new and not form.confirmed.value %}false{% else %}true{% endif %}" :is-discarded="{% if ballotsub.discarded %}true{% else %}false{% endif %}" :current-status="{% if new and not form.confirmed.value %}'{{ debate.STATUS_DRAFT }}'{% else %}'{{ debate.STATUS_CONFIRMED }}'{% endif %}" - :has-iron="{% if current_iron|length > 0 %}true{% else %}false{% endif %}" + :has-iron="{% if current_iron > 0 %}true{% else %}false{% endif %}" :blind-entry="{% if pref.enable_blind_checks and not new and not ballotsub.confirmed and not for_admin %}true{% else %}false{% endif %}" :total-ballotsubs="{{ all_ballotsubs.count }}" :send-receipts="{% if pref.enable_ballot_receipts %}true{% else %}false{% endif %}" diff --git a/tabbycat/results/views.py b/tabbycat/results/views.py index 03dc2c04904..7a8210a7b74 100644 --- a/tabbycat/results/views.py +++ b/tabbycat/results/views.py @@ -277,12 +277,20 @@ def get_context_data(self, **kwargs): 'matchup': kwargs['debate_name'], } - kwargs['iron'] = self.debate.debateteam_set.annotate(iron=Count('team__debateteam__speakerscore', - filter=Q(team__debateteam__debate__round=self.debate.round.prev) & Q(team__debateteam__speakerscore__ghost=True), - distinct=True)).filter(iron__gt=0) - kwargs['current_iron'] = self.debate.debateteam_set.annotate(iron=Count('team__debateteam__speakerscore', - filter=Q(team__debateteam__debate__round=self.debate.round) & Q(team__debateteam__speakerscore__ghost=True), - distinct=True)).filter(iron__gt=0) + kwargs['iron'] = self.debate.debateteam_set.annotate(iron=Count('team__debateteam__teamscore', + filter=Q(team__debateteam__debate__round=self.debate.round.prev, + team__debateteam__teamscore__has_ghost=True, + team__debateteam__teamscore__ballot_submission__confirmed=True)), + ).filter(iron__gt=0) + if self.ballotsub.id is None: + kwargs['current_iron'] = 0 + else: + kwargs['current_iron'] = self.debate.debateteam_set.annotate(iron=Count('team__debateteam__teamscore', + filter=Q( + team__debateteam__debate__round=self.debate.round, + team__debateteam__teamscore__has_ghost=True, + team__debateteam__teamscore__ballot_submission=self.ballotsub)), + ).filter(iron__gt=0).count() return super().get_context_data(**kwargs) diff --git a/tabbycat/tournaments/models.py b/tabbycat/tournaments/models.py index ba17b326e9c..3725fccdcc8 100644 --- a/tabbycat/tournaments/models.py +++ b/tabbycat/tournaments/models.py @@ -488,13 +488,13 @@ def debate_set_with_prefetches(self, filter_kwargs=None, ordering=('venue__name' Prefetch('team__speaker_set', queryset=Speaker.objects.order_by('name'))) if iron: debateteam_prefetch_queryset = debateteam_prefetch_queryset.annotate( - iron=Count('speakerscore', filter=Q( - speakerscore__ghost=True, - speakerscore__ballot_submission__confirmed=True, + iron=Count('teamscore', filter=Q( + teamscore__has_ghost=True, + teamscore__ballot_submission__confirmed=True, ), distinct=True), - iron_prev=Count('team__debateteam__speakerscore', filter=Q( - team__debateteam__speakerscore__ghost=True, - team__debateteam__speakerscore__ballot_submission__confirmed=True, + iron_prev=Count('team__debateteam__teamscore', filter=Q( + team__debateteam__teamscore__has_ghost=True, + team__debateteam__teamscore__ballot_submission__confirmed=True, team__debateteam__debate__round=self.prev, ), distinct=True), ) From b93048d4311aad20594d9be8b6bf92da7f15d7da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Thu, 1 Dec 2022 21:52:20 -0400 Subject: [PATCH 036/255] Use tournament from context in template tags This commit modifies the tournament_side_names and record link template- tags to simplify their use, removing their tournament argument, taking it from the template context. --- .../templates/motion_statistics_twoteam.html | 2 +- .../adjudicator_registration_card.html | 4 +-- .../templates/current_round/common.html | 4 +-- .../templates/current_round/round_adj.html | 4 +-- .../templates/current_round/round_team.html | 2 +- .../templatetags/participant_link.py | 31 +++++++------------ tabbycat/utils/templatetags/debate_tags.py | 14 ++++----- 7 files changed, 26 insertions(+), 35 deletions(-) diff --git a/tabbycat/motions/templates/motion_statistics_twoteam.html b/tabbycat/motions/templates/motion_statistics_twoteam.html index 05fbd06bc41..cc76780f7d2 100644 --- a/tabbycat/motions/templates/motion_statistics_twoteam.html +++ b/tabbycat/motions/templates/motion_statistics_twoteam.html @@ -1,6 +1,6 @@ {% load debate_tags i18n l10n %} -{% tournament_side_names tournament 'abbr' as side_names %} +{% tournament_side_names 'abbr' as side_names %}
diff --git a/tabbycat/participants/templates/adjudicator_registration_card.html b/tabbycat/participants/templates/adjudicator_registration_card.html index fc80105e485..3579eb70a6f 100644 --- a/tabbycat/participants/templates/adjudicator_registration_card.html +++ b/tabbycat/participants/templates/adjudicator_registration_card.html @@ -57,7 +57,7 @@

{% trans "Team Conflicts:" %} {% for tc in adjudicator.adjudicatorteamconflict_set.all %} - {% team_record_link tc.team admin_page tournament False %}{% if not forloop.last %}{% trans ", " %}{% endif %} + {% team_record_link tc.team admin_page False %}{% if not forloop.last %}{% trans ", " %}{% endif %} {% empty %} {% trans "None" %} {% endfor %} @@ -66,7 +66,7 @@

{% trans "Adjudicator Conflicts:" %} {% for adj in adjadj_conflicts %} {% if pref.public_record %} - {% person_display_name adj %}{% if not forloop.last %}{% trans ", " %}{% endif %} + {% person_display_name adj %}{% if not forloop.last %}{% trans ", " %}{% endif %} {% else %} {% person_display_name adj %}{% if not forloop.last %}{% trans ", " %}{% endif %} {% endif %} diff --git a/tabbycat/participants/templates/current_round/common.html b/tabbycat/participants/templates/current_round/common.html index 8bfd04067de..f95a6c152e7 100644 --- a/tabbycat/participants/templates/current_round/common.html +++ b/tabbycat/participants/templates/current_round/common.html @@ -14,7 +14,7 @@
{% trans "Teams:" %} {% for dt in debate.debateteams_ordered %} - {% team_record_link dt.team admin_page tournament %}{% if debate.sides_confirmed %} ({% debate_team_side_name dt tournament %}){% endif %}{% if not forloop.last %},{% endif %} + {% team_record_link dt.team admin_page %}{% if debate.sides_confirmed %} ({% debate_team_side_name dt %}){% endif %}{% if not forloop.last %},{% endif %} {% endfor %}
{% endif %} {# pref.teams_in_debate == 'bp' #} @@ -33,7 +33,7 @@ {% for adj, adjtype in adjudicators.with_positions %} {% if adj != debateadjudicator.adjudicator %} - + {% person_display_name adj %}{% if adjtype == adjudicators.POSITION_CHAIR %} {% trans "Ⓒ" context "chair icon" %}{% elif adjtype == adjudicators.POSITION_TRAINEE %} {% trans "Ⓣ" context "trainee icon" %}{% endif %}{% if not forloop.last %},{% endif %} {% else %} {% person_display_name adj %}{% if adjtype == adjudicators.POSITION_CHAIR %} {% trans "Ⓒ" context "chair icon" %}{% elif adjtype == adjudicators.POSITION_TRAINEE %} {% trans "Ⓣ" context "trainee icon" %}{% endif %}{% if not forloop.last %},{% endif %} diff --git a/tabbycat/participants/templates/current_round/round_adj.html b/tabbycat/participants/templates/current_round/round_adj.html index 74586c1c606..ef5040c4f89 100644 --- a/tabbycat/participants/templates/current_round/round_adj.html +++ b/tabbycat/participants/templates/current_round/round_adj.html @@ -7,8 +7,8 @@ {# (Two-team formats) #} {% if pref.teams_in_debate == 'two' %} - {% team_record_link debate.aff_team admin_page tournament as aff %} - {% team_record_link debate.neg_team admin_page tournament as neg %} + {% team_record_link debate.aff_team admin_page as aff %} + {% team_record_link debate.neg_team admin_page as neg %} {% if debate.adjudicators|length > 1 and debateadjudicator.type == debateadjudicator.TYPE_CHAIR %} {% if grammatical_person == "3" %} diff --git a/tabbycat/participants/templates/current_round/round_team.html b/tabbycat/participants/templates/current_round/round_team.html index afa4a557ad2..cb2b07106cf 100644 --- a/tabbycat/participants/templates/current_round/round_team.html +++ b/tabbycat/participants/templates/current_round/round_team.html @@ -5,7 +5,7 @@ {# (Two-team formats) #} {% if pref.teams_in_debate == 'two' %}
- {% team_record_link debateteam.opponent.team admin_page tournament as opponent %} + {% team_record_link debateteam.opponent.team admin_page as opponent %} {% if debate.sides_confirmed %} {% if grammatical_person == "3" %} diff --git a/tabbycat/participants/templatetags/participant_link.py b/tabbycat/participants/templatetags/participant_link.py index c593034e5e6..f9d838fe232 100644 --- a/tabbycat/participants/templatetags/participant_link.py +++ b/tabbycat/participants/templatetags/participant_link.py @@ -7,47 +7,38 @@ register = template.Library() -@register.simple_tag -def team_record_link(team, admin, tournament=None, style=True): +@register.simple_tag(takes_context=True) +def team_record_link(context, team, admin, style=True): """Team record links are used often, so this template tag just reduces clutter in templates, in particular in translated strings.""" - if not team: + if not team or not context['tournament']: return "" - if not tournament: - tournament = team.tournament - - if use_team_code_names(tournament, admin): + if use_team_code_names(context['tournament'], admin): name = team.code_name else: name = team.short_name if admin: - url = reverse_tournament('participants-team-record', tournament, kwargs={'pk': team.pk}) + url = reverse_tournament('participants-team-record', context['tournament'], kwargs={'pk': team.pk}) else: - url = reverse_tournament('participants-public-team-record', tournament, kwargs={'pk': team.pk}) + url = reverse_tournament('participants-public-team-record', context['tournament'], kwargs={'pk': team.pk}) classes = 'class="list-group-item-text alert-link"' if style else '' return mark_safe("""%(name)s""" % {'url': url, 'style': classes, 'name': name}) -@register.simple_tag -def adj_record_link(adj, admin, tournament=None): - - if not adj: - return "" - - if not tournament: - tournament = getattr(adj, 'tournament', None) +@register.simple_tag(takes_context=True) +def adj_record_link(context, adj, admin): - if not tournament: # Still no tournament + if not adj or not context['tournament']: return "" if admin: - url = reverse_tournament('participants-adjudicator-record', tournament, kwargs={'pk': adj.pk}) + url = reverse_tournament('participants-adjudicator-record', context['tournament'], kwargs={'pk': adj.pk}) else: - url = reverse_tournament('participants-public-adjudicator-record', tournament, kwargs={'pk': adj.pk}) + url = reverse_tournament('participants-public-adjudicator-record', context['tournament'], kwargs={'pk': adj.pk}) return mark_safe(url) diff --git a/tabbycat/utils/templatetags/debate_tags.py b/tabbycat/utils/templatetags/debate_tags.py index d6cf72abc13..a774288a6eb 100644 --- a/tabbycat/utils/templatetags/debate_tags.py +++ b/tabbycat/utils/templatetags/debate_tags.py @@ -37,17 +37,17 @@ def version(path_string, base_url=settings.MEDIA_URL): return base_url + path_string -@register.simple_tag -def tournament_side_names(tournament, name_type): - side_names = [get_side_name(tournament, 'aff', name_type), - get_side_name(tournament, 'neg', name_type)] +@register.simple_tag(takes_context=True) +def tournament_side_names(context, name_type): + side_names = [get_side_name(context['tournament'], 'aff', name_type), + get_side_name(context['tournament'], 'neg', name_type)] return side_names -@register.simple_tag -def debate_team_side_name(debate_team, tournament): +@register.simple_tag(takes_context=True) +def debate_team_side_name(context, debate_team): # If returned directly from the object it will have to lookup tournament - return debate_team.get_side_name(tournament) + return debate_team.get_side_name(context['tournament']) class TournamentURLNode(URLNode): From 8d6294c4c4edec529a3d6e4013f0d0ff27c057f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Thu, 1 Dec 2022 21:57:04 -0400 Subject: [PATCH 037/255] Remove sequence from participant category formsets The sequence field when creating break/speaker categories is an extra question that can be assumed by the order in which the categories are added, rather than explicit. It is also error-prone if a duplicate number is added, or categories are being re-ordered. Closes #2146 --- tabbycat/breakqual/views.py | 2 +- tabbycat/participants/views.py | 26 ++++++++++++++++++-------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/tabbycat/breakqual/views.py b/tabbycat/breakqual/views.py index 2c46434128d..094d4d756cd 100644 --- a/tabbycat/breakqual/views.py +++ b/tabbycat/breakqual/views.py @@ -260,7 +260,7 @@ class EditBreakCategoriesView(EditSpeakerCategoriesView): def get_formset_factory_kwargs(self): return { - 'fields': ('name', 'tournament', 'slug', 'seq', 'break_size', 'is_general', 'priority', 'limit'), + 'fields': ('name', 'tournament', 'slug', 'break_size', 'is_general', 'priority', 'limit'), 'extra': 2, 'widgets': { 'tournament': HiddenInput, diff --git a/tabbycat/participants/views.py b/tabbycat/participants/views.py index 80d5ba6e618..10b003d0cf9 100644 --- a/tabbycat/participants/views.py +++ b/tabbycat/participants/views.py @@ -4,9 +4,10 @@ from django.conf import settings from django.contrib import messages from django.core.exceptions import ObjectDoesNotExist -from django.db.models import Count, Prefetch, Q +from django.db.models import Count, Max, Prefetch, Q +from django.db.models.functions import Coalesce from django.forms import HiddenInput -from django.http import JsonResponse +from django.http import HttpResponseRedirect, JsonResponse from django.utils.html import escape from django.utils.translation import gettext as _, gettext_lazy, ngettext from django.views.generic.base import View @@ -332,7 +333,7 @@ class EditSpeakerCategoriesView(LogActionMixin, AdministratorMixin, TournamentMi def get_formset_factory_kwargs(self): return { - 'fields': ('name', 'tournament', 'slug', 'seq', 'limit', 'public'), + 'fields': ('name', 'tournament', 'slug', 'limit', 'public'), 'extra': 2, 'widgets': { 'tournament': HiddenInput, @@ -348,18 +349,27 @@ def get_formset_kwargs(self): } def formset_valid(self, formset): - result = super().formset_valid(formset) - if self.instances: + cats = formset.save(commit=False) + + for cat, fields in formset.changed_objects: + cat.save() + + for i, cat in enumerate(formset.new_objects, start=self.get_formset_queryset().aggregate(m=Coalesce(Max('seq'), 0) + 1)['m']): + raise + cat.seq = i + cat.save() + + if cats: message = ngettext("Saved category: %(list)s", "Saved categories: %(list)s", - len(self.instances), - ) % {'list': ", ".join(category.name for category in self.instances)} + len(cats), + ) % {'list': ", ".join(category.name for category in cats)} messages.success(self.request, message) else: messages.success(self.request, _("No changes were made to the categories.")) if "add_more" in self.request.POST: return redirect_tournament(self.url_name, self.tournament) - return result + return HttpResponseRedirect(self.get_success_url()) def get_success_url(self, *args, **kwargs): return reverse_tournament(self.success_url, self.tournament) From 6247d2d5d821b533cf313cfe805997005fd07126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 3 Dec 2022 15:52:08 -0400 Subject: [PATCH 038/255] Create custom field type for standings metrics This commit creates a custom field declaration for standings metric fields with the list of available metrics and the list items' format. --- tabbycat/api/serializers.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tabbycat/api/serializers.py b/tabbycat/api/serializers.py index 77862728530..bceb10bb857 100644 --- a/tabbycat/api/serializers.py +++ b/tabbycat/api/serializers.py @@ -9,6 +9,7 @@ from django.urls import get_script_prefix, resolve, Resolver404 from django.utils import timezone from django.utils.encoding import uri_to_iri +from drf_spectacular.utils import extend_schema_field from rest_framework import serializers from rest_framework.fields import get_error_detail, SkipField from rest_framework.relations import Hyperlink @@ -26,6 +27,8 @@ from results.mixins import TabroomSubmissionFieldsMixin from results.models import BallotSubmission, SpeakerScore from results.result import DebateResult +from standings.speakers import SpeakerStandingsGenerator +from standings.teams import TeamStandingsGenerator from tournaments.models import Round, Tournament from venues.models import Venue, VenueCategory, VenueConstraint @@ -888,6 +891,19 @@ class Meta: exclude = ('tournament',) +def get_metrics_field_type(generator): + return { + 'type': 'array', + 'items': { + 'type': 'object', + 'properties': { + 'metric': {'type': 'string', 'enum': list(generator.metric_annotator_classes.keys())}, + 'value': {'type': 'number'}, + }, + }, + } + + class BaseStandingsSerializer(serializers.Serializer): rank = serializers.SerializerMethodField() tied = serializers.SerializerMethodField() @@ -909,10 +925,18 @@ def __init__(self, *args, **kwargs): class TeamStandingsSerializer(BaseStandingsSerializer): team = fields.TournamentHyperlinkedRelatedField(view_name='api-team-detail', queryset=Team.objects.all()) + @extend_schema_field(get_metrics_field_type(TeamStandingsGenerator)) + def get_metrics(self, obj) -> list: + return super().get_metrics(obj) + class SpeakerStandingsSerializer(BaseStandingsSerializer): speaker = fields.AnonymisingHyperlinkedTournamentRelatedField(view_name='api-speaker-detail', anonymous_source='anonymous') + @extend_schema_field(get_metrics_field_type(SpeakerStandingsGenerator)) + def get_metrics(self, obj) -> list: + return super().get_metrics(obj) + class DebateAdjudicatorSerializer(serializers.Serializer): adjudicators = Adjudicator.objects.all() From 10314a1feedce5b2b897dd1e14dd757cec5a0d28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 3 Dec 2022 19:27:42 -0400 Subject: [PATCH 039/255] API Docs: Set DELETE checkin as response as 200 --- tabbycat/api/views.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tabbycat/api/views.py b/tabbycat/api/views.py index 7ef43133789..19abf7e9070 100644 --- a/tabbycat/api/views.py +++ b/tabbycat/api/views.py @@ -450,7 +450,7 @@ def get_queryset(self): Prefetch('venues', queryset=Venue.objects.select_related('tournament').filter(tournament__isnull=False))) -@extend_schema(tags=['checkins'], parameters=[tournament_parameter]) +@extend_schema(tags=['checkins'], parameters=[tournament_parameter, id_parameter]) class BaseCheckinsView(AdministratorAPIMixin, TournamentAPIMixin, APIView): name = "Check-ins" @@ -510,7 +510,7 @@ def get_response_dict(self, request, obj, checked, event, **kwargs): def get_queryset(self): return self.model.objects.filter(**self.lookup_kwargs()).select_related(self.tournament_field) - @extend_schema(request=None, responses=serializers.CheckinSerializer, parameters=[id_parameter]) + @extend_schema(request=None, responses=serializers.CheckinSerializer) def get(self, request, *args, **kwargs): """Get checkin status""" obj = self.get_object() @@ -518,21 +518,21 @@ def get(self, request, *args, **kwargs): event = get_unexpired_checkins(self.tournament, self.window_preference_pref).filter(identifier=obj.checkin_identifier) return Response(self.get_response_dict(request, obj, event.exists(), event.first())) - @extend_schema(request=None, responses=serializers.CheckinSerializer, parameters=[id_parameter]) + @extend_schema(request=None, responses={200: serializers.CheckinSerializer}) def delete(self, request, *args, **kwargs): """Checks out""" obj = self.get_object() self.broadcast_checkin(obj, False) return Response(self.get_response_dict(request, obj, False, None)) - @extend_schema(request=None, responses=serializers.CheckinSerializer, parameters=[id_parameter]) + @extend_schema(request=None, responses=serializers.CheckinSerializer) def put(self, request, *args, **kwargs): """Checks in""" obj = self.get_object() e = self.broadcast_checkin(obj, True) return Response(self.get_response_dict(request, obj, True, e)) - @extend_schema(request=None, responses=serializers.CheckinSerializer, parameters=[id_parameter]) + @extend_schema(request=None, responses=serializers.CheckinSerializer) def patch(self, request, *args, **kwargs): """Toggles the check-in status""" obj = self.get_object() @@ -541,7 +541,7 @@ def patch(self, request, *args, **kwargs): e = self.broadcast_checkin(obj, not check) return Response(self.get_response_dict(request, obj, not check, e)) - @extend_schema(request=None, responses=serializers.CheckinSerializer, parameters=[id_parameter]) + @extend_schema(request=None, responses=serializers.CheckinSerializer) def post(self, request, *args, **kwargs): """Creates an identifier""" obj = self.get_object_queryset() # Don't .get() as create_identifiers expects a queryset From fc1efc6784b323f6e5ddc848cc7cdb9be08ab07a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 3 Dec 2022 19:29:01 -0400 Subject: [PATCH 040/255] Hide None emoji from participants' table --- tabbycat/utils/tables.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tabbycat/utils/tables.py b/tabbycat/utils/tables.py index 09048afabab..8a0ba875e84 100644 --- a/tabbycat/utils/tables.py +++ b/tabbycat/utils/tables.py @@ -262,7 +262,7 @@ def _team_record_link(self, team): def _team_cell(self, team, show_emoji=False, subtext=None, highlight=False): cell = { 'text': self._team_short_name(team), - 'emoji': escape(team.emoji) if show_emoji and self.tournament.pref('show_emoji') else None, + 'emoji': escape(team.emoji) if team.emoji and show_emoji and self.tournament.pref('show_emoji') else None, 'sort': self._team_short_name(team), 'class': 'team-name no-wrap' if len(self._team_short_name(team)) < 18 else 'team-name', 'popover': {'title': self._team_long_name(team), 'content': []}, From 12538ad5f4fc6d2932021e1cf0098f4d871ed539 Mon Sep 17 00:00:00 2001 From: Chuan-Zheng Lee Date: Sat, 10 Dec 2022 19:38:02 +1300 Subject: [PATCH 041/255] Change licence to AGPLv3 and update donations text --- .github/README.md | 6 +- LICENSE.md | 660 ++++++++++++++++++ LICENSE.rst | 31 - docs/about/licence.rst | 18 +- docs/guide/comparisons.rst | 4 +- docs/guide/tournament-logistics.rst | 2 +- package-lock.json | 2 +- package.json | 2 +- tabbycat/templates/footer.html | 6 +- .../templates/create_tournament.html | 7 +- .../templates/tournament_index.html | 5 +- 11 files changed, 691 insertions(+), 52 deletions(-) create mode 100644 LICENSE.md delete mode 100644 LICENSE.rst diff --git a/.github/README.md b/.github/README.md index 60c8a83776a..b5f712427e3 100644 --- a/.github/README.md +++ b/.github/README.md @@ -51,11 +51,13 @@ If you have any feedback or would like to request support, we'd love to hear fro Contributions are welcome, and are greatly appreciated! Details about how to contribute [are also outlined in our documentation](http://tabbycat.readthedocs.io/en/latest/about/contributing.html). -We also invite new translations of the interface through [Crowdin](https://crowdin.com/project/tabbycat)! Get in touch for access to our translation platform. +Monetary donations are much appreciated and help us to continue the development and maintenance of Tabbycat. We suggest that tournaments donate at the level of C$1 (1 Canadian dollar) per team; especially if your tournament is run for profit or fundraising purposes. More details [are available in our documentation](http://tabbycat.readthedocs.io/en/latest/about/licence.html). ## ©️ Licence -We haven't released Tabbycat under an open-source licence, so there is no formal and general right to use this software. Nonetheless, you're welcome to freely use Tabbycat to help run a debating tournament. However, if your tournament is run as a for-profit or for-fundraising activity a donation to Tabbycat's maintainers is required. More details [are available in our licence information](http://tabbycat.readthedocs.io/en/latest/about/licence.html). +Tabbycat is licensed under the terms of the [GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/). You may copy, distribute, and modify this software; however note that this licence requires (amongst other provisions) that any modifications you make to Tabbycat be made public. + +If you wish to modify Tabbycat in a proprietary fashion we (the developers) are open to negotiating a dual licence for this purpose. Please [contact us](http://tabbycat.readthedocs.io/en/latest/authors.html#authors) if this is the case for you. ## ✏️ Authors diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000000..cba6f6a15a4 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,660 @@ +### GNU AFFERO GENERAL PUBLIC LICENSE + +Version 3, 19 November 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +### Preamble + +The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains +free software for all its users. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + +A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + +The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + +An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing +under this license. + +The precise terms and conditions for copying, distribution and +modification follow. + +### TERMS AND CONDITIONS + +#### 0. Definitions. + +"This License" refers to version 3 of the GNU Affero General Public +License. + +"Copyright" also means copyright-like laws that apply to other kinds +of works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of +an exact copy. The resulting work is called a "modified version" of +the earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based +on the Program. + +To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user +through a computer network, with no transfer of a copy, is not +conveying. + +An interactive user interface displays "Appropriate Legal Notices" to +the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +#### 1. Source Code. + +The "source code" for a work means the preferred form of the work for +making modifications to it. "Object code" means any non-source form of +a work. + +A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can +regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same +work. + +#### 2. Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, +without conditions so long as your license otherwise remains in force. +You may convey covered works to others for the sole purpose of having +them make modifications exclusively for you, or provide you with +facilities for running those works, provided that you comply with the +terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for +you must do so exclusively on your behalf, under your direction and +control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the +conditions stated below. Sublicensing is not allowed; section 10 makes +it unnecessary. + +#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such +circumvention is effected by exercising rights under this License with +respect to the covered work, and you disclaim any intention to limit +operation or modification of the work as a means of enforcing, against +the work's users, your or third parties' legal rights to forbid +circumvention of technological measures. + +#### 4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +#### 5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these +conditions: + +- a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. +- b) The work must carry prominent notices stating that it is + released under this License and any conditions added under + section 7. This requirement modifies the requirement in section 4 + to "keep intact all notices". +- c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. +- d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +#### 6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of +sections 4 and 5, provided that you also convey the machine-readable +Corresponding Source under the terms of this License, in one of these +ways: + +- a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. +- b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the Corresponding + Source from a network server at no charge. +- c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. +- d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. +- e) Convey the object code using peer-to-peer transmission, + provided you inform other peers where the object code and + Corresponding Source of the work are being offered to the general + public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, +family, or household purposes, or (2) anything designed or sold for +incorporation into a dwelling. In determining whether a product is a +consumer product, doubtful cases shall be resolved in favor of +coverage. For a particular product received by a particular user, +"normally used" refers to a typical or common use of that class of +product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected +to use, the product. A product is a consumer product regardless of +whether the product has substantial commercial, industrial or +non-consumer uses, unless such uses represent the only significant +mode of use of the product. + +"Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to +install and execute modified versions of a covered work in that User +Product from a modified version of its Corresponding Source. The +information must suffice to ensure that the continued functioning of +the modified object code is in no case prevented or interfered with +solely because modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or +updates for a work that has been modified or installed by the +recipient, or for the User Product in which it has been modified or +installed. Access to a network may be denied when the modification +itself materially and adversely affects the operation of the network +or violates the rules and protocols for communication across the +network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +#### 7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders +of that material) supplement the terms of this License with terms: + +- a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or +- b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or +- c) Prohibiting misrepresentation of the origin of that material, + or requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or +- d) Limiting the use for publicity purposes of names of licensors + or authors of the material; or +- e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or +- f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions + of it) with contractual assumptions of liability to the recipient, + for any liability that these contractual assumptions directly + impose on those licensors and authors. + +All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; the +above requirements apply either way. + +#### 8. Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +#### 9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run +a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +#### 10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +#### 11. Patents. + +A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims owned +or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is "discriminatory" if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on +the non-exercise of one or more of the rights that are specifically +granted under this License. You may not convey a covered work if you +are a party to an arrangement with a third party that is in the +business of distributing software, under which you make payment to the +third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties +who would receive the covered work from you, a discriminatory patent +license (a) in connection with copies of the covered work conveyed by +you (or copies made from those copies), or (b) primarily for and in +connection with specific products or compilations that contain the +covered work, unless you entered into that arrangement, or that patent +license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +#### 12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under +this License and any other pertinent obligations, then as a +consequence you may not convey it at all. For example, if you agree to +terms that obligate you to collect a royalty for further conveying +from those to whom you convey the Program, the only way you could +satisfy both those terms and this License would be to refrain entirely +from conveying the Program. + +#### 13. Remote Network Interaction; Use with the GNU General Public License. + +Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your +version supports such interaction) an opportunity to receive the +Corresponding Source of your version by providing access to the +Corresponding Source from a network server at no charge, through some +standard or customary means of facilitating copying of software. This +Corresponding Source shall include the Corresponding Source for any +work covered by version 3 of the GNU General Public License that is +incorporated pursuant to the following paragraph. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + +#### 14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU Affero General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever +published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions +of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +#### 15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + +#### 16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR +LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM +TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +#### 17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS + +### How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively state +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper +mail. + +If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for +the specific requirements. + +You should also get your employer (if you work as a programmer) or +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. For more information on this, and how to apply and follow +the GNU AGPL, see . diff --git a/LICENSE.rst b/LICENSE.rst deleted file mode 100644 index 70c415ac53b..00000000000 --- a/LICENSE.rst +++ /dev/null @@ -1,31 +0,0 @@ -=================== -Licence Information -=================== - -We haven't released Tabbycat under an open-source licence, so there is no formal and general right to use this software. Nonetheless, you're welcome to freely use Tabbycat to help run a debating tournament if it is a not-for-profit and not-for-fundraising activity. A voluntary donation of C$1 (Canadian dollar) per team would be greatly appreciated, and would help us meet costs and justify our ongoing work and support for Tabbycat users. (A donation link is in the footer of your Tabbycat site.) - -Use at for-profit or fundraising tournaments -============================================ - -If you use Tabbycat at a tournament where any individual or organisation is making a profit or raising funds (other than to cover the direct costs of the tournament), you or your tournament **must** make a payment of C$1 (Canadian dollar) per team to the Tabbycat Debate Association, as outlined in each tournament’s donation page (the link is in the footer of your Tabbycat site). This includes instances where organisations run tournaments partly as fundraising activities and applies even if the organisation itself is a non-profit. - -While we suggest that non-profit, non-fundraising tournaments budget for a donation of C$1 per team, it is not required in order for such tournaments to use Tabbycat. - -Modifications to and redistributions of Tabbycat -================================================ - -We grant you permission to modify and/or redistribute Tabbycat, provided that - -- you do not receive any payment for this modification and/or redistribution, -- if you modify Tabbycat, you add prominent notices stating that you modified it, -- all references and functionality relating to donations are kept intact, and -- this licence page and all attributions of authorship are included as-is. - -Modifying Tabbycat for payment, or using a version of Tabbycat that has been modified for payment, is strictly prohibited without our express permission. - -If you use a version of Tabbycat that has been modified by you or a third party to run a for-profit or fundraising tournament, the abovementioned donation of A$1 per team is still required. - -Disclaimer of warranty and liability -==================================== - -We work on this software in our spare time and make it available for not-for-profit use in the hope that it will benefit the debating community. **It is provided "as is", without any warranty of any kind, express or implied, including without limitation any warranties of merchantability and fitness for a particular purpose, and we disclaim all legal liability. By using Tabbycat, you agree that none of its contributors will be held liable for any loss or claim arising directly or indirectly from using the software, or for any loss or claim otherwise in connection with the software.** diff --git a/docs/about/licence.rst b/docs/about/licence.rst index 2f7644abf03..6cf4e182338 100644 --- a/docs/about/licence.rst +++ b/docs/about/licence.rst @@ -1 +1,17 @@ -.. include:: ../../LICENSE.rst +===================== +Licence and Donations +===================== + +Licence +======= + +Tabbycat is licensed under the terms of the `GNU Affero General Public License v3.0 `_. You may copy, distribute, and modify this software; however note that this licence requires (amongst other provisions) that any modifications you make to Tabbycat be made public. + +Please `consult the terms of the licence for the full detail of its terms `_. + +Donations +========= + +Monetary donations are much appreciated and help us to continue the development and maintenance of Tabbycat. We suggest that tournaments donate at the level of $1 Australian dollar per-team — especially if your tournament is run for profit or fund-raising purposes. + +Information on how to donate, and the suggested level of donation, are available in the footer links of each Tabbycat site. diff --git a/docs/guide/comparisons.rst b/docs/guide/comparisons.rst index 412a617a7ac..8694e13d482 100644 --- a/docs/guide/comparisons.rst +++ b/docs/guide/comparisons.rst @@ -96,7 +96,7 @@ Other considerations **Offline availability**. If you like, you can also install Tabbycat on your own computer, rather than host it as website on a server. This means that you can use it offline. However installing Tabbycat in this manner will require the (at least brief) use of a command line interface. -**Cost**. Tabbie2 is free to use. Tabbycat is free to use for not-for-profit, not-for-fundraising tournaments; tournaments for profit or fundraising must make a donation of A$1 per team. In addition, larger tournaments that run on Tabbycat's recommended web host (Heroku) may need to purchase an upgraded database service (the free tier has storage limits) which will cost around ~US$3 to use for the duration of a week-long tournament. +**Cost**. Tabbycat and Tabbie2 are both free to use. Larger tournaments that run on Tabbycat's recommended web host (Heroku) may need to purchase an upgraded database service (the free tier has storage limits) which will cost around ~US$3 to use for the duration of a week-long tournament. **Documentation**. Tabbycat has `relatively extensive documentation `_ that can be useful for learning how to use a particular feature or understanding what is happening at a technical level. @@ -150,7 +150,7 @@ Other considerations **Stability and development**. Tournaman has been in use for over a decade and is generally considered to be stable and reliable. However, new features are relatively rarely added, and its being a native app means that it doesn't boast as many features as Tabbycat or Tabbie2. -**Cost**. Tournaman is free to use. Tabbycat is free to use for not-for-profit, not-for-fundraising tournaments; tournaments for profit or fundraising must make a donation of A$1 per team. In addition, larger tournaments that run on Tabbycat's recommended web host (Heroku) may need to purchase an upgraded database service (the free tier has storage limits) which will cost around ~US$3 to use for the duration of a week-long tournament. +**Cost**. Tournaman and Tabbycat are both free to use. Larger tournaments that run on Tabbycat's recommended web host (Heroku) may need to purchase an upgraded database service (the free tier has storage limits) which will cost around ~US$3 to use for the duration of a week-long tournament. **Availability of source code**. Tournaman's code is closed-source, meaning it is not publicly available. If you do not have any coding experience this is probably not relevant to you, but if you do, having access to the source of Tabbycat can help you understand how the program works and customise it as needed. diff --git a/docs/guide/tournament-logistics.rst b/docs/guide/tournament-logistics.rst index de6e50dedae..bfdc2e7c8a0 100644 --- a/docs/guide/tournament-logistics.rst +++ b/docs/guide/tournament-logistics.rst @@ -35,7 +35,7 @@ It might sound obvious but it will pay to have a very thorough conversation abou - Ensure that plans are made for food to be brought to the tab room. Otherwise you will starve and the adjudication core will swan off to lunch. Having regular access to caffeine can also be similarly essential to some adjudication and tab teams. - What kind of printers will be available? Can the tournament buy/borrow one? This is obviously a key consideration for pre-printed ballots. Also try and ensure there are back-up printing options if possible. Clearly stipulate your need for ink and paper; and try and opt for a black/white laserjet, over an inkjet, if possible. - What kind of volunteers will be available? How many, and what is their experience level? As a very broad recommendation, you probably want around 1 volunteer for every 10 rooms, assuming volunteers are performing a dual role as data-enterers and ballot-collectors. -- Will the tournament make a donation to whoever maintains the tabbing software you are using? Depending on the license of your tabbing software and the nature of your tournament (for profit vs not for profit) this may be required. Also, if your tab is self-hosted or independently hosted (such as how Tabbycat is generally deployed on Heroku) accounting officers should also be aware that there will be some costs associated with hosting the tab. +- Will the tournament make a donation to whoever maintains the tabbing software you are using? Also, if your tab is self-hosted or independently hosted (such as how Tabbycat is generally deployed on Heroku) accounting officers should also be aware that there will be some costs associated with hosting the tab. - You should also ensure that people helping with the tab are fairly compensated for their flights, registration, etc and that any volunteers are invited along to socials and/or given some other recompense. - Will Swing teams be available? You should plan to have at least one more than you need. For example, with 39 teams, you should have both an 40th swing team to fill in the draw, and the option to easily assemble an 41st swing team in case a team goes missing. At very large tournaments (say over 150 teams) you should plan for even more swing team capacity — it's not unheard of for say three teams to vanish all in a single round. In these cases, you should try and ensure that the swing teams are always ready to go — i.e. that that they are pre-formed, you have a clear communication channel with them, and that they distributed/waiting near the debating rooms so they can fill in at a moment's notice (often you will only find out that teams are missing right as debates are scheduled to start). - How will critical information be communicated to participants? Consider that in general, Facebook announcements do not reach many people, although paying to boost the posts is often a very cheap way of dramatically raising their effectiveness. In particular, also ensure or check how you manage to get in touch with teams or adjudicators who go missing: will they have reliable phone numbers? Can you get a list of institutional reps who can be reliably called? You want to have processes in place for chasing up adjudicators who do things such as make scoring mistakes as soon as possible in order to minimise delays. diff --git a/package-lock.json b/package-lock.json index 272f05aab34..d492e0db16c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,7 @@ "": { "name": "tabbycat", "version": "3.18.1", - "license": "UNLICENSED", + "license": "GNU Affero General Public License v3.0", "dependencies": { "@babel/cli": "^7.16.0", "@babel/core": "^7.16.0", diff --git a/package.json b/package.json index fe85c52d7f7..d814cd7ba97 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "node": "16.15.x", "npm": "8.11.x" }, - "license": "UNLICENSED", + "license": "AGPL-3.0-only", "repository": "https://github.com/TabbycatDebate/tabbycat", "version": "3.18.1", "devDependencies": { diff --git a/tabbycat/templates/footer.html b/tabbycat/templates/footer.html index 81d548be228..bbe2fcf371f 100644 --- a/tabbycat/templates/footer.html +++ b/tabbycat/templates/footer.html @@ -18,7 +18,7 @@

{% blocktrans trimmed %} - Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments. + Tabbycat is an open-source project developed by volunteers and is free to use. {% endblocktrans %} {% if tournament and tournament.billable_teams > 0 %} {% blocktrans trimmed with amount=tournament.billable_teams %} @@ -28,8 +28,8 @@

{% trans "Learn more about donating." %} {% else %} - {% blocktrans trimmed %} - Donations to Tabbycat from individuals or organisations are much appreciated. + {% blocktrans trimmed %} + Donations to Tabbycat from individuals or organisations are much appreciated and help us to continue to develop, support, and maintain Tabbycat. {% endblocktrans %} {% endif %}

diff --git a/tabbycat/tournaments/templates/create_tournament.html b/tabbycat/tournaments/templates/create_tournament.html index c0348afdef4..44addb0c3ea 100644 --- a/tabbycat/tournaments/templates/create_tournament.html +++ b/tabbycat/tournaments/templates/create_tournament.html @@ -11,13 +11,8 @@ {% block content %} - {% url 'donations' as donations_url %} {% blocktrans trimmed asvar donation %} - Tabbycat is free to use for non-profit and non-fundraising tournaments - (although donations are encouraged). If your tournament is run for profit - or for fundraising, please note that there is a - required payment. For more details, see the - Tabbycat licence agreement. + Tabbycat is free to use, although donations are encouraged. {% endblocktrans %} {% include "components/explainer-card.html" with type="primary" p1=donation %} diff --git a/tabbycat/tournaments/templates/tournament_index.html b/tabbycat/tournaments/templates/tournament_index.html index eb763a66906..860abd644dd 100644 --- a/tabbycat/tournaments/templates/tournament_index.html +++ b/tabbycat/tournaments/templates/tournament_index.html @@ -4,14 +4,11 @@ {% block content %} {% if round.is_break_round %} - {% tournamenturl 'tournament-donations' as url %} {% blocktrans trimmed with amount=tournament.billable_teams asvar text %} We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of ${{ amount }}. - Note that if your tournament is run for profit, or for fundraising, making this payment is a - mandatory condition of Tabbycat's software license. - Learn more about donating. + Learn more about donating. {% endblocktrans %} {% include "components/item-info.html" with type="info" icon="heart" %}
From 970120087d12f647dbe1c4d412a16155028524e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 10 Dec 2022 12:45:07 -0400 Subject: [PATCH 042/255] Add Tabbycat logo to API docs --- tabbycat/settings/core.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tabbycat/settings/core.py b/tabbycat/settings/core.py index 7b678227ec2..4e042712486 100644 --- a/tabbycat/settings/core.py +++ b/tabbycat/settings/core.py @@ -345,6 +345,12 @@ 'SCHEMA_PATH_PREFIX': r'api/v\d+', 'CONTACT': {'name': 'Étienne Beaulé', 'email': 'ebeaule@tabbycat-debate.org'}, 'LICENSE': {'name': 'AGPL 3', 'url': 'https://www.gnu.org/licenses/agpl-3.0.en.html'}, + 'EXTENSIONS_INFO': { + "x-logo": { + "url": "/static/logo.svg", + "altText": "Tabbycat logo", + }, + } } # ---------------------------------------- From 5542ae7ebbce96ebd697ab1364592e3af936ebcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 10 Dec 2022 12:46:21 -0400 Subject: [PATCH 043/255] Update screenshots in docs --- docs/features/images/add-venue-category.png | Bin 234988 -> 243233 bytes docs/features/images/add-venue-constraint.png | Bin 79267 -> 76287 bytes docs/features/images/adding-feedback.png | Bin 176606 -> 259850 bytes docs/features/images/ballot-entry.png | Bin 202919 -> 346989 bytes docs/features/images/check-ins-overview.png | Bin 120780 -> 125132 bytes docs/features/images/checkbox.png | Bin 2475 -> 26952 bytes docs/features/images/checkin_statuses.png | Bin 250580 -> 180956 bytes docs/features/images/float.png | Bin 5347 -> 27449 bytes docs/features/images/integer-scale.png | Bin 7223 -> 35931 bytes docs/features/images/integer-textbox.png | Bin 4760 -> 26603 bytes docs/features/images/iron-speakers.png | Bin 91548 -> 154339 bytes docs/features/images/longtext.png | Bin 4663 -> 37839 bytes docs/features/images/select-multiple.png | Bin 5157 -> 41576 bytes docs/features/images/select-one.png | Bin 7552 -> 139988 bytes docs/features/images/text.png | Bin 4515 -> 27748 bytes docs/features/images/yesnodropdown.png | Bin 5277 -> 76037 bytes docs/install/images/tabbycat-bare-linux.png | Bin 62228 -> 0 bytes docs/install/images/tabbycat-bare-osx.png | Bin 35417 -> 0 bytes docs/install/images/tabbycat-bare-windows.png | Bin 54982 -> 0 bytes docs/install/images/tabbycat-bare.png | Bin 66693 -> 353086 bytes docs/install/linux.rst | 2 +- docs/install/osx.rst | 2 +- docs/install/windows.rst | 2 +- ...heckins-page.png => availability-page.png} | Bin docs/use/images/create-tournament.png | Bin 41078 -> 243556 bytes docs/use/images/draw-page.png | Bin 394749 -> 0 bytes docs/use/running-a-tournament.rst | 6 +++--- 27 files changed, 6 insertions(+), 6 deletions(-) delete mode 100644 docs/install/images/tabbycat-bare-linux.png delete mode 100644 docs/install/images/tabbycat-bare-osx.png delete mode 100644 docs/install/images/tabbycat-bare-windows.png rename docs/use/images/{checkins-page.png => availability-page.png} (100%) delete mode 100644 docs/use/images/draw-page.png diff --git a/docs/features/images/add-venue-category.png b/docs/features/images/add-venue-category.png index e96cbf3db9be1f0869c8badad075ef3acfbfafe6..0b65d1a82047b38943d4458645a1176042fd13c6 100644 GIT binary patch literal 243233 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 SSdOBU^=Bn;MSTwjJsK`>o*rNHw z{6Kd^W(hb_A6y)%3pc=IF2{#8b`FG??7ngy_#)j-jgoAC2J>M8hg~;!^`JLJ{MjFQ zzT^FOgq+Tg(w+WL@p<$yOX;Q(f$%eTAi2G}6M{-&l5gatm#%cfje-+5r=Jzh1A==< z`XJz2q<{|fRt`^DB6Dtn{}1b?;fULrEP=`oP5bJTn3q3$O7su|0(sayhoaj`G@56p zA+$67h$!0|;(aLdIL2TA%)-in3L)?A5$Q`$+*PTdga`x~yC#dk$v zg(Yd_>JyJ{l}9bgYe4@XEAX9cpw-qj1VAzpgbe9xDGsf=7_%eW_Ky<)E(COcn+1ot zBVUihl^u9~dU14E%h8%DIuetbV$*yu$}ei*Z71c`aoh4eD+`O!fWe4nfmTP9j>eAt zWd4tjkeycJg`~X`4(P4%3hWU1)`99~ z=*!AFZN7RIFGP@(!ZdVzC(Gt-|4j`m4jpe7GeUs60~`>SyFeaA-EMv4_6#R!z-m{t z(?{2YGflM~tSIxc=DspS{|8Pcb>`OGXhIwPQMRn4SKdR}<2}TJbnymlGz)|IQg=~< zk+q4!&SNgy-RV~!l4qt|Q|$$A%}F3uIFJIwVH#&AtzFA%X{Or?=A;jj;r^t&jIT2& z<&Tz-Q?yOJvdjqC!@#S}Ds$EIHRqOL8wOWfn;gv_;U%L9loC8OWtXel2?I>tW)I1w z|55G9JI*?FN&G4N5JthOqJ6|N1MJf3tzuv3!Vo#9uTtDk#^>|avtZv+MsLlDl9~5? z38&$kDO0KR->#Nx30epj=W3<*o-|OV{+N3ItBuOxx?w2I=A3Lp^7-AYRFj}#mx&jr z4|}gCpFT>earli^f|KXYwL~F8kkixW7eLF7>ETaX19B|+3wp(7?#U>? z|1m>~E8-J<0P0e!e5n5F7AvuU9zzMrXeYe(g*fP_W5Egf>h`m2QsJafXu9mD$Ou9$ z+?Is%H3tD4YqeqMTOI|ENKKYW9o{<^1LWc(`bOmgMS8WN97- z*o`@DBwB0jvJs8|kumP@{FLEWE+zL6C5y!g3HT+aokLw9r}H-A2cNd$)8=E^t^Lk# z!3Wd%46Sx4o`caWbqOqW(-^anz4yDl47nIitO$d@<4L*&n>!vCx}-=_tWJ%5hwXm;Pu1TPLZzNantf6o-;uWv32h9?ysi@LOv$0FSYEGZ?zYwqW@N!J#nn>NaY*c^nI0^gC9JpDa-|J#(-UkMAq z9uxks#~ICJ8*L~_6*ApJS;l7JU=TEvVP}0j`0`qo*dOR_5U~Gxd$v_y-EN5QrT@OyGFc55#-WSU#w;2fh0z~{~qx;reF>X20Avi`yZ&ZVR zY>-MvLf+L-sSv&tK0l|N8W@n7P6SGnt~N1R>x`0(z}1Stq5?m^4kd!(BKl2enE+ z+)9#()as>FXy0d{eacC~a}`<@$`rOP!3^G$Ym9M2eIVJ<7YsvNr}Ig|Nti3hxWCc+ z!<4^wwwhE6gEb0l3Vyx+wUk9qDiPFQcJ4Y)r3}L8A;X#mq(D~qZexgslRd1f1LJxg=pZhpri?2e(N35PXynTjq zKpVMR@4T_fW`)sk^c2%5`8882_c^zCk3ewHju$L9Z?}DU^&!}8vTp}ORht|EUUATn z$``qxtiGf;e&#ZE_IeD%mN@Rg%O|N-sJRhgR|0iiQEk{+p4@pZtNAlI1S|o8C}j#z zDOEpwk4pL^!GUb3i1cM>9=5Kvg^zsMi*F0fapVBvSEOvk0zv(L+t+Eg8Gel-ofv`# zS2yo=sFZHtG5fW8G3^{EwLaz`4CnFP3>L3JJQ>YO>&j3porN&~eV?!E*H!Y$_*%uX zhfr3~bIH6T_sTzQhvJlFBRK3u@$PG0ONiBF znMzB=lXhko6`Q;}s;T{B7s@}5k54py4eoZUYlAkboL5Qayz+^1HQe0hi_ai1RR^q^5PSdCtFr>f`&w!}i0a z*yN-rRnkX((`!SkLghyE^n9#0w&Z3`wz?6DmP9apxH_%@#{e(^mJ(&Y> zM*(S5p<$ssjg-twx0YrBjWoLXgH@^N4du&EPP~s7qprwTeV%1CL_L|uhE<;Z`mIIX z*pbqwskB<(~>2o zm@8NsLNq+zhA435hfWxAcnN?`jux&gT@LeN7dx4`i(`#XGDw$e`VrVY2QQDB+8F~>6SAr)D0HXe`Z7O+|--6 zOFJiI*1!}B>mlg&Y9rLhS7s=~yn^%@9Vk{Q6^3^Sc{w(8b5 zjycSCBQ0F>#2x3arrMV^*8K8bMc4Mx-LkEfc`#)9y&pQCiX>w=P}z3p555*5zI547nM^WI-R5UZuNeMKvT4rrYu%2F#PDbs@R2S z8O@}7qItXo&uf_Z#78sUnZa7F5uaiFL*}Gn&+_K-iQd8yNjH$%$ zr068%C4$mp(u(Iv=4{(9+fMR{g?vl^q~`?Js%T+;-}Pm7XYoH~I03K?umNjNkLMai zujA0KMZ=7=$BViv1vIVq>CPe9eb&n8_fuW5+Q;P!VE=9CnB@mM)grgv)iqvt#l|9o zl&&fTZO|V$a*L0`u%RGnkXV|S5&CyLA^n| zYF*GG&lV6UzRUJ^9NcC?#%3{(k1d`^$cwKY_}y8B?#D&Qv*GJvpM0@1dQJ#olDtgY z>+~bOs(G|vT74_X&!f$Nlk?FaS0a!S`lgh}U;@X`Zr9p^n6y9{Y&XOkGWxwIa5DmbiE*0TZkPLCwzL;X;l1C=svd=Y5zcW&)8Ie zYq;@`_;(roYK`C;##~RDiKnXV|AGVh5bnqQHjHB8I&;_bm_!zaI_=Ivu(styH7~^9 zd~>n$V3oQM3z1LK*))i4kR7r%hB@a=#BV4og|H;m#g?NX%<<+NGTV-?PD_nA_OV#v zfnN>utV5Zf7C=bB>|SSCc=r!F?E@`q=JQkC>r5sNkhGr46aR)@(Rp&aEBx{4Clx3Kek9G3IVoKhcMxi!V zO`KySq{OZYFwI)68WU_PP8OKnc?=4G4%E1ojBS-qD(^E@p3XJPl-PR zIdn|gnv0(lK-oFFEjeuYl8ewzy~cjJ?06v`m5iQ@eh2Q8PQ?oA9fSZGYT+qB;BbjoHz5I@@-@ndkLuvv)9T2#-nAh*f5q-g6d{v%Db ztL)+`Ib<#ZJ7rA%j`vQ(=6Yed5(8t*ma2C;7ppVFzzwxoap=aFS%e@&aoj7wm4R*N zxUFG#jh>Ip>M+f{MHL!1`&Ry_*fn#_&`OMtQQ)sVuHXBL!dZ<>8Rtt&t0XgB(sbzR zxrg=OMVge4aUxmQpGy+~qkuNZbU>3hIPKvFExV2O6;<+q-AyQ&wh4?cnQ|>O zA4GtP4X>vEHcaDtHaSDg7F|KS37z;P(J1~bm1Q%3(Ee@T49Tb=I8SSRE0KH|CUt0M z&b)PI40U?Bv6rbt?x3RQ(Yh2IBF`*V&w1hmXajK^iVTJhC|7e#g~0jS`w7?|oib5Y z3cO2n8D+_yKJQPz&elPmHS}hqb|GM+2zMC{Ak6G|WXSCt8Hy6xMP1(74K^${FcW%s z@`pMu8fGyInof<;O04afaEVRFh{2+ed1p?Q*f;GzY`ts!w++U(t@W)Ihpn^L@DAA8 zm7=&pvEz3qV5JG%I6%!R=~|iBfhy)nvO%WoXVuDs3d_VobA@-`2*Arv3Az`%f;Bm@DU(79#uoeM zamG-K#QCqlSz)b9s75&f>e$h^6(9yX2k4}R2G9c%p>N?*>`E(RfOJ{&y{z2L>*`y% zgg!gq!3Pkd~s5}-S9lOjei1_UM+xGe`adBi{@cXbiy+0F$b-s?0=YS#;T zVOvHNW~C%M^w{LA2&w|ti*%4&at=;-&@dgD;DWtLSvN?84~xS!H4gaNkjPbul5oMQ zUkH}Dvcdv?JlS)q3ZS!05(1gaV%=VUb7oo#=a!1FgG(;C3EAqrrcH!Hk1bv;W_I0{ z#ft1T=yJz?Kr-&Tc1`oL@V?7~tv+JTWnpM%>AE!cTWCH!!F$GRZq|2NqdlEh0C0}( z!jTZWM?UAL1Ilys2T$M1c+Y-`P31r~=HPW!`Vm0xL0(QzR3gqip5P2%{{^CsuDA6d z4=OpZ{EvDg!YThEZPQ9$js{R**6DLc(t!=kcJbJmbHTFDXSZ4TdnqRTh~FyvlBIO4 z)SC@~1o2!y-V7izWXCj^gFtuCgUo>9Z1uwN^x=J>WhleoefHfcaIZG*60qogK@kp- z*V9atg9Eq>0lgcOTL;E*S1a_M%J=M@9mTX&KMf}vnsb@YNnVayy+XV1v*m-W@2uodXTwkbWt0OMTPv3Jy<+j`=HD?I`>d;A zZk&33s~BeeyB{-U!-3izq-iC0Ux%j!zrL0`%4;n*dE=h#9z5$pf-=lq7LS|>*p#udIcJgf|PgpM7ZlmJ` z<&|04<$~HEzr6L!Yd|mUg%VpvGC6v=HOOoQ05IoShS_!_t@L66aRvE?80G(}6W|;9 z6i`E(!6Z$n2qbMpi09Pjyu)|Vr)jO)EVD)k-HZ)<)xpBDA<6PRu|uT}$#Fa?^e2jk zE#fiUxsVN`5yM77?#lpV@~+YWx*4tVz)5a`{dXOg^Vm*ZOBA%~I+@Y3)06EMlne}L zFX(Y-?7pg9K<<-hR|dUhJk5?m8+$44eAvF(IvIa_CtEp^#p|QjT8-s@dCV1N-#J0p zaw4lE7XG!aK4qLxw@_LS6+O3e^&T1FM!EHd>ARKjR`o#IEProh9O5Y4% zhXd^Fy+9MkW&gq^W8;f zAPnEo-5%*ZHK%6+p>u?6ZEiF6`DUM&V(p`2BHfF^9v1rjiO5!B_l2$+C@=Q%XaRGP zc@Z7!0qin9`U$QpL%hBK?Arh!vP-p2*c9qqFq$dAsW2hza(hKd`g`U)ZdGUp;gzp)}#nXFOI8@^c%?br8 z(K?BC!*F^VVT)Zws)wQT77sn+jXmJ?92FwQn=19l5*$DP{bS_7lkWhfV8998l}Q+Q z>Ec<*-x4CbFSJX(5(>KY3M25jNBcvXe%a^Jtw86V7WnwPWEXY|@bKbNqQjX^-F{cT z5F8NC;CtSt^4~QYzH416sykG27H1MZ_qy&qRQr!i$K9$PhAiA0tH$fWL}| zH*tyoGWmbqzx4%h-|KB7j{`*_`Z7=rTKSr`yZ}-FJB0R{ElVu^0}`O_rKH!A@>CVax>DGVp-}C znQEPXR}=q_ll0Hc-Jp$ugMOK{_;=p^ z|2Rqi+%)mIaE)RMLS~boq0E2o|IgF>9dR+r2jI1XxwUrxo{#^_h2Uc#$xSf!5Jpzq zvikD>^22}6V!!3ZsNX=JlImz~kN>Ts{KviieJ=mwUjMe}{l~rj_ATJzKkoJKj`E+~ z>)#gG|Lk7>?kNA+z5a{|pW_4d(%Aw8Z%t+?GIFxM7Cg z`_B8>pvU?r&t^*zppa8tW4jTvo_HZheeCW39=-cohy9*(fNM$ProgQq*9*0JB-eiq zO>Bl8;XKxIvqKQ@qq?KByEas)<32YfFKG6`t!M4RC8@iMi{tsJ zQa;P+Ks%E_AAGjSmMFji1W>#!BPtoaag(UvWY_U} z_vLZRg{<=f+4I!-SwGU^X|@l?@H6bWz8C%gc^!KSKS!R2c2gt_+(`Ji*IOAJCOZAY zWwDhe+1P~qALPNmob7j+!mRQ6rfe`7==7eaDi|T+=G@05g?%V0iWZ~(cW9_7K*CsB&9T&_nX>?I$om*;(b zpxgI-^?U{`${(D zFp=)SYR%>?@Qu2N{qdE5eZG9W#szy&v8qUjY$p74)GuZfhYLpK*Bc-g+BG{2Tem3V z(f;{5Qa4rN$YNj}K=VWX_R^;=xJFd;|WXjowqS+faTGRviF{Qu?)BX8M8-zOgJe2Wz zC|f0xwenar0#0MhyU%|4_PswpzVQ^_$qS!nU1wpi^oXE6^tUl#kakz8utTw+AeHJs zYl2drm_vvsHahrDifiTo*`(XXm)4Lt$*k%WuX(5Hl^-F_&kc-*zLJyvwvjdBWQJCa z3I!RJEaFeC$m7z(V_5(GQ-53p`up%*t9U=I7L3yGd5cA+dUs-L-MV!|Qt^kA1tsqf z2smzujmb!Pw!P|1lIXuXmg;@Rts2V@UTzi?hIaRgRS&jJ%D%23_-;JJ$ojW;sVL6)d@9QKqkrmFRPWfX3HWN?_rwEOzkdaGw`P2 z_)vfIKH?QGX5*F^6Vb=0QP}piP5<+{iNhmJJC;*f2ZO*X+^_(j=6ip=bKphz#$Pi(Ry^UmZQ!RK(iC)Xe#6LV>GkxEOe_Hoh43|O#a{~QZvI+ zG4mCntjBIflG}_2MO^wi4FXBYsnKzaPCZY3wF6X0Vlpzk8A2|jlfW7s4+pXXDMNnw zJNfTbG{w-B$m!g3;L=XmMQ(FzS2xIXC*a5;km!Yrj^|*$ki6k#Ep%sLP#rvqozEpic7vqiD~4LGj(I} zCU(a~_<=0FzJsO_S)IK&$EBmslM5(K!glu-Y_N(!j&Kv(Q)XU`_uD}+h>o|?f&3$h|E$?WCYI;_Qvw%Q&nwA=4zML{Jxc(>Ucxg+Pq!U z@uAJ(An~qAC&631KgmPSKA@^~tTbL>S4-*Ie1KFkJt_Ix3B$g$$8N_$L`-aUD$fI?p<6*dVbbbwwT;_?m`9U%_0jy}Jx`8L zH6EE@-D5c+-~2b#Uteh-XohQ72P7hf}UIz#)Yf6fw3Er!?Ud)Y?5sBKp+)Z+`Y1ZaTLK>Cy1$JrAA+SKbvEIV-)+ zG`H5}`0qwLMqd2+w+hTL`ex%=+RKOpY~O9{oj50RrD~qH@N*P&(r&O?i$J#u>T^%b zrjNlARO__Bv3GW>biJd}C>bcp1^}`G6&vFvL@n;aHXBDly9wVcP58sAZ_ijd2)tBC z(FQNnVj8*y=-UM(jyVNaEDS$c1NdRu)pwfZfo!~U%57veb~>RiD?of*jP=r zj;&UeGd?U?E|xGz7+8OjQApGkWbqo9&wS{$m;)DtoL(J zff~%dSVEFS(UwSeXIk z@z?y-3W5@3%iAwy-yePX&P>Ki(G+ltk^d?|HR1*K0jB&6znEL18Gp}3vh_ZRd9OVp?cc^=gNSj!&h+92X3*TnqmGyF`6ERci_mZM|osOxNgKhau{i& zFvIWmL*wJke;R&V&79~q*o?SB{$YKjfKTN8h|t_j;&n`q3&+q^BTqyBFh}oKr3<3k zpClCyqO0_1g zTK7Kbx@QHyUYQLGAqx=BQjdKAMjzftK#$}jRgzCgdP`9xAO;|i;U0(Ihu5tr{}luQ z@d`Qf#kTj7g+U~MaCi;%xzPP=e?jD{h>gyaWFPdr9fvusE_L}*ZPqt<^f~J?n4WSD zm1rW>w<$s2w8PCQP^;*0lTlDiN$7Cu60!Yc+55Qy|5A6cObjl*7Q2c>by8x` zHahh*gFJVakJD!u7Fyb`*yxuL=fp=SR~?RRjC$AT@PM>L7N;ooNPA>o&TstksWusk z`z8+7u75r$fN-_bSM~dNwx{UXM`hpRA7T^Xt+&=JM$9`*x?KF-tLjY>wDUdndN zwmeA&+gXcDq_Yw6+>A!6w+p|OK-R4zrKd2h{5FR@*1Mxq9{l;VGfl-g=JQ8FK%}hU zK%V+f0CCUoHn8W{$kY?f(XN8g^#ve?GPfHtI=S8@u3_M!^HSq7JcrxZj%{MPykwoN zF?e%ice4^j7s+^Lk?JLPgLEZ8e_?|L68}rT{NyU-jRD-Z{JriOX75|%$a^g(1sRo` zgQ?yXeLu@a63lcTg6@uy9`r_`pGjo622DP2p|G45bdO`j9b1#PZ*lzd^Q-C-+k%jL9EyET>rdk!+a? zcJ+~M8T4@Ib*9$2m*RS;eA(;hiHx&U@zA9Znhi3RKrM~e1hhiC>YT(f9Ns6#mZkDf z&|wkpR{|Dm^bXmmiKF>+2U@9JZg6f)6}v5_r(koYxyD2mL=x<=&O{)FG((k;yiy$E0D$&?1 zDN8ouvcZjmMKkpAjjIwO%e0OYg9#eCr!!`Ko>kZ?E>HVePM9*TA%d~L732L}w^@Rz zV7s6)-V%4i7Q+pNComtZjNTuo?rSPD2({!*Am6+dT$5UZfj34PW~WTX?rW=2YmoxYy4X zaXTZq~}jCM76sKjN`$EzRZ3aZj=zsk-i>72(raHBj=@*e4Y z7^7IDw)ZL1MxBxEg!K116=}2ah=R$6jl7{*F@Fy3%j2)E;(w@ZRL}G3pQR8X#bz4X z95fT&2yf~#_kYbp{@m;$;O$3Cxor)OiyPEKPB$y{)vFqgSF=+M;TRk89^&9A z13K^xL;e{NWFcPsX>zGe$?sG0Jtam03y);d(xUe)c30G)til8iHC>M zNzG_SMEBKh{QBPADs9>7`Jh*tU~{}=Ni~~ElC%&Cw)$ryFtm>_f*62j(v`iRu1(Zu zhkU;M=4#Dv`)pJ^nQq)=APVSuPS4rnMfVvvhdMmXNi5_njIYgXF=cWLd^D)^L;uI>1-bnc|PkKB3V-0BqJJKNS>}eNCZs(u_DW@Mx!f{VR`d!Q7%R zQS^kx-7ic`M!w9#ftGf?*P~cH zo5anRZBg!X(wo10KIRHf`Ek6k)UTdk4jlpx->ctpexy`>DmyROQxG0 z63ALC-TPiR(=b!#q57DCm#Mh@j(CnR{>r?mQy4z+|6%Vf!=l>TxKR}(q(MMB1(62n zl28z7q@+bax`!T=MoJo_BqXG}K|nxiknZjnh8~)Cjp*J!&)(0u-Y@6Nxz4vW>w=m8 zy8Hg!v6NTaP``;&Jn8@%t@+GgGgL?mUy(2rx424heZu}W8Zy+o=wq7#?q*nAC9^KP9!aV@C#QXSTW*IJ3R# z!>Whvm$(7@7R+7XM3Y zRa|kfFNs{qR7#m5rg!*ETH7i*#5VkI_kyu8e4+KY@bCQ@g*hOhi}w2D8Eu=M)<31RFQPPi&a*m@>)XstSGatTP|RyU}L>BmyJ7FvAAJ=oZ?{t1{-i{Jv011Q~{hF-Qqn$9;Pw6fUuSrk;FVMtPGn0+L^`nLPcjwO_< z^CS_@r+UFe?7P7x=UeC)QdUKSht0#xKpXf-mVb8)0*C^Cap2r40&eO=+NEwk6MzNWVu_Y1+^=Mx086jvXes9Lm}!hre?Y& zt58_hajUD1c0mb}!cEg?Wrnf7C7{YLig2)0Q$C(z;x#jV+cS0+Rf9G?0bjbScL}ge zJqUK$RHRQP<`eJa&&^YVw5bo+Ueb`$eo3Ks>3!tqmV31{ z*e55L*%9pY0Ix4RTZ9w4f>bxV4e~-)L#KhjK!_zCw{ZUs=wi3SvyiKPrIKU5tXtfp zsI1rf3|OPvj&o!gw`djK3$ckQOJ?lZUawa%mxWMba5zx*xH6Wdfxm=z}N`A|*uQhtE-QWsg^ilFb(Oz<67$(y5=p=Y3PZP zQ%SgUqOkEt{eI5FeXtN(tUwsc4`>_DnDC5(jn}Hm>bt~Gnk#;ClDk8GS^l^)>1t%j zo%$6!t6iExsqyAtZcy(GOOUr}Y;^Nrc=o^&c%dZ;f#(6Bz8* zzgnm5jDtPg_mF?*y>hwVHv+t0$CS5khU|WNcO_IP=`^owb}67i?EOcjU@oKW_kvD) z$Tgb~Asukcm!S`bWW4-f3VmxvC-YIR`L2+U!pGk;R!*WSEa^H&4}_|hhf%JQ^V zwbp+$TK&k6W7VfIH!UL21A=m6AUPLbM8QDgA=-Kb#99%NIB~ps^QSlQpp`Bi&B^e) zagqVpLMN^rpP0VYj+eUz3+tvu?w)KXvf2ZC83g)3nmM!YC)Qc-%Zgg=jWr%JJHQ%B z&fatrlhLbY?Kdb(h)!CC8;gCx;Y&yMvQZ`pFTIrG&3nAxu8GZlO>aHI{-}C*f>~>n=A#+c& z;jCl=|0b$XG9Jfmp9^@C*JZ>g3N}}>cGC=tX{u+X>k8JNHfsS7QR^r*?aMuJp@*G= zFowM?Nir{+W4vmU>L;q=(6Ql{MaW!c6ZJ7c;bc8VRN$PZck*(Vs))5xKRfHatxSKp(`**e{Nw zRwi5P_E)Vy8F;{sv`cYLkrF2=AVg&6I>;1ga&APx@ z*eqL~?&Qe8r;>gHzeon<}JkdF1@C+X^aAy^#k>>{__r zEd_lOtClDBqfP32VP8+HCkBb_PNVQ6LC>TXVx9?W(nhZw6HCQ5qT_vvUP62py zd4$&atTcQGgrf5XzL>laSxdF#DgE4 zEfMU=we6{FrPO&YjyY6@i)u0fWrrFYVdx2@4kJ@5cm!g!>mJNP}L`IU!k@r4esC#^N%bDXzC64DtQDqW3 zsLF!Tt2sW4~N%Fia|1Xgd+a_(zuoTc-A%I;J$uz`Cz$+lDis_!_r5yo`~IyY2Om%RvzrGietvc3p_1Pcy^3)!L>6a5p?DX&ZZYue5JxU=^QgBYxJ0YuS1uSU85s zLF17wcHs*rUKkjk$`YJB;RdA{>fYTeNhAxZH=}1eEIk~nz4RNe*x&YQ(^n(%9KqtVb$Ev_#X3J0w-LgAa zH{FC%&$=fa66K%Uu6|y}Y%uk;@M_A_RWCR7l^zW52&ZzcAUkZaG4C2$fA$8RCK(`i z$eHET(3*@#xlu247Ghfw+`a^BAOR3N)f9M$?U3T=ZO^OeN+{lyq<)?s&dkE`pSIDYA{rc&Icxnf&~xpiDJO?`bDD4BsW6?R+!L0H+K6RDGj_cMa-`VVIGi(j|B&U^2y zv|Q+Il`_aBk+YC3+Vq|ES2_M&;{Py%?t)12r4dQKj9e~m<4S9I&$k-{$bp~rOq<@E z$&c0VLQS1eoFgx2!@25TB~V-fK-GAsC(J61i#*Es_4_VWEh2-)8}mn3sp6 z`kviyvqd_w8GM_X%quz-M|Gi=JYd~AIOa#M%$v212=+gr`}Fi>oJ>bc1f4V{($M4? zXID`@Wy5LwqnX+up)&($<^&I$OpK{6aW<%g?r3_-15c>#XSf9qTqvz*+c~~n_~|n zd?JetxMdG}@r@~vAf`r7Z>xazo9&shDrUDF0X>#kxKkRgveN}ItKLFS#36U#84mdm zWmQM4VanHU;+B(}+%d{m*Gh0(=zy2+VX|uhJK^uM2#y?TWS!_59w8BRY`RpRhT6EF zhXe4B!nXTt9W0MQ5hek*H4+`FpZUo{Pv$txJ{i9q{ zCHODoV#s6BOxY-hu_@|9pR9ttsGNlV=ue?;0MhLg2*{Utu=CjwJ!%ws!>uXGgL%D; z-CaX?iU=t3?HLdn$3Mf^D@zvPY|q>&J4|yvpAdS^sdXUe?ro-+xm(hLt(x_%{#h^g zHzy%$4jP>VYzL@Y$Lpz-uh!?UqB^-h^MOPVKw+Y;F#3E>qR9GC-SRwam1En|dN8X_ zV`7q4faRV+kDvWf7cA~$h2s+}xbkCZ1t}Vx6AoXR06*1Wn6y(%~C_0tj!B2X5SS7oB6gd&+~ika0n|Uga(j3HM@|YggDYz*g_w zvajD47RpzLx;2;DorhCiwDAOZI5$gZoL?*5ri5Xy{AklIhJ4fzp5e;4kn^ZnqyxaS zrHtSff5pBO2d;#B8?$tgXqaS+)CU5w({{DA@LX<2c9dX^Zn4e2viE@Fz!U z`Fi4-(&WjjiAL=cZ2}`-9ph&u7L{gQwrco@5`68w$c0uc9pgF7?C~#~Uy0i%YoNi| zxcW~JpxU5bIqQ@&9ZUNtrmf#05)=p#_b}U3yy_ zS#EB`u!}*=ivGTv_t`d&kud^-d%zz5BdD`bBw;tva$^2Siqy5`ZY}oJrF&HnsBSMF z7m!XAf|iJOy&x;t-5)~VpdPCBHlwZ9ID4hzZHc&|9^W2Bpo8mv?*brhRWcdg!a;k( z&X85P4}Pm;3LkGSbPthCOmNnb-lM@JVMxan1>m{CqY*28kX;EC_;lTL)Mg%t<#H0O z?2DTnLZKTdQ%3n2;U(_3y|mZ)*Cc7m@ zmGzBSeI;eS(V~f=zU!xqnpcOFf4x{?mu?t+WKabpSAr z3>9LzTg>Nq4D}8BiI7!}#WL>*VP9L_udjyQz-iHh^e2&p7ZzX?6o2Phna;N=(ZbyC z%$v!eb&&MND}6($A5h7X^X*b0g@ z9gR7K^3jlA_;IFfhBxkWi>yw!%~#2id~>V>NJ(_DJ16zuHITU((mrhmf5$n*vn?`B*X zKl;=#tlYqjsE3ugcwvIbRde81@`-$PGvWc5WO$FU9oiLiYikx z#EU41F}xethRE4tVP~KkjsmOE=T*&puac74BF_NK)2&Vic0QfxmG5U89eVpND)_Wh zZ77I zULHoybC&%(ZK_pd&;h3wlshaRb{v2X0g#rUn5NT?pgSftC0MAL=+tF!FX3+(c!28{ zjuOYc1fHtvP_u9JIMM0bJ^ch~e*aR-`b!+6BBeukqKNwxv=nJ`IG5GxWz`3uMY7|F z7yeHe1yNGX)xHwg4@q2r6Ggp(PqD71xEETUFJLGWJk>b<)s7cB8*jJxME*|FDh7MK z(va`h8fmg^wG$mDU@^{qD^9w4*~drKW}}rAk8(6RmIDGT?%aI@28yx@Y>oV7uIdET zhz#HLsVmNuS1O__Y5Z(4y!2>M(L+l=7gkR# z$3+Gpf`5_G;>L2bVcIu%-LXZuhwoa^*$=vioN!h|Ul1}0y!nio zUZXH+C4uknnCtPapl4sf;ce~)Bl%kLlF{S#+=`DBG-EuhU>C&(;8~>} zowTDKgzx58PO*Xfsx};T^QW6?4eSxhbpE7QwoSx!EK6xksnhoR@<2aQy1m&5OQ~_UMmo!# zcwswk_mxLA(AlOZg*Qb1jw~Mw(iK~bvS|c6EQ2g^3%|bb0AjFP)nIR6_DjfT4sV!b7jA4-zjdtapm<_KT(LLnk%PwQOV^araQ2a9r`c#KUU@~}))Bj4a`$71j^q|=;MU|T-<#U79p^|e)|aIZBu1USV1t=2EpzSk@^n6 zjL6dlZ~2doQO};r>tPDO+C1LWpRUY}N&`tYun#z=ubrJ&U|*KCyrr+t5Hp-opyy;} zk(e@Q7RMbf3qX)aV4wKS-em5BZeE<{&C z)0j?G2l)ay9K$nBBR(f*6o=FsFnL82YQPPVFBdvAP;>7tHxnDlDVjd6+Y!zC0r;~$P%ZsKs>xm+<7KO z6!CBn0ugQ%LVaQ~h6QW}v@$MOD{p&Hhg%fyzVk!eZ2U`sMRrY?em018)stx7L5#R_ ziW(^M&y;c&4K2_Tl@#eT@~6XY&v?}L%})@RH*WTJ&)_v$cHXLasTC$0woecklVEQK zx9@msgLKa(-l%n9*mX6Txb&VAOMDpzrBJ6;07Z2{%rLKJT-j|omNmbx))N9DeFCk=c$*_L-r`&EM zLQY~^%lzVh`vgLf--$@)^VbL4qlo^*1Hq;g=HJo&rJ4G^3MH|xcWF438d z#}1PL)UoEF&CFYhxfxkEKU+^>Vq}mLcFj4=>ndk4tOACV1Zzv!fcjpj0Qrmx!Bn)jRis=-B}ABC`{ zIIkfal*ESz3T8rKo;bnS#VeqlA2c-w1J9F<#%vwcWgE%bxY+B$z;MmiJKaT1GL`w` zkv!7yJM*V&5-dq$^=4({7t6#oTL6*@W6|sp|Fd6mj^Qzl&h97NZOXe>ZK@nJ=S>fU z)Q!jTR_#zgu#{<|7@mEazly!TF9MBjHT&-H7nbIkyAR!3M5Pq=d_4gKo)VN=%d$z2 zangXv0&|qSk74M@1TBM{_`Jz~hr^Li0Fb)n35~Fp5d%X6fi7A{*rarKG!KhqnRw5tCWu<8+MqBkLVRxQo8{G`ka=j+??z$D_;hUc#kz!#N?aZ z^8HSfG3}jsM5i}rob%F}va8W|4hM#sS*>ovk9`JzBrMkt^$wZg!y5_yo(GDlqN)i> zkhGpO_78-xf=3703Mq3*W>&%jKd}6E9t|a|mowdM88quC8~-b!(Kn3jo4S+;xE z?rG2i-#E|Obi^)@n^qpqmpV1O{+meW>*9Y@Fs|#zA9&H}KjJn5vm`22mku|RcO7d= z2b%O#Z(Nlxh|>rc9K1fYLiO7@n1ovj{7xJnTOyv3oXNMtgyTMAoD@L|Al;v)JZ;c5 z2#Tr~>`D0N)N1y_(%HQJh*^Gn?@X&(K@7gmoBhuLIB;ttTDI@S2Wwry&YIPf%{|5E zIKYFc*ktupDxoQ+UO?2Ne*fRMup551ZIKc#TPQCw1*~RDpCr6;pAFK>v^8W>PIt+C z)+bYM)DhO%^5psJ*+$Pug!+ojd(;@bBl*B3&qOaQ8)6CIveC*L`fm zd1}wLP)d&0!)`P_vAWn6%APh(WuemmI?A{26*vFIA$nY_n|J2lQ~K?^@y8wfvpMYV z!0z|M{(T4N-~ifLPJJX?Jg{U({C|ttpTlAQcAZWGh(mt{E@dz7tC#7-zWJuP9gq=niL>Bp~#*2eoUII zKO1cS>+%2N+ zBZdhsKjBj9`$Sg!(;ENB!G4Pq^}9C+!XG^FmFD)1|I0%DFCzTDzYq-Yc$n&L%c6x+ zDeu1==3kHc|83<8V)MPS+wvtBIL$jh>fk)tFKVJ^Vq*Hp+59gofmp<$K?! zoo88rnUyf*!k*tIXCWNH7RDeJ->aQPMf;ua{l{cl`FQ_OjJNFXw&F}8m>qOi$et?x zHa+j=kcn6{sq-|7uqofsbTTNVOQAEVX33Qfa^C#)74)|dsuKs4SZ6OU^iH5~u_QZ? z)=_@s@q!?lF?#$bYK^uEj0f)~aoOp6og{FTE5JN{g>O z;Xj=PwLJdXk2D_#2A3-9>1qPury?QA^T~ov_(>!)Wu|@imb)x}nJH>8LR~#0-T=>v zh3&9b!`4SBmJ!7BPjwFr{2GpmEod@O!z@gz6C(A?qz+VCX$MFE&i5IeKk|1Te~tvg zpS*oMh45ju^!>g&MNN~Rd)6+Prm!fTn;6vt|J$F@(tdLGGZlsj*X-7M;C(iv|1Gh7 z$PdP{6kt&n8@9%U*H6DIj&LCXK={#gydm^VRyI-_LywV!>vdpw#JAs^|HBqa$=z@e z?16G*w@!uq)nrEf=;ocuw3Ez7(K@QKVe8kVz<-C3_2)pGVsmbv$6a}c_~8dMqY$UR zM}dFaxE-3WHOV-4-F|@+k8y9^we)!#G?1v1f&6{x`kZ$1h;vfjnYR;pswMDSBYuB_ zOcY>RvpcPgGp>JICFsWO$)TIi3v*jzYObS%Z>R{(paPsqhrw&sU)=g_E@h}i0P3cs zxFuR$dyc?Z;0xZMpJp>^c(EN^-;*Ij*l%zqZVE37xAs4zHc0BNgbVE<(WdNAPTFRn zD;3KpQ&Nu(&3EZsyIDZb0FnUF*`g6gDbat6--i@HbQBdEdMmF_EcN`Yw^cdv#b8vP z81d=#y-X}bbRnjKrby(;W!`u!EjU{X5hT1h4BwU zDk2D(J!7JMed6@{kDGa4dS9-04yR&xUf&x)`AJD2IuC8`QUA*){^N24t+_ zR|iWQeSVGC_so7$G9383b^{aUe{eGbLCMUSSGw0Hh9KlKcMxgmqo7U#^R+s8AR?2~ zcR)yp`Ejr+^TW)>l42Lm>C-T$;-|Da8*M8`d;}@)sY4YKSms7g#X~C z3_wXn6`PV@ie~x|A(HDi?d2&7d#=qBwJ5??TmUQ+MWM6!hd`|d-2ifip-IbMCoTt= z`Ske@F_D^6hcx!W}MokvB#>%yr z0&{i7 zIx#E2%zpd>Ma9BPowe&&`2+7yO3Kg(TVa}1{)3zN2uezAu#Q|m#he_$Cxb*mk;nhP zc|iDs|5wce@CN#??^0iHRzmGf`)MONjoQBxaG4AtU&5QNI7{uCy~9_@T^Nkqf8R}~K+KNUG<)Im$a-QR7lJiP{Nbi&E$Ry_?`$a7>+c3)z<%rv z9;#=vH+_=03L93;NrsxL^6Ik+CJ>F)A^L+1ea~_Os2=t0g1GIvFcUb>qKox6(jo^A z{GRTrw*_wcJfVXMf_QehO(86UjA6We^?!yfK)?(5hN4Roi(kHh4$x#laI;F31qau! zQ34qZggMazAe3n(g+koI=RVXkg=*YPAb9cwGfiOx+PtK6NUY!USOI9RQepm(XXUBa zNTsdBab_;}>(eHocI8}UN&UE~8v9Gr!{^rGX3x;Xzze=F3Y9esC@Hond5(lCMJjS= zYjp0V{$aC$2_1mM=c2DMu3f>U&`)XM`5)3!?zbbin#!)LZwBky`7z&G>M#l~HCkl@ zb{Z7yb(9zt?w~lCKdUJ<)&cLHe^`?^MnK!$v+nw!?eiH<9(TOW}?baAbdyZp7D<~bd z#bv#O`wXHr!KjcF4b=T|%0f2Yb2nU_?<;o3b9#Vx>3xCbK(0@adAW@2yLUm6sqPSg z&JDVz(yynmrmI*$*+$vUIK`F}|i7 z+H&On8F~y(3!OBD>0G4{c{srG1>2@O{eJgt*H-bJ?nJn3u1-n)lv4+kp}>NWx`f3wHhY>#G z5GSm)qKwYyYcpG-T6^d=%yiUFc87np{A~Cp?OOc_Ot7bMvQZUyX(%7#%h=~^5tG&p zTIT9`EI@;Fg1$=bba4>y;$e(%s7M%&^^a69CL4FWF<$o%ESGK%_AN~oOeVGA z`rVnKb|!3?&P~+Y*=wDlGM?xWDBX_g!_+<(VS1Ta{7PGut)64qWV4~^o#w$JV7^~Z zgb0+{4Vnn-4EC+qP)`KUUJ-=HVV_pDT~5zBj8Y8bh*M}?ojlb#Y?dwsw?56rG3;Lq zORwr|y$_2cD`cNL5Flb;(W#f40XwH{UD%~A2F$)l5w01w`TTxA@yd8L{6_TGfwXn!U~JQp`#Q{%MdT7pH9ywB z^E{&RzYeVFc@bgw6#xwJ1*$&ul_bwSvP5z)IrhPc{tzplc&y$|NMl?6#+P2}}jCnHY5jitWf=A4U4&{72(yU$)>N%lyL;zyM< zv2^@!UxXeUDn{Kq>B!+-u3zgO{UOK=PIc^0-~r{)=>BxspsQTvaZ*tZ9c$agFzEur zQ>Zc}S1E7JvqmFPp?%iVSXu9Cw-^}18~EbMD4oQcl0p_3J+0?D?i}DnFTwu})+{Og zu?;n4tC#NB@y%e%aP}gDyxOasNdCJ)CsoXLmz@ zl{Rk-ep_(O!sJ#~2-W>iJxh|(KC%&a^%S=SI}J);Z-8aVu@M~D@G=oDW_KSbqu@T3 z4kLlFwA(&85Pr-8ood;_blX~cM8A8*+F))&I8d7$HX$o>-u>9k< zH&cnak*_uFq1t?xkkj~-C0B1b;gcDYFY1%l8^5A^G-|-@-gqV_{GEs4UIO~HfFvO{ zJqY?sxHx8T19n%o4YGol(IG(i)|S_KW$A6#W8Zi8jD)`R7J|H}1nh^lmWJkezNklj ziFvpt?NHIiwe`Ba(2##iuIJ;S%E|H?`_1$*j8Ia3AsKmwjg{etJb#2 z+mQAw&SW)A84sEz1Cngd18ScF?TjZpE{$f7FQ{K%?RHSHp^Wu^xxE#QHZKI)jx;II z=dF`>lCpS+(OqNS+;dd^BKh#Q1 z?O&0JV35Ow^(401>=Bz72e1{+KD+SL{aNgDWTD^&>u+R5pMfn0y+ln&@mnL< zeYRsFmM}Ef#l~Z;{r(QYj}C2NOTk?F^r$$L_RH@cYwA}ouSgUgpVFwij?3*P{%8^_ zpT{>26~Cf%tO*xBcspTu6{O`GCE#GvnIjjn=_p7EdV;eys4K>>X?}&04(+Jv;%Z&9 zi_%%nfQ*+JtKHg%-8?+f{`3lC9{0phTpZ2^j_L@b;9exXO#|^Xk7yrQh6yZhG(|P# z?Uh&D&`r~DcaHMr(vfbx%hAQ#)U;J7g&(y^!io)S(QggiyNGTC$< zD7BJSeJ3!;Pz$;(`OWf2buOL?b#;aHZe%w(EKc8(?m~}j3*W~e46z|3!Nbld*x1Ft zcu*5c&3^G+@~Ma4SH8JJnx~)MeG+u&st$xeo}^4*QEFUr$K&|XlwK;R{~CjFJ=TBNWr*{C3O?l8p$t*KQ9a#JK?XI2UqCPkbCPS`?FVr z5+xo4n3*<|-Nm?lnkRa(REEVc`^@Mme=t?Kbd*U!FZO~`EV`&FL#CmuZXMI&(`Q8Y z6&O3l5n>ePQBs_yn`h#!yKjrTxGN4i&96!_J$H6U^B%~SHr*#*5A9XYZpJEyeOv>)5mOmMqx}2(*)3nr)?UrwtYOgG3>xd7tuPV-O52njWZnYctD|_2i{Y7@E1OVZ?`d~0 zBqpeI(P#9)?-Y}jj#@EaZAy(s^-Lm=yS(qCOpZ%b9|ia!pJPdR98A|?#KrqP1J)I2 zYWh+vo$@V1g_?E)&PjRA7{s|HyC-0PJ@!KhwwQ`V4-?XQBA@TT75G_;J{fIEIV&bzDT9M|VR@q{i5B`*`b@`~c zt<7Ls8NVq3^Wd6%qVVeb1;U$TIc53XF|3R4eNea1+7z4{2#9a3Xmc}=%oEyKmW(j_ zO1}1acF?O2_RGO0F3Pn#&PXDyAp1!1m7NEy!1~q&S3FF+_)RV*8Bcpnz?_)-1hTZ; z1>cyCE$=ZZRiRS~jU0S)eAxGin^AbHtpvZz;~(D&O^V347UWl1Y>w$>&c{_7lv_k6 zE%8WJ`YqJNtVU)aH(E@VNu97H4=$>eB|ZB3^-An3>UodLJ6*Q++N|||HlLR#EY#>1 z6{@VYt74$;V4_CUfqWRAehQd9<_mZhwl!{RK@KS^QY(ruGYyU-?Upn*d}5z`K^B-r zC8paXp5T_cb{;Az+KP&^!!wFl+w>!i;&cVbl@Bsp{B~NZrs$8!a@wpY?2dCv_O{dS zpDNck2~cp@T;6hZn37t>6Y4T-p9PIQ6P3B(t-v^{LdIYq<+HM4kU5W}icjj}4je34TMXUgnmnhiqzmlH}ycT8q@%O_a{Kl!NSiAV?`7>IivYC>i zxHi-aZ&s%ZEP{=}Lid~mb@G_|UnFiHadTUC9M*+@#>F1o<)FbqZ8kdyY`$4%;Y3mF z)41)xz9#)F2-g}eoq^(nYs9C0d}MA|>CzRxNy`!eP|fHSNUgX3_JG zO7jjcJc3>#3!fnSrpwdBIhI!q78CT9)>}^qf#lv1LO;?B80k3EFQX&j3k68GE>#vw zym=@uq%5Pv1IgUUPnQkLFpS+UfYl5t8IbkcXxt2;F~MxL98#U{#Cf&RCb=2Hu_hGt zXn3MK9in}okN{2(&TVRFpQ(C>-7~+|*~mMGCKFi+eXr8464+%{d%y?;pXLK@Hd~8WDz!PS ziHyJJ&8T_Mq-brW@jD91{A?3ZVAtuD%>NVG4-~M;zVzRjSJe1oC>H_W8tCV24J8$q z@`=xyo;2^s>u1}0!PL>MExu3LD>;J;T~yt`l$vv?@VxLV~{?R-X`s1oENd%4eD5zXPqm zRdp0_`#mFb5>b`mlbg~^U+3ZKY38gHYW`THxGGovt+#ie%ugp9%!+W* zt!le4Sn-3_%Et@Kn?Mp)T>vwzU;eu0>sBSy)`VRya~8D8YQKneo8G8B1Z4ZQf%VoA zkcU_|<{CUEpKRsb$8tF27|%~;9q}hJ~wmw^#3Cq}hhyA3-kQI*u+A60SK8-;yyU&P@^K)`egEN2Ly~Wq?iK7vD!hFnQA| zFL0*wb1&L05wL=%QFEqoo9aLJiH979)q4XHm-_^63C5A>7Ig0H4YX74SEZA~+t z!C`UJ?ni=Iv&na^&h#J92oKGw7U4D;Y-0*(k2YKgRr%Q_U0h6IWD|??V;FM1w*7o4 z%JQb!n^ODD_pFZdXi=;QO=)sVPvJPB9 zCgM@NRKH+nGyQmr4~NyMZ3U1@rVU+iadx6G_N&c0jTkK97GlPMO6ZQpSI-^I4&expi4SQoNd z4J&lgj>CpW+me$W_CX76$aSWzHJpo#o!U03TxL4;W7FRI4HdxvfzJT~+p#$b7z^sv z?b={Rk&l!Ldwt2w*&(E-wM@)FOnLdV3DsdWS9jWVeJ058DdVe$EhN7sYE|xw4xE#brXj!kyM=(73xHYa7Ne&$mp`z%a!$h1r3;1T~Zx`07 z1JSGwTm6m%;}{!VJZ__B2b*i|vROCM#FRr_n6B}DoW8(`l)XZoE)~qP+U`wRFeA;B z$&TYVVlZ$%kzF6^NwKFmB zYG&z$H0RoWdxN0|!*zlCoeSL!PVz!$xB}A`QedBip%LwM2@=>802K5bh5rZ64U7R_ z?gH){K9enPQ00;vG-3R*Ts z*`QmSwybGMYZlhswv7eBs%aobx!n;!GNZ(qEKMvTC8XVx6n z=<`n0ZSK{$vt3MeJ&r5e#UCcbiW1dUl$1@QK}P-O6rG(WxdyJI_65;A=#gGvm{ zr0er%1tP^E`fSt1)Ji6DyYjBi95tG_fhmqY3eo&;t8UqCtK3Y!8DKT@;ka4wS#Pd6 zeXya@RlXMcp#|y1?=VFkSW2FfRTmd}z3Cy46W{?S%Bc;JiW#yY9@N~S93y579V70+OK-wxD8skjNDz2__ zJd*g?G%gI{DSLSayy-nNd*QP#^rPBx!ro6&#r# zr}uF2DOLnxm~ScD259xNaotGRI90B7GH0)vRUZ?ce8na#iSBY_ZTs!;eN!69*ZDeX zCFvyRKIRC3ts1aVne10!-1l{NF4F_vs)~)187lQ-&=|SSpDch^h#kWwrLtP=SL{CX zfF@P4)X5tU=n~;+7`$tfIRqrlMOc)-`R)R?cY} zAJ`xd^zZD&SO|K}{_w}Msb_F4>?ufGtPN9cnyi`;HKw?E)AS`86%WX}{sJPA9j1xK zX}5)jUK!a_EsDskt6h;C<1^rWmkFd&Hu>s=Y4mYqGc{xXFN+S;MQ7Amk#eb9VQ7`RWxfG?N5cZgtnskcx6UYvisuv zo~?vIwd+7(bYAfF8IB(GscH{EBq&fE-Zr5Nf+qS76QM84){vY<baPdqFiFkc3OWuD#2RUKDTRCTA6I9=4q)7xz|FJX;G)UkOHdy zK5(SR?Wp*Eo8dCs`4LMPxfCFjWUE`Lt@zbAH>+E&xj(z{ahN+z@7y)kw5YdK-SsW} z!w2eu4Acjk1KA}$-~9pyZ@z4M+f?K+vgSV4NVMUR7rYH2ppEg0FcutPFU?qpcP|PD z`xwDDB-~Z@glW_yv1ejCBH~=mD`_+4cdoz?ve#|mfmT7qIMj~ps-X9V5ZGctInJ*W^OR28ddq#MY>HQOYmJk6ptEtUM`f( zdOXoG=ST9=`X?W3J;eI@X)^jg9)5rP<6%yi4tA&w(0yF{{_QV@fH1tAdEd)H{0Zpc7QF=}N#Pa&}rHtAmQPyk|r&*5ad z_>JJEgjeMrafv-YSyq~`H~!#eutR z@U%6z_)$xVq}Lq|i>}Wqh~6&5 zWt3=2b3=9nWghx5%H^AchuzvZfAPHXWrkD%tOVPiIYQ_RPeyukJpWk5F1EO!(D@k<~}souGds1MG*`1~M)ckJ)G03@gBU!n83m)xx< zv@!esQ}1VylG}JhKv$2pSYXPn9yobE$E9Cx7!oeZO|t5Gc>ndOeV2liduVI$?;RRD z{CUazHy3zu$<1}^>hAaZ(!ZS{g)mZhjtiv&7z6if?2$u9R8e7$Qft2vjf^57MrfxXCeR+KQia!XOTHroI1rZ>;jflnH?H8 zpp%4C>7MnjzkE!0sp?o~$E)l(m_L$1p^j4%06KoIXW%}k#d;9?F2F&Qe99TexyE&! zkG8Ys5+=|`fi#9r{k(43F;VTnPzRglwwG{sat03iHBMB?f3B3a_()p^W(}uZYOA~m zlohjIqSh-vl}aQpoL}ey2R{er`TR;tG3H0lWHJp@>Y6}pjZlGWH&#!Vfx7W!9nTKr z0!r~gZ(<{&9XBO=Dkqla-N@ZTt8I2-fUfC>9=|pFj=I;!`8kms0@TSCyI>vii^ zYP3|YcEMd8RHP2n2}Lh^`7|R5rGcvHn?y%rkP`!h$#gBT88~QfaX5MW5OiM0v-X!b zPrFgkYP=DueT{ERh!h-b_N}{3Y)CYUl4n%IEofFm!V2j#*)^X_7tIo}DuM1i<{dc` zz0Bs_Fm^7+z^(qQbpFp*M~WGW;+|lDXeIWjq0TMFU}#!zgYkHZiHD1Ah7D_jv?nbS zbffri%jd8H2ZsCU6SjYKUSAS3m9WE|pEqc~SVeHeQ>)^`h?bxHsaDt|0ijKBveu6B zDzx=ng7Cz&S>^u=hR!UfvMF*AATGe|;cIR4?BgtcdchO*;W32`O$-&#rto)L4Nu!9 zj21Be`Dv2NaEIaf)>xe`&U$0Fg;;s_aF-qUP3l+NyfVfh!QbV)KuVtEc@Ffs?E*q^b)qtjbZ1 zs~iAVP2A#iri({F6F&OS=7GIfS6}`8RG0Vg(P;I>+ZoZf-8|hqqsevI z3zpZC)B)R-;*IA)<@#@Te1~6vsl)Dk_(gguy;JRd(O5T9^3?yvcJ+iewH#wb@E<_! zk&O4&HD=}LqBSfXIr1l-H}ADzZ#AHicbKrEUj5aK$G6mz>M|k$nnI6&*NWY?Xrj;# z+kt2#(`>{27TlYUu}#gld10U2%OoVA-|akJpc@gZ#oq*@qfL}T#v~5$iL6Ngu3{=h z?UgGktNmNoAC3y6*u!jHYB*l}X4(oEp$DjVeefR!RV$f3=kX#4V3hZ)o1ASUkhx=~ zfiYsQL#6Ma&1bmnf06x7&Gnn3*ZQx^q5sl)@@Hs@-$QHt{|@ag666iqp6w>UwK_f1 zY(UK}Ybg8^ZJB-uz;?{N#}-F)^=iWO^nvy+v@tcpp#|Faubz4rV503n0k3RJqO_QW zCbSljKk7*q82pSVO!o6IB=bEDs#YPGzc_2W5U{JC#pF(782^QpID!%QbM|8nnyY8P zWM#1?mLx5l?D2JTIe!207bQTP6$O73vOU5U-le$3@XH}&TbY)M>>L5PK(1V~D@BUW zUYz)!7Yw@F|8E95;Qa!W2tP5@6OqJ+{N_59HDS0EAid&$65!&zTc)KoDsp4{FX1uk zz-|AtldV>tyt*{=JvY#{Nl&WQ$Qz{>|!~!Atn5xk^k^&oHI+#n+F&35hGP z0KLq+0Pi7mC)>H-8{5#cbJ27}1Uhh+#${nP)BnPc+t-D+;q;B?;W1fDj~=vTK$VAL zM9;gobnZ^8fjGP?^`DqpWlsS5)4cqgk#;%x8k(x$D_dN)`EBwz@Bgbe{l^HrM8IV7 zO4(2Sk)z?Jd1+DNtMlWz&u~S9t2gty{ab-?4D}u)mQ%t1q>C&45(8gPtk|%ZT(LJx zssA?MYyZ`N|6_!GX26Hgx%oxjS8{wwe2Z6gaIZ(k#Bi_H`p=tf{SFI}zz-u^3hVyG z$}bJw{nCphq_`LVm_R-bU=^vX^u@ii-=1H|p&tm$_>LGbWt72Mwf`{!>{6w${R+1~ zava#t0IUl6dYl)am6 zm12hR->xjh7Vt<(>Dv@72HAWZ|2ab9rAiait2Y10VGO8rM3wKt$Eg>URdn^hhATn3 z2$2$Zpqq04&Zj+*(rku|5+v(r_SEv7v5is`vm7WX?jx=1!F{BEp)C*?` z!drZ7Sn=o0JbnwJOwr=4Y&v4}FHr%o3t5Rv%Sua6*!^S5gMek(_Yo5!mKYyA5kIlKUs8t^us?)?yggjM~SVf^3WmrdSti>>GTf4I6e zEAVyo;Gp&&C-eFYSXM9i`u~|=G0{tS-ckSxf%swA3+vk7^C1jf4kBZ|{HL`_E4<~W zF_UO_4c~b14r`sx{1>+O048H&{2ubN^cYz>H2tQ~2ao@>Tu1?PSVPp2i ztHtA=7TzvmK9FN1Wm!vU>C9h>7!FM}?<*fxpbxshlw8~aYFfTWTNmeBze-GG7;OFu z0Ktw~PNOb%WLoO?`l!xP7pIWBkN?gE-pktles~n{@Ml3iob}VEd%=r|21*PA25Sx4 z4*wn&=@b7_+D5ZzeC#&zWd&^;%8ma$&&M|bJoWl^pTt%WaP&B&S7ci9g5JL9V^fXO zd`pA~l3eGdX|Q7p4(oHbVtmry83GWSeuplV4QuRt$A$xB=xjkre!jC((*C0`E)vq^ zY2F?ogrQB!`9GL4|KSSzlEBUj!`_p6pq_NNh+wA{7t{C5yw$4G%{#G|{0#rki)W}~ zO9IH+*)Gl!wb~!#ux2c(p91ymR-vp%0O4Xv_{;;RpA4Zv2O|b0?L)4g|3vT#p3Arn zwb7Lq{m~`aYEb>2-Rd94_>T|iZ%1yS1^12qD3^oPal*bjI22$^+$DB3PrO+*W|>k7 zTsq|rPR0KdQv=)|TpHAy4Lj`oUuBj@s6iN>i8_P`cD7mfwmLxJZ#(&i!ZU=h2`g>S zkC$+PatUQ!x#R#$c)XUCdFNOZrdegBQB^6ZVzh zP+NcUwTS$5Uj{YI!r=ZosexU;m> z$m@b>)Jg%@@Yc6L}-I*YLlJw~OJsSYZL!1Co8K=Z`OTr?knO>~2GO2WF-|lQZ^g`8^Ov;JcGfT5+CFCbH~Q6f2zk$U z^n1FE35f&&hZ!jt=lHi`@(wVo{Xd>5&>8dBeAkU2m9Meu_ zQrv6;ns}a*Y5_RGv@hCs)HH>=MQN?%S(l20BdNv8>J+sB!1 z8kZDE0}5efnvyiI)73TYc0NITT0uTwRZcFQ8cAWE2iaIPCpu|LQ>FW_#BcvdG>MOF zI{JXMqHUie%@4>$0o0=3Z6*7ee zjS#nHnO0pBO#&)Vsl%w>TJPXZNEpwBZda?5GEGdEzHtcOoXpX3&Grs!tm?X0WT%{b zf}Xe?YzJeylAF*YQQ2BmJ?$$ax&5=|Em5k~N50Ge=W>LD1S#bRKMdlBWTqMDI^jo8 zx&+IlO0s}-tL?I>C(oLgY7wum|AjF3+Z(v zG~@dlbiSugYSve&2HciQ61zPH1qS8Gj!?sh&?j{MlpVx3TFaDa2jpwNY?S*;&DZDD zy|g`e(MnrqXJWu;?>KUtXna44a(yf?m^4S(0-M2pr@ z`yM^YRXcosV$k&#CK%o%0Bk;%EXCv+Uj2hq0t{?4Vmc9is_;{+`FgmQ8e7TDIubR zBY3c9Gdmep!e-cJ>JOexZyf-LWb4#9UI&*vQm@&Q-AgZ)(31A1WG+tn8vh_D%qc94b7?f$#~Fe*)U~4Swd7G1k?DLSe$h}7gZ~p% zuHPO8@pH-0j; zn48~q4a}DR>;Sy}b*rI4eVM)ZJHXd*B&bx{z_X8?f?n`OH!l2{P>T`!QRV(X{{5RCALvcWjDZ8ZyODQ>Kd*}Q( zfxl*0dIf|0Po_L(hoHP%6v?%REd7I){nn+-H;+?@k?g^YtTJmwP|HznN^>ga9#8q5 z4}4?qo{;I8@_F@JAaZ&O6mQM_{PMWxPAndapCEfvJZj>Zb`itruB}5jaga2Jg~!+B z{_vQ%Yv>^xlb{`9qy}=zz3IDc5fLksot2C#WD6$4Psj`q55E7aMd1dE$>@XIEad$C zY@G1M{Wmo(8Wq>Wk8pWMoti)$a4GntDU_ThBfpKaGnu6HXA3FTMSe~bKrr;?$Z?<} zcin=OH{QKsnardEC}Lz0JQ=%pRU^Fus4b+4M7mHhU#x+w@^aquRqq`dc&JppaFtDas8gEB+McRFoxRzukxXtF6C!&KtF1m9G!zh*&2Mu5qTQMeUcBKCs(y&}5=8?> z7D$dIfW5{{yeUm3d?$Fk*MsohMXxKh@sGxf11Fl6$HbNx-u#ZIJN&yXlKteKJ+qC= zGgGQ;tGK*%-zzSrHN;`9#}Dj2W@L5Jugr;Ee73>%H(!sPEhFcl)$@*c(VFgbPgVyz z-p_b{y#1Gq|NcmbdUhK@!uiI+{4=&gyKz50ac8(u>zjg#Vi9$r5Jx%Wv=jWsiaYx= zHkTb|cvp8x1Cc|+9&Er;j@^_G?d%lpDcgbDsli6SJ_AlP)O#2*e;>9Vqk1$b;acMf zlSJu|lsusGT@I-2raG_|IG!mAS|($~2t416 z+#-12Whqb1tAHW3BSLFttI&-mf-#I&xTclT2-N6<@+(FV>OZ70(%XPlP7dNhwk+|RdoYAazpkt$aS}>&d^|4 z)*!yFh-)`6iQ$jf#FEaUxX9q$lzd~GQF<&(ft8=vqThsL2{S=|5^6|u%x;Pu)z5cs zA4+WHtDm3aFdg=JL#-&wMyMIKY?AmF`aYgiMKSd9nNvKgSH)4(G?q>kWG~_d+;UHW zY2cm(;#)x*p|OqLHhS1-+SlsVt+7u2d)Lw@!S6Cp_FZ^!CJ9=?-LTeKkmS8yD}|a# z_a#BeG~s;xK{%|&*cY1SSm8;2M&$l#NDqH|TT!a}lxH9Pr{WluTrK$4Gg4hco|}+{ za*I3&R_a0C5E#{?BGj{3yss^_)0zLQ1=T+f+)He%mOi=O`ZJ=GRNT1#&|!YomSIuk zLqB5(SHp90htXf24Pw#Uh4_10_tHlO^WlE!p2{v!dOID36?416i%j0e{abJFW~C>+ zqqPvl^Aei%d*r?9Ghy#;GMFQqZ?BuxsXzu9*Py6Eo1l)`+KF+2P`oTpE)u?zK+MDBC({>R%hJjJUjUiRNGO z)VtMXss2=>GN`bhkGIF(U#s4hstbC?>^lgg`wTO|0{m6^LH3p_pX1Gd<7UKF>Fy1w zWx@4K;c(>1tJmS$2Vm;Zp7&Y-q<1)fz{WGeStW?6SnJP>#Y6cgGXlbLw#NMZPHTXT zSIfOJ$fx^R+`fc~KQigctn2%>N2_~6E_&1F{SEv%O6cI^L&{d=ADVJNnfC_zwv-kCW-y2!XDsi^z$@1D=nQ zQ0mPx*V;r*^ya0H5?EEk$pPsLwQrHw%0uI|`%x!*G-TQ9&>iu!c8t5PT|DDKp3Jlg z_R$JDzT%i4R?6oS_CTUv4KNUnMdy}(dUS(~M;*Jb!0P?S4rhOeS~@i;fZlR#9O5>@ znFp~0)(6YZ*} zV%luDKSAw!ovSt>{>_mk{9tSB?JcYa4O|JmWb`TaLZgKs=$KD|ejl z+ot*%_ExbC*btUv-<^+j^@=`ENNdl!XOslT-MY0wb#`%HCZ!nFE?`^bX;i$j7gn5{ zPtYcfwj7f1qdAcoU0S|aI5;l1!Fc7RA4;Y;fH2%ZP49EV7@>w~C11UsStx}h&Poq` zss{AQ$Z`i|MG5TOlASA!CNwh|t67BYc{!q2uMQEp2SL)uBKYd1&x;0T*x{pUR>ySw zg#r;AfmU+o<8R-8YAQta@E6*uG3$PKZYKDpjj&IsZq8URJGOMn@lnm~5o;x%4&R}l zQiHw&P9kDEiOM-xqe%n&jHw6lh^e?ZZg*;k;Paej{XxAl=ja!FV@|_ywp_;Ybwyim+ z*N*qKqqh0QFSDpbqo^rOVZN$!qwmL&-r7b#gkGvjQiX&>UP~Xq28&zt^yhX;;vwlg z&Fv_kuh*{O-**#yoUaY6|KI$lJgM@7DzjLnXOFsZEY|j2cr;9<#Uh_t3*$6-B;Zea zM1A>5lb#aCpO1IZ0n%J|3|B9dZQe~Gj#?=#iT8W{?SYl7Qy+Ef#ZrnLdDWEjpet4S zeZ1Yc;*0uKOwM1KYEO;T3-M>Bj3tV34w_oc>~%wNuysgnG|BWGGZz+(#2x#{TOwr=Q5s^5)5hOy22a75t3oUN^{FQr1H$Q&{AF?c^k>h) z9To0BT=@p_^0#Y*_$+}X>i0X3Jke=Ys`frMW~bVkb(?!J)k>nOH>J+^p}EW-Pu=)m z(Vd5#srWvft~S-CAwJt(_}~c|Q6BS4;TGo-Q*sr}YU7vgyQA8-PP)~2&veQpE(sj7 zVWoe8)A~!=dp%VW!+-8=8nF{N=jjUU`}b2+rzvo!(7&?N+RF@Wp%EhQeNWY$Ph4|v z-hpKd)|{oENbKbEx(zYh&U3n6_;CcgM95^Bou_UoWTs;)K{1?ExlKBYV$x0mvWN+Y z`w)0IT@a`>p4jLteq;J#|IBOx9~B!Z!(n)j=_wI=5AIg)p#cbK8dC$wS&ORN@}uB4 zk+#bUqUo@z_0H4m^KLr&5!SdRuN;9#AcgS^&5adJ@P3Vx`vxIjjcJM!djhX=0lD-F zd3-bb0;zxX;8pKRz13P2bjx4rtbSk=UNx4F5IQ=skUT$CEqO2>PGbwHpC=!vMHjxJ zuX(8P$tp`;hi@jk?q|yLSgC~RVM%|9#$}_|{{1Ibs1XCDLWe_*y9renlBXGG0}EzV zW0!G_6D|qS-v^z09X3#=aiE5}vki?*!Cih;-YGL{;_b@{iBR`@Q;9{>2An4IKfK)) z4Jiq--{^elz#p|jYg6o<6xC}r_9XFh67v7TwI8{x#;mremVDv zSwwAt!5kejB~z?v&U4+`mESoAaxZ)lX9S^$4$WnA;w*d94{%@iX)zI8wdML#6On{{ z_&I&T=O0OaTY*t|z2JVi?lQK4;AryiL$<|@l?!hdOS;0xV{b(M*3mik-NEj z2?lwaw)F8x*cp@)9Q*o!%)Qgq>#ENZfZkL;(g9l}STq>HIac)0Jb@gl+~6r+Bf{m3 zcY{v+2o}2))zRdxSh!3mkmb}TxkI4GtrO#|G%uz-#Ph1Dz2BG zr;d-Kpged0FP}I6ge_eSeEeVz7jH72(NfexxkhOo- zG=UX8X10en>&hn+ky>axL%pRgOW`-Ws2gjwh3-#jN}Q_AcE0vVuVaR|le56JLPP2# zYkzasfv@bEV#)^!|6^aEbThAZ25F7CSgdeS1@DDCm#AKjC0sP|J9y#MUYHx<(HZYD zvZ<75DWFi&xY)O#t|pGBZ+Bf&>${!u*H^aPd``h=a{dyw)e&dpB!Lq1uX#$wFXEEm=O-Nv`avY-@GEIr1Zx%!rbfhHq`I z-K>~-`jHMPctlcwI6dm_m$4A-4_0vZSm$G=qCKA4tibYw?^IjN#OVljvq<*%yH&b_ zd3xd)l0RL&O_rxNRG{PUd$7=!JziLhUzW8H=$o_eGZ~h7g>kKRg%Nm;x{Tj`Ce6tG zl6)iH#Kbx?I_mkT#C7t!x%9_nuy>H5pAXd*WH?dni{X3~&b&aWDz%=f1C5>TmG^2v z~_zpeI9H;wAHS0He8Zzi)eKe6LSHGk;HvcP&0@=R9N- zbQrTJSWnLwBg1+^b9TMm+WT-Fz4H1rqp{;$Qr@uW7;`k(*_p9kvevP;aAS+D{e|)J z?R4**MVj{QF&MMiIZz_e{>-)34Qa$Wt%a@NeZ)ZgBx2jtDb~dFXwgw#pIbEuD5&HGE}W(-?HPKe&yT<6(&I-f3;RhhN#60Y&AsqSr^IIHEyQ zKK>AkZXb$(z!lmgSJPOxb+A=;Ks-wS0Oa0y4y8i#36+iOW)KCP7QB4$?8G6lZ75WY%tbOpXg@Aq zr3k&YmSZ{G95GT!9?NL-NhIh5B}?(hCk3VyPV%!&hF3?#d_vshupIMMf85ufEe699l!esq^*IJB7)neE~91$~Ax5@~iaRE=bPnuVs;*$;#;=ql1 z;ujIbby6!ARz-vO0@uGgdrooe)wvr__Cl~E{cFBdwe7)(CeX``-Pj0mL`<{#TbXYaK>Y+yC6I|olLDq$ISwFe8jh1n~20qfUbikWsW14ja6&XgqN`5n*4ns zJaWN4$%}#KWii#$sg7#jGDiK{!HGF4u>lnK6NTg!I^ilkdn~9VuUu_;Pu)oMa&hrK4l}x-IAyke&0izVuf98#-XQtXUk5U;BmjW(P1IfBL0&W z0{%f|wmX0hxGbrlw3nXy@oHbo{1=neTFand#jhu2X=pER_ z8A^5)1*3?}Y*uC?U^b~F&3-MSvmY$A$dhW{5EqNW*!!8NNIoGw*mri?t5u0@bQ6@a>%XQc%=`z{d5MR z;D-?RafgC|-DhmVvv133IyLOjN@lwah+>J{pUOT~sXoI8)p6mG@d_8^DGaA9U4{bp zX0%{^`nC_wZi$B!ye1Kvhl_dcM!JTqc$p6s#P!D!WRjU)vrTQwCv>#B5B*Ag$W|C(r#p3zt)32D>`#c% z-IAWahNNQw&&U5Pf0gGiy0jfAPN8Bue67DRcdOfta5Jp4$k2OEId;I@ChYakq>!?R zCxxfR1;@JRMSp<4{O00Vm zDC#<4A+j7Ed`nT!=^KeiorrfmI6Vs@Y0tdub-I$jb+QNzvniKgJZtg~Y zuuSXYtDIgi+~}ks#@+$dlC1I5GScD!t=l4m84M7nKXZ!aq$-{Kq|py^bj|c~2U+`3VDYZ)G`gl+;rEm2A4*{s>jJUmmlUahwmo!A9L%K6H;j zPVb|aq4y3*Mz9a*SiXR5EWI~N1`S}BRef`ia1b%$=dN1}hCg85>oKrBIEOsPH{wXK z`i07u;`Dy}*}PD-mA3}D<{d}ZeBEC)@h^(ouk*ekA4SR6^Lr=p=^%ea?4^b*PWi!!G;KlqBy_?hPwB@M|NUmYS04 z!_R41w?>^{u_-hP)>60_2DthWno24KS#k7;Cyl;U9QhGH2#3F?P?>z;^sHyB|IR>& z*ah1Sn7~KpxujNqt!T8D0Me%X#fO+we8$-P9_t>38(4Ag=@u-lCi8C0HD)zOm1s)I zNWi6wkP9LoU(_4d&kVn-7VqaEY<%!Y>l{0+tAR;DE+aereu`nUy9wGnY7q1Xa%-)4 zJ-%W`dRlF@(&FjIaDNzRwZq&~+Y)iBjj#P?mr!sgf6UOsoiT?B=|CwKZ zV3LU2IN`-H+e=9a-1)U`6S1^MS{H*LtHS-18gs&~m%Iw3OfBRs56#scZ)+Fe|C|=+ zZe3KA-AlI#5~#9vIEV4Gq)A%3KGZ+*IsW+yJZpVcc3wApTkq_>z13+@aX4!2hw{S* z`>uy+=nl(9T{G;Cqu|Umk9OSt1#FA3BWrW=uB7J?BO|$5HSR0CIW_+?;s7CohsT@57KqI*^B6ZbSaA!%XAHa4`D~@*pS#1BVWUc(W zb6vI9k>9S351a>bmVRHIZ6_KaZ4Y?DzykAQkjwE9-&+Lop)YZHCo?|dp^XX+Y#WpZ z_y?NI+VC@XWttu-K^4Rtm}KQ$d59y1V_&b{la(nwz{8W@NV}?Jt~(u}2|gdLIFXhC zPZx2OmFWAa4N;Sw6c3Fl(};hQ7keNzUA-$z*+m;^;WLo?#{Z_a7%LDid6#b#(j0#_$YD%xZ81m8FOhdFqO@B`NS$r z-kFlDT|B6yuXs1msAGWTf}FulM^n?QG5JxA@#a`S+>{G*$aZ~ucb`b!X&-J%v->oE zS9yi=>>lEMd6Qei(X~(0#+wqh@A<+CAJ;pFk0tcb_uZk<#&TDDm(M~&?hjYA(W8V# zOEXZ4-tMKiDPVRsTc&xl9xo~GkyXg2Gd4+<`U8j0$qpeBNOf`iDR#EZr*HY$-{Gt1 zB-ung60LLpxV2z;J32v0ld5Ib3sakzgOA_Omn7TVh2Gylm1XQx&LnBai75yRo$#d;g-ZdKcDhVEn{du_pArDr~*cl`>bE##W$ zG{u@B1G9C*Db(l_6FLZ$UbCjkwyGb=BAmq~BZ(gKB>hNm56cpavQGIMaCqn1bURsu zfse74VdhKuQ}H4o&7r%C4dRj%hPE?8V7{08q^_`Bqx}#4p-wDv#%D)J4Ey?C?Aeh$ z7PQbgd?#If^#`BmQc`OSS`0PBG)ykFtn0;;&{(`EF##`=b}&xTl9&#^y*N;9wlRn| zHkMmxCj;@DQvh;mO<0cr#Fm;^3e1sQ2ucqMSH3lG*%%G!PU5%?G zqg(OkLn-z2fP5XArz`2%rjRGu;4O~ymN=TWX-Fd|>tR_4SSRUaQ_{6&$B5gm%&!ju z5K)fl_VB^LG6-`%AB>5-=9^y1Br-}xvgHi3w({EL{Mao|PkEC1PJL_VmY=WP<^pJS zTqey+V}OWcXCJXUUFUUv$Wx|3p&Gx~31BedT$$G;4u1x!V%{so1AvoOD$;@oC98SG zUHzfR_`yaee2y>Q8^29-QnieqFTiEw9aLiPagURsGX513JzLne7lq$z^9_fy4q82+r(DLWFG7t@f8kaVV5YAg|w1&8`DeJK`p{1D;zM$w2L=FK~VQvMbpFMhK}p z^b^Vbge~AC4eJ=tJuSY&6v%>gHb$|nL*d2zPP3cfCXQahL3)K*@{_1U1NTGXlWw>1 zQIjFQQi2_&*)aplP$zhC=$n)8^MiP^Mn(mkmu{Pj+8PrfhndaZe(0X=OZf~dQd+Hg zqgqq0#|*pIy|B>m=u{|+Yt(HcR%6y+tKL?I6EkUj<_6p zOGC+U+a;rUcvZUln1(0=h1x`rRgKHBV||4y${l1Y>`@w6mO)Wq?mlwXp%{@i?MOYU z?l{hc!Necy^f70T0l)1GBtXGI4+>tUHdK0_8?Z(_dYZ0WLtvkrm_6k_DIBbA4#|Cy zLtVDl;L&efw?Xb%!g;?1L;M~8tNE@hus|1Y#4nukuqv#+lKY@bih1OK41YSnNqPFx z_cKks`QEDo%i6~b^}7Dj8>z0}(62eWAYcNg4Yv_PDeumGD!5;Pw|gXm&ewv!;pV@1 zZu(G}n9FXX=U5vsRTW=ADiTj1os9IEqKs;cN`14fAxj#D^IiuPYl`39Oo3O=nVapg{dg7$)7F(6;ybcz?Ks)y_}^(>N<|^5~~4L24z>eU3Tv1=v>oF&mx>CpcfE2?`0+jzC>6+{@*Q z#Odo$cE@PMVjYF{Sxw)xM}Jc2X$+{%yEyl*#krpEC*KacI$lm`3K@zY%HZt|65o<` zLSxrP3X_b9hROmA2-gtu$ZbrB%5;3mM+G>eHV~5HmxmUkN ztvB=QG?J*_fqIpGQD^#gJ=(e)gIqs2`zP1)MI9)QZrz=Q!B^mm68KLMla99I>)HM! zD=|J}dl>e46Z<+yujXNOe6Ie{am6yzEJNR}__KUuP9RGV%Bv4WIU9rb7F zUBu}=OTLkh$VFu1?)5Pm#=@4r+m_HW(HD(2iwW||M2zbcFiZ+;gLg1)3GEdYB%lA; z3k~kh;yLUrx4rMBXW-PKu$0($Pc`Z8s&YG6;dF}RM%bA7Yqd5>$4YGZ^7ZyrO@mE0 z>`Xj-+%2$666@$nNhn&NG#>ub?Sc|1y>zV}a-~F{B`5g1Imsf}aL3j})~Xj}>hMd9 zqBQQ%5b&D#?7Y|=uuK6x=i(meeFu)7B$Tq9es7AuM{-ROHR>)iK>>2zof>={ZkHyB z<<=Ml{lV>8x3xeTuQ>gb_**CE1P2AzumJhNDY@(fWzghpVj3Ug)3V-k0O_Zj*Y~== z?nC(+MArntKqX+=!x4OPcn1%6Lsz5uvD_t4%CH&*i(|R-LMAh_HQ3p2hWoPWktd}% zi{qkUd&E-m0Ir&f`o269@FcULRoK9FmzJH<`lte^0q8(<-eB{7^H|r<3py~B-P=_j z!p5o|ek_0x{l-EkuJbo&o_S{CNCj_pzk0=k2}y5Q3{qKk$(l*xpWIbyOe^j3jI=ya z7RLIL3seaKNTtUV+EJfaoR>0ok=qt~;U&wUsVrK>emeA3uPk1nagwMkT?gaSW8Xk5 zo_kVnM7X(A=F#yd#!qBmG3T-BHT!3;LEF5Ew;Q8yE);|~SQYMK)+nHf@KuhMBq?vu zWTA+OWOa9Otu%WS^myT1FQ%(xc9qp!cP+x8`1IKJq8E+n~vkySrKyMKlvP zH-8}9VE7d$g^4A>4|$y5m98E694!tOo{|moMhFKXyc?&qZX*U*_k8x!1>l*F$rdiX z#RlFdefB_{ZVtH`Qpm&3tC{X!xdB_uULNey=01HKiyeFCoyNiT9|#q2?M$Q}08iZL*d zQEs6205I13u6Ivz)rUjkInqWmcrCF(q#iP_Z1NZ;DZM4nF1U+r?PGL#D78qr&Mf`M zxxTN5cR3>t*48m09RpnkQSf{#hD^P^pkHpo*igabq7Ms2)4J;V5z-?ioJ;azx&xi| zx8y~;LZ885r3*$kAlU>GY{O9zmM@-o33DcyX|X&Fb!GPR6)sseYiB1W{r(xeiJ*9G zl>SD-+p=ck&0mON-y!HUXQ!T3OzCqLT>O_ABpmQ63zK#xA0TtCoB!UXz$EW; zG+vC!^W2v{Uf*NCe$RMFuT$y8*UN+tw|m&oYq7F3$sS=_-?FB%D9c3Y$fr^XPf=)%ykOg zgDpfQ0&~rY(MdP6z2Q-LL1$WC<4gPa_|~6N9#7b);(6uXzm{#!zN1(|#=>9Pb64xo zN2ZiByHqo9OL39c+tBzT*6h@s(`wA+c%#E>%qfDOtION?Vtm>~*J6N$jJIayt)nyb zG=2PJwMfgMg?x=7R*(U+mo&?ExteLN_U7^Yap-OOxsEEZje(TinurKA+%=S8vOPub z%mCSNVy`Hf(%EX#Sg^G*%HpUAE8Y{At(*2b{;ce-OZ?=NvfFQknDasrgHfVtS!&t(wkPz_qksR!zA>JGFkhc_i3lq4ca*c z{zJL%%Cye1rbATzcHGl-0P+nm`vh;$feV0@()>20^46c~*UYEi z*1qRwsb4DyJ^3hZ?{28o`s(DY(0?K%^Fp_Smgw#c+_5}|GeLQ!hRL&;@#(h^C*vrF z`hsL#(l-yh>A;IwL>A4{W&(}VKtXVJ5rKT1xctWP$0N^|r7(QR*rN|czF6J<5-Udo z;?&X?Y&z%8nA(+7{qSHvZs#nKnf`ILW~z`+N7ytC&cv43gO498nm4$O-~}xy`LKEb zIO#i=@c!{lV8?!4YLUp#c0b5Z%uB($v#)*soEvhGXJ#Th8vHLys&E|Ad3Hg#0kdHe2=YLt52DU-BaIX?|?0ng~<%ccIn8>X{;F zLS_M=GCg;LoTqXSOnOcHb&}Gm4I*s!HBruE|J?ftn#5yJVv-&Gc5g8_p@y*@in2M@ zJ3e0bv5JmgwyWZ?{s%&B0Nn%8>@V!$lv?XI;7PNjlzRGn;NsEYs6{A=biJYRw=rG8 z!vmWm>&Hl@dWvH?r^t85E7s&9*`n}xw_2jL+xStYUkQ-@AV_cdbXb?k;e%qWewU5~GlrSEelkycPo*Lc>(MgT`+f;blcHEkf}!@VFt z`^8^!@g~GBbSu%wS3c>eKPM+e9%T9Y>=UDJ!-@?h1!Y6}$ws7jjj@qx<#&1zHm}H| zZp{P<*CCjbUZTaI8P@>w{rCp`313bDMaX5J#meFx<}L`$okiQto3eJI4tP%T4Btwc zo{u!QIN?MOVV{RtKbsM`JpuUjZmVe%# zu*)BP3vdfApR*DI2ihHqVue&mKXNyz)u8Gi6~bFLll6QFs*|7VcD>DnAHZOK3sE}b@8M*U!tAiri=1F#J-H(6CxYI(G zGF#B;d_ma@tHJq~_fxFepsNm#oK8^Wo8xjW?zyh!vaZKMB6&|p^==eJ zQAcxEyPKG3LWneE&~y8Pp>vk4VI}p(pO@o|Zb+vA^)WO|g2iUk4GI}%>x80qPdcrP zAGce==m2a<=lsVl7Gs9kMY{tVU1GLEj^0Jb88 zh;z>ZZ3yEI(=*x4=qHrmW8bYn0@c|Oktyp2!4WPF|H;7r#n^jBHQ8-@-xgF*L7D>6 zM5IaY9h54HAgELU>Agz{)j|u3|P6Yx#nDR&j0+aq^z^N`4(Ux#!dE9%9E%17F&?KXJU-xG2gzf#V2H)9ga=R z$I8?tuehs(-kecnJr`>Jt%cUiP_ zp#X;3gEEGrFrgF-dwHa97nVOFEn||0oVhMf2i3O(4m{zBX4Rg*Q9bX?S5tOt*5@V4 z(rMwvh$#0|pcEKT`H!lBQA}nbQ%e9zdloUZcZ=DcA~F(9&046Y1*#(a)OE^Xfr9ZR zIU0p^WTnaz+R=R7^sRjx7EX->Fsx<`Wa+LKx~^fd z0bWM-LHN%0$8SthsOcUw?3sy&nBRM$pCb zS{tW*MzV#X&@hYghACpHt24#HI7Ufte?O~Bq-*Hwu!}F-wa(5NKvvHN$$M`$*K+F& z^fq+}(XTSO1DAUl)3z(q_Fx9x*szYVj}?rcpDLdgd(h?{QVyyOkm!;-`>-O#Awvf9 zZ6$YNYIz4y6Mn&0p(nAO9zJqEtXvLI6BIa<&j%r&O?Kxdy?e-0wH8Z zK3c{OrwMPrx{PwlyRVH@Z9?S z!)3~F-qhQ+2ir}QdVlH^_PUux-QZ+-?+;jwIUBAV2{tWnYR=gDV7;Rq-8JOO;L6R5rjawmg|`D;SUFM$FkRv%WR{Lg!9+vBc`ee{>M3 zSmL^)jFZ26uGWa>zSPey86%x)dG(h+z#aGCoh-xr$M&)Z2qOi^M;f4Q21f=89@lt< z%D%}|U2%LeH8KgEeMj|~4-DwD2Tc^-%GUI-8f|(RZGHp#r>YMZOB3Fh63I9A%)h+O z=4{gq$eBH=IQ%4BYl~? z9|`P}ai#uF_Z&x;87tPCTn(W^^do+L?j+v_I>oP9&8Lbc$Tg&Hzr)RXgxbs+3gvk8 zfPFJX+-2abllOZZ6m^~T%Y8SaG_4>RAVe;k^7V9GL(ANpgJk|hb853)WrWoVtETTx zBcMu+d@F6ayC%IuGArHs#05A}MyU+vF7s?fx0!3oB=kPQV|wWsuii=<6!hL%dMdjs zv#+Fy_L2%}EfRSnwvqh)t9+nFx4>YTNb$*+XgQ_?bGU(!X^HoIkT}QbA#&tr@EvxI zn?U1Qsu{_kL?;CZY2%}i;Uxo|UQ*Z~vE>$HdU=*VbO*z8AueU>nAJ%y?R_cbpDqt} zr$`>21#A)m7Uj$MxZKrlu~ATY<)h@jUU!i~0l%){4NWNRoE2Ibo0t#&@yy=jEXrVFTWj&tA|*9rK6-D`A(A}S=mp2B zMIThoprE~#L05*qzNLc}eMg0HF{0X0{rTi$GAp_R=;`K>gyhPU$ni&l{_aUu6o1AM zFyRY5VBi_(pfM5&)>I@RoTNGDz8DTW-wx~Yy#LNH;DGDz;p&oSzv|FIK^J23-ZgQp zr&!mmTQ5_DYT6pd54`rC{eHHV`|L6*DVF8Yqw7&X_48-Ic+rq==owk8<2mZ$K)w{Y z!xK}3K0y&FJgG7kp<<&mOrr(`SvOltfaS~(L@s5gmO}W!8AnEyc9+enEH4?tp{whh z5`C972h>0gBL`$S&A*7QTA(|wcjX$3y#zO%rMwvq6l!xzlwB5%k3ab0ji4o;FtU#n zSwl|8)4fi=_wq`2pE%A3do3v;B0r*UJbIbqWHADm!$Bd2>!bFoLiP;ygU!a+b>jG_ zPU*yjV!m{nM)WwSZ#H{w)CnOf{b_ggb*x?dRJ{YDmC0&n6HMZ&^G{tJ`IQNpu#Dvm z^PP%)GFt{h&q~kGr8B#Qxu*id;Jv=KxIEu!0VMNvpH2!HSc!S}8QVP*nU|A4Od_Zg z?(C$5wTz4BshfUeY@Gd0Jsgj_yG$9&=&S2CZw%2|$xNYypH=|^S8mB1o2CpP+nX&* zdrowFCrOZzsy62N&IEV2|J0HnESX6dDlO2q(CfORm&JtTW1dlTN@uLz6G=stIew*c=GLF7B{m|ujP-IrHTA!00rx` zDUZn;#4rikMELgN;jA;8hjz0^`CQY6^5dbJ(d=8j_gfp}{9_NtjfGFCXNr&oWmy3k zCs$d%ks{#iI^u8ah(iN;w_A+LfO=Exc3B97E>e;vgP$;PjfUa-!3IwC1~V$Ve4c^! zIO@;!#q>6R7A4^<{wO2sVGc-qeQpLC0{Ap4wC+}eCpGyfIS&Fdzsu2ZdQGTTXnTmb<+QO z5=bFCa>8=F9u=L-K)IRxJ3vPwdcOn>-$9CptT$(|v>2domb%$HtmgI=cevp!knbPJ zV!mHhI1gZy-PF>cBz>rve`9??xZ>)DhN8qbDk*_cR!(b;FccVV`*~^bI)k)RljSD$ zlpHtywDd4V&tO%Ko9ne_0Qkn&?d1{p?Sq+ZX{LwXFDxd0SjhJZkEd3Px@|F>_k4`3 z`Q6+Fo1bT#Z;q9jVS3}^FW&@kL9fPLzIyNLb2L{5^&-ge4c0HfaOx?G%xV>UpG*y) zt>2^XBW+FL^2G)x~xawu*Ef zM^Ftmt$eevfJ@&nZ||4T`iK^eyQ{L(@FKL$ZeYSZTAq;!P%DI1SIVy|M#+766DlW8 z(Ky(+2eItqANm+2;e9>~x~OqAUz|_|mA*vFr=-h@64p|f?{<9!#gt%9<^mqtG+?yU z=EYHCsv(aXc6}lR0C~a~)ztR&etO-aLt@AQI?p!U$`&0q80ku<-9tze4vGtj&g$Bg z>DgBplpb^j1PSgAY`faVN+N@fI&>9MVfM*K`8LY%nO^r2K#ia?WUVVTW`*YL)%5gj zswHVDr z@@`=Od$r08mG9D@dsV=a?rvv`lPpWu(=QB$c(wF2U2oJ0&xr$`nD&s;r)2Jd>z`kPuON>xSav$ozco0p!w=s$Xm*|Hu8b>5g4 zI8w1Yl<>8lm-WOZsn0k6PV;!9r+E#uF($6fY4;ck6?n1nL+X6Yo*0SgUxQ(P&Pd(n zaSVB2@BE|uDHL#+ASkm+GzE9AdF8pE`HPN#sWI_*nVZ{s*R^hJH5-;L{U~zNvez%S z_d;@f(PY0X1JqO-LLO1ym{Eq4@BV%jFR$>c`Q+q?Z1)o4Zoh!}bq`6?LD0=R<`X3c%Jq;DdShxA)DJ{dGm76!pM;S+1jMw$Ro;%8F zmsK(j@%3w9I*@Y{s^v}St1?EqwheLVei0P0tk6zDto0W-hsQ(vN@4qY?nTL^Ynn&Q zR6C~K!!JUwn%8eZJzTdW#&a7tuuaPmgLkCWQy2A@K$XsKE}abKXG~;3jMa>bSkh1B z=sC0m7i#F5W@(t%`u&?@{uU&(FB@Gl8xu&CRD_{}d_E10n_MeGPfiGX1P02TE3(k|n4^WfxFv5Zq}z z9Q1wB_v6T2&~JxX*1OWb#b^4^4P=_-gqXa2?dS}@b+0S5jw9O|(Jt9nXW|vF=7R4K zG>Q>mZ{dzI)hq1*KAOOiF7=6xPR~HVP<}6> zZqBZ1r67Y(dllvepO0NKY6MEhQqAEJLwY(Bw zm8>&4`szx(jk3RfrzwC90@TZ?$3B5@hPO;!gt~e3Wk9W|p0D;|1*dFQn3_g&k{lCR z(xGE+uz}()sEs%}l)+zfCmNWMdJ!JuKRWW?#r)s0`#92|`iiM*Jd6^W?PdsD9#t^Z zs_MZs%G@yCqmp&_p+C9%_g<;{`f}@dA(p*1i5?2VvcfGs+7MDk%GybbY--D~#1dc& zNJ1+0!ucY?=<2$#9k|zO(MVB?joj8xthn`+Eg(~I5e2jiy;qO1WUu5zr10OZYLQiC ze|*m_RE?HR_gj6lXemP?zOCceZJ{>l{*iT@ch$H_GBs_IE18N*;#K=@C5)}mVx0FD zK5^xwJC-3wyxIf(XSKMvWaQ<)R%N{s;h~F!)o_wlg6u*o7xvW~9>8fGwR{B8zi$6H zt1oSFm%Hvbp3@dyZNPFz=FaU5sQm49`@7epXrIOeo)3_S!ot1#1YVu_O(zLz0Q3PXAs?G6>na0J{$9j6PR|zLQZeCFl`SpclF9($ zV^Bm0KijiU8Fw>+PO%4K^^=)U52)Ar*H`ubSuS`&)X4rM(4%*>U@?6CZokCGo-}2` zo>d)cDoXP+cBa2xqFvdi)oBdeQoJ3;@||9Ah=TtIf40-d zp5M3lt6w2o+63g@4*LtLrEeEk3nbaG($1pqk#!l z4JIFD4|g%m0Z!I+$^vF@Rc z1aLIFfBH1Z34bIfOs?2VGQ+c^QQ$+ml0yz-?yk}~Ed3xzuKry>;oL+&7CH^B-UP<& zyEp)_SK#XXE;UUQq&0kiuLQkZ3@)Zr_+j=vJ545jQm>Jr$;3G+WQmgIbZz8UlN2`kA8K<73gvpiZ)GQ||H2Xe;JZ>XUP|Rg9ld&y()+9hB=0!F z>q|krrUR%e*>S$I00+;Pz&cJUmi+O+ne=+$iqZqcA7dvLDO)wCaPSgtLO82MN+q79 zwF?;2qEPHEGc*g1N&k)n_!I%tVjreh7R$e=Bw|tF#3JDUdo!l^_Ts=}?t6Yp^FFf#(zPvH-gQprN9EyC>*^E0B2{$O6e|?JZ-Y;Y1kS}o>0MIqk4O@fC$rx# zxy(TML)-l$8^dK1fYzG=&`gg$=TiGd{mOeScgsYDl?&C$D{Zj>?)zHGbCJXQ2VF9K z4#V#>0gbt*8)eb6wN9`9)>rtjebTX;(5LYm?t+9cFCiD6UTtf2r7Tt=N>yG!t>-Fp z23V}#4b9UeP+g|rWPd;~6r|s#0N}_rxpMlfJ9$kbHrE17{AFdKasdiQA29I}F~ZZ2 z0ix7xeX9b1b8^c=oXn^!8UPQ=+`9yjQI8CN%+UN}4D5gVcm3@JW+M7^$e!`rpB}>h zkBC73bl}ZbTmmR6UGrDw{$(Kl|3Jbg0Js)7sHOvm+(My}G>ZRiY5$-#t}kCK@EWke zk z(efloMzT$(z=)5vp6PL>Wt}*8Rj2nq;C0(Q_4*F?6G{cyn>~5EBF%)H^iB=F$0s`+XEp7c>;<4r}&8xx6bP99dxEUFN?;U%MUW+kv~pkF{GF z>Vn*)MSPzpY)%3IT#t~wa{{hPd+Hs)i(5YQDqb5Vl^>^%Ip6n!*?FJL#Vj~_&CwY9 z97cX9$n4{zB9pd(9n5L2OgfhtwH2~jX`XUTBZ{He>zxB;Bl#aX>a`vj@@Ih8>(T-G z*J58;i-th$jNN|uR41yAiFWnbh1c~-2J9Vu8SqeTxv!G`2WR-{_9yTwPV34)j`Aix ztA~62xA+0uXQU9Db7>AS#sw0#`{S9Inx&m#9(mPipluBrdrSzP$%iLI7D8Q%@QW*7 z+B0P=#pb<+lgXd%nbVd(Ik+dEnO)}{dev~NE6ur?zO?BW8(*YIHY?5}|6!`o4H$KJ zTb~-RcR(lHI){^GxZur}_mRy6{r+5Sojuv;~N^z<1o1?H=T^-72rqZW7RrhWmSz|gK?(w1 z6v?x!0;K03Wt10iWDpQr?9dbb|LH=2;lPwCt6-8Ll*eYZt!Yf~y_;>z)AinJI)$&S z9Jl|0c@gcn;JlRg55M?XK0&}AqA=sc(uCjb(XGG}Y0E;VzH5s8Gs5h5q}4yaB4EB& zT)rjrA~>^;lmukYPvvu(fs=c7{C>csRl6!=-QF2WXVu|9(-)>0*xBA|V+GS_5=l|)&y0FhhIJf5W&O%{ZV&XnRX2T zcyjnNQ|?27Sem=*8M#&C?;|e^zTXmVpUPjm{-b;e(`FVxvlp7s0w|cn_b!M+GW-3E zD#g_b(`Nv&GFaUF$Srvz1%t%8F#5#K!X8XjRojJmQhcE!xTh?TyIS`;H@w)_;l<(1cnpBv==I#exc7R+S1Yd|xgh>vv9@H~?+KE0 z^W9f5zng%;Y=hN+K!7%MB&R_(vLr3>{?l0jpT1MKP($8|;M!aUP-ELTdaGlcIpR*h z&g`}VEoBInrup@*=BdC1fMM)Y?O6l-((dCIG=BF|{Ap6i?$=2}Z83rf3cY@@q7B_p9JlHJ5HQ1eY!{!WbmzhxrY^zmpWS* zYo{K*yEoyX0uV!xvw)8hp_AW!C#S{kT#LRA5L(4HEH0Uz(+@4Uj5vC!wjD>GZaqMi zG^rDSS z2i`J{bRyEPPCae=K4%G`W;^|1=a$Lea>okA7Z9uUMaheK@V4M{s1%*iiyQ6yoW-~q z`?|(RO}UrC)2S2UDnqEXV)`8bKEjE*GwsZe*FT#2is#bx^lk}d6cOSfCv{_|g^?T@ zKML)t$<>1vE#v-?kafV*lt zk1CgI4TDL?jryF)4$G_E)dZSUBz7^mx<*Ot`Q?zXD>rtUZkX6pB2*Ei78#za7s-_y1BYNkSyE{=HTL(54 z1JBRT2(7>IyNslHFFYp`y1f6UfyG2g1LMw1?O}_IgBM7Mw&pu>skNrBg>;9DO8< z(~((z-O0en2f$!8;9qgpNsP6msM4B7wy{Mj#k0E;v&rl_9+MP-uc8^s;X90*p;mHj zTZdJ!q7uBsJnT+r)O|W8p98doz@hDHIe_$2l{(&Dx;j^GKQZlGQJaXV*-$}+&X@-- zaHQ2xQRRVu@OJIN@$GLRB&1&+~E3i(Ccb)<}< zMCTU0Q^SbHO9<_qJz_CBfFZZ-6gnQn{fRzWtX+9n!k zOb{&oz)f(imt1Gp6`vd18Jk8d(!kY%?6WSFjgo6L(#omZf}1sEiU35dUQZgyF28%No#pRZout8(hO?})zH{P1x4KWLB%6>-Ap!EH=hK#Z@qnKX2RHftlU~egT;GMn2u!1rMaeU zaK<^K1s_P;E11km8|yU>!alk_EOVG1ex=ik%7niv(rYD0f-Ve~P5B#t5X)W4+nk*q z_tJgLhI~ao&AStdtLA-H8(=ZBu6Sqb0PN0;G;*`N;WUMl#5<%N-|n%F8P&$cB=Y0D zHsvMYSmGo&|5UG20?Z!l>$)m42bQO z;6UpsY`Day4%N4Nt34Cp0ZnE2s?`XYHzQcvq zE*CliXewH4-mWS#E;jW$3@0zc7wm?7c!AkI2+G)Y+`ikn)kbxjmC`uoCy{j%S9evX z&CH-+_XVseVvy5LkVzKZzki`-Qp3MGG1Cjpq%ov#>b9|%=r&FhDD_^6)1)4l=@8hl zFRL&R!bCv!G`tsLD%h?L>ZCcRdrx{aUjaL!RLd4J>Si9hvgK^OotR5k$g3*rE=u)sDg8>>VoF!Ir(sSac-jQHq5E5)E}5ju zd}XGwbh-o**hf`iZf<%9<&Pdou{fE4{QWR;?e(3$E^nYM;^j1gHExQjN{SaO@vAI2 zkgl=caZRkaG)|J;Co65VZ5U#Iow=7|H6HWr{e#w5qr?pteJ7#oRNC6KZ{AzG0pz&E z+q({Z_x(;E#TuCtI;B4zNoDGXxI`%DLA+dhCKXd=1dIb;`Q4-ayjSWk$_M{wfeM!C zWbm49py61i1joW;(Mb-EdjM*7Q(F*m7LNek@0E*!SQ%6d7+%>V@*rI*yEZdt{)lW- zqIdB~V(5b7ths#&hOS3a2|DjWq2&-xa-}a%qNF#!4-a3Jc>(77{1oDo`W+WPbpdy0 z3f!Ek=Ew7lbbbyLpAXOsW7{aH8%!-A3)wI6LeOv!`^69Dln8421kP_+43Cu#;b(5U ziO;)gHU?rXW!I-XK?g*2A8cVZ;a|xFd231F%?EbgOB+ZDp0TlNl6$sUbZ`Nq`~?$P z4@jWqGq98`z~s|T>z8&mp4!UZvLFRJz~g)nq$V^I!_H_Ac1zHCvzMmj=i1X9+Pl9K zwOHn>(cZ08S|7`gX%`?sV)@~PgY?PXm*;iJzPPdQt%I54xqMFvyu&*4D}W=P^0m9E zi!iCAVsajH2cDT)`$cT?0?ti`*pPOhlU)I+ChNKEUX5mVb}9WNkb;S)3cwOuKYZv| zu^O%>i7IVYk&3G9ZGRpv_FH;`qh|~Qh7Sgx0ime+=0)Wy4k!%0{g#dSk88Oe{-GgW z7*O$k@d%~XBPIiE7UjiA3(`fapw{=YC*@kU{#_py(gSIaG-Q#jIq`?rjb-A{#7eJj zX8$<+{E1MCXL^pXq%VbO*v_q}cFNK*`JQfk;LOykV#(3hJOU`s&sFH5%>jYKt{Zw~ z0>)qeEDNgF)488|ycFEp?+ut4#91bV8Ry=BV;`^9k#zdX%zl^A#FpOvb&)jjM;S*I zcZIKjW-d}nnDu&XWO-SZ`EJ=!^b~|N)dpO%u5w*8JuacUNK{V4C3!&QC(-{@U z)oS9ic_q0ol1-s#3iAq`g9UbIIf(~rXI`~ zKld%}5-7Fe@N<#rlw>FHP({|$EAM)+KYY-_K%>krkS*GYzPJ$}qYI`fmqE$bc$#`Z z@9cJaPM>A;)ZKN8+@dOSLNhM;2oYiZtWjB8a}GIAb^Dkjnl7U^2{wMswI{O26?DBl zlnB>l0h`!&(#udutvN6(E?M=1@mztWM4*AL2;Rpr&AbQInukf-vm+)N^88%sRmSRDySIMG&aJV!SDN2cD>yP0?Uj0 zMy{M*89qCCZ#H7{8*rofNCe;u8!zb1vhxb3fV-&=RzRsz895g`(f&hk)hCZ>kcpq-{}o zqAC(WJ(trQB&3_GGdlzCnFfvM(`SedH&McqMSIX|gT0Qf1e;sYku2#xl)q;#fPz4e z&ftfiWw2ZLVibvKz?HXN@@+nwa_8W3uowkLW$TJa#P+j>!=);u$6?d@Tz=iWnIkXZ z2J_-CjCmZ~57L1}gUr+4?fay^i<{f+iwm?SU{z|{&Zem8a(eiU7vX~`-_c#KHP*@P z(h17iqnOQ>b0`@`Gm`prHf^ebvRq(yY$$e{f~7A`tT0z zhLoehH(Jcb3Viqx5!M>TBCKvnddw4!b`r5-2{5|?YmNz@r|lg#@;#)zY|#;0Cpl9@ zkw*L;N&XX*L93I3ZI}7w2=VvnR6bmuxyqpGbH-HQpi!)qg|m3tIdPX&$q%MLCKPeHD@gjcBDz({fOFfbg^tzYqsxQ4bh zyjP!hyF5_Lu(QYCu&d_@XelXFV(UjtgVw!5Tj~Dq8N4G?_J%~?idkl%jT@-qs0kfk& z!*;=FvCN`w;gUBJ`@dlV*eum7z~o!7j{elS*Qs9qy&jL#oWgL%92-Nm>^9av{tkC$2*9 z;h>GZ7|3(tWJ}-^keN4Y6QycfrrfzFG%x?cV?dN7=ick}4;heRuq)Veg_-EV9}yz* z*5%wM#LlT_-JbxHApdxY=x^&F|M<%*{a2;e`F*Q%bj63n*YIS9j?iXz_@wV{h9`!^ zbmgo~TXNSj=Uoc+vwU4_V!~@PX*r7$V>`Y8!a(^^jd)w{Ivdwwds^V-&9(wvN@0J- zlPwckuN-nd)AP7hNU%&rLF}b;oEyS~RX*&2Z@`I@!p0e%G%RZ&=S_RK!1nPKxiWv) zU{tPtkjuQ69|Y6o0O37%5Q}#6y}8)iQQE@F>#T5|Q=iO)8O@)?+C74nCV*edGQcp_hK67EI1H5$-T%2+O5UgB%~pnaVCJ zcq6@(qW+udTq0_`ewpNs_^kH}sVO&8(N*4@q+_97iX9w8W}}`uMC`8J0z@GnZgOOY z0lx`&n*s-wEWd5??Go5Ts$9-DC|a{@*?jEt)CpCU`KoH$up18b%Qz%nym{wj9ya|L z%jnU*xR~!6YMrJ&&z7V1D**&Aw+jOM$P8&KTAtkvtDVlJ3>6yFVS9HsBN|jex;`)7 zZC}xSwj3D9xZmuoMy2?uI=Lo~JOG=L7xKAQ*#FX{dsb>nPv88;Z&|*rGcY(?aWLsK z-^7Qun*zts8+iv+qg^F+4Tx}leNs9 zFo7ynZ{7F?E4x{T5aky2=s89P&Fr-Bugk>_n3P=k%NHd{mrWqv=}_jc@|LMd+_c^q zQ208rL{Unj*qh>ntPN=E+(XREJt)dC7I}k=soaxFcHN%v zKqGa2mZC@1mZ0ct2cl`H$AnY>g8D_z>m{_^d8LI z9aK&BS7`b-KV%gCag}R(qR#8POT0C^n@t)`>!DF*FI&JWh|aEQEA3@kYaYVjso*ioKIfLHc)7=^&&C}TVxn;Kr7)?chP@^td`6Rp zJyq)bt>ZI&-LQ)Lk11OdV0y>jER`33tr7}R+!V&(l+VwQEuScPne3V*Lxse9vjrsPwm(fgXubARN*tZL+>PYF-r z%2XKth{18F7fHYct~2*@A94rH?AAk{F?y1UXen_qV|MP;M7bBmu>q#Ua1qcvfPfY? z*sb;71KN{`2M?lq;5xKozS5^~}-hG$3d^p#Sp+fnB^_;Hkfxle8zB)Vr*xlXM z-BeL&zk?pkn|C00wg244D9+?%*gI+_9I|k~KFb??g zmB&cMZH;sRK8;F=_FZFi6^*Ot^+(Tf(~c85_+w~~zH@^N%PjM2_`Y3>8ox0 zR`f&1!Txhcv0?FVSbs}2%5>*7{HJ@YDtau*B)QYHD9&La9O7U$c7*>jK9EXqIYQx? zr`N>HTg9m7sO*fK4_A3R6x1!`&yn2I>a*w#HoLp6&3Ukz?QCnCjF(vz+gI_pTQ|jb zUJ?+{zI|;vPN~l)-xXN;qGavfVeZ4nO(lPOFeToagKGNg=e8YkPirHStc$URx4N6bXRJ&i96|jZlrEDcA zU0rFM0HzmhZll2)9Z0n~09;BHf9KUp}O&L27ZSIp}SFC4qM7#R_%5?Dtq zYrmadtIG1O3sAjqgiy4FPTS_>61f~Irkpztbyu}%@(g)TD6!5N_ER&OSw-A5)uKIh z7EC~!KQ~t}X9W&eim0zUbcIp%5{pcwGVyLb znaaSwIkJCz{KRv)xx9MsHzkrx&c@;undK_2apTrpe39OjB7GfVoI)BlNp&gzstOV4 zg!4^VyF5va5HsH_Ea>gvC{=U@c?j7QheHHQKvE0A$y;zOvPPh9!dOt2F?#d6P4-^5 zo$k-QVXDq(lBUD06s)gYZ5|C+D40T5!d3sm`IY|V{OD4QbHF~su7d40^DDMB?}wIR zX&T*ryigiQUG1aJBSBA|9PDHyudi13Pw(*;)trTUm%?l*gll#`v4(Km;Q@W*1^L_R z9c{+GMxQRBKcAJ?MBC1QuTR_GHI}UqLR!Kqy$>o`8)_4A@OqJ~G zYPWSw=G~(|aXqS1;tDeqYUWAGUwF9$R%q_^JPO#Va$V{sn?E=H{=NjI-2){rtxT*J%U(_RrW;@>67%o;N=?)=#fzV5BDJ**tltgpdCCGESL<^Ms zU;RXOM1;fbS>x-FqUxk~PwiL!irue)*!}O@K^NE#W%IJBkMeDRWOhI42>*oYsYSrB zDJz_8Y_+-7BXB}VHS!bxMCnUgN(Y`o2OZ)GG!RaVo>HY*0H<5VXkYd9xguT4CYp{O zMd#*y0Gl(u}4h=qHVhBM9LpjxPZ5zbaZ zj`wz1=JiT!pVy%`Z0Yu0Z*_-%1nC-K}RAug?Ve6Sh>jh2zCeCN^ z{i!&sI!AM}_3dRdVyBb~XIxWqzf-k~P=r<`asPph?0%MBvh|1)<_pBbsSaS71ZH11V@mG>qvZjl(YO@z zrs2G%^lFfR+mV33gXLc*$GSohWcW$i%a-n`bRs4rh(WN+*eYs}DzXZPMFslkPug}d z&M<_q%i1ca$MiJKL#4xmT$no)50B#SP5HdVg7M6SNB!S%KD(UdZ_Rr{OQGwl>Twi5 zAzq#v4X*|W73t)qwL2}lnU&`HnHgn`2cH!dfiP~`us>ewv+J+C{JTy!n!J=iXuzLr zRn0Y3nk&v!`Ojc0EF0!|SHU&YfxgtOqC(9nxpqEHToxV|+`u7rM{H{jQlBYDFfV4I=t zu^ya{dDh!En-;X+b$+0JknhV4^1(Y&-qHAKymTXK5?;pVpQu{z7V%iMT)bHzX+0MU zEtqxmnuqAD27j-uOw<+OR>9LCDXpy#(oF*m*f8+I>!n*d{8+>0+H{zUmiJC@(sL$* zFV~fZL~mj%vuYhp1OpDj^4fImC#DLkZ7`ct%T}z623)w_y>(D z<^UPx%jIFrAS!YU_E4c7Q!RJUJ-bq}+4p=>_V~!WZO`-zVe_DY;WY^*yt)2IWO+V% zq|6zzw*r;VlY-(tu<~$kH}Qouw{U6b2wpxb9?>LeyS^J2m5GqEd?Lc7)X;6&7D^h1 z%TcQ>s22J3a^e6v0RThRhC37Q{AGvMsDS`oNK9SzOZLj`Z>0}hpQBbK(+}56+w~4P zM`5kTeHfxZwC*#P!!aXY?6c1fkJI;e3F`#H`+g4R7>VMq7y(p(&x{c+_bupiYQkaW zKx~<%3~3;qcb?tL@6BiFsg2N!{xI!`^#_HMwo=!pjPx0!mZ5vJ{o3q97ea zL`6VEh_s-fR3XxPA_yWNuxxY)f{4;0y(fwkrT0!^Ksq6z2SSoF<9?T-d%wEh^W$9S zJKz4p#bP}^&zxh9a*unAIcKr6mzLKPWey^$FGSK?lAm3~Hoo}oOlv4#F4cp%Oh~!=OpwNs+jJnj)5B@8K zcC7&0tlr?Pii@k#bqu*WsDzN!G!H%+YjY_Jx(?=b47- z4^Paq2=Nk^>iHZG%q#@nC1lcGGao=!GqV_V5RZmKv@bUpXOEat2Bg&>#8y;X-wS~)hoey+1rs~R$K!^}GE%EUt_li7V4 zeXl6}=?yAjPt|BgL#`-udZtmI%d7g89#J}nrJ1A5k@NmygO#)Rz3sfGwVyqCCposa zoina9Rr|$jNRIK-Dy+wJw}di>yVT-l;)La!YY32CTypEluY8=_CWtYak{h$?6%`94 z%DUd2S`ezac-Xw|(}ha+=~y_paH{>KNRj|%y@_ztAiTZAbYQ;xXkR#90O-K4`D!?_9OAYr;1z+p~>fp3>K9Ce)pY7HZ zclWgQtp3gV$)_FFncXJpSFW+|z{kBlo{YfVohx|LchEN&uqj7?`gr2^RF&Hh#|sYp zgTLLNM%tH?#aQq=c_c0#C>+&(bp^X`EAJsyq}{U{E(9sq>~21pS4Xz)t>H{Nd-JbR zs!=$PolD|w%`N_fFjeav_<6w|*umI?w99gq&Y2<3{mS;sAJR@qa)>_KY00K=ixSY# z23)bg*O(1(?OU2g&4zFP{cGn%#u(~@DrXW`s<0}9A_)qki}Igx`L@#3?kO*^apQt? zqk4Lg4Tr{&936Ix%bDa|o0wezk+iqU?U)PFTjq#nd93qeV%|dYiP45)wHGT*&!%qF z)^x<|vsAqfMzHCCqWk8+yXQCmi&bbk&-nTRk2p(%ipd^UA*Ew8C+@1|o9&ITR`^pD z+0QCv9IKAT*P2{PiB<%=5XL?pU;DhJVdni|X4T|MX4hBjIWC@KtI<^f5a{lBS=c9~ zH1+cW;FOfvi9v^~K(GXoj3pp|C7Au=bK^fRLDQwr#7x6r6xx^%{mvSYtgKKpS0o5B98 zXa7r*SGIs*G4DK3@jy^rk5MD}#k2n~LTw#@WTC==q{GBCe!+iBzP!x9pn(eg z{lp2*pnsa?zgVIFdrc%xgPD%_Nc4i2in$SU2A$iPf&E@F7nmrn3 zV+S$TI%=1FhztCsnp+{a4!R?xa9OFlT2O&%;GofFcS%AowA+yK1eai|GUB2V>$6bm zI~zXO;(}&Vwr)<4lU_(zpsJg%Bup-UN=HUUUM!%FbU}J*W z>b-yc%V8mZ9QBT7-V5#6vz!+%wrkhoU}|C5*6UL(lgXeqI5OkDlL z9`+a5xCg5{*?@Y6jHkJck#5d~o$fiZ%=JqX5k4-*7-O-l+;+U>Y=xM6pF^a@jMDN) zqGgnzQYf{E1p-w%$tvf17yHs@Wp?hPI$Lc)ht5Fv(TF|2iqon$^7eq3j__zpywm^*_1yr4b0UEaKt;5Ihk#NEl8}@h(sz!6%To5N?4Nc!JTeN=YK8J82+sQ z0GPz_-zS|aiBO#CEg`oz%sUmW&o|VJMw`Y&53KcMqG%%UqJBt2vboC=*W3tJ#cul9 z`gIm8-)Z~xFe&uIxskfMYx>%!+os(O@1Ix1MVrI-Pxie^@}6ogbLctn-@z+}B$Lkp zRP*9;jv84A=?RXW>?rokX2W`TEY8U3=9(LxSt;hJo)b-YCbTx|f#F*j^fGas?sf=x zMMP7erb_d1C8ON~!>c^BB+&fgx7=qjSHm5K%qls%IA9kR<5)I%_zddmT&DI~HILD8 z#k!gNy4CSS0lM!IT^hFhL5L;{FZl8#m*QAny@FmDs(&K^hm|%Re+U-d~x-(>d+=OZVGkP5HtkmJ!c~hKuEy&D~?u!eCF*``QFHrb&#RO?u*&Zn zN#3AkUQ@||Z^<`!xAI9z%y341_BaM-e#4*qo{i_xcoLt^U=n=3T}YI{u809x7 zNxy)~mx+nO>b7cE9NT`mM7)QEnOlyCjteV>2R0Q? zKpIN~OX}|RN>kF^DJLn=6NL<&mlw)VV9-yMb*X|A8v zFHfhDFNDc(>@3dY)6H^7O_K5(_eJ?_AC0Ct5rt|_L+CwOYtXA+<3sL|3d9Np!__`r zOJe2n5gK!HQKH|k=OhN^q$s)~yxu>Z6G>%L{8MPZE%ypg5ALBdH~SM;1rh6!xqV|M z+-?ZpMYa)J?s;i`w)_ zBJLU!zK-AR+#)E}hmAZ>EXKhVqKs&n#78Qt9|F@ig5;KBWxiV7MAa1@ZI**<5+A^Xc`k-!j zJ=!QSN|9JT+U+G|D?=8d;kIxDPS$M8tFlK`3W}lfyrD}BKjw(J?Ye~Lmac-8%udNz zt4pnp+z$JLRur#Ub9N{7?S#EWenr>=qZipl;l5~1K|gV1ka_7c)Mr+(e5S(kveHuL z^JAD_TFB+IAZ>l1Qp$w4U7x8W(oWbdYOh}D&!NjW0gv@%bP?6x*E$Z0X=qcAHeoSS z#D~|tF#48-jDmBkj^#7g{5%8ZdHSwSr_-!#^yob*^fxtG6I1)~ku4-)cNICwdH5g-L}s zpi1)Yq7)IMvQ(#crQizj+(Dnw81rA+k^FfumQpYl#odvoQWctfbq1{B9r^2oJTCi^ z+cevzHMPdwCe2e}B{JM5GxSjECH%ZtPUwg2La{_iaQL88V;fxp5>dRQP{TQ7;lDZ_ zdGu9GijB`^e{^eAnlYY`!hn>{Q`WbiE@X#PO!sU6^EcC z4%3(f8wa|#~Sh)bH1xR$d24v(NoGkml1V zq63=>wV;GntLFq(Xk29CuluYI32U&Y(f0JE7Fp~=WLAZp9u;`b8gPDz__F;@Tkb`Q z(Pss%NWsG3dFuIX_+qTP<_vlq>V;I9rKXmQO^IDXt$Y$iR$ElUP5Co-SMgDON9rOY zolt0A9JSda)V`aWRgv7f&#TGJYsoG%XYY980c2q}3tns%mDg{L}(`YjJ& zUJtDI_zm}_Mjlz#f1#&F_5r;-Dp0G{6e4gq5;`h`&g<~i(fKl2oUfQp!&#CTO3hvb%d;=S}~S0YxaeFbA3?@&}=atGlxTRM@yYFJZTvHB^s|20 z3Pxz8HoO7z9$Z*TzvE=rcXBG6rK%(7Z-2qvbJ?G~OWHLO0`*FJt*ezz2PU^b%@bA> zu&G`+G;qtbGP|N(cUTl$qo%K`+$cNA#iXvqR3ybI2rLajO{kT1Z4niwa#aLUFCPWIZ(VaKB8@7u!-|fuc8|`=juB zYNT?6Hf1sVR6|*zgdg44cNxLJr?7TocI@kMg_Vkh5i*CaBf&j%jR;>UcVgsYh%m{k zok#zB`WB3}H5VvCV{zs-ybyd*Z*i>+f@_=2?>l_rOKqL(6M8wTDnBCJH%(&o|;huO0UQFfZs)NizF%1rdd$Cek^9Y~$>7lsfcO8*+;RFB3IP6>yb*|G{yVD_ygEzyfAi=S z@F1&)A6?{32joT+lv{*_++;r}0X z{r{Z0A_wo2*p%1LVBzDH;50Bca5I2%7+{n<=8rr7sKhqf$tJ~)Cz?9->n;yjKQywA zl`8|M8rW-h{p=WaGYVjTJ#}GMo)v;so4_y~$@pZxA1q?R#$V1V@eo>?Xe!{hpZen) z{9iHL9tz>Sy9$Yz?DC|m2z}Y&nImTvW@MFg;uX@d|3d!mJ3rVhiNJm#)7@`zPIRu> zhaMt}UGsqJOE>i@!H?5@aS?p3JU=|Hn!FP@w)|*$KomZY{oJ7=?bb+7Ogiyl5$wkf zpwlNGZ}2q}7Mnr%a;i8rTS)%W(Nfh&l3aFH`mqY>o5>*Zreg*JNQ>H}Tm(W+=)z7Z zveE%^@f1C6aMwn|?dQI5lWcBICL%f{7OBKlE6)Mbh#%{O{-{I1=z0$q3s;=vQmtI7vEE`Byxdrf2)D7#i|dZ1qbZt^f@y4ev0Tc8QytZG zi2_wyzUMzm^WM829@6_8)!cNlf(H(#-`(_M&@W)KP|Ma zlE=IxH&qSx!+5SltFpY;4Cgg~4D6QaO+K}21?TQIXM66)ccG&gJQGJCB0G2F2f3a~ zQ#EGwn`nKJ-Mkg0aZ&mM6D$9j_a`RMfoTaOq{|U?5 zY6e(xR~ow{md$COQ)(6FvK23JX6DC;=l_5aV|CO#)$5)$Z%{ko*0gQsAMM)%tC%}q zp5&BMIu<(QK9F4_7eM0X{|O1Isxu;Lx^Tq{%S+Z9hd9x`SyRC6+E7CZM7Vu^0-P)8 zd0Upw61Vc@V>;R@=Oy8RpHX=CW$uUZZb?qAr7U#hqL2`lw8GS$Yd zc!JQG=8dd`YCcQn_WmXLPB1eRL`UI=;S0CILFl(S%nYNybK1Uf^l=8sGOam1FP0V6 zJS(01e*`=J%M5fSt>#H#ijdwo`qr$?h5qi9tcBw{s-~ZJ{1kNy%t7pq-BC55ayLP3 z!^-$ualPJMFzxnQNtYdpN^sveX~5r88Txmb9ZT~c*|l->r!rL?lFd-+1g`*+_h`Y! z1qH$;Fs#)ofHd#FP^Uu6UB74i!@u=^7l~LOX;07EU7*GH{8~4Vj+EL}jSZs$(%}6Q z$W(Y6el+zWJ9IWB>iZh{kFm1{%GUWTKl@>@t*61-_4#lGMzcApd6tH4{AQfGDm#{+ z*r)%48&vIKU|OO9J5;#@d`Qx616H(Q1&iZSVXb@dhhdrN12I-Y)I3)|a|cG3zdrO` zSCi#{i*A}rQaZG8Ety@l!Hbrm;QjYa{!dI~fG;poNJaSpn~ z_8NEV1gB2MJ56U7*Y@UGS`L;tJzg&NAPO>0&lE44NXe}~mRW5PCcz+9GgFIEaTP0A zpT|iAP}FNim;-wM0(}bv1+BCQITZDgvYxS2trb2iC5MGm2&>ezOkF@N=8h-%6j9_v z;p4^|yihA}g%uJ4bsN=H_1?SUuRSk9K$yY~Fm~EZeoHL~6;RjieCw8y#dfU$fzRNI z(ee`()erYcTU~C0*at1DTo!En1*9cHYvA|H58`PJ$nKImqdM(0w!Dyz- zi04;UYWZN*N7EDbMk<0`?*bZwPIUq&x~}OLzRus^npEq6cU0(x5P#4m)npNdBLFFc z@54e_W+9n7*9Y%@*exNi02tx^(;wuwH82T!-l$max0hJ6wYP4T8-HXOA$OP&(~9Co zr5k|Yh-A_Swt+j*tT`Ck+N$^r7)oAOk?kw*)HSXAcd*jYD8;Q(<;lVomo>ioF8>HF z_CSv;6n29u0*|7q$?)N3KvL}Xy6iNtAhlq2ifSJ#+RpQh`a7?38F#H{4_=%K@n^p?6-P2ol`FPD%L8l zU!7w{$d~kfu2r3lYsofb9&9|o66LR{u6c!0kj+%b`M^|1!??12erfW5*0O1 zwHF)gwFB5|;(5Z^pH?0ZT;8K=z$fJNa|EUnUDJ;%It)0LI}G|RG}U;N48*-LE1maS z8RF3t^tyFh)*a~8#6U4D7iWz3XA*n}jw(!*oH+m58$2RwuDN*Db?6 zm%1RS<`{U5+cx~Rpv~W$i@y#B5IAq)&Y$AL14ewf3RI;eLzY?hg_ALNWuBR9n}$=1 z(n@s@4>SgnUC@5XX|YWc!WvBj28Y%w#WJjZ(q}~f@(B&wf&Tgf>JO@8PFT)QaUM=5 zKGQwjbxk9`;0rlf?S3e@E?lW;+0j7(5c%`5pC`$CwZtFewA=>HuS5rsZaq6o0+fjo z=9zGXv1#l#r~U3FPy=0F56A|G$#AUUz?EBv0_}KlZO5yINVtJXRf6AnC_JWj)l8i~ z9a@DOyRQQ+m56xGmE<#9+UwS17N!o6r~PFGLO~5YmEtoNYkk-gs^E!`KV=IrMlQpUo8X6<6}5fhvmW*ecU9kt(J64kD13%$g%--XjV(A^3+(O2X;8& z{0hX?)POw@a`VXdC>3)KXye7L#Jr!BbQAdVE6Po{QMnR`#BO@IS~+unbCED|9Ir zv1VIWghrjgHZ@PK2M53F*hLV9k>^N~KUKDPg@H)efk;H&02t*ROS&CxCZlr(ADEJl zpiZ0T_F2VqQQi>N7h23`AS~%g-gXQ)zB(&eKC>6NoHzV-ABj;Wj{8xS%f{HAhkHaU z+BA3)Z7@ti;PkJ>R&}p(U`BPvGPABGbWG4fBQjY6NXK?*d`A&aFQ~FBhkQ2M01Fs{ zKBWr6^8uEs2F>>B0Fo4D{iMv0YlkOb<>y&hsz;acZ+Gn_C5A%EPvocEg?zy4zL5L^v+xYG@@Y6S-5*hu5>olc+go3?i_c>Z{kI;PHP(i)JuSK+a0=A zu*;i>tqh}H+jsKTg-83P52G?!b4^aI;dFfNlU(~jd@^k`RssIa;{7%r@#!*+p*@=X zdsc7=1hg20mb!j>lo>zle^cwSzjDfY_ZQKZjJ+&nKhXtwzx6z-?fR!G; zUKunMJ8Wy^z2s2=Fw4gh&;>J}V;5Q2jbQm=?n5YCze^CG2X4ZhEr4{A%WcDALcn5{ zVsn1VW_gc-#XJQTQ#}L7>)saDhahCVT(1u4?0(S3NXCKRDLpeCDwgxGbUdlN7kM3A zEP;NwTXyic@;d25h3y)8<%yQ0QGyIWVCw^4-dH@LkWjkkGJqsO_BrE|XEx~FA zkRbz*Szy|zTmlfTt$2fdq2C90`0+hq-@Wh4#ecGfd%zmhfi*<%C?Xo0oGN&SRQ zaIAEUOS4=UHLt321MoI~f#3mX~uI=L4_%FzA2OMzWApN#NrnnK}= z0>t{LC?h1ufsd6tfkA1k$$0f!#oT;Q0z9%s#+z5iK>6RXVye^CR{oE-IpO1eXXv>74 zGN8uX_Ua_p0{6b9`u(=0i+ZW&N6T@m%^nB05xN=@A^mAGZyauCCYnLt08@Sr7sCXQ zLIXF{b)SMlsq*BE*>@=L6%+XC0~0ySFp=|MI)s&q7SI=R{qFm14GOQ{D6I^-i1^VJ z900CEn1Vk_7{5&GU{fT$<973-EQc@kn5%#Qo|K~O$Dueh@b=~h3y{lbP+7#X*y{v+ z?o7@s@<2Tg0GAn@LI7am2@}Egyib4o{EP?I%Nh!?Enp-%pWojXE0=%+2Oid(FQDd` z{cuAgN+QVUiM}q7Kfl9+uW*IIJU#(%1%Hh@5b4%!^f>CYu8C2M8MXsq51LL^dqHpw zJ8X^ga~CgYJzE1mb`60nUsG*KQnCa{0UYVR`sY<it-J?-;d3$!|BVbY9YkSJnUy)Vd8B`|slmtAsC=p0geSj5cHmC_1>8u^Pw{8SpkT>}Am2MEZ)dJgO~&?Qp`kdx6VorVN}Mh9!)Np2*1-wBkp)Mw{mQx_fmdN^U3OCw8>z!zLdFFRa#b9Xs&oesmGyqDzlCit0!Nkp% zpef|X$>72&fOJj}3OZ^*bWWm6H=XM6O$|c;bD5iOkQ#5uPQTqVU~E{Kv=dmPcg~yL z-wY9yGJqu#&zLCv1Rx_AbaNHZnw!fGJE|IpIzMa$kq1p8*j%6kKdPDl!+EHA=<3AJm<_rEWVWj@&E8+-aR|bK8pR%u~F9?WU!5~X=%_{1*8%^xdqW}z5 zn_Z0MWgr-*ky?#@07HEmfjh~aNC~S2NyFYSiK6SEkvKa7i?*8wOpJziQ92SXPxqrP z^@vc}OhLjEdMN7pLE=JYH-{9kV}MFk7}48vwsd?LIKL)Dhf51+0hxP>T>rBhB;hf) zql^y2EjN-{q;S9=;2ySo`VMs%{ML;p45|hWJj=d2F!rRg0{~rCPGniPBsqbIU!?FF z4t$tp^}{_UtQuodP~9w(h!}Z*wg7+<%sy?aN3Rz{RRa$f9Xut$dW~==w}v|x^s4u` z;Q-ebgkutLy;1?Lr84m7%sca8mvl8F`T>A_$LpQo22Zpb&`7e+^nc*$0iCPQpz%S` z$F~u%TDtfd0QFi^@}-;4q?$=*>A&^;?9WsSXp8O?WRd$=f=lxmkX2Z`2;#QOG*Zs@ z1#OEF0FS+Ga-aOXHjNSjskQZG5EQbDw57ZF`fv`#L)@ZCp2J&vwBCCVl+w#^>tnJU zeq%f2^*2z?szV@mEqin7r_hR%XYiz#wt_S}Pf3jo){B=9xZ|zz<}@sO3foqC!zK#rzn2G8{W8cf$k za{B>P@6D6=kZQs<^;|J5r# z0F?0H@Q(Jc+(+vfF`3`%%j4%m4D^!7_CbIj72eJ!Xv&WT*`fvb-mzu*HIPVDACAA%o}ztwd?ZpOg7X~&-R8G}3Ufb)usyn5KR*r{i#wi701Ig* zjzTbN24S&ZBpf@xbB~)g;{YE(3nwRh5By)f;9&*^9^nB=#(VGkBu?J++ihY43`hn-*xovB*?dB`JPWp02=u*T2>k4-p`7%v-$r{Z*}skIy~w#t({bs zdo51@4q>?97hG7>a}1!b!a#EH8F1{-nI7);y|W_cAAQV(n7MVe$C3-jdpCsqua%bN zc)1^HRa=>TO&E3Gcy@r|>nBh!nHwWRAU5TTRXe4s zSrulkoVuj841PDAF$XZ(>C>U;FBGwy5(|ExncSM(JaBrD5>NSTnZ46Qw+Sp9PzOc5 zUo&zy?k6n(Wh0AqUU)54cJ~EYZBUC&fG$y6E^_>s^pYfi%dwU^4>&3L>D^WO?D172 z1q6^+<}xViQIPY<)kX-!M}uPLK0e2io6sC;&wn`#3uvO19V5YQ%Qh+Qw=(xpSxU@# zTy$!|cgU?L(Z-xX<>p>nO^b%|0?!9?()pTzbLFG$R2LIrxM6X^zT)PYG zjR#?Rd_2MBJj*12@>3xRlgBqWXLC)UtZtnN8_Ez2AdMCPj&X)TCNWtmsd+A)#5YKm z-$}SzwL`<2u_NlB#E@Cv)q&M(eDh zp87-QT`Qw&)KY2bCw@VmQ4F))3Bdi}Ke27~QImqFY_2E*Q(2w+FPg1%>Oe66UJRW| zG$Ew6OHw0*RM6hV1*YX$z-ytP1z;i#DIicX+{aTL`J?T{?>l5}yt~JZI}Wrmdq{n0 zex}Qz8|p(?Pbvd8WtP3c+*R)bPqlk{*Y{e=SBX!YV{kDNAklQ<*ja`291iIP*;(jQ z5N!nt@iX8etUYx?2w&`BKRPAOJ|~3H)O<#iE91jFpq9lAO&kij>oPssm)hM1`ZF;4 zNmXm7yRWC(zyT>=2Us1wnPS5;AX%{Je66>N2X8yEwoHhR28oD$kM2_THvD8S$mV%~ zxoI{6JYn0jL4>MIAO}(S!ytNtZ2DlY(^*ej{*XGBR|UvA4$!@N8~PlLsRWP*BIKy2 z^I{bV=sIpUTWdy&Z{`rgs0h{pGmRJ0#rxT>7`gt%byes&%$c#YjQGwO420k2BoG7) z@7UD~=0*{40AND%o8`sqqVJ?? zK79C`9SoFELBH!{m|+jp$6=R{vLa45KfdLE!r%4uD-{?btwP!O&%8ZjD${^I^Lj(- z_pS$IiwFmK(Vr65i;^H8g!%)u;4k6|6uSFv)7(dq$Y;nikNf+NdxHu@F7S;!)@DvM zTqi(u2PIpRv~v7@a}m zyByIhNu6dEpp!N)iJp+6g2pw#1{m~($2*oCZO@u4NF&OF?_&<|+6lm|qE$B$cg0kNGc~(0+24i#qN7oqugq9Ga))&TYJGr=pP4TUU84m4d z36i@=ud&$l*Sff^x+^kwdf)Dobu`sOR*hIjDiyi9d&emyTIoTG7=$}pf5)Tcg0#^- zP@ib7$Z5BFZeSP!YEBS$lXaOqjIIjx6kX&V@Ywk!=Z&ZQ!cTYGq}+t)f>JasA^+ zgfgRyobm~zo&rZdW@9rjEoNrOs9i`vSdKi^RsIycl@7WIGTFwpLeqWXZC}M2cS49S zTa_i$p_OUhIKyKZl*>3pT^tt@xT%cz;v-;X03j;AeK&7s3Z1iEs`Sf~6M*&8VEKdu zlCr4vwTrpjev*iz&U%<6SZ_Em#lIHBCccr^JU@cG<3~YkiY)_1G10Xh&)8*mr=ab; z#tqZ*3NJ4y340)%X$$TZkdc9E@?fD!+!0i%O1tFYTRxAUr2m!O@Cik~F~Y!XM_;P#BeC((j)09=)^O7a?$ zp}bb^{YX=$kw-4z4(UpFGGfnE!-jbj2%?`w&97Zhmb8d?GfZ|Kd&8vXD4 zV*sOR*0~{AwekZC81rmNdh!D{D0{_lMkwHn-UBq|p|_!;tm*=kEq+AF=f@4m6LAbY zTnWfyCO}yXYHVapn?Mc%i&&XC`hyN6+XL<;f8`iJd!Q@TnWu1rPd^n5ltvDlpZ){y z;Ge^wS+SWwqwfMB`~Sj3>{%UkH}=x`N3efwurw?#90wN!nlHe;!5+k(sg{cyq{E0D zs?$K;jpy01YkxQe{;+n&j5bDz$Rad^(KYENrn$l4F)UA(k@^J$kYMtU5_G@OkAP(# z+rwxs^qc?xZ`-84do6ixWTaX@xCZ1I2|`eK>1_+bX#}*}H7`?PEKq+qtVJdAXnNc+ z)8mG`7gS?%0=R8TTeVM>(x&UUrgL z+g5yQg_JHsfe~&H5BbzQn5O3yewg}ZN^$2H{iiFr_P^__eU>=aiA)N)&#IDfrql1i z{^1O*mPpW)&E@vg{^pQ5wX9@GOiEb_IIdR~nEajUI&0dBWV&Fz6eSFa;@;wcOKUPA zQ^KU`-ceZ}NukLpHnQZuwpf(jjykrikkWE#9CU@L%^*JRnH$!Uf@B;fo86!hYcAFa za7i~Fr*5sY6GPh~GHhYvF2irF!u~m8jD}yz%is3J);FJ_ zed!qX$5GKWFGeEd#o?XyA>3|HN1DIz2GSS8Wi8*mqYkIio7#1kDTG3wtfG2dlZpq+ zpd)xWR+7}LK&*vQg!n<|H4K}6PH2=H=XdH4sjCssUp%6a&~rKkG@xZxuzmw+oktl1 z^D_Qzckmk}1_lUeDw@GrbUWECbUZhFv}I)=vuO2Ju?pB>0C-vWOxZYkuDP7ZjkT3q zTqSYNO2IgRQ$av3SlOSWwbCKJrXHzSw6ABH?o8;tU5AQ#CZ%-oTbrwD zG|yKn|NL7kFSH(XYoR(#y~P)Hofv(lU;D8^@*!ZI+ygA1>eqbX4ou(wdCQ8@aVWLU zewzzUIlk7=PgV>NvrC}2n&2{ngFdX>E^y6s48oViqp(PXfaaocv%42fRi<9mJ0`fd z|8;#LcqcdI`Po!T=Hfs%F}oPI-#Wp~vF*zfToM-`jO}w#-*T0090ncX2iwx~T@Pq{FzbLX&&=AzeNNO~<1P7hx1<}o4%J5BAV zGgLVrHm}UYzqf_D1oIlYBqk}uM8tse32XszqkY#uF0@6uE_;p0&*&O}f8nvu65PTx zW7<(K`8V27mHygz&ii}SQXav&F;PoM%xV3NvhUP^a*Wx zgdXkoBordfgRQMuOy5;M^udKM}v3l=wRiLEV#V+asDbPvBG*?>dDbv)7-V zxqgszFL#*1J*BB^Sr& zDH}L4=sHbs8j~C6k!aj5b>th0*Op?~<<6_W+aZv?_9!!_R9O-|Q(ti`sDdX+T9HN@ z*2<+|DLhS*aw;ZQ<##3m*671nCmeI1H4?N=g&XP``Q~bjy#Bx%G5IR~Zr@UvRQa)- zvaz!DL33D{6L&^4=Xe4_FVipW?ON-W75mesD0K1PK6J;L_wB*V6BD1`*X$bJ!Mlz+ zD50A)Ya4p>l}+}=_$45mqb1s#9B-RstUPh*#53u-j`^fg)~P~*A(jy;a+vU2K22Oa z8fzjCx{DT>w!|+Fy&`jac=L!!V(zq6FgU^Ds~7U$7x#JxgR}hE7P#$Es|&rB#fiqY z+28j2CHH;Zc7eqFZg+yt(tg{+EAcS&bBIG%vF;)v{~{D?6+ASYji8E2!74{l3#8(; zihgIe-gWA>v6c^um*S1Q7e9s(D=3a>$LL>u{eFy`Q$R8}B!>PzU}yD$RK@j#=zzY( z#Bp#(wJb8%jQ=CceKt9;1qX;JPk6m18XBRL4|7hx{VB7UGY0X*52diJvdaV`0T+me z6*;*X42^c5ot{#;a3L`*mMkjhbL%o_Zsj19xA|c`J0zT%VRT9`Q)RU2!3d@Kw;|XM z2ku8kh$eZX zP@yk35`@9*^O*$d0>%J6G&MIydpS~a4W9D`d;4QiK4QKzmTY_}tM;fFskF;fQ zW!IN|q6P9tvkQy>p4s;7-*xUXB?a5;HaT4(~ z=jGk=YBjkctV+UBX5McsFyP<@=_ehHU%HD@A0%)hJjreAB;SSQM=lSL-6^(9l^|uM z@ZY_lxYC0eB~b3<>D|dUz;TZo5+6|qcINgZ-=ELm{2W;}Hb3>j?Rlm;9wg%S0mRqo zhuU=IXfcL_ddc<)}2e=3ixf%yJ)RA-#a225GX&R2|i5bdE(StFNy=Drj{=UB6n@gL?9xE8Wz<6fiU4G%X&~0EhNOM&<`!Ec;0m)XJ|D?PVMgk_9YMqm_5@4&QYPJ-=5|hVBc*xC^MFG#;;n= z%WZAhC+_`!xt@O9v}46lxDWo2#!`=$O3kP5M@^U+eg*DozXk3ur6UxV1Ho$6Ej*2$ zDfHYWH$~bZ?@gz!ST5Xo;BcGI_v5DA!IS1qgE^h)xT&|RYyiWG4aVLnL1>FS;J=B zClxfV0+6a-(C~p`Xq5}$9r7NCv8bKP)fD6gPB+E*bq)^r=f%poDdICBkItKOsnDgR zp$TOsA*DYB{nkU)z3QXlqteO>CNX-Q!@Y$Cz)1jVt1I5B*g9ZnQ?% z9a2d4jVs;3@_!RpVAt4Jlsff$l=^-yB}|;ZL3}B-Jwme5;+7sVN=mmOCfcFv=EABq za*s>PX=|hW6iL5$MZZ)NSkQU>9Uq7 zm8;ibiG>zDiAC|f64kNe2|}_%-agnI_lsZKfTep(JuFS{eu8LqnY+K2I{|Lqu8+(3 zR;96V{<>!|;n?aZ1>iaT1d{TW|4NXS;J;DRjqUdyE{^57wpT8Mg;%Rf`zPMqnf?I>Ke|^h_4M zSOO6M9IrjEeQNglwcaY%Q~%pus5m(#-K+Ga-tDxi1kuZUCfS(b5tO?POBry@#CRi(%4max9VR(2SJg!d2@NT)E-uXBX7tdsz5vp4 zAC-~tmM3~h>0DBq2IVaSM#TmsnV#UV&joecsQItZ%nF#qyG;spfT-{bkm=%L67;^c zJ{fDhkYRu*a^BVN6FGd>ja|9pva|*ZYM>u%*wupj7&gibK(sNk#>M`aJ0QS9b8GHauEz%jHcf^tMl3?3u#XQXKiqzf zUE|S-Hk)(j{=C4kQ+V^Sy>VA*3#`q3rTHtf%|Vsez9x?((V50rX=^KR_2GEz>X1t_ zSx-H!dUuU}LeJ4&v}L;DfRa~)M`DNBxVuNxqGO9Kgr216b!kdgXLk3j#}N+?zATY@ ze{5zJX8c%(?eN^Yn3`8DaB^C) zQ!Gm2nYdBjOYfaR!0#!_-U@uf;mCT|qjx58VSt}JQ2!W-DB3b1ZQa~^NT9#y32#?M zoZYN_=UHL`?$t0%%w=3ED%#x47H0NDp}3;N6MBJbrLgq=-Rv)dSBG@((ZPoN2Z1vO zMCWtyq6OV@gYm^WNm7a?MR!ix*Ka*~{rEZ?w?&&(Ls3W`jP9{4Fln8N)O&fmy}&5X zeaK{a);HYb6cY#RPLX=Nr*h+rl z%3AOFALp+sEWKmv0p=d@r-FDr-%N%8lmgwtr&hFrWh6Q(ys3pBIJ#R$FzaiXW{`12 zw^#B|n8Kaz`91fUF7%yD8#HJvE0-Pt!E-Sia9T zC`B*{#y+L=SB%HWd7#(bx~7-s);`?Z=8~>C!$q6*p+9?U`E&-~Du%uKJ}$Vd)FyJt zhFj%DVbM5YG-uO7L5SrcpXHgOIy_-AJ?K*CVQp=}y-MxlZz|W87F@ZBk-Q1>i;lVj zN>1}H6>m4~Ci+Uz=dbLx9mU6H@r>|?^h^y zNOyDwCEoN4R+j~(G+4|ni`;7b9I(RcpI>~KFX*E5PbTJ6=1`2(A5XKBW^eb*N)hmw zL~q`EQgO2Cc_u6Sn}%fzx@FAGN{y|WOm4(sh}iNpEenNwLRNJOxc^m1snfQ#F|cvX zi&bdQ{1Wb3yIl62q2(Zf0ENSA>YEASMB1Z-`pKcBB1%=>XrAY!R`by>L96+H5^qPx zIv8%y9%fOXJs-MuK*p3LlUm&IIguwf+782%PCiv-54bzV968U&)e?PZe{u@$BrV!$|D^S5kXL@^d^ELprF!;DAfR=w@^e76qKSA=^{;~N{0|oib(H-8jR8; zB=m&NHy2ny-@VWN_BrGH%NRgcV!Pu zdQK&nD{GEROurN~*OE@UCen`?p{j6L9~Z(KjW>vv+z)>)5}rL;EM@aG$zo|vpmnio zKzTIKGWmWOvR|RBD{+5D{zs2pes!NzqE-5EO$-6T^FE-#jeE*0T^pmTIVW&NeTaUM z)aPzHu`nI%F4l}{A~Ty`X(p-0Tx4@#khCl_^>pbTr@}tOehHc2Qv7vxl#WmB?X5+s z!)BT3noUt1S)u5^_L3X4m)xRRmB@+42ZbH+>_55&2(?Usk-UD0YP^xPPI-KrSQ zHaaX6b$f zN>-sAh*z;X`edm|n`zeqJJ=EYUw3;Oy4$F0|1!Y($(7Z(^ zwB_r0He9dEx&9*hYIw^@SbcRtYUTBgcYUArDA6C?-)rpuwG>}Oz)}$CK7kMtM_4i7 z`zxV*{=8F`qT&R-WF6wViM#e!uwSVy_3fD_&*`qSn>NLT$#t#tdGe@h@d7&dW@o9a z^WEhxNB7mvN7Sulh(V|4B9q3B!LWrWIYXpZs_R2RN9NT@Pvdf-xh1D^s&5|o4g-%e zd0*b8APYv-hN8%xP9N56b7NsN z<7~eJ;>IUhLm7NB$2)U<64j+~)@Gc0^hJ{}`P{CIvtxoH~W@&TqM=srrlV6~% zPjr8qfefloZ+3ipBAe#d>TI45uR&#yREx0O@`;MmPfWWaICg{Fvj2_$&!h}}kq@%NS0P#Fqw%(2E#*L1j(G5H>(-;)cpPN8(i-C~ zQ}J@<4*6e4baM$}*|G8v~lU*pb8=Ww01y$Qhzq9sXj(XRO@z?=9}?<-8Xs#^c(RuKfs9asT^8Ei%aP{Zi7x-fuERrU6e^^aka&r~CNP z#{QuGub(a`B@0Inn3~!DueXOd*dBU*im8g=(Cc4^g`1JrZhSjkSNnpKfGW;!JExwg z(|Lx-Q*_JkDI>S3YJ9jwPp)z^?~~^POAJ}Yop`wMH_rIp)GUv6clE_Ce{+L6(|APK zv8+t~`2)vGuj&+O)+0740{$WT>q{Ue$6JpMg02v3rXa z^|yQSTmmN6iQ-)L^PTEtdMCJaQ$laPbIx6X1u}+Ell7&LSh*e)B3@q_6z*-L$kgFF z?#wB7iDSRF;+oTL=;@1-ndv&f!vk-A+_pJD6ne-5p8rbTi2rSDD2MWK5Mjzr$+~Oj zEao;RYp%rV#QhCZdjSFAzZ>`<|SbeX}mBtJ%g2&&Q{Y! z-#>Q6VoxZp@8>h@(ChEw36@f){h0wQCw{_%w)a@5fm z9g~i7N71T(0x#$K6+g~`QgQX2a}ectZtUQ4!e1v}_Ba$fczd5LO!Nrs1_$oS!=;={ z-j}G34%BDMt`4ag*B1rw54m2Zs-SW6yxz;$sRS@+OsDB>F)NtB~MaqliIarV79>2G zz=$CtSXbTKS=y!~n3Lt9$SA=si)H;2A~yc%gHu-i@q#Y`&|jG1eui%zSQPwN;s7BRbzvLX>*wJo`E}SWxcUWVe&Q0lybmm zEf_w$Z!+^>er)SQYr>AW?&MUV(Rq(=dgZE?=347latQ|0M|>39O`6MgDU5PB9cQ{) zrWVxH=K1A(t7y5ym2(t>@9hfh$Ghr9^_a63ALp5MeFh65mPO{~hS>=lSB&9o<)>ep zh-ZW~uji_ikeO)<=w+R?jvx4acz8BSt!ktmZ9HKGOZiu+MNt9;@qAHf!6j|q%RwUn zhpQqu^j%3WEMXRf2zex9dHx!cK!^R0j^K51^-+iUfY&eTM!}?x>M}~Mmh-}jBry1y zue^m-qIY(oI3iCDzWV4%QyRgIxpxG{{EjU{S2&>C&9yMHJ3nHgKfg~32KB~iBhLsd z@)8EA30bUe-EVAWg2?N}ES~qCeC4+qYI%&o7AvwW-d$Ejt}}%p!mtD4is^W)O|Px% zQY5wQ*pwlvNT(Ay96#x4=4-=A;RJsl_^VjhQeIJh&DFn;X_opkWbi+S?z>SqmV;8V zg2_K`eJ{bdmPUH*%(JLMVLB<}3gFcman;Uu&Cn0O9sHfKJMWgbs1qq>s4==GE`D*S zRwKu(HXz5P{&>%9rwAzuFW;9o5a?V?UfqkM?>B zD|1f_6x)u3KC(+yesLVweA&Hj{9e*KPz>$~`Q%S7dL`MHY_mA=7YHK1AF4|N)3kF< zj0304$}h+wwR0>MxpVGJt1k-+4!L`b99^_+)@)nrA&ztj8g;aY=2tTb!&fuWOZA|U zRg}22t4ns(RkmfCiu8Rsk_H-m9(r#4ILb-ChOcHhZAZ7qlVE@sg zHK7b$FEU6Bv+6qE2Sn5J!~;EDxZ3%sxq44F<@*Wqd69O*`9g@7CfuQXoZd@h)!b2} zYhkfNA6=IoRzbnD=!?P1ZrtQLp8W*>-KXv^J$UOQ8q`_?Q7Qxn7|P>_fHc}8Fbt6~ zmihedY9D%eD3a71HDfRk7Y52om2s`veim_$e%@5YBAnr#UwQrmI|$^GD0VB?Aj;lc z{VGb+eOsdZM(8|o9g2#T$+24B4-w5478vp(IC@_!fB7g+3KL0(DUM@YDhx2#{HE;o zXAB+rm4h8t%}m0uci5rwQa`UnTMy*(yR5u9Dw`!v!FO9w){%g{ z7uaq+5A1`%?9xmZD(%I^_sxAjBz({brd!17)~pFrR)nistvdK2TR*IX3c(5m_zH5f zS~VP!u`lvt8sDs4K9DgWt<jPrsbjJR+`sYwgr;bIwO!M^Uy2%wR9gjwv z)hg!Ua?h4NNX$@46{zir>@E5ZBkFNHoQVFAYp-U zNex^^@buajPNpyKuP|-aJ(HF0)+lvpltAn#duHccRqi@@|5g1rA(oKijr2Wu+*+&Q zGN($c`D7c5LPPWg?U`Xz8}>8>4d>+(zt-r1CP-6AvSKfZnJ&o`rG&XA`s?3*1i%xw zpuKf3CDv?z1rrsEr}tcrQQch6%n}2lS2F`$l*hK2N)XzN zCvX_?W#NtV_4kBWNVjv5nuQiG%v_`4FN^Q?$kl@VavVXMS($_HACAzLPeMjG;6;?$ zhQ6m<)I(U3^Ig2B91v*BN8be+rrllb-^*KTO!fJDwDz5LJVI6N(3&uiU*nh;Ad**x zw&ifK`mEG`ZOv_Q0*MB5@~&y?aKASb=oekxjU&Qai@z|4yrIi{8_drX1w&ThU(3hf zuaDx6Gu?PK-EP@H!%{kU;o+3^{m|cyxHHrtIC&;nPTI)276jNghW^H{H|wk58+$-Y z2M@9~jWU87SXo&Y?bj?{j?B|X89rBV&2 z?sWMCz8qH*eDDrjI3L-~vQZY>IN_R!pn2@!0Mkxt+J|AJ5?#x_*><2Fm;E!#!D7 zF9elPKap~*3V!T}Q#}kFyBcupEDEtX?xVcR*3y+R@akJ>81P7EC+=N6%6IykB26v^ zyD9!eSam(4FuzX%;k-~ zl*wp+1>YBjqoENTEbgTjk~nAD9@(90PLA;H4-tR0QqCwkG@MM?;K!`q+H39Cs3u~0 zDxcZCN|(c^kLhLC8;^2(v-Y+Lr+qkA?6C4kz~1JN@E@hg9Y;Rhi<!R z5*%tB2#dhzD8bvAsDj5m)P-NEb%iF%0Y6fCD?n?6I)nYz{p*ugT;5p`lu#O>HLn|w za=t$RqBW64&EBl<>iwH(^w1U|TaSt%N=a*E-gRuzmAwakG>V6kYo6s#lpr#L23|P&9!XoKCGgyvYeu1Gh z>*&_9URz`3`YG8}4ZTG$Gbq{M+mOMRT}yMpR|`*(`yE-nP)92sWM(z454D|CeJ|y* z#G^g?N!QWk(af;X)B~xMK+v3>*N|`Q2>({2_W1=>RMc6G7oW7eNGy#7%f0=wMbvg{ z*Or@7;+U|CW7Wi)I=LhjQ2@)MMeXlMbHOs7=GJ2dl@jusM2K;zZr!guW>Rz3dO=@; zv-+e)n`xNu+g0MjkRqjrQikcUQNpxLCQFj#TuyXPx@93#iElMhldjY|z8+N6XI`zB ze?40Se5BS{6#t9O;z8^eMc%v%;nuofNDl}0OVQ9Xj-l`ao(GVe0pX=abq))*OrIqB zK~NrTddagV>nv?%6jyt3twW%#ekuCFfb7C%Y4@V?e)|K{WXILhr(bnl*ROOiwSh&8 zQ>@SBo@+y`-$~W!@LZ){C0Je5GaJZ-bJmxa3L;ay_apN;S7J`QxHPJ$27dw;py@lP z1J^&`LiVu)3ui?6!OtdH^fnaF^hSwH!h?8QZGjbxcMH?Hv_%C3w-)+;Yk`xLM)=mA;h;l8t12ATEy{e1N? zad_1r!^xO$M7Z5PTrax;@)K;VExlDk9o3b1gNaC$p(_YK6@-zHe!7x50J~blE2)A6 zyW4c$m*tSnMc353AjR}LuFoIw;nQ97=g}(dkZPDT6)_spaslJY3HRtl-f)7d)Jhcv zCo|WdTCAbNvWUL)?>Zn`r0ebQ`>vIsyH=M(6qAcsCHh>lLVmBvkIIHW04kbmT8Jk+ z#v|HCV;&AJPnMwvePZ~30AjMv+E8^jGaQ%2`#41(e|)B8SEo87o;tebAPbL37*ELS zK-8U26Qjn%<3f%%dfJkWs)C0^%fL=}#^GOI6e2(1m!gG9$c1+*$KiD=zui^H5}5~# z1$BkfME|+i5)PV5Npn5>1ZOt*#aTU3yQtX(Z5zKXk@e!zgX8gT9+GQWS!iB?(FPHf zPPYYFmlOpJs5U-s=_?)-&+1kQ80dSauNBagOCSuiS5_LJ(nZLu_o|1OZ51!R_bvKn z@hETZpkzd8(-F_v_{t!?SNq&nYExg!-yBm1)Lfd#>f&Nww2rivHBA^o^9#%GkbsN9NCxp0=aq{3OHuf&sbkJ+2XH=IkgPbhWD3R>@*kQ8| zCw8>J7xVTURtAZS`EENLRx9t1%4%ftS)ckA)b_>&-ahvum`4$`(u?Hrq-B+@#FMd;?${_7HYc8)!O1Q_li*3MSq z-KNC&N^=FxTW?b{NljQ7vt4Zet)9hBdUo)%Rx4M*Eu0e>4gugZDkH) zlEqn#$V|{Y)x$K=RxDZ42er;SxmFqACdn(JiqzESN{ZEOOv)D3<*I zM5e2vA;JUsbunj1y01VPv^x!*DMA+cZ_P4JsYJ5jv95i*2SmuZfJndE8{l$%9SgyW z%m0qX8`o<--aF7_i(v{&HpQqmrL1BYeBcR9sRLP>nze?HI-6djbNd{}PlJZh!Qbf9 z(6oBel#q$8<_0rL!z{)FV8EFRB5uR zesM?Y-a6HPmRdil4Sn#MY`ow|Ga=fpKKIUXAC6dH-#yEJn{QTHN0w{=A0v>Z7h3X? zxgFx1uSE%_v#6&q5aF|XaV4JfQ4ahLBaHe&%C!v2-FCO)FWRUJyDvqKxqT%j+tn1P z=hsORPr~r6U`yR8_mVgMmeQC)upWJ;5Iy3Pd8}Nvh1xNOU+5{uvlNsmg}{gU z5ah@Yy>DOHRpIrf>2hg(U{9HAeqs6R;u{Q6ERbT10*n;?A5PUq^ApJe$b`h@r7FB} zEf_4394=H^eB`>~foB>h2C`c(7F$cqE>;WT<-gmo+b+}E@;-%>Nfj*!D@0Jc(hIXl zxk26R*No#i`WfTs=iQkO-MIDv%yC`{jIV(<#z4;Q=PZE5sD`-0^GS_L3_ptDQ*FeX z^@&s&K}_PO)e5g1{5~%wWS*`E5J#yl#!s^+-y4G?n&~M)oj0 znhbXRog2q~M$ZKnh$-~oDy^x;_cTq;tN(7KH&2w;QwaOk8@TrGMoRv=rx-CQ!j`JK zU}^9rxZ)p6umDd;XS=Y~P5kit&&NvJTX}x!YFM5F>|eXgs7$n&C8X5hfsEeFPuvL{rRmx{lS zj`F-WYd7y(73pQw3%b?5jZ3DuQD=Lz8RC*(2N=)`AuL^qYLVx44riiBultgIu8+(= zUJa1IVilV}E^?OaTSOcD#Zv``Y&3opaYFFh;xHq#xie)7k@Ln+L?|$#c@C{ErG*x& zK{4;k&Ob_DEL_)0%7!K|zx4%;%<(kd6MJAt_5Q z9t0+c<_yxiuA&BgZOVH~h;o{A*Dm-V=^L~A*t6GByGS(b2abM5AYC1EpZspPK1`m3 zE;+8_zvFEIq0wJ#=eYK!=hRQ`_AnPk(8EtRpB?pyK9K&4G}!3!=*~djDE#fep2R`CXs7awx?qok?XuccDt5mQF8V+78RJ>=Pb(*|20mXZylp`$ME)rR9VaAS69p z!y)22!-x9A>$f{D{Z5_WQ=9IWMv=i#@b-xn8pLXWJD9hulz+cd?%k{f-PZEs$31;N zOFPM`CvVNf76@t6(g8ucGhiG0|3F5Jl2O$5((~uf-DrX`Y0yueJb5mHzy@>UdU$=j zskYq>bOBI&T>vqa0}yu4H`z9+TL$5m5*75f{a@DAJ;GM~XSg*p=Q^z$qlA*>9v$Es zpRtH|=(BU%e}ukN1wyQ_K23)_z-!_lg}{yf^o_zh>3z$=5RXGhU%1*77zKRFf+AD1 zDp%h^icV+iE{0ZK20HbC!G|NP!M-3H4;f#vH|W@oTHob(Rhi@oCV1rBs{t=P9}9Mm zT3MW}2Sepp!_MBidV#TIS4xYVjD}fUyvvdG}-O_d=PbCFQm>$P34bK(Np@r5n z2z|>cO2a-rKEZ@nmQy*W%;G69-rF|VCB6^2`g10Xe{Q=6Fz7tEJ{$GBEM4C+<{^DP zqo)43S>Bs~ZGXO7`#d>gYYEFOWU6x>)1|- zzCEi)zAkN1s6iAMe-6~yG0{r`Q9;8YW&+*g2#!|&8!W%$Eciqb_fNCq$K`89+qXCf z!R!$KexoA}2k;U>x0PYzCp4$tZQtBG=)Uyueqo`F_(RhXoB%zicu9C8RUAivq}oLg z?O=(o0Fwq2d`d5JLp4sqe6TSi%qj%vLoeHye#{U9ovoT z0LINAz1Sh;KEFKq0<82@~u3>qCZdjc80+{ zf6!U;0I1HWfIVYn2A?&9Q)H<()h(z?Y1B1ZcN)Bskd_rbGh7F$G?Ub;qledRhaTHI zch4}1I|X28N6y99gK2_hES?&*ht*T;x!zu1Q-c^e!=Oak-z(=eca&m0SKk%OZuuLp z+*}-5KIoY@N#be0@5TlC29OC+)vfDgJQL9W;%eUa-*3hxxRg64E*X**0&lxUW~--Y)kFU+b0 z71#ORXJr@mfa_k!8R~eeF=OOy!iEle&0#t*YY!}VqF=H54sv1s6Uj- zu6Qto+HWnw5B}29v>HK6ENnc&srq^7d+sok8lUy3+mc8IYpLa3y2WukqLGb8T1)@k zfTn^!9m>Gbvse-9j3)%g4FJvIrIgdpgyzxQVn>(ev}do`ynnra#wepE2}tywi)->i z{AlDw2j7W-!oiL!7UZX6Q?oo*Hp}_eE;G+p`GBOUxSpCs{ej8p^)1ZrT8I zK=E6B4LzzEcTQK>#e7;~5xlHB_%7`7+0SOOMWlb!CfWo}b#x|_Ieeb94u}WxEny^y z>5Ld(aqigl836f*ukG@C(zKYNd|$Sx2{-Uomv7YCrF4Y7?X@;L5Y~b^`MQDjVpJ~I zk;^ne7t5WzQ!*NYcGl_GdC@Sp=-N7u9LK=nW}SAf+4yX{#_6ZRgxrU}W1o!cf!)(R zypoea1%CuD+Q+FNdQI7lHubbC3Me{<4n6=({P(upc#Gw`D0j}@ZwndolP_^a;!YOa zx6=BL4D0*e#_-jHB&M-DA|ZbTVg4nO9qBkY8v!$;WhS_+^vmib+<|^@~zoVq#!otto9a7S}BW;i;FeO>p4N??=RV$ z5V19@f=~7*1`R~(a`)d@y#0LuZRcMCDBy69UCo6yfc^bks;zMfHP8OcI)HSSMbhJW zkI=oDi(KkO**zw|*~EXm<_=Q;8ryY%fv`QMf`S3z<-8BqwA#+zA2Ky9V#cTJu`sP@ z-cg!gY)g~+;mwMeWbIQe5OhT@^T`tOoN3*%W=0J2lBp`sIY55QZp#QYI_V4kx# zo^GW1d1-|HadmX_gO54pv&T`_kl}Ee*^cl%0TH#HL93Wd_4XyheX`E?btZlv=c4Og zfVS2jbGK&Po;Ls4DSH&EXPvtxE7ewQmtr)gkn015 zYQPb#l}kNmWB=6c_k9%TgIA6ciuyVX$oY7Y3$yL`Q7xe5N~!Z)M_wBjzHikFemW39 z)%6pmTlbpt{@s9iV8t^z;JecKc>g9L}PuX)P>L)AINCqKT$5`H#;<) zsJM)F=dDrJ80RG zUwbWb!ON_u-~-?V^W#_1obciRw=Bg?*7{T4CToon+U=&J%+q_&Nfl@zU@)YtWl_9d9)MOVMMU}AmWaD?Kv$YJ(gtUdFHSqhh>ap>#E#|{eckN$)Rm^W zIqK}5nbBN?Y3uU{quPLaf+fL&|7mCdH;*lNW;v0 zgWOM46A6v6_vQf8?^Gug%4{(o$ZIg+x~!ZE`%pNzhyuu%)y@fki`P}S2wYk(p@V2y zYs=JIDAk`WIiiY&UM#EC{o)}^13(53iHh2Jh%d_JapDN+Jcn0mAk&OS zPD<~|lCQ=GPnSr{$q4mWQuUP+0thCaMPbUeqXp$zdngT#S&0~L*;YvbGQn|#wqakh z-G7!>|7>`V+=5vp{P`5F8-$xVt#OVE30Ha)TA5Q_S-n0J+~KNB5OX-fB&tg}waXn3Z9HsN+{j>Q(`&>jcR`dp$)u%@en1HwN!L#lX^cl@h2)gC1 z;43}*Q2Crw4O~a$-jzV|2q$8zVp(@tdnRo3Nlns~$|bg%5)sD@mS#RDK=1>scx4aS z3Wg`X((=}slo%IVA$K2=KiT_8{0ej?nZcRN9dNBD#iAxE(UmcNaE*FUlXJJ5Hs?A; zoH4leDTvwRU6by@Lmt?)CMX}?c!DY%u#3azD!peuDy|F5ufUn8DpOBAyTHzPv1WSf z(F6&z4oa9be<#dSP{lp|imhnm22_l4Kb*-KN(>V5ox5aEVjVbCJl7U1ZnH0RJ%Zh@ zwA9{fENKb{qWg+{`(<@}t76410b}BaJSg?cM~9ol12T7(7sfxh_B!%F+)owWovRV& zVz`OSog0iE0LGtlj*AG_sQj>zSorC_ZGRQX2moJfvf=u%2pDswP8GkC8Pi*JZ&$TC z4F|YlZ|rM{T441Y|4XUTh3hD4c0Twj^CY?1t0w`u{J)* z+=1Ya=*5qb>=GrD@?b|DWE4}ES|MLv{#qY)?p)=*c{Lk$fSrfAK6`=mqSl$AU-(grgz0hD1jPq)G6)KBXk^5F!00b4 z<`T+;oq)n5M!LN$_pPZPx%?R!aX^wA-c`oMsT!B3>_Sh_ZOk~`Q zq4!d4eBBaU9B_OnO0cOOe5@QEWDx1`^V`mXw=rXPEyqqeWbLWE{ERY^M$a!WUcw`3 zEM^*a96>X4;zf;eNCn0x?dor>%|AQoIA}vnQ2{0UskZ|Mpn!e_#rUu)AKZpHz~D0E z46q&l(fRMj0etZyugkst@WRz~2@k3ic=!s(L{m-8(z>&|PDO)8mo zq4=+aJrmRwlW*M8=7@2Ox1;w;a6@T(N51bkeWrK-qznKPOigPms~{W*YZ zpI6f>M6pWL@hQ?8gco^NoZ*A@=3BARNM1izZAi>^X_)$G3$Ox65Ma{aVQ@Rs;2vGr zIsL1b4_=A;*2m;CsP($&DT8Q-yP5yIMyl$S4A)vacl=6gwZ8#k91wX-K9k+Wx?&E> z%)ZFBqA|H?xi0GwAleihod(jk48)q9%ZU!@#TD0;&2lFa5%q3y%6sNoK#GZYKOm+y z?fgI-;f^E9+d7s~rxM?B9PtWm-DF=pQ#Zs`y&*I5{Lu`V z_o^Z8X)Ny4>`!o*e|PKDd-s{e*wX{E7I1A)h$qiv9E%;`TKn`%Vzeary_>^jVP!he z_v#Y{e?NE=Z{H8sw1;ynjlt+6r{jd44C#LBG*Tj^Mx^T-ji)}ertVKqMe8M;IUX~z0pHK zd5mIiT2XmQ#2whqB`<|zc)#OY5s9Qi8Q>dkTlO&fi^*bz^utc#z&eu=^2rsV!;$qr zBxU^1xR1BOBqa=~B-iS*%6lCgs7+(*d(eQ)JjVi3PUty}I{oT&6w(`>AQD5`i>nSe z7WM}r4p(|-_!bES0AxLZ(WZ#sa+R7p-SIdfcA!8*MAUWejm9Z~(?Jm@A7x$WEBOkE7(J$13|)H1-3fCS zy9_X^=?S0FvUng!>XmmEpBMZGCW!DgDkKU-RU^zYEXzu4^BbZHKL~mbqMei@svJ%F zw1GrRwU1ct;XMWX)z=_@^@_DzIc4QOazvX*m|&yjroTFFiG4Src5=-vwr-F`;!L9s z2hC`fgG1mYx>h($Sy`_(3Tx+v)gA?_AzOHz`1zAjos#F1sUoBqHm z@4f-?46bIsn4PLEWI5#qS-$TNvYbjP_JPJOW6pn8&AxHke)&Ki`4_d16l2cidJ6;| zCta}#mlJ6bi!2$hkXb@=q-7R2v);BaF*S+PD)e16Th6)=_ZP=$8_ zKty=6L#r$PM~g3)tvbeo8dAb2zUfewUA3YPgb!Sc78Nln^zgL*cWsh}`8nvc_xCuB z5(;~yvp)l}MoE-mYf}*+14IRFcxJPGf21_8SC9q+a-ji+4;JE#<`H#Y%InDS6>-`* zu9RSN-|1_dT3?@d50fzHkQ6RIjl9!zEK`N*Le0~E@A@@jSBU@(8ma6mZH^X3Oy8#L z$-F&paK!@CJ4fp{X%DH;_3&jmGeVJ)h=k?r$M~Pr`Pa1$$4d-4EaHyW;;df$+lF_) z-=^(Um2$n*SsPp7B1*TGJ$vIJ|a79Uz5~mrD?~^}^)ni*x)%;#E&tQ}zlv*^) zq&3$l$-6_sVPBuh~k%Ie)GiF^tOps3?h&%RH=7^8BHmgWWoBlXUt$;8} zkK)x?dTlXK(s(c|b9hPqv3gg_$hZqAGjxXFqHYWOPKcPlb1N`TTf7##E5By(TaXlw zn$)y&hkTc~<l$Ig<+JlDCGGZHZ6%a;F= z(=zb9_6{G9$`_@&9+|ktwv|0kc|)t<)l~nA;66Vu0+ABM?__qgHa|&dNt8)C`>WRY zps?Sl3l!^exI0@KosBr!2003fun$dcfR}SXc+6}=I-fFF_SWu;4(xkyO&(i^TmZIs z`uJzy%bs=|UfFV9Hn5#H5K)G-vL;Z0Ju+7Ibd$HXAKZ0+ORe}o=F`R(oLJVtjc?_% zLB+T!qGU?e@w;5OYg(f`Mv9KF!yQ?^U(`WPPVTc~i!lF&#rl28+n{818m*_ z$tNtg{t}cszGy8QSloF zAQ`YWwa|eXdiz3HarP4xhiQ}aCFOhLo<9xReLoD^jT85_luqF1C>}z;Liz9cQN zB}0PcSA-#b0pi^{H60PbAr<^)`-SY*0}SZ{PZ_;G6n8SdkbTmFlrALV9L__Mz(M{0 zGhlq)bNtq}XXN$Z08st5(D>H>(dB$T3at^74AaS2*8knFXG&H$1X}AuLM{5~oKpvQ z-ff4xb{qpN=_{6l5r1^$!CX*N4p*~&I7JEl<V=YP~J{Lf@cy{-2>XT}Bk1eF6{x7Veu5Cr(kFVJ7E?D{(M z=U?VQr)*!-eDf7+@MWdq!4nDiHrc^AC& zJY1m5Q*g$>G4d#SP0Z!ZWrw%+%6pcjPlg0yX0poGZpXojF6N)*A_-Y`$N-0hlE3YN zEvu}==k-deFB!AiO1=G|gV=X;GYf8zwUiK9J8K%RoVDiN5UU3!G4X)9wK2Gjk@m|b zBW?9RW28gDoTrzrz$lTu%P5r<3{tU-&-VEDf^jcT&lC}<8nQ|*E|X0D+UQBmHEUIR zk4eCF&~QFt$i3%7-P7OLM%$m|0cYafz%*RgOOE(x+4Vr_r<;5sG!H+kNu=)m^4 zvtu`}0hE<~C^1>R7jhs;YDPk8YEsdm)v(GR25G;e%lzuHm%%Weea?3y;&Pk@Ju3eP z2I<9N42uQ28?0L9g5pjW|`2L?ap$_SMFliSI7v92DrWV>|TO<_6*7KKQ@U>_}2J?wv->Dp}5Z z%B=aDlxfmDuuLmSleqzWbe)M!k#|j6hGU4|-w)1ORoupJ?tMJuK$Q z|AAf>D+D4LU882r!ERXSdhWxiE#&g!j!-}qXYjym%2KUoPg4!Wp@_j?oP;hW?{dLp zx3OF+cUDmaR&#ke%64(sg}q=Dv_aWxDxh!yVjuQpGE4R@9l|l#)VrOw->9mS0Ry4_ zN@ndbfWp}GTXei}35lO-p>`~)2kJ`$OV6r$ZP;FIkt*>hy?Qp@Sgul4U{V6nHDj_fP~lS2v?W9E0SgddEftbwp~pz zNjCR(%0w35x$ucDvwyatJ0QlIfwGzO<*%|i36f}7qiLu<3VENR2>Pl))eGiZ)w)l8 zVOyrA@5*AI$4eMyiEP?QEV4wbu4AY@HBc%}-EQs`4km$Sk|Q&vqe%F={g9HP*SVh8oYb$5##%v>ZWD)Q(JeqyZTU7ZfLd#fv%~oHR^?K zc?(ft*Q`dD+W>Y}(Dhwr2Qnud^=@(=`01AS?eBd_s$vncf0flD0+9)9;B5y*-%f@x z<+;X+SoU;H{2++bb2GU63MPYjC6{`QA;)}#fisrg_={anK3;iosSlAMT5Z=SS%pZu zc>{ETbhbQOb5WH#v_$VqHGBVL6uyw5`gDu3);-uDd}0kitz-R_dMmTJDN*Nbe$vJ6 zs%kbG7aIJ#u;|X8%%AFDAvrbo{_y=}((}(iLh{(@nLC_dDVUGWwd7e|9XtATkY&qZCn`d1 zBc1QwXzBXAm~mFm1iQ9boYVjBEzUHP$Lfz?b;M`oIs+MGxc(?_c?12)0aUtfx$N`P zY9iG*S2*xeG5BO5@s`}z;tc~Q!NfVHhtUrQZ|4;{_f=WFPAK9P%R`a610AP*y9zZk zPc>7WFpsK@=ZkmGiZF0}!lew~;ABi)!TT2~CymlcH zzk9wmxF;~-gb!~V0xBko;^;s8%{~)O2!Nt89dHln6wu`ip(%7L9)+8)TZrW1K|z-E zweeU(fe6JUFs$DM)AM>J^?%X9)xS*68~EV=*yJn^C+s1_D(d@PViCWqbO~k6xnbUX zVIW&1=J>q_GdEPeX;>{yBbWAS7$6(O14`hCRs506eE*!!HSreDEnySqEzKokb@lsD zEiV1BcH7wBj@=J|%(z!5=P!u)DMZxhH45&=fFV!9-sPUZ*sjKo`+dW*4EK`hx&YDf>wP$1(KZoJx0Fi??h;lmF2uvB2rs zkl#2$HdbkunNW!v(XMTLXbtS}Sm^L{wdLErx0W$pIoC&h^C#0Stcm9>vD)OghO)wQ!G zZ`@Hk@GO?xtx?|wB<;~_uVg*DKWu4^WzwOQp-Wp%+%DAyTk9({DXu?`dt(L{6<8Ld zFD)T6xN?zRIs=dePDs7+^pCy>aN!PkOh2WYOgyvt_wb>(KH{!^!`a6lcO_XwsuKse zx;WM1IpA35dR`23srSCQ3l9CV&Oo%tZ(}jjf=hW0A6}R~0tA#PDMt6({^f32OYGTL zBaC5Fy!l{HM{eaZ1-d)-DxiGL<@ytLEniu*j;=|CnP2+dr#DZ3;|LFE zyny$6vFPR>I%R-k;C6py@&W4qM4EP>a>`N#T%NP{y;#k~4Qn&q|D&}TcvQOL==yrT zZy|KW9ZEgn7{uM3_o+IC^qh`ElWeEdr29^ymuVc|DXbPcP{J=R`pNsfP)iH3mUV8< zjOAIMX`6_oel0E4qJXSuj=XS1utjCl=pKT}GiWq|_$GOquSj~t z!*|ZZz;?7L?CW)K5?0dRsFIn%cQZdQi2mD|CbD| zVwz@dt{#|d(#ha)sR}n1>$>R*g6d6fQ+l9g*8v(?(U0a%wo`Dla5I6bOY%sMzAM=x`#T$>S(9`LkG5Ad1q&Hd=XtLFf zlV3Hg1(+B07FM&)I5r}~!cBxv45Co|I@2aBiZ`|(XI^7_AjA6VExX-+-u4N3=(c~4 z;R*+&qv+JCtohnCq+Kh0o`L)PEfARMmZ&^m=%dKpsJw_7NS=4o?w9j80+_d7{d69` z{^>lP0Q|kn%+MjKEDhaKFH(hQI~d{i!tbclhJ_zj!;*Yswkzd(GUcdJoHCzK-+L{v z1f6NOL#jx%qfSjCcc!ct$)8l3QsxLfx6Tggv|1oF!E{kFV+nye62SW!XR#}z)}3;7 zDNQl#0RIp$77Hz<=9+X8T}O+XYL=6N6i)dG8M!45`>~`q&we**2E<=IRdvAScdFY| z-W;@(kd(vuZz;zYsNr_V`)1LTqb*s{4780=lUE=DQr;xi&lQleq^uL_|CI$2A`9J5aB4zmOc#a~&(hV`XJzIU{%|4lCHZfRdAMy$^Onf@0h8Uy zl;aokxyE-Z6)WAljf%D6=w)@Q4dAN>utHSIJ1uGFvGJvk-aR38{>w3vC8z2JoUqLA zNxn{lFD`uJj9e|RpmScpFY$moG}#)~3bLLd|jr=%fxP%ojG=9wxjb7urE zFr?E9T5>?c*I;&=GpuXv&MKB1+B(HL*@{q;43uqbodbrs#D6y#*t1E2xi}(KrZLtU zyuF!@@Al2pPnnMkXAc&*``LeQ#hB|byM6I69~7I515R5>43NSOXQdew24PtC^1Kw6 zyqh)UG`O7llrh?f#?N3n{6Je*)Tjb947sA`(x0^p=;lgw*pTQp0H9|Ge8FlGNs)Kk^Ii!sQt!&o6_OW*;Yt85a1+`96g zNn5~Wnn!fs0yYAx$+I^~Up_4?6WG?sTxA7j_4g%wy?@$@Hqn_4oE!*$VoQfZ*Hk^p zgw@kS*Y@w<&(AKz>U7zpm_IZD9x8Fb4<&V;NJXIxg)*=(@&W;5qm~m~?sSQe*}LTQ<=E zmWs{WS*-W_bb<*n(gaOeyx;H5RQqnie@Tv_F9Eag8pXKFIDrzlo^9bxVWiu_YRN@W z_g5wrQ#WR_H4iDXXrLvEmKB-sW(*eF(kCvg_X|q@Ki#jl$|Keg6`iFWF2h`=ZP{h0 zAG#nWffnbePyn*o5U+a=RM|mi6<__AXeNq<_uWxx;;723NTu0}{foNEi>~bx=5~sCs;!E=PR}Sqv8~MGnSu8W5BSu)Dv)R+k zIL+$WvAX&R(~1#l{;gvs`9JEIKNS2&$Naz4E>GSZY6hg%_K} z*?z~kF8up!He?$geMJ}W${|Z7$0*H*z~3eQr4eNGTe3ZUZ|fDrZeCKPjR^r(a2tkDnWw?VoTG?E&l$ zEFk}g-ay%%*y&qdvWo(8sysXa$3i}^-96FPK>KO?_Bp(_xXsLu7Xg`|W9)ZcvVaqo zVdG2othgVCj^i+|ds(r=XZCd|Z;yV%LG*E%f6>Pe?^P&L@99H+`FBA|UEsWBXM#&w za<=N;WDwNfu}yl#x4X&^d?resqv)#Yb+CZ0s|*R#D>oOC-YWALkn1mr-Vt|OJHX6` zB-m^l9*_)Tyeq5unoXxiM*57f&x@qbFBl(CPnE7+RupP;(P$VbKaU-$!d`OEw9K}+Baa#^RA923YW(j{=_u}5CnjU(s$$Qa3sST(3F+R7d! ziZ%c&RF`AaO2lWLVhH%1{(d#kjB*DA02w|`o+@D!bJ|%S{Gvu=Np5-C&vcmcE+5s!~wutJX&{Dm_x z_>Yfr7YRL>mjd_HL{ zOkTifdeTzPZ-EBEDNkNiy}o#zsM-7Lpvo00M2n-!5{b>9!-6!eiYCTBA0BQ0#2ua? zALOu^*KFtj-tI?Nmqwyt7P~aAA-sF(T;01|V};q8%Ff)eC^ZzsXKg+W&zM9KL+k8puby2qiAXTwGkYgXhW11Ob}( zOh#qjpR7m*n4rsY@KD|#$Dec?d}bYOANcvq5y%qIS{MMR2X6%JpS@lL0BUox-m%m_ z092~82QBxM1kzL&EAihN!pXC*?dN|uKYC^?9OlUt_eX~$@rc~{61lk3>;*~Zt4^l@ zZJ;&j#=amnsCXa&U$RkZtw!`xLvLm4r9mUAOdndGRK?gRMv?H|z-Xq|CMx^hH>&wh z0J!bn*1g5H?;QT}o}>Z?R!~c395VmIk{KM;xQyw(KT;749o2&NP~4wKB?BGRas18g znZzU1eYdf6<-HR>zkdBH)}X6BXc&koJK4OS^78`1%zrd>?SuNEL}X3U2eAUe0t2~F zvdU6a7iZO(s~W=R5!Z+&;h>OoRt2Y*<;fFAz3*tAN$`>v()j5WT1&Q_$0p%!0nq(q zpCXW<{}r6H@3fxDk^sZ>N$P6TKj@Ou&!KB~(2P8R-$Ki0{_ZSv6iG6g`;Q_PI*KK? zp^QI|LJE4*X&L&=X_PRNLj(79Jv5W_MqhA^jDZC?Hj}L|W282b~ z9XS%t4-=YdEh_!UBZiGpE7|qV*jU(YtX5Cke(|VqEAv%qj^_xo=4$g%lum+3QHo5& zEjK}?={&abTe(JfAt6o-F z3Mo9D2?&eC4cwCPJ-{i%kEM(9*pH?!eperO8-RF_mXv4Je!1=;*cKF>H`i7@<5|ht zRqo^jEa)9pU23*?=|rLffdVYuc&)ob){wC7 zysIeIV4=kuS<8?E!WbL>k!0^I+ivS%%CKPdKAUpAd4G!BdB=S~fHScsp!dP^P|3 zGDOEuxavW6?6vsrCR=Nnw;C_J?|y>kbf83Rqr)a;^Zk*FJD~pajrz(z>3qDJbS--L zdyrQ8Ixz~}O;Q3-=o#vJ&-cCK;Oi@7ghE1e`lUjpJaPe=s;!al(M(_v5jlaY*~k+@ zr@IW69c@dN518j@tWJ5LPes_8WBF)^Y6ja?Y_!!-QeI!QRNcB`jtG!b7BoXl{cmYJ zW8$8O3dG2i@dL^AKykvW;?S6lK4oNr+ntLp>ypI8PTls>g27+Ya(ZX=6$uF6L>t_m3u-K)Dw z2ROxgnI=|L{UsQ4q7{tqyUP-Po{Sncz0s{wPiT;mL4p@c3Q-V>G8M zuz)~>wM$t0F0;Nc|eGG-O-)g@>i=(9YPKjK8G!hSf-l~ z!d3~VF}ee2J;z{*8}38{3=u2P-L6VDO+7yV%H5db)UR>}Q2tEkjGML%^H{SCx9?Y* z!E{IStGIh634LA}YgXlYR}T3fD{zb;b83jp701h07k%j&1d%Hg9 z2vGwa!<0bgnmq^}ZK^Lh%beg6>~gkecs)XSSKp}?n+9V`d$jO@Jo6@idxaP;U6O1| zRZessG0bR{;PoiBe-ftWStRNFvG&NsgWJ#1JtWQr{hYl60qBj6)2b;l?S=0d1SBrogv$L;r;_yfe3Y@}tkZW$9J}*u~Sd1H?F24s9}@C_n^jt_-o< z!7b5@Cy~wy`J;9}>ia0a6~XFw#M@Ao@>}`qcyFi1ld>J85m~21_qd(Bj;An zD$oi);C0sdx_HPA*4i8V-6z`-{Q%EruU$h7C>lP&#yEz{NskbOy{guAQ|TY)wO<<}V2J zn^>lAm^;)Zh-&}btU6w`@`=#3ezGEHO}(zngRJqVy49jck)2$t*O}M;E7Nx~bp%L6 zm2T06A4RN?9g?~evOq(&Rk<}6IUC>0qUm6ZNt0avAQh0JUZC_K$(d`bYlw76KB|m8 zAnXFyTDtl6i($uVj;@d1MWho#X)B8sI3O*!&va zfpbY!0CxI_&7Yb1=I`3>s1KFi&Noq-6%w!@Xy$F%08rTOr~tXs>}fMyFXx-+^K3dS zrM1ibHcCReE=|;Q-RXCZ(F~q$?xnlHLyuYwXD_$p!-y<&B?G^W)3s_wM9Jyy#RFNQ zy-Y2tDilOve($37L#2*DEhz>)m`5HqV>A!IVT(O*cfFj@&$3nzS&Q`Js_2>J$q8P)OV0%NZ4^U+_C0uUk`hcU0cO=2G>g@A3qX_ zAOs`Fo=?Cvf=_yoQXt}iA@)%uQ<;AmVdOEHkjA|Zn#o&r^nNVo`w=}3`L(w(4BV4W zlX1X)`wDv~w-5=OYxYLgQbWJyB`{~R-o-1-uLmUC~_a@rl-rGVd*u>TxVSBhnntrD=Wr~2RC`S z0Bc4%(L-NZzPqFcQHALr>m_m}-+0TTxZEx%*wQ3Uj&Y4a&N8~K;R~EVF#6EvrtE^E zTNYhd;GU0s?f5vI#8}}X%f`|ea_xu{^L-P%`B}uunH%>dYC>sgvytxaM?Ol&d%ui` zlU$cf#;trk&Ain|ak}PMbX7sk<^?U(w>ja#xy%hKK&T#Xikrz5{aH1k=gw3u8^$AW zwm9Xz!bJh0`&?+ED`YKmP}emdl|=Exm?(Jd9iqrJD8F9tatifK$ZWk*Bv1m(uiHA_ zEfNA4VpFpag-C~dz8%N;_uu&7`t0}KziR6@X}nc!1RLPZ^cHzo8k74%Fbk0$n{RGa zz>m>;ctbl!qKzgIJ<8w*kM0(7+&F%RdWz64o0u78bDGm3mHsm_f2nWVcRoyPqu}Hx z<=k{UwltT8<)HKd<6VyN#)d#4)g6APM^uzP8nz)-8X0Y>Fk(I+J@se0zO>+jDVXAj}by zDNaSshZrc7b6wupLe<4xj{s@`rO&V~BC8^aZ_qgfua9;gAZ~G?g9@VnWjUPOQqk1p zq@{`$3}28{v<7d}!s?-fE)c zwE!y&&ij_6mrjj|VaGCs8+sZDlFne?;aKZE%HG}`W6~4!*LSy8-RvB|E;577k6*=P z;wHu!{G6uywLSY6(>2S`b}e_ST^-z49XNpb4*%3oWNHy>pJj3U7OsRRuQ`InDaob- zDZkuWO-hDb%Hm9!K4u@scBIN}mF^lqpA;S;@|WjYQ+(fChjF*^!@fd^Wj(Z@(ZV%s zvhJXu|kr26&`g%Og-o67#VOr96*?6$tUXeyLyyuq->ojE*v}-t7rB| z&rD>;;QiCp;+HVDx+uMZm8g?-f-*!Au{w`G9BFeIKvlkwH z<1M~DsmH~#nQtxp^>tmv1tQ@2?A*h`CH zM+;A%Eh`+Zup&#bS>j(EKWoK)!gZkM`CH;L==OmuV2kbCbLL;vL{+Gp)0XJrj$`a= zBOhsJ2zxID^&*1rCMe(JOde zYP49Wa_7BAZt0AO0AR=r*mfP8^UZr&z^c7cS!=u5NMmR7<5`)cHn;ZJj=1l0v`~Mc zUEHEN>1w1`xuV{%ZDl=E2c=N#>gLDdPmcagxv7e8K;hE8MH18cway{L zHvTCE_UX%Di%2`tp`rYPnVP8|=z+Tye)lzFwG04en3=3ry5PwD9*% zFBLPivrrOt$9JCDW@W5<+RN!mxkIm`DW)g@Hh}p0JOn*oecKTif6AeUW$3LOkR+vx z*^YiL=}1C|s+AJ5CA=O#R&2KE<}t3nYIS21mF@|5d#^mP0|SL14VQt$`==Sd4P+z+ zgASL>n>)!+S2PoalD*lZv&P$+(r2B;ervn&qO~ za$8Wa9k>J?KP4Aio))lx$L6va*U>DqjV$`|2<*KvpHJZ`0}uaq1s#WCj)DAEI-G~v zGzMrd4ydiGq2l&Vfybb;>U53txu6Lit!q%e_K34Kiu9Ykbm@$E#3_eO2C3-kBhVs( z>syrDMzfi_5|cZp%v{|z+`z8PgSi@@b*Sr`ikN}f&pb~}%wpT5e5tgem%+{{qF3EN zD<1Lc)nmf7DpoH+#Oe;tfaZ6C^_DnjDc(yW#6n!M>~&F8>`+;!B&Fpi%y+vH1@;8f zaN}-uG(_FFN#>?Jomaj!B*h?j-Ni8E zhZgd8(@#cOr>C#wnYP!5$musNWFDfw#suY5AS&U5W8?-7L~G4&g>BG(?guDxFrn*q zDwu54|M+moBS`U`n0CMR%7>z6@oQ_>O>W$(J%h0bo@jbQ2YL>@5JRE}kf~9DH%76Q z{l&Uh$`bvjq8fVqp8GtCF}y}niazt?mZu8zqB<-(6d)ir!KRZnGR30d)1?;OtxB)v zN!RU`asqb)I&&j~_w$xdi)VATrob_}4!wJkH)bE!Xj$izVjKuVd0td|J-*{8+krz{ zP1>HXo3UFOstqGys!{yx?pbv%mW0|EF}H*g)Ub!0*Ul5LxBa1S{?Xm-;4FjnNgE@l zNvB9QHbe~HIg76s>&_^dAXYXCY+J1CtHlhrP2{3EU`f>}((!>Oo@S5(FYtL?FP+DV zm0G3RV0zKRZXxVYpzSUWN=M#MR7X>3RByrVGhWl~<{l=KbZh*bQbQESDkb@Bx^=2Z?3%?2yp#E#$Y#?SMT_mT&owFU zGU}*LJNE#q_t(pJG%OT*gixvhnU3>mxKu@V)uZQrSe@k(kB90s1`&G=U2ZKsZAAOh zXdSypXy%U{)N+3@Smr!~?&SbR*nsJAHQpxvwZf1;T5CeMLA^dia0x%n07gzzePzf} z^CnRDt6`fVkvsbUYL`(HW$9arOOCu4b!SEIOsQ2|JGGw2m66beO63G0!>j~xyP(m= zch$Q2M#U?$oY1bUbI@=#ZPod#n>#6fyewkD_k}MRWw+twqH=uvzLG`ZfB;xWEg};{ z)F$lRxmRY;1e={V*KoaC{4|FKTjuJ-UMm&ycPj;swk9Oez+Q5vNbc0NMy2}t@-d{N z9s;YO4K>_UeMh7C?sF`(JT>|{hu*$M#_^H?!Pa=LEBDh?GgbVts(1&}f(fQjwQ&JD zNvG|yoy8S_0j&T5ak%JO2ycdZt#LfZt-US^&!+BiH6pd8P1B84ZP~F1VVwb_0e8@Z z0oT^|oq`T#n0u_M?mvoHGdAwth9mByXfU%ii0eOX9wsT_oWU{r&X?9WwSSOTPJE_~ zYmM4*v7HD%?X`WW*J);P&6Hz7HQnXDKK~@~ zTn%B&K~tN)zzTc$@!C|g9mN?x9KnjyOWCMd^L_56)M(nyXj)})njD??2VeUGB4NUt zXs!IUBcUu|bnMS9ubZeRf=nJMYy_r04%Ej{WXI{J+JkykB3m;0DWu3&PVX#8K8PT^ zNbB7dKL-$Ldx!}UxKvxXk|V8s7LI!gkKuBO zn=EX9tpFB9hZpo~TF%;f)P&^NFNnA~?LruIGWTHQP@vZI^a)BjgeNk6Mn_;QZ_TOs z7N8RA7sGJl+#YBV&5cUgz^av4VAfH?mKAS+o0;a*%Uh#3=Z9NB;?^-yB~$GOdtG!> z*8SrLBpNjqt=DAPjnJQ5`!tZq2ci*lvF`d*ADhQxXTHulkfl2mI!0%% z9Xm~Q5ZBoU(YdgDdekdKRo>nm8YDST;A?%n(%~}bh%8?KX(>Un@Z|?Y#LJP=C+*6% z&Fh`gV*14 z__)WNwf-$m$B_igtvPp>rK{6bqSAcktEX=nhYvkdimF`)y4Vym{kOvNjpPIi-l?fSXKNtuf$T#uO zJavP74Yi$p&X;8930~n6QADPa7-S^}s4G_W{Rq{cm7d=jFsH&qv{UK0T?Ko&HdJA( zRD0Mfr$=og(Pw!kvAl=eE_>POTp~JR@cSgph+(}*@L9l0=57y(ebC-r?7>z5AQYFM zZT`bfl~D_t!*>2WQQbm#XI;tOQM!QgI6+TGhs&KoKHvLovq<64C8Bl?-0?Gepe%2) z<-P|6^;#7K%7R_O%*-`27vnQqt9NQbY=1%9KC#b|h@bz}GzmCgj!rKwo!>Cj-cJA_ z{Wr#^1b&ObYKe^P_zca%B)}C5=hF8lf8-u)3CwrJwua^H45z}GMhR|n3+xrA_MOpS zjzpeVZ&73Y(4QgcCKSt84)Y#Xj^$?uaO~QZ{~C_945hTpKemTYT+@y6vyze9cP16- z5RkYMJ5=(=OfE?h0urZWF_RGb5A>%8z8UTNn~Z14=gp&!mR(gk`MVZ`eq!uA3Jnzs zCjW-LtsoIC`5l{mf4jmL`giB$hu-}8@7{r$i<5kZF@fiXn5CS(fM7Y{bjtoe#R-(J z6Ju5Zc0>&e1eM*zAJiqUYWiA5b46rZ8=%ia+A62^eY*KC0DacoF}lUM@8kUCZ9)YI z24IaaN;Xx-`S2d@U6FKc|M#Q#@77wx?+J()DiH3S@ah$#Y5S*0fHHuUF17*y ztv|(HzaOpdKLgPE*Z~UTKhb)6s8VG8tnZg7?)CEjhMW_PlZOrE40PY@*V~j_tH_O~ z1{aJd8SZ^sdl#%FUf9?%)bgL<>-4_it2)@IyhJ#uU(@i8$5BVX0I>u*c6xHiuuV#9m`H|S7dxAe%|C)Qb5yE`iG}pXuIl_FPto=p| zyBq)Yhs7VE7Vk_MAAi?uAUaXVK}(FVX138{toNhrPVPna18%77 zUb4%aIL6N&Qx8h}RZVJ>A!v*xA68}yTvH`tn;f9mO`UW(GMtG(lXr}c=#JbyaUcso zmbFNge{JHl{BsgI-4OmHxu)K$e7k4jpe{|9Izjcz$Cl!b!dF@#33_T5%w49vqx~@Y zgvG~UDN2ptabu8J3LVV8i*FaI`G?W6u!O2%2oFDlbyGEoALpK3TAa}H+L)uYF47$F zUtE5ue7Nruo7aXztUa!iQ^kYUUD)gDW7VHnla1ZMoi(jsccMG;YUZG>N51?jMau2{ z_w&GE9Vm}rX09_c`vVHmPJbzIr=ID~U3AA5N_!65hf(<8koSANb5U4;3a;E zz1JZMKqS2hJ@lIoJHPZapcM+CPo4k-s?199*LN4-B$o8b;t@xyl(!cGKws84;rV5y zk7p5VR=!txa6_i{Vb^kd%i{F6>$Vl328{99nZJ!v_ac11<4B%4UH5!>G{r~me?1$NXA3yAwf);K@68#5 zIpxJ*J4GQh;@4Zd;e+erNrK^*r2M6OAG8N`ob!WI%&*3~-QDi@;J1s{;tQQ$b8+hy zJPjDla`9lCKt&(j7n8@f(T^3DD?gCc^~4?k<=Zmy26b(Q=vi*tNr~&a8J|JJGAa0- z4}OJ3Dek5^)yE2*AzCydi6imeV%`dFxtM`g|%_|)eBtnVN=j~FkN}=Upi|H^kG7G@_Dz>@4n1cIJrMXo)WuSQpVG!->uQ^7P66&rG zeuuhQv43~7iV)t3E9NV>@@pd4(-0202KRPq*k^bWc^yBx&o87xWA*Xk`<2N^{bVD= zSk(qaIJ>qQkGqK7c*YH#ZU2nkY)N1+YLVYo+Du+WL0zV5hH+N|-d1pY%%t5v(DBOu z0y<7|%{U8?URt!5`8N6E?_22x17(MdCesnaOQX$9GP^3$w15LzWQ#RWb<<3gdyd}p z^#;DmKQIICa13HZ2j`5DQ>=rfk`6&e47yk$xxnG?Gg1L`ew><{`4_}&zx8G1EL;id zJ&t-DK{`$whx>?bh%SrzJUQPwGP=ZB#*Km4M0r+N5fvKv^W2rfeg+C7WhDOs5vxif z=cqF<7}n%``7bjtYt8)=$14Dg5A=^(qAs=6_4Y5ZOH~dBenG&C9y^oXc2h;_`$uNu zu8c9%^2`JPh3FI!Xxhk2AQ`3Y98-aDo)NJf7zlGBrObOoekBNa)## z{Y-?I37*duJ{6^Dv;vQsY)S8+uP1(2E8cA90Gy6Jt4DQ~Xc+mcLAkU??L1;>=ne79 z&gi;nCb1Vem>b6bztH2R=Zs!)PnN)#xbY^IHAb{|0D%kxLny#w(x<>)KCMUp`r4!e zm{ygppe=-Fc6gVYUys}o^qeWgDi$EWddJBcNN|%w?+6V?AS+R}`_;aO zK<)c!Z^pi~lTZ8QIpy=gYB&pF*wKs7GR`8)dQ)BR{4bqoq>v{2_g}}6t2$a_{DrR4 z^>`6s6W63lTL{MuAaVQ}GFLMtVXc`>@ev>_qv6*?f0)q2M)S4tl~cPriM#cMau4x; zZEc3o7*@uaCM7mQBR9!HN7?=i2eNLIRe32SMIP&StMA3Wp9>6&_Rb2)JEYBi3%K0_ zfoxW(av_iRZMbo|2|`w?-zM3g)SR7R^44_~v|L|L)qq%$J04E@# ze_K&uAqrf3^{eGxna&>xjN5o1jrt(RJTUE+duUw0#o%e4P?|rCMt7r^dnxK|c zr+w;)yDLx@pI9V7Sn=bpGVQlqrUSo-ssAjNQg5}ac5og3Dx2aE%q-R$PXQ*9sM~rb zd5vhjdxv8nSBDVE{?7ho+r(L0OuQl9aF?+J_$V)$qy*sc1RiL|?ykpHX;HBR!JXTq zO(XGgv)vM9m9WDcySUXx=M9E0YiMj~k)?3p( zOq-KWe0_UJgzoI|GXSQ(HY0E!7<|9|tYtAZkStHu`n6n2QTFA9NU=kt4b3n&pL0zB zJl~Kyc)ac%@rxn{fuJd)d=CWv^`bx^u{Op$|CsoeaTN*tdncg}V%Wa=n_>GuK*l<3 zYMzV_jhneJuxPQ;l9f$&x5v(jJ~ci(=ALOP9%&295d<0cC}Bsup_4ugVtw`Iq?Ll{ z8O|n}BY}lhge;bykf&L^GHqq0oAWsTmi8lI2n9?Ov{Oq+Z?EXLS}bgRFd5|o0W4Y$ zBcr2f56790Z&@`ah~EGD9vAn)A^Z0K0xtgfq{(6PiXZ50Hte4;WMmVll0$98RRQbu zv5ZF8@4mm{EQK==76ozo5t|DAiaYP2xWj)94JuQJo>|#66baTR`yY!2>^uDgm#GI# z29p(@ftkbK0#7gA_LWCeY^}|5j5WZ_itv4vH2jo*Px$-dOgx7>XmX~jl^a(;@f9Vx z)GN+`+J>JBF1pSJ)e0* zuj6@4K}%k*aY!uzhqlN8%-(dfrKP{I;*E^<=Og929GrYsa1^fi0aH+Le?h_7vd#>r zotnf^5HRv;gE8FtvL_wQ28)t8BOP{Qh3fNC? zv6|X+fcxZeb`}&T9M3z|Xm(p-9B6wa(;z!(?Fa}%T;ByA%%z*hbAn{HyORQ2~S4R7hMO%08h15Z3OGOl8f5HSYjrW60g$m7-a{|@2hf- zID<`N-5mZwM7QtPoAmZsuVf+LVO~k+!vg-)z}jBk+~T!|U_0QE-utA0Vd?3l;cxlH ze&SJ~nFtCKgRze=EAgpsgyFzso~`ep?xy|ROdsE1Nxn|OZG&B|+Fvh+Oi6x7dEfO+ zLhys!n)Z|USq49Wz;wtpHGD z9NMN_&#V=FB5NgpWb@D=_~Kk7qXxNU+}Y|kiB^9}aPK|nJC5gO z|9a54XVgB>{+iayBH_Z-6rA!s_A|_2tRFI(htK&NJ?;Rw2>8N3fAAem{BBvmPqH1y zZX^(SGM$$n>%|TWduh64i#kziF_@YUtE#3O$)jB zvj>bGBsKpPP?W?47zD-$IswxdcaXoDzMuLY3`Eg~G8Bi!qjq|&Zt!Y1^pYHG)!>!wknQ3}i+@B+${qpu`T|~}qh1K{h81Rkn zochc$QCtvR&cZWsbuq3U=oTmuRv+15$oeARGWyg`379= zsq=0SPb&&_4io@A`dUf%zZ@(&ApW>z7-jSMq1RYeOJE%B-zaoqC5MTk(YrsQIB3pu zT}AhzNF&E7lVjG#U4S-GP&)Gc9f(zyq(3+1kH+`pn=z|0Ana|@Uo2g4NC6PDV`VVU zKhOq;AsFlQYw*^lzS!d#oU?UIyQuUm3+5s$<(PQr`By4{j_MZ*@E21Q6uV;dVjJJ` zsx6Kl+4cnt1D>BLK$w%IiBj4;QP|-l{`2hs!6A%BTywehoY3El8WU>GqUkH|L_DI3 zGS<@b$tn3(e&uJAb8hnlw-mRD)enwOgo#q_Ns7W9bLxd7xy0gty@D<6F4P6RoB3Pj zV%tkBa{=T7IqaQ1lMQD1e}Lt{r@UrmBn z?tZccm|jbHq?>0l-RkubS@~l7sZ;bEOw$VXRQfWvBnx-n_CuKR%3L2(yT@_b(vkB6 zE+I`ITdRRNQJ})_NpUfP#lK@!TXEDt=JgKHHlc{86CF z4Bm$BMhMv>wUuz2rl<8HeMlCyWg3+yiZ;lG$SCQfqC?OaHJrVL0~RwGq=S0qq@-P7 z5&aVD+B*ikq;DC=eB{aG3BTU=Qw!&Aym9XxmvI?v=L)6xwfNqG{Ak2GXlU5GL8C;K zIp(&;a21ZR$aeC`YpZViaXwXhj&5QZ$XI?j>$}ebT}OBNL`&RdLA&wnXopWKxoAi( z>IO^RbQpb?`emb!f|^6;RSRJ&B_#G%C!x~6-`6$qlfBd0Y9QC|@NKPlq;SLBNm0`7 z>)yNf`#+eE(0Pt4nTA-l9sydul|FY(pm?~NOflWk#B<_|5sSlh0(%y6%M4%B15$P_ z=_|GD3~$>&uX8-X9tGpFg4Q@6$yMyD(Pl`;Fcke66G|_<1X(eFCJOLM`x99 zpoK~{G;u}7AAv2f7|ySKzx=rIXIX&1nx&Y7f$e zrJ7ZrG|8UQf_&5rH;iF33p z4ouApc{|!H!qwxTv1`ay(Z}nPe0k{G2xLOBfD_{gLiv-Wq3Qq+t@B&a7()vOKpqNy zhD{Z2VZTq6xm8}eEeh5YdpG;X>HbZ|{9)^TRGL;RQN-neu32|K%V@laW!@P;Erxl3 zw5~q;7N}`3Fy5Jqy!IbWFykMXOR4=&OdAu{88y10=`-b(W0+T>9rghBU97Jtd$Q(8 z^+hb72qmSuTY)e}Nla7;{h88|6d~B?m;Q|EA^|am22?oJ3`8)(v}V*MX+%kuyXhYW zPq2TeJT=&Uvql+9NiW8FNS9`|Jq4+{{v^3G%P}$@_bCp|ny3sOUtggBj@9|p62rnK zzJ5)m(DPw)T#fS>GQvC_RyrQM>RIVyEqVYiL_jiGZRS-tCTM`7`(r-^@}u-Zxptv& z!E<2-Q^0bu+!#~O)po?4-z=S4GggE|T?LRZN@uOz>jEGZJ$E;?_b$_);6OFlrYr57 zZQ6$_|5T<=_IznW=~=v)D~)J!U_s1*4j=0DnPgwm`J$^yi4G%N3Ob?DTTcI0bK&+# zQFOmZQL;em3`i=qKhbiv3;o$sEP}?zSQA^$du@&TkX!|WWjR(5LGZnKHyhw^M|_gU zT>s9U=&t_>Ty7ZIp+?!Xz~h|CN?cAk3|&m3<=;ATfm>^JE^vTllPxAr(DttPwhI%i z*xoaxO1lq~Z!T7*PE%U4N>|p=4CE%~n~4;66`gz1*7PT}Tz}SYmpZtdY`gf5>IZl)Ih3anq!5&c|_Nps|vA@L0hXoGE5aY3ooxjA%yH5-MBKo4i*?513 zpb6!>cV7Xn**&0fCa=0u^!IPM>U6+x-)}+g{T8!b-CJIN{FXiatGXopmF?{f;M)4S zj~G&p_y6qXOXyY{)$K&9asSTI!I+d`(Peg0NlT&bnD8WU)4znuQ`J>yv1I{9(q&EMe`Kt zDVhD(Bn-l+7dT(E|A|p|LQg%>LZ|PWDyRPv0&OZS{!4*2G>>`KBO@ePm~yg)g;Tyt zB8hz8^9|ZSP&I+X#`SmN{#8RlN_ZXZ|8RHd{##Kw7!jX}W8CJpyrLUbEOLeMA1?qM zQd-phYkBcB0K4_|$W!;f4UAN(djat7e^{XgJ2i?qGx2BT5)6S_@~Uz31zWqygSKAJ z-5@QdT$FM0+F@pe1PL+=`uLxN5 z-Cvw&i2bbak&Up8nZonMK3yGuVYe_8B~yP zbY{d^Hudf;-at4bw5TxJw+VP5s`R_ed2|CmAFwg}Q5!8*@7uXznV@q!0U~M}CyV&< z?`Oj_e@}_5L&-tu?i6~{?%f}!j`<8~ruF9()K>u&wCX${$Gd}8W@CQDt6{ya{jv}a zg4TkWL$7-HT{4g+`(T}OwBrjM3yX3*H%=jzAJGWpaiD|a%Fs8*=1cWB%vwgnHdar$ z^~czt2TJYSTtF*

fyyzEpBk=q*DaHdOz)!}sFiM!f{YK7VhRaXhsp?)CqOI8XQx zs`(ApO*S^Y1_aevVzOYl{v944K7D5Y&6cV_UI+Cx7Ma$pN>m0wms^KzkGIJKE<)f< zF|4Pitst=GkMe&tB1?H?onl0I_4Y~Q`-q8$e>dvcN_aD}A&8%K0_$1_R%zZ&(1WPQ zT_>~duFiD(MC}aKBDvi=Zfynp)$H@ZXC9EV@198z2K+K=P{D-I@r5wFxTW&;KT?g% zOHlKedC839>~HJ@`e~4M4^=H}iW-6>WsebsJ&A53PFoka`T5bt-Ea!1nd4ykAIV{l-az6qM@7OA%WhO;x>!yD{4Y_LJ`*q&g4T(&rfex}gz2$a z!%?2hXZ@79S3P#C!|=mB*sXSD(Mw>_8(;OTRk`*RP~_b2sEzsZ=*u;b__NP#{LZ9> z{)hWK^HKhviyr+ElHm8j#Ri#U>63E^mpuoR$Ts>sHHU%5AQ9a<{wA?t z+brt3#`|XqvA38_T=<=389^m!oH~%`878Nw&O^RChOub-fJ@0C8NJ)(@8=DAfs80LrI@e?O%AHNO}}=x5d3>Gm3{@E#ale#c`Z zc>J7v)Oza4^I{x;P$K)2su=13hqg)TqS(`0X`KoMjh21BTm4YKbKk5pQdFBiw_%3) zj=+EbwF22=Nde)Mur2~9ZOpDsfN*r(V}X4AX^ z+c6t;8I-7IkG1|i;xwOQFfr<{`o37BJ@+;?kFPNQsPS(?d13zECCSe#()#m~C{|E_ z-ZcmUO!O}*yr?lmsqa9De@JO)R0%rkT3l?psCKWe z4zE*jo=LB!QrxX4Sxbqgs}H1HHtSfn)q5M-jhZ9JK=x>;G|~d&3VWStiHEic?F?RV zZ$4b9J^x|bUm_p}V@k0JqH?mZE_U8SK-Q#k(GYGFa;c{)(PY6P}=zLtjq(ot7}qp7pjkV*cWae(@XS zfPS(*4)KH7Q2v84dXTv1bn#Bk)i%cM_Rhq*w+mijS2FchQC1xH&OF@;TgtdVYck#t zElb#Bt4w9ew`_lk`EBJX0_0!KICG3NoT@N&)FYH?Zx{KZ%I1;Jt;F%{oAP{&Hy=(rOCEKb{yFN#tCvOHy%?PkpAaB zGMYheR50ybj{QqWKcfc(;ju@L0rCGeAY-6P zkA;^`ohv1LDj|$>W6hOP?wyH#;=83CJf7e~8FJU4){!6IvGHh{tK=g-&qYyZrb3S_xQ82rSYcT1Dl zKcQAEoxp5V!m}!7Ab?-UM}2zN79dQ^KzP8x%`e2LQcy4_!7~`B$IwGXVaTzp83xi zL(PfApca&~)vbhoL5&4v&xrZHBp?U^lDWkYw$OV{qjiE)=hY6`i68!FqWlAR z8Ow;*cbs~rLOkNy`#rXrI9f4uV-9VWg?#oaiFw*M*E{LGU_kaRwg+j(5hl9%LYd2W zGGpRXWuDzJlk|CDEn?6akoY!O%W|U)lc6|1;Uu2%nkIK5mc8C#>rApCGXLgUBB10j z0i7^Xz2%*litR+bAtz43HoiT!q5rkOfGeiNQ#3kIUzT~gN;_<=c`=e(zu7&Wua*n! zlunuN)1etpd@Q+=QAAOHz^wdSf3m@OQsaVBN&b>t39M!~6PmW&loTJTvZ zsQtb@1P1RgRqZ)YNA?0#}}x2MP(a|Q^XzCn)J zae}NCdL8o9S^t(0>y~K&g=h^%Z9@oY(W&r-Ry?1a&jV1)xSuTA=V}0xA%pPN9I=iw zU~cRH#=WXyfRh1(5!_t>H#UrRO5&H9iE6U)nf8@3*b$=9x(XXK zS?{Q_eeyed{QBuU6#6zvz;;1V&F?#qiETffGrAc zafcdOqSa-Qs`AO2+24Kz-|NZJCs)V=+ zdoc0tHj8Unr5A2OfA2Zvo_g{q5OyI>%Lf8HQx{lSz2md`;BekfXALMPV;Z1$NZjNz z#5#6q+~h<@Q72?QNmS0Jp=a={gnNZ)0#9&294s)-PFmfx_O;$|Xn`EH0I@A+?Kr=k z_K=34=e8ex5Ks+Q8kej+-un7`kih7=mpd-XW&SI7e1i@Uy*_Bv03?au^pvvsezhb5 zV~y8=I`xF(mn5tSrK_PIy_#92tAiO0Hby+!BoQ!_exTUY>I(+4}N(DtHv-fO?Ie>;O#nY3=UIoN^l2|U?APCU|EqDIm68M16FeNL?wVez#?#* zT1HAV#xGxcB7LkU3j37B2ygSu(YMa~mU;q)++zP1%BC@3W_1IkN@M{^EHpdb=`{TD zf(uf9k)|u%i)OuaDD*GgIZ1fqmQ%lmb9X7zVNog~fKP-Syh8D*Hn#-#*JB3`XF^>| zpUZR}xs#dSTPJ{FT?O4^5UDRGl=EGeWfi-cB7ZJgTb}}0XSzsZraDR#S&~u9 z&UVnB1@8OruY1?$?V!DK+1w~rNDS&xTAh2G~PrPzG~iW(ArmCOUUOGs|d+udB#ECbN73|Me_UgPMu?ihsyY_ z>bA}9YJD44T5nhBencZ~1ng zcjfC|R^PPT>cZbEoUi4!uyBOsWbLlj6QRHdN>IZEz_Sh1K{|f`LXnW7EcQVo)M6I$ zBoI8{QM*56|ACCqFqEejDdMN-&7026Naf-U!&u7on-?YK6tOjDYnPBk;k?)ksza#S`Z{Kj`X10OGQy z3ggRQAocqgG!xrq(*k$11Kx2oZd-x6?J18mmaq5GZ}m%cFL^N#E($o#(^gv!8d_CR z0OylgP(zW7r5Vm0&I-NLNVEMkNaW4QP!9MDs#!mR8D7f}D)$qbsgI$0X+JJs5+6^@ zmmn#``U3~J!WcyZfSGy`sF%C%Q^&%v^ZoNJYJUg*F~3DC{{;}z@#922dk+fmK@-sN zAuu2^C7@1qvJ$>^CW^}{*t~B$-~9!5ya(V3RfqNTfS*|uzg=Ky=9r)o1+OwNM8Z9# zrNWHgJ;qd8&jwcOjQk-UN`f0k4ht;=q|X zk+>VTty%2tEfH^K7}{)NK}q4Dp8Lort9D?7=Bi~>(B%Y*-^W*`xZVwVQ}es^7?rap zJq9br$c(oSm6T|>_)u~J)pHw^$QWpm4{-!TPL-VZh<8ENc)E7YHbtlK;soOL& zaOV8!>G~bhr&|KUW&TwrX3n;>f9hDjI=Kg3+t`&Jit@T6p`iB`Pf5`UAdGwL7zc(5 z*gsh#^SjmZ|9EvgX9G+vS zBnCphLi&%-Hu#glXpP!phK|1!O(XNj_WwdjnM$Foy4 z?x*}Tzu8p6-K?-v<WF`p}y~{(R3E7&csgK=}sl6{xQZx27&x zmWb_Y%{t_-&H?U$UZxbV3FNm7-QJ;U%R-CJ%%jrcGM%vET4l4k`SH=*@!=(#9Gjh5 zP^h2rvwIR5mZ_D$Y3|4lX^ezXz^siTtJ2EGl4o*QXDzT|ZBx0t+|0-ecu+CFy3`d4 zI&C$8D*R>zalExq;4;J)AY&UJ>QF9ZI6$}2WK518-h^R|OuM$})3zJFEESC2SI_`Z z;aDrIM03b#hI0A*N<}z_dka71mP$Dn#wyLiO8%iC*k5e{aeh>8yTCbs)oq8c_pv>Z z75rW{?y4TE<$(CA-UoxBprek84-G&Nrk)Qv6OxOVME@)q-wlm-1=(Jb>6@nA7|nfM zVM*N{&{kJcs&g=~^D>i%lFKygUs^ibVaYATo^~H9Yc@AD_wn;6q#&D~3M-q3ebq&0ic^>nKKOVTxRPzmq*5?#C;GsxnjCD};^ z8BYLx_~0U-d+OiJbWyVyU!$saOwjRkmuid=C-|nyIA(H27MgsFM?4?HBv)5kdtJ&YiI*5a zKo{N%9yqK=grE;&;;au}xs4VoaAPt>SZn*hC?2>i<> z`l8|?t8*G=NNrh2&nLESFd$XIT6+4X!|xjIqd0;L;FI-L#EOSZ%V^S}PsY9el`>2k z$l%lP9OR_ZM1i@p>H@uu|KW*Jhd7cNUxE;zd3f-00snuNCeHyE@gzyeqU3*PUH^al z$NwK_^GPu6N?gB6&e6PvVW7S5|2+65&qnzb0UC-^4B34DFLLKSZ&*bLMpyhFy{&&0 z{sLtA|4ku%#i_5r1eBeX#sOXU3(^C%6-SO*fkxJoE%UzlhoGD1XP~UX)y=vNa@({8 zap5Mw40{DwLIkHke0&E`LF1s_W_k3Ru1iW`fVGr-#7i)ePKEV{h5jvF;it``gY7O^BmiwlTvKUxKh~ z2|F0MTTTnFV{f^ta~d?!Z7hw4Gryq@_9qge0Y&BbT12?}&*M87WUKQNH8H*a-rlQh zICSHM#a|ZkJsEVYXAnJyYDQn2a2sP(3V5Cj_I9AlrjPk!AmtIey1tM7Epj3n8l(z8Q$d5CqUMDh08*jhxhPXwYD!E1ib~xt0JB zlb4qdnPAr`p|Rr7XM!?#CXLFzvG#$IpwMVQp0dT2V}d)#zATFxEMN3m2lbedSKQyu z{pLhg!n1eC@Pw8A?%WIR&dW^g7lPUH9#nADltY|g1nB2UUk6C~x*#gUHDBscdX)j( zqkw<*<8W~e##+q_f6Dlqiu}b(stUIJ_}%IwTzYYrR0k=z&1q<#)ynN|ZyXPY%H{<{Z2V_?N?E?H zt#~iY7h`FVr>QKl?|%$wdER-8{Z^XFnJkCslzEh_)0>CxYTn=9Bwj!1o_9Da(UQE6 z@$MZK5^tYG02xYIr=I`G8gaLUiru_gN*^*N9Zjh-muBs7T^<$6%?-MqGuVmoxiJ$E-cY@}6U<~+-1XJDT3Dz#ul1*0dDHZg=aBbT;h8}K6Wr0wX2;pSew?Ar zVJY)@w7TOgZ_nUc?B>i#t?E%Wtt!(jruSFYXY341ls@mDl%hB%opvnA#5#4D51gJ) zL~%|z0amIQ6lrO4`e(O2_1ye*gQ;ZWafNkKRDy0{=3BdXTgNg~vsv@crQmqxhONj$ zwDy~}tyIj7EGEXM3&J~iQK)_jZ=`G_h4p1?!V-;aEvxj(hl_4z1L&)UTE|TZo8x4# z52n{t@iuBt^%a}%wClyG6QhNz&;nNK-eGL8x?8auosS4FIj0%y{5&fz0ZZfB_d$_} zhbAYOvGv0Kg#DVF5NL9^gi8j2k)+^yed`Q|+-(3_q@SU_b(OMgg_EqrwDDNEZ>Cmo zoxHMg2&Jj%$H-n8Pk15`%vARwo~s)naL!@9c-@?E?V@67W_ky3VtC2}Z;cx=G8J=5 z_Sa}=o>FO_{Vts9y+Ah;Uu3ylQW{29_bS|Mx|0WiCa=U039b3W3V06b33)W*r|IWp zGv(c15cbCdug+Qp#=%ze!w%rFts8llq!c>ejW@@TVXw08->Afsy_G52On-P~euQp5CXN(zF17zrxtmAVNu$G2PnjM_ zZGro`TkjOjAn=Eu*yJ4!d4=7MxGcDyzwH2goJ#L|9kaElG#lRyX9K;svz54g&^=kj zI`UQ5=;cU@>u3{bAT_eDTsXoHfC_5pa7)bh*hbIUfW@?`tiVphldCRRfXG9J%F z=r?{&Ad0fg3IGk{2TY`mT^*4%d9^dRK zacV1@N*YY%wOV6z)x#PSSJ}3J<_d+O1FlG2L-&tjCH-atA4c2XdI;H_#*$k&XS02S zmsOgOkoQ#Qc%J>uF8QkHry0j`e3~EU4wdj-)%=8@(Yf?RN?N-Al|6Xao$&t})R^62 ztToKeHw~VZHHs;SFp45AH^i%ssw*B~6+c0UfALwd+rkYMm&I+3Wa(kPTQ&fIniP4j zt6y9-uZQh2bVkK)td+DHN-}d*mI=|b!3HR;&D2p-z@3-Vvi&?u7?yveH1m?qb>upQk;to->4MPw$8$A2Wz$SmHx3$H@j;}!?+n3e)b0)q> z?L`O5^2Xe;`Z=?U0=AJi&8@Ra<11fmCEZQDtz4y}m9J>z4J^*vc+761f_PRm z(-cBe6eF-(IR-8w%y;H4X8u$7L)@@)Os~3s!b2>3k30PBFRxDA3J_hYM?ad9AhzVf z!PG+!9AV9H|GH8Xr^PdO8;Wn)uv|XL=aoBt3FA{$%yW^ifDWEhE=WI@(Q{-)M1(OgTZ?As#R00Gl9E58Hb)ulh&AU z0-sGg;K4~L1V2{aEL|l{SSow{25#$^HWzyb=4D2(oqwdQu4b=@HWcPh{m5L)tgUD8M$2&IkZ|v$-C1~X|kWBg?UO6%}m%XiBGeHkeON|fWe7jM^HQJpTi;Hpz>&=WugC?HJx@UrqUPXw@T0Mi`qO(PhDF z`ku>KvwfA_I`VVc+y)_CaSk44)R+P*?9p<$m7L5aeiPmSin2{5eh(+t46_-PRHgoy zhpzAlS9IBz)JOq)RGGthS2Gu4*gRhdU@GSPosy*N5FNzScdL zqsf+0=v#^fws)3OJ1e63E<+h7ZJjrkzg~>f%Q)GD3{sXL8#8?i zXLuWCoe5^U_yaeVzDCs8Ve?GbQb|?Ko@YGB=6ZGU90xBf>+7IO3GV2;=R%@<*G|T5i`MOH8HLM?>MV9~eZqZGeZ}szy^lT1#3uul3f@RlxqLDz&$nLbxl!(FYUJEo z)19Q5`>yrfMrU?cXbAhA!gRG}eryzvg~0P7({7XYl6%U07*<&`CS%FW&LFjDVj~tO({>B;3MyFC~bjk;V zTpd1~Ot3QVyeoBPdG6V8n&Vq!CSVKPF!8xIONh4jYbGnwrvfrcpAoJBTXx$P&KOs_wW%tM4S zt;3Tk{|Yq(X?vxdG&R5DPeIUt?WXvux&;;Q=+6Ss9ntXBv~c|?!v|Qer|ro`nM|7l z-;5@}$;pf05AA@vSdDF=B4;^b_8X*Y?|Lus?Gp#5bQdl#lbNx-2`H^Yo~rjHYbos4fMsOh-mS{m2YvI!k2;)?Ot zrKUTpn%tcdHb@wi`c~Wc=M)Aw@XlQRSTiEgQP#~At4AFF2HyS}Bb^}(njqxCjLhT~ zbk#NH6o1ZiG6?_?$=YCA4M z6WyLIO$yK(403ZV9ZLNbxw9>?VUAE&NpbI& z&a!Nw=0UVJqd2O=;a29*&TONeyb+~GTxI|Hass++hbUZ+IQ!_2a%|7FOG6&@sq{Hm zn*qcW?r2n2s6$Sr#~0Yz`VU32e)KY4G%}k;$Nj`?Cwx4#ARROc5q z2ib{2Yym{`8-)ijtczebu+FNT*L}~}!Ch8LE7t6^V<2-)ti&!f;S$%7&uF13>UD(P z#Ywy5jP6P%yGf1}tx3IaHeng+mCENxFj1t)UVz*_5kZ-LjZwdr^GHx%E#sN-lX-dQ z?S(h{@B*>%WvZA}(r{i=1zOMp1e$6ayx*U0=s9md9Mc2VJKh2+=hHcMwn{1nh@v zd%Ir4GBg@})?EDj(Kl+u-J3ufM@K7GGBgWqV-cH81&zw9P0VXcAg(fK+2oybwlLVK zS#L9p=^d@+;*gJHzch^fq}K%QOQV{vBg-K!!wg|3J_ZFxyIr{vgSweU8pPSU?jkD@ zj4d0~=I{i2^taaS$WP`U4FjnJ80G}vycu}_EhiD;HS~5X+fa^JQ^HI!aWGUooPMps zR>SRtI?@+~wlaZ>57FBVzBZ!6$BujnG8jloQ{fquE}sRz+p-N-etT>2z4RUT40@-xQxW=sO(aUI*JJWn@Ucr7 zRm@9cN{TK;u@ER320Nf^YIdbU@oL|+zUTIc{H?RVtf@+tluZjA zs~pX3aTU2TZx+tQPhv`p_RL{ctGJz_K*b^Hf4CC7l^5)KvdLthj_Q5OLw(eWV5!aJK3bs{)MFgq`1VMtp>%n2&aNd^STZ|Pxi_|3=>1sq%=(YkFkP{A;PjfT zg!Ni8DTrC)R{uq|j(zuQA`;ns%rgmkKrn8BeUbb|pX01!>bYJ@pXwd7$m30x{J4%r z1>Tz>XT?t#G-?hcf+pin19zY9ntI^8eN;4)ulG*EMuqqHW?$Ag;Gnjf{``ksj`KZ` zb`30cK6?+4=bPT^DO!UteMX|VkSan}gt!Hdrx^!tMJj(7z zFCtksJS;*#nr?F{{+MqjbidAny6(KDJ)fp2c6!f065!CRkPpw&nafVmMT6rSqt(6i zxxRU+9oH_&X|YrMo?`%}k)-ZUT%Sgidw;>)eQg~_m%O+F=Z|lCQ@AFxM)W*Y7g~yk zH!_iF;3?izu90`fRK60P?Dm~KT_aLZcbr<_LEbH+L4FOy`VCs;0S*pqoa?&7gRHE&nXW9_>KzBEf{dvz z(t(jnt?~{hMt9j>7G_uxYG%}{h91Ww>U*%9){z>Q9*LYaJ)6yV@sV#OwN_#d*98D+ zQRsTcg)ymUdu-eInfLFCi!R3kO1Yj0fQfHFshB`lfk+2IO;@pX;&6ErruW9Dnw2z? zUMO-b4o#@EBy-aEs@KK!~x);h+&Z9ECb|-S5Ghzy=%B5 zdbQf%)4nW{SPR>D^v^pAV`YOK?q|e9HzGi0Vq`fnC9H;m(6BY+# ziHJpUsivV?3AcfwEo-(xf-6_G+H%sE0UyY#u40dtOVu=^$Y!%}AY+XATY!NNIDb5D4>TPWX zg{bg%+_~tatS@+k&)@Lw?gnP+RJIB$#`tN=r7}`sZW(6q1jVSgCEAO}Ux$Zu^_8b1 zbL}5|oi1D|PG(VX>_#8k3n>P2D+QNl@3!S8!YO!7OKyJ9N5(tuJ~oK6A6R1IsATP< zEb$C*-ANS9K`S-JIS#OAvEdmt88>Vimn(iRa0v>UVN{42n7+(8i0md~3!cb8^-UD$ z&1meheHBKJrS?SD`FBq?zqU0%^wAd-Kl%JcI{6;|ssguJZ9_pLi89B+FxzLKGT~Se zHnLZyhClo*(_!5^;N)U54)R^Z&u>DzVgMP3tg32Q+~ipwzlHIMRSr4DSV5-#DlD)F z(JeH+kfxUveV#@ACQf1|hs)1z4>piR^OEIm-J7Zz4#~#f=DU)xi^jzx{Z+%3g&#Rs zxzja5o8B<@V#S=*7+Vjlyu_2^tB&R0ZeDwJkQ;m=iaO;)=_8;aPK>^Tv)C9xFGh3k zUr*hrMp^NElPnbr~r~U=NfesU0 z#3{!r`hBNfB_8(mb-oSok_F(GKst{s>_4!Vj@v=;ti!9Zp~J?vm|U!w+ofpsNU=V6MM0~!PU z3a5MTGA-NSP}>dScm~kT`skrnxT2A#z|u+KeP+53rSGkxabRBe)Ec*wSWv&p4N8s` zz{>MKMEZFxoF5rv7n~<3+6R_OHh|1kklq=jo$V>CDWT{Fx~{Zj>wF`Ahg6J-00EzN%@4u^ljUf z54yRoXjAs$0k=or-U!-`lgUKh>Sx#gcwdZM@S~@{`(XWiU+GiTbSFuF&cy7VeBOIJ z6|33iyKWhmh213B=@{i2&(SAIt(w}-C(MV(Seet^yLV5F+5w;ufND?%ek3m|k-9B0 zjakJ5u@A8k=M0-b-ma2KWGFea1(W@9qWgqO80Y>NJIg~breIy;#NjPvgmwh}cXLwf zg#M55LwR~AD+*YPJ4m^l#| zfa_ibK!9lLG54pzIH@939uJUt&b4OqZ!hH{jM@-w+M2eR|Z zwiAl)=OSG&w@t;?G5wyemnTC9Bvs;uV@i;z(!QgflysgYQ_oZp`TLFjXy*446-R^8 zKkStyz(zKg`?-)C$o0it&x0fkP@@qnFm=5IF4`^vKG1Ut%J_@iu}^hVWG9+9Ssuuy zPxKNC9|PURvf_qBDuYZE04Iu>5@{$HLJ_;E*K|G^dt&yf(zeA#W$r@2B*Gx#!VLsM zBdhSZosqADM%!H4nWYyO3aolJlYxSmW}ufb5_yA!0U=Fol@|~Wn6@7+viO?A_X8#O z+v9i*utBqeM!jD|2gIoSNh4OiVP=x)Bxpc!}6m%?~q1p$G&dCyII{=_6 z82H?f*Qv>o-Wjd&ZMN0s>hrAHRlY6W*sQqu$s}XAv#j>a+ByZA4Ac+G)gb;R6baY( zRS0TWKrU#gm=N+qs4vwHZ>exB=7 ztlh$=-S%-5teNw-vdv(6Xb>Ko*cBccgkT0J3_wLIfS78%(-{CpAAnXMUO<&nr0*0> zPUU&gG7f$5rd6vd`b*di4p2N{v@zFA?h3pFaL4;xx*K-bU=0eqItixugSjxP(nz;^ zvf-?jucU>=ph^vb2-XN9khEUTP;CrR&M<^eJ%lg28@wri@ys+9#$f0X>Wu(v3wbI+ zeU2~(&g{}_U<(@)X>i93(Q=!q7I))rhW<$;YU~q<%0=enM(}6CgP7T%V(zsm?d?%K zZJEh4bIL-NinybFbIuX*xhYgoblUPnn1@}jz>?ntGX-M)#`ta#3ZEREd_@=gIXcXc zU4&M`8?p6qf15}A8MECJGYpPb#>K_z^kNBh}G>v_olYrm^I zNRFyOORV=uS(!#M1%9e$*vklfZv1Y2{sD+Ztm!O6p%z^G5c%=}y7^Cs<;P%_;a8rX zz^PaZClWT4<%q|oulxii1t3?N*)}SenL%L&XR7;HkNT*$0M}T*nTnwQ9pVWs{2Lj!cwXLJ`}CT2oJJC0MBJ3AoWz9 zoc@%RV+YEQJte9>vKAPW>}tLf+i^+p@G|U!&oV$&vb?V-Z^={el%URcMtU z5cdpkfpD`V2isev(i$(oSZJpD2H}7H%mZX56NM@9?ogd)Q-5?kfv3pQQNa3Q>(!S#GfXG^##U9EL*1-4ePVF$+j)KU*=NlMfEm<$$+U z+mGr1_jk=QzlL-gx7wdJOTFR4<(fHnM{S*3@*eHS8P9dRI;!J>=RNz_d@~^WNI0%*%%(99PSOLOc0O1L<_54ZxXh@CT6dWGb-RX7e1s!bTfjx)+OAs z(1qvzfdO^LBSIkkJcDhMh$NBmCh-yJokD_ zR}Kzs-|{{E>xRs5?z_+|eV)sFPIs$zf53VRU2{syfULENE<<2$8zqc38Qwka5b;xA z>mLEE{r19|dN(RnF`)JFsW&rM|bOZ3)@Q(Xsk6)YMOq^%WOkr#w z+g!ZxV1=Y%bhWIDI~qN_S1JNJxWp zu7-~&xYBS(`KcU{RmW$Sf1>+vx4cVpo)<+srdXewK&@q0p0E9U`;EJ~s@-!vrE;4q)Q^k6p>TKKk5wY+$+MC2HFWW_a(*SVh39U^ zN{kOa%3iVOK*rNeI;se@ZzV4o6G6*{0Tj8{)s%M%NKZnq`Vu6Q^B9fXWO4u?Z#JHZ zIUJW#ghu_8=4TVB6fUDy*`S`IDJ)B(iAe(X@q7-CqZ3^qn8(__Z+uZXUuyMrMj`f- z*i<_gY8LaanaMYRR{e4JFKRM!!un(l5hcHQcgIHJZ2+qotg&#&OerVJ>vqI6niI#j zvG;alkoE7^J=g|4*?qgpJLCSNCx>wk{jKoF*DUJqs7&=+7#$q$gULK-T@-N=!ZqbU zswyvhT@kS$PxWkY|CjB>&$f4-*nGCbkM1~>l}Hpo=fvNvdK% z;QOpB!rwjFq3pCqoQ9dXiAwo{QyU_4=!NWc1}CQhQqzOxRWz^b_j2%@uKDAj#4$+Z zu@2Qiq~H+d1O4-L=rKLK(bmHDs{_F!e;5)ToO5Uor%{2D55=!@z$OPt?~F>oRMiS8 z>dqn|(7=FnKWF$qUx6|Hh42twprm9gz()!pPyaEr`;_!bcC;510S@2nIl${2LkZ1-Ff* zvp$pWjGm<*s%iV!XL%zqw2XbeRiHKG3-9uE<*If2T@NsjsbF zXU#uIm;Q&Vfq8a?KK>g%gA^hn{5Qj{1%`e5``3VT2JnFFG2me9x2$q|@b3XWh-3Xd zSKy~!I&@I{El=S+iHHcI5hN4hQa$9j^xOab``6%`K@g6Sn{~MXpYD6VRl9#P$2zp& zN@%HfX7w< zpS1t2JmcUUHDrqN;f$_9K7;YSu*Thg@zt1rLn`9`XdM0LpnI{N1^1#PD;omVo{XyM zc`>K(0fjT(|KUMDbW@` zf(3_{5Fpy4`@Y|6z1L2Ltg`IN);Y|2EI(+eXB36|=l*hV2*El6Pq0CNwc2K-*~;TG zDWp))zuGKd&}JcSZRGz>vPAq(cJ9xq5H*CJk3usDhO5IzHWNP9|LLWPUI(_jG{08bC@ zxc5eq+Vj(+Z`>yex&S0Fj1W5-ih#7x6LzB|gL9}PuuKQk=9zt|Cqz|Z8frc?p$7LL z^z8=AAj2KCPY38Yzk^O-z)poEancKKEO zu;H2{Pf3|`OlEo)^A0XY_UfnV)Q=Z$Q%qfgG%vUu)sEWMYbhlkx7pJV1~B>tjDkk0 ziD=dEccGX`mMqx?n5TSs2Dn$5+Q|ltp)a17Dx~lFvN6dhM>3?V?A9}*fr6^h@q z9{wC8JRj;D)D?iq4pPY<#|}RAjdUia)|=T*Ydfq9e+oXxpbkrhw;wt&Ao)LsfXfpL zi{VcI!iXG0-mnW0L=s{k3iC6{f%gP_8RIZxR)WM7G#+Cte0PW41f~tJ5#SypH3P#5 z1oG?ZVMqlT>np2a=^!%eVa;K^4OH!bv*SpG*y-k6RcHX`fn)1ZU0t-Jr}5YAM*rwX zl4bT0DV8x5;2;QM^MNR7x-deGner^+A8upxzK!ANPm#9KmlQ7x3V2%Jne2w+&!;2nk=QJMcTwdbE3& zyOGv-*2LYMTiAiXH$_%nGy%W)Mmw zkwCu;dD|mrfM$(`YepAld%-geLvr9JGHL^Ht zIbdxGeZr7V=*`U=bD0RNm6w+}Nxim>pV)c`nQ>T`ff^kSiR^94k2yjw;{H zN-S;AtQ0>@Lem(KqZBi*ozTy-lrS8u8oU~`+7j4e9*j`d!xW6ui>sxIqtd2AFSaPw zDfXI%C{|VOn=-Q)u@JZLoTe)ZFIJq!pKjduoTe{n&mJ1r-le=y@PP5w5)|&%6fCrt z%F#5GP?TksVwSDuKTmom|1Ar%qE@v;+fqwYdr{Xj%_Z&15a0i;AceeXyG+4|s5bX9 z>~dL?bQ7ruyoXdPUMojy!5xM-#iP?B{38ss8blC(RVQ&kbI^~hIQ?w>#x;D>x&DO^ zOQ-%qQ&f|vLlR(isPJR2ks;Ow%?8KD8}#I_8RF^UF#{<-7ry0S9qTML-ZU4*nTMLk z?V&ScGZR*GRllot-45EeI(ImSd53`@`z`$4uXnbz;WQgG$eKJg*&4T+*0mP(cP7?` zv_H!032MjdzE-lEO^!wyLo(Gd+sqkQXN%vEw@(Xw4@St_EIiqOMh}kk} zgNK#pz?;KsppCfAxQ+e+@e$I8_UT7^#52KjfuwW%Sv)J0ADBr;x}Pb)1F#2Zhtv-M z4;T#4flh&{KsZ9o3Mz$XM`gm^$7y1|5Kr_;WGLmNvo)a$$0Cha&(DW$w;rB0f~W3 zkC!pj4=OeE%Hg?y$_*>FE1xUN@64w3rk_TL%Rk$E1`@Y@_95#e)|c%v%T_cHUw=Ov zuG#CIvYF;YwrA+TcXqnD7aI~Aq~v8GwGWk!NS`ztl^7gKdaoAiTdz8cRXf!ru?jfSZu>`fVag=dKZV`y*vW+IS{QTl=MvnqPFLF z7F>>WH~(mMYrb>gJS?Y-ryHRpSlVbWu&4L7T>~QDs~k3~8>l-N@!GfBwHHoR)ZF@A z0kmP-;>qJL9d0@Dlq05GwqCrd{dvW8A|7hUVyZiX_ z_QVH=7Ui7UhwP=FX$c_-XY|s#BaK|+y|%c`(RRi^yp```N}^N=ogkf^bkAE|Hkx)W zOVa4l5^O&&nYEg`o_EpqmgO(b)Z;dnHjO-6Tprxo931s>vbrW8F95Cg)F&MG(kEM~ zua}Q?eLKADnqAFpWp&k7x}UZlvx8HENh1^pTD?;*-S)+g6o)6fOch2Y(o481Zho!S zLr2x_uKV5d&3=o-l7*fRsPG-Vc|4GNk{le0*1ud^Ks}F|kslpzu842N@%ZJ-&7yJ= zd_f4avfIvnU2vYEy%Dt`XbWXquww07ar1NoGlYDI4nQBJP^2i}dFP|>pmd&e+ITM6 zldx7at!u9<*^cdHd3$vKxaYKg@hO8`?^hl8N289@Q?M4!w_s3v_=T=fKKk=o?OfDm z<$W3CCmC+#1?h1tU@X>PU$($kBfLt5Otek?9`eA5P?7}G-dO1q6Fe)4v;^L2(I}u# zB*#k0wu{~grM>}Mxhp6rNX{>4S0)|cfzGscD3{HMni2>5uETVBb#=hv6^rmB{0v4Z z14pJ|FAxawWZ~?@)E&XV-jTojz7ba-I{^cGlVPr;=AtIa8LidS| zfrJO1h=_>G!N`O|K}h7knuGr1CNXnzvg4qqcXf58b7iKpbugu8WM^lmXJDddVxk2- zLF?#l%K|Ns{^brmBOL?%|Lq&pl7!eVg0k|AGiLiDHr|A68>1yKj`(>RS>~=;JN7kFY!UQJ~vN-_Cr5JnG@(Z4+aoL@S$KiMr4tA_p}`?pWOK^ucKTU`(511I~p zhn*;DCg9+Ela>_?TqM}PJ&?3oV8r|&|Lt+~5gasK`Gjxb-(A1rRHv-r-9b87#A;DBb}hWsD!6>do$Br;7obXd5O|AEx- zL0}#K2Ye+0aE5{*X}L~q85oNH2a5vE|7u%M~hbUyzwazwux{eLiBmb^h>$q=rWyf+-$%I2Oz|&}M1CTim zw^`{SU5@9eHS28RW+mezMXQa^6_{F@M^f3T3Cp!8Ww(YX=rL$efHCJ*uQU*aA6%c& z&b#drp-8>H?Z{-|ley7hF{Tf-lIrt=;u%+*E}>?w9dQz;qX(q@>C~&XFY@Gx?)L=A zJ(xl!9xbFpeOj#KUXaaoelZCQb;uw&S-xHw!ZjW=fAmx^)>gOq$#YnQS^1*MMxh%`ibG9 z_l3&?wPYIy9oKlleIG9qYAhCY>a16Y^K^Wrp)Zf`S4Pw{29xf^0m1LMs#cS>#6`jg zNYAn86xJRbhx+ve%?d9dLl^(F4eNM-5bOqp0vYlHm9h)$831(oXV=k6!B<4(1Fsb8 zc;CQeI!KnnqrP)0)%Tq+VPx5(|9eH-j4_IX?PVzPCb9ARoX_ZfqSM;0%UdnXJ(`a! zc55|jR;nS*1N*PYPt*(9WwYvW(rI)yMBly-o#0*_8%Dr5Y`I~+dKMbY`RDvz8g_*H zwL{b4K_X|_w0aDAO0LX0x5#Ds4X1Dm9<|-u)N?eV`G5o7H*~FVq({9Hd=gor-_YfE z&IkRS$89lXx>l2|8M$40u}TBs+~S$gbi)Em#RAr;T`REny|?wTSyWQZ?0E-hw?{Rhg5ZaNqx0isTwofw19NFGDpqFJoVcotan%V zx&u!EFwRy^9|J@Bd`7vi8{*Du&UP|<2a=r+Hcui%H-FDpTl5-f3`B7^b6s2cEWefQ zv*-M~7cd70X|UQ=$>0!Ia`XK+ubrGKi_h>!_l?@zjH>Zt^DYt1E-Nu4`%tFF2|AKkh?M&6swA{E(xGV=YDqEsr^i4lbb|4wcVHp8w= z(3IQhMzmF@Km|!Wks-@6!~0Fs&cfw^^DVQ)bx*B;PsKWY`)*95BB4C*!oyYq=jQK5 z$7nij4)=#jEe?GCY@x5e3wAhO(ez6!-yD(_(*AT*@^s07rEUE5Ab+tEr7^bvX1>_k z9HTFi7K2qdKCiq=xkgzWn5Quu8d>CvL0l7r9%#J=TCUI@(|YQ1I3JeRleXRFNPIP$ zsj8J6V1`-U^4(hxnro>|svI|1nsuhY1Xqy$b=@xPKK>eE||e~Ok!p;D^W zg@wK6n5)&f`I#{NrN=RvO_t!+ZXRvcg+}dipeW|UE|+PyXn53$@AGmQo=PU^OogUq zGMhPGxO{=lvNq6Z{B28ZmT7&tLbHkU?2!vT=MW5G`PjjI+oK5Dif_ARhO_?Q1vZoM zzLV%Ox;~aJ%@r^9Tz!2XO56;OfN4-xnag8PIZDEeW9LUUuYNtiX{5j_C#h1Hhy=Qv z4xh7d-r-n$mY~(CJu=sIY4U{po#K%tb3NAWu(y)| zMWFKha2`?q4rs73-Kcj`6?$om&-@Ms8K15|CSyiePpeCcjdXO|R|L00qyB)XWTtdF zMgLQ`75@V^0A?l?dlD~>DfVEZwSdO^8A4IZJ%v0Dv}-C>-;Y@S9QfT~)gO0E9|zjj z5~UyhDR2-4XJoX?%4S=kqKA3wLorrRXMHQhfIUuiB33+^8Ff~-aJ+y>s&IF)x7i<+ zV-pm^w&JGU`yFSE%2eBrZmwFEHvxc{&NEi2hv=V$L|`1*6{r)bKAHd7gRGNpCexm| z(Q7NTWFK*FQgWfjd~@y;-Qo7kxD{WX#p8PSgEFvalPVah8F0{Y_M-}?UhYFaG@a1J z51i!=SnB{ExKTFJG3mbVct_jD?{J~%cGC|zoTD(Qd6^1k&{>&_3dvP5+BYa<8WMBL zmBcL^e8+ExP-1AnR$*RFC!%T? zcb-Pv;5Nn``Z&Er%W1w=i<@{w0_|hI)A7W-u^1rAcuTY-PE>^+-+}-rjyqE} zZ?P&M#{ES?DvGNyRwdmKHVT%W7WM-%&gpExP^@TTAHi}{zo7YKvh>;3cYF<9E|=d8 zz#ubxYmHjF!{8`bDC6%Lg^u}&QvacPpaZp zobjI53}!`@c;_=Ok*5qZ3a`iaSthEaIlV)liuegMX!Rs0aV7o&|`9*|sV3OA|e4 zQWfL%OXILOQBO2#BCA(9B>`tj#YxR)o8lIIs+mlI;Cqw4emcUt*X3y(iP|;{lv#c%a4OAeoT!?B6citZ6T%rb5)C0@O z*ldAQB2|x6R@vw<^@EMCtu7-GiaZ3?f~B{(kM=LSl*}#&jh_jCq1eF6-%mZ)l4mf4 zpHi~D+jQ<|@yk&{XTF!or>o^h*5b=A>ce4JB7mNk?hTnYdHN`EVh z`h#qgR=y10F;k5icY_^`z;-w8K+28fYFF+rT3p_*tf&(j^(;od8$n39hRv)q%O30) z(B)Bvy@NMjW1PK#7pfRw1+zo3ak{>b(w^PkMO{i7+&@b>9P`7lx2lm2oLgm{lj|)u z&bk)sjAK%;QWV{7NdJuZ0f{If4FH7jx}YY$RF@u0w)F}S>94QU*V3q}4i=X=%um+> z?w3L}bY~8$?@OUzknlfDnhZ~*m`G<({hazOOkqA%(|Fb5U*&8!O6M)3c*L?*d)1xQ zz3~3}GC_0sDv4=k)B$rPYT5G&-oc~u+qc)u2dP3jY|m7O^X^H6f`a=!-~LQ7<#Myj z%n+=;>JKxE80Z^hWG{uCl#`}BhIgAj}>6t8~%rAkRQZ#PivGt^^m=(R66<5>1! z7FVMnLLH*G>u#xTI|LF#0dxWS^DX1e3P6c>%FIMfW%F!OD=kCYmiM-L+QDtqaMI>v zM2>^H`cPn3N8muT=y!tY-nv%K_N#%W=Z;P$#}TdNFepb;xU;X=mHWeO0?0C{T*^Ta zq3|WJ`0tu%0$;@h0@AB>40gm`L;{!w`D&pUlt#;<)Q~zVk%>4BnM$4ad%qj29WHk5 z=T9$Z%OM*IuluiIPS(&4hME*h-4s#i_uSNjy&9~(QnNPC+w!2cLFjW4@%~=fkO&JK zLy6e(mZ0|RZ=7zIrFRVJ8wCUe!*>PheOR4cCh6_0!T`D)h+ooAcl`f-6n7|T`vqaFNsKZ~#eIG_H(5Qq0w*X1Am|fjzW=G@ax}Nif@mmpux0*8w+ zRUw*8oJ4Mn2zHOnb=#?)&LBv=R-@MWx5IC@_0zuGFK1w$+eHOrlJTNs%iYM$XdA5N zK!q9ahp#+53ea>Hm3mQyCx{g#cKEbPArX9Jnlq*20;-S>Ttlx24+hs`{o-mbH`oip zf8^c*1>o;Ca~Im2tB2f-etAw8335ibholvL5Q~&U2^xzb3Ioor{EnrsKaR9stREWD zUTGq+C-XhwS8sC5;)7wD$Z^$G|FNsx+O!wr9L*k6U64R|yvNLnq$Sf!Rp9c;YC?-= zzCr$Yq0;#qwNyJLE=ZmU97eI|ic8Mf5I3+E+hX@?5B3c;SZqI(X?$Y-1=mmg4Vn&% zmF~|>aSzE0#R7fkbSo7WTy}Gt!ytP>a(-^Hy1#7eH=NeamtZ?t9QaA`bP)u!vT3z> zHdQ7fF<$jw55d#A@wzMWseDbgpZJO}V1&%4wWZ zk-TKZV)slVe4yFd*czenW@2TP&0}9vuYvHl!O}fNt=fo;PwFDyzr&mI+Rh+SYVAVJ zw(-3KNeGMax*LG*Kr$4Qo|r;5E&2-_TEFWc?yvGbXv@_m_w#(NdA^UyU`T@+_}tP1NUc{T0{|G@k_$9lO}qT$Hpn+COtN~s zyND)ez1y{6cef*6A{3wpiHB0#-MVArPP!)-iQf(eS0Paplik`+;e1!~Hs`62(ASJ~DD*mEzyEzct!jl%+yfNC5Gbal9p$|) zZQ=ASpU0%mINA4D^QAYpWqR*><$WJc9SYSosamR_ol!4RTRc%<>RMra^LV|oRnh)5 zW2}%TQ6z|KKn{|Oe(fMU6Ch-|!zd;d)$`MRg=l^!PJ^A#`w#k=QkkE9${gak6KRs_ zO^WcW@Qr^CeiWR$nSt;Vp>@?7Im)9VY2@Z_w-zuN0GDncv=pr^>X}0r(KWO zK>or=CLiM9Sx{nyI)z7v0-5(A(vT&A?vaLEB5tNJ*>Ss{&XQMSjS4FTn(lqfDs9|W zl&IEDHN6^zbC(#5VVX99@0q!^l2AyWbBW4=YxB&a^KTkLulLhz?;+4%@(YAr>?Eb6 zxl;!f0}bP(+V{T^Uee>;=>DgMjSd6*n1l_Oa6M+2V(RrVcCUQ{a3VWRoQ5$U%T(7% zLJA1gXMVxhvrnSbJO|1nbQI*^`h>;PrKE{TW@OQzxs^#!2_s0TgEn8|{am;OH{%5p z9{stJmBO!93oXL7#acz#h`+J6ewhrO#Jo1%evqY*4~%xiyy#tMAYVne{OPuU=VAU~ zv_IS3QHwpS%=zffrT#3nIRD(xcra0ZdpLEw(6h5pDZgvc;p#WL_s#BFcdpc)g2(M{ zrQz8^iZK*{1~N~gl!|YI)+(B z3X@7=Pzgi*r7>m^dobOaGF2@9tCkZaxSz$3C6lhYlxG00=tn3};CPj8-RnMRG^9^&6G`19`TEyB~K( zGG_04!|>?xBwN>1=umQ$iHw(Jx-eh4^00m#)|RURgr)FsGiiugDZI~G7PFQi%O2an z#jPRnD1pF>uxf}E{HZK3thQ#gk&JdCSn)T)Z_&gdutuKu@<(&inRKv=)UsMy%1s!y zhoc02ZZB1D9s1tR|2S3TkJg1XStAw_0;N@kiT^2{2be*I0T4uT7g#JBu5=ZH@*HQyZzGQhXDrLEz62DjJ|Dt7a>iL+&<(v%6U|0NL4oX$2vqjCM8=*P_979ry#nV**1OYYOz;3DWKf(;+xt^I6Zs_C?n0$-2;+97Y#T1=|KeoX&MMO@7Z6flwT{(JT~H!ZQ3jf> zB{zbAQ>Rxtb+dK_7Rv2nS6==4l%h#17fH(uvdhtFe?j}_m**kN#jN4sR94|L?xa~u z_M?Bwni;O11w(e-vsg~36;tK}(*yL)Pkx{>d2iF`3OmEzg7RPc;z2WACqNtqx55sv zEonWBgN34isWR=M%J0;GuP0DJHr-XyKdYUNs=lY|leBUD` zy8Oe2+`IoRYw(2DP==(n3#rqiSz}XjzhSh>gfBdNx|So-EI^-l2&+7vV`<7QSSEfR zUmpiRuofD=H)l2(5VgoBjb_y(7mp^hs55ZK%xGift}oSVkb0exSdH?d0J+nGdD1B& z6TGQ1Or|5bf@8$8@zdRdhI#S$DLjib%u0!FLMa_z1WSn4AzONjRowe%v0`fx<7dk? z>Cp?Mrf*{_w41jVknmv%B%Cd#Uupxt7mjMc4CnoYzZuV@HZE`uYCsbx1|qZ)EjK$w z!w|T2G)dC;@tSV z_R%4iytUS}9A!`h5<*}N`aE|dzxbht^Dd8f&W;UF!%57+6P%WCB-u;Ov)VTI!xBUy zC47U)cemoNmJC3H{RW^O6M<4B(5Jony-Yp(+(_5xurg^8)YhUb7#hfH2tF3aSgTdkTS6ycCm3KM^)luIupH)?O-` z&5|53l5Z?1%{d5iTqI^_)WKOBI;#<(OB4%a5D?ki&o{qrvv2P`WGx&GWS%eDwhu&z ze%~L9G*@mbD^({z{UR0iRjbWGxV%U_%3Nu;ThB?$EgqlKM{A@|E^feXnaLz%d+lA! z)#>}!CXfyA*>n}2jW0do@B4%pkq`Qb(Q4?5(wyh3HX+&|z{O8G-I;&#_Q+8B;Kn*I z`{)^(MgO3rohBLxdQ#UyV}Q6q{o&-W!j%^y!}@YoWOq1qKf{{tN%FH zr{IH7or^mE^6C~52n6!sl}GoFECzrGg!#aPC?=H{$TdPmd_8eK8uUy6b^M!ZkAKnp?~?$GftF8Q!=;Yb$VrLBk(-+@t8pSYE$2CCVoMmkXBWozcyv+%b#XPpbs zeAFa))Jl;>CLOJ&@Im&2INA!<&OM$OOfB&8+eEWZ0T2_GE&gw4x)7OFm+AH{Pz>q5 z?XT7HAnC-h^iO$GeiX5^GyZ{CI%^b`o;1NC*Pm&Y1L?1fOvj-Zku!XrZ(c;p6DBLf zY($^zP=&=65t;QqMl^}KLgRCrCsaJ|>jWF92S@?1D59r_gJi9zOSVS4(<+`%^AKOR z#zmPR6{J(CC0nUSv=v-JUhN?y|CqDEDibp-`m$$)(LkaM+DgX9b*wK)f3uMxxR9Vg zBms}pS>~zjDx$|!mTq6$e#6Iv{uTXJT|U@dj<&}=IkQSUhyI{YEyZm>xql4Kp}4&4 zkE3M{*Q`HJ8>ox=Q%pMWCBQ_=k0XTk@Y$^F*O?;MG>c2kr_EnB1Y?w+pP7@ir!E(ptA)wnI(nyv&O8cnkp!~+sd0z3=phSQlXnw#qj}RU(7ZEpP zQ_bs>(Lkont)fyZRnZx5e;P< z{X1q8`CmX(QJBC_r^jB%SA`pl`AQi;iY!Gm;Q`Ct0N!TA^*5mAstY-YYt#x_>z3`L zKT~%8W`Z(d{sj~i78`J5u?r%^+xhVB(7#Cm_=gt>A<%lG%S7-usEJ)OT1bsQCM6w6 zwxZU5o&SxSV*&pHC;TOh&x_>(M2O(uz52p`lbSc^AvFX7$mM?Y*vPNc1_Yqgh7;20 z48=&eSvVFu-FAPa2Y!&dotP!p9f27>(X^WFQ#&73Y9e!G;;2+c`v(8^B#9(Z8;-{d zbv)}&f4`alN;_x_X09v5;_RJ;%-AtrUOq9PnA@FSefa z{y*4SuGS1wXZhk5!;<_ zOV2+|vpF0+xKlnEFp9_16fJ)Jp7EKISGTRSerqU2^e?#DBcSvJqjg32AVV0T?9;SD-eepXcS#hyV?eM5!Jj=s!R2bzUB~KTEWJD66q21Jx**%!ln7 z56YWU?~dz`fI264Oia!X9|sbNTh+Hr-@}!v)rx$O%_tj9B=uy)X8zrN;2+-IClwi< z!g}y{OrH#T`6WS&zHgH-%*+|LekxeSt)ynEM49`;v>W&KLtsWO|D=k8cI((wk-Rch zJpDl}m+POB*c0}m=!vx)H#uGN$G6|&`@6`8oN_ExyhW*0X^vfCP(<2Xy0@Dix{>qZ zl4AO9y=f3$+Ve@lzN}ol*-h$!*lurPbV4wkjeygqYkE%rDkI@2ZJ}|d@h^>Vr2^RP z6U&6H=K>B=w43upR{%}zzi_5w6e{BE_C0H?Nn^*2x@mLZTvRF)#EVsmQOfYxdUyc# zG5G_@ml?b0E$B#EiIs{K=8}yrhlK8xX8L<`tb>*` zR&wqn|6`~_U?54#^n~H<8}64&rA6^A;2x34&V*BBmN)MS-&#tciy+06sxyhgW53u` z6xo*`aUQ|@q?s^RJAt4HH6$^hpZ!!k-sgva$%uAl^Fy{o#zce8p_%#Tb#&ybI8Xug z2o<)Tz<}cY4x(0jvD(S>!KaC=Rd_BCEXVoK?6`X44omka@<~u+*BhBDQpo4|5xG?= zZwOU&j+JC7SJ7>NbG!q}ET>O4{t}mGx_7p5l0y7!6FDfHT=tK>=oIkRUc>m-wLO7G zldgJ)eq#BOO^WzzV#a1l>*V|Bz?Y~dMK>L^5ML0kKlC?C#4&WaO)E@)`LZY3c*qC@dz zi)8%%kW7WPvU_u733Powu)jBuw4KVZ*d5L{>vCNGF1ej9Qf2dfqxeRe*;#qSMa=eXbCyKlh!t zB6y!7DbBfw1MY>xS?**b$X{e;^@;+;hPy|GYy`UjWfb3jnK-65EK-!owC0+9;SL08 zpjB3K6X=2R;aG`b%5-HjpD1nxNsNL)^v%slR1OHA!0qtV1=VPOp1!hz1|E>*w&Is>JU zD@I3;MO{34`OU+0rO<&kgU3;&T(>>zl4+L_*hT7d`HPO-{w$WK&1#Qr>Fmwo{d+O> z=5*H;@2{~V$>Im@W7iLun-1(wHz7{}z@!h(7Rwo3f$$#ICG~fzv`jvr>p%>FO)$=vwtK;0i$;|HBuwteueR$Pu(rC!aZ z8L6DE{0By3)sx&0KOSUjX_bp(2_kytz%Crc*09oNn=U};eB*Bt;Xj@`_yOP5%7;@t zz!r<52_x`g(pHXU3?ZKjH<(O^3y->`k_kV|2T2$>=-y1UmRX-G&+Og9xGc8ci9}ex z6kW}M4Q;g&vkq23m~;Ll z0`JY=KDsGIAmOWy_8Ey2%55m_<*JPfL|*`4N`)`anj+W+kM|SLv3#Nrc~Eb?CMkDO4FoB@1>Or24|LorfckGOXu|(;0aWq8;D0l$5VIKjPjll>F2d-I#y= z%`DqEW1Da++mNmrl6twNs(Vn$66OhX9Od@Ee+b;km|hXadQXUObx$^Ts`zlF3xfR- z_}pY^Zv2=hGY-Yz(KuZ>((6T(roDOOa`@fw6#gt9&bZ+UzA*`fnG%LQkzzo=8^8@T z{JF#rP5>(;fLzH+4${)F2}oi6J^%S}osXqyY(qC|*h~(kI@Z%QQL$c^#_BajNyC~o zLbkXpPJWw%QOg+DH*kUG51Zyynyn|CaM5Be2U98pLrLA{^_GjOpxSs5^Nt17aP4?i zy?~CsX~J9TSM{jRB?lz&Jn!VW4bicGQUloE6KlWlsm^2M>KBc<3m5(xA^StZMlADgpTx1}o&;Nco>qL{gA*K8Sd37UA!AXG`+C-raZQnK2 zWU*X0_Iew3X0N_)o7cS3;a!X7BM)hW=1@M;mJa6Ggt$L9ut)|3w9|zo$qH6m#3(@2 za#R1PS=98@>CL4ogU#5GQCmTfaQ_zPgYMCdhGq}eNP4kpdMcN<1`dmDNd%>8e(a}0 z#mSA+IRK1U20##s*&%F|KULuu9+%@$>eZ7a4<+@cs!?YY_J$iaq}9z$frf zp9wo613AbAUrwxZT*{so6%mhd5oIsPsqZp*2lr z%t|Es(!{T@P}3Gd4;jhI(~a8H81@(~LdXP+BF6ztuz9cW_$W9pF~7j%w+_p%LhbZL z^Ls3D{BRzL6`dMx#8OF&qOQY~O0I=Y?+?KACxb3?9j|%lHr}0O%pqyV4YrflS}J{o zUMjZz0)qB+u7MoqhA`@Dpl8I@I=?4_{KR{0Ju%#c_WGIT-{DOTTUdL{W`$lAPK=~` zQ;3e6%$%hyRKt4jokn!DIUA5lQ_g@qYupSn(sN&GET^SH+i%*j zT`XqEIU)&ft+SuWA58kX%ZSa)^a!^(398m{8EY28!HJOEKElnO?>8~M zb=_THUO0YF!q5qEmUwpaEK$x9V{1b8X3k$0fR~e4x2cuPu)*v_!ep+a4ZtR zH0A5h3y7UJ)V=y?EsX*!CJidmOBsbg%whIZDL_m&D99*=!xYtCWPH0&AevxCu-Hj( z?B4-}1{=voc7bAvz7Y#RI4X;?n3{g<{$^e;b6D!_tkoM(EpZrh7x=Dv>F)CPI@N5A zGt6TZf?)5`9y+(jR!75lp|ED>H}Xw#V`*Et`uqdpFhWnauWNa$qwP-LvM7dGH+Vt&y;7a_#4vNOH5$(<53`?Yt$8cg)Om62!>Oe`4T!KAZhMl zTg@P=DH!jq3gB~K-On%4_5+*J=gW9cBSkY#y1;EKKx!_rCIA(S;Gxh;=&jL)#(1%_ z=lmsQccQJf z_(*6j*PKtJr6y5}q~B{gs+-H*EJpz3i0S)ohx@tLrKAlNglR*6UMM*U3t@c&p>nvd zT>BO}4H=vpd0cQ66^5HSx9WVF@QUuQQ(X{&bF%U&x)ZKbH%|fwIEpNGE7q+N`Z{HTbI^%`QP6K5Cg)O z%>+E3zy|P`kSWbBPVMZWa}XcNZ-~pUHa<)=_~7G@0P!Fq+CgtS4FMlvEbCQcmVi?-^iVYYzU2D7!j!dvYE(}9W0jIcFoR%YocM26MNXCAn`|JM4ve!Hi7q0jlOz0xrW(o3anAc$G-EPn>htsmQ0oPjd zY%6xoR#DC*>pP2Hek^Z(S`l}%&*I;OWlvXh^IaiKiqL2m)Qt1L1pxK&*^hG z|6}xCd{i7P@MB%Kcx<>UH$`M#aiR~9BzeJ!b-f@AY}@cy|cS^2WN!MiO-gsx+9kVsA2}cX@9zYg(^qzILUiP_I*U1)uX~$NkeB@ z?0DZtxlRIG?>Coy9n;#_%-n%QJ++-I{(Sn0JoaG+TWE`3X+!(=ftLQ3hRP#yFp$ht zIQ3QqhK+{Mvs3mtc#aMLZ*nqhW%_$LoxTVh9OXC9FR6n6J|LxE(v@TQA^K2J``0h| zB~!HILrRchPYzK|h=8`(nodL%18gA4qle2hD&r3u%w2)SI^R6D=^}X+4KvzYgb#_-DLi@fH;r$Ix5p>5{ zF<>{y*>dlV(1DNcP#K5QI6E&xC8~bwZ;#QruZmF2J)KvxD?YQm>_Uq_LrWBs4XEnGtNg-gl))c7I4qv(21m3)&zDl|EeYU2Tl{IabwW* znd{)0SvFv?(}!u<{y*%!Az2`OFw&JmXoig`c@U$F4jj!83#$m_r79*h|)< zkqQ-iN@ws81LW_G=8GFa93d;sM>)9q%u{?LJ~Niaco`c#=U3`1p8!?F7$XqtO$iZbWP2K-oz^C5TA8qRBK$ zP)v1x4XFH>6)4zTERma@f;ud=Oif*)k^9(N(jK~aEC=#!KX3B)Lq+v?F(OUCOkx|Y z*2zIaZClVB!i8!c=6F0uTH1%iL|%BT9!6`9g$o5Ke3c^L%8UB!pdl&bj`UsZ)KbBT z+zNX-NP%;JcxWa~qvrYf zy-g~QgKjvB+|f*?685NaWJcn9L}i8>9nMs-p&=SmY<2V^L8DK5{%D4AdgtdIC{=5g zOskKir3D}P6i4sw=7kcUca&Qt;BW*Xe6bq}BT}wfS4cw_ZtBiwKk#czxxNXViBJLDUpZtT!}HF{ZK^ zF^R-_Yy18ya{m@|LC1awT4im&T&j6dxQKqNRiZ>MwzLMU5SMJ@)$5uZg@Va>VGU#&qA#(qelc;wv%d6>VQ_kczF`lnoM)rck3fZ zxb~u8Z4cSONNGawiKqVThAk=5(NXQ|>sBPH&?IyYK)lXjLIdmsB*CCsE>FjZ&v)2a z3}T3$6plrl07NsfluzG}54bIgGkRAcp7V^JPuj(VgIX%%!T$gsy7>V7&G%ScW5mB9 zZxGtWHRjHxM5jS2dQFr5(UYWIDNTI$M1u!Z>0_qG!@ww$EKpkZ{WS5m_Z*3n5IwAb zt8k_(%+#dVy7}Z&wP$ls3?+lOc`GP%+@M7qZNl#en zHFY?kyV=245De#4YOHsass^~UqW1CohATH!*G5*g^m?;fMjKlgLo zzSz{UAvG6l3xzlC8Tlo(@PyqsdE)CPr3v%;fAja2k^na{8!Nm2eRA z9^l*E6Ukfv#i5NF@SRSJf1(Bex(UW9ho*@4t*$*M@$c6x&0=Js`!JT-th#`bk7Pzk zf!*C|F_gvYvxX-%#cOZYE+BPyvov3C7sI%Wj{;@t)v++?OJ^?v7n)T=$;3oL7H-XF~n_ew4Da$Lo>Aw7g@9saQ zwaV^}L(7hWWuoP`{421=nXCwdQ6!M@MWQsi(`bhZb^hgU8)5&0xk9yRW310Fdnwv2o}^KNUJ_#ngj^?@vNy7e%b0qkS`cNj6$j%RaSQ;^LTujQ9-iwHUH(xH>AwE~bFl zH~QLIfr{YKqvwrK;Q;JqL_GdhmWhzkQ7nOn6t)cuGK^OEo9IVtw3a)NQp=sV5)H$a zr)}r;FQ32?o~jRDf1%JrA6i~}{T4gu^R)E(n}lB#D`G<*DV(B;vwvLtvp{YL>juN57+a7A+7Tlx+!N@NCy0i0hJl+E>D^k~jJG6CAZ#ypA=m=?hM(bqj4v}mcLE(hD1H$1ir;-v~0_&SH zv(H=IQDlzu`k!FIh>?TMNWw}Gp-KwBWCcgAs&ebFOX;t%MC)kMW@~;4H4j!STZVW$ zb6vJ|5ct0nJj@@X&7 z=(HAXYH;@ogf5J>om6^5Atm2@N`z?b-_kjLp8#e`8%BNwEgMCjj|^^+T4R>U(l}M_(RaRG zya|D)f%ECbq~08Ay;4eoF0aURXg=k|BmVKt^=i zU%XBxZBu51B&V4fw8m&nVxmEVV5(Ky={218)+6a0M)SX@etkcrAAG;r_1kT z7>_NN{D1D$-$31kHDn_*DE7%b*gniI4_unDmTCt;IGeURE>5plcK1arN?7M$er2w} zrNDlg*9yu4%^j+=I`k28T?riSvn}aq*n7LA2dn5O6z68qt`h?{^mzr9e?m`qk9|vQ z=emWKjjgB#btEYZH~IGbWK7~agEldq7J@_bDhJ>aS2n;;`* zdHLXLJj^upKh~f>`sA}xk=oyzpnrdt>vc(6#X4hE-t(#`id?Q$88LcHW~5WlVo5q= z!85M`hu1WNIT)l>!5}QV1p&k&st;WC7a(pK>A=d$d0Ca$z>I|y91&YGTf3X|nz|X> z%30K)zYf-7nJg~*c6OI*UQ9P(t?(dX;UD#to6yTZe=LBS^r?tZi)qXf$}opYZZcnC z*=p%5%v3D*AM73bsZig2PFhExrwa3sZAu#uCLfN4!A6-~8-<91WtepEj4`T&f;0ZT zOE&-BCFk3xnDMuL%q3C3tkOr;iNtoVuJ?!lqIz)mt+fT@O`N*|J5!!pt&6 zPA`nrJ(oqSdA1i>ph~mxitBL+U$;H;hLVfUyA()ydt)8x&-tHN;xCAxpJo8@6>V~9 z5X6wsOIHw(#PV!C(vCar;^?)H1%$uW!%yl?$OH>z2(lFbi_Yfh6Zn;P$-Qy~f47XW z#Xj8J)7X79WPcOzInKKE>uCeKp7DNd?U1&vdrFv^tOC{tkw;h()6_$S9no}?M4f%D zL0=FwHSeUul5|eX>EmS28^TdG{Squwhz??kJBF0pByVM`LoEihcO0=Axe;a0SFFDY zIkD+=L?@dAI!{3-9`Dl!vPgIv07WO^&CKn{JY^EPw37mqowoIXR>FQSnmH)z3lV8K zE%*1+C@rM#$DdxL3RUh_j4KQHmWBfIJP$iwseIsd;APB;Eb+%nVsi7~1fOO$`FM8X zADwN26^2Vg6M90%?)|2~?eOB%F%9{K7GO3#1f`<{Fyh^JF>6PIKK(@HT=n}ZCUp?V z%!{0bL+kJ|Sl&sYbI@BpMmX+b>&t6O^m{*IS~-CBlJlnP-b@s(ZrqKvjeI;R_Q>bc z#olb5)mqyY8cZ9#sX@5*C}rrrAI0Hr&abB8sc_AOVdDxt%B$6#@prIbu(Pgn z@k0#0k;6+Q#Kjo!={E)uR2=Ynphso8Pq$A`7#cAAi*khS|G*=lNv0ahiar3JL+UMS z`mI~@Q*mYuWwsfQVx=yH11qZJfj!L^ZR#hEy+wGlpHmx2ok9fei|DQC9QwjjeIUya ze~9Lt7|B&#^Zb*XjQwlZ$PL>I`a#O}`K}jBU$pDBK>N{%GDKKgU0+;D2u{f_H)1oYGvl(b+Pp6YklNwA2^zs?h%};8^cU?>} zsDQZofzWjO&~Wv*Hz2@3UFo&xGhK9tmyS)9DjVf%-MQrRvpeqQKS)~!kj8Txx^0yY z;HC+!{i?}d6|5OjYJGAe6#h7d+K5H#g;=EXn~g!zaTsICoR^J)Q&%A$kH_@~Lp!;9 zqZ#?>Biyb_=CF9pxJ{wX40Mx?xeMjpMrGiDb)>o>I+VCfqY4Ph+mhnb?Qo}BZSHns z|DK$={17lwhs-GnbgYbb-Ds|bs9BHtHHvc~ zLwg>%sr_hG*j0-Q01-&{V)>0&6?#>y$x=XDH}$bgQ(3~B(@KBmtC$W9$8vmmDznJj z!+nF#U&3|sqTZ}8ew*Pd+*&ueZyUv_vg7%ooM%;ss!tvHZ|2))y5IDpN!nkx-D_Z$ z8uE8C{*TnRl!sSUcDe3w%2$OwSVg3Rm=_%eWXypuvcHOHI`Z-*UOcXuKyVU>D?5`) z`MN+{@Ut&TuQW%sM`%1c>H!UX$l2soh`HK+=JIzJK?y9$c1)Y=J&zf6%z(>PSu97* zN6Haz`sJ}vp9azg(pJgdGI+Lde{8@g3Ic#=Gp{tjFh_SWp0D=W0~`lSB<|k{A_?=e zX9oFXn0f0Zrk`K6eWcR0x_$YrNU%8TY37(+ReDa}oK6C}+NK3lPnd#) z*)^#(k~Y(!pM!WA-Ytf#p`_#f``PwOI@EJNY>PocB z?h2%tj7Ha~y}6QhE!O9AsC(y74tMqqMXG;N>3DW^NHpmzzhakaN4Beo5c#;D!+!G+ ze`8A*=@?hS9Y=;t7b2Uu>NPhVRE2t{wT>Q7*sPtcd;sabpKq#&WxD$|sSdj9O5kyr zVlvFN&cRSKWEKF<-d!Nx@{MH&MMa+l2DI+k~0k&MO zQ>aC^*>gWrw8IOor;>Z9916jmKjeCsn#I-u`p3D`hg7w#;Fd`IP4mft*$4&ntGMf}T??%5lbv14k3`cNBZ<=jzv)-%-awg7) zd%PdJ-TRT}1y`D8#oh!hDQ<$n1NypHZ1g|Ke;Acmt1XxCTyz-j+Dw4xR>yepRtU23 zW{>Cc_42Y>Sy}E!uQaYhJo~4n9ye;t=Zp&#?gC^Thsvsq+4q#)B^$OP+lC(L?h3&; zpOc?{=)bmE!dO4$i8YtarRKiHs`10zM;{l%8{QlTeBsEnw=~~FuwzrFsmBMD?u$Kk z_h~U?0K>S%&38ZOvs)}_Ot;*QMnP(FHrVuraJ4+@g|z|6LVVN|8Shw}$V~_DcUcI7 zze+Cp?af`b&`(hYN*rffj0<<|mp}qP`2$Paak$mxvWNaxB}iinvo56BkmDK?%`9m+ zy+zLWYXnR6LTG=^TmqXGYQ7K{OT};o{6IAt32EIiRv%K42~#)5eL48UX09^Lhe;f; zKorQH@TsE_rUCRWGJgB-yPe`pNa*)VPcISL14uS&$;XS2jX^_HpZrj0iJaF5OD$)_ zN+4ex#5+CjtT#D;)L-7$MFxA2p(SaBZQWC%9m|W|>6al#m>2FE8~Ztr;U&Lq729^E zTZbO;#>|YNnU9YHtv@M{@k&#v9zbOQPd!=8)Ff7uOh{z!NnFv{0CTK}d+l_Wr+DM5 zObFZLziG*czxkZy6Tzit`y=*&ZZe4iy#rle`*Yd#&wq#-2W(`Gm}2!wqE12LYHACl z(#WWs^>pE3{J@qlVZe;u5%@YW{Y;c1lIxm8Fo44^pCXs-Wbwo08E=UI-55PxwBRG@ zlbY=@#Y2B$lqO~~x?Xav94#c!t&vwvUGc4ZK&d6*IsfT2m>6aKz;aaP3aY@Ym$Fof z;E9@s+FOvTr;Qus<+-fsNR<)>Dv^trmFJlWr}~7tsv?~+5dcn4q%5v@srwL9+nGyM z|C_<|xAQ&Z=Wl1MGWzlu!{{O-TOJp}+tlIhlFCAH#!<{FvDM20kjt@-#x! z1NK`APU*kM%{y8N3%zJkp+#TRt#2J6Oa-R1*B%Ss)9$ndI>AuU%3vn@N-1ztAD2wgn9Z}|q2+()cK?gd z2%)?NDPq6T)HKE59x)@_MV8uit)jr7>>eZR{i_jNiS8J2GdzNT7Yv&Ev>@yoBZMn% zI!7jM*~BWqT|13!Fog=)EwXntRrNZfF-YPz*bWEZ=`xzp$0|NtVI*-|`IR2j-zdxH)s|48 zIm7lPm<(gV#0+1u!$%n+etM)ThM(kw) zO|~d=v;{$}3gyqW2OUmzQ=lftm@t4gkwJy(CaS)~XO=LO;Y%CvD(q*<1Gzl}u_j)M zfSyG4UMmBAU+^V}IBlnmJImcDJ6$D$G^^R

Zl>+gBf^+{1#&S9%5*)t~*x}NWb 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 F|3C3ZrH%jq diff --git a/docs/features/images/add-venue-constraint.png b/docs/features/images/add-venue-constraint.png index dd6f9e5a87ae00b61df3ab3654730b3bff2db296..bd4534f3ef90e9017f053d03c907926e29e75776 100644 GIT binary patch literal 76287 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 diff --git a/docs/features/images/adding-feedback.png b/docs/features/images/adding-feedback.png index 19b24c296606306f400ff5b4c78a2a4e91b7b13d..4deca7b82dc4ae5b200a776a92fb86ba37e37468 100644 GIT binary patch literal 259850 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 -A}36xy&0nL%M-(`lgN5|MwZ@a)Cd4xcWA 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

k1wd)ILr*|bn>P)~7moul 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

+$(gI)%|QAbzQj(1r! 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

usB2^TBD6(<p2B(=|j3 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

AnQKixYgv^m_&ak=Svtlv`K#OR3;`5 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 Cijrvn literal 202919 zcmeFZcT`j9+6M{4FHl#==G?m_aZ-PoE2tw$H zH0hlHA#gV{bIP~ABi~u~uY1>;S!*Vlkay?VPyIb@zfx6}xk7r26b}#Yik$3Ybv(RF zBY1d3;+HN0pS=HiI}#6%?54G}w5pu6G?S`}qlLAdIUb(utJrvAsD|8)_Qlxij~-oq zEGhp>Dbg?#jYlx>>8b3aOROQ1s-^Kyh|oc=iMZ+rKK#(d)8TS6zqaZd{Q7knH;rA6 zPc&gaqS>X%yRQM$og(6X!k6f2c@Yn0StT12oQEIDb^m&M=tZ7r4fRA84oN)xdlxi} z+ZV3CJT`rH2ftzlGrcx><>r;Oyu$lviIvm*T(~C@9bV+kj-?3#W$w9PydQORQ8icb z9ue;%6}hf=9)Qf09$deK7j@sXDQM3uxyabtQ_;tcX^si611hN3LoE3uE=}k2Oq(d@ zosRuSMUt01Z<{eHvmr0*ka{XQI53#OIL*3uH?}uVHZ?WDp`$FMd_YmxMPePZa=hbVv zu5y;>_FD^}hM*rcGYMo;moD?_TmSm>v*&>2x$>@S6w?FJGSa#5pw*g}@2eT|2r$CMceD8!WT&6Xf@qT!X$ohkc@Lb3Q z*Mo$ckIC+aUM+m;>Xg1rr~O%S)6wVJW^eGvXzOd_5i@$?tyGWLXP9RoQt~xdC_kBc z#=XzU4I=u<7{m9;gX#I`qtK`EMxPX-2A%ob$8_J-6(%HCzj>*`+?KF*KRc3^$YtPXG~lIACX%n za3i!OP+WaD99C%}V=h`o$f~7JVn50gVf^rGQ(sg2$&Q4VB?ZUT?o&tA4y56| z@vDKJA84Q9OO!`0Q8agmvMF?w-fnZPaCah--1pV;5uf6jo3;;e-a>*;3Go;*`#Vn; zOp$m_2PAmA?$bVO#WVZ5BrV^_!yoHsY|fMsymWDf z>DK4q>pVn#UThuD^RfeVjK%Nan;WxgUlt51G$zi$_x|M9PZ%B${o{TOA*2Q2bff64 z!zRIQpt~`i)K$ty(!XAkKYN+LEco*7&+r4LPqHkOZ!(yyFEL)bLup1+c9lcAE9z~B zTL#S`wQyMSV{WFD4*QJDOHzh+(^SbaKP2Ud+k}TdnN;)VCwMEv{?Uh@5%l!N`|fXh zR@8OG_K#IQ#P_e{T=xy!H^tNVdNbjg#hY5wKyCiG*XG90?8r4=!;E3tV#5TdEBOi6 zSH6h1seJmi-AjUmDgeaqDkdgGp=NaWz1%9WjG8Fm+_89uF8@#XTN(sM>I#e?Xdk|n|fPgJK$Z?yTo_d z>J^k))}aHWnJMxh`S{qn*o*g;uU~#G#G3lGxGr zvl|RO)3!b5x#uIGSMme|A|bCh-*abcYN)6>YE1WA@xzlCL9v>$ddm5kDIdhreO2G* zkK~p>YdGOBPS`D2QBDICrY@kdrxq@q*~qdTYC24x|w4pl}H=h zvMYjk&uUM9&wROl2%IA^$Yh;hOK9sPKx4hy|1fjwW%xIxUxBXVzRbStII>2)=p5_! zodZ1s_Xj8PM~gx> zehqxX%1nQg-YeL9wr8=t)^9twf)?th7`n0K*e{VeZQH`L$=AWFZR*sM-X7`j%k&

443E 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

G0oo{ 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ⅈP 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 z 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 z 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%0Asm6Pkaj*fj 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

NM$~p`WfRk1_kR;=BnpF`E9?~e)&>f$sgQb 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 D9#Q6C literal 120780 zcmeEtby$?&_AedME!_f2Nr*Jkf`lR^E#2MSNQx5DB@74*ox{-GT|+lRcMNgIQ@?ZX zxsT_2|GzxXFfaSvx%OwTz1C+fzNjk8;XI*uf`EX4^HyH^0|Em2Bmx3b2?iRx1dJ6% zgMjd)&QeNB^{tc?ovM?)nWc>>0)qUP#ANi3-?d45map;!KGC^gfHB80>A+zO;CT#8 z<^+7CH*H}NuY-)=$e_I7#>idKLLmPrO^g+si*$*}gTcCPh=}zZhN$>sP88&QnRRyR z*U)g(4AXD+9>zh~Sl0IOd%}(?@tjKye}7XUE;_PcT^|8M9*K|}xtrY$ZJC*S6pt=7 z>k-%|)=4?$yPl%;_;Bx^$j8DNjDtWN;lR!koDq2}XtMD63^fHI+lc@)4Sn~3tx3=R zLV{4b-ZPA7tKK@ycw38akBDMF>=+&4*o0K^D*}S28J8ESFya@f0!Ewubq7z3k^Q}1 zWfMpIrO@Nt$;oPRI~gtUOD;#k2U1=Qs_$J2_-6~+W})ueX2)t;bC27uclP-O7~5B) zl4yeOSE!>0t5ducmCs0cx!f#UMVtkz9;(t=&vDbt-NJOvMVz$`o7ZaC6z{hLGxz$4 zd-_bmhO6i}w5Y^6I~YwewSz*zA$>-iYrgA0)_w?n$sssP@4_(<8X@naZ^ja{`wWtJ z%04WpzrrSFY}IWr++`YhKUWg!!$TwmCOeHL-fsQke1#A3H2UoCS5W*~Oq^MDpEh}o zxz^kyG-Ae#0T0qXFL83uRN;fPOZL;@cn#nGC_9CszDdxX@1 zh>&-eQy#TzEJdWYkD;-lh#WZ}#VZ}wuq>Wl${P`8P@Zp(9B_gY_#LZO9S5OW7Ll$` zr+k+REkFysRsFdRYj0{*j`^z7?0wt`~nj8078!^h8 z*AYnX>1E`p#{;A3oFfngC279W5@XA}d8vxj85}YyWWoCpg+$79^kpIGEqNn?UZ9<% z=qRHF0!8T38v{e)cVVVR>RM#_*t~{hvt+oTnyr`)Lg~oc9l|Rg>XF1S1==-NAP!vY zK?WT}tN{!;7OXf4FCzn;q)@YS-=DA|S|R_!R}cCnF_rg8HKP#5N??V3K^`NcHs(_O za-QZO23M+TYZbzr|XF~4cm#9Ao-|=sW zY*7@D@rI;yey-pvp_xY8i-~D}W;FA;&KS>#vfOr-W}nUtDZGPiE!qLM9)Sug`OAw| z>eh@-z3#;hoK>;aw;rxdf=fiSG25$W$IRD6*NWHP*G6~5Zz8j$${A7cUx(PVD@&5( zggS(COaEX{Ai9Xa?Nt3t=txwNprz6z>!aYK!Vu5*w)Q6-VRC}vbLNa^i*z_&#lD;N zhM5SQI#qsc3ie4~koA-HQ^`?vVH-}cPq2ZxQ@kvogDdq|ONURazt1*jH|How zE~wbx(7^As=|r|E%}1=1-2F3u)NOot^wz>)Lw!?kV|}BpZ)RZm`(t5t$w~=6K(%l* zd$jmiCLXwx^P{9*r{e8N3gM?dRW^CcnsK9iYX#%}%KpoKn@!10-u^gsLlUV(!^E2B ziO=<(6aBLKrT@!k3i+3&de5YV)v(oDEAJ`JqL^Q5Q`A!pQ12kxj1|;Wc;E4=RJ}P%A$=c}LsC|wS*&NRtD^@o@Xm0{xHP5?!j)oq zZ{DH|7?#r$UBp-{ZB%Mx^m^j;4on3W0t0S|eOc~Z?w{PFqiG?By{T-Y4+e#m=Oh~C z8a1p^GtTzTM_9Y`7Mc^7#UC&%6XbcocRBZhsQ9ZyHBI``9! zj%|%q-L09eF-JMDj;3a;_DhAJ#l*;0Qxu+BUc1@PHhQ)K^R@GSwN#Y2?q2YX-$ zD66R7gx5M{UF?{9fC`BXh`P(0UKe$Uob$NU|J#4RgFs>rj zFy3#h^N^0+)W5*0H?iT;_bk^uX74ub1eXU;8n&(Hp6> zTjZ*Je!KQ`CPt^*H*F)sg=yE=N#gWmV>clpA?%}%)jKF^CN@{fOngC7?X%Kw`%bQv zsPTjGtNb`DAJi#w)$YjXt#{f#Pj(5RSalfal~h&zRbr*M2EJ}F=M+n+K%0(z+qn+G zOhNHdnKIKdTLVCa-9%&H1?OIzZNRHeJB#JQnwS3Tsz6Pv^O`z{VI`R&P7 z(JK0^wnJ3!?i574cf@Bxr5iF25ZW?{Vr;K=1`zq*76(>MTWf7W&~5qE5H zXepd5tG)@i4Aet!PGU~FNCG7ZP<<4vKUnFJN|(CA6{ZD>=X(9z=}pdC$is{Cq_!>@ zEoCk0)G$+TE_qT0z58;aW?S>Y_5DTNdeeGt>Pl+tr?mNbqUS7b(`~Npjbq;jRF*_H z{eCqp)jwz71T8a<6*6~-~UT8a;JPVCcHFjI~Q2YG7Q1Dm7 zcF;)ZB`GZFtmVg@Qhh~akY44;NR-w0CKmqS2569?s(X|&kauxXN>zm1NKe7@PNKOR2!UVH~%oA zkXbBJc0IIGhZbM6vlal8n2GvIrh+yXT;@M=eZQyrpx8g~&FErvp5QEg`u)fls4NLg z;Wgwh%CB)8eol+Nywf6h1vtynTaRCtvPZQCEZh2*T|Zo-58xdT1rm+0sIdUVNc}$C zeLPD!X*g5tOkORTGH^6dY$5ltzBz>5@47(G`LdV|hiZ{nO5m0xj3*F=W zjOKJ(L|#|`d$O31vpj%+%tU?!ep`f)O{A4LpAu;^J@bIOd;~iD6sZhE8zXv}$B(j2 zp*OnhABe_N6W*z`$lXe(BO)x{0sw&20ziv8W1kpWwyhITB`bdNEkdk5&&B2C9=}fl z)`QF=0-G`>(;DrgiSvt5_+S}3n?$_wEy{n5T1H(aw4^OIAiR}+^U(uwe-SfXY4Z{Ncx0c~ zEIOkkzw&3UABV{@vn}gKH|@%wAHQWVF~NZN?|U;t_H};djx!YXHpjd)>n>?Ix{4M) zbQ%WF3{w9bIeQeiO5YZQ_$~{Z`*CHRiNqQBNPc*(#VUdLL^S}3I2!@=&yNoH$Hv)* zD{Ulyt$KC43mS%qPWvbt>4CH`M=Z``@Ja1A|*t z;EfTg$5o~ICt(q+0P!hCTSp?HbH0ae1FFQ3Z`>^f}*}J7+#j#mEto?#rH0G zg<*Jfe9)(BilPC>S6d9M-altxPEvnOlh@y%0==_oc#Vm<-P1$XFy$}Lh4wX?9x7|KWV_;L-V1Z<=*;(tvKXOrKAzTd3H(bR{|9*f zUAz63vMbi)ch0W$wewXBJwEb^w-3j71F;D^6Q>km8x%3|phv9%6*_)F@-cfpxzS9H zh`6ZmEE{rCilA!{jr7KB=rP`t+64ixc?>3hAp*Y&vXx{;@eiLz7@6ouFiB|Tr14V1 zMeY3teCPgs;6H%ukvedXunrGw6C7zyUH+3xO;-(8tA|Fui*&K(7)n4Re(_GBzrU$Pf? z5h3bI(9kn1F-tVEstb^f&}$&3mpNnHt=Q_l*m6i#Vc=gS{A?B@bIfAwuv+%LSJ2|; zyPV9R!a&h@um@u2lqXI6;%%Ea!?@}4j^OvNLhjh#{6!;10a!@ z)(de?Tm8_9MI8naZ;Z8mk&tx8?KW|9&Tti`2fz`5KsnLf)noKVgah&QDNEkHG}t>J ziflFcg@EL8Mre5?Kh>pTY?PEsR&8&sF~?`lpL8SDD)=9YUVY$_W&GvN(h1ZL+rM#U z%#jk8=JO=*d-Dbt<{bJ*Nd5~M4?0LQBC0B}LQz#5#SF)tFPRJ!-ZVQplvXlA92TDx-{L*;ncp3 zei=bQZ{*P?5>a}M;&e_G+q&R6eg!@s(qKBbjtNF%6b zxyGAR$V-Hwk`Z>7fzj`-c-yR--C9E|udLk7k~Q2T0CH!%mE==MWc@r(r_Z}Hzt_fdhK*);sV zOm}865|ZbhA)+798<>e_j214kmhYK5-(GK`r_+q$(D$9xe=MbUI`_g0ym|6;CjA=5 z72zinbi^3W?9+nk3E+}8rY5Qj&{9!5sQ^i+QvIX8}xZMpu*1vBm;?9lvmCY z4Sr@o*32QVN~`woE&-DgCId;Om+H6!?unc+ktDQ^h3g8_m=@V{m9ExzcLQa(EMo}X z=Y{VJKjl|SfdPphZx&~pebFCoVO&(gepEei)IIM#aWIbMXl{VpN%$qIIYAy3wmQjD zyZlYF6^z3fqI;tng@*J#BHpA=NZEH(M-u(xTJsf?j}PjWjrJ}NX2CGZbP-pI?cofm zAdza57lDC+y&1xFDESSJ%f456l_B|?w0=+LDov|w+h-ojTfZ?Yj`@$$F)=d>vRV|1 zxsEe6^q{<+{4=JH?Mdnj0==Ac*@s1RXb=Ih49si@p8CF6Mpub){asJ5QPGhf9^`Q_ zJLZgh@j%j=-X`a)B@ezC{gD|VMixpn;woVRN@k8uMqp(o@gscD z{UJ#6{!Cm#8mJrLUrFucvKJLF%H4Ui7&AMQ%CKA3fl;c9?0Jh5Zjigr;#{T}gwkR| z5CH+>m@oTN`aQgrA4(w;Bvs(Lpo;AnfdHpE=YY(u=mh#9qpelRM7_gHRcs$p&nlCM?UkQ!+wQ-h6!^SQk9lqTXg{ok zyXVzZR%h>AIH7;4BDRQu{wT7eYOmwD5&z`JOW#J@#Ii@iK=H?0A~-s_8*wP{X=(kZ zG^v^Lh%F4~Yn;s&^a=*mk4C8Na08{naaW6EV>nu*7D293fLLm~Sb+ieH~-QW|EUWf zJp-*N3bSZ<@vq;7eM(;1%^~?kuTl(@pE87u(0-NB^-hI_nswyUx~-lk#A9H}%iMKb zd^PVS#%$(VeRl>u7N<9AGN5}BogTTuP*-rk1#1(>e=CQ#>M^1`4iP2qC5@$W7N9Se zAV^O;#+4*hmQLT;_SA=dDTlqF+x!;tR*1dy5;$?ze={=pG^+l9awS<0X~0T_ZW%;t z(nl5&=#^ByM2udlT0uBG@D-wAx)yR$s10sZclPqFO9rhMU+hiHEOPung|-|l#{rnR zoi*JKW@Go~1lj9_^CZ297jmAyb^=gUx`kWXCO~&ZKds9Wh$p(j!Yjq?e8)Nmb z7A3>s9_N=Xv)ls%oX(n-?4RmKD>HEZ)baxM@ zy%YI$FW>q6$_m*X_tx_+0w{3%o1JoZ`n3?X@sN2*T;<3*_yaAOue8&N#cE;S7uc!C)_*S0Z)L*{7`o6lhe&rkYo%fl77}wda?dJj6vbF?;&b5kKDOaJfy&9K@ zOx8y(I`MQgY<-riP3KPHypK|ykCkMI@qz(zY4iqJ?`t`HFZ(4H%@YJV1H-U=$(*-` zs+vgcB^@BcuC%_`;g5ngI!rreQu3BJvP+OAs@81_bc7Biec2f@KFbizFv;e*b z#ctA{BL*Hd&$%iUFqb!Byz(F(Wur#J^@EsZTE_|NccIPe+)o{H<=sbd>38WboG-Jl z?B--VA?Y{XLf7VPA8472nNj}JnN|+8hTDd^jUj5(nG(IU;&iWW8JtAtP~r(ASmfmB zW!ha@0uXlD4*_G1tOe}`VZPxZ2R+ZgaS1h#vU*nODA3BHeZ&3Yvnp8M z=+Q&GAOYi9X_nq4TcwOF-Rd;xtM`Hr%2waegi3N?ql#b|tj&kKkW0Ig7!14M^;N+W zJ*PACy{5mrkKroYePsaD4%YPUy;@KjTdw)Qte6YGyJSaGna=Y4U)!b*(15+J+A22( z^q@7l&H&||>6$1@$`|(7f!egbA*)9*O=e^hKwHWtPSI6uJ3mC~#JrO#CCB5DU`~6D zBQD+omGCeq`yWqv+MAVB6sWm)W^`u?;eNU(=3`JDgFP64zmm)j$D;HMzHXTJ%xh6~ zA}6+6ywgCQN$>Mv+t+ojqDbwMrm4=BD(|G50a0{+>!nI}hi- znB|2o1%gbTUQdSE#+Sh)7CX#C0~<$J?IVzHcvNQu_*~~*-lem*@SghCk>CJivAxM| zPPeMmQ<{}igm8>|;sk6b`g3I>KQGL_WYzoibMsYgSk$TTE5lL4lDjo5ox~H^`JMB~ zYN>#CrMp*Se@xwPD7Y#*RHq3gbVLX4KINgAa#HS zN7b|GMH3|dhYOaaojEL+--F~ej{J!jB0z&vvVE7xi~HI zr-n)d|ATza$NaFc^##0T`mHpM-b`Nf--f=A@y}$hSG)X2dF>L5a$f~{jeMvJ_aNi+ zGgo)V$hn*D1t0r9uxbKJG>@kB%A7=76W$WNFSSxHi#3Jp)ZN2Q&YH6bSnw|7?x5QhB z8V=d8{8MNbM;=epcZD`!oA`@}@1S?VQcNOo9Thm%(Vo-xMeoTFb9nARhg`5--EqHU zcjd7FeI!Sm>HGX-ugXD)pHGKXin}Ozx8Gd5N#=#3rn1pqK9IlL=~FiFtYV<`beBqI55Q?T#2qLuxbY4Eqc;7!ES@2!T<0yPp#GDbJLs!wlWbZZ`q68O8N}M3{FM zR|Xcxood~_ql=JVpYnO0MN^_5Bn56|2d4ioDFq+%NmBr!ArA<^>gYB~iv2NMd*Ug(zwIB=mDvq~IhAGqch9 z*3j?Oz2RBDoWi9pgYA{C3cDY6CY3_6ow@g})&?7RF^=)1X>Rm4`ZFlqm(|hWo-kiC zttQbm^u)OH(E4Tdb0OXP4EKf1rIL<3F6~-u^v63axSfKXA=mV=@0-VZ&CGb6V_kO3 zfDqF|e4d=+MlS)Cs256)N~ZK-dc!8@R{HU>-=0@^{t?%9Mg23MU#kxtf^+#gs z!Ykv3?{k)O#Bm=i$DT;{S}>D5PpGr0vmb>8KhW&modJf^Up1$ZnKZ_y#|v(xI^~RV z)MfkJgl}f5W1?b_RxeK#n{LCx&Xk9**zc)tw$kj6XO{gL6%I2RoVO(RG&tVZ+GyL% zR`+=X4BkAgy;!ST{B5(Iiq=i(fMsQ5jIP|5wfQM8)Hi9&U@%AMIotky+wE%lo#$Df z>(bt(hgpoatN*cy|BEHo zaB8O2u^UAD1A|)s3`v`!u!s7Zgk{MJujSr*m5e4(B>(7*{LUs#{5(WQ($S*K5%UNb zvhdBqI@Pb?8Xbj!{@HvXRubL&?Y9E8Q>u&di>5lpg>Erpn~$8~7eY)vYp5vzJ!sG- zZKK*bm8_#k^I@@(-7o9|AcUevL0QIUpE(`!SUkAwhZsnBxtV%QUa1N6ym^}9ed3x8 z1b$}>pJ=$ohXaW*pX(~f@#W|CUBez8XW>MQyrOa1ZI1$I#f^ z)YR{qFKe!}y8PALnZaD{Q)FF#|FNTc_7UbcU<`M%@F^nZ6~3Dd9j~jvY>LUfIJ9$_ zk~p+C%8xu#K;R&eeM5DIjlcl=<|U)4{SReE(2&0GIm>k+C}$G=o-Do&*-FJ47E_fn zw^vi1l-sU2by;?kvkgMNU|*2i&I$BI_bocFnIW`#R~93yIgowF)BRx9&S0~=WI3m7 zx~yliXksB2ZKeEs$%1DO_0D_^7PLQ@LlcJZ<*Z_G`hq?w)pgJ7JVVHn@Rvr>XE%&8 z=sB!lS=e1>dAXltK=rP6Z8y!*LMPt~r(qFt*tM&)i)G(@(iqZRIzA)H;X$#~{Jta1 zWBZ`Z4zJ3t11*|d7#AIv$^n$&yWVkXI8eL@T5pE+&uN16E-y3l@i4KU@@ci7FLL(m zU6`p^ObvZckY_@Xh2;FmS6`|dq3 zr4nuPP2ju@S;0UgiYV^(=*0%pjodN9?(kE~JL85+CzW^dl9M?d5y_d6Z^jixoqCBk zeD=vbF2kcSOn|E@6+cP;M{M@c& zP*6uhu?t%?wdj1Y{@PNQ8s#fHX}sMUYWtZe$RfW*T3A3wShMk5$G5=7yI;C8*<$WX zBGDAQq!kqvnLA35i#K20nfE7*`bA0X;iqF_nU;V4+~E-E!WL3%JnMa=r+y9f`8J-f zkfS-0DQj=OT{~Fv51+=_JHlz)`daNqghxlnbvH;U?G;EgTC6@Bk9#&bHbWRhJ@m%g zUnR?m+Gn0t@rXC^*T=*q$o4@ob&~iGp{b__tvRQs{a=V!M%QBmju+jR)A+sBuV(Y& z)@(8Nt3r2?wGX2Nu1cbK`1`AdGI?c3xrI|XR39C>-$hgL_uCNVDbxO#Z}3ffxfZl3 z>xQGptg2t<7pxbv{yF^eU=uMYdE$jHd7(iRtmANTIag+HdUxiiNfmC(M^g%SH_RL9 z(KhYOA4CR9t#6WSqh}7*dICMM_UDYnJ_N`1Ryf1lLPE90M@`+{P5&X&Kw|odiFP)S z{;DDW44*$6>t}}me3zt#?>w1>lO;YOS+&eY$zx(l$%ohBtCsI<>Kjz%9RAQ}+E03{ zBZ1+Lqz0#vEG~{*uP%7qwDLqZ-M{2FoXHkj{r*<|{zivRdh1b_M7hj0_Ux0 z$0pSjDe%gRdjfnv(|X%&UJuY=v4rp1&%Phrmfz|CuCu@ZY_PchlCI5SEysjZ^WNww zMX!ZL{Mf7gpL+~)eEx(>SRd)jZZ>N8SXCq(zY$8Ae^bAeveO6b*jz9~3# zm;vdBbI;@qiY6YlJkpHRSy(ot40k=;oSNbuG-FJbUEJraD{{TrmZ*EKW6Jkk#Pdvx zf53f9@D6_OCLPSH)+tkyn|66^AgEli*oS4hdn4NXA^aT3PS9H^A zfr3V7o|zueOA{+W9!C8ZQ$98>)W65CckHLAON6U2jWdjMXV-padhyN)@9f-b*V2wJ ze`~-mOAF17t+2CskRUtQrvs4$bo2YFt;J{&BHmntdp!YH-s<<^kSL(=0mh zbUtV(kxEMDR3CRSRtZeR9lPI5Hd3+@+)Px61WaGh6sQIOSP&}S&yuNnq5Gp4UtDG~T zw$q`jVS4h7d1qqe_GlOB=G_tail%r`TjdYD)^HQ4&v(q7(mnLI?OoLp;7L(dF(XdNNMe;`jy$XsoJo)(T}`(V zovFW`kW0hx990SQJc+=KF|9CFsTEyXXn`Oqo^d<>|wrlBifY23bpR$M5tXmTt0_PUsmGxWh#L zq6P2X*1EfH*>C$*r|(MOBYB|XEpDZ1y{ggq!NHD?{#O39QFdu0NO02C4vMBCws{$d zm+?X?ctWl}SpaD!A>pIva*Hu6mih-%q#O8gI2&V2y(N|e?EE4%iE>KWh`0?SS>8OynCSu z?A)`zbOJ#JZRs^^57k2R_*-smUE#xsO&`Z+#@nMPcb^Mu@TwKU?b^~8|J2-R4F zXg*r;IE^@oef7=uyByU1SgPIOG>PIXZwuQ}8nxtGAfYxgiCerM^n`GU8Q^Xgaf$eb z@mqiFk&YTe2F~2KO@MQXvFn!e&lHF4m$e>m_cAQb)}jh*hZA3DvVTXnwsQx*nnnkU zqGSyV`1jKD@Cdv0@-YuDYfm6oeEXASTlCwq4VS}f?}`IFrS}@9B8Z3>MDtG>nKnSW zV8WbK(}%`24T0oofZ+ZZvU|%xM?X_h+kR)AS9TL)ZXC5zWhA&I^A6K_n(syeSFMH(@BTU7 zkRpbJZuX}TNiCBH$vyulpB497Jst1v1pOB8>CP*O3Ti2XMN}x$D>(VnF zoy4wj>qp>teo5-Y9xqX$b?;;Rd1LK!_a#Sk*=B)uBV{v~t^dQO=DEj#YdAXUKE!qI zmp~Cx;X+N?-0H;MGv%josZ+&(GIKYhkxVd;bi;+unAe^A z5>2!$4y91Kg7=rb@}tA8{iP;HFeK+#z;-EGIb+j4T*h)L7nRSamWx7SCczt!x%|uJ zV4OT-1Cg%EbB4c(mTMW=H@o}Sj=SZm&zaE$7;L^pR5q9)Af_qOojX1Hvh?CSb5)mzsL-Gc zPHa4=Cmpr;;SEMk5z{u7K0NICwx;DWHtsAdRgFv2G>)OW3@T)Ns^PZVe+sA2|6oYB zx{~(JOWfZhMq~=(1hxhCG6#BH_HtuRB6Fcb33J^J!$r7UPDZ5`MM6$D+)QWP7Y!tx z?o()fK`y7CSjJ1-pBHcuK*~fJkWG58MjbHkm{pVMr$%~oB^UCgub1CbxGU+ficZ>B z9i*?$45C247rbk`#w1$IgiU|0`wUI^GOAgX8#t~5h8a#lr_A8=6x_ZY&H#-z>IsM2 z9%%CM>A^W_zG@fE>bk;9ikjzoCQCXv4e3z=s|myJMc0EZM+F0hB8MNB^uu_Tz%ZSv zt@B3p7n)C{Mgf|yIk;6@ka8L6CKEhEN(&fA(W$E48*q1zfICu%LgtQ6PLaE2LJ4)a zy9c^WIFqhoC+^|6HFtKiw3^`-(>bZ7{RKFCUk!qk-Mbc#H{uj}g}o+Whi+H1wI;hC z&JQ6Y2X1hZO%`tXE!a8p#{g8aWD}wM3x}s(aWob)wJ`&)z#9)$HaAXijok%0ZV{KNGukSURb3N6A+J|5Y)a&Q|z9uS@Eh-Z|me|hH} z@N&bO>VwdQjM#1tP_)N|#`U1+@Dtzps~47#g7A&T)aJE%u&tk)FaHZa9`^D})i~-= zeXl}fHu_Z_Cf_FP3}1pV!or?CD(F?RTv0_8!G~7I9lNS^&tC)YvJZodJ~*JP5w z{FLounI44UxYU*Ku+%41sHkb-HVMy0mAW>al%BQ4Zqd))?T3={rD^>>v#wv^ zKjGj3ETwpf;n-!_&JR{zmD?FlQGS9{bE~R2k7i}{rO(})pr90=c3YR_*rrWu4B=iJ zN~+!KEmhdQaFUi4+Fw_K8}n0Tw?3$+TSI&0WmAzLeC4Z`l!TBQt=r>%P3smX_@!|n z#3NkS0JzDykX}BV$IRGXOx}DzrwtPO@mYO-fO}3$w7YkSB_w^zKs7 z*D|fhkP&bKWx;8H1J_$LW(kvH>#l9E!zzyve3z`*nY`(V3cmC&Nh9)ES6)r`>&ziP|ta%3m@Eud60OK10h z&-%-VX4Z}g7G_3BUW@}Q`z1#IuAkT^kYcs&phY%Nbf6|YZK|owtNoXHu_5&5+obJU zdo5O}n@ifAX1N0OZ2depYASKRg$IY-0U`gAVa7e%l-F;=CTr`>GF04P(;S>_MF5BX z#nFM`nN3SvBbaAY#?_Q78dUS6*QFQM3$e#Lh0uxdq!`L3+)8)fGn`K~mU}KCFN%q} ze$7Z_|0V^aed zm2{;~d3`##x$C%E)?Py9^|G9o()0eMlbFQA)HK(DbSt4^Iwt^K5S-9+O%1nAdzGqR zrtJM5oOC0y>BU`z|5!d4tY7zFT(CXfZ${{XyJNpN0r8Y`XT&u*r>Dbdxp)&-?7P#Z z7I(9$n4Ap{bO^Pe8tW-dc9$f)&?LI#9kU>& zrx&*5nA_s&wi&0by?8@38dT%4+}?j_j@NuGC!D6btWtNH-okpiXzvw1FVT8X6nl`KBk9b z_wcnomQ07)p2bLzXX^!hHk|2RC5-lNH20*)T!eZxU!N-e4iRY#d7Q<}jC~6G>dyH{ zb%X8-o%)-(flhxeW~ISHQD|@k3vN!9Gj$34?P6Tk8oHJJlL9n_k?;()J9&Co+@jOg zSEu-9xoqGb^PGn{vhO*YF~<+(nCpvZ!Y`?xQ zJaV4wgu>@wB~3gsx!mt>C5p382jsCT)s(B1Cg{P459!*QW>NB2U=1*q=n zJt`qGQC}ei&&{+77<{o%Qgm_Lc!{3&THC8vrTTEnetLb%&mRqHN%8XKOAq-l+1lrV z&YSI`ru|y{Y12p7x7OsX40F{(Ho(s+fsMnf4~qgIszb5@^txgZ_e*vtzlUx?K)s=+ zHTVZSAtC{ErT;s`&#GBVb=VAw)|C39Lp$a?(63&6d`l_1X!qKF*k-~1@!qbkA+@{Z z;Q{M{vK}u7)^tId+H%~qYb3geenC%)^ExA{S;e=-tjo#;+a0l1>Y;lqMisXe@5FS8jVrX1(+inrgYjvNy z>h)&G$*InU96;Q&^}=y+Z5wm_%g&FId@auhd9OETmiOUYfgC)qL`CGm<5r05Ph?*= zVehzv=<1~7-OF-x!Wm!Aj7j88+MFszo)25^lLLg<#Bh`6uVit_Peu8KghW+U*5d`I zVhr`v?0ZxfBYN(umA!vLKAcp8qgQl)*_3^%DK5)~$B=MA-cJDk@HvF{jca&}x7eGm z9$*?n1z^$x0kiDPg4Lp)VsHvqQt?M%h^1P=YpQ;=Y`<-4cf+pAd|a4ERi(wr=ko*c z)-)x(+A)X9K|S{z*%)XceMkD<*Og{Yjke5t&q1%D`8tDx(`j4CXtOa(9cWi%M~Jpj zdn~-rY7%HISa#EaCmIrGHtaB~{>b_9mj*RFFsEGsC0H(Yr)Ae^Ua(1KFG>@)r-6GW zGpn&Cbg@O>CL z=A?ZHTz{au&tx+45E|GoCp~Cfz%J$U`(JZCQg$`NQ~L1omT1{Vkh%w0DM&W`S(xSp zq-dY()Hum_Whl>_wsvfC(BjU+eXh+8tX=d~q(A(JfUdxArE;N1ogqxUz2t|3>GuFn zFlca=V~|HW*|^r~to6p4OLLd9nj~kGaNp0!H2XYB-q3i`L66Zwm_*6eP!ar|rPz|6 zq7gvNVhede?{nLTa)~(3d$QlHE>AU!8UG-W>yJO28Py&7!vjVBns&YtE3#!AFL17X z0yn8I3$9dtQ#fPBJ=&Szbd=Xw3SXW1H-pJ}j~@!hl0a};m)Cr#JtBS@v3j$OXZH9r zq}HRfrx@28js@T|)jEpt88^vG)w;L3o-q*-++j7%ACUK9H|8P}KZ|_fRC;nE&B~eh zP3J0ACej6udtx_3%D`*Jt`dNiY^?JDJesYS_R8a-!ECgAk<4^?q$R?as4g5jU4td$ z?nD~^5)DvW2b_`hB8%AzPYD6x>>_I73w5WGY8~epXAxG`UW}lFZQ`qQF-@Qr+Cl!I zu0C|0gi^rH2{>GNQN#n4fg3N>u}1^mNgaWvT@!`$f3s5{k+HX`MGET4*|XD!mLYiV zIn^|I1tKCmj&~lA)#w?@)rV{{r-wVwj|o?Hlq5Z?45p?-zqnN4Sq^!(SIFqc8xuGg z0)b$asOi!Q@2fgah|OX>f#>PgOQ`=>&*?NVd$A8489XibPg1u3n0sQU`#a}G#r{*U z)S^ziN?0BaCXQ^gkKk91Uc9$F*go&l^dmfSitn(l$k%D>GLT&%jiOl`(sfgFWqXzP zjdsQ@cFT6fGfkr0Jm|x=4}@&V$QQH3{^?@gh$lP?-l|qSr%j@Wp_#U(!lnfVycC6d z41vY(jwI;R7r6K_pj|86(${=;=Cmm=(O_LNz>}yh@DhI-?>h1$Z*f zJMjyS17Y_ANx0`#;&$Q*zC72zn={Al8S0nNljcltjcecX8lBM0S~r6h<)`AfHCB@juS>X&v~kgs zNDk=rw9|9*h5*bKj5+orGX{#wLwc>njCnSR@yafdXvN>)p1y3o`0P@g-}X7kTmw$e zAmKm(LmXv!bvvw_@Yp~bPBEKQcQj3?mn-xsX!tw2|8MH}%qaSTbjU#BNPk+b;m2X8 z!k@Al3XrsE3in12#oay79zd@c$G9ZCiozM~FI9g&>t<|pRS6MYCNJO1v7^m}a0wUB zB00jmU_vm{#qL_WONy_&EW`HN$o`mZHGOlRRLsU}m{aCJT5szt*djDtN{)@pfV<&Ic#i9eH> zts#SKVIM{{BA@M7>Yc5>C$VVe1<#UuDqw_EYquC#f9;{;8m52I76Rusb5z?T$>*2- z09&P>Rw4E+Rb@_E!wMUmcHLJ>j| zAhZxjNb=nQdCv2Vcf5O?aekh$e>eu-x!1~Cv#)E;xq`kG@3*mJk9Bvn#exPyhP-kr z^=O~`u;Qa18w=~?T1x}iNFIFoS8iuQX=TALLJYC5F6eM$Ztx5VD6*D>SU8AIdM zf{Pb_tO?(&PtW+i$!nAMzxN78cnH0mi9jG@_Yp}g!*8cgiYh5Se)RaI%JtJ<_Y~9& zWwAZtL5Zp(GhYc}oT~gc?YEibH}uFC8){qa-W!UQR^eMwvf#HFt364l$)B4uRy1hJ zId>~GPdzk`MP-wB@vIx2jp&SB&lP7fD$<3m5S-3)N=SF<=9IA(D{N_c-$ z)EPfn8*|`2*@U9+x+zGF*^>->VZacnT}BqVRkM20t~gnOam^XJ6w%i3qY%Cz&3#4P z)9|f)dr5P^-N^94EX)n-F;Yz>A9dIz$v%yZU&O2ViJP z$F9qGVoS!00>8Fh2QBNu<*lly@4x=Bw!%UYl%{CTWgvrG!cu2rlBE_RBwIE1h2_}b zb)z8Um`R?Yed({nt?77`9|XJkaq8of2nDc9m2%jup5j{9V`qK4!H~nIBvtM)NF_!0 z>?PsI!Il8D(Y^)wc;#7kDS5EWgNI=x&_|)Qf*FidQaoZyp=|yo_RugNGNR4}#F2f0bzE3FlvAD^8b#G#3qXErKFx zgBTNdhu|e`er~_Z@?e_z*<4Jo=)qlHFW^tJy1!#-6);E2gRd!l_@^nw z&7OgAbbOl>1fRe6>>=A4n`+64iBjt*!Q7TZzr_Nt7&|y#xNS&f!J4vuu5|s9!BM1; zGp*^N33W})F!$UOrs{J|T==3O6o2gvJ@nYrsS9@uN$U0K3Kr3EHHE~mD%8Zd6dwPpf1eP}bb~O33+=jPl}+&Hk%KgBdk9-SgUy5$YRC6vz`d zMlXI2KpxHG%CCcR1C$|&23&Ae+KS&?8t+iQP?vFY_2%FWfXAW72uO78DU)3N8{Y!3 zfz$xFx+T`QLr+^<`>SKT$_wB`yRd!@E+42$_8wsSUNde9G@_+N3aVoQ>MTpfYRjPQ z?oXaQLyUI}xb{D`7-cy&2ab6&DSn#Rzj~~~eYhu3HhFO7iupu)b!c7R=w(mrr(&0; zLO_4b2lFzcp~}upfuKOLs%blSzvNv_`6biq?D+&q0E7KXhrE3{QMG>Ndg@msL?z3D zs9g1NZLl9yOSr2DU-H80O2Oh5kj`kngw%j0YP&repZE+_s&rm0+WBJ}`X zKAf5%Z766z8oD3oEAteL=+Rd^n`WZsqkLXuua|9)S7W({#DfK$MG1y>hPX=X!|{l( zNuNEkbrXKBQQF#42R-1v;>QRk2}Lb&@fw>cpIbTEV}?GQ7S_F%XtTa&3p{XmzeX@- zbaaOO>SX{TAdr;LH{d(8w5)m0c7;T%fRKHKli5He6Su&x6#I~?Ue}KFRoaCu()@l4 z*!o|p{<)7G6pkF5%fj}|WgiATGqL2$Co@szn;x_M3b2p%j`Iu%YNkqNg%=;%-9Y_e z^Huj3_VB>^F;H=nSoPTZXiH_6PcTW2Sr*wTahxj?C8-d!^HbX9*9Hq`zI}C%&;o@N&I-$AA4$2US1Ws^EGF$ zhEHeAg;uBwt^xwtx&ioPyJyEkiqr+_uAq-r7B!j-f|s61Zk5(KS{}e>JW7BXdB3Kt>}JOSGnYWG>J zf{!WfKYd~%zVo;J6QDA0L^_Bn5B+w#Ei&OS+W17FdC46{+TRK<0W(nLD38LcTU6o) z9xJQfH&?d4CIDWWe+qP5_U2d$R18&xoGN!}o9&skN!S76=P@nFOxRbTRBOm0M?wZR z8R9uw)!2l4(IU|D+`c6H#+(mT{z-UDZ^K8R7)10Utj@g1<}K87^btK{{!P}*zI`*3 zY8?L*TW1|8aeG(7?h@$L1hxgK4sCwElk{C7?B0n7E}hT1K222or55^uN@dY$@jupk z^Heh9wU1K&p?-(ITK zudj`L)Jwm{50v6pyG!G5a?Ovz{sOLGbvJ+H^zm77&!{=dWxZ)I0#R3+M5^D+u~6?TvJ=Te@Nmc8{wJQ<<3sJE=GICNl%oMMj zUyAaCaixxvUSh)ef4W#|qM5U1HUe?bsRd>8=t;JSDcH)vA9aqE zk0#7Jh{lg7*xp#Ku(27ev{MTZvKh2`(e8xw6S`$MDynbOk%e7;%`pD0vhX6~vS4V` zv$^u3h97IFnhjx_H;h;QV?lBQ8k?3IvA0CgvrZc>_N8S&j+lGNtoZJ}?rzQ=bYWU1 zkP=k`>WO0BiJn*7t3qEpg=9e4l;3o<){4OU?ThvXj3b@Wq`SxtW)EgtBcL?ORGF5* z&GFx*D25svjz(=OowY|S{@vd@o;+#lypMDy6Bd`zfW8iiuhKbIi11&G8TGE~KLomY zuZKUXV+I2pL8)(L-L7BMOZ~ky&@)&m;{z17X05WMkvjS=9YZJ7zU%M*c#q^y2I}6i zGDm*Sm+D5gLctrKD#DT=jWaX(e%P*hGY{7j9%h;iD(s{jm)cSt!;rb=B8#HoWzvn{ z4{9OI&WF=4CpY}Czn2_uIatTn$69fq@^(~Qfegi@59be`pgZMd#`9_3li zkjc}=Xrgq}2EnR}inYCjA`Wqzn)^qoi;HNBsSb9o^+lsMwQb@4?0i*>*bMM_{8mU| z@BOBpoSM}R1)C8_Naq8&8r!FF!d>_HRcl7Bd;fCnEAUc2{BX65>C1gfu(Yq6kh%Pm z@}Wn+nqn9uuB98*)%wU9|0bG7&g+719yN)F7$WH|NNx5zGbLV;S<=)bf!mYO#+iji|b*x2<^PU4C!|zdsUF@EYI!DS0+THXR3iimenxbP+FFHv7h#K%1P9XN&vIV4Rp2YoVg9hsBdyp1;XG%xgG|Dv3MkoJ3sG3zXv#IA*ZC)>(zb~ zD|>E>NbXZSB6Iy7N_3A-mN60NdK9&`4hE;8`5b)5(*=i-bhFZX>RVFXp zmTBxj9O)zRn&cWZ4lPeN$c>wMWe-Z*ght`hE1jFR4Mf1gCgsk|Pkw=`pI`zbr`DYT zY#D+Ns&9{8DEavv-7;QYNBrA-KVbOk^y@gwT!?l-$%*J$oM7VGF$sya#r`8=si+AX zIF4DI7rV{}demW<(SHGqu1`6i%|7?|z}rh1nhie6Rds?j@ap~m$iuuwU5OuCL!<4f zH_Y;c9{i%aa_HPS1U3g^&FczC2t3bjVto|9^4d_*ehdsJ6b}HkQowNnC|%p6%@H-n zDe-a^X(cMOK9gWFAHj`hEuvD#>|^S2L1MTn-(7n`b8J$!l`Ob3;GY5nK7g_-oN#C(b>|E=EavU8m7E-`kHDNgiWq%GiAfLY@Jt{FTl(cycT(X z|LY_EsOFZ6r%icN11DUYcy8ip7@WOEH z%bI(0=ZM_T2!^<{xO3X5fJ4DQ`ew}XjFSbYDsNSF-M5K8xXit%qv>7m?wU~q-1j8% z<3ZGXb{hp&P;ecFcp|yy!lD`uN)&2=uxZ~HaOK5XZ7pfMD;X?k!HG7ADIJUVTFj+SfMkuQs#D)>$zX4Fkb%lPj!3K0T%Sffybf5}w#sjLw1Nt5|cS<)A zS)f5-<5kTJwRa`N0054h>#Y_Lw?+INMmP)Yk5p;?86 zf=(anNAppROL2AleD(6>L&57JwD(QXu^2N@hAy^TU}gRO?c29Eet&Yet_?jFvV>cC z16)yJm8}_|_j6*73!9zYO-r;W14^A_T$V~MNlEpk$k4yC2>8@J1_E_&L;u>l*t=w@ z+YR2SS6mD{lPt9t*_EnAkCeQ5hgZD5JXZy~&vE0S>?8Bu@ZiuncaB97xqZq?qd zy6%EFh%0cbbimuzV$b$GoD zR%}&y*bd)yl00tFfgJH4PM&-N?6sk_k-^(svwW%y-)6=iDbFa~kH^2qbO%MUwE)G% zd4(3XeIFfL)`8+fyOA|E@3@zVfKILV;Y?EGJfvqkGczZ<1%DFJ}0nH{sFa$KCn%>J_juF@LC+VH2QbhS;8UHs@bosM(rf zV|~4%!p+62+6xH$B2lPP!-{7x$-=Pg>wNZ>mMy#E&wLP&uwnTj@nBd52An z5DOdRIH6UC+RTf-*uBMChT#=B7a;c--CErropd8Z;(#tHg51pyR`q|gCSA3T6M$`X zI~tnsA?nOyx!F?!{cFUrgdjVzlk7~P>UdzRyaX}5)-R`;vL_wrh6XBNRXsh6iq8rP z3g(+GpVX7W*;04v$LVWca83>}o993(F%YORh2?6S2))xO^|88lRY{U~+4g6_KmciL zb2ZS#N+KN=se@;1`84(YpeZPc8wC~l&O=HP?EB`Z1W2)!!|NHoc3POUxc;iim52Eeb%z7-H^I&Pr~2q!azvZ>p&^+`VFrp zput(AufU84xT@pb@I~bUYjJX!3c~;V$hPCn)3fsZ(vh%FrIZ zuut$dItf5y^G%Bp)_Fh+j(zLIt@S!faf?FBBO-bvdA@#_ZPXyv{ z>(#mEN}-4Hs!Lj)5(8Tm356%a*H1q>#?SiWrs5!{kebY82?kJ8=X4i#2fTiJ_@cNJ zZ%E<5?YPK7LBpKXR%qCz(ndL|5W_mjFhl+YhAeO`v_}(E^AI3?_8p)@+Pq@Otn+62 zFuABf83mjULcJOLj-Bg-D@C4Q&5k-F_UL@ibg66iH%$qp1zgBy&dNJAZyt7e+H0P} zCa)hr4r8it)ZR$(^+np(V4sO}sKnnX#NWS9Pls9ct&fWu54kixPqTXxfB9yNGGtaN zj$iJX5c_?8rO?v=_$9-iDr%GeF1$1Posa!ysgdB5r%x$!MM#BTKvz>4wT|e6|9vSv zT0ZhKySQd%yk?E!wFHGA?@bBLmDwMUsYFy~q1_O&uAJZ}4B2q1*30o#Q(Vh9bHToj z`*dRGT@_s#l%o~&g%AlZ>8#rb$|N}>RJQ6=SnZVlA=5v!-@6rHq%S4aXYr^5oxX3m zg|7LlQ)Oa)k?*;J{|W7pD^hZ-msnqD{zVixEvnSvWap17<4RQ!c%W>2MviX5|MfuB zx%V6JK_}NBD*3C^KbV03x>jf-h;?i!0-@w$9M1d7p+o3`GXJHXHnXtzc|VO7tz!65 zQ2Nqq!SA%kk50T1;@n&Q)B_YqRrh)O4~Xr5i`PWr7u01VGM>*@=>Oe%-aTXkZo;Mh zl@R$~i~NT_Bhm~XMo`+xZ&&#Kp%VPRQhxu=|4-ih^uP4~Z}HtF)fdKa9osd_s0a36 z0?w4~-*YnI=;K5A=kDHqe>)-O(4kj;$6xtrmOp&u*CB^JdRTOJ|HbQv9nNorEu&GW zZcFD}7iaRkHy`B}lBOtsV_d1fAAGEHvkF;qdGG#1C(fxp{43(_iI+wK2X1R@|8LLk zK`+un5zgqmi5awSy_`h1=f6dIlX6D~u;eVLY z|63^j|D+_X8Agmu82v`W<}A-8J4^@`rkV9KYBz2>;mVof`kw6r+ZGv?_v0efh*nA4 zxJSRr&(~H=M6+%?;fS%lQ(cSSfPd0)yIxuI@-^k@t|C?vYHO3Uwr&lM>uV(MybjQ| z`PThc+9J9F8F-=TrC7R>nc@h_i_q~WM#Zx}SI2mr@|~;WK%e}xkOxP8$Ekn5&kOy;QG=C0^UURWxH(XP<4pVy(G)P=QX9&jI# z_E=+#lu(d&*5vqt%oTnw&gHj%_<9WiY@s6q_$R*3{^u(-b?=9_WLdJ~V@0kBg($a6 z_4b{@Wgqy!yBiWmEbdJ(g)LML8t+f6&HOcQ7fq%=4_<2k@4NYDisqz;vTK+HvEzK! zsIVa2ozSkHymwmYI3MXrXwk8?kwRELK_9pm0ryy7YaⅆNX9DAbcXb9~3f^Na2I| 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

+rHhHBvTo9hc;7yX9;Ed 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 A3IG5A literal 2475 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 diff --git a/docs/features/images/checkbox.png b/docs/features/images/checkbox.png index 7b85f609c9baf8885426bcbfc321362d6d58d902..58fb6955484885eb798343fab645e5b454d4752e 100644 GIT binary patch literal 26952 zcmd?Qhg%a}*EfoQ6cMl^9YsN<2?z+Giik+FphycKHI#%FAcTMr6j1>M>0Npay(b8$ zC|z2B5J0H`5=uyb(7tfr&s)yg;7ur})%iy&w*W7k9=VP3 zaNOu@d|oaAd8~;=%)!YB@73T#Wpal6La!7nL(N%%kJtF0vWn;?%0zK(WEpAitR)8(v(NhZo?GF6C1&j_EWIQBK9ZDsA|@r-0KHhb-perzgMANrzRJ?HtO zv)BCc;;SApPjGb`&-e#1N7?gx%2ChfO_!E2S0the`-9V3og_A8huhwdGQYWgDusvb zPy3~3uSPG)NQjx(%9q_lo>#XQjlZiuqZEESS?1(M?6Tc)(4Q~PuMi-k$^L)}LtaMT zddAhhzBiol3#_g)UiRzlH8u%5cN`}^aA`p9jP{%R2Ocu)j8`}X+FHK9vw*xdC1bA6 zlmDht^gOlxx(48WXUd(GRMS)0iSIfV+BvUdI|lFWe5}~Gz20VEbU#N`C{US=NphNd zQIipV&rs6%+roBiIK zm(J$dT+tRHxM;_JW%#Tin|Selbt}aaGI5q0scSu&=D|WzuZ~)!hKYw6wQ09O?tCp$-6%>{BMkQ{lKll z4E}<`0s^XgX&lO2U(}Vhx0QkyN_f`>vrc|#a4frPDYD=}2w|8y;5q z+s90&*#os0*p8hRxo{=)=S|wl`o3>Ae2K^Bk!K#V#3P4o1V`CwUkchNjdJs~p7uDC zdW@&l!9#E&q$!`ZnPGogaQnRo8++E}TX(r-?@68ld}X&4nY_<%=Jj3Ci2EmEqS#Ke z%W;^!{B&vVhl;)Y<993C$sc2Xz;ezuyi(N+_=x=>eop)8L#d%tHFtHhPkxGc{kdZC z$}PdPw--KtTYOx7rc}!>i*r$L^KyV7@t$=i)5R~JWCgpKt2!=T${`<~VZ z6(>qqiaX4w5tz47JH)7N>YG6i6)?A-$4#Md@AblMfk1W)*HnnowEOncycCXUqRxHKgsYd*uxD&9l2o+md2uN`zw=4;c{QX>%giaUFPY6bSMVw4iph<~MGwad zeGCY12cG2i*+VOjk0AxL=07@pNcdP6WAP*5huUo4InKA|zr8!7|1+mM-{kSq_5AC8 z*CC(c;tb>PaoL}acalFz#BJTkcoLMk_ekf-w`Z?%V@fVRGApXInhWccic>PVF&wj` zZ}@rsNy1~-!u*1*LSYk75m%Ah)AS|F;Tyv&!xBX@!#`XuxER#@ba~}+-i38Yx{y*B zJ1jM9wj@ANUV6IJvt+fz#CI!FmhUv5GN1k}Uzb#@f1chz_0Y-wSCH0J8vzO+E^VFhi@Q zJ)#Y6DlKM=tnwEs40vDhvnTx67lrU=vedHtVv*;py;#kE@**EE3-8;LSiW?*75M?# z4Ta8I<_s-`|_UUdFJWl z!3|cE9(7-I1UVLWoA=OqB6~Vg`s7gZE$&*iHqY&!msH$#U7sB2lxy|Ma>$;Om#~tk zeVX+&ZP?1Ss3w|Xvdp*as(6?GwPAcuKuT9_LFqg9*Y0t|tAL^2VI!Nm$ujSAwx4#d z{Vqs;WJSF}HP~g`RoP|bQsJ`Y(&38alF?0xHsV9S*c|&cC152`C0M62$(yY#W^eE- zF&S5`YXfu7NtM$EY+Rhc(-Yqm?Y+lpRt`?peHgpso^>Nj zHf#Bg@awVH5$)#RvuCuwqXdGLCN5iEoV9{W{ZE$R@Ap5v#vDu>!6^}av%PL<4sxys zC9G9RRZ4wY^EthsG*`tse{f%OCJZqDWZtRg5dEW~pm~uP8g^Xj+v{)Sx5E2pHubF{ zTq5doT(cJ1BHyj)gz5;s>yQREZChMNZQe<;Gt(JMxH@r_CrFU&I)_5)561gSdRx`n zDtk6~>_nbdm+<}M`iUoA!(2JYq5TG}Xy7Tt)YuGxX=`{f!`I38Gnv#`-kDc3@0x(x zuavgKQ*N{rsnIu>cg0hvh0>PFRzL0id+m`9{2K0O+!`B{oxQaq9Spx+_!A#0WnB9m zqPELFQ#bBT!*$jo@X`~LXwd*&i&6`Bq7gE!YpGvF&uX=7)+)hocNJVzhni~Ebuu0U zmYY^??O;A3l&Ik(h}xIi4}<&v*ibHwXAQ9A*xu6)w!3HN_vFPBC-3{-uJ4?>vf8=A z>x5;MA45%c7c1>P*?sF^iRKX!zI{pMm!I7JZ1%|YQa>ZZ+t5;}qS6_kMS`~zV_&LD zmnwWO726=Xpw_EoZDZ-&yckfCh0opZUzKhVUh*J1*U$PE5-NA+;(I;QI?A>!m0`n& zOG&OPt~{u4>(%Ddelw1yUZz`ylRZv#l@N5JmB%hQ4d%!0r@vY_Ra_78Xqo3u(V+S? z`3fVZ4>R{|yW0WL_0d4pUie;a{x&;B@7t4^{F=VhbU^~=3VJW_4>_IZGf&3ugM*>% zDq1e33mLp~Fg&S|)v^$`Jv_a96|y<$7QDPy3l;I2K4?ny%a}?C>fbG&5uKSCGiJ|7 z4@#%L+RWW3?!m@GvZhE}^C!99-hL6aV#-Km9Wq z|Eo4@TPD+gr5P~vG6t{#&B8t*CrEgwVKOrI_qUvSusPg#ky?-^QKdD`I_VMvh zk&*H9^ON?Imxg#b$;c`zE6d!JlaZ5?qSuh}hJk%-{iVR(qJMYtU;W&5@V4^;dH8@J zV3DJKZC^m3K5CaQAHC?mkH5$1;1BwrH-WwXH7)uCWsXW@WTkJ){CD5AIF+3q(0E7|^!uLFAm1{zM@pNr z+BT5ccU1PC?}qm#HK2BSlg55WA0EVs>fCahD4!hjio5ajZ2_~}g=5U8G#UQwMFbQA zT^><3dsbqiOenFNt78gTdv0{)&cAPURQl$+rpScmFHu!T_e;EtY$7ii{@vvvBQslA z3i7TYjEnxOU?R_%cq2@YCoL( zw~K!?uWQHXW9iYldBM|HrBR%`vChqRlMszy6OL z@QHywmU)rWY%<3b;x1qQk5iRB&KAahjq$gvE630O#PtjzXGG}SD{zJJ_tnh2$9MnZ zR7LXW4927*^8YhtfANB`WuKbTopP9!`jF^<-L%Z|#SR$7iy-&ZRlb;epuAuG!~tvN zhX?ZB+1gF84vLGuAo*cw*!UB=GoI7%iGb6=1^p&|e%dt}b48(>|D1E=UsvqB z|AJAkcJ=FtIFEZ&%5+}5(vQ}s#q)3u!no(e`;5h5UB!KP>|owF9tz+#`}RuID&ow2 zD6!mcHv2e-L@$NCGiYUhd-^wy-;JR!e}UECyg&{*Rsbqb;ZP@egxWi>n6IX(0r zhy->Hfd;5t!R6PV;zto%_*__(*g!MrY~l0umnM2<&zKqMDgvgIRNl^o0l`1d^_0$~ zC9SGdv2gQ=)VQYE$waBC`!C)ktS`<0X|5?sv1L{&utB}3le~(SLWK3iScl>iiwEIw zl9Al5Dr_vhP%=T%N-V*8?1$N5qFq$HsaRBBtmynwWr#}_T6XmrtmySmrco64loQf%6fuaf^HF0Pf+KX~o>QkFLS zc$N}AJ*X&psKhfK@NVjb$eR6Be$L?_Q)-O!hv!VM9%(-giO%hc|LI`r#?H80OHQ$Rf0SRcnDqZ(a&Yx} z#uc2OCw?`jjI}YC&Qg|4jK4i|@AF*sc$zI%>Ac?2`^Pg|S0!WU%>xS)@)Ik-!S)O{ zXlh*@hUnzS{CQeX-mjQ^@xKlvO^ zP09~E|2te*@n_Mn>nyp?^yeP8#zufsLqq^|QQFiB)&TekIn8lSN5s+(Mq(w~_og=V zO8j!gs_XiWgYrx6yK#rC9Ug48$hp%_=Ho#huq3n8^FuE_fl?X9;Z+MiSjqDMrQJT| zraYMYM%1?#+>ejTSHFBUd@rU=Lf&dhIboB}?FH>okVadcJQ z28$Omm_J&vXw>w7^r=t;cZELC=)VW5S7S$~O|@R^gUlS(w&fxB>EjKQ9s$}|=rr=R zbx;G)1v^ID`SfQq?~_T#Ylr{)!`9ThK>x0zCTlOU`AN+EiB7nU>fR^TO{JQR+diNr7;_@CVaH*{GK6e1=ONwo`f=}AKXr4GxQNaoYpSyMmv>CDsvdm%pN-KTb@aDg`d`?iBV51Vlj zf@e-atOa$i&kqb7&961l=!80}Sa#5IKr8l++V0ReI352rCBYs(WH2+b zTTf^Xef@s6Zbgr|Ew)HF2?#i-f>jBa60aC%V`tRnD)nWkdBl&keiK)p1bkim?3as52M$Sc4n-xvs%H}- zw2!(1mw1K%)_h9fYe%9e#p+%QO={u0VG4ZN2XhEK5=m%6`NxVGu^;bbBE2pMdT%}& z$lle4#Sl0h5jr*TyH#^tXo&2y(#JYR0HR4l9_;L|4PDMyv6dU!;To%wn1e>w*^Msg z$Okuk$0ZCJFNh%~wBSs5M{wxUT949{|D2>XCe@_iVQW_&)-Jl!He7JYkd;Yz9Ctr@ zd362kY^R@@m)N0WCw)x}r_L3}WEHy3gX2(7V+Xn>EE|-LT=!tLjtV9k^u$5w5|Q zpn^gte3zvv4-aq>3#b|6i_dZ$j46pG9S#U3|}j8zCJzICw+2r7F zyW`U?zrU-z@FpS_C`<9rBZFAg4jYJnmcB>kXzd4lya_2IDT#vX@E=a5n! z411EIwvd`UkO!4;Qfo@Jo!ODvrRR6O3_+$!;#(Yi?nG{0;uGAgH%PrX!pnUi^ON@I zgKLMe#{QM|$SlC()GK(L)UpvRXw?O)1%y!)oF+@_CM1a@%wSzA`#lNcv1^W+u3k{;q|1wu~NX%&Sm}z ze{1j0JDIufDd6=`AhnUY4aF)Z7;QmMqIZOpoQroHVn!x0QLg2MK;#hj(A6XNORVlbJw%Up(r=cf({jw}mqUWAl72$!0YhY>YIZt7oGU$duj#;uI=+s3o&Zt&5j?p3?bs9X8;+-%P0m1cuO5 zBf3v=URm<1CIg%^XAXj)>!Bl$c5b;3JQrFSxw@gnPK=zu%pic#HRXXus#(dZBjnS{ zQ>msCmn2W67nOZ06b4Uv4yr5JC#sH&;WRBI&|is>F0FG^$m(?8PeA)Uj}RsR~6SyVg1m?g45GzIz1A#ah47HB`~GdFKXd47W+K|%&r;Y2w(^VgS!+##A1DaJ_lLjv zPFK9RN=$xQ4R2ZWS4IoTKidpU1+z6_u9#`WH2UV?xQU>kKR@%~3$|KC@l5VP#-wca!)Wqp#o1fClBsG3}D}2=g~$@ z+A8_yB}^Z*fA4ALZ)+6hvwX9pGdJ&g=u+-LOMxg?xf%C#30C`+VPIbbS2SOZ#L+h# z7=0Euxcl9a#-?)JUt1*`+dQqeY2QRLlCjYU^2ILm3k1 z`n&@g?4Dn)sZ-P#Ulz2eIC05nJfHRCr%7Wf)YLObVY+$?=zt*VSOp#KbN7jAgm|dQ z5ST947J?t9Z4#MVr?=DUro`MKO~a;&Y4sh=2rYQ}II_`&+m&-;bjP_t-0y?w+5Y@`a!@6|`LJ-PluzGNe+>>u~m3xVj6MOE?!6`0NrSRxE8- zJsPWhzdRA%U}tHI1$X$4eg00=^k17e1tsn( zltJJ{xq@G!8^xUWgZAU}DpxVP^*SCwM7srx4}h#?Vnavz#{A~>$v-*c*=S*^Y(K4t z`#m!XPkVim_>ov^Q6p6a=e6b^yfdQK5_QtQF~bxH&&hN!b=^03&qbwtm3r4Z^(`<) zyHAVy!G8b##<*>Qtea)uR=}iRcty7Lr`RG>Kk*%%e}K(?glaxwZ8N;Nh)VrTtMes} z3+$UdevQp<{^-4CtE+q{jalh@|8}3?)P;sBME9g9?T#p+2))Xruvql1g;Wcr1tg4& z0L4pMC1>NHU70QO3YnN&o?-{&j2?`tWAl#htczGbA(xX>MIfYmkDcd4&zYyMp9S{* z+974`I)vW9+?uBlNH13X*7|LM$?4Hs8}s3j_A!cX2tVMe`hK&!I$%xN&vy|;SSRHU z?+@AK?%D?MzzCF!*wWySGWdjLEW8VUdUtz&k1RuSTiBYps*hN9H6Kh-Ucjwl$O8lw zB4Bb=-w7D9Eaj*BSQ&(_SWaR8GrzYz6HO}OJ!DxnDLUCkeS~PCxghJ3Vc-0FpX_I> z6SHB6rn(8i3i62&W5dBRgsx1qyz5A35?~7{Kt`MSQBq}E_T(0t$;)sMxS^)BPLlM7 z)RY!3Bu~Bpv!G zr~Q%+SeDI;XtoZ&-{(3rNchT`wKmyvV}pXZE~-viCx0 zdd(d&y2j(RdAlB2+vI97v8Yd`M|t6_R`!yC`IxzY6}qv&Z_TI1iX-OiimD;H@a$w5 zgAD3|(!^{p*FIu5EeU9j*C0=8N3rL?L6p?bl#a={lN#oH7~4K+A&G-4HgcXePrEqNXXCd7Vl1XC^o&RaHY*QXdsKKlA z5E=%X4ZkKNAh`NsL2r3$^DU@2aEtr`T`OH18K4QPZV`55Z`1Xs9{s-K=Fv6kgz1AN z{}`fdz3}*JiohSRai2_28R)nCpqz`Kb(3$}g$~|sBouZ4Hm`V*+cdgsSh&V;K?BFfCwyordggHSw7(YPZ@!0|{GlBkfi1U< z<*-`8$kw0JhI<8>$&<}BOy~Wk1~2vbeolRcGMnM>1+A%HywV+OmdwkSQ@$nfbYogw z5fqdr)9;AF<>HV)j5!YynP&RjLmxQ>Zg4~^0qPs&OSu!B`8cm6LDIwX^c0@pyl?>0 zM(x=P7Y8W{3=r1h&A=Dje3BK&j7AOL{z;=^Zrl3Zxr6a8yyxHCYO?QvtqC5?9S&Dm zaZfTe!xh74__`|w3H3tl(>D3+@wjH?_JnYjtag^t!P

oet(1D)UI5hkMK?m$*Jc6f>XxSzBem& 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 z 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 z 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

From 88024d2a45121acc1f2e311867c7f16abc483788 Mon Sep 17 00:00:00 2001 From: Tran Trang Linh Date: Wed, 21 Dec 2022 19:47:32 -0500 Subject: [PATCH 059/255] Fix "no identifier" tooltips showing as id: null (#2206) This commit fixes a bug in checkin status pages where participants without an identifier show "with identifier null" rather than the message "with no assigned identifier" as previously added. This was due to the identifier being in an array rather than Number|null. In addition, the messages were modified to remove the word "assigned" as un-necessary and a new message added for speakers without identifier, saying "no id" now. The tooltips methods were refactored to avoid redundant/duplicated conditions, preferring `else`. --- .../checkins/templates/PeopleStatusMixin.vue | 36 ++++++++++--------- .../checkins/templates/VenuesStatusMixin.vue | 30 ++++++++-------- 2 files changed, 35 insertions(+), 31 deletions(-) diff --git a/tabbycat/checkins/templates/PeopleStatusMixin.vue b/tabbycat/checkins/templates/PeopleStatusMixin.vue index 7180fcf058a..dcaf73aafaa 100644 --- a/tabbycat/checkins/templates/PeopleStatusMixin.vue +++ b/tabbycat/checkins/templates/PeopleStatusMixin.vue @@ -30,26 +30,30 @@ export default { }, methods: { getToolTipForPerson: function (entity) { - if (!this.teamCodes && entity.type !== 'Team' && entity.institution === null && entity.identifier !== null) { - const subs = [entity.name, entity.type, entity.identifier[0]] - return this.tct('%s, a %s of no institutional affiliation with identifier of %s', subs) - } - if (!this.teamCodes && entity.type !== 'Team' && entity.institution === null) { - const subs = [entity.name, entity.type] - return this.tct('%s, a %s of no institutional affiliation with no assigned identifier', subs) - } - if (!this.teamCodes && entity.type !== 'Team' && entity.identifier !== null) { - const subs = [entity.name, entity.type, entity.institution.name, entity.identifier[0]] - return this.tct('%s, a %s from %s with identifier of %s', subs) - } if (!this.teamCodes && entity.type !== 'Team') { - const subs = [entity.name, entity.type, entity.institution.name] - return this.tct('%s, a %s from %s with no assigned identifier', subs) + if (entity.institution === null) { + if (entity.identifier[0]) { + const subs = [entity.name, entity.type, entity.identifier[0]] + return this.tct('%s, a %s of no institutional affiliation with identifier of %s', subs) + } else { + const subs = [entity.name, entity.type] + return this.tct('%s, a %s of no institutional affiliation with no identifier', subs) + } + } + if (entity.identifier[0]) { + const subs = [entity.name, entity.type, entity.institution.name, entity.identifier[0]] + return this.tct('%s, a %s from %s with identifier of %s', subs) + } else { + const subs = [entity.name, entity.type, entity.institution.name] + return this.tct('%s, a %s from %s with no identifier', subs) + } } - if (entity.speakers !== null && entity.type === 'Team') { + if (entity.speakers && entity.type === 'Team') { const speakers = [] _.forEach(entity.speakers, (speaker) => { - if (speaker.status) { + if (!speaker.identifier[0]) { + speakers.push(this.tct('%s (Absent; no id)', [speaker.name])) + } else if (speaker.status) { speakers.push(this.tct('%s (Present; id=%s)', [speaker.name, speaker.identifier[0]])) } else { speakers.push(this.tct('%s (Absent; id=%s)', [speaker.name, speaker.identifier[0]])) diff --git a/tabbycat/checkins/templates/VenuesStatusMixin.vue b/tabbycat/checkins/templates/VenuesStatusMixin.vue index ecb9dba9b61..28d74db0ef0 100644 --- a/tabbycat/checkins/templates/VenuesStatusMixin.vue +++ b/tabbycat/checkins/templates/VenuesStatusMixin.vue @@ -19,22 +19,22 @@ export default { _.forEach(entity.categories, (c) => { categories.push(c.name) }) - if (entity.categories.length > 0 && entity.identifier !== null) { - const substitutions = [entity.name, categories.join(', '), entity.identifier[0]] - return this.tct('%s (%s) with identifier of %s', substitutions) - } - if (entity.categories.length === 0 && entity.identifier !== null) { - const substitutions = [entity.name, entity.identifier[0]] - return this.tct('%s (no category) with identifier of %s', substitutions) - } - if (entity.categories.length > 0) { - const substitutions = [entity.name, categories.join(', ')] - return this.tct('%s (%s) with no assigned identifier', substitutions) - } - if (entity.categories.length === 0) { - return this.tct('%s (no category) with no assigned identifier', [entity.name]) + if (entity.categories.length) { + if (entity.identifier[0]) { + const substitutions = [entity.name, categories.join(', '), entity.identifier[0]] + return this.tct('%s (%s) with identifier of %s', substitutions) + } else { + const substitutions = [entity.name, categories.join(', ')] + return this.tct('%s (%s) with no identifier', substitutions) + } + } else { + if (entity.identifier[0]) { + const substitutions = [entity.name, entity.identifier[0]] + return this.tct('%s (no category) with identifier of %s', substitutions) + } else { + return this.tct('%s (no category) with no identifier', [entity.name]) + } } - return entity.name }, }, computed: { From c9a95fb1e0f73cfda6fb3e2e945ac40324ea4142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Thu, 22 Dec 2022 00:25:27 -0400 Subject: [PATCH 060/255] Fix typos in user-facing text Quick stuff found in Pycharm. --- tabbycat/checkins/templates/checkin_printables.html | 2 +- .../importer/templates/simple_import_adjudicators_numbers.html | 2 +- tabbycat/importer/templates/simple_import_teams_numbers.html | 2 +- tabbycat/participants/views.py | 2 +- tabbycat/printing/templates/randomised_url_sheets.html | 2 +- tabbycat/templates/admin/style_guide.html | 2 +- tabbycat/templates/ajax/WebSocketMixin.vue | 2 +- tabbycat/templates/base.html | 2 +- tabbycat/tournaments/templates/public_tournament_index.html | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tabbycat/checkins/templates/checkin_printables.html b/tabbycat/checkins/templates/checkin_printables.html index 5a6be1c6956..16f173aed56 100644 --- a/tabbycat/checkins/templates/checkin_printables.html +++ b/tabbycat/checkins/templates/checkin_printables.html @@ -8,7 +8,7 @@ {% block page-alerts %} {% blocktrans trimmed asvar p1 %} - Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table. + Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table. {% endblocktrans %} {% include "components/explainer-card.html" with type="info" %} diff --git a/tabbycat/importer/templates/simple_import_adjudicators_numbers.html b/tabbycat/importer/templates/simple_import_adjudicators_numbers.html index a1018fb3ced..36d2ac6caaf 100644 --- a/tabbycat/importer/templates/simple_import_adjudicators_numbers.html +++ b/tabbycat/importer/templates/simple_import_adjudicators_numbers.html @@ -27,7 +27,7 @@ {% blocktrans trimmed asvar p2 %} You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 - in one go; the system will crash and you will lose data.) + in one go; the system will crash, and you will lose data.) {% endblocktrans %} {% include "components/explainer-card.html" with type="info" %} diff --git a/tabbycat/importer/templates/simple_import_teams_numbers.html b/tabbycat/importer/templates/simple_import_teams_numbers.html index 12e41995b55..e1faa4ae987 100644 --- a/tabbycat/importer/templates/simple_import_teams_numbers.html +++ b/tabbycat/importer/templates/simple_import_teams_numbers.html @@ -28,7 +28,7 @@ {% blocktrans trimmed asvar p2 %} You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; - the system will crash and you will lose data.) + the system will crash, and you will lose data.) {% endblocktrans %} {% include "components/explainer-card.html" with type="info" %} diff --git a/tabbycat/participants/views.py b/tabbycat/participants/views.py index 10b003d0cf9..4b239d22e3e 100644 --- a/tabbycat/participants/views.py +++ b/tabbycat/participants/views.py @@ -433,7 +433,7 @@ def post(self, request, *args, **kwargs): self.set_category_eligibility(participant, posted_info[str(participant_id)]) self.log_action() except Exception: - message = "Error handling eligiblity updates" + message = "Error handling eligibility updates" logger.exception(message) return JsonResponse({'status': 'false', 'message': message}, status=500) diff --git a/tabbycat/printing/templates/randomised_url_sheets.html b/tabbycat/printing/templates/randomised_url_sheets.html index 016b0be0fe8..e8cf1a89275 100644 --- a/tabbycat/printing/templates/randomised_url_sheets.html +++ b/tabbycat/printing/templates/randomised_url_sheets.html @@ -11,7 +11,7 @@ {% block page-alerts %}
{% blocktrans trimmed %} - This page is designed to be printed as double sided A4 sheets, with the + This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome. {% endblocktrans %} diff --git a/tabbycat/templates/admin/style_guide.html b/tabbycat/templates/admin/style_guide.html index d1689b07deb..d4eac6eb152 100644 --- a/tabbycat/templates/admin/style_guide.html +++ b/tabbycat/templates/admin/style_guide.html @@ -20,7 +20,7 @@
Nav actions
{% include "components/item-action.html" with text="Nav Action Item" icon="feather" %}
-
Calls to Action (promp for necessary actions)
+
Calls to Action (prompt for necessary actions)
{% include "components/item-action.html" with url="#" alone=True text="Go to the draw area to allocate adjudicators." type="success" to_complete=True %} diff --git a/tabbycat/templates/ajax/WebSocketMixin.vue b/tabbycat/templates/ajax/WebSocketMixin.vue index 73e0e499578..b978e4a13fb 100644 --- a/tabbycat/templates/ajax/WebSocketMixin.vue +++ b/tabbycat/templates/ajax/WebSocketMixin.vue @@ -106,7 +106,7 @@ export default { }, dismissLostConnectionAlert: function () { if (this.lostConnections > 1) { // Only show modal when a connection is re-opened not opened - const explanation = `This page lost its connection to the server but has succesfully reopened + const explanation = `This page lost its connection to the server but has successfully reopened it. Changes made to data on this page will now be saved. However, you may want to refresh the page to verify that earlier changes were saved.` this.showErrorAlert(explanation, null, 'Connection Resumed', 'text-success', true, true) diff --git a/tabbycat/templates/base.html b/tabbycat/templates/base.html index fce86f5bfdc..c158654e805 100644 --- a/tabbycat/templates/base.html +++ b/tabbycat/templates/base.html @@ -119,7 +119,7 @@

- Advertisment by a Tabbycat Sponsor + Advertisement by a Tabbycat Sponsor

diff --git a/tabbycat/tournaments/templates/public_tournament_index.html b/tabbycat/tournaments/templates/public_tournament_index.html index 41fe00a7e38..3cbbad89360 100644 --- a/tabbycat/tournaments/templates/public_tournament_index.html +++ b/tabbycat/tournaments/templates/public_tournament_index.html @@ -238,7 +238,7 @@
- Advertisment by a Tabbycat Sponsor + Advertisement by a Tabbycat Sponsor
From d98c4240717a2318cfe8f4ad83df4d0cd829b23c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Thu, 22 Dec 2022 00:26:18 -0400 Subject: [PATCH 061/255] Use https links to documentation --- tabbycat/breakqual/templates/breaking_index.html | 2 +- tabbycat/draw/templates/position_balance.html | 2 +- tabbycat/printing/templates/feedback_list.html | 2 +- tabbycat/privateurls/templates/private_urls.html | 2 +- tabbycat/standings/views.py | 2 +- tabbycat/templates/footer.html | 6 +++--- tabbycat/tournaments/templates/create_tournament.html | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tabbycat/breakqual/templates/breaking_index.html b/tabbycat/breakqual/templates/breaking_index.html index a8b9135de5a..ce14f6da4c6 100644 --- a/tabbycat/breakqual/templates/breaking_index.html +++ b/tabbycat/breakqual/templates/breaking_index.html @@ -10,7 +10,7 @@ {% blocktrans trimmed asvar message %} This tournament does not have any break categories set up. You can read about how to create breaks - at our documentation. diff --git a/tabbycat/draw/templates/position_balance.html b/tabbycat/draw/templates/position_balance.html index 31ab29d2c01..6d1a88ae609 100644 --- a/tabbycat/draw/templates/position_balance.html +++ b/tabbycat/draw/templates/position_balance.html @@ -13,7 +13,7 @@ {% block content %} {% blocktrans trimmed asvar p1 with exponent=pref.bp_position_cost_exponent %} - Your current position cost function is {{ cost_func }}, raised to an exponent of {{ exponent }}. Read more about how position cost functions work in our documentation. + Your current position cost function is {{ cost_func }}, raised to an exponent of {{ exponent }}. Read more about how position cost functions work in our documentation. {% endblocktrans %} {% include "components/explainer-card.html" with type="info" %} diff --git a/tabbycat/printing/templates/feedback_list.html b/tabbycat/printing/templates/feedback_list.html index 7a988f83c3e..6eeceabe59f 100644 --- a/tabbycat/printing/templates/feedback_list.html +++ b/tabbycat/printing/templates/feedback_list.html @@ -19,7 +19,7 @@ {% endif %} {% blocktrans trimmed asvar message %} {{ first_sentence }} - Check the documentation for information on how to add these (otherwise these forms will be quite bare). + Check the documentation for information on how to add these (otherwise these forms will be quite bare). {% endblocktrans %} {% include "components/alert.html" with type="warning" %} {% endif %} diff --git a/tabbycat/privateurls/templates/private_urls.html b/tabbycat/privateurls/templates/private_urls.html index 7983c93f027..ff384abc9e9 100644 --- a/tabbycat/privateurls/templates/private_urls.html +++ b/tabbycat/privateurls/templates/private_urls.html @@ -32,7 +32,7 @@ Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. - + Read more about private URLs. {% endblocktrans %}

diff --git a/tabbycat/standings/views.py b/tabbycat/standings/views.py index 97d6908574a..fd41557246c 100644 --- a/tabbycat/standings/views.py +++ b/tabbycat/standings/views.py @@ -658,7 +658,7 @@ def annotate_table(self, table, adjudicators): " The current mix is specified below as the 'Score Components.' " "Feedback ratings are determined by averaging the results of all " "individual pieces of feedback across all rounds. " - "Read more.")) + "Read more.")) return table diff --git a/tabbycat/templates/footer.html b/tabbycat/templates/footer.html index 81d548be228..432a4da5059 100644 --- a/tabbycat/templates/footer.html +++ b/tabbycat/templates/footer.html @@ -50,7 +50,7 @@
{% blocktrans trimmed %}Still timing debates with the
{% blocktrans trimmed %}Our Organisation{% endblocktrans %}

{% blocktrans trimmed %} - Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology. + Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology. {% endblocktrans %}

@@ -74,13 +74,13 @@
{% blocktrans trimmed %}Our Organisation{% endblocktr diff --git a/tabbycat/tournaments/templates/create_tournament.html b/tabbycat/tournaments/templates/create_tournament.html index c0348afdef4..dc6ac090120 100644 --- a/tabbycat/tournaments/templates/create_tournament.html +++ b/tabbycat/tournaments/templates/create_tournament.html @@ -16,7 +16,7 @@ Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a - required payment. For more details, see the + required payment. For more details, see the Tabbycat licence agreement. {% endblocktrans %} {% include "components/explainer-card.html" with type="primary" p1=donation %} From 53c00f416d3abd2c83fb7674bd8c2a8291cf00c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Thu, 22 Dec 2022 00:28:11 -0400 Subject: [PATCH 062/255] Remove migration action on inexistant object --- tabbycat/venues/migrations/0010_populate_tournaments.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tabbycat/venues/migrations/0010_populate_tournaments.py b/tabbycat/venues/migrations/0010_populate_tournaments.py index 2a3bb9eeaf3..3bcef0a8b6b 100644 --- a/tabbycat/venues/migrations/0010_populate_tournaments.py +++ b/tabbycat/venues/migrations/0010_populate_tournaments.py @@ -70,7 +70,6 @@ def find_venue_tournament_via_category(apps, schema_editor): v.save() v.tournament_id = tournament_id v.venuecategory_set.set(categories) - vc.save() class Migration(migrations.Migration): From a80fb4f00ff6d44a2a6345da5b5a7d03d672ab1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Thu, 22 Dec 2022 00:30:54 -0400 Subject: [PATCH 063/255] Correct a couple HTML tags --- .../adjfeedback/templates/overview_modals.html | 2 +- tabbycat/checkins/templates/checkin_ids.html | 2 +- tabbycat/draw/templates/draw_display_admin.html | 2 +- .../templates/ballot/ballot_scoresheet.html | 16 ++++++++-------- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tabbycat/adjfeedback/templates/overview_modals.html b/tabbycat/adjfeedback/templates/overview_modals.html index 94e10600902..24523951d7f 100644 --- a/tabbycat/adjfeedback/templates/overview_modals.html +++ b/tabbycat/adjfeedback/templates/overview_modals.html @@ -34,7 +34,7 @@ + type="number" step="any"/> diff --git a/tabbycat/checkins/templates/checkin_ids.html b/tabbycat/checkins/templates/checkin_ids.html index c51392f7cc8..4853ff88968 100644 --- a/tabbycat/checkins/templates/checkin_ids.html +++ b/tabbycat/checkins/templates/checkin_ids.html @@ -38,7 +38,7 @@
{{ check_info.title }}
{% trans "Generate all identifiers" as text %} {% endif %}
-
+ {% csrf_token %}
diff --git a/tabbycat/draw/templates/draw_display_admin.html b/tabbycat/draw/templates/draw_display_admin.html index 0b3f883cf70..36b4ebadc84 100644 --- a/tabbycat/draw/templates/draw_display_admin.html +++ b/tabbycat/draw/templates/draw_display_admin.html @@ -348,7 +348,7 @@
{{ release_motions_title }}
- +
diff --git a/tabbycat/results/templates/ballot/ballot_scoresheet.html b/tabbycat/results/templates/ballot/ballot_scoresheet.html index 3a13813c841..530fe987f05 100644 --- a/tabbycat/results/templates/ballot/ballot_scoresheet.html +++ b/tabbycat/results/templates/ballot/ballot_scoresheet.html @@ -24,16 +24,16 @@
{{ team.side_code }}
- - - - +
@@ -41,8 +41,8 @@
{{ team.side_code }}
- +
From 393f0519b9531f1cbb47e81f43ea0602c51c71cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Thu, 22 Dec 2022 18:59:26 -0400 Subject: [PATCH 064/255] Consolidate custom and templated emails --- tabbycat/notifications/consumers.py | 32 +-------------------- tabbycat/notifications/utils.py | 4 +-- tabbycat/notifications/views.py | 44 +++++++++++++---------------- 3 files changed, 21 insertions(+), 59 deletions(-) diff --git a/tabbycat/notifications/consumers.py b/tabbycat/notifications/consumers.py index 6a175bd221e..c0f44d8f6fc 100644 --- a/tabbycat/notifications/consumers.py +++ b/tabbycat/notifications/consumers.py @@ -30,6 +30,7 @@ class NotificationQueueConsumer(SyncConsumer): BulkNotification.EventType.MOTIONS: MotionReleaseEmailGenerator(), BulkNotification.EventType.TEAM_REG: TeamSpeakerEmailGenerator(), BulkNotification.EventType.TEAM_DRAW: TeamDrawEmailGenerator(), + BulkNotification.EventType.CUSTOM: NotificationContextGenerator(), } def _send(self, event, messages, records) -> None: @@ -108,34 +109,3 @@ def email(self, event: Dict[str, Union[str, BulkNotification.EventType, List[int hook_id=hook_id, notification=bulk_notification)) self._send(event, messages, records) - - def email_custom(self, event: Dict[str, Union[str, int, List[Person]]]) -> None: - messages = [] - records = [] - - t = Tournament.objects.get(id=event['tournament']) - from_email, reply_to = self._get_from_fields(t) - - recipients = Person.objects.filter(pk__in=event['send_to'], email__isnull=False).exclude(email='') - - bulk_notification = BulkNotification.objects.create(tournament=t, subject_template=event['subject'], body_template=event['body']) - for recipient in recipients: - hook_id = str(bulk_notification.id) + "-" + str(recipient.pk) + "-" + str(random.randint(1000, 9999)) - email = mail.EmailMultiAlternatives( - subject=event['subject'], body=html2text(event['body']), - from_email=from_email, to=[formataddr((recipient.name, recipient.email))], - reply_to=reply_to, headers={ - 'X-SMTPAPI': json.dumps({'unique_args': {'hook-id': hook_id}}), # SendGrid-specific 'hook-id' - }, - ) - email.attach_alternative(event['body'], "text/html") - messages.append(email) - - raw_message = email.message() - records.append( - SentMessage(recipient=recipient, email=recipient.email, - method=SentMessage.METHOD_TYPE_EMAIL, - message_id=raw_message['Message-ID'], hook_id=hook_id, - notification=bulk_notification)) - - self._send(event, messages, records) diff --git a/tabbycat/notifications/utils.py b/tabbycat/notifications/utils.py index 98ef5e3cc93..22d6c7cedb8 100644 --- a/tabbycat/notifications/utils.py +++ b/tabbycat/notifications/utils.py @@ -122,9 +122,7 @@ def _check_in_to(pk: int, to_ids: Set[int]) -> bool: class NotificationContextGenerator(Protocol): def __call__(self, to: 'QuerySet[Person]', *args: Any) -> List[Tuple[EmailContextData, 'Person']]: - raise NotImplementedError("The base NotificationContextGenerator class was called. This class only exists as a" - "base class for other the other generators to derive from and should not be called" - "itself.") + return [(EmailContextData(USER=person.name), person) for person in to] class AdjudicatorAssignmentEmailGenerator(NotificationContextGenerator): diff --git a/tabbycat/notifications/views.py b/tabbycat/notifications/views.py index c118a775e1e..fd71513f3ea 100644 --- a/tabbycat/notifications/views.py +++ b/tabbycat/notifications/views.py @@ -24,7 +24,7 @@ from utils.views import VueTableTemplateView from .forms import BasicEmailForm, TestEmailForm -from .models import EmailStatus, SentMessage +from .models import BulkNotification, EmailStatus, SentMessage if TYPE_CHECKING: from django.http.response import HttpResponseRedirect @@ -298,28 +298,6 @@ def get_context_data(self, **kwargs) -> Dict[str, Any]: return context -class CustomEmailCreateView(RoleColumnMixin, BaseSelectPeopleEmailView): - - tournament_redirect_pattern_name = 'notifications-email' - - def default_send(self, p: Person, default_send_queryset: 'QuerySet[Person]') -> bool: - return False - - def form_valid(self, form: BasicEmailForm) -> 'HttpResponseRedirect': - people = Person.objects.filter(id__in=list(map(int, self.request.POST.getlist('recipients')))) - - async_to_sync(get_channel_layer().send)("notifications", { - "type": "email_custom", - "subject": form.cleaned_data['subject_line'], - "body": form.cleaned_data['message_body'], - "tournament": self.tournament.id, - "send_to": [p.id for p in people], - }) - - self.add_sent_notification(len(people)) - return super().form_valid(form) - - class TemplateEmailCreateView(BaseSelectPeopleEmailView): def get_initial(self) -> Dict[str, str]: @@ -330,8 +308,9 @@ def get_initial(self) -> Dict[str, str]: return initial def form_valid(self, form: BasicEmailForm) -> 'HttpResponseRedirect': - self.tournament.preferences[self.subject_template] = form.cleaned_data['subject_line'] - self.tournament.preferences[self.message_template] = form.cleaned_data['message_body'] + if self.subject_template: + self.tournament.preferences[self.subject_template] = form.cleaned_data['subject_line'] + self.tournament.preferences[self.message_template] = form.cleaned_data['message_body'] email_recipients = list(map(int, self.request.POST.getlist('recipients'))) async_to_sync(get_channel_layer().send)("notifications", { @@ -358,6 +337,21 @@ def get_extra(self) -> Dict[str, Any]: return extra +class CustomEmailCreateView(RoleColumnMixin, TournamentTemplateEmailCreateView): + tournament_redirect_pattern_name = 'notifications-email' + event = BulkNotification.EventType.CUSTOM + + def get_initial(self) -> Dict[str, str]: + return {} # Have everything unset + + def get_default_send_queryset(self) -> 'QuerySet[Person]': + # From TemplateEmailCreateView to avoid excluding if already got custom + return self.get_queryset().filter(email__isnull=False).exclude(email__exact="") + + def default_send(self, p: Person, default_send_queryset: 'QuerySet[Person]') -> bool: + return False + + class RoundTemplateEmailCreateView(TemplateEmailCreateView, RoundMixin): def get_default_send_queryset(self) -> 'QuerySet[Person]': From a112f483a84fe04b291ed4002cd4bbe989a3fdef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Thu, 22 Dec 2022 19:00:22 -0400 Subject: [PATCH 065/255] Flesh out email context generators As we are making them into classes, we might as well add their data- classes as an attribute, and they can be class methods. Then, the USER parameter could be made within the main email loop as the Person object is the 2nd element of each tuple. Also made a few other changes suggested by my IDE. --- tabbycat/notifications/consumers.py | 43 ++--- tabbycat/notifications/utils.py | 253 ++++++++++++++++------------ 2 files changed, 164 insertions(+), 132 deletions(-) diff --git a/tabbycat/notifications/consumers.py b/tabbycat/notifications/consumers.py index c0f44d8f6fc..a4ea6dd07d2 100644 --- a/tabbycat/notifications/consumers.py +++ b/tabbycat/notifications/consumers.py @@ -2,7 +2,7 @@ import random from dataclasses import asdict from email.utils import formataddr -from typing import Any, Dict, List, Optional, Tuple, Union +from typing import Any, Dict, List, Optional, Tuple, Type, Union from channels.consumer import SyncConsumer from django.conf import settings @@ -22,22 +22,24 @@ class NotificationQueueConsumer(SyncConsumer): - NOTIFICATION_GENERATORS: Dict[BulkNotification.EventType, NotificationContextGenerator] = { - BulkNotification.EventType.ADJ_DRAW: AdjudicatorAssignmentEmailGenerator(), - BulkNotification.EventType.URL: RandomizedUrlEmailGenerator(), - BulkNotification.EventType.BALLOTS_CONFIRMED: BallotsEmailGenerator(), - BulkNotification.EventType.POINTS: StandingsEmailGenerator(), - BulkNotification.EventType.MOTIONS: MotionReleaseEmailGenerator(), - BulkNotification.EventType.TEAM_REG: TeamSpeakerEmailGenerator(), - BulkNotification.EventType.TEAM_DRAW: TeamDrawEmailGenerator(), - BulkNotification.EventType.CUSTOM: NotificationContextGenerator(), + NOTIFICATION_GENERATORS: Dict[BulkNotification.EventType, Type[NotificationContextGenerator]] = { + BulkNotification.EventType.ADJ_DRAW: AdjudicatorAssignmentEmailGenerator, + BulkNotification.EventType.URL: RandomizedUrlEmailGenerator, + BulkNotification.EventType.BALLOTS_CONFIRMED: BallotsEmailGenerator, + BulkNotification.EventType.POINTS: StandingsEmailGenerator, + BulkNotification.EventType.MOTIONS: MotionReleaseEmailGenerator, + BulkNotification.EventType.TEAM_REG: TeamSpeakerEmailGenerator, + BulkNotification.EventType.TEAM_DRAW: TeamDrawEmailGenerator, + BulkNotification.EventType.CUSTOM: NotificationContextGenerator, } - def _send(self, event, messages, records) -> None: + @staticmethod + def _send(messages: List[mail.EmailMultiAlternatives], records: List[SentMessage]) -> None: mail.get_connection().send_messages(messages) SentMessage.objects.bulk_create(records) - def _get_from_fields(self, t: Tournament) -> Tuple[str, Optional[List[str]]]: + @staticmethod + def _get_from_fields(t: Tournament) -> Tuple[str, Optional[List[str]]]: from_email = formataddr((t.short_name, settings.DEFAULT_FROM_EMAIL)) if t.pref('reply_to_address'): return from_email, [formataddr((t.pref('reply_to_name'), t.pref('reply_to_address')))] @@ -46,7 +48,8 @@ def _get_from_fields(self, t: Tournament) -> Tuple[str, Optional[List[str]]]: def email(self, event: Dict[str, Union[str, BulkNotification.EventType, List[int], Dict[str, Any]]]) -> None: # Get database objects if 'debate_id' in event['extra']: - event['extra']['debate'] = Debate.objects.select_related('round', 'round__tournament').get(pk=event['extra'].pop('debate_id')) + debate = Debate.objects.select_related('round__tournament').get(pk=event['extra'].pop('debate_id')) + event['extra']['debate'] = debate round = event['extra']['debate'].round t = round.tournament elif 'round_id' in event['extra']: @@ -65,12 +68,11 @@ def email(self, event: Dict[str, Union[str, BulkNotification.EventType, List[int html_body = Template(event['body']) recipients = Person.objects.filter(pk__in=event['send_to'] or [], email__isnull=False).exclude(email='') - data = self.NOTIFICATION_GENERATORS[notification_type](to=recipients, **event['extra']) + contexts = self.NOTIFICATION_GENERATORS[notification_type].generate(to=recipients, **event['extra']) # Prepare messages # Ballot receipts are grouped by round in the same BulkNotification - bulk_notification = BulkNotification.objects.none() creation_kwargs = { 'round': round, 'tournament': t, @@ -85,11 +87,12 @@ def email(self, event: Dict[str, Union[str, BulkNotification.EventType, List[int messages = [] records = [] - for instance, recipient in data: - instance = asdict(instance) + for instance, recipient in contexts: + data = asdict(instance) + data['USER'] = recipient.name hook_id = str(bulk_notification.id) + "-" + str(recipient.id) + "-" + str(random.randint(1000, 9999)) - context = Context(instance) + context = Context(data) body = html_body.render(context) email = mail.EmailMultiAlternatives( subject=subject.render(context), body=html2text(body), @@ -105,7 +108,7 @@ def email(self, event: Dict[str, Union[str, BulkNotification.EventType, List[int records.append( SentMessage(recipient=recipient, email=recipient.email, method=SentMessage.METHOD_TYPE_EMAIL, - context=instance, message_id=raw_message['Message-ID'], + context=data, message_id=raw_message['Message-ID'], hook_id=hook_id, notification=bulk_notification)) - self._send(event, messages, records) + self._send(messages, records) diff --git a/tabbycat/notifications/utils.py b/tabbycat/notifications/utils.py index 22d6c7cedb8..d9297c8117a 100644 --- a/tabbycat/notifications/utils.py +++ b/tabbycat/notifications/utils.py @@ -7,11 +7,11 @@ called by NotificationQueueConsumer, which inserts the variables into a message, using the participant object to fetch their email address and to record. -Objects should be fetched from the database here as it is an asyncronous process, +Objects should be fetched from the database here as it is an asynchronous process, thus the object itself cannot be passed. """ from dataclasses import dataclass -from typing import Any, List, Protocol, Set, Tuple, TYPE_CHECKING +from typing import Any, List, Set, Tuple, TYPE_CHECKING from django.utils import formats from django.utils.safestring import mark_safe @@ -40,68 +40,7 @@ @dataclass class EmailContextData: - USER: str - - -@dataclass -class AdjudicatorAssignmentContext(EmailContextData): - ROUND: str - VENUE: str - PANEL: str - DRAW: str - POSITION: str - URL: str - - -@dataclass -class RandomizedUrlContext(EmailContextData): - KEY: str - TOURN: str - URL: str - - -@dataclass -class BallotsContext(EmailContextData): - DEBATE: str - SCORES: str - - -@dataclass -class StandingsContext(EmailContextData): - TOURN: str - ROUND: str - URL: str - POINTS: str - TEAM: str - - -@dataclass -class MotionReleaseContext(EmailContextData): - TOURN: str - ROUND: str - MOTIONS: str - - -@dataclass -class TeamSpeakerContext(EmailContextData): - TOURN: str - SHORT: str - LONG: str - CODE: str - BREAK: str - SPEAKERS: str - INSTITUTION: str - EMOJI: str - - -@dataclass -class TeamDrawContext(EmailContextData): - ROUND: str - VENUE: str - PANEL: str - DRAW: str - TEAM: str - SIDE: str + USER: str = "" # Normally filled within the consumer def _assemble_panel(adjs: List[Tuple['Person', str]]) -> str: @@ -120,47 +59,85 @@ def _check_in_to(pk: int, to_ids: Set[int]) -> bool: return True -class NotificationContextGenerator(Protocol): - def __call__(self, to: 'QuerySet[Person]', *args: Any) -> List[Tuple[EmailContextData, 'Person']]: - return [(EmailContextData(USER=person.name), person) for person in to] +class NotificationContextGenerator: + context_class = EmailContextData + + @classmethod + def generate(cls, to: 'QuerySet[Person]', *args: Any) -> List[Tuple[EmailContextData, 'Person']]: + return [(cls.context_class(), person) for person in to] class AdjudicatorAssignmentEmailGenerator(NotificationContextGenerator): - def __call__(self, to: 'QuerySet[Person]', url: str, round: 'Round') -> List[Tuple[AdjudicatorAssignmentContext, 'Person']]: + + @dataclass + class AdjudicatorAssignmentContext(EmailContextData): + ROUND: str + VENUE: str + PANEL: str + DRAW: str + POSITION: str + URL: str + + context_class = AdjudicatorAssignmentContext + + @classmethod + def generate(cls, to: 'QuerySet[Person]', url: str, round: 'Round') -> List[Tuple[EmailContextData, 'Person']]: emails = [] to_ids = {p.id for p in to} draw = round.debate_set_with_prefetches(speakers=False).filter(debateadjudicator__adjudicator__in=to) use_codes = use_team_code_names(round.tournament, False) for debate in draw: + matchup = debate.matchup_codes if use_codes else debate.matchup + context = { + 'ROUND': round.name, + 'VENUE': debate.venue.display_name if debate.venue is not None else _("TBA"), + 'PANEL': _assemble_panel(debate.adjudicators.with_positions()), + 'DRAW': matchup, + } + for adj, pos in debate.adjudicators.with_positions(): if not _check_in_to(adj.id, to_ids): continue - context_user = AdjudicatorAssignmentContext( - ROUND=round.name, USER=adj.name, POSITION=adj_position_names[pos], - VENUE=debate.venue.display_name if debate.venue is not None else _("TBA"), - PANEL=_assemble_panel(debate.adjudicators.with_positions()), - DRAW=debate.matchup_codes if use_codes else debate.matchup, - URL=url + adj.url_key + '/' if adj.url_key else '', - ) + context_user = cls.context_class(**context, POSITION=adj_position_names[pos], + URL=url + adj.url_key + '/' if adj.url_key else '') emails.append((context_user, adj)) return emails class RandomizedUrlEmailGenerator(NotificationContextGenerator): - def __call__(self, to: 'QuerySet[Person]', url: str, tournament: 'Tournament') -> List[Tuple[RandomizedUrlContext, 'Person']]: - return [(RandomizedUrlContext(USER=p.name, URL=url + p.url_key + '/', KEY=p.url_key, TOURN=str(tournament)), p) for p in to] + + @dataclass + class RandomizedUrlContext(EmailContextData): + KEY: str + TOURN: str + URL: str + + context_class = RandomizedUrlContext + + @classmethod + def generate(cls, to: 'QuerySet[Person]', url: str, tournament: 'Tournament') -> List[Tuple[EmailContextData, 'Person']]: + return [(cls.context_class(URL=url + p.url_key + '/', KEY=p.url_key, TOURN=str(tournament)), p) for p in to] class BallotsEmailGenerator(NotificationContextGenerator): - def __call__(self, to: 'QuerySet[Person]', debate: 'Debate') -> List[Tuple[BallotsContext, 'Person']]: # "to" is unused + + @dataclass + class BallotsContext(EmailContextData): + DEBATE: str + SCORES: str + + context_class = BallotsContext + + @classmethod + def generate(cls, to: 'QuerySet[Person]', debate: 'Debate') -> List[Tuple[EmailContextData, 'Person']]: emails = [] tournament = debate.round.tournament results = DebateResult(debate.confirmed_ballot) round_name = _("%(tournament)s %(round)s @ %(room)s") % {'tournament': str(tournament), - 'round': debate.round.name, 'room': debate.venue.name} + 'round': debate.round.name, 'room': debate.venue.name} use_codes = use_team_code_names(tournament, False) @@ -203,86 +180,138 @@ def _create_ballot(result, scoresheet): if adj.email is None: # As "to" is None, must check if eligible email continue - context = BallotsContext(DEBATE=round_name, USER=adj.name, SCORES=_create_ballot(results, ballot)) + context = cls.context_class(DEBATE=round_name, SCORES=_create_ballot(results, ballot)) emails.append((context, adj)) elif isinstance(results, ConsensusDebateResultWithScores): + context = cls.context_class(DEBATE=round_name, SCORES=_create_ballot(results, results.scoresheet)) for adj in debate.debateadjudicator_set.all().select_related('adjudicator'): if adj.adjudicator.email is None: continue - context_user = BallotsContext( - DEBATE=round_name, USER=adj.adjudicator.name, - SCORES=_create_ballot(results, results.scoresheet), - ) - emails.append((context_user, adj.adjudicator)) + emails.append((context, adj.adjudicator)) return emails class StandingsEmailGenerator(NotificationContextGenerator): - def __call__(self, to: 'QuerySet[Person]', url: str, round: 'Round') -> List[Tuple[StandingsContext, 'Person']]: + + @dataclass + class StandingsContext(EmailContextData): + TOURN: str + ROUND: str + URL: str + POINTS: str + TEAM: str + + context_class = StandingsContext + + @classmethod + def generate(cls, to: 'QuerySet[Person]', url: str, round: 'Round') -> List[Tuple[EmailContextData, 'Person']]: emails = [] to_ids = {p.id for p in to} teams = round.active_teams.filter(speaker__in=to).prefetch_related('speaker_set') populate_win_counts(teams, round) + context = { + 'TOURN': str(round.tournament), + 'ROUND': round.name, + 'URL': url, + } + for team in teams: + team_context = {"POINTS": str(team.points_count), "TEAM": team.short_name} for speaker in team.speaker_set.all(): if not _check_in_to(speaker.id, to_ids): continue - context_user = StandingsContext( - TOURN=str(round.tournament), ROUND=round.name, URL=url, - POINTS=str(team.points_count), TEAM=team.short_name, - USER=speaker.name, - ) + context_user = cls.context_class(**context, **team_context) emails.append((context_user, speaker)) return emails class MotionReleaseEmailGenerator(NotificationContextGenerator): - def __call__(self, to: 'QuerySet[Person]', round: 'Round') -> List[Tuple[MotionReleaseContext, 'Person']]: + + @dataclass + class MotionReleaseContext(EmailContextData): + TOURN: str + ROUND: str + MOTIONS: str + + context_class = MotionReleaseContext + + @classmethod + def generate(cls, to: 'QuerySet[Person]', round: 'Round') -> List[Tuple[EmailContextData, 'Person']]: def _create_motion_list(): motion_list = "
    " for motion in round.motion_set.all(): motion_list += _("
  • %(text)s (%(ref)s)
  • ") % {'text': motion.text, 'ref': motion.reference} if motion.info_slide: - motion_list += " %s\n" % (motion.info_slide) + motion_list += " %s\n" % motion.info_slide motion_list += "
" return mark_safe(motion_list) + context = cls.context_class(TOURN=str(round.tournament), ROUND=round.name, MOTIONS=_create_motion_list()) - return [(MotionReleaseContext(TOURN=str(round.tournament), ROUND=round.name, MOTIONS=_create_motion_list(), USER=p.name), p) for p in to] + return [(context, p) for p in to] class TeamSpeakerEmailGenerator(NotificationContextGenerator): - def __call__(self, to: 'QuerySet[Person]', tournament: 'Tournament') -> List[Tuple[TeamSpeakerContext, 'Person']]: + + @dataclass + class TeamSpeakerContext(EmailContextData): + TOURN: str + SHORT: str + LONG: str + CODE: str + BREAK: str + SPEAKERS: str + INSTITUTION: str + EMOJI: str + + context_class = TeamSpeakerContext + + @classmethod + def generate(cls, to: 'QuerySet[Person]', tournament: 'Tournament') -> List[Tuple[EmailContextData, 'Person']]: emails = [] to_ids = {p.id for p in to} - teams = tournament.team_set.filter(speaker__in=to).prefetch_related('speaker_set', 'break_categories').select_related('institution') + teams = tournament.team_set.filter(speaker__in=to).prefetch_related( + 'speaker_set', 'break_categories').select_related('institution') for team in teams: + context = cls.context_class( + TOURN=str(tournament), SHORT=team.short_name, LONG=team.long_name, CODE=team.code_name, + BREAK=_(", ").join([breakq.name for breakq in team.break_categories.all()]), + SPEAKERS=_(", ").join([p.name for p in team.speaker_set.all()]), + INSTITUTION=str(team.institution), EMOJI=team.emoji, + ) for speaker in team.speakers: if not _check_in_to(speaker.id, to_ids): continue - context_user = TeamSpeakerContext( - TOURN=str(tournament), SHORT=team.short_name, LONG=team.long_name, CODE=team.code_name, - BREAK=_(", ").join([breakq.name for breakq in team.break_categories.all()]), - SPEAKERS=_(", ").join([p.name for p in team.speaker_set.all()]), - INSTITUTION=str(team.institution), EMOJI=team.emoji, - ) - emails.append((context_user, speaker)) + emails.append((context, speaker)) return emails class TeamDrawEmailGenerator(NotificationContextGenerator): - def __call__(self, to: 'QuerySet[Person]', round: 'Round') -> List[Tuple[TeamDrawContext, 'Person']]: + + @dataclass + class TeamDrawContext(EmailContextData): + ROUND: str + VENUE: str + PANEL: str + DRAW: str + TEAM: str + SIDE: str + + context_class = TeamDrawContext + + @classmethod + def generate(cls, to: 'QuerySet[Person]', round: 'Round') -> List[Tuple[EmailContextData, 'Person']]: emails = [] to_ids = {p.id for p in to} tournament = round.tournament @@ -290,18 +319,18 @@ def __call__(self, to: 'QuerySet[Person]', round: 'Round') -> List[Tuple[TeamDra use_codes = use_team_code_names(tournament, False) for debate in draw: + context_debate = {"ROUND": round.name, "VENUE": debate.venue.name, + "DRAW": debate.matchup_codes if use_codes else debate.matchup, + "PANEL": _assemble_panel(debate.adjudicators.with_positions())} for dt in debate.debateteam_set.all(): + context = cls.context_class(**context_debate, + TEAM=dt.team.code_name if use_codes else dt.team.short_name, + SIDE=dt.get_side_name(tournament=round.tournament), + ) for speaker in dt.team.speakers: if not _check_in_to(speaker.id, to_ids): continue - context_user = TeamDrawContext( - ROUND=round.name, VENUE=debate.venue.name, USER=speaker.name, - TEAM=dt.team.code_name if use_codes else dt.team.short_name, - SIDE=dt.get_side_name(tournament=round.tournament), - DRAW=debate.matchup_codes if use_codes else debate.matchup, - PANEL=_assemble_panel(debate.adjudicators.with_positions()), - ) - emails.append((context_user, speaker)) + emails.append((context, speaker)) return emails From 49ea521ebb3d7de370afe403d48dff44b8653d78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Thu, 22 Dec 2022 19:05:29 -0400 Subject: [PATCH 066/255] Specify class Type when class as parameter --- tabbycat/notifications/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tabbycat/notifications/admin.py b/tabbycat/notifications/admin.py index bd6e1208a4d..39e03d05276 100644 --- a/tabbycat/notifications/admin.py +++ b/tabbycat/notifications/admin.py @@ -12,7 +12,7 @@ from django.http.request import HttpRequest -def precise_timestamp_isoformat(model: Type, field_name: str) -> Callable[['Model'], str]: +def precise_timestamp_isoformat(model: Type['Model'], field_name: str) -> Callable[['Model'], str]: @admin.display(description=model._meta.get_field(field_name).verbose_name) def precise_timestamp(self, obj): return timezone.localtime(getattr(obj, field_name)).isoformat() From b2c5507b0541b046f6501d2d1fb203ca3a4a4416 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Thu, 22 Dec 2022 19:32:56 -0400 Subject: [PATCH 067/255] Update pipenv lock file Hope it will fix the failing builds --- Pipfile.lock | 353 ++++++++++++++------------------------------------- 1 file changed, 92 insertions(+), 261 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 77daad21165..3f39e0cd05e 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -26,11 +26,11 @@ }, "asgiref": { "hashes": [ - "sha256:1d2880b792ae8757289136f1db2b7b99100ce959b2aa57fd69dab783d05afac4", - "sha256:4a29362a6acebe09bf1d6640db38c1dc3d9217c68e6f9f6204d72667fc19a424" + "sha256:71e68008da809b957b7ee4b43dbccff33d1b23519fb8344e33f049897077afac", + "sha256:9567dfe7bd8d3c8c892227827c41cce860b368104c3431da67a0c5a65a949506" ], "index": "pypi", - "version": "==3.5.2" + "version": "==3.6.0" }, "async-timeout": { "hashes": [ @@ -42,11 +42,11 @@ }, "attrs": { "hashes": [ - "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6", - "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c" + "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836", + "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99" ], - "markers": "python_version >= '3.5'", - "version": "==22.1.0" + "markers": "python_version >= '3.6'", + "version": "==22.2.0" }, "backcall": { "hashes": [ @@ -55,28 +55,6 @@ ], "version": "==0.2.0" }, - "backports.zoneinfo": { - "hashes": [ - "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf", - "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328", - "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546", - "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6", - "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570", - "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9", - "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7", - "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987", - "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722", - "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582", - "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc", - "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b", - "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1", - "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08", - "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac", - "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2" - ], - "markers": "python_version < '3.9'", - "version": "==0.2.1" - }, "bleach": { "hashes": [ "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a", @@ -87,11 +65,11 @@ }, "certifi": { "hashes": [ - "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14", - "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382" + "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", + "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" ], "markers": "python_version >= '3.6'", - "version": "==2022.9.24" + "version": "==2022.12.7" }, "channels": { "hashes": [ @@ -125,14 +103,6 @@ "index": "pypi", "version": "==0.7.1" }, - "deprecated": { - "hashes": [ - "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d", - "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.2.13" - }, "dj-cmd": { "hashes": [ "sha256:47588966ebf4345d792fdfd8512f8797be57e780454c02188e6f2583b50d03b5", @@ -143,19 +113,19 @@ }, "dj-database-url": { "hashes": [ - "sha256:ccf3e8718f75ddd147a1e212fca88eecdaa721759ee48e38b485481c77bca3dc", - "sha256:cd354a3b7a9136d78d64c17b2aec369e2ae5616fbca6bfbe435ef15bb372ce39" + "sha256:5c2993b91801c0f78a8b19e642b497b90831124cbade0c265900d4c1037b4730", + "sha256:b23b15046cb38180e0c95207bcc90fe5e9dbde8eef16065907dd85cf4ca7036c" ], "index": "pypi", - "version": "==1.0.0" + "version": "==1.2.0" }, "django": { "hashes": [ - "sha256:678bbfc8604eb246ed54e2063f0765f13b321a50526bdc8cb1f943eda7fa31f1", - "sha256:6b1de6886cae14c7c44d188f580f8ba8da05750f544c80ae5ad43375ab293cd5" + "sha256:0b223bfa55511f950ff741983d408d78d772351284c75e9f77d2b830b6b4d148", + "sha256:d38a4e108d2386cb9637da66a82dc8d0733caede4c83c4afdbda78af4214211b" ], "index": "pypi", - "version": "==4.1.3" + "version": "==4.1.4" }, "django-appconf": { "hashes": [ @@ -275,11 +245,11 @@ }, "drf-spectacular": { "hashes": [ - "sha256:b276e6f7bda6dfb911e742dab87c6e97bc67da2dafe82d6fd8df7cec6c8b03ec", - "sha256:be32417594080a52f996afd83fd47ea9c2b83cbf13f6d3fbf3de809a0dfa7ead" + "sha256:789696f9845ef2397c52f66154aec6d96411baf6aa09a5d40c5f0b0e99f6b3d8", + "sha256:d58684e702f5ad436c5bd1735d46df0e123e64de883092d38f1debb9fa4a03c9" ], "index": "pypi", - "version": "==0.24.2" + "version": "==0.25.1" }, "gunicorn": { "hashes": [ @@ -305,14 +275,6 @@ "index": "pypi", "version": "==2020.1.16" }, - "importlib-resources": { - "hashes": [ - "sha256:c01b1b94210d9849f286b86bb51bcea7cd56dde0600d8db721d7b81330711668", - "sha256:ee17ec648f85480d523596ce49eae8ead87d5631ae1551f913c0100b5edd3437" - ], - "markers": "python_version < '3.9'", - "version": "==5.10.0" - }, "inflection": { "hashes": [ "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417", @@ -331,19 +293,19 @@ }, "jedi": { "hashes": [ - "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d", - "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab" + "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e", + "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612" ], "markers": "python_version >= '3.6'", - "version": "==0.18.1" + "version": "==0.18.2" }, "jsonschema": { "hashes": [ - "sha256:5bfcf2bca16a087ade17e02b282d34af7ccd749ef76241e7f9bd7c0cb8a9424d", - "sha256:f660066c3966db7d6daeaea8a75e0b68237a48e51cf49882087757bb59916248" + "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d", + "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6" ], "markers": "python_version >= '3.7'", - "version": "==4.17.0" + "version": "==4.17.3" }, "matplotlib-inline": { "hashes": [ @@ -418,14 +380,6 @@ "index": "pypi", "version": "==1.1.4" }, - "packaging": { - "hashes": [ - "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", - "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" - ], - "markers": "python_version >= '3.6'", - "version": "==21.3" - }, "parso": { "hashes": [ "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0", @@ -456,21 +410,13 @@ ], "version": "==0.7.5" }, - "pkgutil-resolve-name": { - "hashes": [ - "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174", - "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" - ], - "markers": "python_version < '3.9'", - "version": "==1.3.10" - }, "prompt-toolkit": { "hashes": [ - "sha256:24becda58d49ceac4dc26232eb179ef2b21f133fecda7eed6018d341766ed76e", - "sha256:e7f2129cba4ff3b3656bbdda0e74ee00d2f874a8bcdb9dd16f5fec7b3e173cae" + "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63", + "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305" ], "markers": "python_full_version >= '3.6.2'", - "version": "==3.0.32" + "version": "==3.0.36" }, "psycopg2-binary": { "hashes": [ @@ -564,14 +510,6 @@ "markers": "python_version >= '3.6'", "version": "==2.13.0" }, - "pyparsing": { - "hashes": [ - "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", - "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" - ], - "markers": "python_full_version >= '3.6.8'", - "version": "==3.0.9" - }, "pyrsistent": { "hashes": [ "sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed", @@ -602,10 +540,10 @@ }, "pytz": { "hashes": [ - "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427", - "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2" + "sha256:7ccfae7b4b2c067464a6733c6261673fdb8fd1be905460396b97a073e9fa683a", + "sha256:93007def75ae22f7cd991c84e02d434876818661f8df9ad5df9e950ff4e52cfd" ], - "version": "==2022.6" + "version": "==2022.7" }, "pyyaml": { "hashes": [ @@ -662,27 +600,27 @@ }, "redis": { "hashes": [ - "sha256:a52d5694c9eb4292770084fa8c863f79367ca19884b329ab574d5cb2036b3e54", - "sha256:ddf27071df4adf3821c4f2ca59d67525c3a82e5f268bed97b813cb4fabf87880" + "sha256:7b8c87d19c45d3f1271b124858d2a5c13160c4e74d4835e28273400fa34d5228", + "sha256:cae3ee5d1f57d8caf534cd8764edf3163c77e073bdd74b6f54a87ffafdc5e7d9" ], "index": "pypi", - "version": "==4.3.4" + "version": "==4.4.0" }, "sentry-sdk": { "hashes": [ - "sha256:e7b78a1ddf97a5f715a50ab8c3f7a93f78b114c67307785ee828ef67a5d6f117", - "sha256:f467e6c7fac23d4d42bc83eb049c400f756cd2d65ab44f0cc1165d0c7c3d40bc" + "sha256:5bbe4b72de22f9ac1e67f2a4e6efe8fbd595bb59b7b223443f50fe5802a5551c", + "sha256:9f0b960694e2d8bb04db4ba6ac2a645040caef4e762c65937998ff06064f10d6" ], "index": "pypi", - "version": "==1.11.0" + "version": "==1.12.1" }, "setuptools": { "hashes": [ - "sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840", - "sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d" + "sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54", + "sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75" ], "markers": "python_version >= '3.7'", - "version": "==65.6.0" + "version": "==65.6.3" }, "six": { "hashes": [ @@ -702,11 +640,11 @@ }, "traitlets": { "hashes": [ - "sha256:1201b2c9f76097195989cdf7f65db9897593b0dfd69e4ac96016661bb6f0d30f", - "sha256:b122f9ff2f2f6c1709dab289a05555be011c87828e911c0cf4074b85cb780a79" + "sha256:6cc57d6dc28c85d5365961726ffd19b538739347749e13ebe34e03323a0e8f84", + "sha256:c864831efa0ba6576d09b44884b34e41defc18c0d7e720b4a2d6698c842cab3e" ], "markers": "python_version >= '3.7'", - "version": "==5.5.0" + "version": "==5.8.0" }, "uritemplate": { "hashes": [ @@ -718,11 +656,11 @@ }, "urllib3": { "hashes": [ - "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e", - "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997" + "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc", + "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8" ], "markers": "python_version >= '3.6'", - "version": "==1.26.12" + "version": "==1.26.13" }, "wcwidth": { "hashes": [ @@ -745,84 +683,6 @@ ], "index": "pypi", "version": "==6.2.0" - }, - "wrapt": { - "hashes": [ - "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3", - "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b", - "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4", - "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2", - "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656", - "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3", - "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff", - "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310", - "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a", - "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57", - "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069", - "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383", - "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe", - "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87", - "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d", - "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b", - "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907", - "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f", - "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0", - "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28", - "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1", - "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853", - "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc", - "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3", - "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3", - "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164", - "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1", - "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c", - "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1", - "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7", - "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1", - "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320", - "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed", - "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1", - "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248", - "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c", - "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456", - "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77", - "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef", - "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1", - "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7", - "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86", - "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4", - "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d", - "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d", - "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8", - "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5", - "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471", - "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00", - "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68", - "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3", - "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d", - "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735", - "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d", - "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569", - "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7", - "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59", - "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5", - "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb", - "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b", - "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f", - "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462", - "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015", - "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==1.14.1" - }, - "zipp": { - "hashes": [ - "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1", - "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8" - ], - "markers": "python_version < '3.10'", - "version": "==3.10.0" } }, "develop": { @@ -835,11 +695,11 @@ }, "asgiref": { "hashes": [ - "sha256:1d2880b792ae8757289136f1db2b7b99100ce959b2aa57fd69dab783d05afac4", - "sha256:4a29362a6acebe09bf1d6640db38c1dc3d9217c68e6f9f6204d72667fc19a424" + "sha256:71e68008da809b957b7ee4b43dbccff33d1b23519fb8344e33f049897077afac", + "sha256:9567dfe7bd8d3c8c892227827c41cce860b368104c3431da67a0c5a65a949506" ], "index": "pypi", - "version": "==3.5.2" + "version": "==3.6.0" }, "babel": { "hashes": [ @@ -849,35 +709,13 @@ "markers": "python_version >= '3.6'", "version": "==2.11.0" }, - "backports.zoneinfo": { - "hashes": [ - "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf", - "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328", - "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546", - "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6", - "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570", - "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9", - "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7", - "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987", - "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722", - "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582", - "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc", - "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b", - "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1", - "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08", - "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac", - "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2" - ], - "markers": "python_version < '3.9'", - "version": "==0.2.1" - }, "certifi": { "hashes": [ - "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14", - "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382" + "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", + "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" ], "markers": "python_version >= '3.6'", - "version": "==2022.9.24" + "version": "==2022.12.7" }, "cfgv": { "hashes": [ @@ -920,19 +758,19 @@ }, "django": { "hashes": [ - "sha256:678bbfc8604eb246ed54e2063f0765f13b321a50526bdc8cb1f943eda7fa31f1", - "sha256:6b1de6886cae14c7c44d188f580f8ba8da05750f544c80ae5ad43375ab293cd5" + "sha256:0b223bfa55511f950ff741983d408d78d772351284c75e9f77d2b830b6b4d148", + "sha256:d38a4e108d2386cb9637da66a82dc8d0733caede4c83c4afdbda78af4214211b" ], "index": "pypi", - "version": "==4.1.3" + "version": "==4.1.4" }, "django-debug-toolbar": { "hashes": [ - "sha256:1e3acad24e3d351ba45c6fa2072e4164820307332a776b16c9f06d1f89503465", - "sha256:80de23066b624d3970fd296cf02d61988e5d56c31aa0dc4a428970b46e2883a8" + "sha256:24ef1a7d44d25e60d7951e378454c6509bf536dce7e7d9d36e7c387db499bc27", + "sha256:879f8a4672d41621c06a4d322dcffa630fc4df056cada6e417ed01db0e5e0478" ], "index": "pypi", - "version": "==3.7.0" + "version": "==3.8.1" }, "docutils": { "hashes": [ @@ -944,19 +782,19 @@ }, "filelock": { "hashes": [ - "sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc", - "sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4" + "sha256:7565f628ea56bfcd8e54e42bdc55da899c85c1abfe1b5bcfd147e9188cebb3b2", + "sha256:8df285554452285f79c035efb0c861eb33a4bcfa5b7a137016e32e6a90f9792c" ], "markers": "python_version >= '3.7'", - "version": "==3.8.0" + "version": "==3.8.2" }, "identify": { "hashes": [ - "sha256:906036344ca769539610436e40a684e170c3648b552194980bb7b617a8daeb9f", - "sha256:a390fb696e164dbddb047a0db26e57972ae52fbd037ae68797e5ae2f4492485d" + "sha256:14b7076b29c99b1b0b8b08e96d448c7b877a9b07683cd8cfda2ea06af85ffa1c", + "sha256:e7db36b772b188099616aaf2accbee122949d1c6a1bac4f38196720d6f9f06db" ], "markers": "python_version >= '3.7'", - "version": "==2.5.9" + "version": "==2.5.11" }, "idna": { "hashes": [ @@ -976,11 +814,11 @@ }, "importlib-metadata": { "hashes": [ - "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab", - "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43" + "sha256:0eafa39ba42bf225fc00e67f701d71f85aead9f878569caf13c3724f704b970f", + "sha256:404d48d62bba0b7a77ff9d405efd91501bef2e67ff4ace0bed40a0cf28c3c7cd" ], "markers": "python_version < '3.10'", - "version": "==5.0.0" + "version": "==5.2.0" }, "jinja2": { "hashes": [ @@ -992,7 +830,8 @@ }, "livereload": { "hashes": [ - "sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869" + "sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869", + "sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4" ], "version": "==2.6.3" }, @@ -1052,19 +891,19 @@ }, "packaging": { "hashes": [ - "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", - "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" + "sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3", + "sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3" ], - "markers": "python_version >= '3.6'", - "version": "==21.3" + "markers": "python_version >= '3.7'", + "version": "==22.0" }, "platformdirs": { "hashes": [ - "sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7", - "sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10" + "sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca", + "sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e" ], "markers": "python_version >= '3.7'", - "version": "==2.5.4" + "version": "==2.6.0" }, "pre-commit": { "hashes": [ @@ -1082,20 +921,12 @@ "markers": "python_version >= '3.6'", "version": "==2.13.0" }, - "pyparsing": { - "hashes": [ - "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", - "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" - ], - "markers": "python_full_version >= '3.6.8'", - "version": "==3.0.9" - }, "pytz": { "hashes": [ - "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427", - "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2" + "sha256:7ccfae7b4b2c067464a6733c6261673fdb8fd1be905460396b97a073e9fa683a", + "sha256:93007def75ae22f7cd991c84e02d434876818661f8df9ad5df9e950ff4e52cfd" ], - "version": "==2022.6" + "version": "==2022.7" }, "pyyaml": { "hashes": [ @@ -1161,11 +992,11 @@ }, "setuptools": { "hashes": [ - "sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840", - "sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d" + "sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54", + "sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75" ], "markers": "python_version >= '3.7'", - "version": "==65.6.0" + "version": "==65.6.3" }, "six": { "hashes": [ @@ -1297,27 +1128,27 @@ }, "urllib3": { "hashes": [ - "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e", - "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997" + "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc", + "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8" ], "markers": "python_version >= '3.6'", - "version": "==1.26.12" + "version": "==1.26.13" }, "virtualenv": { "hashes": [ - "sha256:8691e3ff9387f743e00f6bb20f70121f5e4f596cae754531f2b3b3a1b1ac696e", - "sha256:efd66b00386fdb7dbe4822d172303f40cd05e50e01740b19ea42425cbe653e29" + "sha256:ce3b1684d6e1a20a3e5ed36795a97dfc6af29bc3970ca8dab93e11ac6094b3c4", + "sha256:f8b927684efc6f1cc206c9db297a570ab9ad0e51c16fa9e45487d36d1905c058" ], "markers": "python_version >= '3.6'", - "version": "==20.16.7" + "version": "==20.17.1" }, "zipp": { "hashes": [ - "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1", - "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8" + "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa", + "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766" ], - "markers": "python_version < '3.10'", - "version": "==3.10.0" + "markers": "python_version >= '3.7'", + "version": "==3.11.0" } } } From 04b31655e8c5ac1ef7bfbae044a6a1995099fd1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Thu, 22 Dec 2022 19:32:56 -0400 Subject: [PATCH 068/255] Fix BADENGINE npm install issue --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 40904e54097..788288c5345 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6277,7 +6277,7 @@ "reconnecting-websocket": "^3.0.3" }, "engines": { - "npm": "^5.0.0" + "npm": ">=5" } }, "node_modules/dns-equal": { From ae6ccb0811913f0b21197fe99d51fe669babbc80 Mon Sep 17 00:00:00 2001 From: Philip Belesky Date: Sat, 24 Dec 2022 10:48:41 +1100 Subject: [PATCH 069/255] Revert #2205, fix underlying issue --- .../templates/allocations/DragAndDropDebate.vue | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/tabbycat/templates/allocations/DragAndDropDebate.vue b/tabbycat/templates/allocations/DragAndDropDebate.vue index b4dddf88b4b..7d4cceec091 100644 --- a/tabbycat/templates/allocations/DragAndDropDebate.vue +++ b/tabbycat/templates/allocations/DragAndDropDebate.vue @@ -69,9 +69,16 @@
- {{ adj.name }} Ⓒ - , {{ adj.name }} - , {{ adj.name }} Ⓣ + + {{ adj.name }} Ⓒ, + + {{ adj.name }}, + + {{ adj.name }} Ⓣ, +
From 747fce7ddb6e8af7f17523c322bd9fb6fb57cc97 Mon Sep 17 00:00:00 2001 From: Philip Belesky Date: Sat, 24 Dec 2022 11:10:44 +1100 Subject: [PATCH 070/255] Standardise postgres version used in CI and have CI pull language versions from local files --- .github/workflows/django.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/django.yml b/.github/workflows/django.yml index 3ef88d93c2d..bb026649e7f 100644 --- a/.github/workflows/django.yml +++ b/.github/workflows/django.yml @@ -17,7 +17,7 @@ jobs: services: postgres: - image: postgres:11 + image: postgres:12 env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres @@ -34,13 +34,13 @@ jobs: - name: Set up Python # The actions/cache step below uses this id to get the exact python version id: setup-python - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: - python-version: 3.9 + python-version-file: '.python-version' # Read python version from a file .python-version - name: Set up Node.js uses: actions/setup-node@v3 with: - node-version: 12.x + node-version-file: '.nvmrc' - name: Cache node modules uses: actions/cache@v3 env: From 7feb4db8ee12a9513b9993c4061a2b353180d767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Fri, 23 Dec 2022 20:35:46 -0400 Subject: [PATCH 071/255] Add daphne to INSTALLED_APPS Fixes websockets not being found on local installs. --- tabbycat/settings/core.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tabbycat/settings/core.py b/tabbycat/settings/core.py index 4e042712486..17597fc8ced 100644 --- a/tabbycat/settings/core.py +++ b/tabbycat/settings/core.py @@ -126,6 +126,7 @@ ) INSTALLED_APPS = ( + 'daphne', 'jet', 'django.contrib.admin', 'django.contrib.auth', From 2e0948f00247c9d83a52f98a27d51b297332f489 Mon Sep 17 00:00:00 2001 From: Philip Belesky Date: Sat, 24 Dec 2022 14:06:53 +1100 Subject: [PATCH 072/255] Add daphne to pipfile --- Pipfile | 1 + Pipfile.lock | 280 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 279 insertions(+), 2 deletions(-) diff --git a/Pipfile b/Pipfile index 44949b97768..89a8164f8fa 100644 --- a/Pipfile +++ b/Pipfile @@ -37,6 +37,7 @@ gunicorn = "*" sentry-sdk = "*" whitenoise = "*" drf-spectacular = "*" +daphne = "*" [dev-packages] pre-commit = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 3f39e0cd05e..cdd605b6bcc 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "719d28a0d4f5a2c1e5b2b5219d29ac9e5aa866310595547ee609935a2799ba65" + "sha256": "c4ecadb134f29e65744a19db54085e44be297de6ce1013ba9f1487766b45dace" }, "pipfile-spec": 6, "requires": { @@ -48,6 +48,20 @@ "markers": "python_version >= '3.6'", "version": "==22.2.0" }, + "autobahn": { + "hashes": [ + "sha256:43b4e8b1aeaeb20a0cc0a81572e613dc958057c0ab248a7d6b41b2763270f925" + ], + "markers": "python_version >= '3.7'", + "version": "==22.12.1" + }, + "automat": { + "hashes": [ + "sha256:c3164f8742b9dc440f3682482d32aaff7bb53f71740dd018533f9de286b64180", + "sha256:e56beb84edad19dcc11d30e8d9b895f75deeb5ef5e96b84a467066b3b84bb04e" + ], + "version": "==22.10.0" + }, "backcall": { "hashes": [ "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e", @@ -71,6 +85,75 @@ "markers": "python_version >= '3.6'", "version": "==2022.12.7" }, + "cffi": { + "hashes": [ + "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5", + "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef", + "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104", + "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426", + "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405", + "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375", + "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a", + "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e", + "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc", + "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf", + "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185", + "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497", + "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3", + "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35", + "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c", + "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83", + "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21", + "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca", + "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984", + "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac", + "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd", + "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee", + "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a", + "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2", + "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192", + "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7", + "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585", + "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f", + "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e", + "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27", + "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b", + "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e", + "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e", + "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d", + "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c", + "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415", + "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82", + "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02", + "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314", + "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325", + "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", + "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3", + "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914", + "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045", + "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d", + "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9", + "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5", + "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2", + "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c", + "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3", + "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2", + "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8", + "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d", + "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d", + "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9", + "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162", + "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76", + "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4", + "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e", + "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9", + "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6", + "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b", + "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01", + "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0" + ], + "version": "==1.15.1" + }, "channels": { "hashes": [ "sha256:0ce53507a7da7b148eaa454526e0e05f7da5e5d1c23440e4886cf146981d8420", @@ -87,6 +170,53 @@ "index": "pypi", "version": "==4.0.0" }, + "constantly": { + "hashes": [ + "sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35", + "sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d" + ], + "version": "==15.1.0" + }, + "cryptography": { + "hashes": [ + "sha256:0e70da4bdff7601b0ef48e6348339e490ebfb0cbe638e083c9c41fb49f00c8bd", + "sha256:10652dd7282de17990b88679cb82f832752c4e8237f0c714be518044269415db", + "sha256:175c1a818b87c9ac80bb7377f5520b7f31b3ef2a0004e2420319beadedb67290", + "sha256:1d7e632804a248103b60b16fb145e8df0bc60eed790ece0d12efe8cd3f3e7744", + "sha256:1f13ddda26a04c06eb57119caf27a524ccae20533729f4b1e4a69b54e07035eb", + "sha256:2ec2a8714dd005949d4019195d72abed84198d877112abb5a27740e217e0ea8d", + "sha256:2fa36a7b2cc0998a3a4d5af26ccb6273f3df133d61da2ba13b3286261e7efb70", + "sha256:2fb481682873035600b5502f0015b664abc26466153fab5c6bc92c1ea69d478b", + "sha256:3178d46f363d4549b9a76264f41c6948752183b3f587666aff0555ac50fd7876", + "sha256:4367da5705922cf7070462e964f66e4ac24162e22ab0a2e9d31f1b270dd78083", + "sha256:4eb85075437f0b1fd8cd66c688469a0c4119e0ba855e3fef86691971b887caf6", + "sha256:50a1494ed0c3f5b4d07650a68cd6ca62efe8b596ce743a5c94403e6f11bf06c1", + "sha256:53049f3379ef05182864d13bb9686657659407148f901f3f1eee57a733fb4b00", + "sha256:6391e59ebe7c62d9902c24a4d8bcbc79a68e7c4ab65863536127c8a9cd94043b", + "sha256:67461b5ebca2e4c2ab991733f8ab637a7265bb582f07c7c88914b5afb88cb95b", + "sha256:78e47e28ddc4ace41dd38c42e6feecfdadf9c3be2af389abbfeef1ff06822285", + "sha256:80ca53981ceeb3241998443c4964a387771588c4e4a5d92735a493af868294f9", + "sha256:8a4b2bdb68a447fadebfd7d24855758fe2d6fecc7fed0b78d190b1af39a8e3b0", + "sha256:8e45653fb97eb2f20b8c96f9cd2b3a0654d742b47d638cf2897afbd97f80fa6d", + "sha256:998cd19189d8a747b226d24c0207fdaa1e6658a1d3f2494541cb9dfbf7dcb6d2", + "sha256:a10498349d4c8eab7357a8f9aa3463791292845b79597ad1b98a543686fb1ec8", + "sha256:b4cad0cea995af760f82820ab4ca54e5471fc782f70a007f31531957f43e9dee", + "sha256:bfe6472507986613dc6cc00b3d492b2f7564b02b3b3682d25ca7f40fa3fd321b", + "sha256:c9e0d79ee4c56d841bd4ac6e7697c8ff3c8d6da67379057f29e66acffcd1e9a7", + "sha256:ca57eb3ddaccd1112c18fc80abe41db443cc2e9dcb1917078e02dfa010a4f353", + "sha256:ce127dd0a6a0811c251a6cddd014d292728484e530d80e872ad9806cfb1c5b3c" + ], + "markers": "python_version >= '3.6'", + "version": "==38.0.4" + }, + "daphne": { + "hashes": [ + "sha256:a288ece46012b6b719c37150be67c69ebfca0793a8521bf821533bad983179b2", + "sha256:cce9afc8f49a4f15d4270b8cfb0e0fe811b770a5cc795474e97e4da287497666" + ], + "index": "pypi", + "version": "==4.0.0" + }, "decorator": { "hashes": [ "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", @@ -275,6 +405,27 @@ "index": "pypi", "version": "==2020.1.16" }, + "hyperlink": { + "hashes": [ + "sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b", + "sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4" + ], + "version": "==21.0.0" + }, + "idna": { + "hashes": [ + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + ], + "version": "==3.4" + }, + "incremental": { + "hashes": [ + "sha256:912feeb5e0f7e0188e6f42241d2f450002e11bbc0937c65865045854c24c0bd0", + "sha256:b864a1f30885ee72c5ac2835a761b8fe8aa9c28b9395cacf27286602688d3e51" + ], + "version": "==22.10.0" + }, "inflection": { "hashes": [ "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417", @@ -502,6 +653,49 @@ ], "version": "==0.7.0" }, + "pyasn1": { + "hashes": [ + "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359", + "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576", + "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf", + "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7", + "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", + "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00", + "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8", + "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86", + "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12", + "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776", + "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba", + "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2", + "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3" + ], + "version": "==0.4.8" + }, + "pyasn1-modules": { + "hashes": [ + "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8", + "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199", + "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811", + "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed", + "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4", + "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e", + "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74", + "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb", + "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45", + "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd", + "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0", + "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d", + "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405" + ], + "version": "==0.2.8" + }, + "pycparser": { + "hashes": [ + "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", + "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" + ], + "version": "==2.21" + }, "pygments": { "hashes": [ "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1", @@ -510,6 +704,13 @@ "markers": "python_version >= '3.6'", "version": "==2.13.0" }, + "pyopenssl": { + "hashes": [ + "sha256:7a83b7b272dd595222d672f5ce29aa030f1fb837630ef229f62e72e395ce8968", + "sha256:b28437c9773bb6c6958628cf9c3bebe585de661dba6f63df17111966363dd15e" + ], + "version": "==22.1.0" + }, "pyrsistent": { "hashes": [ "sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed", @@ -614,6 +815,13 @@ "index": "pypi", "version": "==1.12.1" }, + "service-identity": { + "hashes": [ + "sha256:6e6c6086ca271dc11b033d17c3a8bea9f24ebff920c587da090afc9519419d34", + "sha256:f0b0caac3d40627c3c04d7a51b6e06721857a0e10a8775f2d1d7e72901b3a7db" + ], + "version": "==21.1.0" + }, "setuptools": { "hashes": [ "sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54", @@ -646,6 +854,33 @@ "markers": "python_version >= '3.7'", "version": "==5.8.0" }, + "twisted": { + "extras": [ + "tls" + ], + "hashes": [ + "sha256:32acbd40a94f5f46e7b42c109bfae2b302250945561783a8b7a059048f2d4d31", + "sha256:86c55f712cc5ab6f6d64e02503352464f0400f66d4f079096d744080afcccbd0" + ], + "markers": "python_full_version >= '3.7.1'", + "version": "==22.10.0" + }, + "txaio": { + "hashes": [ + "sha256:2e4582b70f04b2345908254684a984206c0d9b50e3074a24a4c55aba21d24d01", + "sha256:41223af4a9d5726e645a8ee82480f413e5e300dd257db94bc38ae12ea48fb2e5" + ], + "markers": "python_version >= '3.6'", + "version": "==22.2.1" + }, + "typing-extensions": { + "hashes": [ + "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", + "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" + ], + "markers": "python_version >= '3.7'", + "version": "==4.4.0" + }, "uritemplate": { "hashes": [ "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0", @@ -683,6 +918,48 @@ ], "index": "pypi", "version": "==6.2.0" + }, + "zope.interface": { + "hashes": [ + "sha256:008b0b65c05993bb08912f644d140530e775cf1c62a072bf9340c2249e613c32", + "sha256:0217a9615531c83aeedb12e126611b1b1a3175013bbafe57c702ce40000eb9a0", + "sha256:0fb497c6b088818e3395e302e426850f8236d8d9f4ef5b2836feae812a8f699c", + "sha256:17ebf6e0b1d07ed009738016abf0d0a0f80388e009d0ac6e0ead26fc162b3b9c", + "sha256:311196634bb9333aa06f00fc94f59d3a9fddd2305c2c425d86e406ddc6f2260d", + "sha256:3218ab1a7748327e08ef83cca63eea7cf20ea7e2ebcb2522072896e5e2fceedf", + "sha256:404d1e284eda9e233c90128697c71acffd55e183d70628aa0bbb0e7a3084ed8b", + "sha256:4087e253bd3bbbc3e615ecd0b6dd03c4e6a1e46d152d3be6d2ad08fbad742dcc", + "sha256:40f4065745e2c2fa0dff0e7ccd7c166a8ac9748974f960cd39f63d2c19f9231f", + "sha256:5334e2ef60d3d9439c08baedaf8b84dc9bb9522d0dacbc10572ef5609ef8db6d", + "sha256:604cdba8f1983d0ab78edc29aa71c8df0ada06fb147cea436dc37093a0100a4e", + "sha256:6373d7eb813a143cb7795d3e42bd8ed857c82a90571567e681e1b3841a390d16", + "sha256:655796a906fa3ca67273011c9805c1e1baa047781fca80feeb710328cdbed87f", + "sha256:65c3c06afee96c654e590e046c4a24559e65b0a87dbff256cd4bd6f77e1a33f9", + "sha256:696f3d5493eae7359887da55c2afa05acc3db5fc625c49529e84bd9992313296", + "sha256:6e972493cdfe4ad0411fd9abfab7d4d800a7317a93928217f1a5de2bb0f0d87a", + "sha256:7579960be23d1fddecb53898035a0d112ac858c3554018ce615cefc03024e46d", + "sha256:765d703096ca47aa5d93044bf701b00bbce4d903a95b41fff7c3796e747b1f1d", + "sha256:7e66f60b0067a10dd289b29dceabd3d0e6d68be1504fc9d0bc209cf07f56d189", + "sha256:8a2ffadefd0e7206adc86e492ccc60395f7edb5680adedf17a7ee4205c530df4", + "sha256:959697ef2757406bff71467a09d940ca364e724c534efbf3786e86eee8591452", + "sha256:9d783213fab61832dbb10d385a319cb0e45451088abd45f95b5bb88ed0acca1a", + "sha256:a16025df73d24795a0bde05504911d306307c24a64187752685ff6ea23897cb0", + "sha256:a2ad597c8c9e038a5912ac3cf166f82926feff2f6e0dabdab956768de0a258f5", + "sha256:bfee1f3ff62143819499e348f5b8a7f3aa0259f9aca5e0ddae7391d059dce671", + "sha256:d169ccd0756c15bbb2f1acc012f5aab279dffc334d733ca0d9362c5beaebe88e", + "sha256:d514c269d1f9f5cd05ddfed15298d6c418129f3f064765295659798349c43e6f", + "sha256:d692374b578360d36568dd05efb8a5a67ab6d1878c29c582e37ddba80e66c396", + "sha256:dbaeb9cf0ea0b3bc4b36fae54a016933d64c6d52a94810a63c00f440ecb37dd7", + "sha256:dc26c8d44472e035d59d6f1177eb712888447f5799743da9c398b0339ed90b1b", + "sha256:e1574980b48c8c74f83578d1e77e701f8439a5d93f36a5a0af31337467c08fcf", + "sha256:e74a578172525c20d7223eac5f8ad187f10940dac06e40113d62f14f3adb1e8f", + "sha256:e945de62917acbf853ab968d8916290548df18dd62c739d862f359ecd25842a6", + "sha256:f0980d44b8aded808bec5059018d64692f0127f10510eca71f2f0ace8fb11188", + "sha256:f98d4bd7bbb15ca701d19b93263cc5edfd480c3475d163f137385f49e5b3a3a7", + "sha256:fb68d212efd057596dee9e6582daded9f8ef776538afdf5feceb3059df2d2e7b" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==5.5.2" } }, "develop": { @@ -801,7 +1078,6 @@ "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" ], - "markers": "python_version >= '3.5'", "version": "==3.4" }, "imagesize": { From a9d6ac87b8c0f821c5eda2e24288c21d4f65ce2d Mon Sep 17 00:00:00 2001 From: Tran Trang Linh Date: Sun, 25 Dec 2022 22:04:15 -0500 Subject: [PATCH 073/255] Change color of "Revoke Check-in" (#2208) --- tabbycat/privateurls/templates/public_url_landing.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tabbycat/privateurls/templates/public_url_landing.html b/tabbycat/privateurls/templates/public_url_landing.html index 6bb65610084..cd407d81894 100644 --- a/tabbycat/privateurls/templates/public_url_landing.html +++ b/tabbycat/privateurls/templates/public_url_landing.html @@ -37,11 +37,12 @@ {% blocktrans trimmed with check_time=event.time asvar text %} Revoke check-in from {{ check_time }} {% endblocktrans %} + {% include "components/item-action.html" with id="triggerCheckInForm" url="" child=True type="warning" %} {% else %} {% trans "Check in" as text %} + {% include "components/item-action.html" with id="triggerCheckInForm" url="" child=True %} {% endif %} - {% include "components/item-action.html" with id="triggerCheckInForm" url="" child=True %} {% elif checkins_used %} {% if event %} From 2c90e6466d9ee546225a7167e519fb1ac1d0dfd6 Mon Sep 17 00:00:00 2001 From: idowolf Date: Wed, 28 Dec 2022 11:46:27 +0200 Subject: [PATCH 074/255] Create API for team/speaker round points (#2207) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Étienne Beaulé --- tabbycat/api/serializers.py | 50 +++++++++++++++++++++++- tabbycat/api/urls.py | 14 +++++-- tabbycat/api/views.py | 76 ++++++++++++++++++++++++++++++++++++- 3 files changed, 135 insertions(+), 5 deletions(-) diff --git a/tabbycat/api/serializers.py b/tabbycat/api/serializers.py index 5b069538572..ec5560ab434 100644 --- a/tabbycat/api/serializers.py +++ b/tabbycat/api/serializers.py @@ -25,7 +25,7 @@ from participants.utils import populate_code_names from privateurls.utils import populate_url_keys from results.mixins import TabroomSubmissionFieldsMixin -from results.models import BallotSubmission, SpeakerScore +from results.models import BallotSubmission, SpeakerScore, TeamScore from results.result import DebateResult from standings.speakers import SpeakerStandingsGenerator from standings.teams import TeamStandingsGenerator @@ -1381,3 +1381,51 @@ def update(self, instance, validated_data): adjudicators.save(debate=instance) return super().update(instance, validated_data) + + +class SpeakerRoundScoresSerializer(serializers.ModelSerializer): + class RoundScoresSerializer(serializers.ModelSerializer): + class RoundSpeechSerializer(serializers.ModelSerializer): + class Meta: + model = SpeakerScore + fields = ('score', 'position', 'ghost') + + round = fields.TournamentHyperlinkedRelatedField(view_name='api-round-detail', source='debate.round', + lookup_field='seq', lookup_url_kwarg='round_seq', + queryset=Round.objects.all()) + + speeches = RoundSpeechSerializer(many=True, source="scores") + + class Meta: + model = DebateTeam + fields = ('round', 'speeches') + + speaker = fields.TournamentHyperlinkedIdentityField(tournament_field='team__tournament', view_name='api-speaker-detail') + rounds = RoundScoresSerializer(many=True, source="debateteams") + + class Meta: + model = Speaker + fields = ('speaker', 'rounds') + + +class TeamRoundScoresSerializer(serializers.ModelSerializer): + + class ScoreSerializer(serializers.ModelSerializer): + round = fields.TournamentHyperlinkedRelatedField(view_name='api-round-detail', source='debate.round', + lookup_field='seq', lookup_url_kwarg='round_seq', + queryset=Round.objects.all()) + + points = serializers.IntegerField(source='ballot.points') + score = serializers.FloatField(source='ballot.score') + has_ghost = serializers.BooleanField(source='ballot.has_ghost') + + class Meta: + model = TeamScore + fields = ('round', 'points', 'score', 'has_ghost') + + team = fields.TournamentHyperlinkedIdentityField(view_name='api-team-detail') + rounds = ScoreSerializer(many=True, source="debateteam_set") + + class Meta: + model = Team + fields = ('team', 'rounds') diff --git a/tabbycat/api/urls.py b/tabbycat/api/urls.py index 7b17559ab5c..f2acc5f5c8a 100644 --- a/tabbycat/api/urls.py +++ b/tabbycat/api/urls.py @@ -157,9 +157,14 @@ path('/', views.TeamViewSet.as_view(detail_methods), name='api-team-detail'), - path('/standings', - views.TeamStandingsView.as_view(), - name='api-team-standings'), + path('/standings', include([ + path('', + views.TeamStandingsView.as_view(), + name='api-team-standings'), + path('/rounds', + views.TeamRoundStandingsRoundsView.as_view({'get': 'list'}), + name='api-team-round-standings'), + ])), ])), path('/adjudicators', include([ path('', @@ -193,6 +198,9 @@ path('/replies', views.ReplySpeakerStandingsView.as_view(), name='api-reply-speaker-standings'), + path('/rounds', + views.SpeakerRoundStandingsRoundsView.as_view({'get': 'list'}), + name='api-speaker-round-standings'), ])), ])), path('/venues', include([ diff --git a/tabbycat/api/views.py b/tabbycat/api/views.py index 3d0f56fa20c..2f4ccd95578 100644 --- a/tabbycat/api/views.py +++ b/tabbycat/api/views.py @@ -1,3 +1,4 @@ +from copy import deepcopy from itertools import groupby from asgiref.sync import async_to_sync @@ -25,9 +26,10 @@ from checkins.consumers import CheckInEventConsumer from checkins.models import Event from checkins.utils import create_identifiers, get_unexpired_checkins -from draw.models import Debate +from draw.models import Debate, DebateTeam from options.models import TournamentPreferenceModel from participants.models import Adjudicator, Institution, Speaker, SpeakerCategory, Team +from results.models import SpeakerScore, TeamScore from standings.speakers import SpeakerStandingsGenerator from standings.teams import TeamStandingsGenerator from tournaments.mixins import TournamentFromUrlMixin @@ -659,6 +661,78 @@ class TeamStandingsView(BaseStandingsView): generator = TeamStandingsGenerator +@extend_schema(tags=['standings'], parameters=[ + tournament_parameter, + OpenApiParameter('replies', description='Whether to include reply speeches', required=False, type=bool, default=False), + OpenApiParameter('substantive', description='Whether to include substantive speeches', required=False, type=bool, default=True), + OpenApiParameter('ghost', description='Include ghost (iron-person) scores', required=False, type=bool, default=False), +]) +@extend_schema_view( + list=extend_schema(summary="Get speaker scores per round", responses=serializers.SpeakerRoundScoresSerializer(many=True)), +) +class SpeakerRoundStandingsRoundsView(TournamentAPIMixin, TournamentPublicAPIMixin, ModelViewSet): + serializer_class = serializers.SpeakerRoundScoresSerializer + tournament_field = "team__tournament" + access_preference = 'speaker_tab_released' + + def get_queryset(self): + qs = super().get_queryset().prefetch_related(Prefetch('team__debateteam_set', queryset=DebateTeam.objects.all().select_related('debate__round__tournament'))) + data = {s.id: s for s in qs.all()} + + speaker_scores = SpeakerScore.objects.select_related('speaker', 'ballot_submission', + 'debate_team__debate__round__tournament').filter( + ballot_submission__confirmed=True, speaker_id__in=data.keys(), + ).order_by('speaker_id', 'debate_team_id', 'position') + + if self.request.query_params.get('ghost', False) == 'true': + speaker_scores = speaker_scores.filter(ghost=True) + if self.request.query_params.get('replies', False) == 'true': + speaker_scores = speaker_scores.filter(position=self.tournament.reply_position) + elif self.request.query_params.get('substantive', 'true') == 'true': + speaker_scores = speaker_scores.filter(position__lte=self.tournament.last_substantive_position) + + for spk in data.values(): + spk.debateteams = deepcopy(spk.team.debateteam_set.all()) + for dt in spk.debateteams: + dt.scores = [] + + for speaker, all_scores in groupby(speaker_scores, key=lambda ss: ss.speaker_id): + speaker_rounds = {dt.id: dt for dt in data[speaker].debateteams} + for dt, round_scores in groupby(all_scores, key=lambda ss: ss.debate_team_id): + speaker_rounds[dt].scores.extend(list(round_scores)) + + return data.values() + + +@extend_schema(tags=['standings'], parameters=[ + tournament_parameter, +]) +@extend_schema_view( + list=extend_schema(summary="Get team scores per round", responses=serializers.TeamRoundScoresSerializer(many=True)), +) +class TeamRoundStandingsRoundsView(TournamentAPIMixin, TournamentPublicAPIMixin, ModelViewSet): + serializer_class = serializers.TeamRoundScoresSerializer + access_preference = 'team_tab_released' + + def perform_create(self, serializer): + serializer.save() + + def get_queryset(self): + ts_pf = Prefetch('teamscore_set', queryset=TeamScore.objects.filter(ballot_submission__confirmed=True), to_attr='round_scores') + qs = super().get_queryset().prefetch_related( + Prefetch('debateteam_set', queryset=DebateTeam.objects.all().prefetch_related(ts_pf).select_related('debate__round__tournament'))) + + for t in qs: + for dt in t.debateteam_set.all(): + if len(dt.round_scores): + # There should only ever be one confirmed score + dt.ballot = dt.round_scores[0] + else: + dt.ballot = TeamScore() + + return qs + + @extend_schema(tags=['debates'], parameters=round_parameters) @extend_schema_view( list=extend_schema(summary="List pairings in round"), From 3b967a14c5545dbc63365fdf22fa98ec16a2f969 Mon Sep 17 00:00:00 2001 From: Daan Koning Date: Fri, 6 Jan 2023 18:55:24 +0100 Subject: [PATCH 075/255] Add site timezone to API Root (#2215) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Étienne Beaulé --- tabbycat/api/serializers.py | 1 + tabbycat/api/views.py | 1 + 2 files changed, 2 insertions(+) diff --git a/tabbycat/api/serializers.py b/tabbycat/api/serializers.py index ec5560ab434..79fd6db84be 100644 --- a/tabbycat/api/serializers.py +++ b/tabbycat/api/serializers.py @@ -132,6 +132,7 @@ class RootLinksSerializer(serializers.Serializer): v1 = serializers.HyperlinkedIdentityField(view_name='api-v1-root') _links = RootLinksSerializer(source='*', read_only=True) + timezone = serializers.CharField(allow_blank=False, read_only=True) version = serializers.CharField() diff --git a/tabbycat/api/views.py b/tabbycat/api/views.py index 2f4ccd95578..329fbe45320 100644 --- a/tabbycat/api/views.py +++ b/tabbycat/api/views.py @@ -65,6 +65,7 @@ def get(self, request, format=None): "_links": { "v1": reverse('api-v1-root', request=request, format=format), }, + "timezone": settings.TIME_ZONE, "version": settings.TABBYCAT_VERSION, }) From 349ef58868499b1cf1f721bb8a07ee86e38fef19 Mon Sep 17 00:00:00 2001 From: Tran Trang Linh Date: Sun, 8 Jan 2023 15:31:46 -0500 Subject: [PATCH 076/255] Escape adjudicator name in allocation views (#2217) --- tabbycat/adjallocation/serializers.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tabbycat/adjallocation/serializers.py b/tabbycat/adjallocation/serializers.py index ff540f1e8f2..6e3608adda7 100644 --- a/tabbycat/adjallocation/serializers.py +++ b/tabbycat/adjallocation/serializers.py @@ -1,3 +1,4 @@ +from django.utils.html import escape from rest_framework import serializers from participants.serializers import AdjudicatorSerializer @@ -9,6 +10,10 @@ class EditPanelOrDebateAdjSerializer(AdjudicatorSerializer, VueDraggableItemMixin): """ Returns adjudicators for use in views where they are allocated """ score = serializers.SerializerMethodField(read_only=True) + name = serializers.SerializerMethodField(read_only=True) + + def get_name(self, obj): + return escape(obj.name) def get_score(self, obj): return obj.weighted_score(self.context['feedback_weight']) From 19753a2d68e86c0fe5d2bbfbbb453847a42876c4 Mon Sep 17 00:00:00 2001 From: Daan Koning Date: Sun, 8 Jan 2023 21:38:06 +0100 Subject: [PATCH 077/255] Make private URLs show solo adjudicators (#2216) * Update private URLs to show one person panels * Update comment to match 889ff46f7 --- tabbycat/participants/templates/current_round/common.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tabbycat/participants/templates/current_round/common.html b/tabbycat/participants/templates/current_round/common.html index f95a6c152e7..4a847884f06 100644 --- a/tabbycat/participants/templates/current_round/common.html +++ b/tabbycat/participants/templates/current_round/common.html @@ -22,7 +22,7 @@ {# Adjudicators #} {% if not pref.no_panellist_position or not pref.no_trainee_position %}
- {% if debate.adjudicators|length > 1 %} + {% if debate.adjudicators|length > 0 %} {% with adjudicators=debate.adjudicators %} {% blocktrans trimmed count counter=adjudicators|length %} @@ -42,7 +42,7 @@ {% endwith %} {% else %} {% trans "There are no panellists or trainees assigned to this debate." %} - {% endif %} {# debate.adjudicators|length > 1 #} + {% endif %} {# debate.adjudicators|length > 0 #}
{% endif %} {# not pref.no_panellist_position or not pref.no_trainee_position #} From f897ce8c6bb76bfda0d3c0ba73ef0c22dd93360a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Tue, 10 Jan 2023 19:43:13 -0400 Subject: [PATCH 078/255] Add speaker ranks to ballot form --- tabbycat/options/preferences.py | 13 ++++++++ tabbycat/results/forms.py | 30 +++++++++++++++++++ .../migrations/0014_speakerscore_rank.py | 18 +++++++++++ tabbycat/results/models.py | 2 ++ tabbycat/results/result.py | 16 +++++++++- .../templates/ballot/ballot_speaks.html | 7 +++++ .../scss/components/page-specific.scss | 6 ++++ 7 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 tabbycat/results/migrations/0014_speakerscore_rank.py diff --git a/tabbycat/options/preferences.py b/tabbycat/options/preferences.py index 8c66f30a858..68b787e4d01 100644 --- a/tabbycat/options/preferences.py +++ b/tabbycat/options/preferences.py @@ -541,6 +541,19 @@ class RequireSubstantiveForReply(BooleanPreference): default = True +@tournament_preferences_registry.register +class UseSpeakerRanks(ChoicePreference): + help_text = _("Whether and how to use speech ranks within a debate") + verbose_name = _("Use of speech ranks") + section = debate_rules + name = 'speaker_ranks' + choices = ( + ('none', 'Do not rank speeches'), + ('any', 'Require ranking speeches, indepedently of speaker scores'), + ) + default = 'none' + + # ============================================================================== standings = Section('standings', verbose_name=_("Standings")) # ============================================================================== diff --git a/tabbycat/results/forms.py b/tabbycat/results/forms.py index 4e8a6f311c7..b1f64224753 100644 --- a/tabbycat/results/forms.py +++ b/tabbycat/results/forms.py @@ -294,6 +294,7 @@ def create_fields(self): - motion, if there is more than one motion - _motion_veto, if motion vetoes are being noted, one for each team - _speaker_s#, one for each speaker + - _srank_s#, if speech ranks are enabled - _ghost_s#, whether score should be a duplicate """ @@ -469,6 +470,10 @@ class ScoresMixin: def _fieldname_speaker(side, pos): return '%(side)s_speaker_s%(pos)d' % {'side': side, 'pos': pos} + @staticmethod + def _fieldname_srank(side, pos): + return '%(side)s_srank_s%(pos)d' % {'side': side, 'pos': pos} + @staticmethod def _fieldname_ghost(side, pos): return '%(side)s_ghost_s%(pos)d' % {'side': side, 'pos': pos} @@ -478,6 +483,7 @@ def _fieldname_ghost(side, pos): # -------------------------------------------------------------------------- def create_participant_fields(self): + nspeeches = len(self.sides) * len(self.positions) for side, pos in product(self.sides, self.positions): # 3(a). Speaker identity @@ -488,6 +494,9 @@ def create_participant_fields(self): self.fields[self._fieldname_speaker(side, pos)] = forms.ModelChoiceField( queryset=queryset, required=True) + if self.tournament.pref('speaker_ranks') != 'none': + self.fields[self._fieldname_srank(side, pos)] = forms.IntegerField(required=True, min_value=1, max_value=nspeeches, step_size=1) + # 3(b). Ghost fields self.fields[self._fieldname_ghost(side, pos)] = forms.BooleanField(required=False, label=_("Mark as a duplicate speech"), label_suffix="") @@ -498,6 +507,8 @@ def list_participant_fields(self): order = [] for side, pos in product(self.sides, self.positions): order.append(self._fieldname_speaker(side, pos)) + if self.tournament.pref('speaker_ranks') != 'none': + order.append(self._fieldname_srank(side, pos)) return order def list_score_fields(self): @@ -513,6 +524,8 @@ def initial_from_result(self, result): for side, pos in product(self.sides, self.positions): initial[self._fieldname_speaker(side, pos)] = result.get_speaker(side, pos) initial[self._fieldname_ghost(side, pos)] = result.get_ghost(side, pos) + if self.tournament.pref('speaker_ranks') != 'none': + initial[self._fieldname_srank(side, pos)] = result.get_speaker_rank(side, pos) return initial # -------------------------------------------------------------------------- @@ -645,6 +658,7 @@ def scoresheet(self, fieldname_score_func): "speaker": self[self._fieldname_speaker(side, pos)], "ghost": self[self._fieldname_ghost(side, pos)], "score": self[fieldname_score_func(side, pos)], + "srank": self[self._fieldname_srank(side, pos)], }) teams.append(side_dict) return teams @@ -667,6 +681,7 @@ def create_score_fields(self): """Adds the speaker score fields: - _score_s#, one for each score """ + nspeeches = len(self.sides) * len(self.positions) for side, pos in product(self.sides, self.positions): scorefield = ReplyScoreField if (pos == self.reply_position) else SubstantiveScoreField self.fields[self._fieldname_score(side, pos)] = scorefield( @@ -674,6 +689,8 @@ def create_score_fields(self): tournament=self.tournament, required=True, ) + if self.tournament.pref('speaker_ranks') != 'none': + self.fields[self._fieldname_srank(side, pos)] = forms.IntegerField(required=True, min_value=1, max_value=nspeeches, step_size=1) if self.using_declared_winner: self.fields[self._fieldname_declared_winner()] = self.create_declared_winner_dropdown() @@ -685,6 +702,7 @@ def initial_from_result(self, result): score = result.get_score(side, pos) coerce_for_ui = self.fields[self._fieldname_score(side, pos)].coerce_for_ui initial[self._fieldname_score(side, pos)] = coerce_for_ui(score) + initial[self._fieldname_srank(side, pos)] = result.get_speaker_rank(side, pos) if self.using_declared_winner: initial[self._fieldname_declared_winner()] = result.winning_side() @@ -695,6 +713,7 @@ def list_score_fields(self): """Lists all the score fields. Called by super().set_tab_indices().""" order = [] for side, pos in product(self.sides, self.positions): + order.append(self._fieldname_srank(side, pos)) order.append(self._fieldname_score(side, pos)) if self.using_declared_winner: @@ -750,11 +769,22 @@ def clean_scoresheet(self, cleaned_data): params={'margin': margin, 'max_margin': self.max_margin}, code='max_margin', )) + if self.tournament.pref('speaker_ranks') != 'none': + ranks = set() + for side, pos in product(self.sides, self.positions): + ranks.add(cleaned_data[self._fieldname_srank(side, pos)]) + + if len(ranks) < len(self.sides) * len(self.positions): + self.add_error(None, forms.ValidationError(_("Ranks cannot be tied.", code='ranks_tied'))) + def populate_result_with_scores(self, result): for side, pos in product(self.sides, self.positions): score = self.cleaned_data[self._fieldname_score(side, pos)] result.set_score(side, pos, score) + if self.tournament.pref('speaker_ranks') != 'none': + result.set_speaker_rank(side, pos, self.cleaned_data[self._fieldname_srank(side, pos)]) + if self.declared_winner not in ['none', 'high-points']: result.set_winners(set([self.cleaned_data[self._fieldname_declared_winner()]])) diff --git a/tabbycat/results/migrations/0014_speakerscore_rank.py b/tabbycat/results/migrations/0014_speakerscore_rank.py new file mode 100644 index 00000000000..9467aa46384 --- /dev/null +++ b/tabbycat/results/migrations/0014_speakerscore_rank.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.4 on 2022-12-28 17:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('results', '0013_teamscore_has_ghost'), + ] + + operations = [ + migrations.AddField( + model_name='speakerscore', + name='rank', + field=models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='rank'), + ), + ] diff --git a/tabbycat/results/models.py b/tabbycat/results/models.py index bc7ebfd59d3..d20a732c22a 100644 --- a/tabbycat/results/models.py +++ b/tabbycat/results/models.py @@ -350,6 +350,8 @@ class SpeakerScore(models.Model): verbose_name=_("debate team")) speaker = models.ForeignKey('participants.Speaker', models.CASCADE, db_index=True, verbose_name=_("speaker")) + rank = models.PositiveSmallIntegerField(null=True, blank=True, + verbose_name=_("rank")) score = ScoreField(verbose_name=_("score")) position = models.IntegerField(verbose_name=_("position")) ghost = models.BooleanField(default=False, diff --git a/tabbycat/results/result.py b/tabbycat/results/result.py index 7ba2f7638e2..8786cb6f98b 100644 --- a/tabbycat/results/result.py +++ b/tabbycat/results/result.py @@ -624,7 +624,7 @@ def as_dicts(self): class DebateResultWithScoresMixin: """Mixin to provide methods to interact with SpeakerScore.""" - speakerscore_fields = ['score', 'speaker', 'ghost'] + speakerscore_fields = ['score', 'speaker', 'ghost', 'rank'] uses_declared_winners = False uses_speakers = True @@ -656,14 +656,17 @@ def init_blank_buffer(self): super().init_blank_buffer() self.speakers = {side: dict.fromkeys(self.positions, None) for side in self.sides} self.ghosts = {side: dict.fromkeys(self.positions, False) for side in self.sides} + self.speaker_ranks = {side: dict.fromkeys(self.positions, None) for side in self.sides} def assert_loaded(self): super().assert_loaded() assert set(self.speakers) == set(self.sides) assert set(self.ghosts) == set(self.sides) + assert set(self.speaker_ranks) == set(self.sides) for side in self.sides: assert set(self.speakers[side]) == set(self.positions) assert set(self.ghosts[side]) == set(self.positions) + assert set(self.speaker_ranks[side]) == set(self.positions) def is_complete(self): return super().is_complete() and not any(self.speakers[s][p] is None for s in self.sides for p in self.positions) @@ -699,6 +702,7 @@ def load_speakers(self): for ss in speakerscores: self.speakers[ss.debate_team.side][ss.position] = ss.speaker self.ghosts[ss.debate_team.side][ss.position] = ss.ghost + self.speaker_ranks[ss.debate_team.side][ss.position] = ss.rank def save(self): super().save() @@ -731,6 +735,12 @@ def get_ghost(self, side, position): def set_ghost(self, side, position, is_ghost): self.ghosts[side][position] = is_ghost + def get_speaker_rank(self, side, position): + return self.speaker_ranks[side].get(position) + + def set_speaker_rank(self, side, position, rank): + self.speaker_ranks[side][position] = rank + # -------------------------------------------------------------------------- # Model fields # -------------------------------------------------------------------------- @@ -741,6 +751,9 @@ def speakerscore_field_speaker(self, side, position): def speakerscore_field_ghost(self, side, position): return self.ghosts[side][position] + def speakerscore_field_rank(self, side, position): + return self.speaker_ranks[side][position] + def teamscore_field_margin(self, side): return self.calculate_full_margin(side) @@ -788,6 +801,7 @@ def speakers_as_dicts(self, sheet, side_dict, side, pos_names): "name": pos_name, "speaker": self.get_speaker(side, pos), "score": sheet.get_score(side, pos), + "rank": self.get_speaker_rank(side, pos), }) diff --git a/tabbycat/results/templates/ballot/ballot_speaks.html b/tabbycat/results/templates/ballot/ballot_speaks.html index 306e00fef16..39e0530ae49 100644 --- a/tabbycat/results/templates/ballot/ballot_speaks.html +++ b/tabbycat/results/templates/ballot/ballot_speaks.html @@ -32,6 +32,13 @@ + {% if pref.speaker_ranks != 'none' %} +
+ {{ position.srank|addcss:"form-control" }} + {{ position.srank.errors }} +
+ {% endif %} +
{{ position.score|addcss:"form-control" }} {{ position.score.errors }} diff --git a/tabbycat/templates/scss/components/page-specific.scss b/tabbycat/templates/scss/components/page-specific.scss index 54440fc1359..1bf768fcbc1 100644 --- a/tabbycat/templates/scss/components/page-specific.scss +++ b/tabbycat/templates/scss/components/page-specific.scss @@ -14,6 +14,12 @@ display: block; } +// ballot_speaks.html +.srank { + width: 75px; + flex: none; +} + //------------------------------------------------------------------------------ // Availabilities Overview //------------------------------------------------------------------------------ From f556c33be22dd37385cdb8bf8caa0691a6a30634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Tue, 10 Jan 2023 19:43:32 -0400 Subject: [PATCH 079/255] Add speaker ranks to public ballot view --- tabbycat/results/templates/public_ballot_set.html | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tabbycat/results/templates/public_ballot_set.html b/tabbycat/results/templates/public_ballot_set.html index 5239b680b46..8b72544651a 100644 --- a/tabbycat/results/templates/public_ballot_set.html +++ b/tabbycat/results/templates/public_ballot_set.html @@ -82,9 +82,14 @@

  • {{ position.name }} {% person_display_name position.speaker %} - + {{ position.score }} + {% if pref.speaker_ranks != 'none' %} + + {{ position.rank }} + + {% endif %}
  • {% endfor %}
  • @@ -98,7 +103,7 @@

    Total for {{ name }} ({{ side }}) {% endblocktrans %} {% endif %} - + {{ team.total }} {% else %} From 75180fd1cf3bc31dfbaf4f9ae86fe7c42e387f23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Tue, 10 Jan 2023 19:43:47 -0400 Subject: [PATCH 080/255] Add speaker ranks speaker metric --- tabbycat/standings/speakers.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tabbycat/standings/speakers.py b/tabbycat/standings/speakers.py index 7617c07a94d..cc4caaf9102 100644 --- a/tabbycat/standings/speakers.py +++ b/tabbycat/standings/speakers.py @@ -24,6 +24,7 @@ class SpeakerScoreQuerySetMetricAnnotator(QuerySetMetricAnnotator): function = None # Must be set by subclasses replies = False + field = 'speakerscore__score' def get_annotation(self, round): """Returns a QuerySet annotated with the metric given. All positional @@ -41,7 +42,7 @@ def get_annotation(self, round): else: annotation_filter &= Q(speakerscore__position__lte=round.tournament.last_substantive_position) - return self.function('speakerscore__score', filter=annotation_filter) + return self.function(self.field, filter=annotation_filter) class TotalSpeakerScoreMetricAnnotator(SpeakerScoreQuerySetMetricAnnotator): @@ -176,6 +177,16 @@ def get_annotation(self, round=None): ) +class SpeakerScoreRankingsMetricAnnotator(SpeakerScoreQuerySetMetricAnnotator): + """Metric annotator for standard deviation of speaker score.""" + key = "srank" + name = _("speech ranks") + abbr = _("SRank") + function = Sum + ascending = True + field = 'speakerscore__rank' + + # ============================================================================== # Standings generator # ============================================================================== @@ -210,6 +221,7 @@ class SpeakerStandingsGenerator(BaseStandingsGenerator): "replies_avg" : AverageReplyScoreMetricAnnotator, "replies_stddev": StandardDeviationReplyScoreMetricAnnotator, "replies_count" : NumberOfRepliesMetricAnnotator, + "srank" : SpeakerScoreRankingsMetricAnnotator, } ranking_annotator_classes = { From 439eb52b3b9ea782e902908754cafb31170060e2 Mon Sep 17 00:00:00 2001 From: Nikolai Peram Date: Wed, 11 Jan 2023 20:46:05 -0500 Subject: [PATCH 081/255] Clarify Check-Ins to Availability buttons (#2223) --- tabbycat/templates/tables/CheckboxTablesContainer.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tabbycat/templates/tables/CheckboxTablesContainer.vue b/tabbycat/templates/tables/CheckboxTablesContainer.vue index 58011e273dd..8edb72a8793 100644 --- a/tabbycat/templates/tables/CheckboxTablesContainer.vue +++ b/tabbycat/templates/tables/CheckboxTablesContainer.vue @@ -47,13 +47,13 @@ class="btn btn-primary" type="button" data-toggle="tooltip" :title="gettext(`Set people who are checked in as available (leave people not checked in unchanged)`)"> - {{ gettext("Set from Check-Ins") }} + {{ gettext(" Set Checked-In as Available") }}

  • From e47d22b4e88f6fc7c1c1a1a97594faddf0bfde71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Fri, 13 Jan 2023 13:57:14 -0500 Subject: [PATCH 082/255] Docs: Remove extraneous escape characters --- docs/install/heroku.rst | 5 +++-- docs/install/linux.rst | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/install/heroku.rst b/docs/install/heroku.rst index 1a424dfe530..3430b7aefd2 100644 --- a/docs/install/heroku.rst +++ b/docs/install/heroku.rst @@ -124,7 +124,7 @@ TLDR commands .. parsed-literal:: - git clone https\:\/\/github.com/TabbycatDebate/tabbycat.git + git clone https://github.com/TabbycatDebate/tabbycat.git cd tabbycat git checkout master python deploy_heroku.py yourappname @@ -203,7 +203,8 @@ You'll need both Git and the Heroku CLI, and you'll need to be logged in to the 2. If you haven't already, clone our Git repository and check out the master branch:: - $ git clone https\:\/\/github.com/TabbycatDebate/tabbycat.git + $ git clone https://github.com/TabbycatDebate/tabbycat.git + $ cd tabbycat $ git checkout master If you've already cloned our Git repository, don't forget to pull so you're up to date:: diff --git a/docs/install/linux.rst b/docs/install/linux.rst index 3e6fa733684..86ad556ced8 100644 --- a/docs/install/linux.rst +++ b/docs/install/linux.rst @@ -126,7 +126,8 @@ If you have Git, life will be easier if you clone `our GitHub repository`_: .. parsed-literal:: - $ git clone https\:\/\/github.com/TabbycatDebate/tabbycat.git + $ git clone https://github.com/TabbycatDebate/tabbycat.git + $ cd tabbycat $ git checkout master (You can find out if you have Git using ``git --version``. If you don't, you can install it using ``sudo apt install git``.) From b484132ee667334ea3457dcc05543ab49c2d2f9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Fri, 13 Jan 2023 14:06:35 -0500 Subject: [PATCH 083/255] Add default blank conflicts for panels --- tabbycat/templates/allocations/DragAndDropStore.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tabbycat/templates/allocations/DragAndDropStore.js b/tabbycat/templates/allocations/DragAndDropStore.js index 73aa748ca1a..a87b0b5b499 100644 --- a/tabbycat/templates/allocations/DragAndDropStore.js +++ b/tabbycat/templates/allocations/DragAndDropStore.js @@ -256,7 +256,7 @@ export default new Vuex.Store({ let panelClashesCombined = { adjudicator: [], team: [], institution: []}; panelAdjIds.forEach((adjId) => { - const clashesForAdj = state.extra.clashes.adjudicators[adjId] + const clashesForAdj = state.extra.clashes.adjudicators[adjId] ?? { adjudicator: [], team: [], institution: []} for (const [key, value] of Object.entries(clashesForAdj)) { panelClashesCombined[key].push(...value); } @@ -283,7 +283,7 @@ export default new Vuex.Store({ let panelHistoriesCombined = { adjudicator: [], team: [], institution: []}; panelAdjIds.forEach((adjId) => { - const clashesForAdj = state.extra.histories.adjudicators[adjId] + const clashesForAdj = state.extra.histories.adjudicators[adjId] ?? { adjudicator: [], team: [], institution: []} for (const [key, value] of Object.entries(clashesForAdj)) { panelHistoriesCombined[key].push(...value); } From 3615f9fa75f5e534308044153feb49445e640a3b Mon Sep 17 00:00:00 2001 From: Daan Koning Date: Sun, 15 Jan 2023 01:36:05 +0100 Subject: [PATCH 084/255] Only show "Enter ballot" button for rounds with adjudicator (#2218) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Hide Enter ballot button when adjudicator isn't adjudicating that round. * Only show "Submit Ballot" for rounds where adjudicator is assigned * Refactor: add `used_adjudicators` method to `Round` * Refactor code that makes sure adjudicators aren't prompted to submit ballots for inactive rounds. Co-authored-by: Étienne Beaulé Co-authored-by: Étienne Beaulé --- .../privateurls/templates/public_url_landing.html | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/tabbycat/privateurls/templates/public_url_landing.html b/tabbycat/privateurls/templates/public_url_landing.html index cd407d81894..68ad3e92dbb 100644 --- a/tabbycat/privateurls/templates/public_url_landing.html +++ b/tabbycat/privateurls/templates/public_url_landing.html @@ -58,13 +58,10 @@ {% endif %} {% if object.adjudicator and pref.participant_ballots == 'private-urls' %} - {% for round in tournament.current_rounds %} - {% roundurl 'results-public-ballotset-new-randomised' round url_key as url %} - {% blocktrans trimmed with round=round.name asvar text %}Submit Ballot for {{ round }}{% endblocktrans %} - {% include "components/item-action.html" %} - {% empty %} - {% trans "There are no current rounds" as text %} - {% include "components/item-info.html" with type='info' %} + {% for dadj in debateadjudications %} + {% roundurl 'results-public-ballotset-new-randomised' dadj.debate.round url_key as url %} + {% blocktrans trimmed with round=dadj.debate.round.name asvar text %}Submit Ballot for {{ round }}{% endblocktrans %} + {% include "components/item-action.html" %} {% endfor %} {% endif %} From eb017f2ff49c0c9dec23aacd4244776b947ef294 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 14 Jan 2023 18:43:51 -0600 Subject: [PATCH 085/255] Docs: Include v1 -> v2 migration guide Redirecting them to other documentation is unhelpful (and was ambiguous) so it could be included in the documentation itself. --- docs/guide/upgrading.rst | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/guide/upgrading.rst b/docs/guide/upgrading.rst index 4908565808f..0330b6175c0 100644 --- a/docs/guide/upgrading.rst +++ b/docs/guide/upgrading.rst @@ -8,7 +8,7 @@ Generally only want to upgrade copies of tab sites that are used on an ongoing b .. note:: - Going from any version of Tabbycat 1 to any version of Tabbycat 2 won't work with the below instructions — check out the CHANGELOG for the 2.0 version for details of how to perform this upgrade. + Going from any version of Tabbycat 1 to any version of Tabbycat 2 has a more complicated upgrade process. Upgrading a Local Copy ====================== @@ -27,3 +27,12 @@ Once you have done this you can login to your Heroku Dashboard, go to your app, .. image:: images/deploying.png Once connected a new *Manual deploy* section will appear. Make sure you select the *master* branch (not develop) and then click *Deploy Branch*. This will then show the app deploying and notify you when it has finished; which may take several minutes. + +Upgrading from version 1 to version 2 +===================================== + +Tabbycat instances running 1.x cannot be upgraded to 2.0 using a simple migration. This is because all the migrations were regenerated in order to reduce how many there are. If you try to migrate an existing 1.x instance, it will fail with an ``InconsistentMigrationHistory`` error. + +To upgrade, checkout the ``bea58288980eaf74e213d742b58e039167ed4379`` commit (which is before the migration deletion), delete the migration history using ``TRUNCATE django_migrations;`` in PostgreSQL, and then fake all the migrations using ``dj migrate --fake``. Afterwards, you can checkout ``master`` and run the newer migrations with ``dj migrate``. + +Needless to say, this should only be done with extreme caution and copious backups. From cbd4137d01005ed43005dc297872b883bf0ef8bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 15 Jan 2023 06:30:29 -0600 Subject: [PATCH 086/255] Fix couple of encountered bugs - Check if there's a template with hasattr rather than access - EmailContextData can't have USER attribute - Keyword arguments are taken with **kwargs for generator - Show default room name if doesn't exist --- tabbycat/notifications/utils.py | 10 +++++----- tabbycat/notifications/views.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tabbycat/notifications/utils.py b/tabbycat/notifications/utils.py index d9297c8117a..19cd0708895 100644 --- a/tabbycat/notifications/utils.py +++ b/tabbycat/notifications/utils.py @@ -11,7 +11,7 @@ thus the object itself cannot be passed. """ from dataclasses import dataclass -from typing import Any, List, Set, Tuple, TYPE_CHECKING +from typing import Any, Dict, List, Set, Tuple, TYPE_CHECKING from django.utils import formats from django.utils.safestring import mark_safe @@ -40,7 +40,7 @@ @dataclass class EmailContextData: - USER: str = "" # Normally filled within the consumer + pass def _assemble_panel(adjs: List[Tuple['Person', str]]) -> str: @@ -63,7 +63,7 @@ class NotificationContextGenerator: context_class = EmailContextData @classmethod - def generate(cls, to: 'QuerySet[Person]', *args: Any) -> List[Tuple[EmailContextData, 'Person']]: + def generate(cls, to: 'QuerySet[Person]', **kwargs: Dict[str, Any]) -> List[Tuple[EmailContextData, 'Person']]: return [(cls.context_class(), person) for person in to] @@ -137,7 +137,7 @@ def generate(cls, to: 'QuerySet[Person]', debate: 'Debate') -> List[Tuple[EmailC tournament = debate.round.tournament results = DebateResult(debate.confirmed_ballot) round_name = _("%(tournament)s %(round)s @ %(room)s") % {'tournament': str(tournament), - 'round': debate.round.name, 'room': debate.venue.name} + 'round': debate.round.name, 'room': debate.venue.display_name if debate.venue is not None else _("TBA")} use_codes = use_team_code_names(tournament, False) @@ -319,7 +319,7 @@ def generate(cls, to: 'QuerySet[Person]', round: 'Round') -> List[Tuple[EmailCon use_codes = use_team_code_names(tournament, False) for debate in draw: - context_debate = {"ROUND": round.name, "VENUE": debate.venue.name, + context_debate = {"ROUND": round.name, "VENUE": debate.venue.display_name if debate.venue is not None else _("TBA"), "DRAW": debate.matchup_codes if use_codes else debate.matchup, "PANEL": _assemble_panel(debate.adjudicators.with_positions())} for dt in debate.debateteam_set.all(): diff --git a/tabbycat/notifications/views.py b/tabbycat/notifications/views.py index fd71513f3ea..ca5e2ff28f0 100644 --- a/tabbycat/notifications/views.py +++ b/tabbycat/notifications/views.py @@ -308,7 +308,7 @@ def get_initial(self) -> Dict[str, str]: return initial def form_valid(self, form: BasicEmailForm) -> 'HttpResponseRedirect': - if self.subject_template: + if hasattr(self, 'subject_template'): self.tournament.preferences[self.subject_template] = form.cleaned_data['subject_line'] self.tournament.preferences[self.message_template] = form.cleaned_data['message_body'] email_recipients = list(map(int, self.request.POST.getlist('recipients'))) From 23384e4fb9d675a68b949dcc79e56360d894c71a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Thu, 19 Jan 2023 23:56:08 -0500 Subject: [PATCH 087/255] Clarify a couple instruction messages --- tabbycat/tournaments/templates/tournament_index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tabbycat/tournaments/templates/tournament_index.html b/tabbycat/tournaments/templates/tournament_index.html index eb763a66906..cb0d9eb2d7d 100644 --- a/tabbycat/tournaments/templates/tournament_index.html +++ b/tabbycat/tournaments/templates/tournament_index.html @@ -47,7 +47,7 @@

    {% trans "Welcome to your new tournament!" %}

    {% roundurl 'availability-index' round as url %} {% blocktrans trimmed with round=round.name asvar text %} - Go to the checkins area to begin creating a draw for {{ round }} + Mark participants as available to prepare a draw for {{ round }} {% endblocktrans %} {% include "components/item-action.html" with alone=True to_complete=True %} @@ -63,7 +63,7 @@

    {% trans "Welcome to your new tournament!" %}

    {% roundurl 'results-round-list' round as url %} {% blocktrans trimmed with round=round.name asvar text %} - Go to the results area to begin entering ballots for {{ round }} + Go to the results area to enter ballots for {{ round }} {% endblocktrans %} {% include "components/item-action.html" with alone=True to_complete=True %} From ccfbc31c3e04cc71cdac4d4cf5c1fe277f0995e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Thu, 19 Jan 2023 23:56:59 -0500 Subject: [PATCH 088/255] Prevent motion copying to first round Shouldn't be able to copy the previous round's motions if there is no previous round (as is the case for the 1st round). The fix is in two parts: - Surface user error message if POSTed the copy request - Remove copy button on the first round Closes BACKEND-AYH --- tabbycat/motions/templates/motions_edit.html | 22 +++++++++++--------- tabbycat/motions/views.py | 4 ++++ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/tabbycat/motions/templates/motions_edit.html b/tabbycat/motions/templates/motions_edit.html index fb9f440fffe..b0316581f61 100644 --- a/tabbycat/motions/templates/motions_edit.html +++ b/tabbycat/motions/templates/motions_edit.html @@ -20,16 +20,18 @@ {% if pref.enable_motion_reuse %}
    -
    - {% csrf_token %} - {% if round.roundmotion_set.all.length == 0 %} - -
    + {% if round.prev %} +
    + {% csrf_token %} + {% if round.roundmotion_set.all.length == 0 %} + +
    + {% endif %} {% trans "Use Existing Motions" %} diff --git a/tabbycat/motions/views.py b/tabbycat/motions/views.py index 9d3eca747ba..341e7ff32b8 100644 --- a/tabbycat/motions/views.py +++ b/tabbycat/motions/views.py @@ -132,6 +132,10 @@ class CopyPreviousMotionsView(AdministratorMixin, LogActionMixin, RoundMixin, Po def post(self, request, *args, **kwargs): self.round.roundmotion_set.all().delete() + if self.round.prev is None: + messages.error(self.request, _("Motions cannot be copied to the first round.")) + return super().post(request, *args, **kwargs) + motions = self.round.prev.roundmotion_set.select_related('motion') new_motions = [] From 919610afb98ef0c6aa7cfb899f002555e0b801fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Fri, 20 Jan 2023 23:05:03 -0500 Subject: [PATCH 089/255] Correct typos found by IDE --- tabbycat/adjallocation/serializers.py | 2 +- .../EditEitherAdjudicatorsSharedMixin.vue | 2 +- tabbycat/adjfeedback/forms.py | 8 ++++---- tabbycat/adjfeedback/models.py | 2 +- .../adjfeedback/templates/feedback_card.html | 4 ++-- tabbycat/adjfeedback/views.py | 2 +- tabbycat/api/fields.py | 4 ++-- tabbycat/api/serializers.py | 2 +- tabbycat/breakqual/utils.py | 16 ++++++++-------- tabbycat/checkins/models.py | 2 +- .../checkins/templates/CheckInScanContainer.vue | 2 +- .../templates/CheckInStatusContainer.vue | 2 +- tabbycat/draw/generator/bphungarian.py | 2 +- tabbycat/draw/generator/one_up_one_down.py | 4 ++-- tabbycat/draw/generator/powerpair.py | 16 +++++++--------- tabbycat/draw/generator/random.py | 4 ++-- .../draw/templates/EditDebateTeamsContainer.vue | 2 +- tabbycat/draw/templates/draw_display_admin.html | 2 +- tabbycat/draw/tests/test_generator.py | 2 +- tabbycat/draw/views.py | 6 +++--- tabbycat/importer/archive.py | 4 ++-- tabbycat/importer/importers/anorak.py | 12 ++++++------ tabbycat/importer/importers/boots.py | 6 +++--- tabbycat/participants/models.py | 2 +- tabbycat/participants/serializers.py | 2 +- .../printing/templates/PrintableDebateInfo.vue | 2 +- .../templates/public_url_landing.html | 2 +- tabbycat/results/forms.py | 4 ++-- tabbycat/results/prefetch.py | 8 ++++---- tabbycat/results/result.py | 2 +- tabbycat/results/templates/BallotEntryHeader.vue | 2 +- .../results/templates/BallotEntrySpeaker.vue | 2 +- tabbycat/results/templates/BallotsCell.vue | 2 +- tabbycat/results/views.py | 10 +++++----- tabbycat/settings/heroku.py | 6 +++--- tabbycat/standings/base.py | 4 ++-- tabbycat/standings/ranking.py | 2 +- tabbycat/standings/views.py | 6 +++--- tabbycat/templates/ajax/WebSocketMixin.vue | 4 ++-- .../templates/allocations/DragAndDropDebate.vue | 2 +- .../templates/allocations/DragAndDropStore.js | 2 +- .../allocations/DraggableCollection.vue | 2 +- tabbycat/templates/allocations/DraggableItem.vue | 2 +- .../templates/allocations/DraggableMixin.vue | 4 ++-- tabbycat/templates/allocations/DroppableItem.vue | 2 +- .../templates/allocations/HighlightableMixin.vue | 2 +- .../HoverableConflictReceiverMixin.vue | 4 ++-- tabbycat/templates/graphs/BallotsGraph.vue | 8 ++++---- tabbycat/templates/graphs/FeedbackTrend.vue | 2 +- .../templates/scss/components/variables.scss | 2 +- tabbycat/templates/tables/Popover.vue | 2 +- tabbycat/templates/tables/SortableTableMixin.vue | 2 +- tabbycat/tournaments/forms.py | 2 +- tabbycat/tournaments/models.py | 2 +- .../templates/TournamentOverviewContainer.vue | 2 +- tabbycat/users/admin.py | 2 +- tabbycat/utils/mixins.py | 2 +- tabbycat/utils/serializers.py | 2 +- tabbycat/utils/tables.py | 4 ++-- tabbycat/utils/tests.py | 2 +- tabbycat/venues/allocator.py | 2 +- .../templates/EditDebateVenuesContainer.vue | 2 +- tabbycat/venues/views.py | 2 +- 63 files changed, 113 insertions(+), 115 deletions(-) diff --git a/tabbycat/adjallocation/serializers.py b/tabbycat/adjallocation/serializers.py index 6e3608adda7..65c54acca8c 100644 --- a/tabbycat/adjallocation/serializers.py +++ b/tabbycat/adjallocation/serializers.py @@ -44,7 +44,7 @@ class Meta: 'bracket_min', 'bracket_max', 'room_rank', 'liveness') # Below classes serialise only a specified field (i.e. allocated adjudicators); -# i.e. they act as a a lightweight data update to be broadcast back over the +# i.e. they act as a lightweight data update to be broadcast back over the # websocket in response to websocket actions or updates rather than needing to # construct a complete representation of the debate or panelfrom scratch diff --git a/tabbycat/adjallocation/templates/EditEitherAdjudicatorsSharedMixin.vue b/tabbycat/adjallocation/templates/EditEitherAdjudicatorsSharedMixin.vue index cca95eabb36..f2b64b178ba 100644 --- a/tabbycat/adjallocation/templates/EditEitherAdjudicatorsSharedMixin.vue +++ b/tabbycat/adjallocation/templates/EditEitherAdjudicatorsSharedMixin.vue @@ -107,7 +107,7 @@ export default { allocationChanges.push({ id: dropData.assignment, adjudicators: toAllocation }) } this.$store.dispatch('updateDebatesOrPanelsAttribute', { adjudicators: allocationChanges }) - this.$store.dispatch('updateAllocableItemModified', adjudicatorsSetModified) + this.$store.dispatch('updateAllocatableItemModified', adjudicatorsSetModified) }, showShard: function () { $('#confirmShardModal').modal('show') diff --git a/tabbycat/adjfeedback/forms.py b/tabbycat/adjfeedback/forms.py index 4eaa12aea2e..f99f2c6bcb5 100644 --- a/tabbycat/adjfeedback/forms.py +++ b/tabbycat/adjfeedback/forms.py @@ -88,7 +88,7 @@ def clean(self, value): # Feedback Fields # ============================================================================== -class BlockChecboxWidget(forms.CheckboxSelectMultiple): +class BlockCheckboxWidget(forms.CheckboxSelectMultiple): template_name = 'spaced_choice_widget.html' @@ -145,7 +145,7 @@ def _make_question_field(self, question): elif question.answer_type == question.ANSWER_TYPE_SINGLE_SELECT: field = OptionalChoiceField(choices=question.choices_for_field) elif question.answer_type == question.ANSWER_TYPE_MULTIPLE_SELECT: - field = forms.MultipleChoiceField(choices=question.choices_for_field, widget=BlockChecboxWidget()) + field = forms.MultipleChoiceField(choices=question.choices_for_field, widget=BlockCheckboxWidget()) field.label = question.text # Required checkbox fields don't really make sense; so override the behaviour? @@ -227,7 +227,7 @@ def adj_choice(adj, debate, pos): # Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" display = _("Submitted - ") if adj.submitted else "" display += _("%(name)s (%(adjpos)s)") % {'name': adj.get_public_name(tournament), 'adjpos': ADJUDICATOR_POSITION_NAMES[pos]} - return (value, display) + return value, display adjfeedback_query = AdjudicatorFeedback.objects.filter( source_adjudicator__adjudicator=source, source_adjudicator__debate=OuterRef('debate'), @@ -301,7 +301,7 @@ def adj_choice(adj, debate, pos): display += _("%(name)s (panellist gave oral as chair rolled)") display %= {'name': adj.get_public_name(tournament), 'adjpos': ADJUDICATOR_POSITION_NAMES[pos]} - return (value, display) + return value, display # Only include non-silent rounds for teams. debates = Debate.objects.filter( diff --git a/tabbycat/adjfeedback/models.py b/tabbycat/adjfeedback/models.py index eb8df9abf97..cfc530f5380 100644 --- a/tabbycat/adjfeedback/models.py +++ b/tabbycat/adjfeedback/models.py @@ -204,7 +204,7 @@ def choices_for_number_scale(self): def construct_number_scale(self, min_value, max_value): """Used to build up a semi-intelligent range of options for numeric scales. - Shifted here rather than the class so it can be more easily used to + Shifted here rather than the class so that it can be more easily used to construct the default values for printed forms.""" step = max((int(max_value) - int(min_value)) / 10, 1) options = list(range(int(min_value), int(max_value + 1), int(step))) diff --git a/tabbycat/adjfeedback/templates/feedback_card.html b/tabbycat/adjfeedback/templates/feedback_card.html index 6b04629b139..6ce5b082d47 100644 --- a/tabbycat/adjfeedback/templates/feedback_card.html +++ b/tabbycat/adjfeedback/templates/feedback_card.html @@ -37,8 +37,8 @@ {% endblocktrans %}
    - {% blocktrans trimmed with as=feedback.debate_adjudicator.get_type_display %} - Received as {{ as }} + {% blocktrans trimmed with as_type=feedback.debate_adjudicator.get_type_display %} + Received as {{ as_type }} {% endblocktrans %} {% blocktrans trimmed with base=feedback.adjudicator.base_score|floatformat:"1" %} diff --git a/tabbycat/adjfeedback/views.py b/tabbycat/adjfeedback/views.py index d29c121a283..f1a2d07d95e 100644 --- a/tabbycat/adjfeedback/views.py +++ b/tabbycat/adjfeedback/views.py @@ -83,7 +83,7 @@ def get_context_data(self, **kwargs): for (band_min, band_max), threshold_class in zip(bands, threshold_classes): band_specs.append({ 'min': band_min, 'max': band_max, 'class': threshold_class, - 'count': [x >= band_min and x < band_max for x in scores].count(True), + 'count': [band_min <= x < band_max for x in scores].count(True), }) band_specs[0]['count'] += [x == max_score for x in scores].count(True) diff --git a/tabbycat/api/fields.py b/tabbycat/api/fields.py index ce1fb50fc7c..861c070d4f3 100644 --- a/tabbycat/api/fields.py +++ b/tabbycat/api/fields.py @@ -150,7 +150,7 @@ def get_url_kwargs(self, obj): } def get_url(self, obj, view_name, request, format): - view_name = 'api-%s-detail' % (obj.content_type.model) + view_name = 'api-%s-detail' % obj.content_type.model return super().get_url(obj, view_name, request, format) def get_object(self, view_name, view_args, view_kwargs): @@ -167,7 +167,7 @@ def to_internal_value(self, data): self.fail('incorrect_type', data_type=type(data).__name__) if http_prefix: - # If needed convert absolute URLs to relative path + # If needed, convert absolute URLs to relative path data = parse.urlparse(data).path prefix = get_script_prefix() if data.startswith(prefix): diff --git a/tabbycat/api/serializers.py b/tabbycat/api/serializers.py index 79fd6db84be..736548ccef4 100644 --- a/tabbycat/api/serializers.py +++ b/tabbycat/api/serializers.py @@ -93,7 +93,7 @@ def to_internal_value(self, data): self.fail('incorrect_type', data_type=type(data).__name__) if http_prefix: - # If needed convert absolute URLs to relative path + # If needed, convert absolute URLs to relative path data = parse.urlparse(data).path prefix = get_script_prefix() if data.startswith(prefix): diff --git a/tabbycat/breakqual/utils.py b/tabbycat/breakqual/utils.py index f07dd17f397..bb295df7ce0 100644 --- a/tabbycat/breakqual/utils.py +++ b/tabbycat/breakqual/utils.py @@ -55,7 +55,7 @@ def breakcategories_with_counts(tournament): def liveness(self, team, teams_count, prelims, current_round): live_info = {'text': team.wins_count, 'tooltip': ''} - # The actual calculation should be shifed to be a cached method on + # The actual calculation should be shifted to be a cached method on # the relevant break category highest_liveness = 3 for bc in team.break_categories.all(): @@ -144,17 +144,17 @@ def calculate_live_thresholds(bc, tournament, round): def get_break_category_round_names(bc): return [ # Translators: abbreviation for "finals" - first character of category name - (_("%s Finals") % (bc.name), _("%sF") % (bc.name[:1])), + (_("%s Finals") % bc.name, _("%sF") % (bc.name[:1])), # Translators: abbreviation for "semifinals" - first character of category name - (_("%s Semifinals") % (bc.name), _("%sSF") % (bc.name[:1])), + (_("%s Semifinals") % bc.name, _("%sSF") % (bc.name[:1])), # Translators: abbreviation for "quarterfinals" - first character of category name - (_("%s Quarterfinals") % (bc.name), _("%sQF") % (bc.name[:1])), + (_("%s Quarterfinals") % bc.name, _("%sQF") % (bc.name[:1])), # Translators: abbreviation for "octofinals" - first character of category name - (_("%s Octofinals") % (bc.name), _("%sOF") % (bc.name[:1])), + (_("%s Octofinals") % bc.name, _("%sOF") % (bc.name[:1])), # Translators: abbreviation for "double-octofinals" - first character of category name - (_("%s Double-Octofinals") % (bc.name), _("%sDOF") % (bc.name[:1])), + (_("%s Double-Octofinals") % bc.name, _("%sDOF") % (bc.name[:1])), # Translators: abbreviation for "triple-octofinals" - first character of category name - (_("%s Triple-Octofinals") % (bc.name), _("%sTOF") % (bc.name[:1])), + (_("%s Triple-Octofinals") % bc.name, _("%sTOF") % (bc.name[:1])), ] @@ -166,7 +166,7 @@ def auto_make_break_rounds(bc, tournament=None, prefix=False): round_names = get_break_category_round_names(bc) if prefix else BREAK_ROUND_NAMES # Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) - unknown_round = (_("Unknown %s break round") % (bc.name), _("U%sBR") % (bc.name[:1])) if prefix \ + unknown_round = (_("Unknown %s break round") % bc.name, _("U%sBR") % (bc.name[:1])) if prefix \ else (_("Unknown break round"), _("UBR")) break_rounds = itertools.chain(round_names, itertools.repeat(unknown_round)) diff --git a/tabbycat/checkins/models.py b/tabbycat/checkins/models.py index 25197637151..ef63372d819 100644 --- a/tabbycat/checkins/models.py +++ b/tabbycat/checkins/models.py @@ -11,7 +11,7 @@ def generate_identifier(): - # First number should not be 0 so it is easier import into Excel etc + # First number should not be 0 so that it is easier import into Excel etc new_id = str(random.choice([1, 2, 3, 4, 5, 6, 7, 8, 9])) + generate_identifier_string(digits, 5) if Identifier.objects.filter(barcode=new_id).count() == 0: return new_id diff --git a/tabbycat/checkins/templates/CheckInScanContainer.vue b/tabbycat/checkins/templates/CheckInScanContainer.vue index 66988e278c4..d8be11e81c9 100644 --- a/tabbycat/checkins/templates/CheckInScanContainer.vue +++ b/tabbycat/checkins/templates/CheckInScanContainer.vue @@ -99,7 +99,7 @@ export default { const promise = document.getElementById(elementID).play() if (promise !== undefined) { promise.catch(() => { - // Auto-play was prevented + // Autoplay was prevented // Show a UI element to let the user manually start playback console.debug('Safari autoplay ... needs permission for sound') }) diff --git a/tabbycat/checkins/templates/CheckInStatusContainer.vue b/tabbycat/checkins/templates/CheckInStatusContainer.vue index 059132d2c80..768058ed24d 100644 --- a/tabbycat/checkins/templates/CheckInStatusContainer.vue +++ b/tabbycat/checkins/templates/CheckInStatusContainer.vue @@ -272,7 +272,7 @@ export default { } }, statusForGroup: function (entities) { - // Check if all entites within a group are checked in + // Check if all entities within a group are checked in const statuses = entities.map(e => e.status.time) const groupStatuses = statuses.every(time => time !== undefined) return groupStatuses diff --git a/tabbycat/draw/generator/bphungarian.py b/tabbycat/draw/generator/bphungarian.py index 26e06dd2307..3c075205228 100644 --- a/tabbycat/draw/generator/bphungarian.py +++ b/tabbycat/draw/generator/bphungarian.py @@ -40,7 +40,7 @@ class BPHungarianDrawGenerator(BaseBPDrawGenerator): empirical distribution associated with the position history of the team, H_α(p) is the Rényi entropy of order α thereof, and n is the number of rounds the team - has competed in). See the "renyi_order" option below. + has competed in. See the "renyi_order" option below. "variance" - The population variance of multiplicities in the history. diff --git a/tabbycat/draw/generator/one_up_one_down.py b/tabbycat/draw/generator/one_up_one_down.py index 9d900601e46..704ceab4462 100644 --- a/tabbycat/draw/generator/one_up_one_down.py +++ b/tabbycat/draw/generator/one_up_one_down.py @@ -29,7 +29,7 @@ def dp(data): The second item is the indices of the elements in data that have the maximum possible sum, subject to the constraint that you can't pick two adjacent elements. Note that negative elements will never be included, - since they always reduce the sum so it is better to exclude them. (The + since they always reduce the sum so that it is better to exclude them. (The constraint does not say that you must pick every other element.) For example, if 'data' is a list of "swap scores", this would return a list of indices of the optimal swap combinations. The first item is the @@ -117,7 +117,7 @@ def run(self, draw): representing the entire draw""" # Find a list of integers representing how much better you get by - # executing the each team with the team below. + # executing each team with the team below. swap_scores = [(self.score_swap(draw[i], draw[i+1])) for i in range(len(draw) - 1)] # Adjust scores so that if there are two equivalent ways to resolve a diff --git a/tabbycat/draw/generator/powerpair.py b/tabbycat/draw/generator/powerpair.py index fd3b0786c4c..f49b56622d1 100644 --- a/tabbycat/draw/generator/powerpair.py +++ b/tabbycat/draw/generator/powerpair.py @@ -112,7 +112,6 @@ def _make_raw_brackets(self): return brackets # Pullup restrictions - PULLUP_RESTRICTION_METRICS = { "least_to_date": "npullups", "lowest_ds_wins": "draw_strength", @@ -136,7 +135,6 @@ def _pullup_filter(self, teams): return [team for team in teams if getattr(team, metric) == least] # Odd bracket resolutions - ODD_BRACKET_FUNCTIONS = { "pullup_top" : "_pullup_top", "pullup_bottom" : "_pullup_bottom", @@ -280,10 +278,10 @@ def _pairings(brackets, subpool_func): for points, teams in brackets.items(): bracket = list() top, bottom = subpool_func(teams) - for teams in zip(top, bottom): - pairing = Pairing(teams=teams, bracket=points, room_rank=i) + for p_teams in zip(top, bottom): + pairing = Pairing(teams=p_teams, bracket=points, room_rank=i) bracket.append(pairing) - i = i + 1 + i += 1 pairings[points] = bracket return pairings @@ -295,10 +293,10 @@ def _pairings_top_special(brackets, top_subpool_func, rest_subpool_func): for (points, teams), subpool_func in zip(brackets.items(), subpool_funcs): bracket = list() top, bottom = subpool_func(teams) - for teams in zip(top, bottom): - pairing = Pairing(teams=teams, bracket=points, room_rank=i) + for p_teams in zip(top, bottom): + pairing = Pairing(teams=p_teams, bracket=points, room_rank=i) bracket.append(pairing) - i = i + 1 + i += 1 pairings[points] = bracket return pairings @@ -391,7 +389,7 @@ def _one_up_one_down(self, pairings): class PowerPairedWithAllocatedSidesDrawGenerator(PowerPairedDrawGenerator): """Power-paired draw with allocated sides. - Overrides functions of PowerPairedDrawGenerator where sides need to be constrained. + Override functions of PowerPairedDrawGenerator where sides need to be constrained. All teams must have an 'allocated_side' attribute which must be either 'aff' or 'neg' (case-sensitive). Options are as for PowerPairedDrawGenerator, except that the allowable values diff --git a/tabbycat/draw/generator/random.py b/tabbycat/draw/generator/random.py index 9747360ef54..a1300e79527 100644 --- a/tabbycat/draw/generator/random.py +++ b/tabbycat/draw/generator/random.py @@ -70,7 +70,7 @@ def avoid_conflicts(self, pairings): pairing.flags.append("max_swapped") def _badness(self, *pairings): - """Returns a weighted conflict intensity for all of the pairings given.""" + """Returns a weighted conflict intensity for all the pairings given.""" score = 0 if self.options["avoid_history"]: score += sum([x.conflict_hist for x in pairings]) * self.options["history_penalty"] @@ -81,7 +81,7 @@ def _badness(self, *pairings): class RandomWithAllocatedSidesDrawGenerator(RandomDrawGenerator): """Random draw with allocated sides. - Overrides functions of RandomDrawGenerator where sides need to be constrained. + Override functions of RandomDrawGenerator where sides need to be constrained. All teams must have an 'allocated_side' attribute which must be either 'aff' or 'neg' (case-sensitive).""" diff --git a/tabbycat/draw/templates/EditDebateTeamsContainer.vue b/tabbycat/draw/templates/EditDebateTeamsContainer.vue index bbf7526d65b..bbd76f8e752 100644 --- a/tabbycat/draw/templates/EditDebateTeamsContainer.vue +++ b/tabbycat/draw/templates/EditDebateTeamsContainer.vue @@ -99,7 +99,7 @@ export default { teamChanges.push({ id: dropData.assignment, teams: toDebateTeams }) } this.$store.dispatch('updateDebatesOrPanelsAttribute', { teams: teamChanges }) - this.$store.dispatch('updateAllocableItemModified', [dragData.item]) + this.$store.dispatch('updateAllocatableItemModified', [dragData.item]) }, getUnallocatedItemFromDebateOrPanel (debateOrPanel) { // Provide an array of IDs representing teams in this debate diff --git a/tabbycat/draw/templates/draw_display_admin.html b/tabbycat/draw/templates/draw_display_admin.html index 36b4ebadc84..f33a4970d33 100644 --- a/tabbycat/draw/templates/draw_display_admin.html +++ b/tabbycat/draw/templates/draw_display_admin.html @@ -366,7 +366,7 @@
    {{ release_motions_title }}
    {% block js %} {{ block.super }} -{% endblock js %} diff --git a/tabbycat/options/templates/preferences_state.html b/tabbycat/options/templates/preferences_state.html index cdafee86cc3..2605dbdb368 100644 --- a/tabbycat/options/templates/preferences_state.html +++ b/tabbycat/options/templates/preferences_state.html @@ -1,3 +1,4 @@ +{% load add_field_css %}
    @@ -12,26 +13,16 @@

    {% for preference in preferences %}
  • -
    - {{ preference.name }} - {% if not no_change %} -
    {{ preference.help_text }} +
    + +
    {{ preference.help_text }}
    + + {% if preference.errors %} + {{ preference.errors }} {% endif %}
    -
    -
    - - - -
    +
    + {{ preference|addcss:"form-control" }}
  • diff --git a/tabbycat/options/templates/preset_edit.html b/tabbycat/options/templates/preset_edit.html new file mode 100644 index 00000000000..0e107d6b813 --- /dev/null +++ b/tabbycat/options/templates/preset_edit.html @@ -0,0 +1,46 @@ +{% extends "base.html" %} +{% load debate_tags i18n %} + +{% block page-subnav-sections %} +
    + {% trans "Back to Configuration" %} + +{% endblock %} + +{% block content %} + +{% if form.errors %} + {% include "components/form-errors.html" with errors=form.non_field_errors %} +{% endif %} + +
    + + {% regroup form.visible_fields|dictsort:"changed" by changed as preferences_grouped %} + {% for changed, preferences in preferences_grouped reversed %} + {% if preferences|length > 0 %} + {% if changed %} + {% trans "Preferences that will change" as title %} + {% else %} + {% trans "Preferences that will not change" as title %} + {% endif %} + {% include "preferences_state.html" %} + {% endif %} + {% endfor %} + + + +
    +
      +
    • + {% csrf_token %} + +
    • +
    +
    +
    +{% endblock content %} diff --git a/tabbycat/options/tests/__init__.py b/tabbycat/options/tests/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tabbycat/options/tests/management/__init__.py b/tabbycat/options/tests/management/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tabbycat/options/tests/management/commands/__init__.py b/tabbycat/options/tests/management/commands/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tabbycat/options/tests/management/commands/test_applypreset.py b/tabbycat/options/tests/management/commands/test_applypreset.py new file mode 100644 index 00000000000..b32d92d2166 --- /dev/null +++ b/tabbycat/options/tests/management/commands/test_applypreset.py @@ -0,0 +1,45 @@ +from unittest.mock import patch + +from django.core.management import call_command +from django.core.management.base import CommandError +from django.test import TestCase + +from options.management.commands.applypreset import Command +from options.presets import PreferencesPreset +from tournaments.models import Tournament + + +class TestPreset(PreferencesPreset): + name = "Test Rules" + description = "Used for unit tests" + show_in_list = False + + # Scoring + scoring__score_min = 70 + scoring__score_max = 80 + + +class ApplyPresetTests(TestCase): + @patch('options.management.commands.applypreset.all_presets', return_value=[TestPreset]) + def test_preset_options(self, mock_all_presets): + with self.assertRaises(CommandError) as cm: + Command().create_parser('', '').parse_args(['notvalidpreset']) + self.assertEqual(str(cm), "Error: argument preset: invalid choice: 'notvalidpreset' (choose from 'testpreset')") + + @patch('options.management.commands.applypreset.all_presets', return_value=[TestPreset]) + def test_set_invalid_preset(self, mock_all_presets): + tournament = Tournament.objects.create(slug="command", name="Command Testing") + with self.assertRaises(CommandError) as cm: + call_command('applypreset', ['-t', 'command', 'notvalidpreset']) + self.assertEqual(str(cm), "Error: argument preset: invalid choice: 'notvalidpreset' (choose from 'testpreset')") + tournament.delete() + + @patch('options.management.commands.applypreset.all_presets', return_value=[TestPreset]) + def test_set_valid_preset(self, mock_all_presets): + tournament = Tournament.objects.create(slug="command", name="Command Testing") + tournament.preferences['scoring__score_min'] = 0 + tournament.preferences['scoring__score_max'] = 100 + + call_command('applypreset', ['-t', 'command', 'testpreset']) + for pref, val in [('scoring__score_min', 70), ('scoring__score_max', 80)]: + self.assertEqual(tournament.preferences[pref], val) diff --git a/tabbycat/options/tests/test_presets.py b/tabbycat/options/tests/test_presets.py new file mode 100644 index 00000000000..a0cd2ab5bc5 --- /dev/null +++ b/tabbycat/options/tests/test_presets.py @@ -0,0 +1,78 @@ +from unittest.mock import patch + +from django.test import TestCase + +from options.presets import get_preset_from_slug, PreferencesPreset +from tournaments.models import Tournament + + +class TestPreset(PreferencesPreset): + name = "Test Rules" + description = "Used for unit tests" + show_in_list = False + + # Scoring + scoring__score_min = 70 + scoring__score_max = 80 + + +class TestPresets(TestCase): + def set_up_tournament(self): + tournament = Tournament.objects.create(slug="preset", name="Preset Testing") + tournament.preferences['scoring__score_min'] = 0 + tournament.preferences['scoring__score_max'] = 100 + return tournament + + @patch('options.presets.all_presets', return_value=[TestPreset]) + def test_get_preset_good_slug(self, mock_all_presets): + self.assertEqual(get_preset_from_slug('testpreset'), TestPreset) + + @patch('options.presets.all_presets', return_value=[]) + def test_get_preset_slug_invalid(self, mock_all_presets): + with self.assertRaises(ValueError): + get_preset_from_slug('testpreset') + + @patch('options.presets.all_presets', return_value=[TestPreset, TestPreset]) + def test_get_preset_many_presets(self, mock_all_presets): + with self.assertLogs('options.presets', level='WARNING') as cm: + self.assertEqual(get_preset_from_slug('testpreset'), TestPreset) + self.assertEqual(cm.output, ['WARNING:options.presets:Found more than one preset for testpreset']) + + def test_preferences_does_not_include_meta(self): + self.assertFalse('name' in list(TestPreset.get_preferences())) + + def test_preferences_includes_all_preferences(self): + self.assertTrue(set(TestPreset.get_preferences()) == {'scoring__score_min', 'scoring__score_max'}) + + def test_can_save_preset(self): + tournament = self.set_up_tournament() + TestPreset.save(tournament) + + for pref, new_val in [('scoring__score_min', 70), ('scoring__score_max', 80)]: + self.assertEqual(tournament.preferences[pref], new_val) + + tournament.delete() + + def test_can_create_form(self): + tournament = self.set_up_tournament() + + form = TestPreset.get_form(tournament) + + for pref, new_val in [('scoring__score_min', 70), ('scoring__score_max', 80)]: + self.assertTrue(pref in form.fields) + self.assertEqual(form[pref].initial, new_val) + self.assertEqual(form[pref].changed, True) + + tournament.delete() + + def test_can_save_preset_form(self): + tournament = self.set_up_tournament() + + form = TestPreset.get_form(tournament, data={'scoring__score_min': 70, 'scoring__score_max': 80}) + form.is_valid() + form.update_preferences() + + for pref, new_val in [('scoring__score_min', 70), ('scoring__score_max', 80)]: + self.assertEqual(tournament.preferences[pref], new_val) + + tournament.delete() diff --git a/tabbycat/options/tests/test_views.py b/tabbycat/options/tests/test_views.py new file mode 100644 index 00000000000..5f185eef75e --- /dev/null +++ b/tabbycat/options/tests/test_views.py @@ -0,0 +1,76 @@ +from unittest.mock import patch + +from django.http.response import Http404 +from django.test import RequestFactory, TestCase + +from options.presets import PreferencesPreset +from options.views import SetPresetPreferencesView +from tournaments.models import Tournament +from utils.misc import reverse_tournament + + +class TestPreset(PreferencesPreset): + name = "Test Rules" + description = "Used for unit tests" + show_in_list = False + + # Scoring + scoring__score_min = 70 + scoring__score_max = 80 + + +class TestSetPresetPreferencesView(TestCase): + def set_up_tournament(self): + tournament = Tournament.objects.create(slug="preset", name="Preset Testing") + tournament.preferences['scoring__score_min'] = 0 + tournament.preferences['scoring__score_max'] = 100 + return tournament + + @patch('options.presets.all_presets', return_value=[TestPreset]) + def test_title_with_preset(self, mock_all_presets): + tournament = self.set_up_tournament() + request = RequestFactory().get(reverse_tournament('options-presets-confirm', tournament, kwargs={'preset_name': 'testpreset'})) + view = SetPresetPreferencesView() + view.setup(request, preset_name='testpreset') + + self.assertEqual(view.get_page_title(), 'Apply Preset: Test Rules') + tournament.delete() + + @patch('options.presets.all_presets', return_value=[TestPreset]) + def test_404_with_invalid_preset(self, mock_all_presets): + tournament = self.set_up_tournament() + request = RequestFactory().get(reverse_tournament('options-presets-confirm', tournament, kwargs={'preset_name': 'testpreset'})) + view = SetPresetPreferencesView() + view.setup(request, preset_name='invalidpreset') + + with self.assertRaises(Http404): + view.get_page_title() + tournament.delete() + + @patch('options.presets.all_presets', return_value=[TestPreset]) + @patch('options.views.messages.success') + @patch('django.views.generic.edit.HttpResponseRedirect') + def test_save_form(self, mock_redirect, mock_success, mock_all_presets): + tournament = self.set_up_tournament() + request = RequestFactory().get(reverse_tournament('options-presets-confirm', tournament, kwargs={'preset_name': 'testpreset'})) + view = SetPresetPreferencesView() + view.setup(request, tournament_slug=tournament.slug, preset_name='testpreset') + + form = TestPreset.get_form(tournament, data={'scoring__score_min': 70, 'scoring__score_max': 80}) + form.is_valid() + view.form_valid(form) + mock_redirect.assert_called_with(reverse_tournament('options-tournament-index', tournament)) + + tournament.delete() + + @patch('options.presets.all_presets', return_value=[TestPreset]) + def test_gets_correct_form(self, mock_all_presets): + tournament = self.set_up_tournament() + request = RequestFactory().get(reverse_tournament('options-presets-confirm', tournament, kwargs={'preset_name': 'testpreset'})) + view = SetPresetPreferencesView() + view.setup(request, tournament_slug=tournament.slug, preset_name='testpreset') + + form = view.get_form() + for pref in ['scoring__score_min', 'scoring__score_max']: + self.assertIn(pref, form.fields) + tournament.delete() diff --git a/tabbycat/options/urls.py b/tabbycat/options/urls.py index 069e86c44d8..7d64191b541 100644 --- a/tabbycat/options/urls.py +++ b/tabbycat/options/urls.py @@ -10,7 +10,7 @@ # Presets path('presets//confirm/', - views.ConfirmTournamentPreferencesView.as_view(), + views.SetPresetPreferencesView.as_view(), name="options-presets-confirm"), # Per Type diff --git a/tabbycat/options/views.py b/tabbycat/options/views.py index 4efdd910dba..5eeb43b0c3c 100644 --- a/tabbycat/options/views.py +++ b/tabbycat/options/views.py @@ -5,6 +5,7 @@ from django.utils.text import slugify from django.utils.translation import gettext as _ from django.views.generic import TemplateView +from django.views.generic.edit import FormView from dynamic_preferences.registries import global_preferences_registry from dynamic_preferences.views import PreferenceFormView @@ -16,7 +17,7 @@ from .forms import tournament_preference_form_builder from .preferences import tournament_preferences_registry -from .presets import all_presets, get_preferences_data, save_presets +from .presets import all_presets, get_preset_from_slug logger = logging.getLogger(__name__) @@ -74,44 +75,29 @@ def get_form_class(self, *args, **kwargs): return form_class -class ConfirmTournamentPreferencesView(AdministratorMixin, TournamentMixin, TemplateView): - template_name = "preferences_presets_confirm.html" +class SetPresetPreferencesView(AdministratorMixin, LogActionMixin, TournamentMixin, FormView): + template_name = "preset_edit.html" + page_emoji = '❔' + + action_log_type = ActionLogEntry.ACTION_TYPE_OPTIONS_EDIT + + def get_page_title(self): + return _("Apply Preset: %s") % self.get_selected_preset().name + + def get_form(self): + return self.get_selected_preset().get_form(self.tournament, **self.get_form_kwargs()) def get_selected_preset(self): - preset_name = self.kwargs["preset_name"] - # Retrieve the class that matches the name - selected_presets = [x for x in all_presets() if slugify(x.__name__) == preset_name] - if len(selected_presets) == 0: - logger.warning("Could not find preset: %s", preset_name) - raise Http404("Preset {!r} no found.".format(preset_name)) - elif len(selected_presets) > 1: - logger.warning("Found more than one preset for %s", preset_name) - return selected_presets[0] + try: + return get_preset_from_slug(self.kwargs["preset_name"]) + except ValueError as e: + raise Http404(str(e)) - def get_context_data(self, **kwargs): - selected_preset = self.get_selected_preset() - preset_preferences = get_preferences_data(selected_preset, self.tournament) - kwargs["preset_title"] = selected_preset.name - kwargs["preset_name"] = self.kwargs["preset_name"] - kwargs["changed_preferences"] = [p for p in preset_preferences if p['changed']] - kwargs["unchanged_preferences"] = [p for p in preset_preferences if not p['changed']] - return super().get_context_data(**kwargs) + def get_success_url(self): + return reverse_tournament('options-tournament-index', self.tournament) - def get_template_names(self): - if self.request.method == 'GET': - return ["preferences_presets_confirm.html"] - else: - return ["preferences_presets_complete.html"] - - def save_presets(self): - selected_preset = self.get_selected_preset() - save_presets(self.tournament, selected_preset) - ActionLogEntry.objects.log(type=ActionLogEntry.ACTION_TYPE_OPTIONS_EDIT, - user=self.request.user, tournament=self.tournament, content_object=self.tournament) - messages.success(self.request, _("Tournament options saved according to preset " - "%(name)s.") % {'name': selected_preset.name}) - - def post(self, request, *args, **kwargs): - context = self.get_context_data(**kwargs) - self.save_presets() - return self.render_to_response(context) + def form_valid(self, form): + form.update_preferences() + messages.success(self.request, _("Tournament options saved based on preset " + "%(name)s.") % {'name': self.get_selected_preset().name}) + return super().form_valid(form) diff --git a/tabbycat/tournaments/forms.py b/tabbycat/tournaments/forms.py index 1a84c05bb92..8c2b7449124 100644 --- a/tabbycat/tournaments/forms.py +++ b/tabbycat/tournaments/forms.py @@ -11,7 +11,7 @@ from breakqual.models import BreakCategory from breakqual.utils import auto_make_break_rounds from options.preferences import TournamentStaff -from options.presets import all_presets, data_entry_presets_for_form, presets_for_form, PrivateURLS, public_presets_for_form, PublicForms, PublicInformation, save_presets +from options.presets import all_presets, data_entry_presets_for_form, presets_for_form, PrivateURLS, public_presets_for_form, PublicForms, PublicInformation from .models import Round, Tournament from .signals import update_tournament_cache @@ -116,17 +116,17 @@ def save(self): # Identify + apply selected preset selected_index = self.cleaned_data["preset_rules"] selected_preset = next(p for p in presets if p.name == selected_index) - save_presets(t, selected_preset) + selected_preset.save(t) # Apply public info presets do_public = self.cleaned_data["public_info"] if do_public == "True": - save_presets(t, PublicInformation) + PublicInformation.save(t) # Apply data entry method preset data_entry_method = self.cleaned_data["data_entry"] if data_entry_method != "False": - save_presets(t, {"private-urls": PrivateURLS, "public": PublicForms}[data_entry_method]) + {"private-urls": PrivateURLS, "public": PublicForms}[data_entry_method].save(t) # Apply the credits if self.cleaned_data['tournament_staff'] != self.fields['tournament_staff'].initial: From 3ad198e06a81c041c805f0d94b53447baec22412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Fri, 30 Jun 2023 21:07:58 -0300 Subject: [PATCH 187/255] De-duplicate metric preference validation This commit moves the validation against duplicate metric keys to utils to be called from there. It also creates new tests. --- tabbycat/options/preferences.py | 21 ++------- tabbycat/options/tests/test_preferences.py | 14 ++++++ tabbycat/options/tests/test_utils.py | 55 ++++++++++++++++++++++ tabbycat/options/utils.py | 17 +++++-- 4 files changed, 86 insertions(+), 21 deletions(-) create mode 100644 tabbycat/options/tests/test_preferences.py create mode 100644 tabbycat/options/tests/test_utils.py diff --git a/tabbycat/options/preferences.py b/tabbycat/options/preferences.py index 4c7eefa27b0..1c3c09cd8bf 100644 --- a/tabbycat/options/preferences.py +++ b/tabbycat/options/preferences.py @@ -1,6 +1,4 @@ from django.core.validators import MinValueValidator, validate_slug -from django.forms import ValidationError -from django.utils.encoding import force_str from django.utils.translation import gettext_lazy as _ from django_summernote.widgets import SummernoteWidget from dynamic_preferences.preferences import Section @@ -13,6 +11,7 @@ from .models import tournament_preferences_registry from .types import MultiValueChoicePreference +from .utils import validate_metric_duplicates # ============================================================================== @@ -620,14 +619,7 @@ class TeamStandingsPrecedence(MultiValueChoicePreference): def validate(self, value): super().validate(value) - - # Check that non-repeatable metrics aren't listed twice - classes = [TeamStandingsGenerator.metric_annotator_classes[metric] for metric in value] - duplicates = [c for c in classes if c.repeatable is False and classes.count(c) > 1] - if duplicates: - duplicates_str = ", ".join(list(set(force_str(c.name) for c in duplicates))) - raise ValidationError(_("The following metrics can't be listed twice: " - "%(duplicates)s") % {'duplicates': duplicates_str}) + validate_metric_duplicates(TeamStandingsGenerator, value) @tournament_preferences_registry.register @@ -655,14 +647,7 @@ class SpeakerStandingsPrecedence(MultiValueChoicePreference): def validate(self, value): super().validate(value) - - # Check that non-repeatable metrics aren't listed twice - classes = [SpeakerStandingsGenerator.metric_annotator_classes[metric] for metric in value] - duplicates = [c for c in classes if c.repeatable is False and classes.count(c) > 1] - if duplicates: - duplicates_str = ", ".join(list(set(force_str(c.name) for c in duplicates))) - raise ValidationError(_("The following metrics can't be listed twice: " - "%(duplicates)s") % {'duplicates': duplicates_str}) + validate_metric_duplicates(SpeakerStandingsGenerator, value) @tournament_preferences_registry.register diff --git a/tabbycat/options/tests/test_preferences.py b/tabbycat/options/tests/test_preferences.py new file mode 100644 index 00000000000..77d5b453b10 --- /dev/null +++ b/tabbycat/options/tests/test_preferences.py @@ -0,0 +1,14 @@ +from unittest.mock import patch + +from django.test import TestCase + +from options.preferences import SpeakerStandingsPrecedence, TeamStandingsPrecedence + + +class PrefValidationTests(TestCase): + + @patch('options.preferences.validate_metric_duplicates') + def test_validation_runs(self, mock_validate_metric_duplicates): + for pref in (SpeakerStandingsPrecedence, TeamStandingsPrecedence): + with self.subTest(preference=pref.name): + self.assertIsNone(pref().validate([])) diff --git a/tabbycat/options/tests/test_utils.py b/tabbycat/options/tests/test_utils.py new file mode 100644 index 00000000000..d6013454271 --- /dev/null +++ b/tabbycat/options/tests/test_utils.py @@ -0,0 +1,55 @@ +from itertools import product + +from django.forms import ValidationError +from django.test import TestCase + +from options.preferences import TeamCodeNames +from options.utils import use_team_code_names, use_team_code_names_data_entry, validate_metric_duplicates +from standings.teams import TeamStandingsGenerator +from tournaments.models import Tournament + + +class UseTeamCodeNamesTests(TestCase): + + def setUp(self): + Tournament.objects.create(slug="unittest", name="Unit Testing") + + def tearDown(self): + Tournament.objects.filter(slug='unittest').delete() + + def test_use_codes_if_setting(self): + tournament = Tournament.objects.get(slug='unittest') + for setting, admin in product([c[0] for c in TeamCodeNames.choices], (False, True)): + with self.subTest(setting=setting, admin=admin): + tournament._prefs['team_code_names'] = setting + + if setting in ['admin-tooltips-real', 'everywhere'] or (setting == 'admin-tooltips-code' and not admin): + self.assertTrue(use_team_code_names(tournament, admin)) + else: + self.assertFalse(use_team_code_names(tournament, admin)) + + def test_use_codes_data_entry(self): + tournament = Tournament.objects.get(slug='unittest') + for setting, tabroom in product([c[0] for c in TeamCodeNames.choices], (False, True)): + with self.subTest(setting=setting, tabroom=tabroom): + tournament._prefs['team_code_names'] = setting + + if setting in ['off', 'all-tooltips']: + self.assertEqual(use_team_code_names_data_entry(tournament, tabroom), 'off') + elif setting in ['admin-tooltips-code', 'admin-tooltips-real'] and tabroom: + self.assertEqual(use_team_code_names_data_entry(tournament, tabroom), 'both') + elif setting == 'everywhere' or (setting in ['admin-tooltips-code', 'admin-tooltips-real'] and not tabroom): + self.assertEqual(use_team_code_names_data_entry(tournament, tabroom), 'code') + + +class DuplicatePreferencesTest(TestCase): + + def test_unique_metrics(self): + self.assertIsNone(validate_metric_duplicates(TeamStandingsGenerator, ['wins', 'speaks_sum'])) + + def test_repeatable_metrics(self): + self.assertIsNone(validate_metric_duplicates(TeamStandingsGenerator, ['wins', 'wbw', 'speaks_sum', 'wbw'])) + + def test_non_repeatable_metrics(self): + with self.assertRaises(ValidationError): + validate_metric_duplicates(TeamStandingsGenerator, ['wins', 'speaks_sum', 'wins']) diff --git a/tabbycat/options/utils.py b/tabbycat/options/utils.py index d3b4d758d8a..9d4744678e6 100644 --- a/tabbycat/options/utils.py +++ b/tabbycat/options/utils.py @@ -1,5 +1,9 @@ import logging +from django.forms import ValidationError +from django.utils.encoding import force_str +from django.utils.translation import gettext_lazy as _ + logger = logging.getLogger(__name__) @@ -29,6 +33,13 @@ def use_team_code_names_data_entry(tournament, tabroom): return 'both' if tabroom else 'code' elif pref == 'everywhere': return 'code' - else: - logger.error("Unrecognized team code name preference: %s", pref) - return 'code' + + +def validate_metric_duplicates(generator, value): + # Check that non-repeatable metrics aren't listed twice + classes = [generator.metric_annotator_classes[metric] for metric in value] + duplicates = [c for c in classes if not c.repeatable and classes.count(c) > 1] + if duplicates: + duplicates_str = ", ".join(list(set(force_str(c.name) for c in duplicates))) + raise ValidationError(_("The following metrics can't be listed twice: " + "%(duplicates)s") % {'duplicates': duplicates_str}) From 3444892903366e857b1101d2bb762201d07a1c2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 1 Jul 2023 15:48:40 -0300 Subject: [PATCH 188/255] Subclass custom option classes from more specific This commit makes the MultiValueChoice preference custom feature more closely use existing classes from dynamic_preferences, from the preference type to the multi-serializer. New validation has been added to make sure all the options are valid. --- tabbycat/options/serializers.py | 24 +++------------------ tabbycat/options/tests/test_fields.py | 22 +++++++++++++++++++ tabbycat/options/tests/test_forms.py | 14 ++++++++++++ tabbycat/options/tests/test_preferences.py | 25 ++++++++++++++++------ tabbycat/options/types.py | 12 ++++++----- 5 files changed, 65 insertions(+), 32 deletions(-) create mode 100644 tabbycat/options/tests/test_fields.py create mode 100644 tabbycat/options/tests/test_forms.py diff --git a/tabbycat/options/serializers.py b/tabbycat/options/serializers.py index 40eb9557396..0d9a61f9ec1 100644 --- a/tabbycat/options/serializers.py +++ b/tabbycat/options/serializers.py @@ -1,24 +1,6 @@ -from dynamic_preferences.serializers import BaseSerializer +from dynamic_preferences.serializers import MultipleSerializer -class MultiValueSerializer(BaseSerializer): - +class MultiValueSerializer(MultipleSerializer): separator = "//" - - @classmethod - def clean_to_db_value(cls, value): - if not isinstance(value, list): - raise cls.exception('MultiValueSerializer can only serialize lists') - value = [str(x) for x in value] - if any([cls.separator in x for x in value]): - raise cls.exception('The separator ({0!r}) must not be in lists passed to MultiValueSerializer'.format(cls.separator)) - return cls.separator.join(value) - - @classmethod - def to_python(cls, value, **kwargs): - if not value: - return [] - try: - return value.split(cls.separator) - except AttributeError: - raise cls.exception('MultiValueSerializer only deserializes strings separated by {0!r}'.format(cls.separator)) + sort = False diff --git a/tabbycat/options/tests/test_fields.py b/tabbycat/options/tests/test_fields.py new file mode 100644 index 00000000000..727bd24d2a8 --- /dev/null +++ b/tabbycat/options/tests/test_fields.py @@ -0,0 +1,22 @@ +import unittest +from unittest.mock import patch + +from options.fields import EMPTY_CHOICE, MultiSelect, MultiValueChoiceField + + +class MultiWidgetTest(unittest.TestCase): + + @patch('options.fields.MultiWidget.render') + def test_appends_empty_for_render(self, mock_render): + MultiSelect(nfields=5).render('test', ['a']) + mock_render.assert_called_with('test', ['a'] + ([EMPTY_CHOICE] * 4), attrs=None) + + +class MultiValueChoiceFieldTest(unittest.TestCase): + + def test_compresses_empty(self): + field = MultiValueChoiceField(choices=[('a', 'a'), ('b', 'b')], allow_empty=True) + self.assertEqual( + field.compress(['a', EMPTY_CHOICE, 'b']), + ['a', 'b'], + ) diff --git a/tabbycat/options/tests/test_forms.py b/tabbycat/options/tests/test_forms.py new file mode 100644 index 00000000000..096908ccc6c --- /dev/null +++ b/tabbycat/options/tests/test_forms.py @@ -0,0 +1,14 @@ +import unittest +from unittest.mock import patch + +from dynamic_preferences.forms import GlobalPreferenceForm + +from options.forms import tournament_preference_form_builder + + +class FormBuilderTest(unittest.TestCase): + + @patch('options.forms.preference_form_builder') + def test_create_global_form(self, mock_builder): + tournament_preference_form_builder(None, section='global') + mock_builder.assert_called_with(GlobalPreferenceForm, [], section='global') diff --git a/tabbycat/options/tests/test_preferences.py b/tabbycat/options/tests/test_preferences.py index 77d5b453b10..28ce6201005 100644 --- a/tabbycat/options/tests/test_preferences.py +++ b/tabbycat/options/tests/test_preferences.py @@ -1,14 +1,27 @@ +import unittest from unittest.mock import patch -from django.test import TestCase +from django.forms import ValidationError from options.preferences import SpeakerStandingsPrecedence, TeamStandingsPrecedence -class PrefValidationTests(TestCase): +class PrefValidationTests(unittest.TestCase): @patch('options.preferences.validate_metric_duplicates') - def test_validation_runs(self, mock_validate_metric_duplicates): - for pref in (SpeakerStandingsPrecedence, TeamStandingsPrecedence): - with self.subTest(preference=pref.name): - self.assertIsNone(pref().validate([])) + def test_allow_empty(self, mock_validate_metric_duplicates): + for preference in (SpeakerStandingsPrecedence, TeamStandingsPrecedence): + with self.subTest(preference=preference): + self.assertIsNone(preference().validate([])) + + @patch('options.preferences.validate_metric_duplicates') + def test_disallow_wrong_value(self, mock_validate_metric_duplicates): + for preference in (SpeakerStandingsPrecedence, TeamStandingsPrecedence): + with self.subTest(preference=preference), self.assertRaises(ValidationError): + preference().validate(['invalidkey']) + + @patch('options.preferences.validate_metric_duplicates') + def test_number_of_fields(self, mock_validate_metric_duplicates): + for preference in (SpeakerStandingsPrecedence, TeamStandingsPrecedence): + with self.subTest(preference=preference): + self.assertEqual(preference().get_field_kwargs()['nfields'], preference.nfields) diff --git a/tabbycat/options/types.py b/tabbycat/options/types.py index b7b417c6185..4d20ba1fb45 100644 --- a/tabbycat/options/types.py +++ b/tabbycat/options/types.py @@ -1,20 +1,22 @@ -from dynamic_preferences.types import BasePreferenceType +from dynamic_preferences.types import ChoicePreference from .fields import MultiValueChoiceField from .serializers import MultiValueSerializer -class MultiValueChoicePreference(BasePreferenceType): +class MultiValueChoicePreference(ChoicePreference): - choices = () nfields = 5 allow_empty = False field_class = MultiValueChoiceField serializer = MultiValueSerializer def get_field_kwargs(self): - field_kwargs = super(MultiValueChoicePreference, self).get_field_kwargs() + field_kwargs = super().get_field_kwargs() field_kwargs['nfields'] = self.nfields - field_kwargs['choices'] = self.choices or self.field_attribute['initial'] field_kwargs['allow_empty'] = self.allow_empty return field_kwargs + + def validate(self, value): + for v in value: + super().validate(v) From 0796ac34999a4601b7bb57e146c3109013afb266 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 1 Jul 2023 16:42:56 -0300 Subject: [PATCH 189/255] Create tests for option views --- tabbycat/options/tests/test_views.py | 61 +++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/tabbycat/options/tests/test_views.py b/tabbycat/options/tests/test_views.py index 5f185eef75e..674fe8e1c57 100644 --- a/tabbycat/options/tests/test_views.py +++ b/tabbycat/options/tests/test_views.py @@ -1,10 +1,12 @@ from unittest.mock import patch +from django.contrib.auth import get_user_model from django.http.response import Http404 from django.test import RequestFactory, TestCase -from options.presets import PreferencesPreset -from options.views import SetPresetPreferencesView +from options.preferences import scoring +from options.presets import PreferencesPreset, PublicInformation +from options.views import SetPresetPreferencesView, TournamentConfigIndexView, TournamentPreferenceFormView from tournaments.models import Tournament from utils.misc import reverse_tournament @@ -19,6 +21,61 @@ class TestPreset(PreferencesPreset): scoring__score_max = 80 +class TournamentConfigIndexViewTests(TestCase): + + def test_order_presets(self): + view = TournamentConfigIndexView() + view.setup(RequestFactory()) + + presets = view.get_context_data()['presets'] + self.assertEqual(presets[0], PublicInformation) + + +class TournamentPreferenceFormViewTests(TestCase): + + @patch('options.views.tournament_preference_form_builder') + def test_gets_correct_form(self, mock_builder): + tournament = Tournament.objects.create(slug="optionform", name="Option Form Testing") + view = TournamentPreferenceFormView() + view.setup(RequestFactory().get( + reverse_tournament('options-tournament-section', tournament, kwargs={'section': 'scoring'})), tournament_slug=tournament.slug, section='scoring', + ) + view.get_form_class() + mock_builder.assert_called_with(instance=tournament, section='scoring') + tournament.delete() + + def test_section_does_not_exist(self): + tournament = Tournament.objects.create(slug="optionform", name="Option Form Testing") + tournament.round_set.create(seq=1, name='1', abbreviation='1', draw_type='M') + request = RequestFactory().get(reverse_tournament('options-tournament-section', tournament, kwargs={'section': 'invalidsection'})) + request.user = get_user_model()(is_superuser=True) + + view = TournamentPreferenceFormView() + view.setup(request, tournament_slug=tournament.slug, section='invalidsection') + + with self.assertRaises(Http404): + view.dispatch(request, section='invalidsection') + + tournament.delete() + + @patch('options.views.messages.success') + @patch('django.views.generic.edit.HttpResponseRedirect') + def test_save_form(self, mock_redirect, mock_success): + tournament = Tournament.objects.create(slug="optionform", name="Option Form Testing") + request = RequestFactory().get(reverse_tournament('options-tournament-section', tournament, kwargs={'section': 'scoring'})) + view = TournamentPreferenceFormView() + view.setup(request, tournament_slug=tournament.slug, section='scoring') + view.section = scoring + + form = TestPreset.get_form(tournament, data={'scoring__score_min': 70, 'scoring__score_max': 80}) + form.is_valid() + view.form_valid(form) + mock_success.assert_called() + mock_redirect.assert_called_with(reverse_tournament('options-tournament-index', tournament)) + + tournament.delete() + + class TestSetPresetPreferencesView(TestCase): def set_up_tournament(self): tournament = Tournament.objects.create(slug="preset", name="Preset Testing") From 51656757ee88c20496a5cfce60c95879bef07b0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 1 Jul 2023 20:44:30 -0300 Subject: [PATCH 190/255] Use form component for setting current round --- .../templates/set_current_round.html | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/tabbycat/tournaments/templates/set_current_round.html b/tabbycat/tournaments/templates/set_current_round.html index 23a909bc95c..c9cae54baf8 100644 --- a/tabbycat/tournaments/templates/set_current_round.html +++ b/tabbycat/tournaments/templates/set_current_round.html @@ -59,24 +59,16 @@

    {% endif %} -
    -
    +
    +
    + {% csrf_token %} - - - {% csrf_token %} - - {% include 'components/form-main.html' %} - - - - + {% include 'components/form-main.html' %} + {% trans "Set Current Rounds" context "button" as title %} + {% include "components/form-submit.html" %}
    -
    - + {% endblock %} {% block js %} From bbd778278162f7ac5e9560db8dc77b0103f1faf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 1 Jul 2023 21:59:44 -0300 Subject: [PATCH 191/255] Use titles mixin for 'Set Current Round' --- tabbycat/tournaments/templates/set_current_round.html | 5 ----- tabbycat/tournaments/views.py | 2 ++ 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/tabbycat/tournaments/templates/set_current_round.html b/tabbycat/tournaments/templates/set_current_round.html index c9cae54baf8..0821559bbde 100644 --- a/tabbycat/tournaments/templates/set_current_round.html +++ b/tabbycat/tournaments/templates/set_current_round.html @@ -2,11 +2,6 @@ {% load debate_tags %} {% load add_field_css i18n %} -{% block page-title %}{% trans "Set Current Round" %}{% endblock %} -{% block head-title %} - 🙏{% trans "Set Current Round" %} -{% endblock %} - {% block page-subnav-sections %} {% if current_round %} Date: Sat, 1 Jul 2023 23:59:56 -0300 Subject: [PATCH 192/255] Pin version of pipenv --- .github/workflows/django.yml | 2 +- Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/django.yml b/.github/workflows/django.yml index 4167a19d7d2..16834b965b2 100644 --- a/.github/workflows/django.yml +++ b/.github/workflows/django.yml @@ -61,7 +61,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - python -m pip install pipenv + python -m pip install pipenv==2023.6.26 pipenv install --system --dev --deploy npm ci - name: Run linting diff --git a/Dockerfile b/Dockerfile index 61c9fd71b85..2fb1a9e937d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,7 +25,7 @@ ADD . /tcd/ RUN git config --global url."https://".insteadOf git:// # Install our node/python requirements -RUN pip install pipenv +RUN pip install pipenv==2023.6.26 RUN pipenv install --system --deploy RUN npm ci --only=production From 989fccf43785e1d93089a4f4480128b503bef0c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 2 Jul 2023 11:48:30 -0300 Subject: [PATCH 193/255] Fix capitalization of private URL preset --- tabbycat/options/presets.py | 2 +- tabbycat/tournaments/forms.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tabbycat/options/presets.py b/tabbycat/options/presets.py index bf4015adde1..5a09f537e29 100644 --- a/tabbycat/options/presets.py +++ b/tabbycat/options/presets.py @@ -365,7 +365,7 @@ class TabRelease(PreferencesPreset): public_features__public_break_categories = False -class PrivateURLS(PreferencesPreset): +class PrivateURLs(PreferencesPreset): name = _("Use Private URLs") show_in_list = False description = _("Enables participant data entry through private URLs.") diff --git a/tabbycat/tournaments/forms.py b/tabbycat/tournaments/forms.py index 8c2b7449124..b3d4a8af75f 100644 --- a/tabbycat/tournaments/forms.py +++ b/tabbycat/tournaments/forms.py @@ -11,7 +11,7 @@ from breakqual.models import BreakCategory from breakqual.utils import auto_make_break_rounds from options.preferences import TournamentStaff -from options.presets import all_presets, data_entry_presets_for_form, presets_for_form, PrivateURLS, public_presets_for_form, PublicForms, PublicInformation +from options.presets import all_presets, data_entry_presets_for_form, presets_for_form, PrivateURLs, public_presets_for_form, PublicForms, PublicInformation from .models import Round, Tournament from .signals import update_tournament_cache @@ -126,7 +126,7 @@ def save(self): # Apply data entry method preset data_entry_method = self.cleaned_data["data_entry"] if data_entry_method != "False": - {"private-urls": PrivateURLS, "public": PublicForms}[data_entry_method].save(t) + {"private-urls": PrivateURLs, "public": PublicForms}[data_entry_method].save(t) # Apply the credits if self.cleaned_data['tournament_staff'] != self.fields['tournament_staff'].initial: From f8ab14dfb59016508aa3917f9abd07a87f8a522b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 2 Jul 2023 12:06:27 -0300 Subject: [PATCH 194/255] Improve messaging for presets --- tabbycat/options/templates/preferences_state.html | 2 +- tabbycat/options/templates/preset_edit.html | 12 ++++++++++-- tabbycat/tournaments/forms.py | 3 ++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/tabbycat/options/templates/preferences_state.html b/tabbycat/options/templates/preferences_state.html index 2605dbdb368..04d2b5dfa23 100644 --- a/tabbycat/options/templates/preferences_state.html +++ b/tabbycat/options/templates/preferences_state.html @@ -4,7 +4,7 @@

    - {{ title }} ({{ preferences|length }}) + {{ title }}

    diff --git a/tabbycat/options/templates/preset_edit.html b/tabbycat/options/templates/preset_edit.html index 0e107d6b813..dee80b7aec7 100644 --- a/tabbycat/options/templates/preset_edit.html +++ b/tabbycat/options/templates/preset_edit.html @@ -20,9 +20,17 @@ {% for changed, preferences in preferences_grouped reversed %} {% if preferences|length > 0 %} {% if changed %} - {% trans "Preferences that will change" as title %} + {% blocktranslate trimmed count counter=preferences|length asvar title %} + Preference that will change ({{ counter }}) + {% plural %} + Preferences that will change ({{ counter }}) + {% endblocktranslate %} {% else %} - {% trans "Preferences that will not change" as title %} + {% blocktranslate trimmed count counter=preferences|length asvar title %} + Preference that will not change ({{ counter }}) + {% plural %} + Preferences that will not change ({{ counter }}) + {% endblocktranslate %} {% endif %} {% include "preferences_state.html" %} {% endif %} diff --git a/tabbycat/tournaments/forms.py b/tabbycat/tournaments/forms.py index b3d4a8af75f..d8798e85aa1 100644 --- a/tabbycat/tournaments/forms.py +++ b/tabbycat/tournaments/forms.py @@ -84,7 +84,8 @@ class Meta: preset_rules = ChoiceField( choices=presets_for_form(), # Tuple with (Preset_Index, Preset_Name) label=_("Format Configuration"), - help_text=_("Apply a standard set of settings to match a common debate format")) + help_text=_("Apply a standard set of settings to match a common debate format. " + "These can be changed afterwards and should be checked for your needs.")) public_info = ChoiceField( choices=public_presets_for_form, From c908f82ab4c7510b9af64d38f77f75d855e348f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 2 Jul 2023 15:59:36 -0300 Subject: [PATCH 195/255] Use full team name for veto fields There is enough space for it, and it would make the help text even less useful, so that has been removed. --- tabbycat/results/forms.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tabbycat/results/forms.py b/tabbycat/results/forms.py index 3fa93b3b1ed..2f4c23c3906 100644 --- a/tabbycat/results/forms.py +++ b/tabbycat/results/forms.py @@ -328,8 +328,8 @@ def create_fields(self): if self.using_vetoes: for side in self.sides: self.fields[self._fieldname_motion_veto(side)] = MotionModelChoiceField( - label=_("%(side)s's motion veto") % {'side': get_side_name(self.tournament, side, 'abbr')}, - queryset=self.motions, required=False, help_text=get_side_name(self.tournament, side, 'full'), + label=_("%(side)s's motion veto") % {'side': get_side_name(self.tournament, side, 'full').title()}, + queryset=self.motions, required=False, ) # 3. Speaker fields From c1cf85c6d40f025f2690a81064b02bb72ad9de19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 2 Jul 2023 11:36:37 -0300 Subject: [PATCH 196/255] Use form components for password reset form --- .../registration/password_reset_form.html | 51 ++++--------------- 1 file changed, 9 insertions(+), 42 deletions(-) diff --git a/tabbycat/templates/registration/password_reset_form.html b/tabbycat/templates/registration/password_reset_form.html index eb92e850fde..24c7289efde 100644 --- a/tabbycat/templates/registration/password_reset_form.html +++ b/tabbycat/templates/registration/password_reset_form.html @@ -8,62 +8,29 @@ {% block content %} -
    - - {% endblock %} From 9fb6cbd4040a81d54af89121ebe084c0878a8d35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 2 Jul 2023 11:35:24 -0300 Subject: [PATCH 197/255] Create form for inviting a user This commit creates a tournament-scoped form view which extends the password reset feature, as to invite a user to create an account with the given permissions. This works by creating them an account with their email address, and then the "password reset" link will prompt them to also choose a username. The new email template hasn't been created yet, nor their form view to create their account. If a user already exists, an email should still be sent, but with the reset link redirecting to the inviting tournament. This form is designed to be extensible to tournament-based granular permissions, through having a "role" field and being tournament-scoped. --- tabbycat/actionlog/models.py | 2 ++ tabbycat/tournaments/urls.py | 1 + tabbycat/users/forms.py | 21 +++++++++++++++++++- tabbycat/users/templates/invite_user.html | 24 +++++++++++++++++++++++ tabbycat/users/urls_admin.py | 8 ++++++++ tabbycat/users/views.py | 20 ++++++++++++++++++- 6 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 tabbycat/users/templates/invite_user.html create mode 100644 tabbycat/users/urls_admin.py diff --git a/tabbycat/actionlog/models.py b/tabbycat/actionlog/models.py index 0c5ef56d453..7e8932340ff 100644 --- a/tabbycat/actionlog/models.py +++ b/tabbycat/actionlog/models.py @@ -84,6 +84,7 @@ class ActionLogEntry(models.Model): ACTION_TYPE_PREFORMED_PANELS_ADJUDICATOR_AUTO = 'pp.aj.auto' ACTION_TYPE_PREFORMED_PANELS_ADJUDICATOR_EDIT = 'pp.aj.auto' ACTION_TYPE_PREFORMED_PANELS_DEBATES_AUTO = 'pp.db.auto' + ACTION_TYPE_USER_INVITE = 'ur.inv' ACTION_TYPE_CHOICES = ( (ACTION_TYPE_BALLOT_DISCARD , _("Discarded ballot set")), @@ -149,6 +150,7 @@ class ActionLogEntry(models.Model): (ACTION_TYPE_PREFORMED_PANELS_ADJUDICATOR_AUTO, _("Auto-allocated adjudicators to preformed panels")), (ACTION_TYPE_PREFORMED_PANELS_ADJUDICATOR_EDIT, _("Edited preformed panel adjudicator")), (ACTION_TYPE_PREFORMED_PANELS_DEBATES_AUTO , _("Auto-allocated preformed panels to debates")), + (ACTION_TYPE_USER_INVITE , _("Invited user to the instance")), ) type = models.CharField(max_length=10, choices=ACTION_TYPE_CHOICES, diff --git a/tabbycat/tournaments/urls.py b/tabbycat/tournaments/urls.py index 87e24bbb74e..a36ff39d98f 100644 --- a/tabbycat/tournaments/urls.py +++ b/tabbycat/tournaments/urls.py @@ -42,6 +42,7 @@ path('admin/privateurls/', include('privateurls.urls_admin')), path('admin/results/', include('results.urls_admin')), path('admin/standings/', include('standings.urls_admin')), + path('admin/users/', include('users.urls_admin')), path('admin/venues/', include('venues.urls_admin')), # Application URLs for assistant pages diff --git a/tabbycat/users/forms.py b/tabbycat/users/forms.py index b51a1e7cdb0..19e98a33215 100644 --- a/tabbycat/users/forms.py +++ b/tabbycat/users/forms.py @@ -1,4 +1,6 @@ -from django.contrib.auth.forms import UserCreationForm +from django import forms +from django.contrib.auth import get_user_model +from django.contrib.auth.forms import PasswordResetForm, UserCreationForm from django.utils.translation import gettext_lazy as _ @@ -23,3 +25,20 @@ class TabRegistrationForm(UserCreationForm): class Meta(UserCreationForm.Meta): fields = ("username", "email") labels = {"email": _("Email address")} + + +class InviteUserForm(PasswordResetForm): + role = forms.ChoiceField(label=_("User role"), choices=( + ('assistant', _("Assistant")), + ('administrator', _("Administrator")), + )) + + def get_users(self, email): + user, created = get_user_model().objects.get_or_create( + email=email, + defaults={ + 'is_superuser': self.cleaned_data['role'] == 'administrator', + 'username': email.split("@")[0], + }, + ) + return [user] diff --git a/tabbycat/users/templates/invite_user.html b/tabbycat/users/templates/invite_user.html new file mode 100644 index 00000000000..659f15f7844 --- /dev/null +++ b/tabbycat/users/templates/invite_user.html @@ -0,0 +1,24 @@ +{% extends "base.html" %} +{% load debate_tags i18n %} + +{% block page-subnav-sections %} + {% if current_round %} + + {% trans "Back to Configuration" %} + + {% endif %} +{% endblock %} + +{% block content %} +
    +
    + {% csrf_token %} + + {% include 'components/form-main.html' %} + + {% trans "Invite User" context "button" as title %} + {% include "components/form-submit.html" %} +
    +
    +{% endblock %} diff --git a/tabbycat/users/urls_admin.py b/tabbycat/users/urls_admin.py new file mode 100644 index 00000000000..ae710dfdeb7 --- /dev/null +++ b/tabbycat/users/urls_admin.py @@ -0,0 +1,8 @@ +from django.urls import path + +from . import views + + +urlpatterns = [ + path('invite/', views.InviteUserView.as_view(), name='invite-user'), +] diff --git a/tabbycat/users/views.py b/tabbycat/users/views.py index 4609e6af421..9d1ca7b7270 100644 --- a/tabbycat/users/views.py +++ b/tabbycat/users/views.py @@ -3,6 +3,7 @@ from django.contrib import messages from django.contrib.auth import get_user_model, login +from django.contrib.auth.views import PasswordResetView from django.http import HttpResponseForbidden from django.shortcuts import redirect from django.urls import reverse_lazy @@ -10,7 +11,12 @@ from django.views.generic import FormView from dynamic_preferences.registries import global_preferences_registry -from .forms import SuperuserCreationForm, TabRegistrationForm +from actionlog.mixins import LogActionMixin +from actionlog.models import ActionLogEntry +from tournaments.mixins import TournamentMixin +from utils.mixins import AdministratorMixin + +from .forms import InviteUserForm, SuperuserCreationForm, TabRegistrationForm User = get_user_model() logger = logging.getLogger(__name__) @@ -92,3 +98,15 @@ def form_valid(self, form): messages.info(self.request, _("Welcome! You've created an account for %s.") % user.username) return super().form_valid(form) + + +class InviteUserView(LogActionMixin, AdministratorMixin, TournamentMixin, PasswordResetView): + """This view is used by an administrator to invite an email address to + either create an account or to give them access to a particular tournament, + for when permissions will be created.""" + + form_class = InviteUserForm + template_name = "invite_user.html" + action_log_type = ActionLogEntry.ACTION_TYPE_USER_INVITE + page_title = _("Invite User") + page_emoji = '🔐' From e842637b82b2cc621060309ed061df8a2fbc7df9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 2 Jul 2023 18:16:17 -0300 Subject: [PATCH 198/255] Create flow to accept invitation This commit creates the email template and account creation page when accepting an invitation. It uses the same mechanism as password resets, but with a field for them to select their username. --- tabbycat/users/forms.py | 20 ++++++++++++- .../templates/account_invitation_email.html | 15 ++++++++++ .../templates/account_invitation_subject.txt | 3 ++ tabbycat/users/urls_admin.py | 1 + tabbycat/users/views.py | 28 +++++++++++++++++-- 5 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 tabbycat/users/templates/account_invitation_email.html create mode 100644 tabbycat/users/templates/account_invitation_subject.txt diff --git a/tabbycat/users/forms.py b/tabbycat/users/forms.py index 19e98a33215..aa935bf8167 100644 --- a/tabbycat/users/forms.py +++ b/tabbycat/users/forms.py @@ -1,6 +1,6 @@ from django import forms from django.contrib.auth import get_user_model -from django.contrib.auth.forms import PasswordResetForm, UserCreationForm +from django.contrib.auth.forms import PasswordResetForm, SetPasswordForm, UserCreationForm, UsernameField from django.utils.translation import gettext_lazy as _ @@ -33,6 +33,10 @@ class InviteUserForm(PasswordResetForm): ('administrator', _("Administrator")), )) + def __init__(self, tournament, *args, **kwargs): + self.tournament = tournament + super().__init__(*args, **kwargs) + def get_users(self, email): user, created = get_user_model().objects.get_or_create( email=email, @@ -42,3 +46,17 @@ def get_users(self, email): }, ) return [user] + + def save(self, *args, **kwargs): + kwargs['extra_email_context'] = {**(kwargs['extra_email_context'] or {}), 'tournament': self.tournament} + return super().save(*args, **kwargs) + + +class AcceptInvitationForm(SetPasswordForm): + username = UsernameField(label=_("Username"), help_text=get_user_model()._meta.get_field('username').help_text) + + field_order = ('username', 'new_password1', 'new_password2') + + def save(self, commit=True): + self.user.username = self.cleaned_data['username'] + return super().save(commit=commit) diff --git a/tabbycat/users/templates/account_invitation_email.html b/tabbycat/users/templates/account_invitation_email.html new file mode 100644 index 00000000000..dd8ffda36ed --- /dev/null +++ b/tabbycat/users/templates/account_invitation_email.html @@ -0,0 +1,15 @@ +{% load debate_tags i18n %} +{% blocktrans trimmed %} +Hello! +{% endblocktrans %} + +{% blocktrans trimmed with name=tournament.name %} +An administrator for the Tabbycat site hosting {{ name }} has invited you to create an user account on their site, at {{ protocol }}://{{ domain }}. +{% endblocktrans %} + +{% trans 'If you accept, please use the link below to activate your account' %} +{{ protocol }}://{{ domain }}{% tournamenturl 'accept-invitation' uidb64=uid token=token %} + +{% blocktrans trimmed %} +If you do not accept, there is no action to be taken. +{% endblocktrans %} diff --git a/tabbycat/users/templates/account_invitation_subject.txt b/tabbycat/users/templates/account_invitation_subject.txt new file mode 100644 index 00000000000..ad6a5978230 --- /dev/null +++ b/tabbycat/users/templates/account_invitation_subject.txt @@ -0,0 +1,3 @@ +{% load i18n %}{% autoescape off %} +{% blocktrans with name=tournament.name %}Invitation to join Tabbycat site for {{ name }}{% endblocktrans %} +{% endautoescape %} diff --git a/tabbycat/users/urls_admin.py b/tabbycat/users/urls_admin.py index ae710dfdeb7..97fddf67aa9 100644 --- a/tabbycat/users/urls_admin.py +++ b/tabbycat/users/urls_admin.py @@ -5,4 +5,5 @@ urlpatterns = [ path('invite/', views.InviteUserView.as_view(), name='invite-user'), + path('accept///', views.AcceptInvitationView.as_view(), name='accept-invitation'), ] diff --git a/tabbycat/users/views.py b/tabbycat/users/views.py index 9d1ca7b7270..633e60f229a 100644 --- a/tabbycat/users/views.py +++ b/tabbycat/users/views.py @@ -3,8 +3,9 @@ from django.contrib import messages from django.contrib.auth import get_user_model, login -from django.contrib.auth.views import PasswordResetView +from django.contrib.auth.views import PasswordResetConfirmView, PasswordResetView from django.http import HttpResponseForbidden +from django.http.response import Http404 from django.shortcuts import redirect from django.urls import reverse_lazy from django.utils.translation import gettext_lazy as _ @@ -14,9 +15,10 @@ from actionlog.mixins import LogActionMixin from actionlog.models import ActionLogEntry from tournaments.mixins import TournamentMixin +from utils.misc import reverse_tournament from utils.mixins import AdministratorMixin -from .forms import InviteUserForm, SuperuserCreationForm, TabRegistrationForm +from .forms import AcceptInvitationForm, InviteUserForm, SuperuserCreationForm, TabRegistrationForm User = get_user_model() logger = logging.getLogger(__name__) @@ -110,3 +112,25 @@ class InviteUserView(LogActionMixin, AdministratorMixin, TournamentMixin, Passwo action_log_type = ActionLogEntry.ACTION_TYPE_USER_INVITE page_title = _("Invite User") page_emoji = '🔐' + + subject_template_name = 'account_invitation_subject.txt' + email_template_name = 'account_invitation_email.html' + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs['tournament'] = self.tournament + return kwargs + + def get_success_url(self): + return reverse_tournament('options-tournament-index', self.tournament) + + +class AcceptInvitationView(TournamentMixin, PasswordResetConfirmView): + form_class = AcceptInvitationForm + success_url = reverse_lazy('tabbycat-index') + template_name = 'signup.html' + + def get_context_data(self, **kwargs): + if not self.validlink: + raise Http404 + return super().get_context_data(**kwargs) From 7e1276d6c1f5b3bc4f88c4bf9fb0ed89f78b5718 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 2 Jul 2023 18:33:35 -0300 Subject: [PATCH 199/255] Deprecate and remove creating accounts by key This commit removes the mechanism to create accounts using keys set in the site preferences (for either assistant or admin permissions), and replaces it with a link to the invitation form. --- tabbycat/options/preferences.py | 20 -------- .../options/templates/preferences_index.html | 5 ++ .../templates/tournament_index.html | 10 ---- tabbycat/users/forms.py | 7 --- tabbycat/users/templates/signup.html | 8 +-- tabbycat/users/urls.py | 6 +-- tabbycat/users/views.py | 50 ++----------------- 7 files changed, 10 insertions(+), 96 deletions(-) diff --git a/tabbycat/options/preferences.py b/tabbycat/options/preferences.py index 4c7eefa27b0..cd55f052830 100644 --- a/tabbycat/options/preferences.py +++ b/tabbycat/options/preferences.py @@ -1486,23 +1486,3 @@ class EnableAPIAccess(BooleanPreference): section = global_settings name = 'enable_api' default = True - - -@global_preferences_registry.register -class AssistantAccountCreationKey(StringPreference): - help_text = _("A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/") - verbose_name = _('Assistant account creation key') - section = global_settings - field_kwargs = {'validators': [validate_slug]} - name = 'assistant_account_key' - default = '' - - -@global_preferences_registry.register -class AdminAccountCreationKey(StringPreference): - help_text = _("A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/") - section = global_settings - verbose_name = _('Administrator account creation key') - field_kwargs = {'validators': [validate_slug]} - name = 'admin_account_key' - default = '' diff --git a/tabbycat/options/templates/preferences_index.html b/tabbycat/options/templates/preferences_index.html index 5f970bdda5d..90f7431e1ff 100644 --- a/tabbycat/options/templates/preferences_index.html +++ b/tabbycat/options/templates/preferences_index.html @@ -132,6 +132,11 @@ {% trans "Set Round Weights for Tapered Scoring" as text %} {% trans "Rounds can be weighted so that certain rounds are worth more team points." as extra %} {% include "components/item-action.html" with type="primary" icon="anchor" %} + + {% tournamenturl 'invite-user' as url %} + {% trans "Invite user to create an account" as text %} + {% trans "Users can be created through an invitation link sent to their email, with associated permissions." as extra %} + {% include "components/item-action.html" with type="primary" icon="user-plus" %}
    diff --git a/tabbycat/tournaments/templates/tournament_index.html b/tabbycat/tournaments/templates/tournament_index.html index a1f6589f5a7..be353f4949f 100644 --- a/tabbycat/tournaments/templates/tournament_index.html +++ b/tabbycat/tournaments/templates/tournament_index.html @@ -74,16 +74,6 @@

    {% trans "Welcome to your new tournament!" %}

    {% endif %} - {% if global_preferences.accounts__admin_account_key or global_preferences.accounts__assistant_account_key %} - {% tournamenturl 'options-tournament-section' section='global' as url %} - {% blocktrans trimmed asvar text %} - You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts. - {% endblocktrans %} -
    - {% include "components/item-action.html" with type="warning" icon="alert-triangle" to_complete=True %} -
    - {% endif %} - {{ block.super }} {% endblock content %} diff --git a/tabbycat/users/forms.py b/tabbycat/users/forms.py index aa935bf8167..3151cd6bcf1 100644 --- a/tabbycat/users/forms.py +++ b/tabbycat/users/forms.py @@ -20,13 +20,6 @@ def save(self, commit=True): return user -class TabRegistrationForm(UserCreationForm): - - class Meta(UserCreationForm.Meta): - fields = ("username", "email") - labels = {"email": _("Email address")} - - class InviteUserForm(PasswordResetForm): role = forms.ChoiceField(label=_("User role"), choices=( ('assistant', _("Assistant")), diff --git a/tabbycat/users/templates/signup.html b/tabbycat/users/templates/signup.html index 921272e0563..686b8d19cc1 100644 --- a/tabbycat/users/templates/signup.html +++ b/tabbycat/users/templates/signup.html @@ -1,8 +1,6 @@ {% extends 'base.html' %} {% load i18n %} -{% block page-title %}{% trans "Sign-Up" %}{% endblock %} -{% block head-title %}{% trans "Sign-Up" %}{% endblock %} {% block extra-head %}{% endblock %} {% block content %} @@ -12,11 +10,7 @@
    - {% if for_admin %} - {% trans "Create a New Administrator Account" context "page title" as title %} - {% else %} - {% trans "Create a New Assistant Account" context "page title" as title %} - {% endif %} + {% trans "Create a new Account" context "page title" as title %} {% include "components/form-title.html" with icon="user-plus" %} diff --git a/tabbycat/users/urls.py b/tabbycat/users/urls.py index e78474077b5..9d8f73c88ae 100644 --- a/tabbycat/users/urls.py +++ b/tabbycat/users/urls.py @@ -1,10 +1,6 @@ from django.urls import include, path -from . import views - urlpatterns = [ - path('', - include('django.contrib.auth.urls')), - path('signup//', views.SignUpView.as_view(), name='signup'), + path('', include('django.contrib.auth.urls')), ] diff --git a/tabbycat/users/views.py b/tabbycat/users/views.py index 633e60f229a..09fecad2da7 100644 --- a/tabbycat/users/views.py +++ b/tabbycat/users/views.py @@ -4,13 +4,11 @@ from django.contrib import messages from django.contrib.auth import get_user_model, login from django.contrib.auth.views import PasswordResetConfirmView, PasswordResetView -from django.http import HttpResponseForbidden from django.http.response import Http404 from django.shortcuts import redirect from django.urls import reverse_lazy from django.utils.translation import gettext_lazy as _ from django.views.generic import FormView -from dynamic_preferences.registries import global_preferences_registry from actionlog.mixins import LogActionMixin from actionlog.models import ActionLogEntry @@ -18,55 +16,12 @@ from utils.misc import reverse_tournament from utils.mixins import AdministratorMixin -from .forms import AcceptInvitationForm, InviteUserForm, SuperuserCreationForm, TabRegistrationForm +from .forms import AcceptInvitationForm, InviteUserForm, SuperuserCreationForm User = get_user_model() logger = logging.getLogger(__name__) -class SignUpView(FormView): - form_class = TabRegistrationForm - success_url = reverse_lazy('tabbycat-index') - template_name = 'signup.html' - - def dispatch(self, request, *args, **kwargs): - if self.is_page_enabled(): - return super().dispatch(request, *args, **kwargs) - else: - return HttpResponseForbidden() - - def get_context_data(self, **kwargs): - kwargs['for_admin'] = self.admin_account - return super().get_context_data(**kwargs) - - def is_page_enabled(self): - prefs = global_preferences_registry.manager() - admin_key = prefs['global__admin_account_key'] - assist_key = prefs['global__assistant_account_key'] - if not (admin_key or assist_key): - return False - if admin_key == self.kwargs['key']: - self.admin_account = True - return True - if assist_key == self.kwargs['key']: - self.admin_account = False - return True - return False - - def form_valid(self, form): - user = form.save(commit=False) - user.is_superuser = self.admin_account - user.save() - - if self.admin_account: - messages.success(self.request, _("You have successfully created a new administrator account.")) - else: - messages.success(self.request, _("You have successfully created a new assistant account.")) - - login(self.request, user) - return super().form_valid(form) - - class BlankSiteStartView(FormView): """This view is presented to the user when there are no tournaments and no user accounts. It prompts the user to create a first superuser. It rejects @@ -111,7 +66,7 @@ class InviteUserView(LogActionMixin, AdministratorMixin, TournamentMixin, Passwo template_name = "invite_user.html" action_log_type = ActionLogEntry.ACTION_TYPE_USER_INVITE page_title = _("Invite User") - page_emoji = '🔐' + page_emoji = '👤' subject_template_name = 'account_invitation_subject.txt' email_template_name = 'account_invitation_email.html' @@ -129,6 +84,7 @@ class AcceptInvitationView(TournamentMixin, PasswordResetConfirmView): form_class = AcceptInvitationForm success_url = reverse_lazy('tabbycat-index') template_name = 'signup.html' + page_title = _('Accept Invitation') def get_context_data(self, **kwargs): if not self.validlink: From 94d7c43992bb7b5e2da7dfa92b8310c2165d51d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 2 Jul 2023 21:51:19 -0300 Subject: [PATCH 200/255] Unpin pipenv The regression seems to have been fixed. --- .github/workflows/django.yml | 2 +- Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/django.yml b/.github/workflows/django.yml index 16834b965b2..4167a19d7d2 100644 --- a/.github/workflows/django.yml +++ b/.github/workflows/django.yml @@ -61,7 +61,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - python -m pip install pipenv==2023.6.26 + python -m pip install pipenv pipenv install --system --dev --deploy npm ci - name: Run linting diff --git a/Dockerfile b/Dockerfile index 2fb1a9e937d..61c9fd71b85 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,7 +25,7 @@ ADD . /tcd/ RUN git config --global url."https://".insteadOf git:// # Install our node/python requirements -RUN pip install pipenv==2023.6.26 +RUN pip install pipenv RUN pipenv install --system --deploy RUN npm ci --only=production From a99b6455a00b38143a5e4afad39a5cae8e95f1af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 2 Jul 2023 23:20:07 -0300 Subject: [PATCH 201/255] Raise Validation if password enabled yet blank This commit adds a validation error scenario if passwords are required for public submission, yet none has been set. This makes it possible to mark the password field as optional! Fixed up how settings are fetched for these checks, to avoid the previous value from being called when falsy. --- tabbycat/options/forms.py | 6 +++++- tabbycat/options/preferences.py | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/tabbycat/options/forms.py b/tabbycat/options/forms.py index c4b03a2bbf3..d5cea2ac94d 100644 --- a/tabbycat/options/forms.py +++ b/tabbycat/options/forms.py @@ -14,7 +14,7 @@ def clean(self): t = self.manager.instance def get_pref(name, section=section): - return self.cleaned_data.get(section + "__" + name) or t.pref(name) + return self.cleaned_data.get(section + "__" + name) if (section + "__" + name) in self.cleaned_data else t.pref(name) score_range_msg = _("Mininum score must be less than maximum score") @@ -37,6 +37,10 @@ def get_pref(name, section=section): if get_pref('adj_min_score') > get_pref('adj_max_score'): raise ValidationError({'feedback__adj_min_score': score_range_msg, 'feedback__adj_max_score': score_range_msg}) + elif section == 'data_entry': + if get_pref('public_use_password') and len(get_pref('public_password')) == 0: + raise ValidationError({'data_entry__public_password': _("Must set a password if using a password is enabled")}) + elif section == 'ui_options': if get_pref('team_code_names') not in ['off', 'all-tooltips'] and get_pref('show_team_institutions'): raise ValidationError({'ui_options__show_team_institutions': _("Showing team institutions defeats the purpose of code names")}) diff --git a/tabbycat/options/preferences.py b/tabbycat/options/preferences.py index 4c7eefa27b0..9622f2ff83d 100644 --- a/tabbycat/options/preferences.py +++ b/tabbycat/options/preferences.py @@ -863,7 +863,8 @@ class PublicPassword(StringPreference): verbose_name = _("Password for public submission") section = data_entry name = 'public_password' - default = 'Enter Password' + default = '' + required = False @tournament_preferences_registry.register From eab2d5724c54d073973d36fd2de500a6e5e17a30 Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Sun, 5 Feb 2023 11:56:20 +1100 Subject: [PATCH 202/255] New translations django.po (Arabic) --- .../actionlog/locale/ar/LC_MESSAGES/django.po | 156 ++-- .../locale/ar/LC_MESSAGES/django.po | 199 +++-- .../locale/ar/LC_MESSAGES/django.po | 450 +++++----- .../locale/ar/LC_MESSAGES/django.po | 164 ++-- .../breakqual/locale/ar/LC_MESSAGES/django.po | 254 +++--- tabbycat/draw/locale/ar/LC_MESSAGES/django.po | 646 +++++++------- .../importer/locale/ar/LC_MESSAGES/django.po | 223 +++-- tabbycat/locale/ar/LC_MESSAGES/django.po | 476 +++++----- .../motions/locale/ar/LC_MESSAGES/django.po | 205 +++-- .../locale/ar/LC_MESSAGES/django.po | 196 +++-- .../options/locale/ar/LC_MESSAGES/django.po | 813 +++++++++--------- .../locale/ar/LC_MESSAGES/django.po | 495 ++++++----- .../printing/locale/ar/LC_MESSAGES/django.po | 59 +- .../locale/ar/LC_MESSAGES/django.po | 85 +- .../results/locale/ar/LC_MESSAGES/django.po | 544 ++++++------ .../standings/locale/ar/LC_MESSAGES/django.po | 311 ++++--- .../locale/ar/LC_MESSAGES/django.po | 516 ++++++----- .../utils/locale/ar/LC_MESSAGES/django.po | 189 ++-- .../venues/locale/ar/LC_MESSAGES/django.po | 100 ++- 19 files changed, 3034 insertions(+), 3047 deletions(-) diff --git a/tabbycat/actionlog/locale/ar/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/ar/LC_MESSAGES/django.po index db9327ddc31..7d31365e99d 100644 --- a/tabbycat/actionlog/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:08\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -17,307 +17,307 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" msgstr "سجل التحديثات" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" msgstr "حذف النتيجة" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" msgstr "إدخال النتيجة" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" msgstr "إنشاء استمارة التحكيم" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" msgstr "تعديل النتيجة" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" msgstr "تأكيد النتيجة" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" msgstr "تقديم النتيجة من النموذج العام" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" msgstr "تقديم التغذية الراجعة من النموذج العام" -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" msgstr "حفظ التغذية الراجعة" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" msgstr "" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" msgstr "وضع ملاحظات محكم" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" msgstr "قام بحفظ تعيين محكم" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" msgstr "التعيين التلقائي للمحكمين" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" msgstr "" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" msgstr "قام بالتعيين التلقائي لقاعات المناظرة" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" msgstr "قام بتعديل فئات قاعات المناظرة" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" msgstr "تعديل محددات إختيار القاعات" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" msgstr "قام بإنشاء قرعة" -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" msgstr "قام بتأكيد القرعة" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" msgstr "قام بإعادة تعيين القرعة" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" msgstr "قام بإعلان القرعة" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" msgstr "قام برفع القرعة" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" msgstr "قام بتعديل توزيع قاعة يدويا" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" msgstr "حفظ توزيع موالاة/معلرضة " -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "حفظ التقسيمات " -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" msgstr "قام بإضافة/تعديل نص قضية" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" msgstr "القضايا المعلنة" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" msgstr "قضايا غير معلنة بعد" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" msgstr "" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" msgstr "قام بتعديل أهمية المناظرة" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" msgstr "تغيير حالة الحكم " -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" msgstr "تعديل حالة الحكم " -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" msgstr "تعديل الفئات المتأهلة " -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" msgstr "جميع الفرق و فئات التأهل" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" msgstr "تعديل درجات الفرق و تحديثها " -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" msgstr "تعديل درجات الفريق المتأهل و تحديثها " -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" msgstr "تعديل درجات الفريق المتأهل" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" msgstr "تحديد وقت البداية" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" msgstr "تقديم الجولة الحالية " -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" msgstr "" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" msgstr "قام بتعديل الفرق المتوفرة" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" msgstr "قام بتعديل تواجد المحكمين" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" msgstr "قام بتعديل قاعات المناظرة المتوفرة" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" msgstr "قام بتعديل إعدادات البطولة" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" msgstr "قام بتعديل استحقاق المتحدثين حسب الفئات" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" msgstr "قام بتعديل فئات المتحدثين" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" msgstr "" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" msgstr "" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" msgstr "" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" msgstr "" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" msgstr "" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" msgstr "" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" msgstr "" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" msgstr "" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" msgstr "" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" msgstr "" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" msgstr "" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" msgstr "" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" msgstr "" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" msgstr "" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" msgstr "" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" msgstr "" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" msgstr "" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" msgstr "" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" msgstr "نوع" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" msgstr "الزمن " -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "مستخدم" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "عنوان ال IP" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "بطولة" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "جولة" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" msgstr "نوع المحتوى" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" msgstr "Object ID" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" msgstr "سجل التحديثات" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" msgstr "مدخلات سجل التحديثات" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." msgstr "كافة مدخلات السجل تحتاج مستخدم و IP واحد كحد أدنى" -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" msgstr "مستخدم مجهول" diff --git a/tabbycat/adjallocation/locale/ar/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/ar/LC_MESSAGES/django.po index 727d8ae674c..96937c33e66 100644 --- a/tabbycat/adjallocation/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:08\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." msgstr "" -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." @@ -32,7 +32,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." @@ -43,50 +43,50 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." msgstr "" -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" msgstr "" -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." msgstr "" -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." msgstr "" -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." msgstr "" -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" msgstr "تعيين المحكمين" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." msgstr "تم إعلان القرعة مسبقا، قم برفعها لإعادة التوزيع التلقائي " -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." msgstr "لم يتم تأكيد القرعة بعد، قم بتأكيدها لإجراء التوزيع التلقائي " -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." msgstr "" -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." msgstr "" -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" @@ -97,15 +97,15 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." msgstr "" -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." msgstr "" -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" @@ -116,261 +116,260 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." msgstr "" -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." msgstr "" -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." msgstr "" -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." msgstr "" -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." msgstr "" -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." msgstr "" -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." msgstr "" -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." msgstr "" -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" msgstr "رئيس الجلسة" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" msgstr "أعضاء لجنة التحكيم" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" msgstr " محكم متدرب" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "مناظرة" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "محكم" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" msgstr "نوع" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" msgstr "متوفر ؟" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" msgstr "محكم المناظرة" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" msgstr "محكمو المناظرة" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "فريق" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" msgstr "تعارض محكم-فريق" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" msgstr "تعارضات (محكم-فريق)" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "محكم-1" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "محكم-2" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" msgstr "تعارض محكم-محكم" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" msgstr "تعارضات (محكم-محكم)" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" msgstr "مؤسسة" -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" msgstr "تعارض محكم-مؤسسة" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" msgstr "تعارضات (محكم-مؤسسة)" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" msgstr "" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" msgstr "" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "جولة" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" msgstr "أهمية" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" msgstr "" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" msgstr "" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" msgstr "" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" msgstr "" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" msgstr "مستوى القاعة" -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" msgstr "" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" msgstr "" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" msgstr "" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" msgstr "" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" msgstr "" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" msgstr "" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" msgstr "" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" msgstr "" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." msgstr "" -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" msgstr "" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." msgstr "" -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." msgstr "" -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" msgstr "" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" msgstr "" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" msgstr "" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" msgstr "" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" msgstr "" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" msgstr "" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" msgstr "مجهول " -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" msgstr "" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" msgstr "" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" msgstr "" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" msgstr "تعارضات (محكم-فريق)" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" msgstr "حفظ تعارضات (مجكم-فريق)" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." @@ -381,7 +380,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." @@ -392,19 +391,19 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." msgstr "لم يتم تغيير لتعارضات (محكم-فريق)" -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" msgstr "" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" msgstr "" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." @@ -415,7 +414,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." @@ -426,19 +425,19 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." msgstr "" -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" msgstr "" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" msgstr "" -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." @@ -449,7 +448,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." @@ -460,19 +459,19 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." msgstr "" -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." @@ -483,7 +482,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." @@ -494,7 +493,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." msgstr "" diff --git a/tabbycat/adjfeedback/locale/ar/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/ar/LC_MESSAGES/django.po index 24d8f358ee0..7c508eaa18b 100644 --- a/tabbycat/adjfeedback/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:51\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -17,40 +17,40 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:44 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" msgstr "" -#: adjfeedback/admin.py:73 adjfeedback/admin.py:139 +#: adjfeedback/admin.py msgid "target" msgstr "" -#: adjfeedback/admin.py:74 adjfeedback/admin.py:140 adjfeedback/models.py:236 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" msgstr "" -#: adjfeedback/admin.py:75 adjfeedback/admin.py:141 adjfeedback/models.py:238 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" msgstr "" -#: adjfeedback/admin.py:91 -#, python-format -msgid "%(timestamp)s (version %(version)s)" -msgstr "" - -#: adjfeedback/admin.py:96 +#: adjfeedback/admin.py msgid "Target" msgstr "" -#: adjfeedback/admin.py:97 adjfeedback/admin.py:162 +#: adjfeedback/admin.py msgid "Source" msgstr "الدرجات " -#: adjfeedback/admin.py:98 +#: adjfeedback/admin.py msgid "Feedback timestamp and version" msgstr "" -#: adjfeedback/admin.py:180 +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." @@ -61,7 +61,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." @@ -72,7 +72,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjfeedback/admin.py:205 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." @@ -83,7 +83,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjfeedback/admin.py:215 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." @@ -94,7 +94,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjfeedback/admin.py:225 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." @@ -105,399 +105,398 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" msgstr "التعذية الراجعة من المحكم " -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "chair" msgstr "رئيس الجلسة" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "solo" msgstr "فردي " -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "panellist" msgstr "محكم" -#: adjfeedback/forms.py:29 +#: adjfeedback/forms.py msgid "trainee" msgstr "محكم متدرب " #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:57 +#: adjfeedback/forms.py msgid "Yes" msgstr "نعم " #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:59 +#: adjfeedback/forms.py msgid "No" msgstr "لا" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:74 adjfeedback/forms.py:83 +#: adjfeedback/forms.py msgid "This field is required." msgstr "هذه الخانة مطلوبة " -#: adjfeedback/forms.py:164 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" msgstr "مجموع الدرجات ( %(min)d= سيء ; %(max)d = أفضل )*" -#: adjfeedback/forms.py:176 +#: adjfeedback/forms.py msgid "Ignored" msgstr "" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:228 adjfeedback/forms.py:291 +#: adjfeedback/forms.py msgid "Submitted - " msgstr "" #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:229 adjfeedback/forms.py:296 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" msgstr "" -#: adjfeedback/forms.py:252 adjfeedback/forms.py:326 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "-- المحكمين --" -#: adjfeedback/forms.py:269 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" msgstr "راي الحكم حول التغذية الراجعة " -#: adjfeedback/forms.py:293 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "" -#: adjfeedback/forms.py:299 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" msgstr "" -#: adjfeedback/forms.py:301 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" msgstr "" -#: adjfeedback/forms.py:392 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" msgstr "" -#: adjfeedback/forms.py:397 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" msgstr "" -#: adjfeedback/forms.py:410 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." msgstr "" -#: adjfeedback/forms.py:416 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" msgstr "" -#: adjfeedback/forms.py:424 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" msgstr "" -#: adjfeedback/forms.py:439 +#: adjfeedback/forms.py msgid "There were no scores to import." msgstr "" -#: adjfeedback/models.py:13 adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator" msgstr "محكم " -#: adjfeedback/models.py:16 +#: adjfeedback/models.py msgid "round" msgstr "جولة" -#: adjfeedback/models.py:17 adjfeedback/models.py:232 +#: adjfeedback/models.py msgid "score" msgstr "درجة " -#: adjfeedback/models.py:18 +#: adjfeedback/models.py msgid "timestamp" msgstr "الزمن " -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score history" msgstr "" -#: adjfeedback/models.py:22 +#: adjfeedback/models.py msgid "adjudicator base score histories" msgstr "" -#: adjfeedback/models.py:30 +#: adjfeedback/models.py msgid "question" msgstr "سؤال " -#: adjfeedback/models.py:32 +#: adjfeedback/models.py msgid "feedback" msgstr "تغذية راجعة " -#: adjfeedback/models.py:45 adjfeedback/models.py:55 adjfeedback/models.py:65 -#: adjfeedback/models.py:74 +#: adjfeedback/models.py msgid "answer" msgstr "جواب " -#: adjfeedback/models.py:48 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" msgstr "اجابة الحكم حول التغذية الراجعة " -#: adjfeedback/models.py:49 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" msgstr "اجابة الحكم حول التغذية الراجعة " -#: adjfeedback/models.py:58 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" msgstr "اجابة الحكم حول التغذية الراجعة " -#: adjfeedback/models.py:59 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" msgstr "اجابة الحكم حول التغذية الراجعة " -#: adjfeedback/models.py:68 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" msgstr "اجابة الحكم العامة حول التغذية الراجعة" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" msgstr "اجابة الحكم العامة حول التغذية الراجعة " -#: adjfeedback/models.py:77 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" msgstr "اجابة الحكم حول التغذية الراجعة " -#: adjfeedback/models.py:78 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" msgstr "اجابة الحكم حول التغذية الراجعة " -#: adjfeedback/models.py:86 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answer" msgstr "" -#: adjfeedback/models.py:87 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answers" msgstr "" -#: adjfeedback/models.py:106 +#: adjfeedback/models.py msgid "checkbox" msgstr "صندوق الاختيارات " -#: adjfeedback/models.py:107 +#: adjfeedback/models.py msgid "yes/no (dropdown)" msgstr "نعم/لا" -#: adjfeedback/models.py:108 +#: adjfeedback/models.py msgid "integer (textbox)" msgstr "" -#: adjfeedback/models.py:109 +#: adjfeedback/models.py msgid "integer scale" msgstr "" -#: adjfeedback/models.py:110 +#: adjfeedback/models.py msgid "float" msgstr "عام " -#: adjfeedback/models.py:111 adjfeedback/models.py:145 +#: adjfeedback/models.py msgid "text" msgstr "نص" -#: adjfeedback/models.py:112 +#: adjfeedback/models.py msgid "long text" msgstr "نص طويل " -#: adjfeedback/models.py:113 +#: adjfeedback/models.py msgid "select one" msgstr "اختيار واحد" -#: adjfeedback/models.py:114 +#: adjfeedback/models.py msgid "select multiple" msgstr "اختيار متعدد " -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "tournament" msgstr "دوري" -#: adjfeedback/models.py:143 +#: adjfeedback/models.py msgid "sequence number" msgstr "الرقم المتسلسل " -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" msgstr "السؤال المعروض على المشاركين، على سبيل المثال، \"هل توافق على القرار؟\"" -#: adjfeedback/models.py:148 +#: adjfeedback/models.py msgid "name" msgstr "اسم " -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" msgstr "سؤال قصير على سبيل المثال \" موافق على القرار \" " -#: adjfeedback/models.py:151 +#: adjfeedback/models.py msgid "reference" msgstr "مرجع " -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" msgstr "" -#: adjfeedback/models.py:155 +#: adjfeedback/models.py msgid "from adjudicator" msgstr "من الحكم " -#: adjfeedback/models.py:156 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" msgstr "سؤال حكم عن الاخر" -#: adjfeedback/models.py:158 +#: adjfeedback/models.py msgid "from team" msgstr "من الفريق " -#: adjfeedback/models.py:159 +#: adjfeedback/models.py msgid "Teams should be asked this question" msgstr "سؤال الفريق " -#: adjfeedback/models.py:162 +#: adjfeedback/models.py msgid "answer type" msgstr "نوع الجواب " -#: adjfeedback/models.py:164 +#: adjfeedback/models.py msgid "required" msgstr "مطلوب " -#: adjfeedback/models.py:165 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" msgstr "" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "minimum value" msgstr "أقل قيمة" -#: adjfeedback/models.py:168 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "الحد الأدنى للقيمة المسموح بها للحقول الرقمية" -#: adjfeedback/models.py:170 +#: adjfeedback/models.py msgid "maximum value" msgstr "أعلى قيمة" -#: adjfeedback/models.py:171 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "الحد الأعلى للقيمة المسموح بها للحقول الرقمية" -#: adjfeedback/models.py:176 +#: adjfeedback/models.py msgid "choices" msgstr "أختيارات " -#: adjfeedback/models.py:177 +#: adjfeedback/models.py msgid "Permissible choices for select one/multiple fields (ignored for other fields)" msgstr "" -#: adjfeedback/models.py:182 +#: adjfeedback/models.py msgid "adjudicator feedback question" msgstr "سؤال المحكم في التغذية الراجعة" -#: adjfeedback/models.py:183 +#: adjfeedback/models.py msgid "adjudicator feedback questions" msgstr "جواب للتغذية الراجعة من المحكم " -#: adjfeedback/models.py:241 adjfeedback/views.py:768 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" msgstr "" -#: adjfeedback/models.py:242 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" msgstr "" -#: adjfeedback/models.py:246 +#: adjfeedback/models.py msgid "adjudicator feedback" msgstr "التعذية الراجعة من المحكم " -#: adjfeedback/models.py:247 +#: adjfeedback/models.py msgid "adjudicator feedbacks" msgstr "التغذيات الراجعة من المحكم " -#: adjfeedback/models.py:307 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." msgstr "" -#: adjfeedback/models.py:310 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." msgstr "" -#: adjfeedback/models.py:312 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" msgstr "" -#: adjfeedback/models.py:314 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." msgstr "الحكم لم يشاهد هذه المناظرة " -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" msgstr "" -#: adjfeedback/tables.py:35 +#: adjfeedback/tables.py msgid "N/A" msgstr "" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py msgid "Current weighted score" msgstr "" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." msgstr "" -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" msgstr "" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" msgstr "" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" msgstr "" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:84 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:93 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." msgstr "" -#: adjfeedback/tables.py:97 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" msgstr "" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Feedback Per Round" msgstr "" -#: adjfeedback/tables.py:107 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" msgstr "" -#: adjfeedback/tables.py:125 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" @@ -508,220 +507,218 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjfeedback/tables.py:148 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" msgstr "" -#: adjfeedback/tables.py:172 +#: adjfeedback/tables.py msgid "View Missing Feedback" msgstr "" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" msgstr "" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" msgstr "أدخل التغذية الراجعة" -#: adjfeedback/templates/enter_feedback.html:9 -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format msgid "Add Feedback from %(name)s" msgstr "أضف تغذية راجعة من %(name)s" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" msgstr "أضف تغذية راجعة " -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" msgstr "" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." msgstr "" -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." msgstr "" -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." msgstr "هناك بعض المشاكل في التغذية الراجعة يرجى مراجعتهم " -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "عند إرسال هذا النموذج سيتم تخزين عنوان IP الخاص بك لأغراض التسجيل." -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" msgstr "" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" msgstr "" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" msgstr "" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" msgstr "" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" msgstr "" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" msgstr "" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" msgstr "" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." msgstr "" -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." msgstr "" -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "On %(adjudicator)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" +msgid "Received as %(as_type)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" msgstr "" -#: adjfeedback/templates/feedback_card.html:88 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:93 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:103 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" msgstr "" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" msgstr "" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" msgstr "" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" msgstr "" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." msgstr "" -#: adjfeedback/templates/feedback_overview.html:18 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:22 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:30 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." @@ -732,7 +729,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." @@ -743,29 +740,29 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" msgstr "تجربة" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" msgstr "تغذية راجعة " -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" msgstr "مجال الدرجات " -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." @@ -776,7 +773,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." @@ -787,7 +784,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" @@ -798,11 +795,11 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." msgstr "ويتم تخصيص جميع المحكمين الذين يحصلون على درجة عالية بما فيه الكفاية للتصويت، " -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" @@ -813,12 +810,12 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" @@ -829,77 +826,76 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" msgstr "" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" msgstr "" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" msgstr "" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" msgstr "" -#: adjfeedback/views.py:118 +#: adjfeedback/views.py msgid "Feedback Overview" msgstr "" -#: adjfeedback/views.py:142 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" msgstr "" -#: adjfeedback/views.py:153 adjfeedback/views.py:177 adjfeedback/views.py:192 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" @@ -910,90 +906,90 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjfeedback/views.py:156 adjfeedback/views.py:182 adjfeedback/views.py:197 +#: adjfeedback/views.py msgid "Feedbacks" msgstr "" -#: adjfeedback/views.py:163 +#: adjfeedback/views.py msgid "Find Feedback" msgstr "" -#: adjfeedback/views.py:171 adjfeedback/views.py:710 +#: adjfeedback/views.py msgid "From Teams" msgstr "" -#: adjfeedback/views.py:186 adjfeedback/views.py:704 +#: adjfeedback/views.py msgid "From Adjudicators" msgstr "" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "Latest Feedback" msgstr "" -#: adjfeedback/views.py:272 +#: adjfeedback/views.py msgid "(30 most recent)" msgstr "" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "Only Comments" msgstr "" -#: adjfeedback/views.py:283 +#: adjfeedback/views.py msgid "(250 most recent)" msgstr "" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "Important Feedback" msgstr "" -#: adjfeedback/views.py:295 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" msgstr "" -#: adjfeedback/views.py:362 +#: adjfeedback/views.py msgid "A Team" msgstr "فريق" -#: adjfeedback/views.py:367 +#: adjfeedback/views.py msgid "Team" msgstr "فريق" -#: adjfeedback/views.py:374 adjfeedback/views.py:391 +#: adjfeedback/views.py msgid "Institution" msgstr "مؤسسة" -#: adjfeedback/views.py:377 +#: adjfeedback/views.py msgid "An Adjudicator" msgstr "محكم" -#: adjfeedback/views.py:384 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "محكم " -#: adjfeedback/views.py:511 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." msgstr "" -#: adjfeedback/views.py:541 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." msgstr "" -#: adjfeedback/views.py:625 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" msgstr "" -#: adjfeedback/views.py:648 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." msgstr "" -#: adjfeedback/views.py:675 +#: adjfeedback/views.py msgid "Feedback Progress" msgstr "" -#: adjfeedback/views.py:696 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" @@ -1004,24 +1000,24 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: adjfeedback/views.py:741 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." msgstr "" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "confirmed" msgstr "مؤكد" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "un-confirmed" msgstr "" -#: adjfeedback/views.py:768 +#: adjfeedback/views.py msgid "un-ignored" msgstr "" -#: adjfeedback/views.py:804 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." diff --git a/tabbycat/availability/locale/ar/LC_MESSAGES/django.po b/tabbycat/availability/locale/ar/LC_MESSAGES/django.po index ee4e7da9a20..36185c48e55 100644 --- a/tabbycat/availability/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:07\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -17,93 +17,85 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" msgstr "الوفرة" -#: availability/models.py:15 +#: availability/models.py msgid "content type" msgstr "نوع المحتوى" -#: availability/models.py:16 +#: availability/models.py msgid "object id" msgstr "ID الموضوع " -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "جولة" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" msgstr "الجولة المتوفرة" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" msgstr "الجولة المتوفرة" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" msgstr "" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" msgstr "" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" msgstr "" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" msgstr "عرض القرعة " -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" msgstr "" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" msgstr "إنشاء قرعة" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." msgstr "" -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." msgstr "" -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." msgstr "" -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " @@ -114,98 +106,98 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " msgstr "" -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" msgstr "" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." msgstr "" -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" msgstr "تحديد الكل" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" msgstr "عدم تحديد الكل" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" msgstr "تسجيلات الدخول" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" msgstr "تحقق من جميع المتأهلين" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" msgstr "النسخ من السابق" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" msgstr "حفظ ما تم تحديده" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "الفرق" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "المحكمين" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" msgstr "قاعات المناظرة" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" msgstr "" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" msgstr "" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." msgstr "" -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." msgstr "" -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" msgstr "" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." @@ -216,7 +208,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." @@ -227,7 +219,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" @@ -238,7 +230,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." @@ -249,7 +241,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" @@ -260,12 +252,12 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." @@ -276,11 +268,11 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" msgstr "" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." @@ -291,7 +283,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" @@ -302,7 +294,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." @@ -313,7 +305,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" @@ -324,7 +316,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." @@ -335,12 +327,12 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." @@ -351,16 +343,16 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" msgstr "" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" msgstr "لا توجد فرق تتناظر" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" @@ -372,7 +364,7 @@ msgstr[4] "" msgstr[5] "" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" @@ -386,7 +378,7 @@ msgstr[5] "" #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" @@ -398,7 +390,7 @@ msgstr[4] "" msgstr[5] "" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" @@ -409,60 +401,60 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" msgstr "مفعل " -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" msgstr "مفعل في %(prev_round)s" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" msgstr "" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" msgstr "الفريق المتوفر " -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" msgstr "الحكم المتوفر " -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" msgstr "قاعة المناظرة المتوفرة" -#: availability/views.py:260 +#: availability/views.py msgid "Room" msgstr "قاعة" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" msgstr "اعرض الإسم (للقرعة)" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" msgstr "الفئات" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" msgstr "الأولوية" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." msgstr "" -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." msgstr "دخول جميع الفرق ، الحكام ، القاعات" -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." msgstr "تسجيل دخول المحكمين المتأهلين" -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." msgstr "دخول جميع الفرق ، الحكام ، القاعات من الجولة السابقة" diff --git a/tabbycat/breakqual/locale/ar/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/ar/LC_MESSAGES/django.po index 40ae5494341..20cb7f752f5 100644 --- a/tabbycat/breakqual/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:07\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -17,508 +17,510 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" msgstr "شروط التأهل" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "" +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "بطولة" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "اسم " -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" msgstr "الاسم المطلوب عرضه، على سبيل المثال، \"إسل\"" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" msgstr "اختصار" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" msgstr "أختصار " -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" msgstr "الرقم المتسلسل " -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" msgstr "الترتيب الذي يتم به عرض الفئات " -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" msgstr "حجم فئة المتأهلين " -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" msgstr "عدد الفرق المتأهلة في هذه الفئة " -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" msgstr "بصورة عامة" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" msgstr "صحيح إذا كانت معظم الفرق مؤهلة لهذه الفئة، غير صحيح في أي حالة أخرى " -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" msgstr "الأولوية" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" msgstr "إذا تأهل الفريق إلى فئات متعددة، تكون الأولوية للأرقام ذات الأولوية الأعلى؛ يمكن للفرق أن تتأهل إلى فئات متعددة فقط إذا كان لجميعها نفس الأولوية" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" msgstr "" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" msgstr "اساسي" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" msgstr "قاعدة" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" msgstr "قاعدة كيفية حساب درجات التأهل" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" msgstr "الفرق المتأهله" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" msgstr "فئة التأهل" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" msgstr "فئات التأهل" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "فريق" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "الترتيب" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" msgstr "ترتيب التأهل" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" msgstr "محدود" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" msgstr "غير مؤهل" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" msgstr "تأهل مختلف" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" msgstr "غير متأهل" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" msgstr "خسر القرعة" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" msgstr "إنسحب" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" msgstr "اعادة وضع العلامات" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" msgstr "" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" msgstr "الفرق المتأهلة " -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" msgstr "" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." msgstr "" -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." msgstr "" -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" msgstr "" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." msgstr "" -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" msgstr "التأهل" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " msgstr "" -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" msgstr "" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" msgstr "%(category)s تأهل" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " msgstr "" -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" msgstr "الفرق المستحقة" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" msgstr "متأهل" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" msgstr "مستبعد" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" msgstr "مؤهل" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" msgstr "حدد الفرق ك \" مستحقة\"" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" msgstr "إنشئ التأهل" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" msgstr "عرض الفرق المتأهلة " -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" msgstr "معروض على الجميع " -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" msgstr "غير معروض للجميع" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" msgstr "مسح و اعادة جيمع التأهلات " -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" msgstr "إنشئ تأهل لجميع الفرق و الفئات" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." msgstr "" -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." msgstr "" -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." msgstr "" -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." msgstr "" -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." msgstr "" -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." msgstr "" -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" msgstr "حفظ الدرجات و تحديث التأهل " -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" msgstr "حفظ الدرجات و تحديث %(category)sالتأهل" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" msgstr "" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" msgstr "" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" msgstr "الحكام المتأهلين" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." msgstr "" -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" msgstr "تأهل " -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "المحكمين" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" msgstr "النهائي " -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" msgstr "ج،أف" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "نصف النهائي " -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "ن.ن" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "الدور الربع النهائي " -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "ر.ن" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" msgstr "" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" msgstr "" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" msgstr "" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" msgstr "" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" msgstr "" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" msgstr "" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" msgstr "" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" msgstr "" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" msgstr "" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" msgstr "" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" msgstr "" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" msgstr "" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" msgstr "" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" msgstr "" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" msgstr "" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" msgstr "الجولات المتأهلة غير معروفة " -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" msgstr "رابط " -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" msgstr "" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" msgstr "مستحق ل" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" msgstr "تعديل الملاحظات" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." msgstr "" -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." msgstr "تم حفظ تعديل درجات الفريق المتأهله " -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" msgstr "الحكام المتأهلون" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" msgstr "إستحقاق التأهل" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" diff --git a/tabbycat/draw/locale/ar/LC_MESSAGES/django.po b/tabbycat/draw/locale/ar/LC_MESSAGES/django.po index e3f179b30fb..022ff359002 100644 --- a/tabbycat/draw/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:27\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -17,23 +17,7 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" -msgstr[4] "" -msgstr[5] "" - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "تحديد حالة الدرجات %(status)s" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." @@ -44,7 +28,11 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: draw/admin.py:93 +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." @@ -55,406 +43,406 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: draw/apps.py:7 draw/views.py:452 draw/views.py:455 +#: draw/apps.py draw/views.py msgid "Draw" msgstr "قرعة " -#: draw/generator/__init__.py:14 +#: draw/generator/__init__.py msgid "Too many swaps" msgstr "التبديلات أكثر من اللازم" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" msgstr "من الاول إلى الاخير ( تاريخ ) " -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" msgstr "من الاول إلى الاخير ( مؤسسة ) " -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" msgstr "من الأول للأخير (لحفظ المساحة)" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "Bubble up (history)" msgstr "تصاعدي (تاريخ)" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble down (history)" msgstr "تنازلي (تاريخ)" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble up (institution)" msgstr "تصاعدي (مؤسسة)" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble down (institution)" msgstr "تنازلي (مؤسسة)" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" msgstr "تصاعدي (لحفظ المساحة)" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" msgstr "تنازلي (لحفظ المساحة)" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Can't bubble up/down" msgstr "لا يمكن ترتيب حسب / تصاعدي أو تنازلي" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Pull-up team" msgstr "الفرق الصاعدة" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." msgstr "%d مناظرة لم توضع درجاتها في الجولات السابقة " -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." msgstr "" -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." msgstr "" -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." msgstr "" -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." msgstr "" -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." msgstr "" -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." msgstr "" -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." msgstr "لا توجد فرق لإجراء القرعة" -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." msgstr "" -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." msgstr "" -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." msgstr "" -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." msgstr "" -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." msgstr "موقف الفريق لم يحدد موالاة أو معارضة " -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." msgstr "" -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." msgstr "" -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" msgstr "" -#: draw/manager.py:276 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." msgstr "" -#: draw/models.py:29 draw/models.py:35 +#: draw/models.py msgid "none" msgstr "لا يوجد" -#: draw/models.py:30 +#: draw/models.py msgid "postponed" msgstr "مؤجل" -#: draw/models.py:31 draw/models.py:36 +#: draw/models.py msgid "draft" msgstr "مسودة" -#: draw/models.py:32 draw/models.py:37 +#: draw/models.py msgid "confirmed" msgstr "مؤكد" -#: draw/models.py:43 draw/models.py:375 +#: draw/models.py msgid "round" msgstr "جولة" -#: draw/models.py:45 +#: draw/models.py msgid "room" msgstr "" -#: draw/models.py:48 +#: draw/models.py msgid "bracket" msgstr "جدول" -#: draw/models.py:50 +#: draw/models.py msgid "room rank" msgstr "مستوى القاعة" -#: draw/models.py:56 +#: draw/models.py msgid "importance" msgstr "أهمية" -#: draw/models.py:58 +#: draw/models.py msgid "result status" msgstr "حالة النتيجة" -#: draw/models.py:60 +#: draw/models.py msgid "sides confirmed" msgstr "المواقف مؤكدة " -#: draw/models.py:61 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." msgstr "اذا لم يتم تحديد المواقف، تكون مواقف الفرق حسب أماكنهم " -#: draw/models.py:64 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "مناظرة" -#: draw/models.py:65 +#: draw/models.py msgid "debates" msgstr "مناظرات" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:84 draw/models.py:109 +#: draw/models.py msgid " (sides not confirmed)" msgstr "(لم يتم تأكيد موقفي الفريقين)" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:96 draw/models.py:113 +#: draw/models.py msgid " vs " msgstr "ضد" -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" msgstr "موالاة" -#: draw/models.py:263 +#: draw/models.py msgid "negative" msgstr "معارضة" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" msgstr "موالاة أولى " -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" msgstr "معارضة أولى" -#: draw/models.py:266 +#: draw/models.py msgid "closing government" msgstr "موالاة ثانية" -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" msgstr "معارضة ثانية " -#: draw/models.py:274 draw/models.py:377 +#: draw/models.py msgid "team" msgstr "فريق" -#: draw/models.py:276 draw/models.py:379 +#: draw/models.py msgid "side" msgstr "موقف" -#: draw/models.py:281 +#: draw/models.py msgid "debate team" msgstr "فريق المناظرة" -#: draw/models.py:282 +#: draw/models.py msgid "debate teams" msgstr "فرق المناظرة" -#: draw/models.py:303 +#: draw/models.py #, python-format msgid "placed %(place)s" msgstr "" -#: draw/models.py:305 draw/models.py:312 +#: draw/models.py msgid "result unknown" msgstr "النتيجة غير معروفة " -#: draw/models.py:308 +#: draw/models.py msgid "won" msgstr "" -#: draw/models.py:310 +#: draw/models.py msgid "lost" msgstr "" -#: draw/models.py:383 +#: draw/models.py msgid "team side allocation" msgstr "تخصيص مواقف الفرق " -#: draw/models.py:384 +#: draw/models.py msgid "team side allocations" msgstr "تخصيصات مواقف الفرق " #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" msgstr "" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" msgstr "الفريق%(num)d" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" msgstr "مستوى المناظرة في هذه القاعة " -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" msgstr "جدول هذه المناظرة " -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" msgstr "تاريخ المواقف
    \n" "( عدد المرات التي كان الفريق في هذا الموقف قبل هذه الجولة )" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" msgstr "" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" msgstr "ترتيب من متوازن إلى غير متوازن" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" msgstr "ترتيب من غير متوازن إلى متوازن" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" msgstr "أفضل تحسن ممكن ، غير مستقر " -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" msgstr "كان غير مستقر و مازال غير مستقر " -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" msgstr "" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" msgstr "الموقف" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" msgstr "موقف هذه الجولة " -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" msgstr "قبل" -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" msgstr "تاريخ المواقف قبل هذه الجولة " -#: draw/tables.py:292 +#: draw/tables.py msgid "After" msgstr "بعد " -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" msgstr "تاريخ المواقف بعد هذه الجولة " -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" msgstr "التكلفة " -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" msgstr "تكلفة الموقف " -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" msgstr "الحالة" -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" msgstr "الفرق المسموح لها دخول هذه المناظرة لها هذا العدد من الدرجات
    " -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" msgstr "تاريخ الموقف قبل هذه الجولة" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" msgstr "المواقف" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" msgstr "تكلفة الموقف " -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" msgstr "توقف ! اقرأ هذا أولا ! حذف هذا الفريق قدد يسبب تعطيل البرنامج ! " -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." msgstr "يطلب البرنامج أن يكون لجميع المتناظرين بالضبط فريقا واحدا للمناظرة لكل موقف، ولا فرق مناظرة أخرى، في جميع الأوقات. إذا قمت بحذف أي فريق . يجب عليك إما استبدال كل فريق بفريق جديد في نفس المناظرة . أو حذف قاعات المناظرة المرتبطة بها. إذا لم تقوم بهذا بشكل صحيح، العديد من الصفحات سوف تتأثر ." -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." msgstr "وهذا مصدر شائع للأخطاء. إذا حدث لك، تحقق من المناظرة (تحت قسم رسم في هذه المنطقة تحرير قاعدة البيانات) والتأكد من أن كل منهم لديه موالاة واحدة و معارضة واحدة تماما." -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" msgstr "تحذير!!! إذا كنت تقوم بتحرير فرق المناظرة ، وقراءة هذا أولا!" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." msgstr "يطلب البرنامج أن يكون لجميع المناظرات بالضبط فريقا واحدا للمناظرة لكل موقف، ولا فرق مناظرة أخرى، في جميع الأوقات. إذا قمت بحذف أي فريق . يجب عليك إما استبداله بفريق جديد في نفس المناظرة . أو حذف قاعات المناظرة المرتبطة بها. إذا لم تقم بذلك بشكل صحيح، العديد من الصفحات سوف تتأثر الكثير من الصفحات." -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." @@ -465,7 +453,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" @@ -476,7 +464,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." @@ -487,7 +475,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." @@ -498,7 +486,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" @@ -509,7 +497,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." @@ -520,7 +508,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" @@ -531,7 +519,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." @@ -542,7 +530,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" @@ -553,7 +541,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." @@ -564,81 +552,77 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" msgstr "الوفرة" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" msgstr "تعديل المواقف / التوزيع " -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" msgstr "إعادة القرعة" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" msgstr "تفاصيل القرعة" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" msgstr "موازنة المواقف " -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" msgstr "عرض القرعة" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" msgstr "" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" msgstr "عرض القرعة " -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" msgstr "المناظرة تبدأ %(start_time)s" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" msgstr "إضافة وقت ابتداء المناظرة" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" msgstr "ادخل النتائج " -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" msgstr "تفاصيل القضية " -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." @@ -649,310 +633,339 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "تعديل القضايا" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" msgstr "یتطلب التوجيه / التوجیھات التي سیتم تحدیدھا کجزء من النتيجة . تأكد من أنها تضاف قبل ادخال النتائج !" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" -msgstr "ادخل القضايا" - -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." -msgstr "تم إضافة نص قضية المناظرة" - -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "تعديل القضية" - -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." -msgstr "يجب إضافة قضية إذا أردت عرضه على القاعة أو طباعته على أوراق الاقتراع (باستخدام الروابط أدناه) أو لعرضه (لاحقا) على صفحة القضايا العامة." +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." +msgstr "" -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "أضف نص القضية" +msgid_plural "Enter motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" msgstr "أعلن القرعة" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." msgstr "ليس ثمة شيء للإعلان، لم تقم بإجراء القرعة بعد." -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." msgstr "قرعةهذه الجولة غسر مؤكدة . تأكد من القرعة قبل الإعلان." -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" msgstr "عدم إعلان القرعة للجمهور." -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." msgstr "" -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" msgstr "" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" msgstr "إعلان القرعة للجمهور." -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "بطولتك تسمح بإدخال النتائج وتسليم التغذية الراجعة من قبل الحكام عبر الرابط الخاص بهم. لا بد من إعلان القرعة ليتمكنوا من فعل ذلك." -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "بطولتك تسمح بإدخال النتائج وتسليمها من قبل الحكام عبر الرابط الخاص بهم. لا بد من إعلان القرعة ليتمكنوا من فعل ذلك." -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." msgstr "بطولتك تسمح بتسليم التغذية الراجعة من قبل الحكام عبر الرابط الخاص بهم. لا بد من إعلان القرعة ليتمكنوا من فعل ذلك." -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." msgstr "إعدادات البطولة تسمح بأن تٌرى من قبل العموم. إعلان القرعة سيظهرها على الصفحة العمومية." -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." msgstr "لا تحتوي أنظمة البطولة على صفحة قرعة عامة أو تعليقات / بطاقات النتائج . ليس هناك سبب لعرض القرعة." -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "أعلن القضايا" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "أعلن القضايا للجمهور." +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "عدم إعلان القضايا للجمهور." +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" -#: draw/templates/draw_display_admin.html:200 +#: draw/templates/draw_display_admin.html msgid "Release Motion" -msgstr "أعلن القضية" - -#: draw/templates/draw_display_admin.html:201 -msgid "Release motion to public" -msgstr "اعلن القضية للجمهور." +msgid_plural "Release Motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" -#: draw/templates/draw_display_admin.html:202 -msgid "Unrelease motion to public" -msgstr "عدم إعلان القضية للجمهور." +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." msgstr "" -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." msgstr "يسمح في اهذه البطولة ب التصويت على القضايا/ و تسليم إستمارات الدرجات من المحكمين، تأكد من إعلان القضايا قبل انتهاء المناظرة ليتمكنوا من التصويت" -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "هذه البطولة مبرمجة على إعلان القضايا في موقع عام، الرجاء إعلان القضايا ليتمكن البنامج من عرضها في الموقع العام." - -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "هذه البطولة غير مبرمجة على إعلان القضايا في موقع عام، لا داعي لإعلان القضايا." +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "" +msgid_plural "Motions have been released publicly." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" msgstr "" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" msgstr "" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" msgstr "" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" msgstr "" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" msgstr "" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" msgstr "" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" msgstr "" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" msgstr "" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" msgstr "" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" msgstr "سرعة التمرير" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" msgstr "سريع" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" msgstr "متوسط " -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" msgstr "بطئ" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" msgstr "بطيء جداً " -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" msgstr "حجم النص" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" msgstr "صغير جدا " -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" msgstr "صغير" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" msgstr "كبير" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" msgstr "ضخم" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" msgstr "توقف التمرير" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." msgstr "قرعة ـ%(round)s لم يعلن عنها بعد" -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." msgstr "" -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" msgstr "تعيين المحكمين" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." msgstr "" -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" msgstr "تعيين الحكام " -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" msgstr "تعديل تعيين الحكم " -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" msgstr "تعيين القاعة" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" msgstr "تعيين القاعات" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" msgstr "تعديل تعيين القاعة" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" msgstr "" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." @@ -963,21 +976,20 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" msgstr "" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" msgstr "" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" msgstr "تعيين الموقف" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." @@ -988,92 +1000,92 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" msgstr "" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" msgstr "" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." msgstr "" -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." msgstr "" -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " msgstr "" -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." msgstr "" -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." msgstr "" -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." msgstr "" -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." msgstr "لا يوجد الية لموازنة عدد مواقف الفرق في الجولات الإقصائية" -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." msgstr "تقارير موازنة المواقف متاحة فقط لبطولات البرلماني البريطاني." -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." msgstr "لا يتم حساب تقارير موازنة الموقف للجولة الاولى ." -#: draw/views.py:68 draw/views.py:483 +#: draw/views.py msgid "No debates in this round" msgstr "" -#: draw/views.py:76 +#: draw/views.py #, python-format msgid "Draw for %(round)s" msgstr "قرعة ل%(round)s" -#: draw/views.py:78 +#: draw/views.py msgid "Draws for Current Rounds" msgstr "" -#: draw/views.py:82 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" msgstr "" -#: draw/views.py:86 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" msgstr "" -#: draw/views.py:124 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" @@ -1084,127 +1096,127 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: draw/views.py:171 +#: draw/views.py msgid "The draw for this round hasn't been released." msgstr "" -#: draw/views.py:224 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" msgstr "جميع المناظرات لجميع جولات بطولة %(tournament)s" -#: draw/views.py:382 +#: draw/views.py msgid "Adjudicator Assignments" msgstr "" -#: draw/views.py:404 +#: draw/views.py msgid "Position" msgstr "" -#: draw/views.py:424 +#: draw/views.py msgid "Team Pairings" msgstr "" -#: draw/views.py:447 +#: draw/views.py msgid "No Draw" msgstr "لا قرعة " -#: draw/views.py:449 +#: draw/views.py msgid "Draft Draw" msgstr "مسودة قرعة" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:541 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" msgstr "%(side)s مستوى التأهل" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:546 +#: draw/views.py msgid "BR" msgstr "م.ت" -#: draw/views.py:571 +#: draw/views.py msgid "Draw with Details" msgstr "قرعة مع التفاصيل" -#: draw/views.py:579 +#: draw/views.py msgid "Position Balance Report" msgstr "تقرير موازنة الموقف " -#: draw/views.py:590 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" msgstr "" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:593 +#: draw/views.py msgid " (i.e., Shannon entropy)" msgstr "" -#: draw/views.py:623 +#: draw/views.py msgid "Teams with position imbalances" msgstr "الفرق غير متوازنة المواقف" -#: draw/views.py:624 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" msgstr "لا يوجد فرق غير متوازنة المواقف" -#: draw/views.py:627 +#: draw/views.py msgid "Annotated draw" msgstr "قرعة موضحة" -#: draw/views.py:658 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" msgstr "لا يمكنك انشاء قرعة لـ%(round)s، هناك قرعة سابقة" -#: draw/views.py:666 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " msgstr "

    لا يمكن أنشاء قرعة للاسباب التالية : %(message)s

    \n" "

    الرجاء قم بحل المشكلة لأنشاء القرعة

    " -#: draw/views.py:674 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " msgstr "" -#: draw/views.py:683 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " msgstr "

    لم يتم ترتيب الفرق بسبب الخلل التالي : %(message)s

    \n" "

    هناك مستخدم يقوم بترتيب الفرق في الوقت الحالي ، و هذا يمنع الحصول على القرعة

    " -#: draw/views.py:699 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "لم يتم تخصيص الأماكن بشكل تلقائي نظرا لوجود قيود على مكان واحد أو أكثر. يجب تشغيل تخصيصات المكان بعد تخصيص المحكمين." -#: draw/views.py:726 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "مسح القرعة ، يمكنك الان اعادة انشاء أخرى " -#: draw/views.py:746 +#: draw/views.py msgid "Released the draw." msgstr "اعلنت القرعة" -#: draw/views.py:761 +#: draw/views.py msgid "Unreleased the draw." msgstr "القرعة لم تعلن." -#: draw/views.py:774 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." msgstr "" -#: draw/views.py:793 +#: draw/views.py msgid "Side Pre-Allocations" msgstr "تعيين الموقف الأولي" -#: draw/views.py:826 +#: draw/views.py msgid "Edit Matchups" msgstr "" diff --git a/tabbycat/importer/locale/ar/LC_MESSAGES/django.po b/tabbycat/importer/locale/ar/LC_MESSAGES/django.po index 4a44e952ecc..a44b21caa0e 100644 --- a/tabbycat/importer/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:51\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -17,26 +17,26 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" msgstr "سطر%(lineno)d:%(message)s" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" msgstr "هذا السطر من البيانات (للمنتخب%(institution)s) لا تحتوي على رمز" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" msgstr "هذا السطر من البيانات (للمنتخب%(institution)s) تجاوز فيه عدد الخانات." -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." msgstr "لم تكن هناك مؤسسات لاستيرادها." -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." @@ -47,11 +47,11 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." msgstr "لا توجد قاعات للتوريد" -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." @@ -62,88 +62,88 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" msgstr "أسماء المتحدثين" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" msgstr "البريد الالكتروني للمتحدثين" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" msgstr "اختياري ، مفيد لتضمينها في حالة توزيع عناوين URL خاصة ، وإدراجها بنفس ترتيب أسماء المتحدثين" -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" msgstr "الاسم (باستثناء اسم المؤسسة)" -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" msgstr "وضع اسم الفريق مع اسم المؤسسة ؟" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" msgstr "لا تقم بوضع اسم المنتخب (قم باختيار \"وضع اسم الفريق مع اسم المنتخب ؟\" بدل ذلك)" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" msgstr "(لا ينطبق على الفرق المستقلة)" -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" msgstr "اسم متحدث واحد في كل سطر" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" msgstr "يمكن تفرقتهم بإضافة سطر جديد أو (TAB) أو فاصلة" -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "متحدث%d" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" msgstr "المتحدث %d d@example.edu" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." msgstr "لا بد من وجود متحدث واحد على الأقل" -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." msgstr "%(email)s بريد الاكتروني غير صحيح" -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." msgstr "عدد الايميلات أكثر من عدد المتحدثين." -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." msgstr "لا بد أن تكون أسماء الفرق للمنتخب الواحد مختلفة في البطولة. الرجاء تعديل خطأ التكرار" -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" msgstr "تصنيف" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." msgstr "لا بد أن تكون هذه القيمة بين %(min)dو%(max)d." -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" msgstr "مستقل (دون مؤسسة)" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "%(name)s(%(code)s)" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." @@ -154,7 +154,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." @@ -165,243 +165,232 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: importer/forms.py:396 +#: importer/forms.py msgid "XML" msgstr "" -#: importer/forms.py:397 +#: importer/forms.py msgid "The Debate XML archive to parse" msgstr "" -#: importer/templates/archive_export_index.html:4 -#: importer/templates/archive_export_index.html:5 +#: importer/templates/archive_export_index.html msgid "Export Tournament Archive" msgstr "" -#: importer/templates/archive_export_index.html:9 +#: importer/templates/archive_export_index.html msgid "Tournaments can be exported in an XML format for use outside Tabbycat." msgstr "" -#: importer/templates/archive_export_index.html:17 +#: importer/templates/archive_export_index.html msgid "Export all data" msgstr "" -#: importer/templates/archive_importer.html:6 -#: importer/templates/archive_importer.html:18 +#: importer/templates/archive_importer.html msgctxt "page title" msgid "Import Tournament Archive" msgstr "" -#: importer/templates/archive_importer.html:19 +#: importer/templates/archive_importer.html msgid "This form will create a tournament with the data provided as a Debate XML format." msgstr "" -#: importer/templates/archive_importer.html:24 +#: importer/templates/archive_importer.html msgid "Import" msgstr "" -#: importer/templates/archive_importer.html:25 +#: importer/templates/archive_importer.html msgid "Go back to the site home page" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html msgctxt "page title" msgid "Add Adjudicators" msgstr "إضافة محكمين" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" msgstr "(خطوة%(step)sمن%(count)s)" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" msgstr "الخطوة السابقة" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" msgstr "%(institution)s" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" msgstr "محكمين مستقلين" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" msgstr "حفظ كافة المحكمين" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." msgstr "لا بد من إضافة منتخبات قبل إضافة محكمين" -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." msgstr "حدد عدد المحكمين الجدد لكل منتخب. في الخطوة القادمة يمكنك تحديد أسمائهم ودرجاتهم." -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" msgstr "الخطوة التالية" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" msgstr "المورد البسيط" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." msgstr "هنالك طرق متعددة لتوريد البيانات في Tabbycat. يعتمد الأنسب لك حسب حجم البطولة وخلفيتك التقنية. هذا المورد البسيط هو الأسهل في الاستخدام ويعمل جيدا مع بطولات ذوي الأحجام الصغيرة والمتوسطة." -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" msgstr "إضافة منتخبات" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" msgstr "إضافة فرق" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" msgstr "إضافة محكمين" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" msgstr "إضافة قاعات المناظرة" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" msgstr "إضافة/تعديل فئات القاعات" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" msgstr "إضافة/تعديل قيود القاعات" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:66 +#: importer/templates/simple_import_index.html msgid "Add/Edit Break Categories" msgstr "" -#: importer/templates/simple_import_index.html:70 +#: importer/templates/simple_import_index.html msgid "Add/Edit Speaker Categories" msgstr "" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" msgstr "إضافة منتخبات" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" msgstr "حفظ جميع المنتخبات" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" msgstr "هنالك مشاكل مع البينات الموجودة على هذا النموذج:" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" msgstr "الخطوة التالية" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" msgstr "إضافة فرق" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" msgstr "فرق من%(institution)s" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" msgstr "فرق مستقلة" -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" msgstr "حفظ كافة الفرق" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." msgstr "لا بد من إضافة منتخب قبل إضافة فرق" -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." msgstr "حدد عدد الفرق الجديدة لكل منتخب. في الخطوة القادمة ستستطيع تحديد أسماء الفرق والمتحدثينز" -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" msgstr "إضافة قاعات المناظرة" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." msgstr "" -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" msgstr "حفظ جميع القاعات" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" msgstr "" -#: importer/views.py:108 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." @@ -412,7 +401,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: importer/views.py:129 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." @@ -423,7 +412,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: importer/views.py:188 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." @@ -434,12 +423,12 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: importer/views.py:209 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "محكم رقم %(number)d" -#: importer/views.py:214 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." @@ -450,15 +439,15 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: importer/views.py:230 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " msgstr "" -#: importer/views.py:238 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." msgstr "" -#: importer/views.py:256 +#: importer/views.py msgid "Tournament archive has been imported." msgstr "" diff --git a/tabbycat/locale/ar/LC_MESSAGES/django.po b/tabbycat/locale/ar/LC_MESSAGES/django.po index 4e2f8cf7732..e4a6fd66d6d 100644 --- a/tabbycat/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -17,321 +17,328 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" msgstr "" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:105 +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" msgstr "تسجيلات الدخول" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" msgstr "" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" msgstr "" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" msgstr "" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." msgstr "" -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" msgstr "" -#: checkins/models.py:37 +#: checkins/models.py msgid "" msgstr "" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" msgstr "" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" msgstr "" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" msgstr "" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "مناظرة" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" msgstr "" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" msgstr "" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" msgstr "" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" msgstr "" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" msgstr "" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" msgstr "" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "بطولة" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" msgstr "" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" msgstr "" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" msgstr "" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." msgstr "" -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." msgstr "" -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." msgstr "" -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" msgstr "" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" msgstr "" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" msgstr "" -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." msgstr "" -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." msgstr "" -#: checkins/views.py:30 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" msgstr "" -#: checkins/views.py:63 +#: checkins/views.py msgid "People's Check-In Statuses" msgstr "" -#: checkins/views.py:120 +#: checkins/views.py msgid "Rooms' Check-In Statuses" msgstr "" -#: checkins/views.py:169 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" msgstr "" -#: checkins/views.py:176 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" msgstr "متحدثين" -#: checkins/views.py:181 templates/nav/public_nav.html:145 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "المحكمين" -#: checkins/views.py:186 +#: checkins/views.py msgid "Rooms" msgstr "قاعات المناظرة" -#: checkins/views.py:227 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" msgstr "" -#: checkins/views.py:234 +#: checkins/views.py msgid "Identifiers" msgstr "" -#: checkins/views.py:272 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." msgstr "" -#: checkins/views.py:280 +#: checkins/views.py msgid "You have revoked your check-in." msgstr "" -#: checkins/views.py:282 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." msgstr "" -#: checkins/views.py:286 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." msgstr "" -#: checkins/views.py:293 +#: checkins/views.py msgid "You are now checked in." msgstr "" -#: settings/core.py:67 +#: settings/core.py msgid "Arabic" msgstr "عربي" -#: settings/core.py:68 +#: settings/core.py msgid "Bengali" msgstr "" -#: settings/core.py:69 +#: settings/core.py msgid "English" msgstr "إنجليزي " -#: settings/core.py:70 +#: settings/core.py msgid "Spanish" msgstr "أسباني " -#: settings/core.py:71 +#: settings/core.py msgid "French" msgstr "فرنسي " -#: settings/core.py:72 +#: settings/core.py msgid "Indonesian" msgstr "" -#: settings/core.py:73 +#: settings/core.py msgid "Japanese" msgstr "اليابانيّة" -#: settings/core.py:74 +#: settings/core.py msgid "Malay" msgstr "" -#: settings/core.py:75 +#: settings/core.py msgid "Portuguese" msgstr "البرتغاليّة" -#: settings/core.py:76 +#: settings/core.py msgid "Russian" msgstr "الروسيّة" -#: settings/core.py:77 +#: settings/core.py msgid "Simplified Chinese" msgstr "" -#: settings/core.py:78 +#: settings/core.py msgid "Translation" msgstr "" -#: templates/admin/delete_protected_message.html:4 +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." msgstr "تحتاج إلى مسح الموضوع أولا " -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." msgstr "" -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." msgstr "" -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" msgstr "عنوان النموذج" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" msgstr "العنوان الفرعي" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" msgstr "تسجيل دخول" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" msgstr "نسيت كلمة المرور " -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." msgstr "حدث خطأ في حقل واحد أو أكثر" -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" msgstr "حفظ وإضافة المزيد" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" msgstr "تم الرفض (403)" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." msgstr "" -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." @@ -342,619 +349,612 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: templates/errors/legacy_sendgrid_warning.html:11 +#: templates/errors/legacy_sendgrid_warning.html msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." msgstr "" -#: templates/errors/public_403.html:14 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." msgstr "" -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." msgstr "" -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." msgstr "" -#: templates/footer.html:24 +#: templates/footer.html #, python-format msgid "For a tournament of this size, we suggest a donation of $%(amount)s." msgstr "" -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." msgstr "إعلم المزيد حول التبرع" -#: templates/footer.html:31 +#: templates/footer.html msgid "Donations to Tabbycat from individuals or organisations are much appreciated." msgstr "" -#: templates/footer.html:39 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" msgstr "" -#: templates/footer.html:41 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." msgstr "" -#: templates/footer.html:50 +#: templates/footer.html msgid "Our Organisation" msgstr "" -#: templates/footer.html:52 -msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." msgstr "" -#: templates/footer.html:65 +#: templates/footer.html msgid "Language" msgstr "لُغَة" -#: templates/footer.html:72 +#: templates/footer.html msgid "GitHub" msgstr "" -#: templates/footer.html:78 +#: templates/footer.html msgid "Documentation" msgstr "البيانات " -#: templates/footer.html:84 +#: templates/footer.html msgid "Support" msgstr "" -#: templates/footer.html:90 +#: templates/footer.html msgid "Facebook" msgstr "فيس بوك" -#: templates/footer.html:96 +#: templates/footer.html msgid "Set Up A Copy" msgstr "إعداد نسخة " -#: templates/footer.html:110 +#: templates/footer.html msgid "Change Language" msgstr "تغيير اللغة " -#: templates/footer.html:127 +#: templates/footer.html msgid "Use this language" msgstr "استخدم هذه اللغة " -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" msgstr "" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" msgstr "الصفحة الرئيسية " -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" msgstr "بطولة جديدة " -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" msgstr "تعديل قاعدة البيانات " -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" msgstr "" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" msgstr "" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" msgstr "" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" msgstr "عرض " -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" msgstr "" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" msgstr "" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" msgstr "" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:175 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" msgstr "" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" msgstr "رابط خاص " -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" msgstr "" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" msgstr "" -#: templates/nav/admin_nav.html:97 +#: templates/nav/admin_nav.html msgid "Export XML" msgstr "" -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:160 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" msgstr "الجانبين" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" msgstr "" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" msgstr "" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" msgstr "التغذية الراجعة " -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" msgstr "" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" msgstr "" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" msgstr "" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" msgstr "" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" msgstr "" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" msgstr "" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" msgstr "أضف تغذية راجعة " -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" msgstr "" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:165 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" msgstr "التقسيمات " -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" msgstr "" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "الفرق" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" msgstr "" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" msgstr "" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" msgstr "%(category)sالمتحدثين " -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" msgstr "" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:155 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "قضايا" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:170 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" msgstr "تقسيمات" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" msgstr "التأهل" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" msgstr "" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" msgstr "" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" msgstr "" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" msgstr "تسجيل الخروج" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" msgstr "إدخال النتيجة " -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:211 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" msgstr "إدخال التغذية الراجعة " -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" msgstr "" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:180 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" msgstr "" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" msgstr "" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" msgstr "" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" msgstr "عرض / طباعة " -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" msgstr "تصنيف النتائج حسب الفرق" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" msgstr "تصنيف النتائج حسب المتحدثين" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" msgstr "نتائج خطابات الرد" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" msgstr "نتائج المحكمين " -#: templates/nav/public_nav.html:53 templates/nav/public_nav.html:62 +#: templates/nav/public_nav.html msgid "Motions Tab" msgstr "نتائج القضايا " -#: templates/nav/public_nav.html:56 +#: templates/nav/public_nav.html msgid "By round" msgstr "" -#: templates/nav/public_nav.html:57 +#: templates/nav/public_nav.html msgid "Globally" msgstr "" -#: templates/nav/public_nav.html:72 +#: templates/nav/public_nav.html msgid "Draws" msgstr "القرعة" -#: templates/nav/public_nav.html:83 +#: templates/nav/public_nav.html msgid "No Draws Available" msgstr "" -#: templates/nav/public_nav.html:91 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" msgstr "قرعة ل%(round)s" -#: templates/nav/public_nav.html:95 +#: templates/nav/public_nav.html msgid "Current Draws" msgstr "" -#: templates/nav/public_nav.html:115 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" msgstr "النتائج" -#: templates/nav/public_nav.html:133 +#: templates/nav/public_nav.html msgid "Break" msgstr "تأهل " -#: templates/nav/public_nav.html:185 +#: templates/nav/public_nav.html msgid "Feedback Progress" msgstr "التغذية الراجعة " -#: templates/nav/public_nav.html:191 templates/nav/public_nav.html:197 +#: templates/nav/public_nav.html msgid "Enter Ballot" msgstr "إدخال التصويت" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" msgstr "الوفرة" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" msgstr "قرعة " -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" msgstr "" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" msgstr "دخول " -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" msgstr "" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" msgstr "" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" msgstr "دخول " -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" msgstr "دخول إلى Tabbycat" -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." msgstr "اسم المستخدم و كلمة المرور لا يتطابقان " -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." msgstr "" -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." msgstr "الرجاء الدخول من خلال هذه الصفحة " -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" msgstr "تغيير كلمة السر" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." msgstr "تم تغيير كلمة السر " -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" msgstr "العودة إلى الصفحة الرئيسية " -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:27 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" msgstr "تغيير كلمة السر " -#: templates/registration/password_change_form.html:16 +#: templates/registration/password_change_form.html #, python-format msgid "API Token: %(api_token)s" msgstr "" -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgid "The API token will allow you to authorize external applications to access the site as staff." msgstr "" -#: templates/registration/password_change_form.html:28 +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." msgstr "الرجاء إدخال كلمة السر القديمة ومن ثم الجديدة" -#: templates/registration/password_change_form.html:33 -#: templates/registration/password_reset_confirm.html:25 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" msgstr "تغيير كلمة السر " -#: templates/registration/password_change_form.html:34 -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" msgstr "ألغاء و العودة إلى الصفحة الرئيسية " -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "تم تغيير كلمة السر " -#: templates/registration/password_reset_complete.html:11 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." msgstr "لقد تم إعادة تنصيب كلمة السر " -#: templates/registration/password_reset_complete.html:14 -#: templates/registration/password_reset_done.html:15 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" msgstr "الذهاب إلى صفحة الدخول " -#: templates/registration/password_reset_confirm.html:4 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" msgstr "إعادة إنشاء كلمة المرور " -#: templates/registration/password_reset_confirm.html:16 -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html msgctxt "page title" msgid "Password Reset" msgstr "إعادة تعيين كلمة السر " -#: templates/registration/password_reset_confirm.html:18 +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" msgstr "الرجاء إدخال كلمة السر ( مرتين ) " -#: templates/registration/password_reset_confirm.html:33 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." msgstr "تم إرسال رابط تغيير كلمة السر . الرجاء تحديث كلمة السر" -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" msgid "Password reset email sent" msgstr "تم إرسال كلمة السر إلى البريد الإلكتروني" -#: templates/registration/password_reset_done.html:11 +#: templates/registration/password_reset_done.html msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." msgstr "" -#: templates/registration/password_reset_done.html:12 +#: templates/registration/password_reset_done.html msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." msgstr "" -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" msgstr "%(user)sمرحبا" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" msgstr "ادخل هذا الرابط لتعيين كلمة السر " -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_form.html:27 +#: templates/registration/password_reset_form.html msgid "Enter your email address below, and we'll email you a password reset link." msgstr "اكتب بريدك الإلكتروني ليتم إرسال رابط تغيير كلمة السر " -#: templates/registration/password_reset_form.html:34 +#: templates/registration/password_reset_form.html msgid "Please enter a valid email address." msgstr "الرجاء إدخال البريد الإلكتروني " -#: templates/registration/password_reset_form.html:39 users/forms.py:10 -#: users/forms.py:25 +#: templates/registration/password_reset_form.html users/forms.py msgid "Email address" msgstr "" -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" msgstr "اعادة كلمة المرور " -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" msgstr "العودة إلى صفحة الدخول " -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" msgstr "تم تغييير كلمة السر ل،%(domain)s" -#: urls.py:102 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" msgstr "مرحبا ، %(user)s — لقد تم تسجل دخولك " -#: urls.py:105 +#: urls.py msgid "Welcome! You just logged in!" msgstr "مرحباً بك " -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." msgstr "" -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." msgstr "" -#: users/templates/admin/auth/delete_user_warning.html:6 +#: users/templates/admin/auth/delete_user_warning.html msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." msgstr "" -#: users/templates/signup.html:4 users/templates/signup.html:5 +#: users/templates/signup.html msgid "Sign-Up" msgstr "" -#: users/templates/signup.html:16 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Administrator Account" msgstr "" -#: users/templates/signup.html:18 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Assistant Account" msgstr "" -#: users/templates/signup.html:25 +#: users/templates/signup.html msgid "Create Account" msgstr "إنشاء حساب " -#: users/views.py:54 +#: users/views.py msgid "You have successfully created a new administrator account." msgstr "" -#: users/views.py:56 +#: users/views.py msgid "You have successfully created a new assistant account." msgstr "" -#: users/views.py:84 +#: users/views.py msgid "Whoops! It looks like someone's already created the first user account. Please log in." msgstr "" -#: users/views.py:92 +#: users/views.py #, python-format msgid "Welcome! You've created an account for %s." msgstr "" diff --git a/tabbycat/motions/locale/ar/LC_MESSAGES/django.po b/tabbycat/motions/locale/ar/LC_MESSAGES/django.po index 3d70619f3f4..f3148f0eb9d 100644 --- a/tabbycat/motions/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -17,149 +17,148 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "قضايا المناظرة" -#: motions/models.py:9 +#: motions/models.py msgid "text" msgstr "نص" -#: motions/models.py:10 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" msgstr "نص القضية كاملا. مثل \"سيجعل هذا المجلس شكل الموز مستقيما\"" -#: motions/models.py:12 +#: motions/models.py msgid "reference" msgstr "معارض " -#: motions/models.py:13 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" msgstr "الرمز المصغر للقضية مثل: \"الموز\"" -#: motions/models.py:15 +#: motions/models.py msgid "info slide" msgstr "شريحة معلوماتية" -#: motions/models.py:16 +#: motions/models.py msgid "The information slide for this topic; if it has one" msgstr "الشريحة المعلوماتية لهذا الموضوع؛ في حال كان يحتوي على واحد" -#: motions/models.py:19 +#: motions/models.py msgid "tournament" msgstr "بطولة" -#: motions/models.py:21 +#: motions/models.py msgid "rounds" msgstr "جولات" -#: motions/models.py:24 motions/models.py:37 motions/models.py:62 +#: motions/models.py msgid "motion" msgstr "نص القضية" -#: motions/models.py:25 +#: motions/models.py msgid "motions" msgstr "قضايا" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" msgstr "فريق مناظرة" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" msgstr "التفضيلات " -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" msgstr "تسليم النتائج" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" msgstr "فريق المناظرة يفضل المواضيع" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" msgstr "المتناظر يفضلون المواضيع " -#: motions/models.py:64 +#: motions/models.py msgid "round" msgstr "جولة" -#: motions/models.py:67 +#: motions/models.py msgid "sequence number" msgstr "رقم التسلسل" -#: motions/models.py:68 +#: motions/models.py msgid "The order in which motions are displayed" msgstr "الترتيب التي يتم فيه عرض القضايا" -#: motions/models.py:73 +#: motions/models.py msgid "round motion" msgstr "" -#: motions/models.py:74 +#: motions/models.py msgid "round motions" msgstr "" -#: motions/statistics.py:86 +#: motions/statistics.py msgid "extremely strong evidence" msgstr "حجج قوية جداً " -#: motions/statistics.py:87 +#: motions/statistics.py msgid "strong evidence" msgstr "حجج قوية " -#: motions/statistics.py:88 +#: motions/statistics.py msgid "moderate evidence" msgstr "حجج عادية " -#: motions/statistics.py:89 +#: motions/statistics.py msgid "weak evidence" msgstr "حجج ضعيفة " -#: motions/statistics.py:90 +#: motions/statistics.py msgid "very weak evidence" msgstr "حجج ضعيفة جدا " -#: motions/statistics.py:91 +#: motions/statistics.py msgid "extremely weak evidence" msgstr "حجج ضعيفة للغاية" -#: motions/statistics.py:114 +#: motions/statistics.py msgid "balance inconclusive" msgstr "لا يوجد توازن " -#: motions/statistics.py:115 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" msgstr "عدد قليل من السرد له قيمة " -#: motions/statistics.py:123 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" msgstr "" -#: motions/statistics.py:124 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." msgstr "" -#: motions/statistics.py:129 +#: motions/statistics.py msgid "probably balanced" msgstr "" -#: motions/statistics.py:130 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." msgstr "" -#: motions/templates/motion_global_statistics.html:22 -#: motions/templates/motion_round_statistics.html:31 -#: motions/templates/public_motions.html:32 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" msgstr "عرض المولاة و المعارضة " -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" @@ -170,7 +169,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" @@ -181,7 +180,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" @@ -192,59 +191,59 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" msgstr "متقدم" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" msgstr "اقصاء" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." msgstr "القضاء " -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" msgstr "لا نتائج لهذه القضية" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" @@ -255,7 +254,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" @@ -266,13 +265,12 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" @@ -283,12 +281,11 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" msgstr "لا يوجد فرق تناظر في هذه القضية " -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" @@ -299,11 +296,11 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" msgstr "لا يوجد فرق قامت بالتصويت لهذه القضية " -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" msgstr[0] "" @@ -313,23 +310,33 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" msgstr "عرض القرعة" -#: motions/templates/motions_edit.html:28 +#: motions/templates/motions_edit.html msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." msgstr "" -#: motions/templates/motions_edit.html:30 +#: motions/templates/motions_edit.html msgid "Reuse Motions from Last Round" msgstr "" -#: motions/templates/motions_edit.html:35 +#: motions/templates/motions_edit.html msgid "Use Existing Motions" msgstr "" -#: motions/templates/motions_edit.html:74 +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" msgstr[0] "" @@ -339,23 +346,23 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "" -#: motions/templates/public_motions.html:41 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." msgstr "لا يوجد قضايا في هذه الجولة " -#: motions/templates/public_motions.html:47 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." msgstr "القضايا التي تم رفضها في هذه الجولة " -#: motions/templates/public_motions.html:52 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." msgstr "القضايا التي تم رفضها في هذه الجولة " -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" @@ -366,7 +373,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" @@ -377,23 +384,23 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." msgstr "لا يوجد قضايا في هذه الجولة " -#: motions/utils.py:11 +#: motions/utils.py msgid "Not all latest ballots list the same motion, so could not be merged." msgstr "" -#: motions/utils.py:29 +#: motions/utils.py msgid "Motion vetos are inconsistent, so could not be merged." msgstr "" -#: motions/views.py:91 +#: motions/views.py msgid "The motion has been saved." msgstr "القضايا التي لم يتم حفظها " -#: motions/views.py:93 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." @@ -404,7 +411,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: motions/views.py:97 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." @@ -415,7 +422,11 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: motions/views.py:140 +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "" + +#: motions/views.py #, python-format msgid "Reused the motion from the previous round." msgid_plural "Reused the %(count)d motions from the previous round." @@ -426,19 +437,31 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: motions/views.py:164 -msgid "Released the motion(s)." -msgstr "قضايا تم رفضها " +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" -#: motions/views.py:171 -msgid "Unreleased the motion(s)." -msgstr "قضايا لم ترفض" +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" -#: motions/views.py:195 +#: motions/views.py msgid "Round Motions" msgstr "" -#: motions/views.py:209 +#: motions/views.py msgid "Motion Statistics" msgstr "إحصائيات القضية" diff --git a/tabbycat/notifications/locale/ar/LC_MESSAGES/django.po b/tabbycat/notifications/locale/ar/LC_MESSAGES/django.po index 0c473ef329a..9140560d082 100644 --- a/tabbycat/notifications/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:15\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -18,366 +18,364 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" msgstr "" -#: notifications/forms.py:12 +#: notifications/forms.py msgid "Recipient email address" msgstr "" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" msgstr "" -#: notifications/forms.py:17 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" msgstr "" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Subject" msgstr "" -#: notifications/forms.py:31 +#: notifications/forms.py msgid "Message" msgstr "" -#: notifications/models.py:11 notifications/models.py:26 +#: notifications/models.py msgid "email" msgstr "" -#: notifications/models.py:12 +#: notifications/models.py msgid "SMS" msgstr "" -#: notifications/models.py:21 +#: notifications/models.py msgid "recipient" msgstr "" -#: notifications/models.py:23 +#: notifications/models.py msgid "method" msgstr "" -#: notifications/models.py:28 notifications/models.py:134 +#: notifications/models.py msgid "context" msgstr "" -#: notifications/models.py:31 +#: notifications/models.py msgid "notification" msgstr "" -#: notifications/models.py:33 notifications/models.py:74 -#: notifications/models.py:130 +#: notifications/models.py msgid "timestamp" msgstr "الزمن " -#: notifications/models.py:36 +#: notifications/models.py msgid "sent message" msgstr "" -#: notifications/models.py:37 +#: notifications/models.py msgid "sent messages" msgstr "" -#: notifications/models.py:58 +#: notifications/models.py msgid "team points" msgstr "" -#: notifications/models.py:59 +#: notifications/models.py msgid "ballot confirmed" msgstr "" -#: notifications/models.py:60 +#: notifications/models.py msgid "feedback URL" msgstr "" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot URL" msgstr "" -#: notifications/models.py:62 +#: notifications/models.py msgid "landing page URL" msgstr "" -#: notifications/models.py:63 +#: notifications/models.py msgid "adjudicator draw released" msgstr "" -#: notifications/models.py:64 +#: notifications/models.py msgid "team registration" msgstr "" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator registration" msgstr "" -#: notifications/models.py:66 +#: notifications/models.py msgid "motion(s) released" msgstr "" -#: notifications/models.py:67 +#: notifications/models.py msgid "team draw released" msgstr "" -#: notifications/models.py:68 +#: notifications/models.py msgid "custom message" msgstr "" -#: notifications/models.py:72 notifications/models.py:132 +#: notifications/models.py msgid "event" msgstr "" -#: notifications/models.py:77 +#: notifications/models.py msgid "tournament" msgstr "بطولة" -#: notifications/models.py:79 +#: notifications/models.py msgid "round" msgstr "جولة" -#: notifications/models.py:82 +#: notifications/models.py msgid "subject template" msgstr "" -#: notifications/models.py:84 +#: notifications/models.py msgid "body template" msgstr "" -#: notifications/models.py:87 +#: notifications/models.py msgid "bulk notification" msgstr "" -#: notifications/models.py:88 +#: notifications/models.py msgid "bulk notifications" msgstr "" -#: notifications/models.py:114 +#: notifications/models.py msgid "Processed" msgstr "" -#: notifications/models.py:115 +#: notifications/models.py msgid "Dropped" msgstr "" -#: notifications/models.py:116 +#: notifications/models.py msgid "Deferred" msgstr "" -#: notifications/models.py:117 +#: notifications/models.py msgid "Delivered" msgstr "" -#: notifications/models.py:118 +#: notifications/models.py msgid "Bounced" msgstr "" -#: notifications/models.py:119 +#: notifications/models.py msgid "Opened" msgstr "" -#: notifications/models.py:120 +#: notifications/models.py msgid "Clicked" msgstr "" -#: notifications/models.py:121 +#: notifications/models.py msgid "Unsubscribed" msgstr "" -#: notifications/models.py:122 +#: notifications/models.py msgid "Marked as spam" msgstr "" -#: notifications/models.py:123 +#: notifications/models.py msgid "Unsubscribed from group" msgstr "" -#: notifications/models.py:124 +#: notifications/models.py msgid "Resubscribed to group" msgstr "" -#: notifications/models.py:128 +#: notifications/models.py msgid "email message" msgstr "" -#: notifications/models.py:137 +#: notifications/models.py msgid "email status" msgstr "" -#: notifications/models.py:138 +#: notifications/models.py msgid "email statuses" msgstr "" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." msgstr "" -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." msgstr "" -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" msgstr "" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." msgstr "" -#: notifications/templates/notifications_nav.html:5 notifications/views.py:75 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" msgstr "" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:29 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" msgstr "" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" msgstr "" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" msgstr "" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." msgstr "" -#: notifications/templates/test_email.html:20 +#: notifications/templates/test_email.html #, python-format msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." msgstr "" -#: notifications/templates/test_email.html:30 +#: notifications/templates/test_email.html msgid "Go back to the site home page" msgstr "" -#: notifications/utils.py:26 +#: notifications/utils.py msgid "the chair" msgstr "" -#: notifications/utils.py:27 +#: notifications/utils.py msgid "the only" msgstr "" -#: notifications/utils.py:28 +#: notifications/utils.py msgid "a panellist" msgstr "" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "a trainee" msgstr "" -#: notifications/utils.py:59 +#: notifications/utils.py msgid "TBA" msgstr "" -#: notifications/utils.py:88 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "" -#: notifications/utils.py:99 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:102 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Win" msgstr "" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Loss" msgstr "" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " msgstr "" -#: notifications/utils.py:183 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " msgstr "" -#: notifications/utils.py:206 notifications/utils.py:207 +#: notifications/utils.py msgid ", " msgstr "" -#: notifications/views.py:47 +#: notifications/views.py #, python-format msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" msgstr "" -#: notifications/views.py:51 +#: notifications/views.py msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." msgstr "" -#: notifications/views.py:60 +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" msgstr "" -#: notifications/views.py:65 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." msgstr "" -#: notifications/views.py:81 +#: notifications/views.py msgid "N/A" msgstr "" -#: notifications/views.py:82 +#: notifications/views.py msgid "Not known" msgstr "" -#: notifications/views.py:87 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" msgstr "" -#: notifications/views.py:133 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "" -#: notifications/views.py:152 +#: notifications/views.py msgid "Timeline" msgstr "" -#: notifications/views.py:162 notifications/views.py:260 +#: notifications/views.py msgid "Participant" msgstr "" -#: notifications/views.py:163 notifications/views.py:265 +#: notifications/views.py msgid "Email address" msgstr "" -#: notifications/views.py:164 +#: notifications/views.py msgid "Status" msgstr "الحالة" -#: notifications/views.py:165 +#: notifications/views.py msgid "Time" msgstr "الوقت" -#: notifications/views.py:204 +#: notifications/views.py msgid "Email Participants" msgstr "" -#: notifications/views.py:233 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." @@ -388,35 +386,35 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: notifications/views.py:239 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." msgstr "" -#: notifications/views.py:250 +#: notifications/views.py msgid "Send Email" msgstr "" -#: notifications/views.py:266 +#: notifications/views.py msgid "Not Provided" msgstr "" -#: notifications/views.py:279 +#: notifications/views.py msgid "Role" msgstr "" -#: notifications/views.py:280 +#: notifications/views.py msgid "Adjudicator" msgstr "محكم " -#: notifications/views.py:280 +#: notifications/views.py msgid "Speaker" msgstr "" -#: notifications/views.py:288 +#: notifications/views.py msgid "Speakers" msgstr "متحدثين" -#: notifications/views.py:289 +#: notifications/views.py msgid "Adjudicators" msgstr "المحكمين" diff --git a/tabbycat/options/locale/ar/LC_MESSAGES/django.po b/tabbycat/options/locale/ar/LC_MESSAGES/django.po index f62b5ad8e95..fdc079b6a9f 100644 --- a/tabbycat/options/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -18,1587 +18,1600 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" msgstr "" -#: options/models.py:13 +#: options/models.py msgid "instance" msgstr "حالة " -#: options/models.py:18 +#: options/models.py msgid "tournament preference" msgstr "تفضيل البطولة" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" msgstr "تفضيلات البطولة " -#: options/preferences.py:19 options/templates/preferences_index.html:53 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" msgstr "قوانين الدرجات" -#: options/preferences.py:25 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" msgstr "أقل درجة مسموحة للخطابات الأساسية" -#: options/preferences.py:28 +#: options/preferences.py msgid "Minimum speaker score" msgstr "الحد الأدنى من درجة المتحدث" -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum speaker score" msgstr "الحد الأعلى من درجة المتحدث" -#: options/preferences.py:35 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" msgstr "أكثر درجة مسموحة للخطابات الأساسية" -#: options/preferences.py:43 +#: options/preferences.py msgid "Speaker score step" msgstr " درجة المتحدث" -#: options/preferences.py:44 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" msgstr "تسجيل درجات المتحدث المسموح بها للخطابات الموضوعية، على سبيل المثال النقاط الكاملة (1) أو نصف النقاط (0.5)" -#: options/preferences.py:52 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" msgstr "أقصى فرق درجات يمكن أن يكون بين فريقين في نفس القاعة (0 يعني لا نهائي)" -#: options/preferences.py:53 +#: options/preferences.py msgid "Maximum margin" msgstr "أقصى فرق للدرجات" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" msgstr "أقل درجة مسموحة لخطاب الرد" -#: options/preferences.py:63 +#: options/preferences.py msgid "Minimum reply score" msgstr "أقل درجة لخطاب رد" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" msgstr "أكثر درجة مسموحة لخطاب الرد" -#: options/preferences.py:72 +#: options/preferences.py msgid "Maximum reply score" msgstr "أكثر درجة خطاب رد" -#: options/preferences.py:80 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" msgstr "تسجيل درجات خطاب الرد ، على سبيل المثال درجة كاملة (1) نصف درجة (0.5) " -#: options/preferences.py:81 +#: options/preferences.py msgid "Reply score step" msgstr "درجة خطاب الرد" -#: options/preferences.py:89 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" msgstr "في حالة تحديده ، يشتمل الهامش الفائز بالفريق على الحكام المعارضين " -#: options/preferences.py:90 +#: options/preferences.py msgid "Margin includes dissenters" msgstr "يشمل الهامش المعارضين" -#: options/preferences.py:98 +#: options/preferences.py msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" msgstr "" -#: options/preferences.py:99 +#: options/preferences.py msgid "Team score includes ghosts" msgstr "" -#: options/preferences.py:106 options/templates/preferences_index.html:58 +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" msgstr "قوانين القرعة" -#: options/preferences.py:112 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" msgstr "سيتم توزيع المحكمين تلقائياً وفقاً لدرجات الأعضاء " -#: options/preferences.py:113 +#: options/preferences.py msgid "Minimum adjudicator score to vote" msgstr "أقل درجة منحت من قبل الحكام " -#: options/preferences.py:121 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" msgstr "" -#: options/preferences.py:122 +#: options/preferences.py msgid "Adjudicator conflict penalty" msgstr "" -#: options/preferences.py:130 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" msgstr "" -#: options/preferences.py:131 +#: options/preferences.py msgid "Adjudicator history penalty" msgstr "" -#: options/preferences.py:139 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" msgstr "" -#: options/preferences.py:140 +#: options/preferences.py msgid "Importance mismatch penalty" msgstr "" -#: options/preferences.py:148 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" msgstr "عقوبة تطبق بطريقة تجنب الصراع للفرق التي تمثل نفس المؤسسة" -#: options/preferences.py:149 +#: options/preferences.py msgid "Team institution penalty" msgstr "عقوبة فريق المؤسسة " -#: options/preferences.py:157 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" msgstr "عقوبة تطبق بطريقة تجنب الصراع للفرق التي تمثل نفس المؤسسة" -#: options/preferences.py:158 +#: options/preferences.py msgid "Team history penalty" msgstr "تاريخ عقوبات الفريق " -#: options/preferences.py:166 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" msgstr "إذا تم التحديد ، سيحاول السحب تجنب إقران الفرق ضد مؤسستهم" -#: options/preferences.py:167 +#: options/preferences.py msgid "Avoid same institution" msgstr "تجنب نفس المؤسسة" -#: options/preferences.py:175 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" msgstr "في حالة تحديده ، سيحاول السحب تجنب مشاركة الفريق مرتين" -#: options/preferences.py:176 +#: options/preferences.py msgid "Avoid team history" msgstr "تجنب تاريخ الفريق " -#: options/preferences.py:184 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "كيف يتم حل الأقواس الفردية (انظر الوثائق لمزيد من التفاصيل)" -#: options/preferences.py:185 +#: options/preferences.py msgid "Odd bracket resolution method" msgstr "إضافة تدقيق " -#: options/preferences.py:189 +#: options/preferences.py msgid "Pull up from top" msgstr "ترتيب من الأعلى " -#: options/preferences.py:190 +#: options/preferences.py msgid "Pull up from bottom" msgstr "ترتيب من الأسفل " -#: options/preferences.py:191 +#: options/preferences.py msgid "Pull up from middle" msgstr "ترتيب من المتوسط " -#: options/preferences.py:192 +#: options/preferences.py msgid "Pull up at random" msgstr "ترتيب عشوائي " -#: options/preferences.py:193 +#: options/preferences.py msgid "Intermediate brackets" msgstr "متوسط المستوى " -#: options/preferences.py:194 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" msgstr "متوسط المستوى مع ترتيب من أعلى إلى أسفل " -#: options/preferences.py:195 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" msgstr "متوسط 1 (الجوانب المخصصة سلفًا)" -#: options/preferences.py:196 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" msgstr "متوسط 2 (الجوانب المخصصة سلفًا)" -#: options/preferences.py:203 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" msgstr "كيف يتم حل الأقواس الفردية (انظر الوثائق لمزيد من التفاصيل)" -#: options/preferences.py:204 +#: options/preferences.py msgid "Side allocations method" msgstr "طريقة توزيع الأطراف" -#: options/preferences.py:208 options/preferences.py:225 +#: options/preferences.py msgid "Random" msgstr "عشوائي " -#: options/preferences.py:209 +#: options/preferences.py msgid "Balance" msgstr "الموازنة " -#: options/preferences.py:210 +#: options/preferences.py msgid "Pre-allocated" msgstr "المخصصة سلفا" -#: options/preferences.py:211 +#: options/preferences.py msgid "Manually enter from ballot" msgstr "إدخال النتائج يدويا ً" -#: options/preferences.py:218 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." msgstr "الجانب : 1 ضد 6 ، 2 ضد 7 ... ، الملف 1 ضد 10 ، 2 ضد 9 .... ، الحكام 1 ضد 2 ، 3 ضد 4 ..." -#: options/preferences.py:219 +#: options/preferences.py msgid "Pairing method" msgstr "طريقة الاقتران" -#: options/preferences.py:223 +#: options/preferences.py msgid "Slide" msgstr "جانب" -#: options/preferences.py:224 +#: options/preferences.py msgid "Fold" msgstr "ملف" -#: options/preferences.py:226 +#: options/preferences.py msgid "Adjacent" msgstr "حكم " -#: options/preferences.py:227 +#: options/preferences.py msgid "Fold top, adjacent rest" msgstr "قمة الطية ، الراحة المجاورة" -#: options/preferences.py:234 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" msgstr "الطريقة المستخدمة لمحاولة تجنب الفرق التي تواجه بعضها عدة مرات أو المؤسسة الخاصة بها (انظر الوثائق لمزيد من التفاصيل)" -#: options/preferences.py:236 +#: options/preferences.py msgid "Conflict avoidance method" msgstr "طريقة تجنب الصراع" -#: options/preferences.py:240 +#: options/preferences.py msgid "Off" msgstr "إيقاف" -#: options/preferences.py:241 +#: options/preferences.py msgid "One-up-one-down" msgstr "واحد- فوق-واحد-اسفل" -#: options/preferences.py:248 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "في حالة استخدام عمليات السحب ، قم بتقييد الفرق التي يمكن سحبها. " -#: options/preferences.py:250 +#: options/preferences.py msgid "Pullup restriction" msgstr "ترتيب المقيد" -#: options/preferences.py:254 +#: options/preferences.py msgid "No restriction" msgstr "ليست مقيدة " -#: options/preferences.py:255 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" msgstr "اختر من بين الفرق التي تم سحبها لأعلى عدد من المرات حتى الآن" -#: options/preferences.py:256 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" msgstr "" -#: options/preferences.py:257 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" msgstr "" -#: options/preferences.py:264 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." msgstr "" -#: options/preferences.py:265 +#: options/preferences.py msgid "BP pullup distribution" msgstr "" -#: options/preferences.py:269 +#: options/preferences.py msgid "Anywhere in bracket" msgstr "" -#: options/preferences.py:270 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" msgstr "" -#: options/preferences.py:277 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" msgstr "" -#: options/preferences.py:278 +#: options/preferences.py msgid "BP position cost" msgstr "تكلفة النظام البريطاني " -#: options/preferences.py:282 +#: options/preferences.py msgid "Simple" msgstr "بسيط " -#: options/preferences.py:283 +#: options/preferences.py msgid "Rényi entropy" msgstr "إدخال النتائج " -#: options/preferences.py:284 +#: options/preferences.py msgid "Population variance" msgstr "" -#: options/preferences.py:291 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." msgstr "" -#: options/preferences.py:294 +#: options/preferences.py msgid "Rényi order (BP)" msgstr "إدخال النتائج ( البرلمان البريطاني )" -#: options/preferences.py:303 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." msgstr "" -#: options/preferences.py:306 +#: options/preferences.py msgid "BP position cost exponent" msgstr "وضع التكلفة الاسس للنظام البريطاني " -#: options/preferences.py:315 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." msgstr "" -#: options/preferences.py:317 +#: options/preferences.py msgid "BP assignment method" msgstr "" -#: options/preferences.py:321 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" msgstr "" -#: options/preferences.py:322 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" msgstr "" -#: options/preferences.py:329 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" msgstr "جعل جميع الحكام متوفرين تلقائيًا لجميع الجولات" -#: options/preferences.py:330 +#: options/preferences.py msgid "Skip adjudicator check-ins" msgstr "تخطي تأكيد الحكم " -#: options/preferences.py:338 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" msgstr "إخفاء قضايا المناظرة في واجهة المستخدم (وعدم تخصيصها)" -#: options/preferences.py:339 +#: options/preferences.py msgid "No panellist adjudicators" msgstr "لا يوجد حكم من أعضاء الفريق " -#: options/preferences.py:347 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" msgstr "إخفاء مواقف المتدربين في واجهة المستخدم (وعدم تخصيصها)" -#: options/preferences.py:348 +#: options/preferences.py msgid "No trainee adjudicators" msgstr "لا يوجد محكم مدرب " -#: options/preferences.py:355 options/templates/preferences_index.html:73 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" msgstr "التغذية الراجعة " -#: options/preferences.py:361 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" msgstr "أقل درجة محتملة من الحكم " -#: options/preferences.py:362 +#: options/preferences.py msgid "Minimum adjudicator score" msgstr "أقل درجة من الحكم " -#: options/preferences.py:370 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" msgstr "أعلى درجة محتملة من الحكم " -#: options/preferences.py:371 +#: options/preferences.py msgid "Maximum adjudicator score" msgstr "أعلى درجة من الحكم " -#: options/preferences.py:379 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" msgstr "" -#: options/preferences.py:380 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" msgstr "" -#: options/preferences.py:384 +#: options/preferences.py msgid "Chairs on panellists and trainees" msgstr "رئيس الجلسة من قائمة المدربين" -#: options/preferences.py:385 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" msgstr "" -#: options/preferences.py:386 +#: options/preferences.py msgid "Panellists and trainees on chairs, vice-versa" msgstr "" -#: options/preferences.py:387 +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" msgstr "جميع الحكام (بالإضافة إلى المدربين ) " -#: options/preferences.py:394 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "" -#: options/preferences.py:395 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" msgstr "تستخدم للإبلاغ عن الخيارات المتاحة في نماذج التعليقات للفرق (سواء على الإنترنت أو المطبوعة) والتقدم في التغذية الراجعة ؛ سيتم استخدام هذا الخيار ، على سبيل المثال ، UADC" -#: options/preferences.py:399 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" msgstr "تعليمات شفهية فقط (مسموح بأعضاء لجنة التصويت )" -#: options/preferences.py:400 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" msgstr "جميع الحكام (بالاضافة إلى المدربين ) " -#: options/preferences.py:407 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" msgstr "عرض التغذية الراجغة الغير المتوقعة في صفحات المشاركين" -#: options/preferences.py:408 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" msgstr "يعرض التغذية الراجعة الغير متوقعة مع رمز علامة استفهام. فقط ذات الصلة إذا كان كل من المشاركين و التغذية الراجعة متطابقين " -#: options/preferences.py:416 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" msgstr "عرض إذا كان المحكم متدرب ( غير معتمد ) " -#: options/preferences.py:417 +#: options/preferences.py msgid "Show unaccredited" msgstr "إظهار غير معتمد" -#: options/preferences.py:425 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" msgstr "أي نص توضيحي يجب أن يتم تقديمة كنموذج للتغذية الراجعة " -#: options/preferences.py:426 +#: options/preferences.py msgid "Feedback introduction/explanation" msgstr "تقديم التغذية الراجعة / الشرح" -#: options/preferences.py:435 options/templates/preferences_index.html:63 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" msgstr "قوانين المناظرة" -#: options/preferences.py:441 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" msgstr "نموذج فريقين أو البرلمان البريطاني " -#: options/preferences.py:442 +#: options/preferences.py msgid "Teams in debate" msgstr "الفريق من المناظرة " -#: options/preferences.py:446 +#: options/preferences.py msgid "Two-team format" msgstr "نموذج فريقين " -#: options/preferences.py:447 +#: options/preferences.py msgid "British Parliamentary (four teams)" msgstr "البرلمان البريطاني ( أربع فرق ) " -#: options/preferences.py:454 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:455 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" msgstr "" -#: options/preferences.py:459 options/preferences.py:472 +#: options/preferences.py msgid "One ballot per voting adjudicator" msgstr "بطاقة تصوير لكل حكم " -#: options/preferences.py:460 options/preferences.py:473 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" msgstr "الاتفاق بالإجماع ( نتيجة واحد لكل مناظرة ) " -#: options/preferences.py:467 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." msgstr "ما إذا كانت اللجان ستقوم بإجراء اقتراع واحد أو ورقة اقتراع واحدة لإجراء مناقشة أثناء جولات الإقصاء. ملاحظة: يجب ان يستخدام النظام البريطاني لكل المناظرات ." -#: options/preferences.py:468 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" msgstr "" -#: options/preferences.py:480 +#: options/preferences.py msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." msgstr "" -#: options/preferences.py:481 +#: options/preferences.py msgid "Winner Declaration in ballot(s)" msgstr "" -#: options/preferences.py:485 +#: options/preferences.py msgid "Do not require separate winner selection" msgstr "" -#: options/preferences.py:486 +#: options/preferences.py msgid "Require separate winner selection as a check on correct scores" msgstr "" -#: options/preferences.py:487 +#: options/preferences.py msgid "Require winner selection to break tied-point debates" msgstr "" -#: options/preferences.py:488 +#: options/preferences.py msgid "Require winner selection, overriding scores" msgstr "" -#: options/preferences.py:495 +#: options/preferences.py msgid "When ballots should ask for speaker scores." msgstr "" -#: options/preferences.py:496 +#: options/preferences.py msgid "Require speaker scores" msgstr "" -#: options/preferences.py:500 +#: options/preferences.py msgid "Always require speaker scores" msgstr "" -#: options/preferences.py:501 +#: options/preferences.py msgid "Only require speaker scores in preliminary rounds" msgstr "" -#: options/preferences.py:502 +#: options/preferences.py msgid "Never require speaker scores" msgstr "" -#: options/preferences.py:509 +#: options/preferences.py msgid "How many substantive speakers on a team" msgstr "كم متحدث ثابت في الفريق " -#: options/preferences.py:510 +#: options/preferences.py msgid "Substantive speakers" msgstr "المتحدث الثابت " -#: options/preferences.py:518 +#: options/preferences.py msgid "What to call the teams" msgstr "ماذا يسمى الفرق " -#: options/preferences.py:519 +#: options/preferences.py msgid "Side names" msgstr "اسم الجانب " -#: options/preferences.py:528 +#: options/preferences.py msgid "Whether this style features scored reply speeches" msgstr "ما إذا كان هذا النمط يحتوي على خطابات رد " -#: options/preferences.py:529 +#: options/preferences.py msgid "Reply scores" msgstr "رد الدرجات " -#: options/preferences.py:537 +#: options/preferences.py msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" msgstr "" -#: options/preferences.py:538 +#: options/preferences.py msgid "Require reply speaker to have given a substantive speech" msgstr "" -#: options/preferences.py:545 options/templates/preferences_index.html:68 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "التقسيمات " -#: options/preferences.py:551 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" msgstr "" -#: options/preferences.py:552 +#: options/preferences.py msgid "Speeches missable for standings eligibility" msgstr "" -#: options/preferences.py:560 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" msgstr "" -#: options/preferences.py:561 +#: options/preferences.py msgid "Replies missable for standings eligibility" msgstr "" -#: options/preferences.py:569 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" msgstr "" -#: options/preferences.py:570 +#: options/preferences.py msgid "Team standings precedence" msgstr "ترتيب الأسبقية للفريق" -#: options/preferences.py:586 options/preferences.py:621 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" msgstr "لا يمكن إدراج المقاييس التالية مرتين%(duplicates)s" -#: options/preferences.py:592 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" msgstr "" -#: options/preferences.py:593 +#: options/preferences.py msgid "Team standings extra metrics" msgstr "ترتيب الفرق الحالي" -#: options/preferences.py:604 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" msgstr "" -#: options/preferences.py:605 +#: options/preferences.py msgid "Speaker standings precedence" msgstr "" -#: options/preferences.py:627 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" msgstr "" -#: options/preferences.py:628 +#: options/preferences.py msgid "Speaker standings extra metrics" msgstr "" -#: options/preferences.py:638 options/templates/preferences_index.html:89 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" msgstr "إعلان التاب " -#: options/preferences.py:644 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." msgstr "العرض العام لتاب المتحدثين بعد هذه البطولة " -#: options/preferences.py:645 +#: options/preferences.py msgid "Release team tab to public" msgstr "إعلان الفرق من التاب للجمهور" -#: options/preferences.py:653 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." msgstr "إظهار النتائج فقط لأعلى المتحدثين X في علامة التبويب العامة (لتعيين 0 لإظهار جميع المستجيبين)." -#: options/preferences.py:654 +#: options/preferences.py msgid "Top teams cutoff" msgstr "فرق المداخلات" -#: options/preferences.py:662 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." msgstr "العرض العام لتاب المتحدثين بعد هذه البطولة " -#: options/preferences.py:663 +#: options/preferences.py msgid "Release speaker tab to public" msgstr "إعلان المتحدثين من التاب للجمهور " -#: options/preferences.py:671 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." msgstr "إظهار النتائج فقط لأعلى المتحدثين X في علامة التبويب العامة (لتعيين 0 لإظهار جميع المستجيبين)." -#: options/preferences.py:672 +#: options/preferences.py msgid "Top speakers cutoff" msgstr "أعلى مداخلات " -#: options/preferences.py:680 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." msgstr "العرض العام لتاب المتحدثين بعد هذه البطولة " -#: options/preferences.py:681 +#: options/preferences.py msgid "Release replies tab to public" msgstr "إعلان المداخلات من التاب إلى الجمهور " -#: options/preferences.py:689 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." msgstr "إظهار النتائج فقط لأعلى المستجيبين X في علامة التبويب العامة (لتعيين 0 لإظهار جميع المستجيبين)." -#: options/preferences.py:690 +#: options/preferences.py msgid "Top replies cutoff" msgstr "أعلى مداخلة " -#: options/preferences.py:716 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." msgstr "تمكن العرض العام لجميع الاقتراحات ومعلومات الفوز / الخسارة / الاختيار. ويشمل ذلك جميع القضايا — ما إذا تم وضع علامة عليها كمحرر أم لا. معد للاستخدام بعد البطولة." -#: options/preferences.py:719 +#: options/preferences.py msgid "Release motions tab to public" msgstr "إعلان القضية للجمهور من التاب ." -#: options/preferences.py:727 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" msgstr "العرض العام لتاب المتحدثين بعد هذه البطولة " -#: options/preferences.py:728 +#: options/preferences.py msgid "Release adjudicator tab to public" msgstr "إعلان الحكام للجمهور من التاب ." -#: options/preferences.py:736 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" msgstr "ماذا ( لو تم اعلان ) الحكام من التاب " -#: options/preferences.py:737 +#: options/preferences.py msgid "Adjudicator tab displays" msgstr "تاب المحكمين لا يعمل " -#: options/preferences.py:741 +#: options/preferences.py msgid "Only shows base score" msgstr "" -#: options/preferences.py:742 +#: options/preferences.py msgid "Only shows final score" msgstr "عرض النتيجة الأخيرة فقط" -#: options/preferences.py:743 +#: options/preferences.py msgid "Shows base, final, and per-round scores" msgstr "" -#: options/preferences.py:750 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." msgstr "" -#: options/preferences.py:751 +#: options/preferences.py msgid "Release ballots to public" msgstr "" -#: options/preferences.py:759 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" msgstr "" -#: options/preferences.py:760 +#: options/preferences.py msgid "Release all round results to public" msgstr "" -#: options/preferences.py:768 +#: options/preferences.py msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." msgstr "" -#: options/preferences.py:769 +#: options/preferences.py msgid "Release ballots through private URLs" msgstr "" -#: options/preferences.py:776 options/templates/preferences_index.html:94 +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" msgstr "إعدادات إدخال البيانات" -#: options/preferences.py:782 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" msgstr "" -#: options/preferences.py:783 +#: options/preferences.py msgid "Ballot submissions from adjudicators" msgstr "" -#: options/preferences.py:787 options/preferences.py:801 +#: options/preferences.py msgid "Disabled (tab staff only)" msgstr "تعطيل ( تاب العمال فقط )" -#: options/preferences.py:788 options/preferences.py:802 +#: options/preferences.py msgid "Use private URLs" msgstr "استخدم الرابط الخاص " -#: options/preferences.py:789 options/preferences.py:803 +#: options/preferences.py msgid "Use publicly accessible form" msgstr "" -#: options/preferences.py:796 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" msgstr "" -#: options/preferences.py:797 +#: options/preferences.py msgid "Feedback submissions from participants" msgstr "اعتماد التغذية الراجعة من المشركين " -#: options/preferences.py:810 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" msgstr "في حالة تحديده ، يجب على المستخدمين إدخال كلمة مرور عند إرسال التغذية الراجعة و النتيجة " -#: options/preferences.py:811 +#: options/preferences.py msgid "Require password for submission" msgstr "طلب كلمة المرور للاعتماد " -#: options/preferences.py:819 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" msgstr "" -#: options/preferences.py:820 +#: options/preferences.py msgid "Password for public submission" msgstr "كلمة السر للاعتماد العام " -#: options/preferences.py:828 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" msgstr "" -#: options/preferences.py:829 +#: options/preferences.py msgid "Bypass double checking" msgstr "" -#: options/preferences.py:837 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." msgstr "" -#: options/preferences.py:838 +#: options/preferences.py msgid "Enforce blind confirmations" msgstr "" -#: options/preferences.py:846 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." msgstr "إذا كان بإمكان المساعدين الوصول إلى الصفحات التي يمكن أن تكشف عن الحركات قبل اعلانها على العامة (هذه الصفحات مفيدة لعرض الرسومات / الاقتراحات للجمهور ولطباعة النتائج )." -#: options/preferences.py:849 +#: options/preferences.py msgid "Assistant user access" msgstr "" -#: options/preferences.py:854 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" msgstr "جميع المناطق ( النتائج ، القرعة ، القضايا ) " -#: options/preferences.py:855 +#: options/preferences.py msgid "Just results entry and draw display" msgstr "إدخال النتائج و عرض القرعة " -#: options/preferences.py:856 +#: options/preferences.py msgid "Only results entry" msgstr "إدخال النتائج فقط" -#: options/preferences.py:862 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." msgstr "" -#: options/preferences.py:863 +#: options/preferences.py msgid "Participant self-checkin" msgstr "" -#: options/preferences.py:871 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" msgstr "" -#: options/preferences.py:874 +#: options/preferences.py msgid "Check-In Window (People)" msgstr "" -#: options/preferences.py:880 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" msgstr "" -#: options/preferences.py:883 +#: options/preferences.py msgid "Check-In Window (Rooms)" msgstr "" -#: options/preferences.py:889 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" msgstr "" -#: options/preferences.py:890 +#: options/preferences.py msgid "Ballot Digit Checks" msgstr "" -#: options/preferences.py:898 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:899 +#: options/preferences.py msgid "Score return location" msgstr "العودة إلى الدرجات " -#: options/preferences.py:907 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:908 +#: options/preferences.py msgid "Feedback return location" msgstr "العودة إلى موقع التغذية الراجعة " -#: options/preferences.py:916 +#: options/preferences.py msgid "Lets debates have their status as postponed, as to not block draw generation." msgstr "" -#: options/preferences.py:917 +#: options/preferences.py msgid "Enable postponements" msgstr "" -#: options/preferences.py:925 +#: options/preferences.py msgid "Have each voting adjudicator submit a separate ballot." msgstr "" -#: options/preferences.py:926 +#: options/preferences.py msgid "Individual voting ballots" msgstr "" -#: options/preferences.py:933 options/templates/preferences_index.html:99 +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" msgstr "الميزات العامة" -#: options/preferences.py:939 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" msgstr "" -#: options/preferences.py:940 +#: options/preferences.py msgid "Enable public view of participants list" msgstr "" -#: options/preferences.py:948 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" msgstr "" -#: options/preferences.py:949 +#: options/preferences.py msgid "Enable public view of institutions list" msgstr "" -#: options/preferences.py:957 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" msgstr "" -#: options/preferences.py:958 +#: options/preferences.py msgid "Enable public view of diversity info" msgstr "" -#: options/preferences.py:966 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." msgstr "" -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of the checkin statuses" msgstr "" -#: options/preferences.py:977 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" msgstr "" -#: options/preferences.py:978 +#: options/preferences.py msgid "Show break categories on participants page" msgstr "" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" msgstr "" -#: options/preferences.py:987 +#: options/preferences.py msgid "Show pre-allocated sides to public" msgstr "" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing released draws" msgstr "" -#: options/preferences.py:996 +#: options/preferences.py msgid "Enable public view of draw" msgstr "" -#: options/preferences.py:1000 +#: options/preferences.py msgid "Disabled" msgstr "" -#: options/preferences.py:1001 +#: options/preferences.py msgid "Show a single page for the current round's draw" msgstr "" -#: options/preferences.py:1002 +#: options/preferences.py msgid "Show individual pages for all released draws" msgstr "" -#: options/preferences.py:1009 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" msgstr "" -#: options/preferences.py:1010 +#: options/preferences.py msgid "Enable public view of results" msgstr "" -#: options/preferences.py:1018 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" msgstr "" -#: options/preferences.py:1019 +#: options/preferences.py msgid "Enable public view of motions" msgstr "" -#: options/preferences.py:1027 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" msgstr "" -#: options/preferences.py:1028 +#: options/preferences.py msgid "Enable public view of team standings" msgstr "" -#: options/preferences.py:1036 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" msgstr "" -#: options/preferences.py:1037 +#: options/preferences.py msgid "Enable public record pages" msgstr "" -#: options/preferences.py:1045 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1046 +#: options/preferences.py msgid "Release team breaks to public" msgstr "" -#: options/preferences.py:1054 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1055 +#: options/preferences.py msgid "Release adjudicators break to public" msgstr "" -#: options/preferences.py:1063 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" msgstr "" -#: options/preferences.py:1064 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" msgstr "" -#: options/preferences.py:1072 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." msgstr "" -#: options/preferences.py:1073 +#: options/preferences.py msgid "Tournament staff" msgstr "" -#: options/preferences.py:1083 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" msgstr "" -#: options/preferences.py:1084 +#: options/preferences.py msgid "Welcome message" msgstr "رسالة الترحيب" -#: options/preferences.py:1093 options/templates/preferences_index.html:104 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" msgstr "إعدادات واجهة المستخدم" -#: options/preferences.py:1099 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" msgstr "" -#: options/preferences.py:1100 +#: options/preferences.py msgid "Show splitting adjudicators" msgstr "" -#: options/preferences.py:1108 +#: options/preferences.py msgid "Whether and how to use code names for teams" msgstr "ما إذا كان وكيفية استخدام أسماء الرموز للفرق" -#: options/preferences.py:1109 +#: options/preferences.py msgid "Team code names" msgstr "اسم رمز الفريق " -#: options/preferences.py:1114 +#: options/preferences.py msgid "Do not use code names" msgstr "لا تستخدم الأسماء الرمزية " -#: options/preferences.py:1115 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" msgstr "استخدم الاسم الحقيقي و اعرض الاسم الرمزي في حقل الادوات " -#: options/preferences.py:1116 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" msgstr "استخدم الاسم الرمزي للعامة ، و اعرض الاسم الحقيقي و الرمزي في حقل الأدوات للمدير " -#: options/preferences.py:1118 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" msgstr "استخدم الاسم الرمزي للعامة ، و اعرض الاسم الحقيقي والرمزي في حقل الأدوات للمدير " -#: options/preferences.py:1120 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" msgstr "استخدم الاسم الرمزي للكل ، دون عرضه في قائمة الأدوات " -#: options/preferences.py:1126 +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" msgstr "" -#: options/preferences.py:1127 +#: options/preferences.py msgid "Show emoji" msgstr "إظهار الرمز" -#: options/preferences.py:1135 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" msgstr "" -#: options/preferences.py:1136 +#: options/preferences.py msgid "Show team institutions" msgstr "إظهار مؤسسة الفريق" -#: options/preferences.py:1144 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" msgstr "" -#: options/preferences.py:1145 +#: options/preferences.py msgid "Show adjudicator institutions" msgstr "عرض حكم المؤسسة " -#: options/preferences.py:1153 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" msgstr "" -#: options/preferences.py:1154 +#: options/preferences.py msgid "Show speakers in draw" msgstr "عرض المتحدثين في القرعة " -#: options/preferences.py:1161 options/templates/preferences_index.html:109 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" msgstr "" -#: options/preferences.py:1167 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Reply-to name" msgstr "" -#: options/preferences.py:1176 +#: options/preferences.py msgid "The email address for handling replies" msgstr "" -#: options/preferences.py:1177 +#: options/preferences.py msgid "Reply-to address" msgstr "" -#: options/preferences.py:1185 +#: options/preferences.py msgid "A secret key to accept email status events" msgstr "" -#: options/preferences.py:1186 +#: options/preferences.py msgid "Email status secret key" msgstr "" -#: options/preferences.py:1196 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "" -#: options/preferences.py:1197 +#: options/preferences.py msgid "Ballot receipts" msgstr "" -#: options/preferences.py:1205 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "" -#: options/preferences.py:1207 +#: options/preferences.py msgid "Ballot receipt subject line" msgstr "" -#: options/preferences.py:1215 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "" -#: options/preferences.py:1216 +#: options/preferences.py msgid "Ballot receipt message" msgstr "" -#: options/preferences.py:1232 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1233 +#: options/preferences.py msgid "Team points subject line" msgstr "" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team points message" msgstr "" -#: options/preferences.py:1250 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1251 +#: options/preferences.py msgid "Adjudicator draw subject line" msgstr "" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1259 +#: options/preferences.py msgid "Adjudicator draw message" msgstr "" -#: options/preferences.py:1268 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." msgstr "" -#: options/preferences.py:1269 +#: options/preferences.py msgid "Team draw subject line" msgstr "" -#: options/preferences.py:1276 options/preferences.py:1294 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1277 options/preferences.py:1295 +#: options/preferences.py msgid "Private URL notification message" msgstr "" -#: options/preferences.py:1286 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1287 +#: options/preferences.py msgid "Private URL notification subject line" msgstr "" -#: options/preferences.py:1308 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1309 +#: options/preferences.py msgid "Motion release notification subject line" msgstr "" -#: options/preferences.py:1316 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1317 +#: options/preferences.py msgid "Motion release notification message" msgstr "" -#: options/preferences.py:1325 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1326 +#: options/preferences.py msgid "Team registration notification subject line" msgstr "" -#: options/preferences.py:1333 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1334 +#: options/preferences.py msgid "Team registration notification message" msgstr "" -#: options/preferences.py:1343 options/templates/preferences_index.html:78 +#: options/preferences.py options/templates/preferences_index.html msgid "Motions" msgstr "قضايا" -#: options/preferences.py:1349 +#: options/preferences.py msgid "If checked, ballots require a motion to be entered" msgstr "" -#: options/preferences.py:1350 +#: options/preferences.py msgid "Enable motions" msgstr "" -#: options/preferences.py:1358 +#: options/preferences.py msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" msgstr "" -#: options/preferences.py:1359 +#: options/preferences.py msgid "Ballot Hide Motions" msgstr "" -#: options/preferences.py:1367 +#: options/preferences.py msgid "Enables the motion veto field on ballots, to track veto statistics" msgstr "" -#: options/preferences.py:1368 +#: options/preferences.py msgid "Motion vetoes" msgstr "تصويت القضية " -#: options/preferences.py:1376 +#: options/preferences.py msgid "If showing results to public, show which motions were selected in the record" msgstr "" -#: options/preferences.py:1377 +#: options/preferences.py msgid "Show motions in results" msgstr "عرض نتائج القضايا " -#: options/preferences.py:1385 +#: options/preferences.py msgid "Order in which are listed by round in the public view" msgstr "" -#: options/preferences.py:1386 +#: options/preferences.py msgid "Order to display motions" msgstr "إخفاء القضايا " -#: options/preferences.py:1390 +#: options/preferences.py msgid "Earliest round first" msgstr "الجولة المبكرة " -#: options/preferences.py:1391 +#: options/preferences.py msgid "Latest round first" msgstr "الجولة المتأخرة " -#: options/preferences.py:1398 +#: options/preferences.py msgid "Whether motions can be reused from one round to another." msgstr "" -#: options/preferences.py:1399 +#: options/preferences.py msgid "Allow motion reuse" msgstr "" -#: options/preferences.py:1406 options/templates/preferences_index.html:114 +#: options/preferences.py options/templates/preferences_index.html msgid "Global Settings" msgstr "" -#: options/preferences.py:1412 +#: options/preferences.py msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." msgstr "" -#: options/preferences.py:1413 +#: options/preferences.py msgid "Enable API access" msgstr "" -#: options/preferences.py:1421 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1422 +#: options/preferences.py msgid "Assistant account creation key" msgstr "" -#: options/preferences.py:1431 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1433 +#: options/preferences.py msgid "Administrator account creation key" msgstr "" -#: options/presets.py:32 options/presets.py:324 +#: options/presets.py msgid "Public Information Options" msgstr "" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" msgstr "" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" msgstr "" -#: options/presets.py:74 +#: options/presets.py msgid "Australs Rules" msgstr "" -#: options/presets.py:75 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:114 +#: options/presets.py msgid "British Parliamentary Rules" msgstr "" -#: options/presets.py:115 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." msgstr "" -#: options/presets.py:157 +#: options/presets.py msgid "Canadian Parliamentary Rules" msgstr "" -#: options/presets.py:159 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." msgstr "" -#: options/presets.py:182 +#: options/presets.py msgid "Australian Easters Rules" msgstr "" -#: options/presets.py:184 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:202 +#: options/presets.py msgid "2 vs 2 Impromptu" msgstr "" -#: options/presets.py:204 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." msgstr "" -#: options/presets.py:229 +#: options/presets.py msgid "3 vs 3 Prepared" msgstr "" -#: options/presets.py:231 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." msgstr "" -#: options/presets.py:258 +#: options/presets.py msgid "UADC Rules" msgstr "" -#: options/presets.py:260 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:296 +#: options/presets.py msgid "WSDC Rules" msgstr "" -#: options/presets.py:298 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:326 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "" -#: options/presets.py:338 +#: options/presets.py msgid "Tab Release Options" msgstr "" -#: options/presets.py:340 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" msgstr "" -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html msgid "Configuration" msgstr "ترتيب " -#: options/templates/preferences_index.html:11 +#: options/templates/preferences_index.html #, python-format msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." msgstr "" -#: options/templates/preferences_index.html:24 +#: options/templates/preferences_index.html #, python-format msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." msgstr "" -#: options/templates/preferences_index.html:35 +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." msgstr "" -#: options/templates/preferences_index.html:54 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" msgstr "" -#: options/templates/preferences_index.html:59 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" msgstr "" -#: options/templates/preferences_index.html:64 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" msgstr "" -#: options/templates/preferences_index.html:69 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" msgstr "" -#: options/templates/preferences_index.html:74 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" msgstr "" -#: options/templates/preferences_index.html:79 +#: options/templates/preferences_index.html msgid "How and where are motions used" msgstr "" -#: options/templates/preferences_index.html:90 +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" msgstr "" -#: options/templates/preferences_index.html:95 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" msgstr "" -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" msgstr "" -#: options/templates/preferences_index.html:105 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" msgstr "" -#: options/templates/preferences_index.html:110 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" msgstr "" -#: options/templates/preferences_index.html:115 +#: options/templates/preferences_index.html msgid "Settings which can affect all tournaments on the site" msgstr "" -#: options/templates/preferences_index.html:127 +#: options/templates/preferences_index.html msgid "Manually Set Current Round" msgstr "إدخال يدوي للجولة الحالية " -#: options/templates/preferences_index.html:128 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." msgstr "" -#: options/templates/preferences_index.html:132 -msgid "Set Round Weights" +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: options/templates/preferences_index.html:133 +#: options/templates/preferences_index.html msgid "Rounds can be weighted so that certain rounds are worth more team points." msgstr "" -#: options/templates/preferences_index.html:140 +#: options/templates/preferences_index.html msgid "Presets" msgstr "إعدادات مسبقة" -#: options/templates/preferences_index.html:141 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." msgstr "" -#: options/templates/preferences_index.html:152 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" msgstr "تطبيق %(preset)s" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" msgstr "العودة إلى الترتيب " -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" msgstr "" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" msgstr "التأكيد المسبق %(preset_title)s" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" msgstr "التفضيلات التي لن تتغير" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" msgstr "التفضيلات التي سوف تتغير" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" msgstr "الترتيب : %(section)s" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" msgstr "تعديل الترتيب : %(section)s" -#: options/views.py:65 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." msgstr "خيارات البطولة ( %(section)s ) حفظت " -#: options/views.py:111 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." msgstr "خيارات البطولة حفظت و تم إرسالها إلى %(name)s " diff --git a/tabbycat/participants/locale/ar/LC_MESSAGES/django.po b/tabbycat/participants/locale/ar/LC_MESSAGES/django.po index d0c4d5cf479..87a780e5381 100644 --- a/tabbycat/participants/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -18,12 +18,20 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 942\n" -#: participants/admin.py:96 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" msgstr "" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." @@ -34,11 +42,11 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: participants/admin.py:152 participants/admin.py:233 -msgid "Delete URL key" -msgstr "حذف عنوان URL" +#: participants/admin.py +msgid "Reset emoji" +msgstr "" -#: participants/admin.py:160 +#: participants/admin.py #, python-format msgid "%(count)d team had their emoji reset." msgid_plural "%(count)d teams had their emojis reset." @@ -49,11 +57,11 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: participants/admin.py:164 -msgid "Reset emoji" +#: participants/admin.py +msgid "Reset code name" msgstr "" -#: participants/admin.py:170 +#: participants/admin.py #, python-format msgid "%(count)d team had their code name reset." msgid_plural "%(count)d teams had their code names reset." @@ -64,11 +72,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: participants/admin.py:174 -msgid "Reset code name" -msgstr "" - -#: participants/admin.py:228 +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." @@ -79,450 +83,436 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: participants/apps.py:7 participants/views.py:41 +#: participants/apps.py participants/views.py msgid "Participants" msgstr "المشاركون" -#: participants/models.py:21 participants/models.py:37 -#: participants/models.py:66 participants/models.py:96 +#: participants/models.py msgid "name" msgstr "الاسم" -#: participants/models.py:24 participants/models.py:45 +#: participants/models.py msgid "region" msgstr "منطقة " -#: participants/models.py:25 +#: participants/models.py msgid "regions" msgstr "المناطق " #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:39 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" msgstr "الاسم الكامل للمؤسسة ، على سبيل المثال ، \"جامعة كامبريدج\" ، \"جامعة فيكتوريا في ويلينغتون\"" -#: participants/models.py:41 +#: participants/models.py msgid "code" msgstr "الشفرة" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:43 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" msgstr "ما يُطلق عليه اسم المؤسسة عادةً ، على سبيل المثال \"كامبريدج\" " -#: participants/models.py:55 participants/models.py:155 -#: participants/models.py:353 +#: participants/models.py msgid "institution" msgstr "مؤسسة" -#: participants/models.py:56 +#: participants/models.py msgid "institutions" msgstr "المؤسسات " -#: participants/models.py:64 participants/models.py:157 -#: participants/models.py:356 +#: participants/models.py msgid "tournament" msgstr "البطولة" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:68 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" msgstr "الاسم الذي سيتم عرضه ، على سبيل المثال ، \"المبتدئ\" و \"ESL\"" -#: participants/models.py:70 +#: participants/models.py msgid "slug" msgstr "اختصار" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:72 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" msgstr "تطبيق Slug لعناوين URL ، على سبيل المثال ، \"novice\" و \"esl\"" -#: participants/models.py:74 +#: participants/models.py msgid "sequence number" msgstr "رقم التسلسل " -#: participants/models.py:75 +#: participants/models.py msgid "The order in which the categories are displayed" msgstr "الترتيب الذي يتم فيها عرض القضايا" -#: participants/models.py:77 +#: participants/models.py msgid "limit" msgstr "أقصى حد " -#: participants/models.py:78 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" msgstr "على الأكثر ، سيتم عرض العديد من المتحدثين في التاب العامة لهذه الفئة ، أو يستخدمون 0 كقيمة للاشخاص الذي ليس لهم حدود" -#: participants/models.py:80 +#: participants/models.py msgid "public" msgstr "عام" -#: participants/models.py:81 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" msgstr "اذا تم اختياره، سيتم إظهار هذه الفئة مع نتائج المتحدثين للعموم." -#: participants/models.py:87 +#: participants/models.py msgid "speaker category" msgstr "نقاط المتحدث" -#: participants/models.py:88 participants/models.py:330 +#: participants/models.py msgid "speaker categories" msgstr "نقاط المتحدثين" -#: participants/models.py:98 +#: participants/models.py msgid "email address" msgstr "" -#: participants/models.py:100 +#: participants/models.py msgid "phone" msgstr "الهاتف " -#: participants/models.py:102 +#: participants/models.py msgid "anonymous" msgstr "مستخدم مجهول" -#: participants/models.py:103 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" msgstr "سيتم تحديد أسماء وفريق المجهولين في إصدارات علامات التبويب العامة" -#: participants/models.py:106 +#: participants/models.py +msgid "code name" +msgstr "اسم الكود " + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py msgid "URL key" msgstr "مفتاح الرابط " -#: participants/models.py:111 +#: participants/models.py msgid "male" msgstr "ذكر " -#: participants/models.py:112 +#: participants/models.py msgid "female" msgstr "أنثى" -#: participants/models.py:113 +#: participants/models.py msgid "other" msgstr "أخرى" -#: participants/models.py:115 +#: participants/models.py msgid "gender" msgstr "الجنس" -#: participants/models.py:116 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" msgstr "سيتم عرض الجنس في واجهة تخصيص الحكام" -#: participants/models.py:118 +#: participants/models.py msgid "pronoun" msgstr "ضمير " -#: participants/models.py:119 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" msgstr "في حالة طباعة بطاقات الاقتراع باستخدام Tabbycat ، هناك خيار للضمائر قبل الطباعة" -#: participants/models.py:122 +#: participants/models.py msgid "person" msgstr "شخص " -#: participants/models.py:123 +#: participants/models.py msgid "persons" msgstr "الأشخاص " -#: participants/models.py:138 +#: participants/models.py msgid "full name/suffix" msgstr "الاسم بالكامل " -#: participants/models.py:139 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" msgstr "لا تقم بوضع اسم المنتخب (قم باختيار \"وضع اسم الفريق مع اسم المنتخب ؟\" بدل ذلك)" -#: participants/models.py:141 +#: participants/models.py msgid "short name/suffix" msgstr "اسم قصير" -#: participants/models.py:142 +#: participants/models.py msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:144 -msgid "code name" -msgstr "اسم الكود " - -#: participants/models.py:145 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" msgstr "الاسم المستخدم لإخفاء الهوية المؤسسية على الصفحات العامة" -#: participants/models.py:148 +#: participants/models.py msgid "short name" msgstr "اسم قصير" -#: participants/models.py:149 +#: participants/models.py msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:151 +#: participants/models.py msgid "long name" msgstr "الاسم الكامل " -#: participants/models.py:152 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" msgstr "اسم الفريق الذي سيتظمن اسم المؤسسة (قم باختيار \"وضع اسم الفريق مع اسم المنتخب ؟\" بدل ذلك)" -#: participants/models.py:159 +#: participants/models.py msgid "Uses institutional prefix" msgstr "يستخدم البادئة المؤسسية" -#: participants/models.py:160 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" msgstr "تنوية يمكنك تسمية فريق \"1\" من فكتوريا ليظهر \" فكتوريا 1 \" " -#: participants/models.py:162 +#: participants/models.py msgid "break categories" msgstr "الفئة المتأهلة" -#: participants/models.py:167 participants/models.py:364 +#: participants/models.py msgid "institution conflicts" msgstr "تعارضات (منتخب)" -#: participants/models.py:178 +#: participants/models.py msgid "none" msgstr "لا شيء " -#: participants/models.py:179 +#: participants/models.py msgid "swing" msgstr "تأرجح" -#: participants/models.py:180 +#: participants/models.py msgid "composite" msgstr "مركب " -#: participants/models.py:181 +#: participants/models.py msgid "bye" msgstr "وداعا " -#: participants/models.py:184 +#: participants/models.py msgid "type" msgstr "نوع" -#: participants/models.py:188 +#: participants/models.py msgid "emoji" msgstr "رمز تعبيري" -#: participants/models.py:202 participants/models.py:328 +#: participants/models.py msgid "team" msgstr "فريق" -#: participants/models.py:203 +#: participants/models.py msgid "teams" msgstr "فرق" -#: participants/models.py:311 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." msgstr "يجب أن يكون لدى الفرق مؤسسة إذا كانت تستخدم البادئة المؤسسية." -#: participants/models.py:313 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." msgstr "يجب أن يكون للفرق اسم طويل إذا لم تستخدم البادئة المؤسسية." -#: participants/models.py:315 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." msgstr "يجب أن يكون للفرق اسم قصير إذا لم تستخدم البادئة المؤسسية." -#: participants/models.py:333 +#: participants/models.py msgid "speaker" msgstr "متحدث " -#: participants/models.py:334 +#: participants/models.py msgid "speakers" msgstr "متحدثون " -#: participants/models.py:357 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" msgstr "المحكمون الذين لم يتم تعيينهم في أي بطولة يمكن أن تكون مشتركة بين البطولات " -#: participants/models.py:359 +#: participants/models.py msgid "base score" msgstr "" -#: participants/models.py:368 +#: participants/models.py msgid "team conflicts" msgstr "تعارضات (فريق)" -#: participants/models.py:372 +#: participants/models.py msgid "adjudicator conflicts" msgstr "" -#: participants/models.py:375 +#: participants/models.py msgid "always trainee" msgstr "المتدربين" -#: participants/models.py:376 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" msgstr "في حالة تحديده ، لن يتم تخصيص حق التصويت التلقائي لموضع التصويت ، بغض النظر عن درجاته" -#: participants/models.py:378 +#: participants/models.py msgid "breaking" msgstr "المتأهلون" -#: participants/models.py:380 +#: participants/models.py msgid "independent" msgstr "مستقل " -#: participants/models.py:382 +#: participants/models.py msgid "adjudication core" msgstr "محكم" -#: participants/models.py:391 +#: participants/models.py msgid "adjudicator" msgstr "محكم" -#: participants/models.py:392 +#: participants/models.py msgid "adjudicators" msgstr "المحكمين" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" msgstr "النقاط بعد المناظرة " -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" msgstr "الفوز بعد المناظرة " -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" msgstr "درجات المتحدث
    (حسب ترتيب التحدث)" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" msgstr "الخطاب " -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" msgstr "عن %(name)s" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" msgstr "" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" msgstr "" -#: participants/templates/adjudicator_registration_card.html:27 -#: participants/templates/team_registration_card.html:89 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" msgstr "منتخب" -#: participants/templates/adjudicator_registration_card.html:31 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" msgstr "غير منتسبين" -#: participants/templates/adjudicator_registration_card.html:36 -#: participants/templates/team_registration_card.html:98 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "منطقة " -#: participants/templates/adjudicator_registration_card.html:43 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." msgstr "" -#: participants/templates/adjudicator_registration_card.html:50 -#: participants/templates/team_registration_card.html:109 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:52 -#: participants/templates/team_registration_card.html:111 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr "" -#: participants/templates/adjudicator_registration_card.html:54 -#: participants/templates/adjudicator_registration_card.html:62 -#: participants/templates/adjudicator_registration_card.html:74 -#: participants/templates/adjudicator_registration_card.html:84 -#: participants/templates/team_registration_card.html:58 -#: participants/templates/team_registration_card.html:70 -#: participants/templates/team_registration_card.html:79 -#: participants/templates/team_registration_card.html:113 -#: participants/templates/team_registration_card.html:122 -#: participants/templates/team_registration_card.html:133 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" msgstr "لا يوجد" -#: participants/templates/adjudicator_registration_card.html:58 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:60 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:71 -#: participants/templates/adjudicator_registration_card.html:82 -#: participants/templates/team_registration_card.html:56 -#: participants/templates/team_registration_card.html:68 -#: participants/templates/team_registration_card.html:77 -#: participants/templates/team_registration_card.html:120 -#: participants/templates/team_registration_card.html:131 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr "" -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/team_registration_card.html:118 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:80 -#: participants/templates/team_registration_card.html:129 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" msgstr "القاعات المقيدة:" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr " لا تنسى إذا كان يجب أن يتعارض هذا الحكم ضد المؤسسة الخاصة به ، يجب عليك إضافة هذا التعارض الان في التاب تعارض-الحكم-- مؤسسة ، أعلاه ، لأن تعارض المؤسسة الخاصة مره أخرى يتم إنشاؤه تلقائيًا عند استخدام هذا النموذج." -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." msgstr "تحذير اذا كان هناك \"فريق مناظرة\" فوق هذه القائمة من المحتمل عليك أن لا تحذف هذه المناظرة %(object_name)s " -#: participants/templates/admin/participants/delete_debateteam_warning.html:14 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." msgstr "تحذير اذا كان هناك \"فريق مناظرة\" فوق هذه القائمة من المحتمل عليك أن لا تحذف هذه المناظرة %(objects_name)s" #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:21 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:33 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." msgstr "لاحظ أن حذف مؤسسة ما يحذف أيضًا جميع الفرق من تلك المؤسسة." -#: participants/templates/admin/participants/delete_debateteam_warning.html:41 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "إذا كنت متأكدًا تمامًا من حذف %(object_name)s ، فالرجاء حذف الكائنات الواردة أعلاه أولاً ، وتأكد من الاستجابة للتحذير الذي ستراه في صفحة كائنات \"فريق المناظرة \" قبل المتابعة." -#: participants/templates/admin/participants/delete_debateteam_warning.html:47 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "إذا كنت متأكدًا تمامًا من حذف %(objects_name)s ، فالرجاء حذف الكائنات الواردة أعلاه أولاً ، وتأكد من الاستجابة للتحذير الذي ستراه في صفحة كائنات \"فريق المناظرة \" قبل المتابعة." -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" msgstr "تبدأ الجولة %(start_time)s" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "الفرق : " -#: participants/templates/current_round/common.html:28 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "" @@ -532,275 +522,273 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" msgstr "" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" msgstr "" -#: participants/templates/current_round/common.html:44 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." msgstr "لا يوجد قوائم للمدربين لهذه المناظرة " -#: participants/templates/current_round/common.html:54 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." msgstr "القضايا الغير معلنة " -#: participants/templates/current_round/common.html:57 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "قضايا" -#: participants/templates/current_round/common.html:61 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "قضايا المناظرة %(seq)s :" -#: participants/templates/current_round/common.html:69 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." msgstr "القضية ( القضايا ) لهذه المناظرة لم يتم استلامها " -#: participants/templates/current_round/round_adj.html:14 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "المحكم %(adjudicator)s هو رئيس الجلسة في المناظرة بين %(aff)s و%(neg)s في قاعة %(room)s" -#: participants/templates/current_round/round_adj.html:18 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "المحكم %(adjudicator)s هو رئيس الجلسة في المناظرة بين %(aff)s و%(neg)s في قاعة %(room)s" -#: participants/templates/current_round/round_adj.html:24 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:28 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:36 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s هو %(type)s يحكم بين %(aff)s و%(neg)s في القاعة %(room)s." -#: participants/templates/current_round/round_adj.html:40 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s هو %(type)s يحكم بين %(aff)s و%(neg)s في القاعة %(room)s." -#: participants/templates/current_round/round_adj.html:46 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:50 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s يحكم بين %(aff)s و%(neg)s في %(room)s" -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s يحكم بين %(aff)s و%(neg)s في %(room)s" -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:85 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "المحكم %(adjudicator)s هو رئيس الجلسة في %(room)s" -#: participants/templates/current_round/round_adj.html:89 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "المحكم %(adjudicator)s هو رئيس الجلسة في %(room)s" -#: participants/templates/current_round/round_adj.html:95 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:99 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:107 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:111 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:117 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:121 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:129 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "%(adjudicator)s يحكم في %(room)s " -#: participants/templates/current_round/round_adj.html:133 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:139 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:143 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:39 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:43 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:56 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:60 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:66 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:70 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." msgstr "يبدو أنه لا توجد أي فئات المتحدثين محددة. إذا كنت ترغب في إنتاج علامات تاب المتحدث الخاصة بالفئة ، مثل علامة تبويب مبتدئ ، فاستخدم صفحة فئات المتحدث لتعريفها ، ثم ارجع إلى هذه الصفحة لتعيين أهلية المتحدث." -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" msgstr "العودة إلى التغذية الراجعة " -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" msgstr "تم اعتماد التغذية الراجعة من %(adjudicator)s" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" msgstr "لم يقدم التغذية الراجعة : %(adjudicators)s ( قام بتقديمها شفهياً ) " -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" msgstr "لا يوجد تغذية راجعة لــ%(adjudicator)s" -#: participants/templates/feedback_progress_panel.html:38 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" msgstr "العديد من التغذية الراجعة تم تقديمها لهذه المناظرة : " -#: participants/templates/feedback_progress_panel.html:46 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" msgstr "لا يوجد تغذية راجعة معتمدة من \n" "%(adjudicator)s" -#: participants/templates/feedback_progress_panel.html:53 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." msgstr "%(name)s لا يملك اي تغذية راجعةمعتمدة " -#: participants/templates/in_this_round.html:9 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" msgstr "في هذه الجولة ( %(round)s )" -#: participants/templates/in_this_round.html:13 +#: participants/templates/in_this_round.html msgid "In This Round" msgstr "" -#: participants/templates/in_this_round.html:16 +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" msgstr "( لم يتم الإعلان ) " -#: participants/templates/in_this_round.html:23 +#: participants/templates/in_this_round.html msgid "Room TBA" msgstr "القاعة غير معروفة " -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." msgstr "%(adjudicator)s لن يحكم هذه الجولة" -#: participants/templates/in_this_round.html:39 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:54 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." @@ -811,181 +799,180 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: participants/templates/in_this_round.html:60 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." msgstr "" -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." msgstr "%(team)s ليس لدية مناظر في هذه الجولة" -#: participants/templates/in_this_round.html:79 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:91 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." msgstr "لم يتم إعلان القرعة حتى الآن " -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" msgstr "قائمة المشاركون" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" msgstr "" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." msgstr "" -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" msgstr "" -#: participants/templates/participants_subnav.html:26 participants/views.py:135 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" msgstr "" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" msgstr "نقاط المتحدث" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" msgstr "المتأهلون" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." msgstr "تسمح فئات المتحدث بإنتاج علامات تاب المتحدث الخاصة بالفئة ، على سبيل المثال ، للفئات المبتدئة أو غير الناطقين . في هذه الصفحة ، يمكنك تحديد فئات المتحدثين الموجودة. بعد تحديد الفئات ، يمكنك تعيين أهلية المتحدث على صفحة أهلية المتحدث." -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." msgstr "اذا كنت تريد حذف المتناظر ، تعديد البيانات المنطقة " -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" msgstr "حفظ نقاط المتحدث " -#: participants/templates/team_registration_card.html:16 +#: participants/templates/team_registration_card.html msgid "Team name:" msgstr "" -#: participants/templates/team_registration_card.html:21 +#: participants/templates/team_registration_card.html msgid "Full team name:" msgstr "" -#: participants/templates/team_registration_card.html:25 +#: participants/templates/team_registration_card.html msgid "Short team name:" msgstr "" -#: participants/templates/team_registration_card.html:32 +#: participants/templates/team_registration_card.html msgid "Code name:" msgstr "اسم الكود " -#: participants/templates/team_registration_card.html:36 +#: participants/templates/team_registration_card.html msgid "No code name assigned" msgstr "" -#: participants/templates/team_registration_card.html:42 +#: participants/templates/team_registration_card.html msgid "Emoji:" msgstr "" -#: participants/templates/team_registration_card.html:46 +#: participants/templates/team_registration_card.html msgid "No emoji assigned" msgstr "" -#: participants/templates/team_registration_card.html:54 +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "متحدثون " -#: participants/templates/team_registration_card.html:66 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" msgstr "تعديل الفواصل " -#: participants/templates/team_registration_card.html:75 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" msgstr "" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" msgstr "%(code_name)s(%(real_name)s)" -#: participants/views.py:46 +#: participants/views.py msgid "Adjudicators" msgstr "المحكمين" -#: participants/views.py:55 +#: participants/views.py msgid "Speakers" msgstr "متحدثون " -#: participants/views.py:86 +#: participants/views.py msgid "Institutions" msgstr "" -#: participants/views.py:102 +#: participants/views.py msgid "Code" msgstr "" -#: participants/views.py:103 +#: participants/views.py msgid "Full name" msgstr "" -#: participants/views.py:105 +#: participants/views.py msgid "Region" msgstr "" -#: participants/views.py:107 +#: participants/views.py msgid "Teams" msgstr "الفرق" -#: participants/views.py:107 +#: participants/views.py msgid "Number of teams" msgstr "" -#: participants/views.py:109 +#: participants/views.py msgid "Adjs" msgstr "" -#: participants/views.py:110 +#: participants/views.py msgid "Number of adjudicators, excluding independents" msgstr "" -#: participants/views.py:112 +#: participants/views.py msgid "IAs" msgstr "" -#: participants/views.py:113 +#: participants/views.py msgid "Number of independent adjudicators" msgstr "" -#: participants/views.py:143 +#: participants/views.py msgid "Code name" msgstr "" -#: participants/views.py:163 +#: participants/views.py msgid "Team Registration" msgstr "" -#: participants/views.py:231 +#: participants/views.py msgid "Results" msgstr "النتائج" -#: participants/views.py:239 participants/views.py:264 +#: participants/views.py #, python-format msgid "Record for %(name)s" msgstr "تسجيل لـ%(name)s" -#: participants/views.py:261 +#: participants/views.py msgid "Previous Rounds" msgstr "العودة إلى الجولات " -#: participants/views.py:352 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" @@ -996,11 +983,11 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: participants/views.py:358 +#: participants/views.py msgid "No changes were made to the categories." msgstr "" -#: participants/views.py:371 +#: participants/views.py msgid "Speaker Category Eligibility" msgstr "المتأهلون" diff --git a/tabbycat/printing/locale/ar/LC_MESSAGES/django.po b/tabbycat/printing/locale/ar/LC_MESSAGES/django.po index 783fcd6a71c..c241253e7a2 100644 --- a/tabbycat/printing/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:18\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -18,109 +18,108 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" msgstr "نموذج التغذية الراجعة" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" msgstr "" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." msgstr "لم يتم إضافة أي سؤال للتغذية الراجعة " -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." msgstr "لم يتم إضافة أي سؤال للتغذية الراجعة من الفريق" -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." msgstr "لم يتم إضافة أي سؤال للتغذية الراجعة من الحكم" -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." msgstr "" -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" msgstr "لا توجد أوراق ملاحظات متاحة — ربما لم يتم تخصيص الحكام؟" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" msgstr "" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" msgstr "" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" msgstr "" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" msgstr "" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" msgstr "من %(round)s" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" msgstr "" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" msgstr "لم تتوفر نموذج درجات لهذه الجولة — " -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" msgstr "" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "" -#: printing/templates/scoresheet_list.html:47 +#: printing/templates/scoresheet_list.html msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." msgstr "" -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" msgstr "" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." msgstr "" -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" msgstr "مجموع الدرجات" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" msgstr "غير منتسبين" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "فريق" diff --git a/tabbycat/privateurls/locale/ar/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/ar/LC_MESSAGES/django.po index ea081559342..0ece2be10bd 100644 --- a/tabbycat/privateurls/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:52\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -18,151 +18,144 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" msgstr "إدارة الرابط الخاص " -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:145 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" msgstr "رابط خاص " -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." msgstr "تم ارسال رابط التصويت و رابط التغذية الراجعة " -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" msgstr "" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." msgstr "" -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." msgstr "" -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." msgstr "لا يوجد رابط خاص " -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" msgstr "اعداد رابط خاص " -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" msgstr "عرض الرابط " -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." msgstr "" -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." msgstr "هذا الزر سيقوم بمشاركة الروابط للاشخاص الذين لا يمتلكون رابط خاص بهم " -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." msgstr "جميع رئساء الجلسات و روابطهم الخاصة " -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" msgstr "" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" msgstr "" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" msgstr "" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." msgstr "" -#: privateurls/templates/public_url_landing.html:62 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Submit Ballot for %(round)s" msgstr "" -#: privateurls/templates/public_url_landing.html:65 -msgid "There are no current rounds" -msgstr "" - -#: privateurls/templates/public_url_landing.html:71 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" msgstr "" -#: privateurls/templates/public_url_landing.html:84 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" msgstr "" -#: privateurls/views.py:63 privateurls/views.py:164 +#: privateurls/views.py msgid "no URL" msgstr "لا يوجد رابط " -#: privateurls/views.py:76 +#: privateurls/views.py msgid "URL" msgstr "" -#: privateurls/views.py:87 +#: privateurls/views.py msgid "Speakers" msgstr "متحدثين" -#: privateurls/views.py:97 +#: privateurls/views.py msgid "Adjudicators" msgstr "المحكمين" -#: privateurls/views.py:119 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." msgstr "" -#: privateurls/views.py:126 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." @@ -173,7 +166,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: privateurls/views.py:131 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." @@ -184,11 +177,11 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: privateurls/views.py:172 +#: privateurls/views.py msgid "URL Key" msgstr "" -#: privateurls/views.py:181 +#: privateurls/views.py msgid "Debates" msgstr "" diff --git a/tabbycat/results/locale/ar/LC_MESSAGES/django.po b/tabbycat/results/locale/ar/LC_MESSAGES/django.po index f85479412fa..686a719e731 100644 --- a/tabbycat/results/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:14\n" "Last-Translator: philip_tc\n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -18,7 +18,11 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 948\n" -#: results/admin.py:44 +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py #, python-format msgid "Resaved results for %(count)d ballot submission." msgid_plural "Resaved results for %(count)d ballot submissions." @@ -29,73 +33,68 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: results/admin.py:47 -msgid "Resave results" -msgstr "" - -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:158 +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" msgstr "النتائج" -#: results/forms.py:39 +#: results/forms.py msgid "Tournament password" msgstr "" -#: results/forms.py:45 +#: results/forms.py msgid "That password isn't correct." msgstr "كلمة المرور خاطئة" -#: results/forms.py:77 +#: results/forms.py msgid "Please enter a whole number." msgstr "الرجاء إدخال عدد صحيح (دون كسور)" -#: results/forms.py:79 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." msgstr "الرجاء ادخال أحد مضاعفات العدد %s" -#: results/forms.py:166 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." msgstr "لا يمكن أن تكون النتيجة محذوفة ومؤكدة" -#: results/forms.py:173 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." msgstr "لا يمكن تأكيد النتيجة إلا عند وجود نتيجة واحدة مؤكدة على الأقل" -#: results/forms.py:302 results/forms.py:336 +#: results/forms.py msgid "---------" msgstr "" -#: results/forms.py:304 results/forms.py:306 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" msgstr "%(aff_team)s مولاة، %(neg_team)s معارضة" -#: results/forms.py:323 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" msgstr "%(side)sتصويت القضايا" -#: results/forms.py:332 results/forms.py:901 +#: results/forms.py #, python-format msgid "%(team)s (%(side)s)" msgstr "%(team)s(%(side)s)" -#: results/forms.py:335 +#: results/forms.py msgid "Winner" msgstr "" -#: results/forms.py:489 +#: results/forms.py msgid "Mark as a duplicate speech" msgstr "وضع كخطاب مكرر" -#: results/forms.py:549 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." msgstr "المتحدث %(speaker)s لا يظهر على الفريق %(team)s" -#: results/forms.py:563 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." @@ -106,52 +105,52 @@ msgstr[3] "المتحدث%(speaker)s ألقى خطاب رئيسي %(count)d مر msgstr[4] "المتحدث %(speaker)s ألقى خطاب رئيسي %(count)d مرات" msgstr[5] "المتحدث %(speaker)s ألقى %(count)d خطابات رئيسية" -#: results/forms.py:580 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." msgstr "لا بد أن يكون خطاب المتحدث الثالث وخطاب رد من شخصين مختلفين." -#: results/forms.py:587 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." msgstr "خطاب الرد للفريق لم يكن موضوعي " -#: results/forms.py:719 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." msgstr "مجموع نتائج الفرقين متساويين. (تعادل)" -#: results/forms.py:724 +#: results/forms.py msgid "The declared winner does not correspond to the team with the highest score." msgstr "" -#: results/forms.py:733 +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" msgstr "مجموع نقاط الفرقين التاليين متساوية: %(teams)s" -#: results/forms.py:743 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "الهوامش ( %(margin).1f تجاوز الوقت المحدد ) (%(max_margin).1f )" -#: results/forms.py:846 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." msgstr "مجموع نتائج الفرقين متساويين (تعادل) من قبل المحكم %(adjudicator)s." -#: results/forms.py:851 +#: results/forms.py #, python-format msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:859 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "هوامش(%(margin).1f ) في النتائج قام الحكم %(adjudicator)s بوضع بتجاوز الحد الاقصى ( %(max_margin).1f )" -#: results/forms.py:921 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." msgstr "لم يتم تأكيد الجانبين لهذه المناقشة. لا يمكنك حفظ نتيجة لهذه المناقشة حتى يتم تأكيد الجوانب في القرعة." -#: results/forms.py:964 +#: results/forms.py #, python-format msgid "There must be exactly %(n)d team advancing." msgid_plural "There must be exactly %(n)d teams advancing." @@ -162,241 +161,242 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: results/forms.py:1007 +#: results/forms.py msgid "There must be exactly 1 team advancing." msgstr "" -#: results/models.py:33 +#: results/models.py msgid "Tab room" msgstr "غرفة التحكم" -#: results/models.py:34 +#: results/models.py msgid "Public" msgstr "عمومي" -#: results/models.py:38 +#: results/models.py msgid "timestamp" msgstr "الزمن " -#: results/models.py:40 +#: results/models.py msgid "version" msgstr "الإصدار" -#: results/models.py:42 +#: results/models.py msgid "submitter type" msgstr "نوع المقدم " -#: results/models.py:44 +#: results/models.py msgid "confirmed" msgstr "مؤكدة" -#: results/models.py:48 +#: results/models.py msgid "from private URL" msgstr "" -#: results/models.py:51 +#: results/models.py msgid "from participant" msgstr "" -#: results/models.py:56 +#: results/models.py msgid "submitter" msgstr "المقدم " -#: results/models.py:59 +#: results/models.py msgid "confirmer" msgstr "مؤكدة" -#: results/models.py:61 +#: results/models.py msgid "confirm timestamp" msgstr "تأكيد النتائج" -#: results/models.py:63 +#: results/models.py msgid "IP address" msgstr "عنوان ال IP" -#: results/models.py:103 +#: results/models.py msgid "A tab room ballot must have a user associated." msgstr "يجب أن تكون النتائج في غرفة التاب " -#: results/models.py:111 +#: results/models.py msgid "debate" msgstr "مناظرة" -#: results/models.py:113 +#: results/models.py msgid "motion" msgstr "نص قضية" -#: results/models.py:115 +#: results/models.py msgid "discarded" msgstr "حذف " -#: results/models.py:117 +#: results/models.py msgid "single adjudicator" msgstr "" -#: results/models.py:118 +#: results/models.py msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." msgstr "" -#: results/models.py:123 results/models.py:228 results/models.py:267 -#: results/models.py:305 results/models.py:347 +#: results/models.py msgid "ballot submission" msgstr "تسليم النتائج" -#: results/models.py:124 +#: results/models.py msgid "ballot submissions" msgstr "تسليم النتائج" -#: results/models.py:143 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" msgstr "مناظرة في هذه الجولة %(round)d و لكن القضية (%(motion)s ) من الجولة %(motion_round)d" -#: results/models.py:150 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" msgstr "لا يمكن أن تكون النتيجة معتمدة ومؤكدة" -#: results/models.py:230 results/models.py:269 +#: results/models.py msgid "debate adjudicator" msgstr "محكم المناظرة" -#: results/models.py:232 results/models.py:271 results/models.py:307 -#: results/models.py:349 +#: results/models.py msgid "debate team" msgstr "فريق المناظرة" -#: results/models.py:235 results/models.py:312 +#: results/models.py msgid "win" msgstr "فوز" -#: results/models.py:237 results/models.py:314 +#: results/models.py msgid "margin" msgstr "هوامش " -#: results/models.py:239 results/models.py:272 results/models.py:316 -#: results/models.py:352 +#: results/models.py msgid "score" msgstr "نقطة" -#: results/models.py:244 +#: results/models.py msgid "team score by adjudicator" msgstr "" -#: results/models.py:245 +#: results/models.py msgid "team scores by adjudicator" msgstr "" -#: results/models.py:260 results/models.py:294 +#: results/models.py msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." msgstr "يجب أن يتوافق كل من فريق المناظرة و محكم المناظرة بالإضافة إلى ورقة النتائج لنفس المناظرة " -#: results/models.py:273 results/models.py:353 +#: results/models.py msgid "position" msgstr "الموقع " -#: results/models.py:279 +#: results/models.py msgid "speaker score by adjudicator" msgstr "درجة المتحدث من الحكم " -#: results/models.py:280 +#: results/models.py msgid "speaker scores by adjudicator" msgstr "نقاط المتحدثين" -#: results/models.py:310 +#: results/models.py msgid "points" msgstr "نقاط" -#: results/models.py:318 +#: results/models.py msgid "votes given" msgstr "تم التصويت " -#: results/models.py:320 +#: results/models.py msgid "votes possible" msgstr "إمكانية التصويت " -#: results/models.py:324 +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py msgid "team score" msgstr "نتيجة الفريق" -#: results/models.py:325 +#: results/models.py msgid "team scores" msgstr "نتائج الفريق" -#: results/models.py:351 +#: results/models.py msgid "speaker" msgstr "متحدث" -#: results/models.py:355 +#: results/models.py msgid "ghost" msgstr "ظل " -#: results/models.py:356 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." msgstr "في حالة تحديده ، لا يتم احتساب هذه الدرجة في علامة تاب المتحدث. يتم فحص هذا عادة الخطاب حيث يتحدث شخص ما مرتين لتعويض زميله الغائب (الذي يعرف أحيانا باسم خطاب \"الشخص الحديدي\" أو خطاب \"الرجل الحديدي\")." -#: results/models.py:365 +#: results/models.py msgid "speaker score" msgstr "نقاط المتحدث" -#: results/models.py:366 +#: results/models.py msgid "speaker scores" msgstr "نقاط المتحدثين" -#: results/models.py:375 +#: results/models.py msgid "The debate team and speaker must be from the same team." msgstr "يجب أن يكون فريق المناظرة والمحدثون من نفس الفريق " -#: results/models.py:378 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." msgstr "يجب أن يكون فريق المناظرة و النتيجة من نفس المناظرة " -#: results/tables.py:15 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" msgstr "" -#: results/tables.py:36 +#: results/tables.py msgid "Status of this debate's ballot" msgstr "حالة نتيجة المناظرة" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" msgstr "عرض القرعة" -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" msgstr "" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" msgstr "" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" msgstr "" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" msgstr "" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the current round" msgstr "" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" msgstr "" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" msgstr "" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." msgstr "" -#: results/templates/admin_results.html:88 +#: results/templates/admin_results.html #, python-format msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." @@ -407,84 +407,86 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: results/templates/admin_results.html:94 +#: results/templates/admin_results.html #, python-format msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." msgstr "" -#: results/templates/admin_results.html:113 +#: results/templates/admin_results.html msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." msgstr "" -#: results/templates/admin_results.html:127 +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." msgstr "يتم تعيين تكوين هذه البطولة على البرلمان البريطاني من خلال \n" " تحكيم شخص لكل جهه . هذه المجموعة غير مسموح بها: يجب أن تستخدم النظام البريطاني في إقرارات الإجماع. لا يمكن إدخال النتائج أثناء وجود هذا الاعدادات. من فضلك ، راجع اعدادات هذه البطولة قبل محاولة إدخال النتائج." -#: results/templates/admin_results.html:135 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." msgstr "لا توجد حاليًا أي حركات تم إدخالها لهذه الجولة ، لذلك لا يمكن إدخال نتائج النقاش. \n" " اضافة القضايا " -#: results/templates/admin_results.html:144 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/admin_results.html:151 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:12 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" msgstr "العودة إلى جميع النتائج" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:17 -#: results/templates/ballot_entry_base.html:21 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" msgstr "إنشاء صفحة نتائج جديدة لهذه المناظرة " -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." msgstr "لا يمكن اعتماد النتيجة لأنك قمت بإدخالها " -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html msgid "Confirm results" msgstr "تأكيد النتائج" -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" msgstr "النتائج غير صحيحة " -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:68 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." msgstr "" -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 results/views.py:513 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" msgstr "إدخال النتائج" -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "" -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." msgstr "يتم تعيين تكوين هذه البطولة على البرلمان البريطاني مع بطاقة اقتراع من شخصين لكل مرشحتحكيم هذه المجموعة غير مسموح بها: يجب أن تستخدم نظام البرلمان البريطاني في الإقرارات الإجماع. لا يمكن إدخال النتائج أثناء وجود هذا الاعدادات . من فضلك اطلب من مسؤول لتغيير هذه الاعدادات ." -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "لا توجد حاليًا أي حركات تم إدخالها لهذه الجولة ، لذلك لا يمكن إدخال نتائج المناظرة . من فضلك اطلب من مسؤول لإضافة حركات." -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." @@ -495,7 +497,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." @@ -506,78 +508,78 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" msgstr "معلومات المناظرة " -#: results/templates/ballot/ballot_debate_info.html:42 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:45 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" msgstr "النتيجة" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "المستوى" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" msgstr "" -#: results/templates/ballot/ballot_set.html:6 +#: results/templates/ballot/ballot_set.html msgid "There are some problems with this scoresheet. Please review and correct them." msgstr "هناك بعض المشاكل في الاستمارة يرجى مراجعتها " -#: results/templates/ballot/ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s (%(institution)s)" msgstr "النتيجة من %(name)s(%(institution)s)" -#: results/templates/ballot/ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s" msgstr "نتيجة من %(name)s" -#: results/templates/ballot/ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html msgid "Scoresheet" msgstr "ورقة النتائج " -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Solo Chair" msgstr "" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Chair" msgstr "" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Panellist" msgstr "" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Trainee" msgstr "" -#: results/templates/ballot/ballot_set.html:44 +#: results/templates/ballot/ballot_set.html msgid "Assign sides before entering scores" msgstr "تعيين الجانبين قبل الدخول إلى النتائج" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." -msgstr "إخفاء الكلمات المكررة من علامة تاب المتحدث. إذا كان المتحدث \"تحدث بخطاب الرجل الحديدي \" ، فستميز عادةً بأقل عدد من علامات كنسخة طبق الأصل." +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." +msgstr "" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "There is %(number)s existing ballot set for this debate." msgid_plural "There are %(number)s existing ballot sets for this debate." @@ -588,65 +590,65 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: results/templates/ballot/other_ballots_list.html:21 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." msgstr "هذه النتيجة مؤكدة" -#: results/templates/ballot/other_ballots_list.html:26 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." msgstr "هذه النتيجة مؤكدة" -#: results/templates/ballot/other_ballots_list.html:41 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" msgstr "عرض حاليا " -#: results/templates/ballot/other_ballots_list.html:45 +#: results/templates/ballot/other_ballots_list.html msgid "MERGING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:48 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," msgstr "الإصدار %(version)s" -#: results/templates/ballot/other_ballots_list.html:53 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," msgstr "إدخال من %(submitter)s" -#: results/templates/ballot/other_ballots_list.html:58 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from %(adjudicator)s's private URL," msgstr "" -#: results/templates/ballot/other_ballots_list.html:62 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," msgstr "تم تقديمها من العام إلى %(ip_address)s" -#: results/templates/ballot/other_ballots_list.html:68 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," msgstr "%(timestamp)s(%(timeago)s قبل )" -#: results/templates/ballot/other_ballots_list.html:73 +#: results/templates/ballot/other_ballots_list.html msgid "unknown" msgstr "" -#: results/templates/ballot/other_ballots_list.html:74 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "confirmed by %(confirmer)s" msgstr "تم اعتمادها من قبل %(confirmer)s" -#: results/templates/ballot/other_ballots_list.html:78 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" msgstr "غير معتمد" -#: results/templates/ballot/other_ballots_list.html:82 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" msgstr "حذف " -#: results/templates/ballot/other_ballots_list.html:86 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" @@ -657,184 +659,176 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." msgstr "" -#: results/templates/ballot_entry_base.html:30 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr "تحتوي هذه المناقشة على لجنة بها عدد زوجي من حكام التصويت. إذا انقسم المحكمون بالتساوي ، فسيتم منح فريق المناظرة الذي صوت له رئيس الجلسة ." -#: results/templates/ballot_entry_base.html:41 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." msgstr "" -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" msgstr "" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" msgstr "" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" msgstr "" -#: results/templates/debate_postponement_form.html:3 +#: results/templates/debate_postponement_form.html msgid "Postponed" msgstr "" -#: results/templates/debate_postponement_form.html:8 +#: results/templates/debate_postponement_form.html msgid "Postpone" msgstr "" -#: results/templates/enter_results.html:15 +#: results/templates/enter_results.html msgid "Ballot Status" msgstr "حالة النتيجة " -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" msgstr "سيتم اعتماد النتيجة بعد الانتهاء من نتائج المتناظرين " -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" msgstr "حالة المناظرة " -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" msgstr "" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" msgstr "حفظ النتيجة" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" msgstr "إلغاء الإدخال" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." msgstr "" -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" msgstr "" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." msgstr "" -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" msgstr "إدخال التصويت" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" msgstr "من أنت ؟" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" msgstr "( تحقق من وجود اسمك في القائمة ) " -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." msgstr "" -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" msgstr "نتيجة لـ %(matchup)s" -#: results/templates/public_ballot_set.html:28 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" msgstr "" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" msgstr "" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" msgstr "العودة إلى النتائج ، من %(round)s" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" msgstr "من %(name)s(%(institution)s)" -#: results/templates/public_ballot_set.html:92 -#: results/templates/public_ballot_set.html:96 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:105 -#: results/templates/public_ballot_set.html:109 +#: results/templates/public_ballot_set.html #, python-format msgid "%(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Won" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Lost" msgstr "" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set_error.html #, python-format msgid "Back to the tournament home page." msgstr "" -#: results/templates/public_enter_results.html:9 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" msgstr "" -#: results/templates/public_enter_results.html:16 +#: results/templates/public_enter_results.html msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." msgstr "" -#: results/templates/public_enter_results.html:24 +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." @@ -845,102 +839,106 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: results/templates/public_enter_results.html:63 -msgid "Submit Ballot(s)" -msgstr "" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" -#: results/templates/public_enter_results.html:65 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "عند إرسال هذا النموذج سيتم تخزين عنوان IP الخاص بك لأغراض التسجيل." -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" msgstr "" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" msgstr "لا يوجد نتيجة للادخال " -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" msgstr "عرض من خلال الفرق " -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" msgstr "عرض من خلال المناظرة " -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" msgstr "نتيجة من %(round)s" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" msgstr "" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." msgstr "" -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." msgstr "" -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" msgstr "بدون تصويت " -#: results/utils.py:19 +#: results/utils.py msgid "Debate was Postponed" msgstr "" -#: results/utils.py:20 +#: results/utils.py msgid "Ballot is Unconfirmed" msgstr "التصويت غير مكتمل " -#: results/utils.py:21 +#: results/utils.py msgid "Ballot is Confirmed" msgstr "اكتملت النتيجة " #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:36 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" msgstr "%(team)s كـ%(side)s" -#: results/utils.py:43 +#: results/utils.py #, python-format msgid "%(team)s (%(side)s) won" msgstr "" #. Translators: The team here is the losing team -#: results/utils.py:45 +#: results/utils.py #, python-format msgid "vs %(team)s (%(side)s)" msgstr "" -#: results/utils.py:47 +#: results/utils.py #, python-format msgid "Advancing: %(advancing_list)s
    " msgstr "" -#: results/utils.py:50 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" msgstr "%(eliminated_list)sإقصاء " -#: results/utils.py:58 +#: results/utils.py #, python-format msgid "1st: %(first_team)s
    " msgstr "" -#: results/utils.py:59 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" @@ -949,190 +947,190 @@ msgstr "الثاني %(second_team)s\n" "الثالث %(third_team)s\n" "الرابع %(fourth_team)s" -#: results/utils.py:74 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" msgstr "خطأ في نتيجة %(debate)s" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:134 +#: results/utils.py msgid "PM" msgstr "" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:136 +#: results/utils.py msgid "DPM" msgstr "" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:138 +#: results/utils.py msgid "LO" msgstr "" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:140 +#: results/utils.py msgid "DLO" msgstr "" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:142 +#: results/utils.py msgid "MG" msgstr "" #. Translators: Abbreviation for Government Whip -#: results/utils.py:144 +#: results/utils.py msgid "GW" msgstr "" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:146 +#: results/utils.py msgid "MO" msgstr "" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:148 +#: results/utils.py msgid "OW" msgstr "" -#: results/utils.py:168 +#: results/utils.py msgid "Reply" msgstr "الرد " -#: results/views.py:270 results/views.py:272 +#: results/views.py msgid " vs " msgstr "ضد " -#: results/views.py:273 +#: results/views.py #, python-format msgid "%(matchup)s: %(round)s @ %(room)s" msgstr "" -#: results/views.py:275 +#: results/views.py msgid "N/A" msgstr "" -#: results/views.py:408 +#: results/views.py msgid "New Ballot Set" msgstr "" -#: results/views.py:411 +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." msgstr "تم إضافة نتيجة لـ %(debate)s" -#: results/views.py:413 results/views.py:480 +#: results/views.py msgid " Email receipts queued to be sent." msgstr "" -#: results/views.py:427 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." msgstr "المناظرة %(debate)s ليس لها رئيس جلسة لا يمكنك اضافة نتيجة لها " -#: results/views.py:433 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." msgstr "المناظرة %(debate)s ليس لها جوانت معتمدة ، لا يمكنك اضافة نتيجة لها " -#: results/views.py:459 +#: results/views.py msgid "Edit Ballot Set" msgstr "" -#: results/views.py:473 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." msgstr "نتيجة لـ %(matchup)s تم حذفها " -#: results/views.py:475 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." msgstr "نتيجة لـ %(matchup)s تم اعتمدها " -#: results/views.py:477 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." msgstr "التعديل لنتيجة لـ %(matchup)s تم حفظها " -#: results/views.py:528 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." msgstr "شكراً %(user)s ! نتيجتك لـ %(debate)s تم تسجيلها " -#: results/views.py:535 +#: results/views.py msgid "The draw for this round hasn't been released yet." msgstr "لم يتم إعلان القرعة لهذه الجولة حتى الان " -#: results/views.py:539 +#: results/views.py msgid "The motions for this round haven't been released yet." msgstr "لم يتم إعلان القضايا لهذه الجولة حتى الان " -#: results/views.py:544 +#: results/views.py msgid "It looks like you don't have a debate this round." msgstr "يبدو أنك لا تمتلك مناظرة في هذه الجولة " -#: results/views.py:546 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." msgstr "يبدو بأنك مكلف في تحكيم مناظرتين او اكثر ، يرجى التواصل مع غرفة التاب " -#: results/views.py:573 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." msgstr "مناظرتك لا تمتلك رئيس جلسة ، لا يمكنك ادخال النتائج ، الرجاء التواصل مع غرفة التاب " -#: results/views.py:578 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." msgstr "يبدو بأن الجوانب لهذه المناظرة لم يتم اعتمدها ، لا يمكنك إدخال النتائج ، الرجاء التواصل مع غرفة التاب " -#: results/views.py:689 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." msgstr "" -#: results/views.py:707 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." msgstr "" -#: results/views.py:710 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." msgstr "" -#: results/views.py:714 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." msgstr "" -#: results/views.py:717 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." msgstr "" -#: results/views.py:739 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." msgstr "" -#: results/views.py:805 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" msgstr "إضافة نتيجة من %(adjudicator)s" -#: results/views.py:809 +#: results/views.py msgid "Adjudicator" msgstr "محكم" -#: results/views.py:846 +#: results/views.py msgid "Merge Ballots" msgstr "" -#: results/views.py:877 +#: results/views.py msgid "The speaking order in the ballots is inconsistent, so could not be merged." msgstr "" -#: results/views.py:879 +#: results/views.py msgid "Duplicate speeches are marked inconsistently, so could not be merged." msgstr "" -#: results/views.py:880 +#: results/views.py #, python-format msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." msgstr "" diff --git a/tabbycat/standings/locale/ar/LC_MESSAGES/django.po b/tabbycat/standings/locale/ar/LC_MESSAGES/django.po index d30b895de12..008faf4e17c 100644 --- a/tabbycat/standings/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-29 23:49-0400\n" -"PO-Revision-Date: 2020-12-30 04:07\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:01\n" "Last-Translator: philip_tc\n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -18,604 +18,595 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 950\n" -#: standings/base.py:297 +#: standings/base.py msgid "The same metric would be added twice:" msgstr "" -#: standings/base.py:298 +#: standings/base.py msgid "The same ranking would be added twice:" msgstr "" -#: standings/base.py:414 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" msgstr "" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" msgstr "الكل" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" msgstr "المتأهلون" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" msgstr "ليس من %(category)s" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" msgstr "جميع المتحدثين" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "رؤساء الجلسات" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" msgstr "أعضاء لجنة التحكيم" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" msgstr "متدربون" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" msgstr "متوسط التقييم " -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" msgstr "تقييم وسط " -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" msgstr "التصفيات الأعلى " -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" msgstr "التصفيات الأدنى " -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" msgstr "متوسط الفرق" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" msgstr "" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" msgstr "متوسط أعضاء الفريق" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" msgstr "متوسط المتناظر " -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" msgstr "متوسط الدرجات " -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" msgstr "الدرجات المتوسطة" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" msgstr "أعلى الدرجات " -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" msgstr "أقل الدرجات " -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" msgstr "رد متوسط درجات المتناظر " -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" msgstr "%(num)d متوسط المتناظر " -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" msgstr "متوسط درجات النهائي " -#: standings/speakers.py:50 standings/speakers.py:106 +#: standings/speakers.py msgid "total" msgstr "المجموع" -#: standings/speakers.py:51 standings/speakers.py:107 +#: standings/speakers.py msgid "Total" msgstr "المجموع" -#: standings/speakers.py:58 standings/speakers.py:116 +#: standings/speakers.py msgid "average" msgstr "متوسط" -#: standings/speakers.py:59 standings/speakers.py:117 +#: standings/speakers.py msgid "Avg" msgstr "المتوسط" -#: standings/speakers.py:66 +#: standings/speakers.py msgid "team points" msgstr "" -#: standings/speakers.py:67 +#: standings/speakers.py msgid "Team" msgstr "فريق" -#: standings/speakers.py:89 standings/speakers.py:126 +#: standings/speakers.py msgid "standard deviation" msgstr "الانحراف المعياري" -#: standings/speakers.py:90 standings/speakers.py:127 +#: standings/speakers.py msgid "Stdev" msgstr "" -#: standings/speakers.py:98 +#: standings/speakers.py msgid "number of speeches given" msgstr "" -#: standings/speakers.py:99 standings/speakers.py:138 +#: standings/speakers.py msgid "Num" msgstr "رقم" -#: standings/speakers.py:137 +#: standings/speakers.py msgid "replies given" msgstr "خطاب الرد " -#: standings/speakers.py:147 +#: standings/speakers.py msgid "trimmed mean (high-low drop)" msgstr "" -#: standings/speakers.py:148 +#: standings/speakers.py msgid "Trim" msgstr "" -#: standings/teams.py:62 +#: standings/teams.py msgid "points" msgstr "نقاط" -#: standings/teams.py:63 +#: standings/teams.py msgid "Pts" msgstr "" -#: standings/teams.py:76 +#: standings/teams.py msgid "wins" msgstr "عدد مرات الفوز" -#: standings/teams.py:77 standings/views.py:592 +#: standings/teams.py standings/views.py msgid "Wins" msgstr "عدد مرات الفوز" -#: standings/teams.py:87 +#: standings/teams.py msgid "total speaker score" msgstr "مجموع نقاط المتحدث " -#: standings/teams.py:88 +#: standings/teams.py msgid "Spk" msgstr "متحدث" -#: standings/teams.py:97 +#: standings/teams.py msgid "average total speaker score" msgstr "" -#: standings/teams.py:98 +#: standings/teams.py msgid "ATSS" msgstr "" -#: standings/teams.py:107 +#: standings/teams.py msgid "speaker score standard deviation" msgstr "" -#: standings/teams.py:108 +#: standings/teams.py msgid "SSD" msgstr "" -#: standings/teams.py:118 +#: standings/teams.py msgid "sum of margins" msgstr "جمع فرق الدرجات " -#: standings/teams.py:119 +#: standings/teams.py msgid "Marg" msgstr "" -#: standings/teams.py:128 +#: standings/teams.py msgid "average margin" msgstr "متوسط فرق الدرجات " -#: standings/teams.py:129 +#: standings/teams.py msgid "AWM" msgstr "" -#: standings/teams.py:138 +#: standings/teams.py msgid "average individual speaker score" msgstr "" -#: standings/teams.py:139 +#: standings/teams.py msgid "AISS" msgstr "" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by wins" msgstr "" -#: standings/teams.py:212 +#: standings/teams.py msgid "DS" msgstr "" -#: standings/teams.py:219 +#: standings/teams.py msgid "draw strength by total speaker score" msgstr "" -#: standings/teams.py:220 +#: standings/teams.py msgid "DSS" msgstr "" -#: standings/teams.py:231 +#: standings/teams.py msgid "number of pullups before this round" msgstr "" -#: standings/teams.py:232 +#: standings/teams.py msgid "PU" msgstr "" -#: standings/teams.py:254 +#: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "عدد المحكمين الذين صوتوا لصالح هذا الفريق" -#: standings/teams.py:255 +#: standings/teams.py msgid "Ballots" msgstr "تصويت" -#: standings/teams.py:256 +#: standings/teams.py msgid "votes/ballots carried" msgstr "التصويت / النتائج " -#: standings/teams.py:280 +#: standings/teams.py msgid "number of firsts" msgstr "عدد الأوائل" -#: standings/teams.py:281 +#: standings/teams.py msgid "1sts" msgstr "1st" -#: standings/teams.py:290 +#: standings/teams.py msgid "number of seconds" msgstr "عدد الثواني" -#: standings/teams.py:291 +#: standings/teams.py msgid "2nds" msgstr "2nd" -#: standings/teams.py:300 +#: standings/teams.py msgid "number of thirds" msgstr "" -#: standings/teams.py:301 +#: standings/teams.py msgid "3rds" msgstr "" -#: standings/teams.py:313 +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py msgid "Who-beat-whom" msgstr "من أفضل من " -#: standings/teams.py:314 +#: standings/teams.py msgid "WBW" msgstr "" -#: standings/teams.py:315 +#: standings/teams.py msgid "who-beat-whom" msgstr "من أفضل من " -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." msgstr "" -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "يتم فرز هذه القائمة حسب عدد من نقاط الفريق ، ثم أبجديا حسب اسم الفريق. وهي لا تشير إلى ترتيب كل فريق داخل كل قوس. %(silent_round_sentence)s" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "يتم فرز هذه القائمة حسب عدد من الانتصارات، ثم أبجديا حسب اسم الفريق. وهي لا تشير إلى ترتيب كل فريق داخل كل الصندوق . %(silent_round_sentence)s" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." msgstr "لم يتم إدخال النتائج لأية جولات بعد." -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." msgstr "" -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." msgstr "" -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." msgstr "" -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." msgstr "يمكنك تغيير الإعدادات في خانة إعدادات البطولة " -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." msgstr "" -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." msgstr "" -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." msgstr "" -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." msgstr "" -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." msgstr "" -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" msgstr "" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." msgstr "" -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" msgstr "لا يوجد حقل تم تحديده " -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" msgstr "" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" msgstr "" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" msgstr "التقسيمات " -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" msgstr "" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:152 -#: standings/templates/standings_index.html:167 -#: standings/templates/standings_index.html:186 +#: standings/templates/standings_index.html msgid "No data yet" msgstr "" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" msgstr "" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" msgstr "" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" msgstr "" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" msgstr "" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" msgstr "" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" msgstr "" -#: standings/templates/standings_index.html:177 +#: standings/templates/standings_index.html msgid "Average Speaks" msgstr "" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" msgstr "عرض المتأهلون " -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "الفرق" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" msgstr "الكل" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" msgstr "المتناظرين" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" msgstr "" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" msgstr "الكل" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "" -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" msgstr "الردود" -#: standings/templates/standings_menu.html:63 -#: standings/templates/standings_menu.html:76 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "قضايا" -#: standings/templates/standings_menu.html:66 +#: standings/templates/standings_menu.html msgid "By Round" msgstr "" -#: standings/templates/standings_menu.html:81 +#: standings/templates/standings_menu.html msgid "Diversity" msgstr "تقسيمات" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." msgstr "" -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " msgstr "

    هناك خلل في إعداد الترتيب : %(message)s

    " -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " msgstr "

    قد تحتاج إلى مراجعة مرة أخرى تحت الإعدادات في حالة عدم قدرتك على إصلاح المشكلة يمكنك الاتصال بالمطور .

    " -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " msgstr "

    على غرفة العمليات معالجة هذا العطل

    " -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" msgstr "" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" msgstr "%(title)s( أفضل %(limit)d فقط )" -#: standings/views.py:208 standings/views.py:428 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." msgstr "لا يمكن إظهار النتائج لأن كافة جولات البطولة جولات صامتة." -#: standings/views.py:290 +#: standings/views.py msgid "Speaker Standings" msgstr "ترتيب المتحدث" -#: standings/views.py:326 +#: standings/views.py msgid "Speaker Tab" msgstr "النتائج المتحدث" -#: standings/views.py:341 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" msgstr "%(category)sترتيب المتحدثين " -#: standings/views.py:359 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" msgstr "نتائج المتحدث %(category)s" -#: standings/views.py:372 +#: standings/views.py msgid "Reply Speaker Standings" msgstr "ترتيب متحدث خطاب الرد" -#: standings/views.py:380 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." msgstr "خطابات الرد غير ممكنة في هذه البطولة" -#: standings/views.py:408 +#: standings/views.py msgid "Reply Speaker Tab" msgstr "النتائج متحدثي خطاب الرد" -#: standings/views.py:420 standings/views.py:669 +#: standings/views.py msgid "Team Standings" msgstr "ترتيب الفرق " -#: standings/views.py:499 +#: standings/views.py msgid "Team Tab" msgstr "النتائج حسب الفرق" -#: standings/views.py:518 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" msgstr "" -#: standings/views.py:545 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" msgstr "" -#: standings/views.py:556 +#: standings/views.py msgid "Current Team Standings" msgstr "ترتيب الفرق الحالي" -#: standings/views.py:592 +#: standings/views.py msgid "Points" msgstr "" -#: standings/views.py:638 +#: standings/views.py msgid "Feedback Overview" msgstr "" -#: standings/views.py:655 -msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." msgstr "" diff --git a/tabbycat/tournaments/locale/ar/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/ar/LC_MESSAGES/django.po index ad71f33b735..c5023ab7da3 100644 --- a/tabbycat/tournaments/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -18,640 +18,635 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "البطولات" -#: tournaments/forms.py:29 +#: tournaments/forms.py msgid "Number of preliminary rounds" msgstr "عدد الجولات التمهيدية " -#: tournaments/forms.py:34 +#: tournaments/forms.py msgid "Number of teams in the open break" msgstr "عدد الفرق المتأهلة" -#: tournaments/forms.py:35 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." msgstr "اترك المساحة فارغة إذا لم يكن هناك جولة إضافية " -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Did you agree with their decision?" msgstr "" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Agree?" msgstr "" -#: tournaments/forms.py:47 +#: tournaments/forms.py msgid "Comments" msgstr "" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:61 +#: tournaments/forms.py msgid "Open" msgstr "فتح " -#: tournaments/forms.py:86 +#: tournaments/forms.py msgid "Format Configuration" msgstr "ترتيب " -#: tournaments/forms.py:87 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" msgstr "تطبيق مجموعة قياسية من الإعدادات لمطابقة تنسيق المناظرة" -#: tournaments/forms.py:91 +#: tournaments/forms.py msgid "Public Configuration" msgstr "التهئية العامة " -#: tournaments/forms.py:92 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" msgstr "تظهر المعلومات غير الحساسة على الجانب المواجه للجمهور من هذا الموقع، مثل توجه (صدر مرة واحدة) والحركات من الجولات السابقة" -#: tournaments/forms.py:99 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" msgstr "" -#: tournaments/forms.py:195 +#: tournaments/forms.py msgid "Current preliminary round" msgstr "" -#: tournaments/forms.py:196 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" msgstr "" -#: tournaments/forms.py:208 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" msgstr "" -#: tournaments/forms.py:214 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" msgstr "" -#: tournaments/forms.py:226 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." msgstr "" -#: tournaments/forms.py:232 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." msgstr "" -#: tournaments/forms.py:267 +#: tournaments/forms.py #, python-format msgid "%(name)s (%(abbreviation)s)" msgstr "" -#: tournaments/mixins.py:109 +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." msgstr "" -#: tournaments/mixins.py:117 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." msgstr "" -#: tournaments/mixins.py:130 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." msgstr "تمت إعادة توجيهك إلى هذه الصفحة بسبب وجود مشكلة في كيفية تعيين الفرق في المناظرة ." -#: tournaments/mixins.py:137 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." msgstr "هناك مشكلة في كيفية تعيين الفرق للجانبين في المناظرة. سيحتاج مسؤول الإدخال لحل هذه المشكلة." -#: tournaments/mixins.py:236 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" msgstr "من %(round)s" -#: tournaments/mixins.py:437 +#: tournaments/mixins.py msgid "Return to Draw" msgstr "" -#: tournaments/models.py:26 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." msgstr "لا يمكنك استخدامه في البطولة ، لأن الرابط محجوز من نظام Tabbycat. يرجى تجربة رابط آخر." -#: tournaments/models.py:33 tournaments/models.py:320 +#: tournaments/models.py msgid "name" msgstr "اسم " -#: tournaments/models.py:34 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" msgstr "الاسم الكامل ، مثال على ذلك \" البطولة الاسترالية للمناظرات 2016 \" " -#: tournaments/models.py:36 +#: tournaments/models.py msgid "short name" msgstr "اسم قصير" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" msgstr "الاسم المستخدم في القائمة \" استراليا 2016 \" " -#: tournaments/models.py:39 tournaments/models.py:314 +#: tournaments/models.py msgid "sequence number" msgstr "رقم التسلسل " -#: tournaments/models.py:40 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." msgstr "رقم يحدد الترتيب النسبي الذي يتم فيه عرض البطولات على الصفحة الرئيسية." -#: tournaments/models.py:42 +#: tournaments/models.py msgid "slug" msgstr "اختصار" -#: tournaments/models.py:43 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" msgstr "رابط البطولة لا يحتوي على مسافة مثال ذلك \"استراليا2016\"" -#: tournaments/models.py:44 +#: tournaments/models.py msgid "active" msgstr "مفعل " -#: tournaments/models.py:47 tournaments/models.py:313 +#: tournaments/models.py msgid "tournament" msgstr "البطولة" -#: tournaments/models.py:48 +#: tournaments/models.py msgid "tournaments" msgstr "البطولات" -#: tournaments/models.py:285 +#: tournaments/models.py msgid "Random" msgstr "عشوائي " -#: tournaments/models.py:286 +#: tournaments/models.py msgid "Manual" msgstr "يدوي" -#: tournaments/models.py:287 +#: tournaments/models.py msgid "Round-robin" msgstr "ذهاب وإياب" -#: tournaments/models.py:288 +#: tournaments/models.py msgid "Power-paired" msgstr "" -#: tournaments/models.py:289 tournaments/models.py:296 +#: tournaments/models.py msgid "Elimination" msgstr "تراجع " -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Preliminary" msgstr "أولية " -#: tournaments/models.py:305 +#: tournaments/models.py msgid "None" msgstr "لا يوجد" -#: tournaments/models.py:306 +#: tournaments/models.py msgid "Draft" msgstr "مسودة" -#: tournaments/models.py:307 +#: tournaments/models.py msgid "Confirmed" msgstr "معتمد" -#: tournaments/models.py:308 +#: tournaments/models.py msgid "Released" msgstr "معلنة" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" msgstr "الرقم الذي يحدد ترتيب الجولة ، يجب أن يتم احتسابه بالتسلسل من 1 للجولة الأولى" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "completed" msgstr "" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" msgstr "" -#: tournaments/models.py:320 +#: tournaments/models.py msgid "e.g. \"Round 1\"" msgstr "مثال : الجولة 1 " -#: tournaments/models.py:321 +#: tournaments/models.py msgid "abbreviation" msgstr "الاختصار" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "e.g. \"R1\"" msgstr "مثال ذلك : R1 " -#: tournaments/models.py:323 +#: tournaments/models.py msgid "stage" msgstr "مسرح" -#: tournaments/models.py:324 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" msgstr "" -#: tournaments/models.py:326 +#: tournaments/models.py msgid "draw type" msgstr "نوع الرسم " -#: tournaments/models.py:327 +#: tournaments/models.py msgid "Which draw method to use" msgstr "طريقة القرعة التي سيتم استخدامها" -#: tournaments/models.py:330 +#: tournaments/models.py msgid "break category" msgstr "الفئة المتأهلة" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "If elimination round, which break category" msgstr "إذا تم التراجع في الجولة، من الفئة المتأهلة " -#: tournaments/models.py:334 +#: tournaments/models.py msgid "draw status" msgstr "حالة القرعة " -#: tournaments/models.py:335 +#: tournaments/models.py msgid "The status of this round's draw" msgstr "حالة القرعة لهذه الجولة " -#: tournaments/models.py:338 +#: tournaments/models.py msgid "feedback weight" msgstr "التغذية الراجعة " -#: tournaments/models.py:340 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." msgstr "" #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:343 +#: tournaments/models.py msgid "silent" msgstr "صامت" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." msgstr "هذه النتيجة صامتة، (النتيجة مثلا) لا ينبغي إعلانها للجمهور " -#: tournaments/models.py:346 +#: tournaments/models.py msgid "motions released" msgstr "القضايا المعلنة " -#: tournaments/models.py:347 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" msgstr "ما إذا كانت الاقتراحات ستظهر على موقع الويب العام ، على افتراض أن هذه الميزة قيد التشغيل" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "starts at" msgstr "ابدأ بـ" -#: tournaments/models.py:351 +#: tournaments/models.py msgid "weight" msgstr "" -#: tournaments/models.py:352 +#: tournaments/models.py msgid "A factor for the points received in the round. For example, if 2, all points are doubled." msgstr "" -#: tournaments/models.py:355 +#: tournaments/models.py msgid "round" msgstr "جولة" -#: tournaments/models.py:356 +#: tournaments/models.py msgid "rounds" msgstr "جولات" -#: tournaments/models.py:369 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." msgstr "جولة في مرحلة التراجع يجب أن تكون القرعة من نوع التراجع " -#: tournaments/models.py:372 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." msgstr "جولة في المرحلة الأولية لا يمكن تعيين نوع القرعة الخاص بها من نوع التراجع" -#: tournaments/models.py:377 +#: tournaments/models.py msgid "Elimination rounds must have a break category." msgstr "جولات التراجع يجب أن تحظى بتأهل معين " -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" msgstr "لوحة القيادة" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" msgstr "عرض " -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" msgstr "الجولة الأولى : %(round)s، الحالة : %(status)s" -#: tournaments/templates/blank_site_start.html:7 -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" msgstr "مرحبا بك في Tabbycat! " -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." msgstr "للبدء ، ستحتاج إلى إنشاء حساب المستخدم الأول. هذا الحساب هو حساب \"مستخدم متميز\": سيتمكن من تعديل أي شيء على الموقع. لذلك ، يجب عليك استخدام كلمة مرور قوية." -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." msgstr "يمكنك فقط إنشاء هذا الحساب مرة واحدة، ولكن إذا أردت، يمكنك تغيير اسم المستخدم وكلمة المرور بعد إنشائها، أو إضافة اسم مستخدم جديد بعد ذلك." -#: tournaments/templates/blank_site_start.html:32 +#: tournaments/templates/blank_site_start.html msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." msgstr "يتم استخدام عنوان البريد الإلكتروني لإعادة تعيين كلمة المرور. لا يتعين عليك تقديم واحد ، ولكن إذا لم تفعل ، فلن تتمكن من إعادة تعيين كلمة المرور الخاصة بك إذا نسيتها." -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" msgstr "إنشاء حساب " -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" msgstr "ترتيب البطولة %(tournament)s" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." msgstr "لإنهاء إنشاء بطولتك ، حدد خيارات تكوين أساسية. لاحظ أنه يمكن تغييرها دائمًا لاحقًا (مع تحكم أكثر دقة) إذا لزم الأمر." -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" msgstr "ترتيب البطولة %(tournament_name)s" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" msgstr "إنشاء بطولة جديدة " -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." -msgstr "Tabbycat نظام مجاني للاستخدام في المسابقات الغير ربحية وغير الممولة (على الرغم من تشجيع التبرعات). إذا تم تشغيل بطولتك للربح أو لجمع التبرعات ، يرجى ملاحظة أن هناك طلب شراء لمزيد من التفاصيل ، راجع اتفاقية ترخيص ." +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgstr "" -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" msgstr "هل تريد الخروج من Tabbycat؟" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." msgstr "" -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" msgstr "" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." msgstr "" -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" msgstr "إنشاء بطولة " -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" msgstr "إلغاء وعودة إلى الصفحة الرئيسية " -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" msgstr "" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." msgstr "يتطلب Tabbycat دائما ، في كل المناظرة ، تعيين واحد وفريق واحد فقط لكل جانب. عندما لا يكون هذا هو الحال ، يحدث هذا الخطأ. عادة ، هذا هو نتيجة المناظرات التي تم تحريرها يدويا." -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" msgstr "فيما يلي قائمة بالمناظرات المسيئة. لإصلاحها ، ستحتاج إلى إجراء ما يلي:" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." msgstr "اضغط على زرتعديل المناظرة في هذه المناظرة" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." msgstr "تأكد من أن كل جانب يجب أن يكون موجود في المناظرة وأن يكون له فريق معين. إذا كان هناك فريق مفقود، يجب العثور على صف فارغ وتعيين فريق جديد و جانب له مخصص وفقا لذلك." #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." msgstr "تأكد بعدم ظهور جانب أكثر من مره واحدة في المناظرة " #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." msgstr "حفظالتغيير " -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." msgstr "بمجرد إصلاح جميع المناظرات ، يجب أن تكون قادرًا على العودة إلى أي صفحة كنت فيها بالأصل دون تكرار الخطأ." -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." msgstr "يمكنك عرض جميع المناظرات في قسم المناظرات وتعديلها " -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" msgstr "الرقم التعريفي للمناظرة " -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" -msgstr "الفريق ( الفرق ) في %(side)s" +msgid "Teams on %(side)s" +msgstr "" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" msgstr "رابط لتعديل هذه المناظرة " -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" msgstr "لا يوجد فرق" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" msgstr "فرق متعددة" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" msgstr "تعديل هذه المناظرة " -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" msgstr "يبدو أن جميع المناظرات تسير بحالة جيدة!" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." msgstr "في حالة استمرار إعادة توجيك إلى هذه الصفحة وكنت غير متأكد من السبب، يرجى الاتصال بمطوري Tabbycat." -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" msgstr "مرحباً في %(tournament)s" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." msgstr "لا يوجد حاليا أي معلومات عامة متاحة لهذه البطولة" -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" msgstr "فريق التاب " -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" msgstr "تاب المتحدثين " -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" msgstr "نتائج المتحدث %(category)s" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" msgstr "تاب خطاب الرد " -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" msgstr "تاب المحكمين " -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" msgstr "تاب القضايا " -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" msgstr "الأطراف" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:203 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" msgstr "قرعة ل%(round)s" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" msgstr "" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" msgstr "تسجيلات الدخول" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" msgstr "النتائج" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "قضايا" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" msgstr "ترتيب الفرق " -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" msgstr "%(category)s تأهل" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" msgstr "الحكام المتأهلون" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" msgstr "تقسيمات" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" msgstr "المشاركون" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" msgstr "" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" msgstr "التغذية الراجعة " -#: tournaments/templates/public_tournament_index.html:188 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Enter Ballot for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:195 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" msgstr "إدخال التغذية الراجعة " -#: tournaments/templates/public_tournament_index.html:217 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" msgstr "" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" msgstr "" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" msgstr "ادخل النتائج " -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." msgstr "" -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" msgstr "" -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" msgstr "" -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" msgstr "" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" msgstr "" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" msgstr "" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" msgstr "" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." @@ -662,12 +657,12 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" msgstr "" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." @@ -678,374 +673,369 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " msgstr "" -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "" -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" msgstr "الجولة الحالية " -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" msgstr "العودة إلى الترتيب " -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." msgstr "لا توجد جولة محددة حاليا. من أجل عمل Tabby Cat ، يرجى تعيين الجولة الحالية من البطولة %(tournament)s" -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." msgstr "من هذه الصفحة يمكنك متابعة الجولة %(tournament)s" -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "البطولة %(tournament)s لا تمتلك جولات ، تحتاح إلى إضافة جولات إلى البطولة قبل متابعة سير الجولة " -#: tournaments/templates/set_round_weights.html:4 -#: tournaments/templates/set_round_weights.html:5 +#: tournaments/templates/set_round_weights.html msgctxt "page title" -msgid "Set Round Weights" +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: tournaments/templates/set_round_weights.html:8 +#: tournaments/templates/set_round_weights.html msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." msgstr "" -#: tournaments/templates/set_round_weights.html:41 +#: tournaments/templates/set_round_weights.html msgctxt "button" msgid "Set weights" msgstr "" -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:47 -msgid "Inactive Tournaments" -msgstr "" - -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/site_index.html msgid "Welcome!" msgstr "مرحبا " -#: tournaments/templates/site_index.html:21 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" msgstr "يبدو أنه لا تتوفر أي بطولة في هذا الموقع، هل تريد إنشاء واحده ؟ " -#: tournaments/templates/site_index.html:30 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:34 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." msgstr "لا يوجد أي تتبع للبطولة في الموقع " -#: tournaments/templates/site_index.html:55 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html msgid "New Tournament" msgstr "بطولة جديدة " -#: tournaments/templates/site_index.html:58 +#: tournaments/templates/site_index.html msgid "Edit Database Area" msgstr "تعديل قاعدة البيانات " -#: tournaments/templates/site_index.html:61 +#: tournaments/templates/site_index.html msgid "Send a Test Email" msgstr "" -#: tournaments/templates/site_index.html:64 +#: tournaments/templates/site_index.html msgid "Import DebateXML" msgstr "" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Get API Token / Change Password (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:77 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" msgstr "تسجيل الخروج %(user)s" -#: tournaments/templates/site_index.html:83 +#: tournaments/templates/site_index.html msgid "Log In as Admin" msgstr "تسجيل دخول المدير " -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." msgstr "نأمل أن تكون قد استمتعت باستخدام Tabbycat للبطولة الخاصة بك. سنكون ممتنين إذا قمت بالتبرع للمشروع من أجل دعم التطوير والصيانة المستمرة. بالنسبة إلى دورة بهذا الحجم ، نقترح التبرع بـ%(amount)s لاحظ أنه إذا تم تشغيل دورتك للربح ، أو لجمع التبرعات ، فإن جعل هذا الدفع شرطًا إلزاميًا لترخيص برنامج Tabbycat. تعرف على المزيد حول التبرع ." -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" msgstr "مرحباً بك في بطولة جديدة " -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." msgstr "الخطوة التالية هي استيراد بيانات البطولة الأولية الخاصة بك: المؤسسات والفرق والحكام والأماكن الموجودة في بطولتك. هنالك عدة طرق لعمل هذا. بالنسبة للبطولات الصغيرة إلى المتوسطة ، يكون المستضيف البسيط هو أفضل لك ." #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." msgstr "لمزيد من المعلومات ، يرجى الرجوع إلى وثائقنا 1 عن استيراد البيانات الأولية" -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." msgstr "استخدم المستورد البسيط لإضافة بياناتك الأولية." -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" -msgstr "انتقل إلى منطقة الدخول لبدء القرعة لـ%(round)s" +msgid "Mark participants as available to prepare a draw for %(round)s" +msgstr "" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" msgstr "انتقل إلى منطقة القرعة لبدء توزيع الحكام لـ%(round)s" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" -msgstr "انتقل إلى منطقة النتائج لبدء إدخال النتائج لـ%(round)s" +msgid "Go to the results area to enter ballots for %(round)s" +msgstr "" -#: tournaments/templates/tournament_index.html:74 +#: tournaments/templates/tournament_index.html msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." msgstr "" -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" msgstr "مساعد المنطقة لـ %(tn)s" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" msgstr "منطقة عامة لـ%(tn)s" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" msgstr "موالاة" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" msgstr "معارضة" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" msgstr "فريق الموالاة" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" msgstr "فريق المعارضة" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" msgstr "مولاة " -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" msgstr "معارضة " -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" msgstr "" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" msgstr "" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" msgstr "" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" msgstr "" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" msgstr "" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" msgstr "" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" msgstr "" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" msgstr "" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" msgstr "" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" msgstr "" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" msgstr "" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" msgstr "" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" msgstr "" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" msgstr "" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" msgstr "" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" msgstr "" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" msgstr "" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" msgstr "" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" msgstr "" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" msgstr "" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" msgstr "" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "الموالاة الأول" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "الموالاة الثاني" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "المعارضة الأول" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "المعارضة الثاني" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" msgstr "فريق الموالاة الأول" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" msgstr "فريق الموالاة الثاني" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" msgstr "فريق المعارضة الأول" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" msgstr "فريق المعارضة الثاني" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "جولة %(number)d" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" msgstr "ج%(number)d" -#: tournaments/views.py:151 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" msgstr "" -#: tournaments/views.py:157 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." msgstr "" -#: tournaments/views.py:170 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." msgstr "" -#: tournaments/views.py:176 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." msgstr "تم تقديم الجولة الحالية إلى %(round)s لقد وصلت إلى نهاية الجولات التمهيدية! تهانينا! الخطوة التالية هي للمتأهلين." -#: tournaments/views.py:184 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" msgstr "" -#: tournaments/views.py:201 +#: tournaments/views.py msgid "8-team generic dataset" msgstr "" -#: tournaments/views.py:202 +#: tournaments/views.py msgid "24-team Australs dataset" msgstr "" -#: tournaments/views.py:203 +#: tournaments/views.py msgid "88-team BP dataset" msgstr "" -#: tournaments/views.py:288 -msgid "Successfully set round weights." +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." msgstr "" diff --git a/tabbycat/utils/locale/ar/LC_MESSAGES/django.po b/tabbycat/utils/locale/ar/LC_MESSAGES/django.po index fccd83f6c18..250d55b85c3 100644 --- a/tabbycat/utils/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:54\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -18,231 +18,242 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "Email address" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "جولة" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "فريق" + +#: utils/admin.py +msgid "Speaker" msgstr "" -#: utils/tables.py:47 +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "البطولة" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "الجانب " + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "قضايا" + +#: utils/admin.py +msgid "Confirmed" +msgstr "معتمد" + +#: utils/admin.py +msgid "Adjudicator" +msgstr "محكم " + +#: utils/tables.py msgid "No Data Available" msgstr "المعلومات غير متاحة" -#: utils/tables.py:155 utils/tables.py:156 +#: utils/tables.py msgid "Ⓒ" msgstr "" -#: utils/tables.py:157 +#: utils/tables.py msgid "Ⓣ" msgstr "" -#: utils/tables.py:161 +#: utils/tables.py msgid "chair" msgstr "رئيس الجلسة" -#: utils/tables.py:162 +#: utils/tables.py msgid "panellist" msgstr "عضو لجنة التحكيم" -#: utils/tables.py:163 +#: utils/tables.py msgid "trainee" msgstr "متدرب" -#: utils/tables.py:166 +#: utils/tables.py msgid "—" msgstr "" -#: utils/tables.py:167 +#: utils/tables.py msgid "Redacted" msgstr "منقحة" -#: utils/tables.py:231 utils/tables.py:237 +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" msgstr "" -#: utils/tables.py:247 utils/tables.py:252 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" msgstr "" -#: utils/tables.py:274 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" msgstr "" -#: utils/tables.py:276 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" msgstr "" -#: utils/tables.py:296 +#: utils/tables.py #, python-format msgid "%(team)s won" msgstr "%(team)sفائز" -#: utils/tables.py:301 +#: utils/tables.py #, python-format msgid "%(team)s lost" msgstr "%(team)s خاسر" -#: utils/tables.py:306 utils/tables.py:318 utils/tables.py:342 +#: utils/tables.py #, python-format msgid "%(team)s—no result" msgstr "%(team)s — لا توجد نتيجة" -#: utils/tables.py:323 +#: utils/tables.py #, python-format msgid "%(team)s placed %(place)s" msgstr "%(team)s المركز الأول (%(place)s)" -#: utils/tables.py:332 +#: utils/tables.py #, python-format msgid "%(team)s is advancing" msgstr "%(team)s تقدم " -#: utils/tables.py:337 +#: utils/tables.py #, python-format msgid "%(team)s was eliminated" msgstr "%(team)s تراجع " -#: utils/tables.py:350 +#: utils/tables.py msgid "View/edit debate ballot" msgstr "" -#: utils/tables.py:356 +#: utils/tables.py msgid "View debate ballot" msgstr "عرض النتيجة " -#: utils/tables.py:369 +#: utils/tables.py #, python-format msgid " vs %(opposition)s" msgstr "ضد %(opposition)s" -#: utils/tables.py:376 +#: utils/tables.py #, python-format msgid "Won against %(team)s" msgstr "فاز على %(team)s" -#: utils/tables.py:378 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" msgstr "خسر من %(team)s" -#: utils/tables.py:380 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" msgstr "لا يوجد نتيجة للفريق %(team)s" -#: utils/tables.py:405 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" msgstr "" -#: utils/tables.py:412 +#: utils/tables.py msgid "Teams in debate:" msgstr "فرق المناظرة" -#: utils/tables.py:415 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "%(team)s(%(side)s)" -#: utils/tables.py:416 utils/tables.py:420 utils/tables.py:446 -#: utils/tables.py:618 +#: utils/tables.py msgid "??" msgstr "" -#: utils/tables.py:434 +#: utils/tables.py msgid "advancing" msgstr "متقدم" -#: utils/tables.py:435 +#: utils/tables.py msgid "Advancing" msgstr "تقدم " -#: utils/tables.py:437 +#: utils/tables.py msgid "eliminated" msgstr "تراجع" -#: utils/tables.py:438 +#: utils/tables.py msgid "Eliminated" msgstr "تراجع " -#: utils/tables.py:441 utils/tables.py:451 +#: utils/tables.py msgid "No result for debate" msgstr "لا نتائج لهذه القضية" -#: utils/tables.py:448 +#: utils/tables.py #, python-format msgid "Placed %(place)s" msgstr "" -#: utils/tables.py:463 -msgid "Tournament" -msgstr "البطولة" - -#: utils/tables.py:472 -msgid "Round" -msgstr "جولة" - -#: utils/tables.py:495 utils/tables.py:672 +#: utils/tables.py msgid "Name" msgstr "الاسم" -#: utils/tables.py:501 utils/tables.py:650 +#: utils/tables.py msgid "Institution" msgstr "مؤسسة" -#: utils/tables.py:507 +#: utils/tables.py msgid "Member of the Adjudication Core" msgstr "عضو في لجنة التحكيم" -#: utils/tables.py:514 +#: utils/tables.py msgid "Independent Adjudicator" msgstr "محكم المناظرة" -#: utils/tables.py:522 +#: utils/tables.py msgid "Always Trainee" msgstr "متدرب دائم" -#: utils/tables.py:557 +#: utils/tables.py msgid "in minority" msgstr "" -#: utils/tables.py:590 +#: utils/tables.py msgid "Debate Adjudicators" msgstr "الحكام " -#: utils/tables.py:621 -msgid "Motion" -msgstr "قضايا" - -#: utils/tables.py:636 -msgid "Team" -msgstr "فريق" - -#: utils/tables.py:641 utils/tables.py:694 +#: utils/tables.py msgid "Categories" msgstr "الفئات" -#: utils/tables.py:692 +#: utils/tables.py msgid "Category" msgstr "الفئة" -#: utils/tables.py:719 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." msgstr "هذه القاعة %(predicate)s" -#: utils/tables.py:721 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." msgstr "هذه القاعة %(predicates)sو %(last_predicate)s" -#: utils/tables.py:736 +#: utils/tables.py msgid "Room" msgstr "قاعة" -#: utils/tables.py:754 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" @@ -253,73 +264,69 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: utils/tables.py:760 +#: utils/tables.py msgid "Teams are from the same institution" msgstr "فرق تقابلت أكثر من مرة" -#: utils/tables.py:766 +#: utils/tables.py msgid "Conflicts/Flags" msgstr "تعارضات / أعلام" -#: utils/tables.py:819 +#: utils/tables.py msgid "The confirmed ballot" msgstr "" -#: utils/tables.py:824 utils/tables.py:849 +#: utils/tables.py msgid "No ballot" msgstr "" -#: utils/tables.py:826 utils/tables.py:851 +#: utils/tables.py msgid "No scores" msgstr "" -#: utils/tables.py:829 utils/tables.py:854 utils/tables.py:866 +#: utils/tables.py msgid "View Ballot" msgstr "عرض النتائج " -#: utils/tables.py:836 +#: utils/tables.py msgid "The ballot you submitted" msgstr "" -#: utils/tables.py:840 +#: utils/tables.py msgid "View/Edit Ballot" msgstr "تعديل النتائج " -#: utils/tables.py:874 +#: utils/tables.py msgid "Result" msgstr "النتائج" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:880 +#: utils/tables.py msgid "TBC" msgstr "" -#: utils/tables.py:881 -msgid "Side" -msgstr "الجانب " - -#: utils/tables.py:919 -msgid "Team iron-manned this round and the last." +#: utils/tables.py +msgid "Team iron-personed this round and the last." msgstr "" -#: utils/tables.py:922 -msgid "Team iron-manned this round." +#: utils/tables.py +msgid "Team iron-personed this round." msgstr "" -#: utils/tables.py:925 -msgid "Team iron-manned last round." +#: utils/tables.py +msgid "Team iron-personed last round." msgstr "" -#: utils/tables.py:942 utils/tables.py:943 +#: utils/tables.py #, python-format msgid "Team %(num)d" msgstr "الفريق %(num)d" -#: utils/tables.py:950 +#: utils/tables.py msgid "Postpone" msgstr "" -#: utils/views.py:38 +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." msgstr "" diff --git a/tabbycat/venues/locale/ar/LC_MESSAGES/django.po b/tabbycat/venues/locale/ar/LC_MESSAGES/django.po index 4e248c962a7..cb2d07ceea3 100644 --- a/tabbycat/venues/locale/ar/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-05 15:26-0300\n" -"PO-Revision-Date: 2020-07-10 07:05\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" "Last-Translator: philip_tc\n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -18,179 +18,177 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 +#: venues/apps.py msgid "Rooms" msgstr "قاعات المناظرة" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." msgstr "" -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." msgstr "" -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." msgstr "" -#: venues/models.py:9 venues/models.py:66 +#: venues/models.py msgid "name" msgstr "الاسم" -#: venues/models.py:11 venues/models.py:120 +#: venues/models.py msgid "priority" msgstr "الأولوية" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" msgstr "ستفضل أرقام القاعات التي لها أولوية أعلى عند تخصيص مكان التناظر" -#: venues/models.py:15 venues/models.py:78 +#: venues/models.py msgid "tournament" msgstr "البطولة" -#: venues/models.py:16 +#: venues/models.py msgid "URL" msgstr "" -#: venues/models.py:17 +#: venues/models.py msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" msgstr "" -#: venues/models.py:24 +#: venues/models.py msgid "room" msgstr "قاعة" -#: venues/models.py:25 venues/models.py:76 +#: venues/models.py msgid "rooms" msgstr "قاعات المناظرة" -#: venues/models.py:61 +#: venues/models.py msgid "Don't display in room name" msgstr "" -#: venues/models.py:62 +#: venues/models.py msgid "Display as prefix" msgstr "العرض كبادئة" -#: venues/models.py:63 +#: venues/models.py msgid "Display as suffix" msgstr "العرض كبادئة" -#: venues/models.py:67 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." msgstr "اسم الفئة، على سبيل المثال، \"أرجواني\"، \"وصول مجاني\"، \"قريب من غرفة الإدخال\". يظهر هذا الاسم عندما تكون الفئة مسبوقة أو ملحقة باسم المكان في القرعة، على سبيل المثال، \"أرجواني - G05\".\n" " " -#: venues/models.py:71 +#: venues/models.py msgid "description" msgstr "الوصف" -#: venues/models.py:72 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." msgstr "الوصف، كمسند جملة، على سبيل المثال. \"لديه حرية الوصول\"، \"على مقربة من قاعة المؤتمرات\". هذا الوصف يتبع \"هذا المكان\" عندما يظهر في تلميحات الأدوات ، على سبيل المثال، \"هذا المكان قريب من قاعة المؤتمرات\"." -#: venues/models.py:82 +#: venues/models.py msgid "display in room name" msgstr "" -#: venues/models.py:83 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" msgstr "" -#: venues/models.py:85 +#: venues/models.py msgid "display in public tooltip" msgstr "تلميح عام" -#: venues/models.py:86 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." msgstr "يعرض الوصف في تلميح الأدوات للمكان على الصفحات العامة. سيظهر الوصف، إن لم يكن فارغا، دائما على صفحات المشرف." -#: venues/models.py:90 +#: venues/models.py msgid "room category" msgstr "فئة المكان" -#: venues/models.py:91 +#: venues/models.py msgid "room categories" msgstr "فئات المكان" -#: venues/models.py:119 +#: venues/models.py msgid "category" msgstr "الفئة" -#: venues/models.py:123 +#: venues/models.py msgid "subject content type" msgstr "نوع محتوى الموضوع" -#: venues/models.py:126 +#: venues/models.py msgid "subject ID" msgstr "معرف الموضوع " -#: venues/models.py:132 +#: venues/models.py msgid "room constraint" msgstr "القاعة المقيدة" -#: venues/models.py:133 +#: venues/models.py msgid "room constraints" msgstr "القاعات المقيدة" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" msgstr "فئات المكان" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." msgstr "تسمح لك فئات القاعات بتجميع الأماكن معا في \"مناطق\" لعرضها في السحب وجعل التنقل أسهل للمشاركين و / أو تحديد القيود المفروضة على تخصيص المكان التي تتطلب فرقا أو محكمين أو مؤسسات يتم وضعها في مكان في فئة معينة." -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." msgstr "اذا كنت تريد حذف القاعة ، تعديل قاعدة البيانات المنطقة " -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" msgstr "حفظ فئات القاعات" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" msgstr "القاعات المقيدة" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." msgstr "تفرض قيود المكان على مقدم المكان محاولة إبقاء الفريق أو المحكم المحدد، أو جميع الفرق (ليس المحكمين) من المؤسسة المحددة، في مكان في الفئة المعينة. يحل مجال \"الأولوية\" القيود المتعارضة: الأولوية العليا لها الأسبقية. يمكنك أيضا استخدام حقل الأولوية لتحديد قيود \"التفضيل الأقل\"، والتي يتم اتخاذها إذا كان لا يمكن تلبية قيود ذات أولوية أعلى." -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" msgstr "حفظ القاعة المقيدة" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" msgstr "" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" msgstr "" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" msgstr "" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" msgstr "" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" msgstr "" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" @@ -201,26 +199,26 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." msgstr "لا يتم إجراء تغييرات على فئات القاعات" -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" msgstr "" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" msgstr "" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." From 8770ee09e737578991d3b8fdd3c34ba4d1fb1057 Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Sun, 5 Feb 2023 11:56:33 +1100 Subject: [PATCH 203/255] New translations django.po (Bengali) --- .../actionlog/locale/bn/LC_MESSAGES/django.po | 156 ++-- .../locale/bn/LC_MESSAGES/django.po | 199 +++-- .../locale/bn/LC_MESSAGES/django.po | 450 +++++----- .../locale/bn/LC_MESSAGES/django.po | 164 ++-- .../breakqual/locale/bn/LC_MESSAGES/django.po | 250 +++--- tabbycat/draw/locale/bn/LC_MESSAGES/django.po | 604 +++++++------ .../importer/locale/bn/LC_MESSAGES/django.po | 223 +++-- tabbycat/locale/bn/LC_MESSAGES/django.po | 476 +++++----- .../motions/locale/bn/LC_MESSAGES/django.po | 193 +++-- .../locale/bn/LC_MESSAGES/django.po | 196 +++-- .../options/locale/bn/LC_MESSAGES/django.po | 813 +++++++++--------- .../locale/bn/LC_MESSAGES/django.po | 493 ++++++----- .../printing/locale/bn/LC_MESSAGES/django.po | 59 +- .../locale/bn/LC_MESSAGES/django.po | 85 +- .../results/locale/bn/LC_MESSAGES/django.po | 538 ++++++------ .../standings/locale/bn/LC_MESSAGES/django.po | 311 ++++--- .../locale/bn/LC_MESSAGES/django.po | 508 ++++++----- .../utils/locale/bn/LC_MESSAGES/django.po | 189 ++-- .../venues/locale/bn/LC_MESSAGES/django.po | 100 ++- 19 files changed, 2971 insertions(+), 3036 deletions(-) diff --git a/tabbycat/actionlog/locale/bn/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/bn/LC_MESSAGES/django.po index 72a9941cbea..43e3aea3080 100644 --- a/tabbycat/actionlog/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-06-16 23:15\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -17,307 +17,307 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" msgstr "কর্ম লগ" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" msgstr "প্রত্যাখ্যাত‌ ভোটপত্র সেট" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" msgstr "" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" msgstr "নির্মিত ভোটপত্র সেট" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" msgstr "সংশোধিত ভোটপত্র‌ সেট" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" msgstr "নিশ্চিত ভোটপত্র সেট" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" msgstr "সাধারণ আবেদনপত্র হতে জমাকৃত ব্যালট সেট" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" msgstr "সাধারণ আবেদনপত্র হতে জমাকৃত ব্যালট সেট" -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" msgstr "সংরক্ষিত প্রতিক্রিয়া/ ফিডব্যাক" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" msgstr "বিচারকের সম্পাদিত ভিত্তি স্কোর" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" msgstr "বিচারক নোট সেট করুন" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" msgstr "সংরক্ষিত বিচারক এ্যলোকেশন" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" msgstr "অটো বন্টনকৃত বিচারক" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" msgstr "সংরক্ষিত কক্ষের ম্যানুয়াল সংশোধন" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" msgstr "অটো বন্টনকৃত কক্ষ" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" msgstr "সংশোধিত কক্ষ বিভাগ" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" msgstr "সংশোধিত কক্ষ সীমাবদ্ধতা" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" msgstr "নির্মিত অঙ্কন" -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" msgstr "নিশ্চিত অঙ্কন" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" msgstr "পুনঃ উৎপন্ন অঙ্কন" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" msgstr "মুক্ত অঙ্কন" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" msgstr "অপ্রকাশিত অঙ্কন" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" msgstr "সংরক্ষিত ম্যাচআপ ম্যানুয়াল সংশোধন" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" msgstr "ম্যাচআপের সাইড স্ট্যাটাস সংরক্ষণ করা হয়েছে" -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "" -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" msgstr "সংযুক্ত/ সংশোধিত মোশন" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" msgstr "মুক্ত মোশন" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" msgstr "অপ্রকাশিত মোশন" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" msgstr "স্বয়ংক্রিয় অগ্রাধিকারের বির্তক গুরুত্ব" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" msgstr "সংশোধিত বির্তক গুরুত্ব" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" msgstr "পরিবর্তিত বিচারকের ব্রেকিং স্ট্যাটাস" -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" msgstr "সংশোধিত ব্রেক পারদর্শিতা / যোগ্যতা" -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" msgstr "সংশোধিত ব্রেক বিভাগ" -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" msgstr "উৎপন্ন কৃত দলীয় ব্রেক সকল বিভাগের জন্য" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" msgstr "সংশোধিত ব্রেকিং দলের মন্তব্য এবং আপডেটেড সকল দলের ব্রেক" -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" msgstr "সংশোধনকৃত ব্রেকিং দলের মন্তব্য সমূহ এবং আপডেটেড এই দলীয় ব্রেক" -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" msgstr "সংশোধিত ব্রেকিং দলের মন্তব্য" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" msgstr "সেট শুরুর সময়" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" msgstr "অ্যাডভানচ্ড‌ কারেন্ট রাউন্ড টু" -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" msgstr "পর্ব শেষ হিসেবে চিহ্নিত করা হয়েছে" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" msgstr "সংশোধিত দলীয় উপস্থিতি" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" msgstr "সংশোধিত বিচারক উপস্থিতি" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" msgstr "সংশোধিত কক্ষ উপস্থিতি" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" msgstr "সংশোধিত প্রতিযোগিতার অপশন" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" msgstr "সংশোধিত বক্তার বিভাগীয় যোগ্যতা" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" msgstr "সংশোধিত বক্তার বিভাগ সমূহ" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" msgstr "আমদানিকৃত প্রতিষ্ঠান সাধারণ আমদানিকারক ব্যবহার করছে" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" msgstr "আমদানিকৃত কক্ষ সমূহ সাধারণ আমদানিকারক ব্যবহার করছে" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" msgstr "আমদানিকৃত দল সমূহ সাধারণ আমদানিকারক ব্যবহার করছে" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" msgstr "আমদানিকৃত বিচারকগণ সাধারণ আমদানিকারক ব্যবহার করছে" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" msgstr "আপডেটেড বিচারকের স্কোর স্তূপের মধ্যে" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" msgstr "সংশোধিত বিচারকের দলীয় দ্বন্দ্ব সমূহ" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" msgstr "সংশোধিত বিচারক-বিচারক দ্বন্দ্ব সমূহ" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" msgstr "সংশোধিত বিচারক-প্রতিষ্ঠান দ্বন্দ্ব সমূহ" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" msgstr "সংশোধিত দল-প্রতিষ্ঠান দ্বন্দ্ব সমূহ" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" msgstr "জেনারেটেড চেক‌ইন‌ শনাক্তকারী বক্তাদের জন্য" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" msgstr "জেনারেটরের চেক ইন শনাক্তকারী বিচারক মন্ডলীর জন্য" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" msgstr "জেনারেটেড চেক‌ইন‌ শনাক্তকারী কক্ষের জন্য" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" msgstr "নির্মিত সম্পাদনকৃত প্যানেল সমূহ" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" msgstr "অটো অগ্রাধিকারের সম্পাদিত প্যানেল সমূহ" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" msgstr "সংশোধিত সম্পাদনকৃত প্যানেল প্রয়োজনীয়তা" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" msgstr "স্বয়ংক্রিয়ভাবে বন্টনকৃত বিচারক মন্ডলী হতে সম্পাদিত প্যানেল সমূহ" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" msgstr "সংশোধিত সম্পাদিত প্যানেল বিচারক" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" msgstr "স্বয়ংক্রিয় ভাবে বন্টনকৃত সম্পাদিত প্যানেল সমূহ হতে বিতর্ক" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" msgstr "ধরন / ছাপার অক্ষর" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" msgstr "টাইমস্ট্যাম্প" -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "ব্যবহারকারী" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "প্রতিযোগিতা" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "পর্ব" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" msgstr "বিষয় / সূচি টাইপ" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" msgstr "বিষয় আইডি" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" msgstr "কর্ম লগ" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" msgstr "কর্ম লগ প্রবেশ সমূহ" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." msgstr "সকল প্রকার লগ প্রবেশ সমূহ কমপক্ষে একজন ব্যবহারকারী এবং একটি আইপি ঠিকানা/অ্যাডরেস দাবি করে." -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" msgstr "নামবিহীন" diff --git a/tabbycat/adjallocation/locale/bn/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/bn/LC_MESSAGES/django.po index d0c69fc6978..e7b1ad2dda8 100644 --- a/tabbycat/adjallocation/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-06-16 23:14\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -17,436 +17,435 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." msgstr "কোনো বিচারকের উপস্থিতি নিশ্চিত করা হয়নি। স্বয়ংক্রিয় বিচারক সংস্থানের আগে যথেষ্ট বিচারকের উপস্থিতি নিশ্চিত করুন." -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." msgstr[0] "%(count)s আপনার জমা দেয়া স্কোরটি সর্বোচ্চ বিচারক স্কোর (%(score).1f) অপেক্ষা বড়." msgstr[1] "%(count)s জমাকৃত স্কোরটি নির্ধারিত সর্বোচ্চ বিচারক স্কোর (%(score).1f) অপেক্ষা বেশি." -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." msgstr[0] "%(count)s আপনার জমা দেয়া স্কোরটি সর্বোচ্চ বিচারক স্কোর (%(score).1f) অপেক্ষা বড়." msgstr[1] "%(count)s আপনার জমা দেয়া স্কোরটি সর্বোচ্চ বিচারক স্কোর (%(score).1f) অপেক্ষা বড়." -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." msgstr "চেয়ার অথবা প্যানেলিস্ট হওয়ার যোগ্য বিচারক নেই। \"চেয়ার বা প্যানেলিস্ট হওয়ার সর্বনিম্ন মূল্যায়ন স্কোর\" পরিবর্তন করে বিচারকদের বর্তমান স্কোরের নিচে নির্ধারণ করুন।." -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" msgstr "এই রাউন্ডের জন্য কোনো বিতর্ক নেই। সম্ভবত আপনি ড্র তৈরী করেন নি এখনো?" -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." msgstr "%(debate_count)s টি বিতর্ক আছে কিন্তু মাত্র %(adj_count)s জন ভোট করার মতো বিচারক আছেন।" -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." msgstr "%(panel_debates)s টি প্যানেল বিতর্ক আছে কিন্তু মাত্র %(panellists)s জন প্যানেলিস্ট আছেন ( %(needed)s এর তুলনায় কম)." -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." msgstr "%(debates_count)s টি বিতর্ক আছে কিন্তু মাত্র %(voting_count)s জন ভোট করার মতো বিচারক আছেন।" -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" msgstr "বিচারক নির্ধারণ" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." msgstr "ড্র ইতোমধ্যে প্রকাশিত হয়েছে, পুণরায় স্বয়ংক্রিয় বিচারক বন্টনের জন্য সেটি বন্ধ করুন।." -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." msgstr "ড্র নিশ্চিত করা হয়নি, স্বয়ংক্রিয় বিচারক বন্টনের জন্য ড্র নিশ্চিত করুন।." -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." msgstr "কোনো পূর্বগঠিত প্যানেল নেই।" -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." msgstr "সফলভাবে পূর্বগঠিত প্যানেল অনুযায়ী স্বয়ংক্রিয়ভাবে বিচারক নির্ধারিত হয়েছে।" -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" msgstr[0] "বিতর্কের বিচারক স্বয়ংক্রিয়ভাবে নির্ধারিত হয়েছে। তবে, একটি সতর্কবানী ছিলোঃ" msgstr[1] "পূর্বগঠিতপ্যানেল অনুযায়ী সফলভাবে বিতর্কের বিচারক স্বয়ংক্রিয়ভাবে নির্ধারিত হয়েছে। তবে, %(count)d টি সতর্কবানী ছিলোঃ" -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." msgstr "সফলভাবে বিতর্কের বিচারকদের স্বয়ংক্রিয়ভাবে নির্ধারণ করা হয়েছে।" -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." msgstr "কোনো পূর্বগঠিত প্যানেল নেই। প্রথমে প্যানেল তৈরী করুন।" -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" msgstr[0] "পূর্বগঠিত প্যানেল অনুযায়ী সফলভাবে বিতর্কের বিচারক স্বয়ংক্রিয়ভাবে নির্ধারিত হয়েছে। তবে, একটি সতর্কবানী ছিলোঃ" msgstr[1] "পূর্বগঠিত প্যানেল অনুযায়ী সফলভাবে বিতর্কের বিচারক স্বয়ংক্রিয়ভাবে নির্ধারিত হয়েছে। তবে, %(count)d টি সতর্কবানী ছিলোঃ" -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." msgstr "স্বয়ংক্রিয়ভাবে বিচারকগণের পূর্বগঠিত প্যানেল নির্ধারিত হয়েছে।" -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." msgstr "কোনো ব্রেক বিভাগকে \"সাধারণ\" হিসেবে চিহ্নিত করা না হওয়ায় বিতর্কের গুরুত্ব হিসাব করা যায় নি।" -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." msgstr "স্বয়ংক্রিয়ভাবে বিতর্কের গুরুত্ব নির্ধারিত হয়েছে। " -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." msgstr "কোনো ব্রেক বিভাগকে \"সাধারণ\" হিসেবে চিহ্নিত করা না হওয়ায় প্যানেলের গুরুত্ব হিসাব করা যায় নি।" -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." msgstr "স্বয়ংক্রিয়ভাবে পূর্বনির্ধারিত প্যানেলের গুরুত্ব নির্ধারিত হয়েছে।" -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." msgstr "যেহেতু এটি প্রথম পর্ব, তাই পূর্বগঠিত প্যানেলগুলির সাথে ব্র্যাকেট এবং সম্ভাব্যতার তথ্য দেখানো যায় নি।" -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." msgstr "আগের পর্বের ড্র এখনো করা হয়নি, তাই পূর্বগঠিত প্যানেলকে ব্র্যাকেট এবং সম্ভাব্যতার সাথে দেখানো যায় নি।" -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." msgstr "এই পর্বের জন্য পূর্বগঠিত প্যানেল সফলভাবে তৈরী হয়েছে।" -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" msgstr "স্পিকার" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" msgstr "প্যানেলিস্ট" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" msgstr "নবিশ বিচারক" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "বিতর্ক" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "বিচারক" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" msgstr "ধরণ" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" msgstr "উপস্থিত?" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" msgstr "বিতর্কের বিচারক" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" msgstr "বিতর্কের বিচারকগণ" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "দল" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" msgstr "বিচারক-দল দ্বন্দ্ব" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" msgstr "বিচারক-দল দ্বন্দ্বসমূহ" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "বিচারক ১" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "বিচারক ২" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" msgstr "বিচারক-বিচারক দ্বন্দ্ব" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" msgstr "বিচারক-বিচারক দ্বন্দ্বসমূহ" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" msgstr "প্রতিষ্ঠান" -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" msgstr "বিচারক-প্রতিষ্ঠান দ্বন্দ্ব" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" msgstr "বিচারক-প্রতিষ্ঠান দ্বন্দ্বসমূহ" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" msgstr "দল-প্রতিষ্ঠান দ্বন্দ্ব" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" msgstr "দল-প্রতিষ্ঠান দ্বন্দ্বসমূহ" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "পর্ব" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" msgstr "গুরুত্ব" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" msgstr "সর্বনিম্ন ব্র্যাকেট" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" msgstr "সর্বনিম্ন যে ব্র্যাকেটে এই প্যানেল বিচারকার্য করতে পারে" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" msgstr "সর্বোচ্চ ব্র্যাকেট" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" msgstr "সর্বোচ্চ যে ব্র্যাকেটে এই প্যানেল বিচারকার্য করতে পারে" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" msgstr "কক্ষের র‍্যাংক " -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" msgstr "কোনো এলগোরিদমে ব্যবহৃত হয়নি এমন প্যানেলের ক্রমিক নাম্বার" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" msgstr "সম্ভাব্যতা" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" msgstr "যে কয়টি বিভাগের জন্য এই কক্ষটি সম্ভাব্য" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" msgstr "পূর্বগঠিত প্যানেল" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" msgstr "পূর্বগঠিত প্যানেল" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" msgstr "প্যানেল" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" msgstr "পূর্বগঠিত প্যানেলের বিচারক" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" msgstr "পূর্বগঠিত প্যানেলের বিচারকগণ" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." msgstr "প্যানেল পূর্বগঠিত আছে। এ পর্বের জন্যে কি আপনি পূর্বগঠিত প্যানেল নির্ধারণ করেছেন? না করে থাকে স্বয়ংক্রিয়ভাবে বিচারক নির্ধারণ করে দেখুন?" -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" msgstr "পূর্বগঠিত প্যানেল" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." msgstr "একটি পূর্বগঠিত প্যানেল একটি নির্ধারিত বিচারকের সমষ্টি যেটি কোনো পর্বের ড্র তৈরীর পূর্বেই নির্ধারণ করা থাকে। তারপর আপনি স্বয়ংক্রিয়ভাবে অথবা নিজে নিজে এই প্যানেলগুলি স্বাভাবিক বিচারক নির্ধারণ প্রক্রিয়ার মাধ্যমে কোনো কক্ষে নির্দিষ্ট করতে পারেন। এটি আপনার বিচারক নির্ধারণ প্রক্রিয়াকে দ্রুত করবে।" -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." msgstr "উল্লেখ্য যে, শুধু যেসব বিচারকের উপস্থিত হিসেবে চিহ্নিত করা হয়েছে এই পর্বের জন্য, তারাই এই পর্বে বিভিন্ন বিতর্কের জন্য নির্ধারিত হবেন। তাই আগেই তাদের উপস্থিতি নিশ্চিত করুন।" -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" msgstr "%(round)s এর জন্য পূর্বগঠিত প্যানেল পরিবর্তন করুন" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" msgstr "দ্বন্দ্বঃ %(adjudicator)s & %(team)s (personal)" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" msgstr "দ্বন্দ্বঃ %(adjudicator)s & %(team)s প্রতিষ্ঠানের দ্বারা %(institution)s" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" msgstr "দ্বন্দ্বঃ %(adjudicator1)s & %(adjudicator2)s (personal)" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" msgstr "দ্বন্দ্বঃ %(adjudicator1)s & %(adjudicator2)s প্রতিষ্ঠানের দ্বারা %(institution)s" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "পুরুষ" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" msgstr "নারী" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "অন্যান্য" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" msgstr "অজ্ঞাত" -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" msgstr "নির্ধারিত বিচারক পরিবর্তন করুন" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" msgstr "প্যানেল পরিবর্তন করুন" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" msgstr "প্যানেলের সার্বিক চিত্রে ফিরে যান" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" msgstr "বিচারক-দল দ্বন্দ্বসমূহ" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" msgstr "বিচারক-দল দ্বন্দ্বসমূহ সেভ করুন" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." msgstr[0] "%(count)d বিচারক-দল দ্বন্দ্ব সেভ করা হয়েছে" msgstr[1] "%(count)d বিচারক-দল দ্বন্দ্বগুলি সেভ করা হয়েছে" -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." msgstr[0] "%(count)d বিচারক-দল দ্বন্দ্ব মুছে ফেলা হয়েছে।" msgstr[1] "%(count)d বিচারক-দল দ্বন্দ্ব মুছে ফেলা হয়েছে।" -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." msgstr "বিচারক-দল দ্বন্দ্বসমূহের কোনো পরিবর্তন করা হয়নি" -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" msgstr "বিচারক-বিচারক দ্বন্দ্বসমূহ" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" msgstr "বিচারক-বিচারক দ্বন্দ্বসমূহ সেভ করুন" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." msgstr[0] "%(count)d বিচারক-বিচারক দ্বন্দ্ব সেভ করা হয়েছে।" msgstr[1] "%(count)d বিচারক-বিচারক দ্বন্দ্ব সেভ করা হয়েছে।" -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." msgstr[0] "%(count)d বিচারক-বিচারক দ্বন্দ্ব সেভ করা হয়েছে।" msgstr[1] "%(count)d বিচারক-বিচারক দ্বন্দ্ব সেভ করা হয়েছে।" -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." msgstr "বিচারক-বিচারক দ্বন্দ্বের কোনো পরিবর্তন হয়নি" -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" msgstr "বিচারক-প্রতিষ্ঠান দ্বন্দ্ব" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" msgstr "বিচারক-প্রতিষ্ঠান দ্বন্দ্ব সেভ করুন" -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." msgstr[0] "%(count)d বিচারক-প্রতিষ্ঠান দ্বন্দ্ব সেভ করা হয়েছে।" msgstr[1] "%(count)d বিচারক-বিচারক দ্বন্দ্ব সেভ করা হয়েছে।" -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." msgstr[0] "%(count)d বিচারক-প্রতিষ্ঠান দ্বন্দ্ব মুছে ফেলা হয়েছে।" msgstr[1] "%(count)d বিচারক-প্রতিষ্ঠান দ্বন্দ্ব সেভ করা হয়েছে।" -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." msgstr "বিচারক-প্রতিষ্ঠান দ্বন্দ্বের কোনো পরিবর্তন হয়নি" -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" msgstr "দল-প্রতিষ্ঠান দ্বন্দ্বসমূহ" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" msgstr "দল-প্রতিষ্ঠান দ্বন্দ্বসমূহ সেভ করুন" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." msgstr[0] "%(count)d দল-প্রতিষ্ঠান দ্বন্দ্ব সেভ করা হয়েছে।" msgstr[1] "%(count)d দল-প্রতিষ্ঠান দ্বন্দ্ব সেভ করা হয়েছে।" -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." msgstr[0] "%(count)d দল-প্রতিষ্ঠান দ্বন্দ্ব মুছে ফেলা হয়েছে।" msgstr[1] "%(count)d দল-প্রতিষ্ঠান দ্বন্দ্ব মুছে ফেলা হয়েছে।" -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." msgstr "দল-প্রতিষ্ঠান দ্বন্দ্বের কোনো পরিবর্তন হয়নি" diff --git a/tabbycat/adjfeedback/locale/bn/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/bn/LC_MESSAGES/django.po index b17989bd3bc..43af6bbdc72 100644 --- a/tabbycat/adjfeedback/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:49\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -17,40 +17,40 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:44 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" msgstr "পূর্ণসংখ্যার স্কেলের অবশ্যই একটি সর্বোচ্চ এবং সর্বনিম্ন মান থাকবে" -#: adjfeedback/admin.py:73 adjfeedback/admin.py:139 +#: adjfeedback/admin.py msgid "target" msgstr "লক্ষ্য" -#: adjfeedback/admin.py:74 adjfeedback/admin.py:140 adjfeedback/models.py:236 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" msgstr "সূত্র/ উৎস বিচারক" -#: adjfeedback/admin.py:75 adjfeedback/admin.py:141 adjfeedback/models.py:238 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" msgstr "সূত্র দল" -#: adjfeedback/admin.py:91 -#, python-format -msgid "%(timestamp)s (version %(version)s)" -msgstr "" - -#: adjfeedback/admin.py:96 +#: adjfeedback/admin.py msgid "Target" msgstr "লক্ষ্য" -#: adjfeedback/admin.py:97 adjfeedback/admin.py:162 +#: adjfeedback/admin.py msgid "Source" msgstr "সূত্র/উৎস" -#: adjfeedback/admin.py:98 +#: adjfeedback/admin.py msgid "Feedback timestamp and version" msgstr "" -#: adjfeedback/admin.py:180 +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." @@ -58,911 +58,907 @@ msgstr[0] "1 প্রতিক্রিয়া উপস্হাপন স "মনে রাখবেন যে ইহা অন্যান্য উপস্হাপন সমূহের অনিশ্চিত আকারে চিহ্নিত হওয়ার কারণ হিসেবে দাড়িয়েছিল." msgstr[1] "" -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." msgstr[0] "" msgstr[1] "" -#: adjfeedback/admin.py:205 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." msgstr[0] "" msgstr[1] "" -#: adjfeedback/admin.py:215 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." msgstr[0] "" msgstr[1] "" -#: adjfeedback/admin.py:225 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." msgstr[0] "" msgstr[1] "" -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" msgstr "বিচারক প্রতিক্রিয়া" -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "chair" msgstr "চেয়ার" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "solo" msgstr "একক" -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "panellist" msgstr "প্যানেলিস্ট" -#: adjfeedback/forms.py:29 +#: adjfeedback/forms.py msgid "trainee" msgstr "নবিশ বিচারক" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:57 +#: adjfeedback/forms.py msgid "Yes" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:59 +#: adjfeedback/forms.py msgid "No" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:74 adjfeedback/forms.py:83 +#: adjfeedback/forms.py msgid "This field is required." msgstr "" -#: adjfeedback/forms.py:164 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" msgstr "সর্বোপরি স্কোর (%(min)d=worst;%(max)d=best)*" -#: adjfeedback/forms.py:176 +#: adjfeedback/forms.py msgid "Ignored" msgstr "উপেক্ষিত" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:228 adjfeedback/forms.py:291 +#: adjfeedback/forms.py msgid "Submitted - " msgstr "উপস্থাপিত - " #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:229 adjfeedback/forms.py:296 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" msgstr "%(name)s (%(adjpos)s)" -#: adjfeedback/forms.py:252 adjfeedback/forms.py:326 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "বিচারক মন্ডলী" -#: adjfeedback/forms.py:269 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" msgstr "বিচারক এই প্রতিক্রিয়া সর্ম্পকে" -#: adjfeedback/forms.py:293 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "" -#: adjfeedback/forms.py:299 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" msgstr "%(name)s ( চেয়ার দেওয়া হয়েছে মৌখিক ভাবে)" -#: adjfeedback/forms.py:301 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" msgstr "%(name)s (প্যানেলিস্ট দেওয়া হয়েছে মৌখিক হিসেবে চেয়ার ঘূর্নিত হওয়ার পর)" -#: adjfeedback/forms.py:392 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" msgstr "এই লাইন ( %(adjudicator)s) কোনো স্কোর ছিল না" -#: adjfeedback/forms.py:397 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" msgstr "এই লাইনটি (জন্য %(adjudicator)s) অনেক বেশি তালিকা ছিল" -#: adjfeedback/forms.py:410 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." msgstr "বিভিন্ন বিচারক মন্ডলী রয়েছে \"%(adjudicator)s\" নামক, সুতরাং আপনি তাদের ফলাফল হালনাগাদ এর ক্ষেত্রে স্তূপ আমদানিকারক ব্যবহার করতে পারবেন না. অনুগ্রহ করে প্রতিক্রিয়ার ক্ষেত্রে ইহাই করুন পরিদর্শন/ ওভারভিউ পেজের পরিবর্তে." -#: adjfeedback/forms.py:416 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" msgstr "এই প্রতিযোগিতায় কোন বিচারক নেই \"%(adjudicator)s\" নামের সাথে" -#: adjfeedback/forms.py:424 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" msgstr "ফলাফলের জন্য %(adjudicator)s, \"%(score)s\", কোন সংখ্যা নয়" -#: adjfeedback/forms.py:439 +#: adjfeedback/forms.py msgid "There were no scores to import." msgstr "আমদানির জন্য কোন ফলাফল ছিল না." -#: adjfeedback/models.py:13 adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator" msgstr "বিচারক" -#: adjfeedback/models.py:16 +#: adjfeedback/models.py msgid "round" msgstr "পর্ব" -#: adjfeedback/models.py:17 adjfeedback/models.py:232 +#: adjfeedback/models.py msgid "score" msgstr "স্কোর/ফলাফল" -#: adjfeedback/models.py:18 +#: adjfeedback/models.py msgid "timestamp" msgstr "টাইমস্ট্যাম্প" -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score history" msgstr "বিচারক ভিত্তিক ফলাফল ইতিবৃত্ত" -#: adjfeedback/models.py:22 +#: adjfeedback/models.py msgid "adjudicator base score histories" msgstr "বিচারক ভিত্তিক ফলাফল ইতিবৃত্ত সমূহ" -#: adjfeedback/models.py:30 +#: adjfeedback/models.py msgid "question" msgstr "প্রশ্ন" -#: adjfeedback/models.py:32 +#: adjfeedback/models.py msgid "feedback" msgstr "প্রতিক্রিয়া" -#: adjfeedback/models.py:45 adjfeedback/models.py:55 adjfeedback/models.py:65 -#: adjfeedback/models.py:74 +#: adjfeedback/models.py msgid "answer" msgstr "উত্তর" -#: adjfeedback/models.py:48 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" msgstr "বিচারক প্রতিক্রিয়া বুলিয়ান উত্তর" -#: adjfeedback/models.py:49 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" msgstr "বিচারক প্রতিক্রিয়া বুলিয়ান উত্তর সমূহ" -#: adjfeedback/models.py:58 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" msgstr "বিচারক প্রতিক্রিয়া পূর্ণসংখ্যক উত্তর" -#: adjfeedback/models.py:59 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" msgstr "বিচারক প্রতিক্রিয়া পূর্ণসংখ্যক উত্তর সমূহ" -#: adjfeedback/models.py:68 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" msgstr "বিচারক প্রতিক্রিয়া ভাসমান উত্তর" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" msgstr "বিচারক প্রতিক্রিয়া ভাসমান উত্তর সমূহ" -#: adjfeedback/models.py:77 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" msgstr "বিচারক প্রতিক্রিয়া স্ট্রিং উত্তর" -#: adjfeedback/models.py:78 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" msgstr "বিচারক প্রতিক্রিয়া স্ট্রিং উত্তর সমূহ" -#: adjfeedback/models.py:86 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answer" msgstr "" -#: adjfeedback/models.py:87 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answers" msgstr "" -#: adjfeedback/models.py:106 +#: adjfeedback/models.py msgid "checkbox" msgstr "চেকবক্স" -#: adjfeedback/models.py:107 +#: adjfeedback/models.py msgid "yes/no (dropdown)" msgstr "হ্যাঁ/না (নামানো)" -#: adjfeedback/models.py:108 +#: adjfeedback/models.py msgid "integer (textbox)" msgstr "পূর্ণসংখ্যা (টেক্সট বক্স)" -#: adjfeedback/models.py:109 +#: adjfeedback/models.py msgid "integer scale" msgstr "পূর্ণসংখ্যা মাত্রা" -#: adjfeedback/models.py:110 +#: adjfeedback/models.py msgid "float" msgstr "ডুবন্ত/ ভাসা" -#: adjfeedback/models.py:111 adjfeedback/models.py:145 +#: adjfeedback/models.py msgid "text" msgstr "মূলপাঠ/পাঠ্য" -#: adjfeedback/models.py:112 +#: adjfeedback/models.py msgid "long text" msgstr "দীর্ঘ পাঠ্য" -#: adjfeedback/models.py:113 +#: adjfeedback/models.py msgid "select one" msgstr "একটি বাছাই করুন" -#: adjfeedback/models.py:114 +#: adjfeedback/models.py msgid "select multiple" msgstr "বহু বাছাই করুন" -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "tournament" msgstr "প্রতিযোগিতা" -#: adjfeedback/models.py:143 +#: adjfeedback/models.py msgid "sequence number" msgstr "ক্রম সংখ্যা" -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" msgstr "অংশগ্রহণকারীদের কাছে উক্ত প্রশ্নটি উত্থাপিত হয়েছে, e.g.,\"আপনি কি সিদ্ধান্তটির সাথে একমত পোষণ করেছেন?\"" -#: adjfeedback/models.py:148 +#: adjfeedback/models.py msgid "name" msgstr "নাম" -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" msgstr "একটি সংক্ষিপ্ত নাম উক্ত প্রশ্নটির জন্য, e.g.,\"সিদ্ধান্তের সাথে একমত পোষণ করুন\"" -#: adjfeedback/models.py:151 +#: adjfeedback/models.py msgid "reference" msgstr "উল্লেখ/ প্রসঙ্গ" -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" msgstr "কোড সামঞ্জস্ কৃত উল্লেখ, e.g., \" সিদ্ধান্তের সাথে একমত পোষণ করুন\"" -#: adjfeedback/models.py:155 +#: adjfeedback/models.py msgid "from adjudicator" msgstr "বিচারক হতে" -#: adjfeedback/models.py:156 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" msgstr "বিচারক মন্ডলীকে উক্ত প্রশ্নটি জিগ্গাসা করা হইবে (অন্যান্য বিচারক সম্পর্কে)" -#: adjfeedback/models.py:158 +#: adjfeedback/models.py msgid "from team" msgstr "দল হতে" -#: adjfeedback/models.py:159 +#: adjfeedback/models.py msgid "Teams should be asked this question" msgstr "দল সমূহকে উক্ত প্রশ্নটি জিগ্গাসা করা উচিত" -#: adjfeedback/models.py:162 +#: adjfeedback/models.py msgid "answer type" msgstr "উত্তর ধরন" -#: adjfeedback/models.py:164 +#: adjfeedback/models.py msgid "required" msgstr "অপরিহার্য" -#: adjfeedback/models.py:165 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" msgstr "" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "minimum value" msgstr "নুন্যতম দাম" -#: adjfeedback/models.py:168 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "সংখ্যাযুক্ত ক্ষেত্রগুলির জন্য সর্বনিম্ন অনুমোদিত মান (পাঠ্য বা বুলিয়ান ক্ষেত্রগুলির জন্য উপেক্ষা করা)" -#: adjfeedback/models.py:170 +#: adjfeedback/models.py msgid "maximum value" msgstr "সর্বোচ্চ মান" -#: adjfeedback/models.py:171 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "সংখ্যাযুক্ত ক্ষেত্রগুলির জন্য সর্বোচ্চ অনুমোদিত মান (পাঠ্য বা বুলিয়ান ক্ষেত্রগুলির জন্য উপেক্ষা করা)" -#: adjfeedback/models.py:176 +#: adjfeedback/models.py msgid "choices" msgstr "" -#: adjfeedback/models.py:177 +#: adjfeedback/models.py msgid "Permissible choices for select one/multiple fields (ignored for other fields)" msgstr "" -#: adjfeedback/models.py:182 +#: adjfeedback/models.py msgid "adjudicator feedback question" msgstr "" -#: adjfeedback/models.py:183 +#: adjfeedback/models.py msgid "adjudicator feedback questions" msgstr "" -#: adjfeedback/models.py:241 adjfeedback/views.py:768 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" msgstr "" -#: adjfeedback/models.py:242 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" msgstr "" -#: adjfeedback/models.py:246 +#: adjfeedback/models.py msgid "adjudicator feedback" msgstr "" -#: adjfeedback/models.py:247 +#: adjfeedback/models.py msgid "adjudicator feedbacks" msgstr "" -#: adjfeedback/models.py:307 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." msgstr "" -#: adjfeedback/models.py:310 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." msgstr "" -#: adjfeedback/models.py:312 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" msgstr "" -#: adjfeedback/models.py:314 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." msgstr "" -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" msgstr "" -#: adjfeedback/tables.py:35 +#: adjfeedback/tables.py msgid "N/A" msgstr "" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py msgid "Current weighted score" msgstr "" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." msgstr "" -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" msgstr "" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" msgstr "" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" msgstr "" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:84 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:93 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." msgstr "" -#: adjfeedback/tables.py:97 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" msgstr "" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Feedback Per Round" msgstr "" -#: adjfeedback/tables.py:107 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" msgstr "" -#: adjfeedback/tables.py:125 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" msgstr[0] "" msgstr[1] "" -#: adjfeedback/tables.py:148 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" msgstr "" -#: adjfeedback/tables.py:172 +#: adjfeedback/tables.py msgid "View Missing Feedback" msgstr "" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" msgstr "" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" msgstr "" -#: adjfeedback/templates/enter_feedback.html:9 -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format msgid "Add Feedback from %(name)s" msgstr "" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" msgstr "" -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" msgstr "" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." msgstr "" -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." msgstr "" -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." msgstr "" -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" msgstr "" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" msgstr "" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" msgstr "" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" msgstr "" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" msgstr "" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" msgstr "" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" msgstr "" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." msgstr "" -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." msgstr "" -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "On %(adjudicator)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" +msgid "Received as %(as_type)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" msgstr "" -#: adjfeedback/templates/feedback_card.html:88 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:93 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:103 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" msgstr "" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" msgstr "" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" msgstr "" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" msgstr "" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." msgstr "" -#: adjfeedback/templates/feedback_overview.html:18 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:22 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:30 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" msgstr "মূল" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" msgstr "প্রতিক্রিয়া" -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" msgstr "" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" msgstr "" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" msgstr "মূল স্কোর" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" msgstr "" -#: adjfeedback/views.py:118 +#: adjfeedback/views.py msgid "Feedback Overview" msgstr "" -#: adjfeedback/views.py:142 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" msgstr "" -#: adjfeedback/views.py:153 adjfeedback/views.py:177 adjfeedback/views.py:192 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" msgstr[0] "" msgstr[1] "" -#: adjfeedback/views.py:156 adjfeedback/views.py:182 adjfeedback/views.py:197 +#: adjfeedback/views.py msgid "Feedbacks" msgstr "" -#: adjfeedback/views.py:163 +#: adjfeedback/views.py msgid "Find Feedback" msgstr "" -#: adjfeedback/views.py:171 adjfeedback/views.py:710 +#: adjfeedback/views.py msgid "From Teams" msgstr "" -#: adjfeedback/views.py:186 adjfeedback/views.py:704 +#: adjfeedback/views.py msgid "From Adjudicators" msgstr "" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "Latest Feedback" msgstr "" -#: adjfeedback/views.py:272 +#: adjfeedback/views.py msgid "(30 most recent)" msgstr "" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "Only Comments" msgstr "" -#: adjfeedback/views.py:283 +#: adjfeedback/views.py msgid "(250 most recent)" msgstr "" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "Important Feedback" msgstr "" -#: adjfeedback/views.py:295 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" msgstr "" -#: adjfeedback/views.py:362 +#: adjfeedback/views.py msgid "A Team" msgstr "" -#: adjfeedback/views.py:367 +#: adjfeedback/views.py msgid "Team" msgstr "দল" -#: adjfeedback/views.py:374 adjfeedback/views.py:391 +#: adjfeedback/views.py msgid "Institution" msgstr "প্রতিষ্ঠান" -#: adjfeedback/views.py:377 +#: adjfeedback/views.py msgid "An Adjudicator" msgstr "" -#: adjfeedback/views.py:384 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "বিচারক" -#: adjfeedback/views.py:511 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." msgstr "" -#: adjfeedback/views.py:541 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." msgstr "" -#: adjfeedback/views.py:625 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" msgstr "" -#: adjfeedback/views.py:648 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." msgstr "" -#: adjfeedback/views.py:675 +#: adjfeedback/views.py msgid "Feedback Progress" msgstr "" -#: adjfeedback/views.py:696 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" msgstr[0] "" msgstr[1] "" -#: adjfeedback/views.py:741 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." msgstr "" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "confirmed" msgstr "" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "un-confirmed" msgstr "" -#: adjfeedback/views.py:768 +#: adjfeedback/views.py msgid "un-ignored" msgstr "" -#: adjfeedback/views.py:804 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." diff --git a/tabbycat/availability/locale/bn/LC_MESSAGES/django.po b/tabbycat/availability/locale/bn/LC_MESSAGES/django.po index 402f35b8e11..26e7c37245a 100644 --- a/tabbycat/availability/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-12-31 14:47\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -17,298 +17,290 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" msgstr "উপস্থিতি" -#: availability/models.py:15 +#: availability/models.py msgid "content type" msgstr "বিষয় / সূচি টাইপ" -#: availability/models.py:16 +#: availability/models.py msgid "object id" msgstr "" -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "পর্ব" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" msgstr "" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" msgstr "" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" msgstr "" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" msgstr "" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" msgstr "" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" msgstr "" -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" msgstr "" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" msgstr "" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." msgstr "" -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." msgstr "" -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." msgstr "" -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgstr[0] "" msgstr[1] "" -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " msgstr "" -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" msgstr "" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." msgstr "" -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" msgstr "" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" msgstr "" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" msgstr "আগমন" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" msgstr "" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" msgstr "" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" msgstr "" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "দলসমূহ" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" msgstr "" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" msgstr "" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" msgstr "" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." msgstr "" -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." msgstr "" -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" msgstr "" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" msgstr "" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" msgstr "" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" msgstr "" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" @@ -316,7 +308,7 @@ msgstr[0] "" msgstr[1] "" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" @@ -326,7 +318,7 @@ msgstr[1] "" #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" @@ -334,67 +326,67 @@ msgstr[0] "" msgstr[1] "" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" msgstr[0] "" msgstr[1] "" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" msgstr "" -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" msgstr "" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" msgstr "" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" msgstr "" -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" msgstr "" -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" msgstr "" -#: availability/views.py:260 +#: availability/views.py msgid "Room" msgstr "" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" msgstr "" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" msgstr "বিভাগসমূহ" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" msgstr "" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." msgstr "" -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." msgstr "" -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." msgstr "" -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." msgstr "" diff --git a/tabbycat/breakqual/locale/bn/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/bn/LC_MESSAGES/django.po index 9885de3c31d..5cc635cccf1 100644 --- a/tabbycat/breakqual/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-12-31 14:47\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" "Last-Translator: \n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -17,508 +17,506 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" msgstr "" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "" +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" +msgstr[1] "" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "প্রতিযোগিতা" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "নাম" -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" msgstr "" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" msgstr "" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" msgstr "" -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" msgstr "ক্রম সংখ্যা" -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" msgstr "" -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" msgstr "" -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" msgstr "" -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" msgstr "" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" msgstr "" -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" msgstr "" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" msgstr "" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" msgstr "" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" msgstr "" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" msgstr "" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" msgstr "" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" msgstr "" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" msgstr "" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" msgstr "" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "দল" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" msgstr "" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" msgstr "" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" msgstr "" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" msgstr "ভিন্ন বিভাগে উন্নিত" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" msgstr "" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" msgstr "" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" msgstr "" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" msgstr "" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" msgstr "" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" msgstr "" -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" msgstr "" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." msgstr "" -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." msgstr "" -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" msgstr "" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." msgstr "" -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" msgstr "" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " msgstr "" -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" msgstr "" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" msgstr "উন্নীতকরণ %(category)s" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " msgstr "" -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" msgstr "ব্রেকিং" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" msgstr "" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" msgstr "" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" msgstr "" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" msgstr "" -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" msgstr "" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." msgstr "" -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." msgstr "" -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." msgstr "" -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." msgstr "" -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." msgstr "" -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." msgstr "" -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" msgstr "" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" msgstr "" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" msgstr "" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" msgstr "" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." msgstr "" -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" msgstr "ব্রেক" -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" msgstr "" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" msgstr "" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" msgstr "" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" msgstr "" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" msgstr "" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" msgstr "" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" msgstr "" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" msgstr "" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" msgstr "" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" msgstr "" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" msgstr "" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" msgstr "" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" msgstr "" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" msgstr "" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" msgstr "" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" msgstr "" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" msgstr "" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" msgstr "" -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" msgstr "" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" msgstr "" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" msgstr "" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." msgstr "" -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." msgstr "" -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" msgstr "উন্নিত বিচারকমণ্ডলী" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" msgstr "" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" diff --git a/tabbycat/draw/locale/bn/LC_MESSAGES/django.po b/tabbycat/draw/locale/bn/LC_MESSAGES/django.po index 4ef0cf3916e..d96355fc431 100644 --- a/tabbycat/draw/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -17,1123 +17,1103 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "" -msgstr[1] "" - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." msgstr[0] "" msgstr[1] "" -#: draw/admin.py:93 +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." msgstr[0] "" msgstr[1] "" -#: draw/apps.py:7 draw/views.py:452 draw/views.py:455 +#: draw/apps.py draw/views.py msgid "Draw" msgstr "ড্র" -#: draw/generator/__init__.py:14 +#: draw/generator/__init__.py msgid "Too many swaps" msgstr "" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" msgstr "" -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" msgstr "" -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "Bubble up (history)" msgstr "" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble down (history)" msgstr "" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble up (institution)" msgstr "" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble down (institution)" msgstr "" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" msgstr "" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Can't bubble up/down" msgstr "" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Pull-up team" msgstr "" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." msgstr "" -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." msgstr "" -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." msgstr "" -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." msgstr "" -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." msgstr "" -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." msgstr "" -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." msgstr "" -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." msgstr "" -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." msgstr "" -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." msgstr "" -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." msgstr "" -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." msgstr "" -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." msgstr "" -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." msgstr "" -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." msgstr "" -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" msgstr "" -#: draw/manager.py:276 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." msgstr "" -#: draw/models.py:29 draw/models.py:35 +#: draw/models.py msgid "none" msgstr "" -#: draw/models.py:30 +#: draw/models.py msgid "postponed" msgstr "" -#: draw/models.py:31 draw/models.py:36 +#: draw/models.py msgid "draft" msgstr "" -#: draw/models.py:32 draw/models.py:37 +#: draw/models.py msgid "confirmed" msgstr "" -#: draw/models.py:43 draw/models.py:375 +#: draw/models.py msgid "round" msgstr "পর্ব" -#: draw/models.py:45 +#: draw/models.py msgid "room" msgstr "" -#: draw/models.py:48 +#: draw/models.py msgid "bracket" msgstr "ব্র্যাকেট" -#: draw/models.py:50 +#: draw/models.py msgid "room rank" msgstr "" -#: draw/models.py:56 +#: draw/models.py msgid "importance" msgstr "" -#: draw/models.py:58 +#: draw/models.py msgid "result status" msgstr "" -#: draw/models.py:60 +#: draw/models.py msgid "sides confirmed" msgstr "" -#: draw/models.py:61 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." msgstr "" -#: draw/models.py:64 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "বিতর্ক" -#: draw/models.py:65 +#: draw/models.py msgid "debates" msgstr "বিতর্ক" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:84 draw/models.py:109 +#: draw/models.py msgid " (sides not confirmed)" msgstr "" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:96 draw/models.py:113 +#: draw/models.py msgid " vs " msgstr "" -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" msgstr "পক্ষ" -#: draw/models.py:263 +#: draw/models.py msgid "negative" msgstr "বিপক্ষ" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" msgstr "" -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" msgstr "" -#: draw/models.py:266 +#: draw/models.py msgid "closing government" msgstr "" -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" msgstr "" -#: draw/models.py:274 draw/models.py:377 +#: draw/models.py msgid "team" msgstr "দল" -#: draw/models.py:276 draw/models.py:379 +#: draw/models.py msgid "side" msgstr "পক্ষ" -#: draw/models.py:281 +#: draw/models.py msgid "debate team" msgstr "" -#: draw/models.py:282 +#: draw/models.py msgid "debate teams" msgstr "" -#: draw/models.py:303 +#: draw/models.py #, python-format msgid "placed %(place)s" msgstr "" -#: draw/models.py:305 draw/models.py:312 +#: draw/models.py msgid "result unknown" msgstr "" -#: draw/models.py:308 +#: draw/models.py msgid "won" msgstr "" -#: draw/models.py:310 +#: draw/models.py msgid "lost" msgstr "" -#: draw/models.py:383 +#: draw/models.py msgid "team side allocation" msgstr "" -#: draw/models.py:384 +#: draw/models.py msgid "team side allocations" msgstr "" #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" msgstr "" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" msgstr "" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" msgstr "" -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" msgstr "" -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" msgstr "" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" msgstr "" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" msgstr "" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" msgstr "" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" msgstr "" -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" msgstr "" -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" msgstr "" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" msgstr "পক্ষ" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" msgstr "" -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" msgstr "" -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" msgstr "" -#: draw/tables.py:292 +#: draw/tables.py msgid "After" msgstr "" -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" msgstr "" -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" msgstr "" -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" msgstr "" -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" msgstr "" -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" msgstr "" -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" msgstr "পক্ষ" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" msgstr "উপস্থিতি" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" msgstr "" -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" msgstr "" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" msgstr "" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" msgstr "" -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" msgstr "" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" msgstr "" -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" msgstr "" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" msgstr "" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" msgstr "" -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" msgstr "" -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" msgstr "" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." msgstr "" -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." -msgstr "" - -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." -msgstr "" - -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "" +msgid_plural "Enter motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" msgstr "" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." msgstr "" -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." msgstr "" -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." msgstr "" -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" msgstr "" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." msgstr "" -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." msgstr "" -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:200 +#: draw/templates/draw_display_admin.html msgid "Release Motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:201 -msgid "Release motion to public" -msgstr "" +msgid_plural "Release Motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:202 -msgid "Unrelease motion to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." msgstr "" -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." msgstr "" -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "" - -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "" +msgid_plural "Motions have been released publicly." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" msgstr "" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" msgstr "" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" msgstr "" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" msgstr "" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" msgstr "" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" msgstr "" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" msgstr "" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" msgstr "" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" msgstr "" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" msgstr "" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" msgstr "" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" msgstr "" -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" msgstr "" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" msgstr "" -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" msgstr "" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" msgstr "" -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" msgstr "" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" msgstr "" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" msgstr "" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" msgstr "" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." msgstr "" -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." msgstr "" -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." msgstr "" -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" msgstr "" -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" msgstr "" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" msgstr "পূর্বগঠিত প্যানেল" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" msgstr "" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" msgstr "" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" msgstr "" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" msgstr "" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." msgstr "" -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." msgstr "" -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " msgstr "" -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." msgstr "" -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." msgstr "" -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." msgstr "" -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." msgstr "" -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." msgstr "" -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." msgstr "" -#: draw/views.py:68 draw/views.py:483 +#: draw/views.py msgid "No debates in this round" msgstr "" -#: draw/views.py:76 +#: draw/views.py #, python-format msgid "Draw for %(round)s" msgstr "" -#: draw/views.py:78 +#: draw/views.py msgid "Draws for Current Rounds" msgstr "" -#: draw/views.py:82 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" msgstr "" -#: draw/views.py:86 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" msgstr "" -#: draw/views.py:124 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" msgstr[0] "" msgstr[1] "" -#: draw/views.py:171 +#: draw/views.py msgid "The draw for this round hasn't been released." msgstr "" -#: draw/views.py:224 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" msgstr "" -#: draw/views.py:382 +#: draw/views.py msgid "Adjudicator Assignments" msgstr "" -#: draw/views.py:404 +#: draw/views.py msgid "Position" msgstr "" -#: draw/views.py:424 +#: draw/views.py msgid "Team Pairings" msgstr "" -#: draw/views.py:447 +#: draw/views.py msgid "No Draw" msgstr "" -#: draw/views.py:449 +#: draw/views.py msgid "Draft Draw" msgstr "" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:541 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" msgstr "" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:546 +#: draw/views.py msgid "BR" msgstr "" -#: draw/views.py:571 +#: draw/views.py msgid "Draw with Details" msgstr "" -#: draw/views.py:579 +#: draw/views.py msgid "Position Balance Report" msgstr "" -#: draw/views.py:590 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" msgstr "" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:593 +#: draw/views.py msgid " (i.e., Shannon entropy)" msgstr "" -#: draw/views.py:623 +#: draw/views.py msgid "Teams with position imbalances" msgstr "" -#: draw/views.py:624 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" msgstr "" -#: draw/views.py:627 +#: draw/views.py msgid "Annotated draw" msgstr "" -#: draw/views.py:658 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" msgstr "" -#: draw/views.py:666 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " msgstr "" -#: draw/views.py:674 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " msgstr "" -#: draw/views.py:683 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " msgstr "" -#: draw/views.py:699 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "" -#: draw/views.py:726 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "" -#: draw/views.py:746 +#: draw/views.py msgid "Released the draw." msgstr "" -#: draw/views.py:761 +#: draw/views.py msgid "Unreleased the draw." msgstr "" -#: draw/views.py:774 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." msgstr "" -#: draw/views.py:793 +#: draw/views.py msgid "Side Pre-Allocations" msgstr "" -#: draw/views.py:826 +#: draw/views.py msgid "Edit Matchups" msgstr "" diff --git a/tabbycat/importer/locale/bn/LC_MESSAGES/django.po b/tabbycat/importer/locale/bn/LC_MESSAGES/django.po index 8165b6d1acf..b19775d3510 100644 --- a/tabbycat/importer/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:49\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -17,416 +17,405 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" msgstr "" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" msgstr "" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" msgstr "" -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." msgstr "" -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." msgstr "" -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" msgstr "" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" msgstr "" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" msgstr "" -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" msgstr "" -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" msgstr "" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" msgstr "" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" msgstr "" -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" msgstr "" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" msgstr "" -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" msgstr "" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." msgstr "" -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." msgstr "" -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." msgstr "" -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." msgstr "" -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" msgstr "" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." msgstr "" -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" msgstr "" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "%(name)s (%(code)s)" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:396 +#: importer/forms.py msgid "XML" msgstr "" -#: importer/forms.py:397 +#: importer/forms.py msgid "The Debate XML archive to parse" msgstr "" -#: importer/templates/archive_export_index.html:4 -#: importer/templates/archive_export_index.html:5 +#: importer/templates/archive_export_index.html msgid "Export Tournament Archive" msgstr "" -#: importer/templates/archive_export_index.html:9 +#: importer/templates/archive_export_index.html msgid "Tournaments can be exported in an XML format for use outside Tabbycat." msgstr "" -#: importer/templates/archive_export_index.html:17 +#: importer/templates/archive_export_index.html msgid "Export all data" msgstr "" -#: importer/templates/archive_importer.html:6 -#: importer/templates/archive_importer.html:18 +#: importer/templates/archive_importer.html msgctxt "page title" msgid "Import Tournament Archive" msgstr "" -#: importer/templates/archive_importer.html:19 +#: importer/templates/archive_importer.html msgid "This form will create a tournament with the data provided as a Debate XML format." msgstr "" -#: importer/templates/archive_importer.html:24 +#: importer/templates/archive_importer.html msgid "Import" msgstr "" -#: importer/templates/archive_importer.html:25 +#: importer/templates/archive_importer.html msgid "Go back to the site home page" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html msgctxt "page title" msgid "Add Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" msgstr "" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" msgstr "" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." msgstr "" -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" msgstr "" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" msgstr "" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" msgstr "" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" msgstr "" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" msgstr "" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" msgstr "" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:66 +#: importer/templates/simple_import_index.html msgid "Add/Edit Break Categories" msgstr "" -#: importer/templates/simple_import_index.html:70 +#: importer/templates/simple_import_index.html msgid "Add/Edit Speaker Categories" msgstr "" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" msgstr "" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" msgstr "" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" msgstr "" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" msgstr "" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" msgstr "" -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" msgstr "" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" msgstr "" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." msgstr "" -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" msgstr "" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" msgstr "" -#: importer/views.py:108 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." msgstr[0] "" msgstr[1] "" -#: importer/views.py:129 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." msgstr[0] "" msgstr[1] "" -#: importer/views.py:188 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." msgstr[0] "" msgstr[1] "" -#: importer/views.py:209 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "" -#: importer/views.py:214 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." msgstr[0] "" msgstr[1] "" -#: importer/views.py:230 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " msgstr "" -#: importer/views.py:238 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." msgstr "" -#: importer/views.py:256 +#: importer/views.py msgid "Tournament archive has been imported." msgstr "" diff --git a/tabbycat/locale/bn/LC_MESSAGES/django.po b/tabbycat/locale/bn/LC_MESSAGES/django.po index 90c8cc27826..44208c819d2 100644 --- a/tabbycat/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -17,940 +17,940 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" msgstr "" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:105 +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" msgstr "চেক ইন" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" msgstr "" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" msgstr "" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" msgstr "" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." msgstr "" -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" msgstr "" -#: checkins/models.py:37 +#: checkins/models.py msgid "" msgstr "" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" msgstr "" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" msgstr "" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" msgstr "" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "বিতর্ক" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" msgstr "" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" msgstr "" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" msgstr "" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" msgstr "" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" msgstr "" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" msgstr "" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "প্রতিযোগিতা" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" msgstr "" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" msgstr "" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" msgstr "" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." msgstr "" -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." msgstr "" -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." msgstr "" -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" msgstr "" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" msgstr "" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" msgstr "" -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." msgstr "" -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." msgstr "" -#: checkins/views.py:30 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" msgstr "" -#: checkins/views.py:63 +#: checkins/views.py msgid "People's Check-In Statuses" msgstr "" -#: checkins/views.py:120 +#: checkins/views.py msgid "Rooms' Check-In Statuses" msgstr "" -#: checkins/views.py:169 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" msgstr "" -#: checkins/views.py:176 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" msgstr "" -#: checkins/views.py:181 templates/nav/public_nav.html:145 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "বিচারকমন্ডলী" -#: checkins/views.py:186 +#: checkins/views.py msgid "Rooms" msgstr "" -#: checkins/views.py:227 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" msgstr "" -#: checkins/views.py:234 +#: checkins/views.py msgid "Identifiers" msgstr "" -#: checkins/views.py:272 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." msgstr "" -#: checkins/views.py:280 +#: checkins/views.py msgid "You have revoked your check-in." msgstr "" -#: checkins/views.py:282 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." msgstr "" -#: checkins/views.py:286 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." msgstr "" -#: checkins/views.py:293 +#: checkins/views.py msgid "You are now checked in." msgstr "" -#: settings/core.py:67 +#: settings/core.py msgid "Arabic" msgstr "" -#: settings/core.py:68 +#: settings/core.py msgid "Bengali" msgstr "" -#: settings/core.py:69 +#: settings/core.py msgid "English" msgstr "" -#: settings/core.py:70 +#: settings/core.py msgid "Spanish" msgstr "" -#: settings/core.py:71 +#: settings/core.py msgid "French" msgstr "" -#: settings/core.py:72 +#: settings/core.py msgid "Indonesian" msgstr "" -#: settings/core.py:73 +#: settings/core.py msgid "Japanese" msgstr "" -#: settings/core.py:74 +#: settings/core.py msgid "Malay" msgstr "" -#: settings/core.py:75 +#: settings/core.py msgid "Portuguese" msgstr "" -#: settings/core.py:76 +#: settings/core.py msgid "Russian" msgstr "" -#: settings/core.py:77 +#: settings/core.py msgid "Simplified Chinese" msgstr "" -#: settings/core.py:78 +#: settings/core.py msgid "Translation" msgstr "" -#: templates/admin/delete_protected_message.html:4 +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." msgstr "" -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." msgstr "" -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." msgstr "" -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" msgstr "" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" msgstr "" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" msgstr "" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" msgstr "" -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." msgstr "" -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" msgstr "" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" msgstr "" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." msgstr "" -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgstr[0] "" msgstr[1] "" -#: templates/errors/legacy_sendgrid_warning.html:11 +#: templates/errors/legacy_sendgrid_warning.html msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." msgstr "" -#: templates/errors/public_403.html:14 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." msgstr "" -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." msgstr "" -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "%(tournament)s Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s) ভিত্তি করে চলছে" -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." msgstr "" -#: templates/footer.html:24 +#: templates/footer.html #, python-format msgid "For a tournament of this size, we suggest a donation of $%(amount)s." msgstr "" -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." msgstr "অনুদান প্রদান সম্পর্কে আরো জানুন।" -#: templates/footer.html:31 +#: templates/footer.html msgid "Donations to Tabbycat from individuals or organisations are much appreciated." msgstr "" -#: templates/footer.html:39 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" msgstr "এখনো থামাঘড়ি দিয়ে বিতর্কের সময় রক্ষা করছেন?" -#: templates/footer.html:41 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." msgstr "বিতর্কের জন্যই তৈরি সময় রক্ষক অ্যাপ ব্যবহার বিতর্ক ও বিচারকার্য সহজ করবে! দেখে আসতে পারেন টাইমকেপ্ট (আইফোন/আইপ্যাড), ডিবেটকিপার (অ্যান্ড্রয়েড) বা হিয়ার! হিয়ার! বট (ডিস্কর্ড)" -#: templates/footer.html:50 +#: templates/footer.html msgid "Our Organisation" msgstr "" -#: templates/footer.html:52 -msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." msgstr "" -#: templates/footer.html:65 +#: templates/footer.html msgid "Language" msgstr "ভাষা" -#: templates/footer.html:72 +#: templates/footer.html msgid "GitHub" msgstr "গিটহাব" -#: templates/footer.html:78 +#: templates/footer.html msgid "Documentation" msgstr "ব্যবহার বিধি" -#: templates/footer.html:84 +#: templates/footer.html msgid "Support" msgstr "সহায়তা" -#: templates/footer.html:90 +#: templates/footer.html msgid "Facebook" msgstr "ফেসবুক" -#: templates/footer.html:96 +#: templates/footer.html msgid "Set Up A Copy" msgstr "একটি কপি তৈরী করুন।" -#: templates/footer.html:110 +#: templates/footer.html msgid "Change Language" msgstr "ভাষা পরিবর্তন করুন" -#: templates/footer.html:127 +#: templates/footer.html msgid "Use this language" msgstr "এই ভাষাটি সক্রিয় করুন" -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" msgstr "" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" msgstr "মূল পাতা" -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" msgstr "" -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" msgstr "" -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" msgstr "" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" msgstr "" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" msgstr "" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" msgstr "" -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" msgstr "" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" msgstr "" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" msgstr "" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:175 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" msgstr "অংশগ্রহণকারী" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" msgstr "" -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" msgstr "" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" msgstr "পূর্বগঠিত প্যানেল" -#: templates/nav/admin_nav.html:97 +#: templates/nav/admin_nav.html msgid "Export XML" msgstr "" -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:160 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" msgstr "পক্ষ" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" msgstr "" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" msgstr "" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" msgstr "প্রতিক্রিয়া" -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" msgstr "" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" msgstr "" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" msgstr "" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" msgstr "" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" msgstr "" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" msgstr "" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" msgstr "" -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" msgstr "" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:165 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" msgstr "" -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" msgstr "" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "দলসমূহ" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" msgstr "%(category)s দলসমূহ" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" msgstr "" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" msgstr "%(category)s বক্তাসমূহ" -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" msgstr "" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:155 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "প্রস্তাবসমূহ" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:170 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" msgstr "" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" msgstr "" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" msgstr "" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" msgstr "" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" msgstr "" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" msgstr "লগ আউট" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" msgstr "" -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:211 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" msgstr "" -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" msgstr "" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:180 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" msgstr "" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" msgstr "" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" msgstr "" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" msgstr "" -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" msgstr "দলসমূহ" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" msgstr "বক্তাসমূহ" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" msgstr "যুক্তি খন্ডন ট্যাব" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" msgstr "বিচারকমণ্ডলী" -#: templates/nav/public_nav.html:53 templates/nav/public_nav.html:62 +#: templates/nav/public_nav.html msgid "Motions Tab" msgstr "প্রস্তাব ট্যাব" -#: templates/nav/public_nav.html:56 +#: templates/nav/public_nav.html msgid "By round" msgstr "" -#: templates/nav/public_nav.html:57 +#: templates/nav/public_nav.html msgid "Globally" msgstr "" -#: templates/nav/public_nav.html:72 +#: templates/nav/public_nav.html msgid "Draws" msgstr "" -#: templates/nav/public_nav.html:83 +#: templates/nav/public_nav.html msgid "No Draws Available" msgstr "" -#: templates/nav/public_nav.html:91 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: templates/nav/public_nav.html:95 +#: templates/nav/public_nav.html msgid "Current Draws" msgstr "" -#: templates/nav/public_nav.html:115 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" msgstr "ফলাফল" -#: templates/nav/public_nav.html:133 +#: templates/nav/public_nav.html msgid "Break" msgstr "ব্রেক" -#: templates/nav/public_nav.html:185 +#: templates/nav/public_nav.html msgid "Feedback Progress" msgstr "" -#: templates/nav/public_nav.html:191 templates/nav/public_nav.html:197 +#: templates/nav/public_nav.html msgid "Enter Ballot" msgstr "" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" msgstr "উপস্থিতি" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" msgstr "ড্র" -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" msgstr "" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" msgstr "প্রশাসক অঞ্চল %(tournament)s" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" msgstr "সহায়ক অঞ্চল %(tournament)s" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" msgstr "গণ অঞ্চল %(tournament)s" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" msgstr "" -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" msgstr "" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" msgstr "" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" msgstr "" -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" msgstr "" -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." msgstr "" -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." msgstr "" -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." msgstr "" -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" msgstr "" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." msgstr "" -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" msgstr "" -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:27 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" msgstr "" -#: templates/registration/password_change_form.html:16 +#: templates/registration/password_change_form.html #, python-format msgid "API Token: %(api_token)s" msgstr "" -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgid "The API token will allow you to authorize external applications to access the site as staff." msgstr "" -#: templates/registration/password_change_form.html:28 +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." msgstr "" -#: templates/registration/password_change_form.html:33 -#: templates/registration/password_reset_confirm.html:25 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" msgstr "" -#: templates/registration/password_change_form.html:34 -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" msgstr "" -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "" -#: templates/registration/password_reset_complete.html:11 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." msgstr "" -#: templates/registration/password_reset_complete.html:14 -#: templates/registration/password_reset_done.html:15 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" msgstr "" -#: templates/registration/password_reset_confirm.html:4 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" msgstr "" -#: templates/registration/password_reset_confirm.html:16 -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html msgctxt "page title" msgid "Password Reset" msgstr "" -#: templates/registration/password_reset_confirm.html:18 +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" msgstr "" -#: templates/registration/password_reset_confirm.html:33 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." msgstr "" -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" msgid "Password reset email sent" msgstr "" -#: templates/registration/password_reset_done.html:11 +#: templates/registration/password_reset_done.html msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." msgstr "" -#: templates/registration/password_reset_done.html:12 +#: templates/registration/password_reset_done.html msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." msgstr "" -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" msgstr "" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" msgstr "" -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_form.html:27 +#: templates/registration/password_reset_form.html msgid "Enter your email address below, and we'll email you a password reset link." msgstr "" -#: templates/registration/password_reset_form.html:34 +#: templates/registration/password_reset_form.html msgid "Please enter a valid email address." msgstr "" -#: templates/registration/password_reset_form.html:39 users/forms.py:10 -#: users/forms.py:25 +#: templates/registration/password_reset_form.html users/forms.py msgid "Email address" msgstr "" -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" msgstr "" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" msgstr "" -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" msgstr "" -#: urls.py:102 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" msgstr "" -#: urls.py:105 +#: urls.py msgid "Welcome! You just logged in!" msgstr "" -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." msgstr "" -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." msgstr "" -#: users/templates/admin/auth/delete_user_warning.html:6 +#: users/templates/admin/auth/delete_user_warning.html msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." msgstr "" -#: users/templates/signup.html:4 users/templates/signup.html:5 +#: users/templates/signup.html msgid "Sign-Up" msgstr "" -#: users/templates/signup.html:16 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Administrator Account" msgstr "" -#: users/templates/signup.html:18 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Assistant Account" msgstr "" -#: users/templates/signup.html:25 +#: users/templates/signup.html msgid "Create Account" msgstr "" -#: users/views.py:54 +#: users/views.py msgid "You have successfully created a new administrator account." msgstr "" -#: users/views.py:56 +#: users/views.py msgid "You have successfully created a new assistant account." msgstr "" -#: users/views.py:84 +#: users/views.py msgid "Whoops! It looks like someone's already created the first user account. Please log in." msgstr "" -#: users/views.py:92 +#: users/views.py #, python-format msgid "Welcome! You've created an account for %s." msgstr "" diff --git a/tabbycat/motions/locale/bn/LC_MESSAGES/django.po b/tabbycat/motions/locale/bn/LC_MESSAGES/django.po index 6ddf450d8bf..ff8eaf775f4 100644 --- a/tabbycat/motions/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -17,372 +17,383 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "প্রস্তাবসমূহ" -#: motions/models.py:9 +#: motions/models.py msgid "text" msgstr "মূলপাঠ/পাঠ্য" -#: motions/models.py:10 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" msgstr "" -#: motions/models.py:12 +#: motions/models.py msgid "reference" msgstr "উল্লেখ/ প্রসঙ্গ" -#: motions/models.py:13 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" msgstr "" -#: motions/models.py:15 +#: motions/models.py msgid "info slide" msgstr "" -#: motions/models.py:16 +#: motions/models.py msgid "The information slide for this topic; if it has one" msgstr "" -#: motions/models.py:19 +#: motions/models.py msgid "tournament" msgstr "প্রতিযোগিতা" -#: motions/models.py:21 +#: motions/models.py msgid "rounds" msgstr "" -#: motions/models.py:24 motions/models.py:37 motions/models.py:62 +#: motions/models.py msgid "motion" msgstr "প্রস্তাব" -#: motions/models.py:25 +#: motions/models.py msgid "motions" msgstr "প্রস্তাবসমূহ" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" msgstr "" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" msgstr "" -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" msgstr "" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" msgstr "" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" msgstr "" -#: motions/models.py:64 +#: motions/models.py msgid "round" msgstr "পর্ব" -#: motions/models.py:67 +#: motions/models.py msgid "sequence number" msgstr "ক্রম সংখ্যা" -#: motions/models.py:68 +#: motions/models.py msgid "The order in which motions are displayed" msgstr "" -#: motions/models.py:73 +#: motions/models.py msgid "round motion" msgstr "" -#: motions/models.py:74 +#: motions/models.py msgid "round motions" msgstr "" -#: motions/statistics.py:86 +#: motions/statistics.py msgid "extremely strong evidence" msgstr "" -#: motions/statistics.py:87 +#: motions/statistics.py msgid "strong evidence" msgstr "" -#: motions/statistics.py:88 +#: motions/statistics.py msgid "moderate evidence" msgstr "" -#: motions/statistics.py:89 +#: motions/statistics.py msgid "weak evidence" msgstr "" -#: motions/statistics.py:90 +#: motions/statistics.py msgid "very weak evidence" msgstr "" -#: motions/statistics.py:91 +#: motions/statistics.py msgid "extremely weak evidence" msgstr "" -#: motions/statistics.py:114 +#: motions/statistics.py msgid "balance inconclusive" msgstr "" -#: motions/statistics.py:115 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" msgstr "" -#: motions/statistics.py:123 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" msgstr "" -#: motions/statistics.py:124 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." msgstr "" -#: motions/statistics.py:129 +#: motions/statistics.py msgid "probably balanced" msgstr "" -#: motions/statistics.py:130 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." msgstr "" -#: motions/templates/motion_global_statistics.html:22 -#: motions/templates/motion_round_statistics.html:31 -#: motions/templates/public_motions.html:32 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" msgstr "" -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" msgstr[0] "" msgstr[1] "" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" msgstr "" -#: motions/templates/motions_edit.html:28 +#: motions/templates/motions_edit.html msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." msgstr "" -#: motions/templates/motions_edit.html:30 +#: motions/templates/motions_edit.html msgid "Reuse Motions from Last Round" msgstr "" -#: motions/templates/motions_edit.html:35 +#: motions/templates/motions_edit.html msgid "Use Existing Motions" msgstr "" -#: motions/templates/motions_edit.html:74 +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" msgstr[0] "" msgstr[1] "" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "" -#: motions/templates/public_motions.html:41 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." msgstr "" -#: motions/templates/public_motions.html:47 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." msgstr "" -#: motions/templates/public_motions.html:52 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." msgstr "" -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" msgstr[0] "" msgstr[1] "" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" msgstr[0] "" msgstr[1] "" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." msgstr "" -#: motions/utils.py:11 +#: motions/utils.py msgid "Not all latest ballots list the same motion, so could not be merged." msgstr "" -#: motions/utils.py:29 +#: motions/utils.py msgid "Motion vetos are inconsistent, so could not be merged." msgstr "" -#: motions/views.py:91 +#: motions/views.py msgid "The motion has been saved." msgstr "" -#: motions/views.py:93 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." msgstr[0] "" msgstr[1] "" -#: motions/views.py:97 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." msgstr[0] "" msgstr[1] "" -#: motions/views.py:140 +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "" + +#: motions/views.py #, python-format msgid "Reused the motion from the previous round." msgid_plural "Reused the %(count)d motions from the previous round." msgstr[0] "" msgstr[1] "" -#: motions/views.py:164 -msgid "Released the motion(s)." -msgstr "" +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" +msgstr[1] "" -#: motions/views.py:171 -msgid "Unreleased the motion(s)." -msgstr "" +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" +msgstr[1] "" -#: motions/views.py:195 +#: motions/views.py msgid "Round Motions" msgstr "" -#: motions/views.py:209 +#: motions/views.py msgid "Motion Statistics" msgstr "" diff --git a/tabbycat/notifications/locale/bn/LC_MESSAGES/django.po b/tabbycat/notifications/locale/bn/LC_MESSAGES/django.po index 0703007a3bf..4a5f76baa82 100644 --- a/tabbycat/notifications/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -18,401 +18,399 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" msgstr "" -#: notifications/forms.py:12 +#: notifications/forms.py msgid "Recipient email address" msgstr "" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" msgstr "" -#: notifications/forms.py:17 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" msgstr "" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Subject" msgstr "" -#: notifications/forms.py:31 +#: notifications/forms.py msgid "Message" msgstr "" -#: notifications/models.py:11 notifications/models.py:26 +#: notifications/models.py msgid "email" msgstr "" -#: notifications/models.py:12 +#: notifications/models.py msgid "SMS" msgstr "" -#: notifications/models.py:21 +#: notifications/models.py msgid "recipient" msgstr "" -#: notifications/models.py:23 +#: notifications/models.py msgid "method" msgstr "" -#: notifications/models.py:28 notifications/models.py:134 +#: notifications/models.py msgid "context" msgstr "" -#: notifications/models.py:31 +#: notifications/models.py msgid "notification" msgstr "" -#: notifications/models.py:33 notifications/models.py:74 -#: notifications/models.py:130 +#: notifications/models.py msgid "timestamp" msgstr "টাইমস্ট্যাম্প" -#: notifications/models.py:36 +#: notifications/models.py msgid "sent message" msgstr "" -#: notifications/models.py:37 +#: notifications/models.py msgid "sent messages" msgstr "" -#: notifications/models.py:58 +#: notifications/models.py msgid "team points" msgstr "" -#: notifications/models.py:59 +#: notifications/models.py msgid "ballot confirmed" msgstr "" -#: notifications/models.py:60 +#: notifications/models.py msgid "feedback URL" msgstr "" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot URL" msgstr "" -#: notifications/models.py:62 +#: notifications/models.py msgid "landing page URL" msgstr "" -#: notifications/models.py:63 +#: notifications/models.py msgid "adjudicator draw released" msgstr "" -#: notifications/models.py:64 +#: notifications/models.py msgid "team registration" msgstr "" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator registration" msgstr "" -#: notifications/models.py:66 +#: notifications/models.py msgid "motion(s) released" msgstr "" -#: notifications/models.py:67 +#: notifications/models.py msgid "team draw released" msgstr "" -#: notifications/models.py:68 +#: notifications/models.py msgid "custom message" msgstr "" -#: notifications/models.py:72 notifications/models.py:132 +#: notifications/models.py msgid "event" msgstr "" -#: notifications/models.py:77 +#: notifications/models.py msgid "tournament" msgstr "প্রতিযোগিতা" -#: notifications/models.py:79 +#: notifications/models.py msgid "round" msgstr "পর্ব" -#: notifications/models.py:82 +#: notifications/models.py msgid "subject template" msgstr "" -#: notifications/models.py:84 +#: notifications/models.py msgid "body template" msgstr "" -#: notifications/models.py:87 +#: notifications/models.py msgid "bulk notification" msgstr "" -#: notifications/models.py:88 +#: notifications/models.py msgid "bulk notifications" msgstr "" -#: notifications/models.py:114 +#: notifications/models.py msgid "Processed" msgstr "" -#: notifications/models.py:115 +#: notifications/models.py msgid "Dropped" msgstr "" -#: notifications/models.py:116 +#: notifications/models.py msgid "Deferred" msgstr "" -#: notifications/models.py:117 +#: notifications/models.py msgid "Delivered" msgstr "" -#: notifications/models.py:118 +#: notifications/models.py msgid "Bounced" msgstr "" -#: notifications/models.py:119 +#: notifications/models.py msgid "Opened" msgstr "" -#: notifications/models.py:120 +#: notifications/models.py msgid "Clicked" msgstr "" -#: notifications/models.py:121 +#: notifications/models.py msgid "Unsubscribed" msgstr "" -#: notifications/models.py:122 +#: notifications/models.py msgid "Marked as spam" msgstr "" -#: notifications/models.py:123 +#: notifications/models.py msgid "Unsubscribed from group" msgstr "" -#: notifications/models.py:124 +#: notifications/models.py msgid "Resubscribed to group" msgstr "" -#: notifications/models.py:128 +#: notifications/models.py msgid "email message" msgstr "" -#: notifications/models.py:137 +#: notifications/models.py msgid "email status" msgstr "" -#: notifications/models.py:138 +#: notifications/models.py msgid "email statuses" msgstr "" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." msgstr "" -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." msgstr "" -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" msgstr "" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." msgstr "" -#: notifications/templates/notifications_nav.html:5 notifications/views.py:75 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" msgstr "" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:29 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" msgstr "" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" msgstr "" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" msgstr "" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." msgstr "" -#: notifications/templates/test_email.html:20 +#: notifications/templates/test_email.html #, python-format msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." msgstr "" -#: notifications/templates/test_email.html:30 +#: notifications/templates/test_email.html msgid "Go back to the site home page" msgstr "" -#: notifications/utils.py:26 +#: notifications/utils.py msgid "the chair" msgstr "" -#: notifications/utils.py:27 +#: notifications/utils.py msgid "the only" msgstr "" -#: notifications/utils.py:28 +#: notifications/utils.py msgid "a panellist" msgstr "" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "a trainee" msgstr "" -#: notifications/utils.py:59 +#: notifications/utils.py msgid "TBA" msgstr "" -#: notifications/utils.py:88 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "" -#: notifications/utils.py:99 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:102 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Win" msgstr "" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Loss" msgstr "" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " msgstr "" -#: notifications/utils.py:183 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " msgstr "" -#: notifications/utils.py:206 notifications/utils.py:207 +#: notifications/utils.py msgid ", " msgstr "" -#: notifications/views.py:47 +#: notifications/views.py #, python-format msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" msgstr "" -#: notifications/views.py:51 +#: notifications/views.py msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." msgstr "" -#: notifications/views.py:60 +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" msgstr "" -#: notifications/views.py:65 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." msgstr "" -#: notifications/views.py:81 +#: notifications/views.py msgid "N/A" msgstr "" -#: notifications/views.py:82 +#: notifications/views.py msgid "Not known" msgstr "" -#: notifications/views.py:87 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" msgstr "" -#: notifications/views.py:133 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "" -#: notifications/views.py:152 +#: notifications/views.py msgid "Timeline" msgstr "" -#: notifications/views.py:162 notifications/views.py:260 +#: notifications/views.py msgid "Participant" msgstr "" -#: notifications/views.py:163 notifications/views.py:265 +#: notifications/views.py msgid "Email address" msgstr "" -#: notifications/views.py:164 +#: notifications/views.py msgid "Status" msgstr "" -#: notifications/views.py:165 +#: notifications/views.py msgid "Time" msgstr "" -#: notifications/views.py:204 +#: notifications/views.py msgid "Email Participants" msgstr "" -#: notifications/views.py:233 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." msgstr[0] "" msgstr[1] "" -#: notifications/views.py:239 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." msgstr "" -#: notifications/views.py:250 +#: notifications/views.py msgid "Send Email" msgstr "" -#: notifications/views.py:266 +#: notifications/views.py msgid "Not Provided" msgstr "" -#: notifications/views.py:279 +#: notifications/views.py msgid "Role" msgstr "" -#: notifications/views.py:280 +#: notifications/views.py msgid "Adjudicator" msgstr "বিচারক" -#: notifications/views.py:280 +#: notifications/views.py msgid "Speaker" msgstr "বক্তা" -#: notifications/views.py:288 +#: notifications/views.py msgid "Speakers" msgstr "" -#: notifications/views.py:289 +#: notifications/views.py msgid "Adjudicators" msgstr "" diff --git a/tabbycat/options/locale/bn/LC_MESSAGES/django.po b/tabbycat/options/locale/bn/LC_MESSAGES/django.po index 794a7d7a2d1..1c856f86170 100644 --- a/tabbycat/options/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -18,1587 +18,1600 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" msgstr "" -#: options/models.py:13 +#: options/models.py msgid "instance" msgstr "" -#: options/models.py:18 +#: options/models.py msgid "tournament preference" msgstr "" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" msgstr "" -#: options/preferences.py:19 options/templates/preferences_index.html:53 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" msgstr "" -#: options/preferences.py:25 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:28 +#: options/preferences.py msgid "Minimum speaker score" msgstr "" -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum speaker score" msgstr "" -#: options/preferences.py:35 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:43 +#: options/preferences.py msgid "Speaker score step" msgstr "" -#: options/preferences.py:44 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:52 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" msgstr "" -#: options/preferences.py:53 +#: options/preferences.py msgid "Maximum margin" msgstr "" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" msgstr "" -#: options/preferences.py:63 +#: options/preferences.py msgid "Minimum reply score" msgstr "" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" msgstr "" -#: options/preferences.py:72 +#: options/preferences.py msgid "Maximum reply score" msgstr "" -#: options/preferences.py:80 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:81 +#: options/preferences.py msgid "Reply score step" msgstr "" -#: options/preferences.py:89 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" msgstr "" -#: options/preferences.py:90 +#: options/preferences.py msgid "Margin includes dissenters" msgstr "" -#: options/preferences.py:98 +#: options/preferences.py msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" msgstr "" -#: options/preferences.py:99 +#: options/preferences.py msgid "Team score includes ghosts" msgstr "" -#: options/preferences.py:106 options/templates/preferences_index.html:58 +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" msgstr "" -#: options/preferences.py:112 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" msgstr "" -#: options/preferences.py:113 +#: options/preferences.py msgid "Minimum adjudicator score to vote" msgstr "" -#: options/preferences.py:121 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" msgstr "" -#: options/preferences.py:122 +#: options/preferences.py msgid "Adjudicator conflict penalty" msgstr "" -#: options/preferences.py:130 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" msgstr "" -#: options/preferences.py:131 +#: options/preferences.py msgid "Adjudicator history penalty" msgstr "" -#: options/preferences.py:139 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" msgstr "" -#: options/preferences.py:140 +#: options/preferences.py msgid "Importance mismatch penalty" msgstr "" -#: options/preferences.py:148 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" msgstr "" -#: options/preferences.py:149 +#: options/preferences.py msgid "Team institution penalty" msgstr "" -#: options/preferences.py:157 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" msgstr "" -#: options/preferences.py:158 +#: options/preferences.py msgid "Team history penalty" msgstr "" -#: options/preferences.py:166 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" msgstr "" -#: options/preferences.py:167 +#: options/preferences.py msgid "Avoid same institution" msgstr "" -#: options/preferences.py:175 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" msgstr "" -#: options/preferences.py:176 +#: options/preferences.py msgid "Avoid team history" msgstr "" -#: options/preferences.py:184 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "" -#: options/preferences.py:185 +#: options/preferences.py msgid "Odd bracket resolution method" msgstr "" -#: options/preferences.py:189 +#: options/preferences.py msgid "Pull up from top" msgstr "" -#: options/preferences.py:190 +#: options/preferences.py msgid "Pull up from bottom" msgstr "" -#: options/preferences.py:191 +#: options/preferences.py msgid "Pull up from middle" msgstr "" -#: options/preferences.py:192 +#: options/preferences.py msgid "Pull up at random" msgstr "" -#: options/preferences.py:193 +#: options/preferences.py msgid "Intermediate brackets" msgstr "" -#: options/preferences.py:194 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" msgstr "" -#: options/preferences.py:195 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" msgstr "" -#: options/preferences.py:196 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" msgstr "" -#: options/preferences.py:203 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" msgstr "" -#: options/preferences.py:204 +#: options/preferences.py msgid "Side allocations method" msgstr "" -#: options/preferences.py:208 options/preferences.py:225 +#: options/preferences.py msgid "Random" msgstr "" -#: options/preferences.py:209 +#: options/preferences.py msgid "Balance" msgstr "" -#: options/preferences.py:210 +#: options/preferences.py msgid "Pre-allocated" msgstr "" -#: options/preferences.py:211 +#: options/preferences.py msgid "Manually enter from ballot" msgstr "" -#: options/preferences.py:218 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." msgstr "" -#: options/preferences.py:219 +#: options/preferences.py msgid "Pairing method" msgstr "" -#: options/preferences.py:223 +#: options/preferences.py msgid "Slide" msgstr "" -#: options/preferences.py:224 +#: options/preferences.py msgid "Fold" msgstr "" -#: options/preferences.py:226 +#: options/preferences.py msgid "Adjacent" msgstr "" -#: options/preferences.py:227 +#: options/preferences.py msgid "Fold top, adjacent rest" msgstr "" -#: options/preferences.py:234 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" msgstr "" -#: options/preferences.py:236 +#: options/preferences.py msgid "Conflict avoidance method" msgstr "" -#: options/preferences.py:240 +#: options/preferences.py msgid "Off" msgstr "" -#: options/preferences.py:241 +#: options/preferences.py msgid "One-up-one-down" msgstr "" -#: options/preferences.py:248 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "" -#: options/preferences.py:250 +#: options/preferences.py msgid "Pullup restriction" msgstr "" -#: options/preferences.py:254 +#: options/preferences.py msgid "No restriction" msgstr "" -#: options/preferences.py:255 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" msgstr "" -#: options/preferences.py:256 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" msgstr "" -#: options/preferences.py:257 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" msgstr "" -#: options/preferences.py:264 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." msgstr "" -#: options/preferences.py:265 +#: options/preferences.py msgid "BP pullup distribution" msgstr "" -#: options/preferences.py:269 +#: options/preferences.py msgid "Anywhere in bracket" msgstr "" -#: options/preferences.py:270 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" msgstr "" -#: options/preferences.py:277 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" msgstr "" -#: options/preferences.py:278 +#: options/preferences.py msgid "BP position cost" msgstr "" -#: options/preferences.py:282 +#: options/preferences.py msgid "Simple" msgstr "" -#: options/preferences.py:283 +#: options/preferences.py msgid "Rényi entropy" msgstr "" -#: options/preferences.py:284 +#: options/preferences.py msgid "Population variance" msgstr "" -#: options/preferences.py:291 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." msgstr "" -#: options/preferences.py:294 +#: options/preferences.py msgid "Rényi order (BP)" msgstr "" -#: options/preferences.py:303 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." msgstr "" -#: options/preferences.py:306 +#: options/preferences.py msgid "BP position cost exponent" msgstr "" -#: options/preferences.py:315 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." msgstr "" -#: options/preferences.py:317 +#: options/preferences.py msgid "BP assignment method" msgstr "" -#: options/preferences.py:321 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" msgstr "" -#: options/preferences.py:322 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" msgstr "" -#: options/preferences.py:329 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" msgstr "" -#: options/preferences.py:330 +#: options/preferences.py msgid "Skip adjudicator check-ins" msgstr "" -#: options/preferences.py:338 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:339 +#: options/preferences.py msgid "No panellist adjudicators" msgstr "" -#: options/preferences.py:347 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:348 +#: options/preferences.py msgid "No trainee adjudicators" msgstr "" -#: options/preferences.py:355 options/templates/preferences_index.html:73 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" msgstr "প্রতিক্রিয়া" -#: options/preferences.py:361 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:362 +#: options/preferences.py msgid "Minimum adjudicator score" msgstr "" -#: options/preferences.py:370 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:371 +#: options/preferences.py msgid "Maximum adjudicator score" msgstr "" -#: options/preferences.py:379 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" msgstr "" -#: options/preferences.py:380 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" msgstr "" -#: options/preferences.py:384 +#: options/preferences.py msgid "Chairs on panellists and trainees" msgstr "" -#: options/preferences.py:385 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" msgstr "" -#: options/preferences.py:386 +#: options/preferences.py msgid "Panellists and trainees on chairs, vice-versa" msgstr "" -#: options/preferences.py:387 +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" msgstr "" -#: options/preferences.py:394 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "" -#: options/preferences.py:395 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" msgstr "" -#: options/preferences.py:399 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" msgstr "" -#: options/preferences.py:400 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" msgstr "" -#: options/preferences.py:407 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" msgstr "" -#: options/preferences.py:408 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" msgstr "" -#: options/preferences.py:416 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" msgstr "" -#: options/preferences.py:417 +#: options/preferences.py msgid "Show unaccredited" msgstr "" -#: options/preferences.py:425 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" msgstr "" -#: options/preferences.py:426 +#: options/preferences.py msgid "Feedback introduction/explanation" msgstr "" -#: options/preferences.py:435 options/templates/preferences_index.html:63 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" msgstr "" -#: options/preferences.py:441 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" msgstr "" -#: options/preferences.py:442 +#: options/preferences.py msgid "Teams in debate" msgstr "" -#: options/preferences.py:446 +#: options/preferences.py msgid "Two-team format" msgstr "" -#: options/preferences.py:447 +#: options/preferences.py msgid "British Parliamentary (four teams)" msgstr "" -#: options/preferences.py:454 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:455 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" msgstr "" -#: options/preferences.py:459 options/preferences.py:472 +#: options/preferences.py msgid "One ballot per voting adjudicator" msgstr "" -#: options/preferences.py:460 options/preferences.py:473 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" msgstr "" -#: options/preferences.py:467 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:468 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" msgstr "" -#: options/preferences.py:480 +#: options/preferences.py msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." msgstr "" -#: options/preferences.py:481 +#: options/preferences.py msgid "Winner Declaration in ballot(s)" msgstr "" -#: options/preferences.py:485 +#: options/preferences.py msgid "Do not require separate winner selection" msgstr "" -#: options/preferences.py:486 +#: options/preferences.py msgid "Require separate winner selection as a check on correct scores" msgstr "" -#: options/preferences.py:487 +#: options/preferences.py msgid "Require winner selection to break tied-point debates" msgstr "" -#: options/preferences.py:488 +#: options/preferences.py msgid "Require winner selection, overriding scores" msgstr "" -#: options/preferences.py:495 +#: options/preferences.py msgid "When ballots should ask for speaker scores." msgstr "" -#: options/preferences.py:496 +#: options/preferences.py msgid "Require speaker scores" msgstr "" -#: options/preferences.py:500 +#: options/preferences.py msgid "Always require speaker scores" msgstr "" -#: options/preferences.py:501 +#: options/preferences.py msgid "Only require speaker scores in preliminary rounds" msgstr "" -#: options/preferences.py:502 +#: options/preferences.py msgid "Never require speaker scores" msgstr "" -#: options/preferences.py:509 +#: options/preferences.py msgid "How many substantive speakers on a team" msgstr "" -#: options/preferences.py:510 +#: options/preferences.py msgid "Substantive speakers" msgstr "" -#: options/preferences.py:518 +#: options/preferences.py msgid "What to call the teams" msgstr "" -#: options/preferences.py:519 +#: options/preferences.py msgid "Side names" msgstr "" -#: options/preferences.py:528 +#: options/preferences.py msgid "Whether this style features scored reply speeches" msgstr "" -#: options/preferences.py:529 +#: options/preferences.py msgid "Reply scores" msgstr "" -#: options/preferences.py:537 +#: options/preferences.py msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" msgstr "" -#: options/preferences.py:538 +#: options/preferences.py msgid "Require reply speaker to have given a substantive speech" msgstr "" -#: options/preferences.py:545 options/templates/preferences_index.html:68 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "" -#: options/preferences.py:551 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" msgstr "" -#: options/preferences.py:552 +#: options/preferences.py msgid "Speeches missable for standings eligibility" msgstr "" -#: options/preferences.py:560 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" msgstr "" -#: options/preferences.py:561 +#: options/preferences.py msgid "Replies missable for standings eligibility" msgstr "" -#: options/preferences.py:569 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" msgstr "" -#: options/preferences.py:570 +#: options/preferences.py msgid "Team standings precedence" msgstr "" -#: options/preferences.py:586 options/preferences.py:621 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" msgstr "" -#: options/preferences.py:592 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" msgstr "" -#: options/preferences.py:593 +#: options/preferences.py msgid "Team standings extra metrics" msgstr "" -#: options/preferences.py:604 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" msgstr "" -#: options/preferences.py:605 +#: options/preferences.py msgid "Speaker standings precedence" msgstr "" -#: options/preferences.py:627 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" msgstr "" -#: options/preferences.py:628 +#: options/preferences.py msgid "Speaker standings extra metrics" msgstr "" -#: options/preferences.py:638 options/templates/preferences_index.html:89 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" msgstr "" -#: options/preferences.py:644 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:645 +#: options/preferences.py msgid "Release team tab to public" msgstr "" -#: options/preferences.py:653 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." msgstr "" -#: options/preferences.py:654 +#: options/preferences.py msgid "Top teams cutoff" msgstr "" -#: options/preferences.py:662 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:663 +#: options/preferences.py msgid "Release speaker tab to public" msgstr "" -#: options/preferences.py:671 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." msgstr "" -#: options/preferences.py:672 +#: options/preferences.py msgid "Top speakers cutoff" msgstr "" -#: options/preferences.py:680 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:681 +#: options/preferences.py msgid "Release replies tab to public" msgstr "" -#: options/preferences.py:689 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." msgstr "" -#: options/preferences.py:690 +#: options/preferences.py msgid "Top replies cutoff" msgstr "" -#: options/preferences.py:716 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." msgstr "" -#: options/preferences.py:719 +#: options/preferences.py msgid "Release motions tab to public" msgstr "" -#: options/preferences.py:727 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" msgstr "" -#: options/preferences.py:728 +#: options/preferences.py msgid "Release adjudicator tab to public" msgstr "" -#: options/preferences.py:736 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" msgstr "" -#: options/preferences.py:737 +#: options/preferences.py msgid "Adjudicator tab displays" msgstr "" -#: options/preferences.py:741 +#: options/preferences.py msgid "Only shows base score" msgstr "" -#: options/preferences.py:742 +#: options/preferences.py msgid "Only shows final score" msgstr "" -#: options/preferences.py:743 +#: options/preferences.py msgid "Shows base, final, and per-round scores" msgstr "" -#: options/preferences.py:750 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." msgstr "" -#: options/preferences.py:751 +#: options/preferences.py msgid "Release ballots to public" msgstr "" -#: options/preferences.py:759 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" msgstr "" -#: options/preferences.py:760 +#: options/preferences.py msgid "Release all round results to public" msgstr "" -#: options/preferences.py:768 +#: options/preferences.py msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." msgstr "" -#: options/preferences.py:769 +#: options/preferences.py msgid "Release ballots through private URLs" msgstr "" -#: options/preferences.py:776 options/templates/preferences_index.html:94 +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" msgstr "" -#: options/preferences.py:782 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" msgstr "" -#: options/preferences.py:783 +#: options/preferences.py msgid "Ballot submissions from adjudicators" msgstr "" -#: options/preferences.py:787 options/preferences.py:801 +#: options/preferences.py msgid "Disabled (tab staff only)" msgstr "" -#: options/preferences.py:788 options/preferences.py:802 +#: options/preferences.py msgid "Use private URLs" msgstr "" -#: options/preferences.py:789 options/preferences.py:803 +#: options/preferences.py msgid "Use publicly accessible form" msgstr "" -#: options/preferences.py:796 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" msgstr "" -#: options/preferences.py:797 +#: options/preferences.py msgid "Feedback submissions from participants" msgstr "" -#: options/preferences.py:810 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" msgstr "" -#: options/preferences.py:811 +#: options/preferences.py msgid "Require password for submission" msgstr "" -#: options/preferences.py:819 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" msgstr "" -#: options/preferences.py:820 +#: options/preferences.py msgid "Password for public submission" msgstr "" -#: options/preferences.py:828 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" msgstr "" -#: options/preferences.py:829 +#: options/preferences.py msgid "Bypass double checking" msgstr "" -#: options/preferences.py:837 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." msgstr "" -#: options/preferences.py:838 +#: options/preferences.py msgid "Enforce blind confirmations" msgstr "" -#: options/preferences.py:846 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." msgstr "" -#: options/preferences.py:849 +#: options/preferences.py msgid "Assistant user access" msgstr "" -#: options/preferences.py:854 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" msgstr "" -#: options/preferences.py:855 +#: options/preferences.py msgid "Just results entry and draw display" msgstr "" -#: options/preferences.py:856 +#: options/preferences.py msgid "Only results entry" msgstr "" -#: options/preferences.py:862 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." msgstr "" -#: options/preferences.py:863 +#: options/preferences.py msgid "Participant self-checkin" msgstr "" -#: options/preferences.py:871 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" msgstr "" -#: options/preferences.py:874 +#: options/preferences.py msgid "Check-In Window (People)" msgstr "" -#: options/preferences.py:880 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" msgstr "" -#: options/preferences.py:883 +#: options/preferences.py msgid "Check-In Window (Rooms)" msgstr "" -#: options/preferences.py:889 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" msgstr "" -#: options/preferences.py:890 +#: options/preferences.py msgid "Ballot Digit Checks" msgstr "" -#: options/preferences.py:898 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:899 +#: options/preferences.py msgid "Score return location" msgstr "" -#: options/preferences.py:907 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:908 +#: options/preferences.py msgid "Feedback return location" msgstr "" -#: options/preferences.py:916 +#: options/preferences.py msgid "Lets debates have their status as postponed, as to not block draw generation." msgstr "" -#: options/preferences.py:917 +#: options/preferences.py msgid "Enable postponements" msgstr "" -#: options/preferences.py:925 +#: options/preferences.py msgid "Have each voting adjudicator submit a separate ballot." msgstr "" -#: options/preferences.py:926 +#: options/preferences.py msgid "Individual voting ballots" msgstr "" -#: options/preferences.py:933 options/templates/preferences_index.html:99 +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" msgstr "" -#: options/preferences.py:939 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" msgstr "" -#: options/preferences.py:940 +#: options/preferences.py msgid "Enable public view of participants list" msgstr "" -#: options/preferences.py:948 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" msgstr "" -#: options/preferences.py:949 +#: options/preferences.py msgid "Enable public view of institutions list" msgstr "" -#: options/preferences.py:957 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" msgstr "" -#: options/preferences.py:958 +#: options/preferences.py msgid "Enable public view of diversity info" msgstr "" -#: options/preferences.py:966 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." msgstr "" -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of the checkin statuses" msgstr "" -#: options/preferences.py:977 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" msgstr "" -#: options/preferences.py:978 +#: options/preferences.py msgid "Show break categories on participants page" msgstr "" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" msgstr "" -#: options/preferences.py:987 +#: options/preferences.py msgid "Show pre-allocated sides to public" msgstr "" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing released draws" msgstr "" -#: options/preferences.py:996 +#: options/preferences.py msgid "Enable public view of draw" msgstr "" -#: options/preferences.py:1000 +#: options/preferences.py msgid "Disabled" msgstr "" -#: options/preferences.py:1001 +#: options/preferences.py msgid "Show a single page for the current round's draw" msgstr "" -#: options/preferences.py:1002 +#: options/preferences.py msgid "Show individual pages for all released draws" msgstr "" -#: options/preferences.py:1009 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" msgstr "" -#: options/preferences.py:1010 +#: options/preferences.py msgid "Enable public view of results" msgstr "" -#: options/preferences.py:1018 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" msgstr "" -#: options/preferences.py:1019 +#: options/preferences.py msgid "Enable public view of motions" msgstr "" -#: options/preferences.py:1027 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" msgstr "" -#: options/preferences.py:1028 +#: options/preferences.py msgid "Enable public view of team standings" msgstr "" -#: options/preferences.py:1036 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" msgstr "" -#: options/preferences.py:1037 +#: options/preferences.py msgid "Enable public record pages" msgstr "" -#: options/preferences.py:1045 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1046 +#: options/preferences.py msgid "Release team breaks to public" msgstr "" -#: options/preferences.py:1054 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1055 +#: options/preferences.py msgid "Release adjudicators break to public" msgstr "" -#: options/preferences.py:1063 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" msgstr "" -#: options/preferences.py:1064 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" msgstr "" -#: options/preferences.py:1072 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." msgstr "" -#: options/preferences.py:1073 +#: options/preferences.py msgid "Tournament staff" msgstr "" -#: options/preferences.py:1083 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" msgstr "" -#: options/preferences.py:1084 +#: options/preferences.py msgid "Welcome message" msgstr "" -#: options/preferences.py:1093 options/templates/preferences_index.html:104 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" msgstr "" -#: options/preferences.py:1099 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" msgstr "" -#: options/preferences.py:1100 +#: options/preferences.py msgid "Show splitting adjudicators" msgstr "" -#: options/preferences.py:1108 +#: options/preferences.py msgid "Whether and how to use code names for teams" msgstr "" -#: options/preferences.py:1109 +#: options/preferences.py msgid "Team code names" msgstr "" -#: options/preferences.py:1114 +#: options/preferences.py msgid "Do not use code names" msgstr "" -#: options/preferences.py:1115 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" msgstr "" -#: options/preferences.py:1116 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" msgstr "" -#: options/preferences.py:1118 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" msgstr "" -#: options/preferences.py:1120 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" msgstr "" -#: options/preferences.py:1126 +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" msgstr "" -#: options/preferences.py:1127 +#: options/preferences.py msgid "Show emoji" msgstr "" -#: options/preferences.py:1135 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" msgstr "" -#: options/preferences.py:1136 +#: options/preferences.py msgid "Show team institutions" msgstr "" -#: options/preferences.py:1144 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" msgstr "" -#: options/preferences.py:1145 +#: options/preferences.py msgid "Show adjudicator institutions" msgstr "" -#: options/preferences.py:1153 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" msgstr "" -#: options/preferences.py:1154 +#: options/preferences.py msgid "Show speakers in draw" msgstr "" -#: options/preferences.py:1161 options/templates/preferences_index.html:109 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" msgstr "" -#: options/preferences.py:1167 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Reply-to name" msgstr "" -#: options/preferences.py:1176 +#: options/preferences.py msgid "The email address for handling replies" msgstr "" -#: options/preferences.py:1177 +#: options/preferences.py msgid "Reply-to address" msgstr "" -#: options/preferences.py:1185 +#: options/preferences.py msgid "A secret key to accept email status events" msgstr "" -#: options/preferences.py:1186 +#: options/preferences.py msgid "Email status secret key" msgstr "" -#: options/preferences.py:1196 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "" -#: options/preferences.py:1197 +#: options/preferences.py msgid "Ballot receipts" msgstr "" -#: options/preferences.py:1205 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "" -#: options/preferences.py:1207 +#: options/preferences.py msgid "Ballot receipt subject line" msgstr "" -#: options/preferences.py:1215 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "" -#: options/preferences.py:1216 +#: options/preferences.py msgid "Ballot receipt message" msgstr "" -#: options/preferences.py:1232 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1233 +#: options/preferences.py msgid "Team points subject line" msgstr "" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team points message" msgstr "" -#: options/preferences.py:1250 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1251 +#: options/preferences.py msgid "Adjudicator draw subject line" msgstr "" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1259 +#: options/preferences.py msgid "Adjudicator draw message" msgstr "" -#: options/preferences.py:1268 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." msgstr "" -#: options/preferences.py:1269 +#: options/preferences.py msgid "Team draw subject line" msgstr "" -#: options/preferences.py:1276 options/preferences.py:1294 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1277 options/preferences.py:1295 +#: options/preferences.py msgid "Private URL notification message" msgstr "" -#: options/preferences.py:1286 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1287 +#: options/preferences.py msgid "Private URL notification subject line" msgstr "" -#: options/preferences.py:1308 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1309 +#: options/preferences.py msgid "Motion release notification subject line" msgstr "" -#: options/preferences.py:1316 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1317 +#: options/preferences.py msgid "Motion release notification message" msgstr "" -#: options/preferences.py:1325 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1326 +#: options/preferences.py msgid "Team registration notification subject line" msgstr "" -#: options/preferences.py:1333 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1334 +#: options/preferences.py msgid "Team registration notification message" msgstr "" -#: options/preferences.py:1343 options/templates/preferences_index.html:78 +#: options/preferences.py options/templates/preferences_index.html msgid "Motions" msgstr "প্রস্তাবসমূহ" -#: options/preferences.py:1349 +#: options/preferences.py msgid "If checked, ballots require a motion to be entered" msgstr "" -#: options/preferences.py:1350 +#: options/preferences.py msgid "Enable motions" msgstr "" -#: options/preferences.py:1358 +#: options/preferences.py msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" msgstr "" -#: options/preferences.py:1359 +#: options/preferences.py msgid "Ballot Hide Motions" msgstr "" -#: options/preferences.py:1367 +#: options/preferences.py msgid "Enables the motion veto field on ballots, to track veto statistics" msgstr "" -#: options/preferences.py:1368 +#: options/preferences.py msgid "Motion vetoes" msgstr "" -#: options/preferences.py:1376 +#: options/preferences.py msgid "If showing results to public, show which motions were selected in the record" msgstr "" -#: options/preferences.py:1377 +#: options/preferences.py msgid "Show motions in results" msgstr "" -#: options/preferences.py:1385 +#: options/preferences.py msgid "Order in which are listed by round in the public view" msgstr "" -#: options/preferences.py:1386 +#: options/preferences.py msgid "Order to display motions" msgstr "" -#: options/preferences.py:1390 +#: options/preferences.py msgid "Earliest round first" msgstr "" -#: options/preferences.py:1391 +#: options/preferences.py msgid "Latest round first" msgstr "" -#: options/preferences.py:1398 +#: options/preferences.py msgid "Whether motions can be reused from one round to another." msgstr "" -#: options/preferences.py:1399 +#: options/preferences.py msgid "Allow motion reuse" msgstr "" -#: options/preferences.py:1406 options/templates/preferences_index.html:114 +#: options/preferences.py options/templates/preferences_index.html msgid "Global Settings" msgstr "" -#: options/preferences.py:1412 +#: options/preferences.py msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." msgstr "" -#: options/preferences.py:1413 +#: options/preferences.py msgid "Enable API access" msgstr "" -#: options/preferences.py:1421 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1422 +#: options/preferences.py msgid "Assistant account creation key" msgstr "" -#: options/preferences.py:1431 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1433 +#: options/preferences.py msgid "Administrator account creation key" msgstr "" -#: options/presets.py:32 options/presets.py:324 +#: options/presets.py msgid "Public Information Options" msgstr "" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" msgstr "" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" msgstr "" -#: options/presets.py:74 +#: options/presets.py msgid "Australs Rules" msgstr "" -#: options/presets.py:75 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:114 +#: options/presets.py msgid "British Parliamentary Rules" msgstr "" -#: options/presets.py:115 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." msgstr "" -#: options/presets.py:157 +#: options/presets.py msgid "Canadian Parliamentary Rules" msgstr "" -#: options/presets.py:159 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." msgstr "" -#: options/presets.py:182 +#: options/presets.py msgid "Australian Easters Rules" msgstr "" -#: options/presets.py:184 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:202 +#: options/presets.py msgid "2 vs 2 Impromptu" msgstr "" -#: options/presets.py:204 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." msgstr "" -#: options/presets.py:229 +#: options/presets.py msgid "3 vs 3 Prepared" msgstr "" -#: options/presets.py:231 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." msgstr "" -#: options/presets.py:258 +#: options/presets.py msgid "UADC Rules" msgstr "" -#: options/presets.py:260 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:296 +#: options/presets.py msgid "WSDC Rules" msgstr "" -#: options/presets.py:298 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:326 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "" -#: options/presets.py:338 +#: options/presets.py msgid "Tab Release Options" msgstr "" -#: options/presets.py:340 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" msgstr "" -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html msgid "Configuration" msgstr "" -#: options/templates/preferences_index.html:11 +#: options/templates/preferences_index.html #, python-format msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." msgstr "" -#: options/templates/preferences_index.html:24 +#: options/templates/preferences_index.html #, python-format msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." msgstr "" -#: options/templates/preferences_index.html:35 +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." msgstr "" -#: options/templates/preferences_index.html:54 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" msgstr "" -#: options/templates/preferences_index.html:59 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" msgstr "" -#: options/templates/preferences_index.html:64 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" msgstr "" -#: options/templates/preferences_index.html:69 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" msgstr "" -#: options/templates/preferences_index.html:74 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" msgstr "" -#: options/templates/preferences_index.html:79 +#: options/templates/preferences_index.html msgid "How and where are motions used" msgstr "" -#: options/templates/preferences_index.html:90 +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" msgstr "" -#: options/templates/preferences_index.html:95 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" msgstr "" -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" msgstr "" -#: options/templates/preferences_index.html:105 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" msgstr "" -#: options/templates/preferences_index.html:110 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" msgstr "" -#: options/templates/preferences_index.html:115 +#: options/templates/preferences_index.html msgid "Settings which can affect all tournaments on the site" msgstr "" -#: options/templates/preferences_index.html:127 +#: options/templates/preferences_index.html msgid "Manually Set Current Round" msgstr "" -#: options/templates/preferences_index.html:128 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." msgstr "" -#: options/templates/preferences_index.html:132 -msgid "Set Round Weights" +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: options/templates/preferences_index.html:133 +#: options/templates/preferences_index.html msgid "Rounds can be weighted so that certain rounds are worth more team points." msgstr "" -#: options/templates/preferences_index.html:140 +#: options/templates/preferences_index.html msgid "Presets" msgstr "" -#: options/templates/preferences_index.html:141 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." msgstr "" -#: options/templates/preferences_index.html:152 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" msgstr "" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" msgstr "" -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" msgstr "" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" msgstr "" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" msgstr "" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" msgstr "" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" msgstr "" -#: options/views.py:65 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." msgstr "" -#: options/views.py:111 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." msgstr "" diff --git a/tabbycat/participants/locale/bn/LC_MESSAGES/django.po b/tabbycat/participants/locale/bn/LC_MESSAGES/django.po index 527d3c497b9..c4263d9e92c 100644 --- a/tabbycat/participants/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -18,960 +18,947 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 942\n" -#: participants/admin.py:96 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" msgstr "" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." msgstr[0] "" msgstr[1] "" -#: participants/admin.py:152 participants/admin.py:233 -msgid "Delete URL key" +#: participants/admin.py +msgid "Reset emoji" msgstr "" -#: participants/admin.py:160 +#: participants/admin.py #, python-format msgid "%(count)d team had their emoji reset." msgid_plural "%(count)d teams had their emojis reset." msgstr[0] "" msgstr[1] "" -#: participants/admin.py:164 -msgid "Reset emoji" +#: participants/admin.py +msgid "Reset code name" msgstr "" -#: participants/admin.py:170 +#: participants/admin.py #, python-format msgid "%(count)d team had their code name reset." msgid_plural "%(count)d teams had their code names reset." msgstr[0] "" msgstr[1] "" -#: participants/admin.py:174 -msgid "Reset code name" -msgstr "" - -#: participants/admin.py:228 +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." msgstr[0] "" msgstr[1] "" -#: participants/apps.py:7 participants/views.py:41 +#: participants/apps.py participants/views.py msgid "Participants" msgstr "অংশগ্রহণকারী" -#: participants/models.py:21 participants/models.py:37 -#: participants/models.py:66 participants/models.py:96 +#: participants/models.py msgid "name" msgstr "নাম" -#: participants/models.py:24 participants/models.py:45 +#: participants/models.py msgid "region" msgstr "" -#: participants/models.py:25 +#: participants/models.py msgid "regions" msgstr "" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:39 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" msgstr "" -#: participants/models.py:41 +#: participants/models.py msgid "code" msgstr "" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:43 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" msgstr "" -#: participants/models.py:55 participants/models.py:155 -#: participants/models.py:353 +#: participants/models.py msgid "institution" msgstr "প্রতিষ্ঠান" -#: participants/models.py:56 +#: participants/models.py msgid "institutions" msgstr "" -#: participants/models.py:64 participants/models.py:157 -#: participants/models.py:356 +#: participants/models.py msgid "tournament" msgstr "প্রতিযোগিতা" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:68 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" msgstr "" -#: participants/models.py:70 +#: participants/models.py msgid "slug" msgstr "" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:72 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" msgstr "" -#: participants/models.py:74 +#: participants/models.py msgid "sequence number" msgstr "ক্রম সংখ্যা" -#: participants/models.py:75 +#: participants/models.py msgid "The order in which the categories are displayed" msgstr "" -#: participants/models.py:77 +#: participants/models.py msgid "limit" msgstr "" -#: participants/models.py:78 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: participants/models.py:80 +#: participants/models.py msgid "public" msgstr "" -#: participants/models.py:81 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" msgstr "" -#: participants/models.py:87 +#: participants/models.py msgid "speaker category" msgstr "" -#: participants/models.py:88 participants/models.py:330 +#: participants/models.py msgid "speaker categories" msgstr "" -#: participants/models.py:98 +#: participants/models.py msgid "email address" msgstr "" -#: participants/models.py:100 +#: participants/models.py msgid "phone" msgstr "" -#: participants/models.py:102 +#: participants/models.py msgid "anonymous" msgstr "নামবিহীন" -#: participants/models.py:103 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" msgstr "" -#: participants/models.py:106 +#: participants/models.py +msgid "code name" +msgstr "সাংকেতিক নাম" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py msgid "URL key" msgstr "" -#: participants/models.py:111 +#: participants/models.py msgid "male" msgstr "" -#: participants/models.py:112 +#: participants/models.py msgid "female" msgstr "" -#: participants/models.py:113 +#: participants/models.py msgid "other" msgstr "" -#: participants/models.py:115 +#: participants/models.py msgid "gender" msgstr "" -#: participants/models.py:116 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" msgstr "" -#: participants/models.py:118 +#: participants/models.py msgid "pronoun" msgstr "" -#: participants/models.py:119 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" msgstr "" -#: participants/models.py:122 +#: participants/models.py msgid "person" msgstr "" -#: participants/models.py:123 +#: participants/models.py msgid "persons" msgstr "" -#: participants/models.py:138 +#: participants/models.py msgid "full name/suffix" msgstr "" -#: participants/models.py:139 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:141 +#: participants/models.py msgid "short name/suffix" msgstr "" -#: participants/models.py:142 +#: participants/models.py msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:144 -msgid "code name" -msgstr "সাংকেতিক নাম" - -#: participants/models.py:145 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" msgstr "" -#: participants/models.py:148 +#: participants/models.py msgid "short name" msgstr "" -#: participants/models.py:149 +#: participants/models.py msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:151 +#: participants/models.py msgid "long name" msgstr "" -#: participants/models.py:152 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:159 +#: participants/models.py msgid "Uses institutional prefix" msgstr "" -#: participants/models.py:160 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" msgstr "" -#: participants/models.py:162 +#: participants/models.py msgid "break categories" msgstr "" -#: participants/models.py:167 participants/models.py:364 +#: participants/models.py msgid "institution conflicts" msgstr "" -#: participants/models.py:178 +#: participants/models.py msgid "none" msgstr "" -#: participants/models.py:179 +#: participants/models.py msgid "swing" msgstr "" -#: participants/models.py:180 +#: participants/models.py msgid "composite" msgstr "" -#: participants/models.py:181 +#: participants/models.py msgid "bye" msgstr "" -#: participants/models.py:184 +#: participants/models.py msgid "type" msgstr "ধরন / ছাপার অক্ষর" -#: participants/models.py:188 +#: participants/models.py msgid "emoji" msgstr "" -#: participants/models.py:202 participants/models.py:328 +#: participants/models.py msgid "team" msgstr "দল" -#: participants/models.py:203 +#: participants/models.py msgid "teams" msgstr "দলসমূহ" -#: participants/models.py:311 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." msgstr "" -#: participants/models.py:313 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:315 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:333 +#: participants/models.py msgid "speaker" msgstr "বক্তা" -#: participants/models.py:334 +#: participants/models.py msgid "speakers" msgstr "" -#: participants/models.py:357 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" msgstr "" -#: participants/models.py:359 +#: participants/models.py msgid "base score" msgstr "মূল স্কোর" -#: participants/models.py:368 +#: participants/models.py msgid "team conflicts" msgstr "" -#: participants/models.py:372 +#: participants/models.py msgid "adjudicator conflicts" msgstr "" -#: participants/models.py:375 +#: participants/models.py msgid "always trainee" msgstr "" -#: participants/models.py:376 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" msgstr "" -#: participants/models.py:378 +#: participants/models.py msgid "breaking" msgstr "ব্রেকিং" -#: participants/models.py:380 +#: participants/models.py msgid "independent" msgstr "" -#: participants/models.py:382 +#: participants/models.py msgid "adjudication core" msgstr "" -#: participants/models.py:391 +#: participants/models.py msgid "adjudicator" msgstr "বিচারক" -#: participants/models.py:392 +#: participants/models.py msgid "adjudicators" msgstr "" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" msgstr "" -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" msgstr "" -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" msgstr "" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" msgstr "" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" msgstr "" -#: participants/templates/adjudicator_registration_card.html:27 -#: participants/templates/team_registration_card.html:89 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" msgstr "প্রতিষ্ঠান:" -#: participants/templates/adjudicator_registration_card.html:31 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" msgstr "" -#: participants/templates/adjudicator_registration_card.html:36 -#: participants/templates/team_registration_card.html:98 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:43 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." msgstr "" -#: participants/templates/adjudicator_registration_card.html:50 -#: participants/templates/team_registration_card.html:109 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:52 -#: participants/templates/team_registration_card.html:111 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr "" -#: participants/templates/adjudicator_registration_card.html:54 -#: participants/templates/adjudicator_registration_card.html:62 -#: participants/templates/adjudicator_registration_card.html:74 -#: participants/templates/adjudicator_registration_card.html:84 -#: participants/templates/team_registration_card.html:58 -#: participants/templates/team_registration_card.html:70 -#: participants/templates/team_registration_card.html:79 -#: participants/templates/team_registration_card.html:113 -#: participants/templates/team_registration_card.html:122 -#: participants/templates/team_registration_card.html:133 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" msgstr "" -#: participants/templates/adjudicator_registration_card.html:58 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:60 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:71 -#: participants/templates/adjudicator_registration_card.html:82 -#: participants/templates/team_registration_card.html:56 -#: participants/templates/team_registration_card.html:68 -#: participants/templates/team_registration_card.html:77 -#: participants/templates/team_registration_card.html:120 -#: participants/templates/team_registration_card.html:131 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr "" -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/team_registration_card.html:118 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:80 -#: participants/templates/team_registration_card.html:129 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" msgstr "" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:14 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." msgstr "" #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:21 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:33 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:41 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:47 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" msgstr "" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "দলসমূহ:" -#: participants/templates/current_round/common.html:28 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "" msgstr[1] "" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" msgstr "" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" msgstr "" -#: participants/templates/current_round/common.html:44 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." msgstr "" -#: participants/templates/current_round/common.html:54 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." msgstr "" -#: participants/templates/current_round/common.html:57 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "প্রস্তাব:" -#: participants/templates/current_round/common.html:61 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "" -#: participants/templates/current_round/common.html:69 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." msgstr "" -#: participants/templates/current_round/round_adj.html:14 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:18 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:24 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:28 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:36 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:40 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:46 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:50 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:85 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:89 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:95 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:99 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:107 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:111 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:117 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:121 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:129 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:133 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:139 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:143 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:39 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:43 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:56 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:60 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:66 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:70 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." msgstr "" -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" msgstr "" -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" msgstr "" -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:38 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" msgstr "" -#: participants/templates/feedback_progress_panel.html:46 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:53 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." msgstr "" -#: participants/templates/in_this_round.html:9 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" msgstr "" -#: participants/templates/in_this_round.html:13 +#: participants/templates/in_this_round.html msgid "In This Round" msgstr "" -#: participants/templates/in_this_round.html:16 +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" msgstr "" -#: participants/templates/in_this_round.html:23 +#: participants/templates/in_this_round.html msgid "Room TBA" msgstr "" -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:39 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:54 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." msgstr[0] "" msgstr[1] "" -#: participants/templates/in_this_round.html:60 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." msgstr "" -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:79 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:91 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." msgstr "" -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" msgstr "" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" msgstr "" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." msgstr "" -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" msgstr "" -#: participants/templates/participants_subnav.html:26 participants/views.py:135 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" msgstr "" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" msgstr "" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" msgstr "" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." msgstr "" -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." msgstr "" -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" msgstr "" -#: participants/templates/team_registration_card.html:16 +#: participants/templates/team_registration_card.html msgid "Team name:" msgstr "" -#: participants/templates/team_registration_card.html:21 +#: participants/templates/team_registration_card.html msgid "Full team name:" msgstr "" -#: participants/templates/team_registration_card.html:25 +#: participants/templates/team_registration_card.html msgid "Short team name:" msgstr "" -#: participants/templates/team_registration_card.html:32 +#: participants/templates/team_registration_card.html msgid "Code name:" msgstr "সাংকেতিক নাম:" -#: participants/templates/team_registration_card.html:36 +#: participants/templates/team_registration_card.html msgid "No code name assigned" msgstr "" -#: participants/templates/team_registration_card.html:42 +#: participants/templates/team_registration_card.html msgid "Emoji:" msgstr "" -#: participants/templates/team_registration_card.html:46 +#: participants/templates/team_registration_card.html msgid "No emoji assigned" msgstr "" -#: participants/templates/team_registration_card.html:54 +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "" -#: participants/templates/team_registration_card.html:66 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" msgstr "" -#: participants/templates/team_registration_card.html:75 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" msgstr "" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" msgstr "" -#: participants/views.py:46 +#: participants/views.py msgid "Adjudicators" msgstr "" -#: participants/views.py:55 +#: participants/views.py msgid "Speakers" msgstr "" -#: participants/views.py:86 +#: participants/views.py msgid "Institutions" msgstr "" -#: participants/views.py:102 +#: participants/views.py msgid "Code" msgstr "" -#: participants/views.py:103 +#: participants/views.py msgid "Full name" msgstr "" -#: participants/views.py:105 +#: participants/views.py msgid "Region" msgstr "" -#: participants/views.py:107 +#: participants/views.py msgid "Teams" msgstr "দলসমূহ" -#: participants/views.py:107 +#: participants/views.py msgid "Number of teams" msgstr "" -#: participants/views.py:109 +#: participants/views.py msgid "Adjs" msgstr "" -#: participants/views.py:110 +#: participants/views.py msgid "Number of adjudicators, excluding independents" msgstr "" -#: participants/views.py:112 +#: participants/views.py msgid "IAs" msgstr "" -#: participants/views.py:113 +#: participants/views.py msgid "Number of independent adjudicators" msgstr "" -#: participants/views.py:143 +#: participants/views.py msgid "Code name" msgstr "সাংকেতিক নাম" -#: participants/views.py:163 +#: participants/views.py msgid "Team Registration" msgstr "" -#: participants/views.py:231 +#: participants/views.py msgid "Results" msgstr "ফলাফল" -#: participants/views.py:239 participants/views.py:264 +#: participants/views.py #, python-format msgid "Record for %(name)s" msgstr "" -#: participants/views.py:261 +#: participants/views.py msgid "Previous Rounds" msgstr "" -#: participants/views.py:352 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" msgstr[0] "" msgstr[1] "" -#: participants/views.py:358 +#: participants/views.py msgid "No changes were made to the categories." msgstr "" -#: participants/views.py:371 +#: participants/views.py msgid "Speaker Category Eligibility" msgstr "" diff --git a/tabbycat/printing/locale/bn/LC_MESSAGES/django.po b/tabbycat/printing/locale/bn/LC_MESSAGES/django.po index 2645002384f..9f9f9bf74b4 100644 --- a/tabbycat/printing/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:18\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -18,109 +18,108 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" msgstr "" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" msgstr "" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." msgstr "" -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." msgstr "" -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" msgstr "" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" msgstr "" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" msgstr "" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" msgstr "" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" msgstr "" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" msgstr "" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" msgstr "" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" msgstr "" -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" msgstr "" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "" -#: printing/templates/scoresheet_list.html:47 +#: printing/templates/scoresheet_list.html msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." msgstr "" -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "প্রস্তাব" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" msgstr "" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." msgstr "" -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" msgstr "" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" msgstr "" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "দল" diff --git a/tabbycat/privateurls/locale/bn/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/bn/LC_MESSAGES/django.po index d2e706e6c9e..65752dbeeae 100644 --- a/tabbycat/privateurls/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:48\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -18,169 +18,162 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" msgstr "" -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:145 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" msgstr "" -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." msgstr "" -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" msgstr "" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." msgstr "" -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." msgstr "" -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." msgstr "" -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." msgstr "" -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." msgstr "" -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." msgstr "" -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" msgstr "" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" msgstr "" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" msgstr "" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." msgstr "" -#: privateurls/templates/public_url_landing.html:62 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Submit Ballot for %(round)s" msgstr "" -#: privateurls/templates/public_url_landing.html:65 -msgid "There are no current rounds" -msgstr "" - -#: privateurls/templates/public_url_landing.html:71 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" msgstr "" -#: privateurls/templates/public_url_landing.html:84 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" msgstr "" -#: privateurls/views.py:63 privateurls/views.py:164 +#: privateurls/views.py msgid "no URL" msgstr "" -#: privateurls/views.py:76 +#: privateurls/views.py msgid "URL" msgstr "" -#: privateurls/views.py:87 +#: privateurls/views.py msgid "Speakers" msgstr "" -#: privateurls/views.py:97 +#: privateurls/views.py msgid "Adjudicators" msgstr "" -#: privateurls/views.py:119 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." msgstr "" -#: privateurls/views.py:126 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." msgstr[0] "" msgstr[1] "" -#: privateurls/views.py:131 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." msgstr[0] "" msgstr[1] "" -#: privateurls/views.py:172 +#: privateurls/views.py msgid "URL Key" msgstr "" -#: privateurls/views.py:181 +#: privateurls/views.py msgid "Debates" msgstr "বিতর্ক" diff --git a/tabbycat/results/locale/bn/LC_MESSAGES/django.po b/tabbycat/results/locale/bn/LC_MESSAGES/django.po index 0323b584cbc..ffc30b17c6a 100644 --- a/tabbycat/results/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:14\n" "Last-Translator: philip_tc\n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -18,1081 +18,1075 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 948\n" -#: results/admin.py:44 +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py #, python-format msgid "Resaved results for %(count)d ballot submission." msgid_plural "Resaved results for %(count)d ballot submissions." msgstr[0] "" msgstr[1] "" -#: results/admin.py:47 -msgid "Resave results" -msgstr "" - -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:158 +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" msgstr "ফলাফল" -#: results/forms.py:39 +#: results/forms.py msgid "Tournament password" msgstr "" -#: results/forms.py:45 +#: results/forms.py msgid "That password isn't correct." msgstr "" -#: results/forms.py:77 +#: results/forms.py msgid "Please enter a whole number." msgstr "" -#: results/forms.py:79 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." msgstr "" -#: results/forms.py:166 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." msgstr "" -#: results/forms.py:173 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." msgstr "" -#: results/forms.py:302 results/forms.py:336 +#: results/forms.py msgid "---------" msgstr "" -#: results/forms.py:304 results/forms.py:306 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" msgstr "" -#: results/forms.py:323 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" msgstr "" -#: results/forms.py:332 results/forms.py:901 +#: results/forms.py #, python-format msgid "%(team)s (%(side)s)" msgstr "" -#: results/forms.py:335 +#: results/forms.py msgid "Winner" msgstr "" -#: results/forms.py:489 +#: results/forms.py msgid "Mark as a duplicate speech" msgstr "" -#: results/forms.py:549 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." msgstr "" -#: results/forms.py:563 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." msgstr[0] "" msgstr[1] "" -#: results/forms.py:580 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." msgstr "" -#: results/forms.py:587 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." msgstr "" -#: results/forms.py:719 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." msgstr "" -#: results/forms.py:724 +#: results/forms.py msgid "The declared winner does not correspond to the team with the highest score." msgstr "" -#: results/forms.py:733 +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" msgstr "" -#: results/forms.py:743 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:846 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:851 +#: results/forms.py #, python-format msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:859 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:921 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." msgstr "" -#: results/forms.py:964 +#: results/forms.py #, python-format msgid "There must be exactly %(n)d team advancing." msgid_plural "There must be exactly %(n)d teams advancing." msgstr[0] "" msgstr[1] "" -#: results/forms.py:1007 +#: results/forms.py msgid "There must be exactly 1 team advancing." msgstr "" -#: results/models.py:33 +#: results/models.py msgid "Tab room" msgstr "" -#: results/models.py:34 +#: results/models.py msgid "Public" msgstr "" -#: results/models.py:38 +#: results/models.py msgid "timestamp" msgstr "টাইমস্ট্যাম্প" -#: results/models.py:40 +#: results/models.py msgid "version" msgstr "" -#: results/models.py:42 +#: results/models.py msgid "submitter type" msgstr "" -#: results/models.py:44 +#: results/models.py msgid "confirmed" msgstr "" -#: results/models.py:48 +#: results/models.py msgid "from private URL" msgstr "" -#: results/models.py:51 +#: results/models.py msgid "from participant" msgstr "" -#: results/models.py:56 +#: results/models.py msgid "submitter" msgstr "" -#: results/models.py:59 +#: results/models.py msgid "confirmer" msgstr "" -#: results/models.py:61 +#: results/models.py msgid "confirm timestamp" msgstr "" -#: results/models.py:63 +#: results/models.py msgid "IP address" msgstr "" -#: results/models.py:103 +#: results/models.py msgid "A tab room ballot must have a user associated." msgstr "" -#: results/models.py:111 +#: results/models.py msgid "debate" msgstr "বিতর্ক" -#: results/models.py:113 +#: results/models.py msgid "motion" msgstr "প্রস্তাব" -#: results/models.py:115 +#: results/models.py msgid "discarded" msgstr "" -#: results/models.py:117 +#: results/models.py msgid "single adjudicator" msgstr "" -#: results/models.py:118 +#: results/models.py msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." msgstr "" -#: results/models.py:123 results/models.py:228 results/models.py:267 -#: results/models.py:305 results/models.py:347 +#: results/models.py msgid "ballot submission" msgstr "" -#: results/models.py:124 +#: results/models.py msgid "ballot submissions" msgstr "" -#: results/models.py:143 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" msgstr "" -#: results/models.py:150 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" msgstr "" -#: results/models.py:230 results/models.py:269 +#: results/models.py msgid "debate adjudicator" msgstr "বিতর্কের বিচারক" -#: results/models.py:232 results/models.py:271 results/models.py:307 -#: results/models.py:349 +#: results/models.py msgid "debate team" msgstr "" -#: results/models.py:235 results/models.py:312 +#: results/models.py msgid "win" msgstr "" -#: results/models.py:237 results/models.py:314 +#: results/models.py msgid "margin" msgstr "" -#: results/models.py:239 results/models.py:272 results/models.py:316 -#: results/models.py:352 +#: results/models.py msgid "score" msgstr "স্কোর/ফলাফল" -#: results/models.py:244 +#: results/models.py msgid "team score by adjudicator" msgstr "" -#: results/models.py:245 +#: results/models.py msgid "team scores by adjudicator" msgstr "" -#: results/models.py:260 results/models.py:294 +#: results/models.py msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." msgstr "" -#: results/models.py:273 results/models.py:353 +#: results/models.py msgid "position" msgstr "অবস্থান" -#: results/models.py:279 +#: results/models.py msgid "speaker score by adjudicator" msgstr "" -#: results/models.py:280 +#: results/models.py msgid "speaker scores by adjudicator" msgstr "" -#: results/models.py:310 +#: results/models.py msgid "points" msgstr "" -#: results/models.py:318 +#: results/models.py msgid "votes given" msgstr "" -#: results/models.py:320 +#: results/models.py msgid "votes possible" msgstr "" -#: results/models.py:324 +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py msgid "team score" msgstr "" -#: results/models.py:325 +#: results/models.py msgid "team scores" msgstr "" -#: results/models.py:351 +#: results/models.py msgid "speaker" msgstr "বক্তা" -#: results/models.py:355 +#: results/models.py msgid "ghost" msgstr "" -#: results/models.py:356 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." msgstr "" -#: results/models.py:365 +#: results/models.py msgid "speaker score" msgstr "" -#: results/models.py:366 +#: results/models.py msgid "speaker scores" msgstr "" -#: results/models.py:375 +#: results/models.py msgid "The debate team and speaker must be from the same team." msgstr "" -#: results/models.py:378 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." msgstr "" -#: results/tables.py:15 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" msgstr "" -#: results/tables.py:36 +#: results/tables.py msgid "Status of this debate's ballot" msgstr "" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" msgstr "" -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" msgstr "" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" msgstr "" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" msgstr "" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" msgstr "" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the current round" msgstr "" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" msgstr "" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" msgstr "" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." msgstr "" -#: results/templates/admin_results.html:88 +#: results/templates/admin_results.html #, python-format msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." msgstr[0] "" msgstr[1] "" -#: results/templates/admin_results.html:94 +#: results/templates/admin_results.html #, python-format msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." msgstr "" -#: results/templates/admin_results.html:113 +#: results/templates/admin_results.html msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." msgstr "" -#: results/templates/admin_results.html:127 +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." msgstr "" -#: results/templates/admin_results.html:135 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." msgstr "" -#: results/templates/admin_results.html:144 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/admin_results.html:151 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:12 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" msgstr "" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:17 -#: results/templates/ballot_entry_base.html:21 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" msgstr "" -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." msgstr "" -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html msgid "Confirm results" msgstr "" -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" msgstr "" -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:68 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." msgstr "" -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 results/views.py:513 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" msgstr "" -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "" -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." msgstr "" -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "" -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." msgstr[0] "" msgstr[1] "" -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr[0] "" msgstr[1] "" -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:42 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:45 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" msgstr "" -#: results/templates/ballot/ballot_set.html:6 +#: results/templates/ballot/ballot_set.html msgid "There are some problems with this scoresheet. Please review and correct them." msgstr "" -#: results/templates/ballot/ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s (%(institution)s)" msgstr "" -#: results/templates/ballot/ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s" msgstr "" -#: results/templates/ballot/ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html msgid "Scoresheet" msgstr "" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Solo Chair" msgstr "" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Chair" msgstr "স্পিকার" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Panellist" msgstr "প্যানেলিস্ট" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Trainee" msgstr "নবিশ বিচারক" -#: results/templates/ballot/ballot_set.html:44 +#: results/templates/ballot/ballot_set.html msgid "Assign sides before entering scores" msgstr "" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." msgstr "" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "There is %(number)s existing ballot set for this debate." msgid_plural "There are %(number)s existing ballot sets for this debate." msgstr[0] "" msgstr[1] "" -#: results/templates/ballot/other_ballots_list.html:21 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." msgstr "" -#: results/templates/ballot/other_ballots_list.html:26 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." msgstr "" -#: results/templates/ballot/other_ballots_list.html:41 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:45 +#: results/templates/ballot/other_ballots_list.html msgid "MERGING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:48 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:53 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:58 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from %(adjudicator)s's private URL," msgstr "" -#: results/templates/ballot/other_ballots_list.html:62 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:68 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," msgstr "" -#: results/templates/ballot/other_ballots_list.html:73 +#: results/templates/ballot/other_ballots_list.html msgid "unknown" msgstr "" -#: results/templates/ballot/other_ballots_list.html:74 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "confirmed by %(confirmer)s" msgstr "" -#: results/templates/ballot/other_ballots_list.html:78 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" msgstr "" -#: results/templates/ballot/other_ballots_list.html:82 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" msgstr "" -#: results/templates/ballot/other_ballots_list.html:86 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" msgstr[0] "" msgstr[1] "" -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." msgstr "" -#: results/templates/ballot_entry_base.html:30 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr "" -#: results/templates/ballot_entry_base.html:41 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." msgstr "" -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" msgstr "" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" msgstr "" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" msgstr "" -#: results/templates/debate_postponement_form.html:3 +#: results/templates/debate_postponement_form.html msgid "Postponed" msgstr "" -#: results/templates/debate_postponement_form.html:8 +#: results/templates/debate_postponement_form.html msgid "Postpone" msgstr "" -#: results/templates/enter_results.html:15 +#: results/templates/enter_results.html msgid "Ballot Status" msgstr "" -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" msgstr "" -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" msgstr "" -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" msgstr "" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" msgstr "" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" msgstr "" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." msgstr "" -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" msgstr "" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." msgstr "" -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" msgstr "" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" msgstr "" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" msgstr "" -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." msgstr "" -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" msgstr "" -#: results/templates/public_ballot_set.html:28 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" msgstr "" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" msgstr "" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" msgstr "" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "প্রস্তাব" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" msgstr "" -#: results/templates/public_ballot_set.html:92 -#: results/templates/public_ballot_set.html:96 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:105 -#: results/templates/public_ballot_set.html:109 +#: results/templates/public_ballot_set.html #, python-format msgid "%(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Won" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Lost" msgstr "" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set_error.html #, python-format msgid "Back to the tournament home page." msgstr "" -#: results/templates/public_enter_results.html:9 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" msgstr "" -#: results/templates/public_enter_results.html:16 +#: results/templates/public_enter_results.html msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." msgstr "" -#: results/templates/public_enter_results.html:24 +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." msgstr[0] "" msgstr[1] "" -#: results/templates/public_enter_results.html:63 -msgid "Submit Ballot(s)" -msgstr "" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" +msgstr[1] "" -#: results/templates/public_enter_results.html:65 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" msgstr "" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" msgstr "" -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" msgstr "" -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" msgstr "" -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" msgstr "" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" msgstr "" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." msgstr "" -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." msgstr "" -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" msgstr "" -#: results/utils.py:19 +#: results/utils.py msgid "Debate was Postponed" msgstr "" -#: results/utils.py:20 +#: results/utils.py msgid "Ballot is Unconfirmed" msgstr "" -#: results/utils.py:21 +#: results/utils.py msgid "Ballot is Confirmed" msgstr "" #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:36 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" msgstr "" -#: results/utils.py:43 +#: results/utils.py #, python-format msgid "%(team)s (%(side)s) won" msgstr "" #. Translators: The team here is the losing team -#: results/utils.py:45 +#: results/utils.py #, python-format msgid "vs %(team)s (%(side)s)" msgstr "" -#: results/utils.py:47 +#: results/utils.py #, python-format msgid "Advancing: %(advancing_list)s
    " msgstr "" -#: results/utils.py:50 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" msgstr "" -#: results/utils.py:58 +#: results/utils.py #, python-format msgid "1st: %(first_team)s
    " msgstr "" -#: results/utils.py:59 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" "4th: %(fourth_team)s" msgstr "" -#: results/utils.py:74 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" msgstr "" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:134 +#: results/utils.py msgid "PM" msgstr "" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:136 +#: results/utils.py msgid "DPM" msgstr "" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:138 +#: results/utils.py msgid "LO" msgstr "" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:140 +#: results/utils.py msgid "DLO" msgstr "" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:142 +#: results/utils.py msgid "MG" msgstr "" #. Translators: Abbreviation for Government Whip -#: results/utils.py:144 +#: results/utils.py msgid "GW" msgstr "" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:146 +#: results/utils.py msgid "MO" msgstr "" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:148 +#: results/utils.py msgid "OW" msgstr "" -#: results/utils.py:168 +#: results/utils.py msgid "Reply" msgstr "যুক্তিখণ্ডন" -#: results/views.py:270 results/views.py:272 +#: results/views.py msgid " vs " msgstr "" -#: results/views.py:273 +#: results/views.py #, python-format msgid "%(matchup)s: %(round)s @ %(room)s" msgstr "" -#: results/views.py:275 +#: results/views.py msgid "N/A" msgstr "" -#: results/views.py:408 +#: results/views.py msgid "New Ballot Set" msgstr "" -#: results/views.py:411 +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." msgstr "" -#: results/views.py:413 results/views.py:480 +#: results/views.py msgid " Email receipts queued to be sent." msgstr "" -#: results/views.py:427 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." msgstr "" -#: results/views.py:433 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." msgstr "" -#: results/views.py:459 +#: results/views.py msgid "Edit Ballot Set" msgstr "" -#: results/views.py:473 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." msgstr "" -#: results/views.py:475 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." msgstr "" -#: results/views.py:477 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." msgstr "" -#: results/views.py:528 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." msgstr "" -#: results/views.py:535 +#: results/views.py msgid "The draw for this round hasn't been released yet." msgstr "" -#: results/views.py:539 +#: results/views.py msgid "The motions for this round haven't been released yet." msgstr "" -#: results/views.py:544 +#: results/views.py msgid "It looks like you don't have a debate this round." msgstr "" -#: results/views.py:546 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." msgstr "" -#: results/views.py:573 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:578 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:689 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." msgstr "" -#: results/views.py:707 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." msgstr "" -#: results/views.py:710 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." msgstr "" -#: results/views.py:714 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." msgstr "" -#: results/views.py:717 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." msgstr "" -#: results/views.py:739 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." msgstr "" -#: results/views.py:805 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" msgstr "" -#: results/views.py:809 +#: results/views.py msgid "Adjudicator" msgstr "বিচারক" -#: results/views.py:846 +#: results/views.py msgid "Merge Ballots" msgstr "" -#: results/views.py:877 +#: results/views.py msgid "The speaking order in the ballots is inconsistent, so could not be merged." msgstr "" -#: results/views.py:879 +#: results/views.py msgid "Duplicate speeches are marked inconsistently, so could not be merged." msgstr "" -#: results/views.py:880 +#: results/views.py #, python-format msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." msgstr "" diff --git a/tabbycat/standings/locale/bn/LC_MESSAGES/django.po b/tabbycat/standings/locale/bn/LC_MESSAGES/django.po index 7c6bb2f3180..2b8b6506568 100644 --- a/tabbycat/standings/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-29 23:49-0400\n" -"PO-Revision-Date: 2020-12-31 14:48\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:01\n" "Last-Translator: philip_tc\n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -18,604 +18,595 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 950\n" -#: standings/base.py:297 +#: standings/base.py msgid "The same metric would be added twice:" msgstr "" -#: standings/base.py:298 +#: standings/base.py msgid "The same ranking would be added twice:" msgstr "" -#: standings/base.py:414 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" msgstr "" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" msgstr "" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" msgstr "ব্রেকিং" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" msgstr "" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" msgstr "" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" msgstr "" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" msgstr "" -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" msgstr "" -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" msgstr "" -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" msgstr "" -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" msgstr "" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" msgstr "" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" msgstr "" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" msgstr "" -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" msgstr "" -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" msgstr "" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" msgstr "" -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" msgstr "" -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" msgstr "" -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" msgstr "" -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" msgstr "" -#: standings/speakers.py:50 standings/speakers.py:106 +#: standings/speakers.py msgid "total" msgstr "" -#: standings/speakers.py:51 standings/speakers.py:107 +#: standings/speakers.py msgid "Total" msgstr "" -#: standings/speakers.py:58 standings/speakers.py:116 +#: standings/speakers.py msgid "average" msgstr "" -#: standings/speakers.py:59 standings/speakers.py:117 +#: standings/speakers.py msgid "Avg" msgstr "" -#: standings/speakers.py:66 +#: standings/speakers.py msgid "team points" msgstr "" -#: standings/speakers.py:67 +#: standings/speakers.py msgid "Team" msgstr "দল" -#: standings/speakers.py:89 standings/speakers.py:126 +#: standings/speakers.py msgid "standard deviation" msgstr "" -#: standings/speakers.py:90 standings/speakers.py:127 +#: standings/speakers.py msgid "Stdev" msgstr "" -#: standings/speakers.py:98 +#: standings/speakers.py msgid "number of speeches given" msgstr "" -#: standings/speakers.py:99 standings/speakers.py:138 +#: standings/speakers.py msgid "Num" msgstr "" -#: standings/speakers.py:137 +#: standings/speakers.py msgid "replies given" msgstr "" -#: standings/speakers.py:147 +#: standings/speakers.py msgid "trimmed mean (high-low drop)" msgstr "" -#: standings/speakers.py:148 +#: standings/speakers.py msgid "Trim" msgstr "" -#: standings/teams.py:62 +#: standings/teams.py msgid "points" msgstr "" -#: standings/teams.py:63 +#: standings/teams.py msgid "Pts" msgstr "" -#: standings/teams.py:76 +#: standings/teams.py msgid "wins" msgstr "বিজয়" -#: standings/teams.py:77 standings/views.py:592 +#: standings/teams.py standings/views.py msgid "Wins" msgstr "বিজয়" -#: standings/teams.py:87 +#: standings/teams.py msgid "total speaker score" msgstr "মোট বক্তা সাফল্যাঙ্ক" -#: standings/teams.py:88 +#: standings/teams.py msgid "Spk" msgstr "বক্তা সাফল্যাঙ্ক" -#: standings/teams.py:97 +#: standings/teams.py msgid "average total speaker score" msgstr "" -#: standings/teams.py:98 +#: standings/teams.py msgid "ATSS" msgstr "" -#: standings/teams.py:107 +#: standings/teams.py msgid "speaker score standard deviation" msgstr "" -#: standings/teams.py:108 +#: standings/teams.py msgid "SSD" msgstr "" -#: standings/teams.py:118 +#: standings/teams.py msgid "sum of margins" msgstr "" -#: standings/teams.py:119 +#: standings/teams.py msgid "Marg" msgstr "" -#: standings/teams.py:128 +#: standings/teams.py msgid "average margin" msgstr "" -#: standings/teams.py:129 +#: standings/teams.py msgid "AWM" msgstr "" -#: standings/teams.py:138 +#: standings/teams.py msgid "average individual speaker score" msgstr "" -#: standings/teams.py:139 +#: standings/teams.py msgid "AISS" msgstr "" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by wins" msgstr "" -#: standings/teams.py:212 +#: standings/teams.py msgid "DS" msgstr "" -#: standings/teams.py:219 +#: standings/teams.py msgid "draw strength by total speaker score" msgstr "" -#: standings/teams.py:220 +#: standings/teams.py msgid "DSS" msgstr "" -#: standings/teams.py:231 +#: standings/teams.py msgid "number of pullups before this round" msgstr "" -#: standings/teams.py:232 +#: standings/teams.py msgid "PU" msgstr "" -#: standings/teams.py:254 +#: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "যতজন বিচারক এই দলের জন্য ভোট দিয়েছেন" -#: standings/teams.py:255 +#: standings/teams.py msgid "Ballots" msgstr "দলগত সাফল্যাঙ্ক" -#: standings/teams.py:256 +#: standings/teams.py msgid "votes/ballots carried" msgstr "" -#: standings/teams.py:280 +#: standings/teams.py msgid "number of firsts" msgstr "" -#: standings/teams.py:281 +#: standings/teams.py msgid "1sts" msgstr "" -#: standings/teams.py:290 +#: standings/teams.py msgid "number of seconds" msgstr "" -#: standings/teams.py:291 +#: standings/teams.py msgid "2nds" msgstr "" -#: standings/teams.py:300 +#: standings/teams.py msgid "number of thirds" msgstr "" -#: standings/teams.py:301 +#: standings/teams.py msgid "3rds" msgstr "" -#: standings/teams.py:313 +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py msgid "Who-beat-whom" msgstr "" -#: standings/teams.py:314 +#: standings/teams.py msgid "WBW" msgstr "" -#: standings/teams.py:315 +#: standings/teams.py msgid "who-beat-whom" msgstr "" -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." msgstr "" -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." msgstr "" -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." msgstr "" -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." msgstr "" -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." msgstr "" -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." msgstr "" -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." msgstr "" -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." msgstr "" -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." msgstr "" -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." msgstr "" -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" msgstr "" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." msgstr "" -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" msgstr "" -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" msgstr "" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" msgstr "" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" msgstr "" -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" msgstr "" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:152 -#: standings/templates/standings_index.html:167 -#: standings/templates/standings_index.html:186 +#: standings/templates/standings_index.html msgid "No data yet" msgstr "" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" msgstr "" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" msgstr "" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" msgstr "" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" msgstr "" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" msgstr "" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" msgstr "" -#: standings/templates/standings_index.html:177 +#: standings/templates/standings_index.html msgid "Average Speaks" msgstr "" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" msgstr "" -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "দলসমূহ" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" msgstr "" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" msgstr "" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" msgstr "" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" msgstr "" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "" -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" msgstr "" -#: standings/templates/standings_menu.html:63 -#: standings/templates/standings_menu.html:76 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "প্রস্তাবসমূহ" -#: standings/templates/standings_menu.html:66 +#: standings/templates/standings_menu.html msgid "By Round" msgstr "" -#: standings/templates/standings_menu.html:81 +#: standings/templates/standings_menu.html msgid "Diversity" msgstr "" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." msgstr "" -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " msgstr "" -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " msgstr "" -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " msgstr "" -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" msgstr "" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" msgstr "" -#: standings/views.py:208 standings/views.py:428 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." msgstr "" -#: standings/views.py:290 +#: standings/views.py msgid "Speaker Standings" msgstr "" -#: standings/views.py:326 +#: standings/views.py msgid "Speaker Tab" msgstr "বক্তাসমূহ" -#: standings/views.py:341 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" msgstr "" -#: standings/views.py:359 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" msgstr "" -#: standings/views.py:372 +#: standings/views.py msgid "Reply Speaker Standings" msgstr "" -#: standings/views.py:380 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." msgstr "" -#: standings/views.py:408 +#: standings/views.py msgid "Reply Speaker Tab" msgstr "" -#: standings/views.py:420 standings/views.py:669 +#: standings/views.py msgid "Team Standings" msgstr "দলের প্রতিযোগিতামূলক অবস্থান" -#: standings/views.py:499 +#: standings/views.py msgid "Team Tab" msgstr "দলসমূহ" -#: standings/views.py:518 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" msgstr "দলের প্রতিযোগিতামূলক অবস্থান %(category)s" -#: standings/views.py:545 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" msgstr "" -#: standings/views.py:556 +#: standings/views.py msgid "Current Team Standings" msgstr "" -#: standings/views.py:592 +#: standings/views.py msgid "Points" msgstr "" -#: standings/views.py:638 +#: standings/views.py msgid "Feedback Overview" msgstr "" -#: standings/views.py:655 -msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." msgstr "" diff --git a/tabbycat/tournaments/locale/bn/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/bn/LC_MESSAGES/django.po index e9fdb8fcf20..ffa897436a7 100644 --- a/tabbycat/tournaments/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -18,1026 +18,1016 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "" -#: tournaments/forms.py:29 +#: tournaments/forms.py msgid "Number of preliminary rounds" msgstr "" -#: tournaments/forms.py:34 +#: tournaments/forms.py msgid "Number of teams in the open break" msgstr "" -#: tournaments/forms.py:35 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." msgstr "" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Did you agree with their decision?" msgstr "" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Agree?" msgstr "" -#: tournaments/forms.py:47 +#: tournaments/forms.py msgid "Comments" msgstr "" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:61 +#: tournaments/forms.py msgid "Open" msgstr "" -#: tournaments/forms.py:86 +#: tournaments/forms.py msgid "Format Configuration" msgstr "" -#: tournaments/forms.py:87 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" msgstr "" -#: tournaments/forms.py:91 +#: tournaments/forms.py msgid "Public Configuration" msgstr "" -#: tournaments/forms.py:92 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" msgstr "" -#: tournaments/forms.py:99 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" msgstr "" -#: tournaments/forms.py:195 +#: tournaments/forms.py msgid "Current preliminary round" msgstr "" -#: tournaments/forms.py:196 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" msgstr "" -#: tournaments/forms.py:208 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" msgstr "" -#: tournaments/forms.py:214 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" msgstr "" -#: tournaments/forms.py:226 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." msgstr "" -#: tournaments/forms.py:232 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." msgstr "" -#: tournaments/forms.py:267 +#: tournaments/forms.py #, python-format msgid "%(name)s (%(abbreviation)s)" msgstr "" -#: tournaments/mixins.py:109 +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." msgstr "" -#: tournaments/mixins.py:117 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." msgstr "" -#: tournaments/mixins.py:130 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." msgstr "" -#: tournaments/mixins.py:137 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." msgstr "" -#: tournaments/mixins.py:236 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" msgstr "" -#: tournaments/mixins.py:437 +#: tournaments/mixins.py msgid "Return to Draw" msgstr "" -#: tournaments/models.py:26 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." msgstr "" -#: tournaments/models.py:33 tournaments/models.py:320 +#: tournaments/models.py msgid "name" msgstr "নাম" -#: tournaments/models.py:34 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" msgstr "" -#: tournaments/models.py:36 +#: tournaments/models.py msgid "short name" msgstr "" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" msgstr "" -#: tournaments/models.py:39 tournaments/models.py:314 +#: tournaments/models.py msgid "sequence number" msgstr "ক্রম সংখ্যা" -#: tournaments/models.py:40 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." msgstr "" -#: tournaments/models.py:42 +#: tournaments/models.py msgid "slug" msgstr "" -#: tournaments/models.py:43 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" msgstr "" -#: tournaments/models.py:44 +#: tournaments/models.py msgid "active" msgstr "" -#: tournaments/models.py:47 tournaments/models.py:313 +#: tournaments/models.py msgid "tournament" msgstr "প্রতিযোগিতা" -#: tournaments/models.py:48 +#: tournaments/models.py msgid "tournaments" msgstr "" -#: tournaments/models.py:285 +#: tournaments/models.py msgid "Random" msgstr "" -#: tournaments/models.py:286 +#: tournaments/models.py msgid "Manual" msgstr "" -#: tournaments/models.py:287 +#: tournaments/models.py msgid "Round-robin" msgstr "" -#: tournaments/models.py:288 +#: tournaments/models.py msgid "Power-paired" msgstr "" -#: tournaments/models.py:289 tournaments/models.py:296 +#: tournaments/models.py msgid "Elimination" msgstr "" -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Preliminary" msgstr "" -#: tournaments/models.py:305 +#: tournaments/models.py msgid "None" msgstr "" -#: tournaments/models.py:306 +#: tournaments/models.py msgid "Draft" msgstr "" -#: tournaments/models.py:307 +#: tournaments/models.py msgid "Confirmed" msgstr "" -#: tournaments/models.py:308 +#: tournaments/models.py msgid "Released" msgstr "" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" msgstr "" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "completed" msgstr "" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" msgstr "" -#: tournaments/models.py:320 +#: tournaments/models.py msgid "e.g. \"Round 1\"" msgstr "" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "abbreviation" msgstr "" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "e.g. \"R1\"" msgstr "" -#: tournaments/models.py:323 +#: tournaments/models.py msgid "stage" msgstr "" -#: tournaments/models.py:324 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" msgstr "" -#: tournaments/models.py:326 +#: tournaments/models.py msgid "draw type" msgstr "" -#: tournaments/models.py:327 +#: tournaments/models.py msgid "Which draw method to use" msgstr "" -#: tournaments/models.py:330 +#: tournaments/models.py msgid "break category" msgstr "" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "If elimination round, which break category" msgstr "" -#: tournaments/models.py:334 +#: tournaments/models.py msgid "draw status" msgstr "" -#: tournaments/models.py:335 +#: tournaments/models.py msgid "The status of this round's draw" msgstr "" -#: tournaments/models.py:338 +#: tournaments/models.py msgid "feedback weight" msgstr "" -#: tournaments/models.py:340 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." msgstr "" #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:343 +#: tournaments/models.py msgid "silent" msgstr "" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." msgstr "" -#: tournaments/models.py:346 +#: tournaments/models.py msgid "motions released" msgstr "" -#: tournaments/models.py:347 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" msgstr "" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "starts at" msgstr "" -#: tournaments/models.py:351 +#: tournaments/models.py msgid "weight" msgstr "" -#: tournaments/models.py:352 +#: tournaments/models.py msgid "A factor for the points received in the round. For example, if 2, all points are doubled." msgstr "" -#: tournaments/models.py:355 +#: tournaments/models.py msgid "round" msgstr "পর্ব" -#: tournaments/models.py:356 +#: tournaments/models.py msgid "rounds" msgstr "" -#: tournaments/models.py:369 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:372 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:377 +#: tournaments/models.py msgid "Elimination rounds must have a break category." msgstr "" -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" msgstr "" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" msgstr "" -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" msgstr "" -#: tournaments/templates/blank_site_start.html:7 -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" msgstr "" -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." msgstr "" -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." msgstr "" -#: tournaments/templates/blank_site_start.html:32 +#: tournaments/templates/blank_site_start.html msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." msgstr "" -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" msgstr "" -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" msgstr "" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." msgstr "" -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." msgstr "" -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" msgstr "" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." msgstr "" -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" msgstr "" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." msgstr "" -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" msgstr "" -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" msgstr "" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." msgstr "" -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." msgstr "" -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." msgstr "" -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." msgstr "" -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" msgstr "" -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" +msgid "Teams on %(side)s" msgstr "" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" msgstr "" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." msgstr "" -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" msgstr "%(tournament)s এ স্বাগতম" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." msgstr "" -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" msgstr "দলসমূহ" -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" msgstr "%(category)s দলসমূহ" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" msgstr "বক্তাসমূহ" -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" msgstr "%(category)s বক্তাসমূহ" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" msgstr "যুক্তি খন্ডন ট্যাব" -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" msgstr "বিচারকমণ্ডলী" -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" msgstr "প্রস্তাব ট্যাব" -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" msgstr "পক্ষ" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:203 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" msgstr "" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" msgstr "আগমন" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" msgstr "ফলাফল" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "প্রস্তাবসমূহ" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" msgstr "দলের প্রতিযোগিতামূলক অবস্থান" -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" msgstr "উন্নীতকরণ %(category)s" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" msgstr "উন্নিত বিচারকমণ্ডলী" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" msgstr "" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" msgstr "অংশগ্রহণকারী" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" msgstr "" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" msgstr "" -#: tournaments/templates/public_tournament_index.html:188 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Enter Ballot for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:195 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" msgstr "" -#: tournaments/templates/public_tournament_index.html:217 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" msgstr "কর্মকর্তা পরিষদ" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" msgstr "" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" msgstr "" -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." msgstr "" -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" msgstr "" -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" msgstr "" -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" msgstr "" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" msgstr "" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" msgstr "" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" msgstr "" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." msgstr[0] "" msgstr[1] "" -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" msgstr "" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." msgstr[0] "" msgstr[1] "" -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " msgstr "" -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "" -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" msgstr "" -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" msgstr "" -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "" -#: tournaments/templates/set_round_weights.html:4 -#: tournaments/templates/set_round_weights.html:5 +#: tournaments/templates/set_round_weights.html msgctxt "page title" -msgid "Set Round Weights" +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: tournaments/templates/set_round_weights.html:8 +#: tournaments/templates/set_round_weights.html msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." msgstr "" -#: tournaments/templates/set_round_weights.html:41 +#: tournaments/templates/set_round_weights.html msgctxt "button" msgid "Set weights" msgstr "" -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:47 -msgid "Inactive Tournaments" -msgstr "" - -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/site_index.html msgid "Welcome!" msgstr "স্বাগতম!" -#: tournaments/templates/site_index.html:21 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" msgstr "" -#: tournaments/templates/site_index.html:30 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:34 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:55 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html msgid "New Tournament" msgstr "" -#: tournaments/templates/site_index.html:58 +#: tournaments/templates/site_index.html msgid "Edit Database Area" msgstr "" -#: tournaments/templates/site_index.html:61 +#: tournaments/templates/site_index.html msgid "Send a Test Email" msgstr "" -#: tournaments/templates/site_index.html:64 +#: tournaments/templates/site_index.html msgid "Import DebateXML" msgstr "" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Get API Token / Change Password (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:77 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:83 +#: tournaments/templates/site_index.html msgid "Log In as Admin" msgstr "পরিচালক হিসেবে লুগ ইন করুন" -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." msgstr "" -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" msgstr "" -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." msgstr "" #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." msgstr "" -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." msgstr "" -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" +msgid "Mark participants as available to prepare a draw for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" +msgid "Go to the results area to enter ballots for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:74 +#: tournaments/templates/tournament_index.html msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." msgstr "" -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" msgstr "" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" msgstr "পক্ষ" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" msgstr "বিপক্ষ" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" msgstr "" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" msgstr "" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" msgstr "পক্ষ" -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" msgstr "বিপক্ষ" -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" msgstr "" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" msgstr "" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" msgstr "" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" msgstr "" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" msgstr "" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" msgstr "" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" msgstr "" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" msgstr "" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" msgstr "" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" msgstr "" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" msgstr "" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" msgstr "" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" msgstr "" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" msgstr "" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" msgstr "" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" msgstr "" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" msgstr "" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" msgstr "" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" msgstr "" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" msgstr "" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" msgstr "" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" msgstr "" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" msgstr "" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" msgstr "" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" msgstr "" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" msgstr "" -#: tournaments/views.py:151 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" msgstr "" -#: tournaments/views.py:157 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." msgstr "" -#: tournaments/views.py:170 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." msgstr "" -#: tournaments/views.py:176 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." msgstr "" -#: tournaments/views.py:184 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" msgstr "" -#: tournaments/views.py:201 +#: tournaments/views.py msgid "8-team generic dataset" msgstr "" -#: tournaments/views.py:202 +#: tournaments/views.py msgid "24-team Australs dataset" msgstr "" -#: tournaments/views.py:203 +#: tournaments/views.py msgid "88-team BP dataset" msgstr "" -#: tournaments/views.py:288 -msgid "Successfully set round weights." +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." msgstr "" diff --git a/tabbycat/utils/locale/bn/LC_MESSAGES/django.po b/tabbycat/utils/locale/bn/LC_MESSAGES/django.po index dbd4f6ce207..87d9a27c321 100644 --- a/tabbycat/utils/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:48\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -18,304 +18,311 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "Email address" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "পর্ব" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "দল" + +#: utils/admin.py +msgid "Speaker" +msgstr "বক্তা" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "প্রতিযোগিতা" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "পক্ষ" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "প্রস্তাব" + +#: utils/admin.py +msgid "Confirmed" msgstr "" -#: utils/tables.py:47 +#: utils/admin.py +msgid "Adjudicator" +msgstr "বিচারক" + +#: utils/tables.py msgid "No Data Available" msgstr "" -#: utils/tables.py:155 utils/tables.py:156 +#: utils/tables.py msgid "Ⓒ" msgstr "" -#: utils/tables.py:157 +#: utils/tables.py msgid "Ⓣ" msgstr "" -#: utils/tables.py:161 +#: utils/tables.py msgid "chair" msgstr "স্পিকার" -#: utils/tables.py:162 +#: utils/tables.py msgid "panellist" msgstr "প্যানেলিস্ট" -#: utils/tables.py:163 +#: utils/tables.py msgid "trainee" msgstr "নবিশ বিচারক" -#: utils/tables.py:166 +#: utils/tables.py msgid "—" msgstr "" -#: utils/tables.py:167 +#: utils/tables.py msgid "Redacted" msgstr "" -#: utils/tables.py:231 utils/tables.py:237 +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" msgstr "" -#: utils/tables.py:247 utils/tables.py:252 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" msgstr "%(team)s এর নথি দেখুন" -#: utils/tables.py:274 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" msgstr "" -#: utils/tables.py:276 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" msgstr "" -#: utils/tables.py:296 +#: utils/tables.py #, python-format msgid "%(team)s won" msgstr "" -#: utils/tables.py:301 +#: utils/tables.py #, python-format msgid "%(team)s lost" msgstr "" -#: utils/tables.py:306 utils/tables.py:318 utils/tables.py:342 +#: utils/tables.py #, python-format msgid "%(team)s—no result" msgstr "" -#: utils/tables.py:323 +#: utils/tables.py #, python-format msgid "%(team)s placed %(place)s" msgstr "" -#: utils/tables.py:332 +#: utils/tables.py #, python-format msgid "%(team)s is advancing" msgstr "" -#: utils/tables.py:337 +#: utils/tables.py #, python-format msgid "%(team)s was eliminated" msgstr "" -#: utils/tables.py:350 +#: utils/tables.py msgid "View/edit debate ballot" msgstr "" -#: utils/tables.py:356 +#: utils/tables.py msgid "View debate ballot" msgstr "" -#: utils/tables.py:369 +#: utils/tables.py #, python-format msgid " vs %(opposition)s" msgstr " বনাম %(opposition)s" -#: utils/tables.py:376 +#: utils/tables.py #, python-format msgid "Won against %(team)s" msgstr "%(team)s এর বিপক্ষে জিতেছে" -#: utils/tables.py:378 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" msgstr "%(team)s এর কাছে বিজিত" -#: utils/tables.py:380 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" msgstr "" -#: utils/tables.py:405 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" msgstr "মোট বক্তা সাফল্যাঙ্কঃ %s" -#: utils/tables.py:412 +#: utils/tables.py msgid "Teams in debate:" msgstr "" -#: utils/tables.py:415 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "" -#: utils/tables.py:416 utils/tables.py:420 utils/tables.py:446 -#: utils/tables.py:618 +#: utils/tables.py msgid "??" msgstr "" -#: utils/tables.py:434 +#: utils/tables.py msgid "advancing" msgstr "" -#: utils/tables.py:435 +#: utils/tables.py msgid "Advancing" msgstr "" -#: utils/tables.py:437 +#: utils/tables.py msgid "eliminated" msgstr "" -#: utils/tables.py:438 +#: utils/tables.py msgid "Eliminated" msgstr "" -#: utils/tables.py:441 utils/tables.py:451 +#: utils/tables.py msgid "No result for debate" msgstr "" -#: utils/tables.py:448 +#: utils/tables.py #, python-format msgid "Placed %(place)s" msgstr "" -#: utils/tables.py:463 -msgid "Tournament" -msgstr "প্রতিযোগিতা" - -#: utils/tables.py:472 -msgid "Round" -msgstr "পর্ব" - -#: utils/tables.py:495 utils/tables.py:672 +#: utils/tables.py msgid "Name" msgstr "" -#: utils/tables.py:501 utils/tables.py:650 +#: utils/tables.py msgid "Institution" msgstr "প্রতিষ্ঠান" -#: utils/tables.py:507 +#: utils/tables.py msgid "Member of the Adjudication Core" msgstr "" -#: utils/tables.py:514 +#: utils/tables.py msgid "Independent Adjudicator" msgstr "" -#: utils/tables.py:522 +#: utils/tables.py msgid "Always Trainee" msgstr "" -#: utils/tables.py:557 +#: utils/tables.py msgid "in minority" msgstr "" -#: utils/tables.py:590 +#: utils/tables.py msgid "Debate Adjudicators" msgstr "" -#: utils/tables.py:621 -msgid "Motion" -msgstr "প্রস্তাব" - -#: utils/tables.py:636 -msgid "Team" -msgstr "দল" - -#: utils/tables.py:641 utils/tables.py:694 +#: utils/tables.py msgid "Categories" msgstr "বিভাগসমূহ" -#: utils/tables.py:692 +#: utils/tables.py msgid "Category" msgstr "" -#: utils/tables.py:719 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." msgstr "" -#: utils/tables.py:721 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." msgstr "" -#: utils/tables.py:736 +#: utils/tables.py msgid "Room" msgstr "" -#: utils/tables.py:754 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" msgstr[0] "" msgstr[1] "" -#: utils/tables.py:760 +#: utils/tables.py msgid "Teams are from the same institution" msgstr "" -#: utils/tables.py:766 +#: utils/tables.py msgid "Conflicts/Flags" msgstr "" -#: utils/tables.py:819 +#: utils/tables.py msgid "The confirmed ballot" msgstr "" -#: utils/tables.py:824 utils/tables.py:849 +#: utils/tables.py msgid "No ballot" msgstr "" -#: utils/tables.py:826 utils/tables.py:851 +#: utils/tables.py msgid "No scores" msgstr "" -#: utils/tables.py:829 utils/tables.py:854 utils/tables.py:866 +#: utils/tables.py msgid "View Ballot" msgstr "" -#: utils/tables.py:836 +#: utils/tables.py msgid "The ballot you submitted" msgstr "" -#: utils/tables.py:840 +#: utils/tables.py msgid "View/Edit Ballot" msgstr "" -#: utils/tables.py:874 +#: utils/tables.py msgid "Result" msgstr "" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:880 +#: utils/tables.py msgid "TBC" msgstr "" -#: utils/tables.py:881 -msgid "Side" -msgstr "পক্ষ" - -#: utils/tables.py:919 -msgid "Team iron-manned this round and the last." +#: utils/tables.py +msgid "Team iron-personed this round and the last." msgstr "" -#: utils/tables.py:922 -msgid "Team iron-manned this round." +#: utils/tables.py +msgid "Team iron-personed this round." msgstr "" -#: utils/tables.py:925 -msgid "Team iron-manned last round." +#: utils/tables.py +msgid "Team iron-personed last round." msgstr "" -#: utils/tables.py:942 utils/tables.py:943 +#: utils/tables.py #, python-format msgid "Team %(num)d" msgstr "" -#: utils/tables.py:950 +#: utils/tables.py msgid "Postpone" msgstr "" -#: utils/views.py:38 +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." msgstr "" diff --git a/tabbycat/venues/locale/bn/LC_MESSAGES/django.po b/tabbycat/venues/locale/bn/LC_MESSAGES/django.po index 43d66940c7f..af2618c2a5d 100644 --- a/tabbycat/venues/locale/bn/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/bn/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-05 15:26-0300\n" -"PO-Revision-Date: 2020-07-10 07:04\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" "Last-Translator: philip_tc\n" "Language-Team: Bengali\n" "Language: bn_BD\n" @@ -18,204 +18,202 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 +#: venues/apps.py msgid "Rooms" msgstr "" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." msgstr "" -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." msgstr "" -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." msgstr "" -#: venues/models.py:9 venues/models.py:66 +#: venues/models.py msgid "name" msgstr "নাম" -#: venues/models.py:11 venues/models.py:120 +#: venues/models.py msgid "priority" msgstr "" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" msgstr "" -#: venues/models.py:15 venues/models.py:78 +#: venues/models.py msgid "tournament" msgstr "প্রতিযোগিতা" -#: venues/models.py:16 +#: venues/models.py msgid "URL" msgstr "" -#: venues/models.py:17 +#: venues/models.py msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" msgstr "" -#: venues/models.py:24 +#: venues/models.py msgid "room" msgstr "" -#: venues/models.py:25 venues/models.py:76 +#: venues/models.py msgid "rooms" msgstr "" -#: venues/models.py:61 +#: venues/models.py msgid "Don't display in room name" msgstr "" -#: venues/models.py:62 +#: venues/models.py msgid "Display as prefix" msgstr "" -#: venues/models.py:63 +#: venues/models.py msgid "Display as suffix" msgstr "" -#: venues/models.py:67 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." msgstr "" -#: venues/models.py:71 +#: venues/models.py msgid "description" msgstr "" -#: venues/models.py:72 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." msgstr "" -#: venues/models.py:82 +#: venues/models.py msgid "display in room name" msgstr "" -#: venues/models.py:83 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" msgstr "" -#: venues/models.py:85 +#: venues/models.py msgid "display in public tooltip" msgstr "" -#: venues/models.py:86 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." msgstr "" -#: venues/models.py:90 +#: venues/models.py msgid "room category" msgstr "" -#: venues/models.py:91 +#: venues/models.py msgid "room categories" msgstr "" -#: venues/models.py:119 +#: venues/models.py msgid "category" msgstr "" -#: venues/models.py:123 +#: venues/models.py msgid "subject content type" msgstr "" -#: venues/models.py:126 +#: venues/models.py msgid "subject ID" msgstr "" -#: venues/models.py:132 +#: venues/models.py msgid "room constraint" msgstr "" -#: venues/models.py:133 +#: venues/models.py msgid "room constraints" msgstr "" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" msgstr "" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." msgstr "" -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." msgstr "" -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" msgstr "" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" msgstr "" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." msgstr "" -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" msgstr "" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" msgstr "" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" msgstr "" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" msgstr "" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" msgstr "" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" msgstr "" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" msgstr[0] "" msgstr[1] "" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." msgstr "" -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" msgstr "" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" msgstr "" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." From 863424e0d502a7516c37b0cb0f54b3c13673513b Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Sun, 31 Jan 2021 21:14:38 +1100 Subject: [PATCH 204/255] New translations django.po (Bulgarian) --- docs/locale/bg/LC_MESSAGES/about/authors.po | 72 + docs/locale/bg/LC_MESSAGES/about/changelog.po | 1922 +++++++++++++++++ .../bg/LC_MESSAGES/about/contributing.po | 352 +++ docs/locale/bg/LC_MESSAGES/about/licence.po | 80 + docs/locale/bg/LC_MESSAGES/about/support.po | 56 + .../LC_MESSAGES/about/tournament-history.po | 248 +++ .../features/adjudicator-allocation.po | 160 ++ .../features/adjudicator-feedback.po | 258 +++ .../locale/bg/LC_MESSAGES/features/backups.po | 120 + docs/locale/bg/LC_MESSAGES/features/breaks.po | 212 ++ .../bg/LC_MESSAGES/features/check-ins.po | 136 ++ .../bg/LC_MESSAGES/features/data-entry.po | 168 ++ .../bg/LC_MESSAGES/features/data-importers.po | 272 +++ .../features/draw-generation-bp.po | 598 +++++ .../LC_MESSAGES/features/draw-generation.po | 436 ++++ .../bg/LC_MESSAGES/features/notifications.po | 257 +++ .../LC_MESSAGES/features/preformed-panels.po | 176 ++ .../bg/LC_MESSAGES/features/printing.po | 68 + .../LC_MESSAGES/features/standings-rules.po | 272 +++ .../LC_MESSAGES/features/team-code-names.po | 104 + .../bg/LC_MESSAGES/features/user-accounts.po | 196 ++ .../LC_MESSAGES/features/venue-constraints.po | 168 ++ .../bg/LC_MESSAGES/guide/comparisons.po | 338 +++ docs/locale/bg/LC_MESSAGES/guide/scaling.po | 252 +++ .../LC_MESSAGES/guide/tournament-logistics.po | 1394 ++++++++++++ docs/locale/bg/LC_MESSAGES/guide/upgrading.po | 60 + docs/locale/bg/LC_MESSAGES/index.po | 48 + docs/locale/bg/LC_MESSAGES/install/docker.po | 173 ++ docs/locale/bg/LC_MESSAGES/install/heroku.po | 445 ++++ docs/locale/bg/LC_MESSAGES/install/linux.po | 249 +++ docs/locale/bg/LC_MESSAGES/install/local.po | 156 ++ docs/locale/bg/LC_MESSAGES/install/osx.po | 216 ++ docs/locale/bg/LC_MESSAGES/install/windows.po | 317 +++ docs/locale/bg/LC_MESSAGES/install/wsl.po | 100 + .../LC_MESSAGES/use/finishing-a-tournament.po | 80 + .../bg/LC_MESSAGES/use/importing-data.po | 236 ++ .../LC_MESSAGES/use/running-a-tournament.po | 196 ++ .../LC_MESSAGES/use/starting-a-tournament.po | 196 ++ .../actionlog/locale/bg/LC_MESSAGES/django.po | 323 +++ .../locale/bg/LC_MESSAGES/django.po | 451 ++++ .../locale/bg/LC_MESSAGES/django.po | 966 +++++++++ .../locale/bg/LC_MESSAGES/django.po | 392 ++++ .../breakqual/locale/bg/LC_MESSAGES/django.po | 525 +++++ tabbycat/draw/locale/bg/LC_MESSAGES/django.po | 1119 ++++++++++ .../importer/locale/bg/LC_MESSAGES/django.po | 421 ++++ tabbycat/locale/bg/LC_MESSAGES/django.po | 957 ++++++++ tabbycat/locale/bg/LC_MESSAGES/djangojs.po | 554 +++++ .../motions/locale/bg/LC_MESSAGES/django.po | 399 ++++ .../locale/bg/LC_MESSAGES/django.po | 416 ++++ .../options/locale/bg/LC_MESSAGES/django.po | 1618 ++++++++++++++ .../locale/bg/LC_MESSAGES/django.po | 964 +++++++++ .../printing/locale/bg/LC_MESSAGES/django.po | 125 ++ .../locale/bg/LC_MESSAGES/django.po | 179 ++ .../results/locale/bg/LC_MESSAGES/django.po | 1093 ++++++++++ .../standings/locale/bg/LC_MESSAGES/django.po | 612 ++++++ .../locale/bg/LC_MESSAGES/django.po | 1033 +++++++++ .../utils/locale/bg/LC_MESSAGES/django.po | 328 +++ .../venues/locale/bg/LC_MESSAGES/django.po | 222 ++ 58 files changed, 23484 insertions(+) create mode 100644 docs/locale/bg/LC_MESSAGES/about/authors.po create mode 100644 docs/locale/bg/LC_MESSAGES/about/changelog.po create mode 100644 docs/locale/bg/LC_MESSAGES/about/contributing.po create mode 100644 docs/locale/bg/LC_MESSAGES/about/licence.po create mode 100644 docs/locale/bg/LC_MESSAGES/about/support.po create mode 100644 docs/locale/bg/LC_MESSAGES/about/tournament-history.po create mode 100644 docs/locale/bg/LC_MESSAGES/features/adjudicator-allocation.po create mode 100644 docs/locale/bg/LC_MESSAGES/features/adjudicator-feedback.po create mode 100644 docs/locale/bg/LC_MESSAGES/features/backups.po create mode 100644 docs/locale/bg/LC_MESSAGES/features/breaks.po create mode 100644 docs/locale/bg/LC_MESSAGES/features/check-ins.po create mode 100644 docs/locale/bg/LC_MESSAGES/features/data-entry.po create mode 100644 docs/locale/bg/LC_MESSAGES/features/data-importers.po create mode 100644 docs/locale/bg/LC_MESSAGES/features/draw-generation-bp.po create mode 100644 docs/locale/bg/LC_MESSAGES/features/draw-generation.po create mode 100644 docs/locale/bg/LC_MESSAGES/features/notifications.po create mode 100644 docs/locale/bg/LC_MESSAGES/features/preformed-panels.po create mode 100644 docs/locale/bg/LC_MESSAGES/features/printing.po create mode 100644 docs/locale/bg/LC_MESSAGES/features/standings-rules.po create mode 100644 docs/locale/bg/LC_MESSAGES/features/team-code-names.po create mode 100644 docs/locale/bg/LC_MESSAGES/features/user-accounts.po create mode 100644 docs/locale/bg/LC_MESSAGES/features/venue-constraints.po create mode 100644 docs/locale/bg/LC_MESSAGES/guide/comparisons.po create mode 100644 docs/locale/bg/LC_MESSAGES/guide/scaling.po create mode 100644 docs/locale/bg/LC_MESSAGES/guide/tournament-logistics.po create mode 100644 docs/locale/bg/LC_MESSAGES/guide/upgrading.po create mode 100644 docs/locale/bg/LC_MESSAGES/index.po create mode 100644 docs/locale/bg/LC_MESSAGES/install/docker.po create mode 100644 docs/locale/bg/LC_MESSAGES/install/heroku.po create mode 100644 docs/locale/bg/LC_MESSAGES/install/linux.po create mode 100644 docs/locale/bg/LC_MESSAGES/install/local.po create mode 100644 docs/locale/bg/LC_MESSAGES/install/osx.po create mode 100644 docs/locale/bg/LC_MESSAGES/install/windows.po create mode 100644 docs/locale/bg/LC_MESSAGES/install/wsl.po create mode 100644 docs/locale/bg/LC_MESSAGES/use/finishing-a-tournament.po create mode 100644 docs/locale/bg/LC_MESSAGES/use/importing-data.po create mode 100644 docs/locale/bg/LC_MESSAGES/use/running-a-tournament.po create mode 100644 docs/locale/bg/LC_MESSAGES/use/starting-a-tournament.po create mode 100644 tabbycat/actionlog/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/adjallocation/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/adjfeedback/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/availability/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/breakqual/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/draw/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/importer/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/locale/bg/LC_MESSAGES/djangojs.po create mode 100644 tabbycat/motions/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/notifications/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/options/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/participants/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/printing/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/privateurls/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/results/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/standings/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/tournaments/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/utils/locale/bg/LC_MESSAGES/django.po create mode 100644 tabbycat/venues/locale/bg/LC_MESSAGES/django.po diff --git a/docs/locale/bg/LC_MESSAGES/about/authors.po b/docs/locale/bg/LC_MESSAGES/about/authors.po new file mode 100644 index 00000000000..c0426b9ca95 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/about/authors.po @@ -0,0 +1,72 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:16\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/authors.po\n" +"X-Crowdin-File-ID: 1259\n" +"Language: bg_BG\n" + +#: ../../../AUTHORS.rst:3 +msgid "Authors & Acknowledgements" +msgstr "" + +#: ../../../AUTHORS.rst:6 +msgid "Authors" +msgstr "" + +#: ../../../AUTHORS.rst:8 +msgid "Tabbycat was authored by Qi-Shan Lim for Auckland Australs 2010. The current active maintainers are:" +msgstr "" + +#: ../../../AUTHORS.rst:10 +msgid "Philip Belesky (`pb-e-mail `_)" +msgstr "" + +#: ../../../AUTHORS.rst:11 +msgid "Chuan-Zheng Lee (`cz-e-mail `_)" +msgstr "" + +#: ../../../AUTHORS.rst:13 +msgid "Please don't hesitate to contact us with any suggestions, expressions of interest or generally anything relating to Tabbycat." +msgstr "" + +#: ../../../AUTHORS.rst:16 +msgid "Contributors" +msgstr "" + +#: ../../../AUTHORS.rst:18 +msgid "Étienne Beaulé has contributed many features, fixes, and suggestions across many aspects of Tabbycat." +msgstr "" + +#: ../../../AUTHORS.rst:19 +msgid "Thevesh Theva contributed the algorithm for calculating the liveness of teams within a particular break category." +msgstr "" + +#: ../../../AUTHORS.rst:20 +msgid "Viran Weerasekera contributed the statistical tests used to estimate the degree to which a motion's results and vetoes are balanced." +msgstr "" + +#: ../../../AUTHORS.rst:21 +msgid "Viran Weerasekera, Valerie Tierney, Molly Dale, Madeline Schultz, and Vail Bromberger contributed to the \"Tournament Logistics\" section of our documentation." +msgstr "" + +#: ../../../AUTHORS.rst:24 +msgid "Sponsors" +msgstr "" + +#: ../../../AUTHORS.rst:26 +msgid "Thanks to the Western Australian Debating League for sponsoring various features related to organising division-based tournaments and round-robin based draw methods." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/about/changelog.po b/docs/locale/bg/LC_MESSAGES/about/changelog.po new file mode 100644 index 00000000000..8b41da64259 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/about/changelog.po @@ -0,0 +1,1922 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:16\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/changelog.po\n" +"X-Crowdin-File-ID: 1261\n" +"Language: bg_BG\n" + +#: ../../../CHANGELOG.rst:3 +msgid "Change Log" +msgstr "" + +#: ../../../CHANGELOG.rst:6 +msgid "2.4.0 (Maine)" +msgstr "" + +#: ../../../CHANGELOG.rst:7 +msgid "*Release date: ?*" +msgstr "" + +#: ../../../CHANGELOG.rst:9 +msgid "Added support for Russian, and shortened the language selector" +msgstr "" + +#: ../../../CHANGELOG.rst:10 +msgid "Renamed 'test score' to 'base score'" +msgstr "" + +#: ../../../CHANGELOG.rst:11 +msgid "Divisions-specific features have been deprecated and removed" +msgstr "" + +#: ../../../CHANGELOG.rst:12 +msgid "Moved the 'Edit Database' menu item to the dropdown with the logo in the admin navigation" +msgstr "" + +#: ../../../CHANGELOG.rst:13 +msgid "Pull-ups can now be restricted to teams with the lowest draw strength (by speaker or team points) of their bracket" +msgstr "" + +#: ../../../CHANGELOG.rst:14 +msgid "The number of pull-ups and draw strength by speaker score are now available as team standing metrics" +msgstr "" + +#: ../../../CHANGELOG.rst:15 +msgid "Added the new emoji that come along with Unicode 11 — thanks to Viran Weerasekera for this addition!" +msgstr "" + +#: ../../../CHANGELOG.rst:16 +msgid "The 'Show adjudicator institutions' preference now covers a wider range of cases; meaning that if it is unchecked then all adjudicator's institutional affiliations should be hidden from the public" +msgstr "" + +#: ../../../CHANGELOG.rst:20 +msgid "2.3.2" +msgstr "" + +#: ../../../CHANGELOG.rst:21 +msgid "*Release date: 19 October 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:23 +msgid "Fixed issue where teams would appear to be unavailable in break rounds" +msgstr "" + +#: ../../../CHANGELOG.rst:24 ../../../CHANGELOG.rst:294 +#: ../../../CHANGELOG.rst:302 ../../../CHANGELOG.rst:314 +msgid "Other minor fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:28 +msgid "2.3.1" +msgstr "" + +#: ../../../CHANGELOG.rst:29 +msgid "*Release date: 6 October 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:31 +msgid "Fixed issue where the institutions list would count teams/adjudicators outside of the tournament" +msgstr "" + +#: ../../../CHANGELOG.rst:32 +msgid "Fixed issue where a rejected ballot form would crash rather than providing an error message" +msgstr "" + +#: ../../../CHANGELOG.rst:33 +msgid "Fixed issue where the javascript bundle would not build on a local windows install" +msgstr "" + +#: ../../../CHANGELOG.rst:34 +msgid "Fixed issue where the adjudicator record pages would show an unreleased motion if that round's draw was released" +msgstr "" + +#: ../../../CHANGELOG.rst:38 +msgid "2.3.0 (LaPerm)" +msgstr "" + +#: ../../../CHANGELOG.rst:39 +msgid "*Release date: 27 September 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:44 +msgid "Added a preformed panel system which provides a powerful take on a 'shadow draw' workflow" +msgstr "" + +#: ../../../CHANGELOG.rst:42 +msgid "Shadow draw systems allow an adjudication core to form panels prior to a round being drawn. For example, the panels for Round 4 could be formed while Round 3 is taking place. Most implementations do so by having the tab system create a copy of the Round 3 draw, form new panels on top of it, and then transpose these panels onto Round 4. In large tournaments this workflow allows an adjudication core much more time to consider panel formation" +msgstr "" + +#: ../../../CHANGELOG.rst:43 +msgid "Tabbycat's preformed panels are formed per-round under a section available under the Setup menu. This interface looks like the standard Edit Adjudicators interface, but the 'debates' shown are based on a simulation of that round's results. These fake debates can then be prioritised" +msgstr "" + +#: ../../../CHANGELOG.rst:44 +msgid "Adjudicators can then be allocated to those fake debates in order to create a pre-formed panel. When the real draw is ready to be created, the priority of each preformed panel will be matched to the priority of the real debates" +msgstr "" + +#: ../../../CHANGELOG.rst:45 +msgid "By using the existing per-debate priority system, and by giving pre-formed panels their own priority, this workflow allows for very fine amounts of control over exactly how preformed panels are allocated as compared to a more simple top-down transposition of panels. Adjudication cores can easily target general areas of the draw (e.g. break-threshold brackets); control adjudicator strength within and across panels; and still account for special cases where a debate requires a particularly strong panel. At the same time, our existing options for automatic prioritisation and automatic allocation apply to all steps of this process so that preformed panels can be created and deployed rapidly" +msgstr "" + +#: ../../../CHANGELOG.rst:50 +msgid "Rewrote the Edit Adjudication, Venues, and Teams pages to enable a number of enhancements" +msgstr "" + +#: ../../../CHANGELOG.rst:47 +msgid "These pages now live-update changes that were made on other instances of that page. As a result, users on different computers can each open the Edit Adjudicators page and see the changes made by the other users. This feature, along with sharding, should make it easier than ever to distribute the task of adjudicator allocation across an entire adjudication core" +msgstr "" + +#: ../../../CHANGELOG.rst:48 +msgid "A new interface layout should better maximise space, particularly in BP settings, while also increasing the font size of key information" +msgstr "" + +#: ../../../CHANGELOG.rst:49 +msgid "The unused panel is now able to sort adjudicators by name, score, or drag order" +msgstr "" + +#: ../../../CHANGELOG.rst:50 +msgid "Average scores for all adjudicators, and a voting majority, are now shown next to the panel" +msgstr "" + +#: ../../../CHANGELOG.rst:51 +msgid "Various allocation-relevant settings, such as the minimum feedback score needed for a voting position, are now available inline on the allocation page itself. This should enable much faster tweaks/iterations of these values" +msgstr "" + +#: ../../../CHANGELOG.rst:52 +msgid "The ballot entry page will now indicate which teams have currently or recently given 'iron person' speeches so that these can be easily tracked, audited, and confirmed. It does show by showing both a text-highlight/icon in the table and in a dedicated modal window. Thanks to Étienne Beaulé for contributing this feature!" +msgstr "" + +#: ../../../CHANGELOG.rst:54 +msgid "Split up the Django settings files. Note that this means if you are upgrading a local install of Tabbycat to this version you will need to:" +msgstr "" + +#: ../../../CHANGELOG.rst:54 +msgid "Copy ``tabbycat/settings/local.example`` to become ``local.py`` (and fill in your original database details)" +msgstr "" + +#: ../../../CHANGELOG.rst:55 +msgid "Optional: repeat the same copying procedure for ``development.example`` and set the ``LOCAL_DEVELOPMENT`` environmental variable to ``True`` if you would like to use the settings designed to aid local development" +msgstr "" + +#: ../../../CHANGELOG.rst:61 +msgid "A range of improvements to the email notifications contributed by Étienne Beaulé:" +msgstr "" + +#: ../../../CHANGELOG.rst:57 +msgid "Ballot receipt emails now provide more information about team scores/points" +msgstr "" + +#: ../../../CHANGELOG.rst:58 +msgid "Emails are now in a rich-text format" +msgstr "" + +#: ../../../CHANGELOG.rst:59 +msgid "Custom emails may be sent out to select participants through the web-interface" +msgstr "" + +#: ../../../CHANGELOG.rst:60 +msgid "Participants can be specifically included or excluded from receiving a notification before sending with checks for duplicate messages" +msgstr "" + +#: ../../../CHANGELOG.rst:61 +msgid "Teams can be sent emails with their draw details" +msgstr "" + +#: ../../../CHANGELOG.rst:62 +msgid "Emails can be tracked to determine if sent or read (SendGrid-specific)" +msgstr "" + +#: ../../../CHANGELOG.rst:65 +msgid "Expanded the use of private URLs (Encore Étienne Beaulé):" +msgstr "" + +#: ../../../CHANGELOG.rst:64 +msgid "QR codes are now included in addition to the URL when printing private URLs" +msgstr "" + +#: ../../../CHANGELOG.rst:65 +msgid "Private landing pages will now display check-in status (if check-ins are used) along with further details regarding break categories, regions, etc." +msgstr "" + +#: ../../../CHANGELOG.rst:66 +msgid "Current and former draw assignments will display along with submitted ballots (for adjudicators) on landing pages" +msgstr "" + +#: ../../../CHANGELOG.rst:70 +msgid "Reworked how conflicts are determined to support double-past institutional conflicts:" +msgstr "" + +#: ../../../CHANGELOG.rst:68 +msgid "Added a \"team-institution conflict\" model" +msgstr "" + +#: ../../../CHANGELOG.rst:69 +msgid "Like adjudicator-institution conflicts, team-institution conflicts are automatically created if you use the simple importer or the command-line importer; but if you edit the database, it's your responsibility to add/edit them" +msgstr "" + +#: ../../../CHANGELOG.rst:70 +msgid "Institutional affiliations no longer matter for determining conflicts for either teams or adjudicators; only institutions listed in the team's or adjudicator's conflicts matter" +msgstr "" + +#: ../../../CHANGELOG.rst:71 +msgid "An adjudicator/team now conflicts with an adjudicator if *any* institution appears as an institutional conflict for both parties" +msgstr "" + +#: ../../../CHANGELOG.rst:72 +msgid "When printing scoresheets you can now edit the motions display just on that printing page. This allows you to use placeholder motions in Tabbycat (in order to prevent leaks) while still producing ballots with the correct motions" +msgstr "" + +#: ../../../CHANGELOG.rst:73 +msgid "Tabbycat no longer tracks which round is the 'current' round and instead tracks the completion of individual rounds. This change does not alter any existing workflows, but makes it easier to run simultaneous draws in out-rounds" +msgstr "" + +#: ../../../CHANGELOG.rst:74 +msgid "Info-slides can now be split into paragraphs" +msgstr "" + +#: ../../../CHANGELOG.rst:75 +msgid "Check-in pages now differentiate between teams with 1 and 2 checked-in people in two-team formats" +msgstr "" + +#: ../../../CHANGELOG.rst:76 +msgid "Institutional caps in breaks can be based on the number of teams in the break. Thanks to Viran Weerasekera for this feature!" +msgstr "" + +#: ../../../CHANGELOG.rst:77 +msgid "Several Tabbycat functions, adjudicator/venue allocation and email notifications, have been shifted to worker processes to help make them more reliable. If you are upgrading a Tabbycat instance that you will continue to use for new tournaments you will need to install the Heroku toolbelt and run ``heroku ps:scale worker=1``" +msgstr "" + +#: ../../../CHANGELOG.rst:78 +msgid "Upgraded to Python 3.6, dropped support for Python 3.5 and below. Note that this will require you to upgrade your python versions if running locally." +msgstr "" + +#: ../../../CHANGELOG.rst:82 +msgid "2.2.10" +msgstr "" + +#: ../../../CHANGELOG.rst:83 +msgid "*Release date: 10 February 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:85 +msgid "Fixed the display of feedback quantities on the Feedback Overview Page" +msgstr "" + +#: ../../../CHANGELOG.rst:86 +msgid "Fixed issue where 'ignored' feedback would hide the result from the feedback graph but not affect an adjudicator's current score. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:90 +msgid "2.2.9" +msgstr "" + +#: ../../../CHANGELOG.rst:91 +msgid "*Release date: 24 January 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:93 +msgid "Fixed an issue that could cause errors for tournaments when using an atypical number of rounds and break sizes. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:94 +msgid "Fixed an issue where the display of adjudicator's record links would display their name twice" +msgstr "" + +#: ../../../CHANGELOG.rst:98 +msgid "2.2.8" +msgstr "" + +#: ../../../CHANGELOG.rst:99 +msgid "*Release date: 14 December 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:101 +msgid "Fix issue where the check-in buttons were always disabled on admin and assistant pages" +msgstr "" + +#: ../../../CHANGELOG.rst:102 +msgid "Other minor fixes. Thanks to Étienne for these and for the check-in button fix!" +msgstr "" + +#: ../../../CHANGELOG.rst:106 +msgid "2.2.7" +msgstr "" + +#: ../../../CHANGELOG.rst:107 +msgid "*Release date: 16 November 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:109 +msgid "Lock redis-py version to 2.10.6, as workaround for `compatibility issue between django-redis and redis-py `_" +msgstr "" + +#: ../../../CHANGELOG.rst:110 +msgid "Fix login link on page shown after a user logs out" +msgstr "" + +#: ../../../CHANGELOG.rst:114 +msgid "2.2.6" +msgstr "" + +#: ../../../CHANGELOG.rst:115 +msgid "*Release date: 14 November 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:117 +msgid "Fix issue where check-ins could not be revoked" +msgstr "" + +#: ../../../CHANGELOG.rst:118 +msgid "Fix issue where the standings overview 'dashboard' included scores from elimination rounds. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:119 +msgid "Fix issue where the Average Individual Speaker Score metric would fail to calculate in some circumstances. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:120 +msgid "Fix issue where draw emails would crash if venues were unspecified. Thanks, again, to Étienne for this fix!" +msgstr "" + +#: ../../../CHANGELOG.rst:124 +msgid "2.2.5" +msgstr "" + +#: ../../../CHANGELOG.rst:125 +msgid "*Release date: 21 October 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:127 +msgid "Remove the buttons from the public check-ins page (as these do nothing unless the user is logged in)" +msgstr "" + +#: ../../../CHANGELOG.rst:128 +msgid "Hopefully fixed error that could cause Team- and Adjudicator- Institutional conflicts to not show properly on Allocation pages" +msgstr "" + +#: ../../../CHANGELOG.rst:129 +msgid "Thanks to Étienne for pull requests fixing rare bugs in the user creation form and break generation when rounds are not present" +msgstr "" + +#: ../../../CHANGELOG.rst:133 +msgid "2.2.4" +msgstr "" + +#: ../../../CHANGELOG.rst:134 +msgid "*Release date: 9 October 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:136 +msgid "Small fixes for functions related to email sending, conflict highlighting, and certain configurations of standings metrics" +msgstr "" + +#: ../../../CHANGELOG.rst:140 +msgid "2.2.3" +msgstr "" + +#: ../../../CHANGELOG.rst:141 +msgid "*Release date: 28 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:143 +msgid "*Literally* fix the issue causing public views of released scoresheets to throw errors (thanks for the pull request Étienne)" +msgstr "" + +#: ../../../CHANGELOG.rst:144 +msgid "Fix minor spacing issues in printed ballots (thanks for the pull request Étienne)" +msgstr "" + +#: ../../../CHANGELOG.rst:145 +msgid "Fix issue where institution-less adjudicators would cause some draw views to crash (thanks for the pull request Étienne)" +msgstr "" + +#: ../../../CHANGELOG.rst:149 +msgid "2.2.2" +msgstr "" + +#: ../../../CHANGELOG.rst:150 +msgid "*Release date: 22 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:152 +msgid "*Actually* fix the issue causing public views of released scoresheets to throw errors" +msgstr "" + +#: ../../../CHANGELOG.rst:156 +msgid "2.2.1" +msgstr "" + +#: ../../../CHANGELOG.rst:157 +msgid "*Release date: 21 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:159 +msgid "Fix issue causing public views of released scoresheets to throw errors" +msgstr "" + +#: ../../../CHANGELOG.rst:163 +msgid "2.2.0 (Khao Manee)" +msgstr "" + +#: ../../../CHANGELOG.rst:164 +msgid "*Release date: 20 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:167 +msgid "Implemented a new server architecture on Heroku along with other optimisation that should significantly improve the performance of sites receiving lots of traffic. Note that if you are upgrading an existing Heroku instance this requires a few tweaks before you deploy the update:" +msgstr "" + +#: ../../../CHANGELOG.rst:167 +msgid "Add the `https://github.com/heroku/heroku-buildpack-nginx.git` build pack under the Settings area of the Heroku Dashboard and positioning it first" +msgstr "" + +#: ../../../CHANGELOG.rst:168 +msgid "If your Heroku Stack is not \"heroku-16\" (noted under that same Settings page) it will need to be set as such using the Heroku CLI and the ``heroku stack:set heroku-16 --app APP_NAME`` command" +msgstr "" + +#: ../../../CHANGELOG.rst:169 +msgid "Added a page to the documentation that details how to scale a Tabbycat site that is receiving large amounts of traffic; and another page that documents how to upgrade a Tabbycat site to a new version" +msgstr "" + +#: ../../../CHANGELOG.rst:170 +msgid "Added support for Japanese and Portuguese. Let us know if you'd like to help contribute translations for either language (or a new one)!" +msgstr "" + +#: ../../../CHANGELOG.rst:171 +msgid "The results-entry page now updates its data live, giving you a more up to date look at data entry progress and reducing the cases of old data leading people to enter new ballots when they meant to confirm them" +msgstr "" + +#: ../../../CHANGELOG.rst:178 +msgid "A huge thanks to Étienne Beaulé for contributing a number of major new features and bug fixes. Notably:" +msgstr "" + +#: ../../../CHANGELOG.rst:173 +msgid "Added a means to mark feedback as 'ignored' so that it still is recorded as having been submitted, but does not affect the targeted-adjudicator's feedback score" +msgstr "" + +#: ../../../CHANGELOG.rst:174 +msgid "Added email notification to adjudicators on round release" +msgstr "" + +#: ../../../CHANGELOG.rst:175 +msgid "Implemented participant self-check-in through the use of their private URLs" +msgstr "" + +#: ../../../CHANGELOG.rst:176 +msgid "Gave all participants to a tournament a private URL key rather than being by team, and added a landing page for the participants using this key" +msgstr "" + +#: ../../../CHANGELOG.rst:177 +msgid "Implemented templated email notifications with ballot submission and round advance with the messages in a new settings panel. Private URL emails are now also customizable" +msgstr "" + +#: ../../../CHANGELOG.rst:178 +msgid "Added the \"average individual speaker score\" metric which averages the scores of all substantive speeches by the team within preliminary rounds. The old \"average speaker score\" metric has been renamed to to \"average total speaker score\"" +msgstr "" + +#: ../../../CHANGELOG.rst:179 +msgid "Reworked the ballots status graph to be an area chart" +msgstr "" + +#: ../../../CHANGELOG.rst:180 +msgid "Added the ability to hide motions on printed ballots (even if they have been entered). Thanks to Github user 0zlw for the feature request!" +msgstr "" + +#: ../../../CHANGELOG.rst:181 +msgid "Added the ability to unconfirm feedback from any of the views that show it" +msgstr "" + +#: ../../../CHANGELOG.rst:182 +msgid "BP motion statistics now also show average points split by bench and half" +msgstr "" + +#: ../../../CHANGELOG.rst:183 +msgid "Added a warning when users are close to their free-tier database limit on Heroku that makes it clear not to create new tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:184 +msgid "Added ``exportconfig`` and ``importconfig`` management commands to export and import tournament configurations to a JSON file" +msgstr "" + +#: ../../../CHANGELOG.rst:185 +msgid "Upgraded `django-dynamic-preferences `_ to version 1.6" +msgstr "" + +#: ../../../CHANGELOG.rst:187 +msgid "This won't affect most users, but advanced users previously having problems with a stray ``dynamic_preferences_users_userpreferencemodel`` table who are upgrading an existing instance may wish to run the SQL command ``DROP TABLE dynamic_preferences_users_userpreferencemodel;`` to remove this stray table. When this table was present, it caused an inconsistency between migration state and database schema that in turned caused the ``python manage.py flush`` command to fail. More information is available in the `django-dynamic-preferences changelog `_" +msgstr "" + +#: ../../../CHANGELOG.rst:191 +msgid "2.1.3" +msgstr "" + +#: ../../../CHANGELOG.rst:192 +msgid "*Release date: 21 August 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:194 +msgid "Added an alert for British Parliamentary format grand-final ballots that explains the workaround needed to nominate a sole winner" +msgstr "" + +#: ../../../CHANGELOG.rst:195 +msgid "Improved display of images shown when sharing Tabbycat links on social media" +msgstr "" + +#: ../../../CHANGELOG.rst:196 +msgid "Optimised the performance of several commonly-loaded pages. Thanks to Étienne Beaulé for the pull request!" +msgstr "" + +#: ../../../CHANGELOG.rst:197 +msgid "Prevented the entry of integer-scale feedback questions without the required min/max attributes" +msgstr "" + +#: ../../../CHANGELOG.rst:198 +msgid "Provided a shortcut link to editing a round's feedback weight" +msgstr "" + +#: ../../../CHANGELOG.rst:199 +msgid "Prevented standings from crashing when only a single standings metric is set" +msgstr "" + +#: ../../../CHANGELOG.rst:203 +msgid "2.1.2" +msgstr "" + +#: ../../../CHANGELOG.rst:204 +msgid "*Release date: 14 July 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:206 +msgid "Fixed an error caused when calculating breaks including teams without institutions" +msgstr "" + +#: ../../../CHANGELOG.rst:207 +msgid "Improved display of long motions and info slides" +msgstr "" + +#: ../../../CHANGELOG.rst:208 +msgid "Fixed bug in feedback progress tracking with UADC-style adjudication" +msgstr "" + +#: ../../../CHANGELOG.rst:209 +msgid "Fixed bug where the public checks page would cause large amounts of failing requests" +msgstr "" + +#: ../../../CHANGELOG.rst:210 +msgid "Fixed visual issue with adjudicator lists wrapping poorly on mobile devices" +msgstr "" + +#: ../../../CHANGELOG.rst:211 +msgid "Limited the time it takes to serve requests to match Heroku's in-built limit; this may help improve the performance of sites under heavy load" +msgstr "" + +#: ../../../CHANGELOG.rst:215 +msgid "2.1.1" +msgstr "" + +#: ../../../CHANGELOG.rst:216 +msgid "*Release date: 19 May 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:218 +msgid "The Scan Identifiers page now orders check-ins from top to bottom" +msgstr "" + +#: ../../../CHANGELOG.rst:219 +msgid "The Scan Identifiers now plays different sounds for failed check-ins" +msgstr "" + +#: ../../../CHANGELOG.rst:220 +msgid "The Scan Identifiers now has a toggle for sounds; allowing it to work in browsers like Safari that block auto-playing audio" +msgstr "" + +#: ../../../CHANGELOG.rst:224 +msgid "2.1.0 (Japanese Bobtail)" +msgstr "" + +#: ../../../CHANGELOG.rst:225 +msgid "*Release date: 7 May 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:227 +msgid "Added an introductory modal for the adjudicator allocation page to help outline how the features and workflow operate" +msgstr "" + +#: ../../../CHANGELOG.rst:228 +msgid "Added an automated method for assigning importances to debates using their bracket or 'liveness'. This should allow smaller tournaments to more easily assign importances and save time for larger tournaments that do so" +msgstr "" + +#: ../../../CHANGELOG.rst:230 +msgid "Added the ability to switch between using 'team codes' and standard team names" +msgstr "" + +#: ../../../CHANGELOG.rst:230 +msgid "By default team codes are set to match that team's emoji, but team codes are editable and can be imported like standard data" +msgstr "" + +#: ../../../CHANGELOG.rst:231 +msgid "Team codes can be swapped in an out for standard team names at will, with precise control over the contexts in which either is used — i.e. in public-facing pages, in admin-facing pages, in tooltips, *etc.*" +msgstr "" + +#: ../../../CHANGELOG.rst:235 +msgid "Added a range of 'check-in' functionality" +msgstr "" + +#: ../../../CHANGELOG.rst:233 +msgid "This includes barcode assignment, printing, and scanning. Scanning methods are optimised both for manual entry, entry with barcodes scanners, and for a 'live' scanning view that uses your phone's camera!" +msgstr "" + +#: ../../../CHANGELOG.rst:234 +msgid "This includes new people and venue status pages that show an overview of check-in status and allow for easy manual check-ins; ideal for a roll-calls!. This page can also be made public" +msgstr "" + +#: ../../../CHANGELOG.rst:235 +msgid "Ballot check-ins have been converted to this new method, and now all printed ballots will contain the barcodes needed to scan them" +msgstr "" + +#: ../../../CHANGELOG.rst:236 +msgid "Venue check-ins have been added alongside the standard 'person' check-ins to allow you to track a room's status at the start of the day or round-by-round" +msgstr "" + +#: ../../../CHANGELOG.rst:239 +msgid "Added (partial) translations in French, Spanish and Arabic" +msgstr "" + +#: ../../../CHANGELOG.rst:238 +msgid "Users can now use a link in the footer to switch the site's language into French, Spanish, or Arabic. By default Tabbycat should also match your browser's language and so automatically apply those languages if it matches" +msgstr "" + +#: ../../../CHANGELOG.rst:239 +msgid "Our translations are generously provided by volunteers, but (so far) do not cover all of the interface text within Tabbycat. If you're interested in helping to translate new or existing languages please get in touch!" +msgstr "" + +#: ../../../CHANGELOG.rst:240 +msgid "Thanks to the excellent team at QatarDebate for contributing the Arabic translations, and to Alejandro, Hernando, Julian and Zoe for contributing the Spanish translations." +msgstr "" + +#: ../../../CHANGELOG.rst:242 +msgid "Added a new (beta) feature: allocation 'sharding'" +msgstr "" + +#: ../../../CHANGELOG.rst:242 +msgid "Sharding allows you to split up the Adjudicator Allocation screen into a defined subset of the draw. This has been designed so that you can have multiple computers doing allocations simultaneously; allowing the adjudication core to split itself and tackle allocations in parallel." +msgstr "" + +#: ../../../CHANGELOG.rst:243 +msgid "Shards can be assigned into defined fractions (i.e. halves or fifths) according to specific criteria (i.e. bracket or priority) and following either a top-to-bottom sorting or a mixed sorting that ensures each bracket has an even proportion of each criteria." +msgstr "" + +#: ../../../CHANGELOG.rst:244 +msgid "Added an option to show a \"Confirm Digits\" option to pre-printed ballots that asks adjudicators to confirm their scores in a manner that may help clarify instances or bad handwriting. This can be enabled in the \"Data Entry\" settings area." +msgstr "" + +#: ../../../CHANGELOG.rst:245 +msgid "Added a 'liveness' calculator for BP that will estimate whether each team has, can, or can't break in each of their categories (as previously existed for 2-team formats)" +msgstr "" + +#: ../../../CHANGELOG.rst:246 +msgid "Added draw pull-up option: pull up from middle" +msgstr "" + +#: ../../../CHANGELOG.rst:247 +msgid "Added new draw option: choose pull-up from teams who have been pulled up the fewest times so far" +msgstr "" + +#: ../../../CHANGELOG.rst:248 +msgid "Added the ability to have different 'ballots-per-debates' for in/out rounds; accommodating tournaments like Australian Easters that use consensus for preliminary rounds but voting for elimination rounds." +msgstr "" + +#: ../../../CHANGELOG.rst:249 +msgid "Added time zone support to the locations where times are displayed" +msgstr "" + +#: ../../../CHANGELOG.rst:250 +msgid "Administrators can now view pages as if they were Assistants; allowing them to (for example) use the data entry forms that enforce double-checking without needed to create a separate account" +msgstr "" + +#: ../../../CHANGELOG.rst:251 +msgid "Fixed χ² test in motion statistics, and refactored the motion statistics page" +msgstr "" + +#: ../../../CHANGELOG.rst:252 +msgid "Teams, like adjudicators, no longer need to have an institution" +msgstr "" + +#: ../../../CHANGELOG.rst:253 +msgid "Added a page allowing for bulk updates to adjudicator scores" +msgstr "" + +#: ../../../CHANGELOG.rst:254 +msgid "Added break categories to team standings, and new team standings pages for break categories" +msgstr "" + +#: ../../../CHANGELOG.rst:259 +msgid "Made speaker standings more configurable" +msgstr "" + +#: ../../../CHANGELOG.rst:256 +msgid "Second-order metrics can now be specified" +msgstr "" + +#: ../../../CHANGELOG.rst:257 +msgid "Added trimmed mean (also known as high-low drop)" +msgstr "" + +#: ../../../CHANGELOG.rst:258 +msgid "Added ability to set no limit for number of missed debates" +msgstr "" + +#: ../../../CHANGELOG.rst:259 +msgid "Standard deviation is now the population standard deviation (was previously sample), and ranks in ascending order if used to rank speakers." +msgstr "" + +#: ../../../CHANGELOG.rst:273 ../../../CHANGELOG.rst:386 +msgid "Quality of life improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:262 +msgid "Added a \"☆\" indicator to more obviously liveness in the adjudicator allocation screen" +msgstr "" + +#: ../../../CHANGELOG.rst:263 +msgid "Added WYSIWYG editor for tournament welcome message, and moved it to tournament configuration" +msgstr "" + +#: ../../../CHANGELOG.rst:264 +msgid "Added \"appellant\" and \"respondent\" to the side name options" +msgstr "" + +#: ../../../CHANGELOG.rst:265 +msgid "Added a two new columns to the feedback overview page: one that displays the current difference between an adjudicator's test score and their current weighted score; another the displays the standard deviation of an adjudicator's feedback scores" +msgstr "" + +#: ../../../CHANGELOG.rst:266 +msgid "Added an 'important feedback' page that highlights feedback significantly above or below an adjudicator's test score" +msgstr "" + +#: ../../../CHANGELOG.rst:267 +msgid "Added a means to bulk-import adjudicator scores (for example from a CSV) to make it easier to work with external feedback processing" +msgstr "" + +#: ../../../CHANGELOG.rst:268 +msgid "Speakers and speaker's emails in the simple importer can now be separated by commas or tabs in addition to new lines" +msgstr "" + +#: ../../../CHANGELOG.rst:269 +msgid "The \"shared\" checkbox in the simple importer is now hidden unless the relevant tournament option is enabled" +msgstr "" + +#: ../../../CHANGELOG.rst:270 +msgid "Current team standings page now shows silent round results if \"Release all round results to public\" is set" +msgstr "" + +#: ../../../CHANGELOG.rst:271 +msgid "The Consensus vs Voting options for how ballots work has now been split into two settings: one option for preliminary rounds and one option for elimination rounds" +msgstr "" + +#: ../../../CHANGELOG.rst:272 +msgid "Speaker scores now show as integers (without decimals) where the tournament format would not allow decimals" +msgstr "" + +#: ../../../CHANGELOG.rst:273 +msgid "Added a page showing a list of institutions in the tournament" +msgstr "" + +#: ../../../CHANGELOG.rst:274 +msgid "On the assistant \"enter results\" page, pressing \"/\" jumps to the \"Find in Table\" box, so data entry can be done entirely from your keyboard" +msgstr "" + +#: ../../../CHANGELOG.rst:276 +msgid "Switched to using a Websockets/Channels based infrastructure to better allow for asynchronous updates. This should also ameliorate cases where the Memcachier plugin expired due to inactivity which would then crash a site. Notes for those upgrading:" +msgstr "" + +#: ../../../CHANGELOG.rst:276 +msgid "On Heroku: You should remove the Memcachier plugin and instead add 'heroku-redis' to any instances being upgraded" +msgstr "" + +#: ../../../CHANGELOG.rst:277 +msgid "Locally: You should recreate your `local_settings.py` from the `local_settings.example` file" +msgstr "" + +#: ../../../CHANGELOG.rst:280 +msgid "Upgraded to Django 2.0" +msgstr "" + +#: ../../../CHANGELOG.rst:279 +msgid "Converted most raw SQL queries to use the new ``filter`` keyword in annotations" +msgstr "" + +#: ../../../CHANGELOG.rst:283 +msgid "2.0.7" +msgstr "" + +#: ../../../CHANGELOG.rst:284 +msgid "*Release date: 13 April 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:286 +msgid "Fixed an issue preventing draws with pre-allocate sides generating" +msgstr "" + +#: ../../../CHANGELOG.rst:290 +msgid "2.0.6" +msgstr "" + +#: ../../../CHANGELOG.rst:291 +msgid "*Release date: 20 March 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:293 +msgid "Added reminder to add own-institution conflicts in the Edit Database area" +msgstr "" + +#: ../../../CHANGELOG.rst:298 +msgid "2.0.5" +msgstr "" + +#: ../../../CHANGELOG.rst:299 +msgid "*Release date: 7 February 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:301 +msgid "Improved the printing of scoresheets and feedback forms on Chrome." +msgstr "" + +#: ../../../CHANGELOG.rst:306 +msgid "2.0.4" +msgstr "" + +#: ../../../CHANGELOG.rst:307 +msgid "*Release date: 22 January 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:309 +msgid "Add alert for users who try to do voting ballots on BP-configured tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:310 +msgid "Fixed issue where draws of the \"manual\" type would not generate correctly" +msgstr "" + +#: ../../../CHANGELOG.rst:311 +msgid "Fixed issue where a ballot's speaker names dropdown would contain both team's speakers when using formats with side selection" +msgstr "" + +#: ../../../CHANGELOG.rst:312 +msgid "Fixed issue where scoresheets would not show correctly under some configurations" +msgstr "" + +#: ../../../CHANGELOG.rst:313 +msgid "Improved display of really long motions when using the inbuilt motion-showing page" +msgstr "" + +#: ../../../CHANGELOG.rst:318 +msgid "2.0.3" +msgstr "" + +#: ../../../CHANGELOG.rst:319 +msgid "*Release date: 3 December 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:321 +msgid "Fixed issue where the 'prefix team name with institution name' checkbox would not be correctly saved when using the Simple Importer" +msgstr "" + +#: ../../../CHANGELOG.rst:322 +msgid "Removed the scroll speed / text size buttons on mobile draw views that were making it difficult to view the table" +msgstr "" + +#: ../../../CHANGELOG.rst:323 +msgid "Improved the display of the motions tab page on mobile devices and fixed an issue where it appeared as if only half the vetoes were made" +msgstr "" + +#: ../../../CHANGELOG.rst:327 +msgid "2.0.2" +msgstr "" + +#: ../../../CHANGELOG.rst:328 +msgid "*Release date: 27 November 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:333 +msgid "Fixes and improvements to diversity overview" +msgstr "" + +#: ../../../CHANGELOG.rst:331 +msgid "Fixed average feedback rating from teams, it was previously (incorrectly) showing the average feedback rating from all adjudicators" +msgstr "" + +#: ../../../CHANGELOG.rst:332 +msgid "Gender splits for average feedback rating now go by target adjudicator; this was previously source adjudicator" +msgstr "" + +#: ../../../CHANGELOG.rst:333 +msgid "Persons with unknown gender are now shown in counts (but not score/rating averages); a bug had previously caused them to be incorrectly counted as zero" +msgstr "" + +#: ../../../CHANGELOG.rst:334 +msgid "Improved query efficiency of the page" +msgstr "" + +#: ../../../CHANGELOG.rst:335 +msgid "Improved the BP motions tab for out-rounds by specifying advancing teams as \"top/bottom ½\" rather than as 1st/4th and removed the average-points-per-position graphs that were misleading" +msgstr "" + +#: ../../../CHANGELOG.rst:336 +msgid "Improved handling of long motions in the motion display interface" +msgstr "" + +#: ../../../CHANGELOG.rst:337 +msgid "Fixed issue where creating BP tournaments using the wizard would create an extra break round given the size of the break specified" +msgstr "" + +#: ../../../CHANGELOG.rst:338 +msgid "Fixed auto-allocation in consensus panels where there are fewer judges than debates in the round" +msgstr "" + +#: ../../../CHANGELOG.rst:339 +msgid "Fixed reply speaker validity check when speeches are marked as duplicate" +msgstr "" + +#: ../../../CHANGELOG.rst:340 +msgid "Prohibit assignment of teams to break categories of other tournaments in Edit Database area" +msgstr "" + +#: ../../../CHANGELOG.rst:344 +msgid "2.0.1" +msgstr "" + +#: ../../../CHANGELOG.rst:345 +msgid "*Release date: 21 November 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:347 +msgid "Fixed issue where results submission would crash if sides are unconfirmed" +msgstr "" + +#: ../../../CHANGELOG.rst:348 +msgid "Fixed issue where scoresheets would not display properly for adjudicators who lack institutions" +msgstr "" + +#: ../../../CHANGELOG.rst:349 +msgid "Fixed issue where the round history indicators in the Edit Adjudicators page would sometimes omit the \"rounds ago\" indicator" +msgstr "" + +#: ../../../CHANGELOG.rst:353 +msgid "2.0.0 (Iberian Lynx)" +msgstr "" + +#: ../../../CHANGELOG.rst:354 +msgid "*Release date: 13 November 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:358 +msgid "British Parliamentary support" +msgstr "" + +#: ../../../CHANGELOG.rst:357 +msgid "Full support for British Parliamentary format has been added and we're incredibly excited to see Tabbycat's unique features and design (finally) available as an option for those tabbing in the predominant global format" +msgstr "" + +#: ../../../CHANGELOG.rst:358 +msgid "As part of the implementation of this format we've made significant improvements over existing tab software on how sides are allocated within BP draws. This means that teams are less likely to have 'imbalanced' proportions of side allocations (for example having many more debates as Opening Government than Closing Opposition)" +msgstr "" + +#: ../../../CHANGELOG.rst:359 +msgid "We've added a new \"Comparisons\" page added to the documentation to outline some of the key differences between Tabbycat and other software in the context of BP tabbing" +msgstr "" + +#: ../../../CHANGELOG.rst:365 +msgid "Refreshed interface design" +msgstr "" + +#: ../../../CHANGELOG.rst:361 +msgid "The basic graphic elements of Tabbycat have had a their typography, icons, colours, forms, and more redesign for a more distinctive and clear look. We also now have an official logo!" +msgstr "" + +#: ../../../CHANGELOG.rst:362 +msgid "The \"Motions\" stage of the per-round workflow has now been rolled into the Display area to better accommodate BP formats and consolidate the Draw/Motion 'release' process" +msgstr "" + +#: ../../../CHANGELOG.rst:363 +msgid "Sidebar menu items now display all sub-items within a section, such as for Feedback, Standings, and Breaks" +msgstr "" + +#: ../../../CHANGELOG.rst:364 +msgid "Better tablet and mobile interfaces; including a fully responsive sidebar for the admin area that maximises the content area" +msgstr "" + +#: ../../../CHANGELOG.rst:365 +msgid "More explicit and obvious calls-to-action for the key tasks necessary to running a round, with better interface alerts and text to help users understand when and why to perform crucial actions" +msgstr "" + +#: ../../../CHANGELOG.rst:366 +msgid "Redesigned motions tab page that gives a better idea of the sample size and distribution of results in both two- and four- team formats" +msgstr "" + +#: ../../../CHANGELOG.rst:368 +msgid "Improved handling of Break Rounds ballots and sides allocation" +msgstr "" + +#: ../../../CHANGELOG.rst:368 +msgid "The positions of teams within a break round are now created by the initial draw generation in an 'unset' state in recognition that most tournaments assign these manually (through say a coin toss). This should help clarify when showing break rounds draws when sides are or are not finalised" +msgstr "" + +#: ../../../CHANGELOG.rst:369 +msgid "Break rounds ballots for formats where scores are not typically entered (i.e. BP) will only specify that you nominate the teams advancing rather than enter in all of the speakers' scores" +msgstr "" + +#: ../../../CHANGELOG.rst:370 +msgid "Now, like Break Categories, you can define arbitrary Categories such as 'Novice' or 'ESL' to create custom Speaker tabs for groups of Speakers" +msgstr "" + +#: ../../../CHANGELOG.rst:371 +msgid "You can now release an Adjudicators Tab showing test scores, final scores, and/or per-round feedback averages" +msgstr "" + +#: ../../../CHANGELOG.rst:372 +msgid "Information Slides can now be added to the system; either for showing to an auditorium within Tabbycat or for displaying alongside the public list of motions and/or the motions tab" +msgstr "" + +#: ../../../CHANGELOG.rst:373 +msgid "Teams and adjudicators are no longer required to have institutions; something that should be very useful when setting up small IVs and the like" +msgstr "" + +#: ../../../CHANGELOG.rst:374 +msgid "Private URLs can now be incrementally generated. Records of sent mail are now also kept by Tabbycat, so that emails can be incrementally sent to participants as registration data changes" +msgstr "" + +#: ../../../CHANGELOG.rst:376 +msgid "After creating a new tournament you will now be prompted to apply a basic rules and public information preset" +msgstr "" + +#: ../../../CHANGELOG.rst:377 +msgid "Better handling of errors that arise when a debate team is missing or where two teams have been assigned the same side" +msgstr "" + +#: ../../../CHANGELOG.rst:378 +msgid "Fixed issue where the adjudicator feedback graphs would not sort along with their table" +msgstr "" + +#: ../../../CHANGELOG.rst:379 +msgid "The Feedback Overview page now makes it more clear how the score is determined, the current distribution of scores, and how scores affect the distribution of chairs, panellists, and trainees" +msgstr "" + +#: ../../../CHANGELOG.rst:380 +msgid "Speaker tabs now default to sorting by average, except for formats where we are certain that they must be sorted by total. The speaker tab page itself now prominently notes which setting is is currently using" +msgstr "" + +#: ../../../CHANGELOG.rst:381 +msgid "'Feedback paths' now default to a more permissive setting (rather than only allowing Chairs to submit feedback) and the Feedback Overview page will note that current configuration" +msgstr "" + +#: ../../../CHANGELOG.rst:382 +msgid "Emails can be assigned to adjudicators and teams in the Simple Importer" +msgstr "" + +#: ../../../CHANGELOG.rst:383 +msgid "More of the tables that allow you to set or edit data (such as the check-in tables for adjudicators, teams and venues) now automatically save changes" +msgstr "" + +#: ../../../CHANGELOG.rst:384 +msgid "When adding/editing users extraneous fields have been hidden and the \"Staff\" and \"Superuser\" roles have new sub-text clarifying what they mean for users with those permissions" +msgstr "" + +#: ../../../CHANGELOG.rst:385 +msgid "Team record pages now show cumulative team points, and if the speaker tab is fully released, speaker scores for that team in each debate" +msgstr "" + +#: ../../../CHANGELOG.rst:389 +msgid "1.4.6" +msgstr "" + +#: ../../../CHANGELOG.rst:390 +msgid "*Release date: 23 October 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:392 +msgid "Fixed issue where speaker standings with a large amount of non-ranking speakers would cause the page to load slowly or time-out." +msgstr "" + +#: ../../../CHANGELOG.rst:396 +msgid "1.4.5" +msgstr "" + +#: ../../../CHANGELOG.rst:397 +msgid "*Release date: 14 October 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:399 +msgid "Added warning message when adjudicator scores are outside the expected range" +msgstr "" + +#: ../../../CHANGELOG.rst:400 +msgid "Fixed handling of uniqueness failure in simple importer for teams" +msgstr "" + +#: ../../../CHANGELOG.rst:404 +msgid "1.4.4" +msgstr "" + +#: ../../../CHANGELOG.rst:405 +msgid "*Release date: 27 September 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:407 +msgid "Fixed Vue dependency issue preventing Heroku installs after a dependency release" +msgstr "" + +#: ../../../CHANGELOG.rst:408 +msgid "Fixed issue with formatting non-numeric standings metrics" +msgstr "" + +#: ../../../CHANGELOG.rst:409 +msgid "Fixed behaviour of public tabs when all rounds are silent" +msgstr "" + +#: ../../../CHANGELOG.rst:413 +msgid "1.4.3" +msgstr "" + +#: ../../../CHANGELOG.rst:414 +msgid "*Release date: 9 September 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:416 +msgid "A number of improvements to error handling and logging" +msgstr "" + +#: ../../../CHANGELOG.rst:417 +msgid "Changed the \"previous round\" of an elimination round to point to the last one in the same break category" +msgstr "" + +#: ../../../CHANGELOG.rst:418 +msgid "Other minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:422 +msgid "1.4.2" +msgstr "" + +#: ../../../CHANGELOG.rst:423 +msgid "*Release date: 23 August 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:425 +msgid "Minor bug fixes and error logging improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:429 +msgid "1.4.1" +msgstr "" + +#: ../../../CHANGELOG.rst:430 +msgid "*Release date: 2 August 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:432 +msgid "Fixed bug that prevented edited matchups from being saved" +msgstr "" + +#: ../../../CHANGELOG.rst:433 +msgid "Added flag to prevent retired sites from using the database for sessions" +msgstr "" + +#: ../../../CHANGELOG.rst:437 +msgid "1.4.0 (Havana Brown)" +msgstr "" + +#: ../../../CHANGELOG.rst:438 +msgid "*Release date: 26 July 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:444 +msgid "Overhauled the adjudicator allocation, venue allocation, and matchups editing pages, including:" +msgstr "" + +#: ../../../CHANGELOG.rst:441 +msgid "Upgraded to Vue 2.0 and refactored the code so that each page better shares methods for displaying the draw, showing additional information, and dragging/dropping" +msgstr "" + +#: ../../../CHANGELOG.rst:442 +msgid "When dragging/dropping, the changed elements now 'lock' in place to indicate that their saving is in-progress" +msgstr "" + +#: ../../../CHANGELOG.rst:443 +msgid "Added conflicts and recent histories to the slideovers shown for teams/adjudicators" +msgstr "" + +#: ../../../CHANGELOG.rst:444 +msgid "Added 'ranking' toggles to visibly highlight adjudicator strengths and more easily identify unbalanced panels" +msgstr "" + +#: ../../../CHANGELOG.rst:445 +msgid "Each interface's table is now sortable by a debate's importance, bracket, liveness, etc." +msgstr "" + +#: ../../../CHANGELOG.rst:446 +msgid "Added a new \"Tournament Logistics\" guide to the documentation that outlines some general best practices for tabbing tournaments. Thanks to Viran Weerasekera, Valerie Tierney, Molly Dale, Madeline Schultz, and Vail Bromberger for contributing to this document" +msgstr "" + +#: ../../../CHANGELOG.rst:447 +msgid "Added (basic) support for the Canadian Parliamentary format by allowing for consensus ballots and providing a preset. However note that only some of the common draw rules are supported (check our documentation for more information)" +msgstr "" + +#: ../../../CHANGELOG.rst:448 +msgid "Added an ESL/EFL tab release option and status field" +msgstr "" + +#: ../../../CHANGELOG.rst:449 +msgid "Added a chi-squared test to measure motion balance in the motion standings/balance. Thanks to Viran Weerasekera for contributing this" +msgstr "" + +#: ../../../CHANGELOG.rst:450 +msgid "The Auto Allocate function for adjudicators will now also allocate trainees to solo-chaired debates" +msgstr "" + +#: ../../../CHANGELOG.rst:451 +msgid "Added a 'Tab Release' preset for easily releasing all standings/results pages after a tournament is finished" +msgstr "" + +#: ../../../CHANGELOG.rst:452 +msgid "Added 'Average Speaks by Round' to the standings overview page" +msgstr "" + +#: ../../../CHANGELOG.rst:453 +msgid "Fixed issue where the Auto Allocator was forming panels of incorrect strengths in debates identified as less important" +msgstr "" + +#: ../../../CHANGELOG.rst:454 +msgid "Fixed issue where toggling iron-person speeches on and off wouldn't hide/unset the relevant checkboxes" +msgstr "" + +#: ../../../CHANGELOG.rst:455 +msgid "Fixed issue where VenueCategories could not be edited if they did not have Venues set" +msgstr "" + +#: ../../../CHANGELOG.rst:456 +msgid "Various other small fixes and improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:460 +msgid "1.3.1" +msgstr "" + +#: ../../../CHANGELOG.rst:461 +msgid "*Release date: 26 May 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:463 +msgid "Fixed bug that allowed duplicate emoji to be occasionally generated" +msgstr "" + +#: ../../../CHANGELOG.rst:467 +msgid "1.3.0 (Genetta)" +msgstr "" + +#: ../../../CHANGELOG.rst:468 +msgid "*Release date: 9 May 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:470 +msgid "Added the ability to mark speeches as duplicates when entering ballots so that they will not show in speaker tabs, intended for use with 'iron-man' speeches and swing speakers" +msgstr "" + +#: ../../../CHANGELOG.rst:471 +msgid "Reworked venue constraints and venue display options by streamlining \"venue groups\" and \"venue constraint categories\" into a single \"venue category\" type, with options for how they are used and displayed" +msgstr "" + +#: ../../../CHANGELOG.rst:472 +msgid "Relocated the Random (now renamed 'Private') URL pages to the Setup section and added pages for printing/emailing out the ballot submission URLs" +msgstr "" + +#: ../../../CHANGELOG.rst:473 +msgid "Reworked the simple data importer (formerly the visual importer) to improve its robustness" +msgstr "" + +#: ../../../CHANGELOG.rst:474 +msgid "Improved guards against having no current round set, and added a new page for manually overriding the current round (under Configuration)" +msgstr "" + +#: ../../../CHANGELOG.rst:475 +msgid "Added a preference for controlling whether assistant users have access to pages that can reveal draw or motions information ahead of their public release" +msgstr "" + +#: ../../../CHANGELOG.rst:476 +msgid "Added the ability to limit tab releases to a given number of ranks (*i.e.* only show the top 10 speakers)" +msgstr "" + +#: ../../../CHANGELOG.rst:477 +msgid "Added the ability to redact individual person's identifying details from speaker tabs" +msgstr "" + +#: ../../../CHANGELOG.rst:478 +msgid "Added the ability for user passwords to be easily reset" +msgstr "" + +#: ../../../CHANGELOG.rst:479 +msgid "Added a minimal set of default feedback questions to newly created Tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:480 +msgid "When a tournament's current round is set, redirect to a page where it can be set, rather than crashing" +msgstr "" + +#: ../../../CHANGELOG.rst:481 +msgid "A number of other minor bug fixes and enhancements" +msgstr "" + +#: ../../../CHANGELOG.rst:485 +msgid "1.2.3" +msgstr "" + +#: ../../../CHANGELOG.rst:486 +msgid "*Release date: 17 March 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:488 +msgid "Improved the display of the admin ballot entry form on mobile devices" +msgstr "" + +#: ../../../CHANGELOG.rst:489 ../../../CHANGELOG.rst:497 +#: ../../../CHANGELOG.rst:505 +msgid "A number of other minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:493 +msgid "1.2.2" +msgstr "" + +#: ../../../CHANGELOG.rst:494 +msgid "*Release date: 4 March 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:496 +msgid "Protected debate-team objects from cascaded deletion, and added warning messages with guidance when users would otherwise do this" +msgstr "" + +#: ../../../CHANGELOG.rst:501 +msgid "1.2.1" +msgstr "" + +#: ../../../CHANGELOG.rst:502 +msgid "*Release date: 25 February 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:504 +msgid "Printable feedback forms will now display the default rating scale, any configured introduction text, and better prompt you to add additional questions" +msgstr "" + +#: ../../../CHANGELOG.rst:509 +msgid "1.2.0 (Foldex)" +msgstr "" + +#: ../../../CHANGELOG.rst:510 +msgid "*Release date: 15 February 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:512 +msgid "Changed the core workflow by splitting display- and motion- related activities into separate pages to simplify each stage of running a round" +msgstr "" + +#: ../../../CHANGELOG.rst:513 +msgid "Added support for Docker-based installations to make local/offline installations much more simple" +msgstr "" + +#: ../../../CHANGELOG.rst:514 +msgid "Added a \"Tabbykitten\" version of Tabbycat that can be deployed to Heroku without a needing a credit/debit card" +msgstr "" + +#: ../../../CHANGELOG.rst:515 +msgid "Added button to load a demo tournament on the 'New Tournament' page so it is easier to test-run Tabbycat" +msgstr "" + +#: ../../../CHANGELOG.rst:516 +msgid "Changed venue groups to be separate to venue constraint categories" +msgstr "" + +#: ../../../CHANGELOG.rst:517 +msgid "Modified the licence to clarify that donations are required for some tournaments and added a more explicit donations link and explanation page" +msgstr "" + +#: ../../../CHANGELOG.rst:518 +msgid "Added information about autosave status to the adjudicator allocations page" +msgstr "" + +#: ../../../CHANGELOG.rst:519 +msgid "Added configurable side names so that tournaments can use labels like \"Proposition\"/\"Opposition\" instead of \"Affirmative\"/\"Negative\"" +msgstr "" + +#: ../../../CHANGELOG.rst:520 +msgid "Started work on basic infrastructure for translations" +msgstr "" + +#: ../../../CHANGELOG.rst:524 +msgid "1.1.7" +msgstr "" + +#: ../../../CHANGELOG.rst:525 +msgid "*Release date: 31 January 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:527 +msgid "Yet more minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:528 +msgid "The auto-allocation UI will now detail your minimum rating setting better" +msgstr "" + +#: ../../../CHANGELOG.rst:529 +msgid "Added guidance on database backups to documentation" +msgstr "" + +#: ../../../CHANGELOG.rst:533 +msgid "1.1.6" +msgstr "" + +#: ../../../CHANGELOG.rst:534 +msgid "*Release date: 19 January 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:536 +msgid "A number of minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:537 +msgid "Added basic infrastructure for creating tabbycat translations" +msgstr "" + +#: ../../../CHANGELOG.rst:541 +msgid "1.1.5" +msgstr "" + +#: ../../../CHANGELOG.rst:542 +msgid "*Release date: 12 January 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:544 +msgid "A number of minor bug fixes and improvements to documentation" +msgstr "" + +#: ../../../CHANGELOG.rst:548 +msgid "1.1.4" +msgstr "" + +#: ../../../CHANGELOG.rst:549 +msgid "*Release date: 25 November 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:551 +msgid "Redesigned the footer area to better describe Tabbycat and to promote donations and related projects" +msgstr "" + +#: ../../../CHANGELOG.rst:552 +msgid "Slight tweaks to the site homepage and main menus to better accommodate the login/log out links" +msgstr "" + +#: ../../../CHANGELOG.rst:553 +msgid "A few minor bug fixes and improvements to error reporting" +msgstr "" + +#: ../../../CHANGELOG.rst:557 +msgid "1.1.3" +msgstr "" + +#: ../../../CHANGELOG.rst:558 +msgid "*Release date: 15 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:560 +msgid "Fixed bug affecting some migrations from earlier versions" +msgstr "" + +#: ../../../CHANGELOG.rst:561 +msgid "Made latest results show question mark rather than crash if a team is missing" +msgstr "" + +#: ../../../CHANGELOG.rst:562 +msgid "Fixed bug affecting the ability to save motions" +msgstr "" + +#: ../../../CHANGELOG.rst:563 +msgid "Fixed bug preventing draw flags from being displayed" +msgstr "" + +#: ../../../CHANGELOG.rst:567 +msgid "1.1.2" +msgstr "" + +#: ../../../CHANGELOG.rst:568 +msgid "*Release date: 14 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:570 +msgid "Allow panels with even number of adjudicators (with warnings), by giving chair the casting vote" +msgstr "" + +#: ../../../CHANGELOG.rst:571 +msgid "Removed defunct person check-in, which hasn't been used since 2010" +msgstr "" + +#: ../../../CHANGELOG.rst:572 +msgid "Collapsed availability database models into a single model with Django content types" +msgstr "" + +#: ../../../CHANGELOG.rst:573 +msgid "Collapsed optional fields in action log entries into a single generic field using Django content types" +msgstr "" + +#: ../../../CHANGELOG.rst:574 +msgid "Added better warnings when attempting to create an elimination round draw with fewer than two teams" +msgstr "" + +#: ../../../CHANGELOG.rst:575 +msgid "Added warnings in Edit Database view when editing debate teams" +msgstr "" + +#: ../../../CHANGELOG.rst:576 +msgid "Renamed \"AIDA pre-2015\" break rule to \"AIDA 1996\"" +msgstr "" + +#: ../../../CHANGELOG.rst:580 +msgid "1.1.1" +msgstr "" + +#: ../../../CHANGELOG.rst:581 +msgid "*Release date: 8 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:583 +msgid "Fixed a bug where the team standings and team tab would crash when some emoji were not set" +msgstr "" + +#: ../../../CHANGELOG.rst:587 +msgid "1.1.0 (Egyptian Mau)" +msgstr "" + +#: ../../../CHANGELOG.rst:588 +msgid "*Release date: 3 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:590 +msgid "Added support for the United Asian Debating Championships style" +msgstr "" + +#: ../../../CHANGELOG.rst:591 +msgid "Added support for the World Schools Debating Championships style" +msgstr "" + +#: ../../../CHANGELOG.rst:592 +msgid "Made Windows 8+ Emoji more colourful" +msgstr "" + +#: ../../../CHANGELOG.rst:593 +msgid "Fixed an incompatability between Vue and IE 10-11 which caused tables to not render" +msgstr "" + +#: ../../../CHANGELOG.rst:594 +msgid "Minor bug fixes and dependency updates" +msgstr "" + +#: ../../../CHANGELOG.rst:598 +msgid "1.0.1" +msgstr "" + +#: ../../../CHANGELOG.rst:599 +msgid "*Release date: 19 August 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:601 +msgid "Fixed a minor bug with the visual importer affecting similarly named institutions" +msgstr "" + +#: ../../../CHANGELOG.rst:602 +msgid "Fixed error message when user tries to auto-allocate adjudicators on unconfirmed or released draw" +msgstr "" + +#: ../../../CHANGELOG.rst:603 +msgid "Minor docs edits" +msgstr "" + +#: ../../../CHANGELOG.rst:607 +msgid "1.0.0 (Devon Rex)" +msgstr "" + +#: ../../../CHANGELOG.rst:608 +msgid "*Release date: 16 August 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:613 +msgid "Redesigned and redeveloped adjudicator allocation page" +msgstr "" + +#: ../../../CHANGELOG.rst:611 +msgid "Redesigned interface, featuring clearer displays of conflict and diversity information" +msgstr "" + +#: ../../../CHANGELOG.rst:612 +msgid "Changes to importances and panels are now automatically saved" +msgstr "" + +#: ../../../CHANGELOG.rst:613 +msgid "Added debate \"liveness\" to help identify critical rooms—many thanks to Thevesh Theva" +msgstr "" + +#: ../../../CHANGELOG.rst:614 +msgid "Panel score calculations performed live to show strength of voting majorities" +msgstr "" + +#: ../../../CHANGELOG.rst:616 +msgid "New features" +msgstr "" + +#: ../../../CHANGELOG.rst:616 +msgid "Added record pages for teams and adjudicators" +msgstr "" + +#: ../../../CHANGELOG.rst:617 +msgid "Added a diversity tab to display demographic information about participants and scoring" +msgstr "" + +#: ../../../CHANGELOG.rst:619 +msgid "Significant general improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:619 +msgid "Shifted most table rendering to Vue.js to improve performance and design" +msgstr "" + +#: ../../../CHANGELOG.rst:620 +msgid "Drastically reduced number of SQL queries in large tables, *e.g.* draw, results, tab" +msgstr "" + +#: ../../../CHANGELOG.rst:624 +msgid "Break round management" +msgstr "" + +#: ../../../CHANGELOG.rst:622 +msgid "Completed support for break round draws" +msgstr "" + +#: ../../../CHANGELOG.rst:623 +msgid "Simplified procedure for adding remarks to teams and updating break" +msgstr "" + +#: ../../../CHANGELOG.rst:624 +msgid "Reworked break generation code to be class-based, to improve future extensibility" +msgstr "" + +#: ../../../CHANGELOG.rst:625 +msgid "Added support for break qualification rules: AIDA Australs, AIDA Easters, WADL" +msgstr "" + +#: ../../../CHANGELOG.rst:628 +msgid "Feedback" +msgstr "" + +#: ../../../CHANGELOG.rst:627 +msgid "Changed Boolean fields in AdjudicatorFeedbackQuestion to reflect what they actually do" +msgstr "" + +#: ../../../CHANGELOG.rst:628 +msgid "Changed \"panellist feedback enabled\" option to \"feedback paths\", a choice of three options" +msgstr "" + +#: ../../../CHANGELOG.rst:630 +msgid "Dropped \"/t/\" from tournament URLs and moved \"/admin/\" to \"/database/\", with 301 redirects" +msgstr "" + +#: ../../../CHANGELOG.rst:631 +msgid "Added basic code linting to the continuous integration tests" +msgstr "" + +#: ../../../CHANGELOG.rst:632 +msgid "Many other small bug fixes, refactors, optimisations, and documentation updates" +msgstr "" + +#: ../../../CHANGELOG.rst:636 +msgid "0.9.0 (Chartreux)" +msgstr "" + +#: ../../../CHANGELOG.rst:637 +msgid "*Release date: 13 June 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:639 +msgid "Added a beta implementation of the break rounds workflow" +msgstr "" + +#: ../../../CHANGELOG.rst:640 +msgid "Added venue constraints, to allow participants or divisions to preferentially be given venues from predefined groups" +msgstr "" + +#: ../../../CHANGELOG.rst:641 +msgid "Added a button to regenerate draws" +msgstr "" + +#: ../../../CHANGELOG.rst:642 +msgid "Refactored speaker standings implementation to match team standings implementation" +msgstr "" + +#: ../../../CHANGELOG.rst:643 +msgid "New standings metrics, draw methods, and interface settings for running small tournaments and division-based tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:644 +msgid "Improved support for multiple tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:645 +msgid "Improved user-facing error messages in some scenarios" +msgstr "" + +#: ../../../CHANGELOG.rst:646 +msgid "Most frontend dependencies now handled by Bower" +msgstr "" + +#: ../../../CHANGELOG.rst:647 +msgid "Static file compilation now handled by Gulp" +msgstr "" + +#: ../../../CHANGELOG.rst:648 ../../../CHANGELOG.rst:660 +msgid "Various bug fixes, optimisations, and documentation edits" +msgstr "" + +#: ../../../CHANGELOG.rst:652 +msgid "0.8.3" +msgstr "" + +#: ../../../CHANGELOG.rst:653 +msgid "*Release date: 4 April 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:655 +msgid "Restored and reworking printing functionality for scoresheets/feedback" +msgstr "" + +#: ../../../CHANGELOG.rst:656 +msgid "Restored Edit Venues and Edit Matchups on the draw pages" +msgstr "" + +#: ../../../CHANGELOG.rst:657 +msgid "Reworked tournament data importers to use csv.DictReader, so that column order in files doesn't matter" +msgstr "" + +#: ../../../CHANGELOG.rst:658 +msgid "Improved dashboard and feedback graphs" +msgstr "" + +#: ../../../CHANGELOG.rst:659 +msgid "Add separate pro speakers tab" +msgstr "" + +#: ../../../CHANGELOG.rst:664 +msgid "0.8.2" +msgstr "" + +#: ../../../CHANGELOG.rst:665 +msgid "*Release date: 20 March 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:667 +msgid "Fixed issue where scores from individual ballots would be deleted when any other panel in the round was edited" +msgstr "" + +#: ../../../CHANGELOG.rst:668 +msgid "Fixed issue where page crashes for URLs with \"tab\" in it but that aren't recognized tab pages" +msgstr "" + +#: ../../../CHANGELOG.rst:672 +msgid "0.8.1" +msgstr "" + +#: ../../../CHANGELOG.rst:673 +msgid "*Release date: 15 March 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:675 +msgid "Fixed a bug where editing a Team in the admin section could cause an error" +msgstr "" + +#: ../../../CHANGELOG.rst:676 +msgid "Added instructions on how to account for speakers speaking twice to docs" +msgstr "" + +#: ../../../CHANGELOG.rst:677 +msgid "Venues Importer wont show VenueGroup import info unless that option is enabled" +msgstr "" + +#: ../../../CHANGELOG.rst:681 +msgid "0.8.0 (Bengal)" +msgstr "" + +#: ../../../CHANGELOG.rst:682 +msgid "*Release date: 29 February 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:684 +msgid "Upgraded to Python 3.4, dropped support for Python 2" +msgstr "" + +#: ../../../CHANGELOG.rst:685 +msgid "Restructured directories and, as a consequence, changed database schema" +msgstr "" + +#: ../../../CHANGELOG.rst:686 +msgid "Added Django migrations to the release (they were previously generated by the user)" +msgstr "" + +#: ../../../CHANGELOG.rst:687 +msgid "Migrated documentation to `Read The Docs `_" +msgstr "" + +#: ../../../CHANGELOG.rst:688 +msgid "New user interface design and workflow" +msgstr "" + +#: ../../../CHANGELOG.rst:689 +msgid "Overhauled tournament preferences to use `django-dynamic-preferences `_" +msgstr "" + +#: ../../../CHANGELOG.rst:690 +msgid "Added new visual data importer" +msgstr "" + +#: ../../../CHANGELOG.rst:691 +msgid "Improved flexibility of team standings rules" +msgstr "" + +#: ../../../CHANGELOG.rst:692 +msgid "Moved data utility scripts to Django management commands" +msgstr "" + +#: ../../../CHANGELOG.rst:693 +msgid "Changed emoji to Unicode characters" +msgstr "" + +#: ../../../CHANGELOG.rst:694 +msgid "Various other fixes and refinements" +msgstr "" + +#: ../../../CHANGELOG.rst:698 +msgid "0.7.0 (Abyssinian)" +msgstr "" + +#: ../../../CHANGELOG.rst:699 +msgid "*Release date: 31 July 2015*" +msgstr "" + +#: ../../../CHANGELOG.rst:701 +msgid "Support for multiple tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:702 +msgid "Improved and extensible tournament data importer" +msgstr "" + +#: ../../../CHANGELOG.rst:703 +msgid "Display gender, region, and break category in adjudicator allocation" +msgstr "" + +#: ../../../CHANGELOG.rst:704 +msgid "New views for online adjudicator feedback" +msgstr "" + +#: ../../../CHANGELOG.rst:705 +msgid "Customisable adjudicator feedback forms" +msgstr "" + +#: ../../../CHANGELOG.rst:706 +msgid "Randomised URLs for public submission" +msgstr "" + +#: ../../../CHANGELOG.rst:707 +msgid "Customisable break categories" +msgstr "" + +#: ../../../CHANGELOG.rst:708 +msgid "Computerised break generation (break round draws not supported)" +msgstr "" + +#: ../../../CHANGELOG.rst:709 +msgid "Lots of fixes, interface touch-ups and performance enhancements" +msgstr "" + +#: ../../../CHANGELOG.rst:710 +msgid "Now requires Django 1.8 (and other package upgrades)" +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/about/contributing.po b/docs/locale/bg/LC_MESSAGES/about/contributing.po new file mode 100644 index 00000000000..60aa4d3ee53 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/about/contributing.po @@ -0,0 +1,352 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:16\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/contributing.po\n" +"X-Crowdin-File-ID: 1263\n" +"Language: bg_BG\n" + +#: ../../../CONTRIBUTING.rst:3 +msgid "Contributing" +msgstr "" + +#: ../../../CONTRIBUTING.rst:5 +msgid "Contributions are welcome, and are greatly appreciated! Every little bit helps, and credit will be given. While at its core Tabbycat is a software project, you do not need to know how to code or use Git in order to help. We welcome feedback and ideas based on your tabbing experience and appreciate suggestions or proposals for how to improve the wording, translation, and design of our interface and documentation." +msgstr "" + +#: ../../../CONTRIBUTING.rst:7 +msgid "Feel free to `join our Facebook group `_ if you have any questions about how to get started." +msgstr "" + +#: ../../../CONTRIBUTING.rst:10 +msgid "Feedback and ideas" +msgstr "" + +#: ../../../CONTRIBUTING.rst:12 +msgid "These can be added as issues in the `GitHub repository `_; posts in our `Facebook group `_; or as an :ref:`email to the developers `." +msgstr "" + +#: ../../../CONTRIBUTING.rst:15 +msgid "Bug reports" +msgstr "" + +#: ../../../CONTRIBUTING.rst:17 +msgid "Please report bugs by opening a new issue in our `GitHub repository `_. It is most helpful if you can include:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:19 +msgid "How Tabbycat was installed (on Heroku, locally on macOS, `etc.`)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:20 +msgid "Any details about your tournament and setup that might be helpful in troubleshooting" +msgstr "" + +#: ../../../CONTRIBUTING.rst:21 +msgid "Detailed steps for how to reproduce the bug" +msgstr "" + +#: ../../../CONTRIBUTING.rst:24 +msgid "Getting started with development" +msgstr "" + +#: ../../../CONTRIBUTING.rst:26 +msgid "To easily test your changes to Tabbycat you probably want a working :ref:`local install ` (without using Docker)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:27 +msgid "Please submit pull requests for features and bug fixes against `develop` (but not `master`)." +msgstr "" + +#: ../../../CONTRIBUTING.rst:28 +msgid "We broadly use the `git-flow workflow `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:29 +msgid "We use Django's testing tools — adding unit tests to new features is greatly appreciated" +msgstr "" + +#: ../../../CONTRIBUTING.rst:31 +msgid "A number of our tests use `Selenium `_ and `ChromeDriver `_ to simulate in-browser functionality. They will fail if you do not have the Chrome browser and ChromeDriver installed." +msgstr "" + +#: ../../../CONTRIBUTING.rst:33 +msgid "A number of extra dependencies are required for running tests, linting, and serving the documentation. These can be installed with::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:37 +msgid "Our ``package.json`` provides a convenience command that runs a standard set of development tools simultaneously, such as the Django server and the automatic recompilation with live injecting of javascript and CSS. Once you have set ``USE_WEBPACK_SERVER=True`` in your ``settings_local.py`` you can then run this with::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:42 +msgid "Generating test data" +msgstr "" + +#: ../../../CONTRIBUTING.rst:44 +msgid "There are management commands to help developers quickly generate data for use in testing, including results and feedback. A list of all commands can be found from ``dj help``, but the most useful in this context are:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:46 +msgid "``dj importtournament ( minimal8team | australs24team | bp88team )``, which imports participant data for the 8-team (``minimal8team``), 24-team Australs (``australs24team``) and 88-team BP (``bp88team``) demonstration tournaments respectively." +msgstr "" + +#: ../../../CONTRIBUTING.rst:47 +msgid "``dj simulaterounds ROUND [ROUND ROUND ...]``, which simulates all of the rounds specified, generating a draw, an adjudicator allocation and a complete set of random results (but not feedback)." +msgstr "" + +#: ../../../CONTRIBUTING.rst:48 +msgid "``dj generatefeedback ROUND [ROUND ROUND ...]``, which randomly generates feedback for all existing debates in the specified rounds." +msgstr "" + +#: ../../../CONTRIBUTING.rst:49 +msgid "``dj generateresults ROUND [ROUND ROUND ...]``, which randomly generates results for all existing debates in the specified rounds. (You don't need to run this if you ran ``simulaterounds``, because that already does it.)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:51 +msgid "Rounds can be specified by sequence number (``seq``) or abbreviation. You can find more information about each of them by adding ``--help`` after the command name." +msgstr "" + +#: ../../../CONTRIBUTING.rst:54 +msgid "Database schema changes" +msgstr "" + +#: ../../../CONTRIBUTING.rst:56 +msgid "When adding new features, it may be necessary to modify the database schema to support these new additions. After the changes are made, the migration files made by ``python manage.py makemigrations`` must also be committed. The migration files should also contain methods fill the new fields based on existing data if possible." +msgstr "" + +#: ../../../CONTRIBUTING.rst:58 +msgid "Fixture files (found under ``data/fixtures/``) may also need to be updated, which can be done by running the ``migrate_fixtures.py`` script under a unmigrated database, then committing the result. ::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:64 +msgid "Style guide" +msgstr "" + +#: ../../../CONTRIBUTING.rst:66 +msgid "For the front end interface design there is a style guide available at \"/style/\" once a tournament has been setup." +msgstr "" + +#: ../../../CONTRIBUTING.rst:68 +msgid "For python code, we use `flake8 `_ to check for a non-strict series of style rules. Warnings will trigger a Travis CI build to fail. The entire codebase can be checked by using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:72 +msgid "For stylesheets, we use `stylelint `_. The relevant code can be checked by using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:76 +msgid "For javascript, we use `eslint `_ to enforce the `standardJS `_ style and the standard recommendation of the vue plugin for eslint. The relevant code can be checked by using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:81 +msgid "Versioning convention" +msgstr "" + +#: ../../../CONTRIBUTING.rst:83 +msgid "Our convention is to increment the minor version whenever we add new functionality, and to increment the major version whenever:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:85 +msgid "the database can't be migrated forwards using ``python manage.py migrate --no-input``, or" +msgstr "" + +#: ../../../CONTRIBUTING.rst:86 +msgid "there is a major change to how the tournament workflow goes, or" +msgstr "" + +#: ../../../CONTRIBUTING.rst:87 +msgid "we make some other change that is, in our opinion, significant enough to warrant a milestone." +msgstr "" + +#: ../../../CONTRIBUTING.rst:89 +msgid "We write `data migrations `_ to allow existing systems to be upgraded easily. However, we don't always support backward database migrations. Our expectation is that long-lived installations keep up with our latest version." +msgstr "" + +#: ../../../CONTRIBUTING.rst:91 +msgid "One day, we hope to have a public API in place to facilitate the integration with other debating tournament software, like registration or adjudicator feedback systems. If and when that happens, we'll probably revise this convention to be more in line with `Semantic Versioning `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:93 +msgid "Starting from version 0.7.0, we use cat breeds as the code names for major versions." +msgstr "" + +#: ../../../CONTRIBUTING.rst:96 +msgid "Documentation" +msgstr "" + +#: ../../../CONTRIBUTING.rst:98 +msgid "Documentation is created using `Sphinx `_ and hosted at `Read The Docs `_. Pushes to ``develop`` will update the *latest* documentation set, while pushes to ``master`` will update the *stable* documentation set." +msgstr "" + +#: ../../../CONTRIBUTING.rst:100 +msgid "To preview the documentation locally, install the development dependencies and then start the server::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:104 +msgid "You should then be able to preview the docs at `127.0.0.1:7999 `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:107 +msgid "Project structure" +msgstr "" + +#: ../../../CONTRIBUTING.rst:109 +msgid "``bin`` contains a number of convenience scripts for starting/stopping Docker, and the webserver/asset pipeline." +msgstr "" + +#: ../../../CONTRIBUTING.rst:110 +msgid "``data`` contains the sample data sets and fixtures used to setup demo tournaments and in automated tests respectively" +msgstr "" + +#: ../../../CONTRIBUTING.rst:111 +msgid "``docs`` contains our document source files and images (although some are linked from the root directory)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:115 +msgid "``tabbycat`` is the main directory containing the Django project" +msgstr "" + +#: ../../../CONTRIBUTING.rst:113 +msgid "``locale`` contains translation strings for shared templates (others are in respective app directories)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:114 +msgid "``templates`` contains shared html templates, stylesheets, javascript source files, and Vue.js components/mixins." +msgstr "" + +#: ../../../CONTRIBUTING.rst:115 +msgid "``utils`` contains shared utilities" +msgstr "" + +#: ../../../CONTRIBUTING.rst:116 +msgid "All other folders are the Django apps that contain specific views, models, and templates for functions such as ``draw`` generation/display, or recording ``results``. Each has sub-folders for tests and templates." +msgstr "" + +#: ../../../CONTRIBUTING.rst:117 +msgid "In the root directory there are a number of files defining our python and javascript dependencies, core configuration files, and key documents like the ``README``" +msgstr "" + +#: ../../../CONTRIBUTING.rst:120 +msgid "Internationalization/Localization" +msgstr "" + +#: ../../../CONTRIBUTING.rst:122 +msgid "The `gettext `_ framework is used to enable the translation of strings in Python files and Django templates. Backend in this context signifies these types of files." +msgstr "" + +#: ../../../CONTRIBUTING.rst:124 +msgid "The backend's translation files can be updated from the ``tabbycat`` directory using one or more of the supporting language codes (see settings.py)::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:128 +msgid "To do more than one language, just specify ``-l`` multiple times, _e.g._ ``-les -lar``." +msgstr "" + +#: ../../../CONTRIBUTING.rst:130 +msgid "These can then be compiled using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:134 +msgid "As it stands Heroku needs the .mo files pre-compiled (see `issue in Heroku Python buildpack `_, so these are committed to Git. Note that the English (``en``) language files should not be compiled; their sole purpose is to provide a source language for `Crowdin `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:136 +msgid "Strings defined in Vue files must similarily be marked with ``gettext`` but must be added manually to ``tabbycat/locale/LANGUAGE_CODE/djangojs.po``, for each language supported. These can then compiled to javascript bundles using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:141 +msgid "These are then also committed to git to save users needing to run `compilejsi18n` during setup. The resulting files are then bundled as part of the npm build task. Updating these translations in development (live-reload) requires the use of the ``cp-i18n`` npm task." +msgstr "" + +#: ../../../CONTRIBUTING.rst:144 +msgid "Release checklist" +msgstr "" + +#: ../../../CONTRIBUTING.rst:146 +msgid "Check that all migrations have been generated and committed into Git" +msgstr "" + +#: ../../../CONTRIBUTING.rst:147 +msgid "Merge translations from the Crowdin pull request and compile messages" +msgstr "" + +#: ../../../CONTRIBUTING.rst:148 +msgid "Bump version number in ``docs/conf.py``" +msgstr "" + +#: ../../../CONTRIBUTING.rst:149 +msgid "Bump version number and (if applicable) codename in ``tabbycat/settings/core.py``" +msgstr "" + +#: ../../../CONTRIBUTING.rst:150 +msgid "Update the main ``CHANGELOG.rst`` file (including release date)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:155 +msgid "Check the major current deployment options, including:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:152 +msgid "The ``deploy_heroku.py`` script" +msgstr "" + +#: ../../../CONTRIBUTING.rst:153 +msgid "The Tabbykitten version" +msgstr "" + +#: ../../../CONTRIBUTING.rst:154 +msgid "Docker (macOS, Windows 10*) and Docker Toolbox (Windows 10 Home) methods" +msgstr "" + +#: ../../../CONTRIBUTING.rst:155 +msgid "Using Bash and Powershell on Windows" +msgstr "" + +#: ../../../CONTRIBUTING.rst:156 +msgid "Using Terminal on macOS (at least test out a fresh install of the npm/pip dependencies)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:157 +msgid "Check that the last Travis CI build passed and run the full local test suite (this will include the Selenium tests that are not on Travis)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:158 +msgid "Shift remaining issues from the Github Milestone" +msgstr "" + +#: ../../../CONTRIBUTING.rst:159 +msgid "Create and finish the release branch as per git-flow" +msgstr "" + +#: ../../../CONTRIBUTING.rst:160 +msgid "Ensure the tag is correct (``vX.Y.Z``) and published to GitHub" +msgstr "" + +#: ../../../CONTRIBUTING.rst:161 +msgid "Back-merge ``master`` to the ``kitten`` branch" +msgstr "" + +#: ../../../CONTRIBUTING.rst:162 +msgid "Back-merge ``develop`` to the in-progress feature branches" +msgstr "" + +#: ../../../CONTRIBUTING.rst:163 +msgid "Issue a formal release with change notes on GitHub" +msgstr "" + +#: ../../../CONTRIBUTING.rst:164 +msgid "Post change notes on the Facebook page/group" +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/about/licence.po b/docs/locale/bg/LC_MESSAGES/about/licence.po new file mode 100644 index 00000000000..a9b495d54a1 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/about/licence.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:16\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/licence.po\n" +"X-Crowdin-File-ID: 1265\n" +"Language: bg_BG\n" + +#: ../../../LICENSE.rst:3 +msgid "Licence Information" +msgstr "" + +#: ../../../LICENSE.rst:5 +msgid "We haven't released Tabbycat under an open-source licence, so there is no formal and general right to use this software. Nonetheless, you're welcome to freely use Tabbycat to help run a debating tournament if it is a not-for-profit and not-for-fundraising activity. A voluntary donation of A$1 (Australian dollar) per team would be greatly appreciated, and would help us meet costs and justify our ongoing work and support for Tabbycat users. (A donation link is in the footer of your Tabbycat site.)" +msgstr "" + +#: ../../../LICENSE.rst:8 +msgid "Use at for-profit or fundraising tournaments" +msgstr "" + +#: ../../../LICENSE.rst:10 +msgid "If you use Tabbycat at a tournament where any individual or organisation is making a profit or raising funds (other than to cover the direct costs of the tournament), you or your tournament **must** make a donation of A$1 (Australian dollar) per team to the Tabbycat maintenance team, as outlined in each tournament’s donation page (the link is in the footer of your Tabbycat site). This includes instances where organisations run tournaments partly as fundraising activities and applies even if the organisation itself is a non-profit." +msgstr "" + +#: ../../../LICENSE.rst:12 +msgid "While we suggest that non-profit, non-fundraising tournaments budget for a donation of A$1 per team, it is not required in order for such tournaments to use Tabbycat." +msgstr "" + +#: ../../../LICENSE.rst:15 +msgid "Modifications to and redistributions of Tabbycat" +msgstr "" + +#: ../../../LICENSE.rst:17 +msgid "We grant you permission to modify and/or redistribute Tabbycat, provided that" +msgstr "" + +#: ../../../LICENSE.rst:19 +msgid "you do not receive any payment for this modification and/or redistribution," +msgstr "" + +#: ../../../LICENSE.rst:20 +msgid "if you modify Tabbycat, you add prominent notices stating that you modified it," +msgstr "" + +#: ../../../LICENSE.rst:21 +msgid "all references and functionality relating to donations are kept intact, and" +msgstr "" + +#: ../../../LICENSE.rst:22 +msgid "this licence page and all attributions of authorship are included as-is." +msgstr "" + +#: ../../../LICENSE.rst:24 +msgid "Modifying Tabbycat for payment, or using a version of Tabbycat that has been modified for payment, is strictly prohibited without our express permission." +msgstr "" + +#: ../../../LICENSE.rst:26 +msgid "If you use a version of Tabbycat that has been modified by you or a third party to run a for-profit or fundraising tournament, the abovementioned donation of A$1 per team is still required." +msgstr "" + +#: ../../../LICENSE.rst:29 +msgid "Disclaimer of warranty and liability" +msgstr "" + +#: ../../../LICENSE.rst:31 +msgid "We work on this software in our spare time and make it available for not-for-profit use in the hope that it will benefit the debating community. **It is provided \"as is\", without any warranty of any kind, express or implied, including without limitation any warranties of merchantability and fitness for a particular purpose, and we disclaim all legal liability. By using Tabbycat, you agree that none of its contributors will be held liable for any loss or claim arising directly or indirectly from using the software, or for any loss or claim otherwise in connection with the software.**" +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/about/support.po b/docs/locale/bg/LC_MESSAGES/about/support.po new file mode 100644 index 00000000000..73bd0dbb0b7 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/about/support.po @@ -0,0 +1,56 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:16\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/support.po\n" +"X-Crowdin-File-ID: 1267\n" +"Language: bg_BG\n" + +#: ../../about/support.rst:3 +msgid "Support" +msgstr "" + +#: ../../about/support.rst:5 +msgid "There are a number of ways to report bugs, ask for help, or submit feedback." +msgstr "" + +#: ../../about/support.rst:8 +msgid "Facebook" +msgstr "" + +#: ../../about/support.rst:10 +msgid "`Our Facebook group `_ is a good place to ask for help. It's also a good place to keep up with new releases and participate in more general discussions of features and ideas." +msgstr "" + +#: ../../about/support.rst:13 +msgid "GitHub" +msgstr "" + +#: ../../about/support.rst:15 +msgid "Adding an issue to our `GitHub repository `_ is a great way to let us know about bugs or writeup suggestions for how to improve Tabbycat. Pull requests are also encouraged!" +msgstr "" + +#: ../../about/support.rst:17 +msgid "When submitting bugs or reporting errors please let us know your site address (if installed online) or operating system (if local) along with a complete description of the problem along with any error messages." +msgstr "" + +#: ../../about/support.rst:20 +msgid "Email" +msgstr "" + +#: ../../about/support.rst:22 +msgid "Feel free to :ref:`contact the maintainers directly ` if you are not able to access Facebook or GitHub." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/about/tournament-history.po b/docs/locale/bg/LC_MESSAGES/about/tournament-history.po new file mode 100644 index 00000000000..45af9270fb4 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/about/tournament-history.po @@ -0,0 +1,248 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:16\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/tournament-history.po\n" +"X-Crowdin-File-ID: 1335\n" +"Language: bg_BG\n" + +#: ../../about/tournament-history.rst:3 +msgid "Tournament History" +msgstr "" + +#: ../../about/tournament-history.rst:5 +msgid "A partial list of major national and international tournaments (that we know of) which have used Tabbycat." +msgstr "" + +#: ../../about/tournament-history.rst:8 +msgid "2017" +msgstr "" + +#: ../../about/tournament-history.rst:10 +msgid "`APU Philosophy CHallenge `_" +msgstr "" + +#: ../../about/tournament-history.rst:11 +msgid "`ANU Spring IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:12 +msgid "`Australian British Parliamentary Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:13 +msgid "`Australasian Wom*ns Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:14 +msgid "Asia World Schools Debating Championship" +msgstr "" + +#: ../../about/tournament-history.rst:15 +msgid "`Asia British Parliamentary Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:16 +msgid "`Borneo British Parliamentary Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:17 +msgid "`Canadian British Parliamentary Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:18 +msgid "`Cambridge Asian Schools BP Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:19 +msgid "Cambodia United Asian Debating Championship" +msgstr "" + +#: ../../about/tournament-history.rst:20 +msgid "`China British Parliamentary Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:21 +msgid "`Japan British Parliamentary Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:22 +msgid "`Kings College London IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:23 +msgid "`Kuala Lumpur Open Challenge `_" +msgstr "" + +#: ../../about/tournament-history.rst:24 +msgid "`KPU Pro Ams `_" +msgstr "" + +#: ../../about/tournament-history.rst:25 +msgid "`Malaysian National Intervarsity Debating Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:26 +msgid "`Melbourne Mini `_" +msgstr "" + +#: ../../about/tournament-history.rst:27 +msgid "`New Zealand Easters 2017 `_" +msgstr "" + +#: ../../about/tournament-history.rst:28 +msgid "`New Zealand British Parliamentary Debating Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:29 +msgid "`North East Asia Open `_" +msgstr "" + +#: ../../about/tournament-history.rst:30 +msgid "`Swords Mini-Gong `_" +msgstr "" + +#: ../../about/tournament-history.rst:31 +msgid "`Shanghai Asian Schools British Parliamentary Debate Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:32 +msgid "`UCD Law Society IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:33 +msgid "`UCD Vice President's Cup `_" +msgstr "" + +#: ../../about/tournament-history.rst:34 +msgid "`UQ Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:35 +msgid "`UT MARA Open `_" +msgstr "" + +#: ../../about/tournament-history.rst:36 +msgid "`Victoria Cup IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:37 +msgid "`Western Sydney BP Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:38 +msgid "`Wollongong Easters `_" +msgstr "" + +#: ../../about/tournament-history.rst:39 +msgid "`Yale IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:42 +msgid "2016" +msgstr "" + +#: ../../about/tournament-history.rst:44 +msgid "`Sydney Easters `_" +msgstr "" + +#: ../../about/tournament-history.rst:45 +msgid "`Joynt Scroll 2016 `_" +msgstr "" + +#: ../../about/tournament-history.rst:46 +msgid "`Malaysia Debate Open 2016 `_" +msgstr "" + +#: ../../about/tournament-history.rst:47 +msgid "`New Zealand Easters 2016 `_" +msgstr "" + +#: ../../about/tournament-history.rst:48 +msgid "`Perth Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:49 +msgid "`Thailand United Asian Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:50 ../../about/tournament-history.rst:61 +msgid "The National Law School Debate" +msgstr "" + +#: ../../about/tournament-history.rst:51 +msgid "The Khazak National Schools Debating Championship" +msgstr "" + +#: ../../about/tournament-history.rst:54 +msgid "2015" +msgstr "" + +#: ../../about/tournament-history.rst:56 +msgid "`Bali United Asian Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:57 +msgid "`Daejeon Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:58 +msgid "`Joynt Scroll `_" +msgstr "" + +#: ../../about/tournament-history.rst:59 +msgid "`Malaysia Debate Open 2015 `_" +msgstr "" + +#: ../../about/tournament-history.rst:60 +msgid "`New Zealand Easters 2015 `_" +msgstr "" + +#: ../../about/tournament-history.rst:62 +msgid "`UNSW/UTS Easters `_" +msgstr "" + +#: ../../about/tournament-history.rst:65 +msgid "2014" +msgstr "" + +#: ../../about/tournament-history.rst:67 +msgid "`Joynt Scroll 2014 `_" +msgstr "" + +#: ../../about/tournament-history.rst:68 +msgid "NTU United Asian Debating Championships" +msgstr "" + +#: ../../about/tournament-history.rst:69 +msgid "`Otago Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:72 +msgid "2012" +msgstr "" + +#: ../../about/tournament-history.rst:74 +msgid "Wellington Australs" +msgstr "" + +#: ../../about/tournament-history.rst:77 +msgid "2010" +msgstr "" + +#: ../../about/tournament-history.rst:79 +msgid "Auckland Australs" +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/features/adjudicator-allocation.po b/docs/locale/bg/LC_MESSAGES/features/adjudicator-allocation.po new file mode 100644 index 00000000000..2b058cd11f9 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/features/adjudicator-allocation.po @@ -0,0 +1,160 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:16\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-allocation.po\n" +"X-Crowdin-File-ID: 1271\n" +"Language: bg_BG\n" + +#: ../../features/adjudicator-allocation.rst:5 +msgid "Adjudicator Allocation" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:7 +msgid "The adjudicator allocation screen offers the ability to automatically generate an allocation and/or allow you to create or edit an allocation manually. This interface is somewhat complex as it attempts to provide all of the information needed to inform allocation while also providing a number of automatic and manual tools for the allocation process itself." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:10 +msgid "Assigning Debate Priority" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:12 +msgid "For tournaments with more than a few debates you generally want to begin the allocation process by applying a priority value to your debates. A debate's priority value is used by the automatic adjudicator allocator (or the preformed panel indicator) to match the strongest panels to the debates that need them most." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:16 +msgid "The prioritise button in the top-left allows you to assign a priority value automatically based on a debate's bracket or its 'liveness'. Remember that in early rounds there are usually not enough results for the liveness of each debate to be distinct and that Tabbycat measures liveness based on the sum of all live break categories — a debate can have more liveness points than it has teams if there are teams that are live in multiple categories." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:18 +msgid "The automatic prioritiser never uses the 'highest' priority value so that you can easily use this to highlight the debates that need the strongest panels without needing to redistribute the priority of other debates." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:20 +msgid "Regardless of whether you automatically assign priority, there are sliders to the left of each team that can be used to manually specify priority. These are usually used to override the automatic priority of a debate if that matchup needs and especially strong/weak/mediocre panel for reasons that are not reflected in its bracket/liveness." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:24 +msgid "If each debate's priority is the same, the automatic adjudicator will fall-back on using the debate's bracket as a substitute for priority. Thus, you can skip the prioritisation process (or only prioritise the most/least important debates) if you want a relatively even spread of panellists (e.g. during Round 1)." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:27 +msgid "Automatic Adjudicator Allocation" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:29 +msgid "Once you are happy with your priorities you can begin assigning adjudicators. This also has an (optional) automatic process that will create panels for you. In creating these panels automatically, the allocator will:" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:31 +msgid "Avoid creating 'hard' conflicts (i.e. personal or institutional clashes) between adjudicators and teams while also trying to avoid 'soft' conflicts (i.e. avoiding an adjudicator seeing the same team again)." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:32 +msgid "Form panels whose relative average voting score matches the relative priority you assigned to each debate." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:33 +msgid "Allocate trainees (unless disabled or none are under the threshold) to panels (allocated first to the highest-strength panels)." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:34 +msgid "Violate the above intents in cases where there are inescapable constraints — e.g. if there are too many soft or hard conflicts to avoid creating panels that do not trigger them." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:36 +msgid "Remember that Tabbycat will only automatically allocate adjudicators that have been marked as available for this round." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:38 +msgid "To begin this process, click the *Allocate* button in the top-left. If you have :ref:`formed preformed panels ` for this round, the modal will first ask whether you want to assign adjudicators using those panels; otherwise the modal will contain a number of options that can be used to control the allocation. In general, the *minimum feedback score* value is the most important setting to consider as it determines the threshold needed for adjudicators to not be allocated as trainees." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:42 +msgid "Once you click *Auto-Allocate* the modal should disappear and your panels should appear. At large tournaments, and in the later rounds, it is not unheard of for this process to take a minute or longer." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:44 +msgid "You can re-run the automatic allocation process on top of an existing allocation. Thus it is worth tweaking your priorities or allocation settings if the allocation does not seem optimal to you. Also note that the allocation process is not deterministic — if you rerun it the panels will be different." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:46 +msgid "Once your adjudicators have been allocated you can drag and drop them on to different panels. You can also drag and drop them to the 'unused area' (the gray bar at the bottom of the page) if you wish to store them temporarily or remove them from the draw. Dropping an adjudicator into the chair position will 'swap' that adjudicator into the previous position of the new chair." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:49 +msgid "Saving, Live Updates, and Sharing" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:51 +msgid "Changes to your panels save automatically and you can exit the allocation page whenever you wish." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:53 +msgid "In addition, the allocation pages maintain a 'live' connection to the server that shows updates made by other users who are viewing/using the same page. That is to say, if two people on two computers are both viewing the allocation page they should see each other's changes in real-time. This allows you to 'distribute' the task of allocation across individual people (rather than sharing a screen/projector) if desired." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:55 +msgid "It is possible to have users 'undo' or 'overwrite' each others changes despite this live system, e.g. if both users drag and adjudicator somewhere at the same time." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:57 +msgid "If you are dividing the task of allocation across multiple people, the *Sharding* system can help by allowing individuals to limit their view of the draw. The use case here is usually to divide the draw up into mutually-exclusive subsets so that individuals (or groups) of the adjudication core can focus on creating panels across the draw in parallel." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:61 +msgid "To activate sharding, click the small icon to the right of the \"Allocate\" button. This then presents a number of options for how the draw is divide up into distinct sets. If you want to ensure that each person opens a completely distinct set of the draw, you will need to coordinate the options that each user selects here. They will need to set the **same** options for *Shard Mix*, *Shard Split* and *Shard Sort* but select a **different** *Open* option (i.e. opt-in to viewing a different shard from the other users). The ability to exit a sharded view is available in the same dialogue." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:64 +msgid "In-Place Highlights" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:66 +msgid "Adjudicators and teams may have borders of varying colors. These borders indicate that there is a clash — soft or hard — within a debate and highlights the teams/adjudicators that have triggered this. There is a key for these colors available at the top of the page — e.g. orange means *institutional conflict* while blue means *this adjudicator has seen this adjudicator/team before*." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:70 +msgid "In general, you want to be on the lookout for red borders ('hard conflicts') and for teams with orange borders (institutional conflicts). Blue borders on teams/adjudicators and orange borders between adjudicators are usually of lesser concern." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:72 +msgid "There are two 'special' types of highlight — a gray background in the chair position (no chair) or in the panellist position (the panel is not an odd-size). Adjudicators may also have a black background if they have not been marked as available." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:75 +msgid "Hover Highlights" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:77 +msgid "When you hover over an adjudicator or team, they will take on a purple background and other adjudicators or teams may suddenly have different colored backgrounds. These indicate the conflicts that this team/adjudicator has with those other teams/adjudicators. By showing this information you can avoid swapping that adjudicator into a new debate which they have a conflict with." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:81 +msgid "When you hover over an adjudicator or team the top-most area of the screen will show additional information about them, such as all of their previous institutions, their conflicts, their break category, their team members, their region, and who they saw in the last few rounds." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:84 +msgid "Toggle Highlights" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:86 +msgid "In the top-right of the interface are a number of toggles that changes the color of adjudicators and teams to more easily check specific types of information. For example, selecting the gender toggle will color-code teams and adjudicators with the gender that has been recorded in Tabbycat. Note that when a toggle is active, the color key will update to show the meaning of these new colors." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:90 +msgid "When finalising an adjudication you may want to ensure you have turned off any toggle highlights — often they make it more difficult to see the border colors that indicate conflicts." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/features/adjudicator-feedback.po b/docs/locale/bg/LC_MESSAGES/features/adjudicator-feedback.po new file mode 100644 index 00000000000..82c305ee9e3 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/features/adjudicator-feedback.po @@ -0,0 +1,258 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:16\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-feedback.po\n" +"X-Crowdin-File-ID: 1273\n" +"Language: bg_BG\n" + +#: ../../features/adjudicator-feedback.rst:5 +msgid "Adjudicator Feedback" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:7 +msgid "You can set the questions that are used on adjudicator feedback forms. The only field that is permanently there is the ``score`` field, which is an overall score assessing the adjudicator. All other questions (including a generic comments section) must be defined if you want them to be on the form." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:9 +msgid "Currently, there are two methods of setting questions:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:11 +msgid "Through the :ref:`edit database area `. Go to **Setup** > **Edit Database**, then click **Change** next to *Adjudicator feedback questions*. You can add questions here." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:14 +msgid "Using the :ref:`importtournament command `." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:16 +msgid "Most of what you need to know is explained in help text in the edit database area. (Even if you're using ``importtournament``, you might find the field descriptions in the edit database area helpful.) Some more details are here." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:20 +msgid "Answer types and options" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:23 +msgid "Type" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:23 +msgid "Relevant options" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:23 +msgid "Appearance" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:25 +msgid "**checkbox**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:25 +#: ../../features/adjudicator-feedback.rst:27 +#: ../../features/adjudicator-feedback.rst:35 +#: ../../features/adjudicator-feedback.rst:37 +msgid "\\-" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:27 +msgid "**yes/no (dropdown)**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:29 +msgid "**integer (textbox)**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:29 +#: ../../features/adjudicator-feedback.rst:31 +#: ../../features/adjudicator-feedback.rst:33 +msgid "min_value, max_value" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:31 +msgid "**integer scale**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:33 +msgid "**float**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:35 +msgid "**text**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:37 +msgid "**long text**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:39 +msgid "**select one**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:39 +#: ../../features/adjudicator-feedback.rst:41 +msgid "choices" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:41 +msgid "**select multiple**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:44 +msgid "Options:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:46 +msgid "**min_value** and **max_value** specify the minimum and maximum allowable values in the field. Mandatory for \"integer scale\" types and optional for \"integer (textbox)\" and \"float\" types." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:47 +msgid "**choices** is used with \"select one\" and \"select multiple\" types, and is a ``//``-delimited list of possible answers, *e.g.* ``biased//clear//concise//rambly//attentive//inattentive``" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:48 +msgid "**required** specifies whether users must fill out the field before clicking \"submit\". This requirement is only enforced on public submission forms. It is not enforced on forms entered by tab room assistants." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:50 +msgid "The exception to this is the \"checkbox\" type. For checkboxes, \"required\" means that the user cannot submit the form unless the box is checked. Think of it like an \"I agree to the terms\" checkbox. This isn't a deliberate design decision—it's just a quirk of how checkboxes work on web forms." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:53 +msgid "Want another answer type?" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:55 +msgid "We don't really intend to add any further complexity to the built-in feedback system. If the above answer types don't cover your needs, we suggest using a third-party feedback system. You might be able to adapt `SurveyMonkey `_, `Google Forms `_ or `Qualtrics `_ to your needs." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:60 +msgid "We may be persuaded to make an exception if the new question type you have in mind is easy to add: that is, if it is straightforward to implement using standard web page elements and fits into the existing questionnaire framework (see :ref:`feedback-questionnaires` below). If you think there is such a case, please contact us using the contact details in the :ref:`authors` section." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:69 +msgid "Different questionnaires" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:71 +msgid "Tabbycat allows you to specify two questionnaires: one for feedback submitted by teams, and one for feedback submitted by adjudicators. You must specify in each question whether to include the question in each questionnaire." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:75 +msgid "**from_team**, if checked, includes the question in feedback submitted by teams" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:77 +msgid "**from_adj**, if checked, includes the question in feedback submitted by adjudicators" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:81 +msgid "Who gives feedback on whom?" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:82 +msgid "Tabbycat allows for three choices for which adjudicators give feedback on which other adjudicators:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:85 +msgid "Chairs give feedback on panellists and trainees" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:86 +msgid "Chairs give feedback on panellists and trainees, and panellists give feedback on chairs" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:88 +msgid "All adjudicators, including trainees, give feedback on all other adjudicators they have adjudicated with" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:91 +msgid "You can set this in the **feedback paths** option under *Setup* > *Configuration* > *Feedback*. Your choice affects each of the following:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:94 +msgid "The options presented to adjudicators in the online feedback form" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:95 +msgid "The printable feedback forms" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:96 +msgid "The submissions expected when calculating feedback progress and highlighting missing feedback" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:99 +msgid "The feedback paths option only affects feedback from adjudicators. Teams are always assumed to give feedback on the orallist, and they are encouraged to do so through hints on the online and printable feedback forms, but there is nothing technically preventing them from submitting feedback from any adjudicator on their panel." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:105 +msgid "Advanced users" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:108 +msgid "If you need a different setting, you need to edit the source code. Specifically, you should edit the function ``expected_feedback_targets`` in tabbycat/adjfeedback/utils.py." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:112 +msgid "Unless we can be convinced that they are very common, we don't intend to add any further choices to the feedback paths option. If your needs are specific enough that you need to differ from the available settings, they are probably also beyond what is sensible for a built-in feedback system, and we recommend using a third-party feedback system instead." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:119 +msgid "How is an adjudicator's score determined?" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:121 +msgid "For the purpose of the automated allocation, an adjudicator's overall score is a function of their base score, the current round's feedback weight, and their average feedback score. This number is calculated according to the following formula:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:126 +msgid "\\textrm{score} = (1-w)\\times\\textrm{base score} + w\\times\\textrm{average feedback score}" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:130 +msgid "where :math:`w` is the feedback weight for the round. Note that because the feedback score is averaged across all pieces of feedback (rather than on a per-round total) rounds in which a person receives feedback from many sources (say from all teams and all panellists) could impact their average score much more than a round in which they only receive feedback from one or two sources." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:132 +msgid "Under this formula, each round's feedback weight can be used to determine the relative influence of the base score vs feedback in determining the overall score. As an example, say that an adjudicator received 5.0 as their base score, but their average feedback rating has thus far been 2.0. If the current rounds' feedback weight is set to 0.75, then their overall score would be 2.75. If the current round's feedback weight is set to 0.5 their score would be 3.5. If the weight was 0, their score will always be their base score; if the weight was 1 it will always be their average feedback value." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:141 +msgid "To change the weight of a round you will need to go to the Edit Database area, open the round in question, and change its *Feedback weight* value. It is common to set rounds with a low feedback weight value early on in the tournament (when feedback is scant) and to increase the feedback weight as the tournament progresses." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:143 +msgid "A participant's base score can, in conjunction with feedback weight, also be used as a manual override for an adjudicator's overall ranking. At several tournaments, adjudication cores have set every round's feedback weight to 0, and manually adjusted an adjudicator's base score in response to feedback they have received and reviewed. In this way complete control over every adjudicator's overall score can be exerted." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:145 +msgid "If feedback from trainee adjudicators is enabled, any scores that they submit in their feedback are not counted towards that adjudicator's overall score." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:148 +msgid "Ignoring/Discarding feedback" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:150 +msgid "There are some cases where feedback should be discarded or ignored, but there are some differences between the two. Discarded feedback is mostly due to having another piece of feedback that supersedes the discarded ones. Ignored feedback is different as it still counts the affected feedback as submitted, just inconsequential, ignored in the adjudicator's score calculation." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:152 +msgid "Feedback can be marked as discarded in the database view, under the ``confirmed`` field. It can also be marked as ignored in the same view. Controls to reverse these designations are also available there. To mark feedback as ignored, an option is available in the administrator's and assistant's feedback adding form, as well in the form of a toggle link at the bottom of each card." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/features/backups.po b/docs/locale/bg/LC_MESSAGES/features/backups.po new file mode 100644 index 00000000000..a92158ca613 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/features/backups.po @@ -0,0 +1,120 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:16\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/backups.po\n" +"X-Crowdin-File-ID: 1275\n" +"Language: bg_BG\n" + +#: ../../features/backups.rst:5 +msgid "Backups" +msgstr "" + +#: ../../features/backups.rst:7 +msgid "Tabbycat doesn't provide an in-built backup system; instead you should create copies of your database directly. Heroku provides a very good backup utility for all sites hosted on Heroku which makes this easy, and for Heroku-based Tabbycat sites, we strongly recommend it." +msgstr "" + +#: ../../features/backups.rst:12 +msgid "You should **always** back up the database before deleting *any* data while in the Edit Database area, because deleting data cannot be undone. It is also a good idea to back up the database before doing anything in the Edit Database area, unless you're very familiar and confident with editing the Tabbycat database directly." +msgstr "" + +#: ../../features/backups.rst:18 +msgid "You may, as a matter of standard practice at large tournaments, wish to back up the database twice per round: Once just after you've generated the draw and allocated adjudicators, and once just after you've finished entering results." +msgstr "" + +#: ../../features/backups.rst:22 +msgid "If you're using an online version of Tabbycat, it's a good idea to download the backups. While it's extremely rare to lose internet access or have an outage in a critical web service (*i.e.*, Heroku), having a local copy of your backups allows you to :ref:`restore your tab to a local installation ` if this ever happens." +msgstr "" + +#: ../../features/backups.rst:29 +msgid "Installations on Heroku" +msgstr "" + +#: ../../features/backups.rst:31 +msgid "Heroku provides a utility to easily back up and restore the entire site database." +msgstr "" + +#: ../../features/backups.rst:35 +msgid "If you don't have the Heroku CLI" +msgstr "" + +#: ../../features/backups.rst:36 +msgid "You can capture backups from the Heroku Dashboard:" +msgstr "" + +#: ../../features/backups.rst:38 +msgid "Go to the `Heroku Dashboard `_ and click on your app." +msgstr "" + +#: ../../features/backups.rst:40 +msgid "Under *Installed add-ons*, go to **Heroku Postgres**." +msgstr "" + +#: ../../features/backups.rst:41 +msgid "Scroll down, and click on the **Capture Backup** button." +msgstr "" + +#: ../../features/backups.rst:42 +msgid "Once the capture has finished, a **Download** button will be available." +msgstr "" + +#: ../../features/backups.rst:44 +msgid "You can't restore a backup without the Heroku Command Line Interface (CLI), so if you end up needing your backup, you'll need to install the `Heroku CLI `_, and then follow the instructions below." +msgstr "" + +#: ../../features/backups.rst:50 +msgid "If you have the Heroku CLI" +msgstr "" + +#: ../../features/backups.rst:52 +msgid "The best guide to backing up databases is the `Heroku Dev Center's PGBackups guide `_." +msgstr "" + +#: ../../features/backups.rst:55 +msgid "To capture a backup::" +msgstr "" + +#: ../../features/backups.rst:59 +msgid "To download the most recently captured backup::" +msgstr "" + +#: ../../features/backups.rst:63 +msgid "To restore a backup::" +msgstr "" + +#: ../../features/backups.rst:67 +msgid "If you have multiple Tabbycat sites, you'll need to specify which one by adding ``--app mytournamentname`` to the end of the command." +msgstr "" + +#: ../../features/backups.rst:71 +msgid "Local installations" +msgstr "" + +#: ../../features/backups.rst:73 +msgid "There are lots of ways to back up local PostgreSQL databases, but we'd suggest using the `pg_dump `_ and `pg_restore `_ commands." +msgstr "" + +#: ../../features/backups.rst:83 +msgid "Restoring a Heroku backup to a local installation" +msgstr "" + +#: ../../features/backups.rst:85 +msgid "As detailed in the `Heroku Dev Center `_, you can restore a downloaded Heroku backup to a local installation. This might be useful if, say, your internet connection breaks irrecoverably in the middle of a tournament and you need to run offline. Of course, for this to work, you need to have downloaded your backup before your internet connection broke---a good reason to download a copy of your backups as soon as you make them." +msgstr "" + +#: ../../features/backups.rst:92 +msgid "Assuming your download is called ``latest.dump`` (this is the default name), your PostgreSQL username is ``tabbycat``, and you wish to call your local database ``fromheroku`` (if not, replace arguments as appropriate)::" +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/features/breaks.po b/docs/locale/bg/LC_MESSAGES/features/breaks.po new file mode 100644 index 00000000000..bbdcd59f770 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/features/breaks.po @@ -0,0 +1,212 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:15\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/breaks.po\n" +"X-Crowdin-File-ID: 1277\n" +"Language: bg_BG\n" + +#: ../../features/breaks.rst:5 +msgid "Breaks and Break Rounds" +msgstr "" + +#: ../../features/breaks.rst:7 +msgid "In Tabbycat, elimination rounds (sometimes called *outrounds* or the *final series*) are called \"break rounds\", and the qualification of teams to compete in the elimination phase of a tournament is called the \"break\"." +msgstr "" + +#: ../../features/breaks.rst:12 +msgid "About break categories" +msgstr "" + +#: ../../features/breaks.rst:14 +msgid "Tabbycat supports multiple and arbitrarily-named break categories. Most tournaments will have just one category, typically called \"Open\", leading to the grand final. Some tournaments also have restricted-eligibility break categories, for example, for novice teams or teams for whom English is a second language." +msgstr "" + +#: ../../features/breaks.rst:19 +msgid "Having multiple break categories is intended for tournaments where multiple *parallel* elimination phases derive from the *same* preliminary rounds (inrounds). It's not for parallel but distinct competitions---for those, you should create distinct tournaments." +msgstr "" + +#: ../../features/breaks.rst:27 +msgid "Break qualification rules" +msgstr "" + +#: ../../features/breaks.rst:29 +msgid "Tabbycat supports several break qualification rules, and each break category must be configured to use one of them. Most tournaments will use \"Standard\", which is the default." +msgstr "" + +#: ../../features/breaks.rst:38 +msgid "Rule name (string to use in ``importtournament`` CSV files)" +msgstr "" + +#: ../../features/breaks.rst:39 +msgid "Descrption" +msgstr "" + +#: ../../features/breaks.rst:41 +msgid "Standard (``standard``)" +msgstr "" + +#: ../../features/breaks.rst:42 +msgid "The top *n* teams break. This is the default, and most tournaments use this rule." +msgstr "" + +#: ../../features/breaks.rst:45 +msgid "AIDA 1996 (``aida-1996``)" +msgstr "" + +#: ../../features/breaks.rst:46 +msgid "The top *n* teams that are also in the top three teams from their institution break." +msgstr "" + +#: ../../features/breaks.rst:49 +msgid "AIDA 2016 (Australs) (``aida-2016-australs``)" +msgstr "" + +#: ../../features/breaks.rst:50 +msgid "The top *n* teams that fulfil either of these criteria break:" +msgstr "" + +#: ../../features/breaks.rst:53 +msgid "They are in the top *n* teams overall, and in the top three teams from their institution." +msgstr "" + +#: ../../features/breaks.rst:55 +msgid "They have at least as many wins as the *n*\\ th-ranked team, and they are the top team from their institution." +msgstr "" + +#: ../../features/breaks.rst:58 +msgid "If fewer than *n* teams fulfil either criterion, then the best teams not fulfilling the criteria are added to make *n* teams." +msgstr "" + +#: ../../features/breaks.rst:62 +msgid "AIDA 2016 (Easters) (``aida-2016-easters``)" +msgstr "" + +#: ../../features/breaks.rst:63 +msgid "As for AIDA 2016 (Australs), except that if fewer than *n* teams fulfil either criterion, then only the best teams who are in the top three teams from their institution are added to make *n* teams." +msgstr "" + +#: ../../features/breaks.rst:68 +msgid "The break generators are somewhat more complex than described in the above table: among other things, they also handle cases where there is a tie for the last place in the break, and for those break categories marked \"general\", they will show where ineligible teams would have broken, had they been eligible." +msgstr "" + +#: ../../features/breaks.rst:75 +msgid "Setting up break categories and rounds" +msgstr "" + +#: ../../features/breaks.rst:77 +msgid "For each break category in your tournament, you need to do two things:" +msgstr "" + +#: ../../features/breaks.rst:79 +msgid "Create (and name) a break category" +msgstr "" + +#: ../../features/breaks.rst:80 +msgid "Create break rounds for the category" +msgstr "" + +#: ../../features/breaks.rst:81 +msgid "Set the eligibility of teams to compete in the category" +msgstr "" + +#: ../../features/breaks.rst:83 +msgid "If you only have one break category (open) and you create your tournament using the \"Create New Tournament\" page, simply enter the number of teams in the break (*e.g.*, 8 if you're breaking to quarterfinals). Tabbycat will create the break category and break rounds for you. For any further break categories, you'll need to go to the **Breaks** item in the left-hand menu for a particular tournament and then click **Break Categories**. Fill out the forms for the number of new break categories and save. Rounds will be created automatically. You'll still need to set the eligibility of teams though, as in (3) below." +msgstr "" + +#: ../../features/breaks.rst:92 +msgid "If you create your tournament using the `importtournament` command or in **Edit Database**, you'll need to do all three steps above yourself. You may also want to edit the break rounds (2) to change their names." +msgstr "" + +#: ../../features/breaks.rst:97 +msgid "1. Creating break categories" +msgstr "" + +#: ../../features/breaks.rst:99 +msgid "If using the `importtournament` command, there is an example file, *break_categories.csv*, that you can copy and adjust. If using **Edit Database**, add categories under **Break Qualification > Break categories**." +msgstr "" + +#: ../../features/breaks.rst:103 +msgid "Most of the fields are self-explanatory or described on the Edit Database form, except for one: \"rule\", which sets the break qualification rule. Permissible values are described in :ref:`breakqual-rules` above. If using `importtournament`, be sure to use the correct string (in brackets in the table). The rule defaults to \"Standard\" (``standard``)." +msgstr "" + +#: ../../features/breaks.rst:109 +msgid "The \"institution cap\" field was removed in Tabbycat 1.0. All Australs break qualification rules are now hard-coded to a cap of three teams per institution." +msgstr "" + +#: ../../features/breaks.rst:114 +msgid "2. Creating break rounds" +msgstr "" + +#: ../../features/breaks.rst:116 +msgid "You should create a round for every break round you intend to hold, including it in *rounds.csv* if using `importtournament`, or adding them under **Tournaments > Rounds** if using **Edit Database**. Be careful to set the following fields correctly:" +msgstr "" + +#: ../../features/breaks.rst:121 +msgid "*Break category* must be set to the relevant break category." +msgstr "" + +#: ../../features/breaks.rst:122 +msgid "*Stage* and *draw type* must both be set to \"Elimination\"." +msgstr "" + +#: ../../features/breaks.rst:125 +msgid "3. Setting break eligibility" +msgstr "" + +#: ../../features/breaks.rst:127 +msgid "Once a break category has been created it will not have any teams eligible for it, even if it was marked as \"Is general\". To edit the eligibility of teams for any break round go to the **Breaks** item in the left-hand menu for a particular tournament and then click **Team Eligiblity**." +msgstr "" + +#: ../../features/breaks.rst:132 +msgid "Here you can select \"all\" or \"none\" to toggle all team eligiblities or edit them using the tick boxes. Once you **save** it should return you to the main break page which will display the number of teams marked eligible." +msgstr "" + +#: ../../features/breaks.rst:136 +msgid "Adjudicators can be marked as \"breaking\" on the **Feedback** page; clicking **Adjudicators** on the breaks page will take you straight there." +msgstr "" + +#: ../../features/breaks.rst:140 +msgid "Generating the break" +msgstr "" + +#: ../../features/breaks.rst:142 +msgid "Unlike team or speaker standings, each category's break (and the break ranks of teams) are not determined automatically and updated continuously. Instead each can be generated (and regenerated) as desired." +msgstr "" + +#: ../../features/breaks.rst:146 +msgid "To do so go to the **Breaks** item in the left-hand menu and then click the white button that corresponds to the break category you'd like to determine the rankings for. When prompted, select **Generate the break for all categories** to display the list of breaking teams." +msgstr "" + +#: ../../features/breaks.rst:151 +msgid "From this page you can update the breaking teams list for this break category (or all categories) as well as view and edit 'remarks' that account for cases in which a team may not break (such as being capped or losing a coin toss)." +msgstr "" + +#: ../../features/breaks.rst:155 +msgid "Please double-check the generated break before announcing or releasing it. Although the break generation code is designed to handle edge cases, we don't test the code for such cases." +msgstr "" + +#: ../../features/breaks.rst:160 +msgid "Creating draws for break rounds" +msgstr "" + +#: ../../features/breaks.rst:162 +msgid "Creating a draw for a break round proceeds as normal, except that the team availability process is skipped. Instead, when you visit the availability page for that round it will have automatically determined which teams should be debating based upon the determined break for that category. Once a draw has been generated it will then use the relevant break ranks to create the matchups (ie 1st-breaking vs 16th-breaking, 2nd vs 15th, *etc.*). Subsequent break rounds will then also automatically determine matchups based on the previous round's results and room ranks." +msgstr "" + +#: ../../features/breaks.rst:171 +msgid "If the \"break size\" of a break category is not a power of 2, it will treat the first break round as a partial-elimination draw and only create a draw for the teams not skipping the partial-elimination round. Subsequent break rounds will then process as described above." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/features/check-ins.po b/docs/locale/bg/LC_MESSAGES/features/check-ins.po new file mode 100644 index 00000000000..ac156421273 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/features/check-ins.po @@ -0,0 +1,136 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:15\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/check-ins.po\n" +"X-Crowdin-File-ID: 1279\n" +"Language: bg_BG\n" + +#: ../../features/check-ins.rst:5 +msgid "Check-Ins" +msgstr "" + +#: ../../features/check-ins.rst:7 +msgid "A 'Check-in' is a record of a speaker, adjudicator, venue, or ballot's status at a particular point in time. Typically these are used at large tournaments to reliably track who is or is not present for the first round of each day." +msgstr "" + +#: ../../features/check-ins.rst:9 +msgid "Check-ins serve a similar purpose to the :ref:`availability ` system. However availabilities are tied to a particular round rather than to a particular time — they are generally used to record instances where you know ahead of time whether a person should or should not be included in a draw. In contrast, check-ins are useful for when you *don't* know ahead of time whether a person will be able to be put into the draw and so want to be able to confirm their presence with a high degree of confidence. That said the two systems interact — the standard availability pages allow you to easily set all adjudicators or teams who have checked-in as available for a given round." +msgstr "" + +#: ../../features/check-ins.rst:12 +msgid "Check-In Identifiers" +msgstr "" + +#: ../../features/check-ins.rst:14 +msgid "Check-ins are associated with a 'identifier' — a number that is unique to each speaker and adjudicator. To generate these numbers go to the *Identifiers* section under the Check-Ins menu. From here you generate identifiers for Speakers, Adjudicators, and Venues as needed. Note also that Identifiers can be manually added or edited in the *Edit Database* area if necessary." +msgstr "" + +#: ../../features/check-ins.rst:18 +msgid "Once this number has been generated it can be transformed into a barcode so that it can be easily included on tournament badges or otherwise printed and disbursed. On the same *Identifiers* page you can use the *View barcodes* option to open up a page that lists all the barcodes for the speakers, adjudicators, or venues." +msgstr "" + +#: ../../features/check-ins.rst:22 +msgid "The identifiers for ballots are automatically generated when printing ballots." +msgstr "" + +#: ../../features/check-ins.rst:25 +msgid "Recording Check-Ins" +msgstr "" + +#: ../../features/check-ins.rst:27 +msgid "On the *Scanning* section of Check-ins you can record a particular check-in. This can be done in a few different ways:" +msgstr "" + +#: ../../features/check-ins.rst:29 +msgid "You can type in the Identifier number into the box. Once five numbers have been identified it will automatically issue the check-in and clear the input field for the next number." +msgstr "" + +#: ../../features/check-ins.rst:31 +msgid "If you have purchased barcode scanners and configured them as USB keyboards they should then be compatible with this page: upon page load the cursor should be positioned in the input field, and any scanned barcodes should populate it with the specified number, issue the check-in, and then clear the box for the next scan." +msgstr "" + +#: ../../features/check-ins.rst:33 +msgid "Barcode scanners are probably cheaper than you think. A perfectly serviceable model should be around $20 USD or less although a cursory Google search might at first turn up models that are many times that amount. If you are a curious tab director, or are involved in a tournament with a little spare money, having just one or two around for critical tasks can be highly valuable." +msgstr "" + +#: ../../features/check-ins.rst:35 +msgid "If your device has a (web)cam you can use the Scan Using Camera button. Any barcodes put in front of the camera's video stream will be scanned into the form. A sound will play when a barcode has been identified — so be aware that turning sound on or using headphones can help identify when a scan has been made." +msgstr "" + +#: ../../features/check-ins.rst:39 +msgid "Camera scanning works on most modern browsers although it will only work with Safari 11 or higher (iOS 11+ and macOS 10.13+). Camera scanning may also not work when using a local-installation of Tabbycat in all browsers, *except* Firefox where it seems to. Depending on the quality of your camera barcodes that are less than 4cm wide may not be recognised — ideally barcodes should be at least 5cm if using this method as your main way of checking-in things." +msgstr "" + +#: ../../features/check-ins.rst:41 +msgid "The Check-in status page (described below) allows assistants and administrators to manually check-in particular people or entire institutions without needing to know their identifiers." +msgstr "" + +#: ../../features/check-ins.rst:44 +msgid "The Check-In 'Window'" +msgstr "" + +#: ../../features/check-ins.rst:46 +msgid "Because Check-In events are not explicitly linked to rounds there is essentially a 'window' or time period in which a check-in is still considered valid. The time of this 'window' in hours can be set in *Setup* > *Configuration* > *Data Entry*." +msgstr "" + +#: ../../features/check-ins.rst:48 +msgid "At tournaments the run check-ins during the start of each day the check-in 'window' (i.e. the time before check-ins expire) you can leave this window setting at the default time (12 hours) which should give enough time to distinguish between the first check-ins of that day as compared to the last check-ins of the previous day. At tournaments where you want to run a check-in process at the start of every round you may want to set the time to around 2 hours or something much shorter." +msgstr "" + +#: ../../features/check-ins.rst:51 +msgid "Viewing Check-Ins" +msgstr "" + +#: ../../features/check-ins.rst:53 +msgid "On the *People Statuses* section of Check-ins you can view who has or has not been checked-in. This page will live-update with the latest check-ins so you should be able to leave it open to monitor income attendances." +msgstr "" + +#: ../../features/check-ins.rst:57 +msgid "The blue \"tick\" boxes allow you to manually check-in people and/or entire institutions (for *People*) or venues and/or venue groups (for *Venues*) , without the need to scan their identifiers. This style of check-in is designed for use an auditorium roll-call type situation where you might be running through a list of people to the room or identifying absences on a per-institution basis." +msgstr "" + +#: ../../features/check-ins.rst:59 +msgid "A public version of this check-in status page can be enabled under *Setup* > *Configuration* > *Public Features* which can be useful for allowing people to self-police check-ins and/or validate their check-in worked." +msgstr "" + +#: ../../features/check-ins.rst:62 +msgid "Check-Ins for Ballots" +msgstr "" + +#: ../../features/check-ins.rst:64 +msgid "Ballots can be checked-in to quickly validate which ballots are physically present in the tab room. This can help more quickly identify ballots that are missing. Which ballots have or have not been checked-in will show up on the Results page. Ballots can be scanned using the standard 'Scan Identifiers' page." +msgstr "" + +#: ../../features/check-ins.rst:66 +msgid "Barcodes are automatically assigned and included to ballots when they are printed. Barcodes have no check-in window — any relevant check-in event counts regardless of how long ago it was." +msgstr "" + +#: ../../features/check-ins.rst:69 +msgid "Check-Ins for Venues" +msgstr "" + +#: ../../features/check-ins.rst:71 +msgid "Venues can be checked-in, but what a 'venue check-in' means is a bit more flexible. It might be used to validate which rooms are debate-ready at the start of a day (i.e. unlocked; has a desk) or it could be used during the rounds to record which rooms have returned their ballots." +msgstr "" + +#: ../../features/check-ins.rst:73 +msgid "Venues have a separate check-in window setting to that of people." +msgstr "" + +#: ../../features/check-ins.rst:75 +msgid "Venues have their own Status page (like people) and can be checked-in there manually. Like speakers and adjudicators their barcodes can also be printed off." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/features/data-entry.po b/docs/locale/bg/LC_MESSAGES/features/data-entry.po new file mode 100644 index 00000000000..ab49c795042 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/features/data-entry.po @@ -0,0 +1,168 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:15\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-entry.po\n" +"X-Crowdin-File-ID: 1281\n" +"Language: bg_BG\n" + +#: ../../features/data-entry.rst:5 +msgid "Entering Ballots and Feedback" +msgstr "" + +#: ../../features/data-entry.rst:8 +msgid "Ballot check-in" +msgstr "" + +#: ../../features/data-entry.rst:10 +msgid "For tournaments that require it, there is a \"ballot check-in\" page that can be used to record the arrival of ballots to the tab room. When there's a missing ballot, it can help establish whether the ballot never made it to the tab room, or whether it's probably floating around in the room forgotten. Also, it can help enforce early checks that panels return the correct number of ballots to the room." +msgstr "" + +#: ../../features/data-entry.rst:12 +msgid "To get to the ballot check-in, click the relevant round in the menu of the admin area, and then click \"Results\" and then \"Ballot Check-In\". This requires superuser privileges." +msgstr "" + +#: ../../features/data-entry.rst:14 +msgid "There's no adverse effect from not using the ballot check-in. Data enterers will still be able to enter and confirmed ballots, even if not checked in." +msgstr "" + +#: ../../features/data-entry.rst:18 +msgid "Since the ballot check-in tends to require a dedicated computer or two, it can be worth creating a separate superuser account for ballot check-in, so that it doesn't appear on the action logs as being by a particular person." +msgstr "" + +#: ../../features/data-entry.rst:19 +msgid "Don't forget to provision a computer or two for this if you're planning to use it." +msgstr "" + +#: ../../features/data-entry.rst:20 +msgid "Ballot check-ins can be a bottleneck, so you might decide they're not worth using. Alternatively, you might have multiple computers for this purpose, or you might dedicate a tab room helper to driving the process (since this is probably faster than runners doing the typing in turn)." +msgstr "" + +#: ../../features/data-entry.rst:23 +msgid "Ballot entry" +msgstr "" + +#: ../../features/data-entry.rst:27 +msgid "Most tab rooms run some sort of check system to ensure data is entered accurately. In Tabbycat, this is built into the system, which also helps speed it up." +msgstr "" + +#: ../../features/data-entry.rst:29 +msgid "As a general principle, Tabbycat requires all ballots to be looked at by two people. The first person enters the data from the ballot, and the second person checks it. The second person isn't allowed to modify the data—they either confirm it or reject it, and if they reject it, then the whole process starts again. This is by design: to be confirmed, the *same* data must have been seen by at least two people." +msgstr "" + +#: ../../features/data-entry.rst:31 +msgid "The administrator area does **not** work like this. It's designed to be flexible, so allows you to edit, confirm or unconfirm any ballot at any time. For this reason, you should use the **assistant** area to enter ballots, even if you have a superuser account." +msgstr "" + +#: ../../features/data-entry.rst:35 +msgid "Don't forget to check the totals against the ballot—they're a useful integrity check too." +msgstr "" + +#: ../../features/data-entry.rst:36 +msgid "Don't forget to check the winner against the ballot! If the adjudicator gets it wrong, it's worth asking to clarify." +msgstr "" + +#: ../../features/data-entry.rst:37 +msgid "It can be helpful to think about the room layout to maximize efficiency." +msgstr "" + +#: ../../features/data-entry.rst:38 +msgid "Some tab rooms like to assign some to data entry and some to verification. This isn't really necessary, since Tabbycat doesn't let the same person enter and verify the same ballot. (This is one of many reasons why every person should have their own account.)" +msgstr "" + +#: ../../features/data-entry.rst:39 +msgid "Emails can be configured to be sent to adjudicators as a receipt of their ballot once confirmed." +msgstr "" + +#: ../../features/data-entry.rst:42 +msgid "Duplicate/Swing Speeches" +msgstr "" + +#: ../../features/data-entry.rst:46 +msgid "When entering the ballots there is a toggle label *'Iron' speeches*. When set to \"yes\" this allows you to have the same speaker deliver multiple speeches provided their extra speeches are labelled on the form as 'duplicates'. Typically, most tournaments require that lesser 'iron man' speech is discarded from the tab, which would mean that you would mark the lower speaker of the two scores as the duplicate (note that this may require you to check each score's average across a panel)." +msgstr "" + +#: ../../features/data-entry.rst:48 +msgid "Speeches marked as duplicates are not included in the speaker tab. This means that they can also be used to exclude swing speakers from the tab as needed; even if they do not actually speak twice. To do so, change the name of the swing speaker to be that of an existing team member and ensure that that speech is marked as a duplicate." +msgstr "" + +#: ../../features/data-entry.rst:50 +msgid "There is also an option under **Standings** in the **Configuration** section that specifies the number of debates a speaker can miss before you will not show on the tab. By default there is no limit, but if need be this can be set to hide swing speakers from the final speaker tab." +msgstr "" + +#: ../../features/data-entry.rst:53 +msgid "Feedback entry" +msgstr "" + +#: ../../features/data-entry.rst:57 +msgid "Feedback doesn't have the same verification process as ballots. Feedback that is entered by the tab room is assumed to be confirmed. If feedback is entered multiple times, all copies are retained but only the last one \"counts\" (is considered confirmed)." +msgstr "" + +#: ../../features/data-entry.rst:60 +msgid "Online entry" +msgstr "" + +#: ../../features/data-entry.rst:62 +msgid "There are two methods of allowing ballots and feedback to be submitted online. Both are set in the **Data Entry** page of each tournament's **Configuration** section and can be set independently; both in whether each can be submitted online at all and in which method of online submission are available." +msgstr "" + +#: ../../features/data-entry.rst:68 +msgid "Private URLs" +msgstr "" + +#: ../../features/data-entry.rst:70 +msgid "The first method of data entry is using 'private URLs'. When this setting is enabled you can create a special URL that is unique to a participant. This link contains a number of random characters and is not displayed publicly; it is in effect a secret that only that a specific participant should know. Presuming people do not share these links to others, this provides a means to (relatively) securely identify who is submitting what information. Because Tabbycat knows which participant has which URL it will only allow them to submit feedback/ballots for debates that they were speakers/adjudicators in." +msgstr "" + +#: ../../features/data-entry.rst:72 +msgid "Private URLs should provide more than adequate security for almost all tournaments' purposes, but they aren't foolproof. Anyone with access to the URL for a participant can submit feedback or ballots on their behalf, so it's important that participants not share their URLs. This also means participants need to be careful when submitting from devices they do not own, because the URL will be logged in that device's browser history." +msgstr "" + +#: ../../features/data-entry.rst:74 +msgid "These links must be generated within Tabbycat after the preference is enabled. To do so go to the **Feedback** section and then the **Private URLs** area. Once there you will be prompted to generate those URLs for all participants, which — once generated — will be presented in separate tables (one for teams; one for adjudicators)." +msgstr "" + +#: ../../features/data-entry.rst:78 +msgid "These URLs can then be distributed to each person in a number of ways. There are pages within Tabbycat for printing them out (one URL per page labelled by recipient) or emailing them out (providing participants have been assigned email addresses). In the past tournaments have also used data from this table to send out SMSs by bulk, or distributed them to institutional representatives to disburse." +msgstr "" + +#: ../../features/data-entry.rst:82 +msgid "You can assign email address to participants using the :ref:`importtournament command ` when importing your registration data, or by going to the *Edit Data* area and looking up each Speaker/Adjudicator." +msgstr "" + +#: ../../features/data-entry.rst:83 +msgid "If, after generating the private URLs, you add additional Teams or Adjudicators you can go to the *Edit Database* area , look up each Speaker/Adjudicator, and type in a bunch of random characters as their *Url key* to assign them a private URL." +msgstr "" + +#: ../../features/data-entry.rst:84 +msgid "You can delete the current set of URLs by running this command in a shell on your server (replacing TOURNAMENT_SLUG with the appropriate value): ``python manage.py privateurls delete --tournament TOURNAMENT_SLUG``" +msgstr "" + +#: ../../features/data-entry.rst:89 +msgid "Public URLs" +msgstr "" + +#: ../../features/data-entry.rst:91 +msgid "The second method of data entry is using 'normal URLs'. This essentially means that any users visiting the public version of the site is able to submit a ballot or feedback (as specified by their respective settings). They do so by self-selecting which Team or Adjudicator they are then entering in a form as normal." +msgstr "" + +#: ../../features/data-entry.rst:93 +msgid "This is, rather obviously, not a particularly secure method of data entry — nothing is stopping anyone on the site from entering data as someone else. The data can be checked, verified, and edited as normal by admins however. As such, this method is only recommended for small tournaments where you can trust those present to enter accurate information (or where accuracy is not crucial)." +msgstr "" + +#: ../../features/data-entry.rst:95 +msgid "There is an additional setting to set a 'tournament password' that needs to be submitted to enable the form. It is imagined, that if enabled, this password would only be distributed to tournament participants. However this only helps (at best) prevent non-participants from entering information; the fundamental problem of not verifying who is submitting what information is still present." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/features/data-importers.po b/docs/locale/bg/LC_MESSAGES/features/data-importers.po new file mode 100644 index 00000000000..1e6912f9a68 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/features/data-importers.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:15\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-importers.po\n" +"X-Crowdin-File-ID: 1283\n" +"Language: bg_BG\n" + +#: ../../features/data-importers.rst:5 +msgid "Tournament Data Importers" +msgstr "" + +#: ../../features/data-importers.rst:7 +msgid "This page describes how to write your own tournament data importer. It is aimed at an audience that is familiar with programming in Python, and may be willing to get their head around the Django model if necessary." +msgstr "" + +#: ../../features/data-importers.rst:9 +msgid "The **tournament data importer** is the class that imports data from one or more files (usually CSV files) into the database. A base class ``BaseTournamentDataImporter`` is in `importer/base.py `_. An example of a data importer is in `importer/anorak.py `_." +msgstr "" + +#: ../../features/data-importers.rst:11 +msgid "Todo" +msgstr "" + +#: ../../features/data-importers.rst:11 +msgid "This page is incomplete. If you're finding this information insufficient, please contact Chuan-Zheng using the contact details in the :ref:`authors` section." +msgstr "" + +#: ../../features/data-importers.rst:14 +msgid "Why write your own?" +msgstr "" + +#: ../../features/data-importers.rst:16 +msgid "While Tabbycat has standard import formats, you might find that none of them fit the data that you need to import." +msgstr "" + +#: ../../features/data-importers.rst:18 +msgid "It's not possible to devise a single, universally-convenient import file format. Tabbycat supports way too many permutations of configurations for this to be workable. Instead, we provide the ones that have been useful before and are therefore likely to be useful again—but if your tournament has different needs, you might decide that it's easier to write an importer to conform to you, rather than conform to the importer." +msgstr "" + +#: ../../features/data-importers.rst:20 +msgid "A base importer class abstracts away most of the nitty-gritty of parsing files, allowing new importers to focus on their interpretation with as little code as possible." +msgstr "" + +#: ../../features/data-importers.rst:22 +msgid "To allow new importers to be written with as little code as possible, most of the work is abstracted to the base class. The flipside of this abstraction is that it induces a learning curve." +msgstr "" + +#: ../../features/data-importers.rst:25 +msgid "Basic workflow" +msgstr "" + +#: ../../features/data-importers.rst:27 +msgid "Choose a name. We name importers after items of clothing in alphabetical order (starting at 'Anorak')." +msgstr "" + +#: ../../features/data-importers.rst:28 +msgid "Write a subclass of ``BaseTournamentDataImporter``." +msgstr "" + +#: ../../features/data-importers.rst:29 +msgid "Write the front-end interface. This will probably be a `Django management command `_." +msgstr "" + +#: ../../features/data-importers.rst:32 +msgid "A basic example" +msgstr "" + +#: ../../features/data-importers.rst:34 +msgid "It's easiest to start with an example. Here's a basic importer with just one import method, which imports adjudicators." +msgstr "" + +#: ../../features/data-importers.rst:60 +msgid "Let's break this down. The method ``import_adjudicators()`` takes a single argument, a file object representing the CSV file. Most of the work is passed off to ``self._import()``. This helper method is defined in ``BaseTournamentDataImporter`` and is where most of the intelligence lies." +msgstr "" + +#: ../../features/data-importers.rst:65 +msgid "When called, ``self._import(f, model, interpreter)`` does the following:" +msgstr "" + +#: ../../features/data-importers.rst:67 +msgid "It reads the CSV file using a `csv.DictReader `_. A ``DictReader`` iterates through the CSV file, yielding a dict for each line, whose keys are given by the column header names in the first row of the file." +msgstr "" + +#: ../../features/data-importers.rst:72 +msgid "On each line:" +msgstr "" + +#: ../../features/data-importers.rst:74 +msgid "It passes the dict given by the ``DictReader`` to ``interpreter``. The interpreter modifies the dict (or creates a new one) to prepare it for the model constructor, and returns it." +msgstr "" + +#: ../../features/data-importers.rst:78 +msgid "The dict returned by ``interpreter`` is then passed as keyword arguments to the ``model`` constructor." +msgstr "" + +#: ../../features/data-importers.rst:81 +msgid "So in very simplified form, ``self._import(f, model, interpreter)`` does this:" +msgstr "" + +#: ../../features/data-importers.rst:92 +msgid "(There's a lot more to it than that, but that's the basic idea.)" +msgstr "" + +#: ../../features/data-importers.rst:94 +msgid "A consequence of relying on column headers to identify fields is that the header names in CSV files must match model field names exactly, unless they are deleted by the interpreter using the ``DELETE`` keyword (see below)." +msgstr "" + +#: ../../features/data-importers.rst:100 +msgid "Interpreters" +msgstr "" + +#: ../../features/data-importers.rst:101 +msgid "The main task of an importer, then, is to provide interpreters so that ``self._import`` knows how to interpret the data in a CSV file. An interpreter takes a dict and returns a dict. For example:" +msgstr "" + +#: ../../features/data-importers.rst:113 +msgid "This interpreter does the following:" +msgstr "" + +#: ../../features/data-importers.rst:115 +msgid "Replaces ``line['institution']`` with an Institution object, by looking up the original value by name." +msgstr "" + +#: ../../features/data-importers.rst:117 +msgid "Replaces ``line['gender']`` with a ``Person.GENDER_*`` constant. We'll come back to how this works later." +msgstr "" + +#: ../../features/data-importers.rst:119 +msgid "Adds a new ``line['tournament']`` entry to the dict, being the Tournament object represented by ``self.tournament``, the tournament that was passed to the importer's constructor." +msgstr "" + +#: ../../features/data-importers.rst:122 +msgid "Leaves all other entries in the dict unchanged." +msgstr "" + +#: ../../features/data-importers.rst:124 +msgid "This looks simple enough, but it's very robust. What if a cell in the CSV file is blank, or what if the file omits a column? (For example, some tournaments might not collect information about participant gender, so Tabbycat doesn't require it.) We could deal with these scenarios on a case-by-case basis, but that's cumbersome." +msgstr "" + +#: ../../features/data-importers.rst:130 +msgid "Instead, we provide a ``make_interpreter`` method that returns an interpreter method which, in turn, takes care of all these details. This way, all you have to do is provide the functions that transform fields. So the following is equivalent to the above, but better:" +msgstr "" + +#: ../../features/data-importers.rst:143 +msgid "Notice that we provided a callable in two of these keyword arguments, and a (non-callable) Tournament object to the third. ``make_interpreter`` is smart enough to tell the difference, and treat them differently. What it does with each field depends on (a) whether a value exists in the CSV file and (b) what transformation function was provided, as summarised in the following table:" +msgstr "" + +#: ../../features/data-importers.rst:150 +msgid "Value in CSV file" +msgstr "" + +#: ../../features/data-importers.rst:150 +msgid "Transformation" +msgstr "" + +#: ../../features/data-importers.rst:150 +msgid "Action" +msgstr "" + +#: ../../features/data-importers.rst:152 +msgid "provided and not callable" +msgstr "" + +#: ../../features/data-importers.rst:152 +msgid "populate model field with interpreter value" +msgstr "" + +#: ../../features/data-importers.rst:155 +msgid "does not exist or blank" +msgstr "" + +#: ../../features/data-importers.rst:155 +msgid "callable or not provided" +msgstr "" + +#: ../../features/data-importers.rst:155 +msgid "do not pass to model constructor" +msgstr "" + +#: ../../features/data-importers.rst:158 ../../features/data-importers.rst:161 +msgid "exists and not blank" +msgstr "" + +#: ../../features/data-importers.rst:158 +msgid "callable" +msgstr "" + +#: ../../features/data-importers.rst:158 +msgid "call interpreter on column value, pass result to model constructor" +msgstr "" + +#: ../../features/data-importers.rst:161 +msgid "not provided" +msgstr "" + +#: ../../features/data-importers.rst:161 +msgid "pass column value directly to model constructor" +msgstr "" + +#: ../../features/data-importers.rst:169 +msgid "If a transformation isn't an existing method, you might find `lambda functions `_ useful. For example: ``lambda x: Speaker.objects.get(name=x)``." +msgstr "" + +#: ../../features/data-importers.rst:173 +msgid "You shouldn't check for mandatory fields. If a mandatory field is omitted, the model constructor will throw an error, and ``self._import()`` will catch the error and pass a useful message on to the caller. On the other hand, if it's an optional field in the model, it should optional in the importer, too. Similarly, interpreters generally shouldn't specify defaults; these should be left to model definitions." +msgstr "" + +#: ../../features/data-importers.rst:180 +msgid "You don't need to include interpreter transformations for things like converting strings to integers, floats or booleans. Django converts strings to appropriate values when it instantiates models. So, for example, adding ``test_score=float`` to the above interpreter would be redundant." +msgstr "" + +#: ../../features/data-importers.rst:186 +msgid "More complicated interpreters" +msgstr "" + +#: ../../features/data-importers.rst:188 +msgid "If you have a column in the CSV file that shouldn't be passed to the model constructor, you can tell the interpreter to remove it by using the special ``DELETE`` argument:" +msgstr "" + +#: ../../features/data-importers.rst:199 +msgid "The ``make_interpreter`` can only deal with modifications where each field is modified separately of the others (or not at all). If you want to combine information from multiple fields, you need to write your interpreter the long way (perhaps calling a function returned by ``make_interpreter`` to do some of the work)." +msgstr "" + +#: ../../features/data-importers.rst:205 +msgid "On the other hand, if you don't need to do any transformations involving some sort of object or constant lookup, then you can just omit the ``interpreter`` argument of ``self._lookup()``, and it'll just leave the fields as-is." +msgstr "" + +#: ../../features/data-importers.rst:210 +msgid "Lookup functions" +msgstr "" + +#: ../../features/data-importers.rst:211 +msgid "In the above example, we used a function ``self.lookup_gender`` to convert from the text in the CSV file to a ``Person.GENDER_*`` constant. To make this easier, the importer provides a convenience function to define such lookup functions. Let's look at the relevant lines again:" +msgstr "" + +#: ../../features/data-importers.rst:224 +msgid "This should be a member of your subclass, in our case, ``ExampleTournamentDataImporter``. It generates a function that looks something like:" +msgstr "" + +#: ../../features/data-importers.rst:241 +msgid "The ``make_lookup`` function takes two arguments. The first is a text description of what it's looking up; this is used for the error message if the value in the CSV file isn't recognised. The second is a dict mapping tuples of valid strings to constants." +msgstr "" + +#: ../../features/data-importers.rst:247 +msgid "Debugging output" +msgstr "" + +#: ../../features/data-importers.rst:249 +msgid "The ``BaseTournamentDataImporter`` constructor accepts a ``loglevel`` argument:" +msgstr "" + +#: ../../features/data-importers.rst:255 +msgid "If ``loglevel`` is set to ``logging.DEBUG``, the importer will print information about every instance it creates." +msgstr "" + +#: ../../features/data-importers.rst:258 +msgid "You can also pass in a logger for it to use (instead of the default one) with the ``logger`` argument." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/features/draw-generation-bp.po b/docs/locale/bg/LC_MESSAGES/features/draw-generation-bp.po new file mode 100644 index 00000000000..33348672ff3 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/features/draw-generation-bp.po @@ -0,0 +1,598 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:14\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation-bp.po\n" +"X-Crowdin-File-ID: 1285\n" +"Language: bg_BG\n" + +#: ../../features/draw-generation-bp.rst:5 +msgid "Draw Generation (BP)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:7 +msgid "The draw generator for British Parliamentary tournaments tries to rotate teams through positions by assigning them positions they've been in less often before the current round." +msgstr "" + +#: ../../features/draw-generation-bp.rst:10 +msgid "Summary of options" +msgstr "" + +#: ../../features/draw-generation-bp.rst:12 +msgid "Options are set in the **Configuration** page as described in :ref:`starting a tournament `. Options in `italics` with an asterisk are not WUDC-compliant. The recommended options are shown in **bold**." +msgstr "" + +#: ../../features/draw-generation-bp.rst:19 +msgid "Option" +msgstr "" + +#: ../../features/draw-generation-bp.rst:20 +msgid "Description" +msgstr "" + +#: ../../features/draw-generation-bp.rst:21 +msgid "Allowable values" +msgstr "" + +#: ../../features/draw-generation-bp.rst:22 +msgid ":ref:`Pullup distribution `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:23 +msgid "Where pullup teams get placed" +msgstr "" + +#: ../../features/draw-generation-bp.rst:24 +msgid "**Anywhere in bracket**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:25 +msgid "*All in the same room*\\*" +msgstr "" + +#: ../../features/draw-generation-bp.rst:26 +msgid ":ref:`Position cost `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:27 +msgid "Which cost function to use to indicate which position profiles are preferred" +msgstr "" + +#: ../../features/draw-generation-bp.rst:28 +#: ../../features/draw-generation-bp.rst:179 +msgid "Simple" +msgstr "" + +#: ../../features/draw-generation-bp.rst:29 +msgid "**Rényi entropy**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:30 +#: ../../features/draw-generation-bp.rst:254 +msgid "Population variance" +msgstr "" + +#: ../../features/draw-generation-bp.rst:31 +msgid ":ref:`Rényi order `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:32 +msgid "Order of Rényi entropy" +msgstr "" + +#: ../../features/draw-generation-bp.rst:33 +msgid "Any non-negative number (default: **1**, *i.e.* Shannon entropy)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:34 +msgid ":ref:`Position cost exponent `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:35 +msgid "Degree to which large position imbalances should be prioritised" +msgstr "" + +#: ../../features/draw-generation-bp.rst:36 +msgid "Any non-negative number (default: **4**)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:37 +msgid ":ref:`Assignment method `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:38 +msgid "Algorithm used to assign positions" +msgstr "" + +#: ../../features/draw-generation-bp.rst:39 +msgid "*Hungarian*\\*" +msgstr "" + +#: ../../features/draw-generation-bp.rst:40 +msgid "**Hungarian with preshuffling**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:45 +msgid "The big picture" +msgstr "" + +#: ../../features/draw-generation-bp.rst:47 +msgid "To try to achieve position balance, Tabbycat treats the allocation of teams to debates as an `assignment problem `_. That is, it computes the \"cost\" of assigning each team to each position in each debate, and finds an assignment of all teams to a position in a debate that minimises the total cost (the sum over all teams)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:50 +msgid "A simple example" +msgstr "" + +#: ../../features/draw-generation-bp.rst:52 +msgid "Here's a small example, to illustrate the idea. Say you have a tournament with 16 teams, and you're about to draw round 4. There are sixteen \"places\" in the draw: four positions in each of four rooms. Tabbycat calculates the \"cost\" of putting each team in each place, and puts them in a matrix, like this:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Room" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Top" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Second" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Third" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Bottom" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "Position" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "OG" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "OO" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "CG" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "CO" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +msgid "**A (8)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +#: ../../features/draw-generation-bp.rst:67 +#: ../../features/draw-generation-bp.rst:69 +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:77 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:81 +#: ../../features/draw-generation-bp.rst:83 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:93 +#: ../../features/draw-generation-bp.rst:95 +msgid "16" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +#: ../../features/draw-generation-bp.rst:67 +#: ../../features/draw-generation-bp.rst:69 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:77 +#: ../../features/draw-generation-bp.rst:81 +#: ../../features/draw-generation-bp.rst:83 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:93 +msgid ":q:`0`" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +#: ../../features/draw-generation-bp.rst:67 +#: ../../features/draw-generation-bp.rst:69 +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:77 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:81 +#: ../../features/draw-generation-bp.rst:83 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:93 +#: ../../features/draw-generation-bp.rst:95 +msgid "∞" +msgstr "" + +#: ../../features/draw-generation-bp.rst:67 +msgid "**B (7)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:69 +msgid "**C (7)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:71 +msgid "**D (6)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:95 +msgid "0" +msgstr "" + +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:95 +msgid ":q:`16`" +msgstr "" + +#: ../../features/draw-generation-bp.rst:73 +msgid "**E (6)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:75 +msgid "**F (6)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:77 +msgid "**G (5)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:79 +msgid "**H (5)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:81 +msgid "**I (4)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:83 +msgid "**J (4)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:85 +msgid "**K (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:87 +msgid "**L (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:89 +msgid "**M (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:91 +msgid "**N (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:93 +msgid "**O (1)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:95 +msgid "**P (1)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:98 +msgid "Each \"16\" is the cost of putting a team in a position it's seen once; each \"0\" is the cost of putting a team in the position it hasn't. (Details of how this is calculated are :ref:`below `.) For example, team A (on 8 points) has been in every position except CO. The ∞'s indicate places where the team isn't allowed to go, because the room isn't in their bracket. For example, the three teams on 6 points (D, E, F) can go in either the top or second room, because any of them can be the pullup team." +msgstr "" + +#: ../../features/draw-generation-bp.rst:100 +msgid "The algorithm then chooses entries so that one is selected from each row and one is selected from each column, in a way that minimises the sum of the selected entries. In this case, the selected entries are highlighted in blue. For example, the top room comprises teams E (OG), B (OO), C (CG) and A (CO)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:102 +msgid "Sometimes, particularly in round 4, it simply isn't possible to \"satisfy\" everyone. For example, among the top eight teams, five haven't been in OO, but only two can be accommodated within those brackets. In this case, teams B and G got lucky; there are also many other draws that would have incurred the same total cost." +msgstr "" + +#: ../../features/draw-generation-bp.rst:104 +msgid "More generally, in most cases, there will be many optimal solutions. To randomise the selection among them, Tabbycat (under default settings) randomly permutes the rows and columns of the matrix before starting the assignment algorithm." +msgstr "" + +#: ../../features/draw-generation-bp.rst:107 +msgid "Explanations of options" +msgstr "" + +#: ../../features/draw-generation-bp.rst:112 +msgid "Pullup distribution" +msgstr "" + +#: ../../features/draw-generation-bp.rst:114 +msgid "If the number of teams in a bracket is not a multiple of four, it pulls up teams from the next bracket down. The pullup distribution then governs how those teams are paired into the upper bracket." +msgstr "" + +#: ../../features/draw-generation-bp.rst:116 +msgid "The available options are as follows:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:120 +msgid "**Anywhere in bracket:** The pullup teams are treated as if they were any other team in their new bracket. For example, if there are 17 teams in a 10-point bracket, then the three 9-point teams that get pulled up may be paired anywhere in the 10-point bracket, independently of each other. Chance might put them in the same room, but more likely, they will not all be in the same room, so there will be multiple pullup rooms in the 10-point bracket." +msgstr "" + +#: ../../features/draw-generation-bp.rst:122 +msgid "**All in the same room:** All of the pullup teams will be paired into the same room. This means that there will be at most one pullup room per bracket, effectively creating an \"intermediate bracket\"." +msgstr "" + +#: ../../features/draw-generation-bp.rst:124 +msgid "While it can be argued that the `All in the same room` setting is fairer, it is prohibited by the WUDC constitution. If your tournament follows WUDC rules, you cannot use this setting." +msgstr "" + +#: ../../features/draw-generation-bp.rst:126 +msgid "The teams that get pulled up aren't specifically chosen---they're just assigned as part of the algorithm described :ref:`above `, which optimises for position balance. Tabbycat doesn't support taking anything else into account when choosing pullup teams. (WUDC rules wouldn't allow it, either.)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:131 +msgid "Position cost options" +msgstr "" + +#: ../../features/draw-generation-bp.rst:133 +msgid "The `position cost function` is a function that indicates how \"bad\" it would be if a team were to be allocated a certain position (OG, OO, CG, CO) in a debate. When generating a draw, Tabbycat chooses from among the draws that minimise the sum of the position costs for each team." +msgstr "" + +#: ../../features/draw-generation-bp.rst:135 +msgid "More formally:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:139 +msgid "A `position history` or just `history` :math:`\\mathbf{h}` is a 4-tuple where each element is the number of times a team has already been in the corresponding position. For example, :math:`\\mathbf{h} = (0, 2, 1, 1)` means that a team has been in OO twice, CG and CO once each, and hasn't been in OG." +msgstr "" + +#: ../../features/draw-generation-bp.rst:140 +msgid "A cost function :math:`C(\\mathbf{h},s)` is a function specifying how \"bad\" it would be if a team with position history :math:`\\mathbf{h}` were assigned the position :math:`s` in the next round." +msgstr "" + +#: ../../features/draw-generation-bp.rst:142 +msgid "Tabbycat allows you to choose from a number of different **position cost functions**, as well as a **position cost exponent** :math:`\\beta`. Then, when allocating teams to debates, Tabbycat allocates teams to positions :math:`(s_t, t \\in\\mathcal{T})` to minimise" +msgstr "" + +#: ../../features/draw-generation-bp.rst:144 +msgid "\\sum_{t \\in \\mathcal{T}} [C(\\mathbf{h}_t,s_t)]^\\beta" +msgstr "" + +#: ../../features/draw-generation-bp.rst:148 +msgid "where :math:`\\mathcal{T}` is the set of all teams, :math:`\\mathbf{h}_t` is the position history of team :math:`t` and :math:`s_t` is the position to which team :math:`t` would be allocated." +msgstr "" + +#: ../../features/draw-generation-bp.rst:153 +msgid "Position cost exponent" +msgstr "" + +#: ../../features/draw-generation-bp.rst:155 +msgid "The **position cost exponent** :math:`\\beta` controls how different teams trade off with each other." +msgstr "" + +#: ../../features/draw-generation-bp.rst:159 +msgid "The **larger** :math:`\\beta` is, the more concerned it is with preventing *very* bad situations. That is, it will give more teams some slight unevenness in order to prevent one team from getting a `very` uneven history." +msgstr "" + +#: ../../features/draw-generation-bp.rst:161 +msgid "The **smaller** :math:`\\beta` is, the more concerned it is with preventing *any* unevenness. That is, it will try to keep more teams from being uneven *at all*, at the cost of possibly letting just one team get a very uneven history." +msgstr "" + +#: ../../features/draw-generation-bp.rst:163 +msgid "At the large extreme, as :math:`\\beta\\rightarrow\\infty`, it will do everything it can to minimise the plight of the *worst-off* team, and it won't care for *any* team other than the worst-off." +msgstr "" + +#: ../../features/draw-generation-bp.rst:165 +msgid "At the small extreme, as :math:`\\beta\\rightarrow 0`, it will do everything it can to minimise the number of teams with a non-optimal profile---but if it's impossible to protect a team from sub-optimality, it won't care *how* uneven the unlucky team gets." +msgstr "" + +#: ../../features/draw-generation-bp.rst:167 +msgid "The \"balanced\" approach would be :math:`\\beta = 1`, which just takes the cost function as-is. This doesn't mean that this is the best idea, however---you'd typically want to bias towards preventing very uneven histories a bit more. Most tournaments will probably want :math:`\\beta` to be somewhere between 2 and 5. (Note that :math:`\\beta` need not be an integer.)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:172 +msgid "Position cost functions" +msgstr "" + +#: ../../features/draw-generation-bp.rst:174 +msgid "Tabbycat allows you to choose between three position cost functions :math:`C(\\mathbf{h},s)`: **Simple**, **Rényi entropy** and **Population variance**." +msgstr "" + +#: ../../features/draw-generation-bp.rst:176 +msgid "In the descriptions that follow, :math:`\\mathcal{S} = \\{\\texttt{OG}, \\texttt{OO}, \\texttt{CG}, \\texttt{CO}\\}`, the set of all BP positions." +msgstr "" + +#: ../../features/draw-generation-bp.rst:181 +msgid "The simple cost function :math:`C_\\textrm{simple}(\\mathbf{h},s)` returns the number of times the team has already been in position :math:`s`, less the number of times the team has been in its least frequent position. That is," +msgstr "" + +#: ../../features/draw-generation-bp.rst:183 +msgid "C_\\mathrm{simple}(\\mathbf{h},s) = \\mathbf{h}[s] - \\min_{s' \\in\\mathcal{S}} \\mathbf{h}[s']" +msgstr "" + +#: ../../features/draw-generation-bp.rst:187 +msgid "where :math:`\\mathbf{h}[s]` is the element of :math:`\\mathbf{h}` corresponding to position :math:`s`." +msgstr "" + +#: ../../features/draw-generation-bp.rst:190 +msgid "Rényi entropy" +msgstr "" + +#: ../../features/draw-generation-bp.rst:192 +msgid "Informally speaking, the `Rényi entropy `_ is a measure of the diversity of the positions in a team's history. A history consisting only of one position has *low* entropy, while a history that is perfectly evenly distributed has *high* entropy. The **Rényi entropy cost function** reverses this intuition, so that an even hypothetical history has low cost, while an uneven hypothetical history has high cost." +msgstr "" + +#: ../../features/draw-generation-bp.rst:194 +msgid "The Rényi entropy takes one parameter, known as its *order*, :math:`\\alpha`, which will be further discussed below." +msgstr "" + +#: ../../features/draw-generation-bp.rst:196 +msgid "More formally, the Rényi entropy cost function :math:`C_\\textrm{R\\'enyi}(\\mathbf{h},s)` is defined as" +msgstr "" + +#: ../../features/draw-generation-bp.rst:198 +msgid "C_\\textrm{R\\'enyi}(\\mathbf{h},s) = n_\\mathbf{h} [2 - H_\\alpha(\\hat{p}_{\\mathbf{h},s})]" +msgstr "" + +#: ../../features/draw-generation-bp.rst:202 +msgid "where" +msgstr "" + +#: ../../features/draw-generation-bp.rst:206 +msgid ":math:`n_\\mathbf{h} = \\sum_{s'} \\mathbf{h}[s']` is the number of rounds the team has competed in so far." +msgstr "" + +#: ../../features/draw-generation-bp.rst:207 +msgid ":math:`\\hat{p}_{\\mathbf{h},s}` is the *normalised hypothetical* position history that would arise if a team with history :math:`\\mathbf{h}` were to be allocated position :math:`s` in the next round; that is," +msgstr "" + +#: ../../features/draw-generation-bp.rst:209 +msgid "\\hat{p}_{\\mathbf{h},s}[s'] = \\begin{cases} \\frac{1}{n_\\mathbf{h} + 1} (\\mathbf{h}[s'] + 1), &\\text{ if } s = s', \\\\ \\frac{1}{n_\\mathbf{h} + 1} \\mathbf{h}[s'], &\\text{ if } s \\ne s'. \\end{cases}" +msgstr "" + +#: ../../features/draw-generation-bp.rst:216 +msgid "Note that :math:`\\hat{p}_{\\mathbf{h},s}` is a probability distribution (that is, its elements sum to 1)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:218 +msgid ":math:`H_\\alpha(\\cdot)` is the `Rényi entropy `_ of order :math:`\\alpha` of a probability distribution, defined as" +msgstr "" + +#: ../../features/draw-generation-bp.rst:220 +msgid "H_\\alpha(p) = \\frac{1}{1-\\alpha} \\log_2 \\left( \\sum_{s\\in\\mathcal{S}} (p[s])^\\alpha \\right), \\qquad \\alpha \\ne 1." +msgstr "" + +#: ../../features/draw-generation-bp.rst:224 +msgid "In the special (limiting) case where :math:`\\alpha=1`, it reduces to the `Shannon entropy `_," +msgstr "" + +#: ../../features/draw-generation-bp.rst:226 +msgid "H_1(p) =-\\sum_{s\\in\\mathcal{S}} p[s] \\log_2 p[s]." +msgstr "" + +#: ../../features/draw-generation-bp.rst:230 +msgid "Note that for all :math:`\\alpha`, :math:`0 \\le H_\\alpha(p) \\le \\log_2(4) = 2` (since there are four positions in BP)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:234 +msgid "The **Rényi order** is the parameter :math:`\\alpha` above, and it controls *what it means to be \"even among positions\"* for a team. Note that \"evenness\" is not easily defined. After round 8, which position history is more even: (0, 2, 3, 3) or (1, 1, 1, 5)? The Rényi order allows us to tune this definition." +msgstr "" + +#: ../../features/draw-generation-bp.rst:238 +msgid "The **smaller** :math:`\\alpha` is, the more it cares that teams compete in every position *at least* once, favouring (1, 1, 1, 5) over (0, 2, 3, 3): it's worse to have never OGed, than it is to have COed five times." +msgstr "" + +#: ../../features/draw-generation-bp.rst:240 +msgid "The **larger** :math:`\\alpha` is, the more it cares that teams do not compete in *any* (one) position too many times, favouring (0, 2, 3, 3) over (1, 1, 1, 5): it's worse to have COed five times, than it is to have never OGed." +msgstr "" + +#: ../../features/draw-generation-bp.rst:242 +msgid "At the small extreme, as :math:`\\alpha\\rightarrow0`, it *only* counts how many positions a team has seen at least once, and doesn't care about the distribution among them so long as a team has been in each position once." +msgstr "" + +#: ../../features/draw-generation-bp.rst:244 +msgid "At the large extreme, as :math:`\\alpha\\rightarrow\\infty`, it *only* looks at how many times each team has seen its *most frequent* position, and tries to keep this number even among all teams." +msgstr "" + +#: ../../features/draw-generation-bp.rst:246 +msgid "The \"balanced\" approach would be :math:`\\alpha=1` (the `Shannon entropy `_), though of course it's arguable what \"balanced\" means. Tabbycat defaults to this value." +msgstr "" + +#: ../../features/draw-generation-bp.rst:248 +msgid "To give some intuition for the useful range: In round 9, a strict ordering by number of positions seen at least once occurs for approximately :math:`\\alpha < 0.742`. A strict ordering by number of times in the most frequent position occurs for :math:`\\alpha>3`. Changing :math:`\\alpha` outside the range :math:`[0.742, 3]` will still affect the relative (cardinal) weighting *between teams*, but will not affect the *ordinal* ranking of possible histories." +msgstr "" + +#: ../../features/draw-generation-bp.rst:250 +msgid "The purpose of weighting costs by :math:`n_\\mathbf{h}` is to prioritise those teams who have competed in every round over those who have competed in fewer rounds." +msgstr "" + +#: ../../features/draw-generation-bp.rst:256 +msgid "The **population variance** cost function is just the population variance of the history 4-tuple," +msgstr "" + +#: ../../features/draw-generation-bp.rst:258 +msgid "C_\\textrm{popvar}(\\mathbf{h},s) = \\frac14 \\sum_{s'\\in\\mathcal{S}} \\left(\\mathbf{\\hat{h}}_s[s'] - \\mu_{\\mathbf{\\hat{h}}_s} \\right)^2," +msgstr "" + +#: ../../features/draw-generation-bp.rst:262 +msgid "where :math:`\\mathbf{\\hat{h}}_s` is the *hypothetical* position history that would arise if a team with history :math:`\\mathbf{h}` were to be allocated position :math:`s` in the next round; that is," +msgstr "" + +#: ../../features/draw-generation-bp.rst:264 +msgid "\\mathbf{\\hat{h}}_s[s'] = \\begin{cases} \\mathbf{h}[s'] + 1, &\\text{ if } s = s', \\\\ \\mathbf{h}[s'], &\\text{ if } s \\ne s'. \\end{cases}" +msgstr "" + +#: ../../features/draw-generation-bp.rst:271 +msgid "and where :math:`\\mu_{\\mathbf{\\hat{h}}_s}` is the mean of :math:`\\mathbf{\\hat{h}}_s`," +msgstr "" + +#: ../../features/draw-generation-bp.rst:273 +msgid "\\mu_{\\mathbf{\\hat{h}}_s} = \\frac14 \\sum_{s'\\in\\mathcal{S}} \\mathbf{\\hat{h}}_s[s']." +msgstr "" + +#: ../../features/draw-generation-bp.rst:277 +msgid "At the extremes, a team that has seen all positions evenly will have a population variance of zero, while a team that has seen just one position :math:`n` times will have a population variance of :math:`\\frac{3n^2}{16}`." +msgstr "" + +#: ../../features/draw-generation-bp.rst:282 +msgid "Assignment method" +msgstr "" + +#: ../../features/draw-generation-bp.rst:284 +msgid "Tabbycat uses the `Hungarian algorithm `_ to solve the `assignment problem `_ of assigning teams to positions in debates. This can be run with or without preshuffling:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:288 +msgid "**Hungarian algorithm** just runs the Hungarian algorithm as-is, with no randomness. This probably isn't what you want." +msgstr "" + +#: ../../features/draw-generation-bp.rst:290 +msgid "**Hungarian algorithm with preshuffling** also runs the Hungarian algorithm on the position cost matrix, but shuffles the input so that the draw is randomised, subject to having optimal position allocations." +msgstr "" + +#: ../../features/draw-generation-bp.rst:292 +msgid "Preshuffling doesn't compromise the optimality of position allocations: It simply shuffles the order in which teams and debates appear in the input to the algorithm, by randomly permuting the rows and columns of the position cost matrix. The Hungarian algorithm still guarantees an optimal position assignment, according to the chosen position cost function." +msgstr "" + +#: ../../features/draw-generation-bp.rst:294 +msgid "Running the Hungarian algorithm *without* preshuffling has the side effect of grouping teams with similar speaker scores in to the same room, and is therefore prohibited by WUDC rules. Its inclusion as an option is mainly academic; most tournaments will not want to use it in practice." +msgstr "" + +#: ../../features/draw-generation-bp.rst:296 +msgid "No other assignment methods are currently supported. For example, Tabbycat can't run fold (high-low) or adjacent (high-high) pairing *within* brackets." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/features/draw-generation.po b/docs/locale/bg/LC_MESSAGES/features/draw-generation.po new file mode 100644 index 00000000000..2a9e5c880cf --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/features/draw-generation.po @@ -0,0 +1,436 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:14\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation.po\n" +"X-Crowdin-File-ID: 1287\n" +"Language: bg_BG\n" + +#: ../../features/draw-generation.rst:5 +msgid "Draw Generation" +msgstr "" + +#: ../../features/draw-generation.rst:7 +msgid "The draw generator is quite flexible. You can specify a number of settings to suit different tournaments' rules." +msgstr "" + +#: ../../features/draw-generation.rst:10 +msgid "Summary of options" +msgstr "" + +#: ../../features/draw-generation.rst:11 +msgid "Options are set in the **Configuration** page as described in :ref:`starting a tournament `." +msgstr "" + +#: ../../features/draw-generation.rst:18 +msgid "Option" +msgstr "" + +#: ../../features/draw-generation.rst:19 +msgid "Description" +msgstr "" + +#: ../../features/draw-generation.rst:20 +msgid "Allowable values" +msgstr "" + +#: ../../features/draw-generation.rst:22 +msgid ":ref:`Odd bracket resolution method `" +msgstr "" + +#: ../../features/draw-generation.rst:23 +msgid "How to resolve odd brackets" +msgstr "" + +#: ../../features/draw-generation.rst:24 +msgid "Pull up from top" +msgstr "" + +#: ../../features/draw-generation.rst:25 +msgid "Pull up from bottom" +msgstr "" + +#: ../../features/draw-generation.rst:26 +msgid "Pull up from middle" +msgstr "" + +#: ../../features/draw-generation.rst:27 +msgid "Pull up at random" +msgstr "" + +#: ../../features/draw-generation.rst:29 +msgid "If sides are `Random` or `Balance`:" +msgstr "" + +#: ../../features/draw-generation.rst:31 +msgid "Intermediate" +msgstr "" + +#: ../../features/draw-generation.rst:32 +msgid "Intermediate with bubble-up-bubble-down" +msgstr "" + +#: ../../features/draw-generation.rst:34 +msgid "If sides are `Pre-allocated`:" +msgstr "" + +#: ../../features/draw-generation.rst:36 +msgid "Intermediate 1" +msgstr "" + +#: ../../features/draw-generation.rst:37 +msgid "Intermediate 2" +msgstr "" + +#: ../../features/draw-generation.rst:39 +msgid ":ref:`Side allocations method `" +msgstr "" + +#: ../../features/draw-generation.rst:40 +msgid "How to allocate aff/neg" +msgstr "" + +#: ../../features/draw-generation.rst:41 ../../features/draw-generation.rst:51 +msgid "Random" +msgstr "" + +#: ../../features/draw-generation.rst:42 +msgid "Balance" +msgstr "" + +#: ../../features/draw-generation.rst:43 +msgid "Pre-allocated" +msgstr "" + +#: ../../features/draw-generation.rst:44 +msgid "Manual ballot" +msgstr "" + +#: ../../features/draw-generation.rst:46 +msgid ":ref:`Pairing method `" +msgstr "" + +#: ../../features/draw-generation.rst:47 +msgid "How to pair teams within brackets" +msgstr "" + +#: ../../features/draw-generation.rst:48 +msgid "Slide" +msgstr "" + +#: ../../features/draw-generation.rst:49 +msgid "Fold" +msgstr "" + +#: ../../features/draw-generation.rst:50 +msgid "Adjacent" +msgstr "" + +#: ../../features/draw-generation.rst:53 +msgid ":ref:`Conflict avoidance method `" +msgstr "" + +#: ../../features/draw-generation.rst:54 +msgid "How to avoid history/institution conflicts" +msgstr "" + +#: ../../features/draw-generation.rst:55 +msgid "Off" +msgstr "" + +#: ../../features/draw-generation.rst:56 +msgid "One-up-one-down" +msgstr "" + +#: ../../features/draw-generation.rst:58 +msgid ":ref:`Pullup restriction `" +msgstr "" + +#: ../../features/draw-generation.rst:59 +msgid "Whether and how to restrict pullups" +msgstr "" + +#: ../../features/draw-generation.rst:60 +msgid "No restriction" +msgstr "" + +#: ../../features/draw-generation.rst:61 +msgid "Choose from teams who have been pulled up the fewest times so far" +msgstr "" + +#: ../../features/draw-generation.rst:62 +msgid "Choose from teams with the lowest draw strength by speaks so far" +msgstr "" + +#: ../../features/draw-generation.rst:64 +msgid "The valid options for intermediate brackets change depending on whether sides are pre-allocated, but these are **not** checked for validity. If you choose an invalid combination, Tabbycat will just crash. This won't corrupt the database, but it might be momentarily annoying." +msgstr "" + +#: ../../features/draw-generation.rst:67 +msgid "The big picture" +msgstr "" + +#: ../../features/draw-generation.rst:68 +msgid "When generating a power-paired draw, Tabbycat goes through five steps:" +msgstr "" + +#: ../../features/draw-generation.rst:70 +msgid "First, it divides teams into \"raw brackets\", grouping them by the number of wins." +msgstr "" + +#: ../../features/draw-generation.rst:71 +msgid "Second, it resolves odd brackets, applying the odd brackets rule to make sure there is an even number of teams in each bracket. This is often called \"pulling up\" teams." +msgstr "" + +#: ../../features/draw-generation.rst:72 +msgid "Third, within each bracket, it pairs teams into debates using the pairing method." +msgstr "" + +#: ../../features/draw-generation.rst:73 +msgid "Fourth, if enabled, it adjusts pairings to avoid history or institution conflicts." +msgstr "" + +#: ../../features/draw-generation.rst:74 +msgid "Finally, it assigns sides to teams in each debate." +msgstr "" + +#: ../../features/draw-generation.rst:76 +msgid "For each of these steps except the first, Tabbycat allows you to choose between a number of different methods." +msgstr "" + +#: ../../features/draw-generation.rst:80 +msgid "Explanations of options" +msgstr "" + +#: ../../features/draw-generation.rst:85 +msgid "Odd bracket resolution" +msgstr "" + +#: ../../features/draw-generation.rst:86 +msgid "The **draw odd brackets** option specifies what you do when a bracket has an odd number of teams. (Obviously you have to do something, otherwise you can't pair off teams within the bracket.) There are two groups of methods: pull-up and intermediate brackets." +msgstr "" + +#: ../../features/draw-generation.rst:90 +msgid "**Pull-up methods** take one or more teams from the next bracket down, and move them into the odd bracket to fill the bracket." +msgstr "" + +#: ../../features/draw-generation.rst:92 +msgid "**Intermediate brackets** take the excess teams from the odd bracket and move them down into a new bracket, which sits between the odd bracket and the next one down (the \"intermediate bracket\"). It then takes teams from the next bracket down and moves them up to fill the new intermediate bracket." +msgstr "" + +#: ../../features/draw-generation.rst:94 +msgid "The exact mechanics depend on whether or not sides are pre-allocated." +msgstr "" + +#: ../../features/draw-generation.rst:97 +msgid "When sides are not pre-allocated" +msgstr "" + +#: ../../features/draw-generation.rst:101 +msgid "**Pull-up methods:** Take a team from the next bracket down, and add them to the odd bracket to form an even bracket. You can choose to pull up the top team from the next bracket, or the bottom team, or the middle team, or a randomly chosen team. (If you pull up the middle team, and the bracket has an even number of teams, then it will choose randomly from the two middle teams.)" +msgstr "" + +#: ../../features/draw-generation.rst:103 +msgid "**Intermediate brackets:** Take the bottom team from the odd bracket and match them against the top team from the next bracket. An intermediate bracket always has two teams." +msgstr "" + +#: ../../features/draw-generation.rst:105 +msgid "If you're using conflict avoidance and intermediate brackets, you will probably want to use **Intermediate with bubble-up-bubble-down** instead. This uses the \"bubble-up-bubble-down\" rule to swap teams out of an intermediate bracket if there is a history or institution conflict. This is defined in the Australs constitution and is analogous to the \"one-up-one-down\" rule." +msgstr "" + +#: ../../features/draw-generation.rst:107 +msgid "Using `Intermediate` with `One-up-one-down` does **not** imply `Intermediate with bubble-up-bubble-down`. You must enable `Intermediate with bubble-up-bubble-down` specifically." +msgstr "" + +#: ../../features/draw-generation.rst:110 +msgid "When sides are pre-allocated" +msgstr "" + +#: ../../features/draw-generation.rst:111 +msgid "When sides are pre-allocated, an \"odd bracket\" is one that has an uneven number of affirmative and negative teams. (So odd brackets can have an even number of teams, *e.g.* 4 affs and 2 negs.)" +msgstr "" + +#: ../../features/draw-generation.rst:115 +msgid "**Pull-up methods:** Take as many teams from the next bracket down as necessary to fill the bracket. If there aren't enough teams in the next bracket down, take teams from the bracket after that, and so on, until the (original) odd bracket is filled. Higher brackets are always filled first. You can choose to pull up the top teams from the next bracket, the bottom teams, or a random selection of teams." +msgstr "" + +#: ../../features/draw-generation.rst:117 +msgid "**Intermediate brackets:** Take the unpaired teams in a bracket, and move them down to a new intermediate bracket. Then, take the number of teams necessary from the opposite side, from the next bracket down, to fill the next bracket." +msgstr "" + +#: ../../features/draw-generation.rst:119 +msgid "**Intermediate 1** and **Intermediate 2** differ only in what happens if there aren't enough teams in the next bracket to fill the intermediate bracket. In **Intermediate 1**, it will just take teams from the bracket after that, and so on, until the intermediate bracket is filled. In **Intermediate 2**, it will split the intermediate bracket: the teams that can be paired with the next bracket form the first intermediate bracket, and then the teams that aren't form a new (unfilled) intermediate bracket, to be filled from teams from the bracket after that. This keeps going, splitting into as many intermediate brackets as necessary, until all excess teams from the original odd bracket are paired." +msgstr "" + +#: ../../features/draw-generation.rst:124 +msgid "Side allocations" +msgstr "" + +#: ../../features/draw-generation.rst:125 +msgid "There are four methods:" +msgstr "" + +#: ../../features/draw-generation.rst:129 +msgid "**Random** allocates randomly. Some tournaments might like this, but most will probably want to use Balance, because Random doesn't guarantee that a team won't be (say) affirming the entire tournament." +msgstr "" + +#: ../../features/draw-generation.rst:130 +msgid "**Balance** assigns the team that has affirmed less so far the affirmative side (and, therefore, the team that has negated less the negative side). If both teams have affirmed the same number of times, it assigns sides randomly." +msgstr "" + +#: ../../features/draw-generation.rst:131 +msgid "**Preallocated** is used for pre-allocated sides. If used, you must enter data for pre-allocated sides into the database, as specified below." +msgstr "" + +#: ../../features/draw-generation.rst:132 +msgid "**Manually enter from ballot** is used for tournaments where the sides of the teams involved are not assigned in advance, but are instead determined by the teams themselves" +msgstr "" + +#: ../../features/draw-generation.rst:135 +msgid "Pre-allocated sides" +msgstr "" + +#: ../../features/draw-generation.rst:136 +msgid "There isn't currently any way to edit side allocations from the front end. To do so from the back end, you need to create one ``TeamPositionAllocation`` entry for each team in each round. All teams must have an allocation for every round. There are a few ways to do this, take your pick:" +msgstr "" + +#: ../../features/draw-generation.rst:140 +msgid "If you're using the :ref:`importtournament command `, it reads sides from the file sides.csv." +msgstr "" + +#: ../../features/draw-generation.rst:141 +msgid "You can do this from the Django admin interface (under Setup > Edit Database) by going to the relevant team and adding a **team position allocation** entry. That is:" +msgstr "" + +#: ../../features/draw-generation.rst:143 +msgid "Click **Admin** on the bottom right of any page after logging into an account with :ref:`superuser access `." +msgstr "" + +#: ../../features/draw-generation.rst:144 +msgid "Next to **Teams**, click **Change**." +msgstr "" + +#: ../../features/draw-generation.rst:145 +msgid "Click on the name of the team you want to edit side allocations for." +msgstr "" + +#: ../../features/draw-generation.rst:146 +msgid "Add or edit the entry or entries in the **Team position allocations** table at the bottom." +msgstr "" + +#: ../../features/draw-generation.rst:148 +msgid "You can also do this by writing a script that creates ``TeamPositionAllocation`` objects and saves them. Have a look at `draw/management/commands/generatesideallocations.py `_ for an example." +msgstr "" + +#: ../../features/draw-generation.rst:153 +msgid "Pairing method" +msgstr "" + +#: ../../features/draw-generation.rst:154 +msgid "It's easiest to describe these by example, using a ten-team bracket:" +msgstr "" + +#: ../../features/draw-generation.rst:156 +msgid "**Fold**: 1 vs 10, 2 vs 9, 3 vs 8, 4 vs 7, 5 vs 6. (Also known as high-low pairing.)" +msgstr "" + +#: ../../features/draw-generation.rst:157 +msgid "**Slide**: 1 vs 6, 2 vs 7, 3 vs 8, 4 vs 9, 5 vs 10." +msgstr "" + +#: ../../features/draw-generation.rst:158 +msgid "**Adjacent**: 1 vs 2, 3 vs 4, 5 vs 6, 7 vs 8, 9 vs 10. (Also known as high-high pairing.)" +msgstr "" + +#: ../../features/draw-generation.rst:159 +msgid "**Random**: paired at random within bracket." +msgstr "" + +#: ../../features/draw-generation.rst:161 +msgid "Teams are always paired within their brackets, after resolving odd brackets." +msgstr "" + +#: ../../features/draw-generation.rst:166 +msgid "Conflict avoidance method" +msgstr "" + +#: ../../features/draw-generation.rst:167 +msgid "A **conflict** is when two teams would face each other that have seen each other before, or are from the same institutions. Some tournaments have a preference against allowing this if it's avoidable within certain limits. The **draw avoid conflicts** option allows you to specify how." +msgstr "" + +#: ../../features/draw-generation.rst:169 +msgid "You can turn this off by using **Off**. Other than this, there is currently one conflict avoidance method implemented." +msgstr "" + +#: ../../features/draw-generation.rst:171 +msgid "**One-up-one-down** is the method specified in the Australs constitution. Broadly speaking, if there is a debate with a conflict:" +msgstr "" + +#: ../../features/draw-generation.rst:173 +msgid "It tries to swap teams with the debate \"one up\" from it in the draw." +msgstr "" + +#: ../../features/draw-generation.rst:174 +msgid "If that doesn't work, it tries to swap teams with the debate \"one down\" from it in the draw." +msgstr "" + +#: ../../features/draw-generation.rst:175 +msgid "If neither of those works, it accepts the original conflicted debate." +msgstr "" + +#: ../../features/draw-generation.rst:177 +msgid "It's a bit more complicated than that, for two reasons:" +msgstr "" + +#: ../../features/draw-generation.rst:181 +msgid "History conflicts are prioritised over (*i.e.*, \"worse than\") institution conflicts. So it's fine to resolve a history conflict by creating an institution conflict, but not the vice versa." +msgstr "" + +#: ../../features/draw-generation.rst:182 +msgid "Each swap obviously affects the debates around it, so it's not legal to have two adjacent swaps. (Otherwise, in theory, a team could \"one down\" all the way to the bottom of the draw!) So there is an optimization algorithm that finds the best combination of swaps, *i.e.* the one that minimises conflict, and if there are two profiles that have the same least conflict, then it chooses the one with fewer swaps." +msgstr "" + +#: ../../features/draw-generation.rst:187 +msgid "Pullup restriction" +msgstr "" + +#: ../../features/draw-generation.rst:188 +msgid "You can restrict which teams can be pulled up by configuring the draw generator to choose a pullup team from among only those teams who are the \"best off\" according to a given metric. If several teams are equally \"best off\" within the lower bracket, the draw generator chooses among them using the same **pull-up method** already specified (*e.g.*, \"pull up from top\")" +msgstr "" + +#: ../../features/draw-generation.rst:192 +msgid "You can **choose from teams who have been pulled up the fewest times so far**, that is, in rounds before the current round. Most of the time, this is equivalent to saying that a team cannot be pulled up more than once. But if *all* teams in a bracket have been pulled up at least once, it then chooses from among teams who have been pulled up *only* once (if any), and so on." +msgstr "" + +#: ../../features/draw-generation.rst:194 +msgid "You can **choose from teams with the lowest draw strength so far**, by **wins** or **speaks**." +msgstr "" + +#: ../../features/draw-generation.rst:196 +msgid "If you choose speaks, it's unlikely that two teams will have the same draw strength by speaks, so most of the time this will just choose the team in the lower bracket that's had the easiest draw so far (as measured by their opponents' speaker scores)." +msgstr "" + +#: ../../features/draw-generation.rst:198 +msgid "Pullup restrictions only apply when the :ref:`odd bracket resolution method ` is a pullup method. They have no effect on intermediate brackets." +msgstr "" + +#: ../../features/draw-generation.rst:201 +msgid "What do I do if the draw looks wrong?" +msgstr "" + +#: ../../features/draw-generation.rst:203 +msgid "You can edit match-ups directly from the draw page. Functionally, you can do anything you want. Of course, operationally, you should only edit the draw when you *know* that the draw algorithm got something wrong. If you need to do this, even just once, please file a bug report by creating a new issue on `our issues page on GitHub `_." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/features/notifications.po b/docs/locale/bg/LC_MESSAGES/features/notifications.po new file mode 100644 index 00000000000..dedc6f469fe --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/features/notifications.po @@ -0,0 +1,257 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:14\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/notifications.po\n" +"X-Crowdin-File-ID: 1289\n" +"Language: bg_BG\n" + +#: ../../features/notifications.rst:3 +msgid "Sending Notifications" +msgstr "" + +#: ../../features/notifications.rst:5 +msgid "Tabbycat offers integrations with email delivery services to send notifications to participants on certain enumerated events. For sending these emails, `SendGrid `_ is readily available as an add-on in Heroku. It may be necessary to install the `SendGrid add-on `_ manually. Other integrations may also be used in its place by changing the relevant environment variables." +msgstr "" + +#: ../../features/notifications.rst:8 +msgid "Events" +msgstr "" + +#: ../../features/notifications.rst:10 +msgid "Tabbycat includes a number of templated notifications that can be sent in various times. Variables which are included between curly brackets which are substituted for personalized information passed by email. Links to email will redirect to a page where the message can be changed and the participants selected." +msgstr "" + +#: ../../features/notifications.rst:12 +msgid "All emails have the ``{{ USER }}`` and ``{{ TOURN }}`` variables to indicate who the email is sent to, and the tournament it relates to. The \"From\" in the emails will also be the tournament's name." +msgstr "" + +#: ../../features/notifications.rst:17 +msgid "Email content and description" +msgstr "" + +#: ../../features/notifications.rst:18 +msgid "Variables" +msgstr "" + +#: ../../features/notifications.rst:20 +msgid "**Adjudicator draw notification**" +msgstr "" + +#: ../../features/notifications.rst:22 +msgid "Email to adjudicators indicating their room assignment." +msgstr "" + +#: ../../features/notifications.rst:24 ../../features/notifications.rst:36 +#: ../../features/notifications.rst:74 +msgid "Available through the admin draw page." +msgstr "" + +#: ../../features/notifications.rst:25 ../../features/notifications.rst:37 +msgid "``{{ ROUND }}``: The round name" +msgstr "" + +#: ../../features/notifications.rst:26 ../../features/notifications.rst:38 +msgid "``{{ VENUE }}``: The venue of the assigned debate" +msgstr "" + +#: ../../features/notifications.rst:27 ../../features/notifications.rst:39 +msgid "``{{ PANEL }}``: A list of all the adjudicators assigned to the venue (with positions)" +msgstr "" + +#: ../../features/notifications.rst:28 ../../features/notifications.rst:40 +msgid "``{{ DRAW }}``: A list of the team matchup with their roles" +msgstr "" + +#: ../../features/notifications.rst:29 +msgid "``{{ POSITION }}``: The target adjudicator's position in the panel" +msgstr "" + +#: ../../features/notifications.rst:30 +msgid "``{{ URL }}``: A link to the adjudicator's private URL page" +msgstr "" + +#: ../../features/notifications.rst:32 +msgid "**Team draw notification**" +msgstr "" + +#: ../../features/notifications.rst:34 +msgid "Email to teams indicating their pairing." +msgstr "" + +#: ../../features/notifications.rst:41 +msgid "``{{ TEAM }}``: The team's code or short name" +msgstr "" + +#: ../../features/notifications.rst:42 +msgid "``{{ SIDE }}``: The team's side" +msgstr "" + +#: ../../features/notifications.rst:44 +msgid "**Private URL distribution**" +msgstr "" + +#: ../../features/notifications.rst:46 +msgid "Email to participants giving them their private URL for electronic forms." +msgstr "" + +#: ../../features/notifications.rst:48 +msgid "Available through the private URLs page." +msgstr "" + +#: ../../features/notifications.rst:49 +msgid "``{{ URL }}``: The personalized URL" +msgstr "" + +#: ../../features/notifications.rst:50 +msgid "``{{ KEY }}``: The private code in the URL" +msgstr "" + +#: ../../features/notifications.rst:52 +msgid "**Ballot submission receipt**" +msgstr "" + +#: ../../features/notifications.rst:54 +msgid "Email to adjudicators of their ballot after tabroom confirmation." +msgstr "" + +#: ../../features/notifications.rst:56 +msgid "Sent automatically when their ballot's result status becomes confirmed, if enabled in the \"Notifications\" section of the tournament options." +msgstr "" + +#: ../../features/notifications.rst:58 +msgid "``{{ DEBATE }}``: The name (with round & venue) of the relevent debate" +msgstr "" + +#: ../../features/notifications.rst:59 +msgid "``{{ SCORES }}``: The submitted ballot with speaker scores ands team names" +msgstr "" + +#: ../../features/notifications.rst:61 +msgid "**Current team standings**" +msgstr "" + +#: ../../features/notifications.rst:63 +msgid "Email to speakers with their point total." +msgstr "" + +#: ../../features/notifications.rst:65 +msgid "Available through the \"Confirm Round Completion\" page." +msgstr "" + +#: ../../features/notifications.rst:66 +msgid "``{{ URL }}``: The URL of the team standings page (if public)" +msgstr "" + +#: ../../features/notifications.rst:67 +msgid "``{{ TEAM }}``: The team's name" +msgstr "" + +#: ../../features/notifications.rst:68 +msgid "``{{ POINTS }}``: The team's number of points" +msgstr "" + +#: ../../features/notifications.rst:70 +msgid "**Motion release**" +msgstr "" + +#: ../../features/notifications.rst:72 +msgid "Email to speakers with the motion(s) of the current round." +msgstr "" + +#: ../../features/notifications.rst:75 +msgid "``{{ ROUND }}``: The name of the round" +msgstr "" + +#: ../../features/notifications.rst:76 +msgid "``{{ MOTIONS }}``: A list of the motions released" +msgstr "" + +#: ../../features/notifications.rst:78 +msgid "**Team information**" +msgstr "" + +#: ../../features/notifications.rst:80 +msgid "Email to speakers with information pertaining to their team, such as eligibility and codes." +msgstr "" + +#: ../../features/notifications.rst:82 +msgid "Available through the Participants page." +msgstr "" + +#: ../../features/notifications.rst:83 +msgid "``{{ SHORT }}``: The team's short name" +msgstr "" + +#: ../../features/notifications.rst:84 +msgid "``{{ LONG }}``: The team's long name" +msgstr "" + +#: ../../features/notifications.rst:85 +msgid "``{{ CODE }}``: The team's code name" +msgstr "" + +#: ../../features/notifications.rst:86 +msgid "``{{ EMOJI }}``: The team's assigned emoji" +msgstr "" + +#: ../../features/notifications.rst:87 +msgid "``{{ DIVISION }}``: The team's division if applicable" +msgstr "" + +#: ../../features/notifications.rst:88 +msgid "``{{ BREAK }}``: Break categories which the team is a member" +msgstr "" + +#: ../../features/notifications.rst:89 +msgid "``{{ SPEAKERS }}``: A list of the speakers in the team" +msgstr "" + +#: ../../features/notifications.rst:90 +msgid "``{{ INSTITUTION }}``: The team's affiliation" +msgstr "" + +#: ../../features/notifications.rst:93 +msgid "Event Webhook" +msgstr "" + +#: ../../features/notifications.rst:95 +msgid "With SendGrid, the status of sent emails can be sent to Tabbycat to be displayed, giving an indication of failures and whether participants have opened the messages. To activate this feature, setup must be done both in your SendGrid account and in Tabbycat." +msgstr "" + +#: ../../features/notifications.rst:97 +msgid "Set a secret key in the Email section of the tournament's preferences. This key must be alphanumeric without any spaces." +msgstr "" + +#: ../../features/notifications.rst:98 +msgid "Copy the \"web-hook\" link presented in a box at the top of the \"email participants\" page." +msgstr "" + +#: ../../features/notifications.rst:99 +msgid "Go to https://app.sendgrid.com/settings/mail_settings and select \"Event Notifications\"" +msgstr "" + +#: ../../features/notifications.rst:100 +msgid "Enable the feature and paste the Tabbycat URL under \"HTTP POST URL\"." +msgstr "" + +#: ../../features/notifications.rst:101 +msgid "Select the notifications to keep track (or all of them)." +msgstr "" + +#: ../../features/notifications.rst:103 +msgid "Each email and change in status sent to Tabbycat will add a row to the database. If the number of rows is limited, as is for free Heroku apps, enabling the webhook may use up a significant number of rows. Be selective in the events to keep track." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/features/preformed-panels.po b/docs/locale/bg/LC_MESSAGES/features/preformed-panels.po new file mode 100644 index 00000000000..f0542a72a9b --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/features/preformed-panels.po @@ -0,0 +1,176 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:14\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/preformed-panels.po\n" +"X-Crowdin-File-ID: 1291\n" +"Language: bg_BG\n" + +#: ../../features/preformed-panels.rst:5 +msgid "Preformed Panels" +msgstr "" + +#: ../../features/preformed-panels.rst:7 +msgid "Preformed panels, also known as a 'shadow draw', allow adjudicator panels to be created *before* a round has been drawn and then applied once its draw is ready. This means that panel formation can be done during periods outside the normal time pressure of finalising a draw for release. This can save a lot of time at large tournaments, or at tournaments where the adjudication core wants to carefully control the specific combination of adjudicators within panels." +msgstr "" + +#: ../../features/preformed-panels.rst:9 +msgid "Tabbycat's implementation of preformed panels is more powerful, but less simple, than many others. The chief difference is that our workflow does not simply transpose a linear set of preformed panels atop a draw. Instead we employ Tabbycat's existing allocation tools, primarily the notion of a debate's *priority*, to allow for a non-linear matching of preformed panels that avoids adjudicator conflicts and better adapts to a given draw — particularly when the most important debates do not strictly follow the highest debate brackets." +msgstr "" + +#: ../../features/preformed-panels.rst:11 +msgid "The central concept is that each preformed panel has a priority value. When applying preformed panels to a draw, the allocator ties to best match the priority value of each preformed panel to the priority of each actual debate. This is similar to how Tabbycat's normal auto-allocator matches the strength of each panel (as measured by adjudicators' ratings) to the priority of each debate." +msgstr "" + +#: ../../features/preformed-panels.rst:14 +msgid "Step 1: Create preformed panels" +msgstr "" + +#: ../../features/preformed-panels.rst:16 +msgid "You can find the preformed panels section either" +msgstr "" + +#: ../../features/preformed-panels.rst:18 +msgid "under the **Setup** menu (for all rounds), or" +msgstr "" + +#: ../../features/preformed-panels.rst:19 +msgid "on the **Draw** page (for the current and next round)." +msgstr "" + +#: ../../features/preformed-panels.rst:21 +msgid "Initially, the preformed panels page will have no panels. Click the **Create Panels** button in the top left to make some. The panels it creates are based upon a projection of that round's general results using the results of the previous round. As a result, each preformed panel will have a *bracket range*, the lowest and highest brackets that debate might be in, and a *liveness range*, the maximum number of teams that could be live in that room." +msgstr "" + +#: ../../features/preformed-panels.rst:25 +msgid "Like the normal adjudicator allocation interface, the preformed panel interfaces will indicate when an adjudicator has not been marked as available. If using preformed panels, you may want to set adjudicator availability earlier than you would otherwise." +msgstr "" + +#: ../../features/preformed-panels.rst:27 +msgid "Liveness in the anticipated draw only pertains to the open category (the first break category that is marked as a \"general\" category). It's not possible to meaningfully predict where teams open-dead but live in other categories will end up." +msgstr "" + +#: ../../features/preformed-panels.rst:30 +msgid "Step 2: Assign priorities to preformed panels" +msgstr "" + +#: ../../features/preformed-panels.rst:32 +msgid "By default the priority slider for all preformed panels is in the neutral position. You can use the \"Prioritise\" button in the top left to assign priority values automatically, based upon their brackets or liveness. Before or after this step you can alter the priorities as usual — even after you have allocated adjudicators." +msgstr "" + +#: ../../features/preformed-panels.rst:34 +msgid "It's important to remember to assign a range of priorities to the panels. Without distinct priority values, the application of your preformed panels to the actual draw will be essentially random. If allocating priorities manually, it is a good idea to keep a relatively even distribution of priorities — use the range!" +msgstr "" + +#: ../../features/preformed-panels.rst:36 +msgid "In Round 1, each debate has a liveness and bracket of 0. If you are using preformed panels in this instance you may need to manually-differentiate their priorities." +msgstr "" + +#: ../../features/preformed-panels.rst:39 +msgid "Step 3: Allocate adjudicators to preformed panels" +msgstr "" + +#: ../../features/preformed-panels.rst:43 +msgid "Now that your panels have a priority, you can begin allocating adjudicators. You can do this manually, but do note that the normal auto-allocator for adjudicators also works in this context (the \"Allocate\" button). Even if you want to tweak your panels extensively, the auto-allocator can provide a good first-pass collection of panels, because it will give stronger adjudicators to the panels that you have marked as important." +msgstr "" + +#: ../../features/preformed-panels.rst:45 +msgid "The created panels all auto-save, so you can leave the page and return to pick up where you left. Like the main allocation interface, changes should appear 'live' across different computers and the sharding system is available to divide up each person's view of the draw." +msgstr "" + +#: ../../features/preformed-panels.rst:48 +msgid "Step 4: Generate the draw" +msgstr "" + +#: ../../features/preformed-panels.rst:50 +msgid "Proceed with the creation of the draw as usual. Open up the normal adjudicator allocation page for that round." +msgstr "" + +#: ../../features/preformed-panels.rst:53 +msgid "Step 5: Assign priorities to debates" +msgstr "" + +#: ../../features/preformed-panels.rst:55 +msgid "When allocating preformed panels, the priority levels are what connects the preformed panels to the actual debates. It is thus crucial that you assign priorities to the debates in the actual draw using automatic prioritisation or the manual sliders. Because the automatic prioritiser does not employ the highest priority value, it is worth having a look at the draw and seeing if any debates justify this before proceeding." +msgstr "" + +#: ../../features/preformed-panels.rst:58 +msgid "Step 6: Allocate preformed panels to debates" +msgstr "" + +#: ../../features/preformed-panels.rst:60 +msgid "To allocate preformed panels to your debates, click the normal \"Allocate\" button and then select the *Preformed Panels* option." +msgstr "" + +#: ../../features/preformed-panels.rst:64 +msgid "This will then allocate the preformed panels to debates." +msgstr "" + +#: ../../features/preformed-panels.rst:68 +msgid "You can the edit the allocation as normal. If needed, you can redo the allocation of the preformed panels at any point." +msgstr "" + +#: ../../features/preformed-panels.rst:71 +msgid "How does the allocator work?" +msgstr "" + +#: ../../features/preformed-panels.rst:73 +msgid "Roughly speaking, the allocator tries to match panel priorities to debate priorities, while avoiding conflicts. It'll mostly try to swap panels within priority levels in order to avoid conflicts. If there aren't exactly as many panels at each priority level as there are debates, it'll do its best to match what it can." +msgstr "" + +#: ../../features/preformed-panels.rst:75 +msgid "More formally, it treats the allocation of preformed panels to debates as an `assignment problem `_, with a cost of assigning each panel :math:`p` to each debate :math:`d` given by" +msgstr "" + +#: ../../features/preformed-panels.rst:77 +msgid "C(p,d) = w_\\mathrm{mism} [\\mathrm{importance}(p) - \\mathrm{importance(d)}]^2 + w_\\mathrm{conf} \\, \\mathrm{conflicts}(p,d) + w_\\mathrm{hist} \\, \\mathrm{history}(p,d)" +msgstr "" + +#: ../../features/preformed-panels.rst:81 +msgid "where" +msgstr "" + +#: ../../features/preformed-panels.rst:83 +msgid ":math:`w_\\mathrm{mism}` is the \"Importance mismatch penalty\" in the \"Draw rules\" settings," +msgstr "" + +#: ../../features/preformed-panels.rst:84 +msgid ":math:`w_\\mathrm{hist}` is the \"Adjudicator conflict penalty\" in the \"Draw rules\" settings," +msgstr "" + +#: ../../features/preformed-panels.rst:85 +msgid ":math:`w_\\mathrm{conf}` is the \"Adjudicator history penalty\" in the \"Draw rules\" settings," +msgstr "" + +#: ../../features/preformed-panels.rst:86 +msgid ":math:`\\mathrm{importance}(p)` is the importance of panel :math:`p`," +msgstr "" + +#: ../../features/preformed-panels.rst:87 +msgid ":math:`\\mathrm{importance}(d)` is the importance of debate :math:`d`," +msgstr "" + +#: ../../features/preformed-panels.rst:88 +msgid ":math:`\\mathrm{conflicts}(p,d)` is the number of adjudicator-team conflicts between panel :math:`p` and debate :math:`d`, and" +msgstr "" + +#: ../../features/preformed-panels.rst:89 +msgid ":math:`\\mathrm{history}(p,d)` is the number of adjudicators and teams who have seen each other between panel :math:`p` and debate :math:`d`." +msgstr "" + +#: ../../features/preformed-panels.rst:91 +msgid "It then uses the `Hungarian algorithm `_ to find the assignment of panels to debates that minimizes the total cost of the pairings." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/features/printing.po b/docs/locale/bg/LC_MESSAGES/features/printing.po new file mode 100644 index 00000000000..92d21b8cd8e --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/features/printing.po @@ -0,0 +1,68 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:14\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/printing.po\n" +"X-Crowdin-File-ID: 1293\n" +"Language: bg_BG\n" + +#: ../../features/printing.rst:3 +msgid "Printing Ballots and Feedback" +msgstr "" + +#: ../../features/printing.rst:5 +msgid "Tabbycat offers the ability to print scoresheets and feedback sheets on a per-round basis. This means that each scoresheet is customised to match the draw, and so will display:" +msgstr "" + +#: ../../features/printing.rst:7 +msgid "The motion or possible motions that could have been chosen from" +msgstr "" + +#: ../../features/printing.rst:8 +msgid "The teams, and a list of speakers for each team" +msgstr "" + +#: ../../features/printing.rst:9 +msgid "The room number, and name of the adjudicators present" +msgstr "" + +#: ../../features/printing.rst:11 +msgid "Feedback sheets will also be customised in this manner; displaying:" +msgstr "" + +#: ../../features/printing.rst:13 +msgid "A 'from' source. Sheet will be printed for each possible piece of feedback in that room: ie adjudicators will each get a sheet for their panellists and trainees while teams and panellists will get sheets for the chair." +msgstr "" + +#: ../../features/printing.rst:14 +msgid "The specific questions you established when configuring the :ref:`adjudicator feedback questions `" +msgstr "" + +#: ../../features/printing.rst:15 +msgid "The room number" +msgstr "" + +#: ../../features/printing.rst:17 +msgid "To print the ballots for each round, you would go to the **Display** page for that round, the click one of the two relevant print links. This opens a new window. In each window, you then use your browser's print function (CTRL-P). In the resulting print interface (from your browser) you'll want to turn background graphics on, header/footers off, and set the layout to portrait (feedback sheets) or landscape (score sheets)." +msgstr "" + +#: ../../features/printing.rst:19 +msgid "Typically you'd save these to PDF for printing, although you should be able to print straight from this dialogue box." +msgstr "" + +#: ../../features/printing.rst:21 +msgid "Printing works best in Safari and Firefox; use those if possible." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/features/standings-rules.po b/docs/locale/bg/LC_MESSAGES/features/standings-rules.po new file mode 100644 index 00000000000..935b3042ab3 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/features/standings-rules.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:14\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/standings-rules.po\n" +"X-Crowdin-File-ID: 1295\n" +"Language: bg_BG\n" + +#: ../../features/standings-rules.rst:5 +msgid "Standings Rules" +msgstr "" + +#: ../../features/standings-rules.rst:8 +msgid "Team standings rules" +msgstr "" + +#: ../../features/standings-rules.rst:10 +msgid "In Tabbycat, you can choose how teams are ranked in the team standings. For example, at Australs, teams are ranked first on the number of wins, and second on their total speaker score. The setting that specifies how teams are ranked is called the **team standings precedence**. The team standings precedence is used:" +msgstr "" + +#: ../../features/standings-rules.rst:15 +msgid "When displaying the team tab," +msgstr "" + +#: ../../features/standings-rules.rst:16 +msgid "Whenever a power-paired draw is generated, and" +msgstr "" + +#: ../../features/standings-rules.rst:17 +msgid "When computing which teams are in the break." +msgstr "" + +#: ../../features/standings-rules.rst:19 +msgid "When you choose the team standings precedence, you choose from a list of *metrics*. Then, in the standings, teams will be sorted first by the first metric, then by the second metric, and so on. You must choose at least one metric, and you can choose up to eight. Teams tied on all metrics will have the same rank." +msgstr "" + +#: ../../features/standings-rules.rst:25 +msgid "If you like, you can also choose **team standings extra metrics**, which are metrics that will be shown in the team standings, but not used to rank teams." +msgstr "" + +#: ../../features/standings-rules.rst:33 ../../features/standings-rules.rst:132 +msgid "Metric" +msgstr "" + +#: ../../features/standings-rules.rst:34 ../../features/standings-rules.rst:133 +msgid "Description" +msgstr "" + +#: ../../features/standings-rules.rst:36 +msgid "Wins" +msgstr "" + +#: ../../features/standings-rules.rst:37 +msgid "How many debates the team has won." +msgstr "" + +#: ../../features/standings-rules.rst:39 +msgid "Points" +msgstr "" + +#: ../../features/standings-rules.rst:40 +msgid "How many points the team has. For two-team formats, this is just a synonym for wins, and differs only in column labelling. For BP, this is 3 points for a first, 2 for a second, 1 for a third and 0 for a fourth." +msgstr "" + +#: ../../features/standings-rules.rst:44 +msgid "Total speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:45 +msgid "The sum of all speaker scores attained in all debates." +msgstr "" + +#: ../../features/standings-rules.rst:47 +msgid "Average total speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:48 ../../features/standings-rules.rst:157 +msgid "The average total speaker score over all debates the team has had, not counting debates where they or their opponents forfeited." +msgstr "" + +#: ../../features/standings-rules.rst:51 +msgid "Average individual speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:52 +msgid "The total substantive speaker score, over all debates the team has had and the number of speakers. Provides an equivalent metric to average total speaker score in no-reply formats, but within the substantive speech scoring range." +msgstr "" + +#: ../../features/standings-rules.rst:57 +msgid "Speaker score standard deviation" +msgstr "" + +#: ../../features/standings-rules.rst:58 +msgid "The standard deviation of total speaker scores over all debates the team has had, not counting debates where they or their opponents forfeited. This metric is ranked in ascending order (smaller standard deviations ranked higher)." +msgstr "" + +#: ../../features/standings-rules.rst:63 +msgid "Sum of margins" +msgstr "" + +#: ../../features/standings-rules.rst:64 +msgid "The sum of all margins. Wins are positive, losses are negative." +msgstr "" + +#: ../../features/standings-rules.rst:66 +msgid "Average margin" +msgstr "" + +#: ../../features/standings-rules.rst:67 +msgid "The average margin over all debates the team has had, not counting debates where they or their opponents forfeited." +msgstr "" + +#: ../../features/standings-rules.rst:70 +msgid "Draw strength by wins" +msgstr "" + +#: ../../features/standings-rules.rst:71 +msgid "The sum of the number of wins of every team this team has faced so far." +msgstr "" + +#: ../../features/standings-rules.rst:73 +msgid "This is also known in some circuits as *win points*, *opponent wins* or *opponent strength*." +msgstr "" + +#: ../../features/standings-rules.rst:76 +msgid "Draw strength by speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:77 +msgid "The sum of speaker scores of every team this team has faced so far." +msgstr "" + +#: ../../features/standings-rules.rst:79 +msgid "Votes/ballots carried" +msgstr "" + +#: ../../features/standings-rules.rst:80 +msgid "The number of adjudicators that gave this team a win across all of their debates. Also known as the number of *ballots* or *judges* a team has." +msgstr "" + +#: ../../features/standings-rules.rst:83 +msgid "In cases where the panel is smaller or larger than 3, this number is normalised to be out of 3. For example, if a panel of five splits 3--2, then the winning team is recorded as gaining 1.8 votes, and the losing team is recorded as gaining 1.2. This also means that solo adjudicators are always worth three votes." +msgstr "" + +#: ../../features/standings-rules.rst:89 +msgid "Number of firsts" +msgstr "" + +#: ../../features/standings-rules.rst:90 +msgid "The number of debates in which the team came first. Only makes sense for British Parliamentary." +msgstr "" + +#: ../../features/standings-rules.rst:93 +msgid "Number of seconds" +msgstr "" + +#: ../../features/standings-rules.rst:94 +msgid "The number of debates in which the team came second. Only makes sense for British Parliamentary." +msgstr "" + +#: ../../features/standings-rules.rst:97 +msgid "Number of pullups before this round" +msgstr "" + +#: ../../features/standings-rules.rst:98 +msgid "The number of times the team has been pulled up as part of :ref:`draw generation `. You probably wouldn't use this as a metric to rank teams, but you may wish to display it as an \"extra metric\" in the team standings for transparency." +msgstr "" + +#: ../../features/standings-rules.rst:103 +msgid "Who-beat-whom" +msgstr "" + +#: ../../features/standings-rules.rst:104 +msgid "If there are exactly two teams tied on all metrics earlier in the precedence than this one, then check if the teams have faced each other. If they have, the team that won their encounter is ranked higher. If they have seen each other more than once, the team that has won more of their encounters is ranked higher." +msgstr "" + +#: ../../features/standings-rules.rst:110 +msgid "If there are more than two teams tied, this metric is not applied." +msgstr "" + +#: ../../features/standings-rules.rst:112 +msgid "This metric can be specified multiple times. Each time who-beat-whom occurs, it applies to all the metrics earlier in the precedence than the occurrence in question." +msgstr "" + +#: ../../features/standings-rules.rst:118 +msgid "Speaker standings rules" +msgstr "" + +#: ../../features/standings-rules.rst:120 +msgid "The speaker standings precedence is only used in speaker standings (*i.e.*, it doesn't affect the operation of the tournament). As for team standings, the **speaker standings precedence** specifies which metrics are used to rank speakers, with the second metric tie-breaking the first, the third tie-breaking the second, and so on. The **speaker standings extra metrics** are metrics that will be shown in the speaker standings, but won't be used to rank speakers." +msgstr "" + +#: ../../features/standings-rules.rst:135 +msgid "Total" +msgstr "" + +#: ../../features/standings-rules.rst:136 +msgid "The sum of all speaker scores attained by the speaker. Note that if a speaker misses a round, they'll typically be relegated to the bottom of the speaker standings by this metric." +msgstr "" + +#: ../../features/standings-rules.rst:140 +msgid "Average" +msgstr "" + +#: ../../features/standings-rules.rst:141 +msgid "The average of all speaker scores attained by the speaker." +msgstr "" + +#: ../../features/standings-rules.rst:143 +msgid "Trimmed mean" +msgstr "" + +#: ../../features/standings-rules.rst:144 +msgid "The average speaker score after excluding their highest and lowest speaker scores. Also known as the *high-low drop*, *truncated mean* or *Olympic average*." +msgstr "" + +#: ../../features/standings-rules.rst:148 +msgid "If the speaker has only one or two scores, this metric just returns the average of those scores, without excluding any." +msgstr "" + +#: ../../features/standings-rules.rst:151 +msgid "Standard deviation" +msgstr "" + +#: ../../features/standings-rules.rst:152 +msgid "The standard deviation of all speaker scores attained by the speaker. This metric is ranked in ascending order (smaller standard deviations ranked higher)." +msgstr "" + +#: ../../features/standings-rules.rst:156 +msgid "Average speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:160 +msgid "Number of speeches given" +msgstr "" + +#: ../../features/standings-rules.rst:161 +msgid "The number of speaker scores associated with the speaker. (In tournaments where teams can rotate speakers, this may not be all rounds.) This metric is normally used as an \"extra\" (unranked) metric, because it'd be weird to rank by number of speeches given, but you can if you want to." +msgstr "" + +#: ../../features/standings-rules.rst:168 +msgid "Motion balance" +msgstr "" + +#: ../../features/standings-rules.rst:170 +msgid "The motion balance page applies a statistical test to estimate the degree to which a motion is imbalanced. This is calculated by first making an underlying assumption that a motion is generally fair. This will be our null hypothesis: that, for a given motion, affirmative teams won the same number of times as negative teams." +msgstr "" + +#: ../../features/standings-rules.rst:172 +msgid "Our chi-squared test will then be centred around disproving this hypothesis. If we disprove the hypothesis, we say that, in the context of this tournament and this draw, the motion ended up being unbalanced. However (technically speaking) if we fail to reject the null hypothesis, we would conclude that there is insufficient evidence to suggest that the motion was unbalanced in the context of this tournament." +msgstr "" + +#: ../../features/standings-rules.rst:174 +msgid "The test proceeds by `calculating the chi-squared stat, then running a series of tests `_. The tests are where we go a little off-book with respect to statistical methodology. Normally we would test at a single \"level of significance\" (ie. with a certain degree of certainty), but that's insufficient in telling us how bad a motion ended up being. So, instead, we conduct a range of tests with a range of levels of significance, and calculate the minimum level of significance that causes our null hypothesis to be rejected. Using the minimum level of significance that rejects our null hypothesis, we can then grade the fairness of the motion on a scale. Motions whose tests fall below a certain threshold will be considered fair, while others will be graded based on the minimum." +msgstr "" + +#: ../../features/standings-rules.rst:176 +msgid "For formats with topic selection, the same test is applied using the number of affirmative and negative vetoes in place of wins. The assumption here is that, during the time allotted for motion selection, teams estimate how appealing a motion is from their position, and then veto the topic that they feel is least favourable. Thus, the null hypothesis is that a motion that is perceived of as fair would be vetoed by affirmative and negative teams to an equal degree." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/features/team-code-names.po b/docs/locale/bg/LC_MESSAGES/features/team-code-names.po new file mode 100644 index 00000000000..017e7d12ddd --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/features/team-code-names.po @@ -0,0 +1,104 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:14\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/team-code-names.po\n" +"X-Crowdin-File-ID: 1297\n" +"Language: bg_BG\n" + +#: ../../features/team-code-names.rst:5 +msgid "Team Code Names" +msgstr "" + +#: ../../features/team-code-names.rst:7 +msgid "Some tournaments use \"code names\" to obscure the institutional affiliations of teams. For example, rather than calling a team \"Harvard DK\", they would be presented in the draw as \"Butterfly\". A natural way to do this would be just to change the name of every team, but then the team's \"real name\" would be hidden from tournament staff, too." +msgstr "" + +#: ../../features/team-code-names.rst:13 +msgid "Instead, Tabbycat allows you to assign code names to teams, alongside their real names. This way, you can have code names show to participants, while real team names show in administrative views (*e.g.* allocating adjudicators). It also allows you to \"decode\" team names for elimination rounds or final tab release easily, without having to actually change every team's name." +msgstr "" + +#: ../../features/team-code-names.rst:19 +msgid "While the most frequently-used public views have been checked to ensure that they show only code names, not all views have been checked thoroughly. Please check views using demonstration data on a test site, configured in the same way that you would use it at your tournament, before using code names at a real tournament." +msgstr "" + +#: ../../features/team-code-names.rst:26 +msgid "Assigning code names" +msgstr "" + +#: ../../features/team-code-names.rst:28 +msgid "Most methods of importing teams, including the simple importer and the ``importtournament`` command, automatically assign code names to teams. The code name is the name of the emoji that is automatically assigned at the same time. For example, the team assigned 🦋 will be code-named \"Butterfly\"." +msgstr "" + +#: ../../features/team-code-names.rst:33 +msgid "If you wish to use your own code names, you need to set the \"code name\" field of each team. Here are two ways to do this:" +msgstr "" + +#: ../../features/team-code-names.rst:36 +msgid "**Edit Database area:** Enter the Edit Database area, and under **Participants > Teams**, click **Change**. Modify each team one by one, entering a new code name then saving." +msgstr "" + +#: ../../features/team-code-names.rst:39 +msgid "``importtournament`` **command:** If you imported a tournament from CSV files, you can just add a ``code_name`` column to your teams CSV file." +msgstr "" + +#: ../../features/team-code-names.rst:43 +msgid "Displaying code names" +msgstr "" + +#: ../../features/team-code-names.rst:45 +msgid "Code names are disabled by default; to enable then, go to **Setup > Configuration > Public Options**, and change the **Team code names** option. You can choose between the following options:" +msgstr "" + +#: ../../features/team-code-names.rst:49 +msgid "Do not use code names" +msgstr "" + +#: ../../features/team-code-names.rst:50 +msgid "Use real names everywhere, and show code names in tooltips" +msgstr "" + +#: ../../features/team-code-names.rst:51 +msgid "Use code names for public; real names with code names in tooltips for admins" +msgstr "" + +#: ../../features/team-code-names.rst:52 +msgid "Use code names for public; code names with real names in tooltips for admins" +msgstr "" + +#: ../../features/team-code-names.rst:53 +msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" +msgstr "" + +#: ../../features/team-code-names.rst:55 +msgid "\"Code names in tooltips\" means that the code name will display in the details box that appears when you roll over a team's name, and similarly for real names." +msgstr "" + +#: ../../features/team-code-names.rst:58 +msgid "One typical use is as follows:" +msgstr "" + +#: ../../features/team-code-names.rst:60 +msgid "Before the tournament, set the team code names setting to *Use code names for public; real names with code names in tooltips for admins*. This hides real names from anything participants would see, but continues to refer to teams in administrative views by real names." +msgstr "" + +#: ../../features/team-code-names.rst:64 +msgid "After the break is announced, set it to *Use real names everywhere, and show code names in tooltips*. This basically decodes all team names, while still allowing people to look up the (now former) code name of a team." +msgstr "" + +#: ../../features/team-code-names.rst:68 +msgid "If you're enabling team codes, you probably want to disable the **Show team institutions** option too." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/features/user-accounts.po b/docs/locale/bg/LC_MESSAGES/features/user-accounts.po new file mode 100644 index 00000000000..ef1b528daa4 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/features/user-accounts.po @@ -0,0 +1,196 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:14\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/user-accounts.po\n" +"X-Crowdin-File-ID: 1299\n" +"Language: bg_BG\n" + +#: ../../features/user-accounts.rst:5 +msgid "User Accounts" +msgstr "" + +#: ../../features/user-accounts.rst:7 +msgid "For obvious reasons, user logins are required to data entry and administrative functions. Conceptually, there are four levels of access:" +msgstr "" + +#: ../../features/user-accounts.rst:14 +msgid "Access" +msgstr "" + +#: ../../features/user-accounts.rst:15 +msgid "Should be used by" +msgstr "" + +#: ../../features/user-accounts.rst:16 +msgid "Grants access to" +msgstr "" + +#: ../../features/user-accounts.rst:17 +msgid "Is capable of" +msgstr "" + +#: ../../features/user-accounts.rst:19 +msgid "Public" +msgstr "" + +#: ../../features/user-accounts.rst:20 +msgid "The public" +msgstr "" + +#: ../../features/user-accounts.rst:21 +msgid "Publicly available information." +msgstr "" + +#: ../../features/user-accounts.rst:22 +msgid "Viewing things, and submitting new ballots/feedback if electronic submission is permitted by the tournament." +msgstr "" + +#: ../../features/user-accounts.rst:24 +msgid "Assistant" +msgstr "" + +#: ../../features/user-accounts.rst:25 +msgid "Data entry helpers" +msgstr "" + +#: ../../features/user-accounts.rst:26 +msgid "The assistant area" +msgstr "" + +#: ../../features/user-accounts.rst:27 +msgid "Entering, confirming and printing ballots and feedback, checking in ballots and people, and displaying the draw." +msgstr "" + +#: ../../features/user-accounts.rst:29 +msgid "Superuser" +msgstr "" + +#: ../../features/user-accounts.rst:30 +msgid "Chief adjudicators" +msgstr "" + +#: ../../features/user-accounts.rst:31 +msgid "The administrator and assistant areas" +msgstr "" + +#: ../../features/user-accounts.rst:32 +msgid "Generating draws, allocating adjudicators and venues, and editing ballots, feedback and adjudicator scores." +msgstr "" + +#: ../../features/user-accounts.rst:34 +msgid "Staff and superuser" +msgstr "" + +#: ../../features/user-accounts.rst:35 +msgid "Tab director" +msgstr "" + +#: ../../features/user-accounts.rst:36 +msgid "The administrator, assistant and Edit Database areas" +msgstr "" + +#: ../../features/user-accounts.rst:37 +msgid "Editing the database directly." +msgstr "" + +#: ../../features/user-accounts.rst:39 +msgid "If a user account on the tab system belongs to someone who is also a participant in the tournament (*e.g.*, a chief adjudicator), these two capacities are completely separate. User accounts are only used to regulate access to administrative functions. Tabbycat doesn't know about any relationship between user accounts, and who is participating in the tournament." +msgstr "" + +#: ../../features/user-accounts.rst:42 +msgid "Account roles" +msgstr "" + +#: ../../features/user-accounts.rst:44 +msgid "You should create an account for each person who needs to access the tab system. When you create an account in the Edit Database area, there are checkboxes for **Superuser status** and **Staff access**. Superusers have access to the administrator area, and staff have access to the Edit Database area. You should grant permissions as follows:" +msgstr "" + +#: ../../features/user-accounts.rst:46 +msgid "Tab directors should get both superuser and staff status." +msgstr "" + +#: ../../features/user-accounts.rst:47 +msgid "Chief adjudicators and their deputies should get superuser status, but not staff status." +msgstr "" + +#: ../../features/user-accounts.rst:48 +msgid "Tab assistants (helping only with data entry) should get neither superuser nor staff status." +msgstr "" + +#: ../../features/user-accounts.rst:50 +msgid "Tournament participants (other than tab staff) do not need an account. Everything they need to know can be accessed without an account. If you're using electronic ballots or electronic feedback, they access these using a URL that only they know (see :ref:`private-urls`)." +msgstr "" + +#: ../../features/user-accounts.rst:52 +msgid "When doing data entry, users with superuser status should use the **assistant area**. The administrator area is intended for managing the tournament, and doesn't include someand should **not** in general be used for data entry. Specifically, the administrator area lacks checks that are important for data integrity assurance. It should be used only to override the normal :ref:`data entry ` procedure, for example, to unconfirm or modify a ballot." +msgstr "" + +#: ../../features/user-accounts.rst:54 +msgid "The **Edit Database** interface should not be used except where it is actually necessary. There are a few functions which require this, but as a principle, it shouldn't be used as a matter of course." +msgstr "" + +#: ../../features/user-accounts.rst:56 +msgid "In theory, you could grant an account staff status but not superuser status. But then they'd be allowed to edit the database, but not run the tournament, which would be weird." +msgstr "" + +#: ../../features/user-accounts.rst:59 +msgid "Adding accounts" +msgstr "" + +#: ../../features/user-accounts.rst:61 +msgid "To add an account:" +msgstr "" + +#: ../../features/user-accounts.rst:63 +msgid "Go to the Edit Database area of the site." +msgstr "" + +#: ../../features/user-accounts.rst:65 +msgid "Under **Authentication and Authorization**, click the **Add** link next to **Users**." +msgstr "" + +#: ../../features/user-accounts.rst:67 +msgid "Ask the user to enter a username, password and possibly email address." +msgstr "" + +#: ../../features/user-accounts.rst:69 +msgid "Only they should know what the password is." +msgstr "" + +#: ../../features/user-accounts.rst:70 +msgid "If you're hosting on the internet, all passwords should be at least moderately strong!" +msgstr "" + +#: ../../features/user-accounts.rst:71 +msgid "Passwords are not stored as raw passwords, so you can't figure out what their password is." +msgstr "" + +#: ../../features/user-accounts.rst:72 +msgid "The email address is optional." +msgstr "" + +#: ../../features/user-accounts.rst:73 +msgid "This email address is only used to reset their password if they forget it, and has nothing to do with the email address that Tabbycat uses to send emails to tournament participants (*e.g.* private URL links)." +msgstr "" + +#: ../../features/user-accounts.rst:75 +msgid "If they are being assigned superuser and/or staff status, check the relevant boxes." +msgstr "" + +#: ../../features/user-accounts.rst:77 +msgid "Click \"Save\" or \"Save and add another\"." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/features/venue-constraints.po b/docs/locale/bg/LC_MESSAGES/features/venue-constraints.po new file mode 100644 index 00000000000..741ae08ea58 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/features/venue-constraints.po @@ -0,0 +1,168 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:14\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/venue-constraints.po\n" +"X-Crowdin-File-ID: 1301\n" +"Language: bg_BG\n" + +#: ../../features/venue-constraints.rst:5 +msgid "Venue Constraints" +msgstr "" + +#: ../../features/venue-constraints.rst:7 +msgid "Tabbycat supports a basic form of venue constraints. A **venue constraint** is a requirement that a particular **team, adjudicator, institution** or **division** be assigned to a venue in a particular **venue category**. Typical uses would include:" +msgstr "" + +#: ../../features/venue-constraints.rst:12 +msgid "Meeting venue accessibility requirements of particular teams (*e.g.* step-free access)" +msgstr "" + +#: ../../features/venue-constraints.rst:14 +msgid "Placing adjudication core and tab team members close to the tab room" +msgstr "" + +#: ../../features/venue-constraints.rst:15 +msgid "Keeping all debates in a division in one location" +msgstr "" + +#: ../../features/venue-constraints.rst:17 +msgid "Constraints apply to **venue categories**, not individual venues. That is, you specify that (say) a team should be given a venue from a particular *list* of venues. Of course, it's permissible for a venue category to have only one venue in it." +msgstr "" + +#: ../../features/venue-constraints.rst:22 +msgid "The algorithm used to satisfy venue constraints is not guaranteed to be optimal. In some rare cases, it may propose an allocation that fails some constraints, even though some other allocation would have satisfied all (or more) constraints. In almost all practical circumstances, however, it should work, and save human effort (and time) in specially allocating rooms." +msgstr "" + +#: ../../features/venue-constraints.rst:29 +msgid "Adding venue categories" +msgstr "" + +#: ../../features/venue-constraints.rst:31 +msgid "Before you add venue constraints, you first need to add venue categories. Each venue category is a list of venues, typically satisfying a particular need. For example, you might have a category for each of the following:" +msgstr "" + +#: ../../features/venue-constraints.rst:35 +msgid "Venues with step-free access" +msgstr "" + +#: ../../features/venue-constraints.rst:36 +msgid "Venues that are close to general assembly (the briefing room)" +msgstr "" + +#: ../../features/venue-constraints.rst:37 +msgid "Venues that are close to the tab room" +msgstr "" + +#: ../../features/venue-constraints.rst:38 +msgid "Venues that are, or venues that are not, being live-streamed" +msgstr "" + +#: ../../features/venue-constraints.rst:40 +msgid "Each venue can be in as many categories as you like (or none at all)." +msgstr "" + +#: ../../features/venue-constraints.rst:44 +msgid "To add or edit venue categories, go to the **Import Data** area (under Setup) then select **Add/Edit Venue Categories**. Note that this page will show all existing Venue Categories first before showing the blank forms that allow you to create new categories. Give your category a name (like \"Step-free access\"), assign it some venues, then click the \"Save Venue Categories\" button at the bottom of the page." +msgstr "" + +#: ../../features/venue-constraints.rst:47 +msgid "Alternately you can add or edit a venue category by going to the **Edit Database** area (under Setup), scroll down to \"Venues\" and click \"Venue categories\". Then click the **+ Add venue category** button in the top-right of the page or click an existing item." +msgstr "" + +#: ../../features/venue-constraints.rst:50 +msgid "Adding venue constraints" +msgstr "" + +#: ../../features/venue-constraints.rst:52 +msgid "To add or edit venue constraints, go to the **Import Data** area (under Setup) then select **Add/Edit Venue Constraints**. Note that this page will show all existing Venue Constraints first before showing the blank forms that allow you to create new categories. Note that the \"Constrainee ID\" field should let you select from a dropdown or type in the name of an adjudicator, institution, or team (rather than having to lookup the exact ID)." +msgstr "" + +#: ../../features/venue-constraints.rst:57 +msgid "Alternately you can add or edit a venue category by going to the **Edit Database** area (under Setup), scroll down to \"Venues\" and click \"Venue constraints\". Then click the **+ Add venue category** button in the top-right of the page or click an existing item." +msgstr "" + +#: ../../features/venue-constraints.rst:59 +msgid "For each constraint, you need to specify four things:" +msgstr "" + +#: ../../features/venue-constraints.rst:62 +msgid "**Category**" +msgstr "" + +#: ../../features/venue-constraints.rst:62 +msgid "The venue category to which the subject of this constraint should be locked." +msgstr "" + +#: ../../features/venue-constraints.rst:65 +msgid "**Priority**" +msgstr "" + +#: ../../features/venue-constraints.rst:65 +msgid "This is a number used to resolve conflicts between constraints. Constraints with higher priority (greater number) take precedence over those with lower priority. If none of your constraints will ever conflict, then the priority is arbitrary (but it must still be specified)." +msgstr "" + +#: ../../features/venue-constraints.rst:72 +msgid "**Subject content** **type**" +msgstr "" + +#: ../../features/venue-constraints.rst:72 +msgid "The type of subject to which this constraint relates: adjudicator, team, institution or division." +msgstr "" + +#: ../../features/venue-constraints.rst:75 +msgid "**Subject ID**" +msgstr "" + +#: ../../features/venue-constraints.rst:75 +msgid "Which adjudicator, team, institution or division the constraint relates to. The textbox takes a number (the ID of the object in the database), but you can search for the subject by clicking on the search icon next to it. This will bring up a table of objects of the type specified in \"subject content type\" for you to choose from. (You need to select the subject content type first.)" +msgstr "" + +#: ../../features/venue-constraints.rst:86 +msgid "Applying venue constraints" +msgstr "" + +#: ../../features/venue-constraints.rst:88 +msgid "If you don't have any venue constraints for adjudicators, venue constraints are applied automatically when the draw is generated." +msgstr "" + +#: ../../features/venue-constraints.rst:91 +msgid "However, if you have one or more venue constraints for adjudicators, it's not possible to take adjudicator venue constraints into account during draw generation, because the adjudicator allocation isn't known then. You'll need to run the venue allocation yourself after you've allocated adjudicators." +msgstr "" + +#: ../../features/venue-constraints.rst:96 +msgid "To run venue allocation, go to **Edit Venues** (while looking at the draw), then in the screen where you can edit venues, click the **Auto Allocate** button. You can also do this at any other point (say, after adding a new venue constraint) if, for whatever reason, you would like to re-run the venue allocation algorithm." +msgstr "" + +#: ../../features/venue-constraints.rst:102 +msgid "If a venue constraint couldn't be met, a message will show in the \"conflicts/flags\" column of the draw. A constraint might not be met for a number of reasons:" +msgstr "" + +#: ../../features/venue-constraints.rst:106 +msgid "It could be that constraints of different parties (say, one team and one adjudicator) conflicted, so only one could be fulfilled." +msgstr "" + +#: ../../features/venue-constraints.rst:108 +msgid "It could be that all available rooms in the relevant category were already taken by other, higher-priority constraints." +msgstr "" + +#: ../../features/venue-constraints.rst:110 +msgid "It could just be one of those edge cases that's too hard for the naïve algorithm to handle." +msgstr "" + +#: ../../features/venue-constraints.rst:113 +msgid "Currently, Tabbycat doesn't tell you which of these happened, so if the venue allocation fails to meet all your constraints, it's on you to figure out why. In most scenarios, we imagine you'll have few enough constraints that this will be obvious; for example, if the chief adjudicator is judging a team with accessibility requirements, it might be obvious that the latter's constraint took priority. We might in future add support for more useful guidance on conflicting constraints, but we currently consider this to be of low priority." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/guide/comparisons.po b/docs/locale/bg/LC_MESSAGES/guide/comparisons.po new file mode 100644 index 00000000000..5061920cd37 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/guide/comparisons.po @@ -0,0 +1,338 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:14\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/comparisons.po\n" +"X-Crowdin-File-ID: 1303\n" +"Language: bg_BG\n" + +#: ../../guide/comparisons.rst:5 +msgid "Tab Software Comparisons" +msgstr "" + +#: ../../guide/comparisons.rst:7 +msgid "If you're reading this, you're probably interested in using Tabbycat, and wondering how it compares to other options. Perhaps you're a long-time user of another tab system, and wondering what Tabbycat can do better. This page is our effort to help answer this. Tabbycat's been around since 2010, but since BP support is a recent addition (2017), we thought it would be useful to outline the differences between Tabbycat and other BP software." +msgstr "" + +#: ../../guide/comparisons.rst:9 +msgid "Obviously, this page is written by the developers of Tabbycat, and naturally, we have our biases. But rarely is there a single best option for everyone and every situation: different tab programs imagine the tabbing process in a different ways and have made unique trade-offs in their development process and design decisions. So we've tried to be as fair and accurate as we can, and we've consulted experienced tab directors (other than us!) and chief adjudicators to help provide a balanced overview." +msgstr "" + +#: ../../guide/comparisons.rst:11 +msgid "At present, this guide just focuses on the major options available for the British Parliamentary format, although we'd like to expand this to incorporate the other formats that Tabbycat supports at some point in the future. As with all of our documentation, the source for this page `is on GitHub `_, and we welcome feedback and contributions." +msgstr "" + +#: ../../guide/comparisons.rst:14 +msgid "On feature lists" +msgstr "" + +#: ../../guide/comparisons.rst:16 +msgid "In the first draft of this document, we had a table that listed every feature we could think of, along with which software does and doesn't support it. This ended up not being a great idea, for a couple of reasons." +msgstr "" + +#: ../../guide/comparisons.rst:18 +msgid "Firstly, the largest feature disparities are for relatively niche features. All of the software discussed can do the basics necessary to run a tournament: generate draws, allocate adjudicators, enter results, etc. As a result, we will — like a good whip speech — be comparative and note key feature disparities when discussing each alternative software directly." +msgstr "" + +#: ../../guide/comparisons.rst:20 +msgid "Secondly, we felt that the 'checklist' approach to comparing tab software would do a disservice to the reasons you would actually choose one software over another. Except where a niche capability is essential, raw technical specifications rarely define the experience of using a product such as a phone, a car, or indeed, tabbing software. With Tabbycat, we've spent eight years continuously refining the tabbing workflow and smoothing out rough edges, and we believe you'll find the result extremely user-friendly and robust. As always, the best way to check this out is by :ref:`setting up a demo site and taking it for a spin `!" +msgstr "" + +#: ../../guide/comparisons.rst:23 +msgid "Comparison with Tabbie2" +msgstr "" + +#: ../../guide/comparisons.rst:26 +msgid "Centralised site vs individual sites" +msgstr "" + +#: ../../guide/comparisons.rst:28 +msgid "Tabbie2 and Tabbycat are both internet-based systems. Tabbie2 hosts all tournaments on a single site. However, when using Tabbycat, each tournament or organisation sets up its own site. Each model has its advantages and disadvantages in different areas:" +msgstr "" + +#: ../../guide/comparisons.rst:30 +msgid "**User identification**. Tabbie2's centralised model allows for site-wide user accounts for all tournament participants. This means that they can use the same login information for all tournaments, and perform tasks such as submitting ballots and feedback through that unified account. If you're in an established circuit, most of your participants probably already have user accounts which are identified and collected (via e-mail addresses) during registration. If you're in a newer circuit, or one where Tabbie2 is rarely used, most of your participants will probably need to create an account — a process which Tabbie2 handles by e-mailing them a request to do so when that person is added to your tournament." +msgstr "" + +#: ../../guide/comparisons.rst:32 +msgid "In Tabbycat's decentralised model, there is no persistent 'account' for tournament participants on each tab site or across different tab sites. Indeed, the only people who can log in to the site are those who have been given accounts by the tab director, such as tab staff and members of the adjudication core." +msgstr "" + +#: ../../guide/comparisons.rst:34 +msgid "For secure e-ballot and e-feedback submissions, Tabbycat assigns a \"private URL\" to each adjudicator or team. This is essentially a password that allows a participant to only submit data that they should have access to in that specific tournament. This means participants don't need user accounts and you don't need to collect user account information; however if your tournament uses e-ballots or e-feedback you will need to distribute those private URLs to participants. Tabbycat can e-mail these to participants for you, or print them to give them to participants, or you could distribute the URLs using your own means." +msgstr "" + +#: ../../guide/comparisons.rst:36 +msgid "**Control over data**. Some participant information in Tabbie2 is shared between tournaments, like their names and conflicts (discussed below). This means participants can manage it directly through their user accounts, without needing to go through you. On the other hand, this requires your participants to co-operate in keeping their accounts up to date, and to provide the correct e-mail address during registration (you'd be surprised how many don't). Furthermore, participants may look to you for assistance, and your ability to help is limited to directing them through Tabbie2 channels—easy enough if they forget their password, but not so much if they forget their account's e-mail address." +msgstr "" + +#: ../../guide/comparisons.rst:38 +msgid "Because each Tabbycat site is its own, you'll need to collect and import all participant details yourself. This might seem like more to do, but it also means there's no need to match your data to existing accounts, which can be time-consuming and prone to participant error. It also means you can freely change data, for example, to correct a participant's name or institution, or to add data like conflicts on an ad-hoc basis." +msgstr "" + +#: ../../guide/comparisons.rst:40 +msgid "**Data privacy**. Conflicts are typically entered into the tab, and are sensitive information. Tabbie2's centralisation allows for conflicts to be self-nominated by users and stored in their user accounts. This, in theory, saves the need for users to report conflicts to tab directors and other tournament staff. In practice, however, only special \"super\" users on Tabbie2 have access to the stored conflicts of users (otherwise anyone could access a user's conflicts by creating a new tournament and adding that user as a participant), so many tournaments need to collect this information from participants anyway." +msgstr "" + +#: ../../guide/comparisons.rst:42 +msgid "Tabbycat's decentralised model means that no-one will have access to conflict information except for the tab staff of each individual instance of Tabbycat. Unlike Tabbie2, Tabbycat's developers do not have any access to your tournament's data — conflicts or otherwise. However, to help us continually improve the software, Tabbycat does send error reports to its developers if there is a serious bug or crash in the code, which could potentially contain confidential information depending on which page triggered the report. As a result of Tabbycat's decentralised data storage, each tournament does need to collect and enter conflicts as part of their registration process." +msgstr "" + +#: ../../guide/comparisons.rst:44 +msgid "**When things go wrong**. In our view, this is probably the most important factor. Obviously, we all hope you never have to fix things. But no software is perfect, and software developed by volunteers in their spare time (as both Tabbie2 and Tabbycat are) is especially imperfect. On occasion, glitches or edge cases occur, and fixing them requires you to directly edit the offending data in the database. Being able to do this without assistance can be the difference between a delay of minutes and a delay of hours." +msgstr "" + +#: ../../guide/comparisons.rst:46 +msgid "In Tabbycat, because it's your site, you have full control of the database, and can edit it through Tabbycat's \"Edit Database\" area. This allows you to fix things (or break things, if you're not careful!). Tabbie2's centralisation prevents this—for obvious reasons, only Tabbie2's developers have direct database access, which makes their intervention necessary if direct database access is required to resolve a problem." +msgstr "" + +#: ../../guide/comparisons.rst:49 ../../guide/comparisons.rst:138 +msgid "Running your tournament" +msgstr "" + +#: ../../guide/comparisons.rst:51 +msgid "Tabbie2 and Tabbycat have broadly similar workflows for running rounds; at least on paper. Key differences are discussed below:" +msgstr "" + +#: ../../guide/comparisons.rst:53 +msgid "**Data import**. Tabbie2 takes CSV files for import. Tabbycat has a CSV file importer, but it's (for now) only accessible through a command-line interface and is only expected to be used for large tournaments by experienced tab directors. As a more user-friendly alternative, Tabbycat also has an import wizard that's designed to make it easy to copy and paste CSV data. This works well for small and medium scale tournaments, but is cumbersome for large ones." +msgstr "" + +#: ../../guide/comparisons.rst:55 +msgid "**Public interface**. Tabbycat can optionally publish the entire draw, as well as current team point standings and results of previous rounds, online. Tabbie2 shows to a logged-in user information about the debate that user is in for that round, but doesn't allow people to check up on people who are not themselves." +msgstr "" + +#: ../../guide/comparisons.rst:57 +msgid "**Position rotation**. Tabbie2 uses an algorithm known as the \"Silver Line algorithm\", which keeps swapping pairs of teams until no further improvement is found. Because it stops at any 'local optimum', this method isn't guaranteed to be the best possible distribution of positions, and for large tournaments it often isn't. Tabbycat instead uses the `Hungarian algorithm `_, an well-known algorithm that finds the (globally) optimal allocation of positions. (One might describe this algorithm, in technical terms, as 'powerful'.) Tabbycat also produces a position balance report, so that in every round you can see which teams have unbalanced position histories." +msgstr "" + +#: ../../guide/comparisons.rst:59 +msgid "**Venue allocations**. Both Tabbie2 and Tabbycat allow for debate venues to be automatically assigned and manually edited. Tabbycat also allows you to specify 'venue constraints' that can automatically match particular participants with their accessibility requirements, or alternatively allow for tournament staff, such as a convenor or chief adjudicator, to be allocated rooms close to the briefing hall or tab room." +msgstr "" + +#: ../../guide/comparisons.rst:61 +msgid "**Ballot entry**. Both Tabbie2 and Tabbycat support entering ballots online ('e-ballots') and entering ballots from paper from the tab room. Tabbie2 was built with e-ballots in mind, while Tabbycat was originally built for tab room staff, and the ballot entry paradigms reflect that. Both are flexible, just a little different—the best way to understand the difference is to try a demo of each. Also, Tabbycat takes note of the order in which speakers in a team spoke (i.e. who was PM and who was DPM), whereas Tabbie2 just records scores." +msgstr "" + +#: ../../guide/comparisons.rst:63 +msgid "As discussed earlier in *User identification*; Tabbie2's e-ballots are tied to unified user accounts, whereas Tabbycat's e-ballots are tied to per-tournament and per-adjudicator 'private URLs'." +msgstr "" + +#: ../../guide/comparisons.rst:65 +msgid "**Break and speaker categories**. Tabbie2 has ESL, EFL and novice markers, which you can enable in a tournament's settings. Tabbycat supports user-defined break and speaker categories, so if your tournament has ESL, EFL, novice or any other form of category, you can define and customise those categories as needed." +msgstr "" + +#: ../../guide/comparisons.rst:67 +msgid "**Adjudicator allocation algorithm**. Both Tabbie2 and Tabbycat use an algorithm to recommend an initial allocation of adjudicators to debates. In principle, they both work by assigning \"costs\" to allocations, and trying to find the minimum-cost assignment. Some notable differences:" +msgstr "" + +#: ../../guide/comparisons.rst:69 +msgid "Tabbie2 uses simulated annealing, which is not guaranteed to be optimal and technically needs to be tuned to be effective (which you're probably not doing). Tabbycat uses the Hungarian algorithm, which guarantees an optimal solution." +msgstr "" + +#: ../../guide/comparisons.rst:70 +msgid "On the other hand, the Hungarian algorithm can't account for relationships between adjudicators on a panel, so adjudicator-adjudicator conflicts aren't considered by Tabbycat's algorithm (though they are highlighted in the interface)." +msgstr "" + +#: ../../guide/comparisons.rst:71 +msgid "Tabbycat's cost function is simpler and more naive. On the other hand, Tabbie2's is more complicated and can be rather opaque (even if you read its source code)." +msgstr "" + +#: ../../guide/comparisons.rst:72 +msgid "Tabbie2 allows for single-gender panels to be charged an additional cost. Tabbycat's algorithm doesn't, but the interface does provide a way to easily check for this visually." +msgstr "" + +#: ../../guide/comparisons.rst:73 +msgid "Tabbie2 automatically calculates the importance of a room based on its bracket (team points). In Tabbycat, debate importance can be assigned for all debates automatically based on on a room's bracket or the quantity of live break categories inside it. Instead of — or subsequent to — automatic classification any importance value can be manually tweaked as desired. These options mean there is a greater flexibility in determining which debates the allocation algorithm should prioritise." +msgstr "" + +#: ../../guide/comparisons.rst:75 +msgid "**Adjudicator allocation interface**. While both interfaces use drag and drop interactions, and allow for color highlights to help identify adjudicators by gender, region, and feedback rating, Tabbycat's allocation interface was designed to be usable on both small screens and projectors, and has a number of extra features that can help inform allocations. These features include:" +msgstr "" + +#: ../../guide/comparisons.rst:77 +msgid "Clashes are shown directly in the interface when they apply, but dragging an adjudicator will also show you the potential conflicts that would occur if they were relocated in a new panel. This can make it much easier to avoid creating new clashes when shifting adjudicators around the draw." +msgstr "" + +#: ../../guide/comparisons.rst:78 +msgid "An inline display of an estimate of whether a team is 'live' for each of their break categories — i.e. whether they are 'safe' (have enough points to break); 'dead' (cannot gain enough points to break); or 'live' (still in contention)." +msgstr "" + +#: ../../guide/comparisons.rst:79 +msgid "'History' conflicts (where an adjudicator has seen a team before, or previously was on a panel with another judge) are displayed so they can be avoided." +msgstr "" + +#: ../../guide/comparisons.rst:80 +msgid "Each adjudicator is present as occupying a particular position (chair, panellist, trainee) rather than having those positions calculated automatically." +msgstr "" + +#: ../../guide/comparisons.rst:81 +msgid "Chairs can be 'swapped' by dragging adjudicators on top of each other, and an 'unallocated' area can be used to view and store adjudicators that have not been allocated." +msgstr "" + +#: ../../guide/comparisons.rst:83 +msgid "**Adjudicator feedback customisation**. Both Tabbie2 and Tabbycat have built-in adjudicator feedback forms, and allow you to specify the questions on the feedback form. Notable differences:" +msgstr "" + +#: ../../guide/comparisons.rst:85 +msgid "Setting up questions is painless on neither system. Tabbycat requires you to use the Edit Database area; Tabbie2 makes you click through a slightly more opaque maze of pages and forms." +msgstr "" + +#: ../../guide/comparisons.rst:86 +msgid "Tabbycat allows for a richer range of types of questions than Tabbie2 does." +msgstr "" + +#: ../../guide/comparisons.rst:87 +msgid "Tabbie2 allows you to specify different questionnaires for team-on-chair, chair-on-panellist and panellist-on-chair. Tabbycat only differentiates between team-on-adjudicator and adjudicator-on-adjudicator." +msgstr "" + +#: ../../guide/comparisons.rst:88 +msgid "Tabbycat gives you more control over who is expected to submit feedback on whom; e.g. whether teams submit on panellists, and whether panellists submit on each other. In Tabbie2, you can effect this with blank questionnaires, but only for the three options listed above." +msgstr "" + +#: ../../guide/comparisons.rst:89 +msgid "Tabbycat can, optionally, automatically incorporate feedback into adjudicator scores using a naive weighted average with the adjudicator base score. This can be disabled by simply setting feedback weight to zero, as some adjudication cores prefer. Tabbie2 has no ability to automatically incorporate feedback." +msgstr "" + +#: ../../guide/comparisons.rst:90 +msgid "Tabbycat produces a \"shame list\" of unsubmitted feedback, which you can optionally publish on the public-facing site to try to incentivise submission." +msgstr "" + +#: ../../guide/comparisons.rst:92 +msgid "(How participants access adjudicator feedback submission is discussed in *User identification* above.)" +msgstr "" + +#: ../../guide/comparisons.rst:95 ../../guide/comparisons.rst:149 +msgid "Other considerations" +msgstr "" + +#: ../../guide/comparisons.rst:97 +msgid "**Offline availability**. If you like, you can also install Tabbycat on your own computer, rather than host it as website on a server. This means that you can use it offline. However installing Tabbycat in this manner will require the (at least brief) use of a command line interface." +msgstr "" + +#: ../../guide/comparisons.rst:99 +msgid "**Cost**. Tabbie2 is free to use. Tabbycat is free to use for not-for-profit, not-for-fundraising tournaments; tournaments for profit or fundraising must make a donation of A$1 per team. In addition, larger tournaments that run on Tabbycat's recommended web host (Heroku) may need to purchase an upgraded database service (the free tier has storage limits) which will cost around ~US$3 to use for the duration of a week-long tournament." +msgstr "" + +#: ../../guide/comparisons.rst:101 +msgid "**Documentation**. Tabbycat has `relatively extensive documentation `_ that can be useful for learning how to use a particular feature or understanding what is happening at a technical level." +msgstr "" + +#: ../../guide/comparisons.rst:103 +#, python-format +msgid "**Hosting location**. Tabbycat recommends using Heroku, an established cloud platform service for deploying web applications. Heroku is in turn hosted on Amazon Web Services (AWS). Both Heroku and AWS are highly reliable and widely used; downtime for both has historically been (at worst) less than 0.05% over an annual period. Tabbie2 is hosted on `Uberspace `_; a pay-what-you-want web hosting service. To the best of our knowledge, uptime statistics are not available." +msgstr "" + +#: ../../guide/comparisons.rst:105 +msgid "**Multi-format support**. If you are interested in tabbing both four- and two- team formats there may be some value in using and learning Tabbycat as it will let you use the same software in both settings." +msgstr "" + +#: ../../guide/comparisons.rst:108 +msgid "Comparison with Tournaman" +msgstr "" + +#: ../../guide/comparisons.rst:111 +msgid "Native app vs web app" +msgstr "" + +#: ../../guide/comparisons.rst:113 +msgid "The crucial strength — and limitation — of Tournaman is that it is a Windows desktop application. Naturally, being a desktop app limits the features it can offer, relative to web apps like Tabbycat or Tabbie2, since it can't offer any online access. On the other hand, working with a desktop app can often be simpler than a web app." +msgstr "" + +#: ../../guide/comparisons.rst:115 +msgid "**Installation**. You'll need to run (or emulate) a Windows machine to run Tournaman. Assuming you're using Windows, Tournaman's installation process is easy and familiar." +msgstr "" + +#: ../../guide/comparisons.rst:117 +#, python-format +msgid "Tabbycat has a simple one-click installation process if you're deploying online (:ref:`to Heroku `). However, if you want to run Tabbycat on your own computer rather than a website, this is substantially more complicated. Local installations of Tabbycat work by having your computer emulate a web server, and while we've tried to make this as accessible as possible, a technical background is definitely helpful for this. Using our :ref:`Docker-based method ` should be simple, but it's not 100% reliable, and if it fails it can be difficult to figure out why. If internet access is available, we recommend running Tabbycat on Heroku." +msgstr "" + +#: ../../guide/comparisons.rst:119 +msgid "**Online features**. Because Tournaman runs fully offline, it naturally can't support many internet-based features: electronic ballots, online publication of draws and live team standings, and integrated tab release. Typically, if you wanted to publish anything online from Tournaman, you'd do so by publishing the files that Tournaman generates locally. In Tabbycat, all of these are built in, so there's a single website for all tab information." +msgstr "" + +#: ../../guide/comparisons.rst:121 +msgid "**Multi-user access**. Tournaman can be configured to allow networked ballot entry, but in order to set it up, you need to be comfortable with basic computer networking. This works best on small isolated networks that you control directly, e.g. a dedicated router set up in the tab room. It's not a great idea to set this up on computers connected to a university-wide network: many IT departments won't permit it, and even if they do, it's insecure, since anyone on the network can access it." +msgstr "" + +#: ../../guide/comparisons.rst:123 +msgid "Tournaman's multi-user access is designed primarily to allow tab assistants to enter data. Key administrative tasks, such as draw generation and adjudicator allocation, must still be done on the computer on which Tournaman is installed. In contrast, web-based systems like Tabbycat and Tabbie2 allow users to login from any internet-connected device to access the functionality permitted by their account. This is often extremely useful if, say, you want to log in to a lectern computer, or have tab assistants work on mobile devices that they have with them." +msgstr "" + +#: ../../guide/comparisons.rst:125 +msgid "If you choose to install Tabbycat offline (rather than on Heroku), it's also possible to have the computer on which the local installation resides serve the website to other computers on the same network. This then permits anyone on the same network to access the \"local\" installation as if it were hosted on the internet. However, like Tournaman, such a configuration requires at least basic networking experience, and for security reasons is only advisable on small isolated networks that you control." +msgstr "" + +#: ../../guide/comparisons.rst:127 +msgid "**Backups and portability**. Both Tournaman and Tabbycat (unlike Tabbie2) store data in a way that is completely accessible to you. Tournaman does this by saving files on your computer's hard drive, while Tabbycat stores data in a SQL database that belongs to you." +msgstr "" + +#: ../../guide/comparisons.rst:129 +msgid "It should be emphasized that in both Tournaman and Tabbycat, actually needing to revert to a backup is extremely rare. Almost always, any glitch or error that breaks the tab can be resolved by editing data directly, without needing to \"roll back\" to a previous state. In Tournaman, this is done by editing the files that it writes to your hard drive (they're just XML files). In Tabbycat, this is done through the \"Edit Database\" area." +msgstr "" + +#: ../../guide/comparisons.rst:131 +msgid "Tournaman's storage of data as XML files makes backups easy, although effort should be made to have backups stored on other computers or the cloud (e.g. on Dropbox) in case the tab computer breaks or is lost. Restoring data from those backups (or transferring the tab to a different computer) is typically a simple process of copying the files back to the original location." +msgstr "" + +#: ../../guide/comparisons.rst:133 +msgid "As for Tabbycat, in online installations, backups can be taken easily using Heroku's `database backup capability `_. However, restoring backups requires you to have the Heroku command line interface installed. In offline installations, PostgreSQL's \"dump\" and \"restore\" commands are recommended, and may require some perseverance to get going reliability, particularly if you don't have prior SQL experience." +msgstr "" + +#: ../../guide/comparisons.rst:135 +msgid "Generally there is no need for data portability when working with an online copy of Tabbycat — the website can be accessed anywhere. However if working with an offline/local copy, a tab can be transferred between machines by creating a backup of the database and restoring it to the other machine's database (doing so requires technical knowledge)." +msgstr "" + +#: ../../guide/comparisons.rst:140 +msgid "**Adjudicator feedback**. Tournaman lets you assign judges rankings, however it does not directly manage or assist the process of collecting judge feedback. As such tab directors generally need to run a parallel feedback system, and then manually copy over changes to an adjudicator's ranking into Tournaman itself. In contrast, Tabbycat has integrated methods for collecting judge feedback that allow it to be more easily issued, collected, viewed, and automatically translated into modifications to an adjudicator's rank." +msgstr "" + +#: ../../guide/comparisons.rst:142 +msgid "**Adjudicator allocation**. Tournaman has a fixed judge ranking scale and (from what we understand) has a relatively fixed procedure for allocating panels according to their absolute ranks. We are unsure about the exact mechanics of how this works, but broad details are `available here `_." +msgstr "" + +#: ../../guide/comparisons.rst:144 +msgid "As with the discussion of allocation interfaces vis-à-vis Tabbie2, there are a number of features in the Tabbycat allocation interface that mean it is more easily used in a collaborative setting and can display additional information to inform draws." +msgstr "" + +#: ../../guide/comparisons.rst:146 +msgid "**Flexibility in draw rules**. As we've said, all major tab systems are WUDC-compliant. But if you want to deviate from WUDC rules, Tournaman has a few more options. Whereas Tabbycat allows you to use intermediate brackets (rather than pull-ups), Tournaman allows you to sacrifice power-pairing integrity for position balance (though this generally isn't necessary to achieve position balance), fold within brackets and avoid teams hitting their own institution. On the other hand, Tabbycat allows you to tune how position balance trades off between teams (which the WUDC constitution doesn't precisely specify)." +msgstr "" + +#: ../../guide/comparisons.rst:151 +msgid "**Stability and development**. Tournaman has been in use for over a decade and is generally considered to be stable and reliable. However, new features are relatively rarely added, and its being a native app means that it doesn't boast as many features as Tabbycat or Tabbie2." +msgstr "" + +#: ../../guide/comparisons.rst:153 +msgid "**Cost**. Tournaman is free to use. Tabbycat is free to use for not-for-profit, not-for-fundraising tournaments; tournaments for profit or fundraising must make a donation of A$1 per team. In addition, larger tournaments that run on Tabbycat's recommended web host (Heroku) may need to purchase an upgraded database service (the free tier has storage limits) which will cost around ~US$3 to use for the duration of a week-long tournament." +msgstr "" + +#: ../../guide/comparisons.rst:155 +msgid "**Availability of source code**. Tournaman's code is closed-source, meaning it is not publicly available. If you do not have any coding experience this is probably not relevant to you, but if you do, having access to the source of Tabbycat can help you understand how the program works and customise it as needed." +msgstr "" + +#: ../../guide/comparisons.rst:158 +msgid "Comparison with hand tabbing" +msgstr "" + +#: ../../guide/comparisons.rst:160 +msgid "Hand tabbing is easy, until it isn't. Traditionally, using a spreadsheet has been the go-to option for smallish tournaments because, hey, you're pretty handy with Excel, right? Making draws in spreadsheets (or on paper) seems like a pretty approachable task; ultimately it's all cells and formulae and numbers unlike the more arcane underpinnings of actual tab software." +msgstr "" + +#: ../../guide/comparisons.rst:162 +msgid "However, hand tabbing does require you to have a good working knowledge of how your format's rules work and how your spreadsheet software of choice can be made to work them. That process might be easy for you, or it might not be. But, either way, we'd like to think that Tabbycat offers a better alternative to hand-tabbing; regardless of how well you can actually hand-tab. The setup costs of creating a copy of Tabbycat are pretty low and you can speed through the process of draw creation, adjudicator allocation, and result entry at a pace. It's still not going to be as fast a spreadsheet for a small tournament, but we think it's getting pretty close. And in exchange for a little speed you get a much stronger guarantee of your draws being correct, options for online data entry, a more comprehensive and shareable final tab, and much more. Give it a shot!" +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/guide/scaling.po b/docs/locale/bg/LC_MESSAGES/guide/scaling.po new file mode 100644 index 00000000000..b203a070c78 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/guide/scaling.po @@ -0,0 +1,252 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:14\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/scaling.po\n" +"X-Crowdin-File-ID: 1305\n" +"Language: bg_BG\n" + +#: ../../guide/scaling.rst:5 +msgid "Scaling & Performance on Heroku" +msgstr "" + +#: ../../guide/scaling.rst:7 +msgid "If you expect your Tabbycat site to gain lots of traffic — either because it has lots of participants or will be followed by lots of people online — there are a number of strategies to ensure that it will remain fast despite this attention. This is typically only necessary for very large tournaments that will display information on the public-facing version of your Tabbycat site; and even then only minor amounts of 'scaling' are needed at particular moments. However, if your site does become slow you want to know what to do and how to do it ahead of time in order to prevent disruptions." +msgstr "" + +#: ../../guide/scaling.rst:9 +msgid "By default, a Tabbycat installation runs on Heroku's free tier. This is a resource-constrained environment and improving performance will typically require paying for higher levels of Heroku services. These services are billed on a per-minute (not monthly) basis, meaning that if you make use of any upgrades mentioned below, you will only be billed for the actual duration used — i.e. if an upgrade is listed at $100/month, but you only use it for 4 hours, the final bill will be around $0.50. As such you can make use of high-performing resources just when they are needed, without needing to pay the full monthly price to maintain the resource indefinitely." +msgstr "" + +#: ../../guide/scaling.rst:13 +msgid "This page was largely written before a number of improvements in the ``2.2`` release of Tabbycat that have significantly increased traffic capacity. Its recommendations may be overly cautious given these improvements." +msgstr "" + +#: ../../guide/scaling.rst:17 +msgid "Scaling for performance reasons is a separate issue to that of `upgrading the database capacity `_ of your tab which just provides the ability to store data. That said, typically only tournaments that are large enough to need an upgraded database will be the ones that ever need to consider scaling for performance anyway." +msgstr "" + +#: ../../guide/scaling.rst:20 +msgid "Introduction to Scaling" +msgstr "" + +#: ../../guide/scaling.rst:22 +msgid "Heroku's primary resource is that of a 'dyno'. Each dyno can be thought of as running a copy of Tabbycat. Following the 'many hands make light work' principle, running a greater number of dynos will generally improve the ability of your site to serve lots of pages simultaneously because traffic is divided up amongst all of the available dynos. In normal circumstances most Tabbycat pages on the public site are served by Heroku in under a second; however they can take noticeably longer than that when the quantity of incoming traffic exceeds the capacity of the existing dyno(s) to serve it. In such cases the delay accrues because the excess page loads need to first wait for an available dyno in addition to the standard wait for a page to be processed and transferred to the user." +msgstr "" + +#: ../../guide/scaling.rst:24 +msgid "Thus scaling is almost always a process of increasing *throughput* in order to decrease the chance that any page load needs to wait in order to be served by a dyno. On the flip side, having extra dynos or upgraded dynos won't make Tabbycat itself run any faster in general — they are essentially wasted unless there is sufficient large amounts of traffic that a single dyno cannot serve all of it without creating a queue." +msgstr "" + +#: ../../guide/scaling.rst:26 +msgid "Dynos can be scaled by adding more dynos ('horizontally') or by adding upgraded dynos ('vertically'). In general, horizontal scaling should be the first and most effective strategy — the problem traffic causes is due to *concurrency* or lots of people loading lots of pages all at once. The traffic on Tabbycat sites typically fluctuates a lot, with moments of high intensity clustering around draw releases, round advances, and the final tab release. As such you generally only need to scale your dynos for very short periods of time." +msgstr "" + +#: ../../guide/scaling.rst:28 +msgid "In order to increase the number of dynos you first need to be using at least the **Standard 1X** level of dyno. Once set the Heroku Dashboard will show you a slider that can be used to increase the dyno count. While dynos higher than the **Standard 1X** level may help serve pages a tiny bit faster, having *more* dynos is far more effective than having *upgraded* dynos. Upgrading beyond **Standard 1X** is generally only required if you need additional memory (as described below) or want to use auto-scaling (also described below)." +msgstr "" + +#: ../../guide/scaling.rst:32 +msgid "There should be no need to increase the number of 'worker' dynos. While 'web' dynos are responsible for serving traffic, the worker only handles a few rare tasks such as serving email and creating allocations." +msgstr "" + +#: ../../guide/scaling.rst:34 +msgid "At large tournaments you should always upgrade your existing '**Free**' dyno to a '**Hobby**'-level dyno. This upgrade is crucial as it will enable a \"Metrics\" tab on your Heroku dashboard that provides statistics which are crucial to understanding how your site is performing and how to improve said performance. If you are at all unsure about how your site will perform it is a good idea to do this pre-emptively and keep an eye on these metrics over the course of the tournament." +msgstr "" + +#: ../../guide/scaling.rst:38 +msgid "If pages are not loading it could be due to two things: your site being overloaded with traffic, or a bug in Tabbycat itself. Generally, if you see a generic or Heroku-branded 'application error' page that means it is the former problem, whereas a Tabbycat-branded page indicates the latter." +msgstr "" + +#: ../../guide/scaling.rst:41 +msgid "Scaling Dynos" +msgstr "" + +#: ../../guide/scaling.rst:43 +msgid "Once you have upgraded your dyno to the **Hobby** level, the metrics tab provides a number of graphs that can be used to help identify how your site is performing. The first graph, **Events** provides an overview of any problems that are occurring:" +msgstr "" + +#: ../../guide/scaling.rst:47 +msgid "Red marks, or those labelled *Critical* typically indicate some sort of problem. H13 errors are a good measure of the amount of pages failing to load during heavy traffic, however they can be triggered under normal conditions — you want to check how many are occurring within a given time period and ensure its more than a handful." +msgstr "" + +#: ../../guide/scaling.rst:50 +msgid "Response Time & Throughput" +msgstr "" + +#: ../../guide/scaling.rst:54 +msgid "The response time is the amount of time it takes a dyno to load a page and serve it to your users. Smaller response times are thus good, and long response times (over fifteen seconds) indicate that a site is struggling to serve its content due to a large amount of queueing." +msgstr "" + +#: ../../guide/scaling.rst:56 +msgid "Heroku dynos have a maximum response time of 30 seconds, at which point they will stop serving the request. To users this appears as an error page or as a page that never loads. Thus if you see the graph is at or approaching 30 seconds at any point you need to try and diagnose what is causing this and add more resources to reduce the response time." +msgstr "" + +#: ../../guide/scaling.rst:60 +msgid "You can toggle the percentiles in this graph. Problems are much more severe if it affects the 50th percentile which represents a site that is probably not loading for the majority of its users. There are also a couple of Tabbycat functions (like automatic adjudicator allocation) that naturally take 10-20 seconds which means that the maximum or 99th percentile metrics are not very reflective of general traffic." +msgstr "" + +#: ../../guide/scaling.rst:62 +msgid "Closely related to this is the **Throughput** graph (further down) which shows how many pages your site is serving per second. Normally this is not particularly interesting, however note that the red part of the bar graph shows the amount of failed page requests. Like the **Response Time** graph, this can indicate issues with the site — normally this red portion should be well below 1rps (and ideally 0rps). If it is above 0.5 it represents a site that is producing a significant number of failed page loads." +msgstr "" + +#: ../../guide/scaling.rst:64 +msgid "You can verify if pages are not being served to users by checking the **Events** graph and looking for H12 errors, although occasionally they are not reported properly. A large amount of H13 errors can also be a cause for concern." +msgstr "" + +#: ../../guide/scaling.rst:67 +msgid "Dyno Load" +msgstr "" + +#: ../../guide/scaling.rst:71 +msgid "This graph shows how well your dynos are being utilised. It is scaled relative to the total number of dynos you are running (or have run previously). So if you have 10 dynos and the bar graph is near the '10' this shows that each dyno is being utilised 100% (either on average over a 1-minute period or as the maximum use over a 1-minute period)." +msgstr "" + +#: ../../guide/scaling.rst:73 +msgid "If this bar graph is hitting the top it will usually mean that a site that is slow or failing to load pages — if each dyno is busy it can't serve a new page until it is finished. This issue can often compound, with more traffic coming in than it is possible to serve and clear." +msgstr "" + +#: ../../guide/scaling.rst:75 +msgid "If your average, rather than maximum, dyno load is approaching the upper limit of however many dynos you are running now (remember the y-axis will often exceed however many dynos you are currently running) that is a very good sign that you should increase the quantity of dynos being run. Continue adding dynos and evaluate how this effects load so that the bar is not hitting its limit." +msgstr "" + +#: ../../guide/scaling.rst:77 +msgid "If you are consistently needing to scale things (or having previously had issues and are expecting a very heavy burst of traffic) it may be worth upgrading to the **Performance-M** dyno type, which will then allow you to enable the *Auto-scaling* feature. This will automatically add dynos as needed to cope with traffic, and remove them when they become unnecessary. This is very effective; however, note that this dyno-type is $250/month per dyno and will self-add dynos (within an upper limit you can specify). While this is not a huge price on a per hour/minute basis (even running 10 for an hour is only $4) you definitely want to ensure you keep a close eye on it and turn it off when it is not necessary. Note that it also tends to be quite aggressive in how many dynos it 'thinks' you need — you may want to increase the default response time threshold to prevent it scaling so quickly." +msgstr "" + +#: ../../guide/scaling.rst:80 +msgid "Memory Usage" +msgstr "" + +#: ../../guide/scaling.rst:84 +msgid "It is very rare that Tabbycat sites will hit the memory limits of the Free or Hobby level dynos — its almost always hovering around 256MB of the (standard dyno) limit of 512MB. However, if the graph is approaching the dashed line you may want to first restart the dynos (in the *More* dropdown in the upper-right) and see if that resolves it." +msgstr "" + +#: ../../guide/scaling.rst:86 +msgid "You can also confirm that memory limits are causing the app to fail by checking for the presence of R14 errors in the Events chart. If your site continues to come very close to that memory limit you will want to upgrade your dynos to the higher level dynos which have increased memory." +msgstr "" + +#: ../../guide/scaling.rst:89 +msgid "Alerts" +msgstr "" + +#: ../../guide/scaling.rst:91 +msgid "If the site is really struggling to perform its usually relatively obvious. However, if you want to be pre-warned of this, or just ensure things are as fast as possible, you can use the \"Configure Alerts\" feature on the Metrics page to receive emails when things are getting slow. We would recommend creating a Response Time Threshold warning of ``15000ms`` and a Response Requests Percentage Threshold of ``5%``." +msgstr "" + +#: ../../guide/scaling.rst:94 +msgid "Understanding Caching" +msgstr "" + +#: ../../guide/scaling.rst:96 +msgid "When a page is 'cached' it means that Tabbycat has stored a copy of the final output of the page. It can then send that copy directly to a user who is loading that page without needing to go through the normal process of fetching the data from the database, running any calculations, and formatting the results. Pages that are cached will serve quickly — if a page is taking more than a few seconds to load it usually means that page has not been cached (or your site is having too much traffic to serve pages quickly in general). The downside is that changes to the underlying data won't update until the cache has 'expired' and is regenerated. So, for example, a cached copy of the draw will not immediately reflect change to panels and a newly-release motion or tab page will not show up in the menu immediately." +msgstr "" + +#: ../../guide/scaling.rst:98 +msgid "By default Tabbycat caches public pages according to three levels: a 1-minute timeout, a 3.5-minute timeout, and a 2-hour timeout. The only pages on the 2-hour timeout are those that come with a full tab release — such as speaker standings, the motions tab, etc. Public pages that need to update quickly, such as the draw and homepage, are on the 1-minute timeout to ensure data is up to date. Public pages that update less frequently such as Standings, Results, Participants, and Breaks are on the 3.5-minute timeout." +msgstr "" + +#: ../../guide/scaling.rst:100 +msgid "Caching means that a Tabbycat site should actually perform *faster* when it is being viewed by many people at once, as the caches are constantly up-to-date and can be used to serve the majority of requests. When there is less traffic the caches are more likely to be regenerated each time someone goes to a page resulting in slower page loads. Most often performance problems come when a popular page, such as a newly-released draw gains a large amount of traffic suddenly (such as by people constantly refreshing the draw). If the page hasn't finished caching it has to do a full page calculation for each of those new loads, which will spike the amount of resource use until the page load queue is cleared." +msgstr "" + +#: ../../guide/scaling.rst:102 +msgid "One way to help mitigate this is to try and load those pages first yourself to ensuring the cache is populated before other people access it. To do so you would generally open a new private browsing tab, and navigate to the specific page(s) immediately after you have enabled them. This may require going to the URL directly rather than relying on the homepage or menu (which may not have been updated to show the new information). In the case of draw releases, this can also be mitigated by not release online draws until they have been first shown on a projector (so that people aren't trying to get draw information ahead of time)." +msgstr "" + +#: ../../guide/scaling.rst:104 +msgid "You can also increase the 1-minute timeout for the pages that are popular during the in-rounds, by going to the **Settings** section of your Heroku dashboard, clicking *Reveal Config Vars*, and creating a new key/value of ``PUBLIC_FAST_CACHE_TIMEOUT`` and ``180`` (to set the timeout to be 3 minutes i.e. 180 seconds). This should only be necessary as a last resort. Turning off public pages is also an option." +msgstr "" + +#: ../../guide/scaling.rst:106 +msgid "If you ever need to clear the cache (say to force the site to quickly show an update to the speaker tab) you can install `Heroku's Command Line Interface `_ and run the following command, replacing ``YOUR_APP`` with your site's name in the Heroku dashboard::" +msgstr "" + +#: ../../guide/scaling.rst:111 +msgid "Postgres Limits" +msgstr "" + +#: ../../guide/scaling.rst:113 +msgid "The free tier of the Postgres database services has a limit of 20 'connections'. As with Redis, it is rare that a Tabbycat site will exceed this limit; most Australs-sized tournaments will see a maximum of 12 connections at any point in time." +msgstr "" + +#: ../../guide/scaling.rst:117 +msgid "You can monitor this in your Heroku Dashboard by going to the **Resources** tab and clicking on the purple Postgres link. The **Connections** graph here will show you how close you are to the limit. The first tier up from the 'free' Hobby tiers (i.e. ``Standard-0``) has a connection limit of 120 which can be used to overcome these limits if you do encounter them." +msgstr "" + +#: ../../guide/scaling.rst:120 +msgid "Mirror Admin Sites" +msgstr "" + +#: ../../guide/scaling.rst:122 +msgid "If you *really* want to be safe, or are unable to resolve traffic issues and unable to quickly complete tasks on the admin site, it is possible to create a 'mirror' of the tab site just for admin use. This site can be configured to share the same database as the primary site — meaning it is in effect always identical — but because it is at a separate URL it won't have to respond to public traffic and so can't be swamped with a large page load queue." +msgstr "" + +#: ../../guide/scaling.rst:124 +msgid "This requires some technical knowledge to setup and hasn't been rigorously tested. It works fine in our experience but we haven't tested it extensively. If using this make sure you backup (and now how to restore backups) before setting one up." +msgstr "" + +#: ../../guide/scaling.rst:126 +msgid "To do so you would deploy a new copy of Tabbycat on Heroku as you normally would. Once the site has been setup, go to it in the Heroku Dashboard, click through to the **Resources** tab and remove the Postgres and Redis Add-ons. Using the `Heroku Command Line Interface `_ run this command, substituting ``YOUR_APP`` with your *primary* tab site's name (i.e. the app that you had initially setup before this)::" +msgstr "" + +#: ../../guide/scaling.rst:130 +msgid "Here, make a copy of the ``DATABASE_URL`` and ``REDIS_URL`` values. They should look like ``postgres://`` or ``redis://`` followed by a long set of numbers and characters. Once you have those, go to the *Settings* tab of the Heroku dashboard for your *mirror* tab site. Click **Reveal Config Vars**. There should be no set ``DATABASE_URL`` or ``REDIS_URL`` values here — if there are check you are on the right app and that the add-ons were removed as instructed earlier. If they are not set, then add in those values, with ``DATABASE_URL`` on the left, and that Postgres URL from earlier on the right. Do the same for ``REDIS_URL`` and the Redis URL. Then restart the app using the link under **More** in the top right." +msgstr "" + +#: ../../guide/scaling.rst:132 +msgid "Once you visit the mirror site it should be setup just like the original one, with changes made to one site also affecting the other as if they were just a single site." +msgstr "" + +#: ../../guide/scaling.rst:135 +msgid "Estimated Costs" +msgstr "" + +#: ../../guide/scaling.rst:137 +msgid "As a quick and rough benchmark, here is a list of typical prices you would encounter if scaling to meet the performance needs of a high-team-count high-traffic tournament at the approximate scale of an Australs (~100 teams) or above. This is a probably an overly-conservative estimate in that it is based on tournaments run on the ``2.1`` version of Tabbycat. Versions ``2.2`` and above should perform dramatically better and thus have less need to scale using Standard and Performance dynos." +msgstr "" + +#: ../../guide/scaling.rst:139 +msgid "1x ``Hobby Basic Postgres Plan`` ($9/month) run all day for 14 days = ~$4" +msgstr "" + +#: ../../guide/scaling.rst:140 +msgid "A tournament of this size will require an upgraded database tier for the time when you are adding new data; i.e. during registration and rounds. Once the tab is released (and no further data changes needed) however you can downgrade it back to the ``Hobby Dev`` tier." +msgstr "" + +#: ../../guide/scaling.rst:141 +msgid "1x ``Hobby Dyno`` ($7/month each) run all day for 7 days = ~$2" +msgstr "" + +#: ../../guide/scaling.rst:142 +msgid "As recommended, 1 hobby dyno should be run as a baseline in order to see the metrics dashboard; but this can be downgraded a day or so after the tab has been released and traffic is sparse." +msgstr "" + +#: ../../guide/scaling.rst:143 +msgid "3x ``Standard 1X Dyno`` ($25/month each) run 10 hours a day for 4 days = ~$4" +msgstr "" + +#: ../../guide/scaling.rst:144 +msgid "This higher quantity of dynos should only be necessary during traffic spikes (i.e. draw releases, immediately after round advances, and tab release) but unless you want to be constantly turning things on/off its usually easier just to upgrade them at the start of each day of in-rounds (or when the tab is published) and downgrade them at the end of each day. As mentioned earlier, you should occasionally check the *Dyno Load* in the Metrics area and adjust the number of dynos as needed." +msgstr "" + +#: ../../:1 +msgid "``Autoscaled Performance M Dynos`` ($250/month each) average of 5 run for 1 hour = ~$2" +msgstr "" + +#: ../../guide/scaling.rst:146 +msgid "For just round 1 it is a good idea to upgrade to the ``Performance M`` tier so you can enable auto-scaling and thus have the site automatically adjust the number of dynos to the amount of traffic it's getting (rather than having to guess the number of dynos needed ahead of time). Doing so ensures that the first round runs smoothly and means that you can then review the Metrics graphs to see what your 'peak' load looks like and resume using whatever quantity of ``Standard 1X Dyno`` will accommodate this peak load in future rounds." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/guide/tournament-logistics.po b/docs/locale/bg/LC_MESSAGES/guide/tournament-logistics.po new file mode 100644 index 00000000000..a516d748579 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/guide/tournament-logistics.po @@ -0,0 +1,1394 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:14\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/tournament-logistics.po\n" +"X-Crowdin-File-ID: 1307\n" +"Language: bg_BG\n" + +#: ../../guide/tournament-logistics.rst:5 +msgid "Tournament Logistics" +msgstr "" + +#: ../../guide/tournament-logistics.rst:7 +msgid "Unlike the rest of our documentation, this section does not deal with particular features or technical concerns with Tabbycat itself. Instead it is an attempt to outline the logistics of tab direction and aims to be of general relevance for people running major tournaments. At present, it is organised by the various ‘stages' of tabbing a tournament, and most of the content takes the form of check-lists or comments designed to highlight and provide guidance on common issues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:9 +msgid "Whilst it aims for general relevance, we should note that this guide is relatively opinionated and mostly written from the perspective of people whose primary experience is tabbing at Australasian tournaments using Tabbycat. That said, we welcome feedback and additions that can account for different format and regional considerations. In the future, if the guide becomes more general and more extensive, it could be spun off into a separate project." +msgstr "" + +#: ../../guide/tournament-logistics.rst:11 +msgid "As with the rest of our documentation, this page is source-available and we welcome :ref:`feedback and contributions `. Note also that we've formatted this guide a single page to reduce clutter, but the sub-sections in the sidebar can be used to help navigate across sections." +msgstr "" + +#: ../../guide/tournament-logistics.rst:14 +msgid "Planning and Preparation" +msgstr "" + +#: ../../guide/tournament-logistics.rst:16 +msgid "This section aims to outline concerns that occur in the months before the tournament: after you have agreed to help with tabbing and while the organising committee and adjudication core are deciding how they want to run key processes such as registration and feedback. It is organised in terms of who you should coordinate with in order to plan for a well-tabbed tournament." +msgstr "" + +#: ../../guide/tournament-logistics.rst:19 +msgid "General Notes" +msgstr "" + +#: ../../guide/tournament-logistics.rst:21 +msgid "You should avoid being the sole person responsible for that tab unless it is a small tournament. There are many cases where you want to be in several places at once and the easiest way to accommodate that is by having co-directors or trusted assistants. Few tab decisions require a single source of authority; it is far better to have multiple people available to share responsibilities around." +msgstr "" + +#: ../../guide/tournament-logistics.rst:23 +msgid "In a similar manner, it is worth considering how you can use the tournament to help train other people. Typically, knowledge of tabbing is concentrated in relatively few people and gained mostly through on-the-ground experience; meaning that every tournament should be approached as rare opportunity to help spread knowledge about tabbing more widely in a circuit. Consider reaching out to institutions or the tournament as a whole to see if they have anyone who would be interested in helping out." +msgstr "" + +#: ../../guide/tournament-logistics.rst:26 +msgid "Convenors" +msgstr "" + +#: ../../guide/tournament-logistics.rst:28 +msgid "It might sound obvious but it will pay to have a very thorough conversation about the tab process (more or less the contents of this document) with the convenors a few months out from the tournament. Do this even if you know the convenors to be knowledgeable or experienced debaters. Key concerns are:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:32 +msgid "Whether internet access will be available and whether participants can be presumed to have smart phones. This has an obvious impact on how online feedback, ballots, and draw release is done. Note that Eduroam is not necessarily a reliable guarantee of access; many participants will come from universities who don't have access to it or will need to follow a setup process that is onerous or requires them to be at their home institution." +msgstr "" + +#: ../../guide/tournament-logistics.rst:33 +msgid "What kind of room is the tab room going to be? Is it possible to optimize its placement when the bookings for rooms are made? Key details include: How large is it? Does it have a sufficient amount of desk space (for data entry)? Does it have a good projector (for allocations)?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:34 +msgid "If they have the resources, having an adjacent room available for just the adjudication core to use can also be useful. While you want to work closely with the adjudication core, they may want to discuss sensitive information (motions, equity) in a space without volunteers present; or they might at times get in the way of things, such as by eating lunch in the middle of a frenetic ballot entry process." +msgstr "" + +#: ../../guide/tournament-logistics.rst:35 +msgid "Ensure that plans are made for food to be brought to tab room. Otherwise you will starve and the adjudication core will swan off to lunch. Having regular access to caffeine can also be similarly essential to some adjudication and tab teams." +msgstr "" + +#: ../../guide/tournament-logistics.rst:36 +msgid "What kind of printers will be available? Can the tournament buy/borrow one? This is obviously a key consideration for pre-printed ballots. Also try and ensure there are back-up printing options if possible. Clearly stipulate your need for ink and paper; and try and opt for a black/white laserjet, over an inkjet, if possible." +msgstr "" + +#: ../../guide/tournament-logistics.rst:37 +msgid "What kind of volunteers will be available? How many, and what is their experience level? As a very broad recommendation, you probably want around 1 volunteer for every 10 rooms, assuming volunteers are performing a dual role as data-enterers and ballot-collectors." +msgstr "" + +#: ../../guide/tournament-logistics.rst:38 +msgid "Will the tournament make a donation to whoever maintains the tabbing software you are using? Depending on the license of your tabbing software and the nature of your tournament (for profit vs not for profit) this may be required. Also, if your tab is self-hosted or independently hosted (such as how Tabbycat is generally deployed on Heroku) accounting officers should also be aware that there will be some costs associated with hosting the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:39 +msgid "You should also ensure that people helping with the tab are fairly compensated for their flights, registration, etc and that any volunteers are invited along to socials and/or given some other recompense." +msgstr "" + +#: ../../guide/tournament-logistics.rst:40 +msgid "Will Swing teams be available? You should plan to have at least one more than you need. For example, with 39 teams, you should have both an 40th swing team to fill in the draw, and the option to easily assemble an 41st swing team in case a team goes missing. At very large tournaments (say over 150 teams) you should plan for even more swing team capacity — it's not unheard of for say three teams to vanish all in a single round. In these cases, you should try and ensure that the swing teams are always ready to go — i.e. that that they are pre-formed, you have a clear communication channel with them, and that they distributed/waiting near the debating rooms so they can fill in at a moment's notice (often you will only find out that teams are missing right as debates are scheduled to start)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:41 +msgid "How will critical information be communicated to participants? Consider that in general, Facebook announcements do not reach many people, although paying to boost the posts is often a very cheap way of dramatically raising their effectiveness. In particular also ensure or check how you manage to get in touch with teams or adjudicators who go missing: will they have reliable phone numbers? Can you get a list of institutional reps who can be reliably called? You want to have processes in place for chasing up adjudicators who do things such as make scoring mistakes as soon as possible in order to minimise delays." +msgstr "" + +#: ../../guide/tournament-logistics.rst:42 +msgid "How will critical information be shared between the tab team, adjudication core, and logistics/convening teams? For smaller/medium sized tournaments a group chat augmented by phone calls (assuming everyone knows everyone else's number) can be sufficient, but even then, you need to ensure that any critical information conveyed privately (i.e. in a call or in person) is conveyed back to the group channel. At very large tournaments (or if you have the resources) walkie-talkies are an excellent way to manage communication — just make sure you have (ahead of time) reserve the different channels to a distinct and known purpose (i.e. general discussion; just the tab team & adjudication core; just convenors)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:43 +msgid "As part of this it is ideal if the organising committees can procure local SIM cards for members of the tab team and adjudication core who are not local. These should be relatively generous in their plans — you don't want to worry about running out of minutes or data if on a critical call or using a hotspot to make critical allocation adjustments." +msgstr "" + +#: ../../guide/tournament-logistics.rst:44 +msgid "At major tournaments you want to arrive at least a day before check-in; and ideally whenever it is that the adjudication core is arriving for their own preparation." +msgstr "" + +#: ../../guide/tournament-logistics.rst:47 +msgid "Registration" +msgstr "" + +#: ../../guide/tournament-logistics.rst:49 +msgid "Having effective registration systems and processes is one of the most important aspects of preparing to tab a large tournament. Bad registration data *will* make setting up a tab extremely painful and introduces the chance for mistakes or inconsistencies in tab data that will only come to light in the first round. As such:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:53 +msgid "You should check in with the registration team and see what they plan to do as soon as possible after being brought on-board. As part of this you should make it clear that you should be consulted on any decisions they make about what data to collect, when to collect it, and how to collect it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:54 +msgid "Registration data should be collected into a shared and live-updating source, such as a Google Sheet. There should be as few canonical sources (ideally one) of data as possible; i.e. there should be a single sheet for individual details, a single sheet for team details, etc; and these should be maintained all the way through to check-in. For both you, and the registration team, having multiple conflicting or outdated copies of data will lead to errors. However, for the registration team these errors can usually be easily sorted out in person (at check-in) but for you that information always needs to be reliable and up to date otherwise what is imported into the tab cannot be trusted." +msgstr "" + +#: ../../guide/tournament-logistics.rst:56 +msgid "At this point our recommendation is to, in most cases, not use specialised registration systems as they are somewhat less intuitive and less flexible than setting up good Google Forms/Sheets." +msgstr "" + +#: ../../guide/tournament-logistics.rst:58 +msgid "If, for whatever reason, the registration team are not able to give you 'live' access to the data they have on hand, make sure they send you copies of it (even if it is incomplete) well before you need it to setup the tab itself. You want to be able to verify what data is actually being collected and how it is formatted well in advance." +msgstr "" + +#: ../../guide/tournament-logistics.rst:60 +msgid "You should have access to *all* of the data collected; often registration teams will make (false) assumptions about what you do or do not need. It is better to have everything and then selectively filter out what is not relevant to the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:61 +msgid "It is critical that the registration team should check in with you before setting up forms asking for information. Every additional time that registration asks for data there will be less and less participation in the process, so you should aim to gather all that you need at the first opportunity; typically during the canonical individual registration phase. Particular information that should not be overlooked for tab purposes:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:63 +msgid "Individual registration should ask whether a participant is a speaker or an adjudicator." +msgstr "" + +#: ../../guide/tournament-logistics.rst:64 +msgid "If that person is a speaker it should ask for their team name/number (reconciling these later is painful)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:65 +msgid "Individual registration should ask for any accessibility requirements of both adjudicators and speakers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:66 +msgid "Individual registration should ask for the previous institutions of both adjudicators and speakers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:67 +msgid "Individual registration should ask for the email addresses of all participants." +msgstr "" + +#: ../../guide/tournament-logistics.rst:68 +msgid "Individual registration should ask for the phone numbers of adjudicators." +msgstr "" + +#: ../../guide/tournament-logistics.rst:69 +msgid "Individual registration should ask for the gender identity of both adjudicators and speakers. Even if you are not *planning* on using this to inform processes, such as adjudicator allocations, you want it on hand in case plans change." +msgstr "" + +#: ../../guide/tournament-logistics.rst:71 +msgid "Independent adjudicators and the adjudication core should follow normal registration procedures. Having them not go through the normal process makes it easy to overlook their data or not get a complete picture of it. For example, adjudication core members might forget to nominate conflicts, or neglect to provide their previous institutions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:72 +msgid "You should confirm how the registration team plans to manage how people check-in to the accommodation in particular. Check-in is when issues with registration data come to light and it is vital that these changes are noted and recorded. Some form of validation of registration data *must* occur at check-in — in particular all adjudicators should be (individually) verified as present and all members of a team should confirm their presence along with their team's name/number and speakers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:73 +msgid "After check-in you need to have a definitive list of who is physically present at the tournament so you can run a first-round draw with confidence. Registration must know this and have processes in place for recording people individually as they arrive, and for that data to filter back to you." +msgstr "" + +#: ../../guide/tournament-logistics.rst:75 +msgid "If you are using Tabbycat's secret links for feedback or ballots these are best distributed at check-in. The registration team should know about this, prepare for it, and be provided with the pdfs to print and distribute." +msgstr "" + +#: ../../guide/tournament-logistics.rst:78 +msgid "Adjudication cores" +msgstr "" + +#: ../../guide/tournament-logistics.rst:80 +msgid "If there is a group chat for the adjudication core you probably want to be part of it; even if you don't contribute much. There are lots of small things that end up being discussed without consideration of how they will affect tab issues and it is also a chance to get to know — ahead of time — the people you will be working with closely over the tournament." +msgstr "" + +#: ../../guide/tournament-logistics.rst:82 +msgid "Members of the adjudication core will often leave tab-relevant decisions until the days prior to the first round or whenever it is that they can first meet with the tab team in person. This often wastes critical time and forces rushed decisions. Many considerations can instead be raised and discussed prior to the tournament. These could include:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:86 +msgid "How to manage the feedback process. This typically benefits from foresight and pre-planning, rather than being decided on the ground. Key considerations are:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:90 +msgid "Who submits feedback on whom? Do trainees do so on their chairs? Do panellists do so on each other? (Presuming your tab software supports these options)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:91 +msgid "Is feedback mandatory? If so, how will this be enforced exactly?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:92 +msgid "How much weight does each adjudicator's test or CV score have over the course of the tournament? By Round 3, or by Round 8, what proportion of an adjudicator's score is derived from their test and what proportion is derived from their feedback?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:93 +msgid "Will the adjudication core tweak an adjudicator's score to 'artificially' increase or decrease it to where they think it should be. For example, this could be done by adjusting a test/CV score upwards in order to compensate for bad feedback that (for whatever reason) they did not think was reliable or fair? Depending on your adjudication core's preferences and your tab software's allowances it is not unheard of for them to maintain full manual control over scores by reading/processing feedback results but only ever manually adjusting scores as a result (rather than having it automatically adjust due to the ratings in the feedback)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:94 +msgid "What is the score scale going to be? What do each of those numbers represent? How will this be communicated to participants so they can score accurately and consistently?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:95 +msgid "What kind of questions will feedback forms ask? If using :ref:`customisable printed or online forms ` consider how these questions be used tactically to identify key issues (say discriminatory scoring) or more easily identify people who should be promoted/demoted. While managing feedback is often a messy and subjective task, it can often be improved by being more targeted in what data it collects." +msgstr "" + +#: ../../guide/tournament-logistics.rst:96 +msgid "How will feedback be monitored, and how will this information feed back into the scores and allocations? At large tournaments it is not unusual for an adjudication core member to sit off each round to review and process feedback — there isn't really a good stretch of available time to do so otherwise. However even if doing this note that there are communication issues to manage here, as each adjudication core member will each end up with a relatively incomplete overview of the total volume of feedback." +msgstr "" + +#: ../../guide/tournament-logistics.rst:98 +msgid "If possible it's nice to plan in advance for when the tab will be released (i.e. on the last night; the day after; etc.) as this often gets left to the last minute to be decided. Also the possibility of whether people can redact themselves from tabs should be raised, as that might be useful to inform participants of during online registration or tournament briefings. In a similar fashion, some adjudication cores might also want to limit speaker tabs to only a certain number of places, particularly at novice-centric tournaments." +msgstr "" + +#: ../../guide/tournament-logistics.rst:99 +msgid "How to handle conflict collection; see the following section." +msgstr "" + +#: ../../guide/tournament-logistics.rst:100 +msgid "How to handle the submission of scoresheets and feedback, primarily in terms of which parts of the process should be done online and offline. Some adjudication cores will have strong thoughts here; others will happily follow whatever you recommend. Key considerations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:104 +msgid "Paper-based feedback is much more taxing to enter than paper-based scoresheets — typically there is much more of it; it asks for a greater variety of data; and it is submitted at inconsistent times. The one advantage is that it is easier to make feedback mandatory with paper, as you can ensure all teams and adjudicators have done so prior to leaving the room. Thus, in most cases, a good online feedback system is much more preferable than paper. If using paper be aware that you will need a lot of volunteers to ensure the feedback is collected promptly. If internet or smartphone access is limited at your tournament it is probably best to accommodate both paper-based and online methods." +msgstr "" + +#: ../../guide/tournament-logistics.rst:105 +msgid "The consequences of having incorrect or missing ballots are much more severe than for feedback. As such major tournaments use paper ballots in some form as the final stage in a checking process to ensure that the results of a debate are definitely correct — adjudicators will always make mistakes and while digital ballots can catch/prevent some types of error (i.e. a low point win) they can't catch others (assigning the wrong scores to the wrong speaker, nominating the wrong winning team, etc.). Assuming your software supports both options, the choice is thus whether to use a hybrid approach (online submission followed by paper verification) or to rely entirely on paper. A fully-paper based approach will be simpler for both yourself and adjudicators, and can be almost as efficient if you have a sufficient number of volunteers. In contrast, a hybrid approach will be potentially much faster if you are short of volunteers and if you expect that almost all adjudicators will have access to the internet, a smartphone, and are capable of following instructions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:107 +msgid "In some circuits, and when using some particular tab software, tournaments might run a 'dual tab' where there is a second, independent, version of the tab software and database into which all data is *also* entered. From what we understand this performs a dual role, as both a backup system that can take over from the main one (say if internet access drops) and as a way of verifying ballot data (by comparing draws or databases between software rather than having a two-step entry process operating for a single tab). This practice seems obsolete when working with modern web-based tab software that is capable of backing up and restoring to an offline system, but we would like to hear your feedback if you think that is not the case." +msgstr "" + +#: ../../guide/tournament-logistics.rst:110 +msgid "Conflicts/Clashes (registration/equity/adjudication core)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:114 +msgid "There should always be a *single* means of collecting conflicts (i.e. a single Google Sheet/Form) and all conflicts should go through it. Because the nature of this data is sensitive and evolving, there must be a single location where it can be easily captured and verified as having been entered into the tab. Conflicts data should never be spread across a loose collection of emails/personal messages/spreadsheets; otherwise keeping track and knowing which ones have been entered into the system will be painful and error prone. Get in touch in with equity and registration in advance and make it clear that they should not make their own conflicts form; or if they've already made one, make sure you adopt it and have access/control of it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:115 +msgid "Conflicts should, ideally, *only be collected after a participants list has been published* and requests for people to nominate conflicts should also be sent out as few times as possible. Most people will only fill this form in once, so it is vital that when asked to nominate conflicts they have as much information as they need to do so comprehensively. Without a public and reasonably-complete participants list people will either nominate conflicts that are not present (wasting your time in cross-referencing data) or not realise someone is present and raise the conflict at a latter, less opportune time." +msgstr "" + +#: ../../guide/tournament-logistics.rst:116 +msgid "In some circuits only adjudicators are allowed to nominate conflicts because of the risk of teams using conflicts 'tactically' to block adjudicators that they think are terrible judges. However, having teams nominate conflicts can be useful: adjudicators may overlook a conflict or there may be equity-based reasons that a conflict is non-symmetrical. This trade-off can be handled in two ways:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:120 +msgid "Not allow teams to nominate conflicts during registration; but allow them to approach equity teams before, or during, the tournament to identify the conflict. Equity can then raise the issue with the tab team and adjudication core and it can be added to the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:121 +msgid "Allow teams to nominate conflicts during registration; but have the adjudication core review the data for 'tactical' conflicts. These are usually relatively easily identified, although can be overlooked if the adjudication core does not know the participants or their region/circuit well. The adjudication core can then override the conflict, discuss it with the teams, or raise it with equity. However, if going down this route, the tab team should discuss with the adjudication core how to manage this process well-ahead of the tournament, and ensure they actually do review the conflicts prior to the first round — otherwise it will likely surface during an allocation and become a major distraction during a critical time period." +msgstr "" + +#: ../../guide/tournament-logistics.rst:123 +msgid "As mentioned in the previous section, the adjudication core (possibly with equity) should provide some degree of guidance about what kinds of debating-related conflicts should be provided. People should be able to self-define what constitutes a conflict, but there are circumstances where they are overly cautious and can be reassured that it is not necessary. The opposite problem may occur also, where many people may have a very high bar for what defines a conflict which could lead to perceptions of bias from other participants." +msgstr "" + +#: ../../guide/tournament-logistics.rst:124 +msgid "Generally, it is preferable that each form nominates a single conflict, and people are asked to re-submit for each conflict they are adding." +msgstr "" + +#: ../../guide/tournament-logistics.rst:126 +msgid "To save you some hassle the conflict form should make this very clear (i.e. that one conflict = one submission; ensure the field labels reinforce this)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:127 +msgid "The conflict form should also make clear that you shouldn't use the form if you don't have any conflicts (i.e. people will submit 'None', 'None' etc)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:128 +msgid "The conflicts form should also make clear that adjudicator's don't need to submit a conflict for their current institution and that team's don't need to submit conflicts for adjudicators from their current institution." +msgstr "" + +#: ../../guide/tournament-logistics.rst:130 +msgid "In poorly-structured conflict forms, identifying exactly who is doing the conflicting and who is being conflicted is a nightmare. You want to structure the questions to minimise this ambiguity. A form should definitely ask:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:132 +msgid "Who are you (the conflict-specifier)?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:133 +msgid "Are you a team or an adjudicator?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:134 +msgid "Which institution are you from?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:135 +msgid "If part of a team, which team are you in?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:136 +msgid "Who are you conflicting?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:137 +msgid "Are they a team or an adjudicator?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:138 +msgid "Which institution are they from?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:139 +msgid "If they are in a team, which team is it?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:140 +msgid "Have previously attended any other institutions; or have other reasons to conflict entire institutions? If so, specify those institutions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:142 +msgid "Note that this last question can be tricky to deal with; good tab software will let you conflict an adjudicator from an institution other than their own, but it is harder to mark an individual team as having members previously attending another institution. These circumstances are rare and typically very 'soft' conflicts but are probably best handled by creating individual conflicts between that team and adjudicators from the previous institution in question." +msgstr "" + +#: ../../guide/tournament-logistics.rst:143 +msgid "Adjudication core members will often not nominate their own conflicts; presuming that they will notice and correct them during allocations. They often forget or overlook this. Their conflicts should be entered as per normal." +msgstr "" + +#: ../../guide/tournament-logistics.rst:146 +msgid "Scheduling (convenors / venue organisers)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:148 +msgid "One of the easiest ways to have things run late is to set an unrealistic schedule. As much as possible the timing allocated to rounds (inclusive of events such as lunch or committee forums) should conform to an even distribution of how long it takes to process results and create a draw/allocation — you don't want to be in a position where particular rounds have too much time and others too little time to spend on allocations and other crucial tasks. This is something that should definitely be working on in conjunction with convenors and other critical parties before they lock down timing details with food suppliers or the operators of the debating venues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:150 +msgid "Note also that in most circumstances it is preferable to create a draw and allocation for the first day of the next round at the night before. This time should be built in to the schedule of the previous day, and raised with the adjudication core so they don't expect to be able to immediately depart after the day's rounds are done." +msgstr "" + +#: ../../guide/tournament-logistics.rst:152 +msgid "Below is the time taken within each round at Australs 2017. For context, this was neither a particular efficiently or inefficiently tabbed tournament. Notable details:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:156 +msgid "The tournament was ~40 rooms each round and had access to 3-6 runners and data enterers. Paper ballots were pre-printed and distributed by runners to rooms prior to the debates starting, then collected sometime after the 15 minute deliberation period. Feedback was submitted online. At Australs all adjudicators (excluding trainees) submit their own ballots." +msgstr "" + +#: ../../guide/tournament-logistics.rst:157 +msgid "The adjudication core were neither particular slow nor fast in allocating adjudicators compared to other adjudication cores. At Australs most adjudication cores will create allocations by using first running an automatic allocation then extensively tweak the results." +msgstr "" + +#: ../../guide/tournament-logistics.rst:158 +msgid "There were no serious issues that delayed the tabbing of any particular round beyond the routine and expected issues of last-minute draw changes, adjudicators producing incomprehensible ballots, etc." +msgstr "" + +#: ../../guide/tournament-logistics.rst:159 +msgid "Whilst the tab ran relatively quickly, there were minor delays because of mismatches between the planned schedule and the optimal schedule from a tab perspective." +msgstr "" + +#: ../../guide/tournament-logistics.rst:160 +msgid "A round at Australs takes around 2 hours from a debater's perspective: 30m of prep, ~60m for a debate, ~15m for deliberation, and ~15m for the oral adjudication and feedback." +msgstr "" + +#: ../../guide/tournament-logistics.rst:161 +msgid "We didn't note the timing of data-entry in Round 8 as there was no time pressure. After data entry was finished, finalising and double-checking the breaks took through to ~7-8pm." +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "Day" +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "One" +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "Two" +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "Three" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "Round" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "1" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "2" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "3" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "4" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "5" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "6" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "7" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "8" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "Draw generated" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +#: ../../guide/tournament-logistics.rst:169 +msgid "*Night prior**" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "12:43" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "16:12" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "19:17*" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "12:05" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "15:46" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "19:10*" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "12:07" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "Allocation finished" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "13:17 ``+34m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "16:36 ``+24m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "20:28* ``+71m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "12:58 ``+53m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "16:24 ``+38m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "21:30* ``+140m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "13:25 ``+78m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "Motions released" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "09:28" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "13:50 ``+33m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "16:47 ``+11m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "09:22" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "13:14 ``+16m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "16:40 ``+16m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "9:30" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "14:18 ``+53m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "First ballot received" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "11:51 ``+143m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "15:46 ``+116m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "18:52 ``+125m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "11:18 ``+116m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "15:13 ``+119m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "18:40 ``+120m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "11:35 ``+125m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +#: ../../guide/tournament-logistics.rst:172 +msgid "?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "Last ballot confirmed" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "12:38 ``+47m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "16:07 ``+21m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "19:15 ``+23m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "12:05 ``+47m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "15:44 ``+31m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "19:09 ``+29m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "12:06 ``+31m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:176 +msgid "Tab Setup" +msgstr "" + +#: ../../guide/tournament-logistics.rst:178 +msgid "Setting up a tab site is the most technically challenging (or at least annoying) part of tabbing. It is where you need to reconcile large amounts of data and configure a variety of settings to ensure everything will run without issues during rounds. While this is often done a day or two before the tournament, ideally you should look to do as much as possible in the week or two beforehand where there is much less time pressure." +msgstr "" + +#: ../../guide/tournament-logistics.rst:181 +msgid "Importing data: workflow" +msgstr "" + +#: ../../guide/tournament-logistics.rst:185 +msgid "First check with registration people if their data is complete, and if not who is missing. If it's only a few people it's viable (for tab purposes) to use place-holders for them, as long as you remember to follow up and edit their data manually later." +msgstr "" + +#: ../../guide/tournament-logistics.rst:186 +msgid "Familiarise yourself with the different methods for importing data into your tabbing program. Typically, these include options for bulk-importing spreadsheets, for adding information piece-by-piece through a graphical interface, or a hybrid systems. Depending on your tabbing software it may be easiest to first setup your tournament on a local copy of the tab (where it will be faster to rectify mistakes) and transfer the data to the live site when everything is mostly complete." +msgstr "" + +#: ../../guide/tournament-logistics.rst:188 +msgid "If you are using Tabbycat our spreadsheet importer is definitely easiest to use on a local copy; however using the visual importer is perfectly viable for larger tournaments if you are not comfortable with the command line. When using the spreadsheet importer note that it will likely take several iterations to get the data to import cleanly as there will typically be small mismatches in speaker/institution names and the like." +msgstr "" + +#: ../../guide/tournament-logistics.rst:190 +msgid "If the tournament (or the host society) has their own domain name and your tab software is self-hosted consider whether you want to setup the tab site on their domain so that the URL is nicer and/or easier to type." +msgstr "" + +#: ../../guide/tournament-logistics.rst:192 +msgid "If you are using Tabbycat, and deploying to Heroku, be sure to read our documentation about the size of Postgres database your tournament will require. Setting up the correct size of database from the start is the best way to go, as transferring information at a later stage is a hassle and could delay the tab at inopportune times." +msgstr "" + +#: ../../guide/tournament-logistics.rst:195 +msgid "Importing data: regions/societies" +msgstr "" + +#: ../../guide/tournament-logistics.rst:199 +msgid "Societies will often have special names that they like to use in draws (that are not the same as their institution's name or acronym). These can be gathered from institutional reps or from prior tabs. When in doubt err on the colloquial / most recognisable name; particularly for formats where teams need to find each other prior to the debate." +msgstr "" + +#: ../../guide/tournament-logistics.rst:200 +msgid "If your tabbing software has methods for assigning region information to teams and adjudicators (for diversity purposes) determine with the adjudication core the types of regions that will be used." +msgstr "" + +#: ../../guide/tournament-logistics.rst:203 +msgid "Importing data: participants" +msgstr "" + +#: ../../guide/tournament-logistics.rst:207 +msgid "Check you have emails/phone numbers included in your data that will be imported (presuming your tabbing software supports this) there are useful to have on hand later for either emailing out information or quickly following up errant adjudicators." +msgstr "" + +#: ../../guide/tournament-logistics.rst:208 +msgid "Often, the easiest way to prepare registration data for tab imports is to create new tabs in the registration spreadsheet, and use referencing to automatically order and arrange their data into the format your tab software wants. If the registration data changes significantly this will also make it easier to re-import things." +msgstr "" + +#: ../../guide/tournament-logistics.rst:209 +msgid "Often some adjudicators, typically local independents, may not be available for all rounds. Try and find out who this affects and when; once data has been imported you can :ref:`pre-check these adjudicators in and out of rounds ` (if your tab software supports this; otherwise note it for later)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:210 +msgid "Remember that the swing team(s) probably also need to be imported into the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:213 +msgid "Data import: rooms" +msgstr "" + +#: ../../guide/tournament-logistics.rst:217 +msgid "Ideally you want not just a list of rooms, but also of their types and categories — i.e. what building a room is in and/or it will be coded so that participants can find it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:218 +msgid "You want to know if access to some rooms is conditional; i.e. if some rooms are only available for some rounds. Again, if your tab software supports it you can :ref:`record this availability information into the system ` (once data is imported) otherwise you can note it for later." +msgstr "" + +#: ../../guide/tournament-logistics.rst:219 +msgid "Registration should have collected information about accessibility requirements; they should be imported into your tab software (if it :ref:`supports automatically matching accessibility requirements `) or note for later. In general you will also want to use a similar process to ensure that members of the adjudication core are assigned rooms that are close to the tab room." +msgstr "" + +#: ../../guide/tournament-logistics.rst:220 +msgid "You also want some idea of priority; that is to say if some rooms are inconvenient (and you have more rooms than you need) they should be marked as a low priority so they will be allocated only if needed. Again, this might be automatically done by your tab software or something you will need to note and manually change after each draw is made." +msgstr "" + +#: ../../guide/tournament-logistics.rst:223 +msgid "Data import: adjudicator test/CV scores" +msgstr "" + +#: ../../guide/tournament-logistics.rst:225 +msgid "Ideally the adjudication core should do this themselves as they are marking the test or scoring CVs. If they won't, or you don't trust them with full tab access, be prepared to do so yourself." +msgstr "" + +#: ../../guide/tournament-logistics.rst:228 +msgid "Data import: tab access" +msgstr "" + +#: ../../guide/tournament-logistics.rst:230 +msgid "Set up user accounts for the adjudication core with dummy passwords (they can change them later)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:231 +msgid "Set up user accounts for runners/assistants with dummy passwords (they can change them later)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:233 +msgid "If using Tabbycat and using online ballots or feedback with the private URLs method, participants should be emailed out their private URLs before they start travelling to arrive at the tournament (i.e. when they have a reasonable chance of checking their email). This can be done using the inbuilt pages on Tabbycat, or by importing participants data into a service such as Mailchimp." +msgstr "" + +#: ../../guide/tournament-logistics.rst:236 +msgid "Pre-Rounds Setup" +msgstr "" + +#: ../../guide/tournament-logistics.rst:239 +msgid "Setting up the tab room" +msgstr "" + +#: ../../guide/tournament-logistics.rst:241 +msgid "This is typically the first order of business, as all future pre-round setup tasks (i.e. training the adjudication core, testing printing, etc.) are better for being done in the same space that will be used throughout the rounds. Once you're in the space there are a couple of small checks to run through before the larger question of how to arrange and use the space should be tackled:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:245 +msgid "Check with convenors whether things can be left in the tab room overnight. If they can't you'll need to make plans for how to move any big items (printers; ballot stacks) to and from the tab room each day." +msgstr "" + +#: ../../guide/tournament-logistics.rst:246 +msgid "Check that the internet access in the tab room is reliable." +msgstr "" + +#: ../../guide/tournament-logistics.rst:247 +msgid "Check that the projector system works, both with whatever wired-in computer is in the room and when connected to your laptop." +msgstr "" + +#: ../../guide/tournament-logistics.rst:248 +msgid "Check what items either yourself, or the organisers, have at hand and check if anything needs to be acquired before the next day. Critical items for tab rooms are typically:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:252 +msgid "An extension cord with multi box; ideally a pair of each." +msgstr "" + +#: ../../guide/tournament-logistics.rst:253 +msgid "Whiteboard markers (assuming there is a whiteboard) otherwise permanent markers and large sheets of paper (i.e. A2) can suffice." +msgstr "" + +#: ../../guide/tournament-logistics.rst:254 +msgid "Boxes. Lots of boxes. Loose ballots are a source of confusion and error, so you want some way of temporarily storing ballots as they proceed through the entering and checking process. You probably want at least three large boxes (for ballots to-enter, ballots to-check, and finished ballots) but more will be useful." +msgstr "" + +#: ../../guide/tournament-logistics.rst:255 +msgid "Spare printing ink/toner, and paper for the printer. Ideally your paper would be multi-coloured, with each colour being used for a different round. Pastel colours are ideal, and you ideally want at least three different colours so that you don't have to repeat a colour within the same day. Be sure to calculate how many sheets you will need per round and ensure you have a generous number of spares." +msgstr "" + +#: ../../guide/tournament-logistics.rst:256 +msgid "If tabbing a format that can produce multiple ballots per-debate, staplers are essential to keep those ballots organised. Buy at least two sturdy ones." +msgstr "" + +#: ../../guide/tournament-logistics.rst:258 +msgid "Non-essential, but often useful to have items:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:262 +msgid "Whatever dongles/adapters you need to connect your laptop to the projectors, both in the tab room and in the briefing room." +msgstr "" + +#: ../../guide/tournament-logistics.rst:263 +msgid "An Ethernet cable (or two) as a backup option if WiFi drops or is overloaded." +msgstr "" + +#: ../../guide/tournament-logistics.rst:264 +msgid "Post-it notes are a great way to temporarily mark ballots with information; typically used to indicate ballots that need correcting." +msgstr "" + +#: ../../guide/tournament-logistics.rst:265 +msgid "You'll often need to make impromptu signs; sticky tape and/or blu-tack are good here" +msgstr "" + +#: ../../guide/tournament-logistics.rst:266 +msgid "Spare pens for the people doing data entry to use" +msgstr "" + +#: ../../guide/tournament-logistics.rst:267 +msgid "Trash bags for collecting rubbish as it accumulates" +msgstr "" + +#: ../../guide/tournament-logistics.rst:268 +msgid "A Chrome Cast can occasionally be very useful if a projector or screen doesn't have accessible input cables or so that you can use a projector without having your laptop tethered to a particular podium and desk." +msgstr "" + +#: ../../guide/tournament-logistics.rst:270 +msgid "If you haven't already it's a good idea to check your printing setup by printing off a bunch of generic ballots and feedback forms to have on hand if the need arises (i.e. a ballot is missing and needs to go out ASAP; or if someone can't do feedback online and needs to do so on paper). At worst, the blank ballots you print can be used for the out-rounds. While printing these off, time how long it takes the printer to print say 25 ballots and extrapolate from that to figure out how long it will take to print the entire round's worth of ballots. Note that if printing off a round's ballots is relatively quick it can be useful to delay it in order to better accommodate any last-minute changes to the draw that happen post-announcement. It's also worth thinking about how you (or at least who will) group up the printed ballots in order to distribute them to runners." +msgstr "" + +#: ../../guide/tournament-logistics.rst:272 +msgid "At this point you should also setup whatever process you need for managing runners and the ballot collection process. At a minimum, this should probably be a spreadsheet or a list on a whiteboard outlining the different groups of rooms with spaces to mark in which runners are delivering/collecting ballots for each location. Who is running where might change from day to day and should be kept updated. It should also have some method for contacting each runner (i.e. a cell phone number)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:274 +msgid "The question of how to arrange the actual room is one with many answers, and is obviously shaped by the peculiarities of the space itself. However there needs to be some system behind it so that people know exactly where to go and what to do when there is time pressure." +msgstr "" + +#: ../../guide/tournament-logistics.rst:276 +msgid "The key consideration behind this system is typically the 'flow' of ballots: what happens after they are brought back from runners, but before they are completely entered into the system. Think through how you want this process to operate and how the space can be arranged to make each step as smooth as possible. Considerations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:280 +msgid "When runners initially return a big stack of ballots, what happens? They could be transferred directly to the data-enterers to start on, but it is often useful to have preliminary checks here in order to keep the job of the data-enterers as simple as possible. These checks could include:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:284 +msgid "For formats with multiple ballots per-debate, you typically want to identify and staple together all the ballots from a given panel." +msgstr "" + +#: ../../guide/tournament-logistics.rst:285 +msgid "For tournaments where ballots are liable to go missing (or for when you have plenty of data-enterers and want peace of mind) it is worth using the :ref:`ballot 'check-in' system of your tab software ` (if it has one) to mark off ballots as physically present in the tab room. This allows you to quickly identify which ballots are missing and begin tracking them down earlier than you would do otherwise if just waiting for the 'to enter' pile to be exhausted." +msgstr "" + +#: ../../guide/tournament-logistics.rst:286 +msgid "Depending on your preferences and resources, ballots could at this stage be checked for errors. This could include a basic sweep for missing information (i.e. totals) or a comprehensive sweep that includes checking math errors, ambiguous handwriting, low-point wins, etc.). While this will delay the time between ballots arriving and being entered, it will mean that you can start correcting ballots sooner, and lessens the burden on (potentially inexperienced) data-enterers to check and catch these. If you have many runners, and they are familiar with how debating scoring works, this is recommended." +msgstr "" + +#: ../../guide/tournament-logistics.rst:288 +msgid "Once this preliminary step has occurred the next task is actually entering the ballots. The number of steps here is dependent on your tab software and tab settings; you might have had the 'draft' ballot be submitted online by chairs or you might have the whole two-step process of a 'draft' ballot entry and the 'confirmed' ballot entry taking place within the tab room. Considerations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:292 +msgid "Regardless of whether you are working with a one-step or a two-step process, you want to arrange the tables where data-enterers are sitting such that their need to move is minimised. That might mean either have a central inbox of ballots to enter in the centre of the tables (such that everyone can reach it) or having multiple 'clusters' of enterers around boxes." +msgstr "" + +#: ../../guide/tournament-logistics.rst:293 +msgid "If work with a two-step process you want those two steps to be an active part of the spatial arrangement. That is to say, typically there will be a grouping of enterers who are working on the initial ballot entry (clustered around a box or boxes) and then a separate 'downstream' grouping of enterers that work on confirming/validating those entries. Depending on the size of tournament and quantity of runners, you either want it so that individuals from the first group can easily pass their ballots to the box of the second group; i.e. by reaching across the table or walking a short distance. At huge tournaments, you might want a dedicated person to transfer ballots between boxes to prevent enterers having to get up." +msgstr "" + +#: ../../guide/tournament-logistics.rst:294 +msgid "In a two-step process people may need to transfer roles, as generally you want to prioritise entry and then validation. Often this isn't necessarily much more efficient, but if 'rebalancing' the roles make sure that the spaces assigned to each role can accommodate extra people, and that people physically move to occupy each role." +msgstr "" + +#: ../../guide/tournament-logistics.rst:295 +msgid "In general, you want to minimise the number of ballots that each enterer feels the need to 'hoard' to work through to keep the work evenly distributed. If people are taking a large number of ballots to process, at the final stages of entering some people will have a bunch to work through while others will be finished. Making it easy to collect and pass on ballots in the space itself helps cut down on this while keeping entry efficient." +msgstr "" + +#: ../../guide/tournament-logistics.rst:296 +msgid "While the exact spatial arrangement depends on your numbers and what furniture is available, a long rectangle is a good starting point as the ballot process is in general linear (check, enter, validate, finish). Typically, this might look like a series of tables in a row with enterers sitting on either side and with the various ballot boxes in the middle." +msgstr "" + +#: ../../guide/tournament-logistics.rst:297 +msgid "When ballots have finished being enter/validated there definitely should be some sort of final 'done' box. Take care how ballots are put here, a common source of error is people putting ballots there before they are fully finished." +msgstr "" + +#: ../../guide/tournament-logistics.rst:298 +msgid "When ballots need to be corrected you generally want to 'extract' them from this process and hand them off to a tab-director or assistant to chase up and collect. There should be a forethought process for managing this; and ideally a dedicated space for it to prevent ballots being lost and to make it easy to identify ongoing issues. This might look like a process of sticking a post-it note (outlining the error) to the ballot, and then pulling it from entry/validation and placing it on a desk. Ideally you also want one of the tab directors always *not* doing data entry so that they are immediately available to manage this process." +msgstr "" + +#: ../../guide/tournament-logistics.rst:301 +msgid "Training volunteers" +msgstr "" + +#: ../../guide/tournament-logistics.rst:303 +msgid "If at all feasible you want to train that volunteers acting as runners and/or data enterers the day *before* the tournament starts otherwise the first round will be rough. It's generally a good idea for this training session to generally mirror the process of running a round. It's also generally a good idea that — even if you have enough people for dedicated runner and data-enterer roles — to train all volunteers so that they are familiar with each role and can fill in if needed. This has a couple of stages:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:307 +msgid "Introductions and details" +msgstr "" + +#: ../../guide/tournament-logistics.rst:311 +msgid "Volunteering is typically thankless and often stressful. It's also quite a dull and mechanical process: deliver paper; collect paper; enter numbers; check numbers. Given the rather unglamorous nature of their role you want your volunteers to feel welcome and a crucial part of a wider team. When meeting everyone for the first time try and run the introductions in a non-perfunctory manner and get to know people's background/interests and outline how valuable they are to the tournament." +msgstr "" + +#: ../../guide/tournament-logistics.rst:312 +msgid "As part of this process you should, note their cell phone numbers or whatever means you will use to coordinate communication between the team." +msgstr "" + +#: ../../guide/tournament-logistics.rst:313 +msgid "Figure out what will be happening during downtime and how you can make it more enjoyable. Would volunteers like to watch debates, work in the tab room, etc. Is there anything they would like during those down times (music, snacks, coffee, etc.)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:315 +msgid "Rooms and Running" +msgstr "" + +#: ../../guide/tournament-logistics.rst:319 +msgid "If runners are unfamiliar with debating in general, outline the basics of what draws are, what ballots are actually for, and what this process looks like from a debater's perspective." +msgstr "" + +#: ../../guide/tournament-logistics.rst:320 +msgid "Outline how/when the printing process occurs and who will sort/assign the ballots. Now is a good time to assign different runners to the different groups/rooms that they will be working with." +msgstr "" + +#: ../../guide/tournament-logistics.rst:321 +msgid "It is critical that, as a group, you actually go to everyone one of the venue groups and identify all of the venue rooms that are listed so that everyone knows exactly where to go. This may take some time. But it is a good chance to both check those rooms actually exist and pre-identify any problems that might occur with runners and debaters finding them." +msgstr "" + +#: ../../guide/tournament-logistics.rst:322 +msgid "Outline in general what happens during ballot collecting: when to do it, how to approach chairs, what do to if they are slow or delaying. You should raise the chance of chairs being belligerent and outline how they (and you) should deal with this." +msgstr "" + +#: ../../guide/tournament-logistics.rst:323 +msgid "If you are having runners pre-check ballots it's a good idea to fill out a few 'bad' ballots to demonstrate the kinds of checking required. If you are using any communication systems (i.e. having runners mark of buildings as 'done' in an online system) go through that now also." +msgstr "" + +#: ../../guide/tournament-logistics.rst:325 +msgid "Data entry and checking" +msgstr "" + +#: ../../guide/tournament-logistics.rst:329 +msgid "Before starting, setup logins for everyone and show them how to login. Also get an idea of what devices they will be using, or can bring, for data entry purposes. Check/ensure that they will have internet access on those devices." +msgstr "" + +#: ../../guide/tournament-logistics.rst:330 +msgid "Run through this in the actual tab room; illustrating examples with actual ballots and going through the roles in the actual spots which they will occur." +msgstr "" + +#: ../../guide/tournament-logistics.rst:331 +msgid "Run through how the seating/table/box arrangement works and the types of roles at different positions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:332 +msgid "Emphasise that in general, any ambiguities should be raised with the tab directors/assistants; i.e. that you should never guess about ballots but instead always delegate resolving issues to someone else." +msgstr "" + +#: ../../guide/tournament-logistics.rst:333 +msgid "Run through the different edge cases and things to check during entry. For example Iron Person speeches, mismatched totals, entering the wrong ballot for the wrong panellist, etc (see section below). Be sure to also go through what happens when the validation step fails; i.e. when a ballot needs to be re-entered." +msgstr "" + +#: ../../guide/tournament-logistics.rst:336 +msgid "Training the adjudication core" +msgstr "" + +#: ../../guide/tournament-logistics.rst:338 +msgid "Typically making the first-round's draw and allocation is the best time to really run through how your tab software and processes work in a 'real' environment as well as the expectations surrounding their and your role. Generous amounts of time should be budgeted for this; it's not uncommon for it to take up most of an evening. It's also worth having an older tab, or a tab full of fake data handy in order to show them how, say, the feedback or allocation interfaces look like when full of data." +msgstr "" + +#: ../../guide/tournament-logistics.rst:340 +msgid "To kick off you should probably setup tab logins for the adjudication core as necessary, outline what kinds of access they have, and (particularly if they haven't used your tab software before) outline broadly what pages they should and shouldn't access. In particular, show them how to find and parse feedback as that is often the interface where they will be spending most of their time individually. As part of this tour outline (if you haven't already) how feedback will work, as well as the means by which the adjudication core can use the tab software to keep track of feedback as it comes in. Ideally some sort of general strategy should be formed for this, so that particular people sit out rounds, or are delegated the task of catching up on feedback at other points." +msgstr "" + +#: ../../guide/tournament-logistics.rst:342 +msgid "Depending on how many runners you have it may be necessary, or beneficial, if the adjudication core helps out with data entry. However, if you go down this route the adjudication core need to be highly trained; they are often much more likely than volunteers (who are less self-confident and have more experience) to make errors. Whether you do or don't do this, ensure that adjudication core members know to come to the tab room ASAP after they have finished adjudications rather than swanning around socialising or going to lunch. Draws will often be held up just by the fact that not enough adjudication core members are present to start or finish an allocation." +msgstr "" + +#: ../../guide/tournament-logistics.rst:344 +msgid "The first-round allocation is the last thing you want to cover. It is typically your only change to slowly and comprehensively walk the adjudication core through the allocation interface and the allocation system." +msgstr "" + +#: ../../guide/tournament-logistics.rst:346 +msgid "Allocation interfaces, while often complex, should be stepped through so that the adjudication core knows precisely how to operate it themselves (if needed). They should know what it can (and can't do) and how the different features can be used and activated. For example, diversity highlights might be an optional toggle (in which case you explain how to active it, when to do so, and what it represents) or there might be parts of the interface that detail information such as a room's liveness, energy, or bracket which should be highlighted and explained (i.e. how 'liveness' is determined)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:348 +msgid "Secondly, and most importantly, is outlining how the automated process of adjudicator allocation operates, and how this can be made to match the adjudication core's preferences. Typically, you want to rely on automatic adjudicator allocations as much as possible in order to decrease the time taken to do an allocation; however every adjudication core has a different philosophy on what their perfect allocation looks like, and it is your job to try and align that ideal with what the automated system produces as much as is possible. The precursor to this is yourself knowing how your tab system allocation works: what is the relationship between a debate's bracket (or assigned priority/energy) and the numeric ranking of the automatically generated panel? Does the software optimise panel strength for a voting majority, or across all panellists? When does the software allocate solo chairs over panels? How does it avoid conflicts? Does it have (and enforce) particular expectations for a given adjudicator's score; or does it rely on a more relative comparison? The answers to the questions will often be dramatically different between different programs and you should know them in advance." +msgstr "" + +#: ../../guide/tournament-logistics.rst:350 +msgid "Most tab software will have at least some options for you to configure those automated processes — either by changing the automatic allocation's parameters directly or by controlling the ranking and feedback systems that feed into it. The first round is the prime opportunity to configure these options so that they align as close as possible with what the priorities of the adjudication core. If your feedback ranking system is mismatched with how you expect the automatic allocation to place adjudicators, or if the distribution of adjudicators across the draw is not what you expect, the adjudication core will end up wasting significant amounts of time adjusting allocations. Even if things work well using the default settings, ensure you experiment and demonstrate the consequences of changing the settings just to show that it can be done, what the general effects are, and to see if there are even-better configurations." +msgstr "" + +#: ../../guide/tournament-logistics.rst:352 +msgid "This process of tweaking the automatic allocation settings is one you should also revisit as the rounds progress." +msgstr "" + +#: ../../guide/tournament-logistics.rst:354 +msgid "How to approach diversity (typically in terms of region and gender) across an allocation in particular is something that some members of an adjudication core will not have had to consider in the context of a large tournament with time pressure or in terms of having to make explicit trade-offs. Again, you should make it clear how the software can accommodate this, and get the adjudication core to plan for how (in general) they want to approach this. Often it will form the final phase of the allocation process, and so can easily be forgotten or skipped over; or people will have different philosophies of how to approach this which are only raised at critical points." +msgstr "" + +#: ../../guide/tournament-logistics.rst:356 +msgid "Outline that there will usually be a trade-off between the quality of each allocations and the speed at which the tournament runs. When time is not a factor, many adjudication cores will often take an hour or more in order to create a perfect allocation; but they should know though that aiming for perfect during many rounds will break the schedule. You should try and get them to set some sort of time goal for allocations, and (during the rounds) ensure that they are aware of when they are going too fast or too slow. Depending on your personal preferences and the norms surrounding tab direction in your circuit you may want to actual enforce these time limits." +msgstr "" + +#: ../../guide/tournament-logistics.rst:358 +msgid "Finally, outline how you will all communicate. Again, there should be a single medium for this so that everyone knows what is going on; and this is ideally something that has been planned out beforehand with them and the organising committee. But at this point the tab team may have expanded, or there may be better options than what was being used previously. It's also worth outlining which parts of the tab team will generally be doing what roles and where — i.e. who will be rolling the draw, who will be chasing up people, etc." +msgstr "" + +#: ../../guide/tournament-logistics.rst:361 +msgid "Preparing a briefing" +msgstr "" + +#: ../../guide/tournament-logistics.rst:365 +msgid "At large tournaments there should be some form of briefing covering ballots and feedback process, even if it is just quick one. Usually you will want to be the person to design and deliver this; other people less-familiar with the system may miss details." +msgstr "" + +#: ../../guide/tournament-logistics.rst:366 +msgid "Liaise with convenors and the other people doing briefings to ensure (a) they know you're doing one; and (b) you are not overlapping in terms of content." +msgstr "" + +#: ../../guide/tournament-logistics.rst:367 +msgid "See the last section of this document for notes on what can be useful to include here" +msgstr "" + +#: ../../guide/tournament-logistics.rst:370 +msgid "Final checks" +msgstr "" + +#: ../../guide/tournament-logistics.rst:374 +msgid "Check if the convenors have made a map that clearly outlines where the rooms are. Ensure it's clear and post it to either the tab site (ideally) or somewhere like Facebook." +msgstr "" + +#: ../../guide/tournament-logistics.rst:375 +msgid "Check that convenors have some sort of way-finding system in place, i.e. chalked directions or colour-coded signs. Check these colour codes match the names of your venues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:376 +msgid "Check that the draw types are correct for each round in the tab system." +msgstr "" + +#: ../../guide/tournament-logistics.rst:377 +msgid "Check with adjudication core if/when there are secret rounds and that these are correct in the edit data base area." +msgstr "" + +#: ../../guide/tournament-logistics.rst:378 +msgid "Check how the draw will be displayed and managed. Is the projector good; how big does the text size need to be? How fast is the scroll?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:379 +msgid "If you will pre-print ballots check that you've set the \"return ballots to\" configuration setting; even if it just says \"to runners\"." +msgstr "" + +#: ../../guide/tournament-logistics.rst:382 +msgid "Managing Rounds" +msgstr "" + +#: ../../guide/tournament-logistics.rst:384 +msgid "Once everything has been setup and everyone knows what they should do, the actual process of running each round should go smoothly. It probably won't though. The earlier sections should have laid out what the ideal process for managing data entry and allocations, so this section will instead focus on what can go wrong and what to keep an eye out for." +msgstr "" + +#: ../../guide/tournament-logistics.rst:387 +msgid "Disaster scenarios" +msgstr "" + +#: ../../guide/tournament-logistics.rst:389 +msgid "There are two broad classes of disaster scenario here. The first, and more rare case is when either internet access at the venue goes out or if a web service that your tab software depends on has an outage (for example, both Tabbie 2 and Heroku-deployed Tabbycat instances depend on Amazon Web Services). The first can at least be solved temporarily if tethering is available, but if that is not possible (or the latter case occurs) you may need to switch to using an offline copy of that tab by restoring from a backup if the outage is non-transient." +msgstr "" + +#: ../../guide/tournament-logistics.rst:391 +msgid "Obviously, for this to work, you should be taking regular backups using whatever mechanism your tab software allows. Key times to do so are critical events such as finishing entering a round's data or finalising an adjudication allocation as these are especially difficult to recreate. Importantly, these backups are only useful to you if you have a downloaded copy of them; ideally download to a Dropbox or some other cloud service that will spread them across multiple computers and an online service." +msgstr "" + +#: ../../guide/tournament-logistics.rst:393 +msgid "Having an outage of internet access or a key web service go down to the point of having to switch to an offline tab is an exceedingly rare event, but one worth planning for at large tournaments. That is to say you should have ideally have an offline copy of your tabbing software setup on your local machine, and know how to restore a backup to it if necessary." +msgstr "" + +#: ../../guide/tournament-logistics.rst:395 +msgid "Backups are also useful as guards against a much more common source of error: data loss caused by user error. It is not unheard of for even experienced tab directors (or inexperienced adjudication core members) to accidentally delete an entire allocation, delete a round, or some other form of destructive action that would require a lot of work to redo. Taking backups at key points, and knowing how to restore them (to the online copy of the tab) is a useful — and occasionally essential — skill." +msgstr "" + +#: ../../guide/tournament-logistics.rst:397 +msgid "The much more common source of a major tab disruption is a major user-error or a bug within your tab software itself. Fixing these will be highly-context dependent and the best way you can prepare for them is to know your tab software well enough to understand what might have caused it or be able to contact someone else who does. That said, having backups on hand can also allow you to restore your database to before the bug or user-error occurred and try to proceed without re-triggering it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:400 +msgid "Expected problems" +msgstr "" + +#: ../../guide/tournament-logistics.rst:402 +msgid "Incorrect ballots are an inevitable tragedy. Many more optimistic tab directors will imagine that these can be prevented through sufficiently detailed briefings, recurring public shamings, or fool-proof ballot designs. While these might help in cutting down the number of errors, eliminating them entirely seems to be an unachievable goal. Note that this is particularly true at international tournaments and/or at tournaments that draw participants from circuits which have more than one predominant format." +msgstr "" + +#: ../../guide/tournament-logistics.rst:404 +msgid "While debaters as a whole display astonishing levels of innovation in discovering new ways to incorrectly fill in a ballot, there are a couple of broad cases that you should look out for an prepare people to deal with:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:408 +msgid "Not adding up score correctly. Pretty much everyone who does this will note that this is the first time that it has ever happened to them." +msgstr "" + +#: ../../guide/tournament-logistics.rst:409 +msgid "Omitting some information. Most common are not filling in total scores, the nominating winner, or the margin. Having omitted an entire team's scores or speaker names is not uncommon." +msgstr "" + +#: ../../guide/tournament-logistics.rst:410 +msgid "Scores that are outside the range." +msgstr "" + +#: ../../guide/tournament-logistics.rst:411 +msgid "Low-point wins, or tied-point wins. Typically occurs in conjunction with (1)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:412 +msgid "Poor handwriting rendering numbers illegible. While one could 'guess' whether a number is in fact a 6 or a 5 based on a team's total score, doing so is dangerous as it assumes that the person hasn't also done (1)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:413 +msgid "'Correcting' information in an ambiguous way. For example, using arrows to swap a speaker's order (which is typically circular/ambiguous) or drawing numbers over other numbers in a way that makes it unclear which is the original and which is the replacement." +msgstr "" + +#: ../../guide/tournament-logistics.rst:414 +msgid "Ballots just going entirely missing because either a runner missed the room, the chair forgot to return it, or the chair just left it in the room." +msgstr "" + +#: ../../guide/tournament-logistics.rst:416 +msgid "Ballots aside, there are a number of other common occurrences that will necessitate changes to the drawn and allocations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:420 +msgid "Teams will not turn up to debates, or turn up to debates extremely late. In both cases they will often not notifying anyone. Aside from needing to swap in a swing team in their place in the draw, it's worth keeping in mind that the necessity of a swing team might not be known until right when debates are about to start (which can lead to issues if you assume trainees or runners will be filling up the 'spare' swing team)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:421 +msgid "Adjudicators will also go missing. As with teams this can usually be caught during roll call; but might also not be known up until debates start. If the adjudication core is available they can make adjustments, but often you will need to make a call as to whether to form an even-sized panel or to redistribute adjudicators from elsewhere." +msgstr "" + +#: ../../guide/tournament-logistics.rst:422 +msgid "When a draw is released there will often be conflicts that were unknown to the tab system, and will necessitate making changes to the draw post-release. It's important that when making these changes you keep a clear record of what needs to change (if there are multiple swaps needed it can get tricky to keep track of) and ensure that all parties involved know about where they are being swapped to." +msgstr "" + +#: ../../guide/tournament-logistics.rst:425 +msgid "Ongoing checks" +msgstr "" + +#: ../../guide/tournament-logistics.rst:427 +msgid "You will have a decent amount of downtime during rounds when debates are happening. A couple of things its worth keeping an eye on during that time:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:431 +msgid "Ensuring your backups have been taken and downloaded." +msgstr "" + +#: ../../guide/tournament-logistics.rst:432 +msgid "Ensuring the tab room isn't devolving into mess." +msgstr "" + +#: ../../guide/tournament-logistics.rst:433 +msgid "If you can be bothered (and if no adjudication core member is doing so) reviewing feedback for critical issues (i.e. comments highlighting severe issues, or chairs getting very low scores) is a good way to be useful. If using paper-based feedback this can look like physically separating out these feedback forms for the attention of the adjudication core; while if using online feedback systems you may want to keep a collection of browser tabs to show." +msgstr "" + +#: ../../guide/tournament-logistics.rst:434 +msgid "Chasing up the language committee (if one exists for this tournament) to confirm which teams are in which category and what their break preferences are (if multiple breaks are not allowed). You want to have this information confirmed as soon as possible as it becomes of critical value to allocations once the draw starts segmenting into live/dead rooms." +msgstr "" + +#: ../../guide/tournament-logistics.rst:435 +msgid "Reviewing how efficiently things are running and whether there are any bottlenecks that can be better addressed in the next round. It's generally a good idea to (on a whiteboard or a spreadsheet) keep track of how long each stage of a round is taking (running, data-entry, allocation) and what (if anything) is causing delays." +msgstr "" + +#: ../../guide/tournament-logistics.rst:437 +msgid "If hosting Tabbycat on Heroku keep an eye on the metrics section of the dashboard area, noting if there are 'timeout errors' and what the average response times are. Adding more dynos should help with both." +msgstr "" + +#: ../../guide/tournament-logistics.rst:440 +msgid "Breaks and Break Rounds" +msgstr "" + +#: ../../guide/tournament-logistics.rst:443 +msgid "Generating the adjudicator's break" +msgstr "" + +#: ../../guide/tournament-logistics.rst:445 +msgid "Determining the adjudicator break generally involves a complex set of considerations rather than strictly ranking based on feedback. As such most adjudication cores will use whiteboards or Google docs to draft and discuss the possible options. One thing to note here is that breaking adjudicators will need to be marked as such in the tab at some point (both so they can be on future draws, and for publication) so you want to be careful that the tab is the final source of authority here — it is easy for information to get out of sync between what the adjudication core is using to draft the break and the system." +msgstr "" + +#: ../../guide/tournament-logistics.rst:447 +msgid "When the adjudication core is determining the break ensure that they have an idea of the *quantity* of adjudicators needed (breaking too few or too many will cause issues) and whether there are any special considerations (such as having conflicts with large portions of the draw, or leaving at a given point) that involve a specific adjudicator being considered." +msgstr "" + +#: ../../guide/tournament-logistics.rst:450 +msgid "Generating the team break" +msgstr "" + +#: ../../guide/tournament-logistics.rst:452 +msgid "Before doing so in an automated fashion, first check in your tab software whether all teams are assigned to the right break categories. Depending on whether your software supports multiple formats you probably also want to check that each break category is using the right 'rule' specified by the tournament (i.e. a WUDC- or Australs- compliant break ranking). Also double check the break size itself is correct in the software." +msgstr "" + +#: ../../guide/tournament-logistics.rst:454 +msgid "Hopefully the automated system will generate a correct break, but this should always be checked against what you'd expect the results to be from standings. Note also that there are cases, such as when a team has to leave, or when teams are or are not double-breaking, that mean the automated break results need to be overridden (typically in Tabbycat you would add a marker or note to include their ranking, but exclude them from having a break rank)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:457 +msgid "Announcing the break" +msgstr "" + +#: ../../guide/tournament-logistics.rst:459 +msgid "Mistakes are made surprisingly often during results announcements. Again, this is often a problem with incomplete or out of sync data, where print-outs, slides, or the tab site itself might not reflect (for example) last minute changes about breaks or have potentially mixed up teams or adjudicators with similar names. Things that can help:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:463 +msgid "Have a single source for what is being read out — i.e. a printed list (recommended) or the tab site itself — but don't mix and match. If making slides (often a good idea for large/crowded venues) copy the data from the canonical source being announced." +msgstr "" + +#: ../../guide/tournament-logistics.rst:464 +msgid "Double check what is being read out against the tab site, and/or whatever draft lists were used to determine the adjudicator's break. Verify with the adjudication core that everyone who should be there is, and that nobody is missing." +msgstr "" + +#: ../../guide/tournament-logistics.rst:465 +msgid "Clarify what information should be on the print-outs and the general order in which things are read. For example, it might be easy to omit breaking adjudicator's institutions, to use ambiguous abbreviations over full institution names, or to have an inconsistent approach to how the information is read (i.e. whether it is read as *wins* then *team points* then *team name*)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:466 +msgid "Without revealing any details try and get at least some guidance on how to pronounce names that people are not familiar with pronounce." +msgstr "" + +#: ../../guide/tournament-logistics.rst:467 +msgid "Have backup copies of whatever is being read from and clarify who is reading off what portions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:468 +msgid "Try to publish the break list on the tab website (or via some other online method) shortly after it is announced in order to minimise the chance of misinformation spreading." +msgstr "" + +#: ../../guide/tournament-logistics.rst:471 +msgid "Managing the out-rounds" +msgstr "" + +#: ../../guide/tournament-logistics.rst:473 +msgid "Out-rounds are generally under less time pressure and can be managed by just one or two members of the tab team. However, they tend to be run in a more haphazard fashion, so there are a couple of things to keep on top of:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:477 +msgid "You should keep track of which adjudicators have or have not been used throughout the finals allocations. It is easy for adjudication cores to forget to allocate someone and have to either drop them or promote them beyond what they had originally intended." +msgstr "" + +#: ../../guide/tournament-logistics.rst:478 +msgid "It is very easy for ballots to get lost in break rounds as chairs have less defined roles and processes in what they do with their ballots. While having correct speaker scores correctly entered for break rounds isn't a strict necessity, it is nice to have and the alternative (using fake speaks just to record the winner) can cause confusion. Closely manage distributing ballots to the chairs and collecting them as soon as possible afterwards; especially if there is any time pressure. Generally it is not worth printing off per-debate ballots; just print a stack of generic ballots at the start of the out-rounds and distribute as needed." +msgstr "" + +#: ../../guide/tournament-logistics.rst:479 +msgid "You should know, in addition to when the break rounds are, when the results announcements are. Often these announcements are saved (for suspense or logistics reasons) until particular points of time (i.e. until the evening social; or until other out-rounds are finished). Obviously it's important not to accidentally release results; but often convenors and the adjudication core will often have different ideas about when results are meant to be released." +msgstr "" + +#: ../../guide/tournament-logistics.rst:481 +msgid "If using Tabbycat to manage out-rounds with multiple break categories, note that the round progression is no longer strictly linear. So be careful with when/if results are released online and note that often you can't rely on online interface to release draws publicly." +msgstr "" + +#: ../../guide/tournament-logistics.rst:484 +msgid "Preparing for tab release" +msgstr "" + +#: ../../guide/tournament-logistics.rst:486 +msgid "At some point, if you haven't already, have a discussion with the adjudication core about when the tab itself will be released and what data will be released. Well before the tab is due to be released you want to check that anonymisations and any speaker flags (i.e. Novice, ESL) are up to date in your tab software." +msgstr "" + +#: ../../guide/tournament-logistics.rst:489 +msgid "Managing the tab release" +msgstr "" + +#: ../../guide/tournament-logistics.rst:491 +msgid "Almost there!" +msgstr "" + +#: ../../guide/tournament-logistics.rst:493 +msgid "If hosting Tabbycat on Heroku it's worth increasing the resources available to the server for the ~12 hour period following tab release; it's by far the most concentrated burst of traffic the site will receive. Because Heroku bills by the hour, even going to a relatively expensive option, such as performance dynos with auto-scaling, will be very cheap if run just for this period. That said the site should be relatively resilient even in the face of large amounts of traffic; even running with the most basic resources allocated, at worst pages will be temporarily slow or not load." +msgstr "" + +#: ../../guide/tournament-logistics.rst:495 +msgid "To get an idea of how the site is performing in the Heroku dashboard keep an eye on the average request time number and adjust the number of dynos to try and keep it under say two seconds; ideally just one. When you first turn on the tab release settings, make sure you go through and load every page before announcing it to the public, doing so will trigger the caching mechanism that means potentially complex pages (say the speaker tab) don't need to be calculated from scratch each time someone loads the page." +msgstr "" + +#: ../../guide/tournament-logistics.rst:498 +msgid "Post-tournament" +msgstr "" + +#: ../../guide/tournament-logistics.rst:500 +msgid "Once you have sufficiently recovered, consider writing up and sharing a post-script about how things went; noting things that did or didn't go well. Next year's tab directors would certainly appreciate it, and it would be great to see this kind of knowledge spread more widely. The developers of your tab software would also appreciate hearing your feedback; particularly if there were issues that could have been prevented or ameliorated by the software itself." +msgstr "" + +#: ../../guide/tournament-logistics.rst:503 +msgid "Appendix: Briefing Notes" +msgstr "" + +#: ../../guide/tournament-logistics.rst:505 +msgid "This is a very loose, but not exhaustive, collection of things that are useful to communicate to speakers and adjudicators in a tab briefing. While briefing fatigue is real, having clear expectations about how things like ballots and feedback work are highly valuable uses of the tournament's time if they can at all help cut down the kinds of problems that delay the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:508 +msgid "How feedback works" +msgstr "" + +#: ../../guide/tournament-logistics.rst:510 +msgid "Is it online, or offline? If online did people receive links? What do they do if they have lost it?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:511 +msgid "Is feedback mandatory? What accountability mechanisms are there? Will you publish the shame list online or raise it in between rounds?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:512 +msgid "Who will be submitting feedback on who? Do trainees do so?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:513 +msgid "Remind teams that only one of their feedbacks count; they should coordinate who is doing it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:514 +msgid "What is the feedback scale? What does it correspond to? Common sources of confusion:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:516 +msgid "Feedback scales are not like Uber. You do not get five stars for being adequate and generic." +msgstr "" + +#: ../../guide/tournament-logistics.rst:517 +msgid "Feedback scales are not relative to position; it is an absolute scale. That is to say, if your trainee was good, they probably do not deserve the highest rating; they get whatever rating indicates they should be a panellist or low-chair." +msgstr "" + +#: ../../guide/tournament-logistics.rst:518 +msgid "Consider accompanying the score/scale with a statement characterising how these numbers correspond to positions - e.g. a 4.0 means 'should continue on good panels, should chair low rooms'" +msgstr "" + +#: ../../guide/tournament-logistics.rst:520 +msgid "If using online submission options, what should people without phones or internet access do?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:523 +msgid "How ballots work" +msgstr "" + +#: ../../guide/tournament-logistics.rst:525 +msgid "This part of the presentation will be condescending. It is also necessary. The two causes of delays in the draw running late, and thus the tournament running late are (1) people not filling out ballots correctly or (2) people's ballots going missing. Emphasise that this should be taken seriously; minutes spent chasing bad ballots are often minutes that delay every single person at the tournament from doing what they are actually here to do. You should highlight, ideally with illustrated examples:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:529 +msgid "Which parts of the ballot *must* be filled in; people will often overlook margins, or special fields such as motion vetoes." +msgstr "" + +#: ../../guide/tournament-logistics.rst:530 +msgid "That people must specify the full names of speakers; not nicknames or just-first names. Often names will be written poorly or have ambiguities (i.e. two speakers on a team called James) and having the full name is the only way to resolve it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:531 +msgid "That people should **not draw arrows to swap the order of speakers** as these are impossible to decipher. Here, and in other areas, always *cross-out* information clearly and write it again rather than using arrows or drawing over what is there." +msgstr "" + +#: ../../guide/tournament-logistics.rst:532 +msgid "That people should try and write numbers in a manner that makes them crystal clear. Put cross-bars in 7s; bases on 1's. Make 8's actually look like two circles. If people know they have poor handwriting maybe consider writing the literal words — *seventy-one* below the numbers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:533 +msgid "That for styles that do not have a single ballot for a panel, reiterate that everyone fills in their own ballots. At Australs, if this isn't made absolutely clear someone will average their panels ballots in order to try and 'help' you." +msgstr "" + +#: ../../guide/tournament-logistics.rst:534 +msgid "That runners do not fill out ballots. In BP, remind them that only chairs should fill out ballots (i.e. it cannot be deputised to a wing). In formats with individual ballots, remind chairs to make sure their wings have actually filled out a ballot, and get them to check for errors or ambiguities." +msgstr "" + +#: ../../guide/tournament-logistics.rst:535 +msgid "That everyone is bad at math. People who think they are good at math just haven't messed up their ballot *yet*. Emphasize that people should always use their phone's calculators to check totals. At typical tournaments using exclusively paper ballots math errors happen multiple times a round, almost every round." +msgstr "" + +#: ../../guide/tournament-logistics.rst:536 +msgid "How long people have to fill out their ballots. Suggest that chairs actually keep track of this time during a stopwatch, and start moving towards critical steps (i.e. scoring) well *before* the time is up, not *once* it is up." +msgstr "" + +#: ../../guide/tournament-logistics.rst:537 +msgid "Outline what chairs should do to return ballots. If ballots are being run by runners, outline what they should do if a runner doesn't appear. If they are not being run by runners remind people that returning ballots should be there number one priority, over say giving a lengthy adjudication or team feedback. Or getting lunch." +msgstr "" + +#: ../../guide/tournament-logistics.rst:538 +msgid "Remind people to *be nice to runners* and that being mean to runners will have serious consequences." +msgstr "" + +#: ../../guide/tournament-logistics.rst:539 +msgid "Remind people that the tab team and adjudication core will not, except for absolutely exceptional circumstances, accept photos or messaged descriptions of ballots; that all results must be on paper and handled in the same manner. The adjudication core should also be reminded of this." +msgstr "" + +#: ../../guide/tournament-logistics.rst:542 +msgid "How to locate the tab room" +msgstr "" + +#: ../../guide/tournament-logistics.rst:544 +msgid "People should know how to get to the tab room, either to raise issues with the adjudication core or to correct ballot errors. Make it crystal clear where it is and how to get there. Also ensure people know not to barge in; that they should knock and wait." +msgstr "" + +#: ../../guide/tournament-logistics.rst:546 +msgid "Clearly communicate the contact details of the tab directors and get people to take them down. In most cases you do not want people going through convenors or the adjudication core for any tab-related issues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:549 +msgid "Misc" +msgstr "" + +#: ../../guide/tournament-logistics.rst:551 +msgid "Now is a good time to encourage people to consider getting involved with tabbing and tab-development. Emphasize that both do not necessarily require technical skills and that tabbers are (or should be) open to feedback and ideas from the wider community. Tell people to come find you and chat if they are interested and put up a link to the `Facebook tabbing group `_." +msgstr "" + +#: ../../guide/tournament-logistics.rst:553 +msgid "If you appreciated this guide we'd appreciate a slide promoting `Timekept `_ and `Debatekeeper `_. This would also be a good point to remind people that their timekeeping apps shouldn't be making noise *unless* they have been explicitly assigned to keep time by the chair." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/guide/upgrading.po b/docs/locale/bg/LC_MESSAGES/guide/upgrading.po new file mode 100644 index 00000000000..e6583ed2b42 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/guide/upgrading.po @@ -0,0 +1,60 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:15\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/upgrading.po\n" +"X-Crowdin-File-ID: 1309\n" +"Language: bg_BG\n" + +#: ../../guide/upgrading.rst:5 +msgid "Upgrading Tabbycat" +msgstr "" + +#: ../../guide/upgrading.rst:7 +msgid "Generally only want to upgrade copies of tab sites that are used on an ongoing basis for multiple tournaments, or if there is a bugfix release between when you setup your site and when the tournament is running." +msgstr "" + +#: ../../guide/upgrading.rst:11 +msgid "Going from any version of Tabbycat 1 to any version of Tabbycat 2 won't work with the below instructions — check out the CHANGELOG for the 2.0 version for details of how to perform this upgrade." +msgstr "" + +#: ../../guide/upgrading.rst:14 +msgid "Upgrading a Local Copy" +msgstr "" + +#: ../../guide/upgrading.rst:16 +msgid "Assuming you haven't made any changes to the Tabbycat code, upgrading a locally installed copy should just be a matter of `downloading the latest source code `_ and replacing the existing files with the new ones. If you used git to download these files initially you can just pull down the latest copy of the master branch to do this." +msgstr "" + +#: ../../guide/upgrading.rst:18 +msgid "You would then repeat the \"Install Tabbycat\" instructions for your original installation method." +msgstr "" + +#: ../../guide/upgrading.rst:21 +msgid "Upgrading on Heroku" +msgstr "" + +#: ../../guide/upgrading.rst:23 +msgid "The easiest way to upgrade a Heroku site is to create an account on Github and then to `'fork' `_ the `Tabbycat repository `_." +msgstr "" + +#: ../../guide/upgrading.rst:25 +msgid "Once you have done this you can login to your Heroku Dashboard, go to your app, and then navigate to the Deploy tab. In this tab, adjacent to *Deployment method* select the GitHub option. This will bring up a new 'Connect to GitHub' section where you can search for 'Tabbycat' to find the copy of the repository you made earlier and connect it." +msgstr "" + +#: ../../guide/upgrading.rst:29 +msgid "Once connected a new *Manual deploy* section will appear. Make sure you select the *master* branch (not develop) and then click *Deploy Branch*. This will then show the app deploying and notify you when it has finished; which may take several minutes." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/index.po b/docs/locale/bg/LC_MESSAGES/index.po new file mode 100644 index 00000000000..69b8fa039d0 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/index.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:34\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/index.po\n" +"X-Crowdin-File-ID: 1311\n" +"Language: bg_BG\n" + +#: ../../index.rst:18 +msgid "Installation" +msgstr "Инсталиране" + +#: ../../index.rst:32 +msgid "Using Tabbycat" +msgstr "Използване на Табикат" + +#: ../../index.rst:41 +msgid "Tabbing Guide" +msgstr "" + +#: ../../index.rst:52 +msgid "Feature notes" +msgstr "" + +#: ../../index.rst:75 +msgid "About" +msgstr "Относно" + +#: ../../index.rst:8 +msgid "Tabbycat User Guide" +msgstr "Наръчник за употреба на Табикат" + +#: ../../index.rst:10 +msgid "Tabbycat is a draw tabulation system for parliamentary debate tournaments. It supports two-team formats such as Australs, World Schools, Asians, Australian Easters and all New Zealand formats, as well as British Parliamentary (WUDC). It is also highly configurable, supporting many custom variations of the above formats too. If you're looking for a general overview of the software, check out our `README on Github `_." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/install/docker.po b/docs/locale/bg/LC_MESSAGES/install/docker.po new file mode 100644 index 00000000000..12e5b639176 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/install/docker.po @@ -0,0 +1,173 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:15\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/docker.po\n" +"X-Crowdin-File-ID: 1313\n" +"Language: bg_BG\n" + +#: ../../install/docker.rst:5 +msgid "Installing Locally using Docker" +msgstr "" + +#: ../../install/docker.rst:7 +msgid "Is this the best install method for you?" +msgstr "" + +#: ../../install/docker.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/docker.rst:12 +#, python-format +msgid "If you need an offline copy of Tabbycat, installing using Docker should be simpler and quicker than using the \"Install Locally on…\" instructions for your operating system. However if a Docker installation doesn't work as outlined below, it's harder to address what isn't working. If you encounter any problems with Docker, we recommend using the \"Install Locally on…\" option as a fallback, but if you need to do so, `please also report the issue you're having on GitHub `_ or :ref:`contact the developers `." +msgstr "" + +#: ../../install/docker.rst:14 +msgid "Docker is an application that makes it very easy to load and run a specific collection of software. It allows us to bundle everything necessary to run Tabbycat into a single package rather than have users install everything needed step-by-step. Once set up, Docker will allow you to start and stop a webserver (that in turn runs Tabbycat) on your computer whenever you want and without the need for internet access." +msgstr "" + +#: ../../install/docker.rst:18 +msgid "1. Download Tabbycat" +msgstr "" + +#: ../../install/docker.rst:20 +msgid "`Go to the page for our latest release `_." +msgstr "" + +#: ../../install/docker.rst:22 +msgid "Download the zip or tar.gz file." +msgstr "" + +#: ../../install/docker.rst:24 +msgid "Extract all files in it to a folder of your choice." +msgstr "" + +#: ../../install/docker.rst:28 +msgid "2. Install Docker" +msgstr "" + +#: ../../install/docker.rst:31 +msgid "If using macOS or Linux" +msgstr "" + +#: ../../install/docker.rst:33 +msgid "Install the **Docker Community Edition (stable)** from the `Docker store page `_." +msgstr "" + +#: ../../install/docker.rst:36 +msgid "If using Windows 10 Pro, Enterprise, or Education Edition" +msgstr "" + +#: ../../install/docker.rst:40 +msgid "Install the ****Docker Community Edition (stable)*** from the `Docker store page `_." +msgstr "" + +#: ../../install/docker.rst:41 +msgid "Before or shortly after installing it, Docker may ask you to enable hypervisor and restart your PC. If it asks you this follow the prompts and restart as asked." +msgstr "" + +#: ../../install/docker.rst:42 +msgid "Once Docker has finished installing, open up the newly-installed Docker application, then right-click the app's icon (the whale) in the Taskbar." +msgstr "" + +#: ../../install/docker.rst:43 +msgid "From there, hit *Settings* in the menu and *Shared Drives* in the sidebar. Tick the checkbox next to your hardrive and then click *Apply*. After that has applied exit and reopen the docker app (ie right-click the taskbar icon and hit exit) and verify that the checkbox is still there." +msgstr "" + +#: ../../install/docker.rst:49 +msgid "If using Windows 7, Windows 8, or Windows 10 Home Edition" +msgstr "" + +#: ../../install/docker.rst:51 +msgid "Install the **Docker Toolbox** from the `Docker Toolbox downloads page `_." +msgstr "" + +#: ../../install/docker.rst:53 +msgid "Not sure which edition of Windows you have? Click Start, search for \"System\", and open the Control Panel item \"System\"." +msgstr "" + +#: ../../install/docker.rst:57 +msgid "3. Run Tabbycat in Docker" +msgstr "" + +#: ../../install/docker.rst:60 +msgid "If using the Docker App" +msgstr "" + +#: ../../install/docker.rst:62 +msgid "*These instructions apply if you installed the Docker App, i.e., if you are using macOS, Linux or Windows Pro/Enterprise/Education.*" +msgstr "" + +#: ../../install/docker.rst:66 +msgid "Ensure that Docker application is open (there should be a whale icon in your menu/task bar) and that it says that Docker is running." +msgstr "" + +#: ../../install/docker.rst:68 +msgid "Browse to the location where you extracted Tabbycat to. Open up the **bin** folder there. Within that folder:" +msgstr "" + +#: ../../install/docker.rst:70 +msgid "If you're on macOS, press the Control key, click the icon for **osx_docker_start.command**, then choose Open from the shortcut menu." +msgstr "" + +#: ../../install/docker.rst:71 +msgid "If you're on Windows, open **windows_docker_start.bat**." +msgstr "" + +#: ../../install/docker.rst:72 +msgid "If you're on Linux, open up a terminal in the Tabbycat folder (*i.e.* the folder containing ``README.md``) and run ``docker-compose up``." +msgstr "" + +#: ../../install/docker.rst:74 +msgid "A terminal window should popup and bunch of text scroll by. If this is your first time running Docker it may take a while (30 minutes or more) to download the virtual machine. When the text has stopped scrolling by you should see a `Finished building Tabbycat!` message." +msgstr "" + +#: ../../install/docker.rst:76 +msgid "Open up http://localhost:8000/ (Windows) or http://0.0.0.0:8000 (OSX/Linux) in a browser of your choice!" +msgstr "" + +#: ../../install/docker.rst:78 ../../install/docker.rst:100 +msgid "If you want to reopen Tabbycat at a later time (say after restarting) repeat steps 1 through 4 here." +msgstr "" + +#: ../../install/docker.rst:81 +msgid "If using the Docker Toolbox" +msgstr "" + +#: ../../install/docker.rst:83 +msgid "*These instructions apply if you installed the Docker Toolbox, i.e., if you are using Windows 7, Windows 8 or Windows 10 Home.*" +msgstr "" + +#: ../../install/docker.rst:87 +msgid "Start the **Docker Quickstart Terminal**." +msgstr "" + +#: ../../install/docker.rst:89 +msgid "Run the command ``docker-machine ip``. Take note of the IP address it shows, for example::" +msgstr "" + +#: ../../install/docker.rst:94 +msgid "Navigate to the Tabbycat folder (*i.e.* the folder containing ``README.md``) and run ``docker-compose up``." +msgstr "" + +#: ../../install/docker.rst:96 +msgid "Open a browser and go to http://192.168.99.100:8000/, replacing \"192.168.99.100\" with whatever IP address was shown in step 2." +msgstr "" + +#: ../../install/docker.rst:98 +msgid "Once you're done and want to stop the Tabbycat server, press Ctrl+C, wait until the next prompt appears, and then run ``docker-machine stop``." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/install/heroku.po b/docs/locale/bg/LC_MESSAGES/install/heroku.po new file mode 100644 index 00000000000..942abce3c4b --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/install/heroku.po @@ -0,0 +1,445 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:15\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/heroku.po\n" +"X-Crowdin-File-ID: 1315\n" +"Language: bg_BG\n" + +#: ../../install/heroku.rst:5 +msgid "Installing on Heroku" +msgstr "" + +#: ../../install/heroku.rst:7 +msgid "When running Tabbycat on the internet, we set it up on `Heroku `_. The project is set up to be good to go on Heroku, and it works well for us, so if you'd like to run it online, we recommend that you do the same. Naturally, this requires you to have a Heroku account." +msgstr "" + +#: ../../install/heroku.rst:9 +msgid "There are two ways to do this: a **short way** and a **long way**. Most people should use the short way. The long way requires some familiarity with command-line interfaces and Git, and requires a :ref:`local installation ` as a prerequisite, but makes it easier to :ref:`upgrade versions ` later on and (unlike the short way) allows you to import data from CSV files." +msgstr "" + +#: ../../install/heroku.rst:12 +msgid "The short way" +msgstr "" + +#: ../../install/heroku.rst:13 +msgid "Click this button:" +msgstr "" + +#: ../../install/heroku.rst:18 +msgid "This is the easiest way to deploy an instance of Tabbycat online. It requires no technical background." +msgstr "" + +#: ../../install/heroku.rst:20 +msgid "If you don't already have a Heroku account, it'll prompt you to create one. Once you're logged in to Heroku, choose a name for your installation, then scroll down and click **Deploy**. Once it's finished, click **View** and follow the prompts. Once finished, open the site and from there you can easily set up a demo data set (if you just want to learn Tabbycat) or use the data importer to set up a real tournament." +msgstr "" + +#: ../../install/heroku.rst:22 +msgid "During the setup process, Heroku will ask you to verify your account by adding a credit card. A standard Tabbycat site *will not charge* your card — charges only accrue if you deliberately add a paid service in the Heroku dashboard." +msgstr "" + +#: ../../install/heroku.rst:24 +msgid "If you can't access a credit card, you can instead install a limited version, which we call \"Tabbykitten\". However, Tabbykitten cannot send any e-mails or handle as much public traffic. We therefore strongly recommend it only as a last resort, and even then only for small tournaments. `Use this link to set up a Tabbykitten site `_." +msgstr "" + +#: ../../install/heroku.rst:27 +msgid "The long way" +msgstr "" + +#: ../../install/heroku.rst:28 +msgid "The long way sets you up with more control over your environment. Because you'll clone `our GitHub repository`_, it'll be easier for you to :ref:`upgrade your app ` when a new version is released. You'll also have the flexibility to make and contribute updates to the source code. We recommend it if you have experience with Git. It's also easier with this method to import CSV files using the command-line importer, so if you have a very large tournament, this might make importing initial data easier." +msgstr "" + +#: ../../install/heroku.rst:30 +msgid "We've tested these instructions successfully on Windows, Linux and macOS." +msgstr "" + +#: ../../install/heroku.rst:33 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/heroku.rst:35 +msgid "You need to have at least a passing familiarity with command-line interfaces to get through the longer traditional method. We'll talk you through the rest." +msgstr "" + +#: ../../install/heroku.rst:37 +msgid "When we say \"command shell\", on Windows we mean **Command Prompt**, and on Linux and macOS we mean **Terminal** (or your favourite command shell)." +msgstr "" + +#: ../../install/heroku.rst:39 ../../install/heroku.rst:100 +msgid "Advanced users" +msgstr "" + +#: ../../install/heroku.rst:42 +msgid "Tabbycat is a `Django `_ project. As such, it can be installed on any web platform that supports Django, using any SQL system that Django supports. Just be aware that we haven't tried any other platform." +msgstr "" + +#: ../../install/heroku.rst:45 +msgid "Short version of the long way" +msgstr "" + +#: ../../install/heroku.rst:47 +msgid "We provide a \"short version\" for experienced users. Don't just copy and paste these commands before you understand what they do! If things aren't set up perfectly they can fail, so it's important to supervise them the first time you do them. If this is all new to you, read the long version of the instructions below." +msgstr "" + +#: ../../install/heroku.rst:56 +msgid "If you want to :ref:`import tournament data ` from CSV files, :ref:`install Tabbycat locally `, put your CSV files in ``data/yourtournamentname``, then::" +msgstr "" + +#: ../../install/heroku.rst:68 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/heroku.rst:70 +msgid "Install the `Heroku Command Line Interface (CLI) `_, then log in with the command ``heroku login``." +msgstr "" + +#: ../../install/heroku.rst:72 +msgid "If you don't already have **Git**, follow the `instructions on the GitHub website `_ to set up Git." +msgstr "" + +#: ../../install/heroku.rst:75 +msgid "2. Set up a local installation" +msgstr "" + +#: ../../install/heroku.rst:77 +msgid "If you don't already have a local installation, follow the instructions on the page for your operating system, listed below, to set up a local installation." +msgstr "" + +#: ../../install/heroku.rst:79 +msgid "When downloading the source code, you **must** take the option involving cloning the GitHub repository using Git. In the macOS and Windows instructions, this means the option described in the \"Advanced users\" box. To do so, use these commands:" +msgstr "" + +#: ../../install/heroku.rst:86 +msgid "Do not download the .tar.gz or .zip file and extract it." +msgstr "" + +#: ../../install/heroku.rst:88 +msgid ":ref:`install-linux`" +msgstr "" + +#: ../../install/heroku.rst:89 +msgid ":ref:`install-osx`" +msgstr "" + +#: ../../install/heroku.rst:90 +msgid ":ref:`install-wsl`" +msgstr "" + +#: ../../install/heroku.rst:91 +msgid ":ref:`install-windows`" +msgstr "" + +#: ../../install/heroku.rst:93 +msgid "If you do already have a local installation, update to the latest version using:" +msgstr "" + +#: ../../install/heroku.rst:103 +msgid "It's not *strictly* necessary to have a fully functional local installation if you don't want to import data from CSV files. But it certainly helps." +msgstr "" + +#: ../../install/heroku.rst:106 +msgid "3. Deploy to Heroku" +msgstr "" + +#: ../../install/heroku.rst:110 +msgid "Navigate to your Tabbycat directory::" +msgstr "" + +#: ../../install/heroku.rst:114 +msgid "Run the script to deploy the app to Heroku. Replace ``yourappname`` with your preferred URL. Your website will be at ``yourappname.herokuapp.com``." +msgstr "" + +#: ../../install/heroku.rst:120 +msgid "This script has other options that you might find useful. Run ``python deploy_heroku.py --help`` for details." +msgstr "" + +#: ../../install/heroku.rst:122 +msgid "When this script finishes, it will open the app in your browser. It should look something like this:" +msgstr "" + +#: ../../install/heroku.rst:127 +msgid "4. Import tournament data locally" +msgstr "" + +#: ../../install/heroku.rst:129 +msgid "Steps 4 and 5 are optional; there are other methods of :ref:`importing data `. However the following method is most useful for large tournaments where manual entry would be tedious." +msgstr "" + +#: ../../install/heroku.rst:131 +msgid "Step 4 is the same as the process described in :ref:`importtournament-command`." +msgstr "" + +#: ../../install/heroku.rst:135 +msgid "Place your CSV files in ``data/yourtournamentname``, as described in :ref:`importing-initial-data`." +msgstr "" + +#: ../../install/heroku.rst:137 +msgid "Create a new, blank local database::" +msgstr "" + +#: ../../install/heroku.rst:141 +msgid "It's normally easiest to name your local database after your app name, so that if you have multiple sites, you know which one relates to which." +msgstr "" + +#: ../../install/heroku.rst:143 +msgid "Reconfigure ``DATABASES`` in your settings_local.py file to point to this new database." +msgstr "" + +#: ../../install/heroku.rst:145 +msgid "Activate your virtual environment::" +msgstr "" + +#: ../../install/heroku.rst:149 +msgid "Run initial migrations on your blank local database::" +msgstr "" + +#: ../../install/heroku.rst:154 +msgid "Import your tournament data into your blank local database::" +msgstr "" + +#: ../../install/heroku.rst:158 +msgid "If your data's not clean, it might take a few attempts to get this right. We recommend either destroying and recreating the database (``dropdb``, ``createdb``), or wiping it using ``dj flush``, before retrying." +msgstr "" + +#: ../../install/heroku.rst:160 +msgid "Check it looks like how you expect it to look, by starting your local installation::" +msgstr "" + +#: ../../install/heroku.rst:165 +msgid "5. Push the local database to Heroku" +msgstr "" + +#: ../../install/heroku.rst:167 +msgid "Once you're happy with how your local import went, you can push the local database to Heroku." +msgstr "" + +#: ../../install/heroku.rst:169 +msgid "This step wipes the Heroku database clean, and replaces it with the contents of your local database. If you have any data on the Heroku site that isn't also in your local database, **that data will be lost** and will not be recoverable." +msgstr "" + +#: ../../install/heroku.rst:171 +msgid "If you have multiple Heroku sites, you may find that the ``heroku`` commands refuse to run, prompting you to specify an app. If so, add ``--app yourappname`` to each ``heroku`` command." +msgstr "" + +#: ../../install/heroku.rst:173 +msgid "Enable maintenance mode. This takes the site offline, to ensure that no-one can possibly create or change any data on the site while you're pushing a new database up::" +msgstr "" + +#: ../../install/heroku.rst:177 +msgid "Reset the database. (Caution: This permanently deletes all information on your Heroku database!)" +msgstr "" + +#: ../../install/heroku.rst:183 +msgid "Push your local database to Heroku::" +msgstr "" + +#: ../../install/heroku.rst:187 +msgid "You might need to specify your local PostgreSQL credentials by adding ``PGUSER=yourusername PGPASSWORD=******** PGHOST=localhost`` to the *beginning* of that command. (This sets environment variables to those values for the duration of that one command.)" +msgstr "" + +#: ../../install/heroku.rst:189 +msgid "Disable maintenance mode::" +msgstr "" + +#: ../../install/heroku.rst:195 +msgid "Heroku options you may want to change" +msgstr "" + +#: ../../install/heroku.rst:197 +msgid "If you have a large tournament, you may want to customize your Heroku app. This section provides some guidance on upgrades and settings you may wish to consider. Some of these configurations require you to have the `Heroku Command Line Interface (CLI) `_ installed." +msgstr "" + +#: ../../install/heroku.rst:202 +msgid "Upgrading your database size" +msgstr "" + +#: ../../install/heroku.rst:204 +msgid "The free plan of `Heroku Postgres `_, \"Hobby Dev\", should work for most small tournaments. For large tournaments, however, you may find that you exceed the 10,000-row limit of this plan. It's difficult to give general guidance on how many rows you're likely to use, because it depends on which features of Tabbycat you use (*e.g.*, if you use adjudicator feedback). But to give some idea:" +msgstr "" + +#: ../../install/heroku.rst:206 +msgid "Australs 2016, which had 74 teams, 8 preliminary rounds and heavily used adjudicator feedback, ended up at around 30,000 rows." +msgstr "" + +#: ../../install/heroku.rst:207 +#, python-format +msgid "The Asia BP championships 2017 had 100 teams, 6 preliminary rounds, and mandatory feedback (i.e. 100% return rates) used 15,000 rows." +msgstr "" + +#: ../../install/heroku.rst:208 +msgid "A 3 vs 3 tournament with 54 teams, 5 preliminary rounds, and which only lightly used adjudicator feedback ended up using around 4,500 rows" +msgstr "" + +#: ../../install/heroku.rst:210 +msgid "If you need more than 10,000 rows, you'll need to upgrade to a paid Heroku Postgres Plan. The 10,000,000 rows allowed in the lowest paid plan, \"Hobby Basic\", should certainly be more than sufficient." +msgstr "" + +#: ../../install/heroku.rst:212 +msgid "If you're not sure, you can always start at Hobby Dev—just be prepared to `upgrade `_ during the tournament if you run close to capacity." +msgstr "" + +#: ../../install/heroku.rst:215 +msgid "Custom domain names" +msgstr "" + +#: ../../install/heroku.rst:217 +msgid "Your Heroku app will be available at ``yourappname.herokuapp.com``. You may want it to be a subdomain of your tournament's website, like ``tab.australasians2015.org``. If so, you'll need to configure your custom domain and SSL. Instructions for both are in the Heroku Dev Center:" +msgstr "" + +#: ../../install/heroku.rst:219 +msgid "`Custom Domain Names for Apps `_" +msgstr "" + +#: ../../install/heroku.rst:220 +msgid "`Heroku SSL `_" +msgstr "" + +#: ../../install/heroku.rst:222 +msgid "The custom domain name basically requires two things: a DNS ``CNAME`` entry on your website targeting ``yourappname.herokuapp.com``, and the custom domain configured on Heroku using ``heroku domains:add tab.yourwebsite.com``. You'll also need to provide an SSL certificate for your custom domain and add it using the ``heroku certs:add`` command." +msgstr "" + +#: ../../install/heroku.rst:225 +msgid "HTTPS" +msgstr "" + +#: ../../install/heroku.rst:227 +msgid "All Tabbycat sites deployed to Heroku redirect all traffic to HTTPS by default." +msgstr "" + +#: ../../install/heroku.rst:229 +msgid "For a myriad of reasons, we strongly advise against disabling this. But if for some reason you need to run on plain HTTP, you can do this by setting the ``DISABLE_HTTPS_REDIRECTS`` config variable in Heroku to ``disable`` (see `Heroku documentation on config vars `_). The value of the config var must be ``disable``; if it's anything else, HTTPS redirects will remain in place." +msgstr "" + +#: ../../install/heroku.rst:231 +msgid "Most modern browsers, after having been redirected by a site to HTTPS once, remember that that site requires HTTPS and go there for all subsequent visits even if the user typed in a plain http\\:// address. It may do this because it cached the HTTP 301 permanent redirect, stored an HSTS entry and/or tagged its session cookie to require HTTPS. If, after disabling HTTPS on your Tabbycat site, you find that you're still being redirected to HTTPS, first try a browser or computer that *hasn't* visited the site before. If that works, then remove the relevant entry from your (original) browser's cache, HSTS set and cookies, and try again." +msgstr "" + +#: ../../install/heroku.rst:234 +msgid "Time zone" +msgstr "" + +#: ../../install/heroku.rst:236 +msgid "If you want to change the time zone you nominated during deployment, you can do so by going to the `Heroku Dashboard `_, clicking on your app, going to the **Settings** tab, clicking **Reveal Config Vars** and changing the value of the ``TIME_ZONE`` variable. This value must be one of the names in the IANA tz database, *e.g.* ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``. You can find a `list of these on Wikipedia `_ in the 'TZ\\*' column." +msgstr "" + +#: ../../install/heroku.rst:239 +msgid "SendGrid account details" +msgstr "" + +#: ../../install/heroku.rst:241 +msgid "By default, Heroku will automatically create a SendGrid account for you. For small tournaments, this should work fine. For larger ones, though, SendGrid typically doesn't allow new accounts to send so many emails without additional vetting. This vetting is separate to the verification you did for your Heroku account, and as far as we're aware, it can't be done until you send your first email, by which time it's probably too late." +msgstr "" + +#: ../../install/heroku.rst:243 +msgid "If you're running a large tournament, you may wish to use your own SendGrid account instead. The free tier probably won't suffice after the trial period, but the Essentials tier should be more than adequate. If you're a student and have the `GitHub Education Pack `_, you might find the SendGrid plan here useful." +msgstr "" + +#: ../../install/heroku.rst:245 +msgid "If you set up and use your own SendGrid account, you can remove the SendGrid add-on from your Heroku app. The SendGrid add-on is only necessary if you wish to use Heroku's auto-created SendGrid account." +msgstr "" + +#: ../../install/heroku.rst:247 +msgid "To set up your app to use your own SendGrid account:" +msgstr "" + +#: ../../install/heroku.rst:251 +msgid "`Sign up for a SendGrid account `_, if you don't already have one." +msgstr "" + +#: ../../install/heroku.rst:253 +msgid "`Create an API key `_ in your SendGrid account." +msgstr "" + +#: ../../install/heroku.rst:255 +msgid "There are `instructions for how to do this in the SendGrid documentation `_. The only permission that is needed is the \"Mail Send\" permission, so you can turn off all others if you want to be safe." +msgstr "" + +#: ../../install/heroku.rst:257 +msgid "Set the following config vars in Heroku Dashboard (or using the Heroku CLI, if you have it):" +msgstr "" + +#: ../../install/heroku.rst:259 +msgid "``SENDGRID_USERNAME`` should be set to ``apikey`` (not your username)." +msgstr "" + +#: ../../install/heroku.rst:260 +msgid "``SENDGRID_PASSWORD`` should be set to your API key, which will start with ``SG*******``." +msgstr "" + +#: ../../install/heroku.rst:262 +msgid "The `Heroku SendGrid instructions `_ to do something with ``SENDGRID_API_KEY`` are **incorrect**. We figured this out by contacting SendGrid support staff. Use the above config vars instead." +msgstr "" + +#: ../../install/heroku.rst:268 +msgid "Upgrading an existing Heroku app" +msgstr "" + +#: ../../install/heroku.rst:270 +msgid "For most users, we recommend starting a new site for every tournament, when you set up the tab for that tournament. There's generally not a pressing need to upgrade Tabbycat after a tournament is concluded, and every time you deploy a new site, you'll be using the latest version at the time of deployment." +msgstr "" + +#: ../../install/heroku.rst:272 +msgid "To upgrade an existing Heroku-based Tabbycat app to the latest version, you need to *deploy* the current version of Tabbycat to your Heroku app. There are several ways to do this. We list one below, primarily targeted at users with some background in Git." +msgstr "" + +#: ../../install/heroku.rst:274 +msgid "The essence of it is that you need to `create a Git remote `_ for your Heroku app (if you don't already have one), then `push to it `_." +msgstr "" + +#: ../../install/heroku.rst:276 +msgid "You should **always** :ref:`back up your database ` before upgrading Tabbycat." +msgstr "" + +#: ../../install/heroku.rst:278 +msgid "You'll need both Git and the Heroku CLI, and you'll need to be logged in to the Heroku CLI already." +msgstr "" + +#: ../../install/heroku.rst:280 +msgid "Take a backup of your database::" +msgstr "" + +#: ../../install/heroku.rst:284 +msgid "If you haven't already, clone our Git repository and check out the master branch::" +msgstr "" + +#: ../../install/heroku.rst:289 +msgid "If you've already cloned our Git repository, don't forget to pull so you're up to date::" +msgstr "" + +#: ../../install/heroku.rst:294 +msgid "Check to see if you have a Git remote already in place::" +msgstr "" + +#: ../../install/heroku.rst:300 +msgid "If you do, the name of the remote will be on the left (``heroku`` in the above example), and the URL of your Git repository will be on the right. In the example above, our Tabbycat site URL would be ``mytournament2018.herokuapp.com``; the Git remote URL is then ``https://git.heroku.com/mytournament2018.git``." +msgstr "" + +#: ../../install/heroku.rst:302 +msgid "If a Git remote URL for your Tabbycat site *doesn't* appear, then create one::" +msgstr "" + +#: ../../install/heroku.rst:307 +msgid "If you tab many tournaments, it'll probably be helpful to use a name other than ``heroku`` (say, ``mytournament2018``), so that you can manage multiple tournaments." +msgstr "" + +#: ../../install/heroku.rst:309 +msgid "Push to Heroku::" +msgstr "" + +#: ../../install/heroku.rst:313 +msgid "This will take a while to complete." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/install/linux.po b/docs/locale/bg/LC_MESSAGES/install/linux.po new file mode 100644 index 00000000000..671e822bce0 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/install/linux.po @@ -0,0 +1,249 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:15\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/linux.po\n" +"X-Crowdin-File-ID: 1317\n" +"Language: bg_BG\n" + +#: ../../install/linux.rst:5 +msgid "Installing Locally on Linux" +msgstr "" + +#: ../../install/linux.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/linux.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/linux.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on Linux, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/linux.rst:14 +msgid "The instructions apply to both Linux, and :ref:`Linux on Windows `." +msgstr "" + +#: ../../install/linux.rst:17 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/linux.rst:19 +msgid "You need to be familiar with command-line interfaces to get through this comfortably. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest." +msgstr "" + +#: ../../install/linux.rst:21 ../../install/linux.rst:56 +#: ../../install/linux.rst:130 +msgid "Advanced users" +msgstr "" + +#: ../../install/linux.rst:24 +msgid "If you wish to use an SQL engine other that PostgreSQL, most of Tabbycat should work, but a few features rely on SQL functions that aren't supported by all engines. To configure Tabbycat to use a different engine, set the ``DATABASES`` `Django setting `_ accordingly." +msgstr "" + +#: ../../install/linux.rst:27 +msgid "Short version" +msgstr "" + +#: ../../install/linux.rst:38 +msgid "Then create **settings/local.py** as described :ref:`below `, then::" +msgstr "" + +#: ../../install/linux.rst:53 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/linux.rst:54 +msgid "First, you need to install all of the software on which Tabbycat depends, if you don't already have it installed." +msgstr "" + +#: ../../install/linux.rst:59 +msgid "These instructions are for Ubuntu, and are targeted at Ubuntu 18.04. If you have another distribution of Linux, we trust you'll know how to navigate the package manager for your distribution to install the dependencies." +msgstr "" + +#: ../../install/linux.rst:64 +msgid "1(a). Python" +msgstr "" + +#: ../../install/linux.rst:65 +msgid "Tabbycat requires Python 3.6 or later. You probably already have Python 3.6, but you'll also need the development package in order to install Psycopg2 later. The ``venv`` module will come in handy too. Install::" +msgstr "" + +#: ../../install/linux.rst:69 +msgid "Check the version::" +msgstr "" + +#: ../../install/linux.rst:74 +msgid "Tabbycat does not support Python 2. You must use Python 3.6 or later." +msgstr "" + +#: ../../install/linux.rst:77 +msgid "1(b). PostgreSQL" +msgstr "" + +#: ../../install/linux.rst:78 +msgid "*PostgreSQL is a database management system.*" +msgstr "" + +#: ../../install/linux.rst:80 +msgid "Install PostgreSQL using the `PostgreSQL installation instructions here `_." +msgstr "" + +#: ../../install/linux.rst:82 +msgid "Normally, installing the latest stable version should be best, but if you're having issues, install the same version as the current `default version on Heroku `_, as that will be what is currently most commonly used with Tabbycat. If you're planning on pushing data between your local installation and a Heroku site, it's best to match the Heroku's current default version." +msgstr "" + +#: ../../install/linux.rst:84 +msgid "You'll also need the ``libpq-dev`` package in order to install Psycopg2 later::" +msgstr "" + +#: ../../install/linux.rst:91 +msgid "1(c). Node.js/NPM" +msgstr "" + +#: ../../install/linux.rst:92 +msgid "*Node.js is a JavaScript runtime.*" +msgstr "" + +#: ../../install/linux.rst:94 +msgid "Tabbycat requires Node and its package manager to compile front-end dependencies. Install using:" +msgstr "" + +#: ../../install/linux.rst:104 +msgid "1(d). Other development tools" +msgstr "" + +#: ../../install/linux.rst:105 +msgid "Some of the Python packages require GCC, G++ and Make in order to install::" +msgstr "" + +#: ../../install/linux.rst:112 +msgid "2. Get the source code" +msgstr "" + +#: ../../install/linux.rst:114 +msgid "Choose either of the following two methods." +msgstr "" + +#: ../../install/linux.rst:117 +msgid "Method 1 (Git clone)" +msgstr "" + +#: ../../install/linux.rst:119 +msgid "If you have Git, life will be easier if you clone `our GitHub repository`_:" +msgstr "" + +#: ../../install/linux.rst:126 +msgid "(You can find out if you have Git using ``git --version``. If you don't, you can install it using ``sudo apt install git``.)" +msgstr "" + +#: ../../install/linux.rst:128 +msgid "The default branch is ``develop``, so you need to explicitly change the branch to ``master``, which is what the ``git checkout master`` line does." +msgstr "" + +#: ../../install/linux.rst:133 +msgid "You might like to fork the repository first, to give yourself a little more freedom to make code changes on the fly (and potentially :ref:`contribute ` them to the project)." +msgstr "" + +#: ../../install/linux.rst:136 +msgid "Method 2 (tarball)" +msgstr "" + +#: ../../install/linux.rst:138 +msgid "If you don't want to use Git, simply download and extract:" +msgstr "" + +#: ../../install/linux.rst:147 +msgid "3. Set up a new database" +msgstr "" + +#: ../../install/linux.rst:149 +msgid "You can skip step 1 if this is not your first installation. Every Tabbycat installation requires its own database, but they can use the same login role if you like." +msgstr "" + +#: ../../install/linux.rst:151 +msgid "Create a new user account with a password, replacing ``myusername`` with whatever name you prefer. If you don't know what username to pick, use ``tabbycat``. Grant this user the ability to create databases, since this'll make it easier to spin up new instances of Tabbycat in the future." +msgstr "" + +#: ../../install/linux.rst:157 +msgid "If you'll be running multiple instances of Tabbycat, developing, or diving into the database yourself, you might find it convenient to set up client authentication so that you don't need to do all manual operations from ``sudo -u postgres``. See the `PostgreSQL documentation on client authentication `_ for more information. For example, you could add a ``local all myusername md5`` line to the *pg_hba.conf* file, or you could define a mapping in *pg_ident.conf* and append the ``map=`` option to the ``local all all peer`` line in *pg_hba.conf*." +msgstr "" + +#: ../../install/linux.rst:159 +msgid "Create a new database, replacing ``mydatabasename`` with whatever name you prefer, probably the name of the tournament you're running::" +msgstr "" + +#: ../../install/linux.rst:167 +msgid "4. Install Tabbycat" +msgstr "" + +#: ../../install/linux.rst:168 +msgid "Almost there!" +msgstr "" + +#: ../../install/linux.rst:170 +msgid "Navigate to your Tabbycat directory::" +msgstr "" + +#: ../../install/linux.rst:176 +msgid "Start a new virtual environment. We suggest the name ``venv``, though it can be any name you like:" +msgstr "" + +#: ../../install/linux.rst:182 +msgid "Run the ``activate`` script. This puts you \"into\" the virtual environment::" +msgstr "" + +#: ../../install/linux.rst:186 +msgid "Install Tabbycat's requirements into your virtual environment::" +msgstr "" + +#: ../../install/linux.rst:192 +msgid "Navigate to the **tabbycat/settings** sub folder and copy **local.example** to **local.py**. Find this part in your new **local.py**, and fill in the blanks as indicated:" +msgstr "" + +#: ../../install/linux.rst:207 +msgid "Optionally, replace the value in this line in the same file with your own time zone, as defined in the `IANA time zone database `_ (*e.g.*, ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``)::" +msgstr "" + +#: ../../install/linux.rst:211 +msgid "Navigate to the **tabbycat** sub-directory, initialize the database, compile the assets, and create a user account for yourself::" +msgstr "" + +#: ../../install/linux.rst:219 +msgid "Start Tabbycat!" +msgstr "" + +#: ../../install/linux.rst:225 +msgid "It should show something like this::" +msgstr "" + +#: ../../install/linux.rst:229 +msgid "Open your browser and go to the URL printed above. (In the above example, it's http://127.0.0.1:8000.) It should look something like the screenshot below. If it does, great! You've successfully installed Tabbycat." +msgstr "" + +#: ../../install/linux.rst:234 +msgid "Naturally, your database is currently empty, so proceed to :ref:`importing initial data `." +msgstr "" + +#: ../../install/linux.rst:237 +msgid "Starting up an existing Tabbycat instance" +msgstr "" + +#: ../../install/linux.rst:238 +msgid "To start your Tabbycat instance up again next time you use your computer::" +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/install/local.po b/docs/locale/bg/LC_MESSAGES/install/local.po new file mode 100644 index 00000000000..7d91ab3b6a1 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/install/local.po @@ -0,0 +1,156 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:15\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/local.po\n" +"X-Crowdin-File-ID: 1319\n" +"Language: bg_BG\n" + +#: ../../install/local.rst:5 +msgid "Local Installations" +msgstr "" + +#: ../../install/local.rst:8 +msgid "What is a local installation?" +msgstr "" + +#: ../../install/local.rst:10 +msgid "Tabbycat is a web-based system: it's designed to run as a web site. However, instead of installing it on a web server, you can install it on your computer, serving web pages to yourself. This is called a local installation." +msgstr "" + +#: ../../install/local.rst:12 +msgid "Then, when you open your browser, you can use Tabbycat like any other web site. The only difference is that this one is on **your** computer, not some computer in a data centre in a far-away land. In effect, you are getting your computer to behave like a web server." +msgstr "" + +#: ../../install/local.rst:17 +msgid "Should I use a local installation?" +msgstr "" + +#: ../../install/local.rst:19 +msgid "In most cases, you should make an online Tabbycat installation by :ref:`setting up an instance on Heroku `. This has a number of major advantages:" +msgstr "" + +#: ../../install/local.rst:21 +msgid "The installation process is easier." +msgstr "" + +#: ../../install/local.rst:22 +msgid "You can enter ballots and manage your tournament from multiple computers." +msgstr "" + +#: ../../install/local.rst:23 +msgid "Participants can access the draw, motions, results and more online." +msgstr "" + +#: ../../install/local.rst:24 +msgid "Heroku's data centers are less likely to fail than your computer is." +msgstr "" + +#: ../../install/local.rst:25 +msgid "Heroku e-mails Tabbycat's developers error reports to help us fix bugs." +msgstr "" + +#: ../../install/local.rst:27 +msgid "In some cases, you might have a good reason to use a local installation. We can think of just one such reason: If you won't have access to the internet at your tournament, or if internet access will be flaky, then you should use a local installation." +msgstr "" + +#: ../../install/local.rst:32 +msgid "You'll need internet access to download dependencies during the local installation process. So if you're not expecting to have reliable internet access at your tournament, be sure to have Tabbycat installed *before* you get there!" +msgstr "" + +#: ../../install/local.rst:37 +msgid "Advanced users" +msgstr "" + +#: ../../install/local.rst:40 +msgid "Tabbycat is a `Django `_ project, so if you have your own preferred method of running Django projects, you can also do that. Just be aware that we haven't tried it." +msgstr "" + +#: ../../install/local.rst:45 +msgid "Okay, so how do I do it?" +msgstr "" + +#: ../../install/local.rst:47 +msgid "The easiest option is to :ref:`install Tabbycat using Docker `. This method should work across all operating systems and is by far the easiest way to get a local copy running." +msgstr "" + +#: ../../install/local.rst:49 +msgid "If installing using Docker does not work, or if you want to be able to modify Tabbycat's code we also have a number of instructions for manually setting up a copy of Tabbycat. There instructions are here:" +msgstr "" + +#: ../../install/local.rst:51 +msgid ":ref:`install-linux`" +msgstr "" + +#: ../../install/local.rst:52 +msgid ":ref:`install-osx`" +msgstr "" + +#: ../../install/local.rst:53 +msgid ":ref:`install-wsl`" +msgstr "" + +#: ../../install/local.rst:54 +msgid ":ref:`install-windows`" +msgstr "" + +#: ../../install/local.rst:57 +msgid "Advanced uses" +msgstr "" + +#: ../../install/local.rst:60 +msgid "Can others access my local install?" +msgstr "" + +#: ../../install/local.rst:62 +msgid "Local installations can also take advantage of multiple-computer site access, including data entry---it's just takes more work than a Heroku installation to set up." +msgstr "" + +#: ../../install/local.rst:64 +msgid "Since a local installation is just having your computer run a web server, it can serve other computers too. You can make this work even if you don't have internet access: all you need is a router that you can use to connect a few computers together. Then other computers on your local network can access the Tabbycat site hosted on your computer. We did this at Victoria Australs 2012." +msgstr "" + +#: ../../install/local.rst:66 +msgid "We don't provide detailed instructions for this; we leave it for advanced users to set up themselves. As a rough guide:" +msgstr "" + +#: ../../install/local.rst:68 +msgid "You need to pass in your computer's IP address and port to the `runserver` command, for example, if your computer (the one acting as a server) is 196.168.0.2 and you want to run it on port 8000: ``dj runserver 192.168.0.2:8000``" +msgstr "" + +#: ../../install/local.rst:69 +msgid "You need to configure your firewall settings to allow incoming connections on the IP address and port you specified in that command." +msgstr "" + +#: ../../install/local.rst:70 +msgid "Be aware that local installs use the Django development server, whose **security is not tested**. Therefore, it's a good idea to make sure your firewall **only lets in computers on your local network** (or, if you're really paranoid, isolate the network from the internet completely)." +msgstr "" + +#: ../../install/local.rst:73 +msgid "Can I run an internet-accessible website from a local installation?" +msgstr "" + +#: ../../install/local.rst:75 +msgid "Probably not. Even if you disable your firewall, chances are your home router (or university router) will block any connections from the outside world to you. Even if you can though, **you really shouldn't**. The local installation uses the *Django development server*, which is a lightweight server designed for developers. Specifically, Django **does not test the security of its development server** in the way that proper web servers do. That is: It's a security risk to run a local installation as an internet-accessible site. Don't do it. `Install Tabbycat on Heroku `_ instead." +msgstr "" + +#: ../../install/local.rst:77 +msgid "Alternatively, if you have a background in web development, you might choose to install Tabbycat on your own production server. It's a Django project, so any means of supporting Django projects should work fine." +msgstr "" + +#: ../../install/local.rst:79 +msgid "It's safe to run on a small, isolated network (see above) with your firewall correctly configured because you presumably trust everyone you let on the network!" +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/install/osx.po b/docs/locale/bg/LC_MESSAGES/install/osx.po new file mode 100644 index 00000000000..769af073353 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/install/osx.po @@ -0,0 +1,216 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:15\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/osx.po\n" +"X-Crowdin-File-ID: 1321\n" +"Language: bg_BG\n" + +#: ../../install/osx.rst:5 +msgid "Installing Locally on macOS" +msgstr "" + +#: ../../install/osx.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/osx.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/osx.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on macOS, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/osx.rst:15 +msgid "Requisite technical knowledge" +msgstr "" + +#: ../../install/osx.rst:17 +msgid "You need to be familiar with command-line interfaces to get through this comfortably. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest. You just need to be prepared to bear with us. It'll take a while the first time, but it gets easier after that." +msgstr "" + +#: ../../install/osx.rst:19 +msgid "Every line in the instructions that begins with ``$`` is a command that you need to run in a **Terminal**, but without the ``$``: that sign is a convention used in instructions to make it clear that it is a command you need to run." +msgstr "" + +#: ../../install/osx.rst:21 ../../install/osx.rst:42 ../../install/osx.rst:68 +msgid "Advanced users" +msgstr "" + +#: ../../install/osx.rst:24 +msgid "If you wish to use an SQL engine other that PostgreSQL, most of Tabbycat should work, but a few features rely on SQL functions that aren't supported by all engines. To configure Tabbycat to use a different engine, set the ``DATABASES`` `Django setting `_ accordingly." +msgstr "" + +#: ../../install/osx.rst:27 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/osx.rst:29 +msgid "First, you need to install all of the software on which Tabbycat depends, if you don't already have it installed." +msgstr "" + +#: ../../install/osx.rst:32 +msgid "1(a). Python" +msgstr "" + +#: ../../install/osx.rst:33 +msgid "Tabbycat requires Python 3.6 or later. macOS only comes with Python 2.7, so you'll need to install this. You can download the latest version from the `Python website `_." +msgstr "" + +#: ../../install/osx.rst:35 +msgid "The executable will probably be called ``python3``, rather than ``python``. Check::" +msgstr "" + +#: ../../install/osx.rst:40 +msgid "Tabbycat does not support Python 2. You must use Python 3.6 or later." +msgstr "" + +#: ../../install/osx.rst:45 +msgid "These instructions will use the ``venv`` module. If you prefer, you can use `Virtualenv `_ instead." +msgstr "" + +#: ../../install/osx.rst:48 +msgid "1(b). Postgres.app" +msgstr "" + +#: ../../install/osx.rst:50 +msgid "Download `Postgres.app `_, move it to your Applications folder, and open it. This should place an icon in your menu bar, showing that the postgres database is running. Whenever you are running Tabbycat you'll need to have this app running." +msgstr "" + +#: ../../install/osx.rst:52 +msgid "You'll need to use the PostgreSQL command-line tools, so run the command that the Postgres.app suggests in its `installation instructions `_ for adding them to your ``$PATH``. As of February 2018, it was::" +msgstr "" + +#: ../../install/osx.rst:57 +msgid "1(c). Node.js/NPM" +msgstr "" + +#: ../../install/osx.rst:59 +msgid "Download and run the `node.js 8 macOS Installer (.pkg) `_" +msgstr "" + +#: ../../install/osx.rst:62 +msgid "2. Get the source code" +msgstr "" + +#: ../../install/osx.rst:64 +msgid "`Go to the page for our latest release `_." +msgstr "" + +#: ../../install/osx.rst:65 +msgid "Download the zip or tar.gz file." +msgstr "" + +#: ../../install/osx.rst:66 +msgid "Extract all files in it to a folder of your choice." +msgstr "" + +#: ../../install/osx.rst:71 +msgid "If you've used Git before, you might prefer to clone `our GitHub repository`_ instead. Don't forget to check out the |vrelease| tag or the master branch." +msgstr "" + +#: ../../install/osx.rst:73 +msgid "Even better, you might like to fork the repository first, to give yourself a little more freedom to make code changes on the fly (and potentially :ref:`contribute ` them to the project)." +msgstr "" + +#: ../../install/osx.rst:76 +msgid "3. Set up a new database" +msgstr "" + +#: ../../install/osx.rst:78 +msgid "You can skip steps 1--3 if this is not your first installation. Every Tabbycat installation requires its own database, but they can use the same login role if you like." +msgstr "" + +#: ../../install/osx.rst:80 +msgid "Open up a copy of the Terminal app, then copy/paste or type in::" +msgstr "" + +#: ../../install/osx.rst:84 +msgid "Hit enter then quit and reopen the Terminal app." +msgstr "" + +#: ../../install/osx.rst:86 +msgid "Create a new user account with a password, replacing ``myusername`` with whatever name you prefer. If you don't know what username to pick, use ``tabbycat``." +msgstr "" + +#: ../../install/osx.rst:92 +msgid "Create a new database, replacing ``mydatabasename`` with whatever name you prefer, probably the name of the tournament you're running::" +msgstr "" + +#: ../../install/osx.rst:96 +msgid "In terminal type in::" +msgstr "" + +#: ../../install/osx.rst:101 +msgid "4. Install Tabbycat" +msgstr "" + +#: ../../install/osx.rst:102 +msgid "Almost there!" +msgstr "" + +#: ../../install/osx.rst:104 +msgid "Navigate to your Tabbycat directory::" +msgstr "" + +#: ../../install/osx.rst:108 +msgid "Copy **settings/local.example** to **settings/local.py**. Find this part in your new **local.py**, and fill in the blanks as indicated:" +msgstr "" + +#: ../../install/osx.rst:123 +msgid "Optionally, replace the value in this line in the same file with your own time zone, as defined in the `IANA time zone database `_ (*e.g.*, ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``)::" +msgstr "" + +#: ../../install/osx.rst:127 +msgid "Ensure you are in the main Tabbycat directory (not the config folder where **settings_local.py** is and start a new virtual environment. We suggest the name ``venv``, though it can be any name you like::" +msgstr "" + +#: ../../install/osx.rst:131 +msgid "Run the ``activate`` script. This puts you \"into\" the virtual environment::" +msgstr "" + +#: ../../install/osx.rst:135 +msgid "Install Tabbycat's requirements into your virtual environment::" +msgstr "" + +#: ../../install/osx.rst:141 +msgid "Navigate to the **tabbycat** sub folder, initialize the database, compile the assets, and create a user account for yourself::" +msgstr "" + +#: ../../install/osx.rst:149 +msgid "Start Tabbycat!" +msgstr "" + +#: ../../install/osx.rst:155 +msgid "It should show something like this::" +msgstr "" + +#: ../../install/osx.rst:159 +msgid "Open your browser and go to the URL printed above. (In the above example, it's http://127.0.0.1:8000.) It should look something like the screenshot below. If it does, great! You've successfully installed Tabbycat." +msgstr "" + +#: ../../install/osx.rst:164 +msgid "Naturally, your database is currently empty, so proceed to :ref:`importing initial data `." +msgstr "" + +#: ../../install/osx.rst:167 +msgid "Starting up an existing Tabbycat instance" +msgstr "" + +#: ../../install/osx.rst:168 +msgid "To start your Tabbycat instance up again next time you use your computer::" +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/install/windows.po b/docs/locale/bg/LC_MESSAGES/install/windows.po new file mode 100644 index 00000000000..00e3a5af5d2 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/install/windows.po @@ -0,0 +1,317 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:15\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/windows.po\n" +"X-Crowdin-File-ID: 1323\n" +"Language: bg_BG\n" + +#: ../../install/windows.rst:5 +msgid "Installing Locally on Windows" +msgstr "" + +#: ../../install/windows.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/windows.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/windows.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on Windows, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/windows.rst:14 +msgid "If you have Windows 10 and any experience with Linux, we recommend installing it on :ref:`Linux on Windows (WSL) ` instead, which is much easier than the process below." +msgstr "" + +#: ../../install/windows.rst:17 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/windows.rst:19 +msgid "You need to be familiar with command-line interfaces to get through this comfortably. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest. You just need to be prepared to bear with us. It'll take a while the first time, but it gets easier after that." +msgstr "" + +#: ../../install/windows.rst:21 +msgid "In these instructions, we'll use **Windows PowerShell**, a command-line interface that comes with every installation of Windows (since XP). The easiest way to find it (on Windows 7 and later) is to search for it in your Start Menu. Every line in the instructions that begins with ``>`` is a command that you need to run in PowerShell, but without the ``>``: that sign is a convention used in instructions to make it clear that it is a command you need to run." +msgstr "" + +#: ../../install/windows.rst:23 ../../install/windows.rst:81 +#: ../../install/windows.rst:104 +msgid "Advanced users" +msgstr "" + +#: ../../install/windows.rst:26 +msgid "If you wish to use an SQL engine other that PostgreSQL, most of Tabbycat should work, but a few features rely on SQL functions that aren't supported by all engines. To configure Tabbycat to use a different engine, set the ``DATABASES`` `Django setting `_ accordingly." +msgstr "" + +#: ../../install/windows.rst:29 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/windows.rst:31 +msgid "First, you need to install all of the software on which Tabbycat depends, if you don't already have it installed." +msgstr "" + +#: ../../install/windows.rst:36 +msgid "1(a). Python" +msgstr "" + +#: ../../install/windows.rst:37 +msgid "*Python is a popular programming language, and the language in which the core of Tabbycat is coded.*" +msgstr "" + +#: ../../install/windows.rst:39 +msgid "Download and install the latest version of Python 3.6 from the `Python website `_. In the installer, check the box to add Python to your PATH (see box below)." +msgstr "" + +#: ../../install/windows.rst:42 +msgid "Which file should I download?" +msgstr "" + +#: ../../install/windows.rst:44 +msgid "Regardless of if you have 64-bit or 32-bit Windows, choose the \"Windows x86 executable installer\"." +msgstr "" + +#: ../../install/windows.rst:46 +msgid "**Please take note:** Just after you open the installer, **check the \"Add Python 3.6 to PATH\" box**:" +msgstr "" + +#: ../../install/windows.rst:51 +msgid "To check that Python is installed correctly, open Windows PowerShell, type ``python`` and press Enter. It should look something like this. If you installed the 32-bit version, it will say ``32 bit`` instead of ``64 bit``." +msgstr "" + +#: ../../install/windows.rst:55 +msgid "(To exit Python, type ``exit()`` then press Enter.)" +msgstr "" + +#: ../../install/windows.rst:57 +msgid "**If you already have Python**, great! Some things to double-check:" +msgstr "" + +#: ../../install/windows.rst:59 +msgid "You must have at least Python 3.6 (Python 2 is not supported.)" +msgstr "" + +#: ../../install/windows.rst:60 +msgid "Your installation path must not have any spaces in it." +msgstr "" + +#: ../../install/windows.rst:61 +msgid "If that doesn't work, note that the following must be part of your ``PATH`` environment variable: ``C:\\Python36;C:\\Python36\\Scripts`` (or as appropriate for your installation directory). Follow `the instructions here `_ to add this to your path." +msgstr "" + +#: ../../install/windows.rst:66 +msgid "1(b). PostgreSQL" +msgstr "" + +#: ../../install/windows.rst:67 +msgid "*PostgreSQL is a database management system.*" +msgstr "" + +#: ../../install/windows.rst:69 +msgid "Go to the `PostgreSQL downloads page `_, then follow the link through to EnterpriseDB to download and install the latest version of PostgreSQL." +msgstr "" + +#: ../../install/windows.rst:71 +msgid "Once PostgreSQL is installed, the PostgreSQL service will run on your computer whenever you are using it. You might prefer to configure it so that it only runs when you want to run Tabbycat. To do this, open \"Services\" in your Control Panel on Windows, find the PostgreSQL service, and change its startup type to \"Manual\". This will tell it not to start whenever you log in. Then, if you want to run the server (so you can use Tabbycat), you can do so from \"Services\" by selecting the PostgreSQL service and clicking \"Start the service\"." +msgstr "" + +#: ../../install/windows.rst:74 +msgid "1(c). Git" +msgstr "" + +#: ../../install/windows.rst:75 +msgid "*Git is a version control system.*" +msgstr "" + +#: ../../install/windows.rst:77 +msgid "We won't use Git directly, but Node.js (which we install in the next step) requires Git to work. So, install the latest version for Windows from the `Git website `_." +msgstr "" + +#: ../../install/windows.rst:84 +msgid "If you already have `GitHub Desktop `_ installed, you might think that this would be good enough. Unfortunately, it's not---GitHub Desktop installs a portable version of Git. Node.js, on the other hand, requires the ``git`` to be in the ``PATH``, so it can call it directly. The easiest (but not only) way to do this is just to install Git from the link above." +msgstr "" + +#: ../../install/windows.rst:92 +msgid "1(d). Node.js/NPM" +msgstr "" + +#: ../../install/windows.rst:93 +msgid "*Node.js is a JavaScript runtime.*" +msgstr "" + +#: ../../install/windows.rst:95 +msgid "Download and run the node.js 8 Installer (.msi) for either `x64 versions `_ of Windows or `x86 versions `_." +msgstr "" + +#: ../../install/windows.rst:98 +msgid "2. Get the source code" +msgstr "" + +#: ../../install/windows.rst:100 +msgid "`Go to the page for our latest release `_." +msgstr "" + +#: ../../install/windows.rst:101 +msgid "Download the zip file." +msgstr "" + +#: ../../install/windows.rst:102 +msgid "Extract all files in it to a folder of your choice." +msgstr "" + +#: ../../install/windows.rst:107 +msgid "If you've used Git before, you might prefer to clone `our GitHub repository`_ instead. Don't forget to check out the |vrelease| tag or the master branch." +msgstr "" + +#: ../../install/windows.rst:109 +msgid "Even better, you might like to fork the repository first, to give yourself a little more freedom to make code changes on the fly (and potentially :ref:`contribute ` them to the project)." +msgstr "" + +#: ../../install/windows.rst:114 +msgid "3. Set up a new database" +msgstr "" + +#: ../../install/windows.rst:116 +msgid "You can skip steps 2 and 3 if this is not your first installation. Every Tabbycat installation requires its own database, but they can use the same login role if you like." +msgstr "" + +#: ../../install/windows.rst:118 +msgid "Open the **pgAdmin** tool, which you installed as part of installing PostgreSQL. In the object browser on the left, double-click the server marked \"(localhost:5432)\". Log in using the password you set during installation." +msgstr "" + +#: ../../install/windows.rst:120 +msgid "Right-click Login Roles, and click \"New Login Role…\"" +msgstr "" + +#: ../../install/windows.rst:124 +msgid "Fill in the New Login Role box as follows (everything not listed below can be left as-is):" +msgstr "" + +#: ../../install/windows.rst:126 +msgid "In the **Properties** tab, in **Role Name**, choose a user account name. (If you don't know what to pick, we suggest \"tabbycat\".)" +msgstr "" + +#: ../../install/windows.rst:127 +msgid "In the **Definition** tab, choose a **Password** and type it in **Password (again)**." +msgstr "" + +#: ../../install/windows.rst:129 +msgid "Then click OK. (Remember this user name and password, you'll need it later.)" +msgstr "" + +#: ../../install/windows.rst:131 +msgid "Right-click Databases, and click \"New Database…\"" +msgstr "" + +#: ../../install/windows.rst:135 +msgid "Fill in the New Database box as follows (everything not listed below can be left as-is):" +msgstr "" + +#: ../../install/windows.rst:137 +msgid "In the **Properties** tab, in **Name**, choose a database name (with no spaces in it)." +msgstr "" + +#: ../../install/windows.rst:138 +msgid "In the **Properties** tab, in **Owner**, type the name of the login role you just created." +msgstr "" + +#: ../../install/windows.rst:140 +msgid "Then click OK. (Remember the database name, you'll need it later.)" +msgstr "" + +#: ../../install/windows.rst:143 +msgid "4. Install Tabbycat" +msgstr "" + +#: ../../install/windows.rst:145 +msgid "Almost there!" +msgstr "" + +#: ../../install/windows.rst:147 +msgid "Open a Windows PowerShell. Navigate to the folder where you cloned/extracted Tabbycat. For example, if you installed it in ``C:\\Users\\myusername\\Documents\\GitHub\\tabbycat``, then run::" +msgstr "" + +#: ../../install/windows.rst:151 +msgid "Make a copy of **settings\\\\local.example** and rename it to **settings\\\\local.py**. Open your new **local.py** file. Find this part, and fill in the blanks (the empty quotation marks) as indicated:" +msgstr "" + +#: ../../install/windows.rst:166 +msgid "Optionally, replace the value in this line in the same file with your own time zone, as defined in the `IANA time zone database `_ (*e.g.*, ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``)::" +msgstr "" + +#: ../../install/windows.rst:170 +msgid "Start a new virtual environment. We suggest the name `venv`, though it can be any name you like::" +msgstr "" + +#: ../../install/windows.rst:174 +msgid "Run the `Activate.ps1` script. This puts you \"into\" the virtual environment::" +msgstr "" + +#: ../../install/windows.rst:178 +msgid "If you get an error message saying that the script isn't digitally signed, open a PowerShell with administrator privileges by right-clicking PowerShell in the Start meny and clicking \"Run as administrator\". Then run this command::" +msgstr "" + +#: ../../install/windows.rst:182 +msgid "Read the warning message, then type ``y`` to confirm. By default, the execution policy on Windows is ``Restricted``, which does not permit scripts like ``activate`` to be run. Changing it to ``RemoteSigned`` relaxes it to allow local scripts to be run without checking the signature." +msgstr "" + +#: ../../install/windows.rst:184 +msgid "Install Tabbycat's requirements." +msgstr "" + +#: ../../install/windows.rst:186 +msgid "If you installed **32-bit Python**::" +msgstr "" + +#: ../../install/windows.rst:192 +msgid "You might be wondering: I thought I already installed the requirements. Why am I installing more? And the answer is: Before, you were installing the requirements to create a Python virtual environment for Tabbycat to live in. Now, you're *in* the virtual environment, and you're installing everything required for *Tabbycat* to operate." +msgstr "" + +#: ../../install/windows.rst:194 +msgid "Initialize the database and create a user account for yourself::" +msgstr "" + +#: ../../install/windows.rst:202 +msgid "Start Tabbycat!" +msgstr "" + +#: ../../install/windows.rst:208 +msgid "It should show something like this::" +msgstr "" + +#: ../../install/windows.rst:212 +msgid "Open your browser and go to the URL printed above. (In the above example, it's http://127.0.0.1:8000/). It should look something like this:" +msgstr "" + +#: ../../install/windows.rst:216 +msgid "If it does, great! You've successfully installed Tabbycat." +msgstr "" + +#: ../../install/windows.rst:218 +msgid "Naturally, your database is currently empty, so proceed to :ref:`importing initial data `." +msgstr "" + +#: ../../install/windows.rst:221 +msgid "Starting up an existing Tabbycat instance" +msgstr "" + +#: ../../install/windows.rst:223 +msgid "To start your Tabbycat instance up again next time you use your computer, open a PowerShell and::" +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/install/wsl.po b/docs/locale/bg/LC_MESSAGES/install/wsl.po new file mode 100644 index 00000000000..c51e0d1f389 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/install/wsl.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:15\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/wsl.po\n" +"X-Crowdin-File-ID: 1325\n" +"Language: bg_BG\n" + +#: ../../install/wsl.rst:5 +msgid "Installing Locally on Linux on Windows (WSL)" +msgstr "" + +#: ../../install/wsl.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/wsl.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/wsl.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on Windows, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/wsl.rst:14 +msgid "Windows Subsystem for Linux is only available on Windows 10. If you have an older version of Windows, :ref:`install Tabbycat locally on Windows ` instead." +msgstr "" + +#: ../../install/wsl.rst:18 +msgid "Windows Subsystem for Linux (WSL) was taken out of beta in the `Windows 10 Fall Creators Update `_, which was released in October 2017. On Windows 10 computers, we now recommend this local installation method over :ref:`installing it directly on Windows `." +msgstr "" + +#: ../../install/wsl.rst:21 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/wsl.rst:23 +msgid "It will help a lot if you have some experience with Linux, but mainly you need to be familiar with command-line interfaces, and you should be willing to install and work with the `Windows Subsystem for Linux `_. You might need to be prepared to familiarise yourself with aspects of WSL not covered in these instructions. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest." +msgstr "" + +#: ../../install/wsl.rst:27 +msgid "A. Install Ubuntu on Windows" +msgstr "" + +#: ../../install/wsl.rst:29 +msgid "*If you already have a Linux distribution installed on your PC, skip to* :ref:`part B `." +msgstr "" + +#: ../../install/wsl.rst:31 +msgid "First, `check that you have the Fall Creators Update (build 1709) `_. If you don't, update Windows." +msgstr "" + +#: ../../install/wsl.rst:33 +msgid "Then, install the Windows Subsystem for Linux. For most people, this involves the following:" +msgstr "" + +#: ../../install/wsl.rst:35 +msgid "Enable the Windows Subsystem for Linux feature, by finding **Turn Windows features on or off** on the Start Menu, then checking the box for **Windows Subsystem for Linux** and clicking **OK**. You'll be prompted to restart your computer to make the changes take effect." +msgstr "" + +#: ../../install/wsl.rst:39 +msgid "Install Ubuntu by finding it on the Microsoft Store. For your convenience, `here's a direct link to Ubuntu on the Microsoft Store `_." +msgstr "" + +#: ../../install/wsl.rst:41 +msgid "Launch Ubuntu and follow the instructions. You'll be prompted to create a user account for your Ubuntu system." +msgstr "" + +#: ../../install/wsl.rst:43 +msgid "Some more detailed instructions, including some troubleshooting, are `available on Microsoft's website `_." +msgstr "" + +#: ../../install/wsl.rst:45 +msgid "Advanced users" +msgstr "" + +#: ../../install/wsl.rst:48 +msgid "You can, of course, use any Linux distribution that Windows supports. We just suggest Ubuntu because it's the most well-known (and the one that we use)." +msgstr "" + +#: ../../install/wsl.rst:53 +msgid "B. Install Tabbycat" +msgstr "" + +#: ../../install/wsl.rst:55 +msgid "You now have a Linux subsystem running on your computer, so head over to the :ref:`instructions to install Tabbycat locally on Linux ` and follow those (in full)." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/use/finishing-a-tournament.po b/docs/locale/bg/LC_MESSAGES/use/finishing-a-tournament.po new file mode 100644 index 00000000000..62d359a1e02 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/use/finishing-a-tournament.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:15\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/finishing-a-tournament.po\n" +"X-Crowdin-File-ID: 1327\n" +"Language: bg_BG\n" + +#: ../../use/finishing-a-tournament.rst:5 +msgid "Finishing a Tournament" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:7 +msgid "This page outlines some final steps to take after the conclusion of outrounds." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:10 +msgid "Tab Release" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:12 +msgid "Tabs can be released using the *Tab released* option under **Setup** > **Configuration**. Tabbycat offers the following system tabs:" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:14 +msgid "Team Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:15 +msgid "Speakers Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:16 +msgid "Replies Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:17 +msgid "Motions Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:19 +msgid "You can configure the team, speakers and replies tab to display only a certain number of speakers, *e.g.*, to show only a \"Top 10 Speakers\" tab." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:21 +msgid "If you defined any speaker categories (for example, Novice, ESL or EFL), a tab for each category marked \"public\" can also be released using the **Release speaker category tabs to public**. You can similarly limit each of these tabs to display just the top few speakers, in the definition of the speaker categories. The speaker categories not marked public are *not* released by this option." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:23 +msgid "You can also redact individual speaker's identifying details (name, team, and institution) from the public individual tabs. You can do so by going into the **Edit Database** area, going to *Participants > Speakers*, finding the speaker and clicking the **Anonymous** box (and saving)." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:25 +msgid "Public tab pages are cached for performance reasons. This means that any changes that affect a tab page (say redacting a speaker or changing a speaker score) may not show up on the public site for up to an hour." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:28 +msgid "Wrapping Up" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:30 +msgid "You probably want to turn off the *Public ballots*, *Public feedback*, *Feedback progress*, and *Public draw* features under **Configuration** at this stage as they no longer have any use." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:32 +msgid "You also want to go into the **Edit Database** area, find the tournament and hit \"release all\" so that the results for the final round can be released." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/use/importing-data.po b/docs/locale/bg/LC_MESSAGES/use/importing-data.po new file mode 100644 index 00000000000..eaaf7c0d418 --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/use/importing-data.po @@ -0,0 +1,236 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:15\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/importing-data.po\n" +"X-Crowdin-File-ID: 1329\n" +"Language: bg_BG\n" + +#: ../../use/importing-data.rst:5 +msgid "Importing Initial Data" +msgstr "" + +#: ../../use/importing-data.rst:7 +msgid "Once you've got Tabbycat installed, the next step is to import data for the tournament: that is, import details of teams, speakers, adjudicators and rounds. There are a few ways to do this, each with their advantages and disadvantages." +msgstr "" + +#: ../../use/importing-data.rst:9 +msgid "To help you decide which to choose, here's a summary:" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Method" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Best for" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Drawcard" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Drawback" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "**Demonstration data**" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "Trying out Tabbycat" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "Loads sample data in one click" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "Not for use with real tournaments" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "**Simple importer**" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "Small and medium-sized tournaments" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "Easy to use" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "Only deals with basic data" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "**Edit database**" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "Adding data not handled by the simple importer or editing existing data" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "Can handle all types of information" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "Adding large amounts of data is time consuming" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "``importtournament`` **command**" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "Large tournaments" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "Easier to repeat, can handle most formats of information" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "Requires basic knowledge of how to use a command line interface" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "**Developing your own importer**" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "Large tournaments with custom needs" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "Easier to repeat, will take information in whatever format it is already in" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "Requires background in Python and and learning about the importer classes" +msgstr "" + +#: ../../use/importing-data.rst:41 +msgid "Demonstration data" +msgstr "" + +#: ../../use/importing-data.rst:42 +msgid "If you're just learning or experimenting with Tabbycat, there are two demonstration datasets available, each with a sample set of teams, adjudicators, *etc.*, so that you can immediately start running rounds. Just be aware that these probably won't relate to anyone at your real-life tournament." +msgstr "" + +#: ../../use/importing-data.rst:44 +msgid "To load a demonstration dataset, click **New Tournament** link on the home page (once logged in as admin). You'll see a page titled \"Create New Tournament\". Scroll to the bottom of this page and click on one of the links at the bottom." +msgstr "" + +#: ../../use/importing-data.rst:47 +msgid "Simple importer" +msgstr "" + +#: ../../use/importing-data.rst:48 +msgid "The simple importer is the easiest way to get a tournament going, and we recommend it for small- and medium-sized tournaments. It allows you to add institutions, teams, adjudicators, venues, venue categories and venue constraints. (If you need to add anything else, use the :ref:`Edit Database area ` instead.)" +msgstr "" + +#: ../../use/importing-data.rst:50 +msgid "To get started, create a new tournament using the **New Tournament** link on the home page (once logged in as admin). It'll ask you for a few basic pieces of information." +msgstr "" + +#: ../../use/importing-data.rst:54 +msgid "Then, once you're in your tournament, click **Setup** in the left-hand menu, then **Import Data**, to open the simple importer." +msgstr "" + +#: ../../use/importing-data.rst:58 +msgid "You first need to add institutions. Once institutions are added, you can then add teams and adjudicators in the relevant sections. Each of these is a two-step process:" +msgstr "" + +#: ../../use/importing-data.rst:60 +msgid "For **institutions** and **venues**, it will first ask you to copy-paste a list of names and properties in a comma-separated table format. The second step is to confirm individual fiels." +msgstr "" + +#: ../../use/importing-data.rst:61 +msgid "For **teams** and **adjudicators**, it will first ask you how many teams/adjudicators to add for each institution (or who lack an institutional affiliation). The second step is to fill in their details, for example, names." +msgstr "" + +#: ../../use/importing-data.rst:69 +msgid "Finally, if you would like to use venue categories and/or :ref:`venue constraints `, you can do so using the two last sections of the simple importer." +msgstr "" + +#: ../../use/importing-data.rst:71 +msgid "If copying and pasting from a spreadsheet, an easy way to make a comma-separated table is to save a spreadsheet with the relevant information as a \\*.csv file, then open this file in a plain text editor (such as Notepad or TextEdit), and copying it from there." +msgstr "" + +#: ../../use/importing-data.rst:76 +msgid "Editing the database" +msgstr "" + +#: ../../use/importing-data.rst:77 +msgid "Sometimes, the simple importer just isn't enough---whether because you need more customization than the simple importer handles (*e.g.* adjudicator feedback questions), or because some participants changed their details after you imported the inital data. In this case, the easiest thing to do is to edit the database via the Django administrative interface (under Setup > Edit Database)." +msgstr "" + +#: ../../use/importing-data.rst:79 +msgid "The general pattern goes like this: Go to **Setup > Edit Database**, find the type of object you wish to add/change, and click \"Add\" or \"Change\". Then, fill in what you need to and save the object." +msgstr "" + +#: ../../use/importing-data.rst:81 +msgid "The Edit Database area is very powerful, and naturally if you mess things up, you can insert potentially catastrophic inconsistencies into the database. For participant information this is hard to do, but it's worth keeping in mind." +msgstr "" + +#: ../../use/importing-data.rst:86 +msgid "The ``importtournament`` command on local installations" +msgstr "" + +#: ../../use/importing-data.rst:88 +msgid "We've written a management command called ``importtournament`` to help automate the tournament set-up. The script, however, is neither foolproof nor comprehensive, so you might find you need to modify things slightly if your tournament structure is different from ours. Be prepared to try this a few times to get it to work. Nonetheless, this is probably the fastest way to set up a tournament." +msgstr "" + +#: ../../use/importing-data.rst:90 +msgid "Copy and rename the ``data/demo`` folder" +msgstr "" + +#: ../../use/importing-data.rst:91 +msgid "See the CSV files in the new folder, and add/replace the data as per your tournament. Note that the institutions (*i.e.* first column) in the ``speakers.csv`` and ``adjudicators.csv`` files must match the institutions in the second column of the ``institutions.csv`` file. And that all CSV files must end with a blank line." +msgstr "" + +#: ../../use/importing-data.rst:92 +msgid "Use this command, replacing ``YOUR_DATA_DIR`` with your new folder's name. (Square brackets indicate optional arguments; if you use them, omit the square brackets. All of them relate to the name of your tournament.)" +msgstr "" + +#: ../../use/importing-data.rst:98 +msgid "This script has a number of options. They're worth taking a look at before you run the script. For details, see::" +msgstr "" + +#: ../../use/importing-data.rst:102 +msgid "Assuming the command completes successfully without errors, you should double check the data in the Django interface, as described above in :ref:`import-edit-database`. In particular you should check that the *Rounds* have the correct draw types and that silent rounds have been marked correctly." +msgstr "" + +#: ../../use/importing-data.rst:105 +msgid "``importtournament`` on Heroku installs" +msgstr "" + +#: ../../use/importing-data.rst:107 +msgid "Instructions for using the ``importtournament`` command on Heroku installations are in steps 4 and 5 of :ref:`install-heroku`. The recommended procedure is first to import the tournament into a local installation, :ref:`as described above `, and then to push the local database to Heroku using the ``heroku pg:push`` command." +msgstr "" + +#: ../../use/importing-data.rst:110 +msgid "Developing your own importer" +msgstr "" + +#: ../../use/importing-data.rst:112 +msgid "If our suggested file formats cause you headaches, it might be easier to write your own importer. We have a generic importer framework that should make this easier, so for some tournaments it might (very conceivably) be faster to write your own importer to conform to your data, than it is to make your data conform to our importer. You need a background in Python in order to do this. For more details, see :ref:`tournament-data-importers`." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/use/running-a-tournament.po b/docs/locale/bg/LC_MESSAGES/use/running-a-tournament.po new file mode 100644 index 00000000000..616091590ad --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/use/running-a-tournament.po @@ -0,0 +1,196 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:15\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/running-a-tournament.po\n" +"X-Crowdin-File-ID: 1331\n" +"Language: bg_BG\n" + +#: ../../use/running-a-tournament.rst:5 +msgid "Running a Tournament" +msgstr "" + +#: ../../use/running-a-tournament.rst:7 +msgid "Once you've finished the steps in :ref:`starting-a-tournament`, you're ready to go! This page outlines what you would do for each round during the tournament. After the tournament, proceed to :ref:`finishing-a-tournament`." +msgstr "" + +#: ../../use/running-a-tournament.rst:9 +msgid "This is all done from the admin area (*i.e.*, by the tab director or adjudication core member). In the admin area, tournament-wide pages (feedback, standings, and break) are at the top of the left-hand menu, while round-specific pages (availability, draw, display, motions, and results) are in dropdown's organised by each round's abbreviation." +msgstr "" + +#: ../../use/running-a-tournament.rst:11 +msgid "The basic workflow for each round is:" +msgstr "" + +#: ../../use/running-a-tournament.rst:13 +msgid ":ref:`Mark the teams, adjudicators, and venues present as available `" +msgstr "" + +#: ../../use/running-a-tournament.rst:14 +msgid ":ref:`Generate the draw ` and allocate the adjudicators" +msgstr "" + +#: ../../use/running-a-tournament.rst:15 +msgid ":ref:`Show/release the draw `" +msgstr "" + +#: ../../use/running-a-tournament.rst:16 +msgid ":ref:`Release/enter ` the motions" +msgstr "" + +#: ../../use/running-a-tournament.rst:17 +msgid "Have the debates" +msgstr "" + +#: ../../use/running-a-tournament.rst:18 +msgid ":ref:`Enter results `" +msgstr "" + +#: ../../use/running-a-tournament.rst:19 +msgid ":ref:`Advance to the next round `" +msgstr "" + +#: ../../use/running-a-tournament.rst:24 +msgid "Availability" +msgstr "" + +#: ../../use/running-a-tournament.rst:26 +msgid "**Set availability.** For each round, you need to set the venue, team and adjudicator availability. If any of those are not marked as available they will not be used within the draw; so this feature is mostly useful for when adjudicators or venues are only available for certain rounds." +msgstr "" + +#: ../../use/running-a-tournament.rst:28 +msgid "To do this, click the round in the menu, then click **Check-Ins**. Here you can then go to the availability pages for venue, teams, and adjudicators, or check in everything at once. When you've set everything appropriately use the **Generate Draw** button in the top right to advance." +msgstr "" + +#: ../../use/running-a-tournament.rst:34 +msgid "You can set availabilities in advance of the current round — ie if you know the venue/adjudicator schedules their availabilities can be set ahead of time." +msgstr "" + +#: ../../use/running-a-tournament.rst:37 +msgid "Generating the draw" +msgstr "" + +#: ../../use/running-a-tournament.rst:39 +msgid "**Confirm the draft draw**. After advancing from availability section you will first be shown a draft draw that details how the draw was formulated, pointing out pull-ups and conflict swaps and the like." +msgstr "" + +#: ../../use/running-a-tournament.rst:43 +msgid "The draft draw is for you to double-check. While there are some basic tests on the draw algorithm, it never hurts to sanity-check it again." +msgstr "" + +#: ../../use/running-a-tournament.rst:45 +msgid "If you *do* find something wrong with a draft draw, you can edit the match-ups, but please also let us know what the problem was! You can find our contact details in the :ref:`authors` section." +msgstr "" + +#: ../../use/running-a-tournament.rst:47 +msgid "Once on the confirmed draw page you can click **Edit Adjudicators**." +msgstr "" + +#: ../../use/running-a-tournament.rst:51 +msgid "**Allocate the adjudicators**. Changes here will auto-save; feel free to return to the **Draw** when needed. See :ref:`adjudicator allocation ` for more details about the allocation process." +msgstr "" + +#: ../../use/running-a-tournament.rst:55 +msgid "If you are using venue constraints the **Draw** page may prompt you to Auto Allocate the venues used to satisfy those constraints; see :ref:`venue-constraints ` for more details. Regardless of whether you are using venue constraints or not you can change the Venues per-debate in the **Edit Venues** area." +msgstr "" + +#: ../../use/running-a-tournament.rst:60 +msgid "Releasing the draw" +msgstr "" + +#: ../../use/running-a-tournament.rst:62 +msgid "Once you're happy with your adjudicator allocation, you're ready to start the round." +msgstr "" + +#: ../../use/running-a-tournament.rst:64 +msgid "**Release to general assembly.** From the *Display* page for that round, go to **Show by Venue** or **Show by Team** (whichever you prefer). Then put it up on the projector. There are automatic scroll buttons and buttons for changing text sizing." +msgstr "" + +#: ../../use/running-a-tournament.rst:68 +msgid "**Release to public.** If you're using the public draw function (where the draw is posted publicly to your Tabbycat website) use the **Release to Public** button to allow the page to display." +msgstr "" + +#: ../../use/running-a-tournament.rst:72 +msgid "To avoid the site from being overloaded by anxious refreshers, we recommend that large tournaments not release the draw to the public until after it's been seen by general assembly. That said, note that due to caching there can be a delay of up to 1 minute between when a draw is released and when it first shows up on the public site." +msgstr "" + +#: ../../use/running-a-tournament.rst:73 +msgid "Tabbycat can be set to send emails once the draw is released to adjudicators informing them of their assignments for convenience." +msgstr "" + +#: ../../use/running-a-tournament.rst:78 +msgid "Entering and Releasing Motions" +msgstr "" + +#: ../../use/running-a-tournament.rst:80 +msgid "Tabbycat is agnostic as to whether you enter motions into Tabbycat before or after they are shown publicly. However, they must be entered *at some point* before ballots are entered." +msgstr "" + +#: ../../use/running-a-tournament.rst:82 +msgid "**Enter the motion text.** Either before or after their public release motions can be entered in the **Motions** section for that round." +msgstr "" + +#: ../../use/running-a-tournament.rst:84 +msgid "**Release to general assembly.** If you are entering motions *before* they are publicly revealed note that there is a *Display Motions* button in the **Display** area that allows you to do a Power Point style motion release." +msgstr "" + +#: ../../use/running-a-tournament.rst:86 +msgid "**Release to public.** As with draws, if you have the *enable public view of motions* setting configured your Tabbycat website will display a running list of motions from the tournament. When this is on, using the **Release Motions to Public** button on the **Motions** page will mark the current set of motions as able to be displayed on this page." +msgstr "" + +#: ../../use/running-a-tournament.rst:91 +msgid "Entering Results" +msgstr "" + +#: ../../use/running-a-tournament.rst:93 +msgid "Enter debate results and feedback as they come in (and/or allow online entry of results and feedback)." +msgstr "" + +#: ../../use/running-a-tournament.rst:95 +msgid "Both results and feedback entered in the tab room or online need to be confirmed before the results are counted. To confirm a debate ballot and the debate as a whole, the confirmed checkbox under *Ballot Status* should be ticket in addition to the *Debate Status* being set to Confirmed." +msgstr "" + +#: ../../use/running-a-tournament.rst:97 +msgid "Note that you can track data entry progress from the **Overview** page for the tournament." +msgstr "" + +#: ../../use/running-a-tournament.rst:99 +msgid "See :ref:`data-entry` for more details about the data entry process." +msgstr "" + +#: ../../use/running-a-tournament.rst:101 +msgid "We strongly recommend entering all data using the assistant area, not the admin area. This is because the admin area (intentionally) does not enforce the data confirmation procedure." +msgstr "" + +#: ../../use/running-a-tournament.rst:106 +msgid "Advancing to the next round" +msgstr "" + +#: ../../use/running-a-tournament.rst:108 +msgid "Once you've got all the results entered and confirmed, you're ready to progress to the next round. This can be done by going to the **Results** area, and then using the **Advance to Next Round** button." +msgstr "" + +#: ../../use/running-a-tournament.rst:112 +msgid "When you advance to the next round, if you've enabled public results, the results for the current round (which is now the previous round) will be released to the public **unless** the round is marked as \"silent\" in the database. So if you're careful about when results should be released, don't change the current round until you're ready to release those results." +msgstr "" + +#: ../../use/running-a-tournament.rst:114 +msgid "There is a design assumption that you will always want to release results for non-silent rounds before you start working on the draw for the next round. If this isn't true for you, please get in touch with us so that we know. The workaround is to make all rounds silent, then unsilent them when you're ready to release results." +msgstr "" + +#: ../../use/running-a-tournament.rst:116 +msgid "Emails can be sent to speakers informing them of their team's win/loss/points record before advancing rounds. This is independent from whether the whole round's results are released to the public." +msgstr "" + diff --git a/docs/locale/bg/LC_MESSAGES/use/starting-a-tournament.po b/docs/locale/bg/LC_MESSAGES/use/starting-a-tournament.po new file mode 100644 index 00000000000..d304e61c76b --- /dev/null +++ b/docs/locale/bg/LC_MESSAGES/use/starting-a-tournament.po @@ -0,0 +1,196 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-31 10:15\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/starting-a-tournament.po\n" +"X-Crowdin-File-ID: 1333\n" +"Language: bg_BG\n" + +#: ../../use/starting-a-tournament.rst:5 +msgid "Starting a Tournament" +msgstr "" + +#: ../../use/starting-a-tournament.rst:7 +msgid "This page outlines a few things you should do at the start of a tournament, after you've :ref:`imported the initial data `. Once you've done these, proceed to :ref:`running a tournament `." +msgstr "" + +#: ../../use/starting-a-tournament.rst:9 +msgid "Tabbycat is developed for — and tested on — modern web browsers. If you are using **Internet Explorer versions 8, 7, or 6** the interface may look odd or not function properly. Switch to a newer browser if possible." +msgstr "" + +#: ../../use/starting-a-tournament.rst:13 +msgid "Tournament configuration" +msgstr "" + +#: ../../use/starting-a-tournament.rst:15 +msgid "After importing all your data you can log into the site as an administrator by loading up the homepage and then using the **Login** button in the lower-right. From there you should go to the administration section of your tournament, and then go to the tournament configuration page by clicking **Setup** then **Configuration** in the menu." +msgstr "" + +#: ../../use/starting-a-tournament.rst:17 +msgid "Here you can adjust the debate rules and interface options to your liking then hit **Save** when finished. We also offer a number of presets that apply particular rule sets (such as the Australs rules) or feature sets (such as displaying information normally released during briefs on the website)." +msgstr "" + +#: ../../use/starting-a-tournament.rst:20 +msgid "Special data types and options" +msgstr "" + +#: ../../use/starting-a-tournament.rst:22 +msgid "There are a few optional fields that are not covered in the initial data templates, in the visual importer, or that may only be relevant in particular scenarios. It's worth going over these quickly to see if they are needed for your tournament. You can view and edit these fields in the **Edit Database** area (link is in the menu under **Setup**)." +msgstr "" + +#: ../../use/starting-a-tournament.rst:25 +msgid "Adjudicator Feedback > Adj Feedback Questions" +msgstr "" + +#: ../../use/starting-a-tournament.rst:25 +msgid "As described in :ref:`adjudicator-feedback`, the types of questions that can be posed for adjudicator feedback are able to be heavily customised. If you are customising your feedback form it should be done here, and before the tournament starts." +msgstr "" + +#: ../../use/starting-a-tournament.rst:30 +msgid "Authentication and Authorisation > Users" +msgstr "" + +#: ../../use/starting-a-tournament.rst:28 +msgid "Here you can add new admin users (those with full access) as well as new assistant users those (who can only do common data-entry tasks but not edit or view the full tab interface). See :ref:`user-accounts` for information on how to do this." +msgstr "" + +#: ../../use/starting-a-tournament.rst:30 +msgid "The people you're adding accounts for should be physically present when you do this, so that they can enter their password." +msgstr "" + +#: ../../use/starting-a-tournament.rst:33 +msgid "Participants > Regions" +msgstr "" + +#: ../../use/starting-a-tournament.rst:33 +msgid "Optionally, each institution may belong to a *Region*. An institution's region is used within the adjudicator allocation process to visually identify teams and adjudicators for the purposes of highlighting diversity issues. These have traditionally been used for geographic regions (such as Oceania), although could be repurposed as arbitrary markers of information — for example they could be used to denote teams from a particular State, institutional size, or circuit." +msgstr "" + +#: ../../use/starting-a-tournament.rst:41 +msgid "Participants > Adjudicators" +msgstr "" + +#: ../../use/starting-a-tournament.rst:36 +msgid "An adjudicators *Base Score* represents their relative ability to judge important rooms, where adjudicators with higher numbers will, relative to the other adjudicators, be placed in better roles (ie as Chairs) and in the rooms you deem most important in each round. If you are running a small tournament, and plan to do your allocations manually, you can set everyone's number to the same amount." +msgstr "" + +#: ../../use/starting-a-tournament.rst:37 +msgid "For larger tournaments, particularly those that collect feedback, see the :ref:`adjudicator-feedback` section for more information on how base scores and other variables influence the automated allocation process." +msgstr "" + +#: ../../use/starting-a-tournament.rst:38 +msgid "Regardless of how you score the adjs, if you have changed the minimimum chairing score in settings, you'll want to make sure there are enough adjudicators that meet this minimum threshold or the automated allocator may not function effectively." +msgstr "" + +#: ../../use/starting-a-tournament.rst:39 +msgid "All types of conflicts are assigned to the relevant adjudicator. Adjudicator's can be conflicted against particular teams, particular institutions, and other adjudicators. Each of these is a located in a tab at the top of the page." +msgstr "" + +#: ../../use/starting-a-tournament.rst:40 +msgid "Each adjudicator's gender is optional and is not displayed publicly; it is only shown in the adjudicator allocation interface" +msgstr "" + +#: ../../use/starting-a-tournament.rst:41 +msgid "Each adjudicator's pronoun is optional, and is only displayed if you use tabbycat to print the ballots and feedback sheets for each round." +msgstr "" + +#: ../../use/starting-a-tournament.rst:48 +msgid "Participants > Teams" +msgstr "" + +#: ../../use/starting-a-tournament.rst:44 +msgid "Note the distinction here between full name and short name. The latter is used on pages where space is tight, such as the draw displays or the adjudicator allocation interface." +msgstr "" + +#: ../../use/starting-a-tournament.rst:45 +msgid "Note that \"Uses institutional prefix\" option. With this option on, a team from the 'MUDS' insttution named '1' or 'Gold' would be displayed as 'MUDS 1' or 'MUDS Gold'." +msgstr "" + +#: ../../use/starting-a-tournament.rst:46 +msgid "At present, setting a team's type to Bye, Swing, or Composite only affects very particular circumstances, and should be considered unnecessary." +msgstr "" + +#: ../../use/starting-a-tournament.rst:47 +msgid "If you do have composite teams, and wish to have them be conflicted by adjudicators from each respective instutution, you'll need to add a new team conflict to each adjudicator from each institution." +msgstr "" + +#: ../../use/starting-a-tournament.rst:48 +msgid "If you do have swing teams, or teams that are otherwise ineligible for breaking, this is typically handled through the breaks interface in the main site" +msgstr "" + +#: ../../use/starting-a-tournament.rst:52 +msgid "Participants > Speakers" +msgstr "" + +#: ../../use/starting-a-tournament.rst:51 +msgid "Each speaker's gender is optional and is not displayed publicly; it is only shown in the adjudicator allocation interface" +msgstr "" + +#: ../../use/starting-a-tournament.rst:52 +msgid "Each speaker's pronoun is optional, and is only displayed if you use tabbycat to print the ballots and feedback sheets for each round." +msgstr "" + +#: ../../use/starting-a-tournament.rst:55 +msgid "Tournaments > Divisions" +msgstr "" + +#: ../../use/starting-a-tournament.rst:55 +msgid "At the moment divisions are only useful for running tournaments that use round-robin style draws. Here, each division represents a draw pool within a round. Division support here is under development and not tested in many scenarios." +msgstr "" + +#: ../../use/starting-a-tournament.rst:58 +msgid "Tournaments > Tournaments" +msgstr "" + +#: ../../use/starting-a-tournament.rst:58 +msgid "Note that tournaments can have a welcome message (useful for displaying maps and other information on the homepage)." +msgstr "" + +#: ../../use/starting-a-tournament.rst:61 +msgid "Venues > Venues" +msgstr "" + +#: ../../use/starting-a-tournament.rst:61 +msgid "A venue's priority determines its priority in being allocated. If there are 20 debates, and 30 rooms, the 20 rooms with the highest priorities will be chosen. Furthermore, if particular debates are marked as important during the draw process, those debates will receive the rooms with the highest priorities. In this way you can give close rooms to members of the adj core, or give larger rooms to debates that will draw a large audience." +msgstr "" + +#: ../../use/starting-a-tournament.rst:64 +msgid "Venues > Venue Categories" +msgstr "" + +#: ../../use/starting-a-tournament.rst:64 +msgid "Venue categories are not needed for most kinds of tournaments. Their purpose is to classify particular venues, such as venues all within one building or venues that are accessible. Once assigned these categories can display in the venue's name — ie \"Red 01.01\" or be used to assign Venue Constraints that match particular teams, institutions, or adjudicators to particular types of venues." +msgstr "" + +#: ../../use/starting-a-tournament.rst:67 +msgid "Information for the briefing" +msgstr "" + +#: ../../use/starting-a-tournament.rst:69 +msgid "If you're using the online submissions feature, some things you should probably mention in the briefing:" +msgstr "" + +#: ../../use/starting-a-tournament.rst:71 +msgid "Adjudicators must fill out ballots completely, including motions and venues—they are entered into the system." +msgstr "" + +#: ../../use/starting-a-tournament.rst:72 +msgid "There is a static URL for each person's ballots and feedback forms. It can be bookmarked, or the page can refreshed after each round." +msgstr "" + +#: ../../use/starting-a-tournament.rst:73 +msgid "If people submit a result or feedback online, they should indicate that they have done so on the paper copy of their ballot." +msgstr "" + diff --git a/tabbycat/actionlog/locale/bg/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..3aced27b6ba --- /dev/null +++ b/tabbycat/actionlog/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,323 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 920\n" + +#: actionlog/apps.py +msgid "Action Log" +msgstr "Регистър на действия" + +#: actionlog/models.py +msgid "Discarded ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Checked in ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Created ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Edited ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Confirmed ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Submitted ballot set from the public form" +msgstr "" + +#: actionlog/models.py +msgid "Submitted feedback from the public form" +msgstr "Предадена обратна връзка от публичния формуляр" + +#: actionlog/models.py +msgid "Saved feedback" +msgstr "Запазена обратна връзка" + +#: actionlog/models.py +msgid "Edited adjudicator base score" +msgstr "" + +#: actionlog/models.py +msgid "Set adjudicator note" +msgstr "" + +#: actionlog/models.py +msgid "Saved adjudicator allocation" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated adjudicators" +msgstr "" + +#: actionlog/models.py +msgid "Saved a room manual edit" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated rooms" +msgstr "Автоматично разпределени стаи" + +#: actionlog/models.py +msgid "Edited room categories" +msgstr "Редактирани категории за стаи" + +#: actionlog/models.py +msgid "Edited room constraints" +msgstr "" + +#: actionlog/models.py +msgid "Created draw" +msgstr "" + +#: actionlog/models.py +msgid "Confirmed draw" +msgstr "" + +#: actionlog/models.py +msgid "Regenerated draw" +msgstr "" + +#: actionlog/models.py +msgid "Released draw" +msgstr "" + +#: actionlog/models.py +msgid "Unreleased draw" +msgstr "" + +#: actionlog/models.py +msgid "Saved a matchup manual edit" +msgstr "" + +#: actionlog/models.py +msgid "Saved the sides status of a matchup" +msgstr "" + +#: actionlog/models.py +msgid "Saved divisions" +msgstr "" + +#: actionlog/models.py +msgid "Added/edited motion" +msgstr "" + +#: actionlog/models.py +msgid "Released motions" +msgstr "" + +#: actionlog/models.py +msgid "Unreleased motions" +msgstr "" + +#: actionlog/models.py +msgid "Auto-prioritized debate importance" +msgstr "" + +#: actionlog/models.py +msgid "Edited debate importance" +msgstr "" + +#: actionlog/models.py +msgid "Changed adjudicator breaking status" +msgstr "" + +#: actionlog/models.py +msgid "Edited break eligibility" +msgstr "" + +#: actionlog/models.py +msgid "Edited break categories" +msgstr "" + +#: actionlog/models.py +msgid "Generated the team break for all categories" +msgstr "" + +#: actionlog/models.py +msgid "Edited breaking team remarks and updated all team breaks" +msgstr "" + +#: actionlog/models.py +msgid "Edited breaking team remarks and updated this team break" +msgstr "" + +#: actionlog/models.py +msgid "Edited breaking team remarks" +msgstr "" + +#: actionlog/models.py +msgid "Set start time" +msgstr "" + +#: actionlog/models.py +msgid "Advanced the current round to" +msgstr "" + +#: actionlog/models.py +msgid "Marked round as completed" +msgstr "" + +#: actionlog/models.py +msgid "Edited teams availability" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicators availability" +msgstr "" + +#: actionlog/models.py +msgid "Edited room availability" +msgstr "" + +#: actionlog/models.py +msgid "Edited tournament options" +msgstr "" + +#: actionlog/models.py +msgid "Edited speaker category eligibility" +msgstr "" + +#: actionlog/models.py +msgid "Edited speaker categories" +msgstr "" + +#: actionlog/models.py +msgid "Imported institutions using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Imported rooms using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Imported teams using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Imported adjudicators using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Updated adjudicator scores in bulk" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator-team conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator-adjudicator conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator-institution conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Edited team-institution conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Generated check in identifiers for speakers" +msgstr "" + +#: actionlog/models.py +msgid "Generated check in identifiers for adjudicators" +msgstr "" + +#: actionlog/models.py +msgid "Generated check in identifiers for rooms" +msgstr "" + +#: actionlog/models.py +msgid "Created preformed panels" +msgstr "" + +#: actionlog/models.py +msgid "Auto-prioritized preformed panels" +msgstr "" + +#: actionlog/models.py +msgid "Edited preformed panel importance" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated adjudicators to preformed panels" +msgstr "" + +#: actionlog/models.py +msgid "Edited preformed panel adjudicator" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated preformed panels to debates" +msgstr "" + +#: actionlog/models.py +msgid "type" +msgstr "" + +#: actionlog/models.py +msgid "timestamp" +msgstr "" + +#: actionlog/models.py +msgid "user" +msgstr "" + +#: actionlog/models.py +msgid "IP address" +msgstr "" + +#: actionlog/models.py +msgid "tournament" +msgstr "" + +#: actionlog/models.py +msgid "round" +msgstr "" + +#: actionlog/models.py +msgid "content type" +msgstr "" + +#: actionlog/models.py +msgid "object ID" +msgstr "" + +#: actionlog/models.py +msgid "action log" +msgstr "" + +#: actionlog/models.py +msgid "action log entries" +msgstr "" + +#: actionlog/models.py +msgid "All log entries require at least one of a user and an IP address." +msgstr "" + +#: actionlog/models.py +msgid "anonymous" +msgstr "" + diff --git a/tabbycat/adjallocation/locale/bg/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..cb9be48515b --- /dev/null +++ b/tabbycat/adjallocation/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,451 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 922\n" + +#: adjallocation/allocators/base.py +msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." +msgstr "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." +msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." +msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/allocators/hungarian.py +msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." +msgstr "" + +#: adjallocation/allocators/hungarian.py +msgid "There are no debates for this round. Maybe you haven't created a draw yet?" +msgstr "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." +msgstr "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." +msgstr "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." +msgstr "" + +#: adjallocation/apps.py +msgid "Adjudicator Allocation" +msgstr "" + +#: adjallocation/consumers.py +msgid "Draw is already released, unrelease draw to redo auto-allocations." +msgstr "" + +#: adjallocation/consumers.py +msgid "Draw is not confirmed, confirm draw to run auto-allocations." +msgstr "" + +#: adjallocation/consumers.py +msgid "There are no preformed panels available to allocate." +msgstr "" + +#: adjallocation/consumers.py +msgid "Successfully auto-allocated preformed panels to debates." +msgstr "" + +#: adjallocation/consumers.py +#, python-format +msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" +msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/consumers.py +msgid "Successfully auto-allocated adjudicators to debates." +msgstr "" + +#: adjallocation/consumers.py +msgid "There aren't any panels to fill. Create panels first." +msgstr "" + +#: adjallocation/consumers.py +#, python-format +msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" +msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/consumers.py +msgid "Successfully auto-allocated adjudicators to preformed panels." +msgstr "" + +#: adjallocation/consumers.py +msgid "You have no break category set as 'is general' so debate importances can't be calculated." +msgstr "" + +#: adjallocation/consumers.py +msgid "Succesfully auto-prioritised debates." +msgstr "" + +#: adjallocation/consumers.py +msgid "You have no break category set as 'is general' so panel importances can't be calculated." +msgstr "" + +#: adjallocation/consumers.py +msgid "Succesfully auto-prioritised preformed panels." +msgstr "" + +#: adjallocation/consumers.py +msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." +msgstr "" + +#: adjallocation/consumers.py +msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." +msgstr "" + +#: adjallocation/consumers.py +msgid "Succesfully created new preformed panels for this round." +msgstr "" + +#: adjallocation/models.py +msgid "chair" +msgstr "" + +#: adjallocation/models.py +msgid "panellist" +msgstr "" + +#: adjallocation/models.py +msgid "trainee" +msgstr "" + +#: adjallocation/models.py +msgid "debate" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator" +msgstr "" + +#: adjallocation/models.py +msgid "type" +msgstr "" + +#: adjallocation/models.py +msgid "available?" +msgstr "" + +#: adjallocation/models.py +msgid "debate adjudicator" +msgstr "" + +#: adjallocation/models.py +msgid "debate adjudicators" +msgstr "" + +#: adjallocation/models.py +msgid "team" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator-team conflict" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator-team conflicts" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator 1" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator 2" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator-adjudicator conflict" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator-adjudicator conflicts" +msgstr "" + +#: adjallocation/models.py +msgid "institution" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator-institution conflict" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator-institution conflicts" +msgstr "" + +#: adjallocation/models.py +msgid "team-institution conflict" +msgstr "" + +#: adjallocation/models.py +msgid "team-institution conflicts" +msgstr "" + +#: adjallocation/models.py +msgid "round" +msgstr "" + +#: adjallocation/models.py +msgid "importance" +msgstr "" + +#: adjallocation/models.py +msgid "minimum bracket" +msgstr "" + +#: adjallocation/models.py +msgid "Estimate of the lowest bracket for which this panel might be" +msgstr "" + +#: adjallocation/models.py +msgid "maximum bracket" +msgstr "" + +#: adjallocation/models.py +msgid "Estimate of the highest bracket for which this panel might be" +msgstr "" + +#: adjallocation/models.py +msgid "room rank" +msgstr "" + +#: adjallocation/models.py +msgid "Sequential number of panel, not used in any algorithms" +msgstr "" + +#: adjallocation/models.py +msgid "liveness" +msgstr "" + +#: adjallocation/models.py +msgid "Number of categories this room is expected to be live for" +msgstr "" + +#: adjallocation/models.py +msgid "preformed panel" +msgstr "" + +#: adjallocation/models.py +msgid "preformed panels" +msgstr "" + +#: adjallocation/models.py +msgid "panel" +msgstr "" + +#: adjallocation/models.py +msgid "preformed panel adjudicator" +msgstr "" + +#: adjallocation/models.py +msgid "preformed panel adjudicators" +msgstr "" + +#: adjallocation/preformed/base.py +msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." +msgstr "" + +#: adjallocation/templates/preformed_index.html adjallocation/views.py +msgid "Preformed Panels" +msgstr "" + +#: adjallocation/templates/preformed_index.html +msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." +msgstr "" + +#: adjallocation/templates/preformed_index.html +msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." +msgstr "" + +#: adjallocation/templates/preformed_index.html +#, python-format +msgid "Edit Preformed Panels for %(round)s" +msgstr "" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator)s & %(team)s (personal)" +msgstr "" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" +msgstr "" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" +msgstr "" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" +msgstr "" + +#: adjallocation/views.py +msgid "Male" +msgstr "" + +#: adjallocation/views.py +msgid "Female" +msgstr "" + +#: adjallocation/views.py +msgid "Other" +msgstr "" + +#: adjallocation/views.py +msgid "Unknown" +msgstr "" + +#: adjallocation/views.py +msgid "Edit Allocation" +msgstr "" + +#: adjallocation/views.py +msgid "Edit Panels" +msgstr "" + +#: adjallocation/views.py +msgid "Return to Panels Overview" +msgstr "" + +#: adjallocation/views.py +msgid "Adjudicator-Team Conflicts" +msgstr "" + +#: adjallocation/views.py +msgid "Save Adjudicator-Team Conflicts" +msgstr "" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d adjudicator-team conflict." +msgid_plural "Saved %(count)d adjudicator-team conflicts." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d adjudicator-team conflict." +msgid_plural "Deleted %(count)d adjudicator-team conflicts." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/views.py +msgid "No changes were made to adjudicator-team conflicts." +msgstr "" + +#: adjallocation/views.py +msgid "Adjudicator-Adjudicator Conflicts" +msgstr "" + +#: adjallocation/views.py +msgid "Save Adjudicator-Adjudicator Conflicts" +msgstr "" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d adjudicator-adjudicator conflict." +msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d adjudicator-adjudicator conflict." +msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/views.py +msgid "No changes were made to adjudicator-adjudicator conflicts." +msgstr "" + +#: adjallocation/views.py +msgid "Adjudicator-Institution Conflicts" +msgstr "" + +#: adjallocation/views.py +msgid "Save Adjudicator-Institution Conflicts" +msgstr "" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d adjudicator-institution conflict." +msgid_plural "Saved %(count)d adjudicator-institution conflicts." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d adjudicator-institution conflict." +msgid_plural "Deleted %(count)d adjudicator-institution conflicts." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/views.py +msgid "No changes were made to adjudicator-institution conflicts." +msgstr "" + +#: adjallocation/views.py +msgid "Team-Institution Conflicts" +msgstr "" + +#: adjallocation/views.py +msgid "Save Team-Institution Conflicts" +msgstr "" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d team-institution conflict." +msgid_plural "Saved %(count)d team-institution conflicts." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d team-institution conflict." +msgid_plural "Deleted %(count)d team-institution conflicts." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/views.py +msgid "No changes were made to team-institution conflicts." +msgstr "" + diff --git a/tabbycat/adjfeedback/locale/bg/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..02452917406 --- /dev/null +++ b/tabbycat/adjfeedback/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,966 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 924\n" + +#: adjfeedback/admin.py +msgid "Integer scales must have a minimum and maximum" +msgstr "" + +#: adjfeedback/admin.py +msgid "target" +msgstr "" + +#: adjfeedback/admin.py adjfeedback/models.py +msgid "source adjudicator" +msgstr "" + +#: adjfeedback/admin.py adjfeedback/models.py +msgid "source team" +msgstr "" + +#: adjfeedback/admin.py +msgid "Target" +msgstr "" + +#: adjfeedback/admin.py +msgid "Source" +msgstr "" + +#: adjfeedback/admin.py +msgid "Feedback timestamp and version" +msgstr "" + +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." +msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." +msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission was marked as unconfirmed." +msgid_plural "%(count)d feedback submissions were marked as unconfirmed." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission is now ignored." +msgid_plural "%(count)d feedback submissions are now ignored." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission is now recognized." +msgid_plural "%(count)d feedback submissions are now recognized." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/apps.py +msgid "Adjudicator Feedback" +msgstr "" + +#: adjfeedback/forms.py +msgid "chair" +msgstr "" + +#: adjfeedback/forms.py +msgid "solo" +msgstr "" + +#: adjfeedback/forms.py +msgid "panellist" +msgstr "" + +#: adjfeedback/forms.py +msgid "trainee" +msgstr "" + +#. Translators: Please leave this blank, it should be left for the base Django translations. +#: adjfeedback/forms.py +msgid "Yes" +msgstr "" + +#. Translators: Please leave this blank, it should be left for the base Django translations. +#: adjfeedback/forms.py +msgid "No" +msgstr "" + +#. Translators: Please leave this blank, it should be left for the base Django translations. +#: adjfeedback/forms.py +msgid "This field is required." +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "Overall score (%(min)d=worst; %(max)d=best)*" +msgstr "" + +#: adjfeedback/forms.py +msgid "Ignored" +msgstr "" + +#. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" +#: adjfeedback/forms.py +msgid "Submitted - " +msgstr "" + +#. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s (%(adjpos)s)" +msgstr "" + +#: adjfeedback/forms.py +msgid "-- Adjudicators --" +msgstr "" + +#: adjfeedback/forms.py +msgid "Adjudicator this feedback is about" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s (chair gave oral)" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s (panellist gave oral as chair rolled)" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "This line (for %(adjudicator)s) didn't have a score" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "This line (for %(adjudicator)s) had too many columns" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" +msgstr "" + +#: adjfeedback/forms.py +msgid "There were no scores to import." +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator" +msgstr "" + +#: adjfeedback/models.py +msgid "round" +msgstr "" + +#: adjfeedback/models.py +msgid "score" +msgstr "" + +#: adjfeedback/models.py +msgid "timestamp" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator base score history" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator base score histories" +msgstr "" + +#: adjfeedback/models.py +msgid "question" +msgstr "" + +#: adjfeedback/models.py +msgid "feedback" +msgstr "" + +#: adjfeedback/models.py +msgid "answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback boolean answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback boolean answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback integer answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback integer answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback float answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback float answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback string answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback string answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answers" +msgstr "" + +#: adjfeedback/models.py +msgid "checkbox" +msgstr "" + +#: adjfeedback/models.py +msgid "yes/no (dropdown)" +msgstr "" + +#: adjfeedback/models.py +msgid "integer (textbox)" +msgstr "" + +#: adjfeedback/models.py +msgid "integer scale" +msgstr "" + +#: adjfeedback/models.py +msgid "float" +msgstr "" + +#: adjfeedback/models.py +msgid "text" +msgstr "" + +#: adjfeedback/models.py +msgid "long text" +msgstr "" + +#: adjfeedback/models.py +msgid "select one" +msgstr "" + +#: adjfeedback/models.py +msgid "select multiple" +msgstr "" + +#: adjfeedback/models.py +msgid "tournament" +msgstr "" + +#: adjfeedback/models.py +msgid "sequence number" +msgstr "" + +#: adjfeedback/models.py +msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" +msgstr "" + +#: adjfeedback/models.py +msgid "name" +msgstr "" + +#: adjfeedback/models.py +msgid "A short name for the question, e.g., \"Agree with decision\"" +msgstr "" + +#: adjfeedback/models.py +msgid "reference" +msgstr "" + +#: adjfeedback/models.py +msgid "Code-compatible reference, e.g., \"agree_with_decision\"" +msgstr "" + +#: adjfeedback/models.py +msgid "from adjudicator" +msgstr "" + +#: adjfeedback/models.py +msgid "Adjudicators should be asked this question (about other adjudicators)" +msgstr "" + +#: adjfeedback/models.py +msgid "from team" +msgstr "" + +#: adjfeedback/models.py +msgid "Teams should be asked this question" +msgstr "" + +#: adjfeedback/models.py +msgid "answer type" +msgstr "" + +#: adjfeedback/models.py +msgid "required" +msgstr "" + +#: adjfeedback/models.py +msgid "Whether participants are required to fill out this field" +msgstr "" + +#: adjfeedback/models.py +msgid "minimum value" +msgstr "" + +#: adjfeedback/models.py +msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" +msgstr "" + +#: adjfeedback/models.py +msgid "maximum value" +msgstr "" + +#: adjfeedback/models.py +msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" +msgstr "" + +#: adjfeedback/models.py +msgid "choices" +msgstr "" + +#: adjfeedback/models.py +msgid "Permissible choices for select one/multiple fields (ignored for other fields)" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback question" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback questions" +msgstr "" + +#: adjfeedback/models.py adjfeedback/views.py +msgid "ignored" +msgstr "" + +#: adjfeedback/models.py +msgid "Whether the feedback should affect the adjudicator's score" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedbacks" +msgstr "" + +#: adjfeedback/models.py +msgid "Either the source adjudicator or source team wasn't specified." +msgstr "" + +#: adjfeedback/models.py +msgid "There was both a source adjudicator and a source team." +msgstr "" + +#: adjfeedback/models.py +msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" +msgstr "" + +#: adjfeedback/models.py +msgid "Adjudicator did not see this debate." +msgstr "" + +#: adjfeedback/tables.py +msgid "Whether the adj is marked as breaking (click to mark)" +msgstr "" + +#: adjfeedback/tables.py +msgid "N/A" +msgstr "" + +#: adjfeedback/tables.py +msgid "Current weighted score" +msgstr "" + +#: adjfeedback/tables.py +msgid "This adjudicator's current rating." +msgstr "" + +#: adjfeedback/tables.py +msgid "Base score result" +msgstr "" + +#: adjfeedback/tables.py +msgid "Click to edit base score" +msgstr "" + +#: adjfeedback/tables.py +msgid "Assigned base score" +msgstr "" + +#: adjfeedback/tables.py +msgid "The current difference between an adjudicator's base score and current score" +msgstr "" + +#: adjfeedback/tables.py +msgid "The difference between this adjudicator's base score and current score" +msgstr "" + +#: adjfeedback/tables.py +msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." +msgstr "" + +#: adjfeedback/tables.py +msgid "The standard deviation of this adjudicator's current scores" +msgstr "" + +#: adjfeedback/tables.py +msgid "Feedback Per Round" +msgstr "" + +#: adjfeedback/tables.py +msgid "Hover over the data points to show the average score received in that round" +msgstr "" + +#: adjfeedback/tables.py +#, python-format +msgid "View %(count)s
    feedback" +msgid_plural "View %(count)s
    feedbacks" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/tables.py +msgid "Unsubmitted feedback ballots" +msgstr "" + +#: adjfeedback/tables.py +msgid "View Missing Feedback" +msgstr "" + +#: adjfeedback/templates/add_feedback.html +msgid "Who is the feedback from?" +msgstr "" + +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html +msgid "Enter Feedback" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html +#, python-format +msgid "Add Feedback from %(name)s" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html +msgid "Add Feedback" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "There are some problems with this feedback submission. Please review and correct them." +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "When submitting this form your IP address will be stored for logging purposes." +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Overview" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Latest" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Unsubmitted" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Important" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Comments" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "By Source" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "By Target" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Bulk Update Scores" +msgstr "" + +#: adjfeedback/templates/feedback_by_source.html +#, python-format +msgid "Feedback %(source_type)s %(source_name)s" +msgstr "" + +#: adjfeedback/templates/feedback_by_source.html +#, python-format +msgid "%(source_name)s hasn't submitted any feedback yet." +msgstr "" + +#: adjfeedback/templates/feedback_by_source.html +#, python-format +msgid "%(source_name)s hasn't received any feedback yet." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Unconfirmed; will not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Ignored; will not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "The score given in this piece of feedback." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "%(round)s %(score)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "On %(adjudicator)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "Received as %(as_type)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "Base %(base)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "From %(source)s (their %(relationship)s)" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "From %(source)s (%(relationship)s from %(side)s)" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "From unknown" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "%(time)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Un-confirm" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Confirm" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Un-ignore" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Ignore" +msgstr "" + +#: adjfeedback/templates/feedback_cards_list.html +msgid "No feedback has been submitted yet" +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "%(c_breaking)s marked as breaking" +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." +msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." +msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "Base" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "Feedback" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "Score Ratio" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." +msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." +msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(c_chairs)s chair" +msgid_plural "%(c_chairs)s chairs" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(c_panellists)s panellist" +msgid_plural "%(c_panellists)s panellists" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(c_trainees)s trainee" +msgid_plural "%(c_trainees)s trainees" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" +msgstr "" + +#: adjfeedback/templates/overview_modals.html +msgid "Change Base Score" +msgstr "" + +#: adjfeedback/templates/overview_modals.html +#, python-format +msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." +msgstr "" + +#: adjfeedback/templates/overview_modals.html +#, python-format +msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." +msgstr "" + +#: adjfeedback/templates/overview_modals.html +msgid "Base score" +msgstr "" + +#: adjfeedback/templates/overview_modals.html +msgid "Save Base Score" +msgstr "" + +#: adjfeedback/templates/public_add_feedback.html +msgid "Who are you?" +msgstr "" + +#: adjfeedback/templates/public_add_feedback.html +msgid "click your name or your team on this list" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgctxt "page title" +msgid "Update Adjudicator Scores" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +#, python-format +msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "The adjudicators' names must match their names in the tab system exactly." +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "There are some problems with the data on this form:" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "Submit" +msgstr "" + +#: adjfeedback/views.py +msgid "Feedback Overview" +msgstr "" + +#: adjfeedback/views.py +msgid "Find Feedback on Adjudicator" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "%(count)d feedback" +msgid_plural "%(count)d feedbacks" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/views.py +msgid "Feedbacks" +msgstr "" + +#: adjfeedback/views.py +msgid "Find Feedback" +msgstr "" + +#: adjfeedback/views.py +msgid "From Teams" +msgstr "" + +#: adjfeedback/views.py +msgid "From Adjudicators" +msgstr "" + +#: adjfeedback/views.py +msgid "Latest Feedback" +msgstr "" + +#: adjfeedback/views.py +msgid "(30 most recent)" +msgstr "" + +#: adjfeedback/views.py +msgid "Only Comments" +msgstr "" + +#: adjfeedback/views.py +msgid "(250 most recent)" +msgstr "" + +#: adjfeedback/views.py +msgid "Important Feedback" +msgstr "" + +#: adjfeedback/views.py +msgid "(rating was much higher/lower than expected)" +msgstr "" + +#: adjfeedback/views.py +msgid "A Team" +msgstr "" + +#: adjfeedback/views.py +msgid "Team" +msgstr "" + +#: adjfeedback/views.py +msgid "Institution" +msgstr "" + +#: adjfeedback/views.py +msgid "An Adjudicator" +msgstr "" + +#: adjfeedback/views.py +msgid "Adjudicator" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Feedback from %(source)s on %(target)s added." +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" +msgstr "" + +#: adjfeedback/views.py +msgid "Whoops! The value isn't a valid base score." +msgstr "" + +#: adjfeedback/views.py +msgid "Feedback Progress" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" +msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/views.py +#, python-format +msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." +msgstr "" + +#: adjfeedback/views.py +msgid "confirmed" +msgstr "" + +#: adjfeedback/views.py +msgid "un-confirmed" +msgstr "" + +#: adjfeedback/views.py +msgid "un-ignored" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Updated base score for %(count)d adjudicator." +msgid_plural "Updated base scores for %(count)d adjudicators." +msgstr[0] "" +msgstr[1] "" + diff --git a/tabbycat/availability/locale/bg/LC_MESSAGES/django.po b/tabbycat/availability/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..a0cd2929eb9 --- /dev/null +++ b/tabbycat/availability/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,392 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 926\n" + +#: availability/apps.py availability/views.py +msgid "Availability" +msgstr "" + +#: availability/models.py +msgid "content type" +msgstr "" + +#: availability/models.py +msgid "object id" +msgstr "" + +#: availability/models.py +msgid "round" +msgstr "" + +#: availability/models.py +msgid "round availability" +msgstr "" + +#: availability/models.py +msgid "round availabilities" +msgstr "" + +#: availability/templates/availability_index.html +msgid "Mark All Breaking Adjs as Available" +msgstr "" + +#: availability/templates/availability_index.html +msgid "Mark Everything as Available" +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "Copy Availability from %(prev_round)s" +msgstr "" + +#: availability/templates/availability_index.html +msgid "View Draw" +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" +msgstr "" + +#: availability/templates/availability_index.html +msgid "Generate Draw" +msgstr "" + +#: availability/templates/availability_index.html +msgid "The draw cannot be generated until some teams have been marked as available." +msgstr "" + +#: availability/templates/availability_index.html +msgid "The draw cannot be generated until some adjudicators have been marked as available." +msgstr "" + +#: availability/templates/availability_index.html +msgid "The draw cannot be generated until some rooms have been marked as available." +msgstr "" + +#: availability/templates/availability_index.html +msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." +msgstr "" + +#: availability/templates/availability_index.html +msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." +msgstr "" + +#: availability/templates/availability_index.html +msgid "There is an uneven number of teams marked as available — the draw may not generate properly." +msgstr "" + +#: availability/templates/availability_index.html +msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " +msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." +msgstr "" + +#: availability/templates/base_availability.html +msgid "Select All" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Select None" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Check-Ins" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Check In All Breaking" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Copy from Previous" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Save Selected" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Teams" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Adjudicators" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Rooms" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Mark teams as available" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "No need to set team availability" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "There is an uneven number of teams marked as available for this round." +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "The number of teams marked as available for this round is not a multiple of 4." +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Edit team availability" +msgstr "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." +msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s adjudicator who was not available last round, is available this round." +msgid_plural "%(count)s adjudicators who were not available last round, are available this round." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" +msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s adjudicator who was available last round, is not available this round." +msgid_plural "%(count)s adjudicators who were available last round, are not available this round." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" +msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +msgid "Mark adjudicators as available" +msgstr "" + +#. Translators: required_count is a word for a number (e.g. "two", "three", etc.) +#: availability/templates/checkin_progress.html +#, python-format +msgid "There needs to be at least one adjudicator marked as available, given the number of debates." +msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +msgid "Edit adjudicator availability" +msgstr "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s room that was not available last round, is available this round." +msgid_plural "%(count)s rooms that were not available last round, are available this round." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" +msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s room that was available last round, is not available this round." +msgid_plural "%(count)s rooms that were available last round, are not available this round." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" +msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." +msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +msgid "Mark rooms as available" +msgstr "" + +#. Translators: required_count is a word for a number (e.g. "two", "three", etc.) +#: availability/templates/checkin_progress.html +#, python-format +msgid "There needs to be at least one room marked as available, given the number of debates." +msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +msgid "Edit room availability" +msgstr "" + +#: availability/views.py +msgid "no teams are debating" +msgstr "" + +#. Translators: nteams in this string can only be 0 or 1 +#: availability/views.py +#, python-format +msgid "%(nteams)d breaking team — no debates can happen" +msgid_plural "%(nteams)d breaking teams — no debates can happen" +msgstr[0] "" +msgstr[1] "" + +#. Translators: ndebating in this string is always at least 2 +#: availability/views.py +#, python-format +msgid "%(ndebating)d breaking team is debating this round" +msgid_plural "%(ndebating)d breaking teams are debating this round" +msgstr[0] "" +msgstr[1] "" + +#. Translators: This gets appended to the previous string (the one with +#. ndebating in it) if (and only if) nbypassing is greater than 0. +#. "It" refers to this round. +#: availability/views.py +#, python-format +msgid "; %(nbypassing)d team is bypassing it" +msgid_plural "; %(nbypassing)d teams are bypassing it" +msgstr[0] "" +msgstr[1] "" + +#. Translators: nadvancing in this string is always at least 2 +#: availability/views.py +#, python-format +msgid "%(nadvancing)s advancing team is debating this round" +msgid_plural "%(nadvancing)s advancing teams are debating this round" +msgstr[0] "" +msgstr[1] "" + +#: availability/views.py +msgid "Active Now" +msgstr "" + +#: availability/views.py +#, python-format +msgid "Active in %(prev_round)s" +msgstr "" + +#: availability/views.py +msgid "Checked-In" +msgstr "" + +#: availability/views.py +msgid "Team Availability" +msgstr "" + +#: availability/views.py +msgid "Adjudicator Availability" +msgstr "" + +#: availability/views.py +msgid "Room Availability" +msgstr "" + +#: availability/views.py +msgid "Room" +msgstr "" + +#: availability/views.py +msgid "Display Name (for the draw)" +msgstr "" + +#: availability/views.py +msgid "Categories" +msgstr "" + +#: availability/views.py +msgid "Priority" +msgstr "" + +#: availability/views.py +msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." +msgstr "" + +#: availability/views.py +msgid "Checked in all teams, adjudicators and rooms." +msgstr "" + +#: availability/views.py +msgid "Checked in all breaking adjudicators." +msgstr "" + +#: availability/views.py +msgid "Checked in all teams, adjudicators and rooms from previous round." +msgstr "" + diff --git a/tabbycat/breakqual/locale/bg/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..cca44de16dd --- /dev/null +++ b/tabbycat/breakqual/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,525 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 928\n" + +#: breakqual/apps.py +msgid "Break Qualification" +msgstr "" + +#: breakqual/base.py +#, python-format +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" +msgstr[1] "" + +#: breakqual/models.py +msgid "tournament" +msgstr "" + +#: breakqual/models.py +msgid "name" +msgstr "" + +#: breakqual/models.py +msgid "Name to be displayed, e.g., \"ESL\"" +msgstr "" + +#: breakqual/models.py +msgid "slug" +msgstr "" + +#: breakqual/models.py +msgid "Slug for URLs, e.g., \"esl\"" +msgstr "" + +#: breakqual/models.py +msgid "sequence number" +msgstr "" + +#: breakqual/models.py +msgid "The order in which the categories are displayed" +msgstr "" + +#: breakqual/models.py +msgid "break size" +msgstr "" + +#: breakqual/models.py +msgid "Number of breaking teams in this category" +msgstr "" + +#: breakqual/models.py +msgid "is general" +msgstr "" + +#: breakqual/models.py +msgid "True if most teams eligible for this category, e.g. Open, False otherwise" +msgstr "" + +#: breakqual/models.py +msgid "priority" +msgstr "" + +#: breakqual/models.py +msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" +msgstr "" + +#: breakqual/models.py +msgid "limit" +msgstr "" + +#: breakqual/models.py +msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" +msgstr "" + +#: breakqual/models.py +msgid "Standard" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 1996" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 2016 (Easters)" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 2016 (Australs)" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 2019 (Australs, Dynamic Cap)" +msgstr "" + +#: breakqual/models.py +msgid "rule" +msgstr "" + +#: breakqual/models.py +msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" +msgstr "" + +#: breakqual/models.py +msgid "breaking teams" +msgstr "" + +#: breakqual/models.py +msgid "break category" +msgstr "" + +#: breakqual/models.py +msgid "break categories" +msgstr "" + +#: breakqual/models.py +msgid "team" +msgstr "" + +#: breakqual/models.py +msgid "rank" +msgstr "" + +#: breakqual/models.py +msgid "break rank" +msgstr "" + +#: breakqual/models.py +msgid "Capped" +msgstr "" + +#: breakqual/models.py +msgid "Ineligible" +msgstr "" + +#: breakqual/models.py +msgid "Different break" +msgstr "" + +#: breakqual/models.py +msgid "Disqualified" +msgstr "" + +#: breakqual/models.py +msgid "Lost coin toss" +msgstr "" + +#: breakqual/models.py +msgid "Withdrawn" +msgstr "" + +#: breakqual/models.py +msgid "remark" +msgstr "" + +#: breakqual/models.py +msgid "Used to explain why an otherwise-qualified team didn't break" +msgstr "" + +#: breakqual/models.py +msgid "breaking team" +msgstr "" + +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html +msgid "Break Categories" +msgstr "" + +#: breakqual/templates/break_categories_edit.html +#, python-format +msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." +msgstr "" + +#: breakqual/templates/break_categories_edit.html +#, python-format +msgid "If you want to delete break categories, use the Edit Database area." +msgstr "" + +#: breakqual/templates/break_categories_edit.html +msgid "Save Break Categories" +msgstr "" + +#: breakqual/templates/breaking_adjs.html +#, python-format +msgid "Adjudicators can be marked as breaking in the Feedback Overview section." +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Breaks" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Team Eligibility" +msgstr "" + +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py +#, python-format +msgid "%(category)s Break" +msgstr "" + +#: breakqual/templates/breaking_index.html +#, python-format +msgid " %(size)s Spots " +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Teams Eligible" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Breaking" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Excluded" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Eligible" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Mark teams as eligible" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Generate this break" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "View this break" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "publicly visible" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "not publicly visible" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Delete and Regenerate All Breaks" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Generate the Break for All Categories" +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Save Remarks and Update All Breaks" +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "Save Remarks and Update the %(category)s Break" +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" +msgstr "" + +#: breakqual/templates/breakqual_subnav.html +msgid "Overview" +msgstr "" + +#: breakqual/templates/breakqual_subnav.html +msgid "Adjudicators' Break" +msgstr "" + +#: breakqual/templates/edit_break_eligibility.html +#, python-format +msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." +msgstr "" + +#: breakqual/templates/public_break_index.html breakqual/views.py +msgid "Break" +msgstr "" + +#: breakqual/templates/public_break_index.html +msgid "Adjudicators" +msgstr "" + +#. Translators: abbreviation for "grand final" +#: breakqual/utils.py +msgid "Grand Final" +msgstr "" + +#: breakqual/utils.py +msgid "GF" +msgstr "" + +#. Translators: abbreviation for "semifinals" +#: breakqual/utils.py +msgid "Semifinals" +msgstr "" + +#: breakqual/utils.py +msgid "SF" +msgstr "" + +#. Translators: abbreviation for "quarterfinals" +#: breakqual/utils.py +msgid "Quarterfinals" +msgstr "" + +#: breakqual/utils.py +msgid "QF" +msgstr "" + +#. Translators: abbreviation for "octofinals" +#: breakqual/utils.py +msgid "Octofinals" +msgstr "" + +#: breakqual/utils.py +msgid "OF" +msgstr "" + +#. Translators: abbreviation for "double-octofinals" +#: breakqual/utils.py +msgid "Double-Octofinals" +msgstr "" + +#: breakqual/utils.py +msgid "DOF" +msgstr "" + +#. Translators: abbreviation for "triple-octofinals" +#: breakqual/utils.py +msgid "Triple-Octofinals" +msgstr "" + +#: breakqual/utils.py +msgid "TOF" +msgstr "" + +#. Translators: abbreviation for "finals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Finals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sF" +msgstr "" + +#. Translators: abbreviation for "semifinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Semifinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sSF" +msgstr "" + +#. Translators: abbreviation for "quarterfinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Quarterfinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sQF" +msgstr "" + +#. Translators: abbreviation for "octofinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Octofinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sOF" +msgstr "" + +#. Translators: abbreviation for "double-octofinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Double-Octofinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sDOF" +msgstr "" + +#. Translators: abbreviation for "triple-octofinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Triple-Octofinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sTOF" +msgstr "" + +#. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) +#: breakqual/utils.py +#, python-format +msgid "Unknown %s break round" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "U%sBR" +msgstr "" + +#: breakqual/utils.py +msgid "Unknown break round" +msgstr "" + +#: breakqual/utils.py +msgid "UBR" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "There was an error generating the break for category %(category)s: %(message)s" +msgstr "" + +#: breakqual/views.py +msgid "Eligible for" +msgstr "" + +#: breakqual/views.py +msgid "Edit Remark" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." +msgstr "" + +#: breakqual/views.py +msgid "Changes to breaking team remarks saved." +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Teams break generated for the following break categories: %(categories)s." +msgstr "" + +#: breakqual/views.py +msgid "Breaking Adjudicators" +msgstr "" + +#: breakqual/views.py +msgid "Break Eligibility" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "%s Speakers" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" +msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" +msgstr[0] "" +msgstr[1] "" + diff --git a/tabbycat/draw/locale/bg/LC_MESSAGES/django.po b/tabbycat/draw/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..ca5d4dddcb9 --- /dev/null +++ b/tabbycat/draw/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,1119 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:27\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 930\n" + +#: draw/admin.py +#, python-format +msgid "%(count)d debate was marked as having its sides confirmed." +msgid_plural "%(count)d debates were marked as having their sides confirmed." +msgstr[0] "" +msgstr[1] "" + +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py +#, python-format +msgid "%(count)d debate was marked as having its sides not confirmed." +msgid_plural "%(count)d debates were marked as having their sides not confirmed." +msgstr[0] "" +msgstr[1] "" + +#: draw/apps.py draw/views.py +msgid "Draw" +msgstr "" + +#: draw/generator/__init__.py +msgid "Too many swaps" +msgstr "" + +#: draw/generator/__init__.py +msgid "One-up-one-down (history)" +msgstr "" + +#: draw/generator/__init__.py +msgid "One-up-one-down (institution)" +msgstr "" + +#: draw/generator/__init__.py +msgid "One-up-one-down (to accommodate)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble up (history)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble down (history)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble up (institution)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble down (institution)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble up (to accommodate)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble down (to accommodate)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Can't bubble up/down" +msgstr "" + +#: draw/generator/__init__.py +msgid "Pull-up team" +msgstr "" + +#: draw/generator/bpelimination.py draw/generator/elimination.py +#, python-format +msgid "%d debates in the previous round don't have a result." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "%d debates in the previous round don't have exactly two teams advancing." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "The number of debates (%d) in the last round is not a power of two." +msgstr "" + +#: draw/generator/bphungarian.py +#, python-format +msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." +msgstr "" + +#: draw/generator/common.py +#, python-format +msgid "The number of teams presented for the draw was not a multiple of %(num)d." +msgstr "" + +#: draw/generator/common.py +msgid "There were no teams for the draw." +msgstr "" + +#: draw/generator/elimination.py +#, python-format +msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." +msgstr "" + +#: draw/generator/elimination.py +#, python-format +msgid "The number of teams (%d) in this round is not a power of two." +msgstr "" + +#: draw/generator/powerpair.py +#, python-format +msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." +msgstr "" + +#: draw/generator/random.py +#, python-format +msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." +msgstr "" + +#: draw/generator/random.py +msgid "One or more teams had an allocated side that wasn't affirmative or negative." +msgstr "" + +#: draw/manager.py +#, python-format +msgid "The draw type %(type)s can't be used with two-team formats." +msgstr "" + +#: draw/manager.py +#, python-format +msgid "The draw type %(type)s can't be used with British Parliamentary." +msgstr "" + +#: draw/manager.py +#, python-format +msgid "Unrecognised \"teams in debate\" option: %(option)s" +msgstr "" + +#: draw/manager.py +#, python-format +msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." +msgstr "" + +#: draw/models.py +msgid "none" +msgstr "" + +#: draw/models.py +msgid "postponed" +msgstr "" + +#: draw/models.py +msgid "draft" +msgstr "" + +#: draw/models.py +msgid "confirmed" +msgstr "" + +#: draw/models.py +msgid "round" +msgstr "" + +#: draw/models.py +msgid "room" +msgstr "" + +#: draw/models.py +msgid "bracket" +msgstr "" + +#: draw/models.py +msgid "room rank" +msgstr "" + +#: draw/models.py +msgid "importance" +msgstr "" + +#: draw/models.py +msgid "result status" +msgstr "" + +#: draw/models.py +msgid "sides confirmed" +msgstr "" + +#: draw/models.py +msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." +msgstr "" + +#: draw/models.py +msgid "debate" +msgstr "" + +#: draw/models.py +msgid "debates" +msgstr "" + +#. Translators: This is appended to a list of teams, e.g. "Auckland +#. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading +#. space. +#: draw/models.py +msgid " (sides not confirmed)" +msgstr "" + +#. Translators: This goes between teams in a debate, e.g. "Auckland 1 +#. vs Vic Wellington 1". Mind the leading and trailing spaces. +#: draw/models.py +msgid " vs " +msgstr "" + +#: draw/models.py +msgid "affirmative" +msgstr "" + +#: draw/models.py +msgid "negative" +msgstr "" + +#: draw/models.py +msgid "opening government" +msgstr "" + +#: draw/models.py +msgid "opening opposition" +msgstr "" + +#: draw/models.py +msgid "closing government" +msgstr "" + +#: draw/models.py +msgid "closing opposition" +msgstr "" + +#: draw/models.py +msgid "team" +msgstr "" + +#: draw/models.py +msgid "side" +msgstr "" + +#: draw/models.py +msgid "debate team" +msgstr "" + +#: draw/models.py +msgid "debate teams" +msgstr "" + +#: draw/models.py +#, python-format +msgid "placed %(place)s" +msgstr "" + +#: draw/models.py +msgid "result unknown" +msgstr "" + +#: draw/models.py +msgid "won" +msgstr "" + +#: draw/models.py +msgid "lost" +msgstr "" + +#: draw/models.py +msgid "team side allocation" +msgstr "" + +#: draw/models.py +msgid "team side allocations" +msgstr "" + +#. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", +#. "Opening government: Total speaker score", "Closing opposition: Number of firsts" +#: draw/tables.py +#, python-format +msgid "%(side)s: %(metric)s" +msgstr "" + +#: draw/tables.py +#, python-format +msgid "Team %(num)d" +msgstr "" + +#: draw/tables.py +msgid "Room rank of this debate" +msgstr "" + +#: draw/tables.py +msgid "Bracket of this debate" +msgstr "" + +#: draw/tables.py +msgid "side history
    \n" +"(number of times the team has been on each side before this round)" +msgstr "" + +#. Translators: Abbreviation for "side history" +#: draw/tables.py +msgid "SH" +msgstr "" + +#: draw/tables.py +msgid "Went from balanced to imbalanced" +msgstr "" + +#: draw/tables.py +msgid "Went from imbalanced to balanced" +msgstr "" + +#: draw/tables.py +msgid "Best improvement possible, still imbalanced" +msgstr "" + +#: draw/tables.py +msgid "Was imbalanced and still imbalanced" +msgstr "" + +#: draw/tables.py +msgid "No metrics in the team standings precedence" +msgstr "" + +#: draw/tables.py +msgid "Side" +msgstr "" + +#: draw/tables.py +msgid "Position this round" +msgstr "" + +#: draw/tables.py +msgid "Before" +msgstr "" + +#: draw/tables.py +msgid "Side history before this round" +msgstr "" + +#: draw/tables.py +msgid "After" +msgstr "" + +#: draw/tables.py +msgid "Side history after this round" +msgstr "" + +#: draw/tables.py +msgid "Cost" +msgstr "" + +#: draw/tables.py +msgid "Position cost" +msgstr "" + +#: draw/tables.py +msgid "Status" +msgstr "" + +#: draw/tables.py +msgid "Teams with this many points are permitted in this debate
    \n" +"(bracket in bold)" +msgstr "" + +#: draw/tables.py +#, python-format +msgid "%(team)s: %(metric)s" +msgstr "" + +#: draw/tables.py +msgid "side history before this round" +msgstr "" + +#: draw/tables.py +msgid "Sides" +msgstr "" + +#: draw/tables.py +msgid "position cost" +msgstr "" + +#: draw/templates/admin/draw/debateteam/delete_warning.html +msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" +msgstr "" + +#: draw/templates/admin/draw/debateteam/delete_warning.html +msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." +msgstr "" + +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html +msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." +msgstr "" + +#: draw/templates/admin/draw/debateteam/edit_warning.html +msgid "WARNING!!! If you are editing debate teams, read this first!" +msgstr "" + +#: draw/templates/admin/draw/debateteam/edit_warning.html +msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." +msgstr "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 debate does not have a chair." +msgid_plural "%(ndebates)s debates do not have a chair." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "%(adjudicators)s is adjudicating multiple debates." +msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 debate has a panel with an even number of adjudicators." +msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 debate has an adjudicator conflict." +msgid_plural "%(ndebates)s debates have adjudicator conflicts." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." +msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 adjudicator is available but not assigned to a debate." +msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_teams.html +#, python-format +msgid "%(teams)s is competing in multiple debates." +msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_venues.html +#, python-format +msgid "1 debate does not have a room." +msgid_plural "%(ndebates)s debates do not have a room." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_venues.html +#, python-format +msgid "There are multiple debates in %(rooms)s." +msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_venues.html +#, python-format +msgid "1 debate has a room constraint violation." +msgid_plural "%(ndebates)s debates have room constraint violations." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_base.html +msgid "Availability" +msgstr "" + +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html +msgid "Edit Sides/Matchups" +msgstr "" + +#: draw/templates/draw_base.html +msgid "Redo Draw" +msgstr "" + +#: draw/templates/draw_base.html +msgid "Draw Details" +msgstr "" + +#: draw/templates/draw_base.html +msgid "Position Balance" +msgstr "" + +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draw" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +msgid "Confirm draw regeneration" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html +msgid "Back to Draw" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#, python-format +msgid "Confirm Draw Deletion for %(round)s" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#, python-format +msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#, python-format +msgid "Yes, I want to delete the current draw for %(round)s" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "View Draw" +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "Debates start at %(start_time)s" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Add Start Time" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Enter Results" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Motion Details" +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "%(motions_count)s motion has been entered." +msgid_plural "%(motions_count)s motions have been entered." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Enter a motion" +msgid_plural "Enter motions" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Release Draw" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "You have not generated a draw for this round yet. There is nothing to release." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Unrelease draw to public" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "The draw has been released publicly." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "View public draw page" +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Release draw to public" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Release Motion" +msgid_plural "Release Motions" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "The motion has been released publicly." +msgid_plural "Motions have been released publicly." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "View public motions page" +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "(for the briefing room)" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draw ordered by Room" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draw ordered by Team" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draws for All Current Rounds ordered by Room" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draws for All Current Rounds ordered by Team" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +#, python-format +msgid "Display Draw for %(round)s ordered by Room" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +#, python-format +msgid "Display Draw for %(round)s ordered by Team" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Motions" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Email Motions" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Email Motion" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Start at" +msgstr "" + +#: draw/templates/draw_display_assistant.html +msgid "(for printing)" +msgstr "" + +#: draw/templates/draw_display_assistant.html +msgid "View Ballot Forms" +msgstr "" + +#: draw/templates/draw_display_assistant.html +msgid "View Feedback Forms" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Scroll Speed" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Fast" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Medium" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Slow" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Extra Slow" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Hide Adjudicators" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Show Adjudicators" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Text Size" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Tiny" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Small" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Large" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Huge" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Stop Scroll" +msgstr "" + +#: draw/templates/draw_not_released.html +#, python-format +msgid "The draw for %(round)s has yet to be released." +msgstr "" + +#: draw/templates/draw_not_released.html +msgid "The draw for the next round has yet to be released." +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Adjudicator Allocations" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "There are currently fewer adjudicators checked in than there are rooms." +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Allocate adjudicators" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Edit adjudicator allocation" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Room Allocations" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Allocate rooms" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Edit room allocation" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Preformed Panels" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +#, python-format +msgid "There is %(npanels)s preformed panel available for this round." +msgid_plural "There are %(npanels)s preformed panels available for this round." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_status_confirmed.html +msgid "There are no preformed panels available for this round" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +#, python-format +msgid "Edit preformed panels for %(round)s" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Side Allocations" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +#, python-format +msgid "1 debate does not have its sides confirmed." +msgid_plural "%(ndebates)s debates do not have their sides confirmed." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_status_draft.html +msgid "Delete Draw" +msgstr "" + +#: draw/templates/draw_status_draft.html +msgid "Confirm Draw" +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." +msgstr "" + +#: draw/templates/draw_status_draft.html +msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." +msgstr "" + +#: draw/templates/draw_status_draft.html +msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " +msgstr "" + +#: draw/templates/draw_status_none.html +#, python-format +msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." +msgstr "" + +#: draw/templates/position_balance.html +msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." +msgstr "" + +#: draw/templates/position_balance.html +#, python-format +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgstr "" + +#: draw/templates/position_balance_break.html +msgid "Position balance reports aren't computed for elimination rounds." +msgstr "" + +#: draw/templates/position_balance_nonbp.html +msgid "Position balance reports are only available for British Parliamentary tournaments." +msgstr "" + +#: draw/templates/position_balance_round1.html +msgid "Position balance reports aren't computed for the first round of a tournament." +msgstr "" + +#: draw/views.py +msgid "No debates in this round" +msgstr "" + +#: draw/views.py +#, python-format +msgid "Draw for %(round)s" +msgstr "" + +#: draw/views.py +msgid "Draws for Current Rounds" +msgstr "" + +#: draw/views.py +#, python-format +msgid "debates start at %(time)s (in %(time_zone)s)" +msgstr "" + +#: draw/views.py +#, python-format +msgid "start times in time zone: %(time_zone)s" +msgstr "" + +#: draw/views.py +#, python-format +msgid "debate starts at %(time)s" +msgid_plural "debates start at %(time)s" +msgstr[0] "" +msgstr[1] "" + +#: draw/views.py +msgid "The draw for this round hasn't been released." +msgstr "" + +#: draw/views.py +#, python-format +msgid "All Debates for All Rounds of %(tournament)s" +msgstr "" + +#: draw/views.py +msgid "Adjudicator Assignments" +msgstr "" + +#: draw/views.py +msgid "Position" +msgstr "" + +#: draw/views.py +msgid "Team Pairings" +msgstr "" + +#: draw/views.py +msgid "No Draw" +msgstr "" + +#: draw/views.py +msgid "Draft Draw" +msgstr "" + +#. Translators: e.g. "Affirmative: Break rank" +#: draw/views.py +#, python-format +msgid "%(side)s: Break rank" +msgstr "" + +#. Translators: "BR" stands for "Break rank" +#: draw/views.py +msgid "BR" +msgstr "" + +#: draw/views.py +msgid "Draw with Details" +msgstr "" + +#: draw/views.py +msgid "Position Balance Report" +msgstr "" + +#: draw/views.py +#, python-format +msgid "Rényi entropy of order %(order)s" +msgstr "" + +#. Translators: This is appended to the string "Rényi entropy of order 1.0" +#: draw/views.py +msgid " (i.e., Shannon entropy)" +msgstr "" + +#: draw/views.py +msgid "Teams with position imbalances" +msgstr "" + +#: draw/views.py +msgid "No teams with position imbalances! Hooray!" +msgstr "" + +#: draw/views.py +msgid "Annotated draw" +msgstr "" + +#: draw/views.py +#, python-format +msgid "Could not create draw for %(round)s, there was already a draw!" +msgstr "" + +#: draw/views.py +#, python-format +msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" +"

    Please fix this issue before attempting to create the draw.

    " +msgstr "" + +#: draw/views.py +#, python-format +msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" +"

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " +msgstr "" + +#: draw/views.py +#, python-format +msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" +"

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " +msgstr "" + +#: draw/views.py +msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." +msgstr "" + +#: draw/views.py +msgid "Deleted the draw. You can now recreate it as normal." +msgstr "" + +#: draw/views.py +msgid "Released the draw." +msgstr "" + +#: draw/views.py +msgid "Unreleased the draw." +msgstr "" + +#: draw/views.py +#, python-format +msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." +msgstr "" + +#: draw/views.py +msgid "Side Pre-Allocations" +msgstr "" + +#: draw/views.py +msgid "Edit Matchups" +msgstr "" + diff --git a/tabbycat/importer/locale/bg/LC_MESSAGES/django.po b/tabbycat/importer/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..8e33fd2404e --- /dev/null +++ b/tabbycat/importer/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,421 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 932\n" + +#: importer/forms.py +#, python-format +msgid "line %(lineno)d: %(message)s" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "This line (for %(institution)s) didn't have a code" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "This line (for %(institution)s) had too many columns" +msgstr "" + +#: importer/forms.py +msgid "There were no institutions to import." +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" +msgstr[1] "" + +#: importer/forms.py +msgid "There were no rooms to import." +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" +msgstr[1] "" + +#: importer/forms.py +msgid "Speakers' names" +msgstr "" + +#: importer/forms.py +msgid "Speakers' email addresses" +msgstr "" + +#: importer/forms.py +msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" +msgstr "" + +#: importer/forms.py +msgid "Name (excluding institution name)" +msgstr "" + +#: importer/forms.py +msgid "Prefix team name with institution name?" +msgstr "" + +#: importer/forms.py +msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" +msgstr "" + +#: importer/forms.py +msgid "(Not applicable to unaffiliated teams)" +msgstr "" + +#: importer/forms.py +msgid "One speaker's name per line" +msgstr "" + +#: importer/forms.py +msgid "Can be separated by newlines, tabs or commas" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Speaker %d" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "speaker%d@example.edu" +msgstr "" + +#: importer/forms.py +msgid "There must be at least one speaker." +msgstr "" + +#: importer/forms.py +#, python-format +msgid "%(email)s is not a valid email address." +msgstr "" + +#: importer/forms.py +msgid "There are more email addresses than speakers." +msgstr "" + +#: importer/forms.py +msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." +msgstr "" + +#: importer/forms.py +msgid "Rating" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "This value must be between %(min)d and %(max)d." +msgstr "" + +#: importer/forms.py +msgid "Unaffiliated (no institution)" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "%(name)s (%(code)s)" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" +msgstr[1] "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" +msgstr[1] "" + +#: importer/forms.py +msgid "XML" +msgstr "" + +#: importer/forms.py +msgid "The Debate XML archive to parse" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export Tournament Archive" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Tournaments can be exported in an XML format for use outside Tabbycat." +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export all data" +msgstr "" + +#: importer/templates/archive_importer.html +msgctxt "page title" +msgid "Import Tournament Archive" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "This form will create a tournament with the data provided as a Debate XML format." +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Import" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Go back to the site home page" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +msgctxt "page title" +msgid "Add Adjudicators" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html +#, python-format +msgid "(Step %(step)s of %(count)s)" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html +msgid "Previous Step" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#, python-format +msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#, python-format +msgid "Adjudicators for %(institution)s" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +msgid "Unaffiliated Adjudicators" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +msgid "Save All Adjudicators" +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +#, python-format +msgid "You need to add institutions before adding adjudicators." +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html +msgctxt "button" +msgid "Next Step" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Simple Importer" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Institutions" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Teams" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Adjudicators" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Rooms" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Room Categories" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Room Constraints" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Adjudicator-Team Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Adjudicator-Adjudicator Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Adjudicator-Institution Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Team-Institution Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Break Categories" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Speaker Categories" +msgstr "" + +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +msgctxt "page title" +msgid "Add Institutions" +msgstr "" + +#: importer/templates/simple_import_institutions_details.html +msgid "Save All Institutions" +msgstr "" + +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html +msgid "There are some problems with the data on this form:" +msgstr "" + +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html +msgid "Next Step" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +msgctxt "page title" +msgid "Add Teams" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +#, python-format +msgid "Teams for %(institution)s" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +msgid "Unaffiliated Teams" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +msgid "Save All Teams" +msgstr "" + +#: importer/templates/simple_import_teams_numbers.html +#, python-format +msgid "You need to add institutions before adding teams." +msgstr "" + +#: importer/templates/simple_import_teams_numbers.html +msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." +msgstr "" + +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" +msgstr "" + +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html +msgctxt "page title" +msgid "Add Rooms" +msgstr "" + +#: importer/templates/simple_import_venues_details.html +msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." +msgstr "" + +#: importer/templates/simple_import_venues_details.html +msgid "Save All Rooms" +msgstr "" + +#: importer/templates/simple_import_venues_raw.html +msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" +msgstr "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d institution." +msgid_plural "Added %(count)d institutions." +msgstr[0] "" +msgstr[1] "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d room." +msgid_plural "Added %(count)d rooms." +msgstr[0] "" +msgstr[1] "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d team." +msgid_plural "Added %(count)d teams." +msgstr[0] "" +msgstr[1] "" + +#: importer/views.py +#, python-format +msgid "Adjudicator %(number)d" +msgstr "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d adjudicator." +msgid_plural "Added %(count)d adjudicators." +msgstr[0] "" +msgstr[1] "" + +#: importer/views.py +msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " +msgstr "" + +#: importer/views.py +msgid "Created new demo tournament. You can now configure it below." +msgstr "" + +#: importer/views.py +msgid "Tournament archive has been imported." +msgstr "" + diff --git a/tabbycat/locale/bg/LC_MESSAGES/django.po b/tabbycat/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..f599c915eb2 --- /dev/null +++ b/tabbycat/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,957 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 934\n" + +#: api/apps.py +msgid "Application Programming Interface" +msgstr "" + +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html +msgid "Check-Ins" +msgstr "" + +#: checkins/consumers.py +msgid "Sent checkin identifier doesn't exist" +msgstr "" + +#: checkins/consumers.py +msgid "Checkins" +msgstr "" + +#: checkins/consumers.py +msgid "No checkin identifiers exist for sent barcodes" +msgstr "" + +#: checkins/models.py +msgid "The barcode must contain exactly six digits." +msgstr "" + +#: checkins/models.py +msgid "barcode" +msgstr "" + +#: checkins/models.py +msgid "" +msgstr "" + +#: checkins/models.py +#, python-format +msgid "%(classname)s %(barcode)s" +msgstr "" + +#: checkins/models.py +msgid "person" +msgstr "" + +#: checkins/models.py +msgid "person identifier" +msgstr "" + +#: checkins/models.py +msgid "person identifiers" +msgstr "" + +#: checkins/models.py +msgid "debate" +msgstr "" + +#: checkins/models.py +msgid "debate identifier" +msgstr "" + +#: checkins/models.py +msgid "debate identifiers" +msgstr "" + +#: checkins/models.py +msgid "room identifier" +msgstr "" + +#: checkins/models.py +msgid "room identifiers" +msgstr "" + +#: checkins/models.py +msgid "identifier" +msgstr "" + +#: checkins/models.py +msgid "check-in time" +msgstr "" + +#: checkins/models.py +msgid "tournament" +msgstr "" + +#: checkins/models.py +msgid "check-in event" +msgstr "" + +#: checkins/models.py +msgid "check-in events" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "With identifiers" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "View as barcodes" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "Generate missing identifiers" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "Generate all identifiers" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "There are no identifiers available to view. An admin will need to generate them." +msgstr "" + +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +msgstr "" + +#: checkins/templates/checkin_printables.html +msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." +msgstr "" + +#: checkins/templates/checkin_scan.html +msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "Not checked in (barcode %(barcode)s)" +msgstr "" + +#: checkins/utils.py +msgid "Not checked in; no barcode assigned" +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "checked in at %(time)s" +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "%(speaker)s checked in at %(time)s." +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "%(speaker)s is missing." +msgstr "" + +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html +msgid "Scan Identifiers" +msgstr "" + +#: checkins/views.py +msgid "People's Check-In Statuses" +msgstr "" + +#: checkins/views.py +msgid "Rooms' Check-In Statuses" +msgstr "" + +#: checkins/views.py templates/nav/admin_nav.html +msgid "Make Identifiers" +msgstr "" + +#: checkins/views.py templates/nav/admin_nav.html +msgid "Speakers" +msgstr "" + +#: checkins/views.py templates/nav/public_nav.html +msgid "Adjudicators" +msgstr "" + +#: checkins/views.py +msgid "Rooms" +msgstr "" + +#: checkins/views.py +#, python-format +msgid "Generated identifiers for %s" +msgstr "" + +#: checkins/views.py +msgid "Identifiers" +msgstr "" + +#: checkins/views.py +msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." +msgstr "" + +#: checkins/views.py +msgid "You have revoked your check-in." +msgstr "" + +#: checkins/views.py +msgid "Whoops! Looks like your check-in was already revoked." +msgstr "" + +#: checkins/views.py +msgid "Whoops! Looks like you're already checked in." +msgstr "" + +#: checkins/views.py +msgid "You are now checked in." +msgstr "" + +#: settings/core.py +msgid "Arabic" +msgstr "" + +#: settings/core.py +msgid "Bengali" +msgstr "" + +#: settings/core.py +msgid "English" +msgstr "" + +#: settings/core.py +msgid "Spanish" +msgstr "" + +#: settings/core.py +msgid "French" +msgstr "" + +#: settings/core.py +msgid "Indonesian" +msgstr "" + +#: settings/core.py +msgid "Japanese" +msgstr "" + +#: settings/core.py +msgid "Malay" +msgstr "" + +#: settings/core.py +msgid "Portuguese" +msgstr "" + +#: settings/core.py +msgid "Russian" +msgstr "" + +#: settings/core.py +msgid "Simplified Chinese" +msgstr "" + +#: settings/core.py +msgid "Translation" +msgstr "" + +#: templates/admin/delete_protected_message.html +msgid "You need to delete the above objects first." +msgstr "" + +#: templates/admin/style_guide.html +msgid "This style of info card announces critical information. Link." +msgstr "" + +#: templates/admin/style_guide.html +msgid "This style of info card announces general information." +msgstr "" + +#: templates/admin/style_guide.html +msgctxt "page title" +msgid "Form Title" +msgstr "" + +#: templates/admin/style_guide.html +msgid "Sub Title Title" +msgstr "" + +#: templates/admin/style_guide.html templates/registration/login.html +msgctxt "button" +msgid "Log In" +msgstr "" + +#: templates/admin/style_guide.html templates/registration/login.html +msgctxt "button" +msgid "I forgot my password" +msgstr "" + +#: templates/base.html +msgid "Tabbycat" +msgstr "" + +#: templates/base.html +#, python-format +msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" +msgstr "" + +#: templates/base.html +msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" +msgstr "" + +#: templates/components/form-errors.html +msgid "Whoops! There was an error with one or more fields." +msgstr "" + +#: templates/components/formset.html +msgid "Save and Add More" +msgstr "" + +#: templates/errors/assistant_403.html templates/errors/public_403.html +msgid "Permission Denied (403)" +msgstr "" + +#: templates/errors/assistant_403.html +#, python-format +msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." +msgstr "" + +#: templates/errors/database_limit_warning.html +#, python-format +msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." +msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." +msgstr[0] "" +msgstr[1] "" + +#: templates/errors/legacy_sendgrid_warning.html +msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." +msgstr "" + +#: templates/errors/public_403.html +#, python-format +msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." +msgstr "" + +#: templates/errors/public_403.html +#, python-format +msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." +msgstr "" + +#: templates/footer.html +#, python-format +msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" +msgstr "" + +#: templates/footer.html +#, python-format +msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" +msgstr "" + +#: templates/footer.html +msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." +msgstr "" + +#: templates/footer.html +#, python-format +msgid "For a tournament of this size, we suggest a donation of $%(amount)s." +msgstr "" + +#: templates/footer.html +msgid "Learn more about donating." +msgstr "" + +#: templates/footer.html +msgid "Donations to Tabbycat from individuals or organisations are much appreciated." +msgstr "" + +#: templates/footer.html +msgid "Still timing debates with the stopwatch app?" +msgstr "" + +#: templates/footer.html +#, python-format +msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." +msgstr "" + +#: templates/footer.html +msgid "Our Organisation" +msgstr "" + +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +msgstr "" + +#: templates/footer.html +msgid "Language" +msgstr "" + +#: templates/footer.html +msgid "GitHub" +msgstr "" + +#: templates/footer.html +msgid "Documentation" +msgstr "" + +#: templates/footer.html +msgid "Support" +msgstr "" + +#: templates/footer.html +msgid "Facebook" +msgstr "" + +#: templates/footer.html +msgid "Set Up A Copy" +msgstr "" + +#: templates/footer.html +msgid "Change Language" +msgstr "" + +#: templates/footer.html +msgid "Use this language" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Tabbycat Logo" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Site Home" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "New Tournament" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Edit Database" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Admin Area" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Assistant Area" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Public Area" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Overview" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Setup" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Configuration" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Import Data" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html +msgid "Participants" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Private URLs" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Emails" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Preformed Panels" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Export XML" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Sides" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +msgid "People's Status" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Rooms' Status" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Feedback" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Latest" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Important" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Comments" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Find by Source" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Find by Target" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Unsubmitted" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Add Feedback" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Bulk Update" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Standings" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "All Teams" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Teams" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +#, python-format +msgid "%(category)s Teams" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "All Speakers" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +#, python-format +msgid "%(category)s Speakers" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Replies" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Motions" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Diversity" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Breaks" +msgstr "" + +#: templates/nav/admin_nav.html +#, python-format +msgid "%(category)s" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Adjudicators'" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Edit Categories" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Edit Eligibility" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Log Out" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Enter Results" +msgstr "" + +#: templates/nav/assistant_nav.html templates/nav/public_nav.html +msgid "Enter Feedback" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Participants List" +msgstr "" + +#: templates/nav/assistant_nav.html templates/nav/public_nav.html +msgid "Institutions" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Code Names" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "View Identifiers" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Room's Status" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Display/Print Draw" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Team Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Speaker Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Replies Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Adjudicator Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Motions Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "By round" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Globally" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Draws" +msgstr "" + +#: templates/nav/public_nav.html +msgid "No Draws Available" +msgstr "" + +#: templates/nav/public_nav.html +#, python-format +msgid "Draw for %(round)s" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Current Draws" +msgstr "" + +#: templates/nav/public_nav.html templates/nav/round_panel.html +msgid "Results" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Break" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Feedback Progress" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Enter Ballot" +msgstr "" + +#: templates/nav/round_panel.html +msgid "Availability" +msgstr "" + +#: templates/nav/round_panel.html +msgid "Draw" +msgstr "" + +#: templates/nav/round_panel.html +msgid "Display" +msgstr "" + +#: templates/nav/top_nav_base.html +#, python-format +msgid "Administrator area for %(tournament)s" +msgstr "" + +#: templates/nav/top_nav_base.html +#, python-format +msgid "Assistant area for %(tournament)s" +msgstr "" + +#: templates/nav/top_nav_base.html +#, python-format +msgid "Public area for %(tournament)s" +msgstr "" + +#: templates/nav/top_nav_base.html +msgid "Login" +msgstr "" + +#: templates/registration/logged_out.html +msgid "Goodbye" +msgstr "" + +#: templates/registration/logged_out.html +#, python-format +msgid "You have been logged out. Log in again?" +msgstr "" + +#: templates/registration/login.html +msgctxt "page title" +msgid "Login" +msgstr "" + +#: templates/registration/login.html +msgctxt "page title" +msgid "Log in to Tabbycat" +msgstr "" + +#: templates/registration/login.html +msgid "Your username and password didn't match." +msgstr "" + +#: templates/registration/login.html +msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." +msgstr "" + +#: templates/registration/login.html +msgid "Please log in to see this page." +msgstr "" + +#: templates/registration/password_change_done.html +msgctxt "page title" +msgid "Password changed" +msgstr "" + +#: templates/registration/password_change_done.html +msgid "Your password has been changed." +msgstr "" + +#: templates/registration/password_change_done.html +msgid "Go to the home page" +msgstr "" + +#: templates/registration/password_change_form.html +msgctxt "page title" +msgid "Password Change" +msgstr "" + +#: templates/registration/password_change_form.html +#, python-format +msgid "API Token: %(api_token)s" +msgstr "" + +#: templates/registration/password_change_form.html +msgid "The API token will allow you to authorize external applications to access the site as staff." +msgstr "" + +#: templates/registration/password_change_form.html +msgid "Please enter your old password, then enter a new one." +msgstr "" + +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html +msgctxt "button" +msgid "Change my password" +msgstr "" + +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html +msgid "Cancel and go back to the site home page" +msgstr "" + +#: templates/registration/password_reset_complete.html +msgctxt "page title" +msgid "Password reset complete" +msgstr "" + +#: templates/registration/password_reset_complete.html +msgid "Your password has been reset." +msgstr "" + +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html +msgid "Go to the login page" +msgstr "" + +#: templates/registration/password_reset_confirm.html +msgctxt "page title" +msgid "Password Reset Confirmation" +msgstr "" + +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html +msgctxt "page title" +msgid "Password Reset" +msgstr "" + +#: templates/registration/password_reset_confirm.html +msgid "Please enter a new password (twice):" +msgstr "" + +#: templates/registration/password_reset_confirm.html +msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." +msgstr "" + +#: templates/registration/password_reset_done.html +msgctxt "page title" +msgid "Password reset email sent" +msgstr "" + +#: templates/registration/password_reset_done.html +msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." +msgstr "" + +#: templates/registration/password_reset_done.html +msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." +msgstr "" + +#: templates/registration/password_reset_email.html +#, python-format +msgid "Hi, %(user)s!" +msgstr "" + +#: templates/registration/password_reset_email.html +#, python-format +msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." +msgstr "" + +#: templates/registration/password_reset_email.html +msgid "If this was you, follow the link below to reset your password:" +msgstr "" + +#: templates/registration/password_reset_email.html +#, python-format +msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." +msgstr "" + +#: templates/registration/password_reset_form.html +msgid "Enter your email address below, and we'll email you a password reset link." +msgstr "" + +#: templates/registration/password_reset_form.html +msgid "Please enter a valid email address." +msgstr "" + +#: templates/registration/password_reset_form.html users/forms.py +msgid "Email address" +msgstr "" + +#: templates/registration/password_reset_form.html +msgctxt "button" +msgid "Reset my password" +msgstr "" + +#: templates/registration/password_reset_form.html +msgid "Back to the login page" +msgstr "" + +#: templates/registration/password_reset_subject.txt +#, python-format +msgid "Password reset on Tabbycat site at %(domain)s" +msgstr "" + +#: urls.py +#, python-format +msgid "Hi, %(user)s — you just logged in!" +msgstr "" + +#: urls.py +msgid "Welcome! You just logged in!" +msgstr "" + +#: users/admin.py +msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." +msgstr "" + +#: users/admin.py +msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." +msgstr "" + +#: users/templates/admin/auth/delete_user_warning.html +msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." +msgstr "" + +#: users/templates/signup.html +msgid "Sign-Up" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Administrator Account" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Assistant Account" +msgstr "" + +#: users/templates/signup.html +msgid "Create Account" +msgstr "" + +#: users/views.py +msgid "You have successfully created a new administrator account." +msgstr "" + +#: users/views.py +msgid "You have successfully created a new assistant account." +msgstr "" + +#: users/views.py +msgid "Whoops! It looks like someone's already created the first user account. Please log in." +msgstr "" + +#: users/views.py +#, python-format +msgid "Welcome! You've created an account for %s." +msgstr "" + diff --git a/tabbycat/locale/bg/LC_MESSAGES/djangojs.po b/tabbycat/locale/bg/LC_MESSAGES/djangojs.po new file mode 100644 index 00000000000..17d9e4897e8 --- /dev/null +++ b/tabbycat/locale/bg/LC_MESSAGES/djangojs.po @@ -0,0 +1,554 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-14 04:50+1100\n" +"PO-Revision-Date: 2021-01-31 10:16\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/djangojs.po\n" +"X-Crowdin-File-ID: 962\n" + +#: checkins/templates/CheckInScanContainer.vue: +msgid "Scan Using Camera" +msgstr "" + +#: checkins/templates/CheckInScanContainer.vue: +msgid "Stop Camera Scan" +msgstr "" + +#: checkins/templates/CheckInScanContainer.vue: +msgid "Turn On Sounds" +msgstr "" + +#. Translators: %1: Time of checkin, %2: Barcode number, %3: Name of "owner" +#: checkins/templates/CheckInScanContainer.vue: +msgid "%1 checked in %2: %3" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "All" +msgstr "" + +#. Translators: %1: Option name +#: checkins/templates/CheckInStatusContainer.vue: +msgid "By %1" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "No matching rooms found." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "No matching people found." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "This page will live-update with new check-ins as they occur although the initial list may be up to a minute old." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid " All" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid " All" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "Click to check-in manually" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "saving..." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "This person does not have a check-in identifier so they can't be checked in" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "If you want to view this page without the sidebar (i.e. for displaying to an auditorium) you can use the assistant version." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "Open the assistant version." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "Click to undo a check-in" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 of no institutional affiliation with identifier of %3" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 of no institutional affiliation with no assigned identifier" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 from %3 with identifier of %4" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 from %3 with no assigned identifier" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1 (Present; id=%2)" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1 (Absent; id=%2)" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a team with speakers %2" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "Anonymous (due to team codes)" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "Anon" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "Independent" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (%2) with identifier of %3" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (no category) with identifier of %2" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (%2) with no assigned identifier" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (no category) with no assigned identifier" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "Uncategorised" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "No Category" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "Priority %1" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 %4" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 on %4 (Chair)" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 on %4 (Panellist)" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 on %4 (Trainee)" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "ID %1," +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "Room:" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "Chair for Panel of %1" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: +msgid "Solo Chair" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: +msgid "Panellist" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: +msgid "Trainee" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "Team" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Mark speeches %1 to %2; %3." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Mark replies %1 to %2; %3." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Return ballots to %1." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "The motion is %1" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Debated" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Circle %1" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "%1: %2" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Aff Veto" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Neg Veto" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: printing/templates/PrintableTeamScores.vue: +msgid "%1:" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "tab entry" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "tab check" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: checkins/templates/PeopleStatusMixin.vue: +msgid "Unaffiliated" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "no ½ marks" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "½ marks are allowed" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "decimal marks are allowed" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "%1 (%2, %3)" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Adjudicating with %1." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "; " +msgstr "" + +#: printing/templates/PrintableFeedback.vue: +msgid "Did %1 deliver the adjudication?" +msgstr "" + +#: printing/templates/PrintableFeedback.vue: printing/templates/PrintableFeedbackQuestion.vue: +msgid "Yes" +msgstr "" + +#: printing/templates/PrintableFeedback.vue: +msgid "No, I am submitting feedback on:" +msgstr "" + +#: printing/templates/PrintableFeedbackQuestion.vue: +msgid "Unsure" +msgstr "" + +#: printing/templates/PrintableFeedbackQuestion.vue: +msgid "No" +msgstr "" + +#: printing/templates/PrintableScoresheet.vue: +msgid "Which team won the debate:" +msgstr "" + +#: printing/templates/PrintableScoresheet.vue: +msgid "By how many points did they win:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "%1, %2" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "IMPORTANT: Check and explicitly note if a speaker gives multiple speeches" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Score:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Circle the last digit of the %1's score:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Circle Rank:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Total:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Circle the last digit of the team's total:" +msgstr "" + +#: templates/tables/TablesContainer.vue:8 +msgid "Find in Table" +msgstr "" + +#: templates/tables/CheckboxTables.vue:30 +msgid "Set All Breaking as Available" +msgstr "" + +#: templates/tables/CheckboxTables.vue:36 +msgid "Set all the availabilities to exactly match what they were in the previous round." +msgstr "" + +#: templates/tables/CheckboxTables.vue:37 +msgid "Match" +msgstr "" + +#: templates/tables/CheckboxTables.vue:41 +msgid "Set all availabilities to exactly match check-ins." +msgstr "" + +#: templates/tables/CheckboxTables.vue:44 +msgid "Match Check-Ins" +msgstr "" + +#: templates/tables/CheckboxTables.vue: +msgid "Set people as available only if they have a check-in and are currently unavailable — i.e. it will not overwrite any existing availabilities." +msgstr "" + +#: templates/tables/CheckboxTables.vue:47 +msgid "Copy From Check-Ins" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "Ballots Status" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "Latest Actions" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "No Actions Yet" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "Latest Results" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "No Confirmed Results Yet" +msgstr "" + +#: participants/templates/DiversityContainer.vue:6 +msgid "Speaker Demographics" +msgstr "" + +#: participants/templates/DiversityContainer.vue:11 +msgid "No Gender Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:18 +msgid "No Speaker Categories Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:33 +msgid "Speaker Results" +msgstr "" + +#: participants/templates/DiversityContainer.vue:36 +msgid "speakers with gender data" +msgstr "" + +#: participants/templates/DiversityContainer.vue:38 +msgid "speaker scores total" +msgstr "" + +#: participants/templates/DiversityContainer.vue:49 +msgid "No Region Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:56 +msgid "Adjudicator Demographics" +msgstr "" + +#: participants/templates/DiversityContainer.vue:68 +msgid "No Position Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:83 +msgid "Adjudicator Results" +msgstr "" + +#: participants/templates/DiversityContainer.vue:86 +msgid "adjudicators with gender data" +msgstr "" + +#: participants/templates/DiversityContainer.vue:88 +msgid "feedback scores total" +msgstr "" + +#: participants/templates/DiversityContainer.vue:94 +msgid "No Adjudicator Ratings Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:99 +msgid "No Adjudicator-Adjudicator Feedback Information" +msgstr "" + +#: results/templates/ResultsStats.vue:10 +msgid "Checked-In" +msgstr "" + +#: results/templates/ResultsStats.vue:15 +msgid "Not Checked-In" +msgstr "" + +#: results/templates/ResultsStats.vue:19 +msgid "Ballot Check-Ins" +msgstr "" + +#: results/templates/ResultsStats.vue:26 +msgid "Unknown" +msgstr "" + +#: results/templates/ResultsStats.vue:31 +msgid "Unconfirmed" +msgstr "" + +#: results/templates/ResultsStats.vue:36 +msgid "Confirmed" +msgstr "" + +#: results/templates/ResultsStats.vue:40 +msgid "Ballot Statuses" +msgstr "" + +#: results/templates/BallotsCell.vue:18 +msgid "You cannot confirm this ballot because you entered it" +msgstr "" + +#: results/templates/BallotsCell.vue:34 +msgid "Add Ballot" +msgstr "" + +#: results/templates/BallotsCell.vue:79 +msgid "Re-Edit" +msgstr "" + +#: results/templates/BallotsCell.vue:81 +msgid "Review" +msgstr "" + +#: utils/templates/AutoSaveCounter.vue:4 +msgid "No changes" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:8 +msgid "Return to Draw" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:15 +msgid "Auto-Prioritise" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:17 +msgid "Auto-Allocate" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Break" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Gender" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Rank" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Region" +msgstr "" + +#. Translators: Short for "Venue Category" +#: utils/templates/DragAndDropActions.vue:65 +msgid "Category" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:5 +msgid "The debate's bracket" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:9 +msgid "The bracket range of the hypothetical debate" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:20 +msgid "The total number of live break categories across all teams" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:26 +msgid "The estimated total number of live break categories across all teams of the hypothetical debate" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:33 +msgid "This debate's priority" +msgstr "" + +#: draw/templates/InlineTeam.vue:41 +msgid "No code name set" +msgstr "" + diff --git a/tabbycat/motions/locale/bg/LC_MESSAGES/django.po b/tabbycat/motions/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..29c72a82d0b --- /dev/null +++ b/tabbycat/motions/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,399 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" +"Last-Translator: \n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 936\n" + +#: motions/apps.py motions/templates/public_motions.html +msgid "Motions" +msgstr "" + +#: motions/models.py +msgid "text" +msgstr "" + +#: motions/models.py +msgid "The full motion e.g., \"This House would straighten all bananas\"" +msgstr "" + +#: motions/models.py +msgid "reference" +msgstr "" + +#: motions/models.py +msgid "Shortcode for the motion, e.g., \"Bananas\"" +msgstr "" + +#: motions/models.py +msgid "info slide" +msgstr "" + +#: motions/models.py +msgid "The information slide for this topic; if it has one" +msgstr "" + +#: motions/models.py +msgid "tournament" +msgstr "" + +#: motions/models.py +msgid "rounds" +msgstr "" + +#: motions/models.py +msgid "motion" +msgstr "" + +#: motions/models.py +msgid "motions" +msgstr "" + +#: motions/models.py +msgid "debate team" +msgstr "" + +#: motions/models.py +msgid "preferences" +msgstr "" + +#: motions/models.py +msgid "ballot submission" +msgstr "" + +#: motions/models.py +msgid "debate team motion preference" +msgstr "" + +#: motions/models.py +msgid "debate team motion preferences" +msgstr "" + +#: motions/models.py +msgid "round" +msgstr "" + +#: motions/models.py +msgid "sequence number" +msgstr "" + +#: motions/models.py +msgid "The order in which motions are displayed" +msgstr "" + +#: motions/models.py +msgid "round motion" +msgstr "" + +#: motions/models.py +msgid "round motions" +msgstr "" + +#: motions/statistics.py +msgid "extremely strong evidence" +msgstr "" + +#: motions/statistics.py +msgid "strong evidence" +msgstr "" + +#: motions/statistics.py +msgid "moderate evidence" +msgstr "" + +#: motions/statistics.py +msgid "weak evidence" +msgstr "" + +#: motions/statistics.py +msgid "very weak evidence" +msgstr "" + +#: motions/statistics.py +msgid "extremely weak evidence" +msgstr "" + +#: motions/statistics.py +msgid "balance inconclusive" +msgstr "" + +#: motions/statistics.py +msgid "too few debates to get a meaningful statistic" +msgstr "" + +#: motions/statistics.py +#, python-format +msgid "imbalanced at %(level)s level" +msgstr "" + +#: motions/statistics.py +#, python-format +msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." +msgstr "" + +#: motions/statistics.py +msgid "probably balanced" +msgstr "" + +#: motions/statistics.py +#, python-format +msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." +msgstr "" + +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html +msgid "View Info Slide" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "results from %(ndebates)s debate" +msgid_plural "results from %(ndebates)s debates" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" +msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" +msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_bp_elim.html +msgid "advanced" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +msgctxt "abbreviation for 'advanced', used when not enough space" +msgid "adv." +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +msgid "eliminated" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +msgctxt "abbreviation for 'eliminated', used when not enough space" +msgid "elim." +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "%(side)s results distribution" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html +msgid "No results for this motion" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Government" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Opposition" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Average Points per bench" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Opening" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Closing" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Average Points per half" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +#, python-format +msgid "average points per position (%(ndebates)s debate)" +msgid_plural "average points per position (%(ndebates)s debates)" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_bp_prelim.html +#, python-format +msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" +msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_bp_prelim.html +#, python-format +msgid "%(side)s results" +msgstr "" + +#: motions/templates/motion_statistics_twoteam.html +#, python-format +msgid "%(count)s %(side)s win" +msgid_plural "%(count)s %(side)s wins" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_twoteam.html +msgid "No teams debated this motion" +msgstr "" + +#: motions/templates/motion_statistics_twoteam.html +#, python-format +msgid "%(count)s %(side)s veto" +msgid_plural "%(count)s %(side)s vetoes" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_twoteam.html +msgid "No teams vetoed this motion" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Edit Motion" +msgid_plural "Edit Motions" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motions_edit.html +msgid "Display Draw" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Reuse Motions from Last Round" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Use Existing Motions" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motions_edit.html +msgid "Save Motion" +msgid_plural "Save Motions" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motions_info.html +msgid "Info Slide" +msgstr "" + +#: motions/templates/public_motions.html +msgid "There are no motions available for this round." +msgstr "" + +#: motions/templates/public_motions.html +msgid "The motions for this round have not been released." +msgstr "" + +#: motions/templates/public_motions.html +msgid "The motion for this round has not been released." +msgstr "" + +#: motions/templates/show.html +#, python-format +msgid "Reveal Info Slide for %(round)s" +msgid_plural "Reveal Info Slides for %(round)s" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/show.html +#, python-format +msgid "Reveal Motion for %(round)s" +msgid_plural "Reveal Motions for %(round)s" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/show.html +msgid "There are no motions for this round entered into Tabbycat." +msgstr "" + +#: motions/utils.py +msgid "Not all latest ballots list the same motion, so could not be merged." +msgstr "" + +#: motions/utils.py +msgid "Motion vetos are inconsistent, so could not be merged." +msgstr "" + +#: motions/views.py +msgid "The motion has been saved." +msgstr "" + +#: motions/views.py +#, python-format +msgid "%(count)d motion has been saved." +msgid_plural "%(count)d motions have been saved." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +#, python-format +msgid "%(count)d motion has been deleted." +msgid_plural "%(count)d motions have been deleted." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "" + +#: motions/views.py +#, python-format +msgid "Reused the motion from the previous round." +msgid_plural "Reused the %(count)d motions from the previous round." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +msgid "Round Motions" +msgstr "" + +#: motions/views.py +msgid "Motion Statistics" +msgstr "" + diff --git a/tabbycat/notifications/locale/bg/LC_MESSAGES/django.po b/tabbycat/notifications/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..fd2a4460591 --- /dev/null +++ b/tabbycat/notifications/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,416 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" +"Last-Translator: philip_tc\n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/notifications/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 938\n" + +#: notifications/apps.py +msgid "Notifications" +msgstr "" + +#: notifications/forms.py +msgid "Recipient email address" +msgstr "" + +#: notifications/forms.py +#, python-format +msgid "Test email from %(host)s" +msgstr "" + +#: notifications/forms.py +#, python-format +msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" +msgstr "" + +#: notifications/forms.py +msgid "Subject" +msgstr "" + +#: notifications/forms.py +msgid "Message" +msgstr "" + +#: notifications/models.py +msgid "email" +msgstr "" + +#: notifications/models.py +msgid "SMS" +msgstr "" + +#: notifications/models.py +msgid "recipient" +msgstr "" + +#: notifications/models.py +msgid "method" +msgstr "" + +#: notifications/models.py +msgid "context" +msgstr "" + +#: notifications/models.py +msgid "notification" +msgstr "" + +#: notifications/models.py +msgid "timestamp" +msgstr "" + +#: notifications/models.py +msgid "sent message" +msgstr "" + +#: notifications/models.py +msgid "sent messages" +msgstr "" + +#: notifications/models.py +msgid "team points" +msgstr "" + +#: notifications/models.py +msgid "ballot confirmed" +msgstr "" + +#: notifications/models.py +msgid "feedback URL" +msgstr "" + +#: notifications/models.py +msgid "ballot URL" +msgstr "" + +#: notifications/models.py +msgid "landing page URL" +msgstr "" + +#: notifications/models.py +msgid "adjudicator draw released" +msgstr "" + +#: notifications/models.py +msgid "team registration" +msgstr "" + +#: notifications/models.py +msgid "adjudicator registration" +msgstr "" + +#: notifications/models.py +msgid "motion(s) released" +msgstr "" + +#: notifications/models.py +msgid "team draw released" +msgstr "" + +#: notifications/models.py +msgid "custom message" +msgstr "" + +#: notifications/models.py +msgid "event" +msgstr "" + +#: notifications/models.py +msgid "tournament" +msgstr "" + +#: notifications/models.py +msgid "round" +msgstr "" + +#: notifications/models.py +msgid "subject template" +msgstr "" + +#: notifications/models.py +msgid "body template" +msgstr "" + +#: notifications/models.py +msgid "bulk notification" +msgstr "" + +#: notifications/models.py +msgid "bulk notifications" +msgstr "" + +#: notifications/models.py +msgid "Processed" +msgstr "" + +#: notifications/models.py +msgid "Dropped" +msgstr "" + +#: notifications/models.py +msgid "Deferred" +msgstr "" + +#: notifications/models.py +msgid "Delivered" +msgstr "" + +#: notifications/models.py +msgid "Bounced" +msgstr "" + +#: notifications/models.py +msgid "Opened" +msgstr "" + +#: notifications/models.py +msgid "Clicked" +msgstr "" + +#: notifications/models.py +msgid "Unsubscribed" +msgstr "" + +#: notifications/models.py +msgid "Marked as spam" +msgstr "" + +#: notifications/models.py +msgid "Unsubscribed from group" +msgstr "" + +#: notifications/models.py +msgid "Resubscribed to group" +msgstr "" + +#: notifications/models.py +msgid "email message" +msgstr "" + +#: notifications/models.py +msgid "email status" +msgstr "" + +#: notifications/models.py +msgid "email statuses" +msgstr "" + +#: notifications/templates/email_participants.html +#, python-format +msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." +msgstr "" + +#: notifications/templates/email_participants.html +#, python-format +msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." +msgstr "" + +#: notifications/templates/email_participants.html +msgid "Send Message(s)" +msgstr "" + +#: notifications/templates/email_statuses.html +msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." +msgstr "" + +#: notifications/templates/notifications_nav.html notifications/views.py +msgid "Email Statuses" +msgstr "" + +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html +msgid "Send Test Email" +msgstr "" + +#: notifications/templates/notifications_nav.html +msgid "Send Custom Email" +msgstr "" + +#: notifications/templates/test_email.html +msgctxt "page title" +msgid "Send Test Email" +msgstr "" + +#: notifications/templates/test_email.html +msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." +msgstr "" + +#: notifications/templates/test_email.html +#, python-format +msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." +msgstr "" + +#: notifications/templates/test_email.html +msgid "Go back to the site home page" +msgstr "" + +#: notifications/utils.py +msgid "the chair" +msgstr "" + +#: notifications/utils.py +msgid "the only" +msgstr "" + +#: notifications/utils.py +msgid "a panellist" +msgstr "" + +#: notifications/utils.py +msgid "a trainee" +msgstr "" + +#: notifications/utils.py +msgid "TBA" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "%(tournament)s %(round)s @ %(room)s" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" +msgstr "" + +#: notifications/utils.py +msgid "Win" +msgstr "" + +#: notifications/utils.py +msgid "Loss" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(text)s (%(ref)s)
  • " +msgstr "" + +#: notifications/utils.py +msgid ", " +msgstr "" + +#: notifications/views.py +#, python-format +msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" +msgstr "" + +#: notifications/views.py +msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." +msgstr "" + +#: notifications/views.py +#, python-format +msgid "There was an error sending the test email: %(error)s" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "A test email has been sent to %(recipient)s." +msgstr "" + +#: notifications/views.py +msgid "N/A" +msgstr "" + +#: notifications/views.py +msgid "Not known" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "%(status)s @ %(time)s" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "@ %s" +msgstr "" + +#: notifications/views.py +msgid "Timeline" +msgstr "" + +#: notifications/views.py +msgid "Participant" +msgstr "" + +#: notifications/views.py +msgid "Email address" +msgstr "" + +#: notifications/views.py +msgid "Status" +msgstr "" + +#: notifications/views.py +msgid "Time" +msgstr "" + +#: notifications/views.py +msgid "Email Participants" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "%(email_count)s email has been queued for sending." +msgid_plural "%(email_count)s emails have been queued for sending." +msgstr[0] "" +msgstr[1] "" + +#: notifications/views.py +msgid "No emails were sent — likely because no recipients were selected." +msgstr "" + +#: notifications/views.py +msgid "Send Email" +msgstr "" + +#: notifications/views.py +msgid "Not Provided" +msgstr "" + +#: notifications/views.py +msgid "Role" +msgstr "" + +#: notifications/views.py +msgid "Adjudicator" +msgstr "" + +#: notifications/views.py +msgid "Speaker" +msgstr "" + +#: notifications/views.py +msgid "Speakers" +msgstr "" + +#: notifications/views.py +msgid "Adjudicators" +msgstr "" + diff --git a/tabbycat/options/locale/bg/LC_MESSAGES/django.po b/tabbycat/options/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..aeedad8b00b --- /dev/null +++ b/tabbycat/options/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,1618 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" +"Last-Translator: philip_tc\n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/options/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 940\n" + +#: options/apps.py +msgid "Tournament Options" +msgstr "" + +#: options/models.py +msgid "instance" +msgstr "" + +#: options/models.py +msgid "tournament preference" +msgstr "" + +#: options/models.py +msgid "tournament preferences" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Score Rules" +msgstr "" + +#: options/preferences.py +msgid "Minimum allowed score for substantive speeches" +msgstr "" + +#: options/preferences.py +msgid "Minimum speaker score" +msgstr "" + +#: options/preferences.py +msgid "Maximum speaker score" +msgstr "" + +#: options/preferences.py +msgid "Maximum allowed score for substantive speeches" +msgstr "" + +#: options/preferences.py +msgid "Speaker score step" +msgstr "" + +#: options/preferences.py +msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" +msgstr "" + +#: options/preferences.py +msgid "The largest amount by which one team can beat another (0 means no limit)" +msgstr "" + +#: options/preferences.py +msgid "Maximum margin" +msgstr "" + +#: options/preferences.py +msgid "Minimum allowed score for reply speeches" +msgstr "" + +#: options/preferences.py +msgid "Minimum reply score" +msgstr "" + +#: options/preferences.py +msgid "Maximum allowed score for reply speeches" +msgstr "" + +#: options/preferences.py +msgid "Maximum reply score" +msgstr "" + +#: options/preferences.py +msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" +msgstr "" + +#: options/preferences.py +msgid "Reply score step" +msgstr "" + +#: options/preferences.py +msgid "If checked, a team's winning margin includes dissenting adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Margin includes dissenters" +msgstr "" + +#: options/preferences.py +msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" +msgstr "" + +#: options/preferences.py +msgid "Team score includes ghosts" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Draw Rules" +msgstr "" + +#: options/preferences.py +msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" +msgstr "" + +#: options/preferences.py +msgid "Minimum adjudicator score to vote" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by adjudicator auto-allocator for conflicts" +msgstr "" + +#: options/preferences.py +msgid "Adjudicator conflict penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by adjudicator auto-allocator for history" +msgstr "" + +#: options/preferences.py +msgid "Adjudicator history penalty" +msgstr "" + +#: options/preferences.py +msgid "Penality applied by preformed panel auto-allocator for priority mismatch" +msgstr "" + +#: options/preferences.py +msgid "Importance mismatch penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" +msgstr "" + +#: options/preferences.py +msgid "Team institution penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" +msgstr "" + +#: options/preferences.py +msgid "Team history penalty" +msgstr "" + +#: options/preferences.py +msgid "If checked, the draw will try to avoid pairing teams against their own institution" +msgstr "" + +#: options/preferences.py +msgid "Avoid same institution" +msgstr "" + +#: options/preferences.py +msgid "If checked, the draw will try to avoid having teams see each other twice" +msgstr "" + +#: options/preferences.py +msgid "Avoid team history" +msgstr "" + +#: options/preferences.py +msgid "How odd brackets are resolved (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Odd bracket resolution method" +msgstr "" + +#: options/preferences.py +msgid "Pull up from top" +msgstr "" + +#: options/preferences.py +msgid "Pull up from bottom" +msgstr "" + +#: options/preferences.py +msgid "Pull up from middle" +msgstr "" + +#: options/preferences.py +msgid "Pull up at random" +msgstr "" + +#: options/preferences.py +msgid "Intermediate brackets" +msgstr "" + +#: options/preferences.py +msgid "Intermediate brackets with bubble-up-bubble-down" +msgstr "" + +#: options/preferences.py +msgid "Intermediate 1 (pre-allocated sides)" +msgstr "" + +#: options/preferences.py +msgid "Intermediate 2 (pre-allocated sides)" +msgstr "" + +#: options/preferences.py +msgid "How affirmative/negative positions are assigned (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Side allocations method" +msgstr "" + +#: options/preferences.py +msgid "Random" +msgstr "" + +#: options/preferences.py +msgid "Balance" +msgstr "" + +#: options/preferences.py +msgid "Pre-allocated" +msgstr "" + +#: options/preferences.py +msgid "Manually enter from ballot" +msgstr "" + +#: options/preferences.py +msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." +msgstr "" + +#: options/preferences.py +msgid "Pairing method" +msgstr "" + +#: options/preferences.py +msgid "Slide" +msgstr "" + +#: options/preferences.py +msgid "Fold" +msgstr "" + +#: options/preferences.py +msgid "Adjacent" +msgstr "" + +#: options/preferences.py +msgid "Fold top, adjacent rest" +msgstr "" + +#: options/preferences.py +msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Conflict avoidance method" +msgstr "" + +#: options/preferences.py +msgid "Off" +msgstr "" + +#: options/preferences.py +msgid "One-up-one-down" +msgstr "" + +#: options/preferences.py +msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." +msgstr "" + +#: options/preferences.py +msgid "Pullup restriction" +msgstr "" + +#: options/preferences.py +msgid "No restriction" +msgstr "" + +#: options/preferences.py +msgid "Choose from teams who have been pulled up the fewest times so far" +msgstr "" + +#: options/preferences.py +msgid "Choose from teams with the lowest draw strength by wins so far" +msgstr "" + +#: options/preferences.py +msgid "Choose from teams with the lowest draw strength by speaks so far" +msgstr "" + +#: options/preferences.py +msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." +msgstr "" + +#: options/preferences.py +msgid "BP pullup distribution" +msgstr "" + +#: options/preferences.py +msgid "Anywhere in bracket" +msgstr "" + +#: options/preferences.py +msgid "All in the same room (not WUDC-compliant)" +msgstr "" + +#: options/preferences.py +msgid "In BP, which position cost function to use (see documentation for details)" +msgstr "" + +#: options/preferences.py +msgid "BP position cost" +msgstr "" + +#: options/preferences.py +msgid "Simple" +msgstr "" + +#: options/preferences.py +msgid "Rényi entropy" +msgstr "" + +#: options/preferences.py +msgid "Population variance" +msgstr "" + +#: options/preferences.py +msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." +msgstr "" + +#: options/preferences.py +msgid "Rényi order (BP)" +msgstr "" + +#: options/preferences.py +msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." +msgstr "" + +#: options/preferences.py +msgid "BP position cost exponent" +msgstr "" + +#: options/preferences.py +msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." +msgstr "" + +#: options/preferences.py +msgid "BP assignment method" +msgstr "" + +#: options/preferences.py +msgid "Hungarian algorithm (not WUDC-compliant)" +msgstr "" + +#: options/preferences.py +msgid "Hungarian algorithm with preshuffling" +msgstr "" + +#: options/preferences.py +msgid "Automatically make all adjudicators available for all rounds" +msgstr "" + +#: options/preferences.py +msgid "Skip adjudicator check-ins" +msgstr "" + +#: options/preferences.py +msgid "Hide panellist positions in the UI (and don't allocate them)" +msgstr "" + +#: options/preferences.py +msgid "No panellist adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Hide trainee positions in the UI (and don't allocate them)" +msgstr "" + +#: options/preferences.py +msgid "No trainee adjudicators" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Feedback" +msgstr "" + +#: options/preferences.py +msgid "Minimum possible adjudicator score that can be given" +msgstr "" + +#: options/preferences.py +msgid "Minimum adjudicator score" +msgstr "" + +#: options/preferences.py +msgid "Maximum possible adjudicator score that can be given" +msgstr "" + +#: options/preferences.py +msgid "Maximum adjudicator score" +msgstr "" + +#: options/preferences.py +msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" +msgstr "" + +#: options/preferences.py +msgid "Allow and expect feedback to be submitted by" +msgstr "" + +#: options/preferences.py +msgid "Chairs on panellists and trainees" +msgstr "" + +#: options/preferences.py +msgid "Panellists on chairs, chairs on panellists and trainees" +msgstr "" + +#: options/preferences.py +msgid "Panellists and trainees on chairs, vice-versa" +msgstr "" + +#: options/preferences.py +msgid "All adjudicators (including trainees) on each other" +msgstr "" + +#: options/preferences.py +msgid "Expect feedback to be submitted by teams on" +msgstr "" + +#: options/preferences.py +msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" +msgstr "" + +#: options/preferences.py +msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" +msgstr "" + +#: options/preferences.py +msgid "All adjudicators in their panels (including trainees)" +msgstr "" + +#: options/preferences.py +msgid "Show unexpected feedback submissions in participants pages" +msgstr "" + +#: options/preferences.py +msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" +msgstr "" + +#: options/preferences.py +msgid "Show if an adjudicator is a trainee (unaccredited)" +msgstr "" + +#: options/preferences.py +msgid "Show unaccredited" +msgstr "" + +#: options/preferences.py +msgid "Any explanatory text needed to introduce the feedback form" +msgstr "" + +#: options/preferences.py +msgid "Feedback introduction/explanation" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Debate Rules" +msgstr "" + +#: options/preferences.py +msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" +msgstr "" + +#: options/preferences.py +msgid "Teams in debate" +msgstr "" + +#: options/preferences.py +msgid "Two-team format" +msgstr "" + +#: options/preferences.py +msgid "British Parliamentary (four teams)" +msgstr "" + +#: options/preferences.py +msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." +msgstr "" + +#: options/preferences.py +msgid "Ballots per debate, preliminary rounds" +msgstr "" + +#: options/preferences.py +msgid "One ballot per voting adjudicator" +msgstr "" + +#: options/preferences.py +msgid "Consensus ballot (one ballot per debate)" +msgstr "" + +#: options/preferences.py +msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." +msgstr "" + +#: options/preferences.py +msgid "Ballots per debate, elimination rounds" +msgstr "" + +#: options/preferences.py +msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." +msgstr "" + +#: options/preferences.py +msgid "Winner Declaration in ballot(s)" +msgstr "" + +#: options/preferences.py +msgid "Do not require separate winner selection" +msgstr "" + +#: options/preferences.py +msgid "Require separate winner selection as a check on correct scores" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection to break tied-point debates" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection, overriding scores" +msgstr "" + +#: options/preferences.py +msgid "When ballots should ask for speaker scores." +msgstr "" + +#: options/preferences.py +msgid "Require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Always require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Only require speaker scores in preliminary rounds" +msgstr "" + +#: options/preferences.py +msgid "Never require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "How many substantive speakers on a team" +msgstr "" + +#: options/preferences.py +msgid "Substantive speakers" +msgstr "" + +#: options/preferences.py +msgid "What to call the teams" +msgstr "" + +#: options/preferences.py +msgid "Side names" +msgstr "" + +#: options/preferences.py +msgid "Whether this style features scored reply speeches" +msgstr "" + +#: options/preferences.py +msgid "Reply scores" +msgstr "" + +#: options/preferences.py +msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" +msgstr "" + +#: options/preferences.py +msgid "Require reply speaker to have given a substantive speech" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Standings" +msgstr "" + +#: options/preferences.py +msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" +msgstr "" + +#: options/preferences.py +msgid "Speeches missable for standings eligibility" +msgstr "" + +#: options/preferences.py +msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" +msgstr "" + +#: options/preferences.py +msgid "Replies missable for standings eligibility" +msgstr "" + +#: options/preferences.py +msgid "Metrics to use to rank teams (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Team standings precedence" +msgstr "" + +#: options/preferences.py +#, python-format +msgid "The following metrics can't be listed twice: %(duplicates)s" +msgstr "" + +#: options/preferences.py +msgid "Metrics to calculate, but not used to rank teams" +msgstr "" + +#: options/preferences.py +msgid "Team standings extra metrics" +msgstr "" + +#: options/preferences.py +msgid "Metrics to use to rank speakers (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Speaker standings precedence" +msgstr "" + +#: options/preferences.py +msgid "Metrics to calculate, but not used to rank speakers" +msgstr "" + +#: options/preferences.py +msgid "Speaker standings extra metrics" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Tab Release" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the team tab. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release team tab to public" +msgstr "" + +#: options/preferences.py +msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." +msgstr "" + +#: options/preferences.py +msgid "Top teams cutoff" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the speaker tab. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release speaker tab to public" +msgstr "" + +#: options/preferences.py +msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." +msgstr "" + +#: options/preferences.py +msgid "Top speakers cutoff" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the replies tab. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release replies tab to public" +msgstr "" + +#: options/preferences.py +msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." +msgstr "" + +#: options/preferences.py +msgid "Top replies cutoff" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release motions tab to public" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the feedback scores of all adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Release adjudicator tab to public" +msgstr "" + +#: options/preferences.py +msgid "What (if released) the adjudicator tab shows" +msgstr "" + +#: options/preferences.py +msgid "Adjudicator tab displays" +msgstr "" + +#: options/preferences.py +msgid "Only shows base score" +msgstr "" + +#: options/preferences.py +msgid "Only shows final score" +msgstr "" + +#: options/preferences.py +msgid "Shows base, final, and per-round scores" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release ballots to public" +msgstr "" + +#: options/preferences.py +msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" +msgstr "" + +#: options/preferences.py +msgid "Release all round results to public" +msgstr "" + +#: options/preferences.py +msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release ballots through private URLs" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Data Entry" +msgstr "" + +#: options/preferences.py +msgid "Whether adjudicators can submit ballots themselves, and how they do so" +msgstr "" + +#: options/preferences.py +msgid "Ballot submissions from adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Disabled (tab staff only)" +msgstr "" + +#: options/preferences.py +msgid "Use private URLs" +msgstr "" + +#: options/preferences.py +msgid "Use publicly accessible form" +msgstr "" + +#: options/preferences.py +msgid "Whether participants can submit feedback themselves, and how they do so" +msgstr "" + +#: options/preferences.py +msgid "Feedback submissions from participants" +msgstr "" + +#: options/preferences.py +msgid "If checked, users must enter a password when submitting public feedback and ballots" +msgstr "" + +#: options/preferences.py +msgid "Require password for submission" +msgstr "" + +#: options/preferences.py +msgid "Value of the password required for public submissions, if passwords are required" +msgstr "" + +#: options/preferences.py +msgid "Password for public submission" +msgstr "" + +#: options/preferences.py +msgid "Bypasses double checking by setting ballots to be automatically confirmed" +msgstr "" + +#: options/preferences.py +msgid "Bypass double checking" +msgstr "" + +#: options/preferences.py +msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." +msgstr "" + +#: options/preferences.py +msgid "Enforce blind confirmations" +msgstr "" + +#: options/preferences.py +msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." +msgstr "" + +#: options/preferences.py +msgid "Assistant user access" +msgstr "" + +#: options/preferences.py +msgid "All areas (results entry, draw display, and motions)" +msgstr "" + +#: options/preferences.py +msgid "Just results entry and draw display" +msgstr "" + +#: options/preferences.py +msgid "Only results entry" +msgstr "" + +#: options/preferences.py +msgid "Whether participants can check themselves in/out through their private URL." +msgstr "" + +#: options/preferences.py +msgid "Participant self-checkin" +msgstr "" + +#: options/preferences.py +msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" +msgstr "" + +#: options/preferences.py +msgid "Check-In Window (People)" +msgstr "" + +#: options/preferences.py +msgid "The amount of time (in hours) before a room's check-in event expires" +msgstr "" + +#: options/preferences.py +msgid "Check-In Window (Rooms)" +msgstr "" + +#: options/preferences.py +msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" +msgstr "" + +#: options/preferences.py +msgid "Ballot Digit Checks" +msgstr "" + +#: options/preferences.py +msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." +msgstr "" + +#: options/preferences.py +msgid "Score return location" +msgstr "" + +#: options/preferences.py +msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." +msgstr "" + +#: options/preferences.py +msgid "Feedback return location" +msgstr "" + +#: options/preferences.py +msgid "Lets debates have their status as postponed, as to not block draw generation." +msgstr "" + +#: options/preferences.py +msgid "Enable postponements" +msgstr "" + +#: options/preferences.py +msgid "Have each voting adjudicator submit a separate ballot." +msgstr "" + +#: options/preferences.py +msgid "Individual voting ballots" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Public Features" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing all participants in the tournament" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of participants list" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing all institutions in the tournament" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of institutions list" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing diversity statistics" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of diversity info" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." +msgstr "" + +#: options/preferences.py +msgid "Enable public view of the checkin statuses" +msgstr "" + +#: options/preferences.py +msgid "If the participants list is enabled, displays break category eligibility on that page" +msgstr "" + +#: options/preferences.py +msgid "Show break categories on participants page" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing pre-allocated sides" +msgstr "" + +#: options/preferences.py +msgid "Show pre-allocated sides to public" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing released draws" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of draw" +msgstr "" + +#: options/preferences.py +msgid "Disabled" +msgstr "" + +#: options/preferences.py +msgid "Show a single page for the current round's draw" +msgstr "" + +#: options/preferences.py +msgid "Show individual pages for all released draws" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing results of non-silent rounds" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of results" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing motions that have been explicitly released to the public" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of motions" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of team standings" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page for each team and adjudicator showing their records" +msgstr "" + +#: options/preferences.py +msgid "Enable public record pages" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." +msgstr "" + +#: options/preferences.py +msgid "Release team breaks to public" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." +msgstr "" + +#: options/preferences.py +msgid "Release adjudicators break to public" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page detailing who has unsubmitted feedback" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of unsubmitted feedback" +msgstr "" + +#: options/preferences.py +msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." +msgstr "" + +#: options/preferences.py +msgid "Tournament staff" +msgstr "" + +#: options/preferences.py +msgid "Message to be displayed on the tournament home page" +msgstr "" + +#: options/preferences.py +msgid "Welcome message" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "UI Options" +msgstr "" + +#: options/preferences.py +msgid "If showing results to public, show splitting adjudicators in them" +msgstr "" + +#: options/preferences.py +msgid "Show splitting adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Whether and how to use code names for teams" +msgstr "" + +#: options/preferences.py +msgid "Team code names" +msgstr "" + +#: options/preferences.py +msgid "Do not use code names" +msgstr "" + +#: options/preferences.py +msgid "Use real names everywhere, and show code names in tooltips" +msgstr "" + +#: options/preferences.py +msgid "Use code names for public; real names with code names in tooltips for admins" +msgstr "" + +#: options/preferences.py +msgid "Use code names for public; code names with real names in tooltips for admins" +msgstr "" + +#: options/preferences.py +msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" +msgstr "" + +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py +msgid "Display team emoji in the public and admin interfaces" +msgstr "" + +#: options/preferences.py +msgid "Show emoji" +msgstr "" + +#: options/preferences.py +msgid "In tables listing teams, adds a column showing their institutions" +msgstr "" + +#: options/preferences.py +msgid "Show team institutions" +msgstr "" + +#: options/preferences.py +msgid "Hide the institutions of adjudicators on public pages and on printed ballots" +msgstr "" + +#: options/preferences.py +msgid "Show adjudicator institutions" +msgstr "" + +#: options/preferences.py +msgid "Enables a hover element on every team's name showing that team's speakers" +msgstr "" + +#: options/preferences.py +msgid "Show speakers in draw" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Notifications" +msgstr "" + +#: options/preferences.py +msgid "The name of the organizer tasked with managing emails (in case of replies)" +msgstr "" + +#: options/preferences.py +msgid "Reply-to name" +msgstr "" + +#: options/preferences.py +msgid "The email address for handling replies" +msgstr "" + +#: options/preferences.py +msgid "Reply-to address" +msgstr "" + +#: options/preferences.py +msgid "A secret key to accept email status events" +msgstr "" + +#: options/preferences.py +msgid "Email status secret key" +msgstr "" + +#: options/preferences.py +msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" +msgstr "" + +#: options/preferences.py +msgid "Ballot receipts" +msgstr "" + +#: options/preferences.py +msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" +msgstr "" + +#: options/preferences.py +msgid "Ballot receipt subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to adjudicators with their submitted ballot." +msgstr "" + +#: options/preferences.py +msgid "Ballot receipt message" +msgstr "" + +#: options/preferences.py +msgid "The subject line for emails sent to speakers with their team points." +msgstr "" + +#: options/preferences.py +msgid "Team points subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to speakers with their team points." +msgstr "" + +#: options/preferences.py +msgid "Team points message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to adjudicators with their assignments." +msgstr "" + +#: options/preferences.py +msgid "Adjudicator draw subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to adjudicators with their assignments." +msgstr "" + +#: options/preferences.py +msgid "Adjudicator draw message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to teams with their draw." +msgstr "" + +#: options/preferences.py +msgid "Team draw subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to participants with their private URLs." +msgstr "" + +#: options/preferences.py +msgid "Private URL notification message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to participants with their private URLs." +msgstr "" + +#: options/preferences.py +msgid "Private URL notification subject line" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to participants on motion release." +msgstr "" + +#: options/preferences.py +msgid "Motion release notification subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to participants on motion release." +msgstr "" + +#: options/preferences.py +msgid "Motion release notification message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to participants informing them of their team registration." +msgstr "" + +#: options/preferences.py +msgid "Team registration notification subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to participants informing them of their team registration." +msgstr "" + +#: options/preferences.py +msgid "Team registration notification message" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Motions" +msgstr "" + +#: options/preferences.py +msgid "If checked, ballots require a motion to be entered" +msgstr "" + +#: options/preferences.py +msgid "Enable motions" +msgstr "" + +#: options/preferences.py +msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" +msgstr "" + +#: options/preferences.py +msgid "Ballot Hide Motions" +msgstr "" + +#: options/preferences.py +msgid "Enables the motion veto field on ballots, to track veto statistics" +msgstr "" + +#: options/preferences.py +msgid "Motion vetoes" +msgstr "" + +#: options/preferences.py +msgid "If showing results to public, show which motions were selected in the record" +msgstr "" + +#: options/preferences.py +msgid "Show motions in results" +msgstr "" + +#: options/preferences.py +msgid "Order in which are listed by round in the public view" +msgstr "" + +#: options/preferences.py +msgid "Order to display motions" +msgstr "" + +#: options/preferences.py +msgid "Earliest round first" +msgstr "" + +#: options/preferences.py +msgid "Latest round first" +msgstr "" + +#: options/preferences.py +msgid "Whether motions can be reused from one round to another." +msgstr "" + +#: options/preferences.py +msgid "Allow motion reuse" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Global Settings" +msgstr "" + +#: options/preferences.py +msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." +msgstr "" + +#: options/preferences.py +msgid "Enable API access" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Assistant account creation key" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Administrator account creation key" +msgstr "" + +#: options/presets.py +msgid "Public Information Options" +msgstr "" + +#: options/presets.py +msgid "Enable Public Information" +msgstr "" + +#: options/presets.py +msgid "Disable Public Information" +msgstr "" + +#: options/presets.py +msgid "Australs Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." +msgstr "" + +#: options/presets.py +msgid "British Parliamentary Rules" +msgstr "" + +#: options/presets.py +msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." +msgstr "" + +#: options/presets.py +msgid "Canadian Parliamentary Rules" +msgstr "" + +#: options/presets.py +msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." +msgstr "" + +#: options/presets.py +msgid "Australian Easters Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." +msgstr "" + +#: options/presets.py +msgid "2 vs 2 Impromptu" +msgstr "" + +#: options/presets.py +msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." +msgstr "" + +#: options/presets.py +msgid "3 vs 3 Prepared" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." +msgstr "" + +#: options/presets.py +msgid "UADC Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." +msgstr "" + +#: options/presets.py +msgid "WSDC Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." +msgstr "" + +#: options/presets.py +msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." +msgstr "" + +#: options/presets.py +msgid "Tab Release Options" +msgstr "" + +#: options/presets.py +msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" +msgstr "" + +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html +msgid "Configuration" +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." +msgstr "" + +#: options/templates/preferences_index.html +msgid "The range of scores that can awarded to speeches, replies, and teams" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How teams are paired in the draw and how adjudicators are auto-allocated" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How teams and speakers are ranked in the released tabs" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How adjudicators are ranked and who can submit feedback" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How and where are motions used" +msgstr "" + +#: options/templates/preferences_index.html +msgid "When to release a public tab is made visible and what data it shows" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How ballots, feedback, and check-ins are entered, including online submission options" +msgstr "" + +#: options/templates/preferences_index.html +msgid "What information the site displays on the publicly accessible pages" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Small tweaks in what information is presented by the interface" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Settings which can affect all tournaments on the site" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Manually Set Current Round" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." +msgstr "" + +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Rounds can be weighted so that certain rounds are worth more team points." +msgstr "" + +#: options/templates/preferences_index.html +msgid "Presets" +msgstr "" + +#: options/templates/preferences_index.html +msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "Apply %(preset)s" +msgstr "" + +#: options/templates/preferences_presets_complete.html +#, python-format +msgid "Presets Applied: %(preset_title)s" +msgstr "" + +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html +msgid "Back to Configuration" +msgstr "" + +#: options/templates/preferences_presets_complete.html +msgid "Preferences that were changed" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +#, python-format +msgid "Confirm Presets: %(preset_title)s" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +msgid "Preferences that will not change" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +msgid "Preferences that will change" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +#, python-format +msgid "Apply Presets: %(preset_title)s" +msgstr "" + +#: options/templates/preferences_section_set.html +#, python-format +msgid "Configuration: %(section)s" +msgstr "" + +#: options/templates/preferences_section_set.html +#, python-format +msgid "Edit Configuration: %(section)s" +msgstr "" + +#: options/views.py +#, python-format +msgid "Tournament options (%(section)s) saved." +msgstr "" + +#: options/views.py +#, python-format +msgid "Tournament options saved according to preset %(name)s." +msgstr "" + diff --git a/tabbycat/participants/locale/bg/LC_MESSAGES/django.po b/tabbycat/participants/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..b265c497812 --- /dev/null +++ b/tabbycat/participants/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,964 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" +"Last-Translator: philip_tc\n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/participants/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 942\n" + +#: participants/admin.py +#, python-format +msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" +msgstr "" + +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d speaker had their URL key removed." +msgid_plural "%(count)d speakers had their URL keys removed." +msgstr[0] "" +msgstr[1] "" + +#: participants/admin.py +msgid "Reset emoji" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d team had their emoji reset." +msgid_plural "%(count)d teams had their emojis reset." +msgstr[0] "" +msgstr[1] "" + +#: participants/admin.py +msgid "Reset code name" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d team had their code name reset." +msgid_plural "%(count)d teams had their code names reset." +msgstr[0] "" +msgstr[1] "" + +#: participants/admin.py +#, python-format +msgid "%(count)d adjudicator had their URL key removed." +msgid_plural "%(count)d adjudicators had their URL keys removed." +msgstr[0] "" +msgstr[1] "" + +#: participants/apps.py participants/views.py +msgid "Participants" +msgstr "" + +#: participants/models.py +msgid "name" +msgstr "" + +#: participants/models.py +msgid "region" +msgstr "" + +#: participants/models.py +msgid "regions" +msgstr "" + +#. Translators: Change the examples to institutions native to your language; keep consistent between strings +#: participants/models.py +msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" +msgstr "" + +#: participants/models.py +msgid "code" +msgstr "" + +#. Translators: Change the examples to institutions native to your language; keep consistent between strings +#: participants/models.py +msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" +msgstr "" + +#: participants/models.py +msgid "institution" +msgstr "" + +#: participants/models.py +msgid "institutions" +msgstr "" + +#: participants/models.py +msgid "tournament" +msgstr "" + +#. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" +#: participants/models.py +msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" +msgstr "" + +#: participants/models.py +msgid "slug" +msgstr "" + +#. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" +#: participants/models.py +msgid "Slug for URLs, e.g., \"novice\", \"esl\"" +msgstr "" + +#: participants/models.py +msgid "sequence number" +msgstr "" + +#: participants/models.py +msgid "The order in which the categories are displayed" +msgstr "" + +#: participants/models.py +msgid "limit" +msgstr "" + +#: participants/models.py +msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" +msgstr "" + +#: participants/models.py +msgid "public" +msgstr "" + +#: participants/models.py +msgid "If checked, this category will be included in the speaker category tabs shown to the public" +msgstr "" + +#: participants/models.py +msgid "speaker category" +msgstr "" + +#: participants/models.py +msgid "speaker categories" +msgstr "" + +#: participants/models.py +msgid "email address" +msgstr "" + +#: participants/models.py +msgid "phone" +msgstr "" + +#: participants/models.py +msgid "anonymous" +msgstr "" + +#: participants/models.py +msgid "Anonymous persons will have their name and team redacted on public tab releases" +msgstr "" + +#: participants/models.py +msgid "code name" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py +msgid "URL key" +msgstr "" + +#: participants/models.py +msgid "male" +msgstr "" + +#: participants/models.py +msgid "female" +msgstr "" + +#: participants/models.py +msgid "other" +msgstr "" + +#: participants/models.py +msgid "gender" +msgstr "" + +#: participants/models.py +msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" +msgstr "" + +#: participants/models.py +msgid "pronoun" +msgstr "" + +#: participants/models.py +msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" +msgstr "" + +#: participants/models.py +msgid "person" +msgstr "" + +#: participants/models.py +msgid "persons" +msgstr "" + +#: participants/models.py +msgid "full name/suffix" +msgstr "" + +#: participants/models.py +msgid "Do not include institution name (see \"uses institutional prefix\" below)" +msgstr "" + +#: participants/models.py +msgid "short name/suffix" +msgstr "" + +#: participants/models.py +msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure institutional identity on public-facing pages" +msgstr "" + +#: participants/models.py +msgid "short name" +msgstr "" + +#: participants/models.py +msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" +msgstr "" + +#: participants/models.py +msgid "long name" +msgstr "" + +#: participants/models.py +msgid "The full name of the team, including institution name. (This is autogenerated.)" +msgstr "" + +#: participants/models.py +msgid "Uses institutional prefix" +msgstr "" + +#: participants/models.py +msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" +msgstr "" + +#: participants/models.py +msgid "break categories" +msgstr "" + +#: participants/models.py +msgid "institution conflicts" +msgstr "" + +#: participants/models.py +msgid "none" +msgstr "" + +#: participants/models.py +msgid "swing" +msgstr "" + +#: participants/models.py +msgid "composite" +msgstr "" + +#: participants/models.py +msgid "bye" +msgstr "" + +#: participants/models.py +msgid "type" +msgstr "" + +#: participants/models.py +msgid "emoji" +msgstr "" + +#: participants/models.py +msgid "team" +msgstr "" + +#: participants/models.py +msgid "teams" +msgstr "" + +#: participants/models.py +msgid "Teams must have an institution if they are using the institutional prefix." +msgstr "" + +#: participants/models.py +msgid "Teams must have a full name if they don't use the institutional prefix." +msgstr "" + +#: participants/models.py +msgid "Teams must have a short name if they don't use the institutional prefix." +msgstr "" + +#: participants/models.py +msgid "speaker" +msgstr "" + +#: participants/models.py +msgid "speakers" +msgstr "" + +#: participants/models.py +msgid "Adjudicators not assigned to any tournament can be shared between tournaments" +msgstr "" + +#: participants/models.py +msgid "base score" +msgstr "" + +#: participants/models.py +msgid "team conflicts" +msgstr "" + +#: participants/models.py +msgid "adjudicator conflicts" +msgstr "" + +#: participants/models.py +msgid "always trainee" +msgstr "" + +#: participants/models.py +msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" +msgstr "" + +#: participants/models.py +msgid "breaking" +msgstr "" + +#: participants/models.py +msgid "independent" +msgstr "" + +#: participants/models.py +msgid "adjudication core" +msgstr "" + +#: participants/models.py +msgid "adjudicator" +msgstr "" + +#: participants/models.py +msgid "adjudicators" +msgstr "" + +#: participants/tables.py +msgid "Points after this debate" +msgstr "" + +#: participants/tables.py +msgid "Wins after this debate" +msgstr "" + +#: participants/tables.py +msgid "Speaker scores
    (in speaking order)" +msgstr "" + +#: participants/tables.py +msgid "Speaks" +msgstr "" + +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html +#, python-format +msgid "About %(name)s" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +msgid "Independent adjudicator" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +msgid "Member of the adjudication core" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Institution:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Unaffiliated" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Region:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +msgid "The institutional affiliations of adjudicators are not public at this tournament." +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Institutional Conflicts:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "; " +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "None" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +msgid "Team Conflicts:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid ", " +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Adjudicator Conflicts:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Room Constraints:" +msgstr "" + +#: participants/templates/admin/participants/adjudicator/change_form.html +msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." +msgstr "" + +#. Translators: This follows the above sentence in the same paragraph. +#: participants/templates/admin/participants/delete_debateteam_warning.html +msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +msgid "Note that deleting an institution also deletes all teams from that institution." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." +msgstr "" + +#: participants/templates/admin/participants/team/change_form.html +msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." +msgstr "" + +#: participants/templates/current_round/common.html +#, python-format +msgid "The round begins at %(start_time)s" +msgstr "" + +#: participants/templates/current_round/common.html +msgid "Teams:" +msgstr "" + +#: participants/templates/current_round/common.html +msgid "Adjudicator:" +msgid_plural "Adjudicators:" +msgstr[0] "" +msgstr[1] "" + +#: participants/templates/current_round/common.html +msgctxt "chair icon" +msgid "Ⓒ" +msgstr "" + +#: participants/templates/current_round/common.html +msgctxt "trainee icon" +msgid "Ⓣ" +msgstr "" + +#: participants/templates/current_round/common.html +msgid "There are no panellists or trainees assigned to this debate." +msgstr "" + +#: participants/templates/current_round/common.html +msgid "Motions are not released to public." +msgstr "" + +#: participants/templates/current_round/common.html +msgid "Motion:" +msgstr "" + +#: participants/templates/current_round/common.html +#, python-format +msgid "Motion %(seq)s:" +msgstr "" + +#: participants/templates/current_round/common.html +msgid "The motion(s) for this round haven't yet been released." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating as the %(side)s team." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating as the %(side)s team." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s's debate is in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s's debate is in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "Your debate is in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "Your debate is in %(room)s." +msgstr "" + +#: participants/templates/edit_speaker_eligibility.html +#, python-format +msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." +msgstr "" + +#: participants/templates/feedback_progress_panel.html +msgid "Feedback Returns" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Has submitted feedback for %(adjudicator)s" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Has not submitted feedback for %(adjudicator)s" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +msgid "More feedback submissions than expected for this debate:" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Unexpected feedback submission for %(adjudicator)s" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "%(name)s doesn't have any feedback to submit." +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "In This Round (%(round)s)" +msgstr "" + +#: participants/templates/in_this_round.html +msgid "In This Round" +msgstr "" + +#: participants/templates/in_this_round.html +msgid "(Not Released to Public)" +msgstr "" + +#: participants/templates/in_this_round.html +msgid "Room TBA" +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "%(adjudicator)s is not adjudicating this round." +msgstr "" + +#: participants/templates/in_this_round.html +msgid "You are not adjudicating this round." +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." +msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." +msgstr[0] "" +msgstr[1] "" + +#: participants/templates/in_this_round.html +msgid "If this is an error, please contact a tab director immediately." +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "%(team)s does not have a debate this round." +msgstr "" + +#: participants/templates/in_this_round.html +msgid "You do not have a debate this round." +msgstr "" + +#: participants/templates/in_this_round.html +msgid "The draw for this round hasn't yet been released." +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Participants List" +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Institutions List" +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Emails have already been sent." +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Email Team Registrations" +msgstr "" + +#: participants/templates/participants_subnav.html participants/views.py +msgid "Code Names" +msgstr "" + +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html +msgid "Speaker Categories" +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Speaker Eligibility" +msgstr "" + +#: participants/templates/speaker_categories_edit.html +msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." +msgstr "" + +#: participants/templates/speaker_categories_edit.html +#, python-format +msgid "If you want to delete speaker categories, use the Edit Database area." +msgstr "" + +#: participants/templates/speaker_categories_edit.html +msgid "Save Speaker Categories" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Team name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Full team name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Short team name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Code name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "No code name assigned" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Emoji:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "No emoji assigned" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Speakers:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Eligible for break categories:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Speaker categories:" +msgstr "" + +#: participants/templatetags/team_name_for_data_entry.py +#, python-format +msgid "%(code_name)s (%(real_name)s)" +msgstr "" + +#: participants/views.py +msgid "Adjudicators" +msgstr "" + +#: participants/views.py +msgid "Speakers" +msgstr "" + +#: participants/views.py +msgid "Institutions" +msgstr "" + +#: participants/views.py +msgid "Code" +msgstr "" + +#: participants/views.py +msgid "Full name" +msgstr "" + +#: participants/views.py +msgid "Region" +msgstr "" + +#: participants/views.py +msgid "Teams" +msgstr "" + +#: participants/views.py +msgid "Number of teams" +msgstr "" + +#: participants/views.py +msgid "Adjs" +msgstr "" + +#: participants/views.py +msgid "Number of adjudicators, excluding independents" +msgstr "" + +#: participants/views.py +msgid "IAs" +msgstr "" + +#: participants/views.py +msgid "Number of independent adjudicators" +msgstr "" + +#: participants/views.py +msgid "Code name" +msgstr "" + +#: participants/views.py +msgid "Team Registration" +msgstr "" + +#: participants/views.py +msgid "Results" +msgstr "" + +#: participants/views.py +#, python-format +msgid "Record for %(name)s" +msgstr "" + +#: participants/views.py +msgid "Previous Rounds" +msgstr "" + +#: participants/views.py +#, python-format +msgid "Saved category: %(list)s" +msgid_plural "Saved categories: %(list)s" +msgstr[0] "" +msgstr[1] "" + +#: participants/views.py +msgid "No changes were made to the categories." +msgstr "" + +#: participants/views.py +msgid "Speaker Category Eligibility" +msgstr "" + diff --git a/tabbycat/printing/locale/bg/LC_MESSAGES/django.po b/tabbycat/printing/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..f52d9d8f14b --- /dev/null +++ b/tabbycat/printing/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" +"Last-Translator: philip_tc\n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/printing/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 944\n" + +#: printing/templates/feedback_list.html +msgid "Feedback Forms" +msgstr "" + +#: printing/templates/feedback_list.html +#, python-format +msgid "Printable Feedback Forms for %(round)s" +msgstr "" + +#: printing/templates/feedback_list.html +msgid "No feedback questions have been added for either teams or adjudicators to answer." +msgstr "" + +#: printing/templates/feedback_list.html +msgid "No feedback questions have been added for teams to answer." +msgstr "" + +#: printing/templates/feedback_list.html +msgid "No feedback questions have been added for adjudicators to answer." +msgstr "" + +#: printing/templates/feedback_list.html +#, python-format +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgstr "" + +#: printing/templates/feedback_list.html +msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" +msgstr "" + +#: printing/templates/printables_list.html +msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." +msgstr "" + +#: printing/templates/randomised_url_sheets.html +#, python-format +msgid "Printable %(sheet)s URLs" +msgstr "" + +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +msgstr "" + +#: printing/templates/randomised_url_sheets.html +#, python-format +msgid "Private URL for %(name)s (%(group)s)" +msgstr "" + +#: printing/templates/randomised_url_sheets.html +msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Printable Scoresheets" +msgstr "" + +#: printing/templates/scoresheet_list.html +#, python-format +msgid "for %(round)s" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Edit Motion(s)" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "There are no scoresheets available — perhaps the round has not been drawn?" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Edit Ballot Motions" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "×" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Motion" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Changes to motions will update in the displayed ballots automatically" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." +msgstr "" + +#: printing/views.py +msgid "Overall Score" +msgstr "" + +#: printing/views.py +msgid "Unaffiliated" +msgstr "" + +#: printing/views.py +msgid "Team" +msgstr "" + diff --git a/tabbycat/privateurls/locale/bg/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..15982d3a5fc --- /dev/null +++ b/tabbycat/privateurls/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,179 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" +"Last-Translator: philip_tc\n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/privateurls/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 946\n" + +#: privateurls/apps.py +msgid "Private URL Management" +msgstr "" + +#: privateurls/templates/private_urls.html privateurls/views.py +msgid "Private URLs" +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "The private URLs for ballot and/or feedback submission from participants are given below." +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +msgstr "" + +#: privateurls/templates/private_urls.html +#, python-format +msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "There are no private URLs assigned." +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "Generate Private URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "View URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "Print Teams' URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "Print Adjudicators' URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "All reachable participants have already been sent their private URLs." +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "Email URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "This button only generates private URLs for participants who do not already have one." +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "Generate URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "All participants already have private URLs." +msgstr "" + +#: privateurls/templates/public_url_landing.html +msgid "Private URL" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "for %(name)s" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "(%(team)s)" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Revoke check-in from %(check_time)s" +msgstr "" + +#: privateurls/templates/public_url_landing.html +msgid "Check in" +msgstr "" + +#. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "You have been checked in at %(check_time)s" +msgstr "" + +#: privateurls/templates/public_url_landing.html +msgid "You are not currently checked in." +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Submit Ballot for %(round)s" +msgstr "" + +#: privateurls/templates/public_url_landing.html +msgid "Submit Feedback" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Registration (%(name)s)" +msgstr "" + +#: privateurls/views.py +msgid "no URL" +msgstr "" + +#: privateurls/views.py +msgid "URL" +msgstr "" + +#: privateurls/views.py +msgid "Speakers" +msgstr "" + +#: privateurls/views.py +msgid "Adjudicators" +msgstr "" + +#: privateurls/views.py +msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." +msgstr "" + +#: privateurls/views.py +#, python-format +msgid "A private URL was generated for %(nblank_people)d person." +msgid_plural "Private URLs were generated for all %(nblank_people)d people." +msgstr[0] "" +msgstr[1] "" + +#: privateurls/views.py +#, python-format +msgid "The already-existing private URL for %(nexisting_people)d person was left intact." +msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." +msgstr[0] "" +msgstr[1] "" + +#: privateurls/views.py +msgid "URL Key" +msgstr "" + +#: privateurls/views.py +msgid "Debates" +msgstr "" + diff --git a/tabbycat/results/locale/bg/LC_MESSAGES/django.po b/tabbycat/results/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..2ac3df665f0 --- /dev/null +++ b/tabbycat/results/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,1093 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:14\n" +"Last-Translator: philip_tc\n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/results/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 948\n" + +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py +#, python-format +msgid "Resaved results for %(count)d ballot submission." +msgid_plural "Resaved results for %(count)d ballot submissions." +msgstr[0] "" +msgstr[1] "" + +#: results/apps.py results/templates/public_results_index.html results/views.py +msgid "Results" +msgstr "" + +#: results/forms.py +msgid "Tournament password" +msgstr "" + +#: results/forms.py +msgid "That password isn't correct." +msgstr "" + +#: results/forms.py +msgid "Please enter a whole number." +msgstr "" + +#: results/forms.py +#, python-format +msgid "Please enter a multiple of %s." +msgstr "" + +#: results/forms.py +msgid "The ballot set can't be both discarded and confirmed." +msgstr "" + +#: results/forms.py +msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." +msgstr "" + +#: results/forms.py +msgid "---------" +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(aff_team)s affirmed, %(neg_team)s negated" +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(side)s's motion veto" +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(team)s (%(side)s)" +msgstr "" + +#: results/forms.py +msgid "Winner" +msgstr "" + +#: results/forms.py +msgid "Mark as a duplicate speech" +msgstr "" + +#: results/forms.py +#, python-format +msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(speaker)s appears to have given %(count)d substantive speech." +msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." +msgstr[0] "" +msgstr[1] "" + +#: results/forms.py +msgid "The last substantive speaker and reply speaker can't be the same." +msgstr "" + +#: results/forms.py +msgid "The reply speaker for this team did not give a substantive speech." +msgstr "" + +#: results/forms.py +msgid "The total scores for the teams are the same (i.e. a draw)." +msgstr "" + +#: results/forms.py +msgid "The declared winner does not correspond to the team with the highest score." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The total scores for the following teams are the same: %(teams)s" +msgstr "" + +#: results/forms.py +#, python-format +msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." +msgstr "" + +#: results/forms.py +msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." +msgstr "" + +#: results/forms.py +#, python-format +msgid "There must be exactly %(n)d team advancing." +msgid_plural "There must be exactly %(n)d teams advancing." +msgstr[0] "" +msgstr[1] "" + +#: results/forms.py +msgid "There must be exactly 1 team advancing." +msgstr "" + +#: results/models.py +msgid "Tab room" +msgstr "" + +#: results/models.py +msgid "Public" +msgstr "" + +#: results/models.py +msgid "timestamp" +msgstr "" + +#: results/models.py +msgid "version" +msgstr "" + +#: results/models.py +msgid "submitter type" +msgstr "" + +#: results/models.py +msgid "confirmed" +msgstr "" + +#: results/models.py +msgid "from private URL" +msgstr "" + +#: results/models.py +msgid "from participant" +msgstr "" + +#: results/models.py +msgid "submitter" +msgstr "" + +#: results/models.py +msgid "confirmer" +msgstr "" + +#: results/models.py +msgid "confirm timestamp" +msgstr "" + +#: results/models.py +msgid "IP address" +msgstr "" + +#: results/models.py +msgid "A tab room ballot must have a user associated." +msgstr "" + +#: results/models.py +msgid "debate" +msgstr "" + +#: results/models.py +msgid "motion" +msgstr "" + +#: results/models.py +msgid "discarded" +msgstr "" + +#: results/models.py +msgid "single adjudicator" +msgstr "" + +#: results/models.py +msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." +msgstr "" + +#: results/models.py +msgid "ballot submission" +msgstr "" + +#: results/models.py +msgid "ballot submissions" +msgstr "" + +#: results/models.py +#, python-format +msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" +msgstr "" + +#: results/models.py +msgid "A ballot can't be both confirmed and discarded!" +msgstr "" + +#: results/models.py +msgid "debate adjudicator" +msgstr "" + +#: results/models.py +msgid "debate team" +msgstr "" + +#: results/models.py +msgid "win" +msgstr "" + +#: results/models.py +msgid "margin" +msgstr "" + +#: results/models.py +msgid "score" +msgstr "" + +#: results/models.py +msgid "team score by adjudicator" +msgstr "" + +#: results/models.py +msgid "team scores by adjudicator" +msgstr "" + +#: results/models.py +msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." +msgstr "" + +#: results/models.py +msgid "position" +msgstr "" + +#: results/models.py +msgid "speaker score by adjudicator" +msgstr "" + +#: results/models.py +msgid "speaker scores by adjudicator" +msgstr "" + +#: results/models.py +msgid "points" +msgstr "" + +#: results/models.py +msgid "votes given" +msgstr "" + +#: results/models.py +msgid "votes possible" +msgstr "" + +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py +msgid "team score" +msgstr "" + +#: results/models.py +msgid "team scores" +msgstr "" + +#: results/models.py +msgid "speaker" +msgstr "" + +#: results/models.py +msgid "ghost" +msgstr "" + +#: results/models.py +msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." +msgstr "" + +#: results/models.py +msgid "speaker score" +msgstr "" + +#: results/models.py +msgid "speaker scores" +msgstr "" + +#: results/models.py +msgid "The debate team and speaker must be from the same team." +msgstr "" + +#: results/models.py +msgid "The ballot submission and debate team must relate to the same debate." +msgstr "" + +#: results/tables.py +msgid "Whether this debate's ballot has been checked in" +msgstr "" + +#: results/tables.py +msgid "Status of this debate's ballot" +msgstr "" + +#: results/templates/admin_results.html +msgid "Display Draw" +msgstr "" + +#: results/templates/admin_results.html +msgid "Check-In Ballots" +msgstr "" + +#: results/templates/admin_results.html +msgid "Recent 'Iron-Persons'" +msgstr "" + +#: results/templates/admin_results.html +msgid "Teams who have recently missed a speaker" +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "A speaker from %(team)s gave multiple speeches in the previous round" +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "A speaker from %(team)s gave multiple speeches in the current round" +msgstr "" + +#: results/templates/admin_results.html +msgid "No known cases in the current or previous round" +msgstr "" + +#: results/templates/admin_results.html +msgid "Complete Round" +msgstr "" + +#: results/templates/admin_results.html +msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." +msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/admin_results.html +#, python-format +msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." +msgstr "" + +#: results/templates/admin_results.html +msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." +msgstr "" + +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html +msgid "Back to All Results" +msgstr "" + +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html +msgid "Create a new ballot set for this debate" +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because you entered it." +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "Confirm results" +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "Results are incorrect" +msgstr "" + +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html +msgid "Emails will be sent to adjudicators when the ballot is confirmed." +msgstr "" + +#: results/templates/assistant_results.html results/views.py +msgid "Enter Results" +msgstr "" + +#: results/templates/assistant_results.html +msgid "This page automatically updates with the new ballot entries and checkins as they occur." +msgstr "" + +#: results/templates/assistant_results.html +msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." +msgstr "" + +#: results/templates/assistant_results.html +msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." +msgstr "" + +#: results/templates/assistant_results.html +#, python-format +msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." +msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/assistant_results.html +#, python-format +msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." +msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/ballot/ballot_debate_info.html +msgid "Debate Information" +msgstr "" + +#: results/templates/ballot/ballot_debate_info.html +msgid "No speakers spoke twice (no 'iron-person' speeches)" +msgstr "" + +#: results/templates/ballot/ballot_debate_info.html +msgid "A speaker spoke twice (an 'iron-person' speech)" +msgstr "" + +#: results/templates/ballot/ballot_scoresheet.html +msgid "Result" +msgstr "" + +#: results/templates/ballot/ballot_scoresheet.html +msgid "Rank" +msgstr "" + +#: results/templates/ballot/ballot_scoresheet.html +msgid "Margin" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "There are some problems with this scoresheet. Please review and correct them." +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s (%(institution)s)" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html +msgid "Scoresheet" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Solo Chair" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Chair" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Panellist" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Trainee" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Assign sides before entering scores" +msgstr "" + +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "There is %(number)s existing ballot set for this debate." +msgid_plural "There are %(number)s existing ballot sets for this debate." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/ballot/other_ballots_list.html +msgid "This ballot set is confirmed." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "This ballot set is discarded." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "CURRENTLY VIEWING" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "MERGING" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "Version %(version)s," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "entered by %(submitter)s," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "submitted from %(adjudicator)s's private URL," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "submitted from the public form on %(ip_address)s," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "%(timestamp)s (%(timeago)s ago)," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "unknown" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "confirmed by %(confirmer)s" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "unconfirmed" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "(discarded)" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "(identical to version %(others)s)" +msgid_plural "(identical to versions %(others)s)" +msgstr[0] "" +msgstr[1] "" + +#: results/templates/ballot_entry.html +#, python-format +msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." +msgstr "" + +#: results/templates/ballot_entry_base.html +msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." +msgstr "" + +#: results/templates/ballot_entry_base.html +#, python-format +msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Scoresheet from chair %(chair)s" +msgstr "" + +#: results/templates/ballot_entry_form.html +msgid "Scoresheet, no chair set" +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Error with %(pos)s's speaker field: %(error)s" +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Error with %(pos)s's duplicate speaker field: %(error)s" +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Error with %(pos)s's score field: %(error)s" +msgstr "" + +#: results/templates/debate_postponement_form.html +msgid "Postponed" +msgstr "" + +#: results/templates/debate_postponement_form.html +msgid "Postpone" +msgstr "" + +#: results/templates/enter_results.html +msgid "Ballot Status" +msgstr "" + +#: results/templates/enter_results.html +msgid "only the confirmed ballot set will affect this debate's result" +msgstr "" + +#: results/templates/enter_results.html +msgid "Debate Status" +msgstr "" + +#: results/templates/enter_results.html +msgid "all debates must be confirmed to complete the round" +msgstr "" + +#: results/templates/enter_results.html +msgid "Save Ballot" +msgstr "" + +#: results/templates/enter_results.html +msgid "Cancel Entry" +msgstr "" + +#: results/templates/includes/public_enter_results_info.html +#, python-format +msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." +msgstr "" + +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html +#, python-format +msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." +msgstr "" + +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html +msgid "Ballot Not Available" +msgstr "" + +#: results/templates/privateurl_ballot_set_error.html +#, python-format +msgid "Back to your private landing page." +msgstr "" + +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html +msgid "Enter Ballot" +msgstr "" + +#: results/templates/public_add_ballot.html +msgid "Who are you?" +msgstr "" + +#: results/templates/public_add_ballot.html +msgid "(click your name on this list)" +msgstr "" + +#: results/templates/public_add_ballot_unreleased.html +#, python-format +msgid "The draw and/or motions for %(round)s have yet to be released." +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "Ballot for %(matchup)s" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "%(round)s @ %(room)s" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Return to landing page" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "Return to Results for %(round)s" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Motion" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "From %(name)s (%(institution)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "Total for %(name)s (%(side)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "%(name)s (%(side)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Won" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Lost" +msgstr "" + +#: results/templates/public_ballot_set_error.html +#, python-format +msgid "Back to the tournament home page." +msgstr "" + +#: results/templates/public_enter_results.html +#, python-format +msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" +msgstr "" + +#: results/templates/public_enter_results.html +msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." +msgstr "" + +#: results/templates/public_enter_results.html +#, python-format +msgid "This form has already been submitted once. Please contact a tab official after submitting your form." +msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" +msgstr[1] "" + +#: results/templates/public_enter_results.html +msgid "When submitting this form your IP address will be stored for logging purposes." +msgstr "" + +#: results/templates/public_enter_results_error.html +#, python-format +msgid "No Result to Enter (%(adjudicator)s)" +msgstr "" + +#: results/templates/public_enter_results_error.html +msgid "No Result to Enter" +msgstr "" + +#: results/templates/public_results_for_round.html +msgid "View by Team" +msgstr "" + +#: results/templates/public_results_for_round.html +msgid "View by Debate" +msgstr "" + +#: results/templates/public_results_index.html +#, python-format +msgid "Results for %(round)s" +msgstr "" + +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html +msgid "Results Not Available" +msgstr "" + +#: results/templates/public_results_not_available.html +#, python-format +msgid "The results for %(round)s aren't yet available." +msgstr "" + +#: results/templates/public_results_silent.html +#, python-format +msgid "%(round)s is a silent round." +msgstr "" + +#: results/utils.py +msgid "No Ballot" +msgstr "" + +#: results/utils.py +msgid "Debate was Postponed" +msgstr "" + +#: results/utils.py +msgid "Ballot is Unconfirmed" +msgstr "" + +#: results/utils.py +msgid "Ballot is Confirmed" +msgstr "" + +#. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" +#: results/utils.py +#, python-format +msgid "%(team)s as %(side)s" +msgstr "" + +#: results/utils.py +#, python-format +msgid "%(team)s (%(side)s) won" +msgstr "" + +#. Translators: The team here is the losing team +#: results/utils.py +#, python-format +msgid "vs %(team)s (%(side)s)" +msgstr "" + +#: results/utils.py +#, python-format +msgid "Advancing: %(advancing_list)s
    " +msgstr "" + +#: results/utils.py +#, python-format +msgid "Eliminated: %(eliminated_list)s" +msgstr "" + +#: results/utils.py +#, python-format +msgid "1st: %(first_team)s
    " +msgstr "" + +#: results/utils.py +#, python-format +msgid "2nd: %(second_team)s
    \n" +"3rd: %(third_team)s
    \n" +"4th: %(fourth_team)s" +msgstr "" + +#: results/utils.py +#, python-format +msgid "Error with result for %(debate)s" +msgstr "" + +#. Translators: Abbreviation for Prime Minister +#: results/utils.py +msgid "PM" +msgstr "" + +#. Translators: Abbreviation for Deputy Prime Minister +#: results/utils.py +msgid "DPM" +msgstr "" + +#. Translators: Abbreviation for Leader of the Opposition +#: results/utils.py +msgid "LO" +msgstr "" + +#. Translators: Abbreviation for Deputy Leader of the Opposition +#: results/utils.py +msgid "DLO" +msgstr "" + +#. Translators: Abbreviation for Member for the Government +#: results/utils.py +msgid "MG" +msgstr "" + +#. Translators: Abbreviation for Government Whip +#: results/utils.py +msgid "GW" +msgstr "" + +#. Translators: Abbreviation for Member for the Opposition +#: results/utils.py +msgid "MO" +msgstr "" + +#. Translators: Abbreviation for Opposition Whip +#: results/utils.py +msgid "OW" +msgstr "" + +#: results/utils.py +msgid "Reply" +msgstr "" + +#: results/views.py +msgid " vs " +msgstr "" + +#: results/views.py +#, python-format +msgid "%(matchup)s: %(round)s @ %(room)s" +msgstr "" + +#: results/views.py +msgid "N/A" +msgstr "" + +#: results/views.py +msgid "New Ballot Set" +msgstr "" + +#: results/views.py +#, python-format +msgid "Ballot set for %(debate)s added." +msgstr "" + +#: results/views.py +msgid " Email receipts queued to be sent." +msgstr "" + +#: results/views.py +#, python-format +msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." +msgstr "" + +#: results/views.py +#, python-format +msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." +msgstr "" + +#: results/views.py +msgid "Edit Ballot Set" +msgstr "" + +#: results/views.py +#, python-format +msgid "Ballot set for %(matchup)s discarded." +msgstr "" + +#: results/views.py +#, python-format +msgid "Ballot set for %(matchup)s confirmed." +msgstr "" + +#: results/views.py +#, python-format +msgid "Edits to ballot set for %(matchup)s saved." +msgstr "" + +#: results/views.py +#, python-format +msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." +msgstr "" + +#: results/views.py +msgid "The draw for this round hasn't been released yet." +msgstr "" + +#: results/views.py +msgid "The motions for this round haven't been released yet." +msgstr "" + +#: results/views.py +msgid "It looks like you don't have a debate this round." +msgstr "" + +#: results/views.py +msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." +msgstr "" + +#: results/views.py +msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." +msgstr "" + +#: results/views.py +msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." +msgstr "" + +#: results/views.py +msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." +msgstr "" + +#: results/views.py +#, python-format +msgid "This debate is in %s, which is a silent round." +msgstr "" + +#: results/views.py +#, python-format +msgid "This debate is in %s, the results for which aren't available yet." +msgstr "" + +#: results/views.py +#, python-format +msgid "The result for debate %s is not confirmed." +msgstr "" + +#: results/views.py +#, python-format +msgid "The debate %s does not have a confirmed ballot." +msgstr "" + +#: results/views.py +#, python-format +msgid "There is no result yet for debate %s." +msgstr "" + +#: results/views.py +#, python-format +msgid "Add result from %(adjudicator)s" +msgstr "" + +#: results/views.py +msgid "Adjudicator" +msgstr "" + +#: results/views.py +msgid "Merge Ballots" +msgstr "" + +#: results/views.py +msgid "The speaking order in the ballots is inconsistent, so could not be merged." +msgstr "" + +#: results/views.py +msgid "Duplicate speeches are marked inconsistently, so could not be merged." +msgstr "" + +#: results/views.py +#, python-format +msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." +msgstr "" + diff --git a/tabbycat/standings/locale/bg/LC_MESSAGES/django.po b/tabbycat/standings/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..1164073f329 --- /dev/null +++ b/tabbycat/standings/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,612 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:01\n" +"Last-Translator: philip_tc\n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/standings/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 950\n" + +#: standings/base.py +msgid "The same metric would be added twice:" +msgstr "" + +#: standings/base.py +msgid "The same ranking would be added twice:" +msgstr "" + +#: standings/base.py +#, python-format +msgid "Unrecognized metric code: \"%(code)s\"" +msgstr "" + +#: standings/diversity.py +msgid "All" +msgstr "" + +#: standings/diversity.py +msgid "Breaking" +msgstr "" + +#: standings/diversity.py +#, python-format +msgid "Not %(category)s" +msgstr "" + +#: standings/diversity.py +msgid "All Speakers" +msgstr "" + +#: standings/diversity.py +msgid "IAs" +msgstr "" + +#: standings/diversity.py +msgid "Chairs" +msgstr "" + +#: standings/diversity.py +msgid "Panellists" +msgstr "" + +#: standings/diversity.py +msgid "Trainees" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating" +msgstr "" + +#: standings/diversity.py +msgid "Median Rating" +msgstr "" + +#: standings/diversity.py +msgid "Upper Quartile Rating" +msgstr "" + +#: standings/diversity.py +msgid "Lower Quartile Rating" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Teams" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Chairs" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Panellists" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Trainees" +msgstr "" + +#: standings/diversity.py +msgid "Average Score" +msgstr "" + +#: standings/diversity.py +msgid "Median Score" +msgstr "" + +#: standings/diversity.py +msgid "Upper Quartile Score" +msgstr "" + +#: standings/diversity.py +msgid "Lower Quartile Score" +msgstr "" + +#: standings/diversity.py +msgid "Reply Speaker Average" +msgstr "" + +#: standings/diversity.py +#, python-format +msgid "Speaker %(num)d Average" +msgstr "" + +#: standings/diversity.py +msgid "Average Finals Score" +msgstr "" + +#: standings/speakers.py +msgid "total" +msgstr "" + +#: standings/speakers.py +msgid "Total" +msgstr "" + +#: standings/speakers.py +msgid "average" +msgstr "" + +#: standings/speakers.py +msgid "Avg" +msgstr "" + +#: standings/speakers.py +msgid "team points" +msgstr "" + +#: standings/speakers.py +msgid "Team" +msgstr "" + +#: standings/speakers.py +msgid "standard deviation" +msgstr "" + +#: standings/speakers.py +msgid "Stdev" +msgstr "" + +#: standings/speakers.py +msgid "number of speeches given" +msgstr "" + +#: standings/speakers.py +msgid "Num" +msgstr "" + +#: standings/speakers.py +msgid "replies given" +msgstr "" + +#: standings/speakers.py +msgid "trimmed mean (high-low drop)" +msgstr "" + +#: standings/speakers.py +msgid "Trim" +msgstr "" + +#: standings/teams.py +msgid "points" +msgstr "" + +#: standings/teams.py +msgid "Pts" +msgstr "" + +#: standings/teams.py +msgid "wins" +msgstr "" + +#: standings/teams.py standings/views.py +msgid "Wins" +msgstr "" + +#: standings/teams.py +msgid "total speaker score" +msgstr "" + +#: standings/teams.py +msgid "Spk" +msgstr "" + +#: standings/teams.py +msgid "average total speaker score" +msgstr "" + +#: standings/teams.py +msgid "ATSS" +msgstr "" + +#: standings/teams.py +msgid "speaker score standard deviation" +msgstr "" + +#: standings/teams.py +msgid "SSD" +msgstr "" + +#: standings/teams.py +msgid "sum of margins" +msgstr "" + +#: standings/teams.py +msgid "Marg" +msgstr "" + +#: standings/teams.py +msgid "average margin" +msgstr "" + +#: standings/teams.py +msgid "AWM" +msgstr "" + +#: standings/teams.py +msgid "average individual speaker score" +msgstr "" + +#: standings/teams.py +msgid "AISS" +msgstr "" + +#: standings/teams.py +msgid "draw strength by wins" +msgstr "" + +#: standings/teams.py +msgid "DS" +msgstr "" + +#: standings/teams.py +msgid "draw strength by total speaker score" +msgstr "" + +#: standings/teams.py +msgid "DSS" +msgstr "" + +#: standings/teams.py +msgid "number of pullups before this round" +msgstr "" + +#: standings/teams.py +msgid "PU" +msgstr "" + +#: standings/teams.py +msgid "number of adjudicators who voted for this team" +msgstr "" + +#: standings/teams.py +msgid "Ballots" +msgstr "" + +#: standings/teams.py +msgid "votes/ballots carried" +msgstr "" + +#: standings/teams.py +msgid "number of firsts" +msgstr "" + +#: standings/teams.py +msgid "1sts" +msgstr "" + +#: standings/teams.py +msgid "number of seconds" +msgstr "" + +#: standings/teams.py +msgid "2nds" +msgstr "" + +#: standings/teams.py +msgid "number of thirds" +msgstr "" + +#: standings/teams.py +msgid "3rds" +msgstr "" + +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py +msgid "Who-beat-whom" +msgstr "" + +#: standings/teams.py +msgid "WBW" +msgstr "" + +#: standings/teams.py +msgid "who-beat-whom" +msgstr "" + +#: standings/templates/current_standings.html +msgid "It also excludes results from silent rounds (if any) and from the current round." +msgstr "" + +#: standings/templates/current_standings.html +#, python-format +msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" +msgstr "" + +#: standings/templates/current_standings.html +#, python-format +msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" +msgstr "" + +#: standings/templates/current_standings_no_round.html +msgid "There aren't any rounds for which results are available." +msgstr "" + +#: standings/templates/reply_standings.html +msgid "Reply speakers are ranked by their average reply score." +msgstr "" + +#: standings/templates/reply_standings.html +#, python-format +msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." +msgstr "" + +#: standings/templates/reply_standings.html +msgid "All reply speakers appear in these standings, no matter how many replies they've missed." +msgstr "" + +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html +#, python-format +msgid "These settings can be changed in the Standings section of this tournament's configuration." +msgstr "" + +#: standings/templates/speaker_standings.html +#, python-format +msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." +msgstr "" + +#: standings/templates/speaker_standings.html +msgid "Speakers are ranked by their average score." +msgstr "" + +#: standings/templates/speaker_standings.html +msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." +msgstr "" + +#: standings/templates/speaker_standings.html +#, python-format +msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." +msgstr "" + +#: standings/templates/speaker_standings.html +msgid "All speakers appear in these standings, no matter how many debates they've missed." +msgstr "" + +#: standings/templates/speaker_standings.html +#, python-format +msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Diversity Overview" +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Non-cis male identifying" +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Cis-male identifying" +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Unspecified/unrecorded" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Standings" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Top Speaks" +msgstr "" + +#: standings/templates/standings_index.html +#, python-format +msgid "%(speaker)s in %(round)s" +msgstr "" + +#: standings/templates/standings_index.html +msgid "No data yet" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Bottom Speaks" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Largest Margins" +msgstr "" + +#: standings/templates/standings_index.html +#, python-format +msgid "%(team)s vs %(opp)s in %(round)s" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Closest Margins" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Top Team Scores" +msgstr "" + +#: standings/templates/standings_index.html +#, python-format +msgid "%(team)s in %(round)s" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Bottom Team Scores" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Most/Least Popular Motions" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Average Speaks" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Overview" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Teams" +msgstr "" + +#: standings/templates/standings_menu.html +msgctxt "All [Teams]" +msgid "All" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Speakers" +msgstr "" + +#: standings/templates/standings_menu.html +msgctxt "Substantive speeches" +msgid "Substantives" +msgstr "" + +#: standings/templates/standings_menu.html +msgctxt "All [Speakers]" +msgid "All" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Speakers " +msgstr "" + +#: standings/templates/standings_menu.html +#, python-format +msgid "%(category)s" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Replies" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Motions" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "By Round" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Diversity" +msgstr "" + +#: standings/templates/team_standings.html +#, python-format +msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." +msgstr "" + +#: standings/views.py +#, python-format +msgid "

    There was an error generating the standings: %(message)s

    " +msgstr "" + +#: standings/views.py +#, python-format +msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " +msgstr "" + +#: standings/views.py +msgid "

    The tab director will need to resolve this issue.

    " +msgstr "" + +#: standings/views.py +#, python-format +msgid "as of %(round)s" +msgstr "" + +#. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix +#: standings/views.py +#, python-format +msgid "%(title)s (Top %(limit)d Only)" +msgstr "" + +#: standings/views.py +msgid "The tab can't be displayed because all rounds so far in this tournament are silent." +msgstr "" + +#: standings/views.py +msgid "Speaker Standings" +msgstr "" + +#: standings/views.py +msgid "Speaker Tab" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Speaker Standings" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Speaker Tab" +msgstr "" + +#: standings/views.py +msgid "Reply Speaker Standings" +msgstr "" + +#: standings/views.py +msgid "Reply speeches aren't enabled in this tournament." +msgstr "" + +#: standings/views.py +msgid "Reply Speaker Tab" +msgstr "" + +#: standings/views.py +msgid "Team Standings" +msgstr "" + +#: standings/views.py +msgid "Team Tab" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Team Standings" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Team Tab" +msgstr "" + +#: standings/views.py +msgid "Current Team Standings" +msgstr "" + +#: standings/views.py +msgid "Points" +msgstr "" + +#: standings/views.py +msgid "Feedback Overview" +msgstr "" + +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +msgstr "" + diff --git a/tabbycat/tournaments/locale/bg/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..31a56344c4e --- /dev/null +++ b/tabbycat/tournaments/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,1033 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" +"Last-Translator: philip_tc\n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/tournaments/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 952\n" + +#: tournaments/apps.py +msgid "Tournaments" +msgstr "" + +#: tournaments/forms.py +msgid "Number of preliminary rounds" +msgstr "" + +#: tournaments/forms.py +msgid "Number of teams in the open break" +msgstr "" + +#: tournaments/forms.py +msgid "Leave blank if there are no break rounds." +msgstr "" + +#: tournaments/forms.py +msgid "Did you agree with their decision?" +msgstr "" + +#: tournaments/forms.py +msgid "Agree?" +msgstr "" + +#: tournaments/forms.py +msgid "Comments" +msgstr "" + +#. Translators: This is the name given to the 'Open Break'. +#: tournaments/forms.py +msgid "Open" +msgstr "" + +#: tournaments/forms.py +msgid "Format Configuration" +msgstr "" + +#: tournaments/forms.py +msgid "Apply a standard set of settings to match a common debate format" +msgstr "" + +#: tournaments/forms.py +msgid "Public Configuration" +msgstr "" + +#: tournaments/forms.py +msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" +msgstr "" + +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +msgstr "" + +#: tournaments/forms.py +msgid "Current preliminary round" +msgstr "" + +#: tournaments/forms.py +msgid "All preliminary rounds have been completed" +msgstr "" + +#: tournaments/forms.py +#, python-format +msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" +msgstr "" + +#: tournaments/forms.py +#, python-format +msgid "All elimination rounds in %(category)s have been completed" +msgstr "" + +#: tournaments/forms.py +msgid "If the current round is a preliminary round, this field must be blank." +msgstr "" + +#: tournaments/forms.py +msgid "If all preliminary rounds have been completed, this field is required." +msgstr "" + +#: tournaments/forms.py +#, python-format +msgid "%(name)s (%(abbreviation)s)" +msgstr "" + +#: tournaments/mixins.py +#, python-format +msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." +msgstr "" + +#: tournaments/mixins.py +#, python-format +msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." +msgstr "" + +#: tournaments/mixins.py +msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." +msgstr "" + +#: tournaments/mixins.py +msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." +msgstr "" + +#: tournaments/mixins.py tournaments/templates/round_complete_check.html +#, python-format +msgid "for %(round)s" +msgstr "" + +#: tournaments/mixins.py +msgid "Return to Draw" +msgstr "" + +#: tournaments/models.py +msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." +msgstr "" + +#: tournaments/models.py +msgid "name" +msgstr "" + +#: tournaments/models.py +msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" +msgstr "" + +#: tournaments/models.py +msgid "short name" +msgstr "" + +#: tournaments/models.py +msgid "The name used in the menu, e.g. \"Australs 2016\"" +msgstr "" + +#: tournaments/models.py +msgid "sequence number" +msgstr "" + +#: tournaments/models.py +msgid "A number that determines the relative order in which tournaments are displayed on the homepage." +msgstr "" + +#: tournaments/models.py +msgid "slug" +msgstr "" + +#: tournaments/models.py +msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" +msgstr "" + +#: tournaments/models.py +msgid "active" +msgstr "" + +#: tournaments/models.py +msgid "tournament" +msgstr "" + +#: tournaments/models.py +msgid "tournaments" +msgstr "" + +#: tournaments/models.py +msgid "Random" +msgstr "" + +#: tournaments/models.py +msgid "Manual" +msgstr "" + +#: tournaments/models.py +msgid "Round-robin" +msgstr "" + +#: tournaments/models.py +msgid "Power-paired" +msgstr "" + +#: tournaments/models.py +msgid "Elimination" +msgstr "" + +#: tournaments/models.py +msgid "Preliminary" +msgstr "" + +#: tournaments/models.py +msgid "None" +msgstr "" + +#: tournaments/models.py +msgid "Draft" +msgstr "" + +#: tournaments/models.py +msgid "Confirmed" +msgstr "" + +#: tournaments/models.py +msgid "Released" +msgstr "" + +#: tournaments/models.py +msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" +msgstr "" + +#: tournaments/models.py +msgid "completed" +msgstr "" + +#: tournaments/models.py +msgid "True if the round is over, which normally means all results have been entered and confirmed" +msgstr "" + +#: tournaments/models.py +msgid "e.g. \"Round 1\"" +msgstr "" + +#: tournaments/models.py +msgid "abbreviation" +msgstr "" + +#: tournaments/models.py +msgid "e.g. \"R1\"" +msgstr "" + +#: tournaments/models.py +msgid "stage" +msgstr "" + +#: tournaments/models.py +msgid "Preliminary = inrounds, elimination = outrounds" +msgstr "" + +#: tournaments/models.py +msgid "draw type" +msgstr "" + +#: tournaments/models.py +msgid "Which draw method to use" +msgstr "" + +#: tournaments/models.py +msgid "break category" +msgstr "" + +#: tournaments/models.py +msgid "If elimination round, which break category" +msgstr "" + +#: tournaments/models.py +msgid "draw status" +msgstr "" + +#: tournaments/models.py +msgid "The status of this round's draw" +msgstr "" + +#: tournaments/models.py +msgid "feedback weight" +msgstr "" + +#: tournaments/models.py +#, no-python-format +msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." +msgstr "" + +#. Translators: A silent round is a round for which results are not disclosed once the round is over. +#: tournaments/models.py +msgid "silent" +msgstr "" + +#: tournaments/models.py +msgid "If marked silent, information about this round (such as its results) will not be shown publicly." +msgstr "" + +#: tournaments/models.py +msgid "motions released" +msgstr "" + +#: tournaments/models.py +msgid "Whether motions will appear on the public website, assuming that feature is turned on" +msgstr "" + +#: tournaments/models.py +msgid "starts at" +msgstr "" + +#: tournaments/models.py +msgid "weight" +msgstr "" + +#: tournaments/models.py +msgid "A factor for the points received in the round. For example, if 2, all points are doubled." +msgstr "" + +#: tournaments/models.py +msgid "round" +msgstr "" + +#: tournaments/models.py +msgid "rounds" +msgstr "" + +#: tournaments/models.py +msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." +msgstr "" + +#: tournaments/models.py +msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." +msgstr "" + +#: tournaments/models.py +msgid "Elimination rounds must have a break category." +msgstr "" + +#: tournaments/templates/assistant_tournament_index.html +msgid "Dashboard" +msgstr "" + +#: tournaments/templates/assistant_tournament_index.html +msgid "Overview" +msgstr "" + +#: tournaments/templates/assistant_tournament_index.html +#, python-format +msgid "current round: %(round)s, status: %(status)s" +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "Welcome to Tabbycat!" +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "Create Account" +msgstr "" + +#: tournaments/templates/configure_tournament.html +#, python-format +msgid "Configure Tournament %(tournament)s" +msgstr "" + +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html +msgid "Tabbycat" +msgstr "" + +#: tournaments/templates/configure_tournament.html +msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." +msgstr "" + +#: tournaments/templates/configure_tournament.html +msgid "Configure Tournament" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Create New Tournament" +msgstr "" + +#: tournaments/templates/create_tournament.html +#, python-format +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Just trying out Tabbycat?" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." +msgstr "" + +#: tournaments/templates/create_tournament.html +#, python-format +msgid "Load %(demo)s" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Create Tournament" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Cancel and go back to the site home page" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Debate Team Missing" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Click the Fix this debate button for that debate." +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Ensure that no side appears more than once in the debate." +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Save the changes." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +#, python-format +msgid "You can also see all the debates in the Debates section of the Edit Database Area." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Debate ID" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +#, python-format +msgid "Teams on %(side)s" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Link to fix this debate" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "No teams" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Multiple teams" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgctxt "button label" +msgid "Fix this debate" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "It looks like all debates are in good shape!" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Welcome to %(tournament)s" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "There is currently no public information available for this tournament." +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Team Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(category)s Team Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Speaker Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(category)s Speaker Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Replies Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Adjudicator Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Motions Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Sides" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Draw for %(round)s" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Draws for Current Rounds" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(round)s's draw has yet to be released" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "The draw for the next round has yet to be released" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Check-Ins" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Results" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Motions" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Team Standings" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(category)s Break" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Breaking Adjudicators" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Diversity" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Participants" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Institutions" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Feedback Progress" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Enter Ballot for %(round)s" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Enter Feedback" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Tournament Staff" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Confirm Round Completion" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Enter Results" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Emails have already been sent." +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Email Team Wins/Losses" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Email Team Points" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "Mark %(round)s as Completed" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "Mark %(round)s as Completed Anyway" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "Go to %(round)s" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "%(round)s has already been marked as completed!" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." +msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." +msgstr[0] "" +msgstr[1] "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "All ballots from %(round)s are confirmed. You should be good to go!" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." +msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." +msgstr[0] "" +msgstr[1] "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " +msgstr "" + +#: tournaments/templates/set_current_round.html +msgid "Set Current Round" +msgstr "" + +#: tournaments/templates/set_current_round.html +msgid "Back to Configuration" +msgstr "" + +#: tournaments/templates/set_current_round.html +#, python-format +msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." +msgstr "" + +#: tournaments/templates/set_current_round.html +#, python-format +msgid "On this page, you can set the current round of the tournament %(tournament)s." +msgstr "" + +#: tournaments/templates/set_current_round.html +#, python-format +msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgctxt "page title" +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgctxt "button" +msgid "Set weights" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Welcome!" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "There are currently no active tournaments set up on this site." +msgstr "" + +#: tournaments/templates/site_index.html +msgid "There are currently no tournaments set up on this site." +msgstr "" + +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "New Tournament" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Edit Database Area" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Send a Test Email" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Import DebateXML" +msgstr "" + +#: tournaments/templates/site_index.html +#, python-format +msgid "Get API Token / Change Password (%(user)s)" +msgstr "" + +#: tournaments/templates/site_index.html +#, python-format +msgid "Log Out (%(user)s)" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Log In as Admin" +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "Welcome to your new tournament!" +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." +msgstr "" + +#. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. +#: tournaments/templates/tournament_index.html +#, python-format +msgid "For more information, please consult our documentation on importing initial data." +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "Use the simple importer to add your initial data." +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "Mark participants as available to prepare a draw for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "Go to the draw area to allocate adjudicators for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "Go to the results area to enter ballots for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." +msgstr "" + +#: tournaments/templates/tournament_index_links.html +#, python-format +msgid "Administrator area for %(tn)s" +msgstr "" + +#: tournaments/templates/tournament_index_links.html +#, python-format +msgid "Assistant area for %(tn)s" +msgstr "" + +#: tournaments/templates/tournament_index_links.html +#, python-format +msgid "Public area for %(tn)s" +msgstr "" + +#: tournaments/utils.py +msgid "affirmative" +msgstr "" + +#: tournaments/utils.py +msgid "negative" +msgstr "" + +#: tournaments/utils.py +msgid "affirmative team" +msgstr "" + +#: tournaments/utils.py +msgid "negative team" +msgstr "" + +#: tournaments/utils.py +msgid "Aff" +msgstr "" + +#: tournaments/utils.py +msgid "Neg" +msgstr "" + +#: tournaments/utils.py +msgid "government" +msgstr "" + +#: tournaments/utils.py +msgid "opposition" +msgstr "" + +#: tournaments/utils.py +msgid "government team" +msgstr "" + +#: tournaments/utils.py +msgid "opposition team" +msgstr "" + +#: tournaments/utils.py +msgid "Gov" +msgstr "" + +#: tournaments/utils.py +msgid "Opp" +msgstr "" + +#: tournaments/utils.py +msgid "proposition" +msgstr "" + +#: tournaments/utils.py +msgid "proposition team" +msgstr "" + +#: tournaments/utils.py +msgid "Prop" +msgstr "" + +#: tournaments/utils.py +msgid "pro" +msgstr "" + +#: tournaments/utils.py +msgid "con" +msgstr "" + +#: tournaments/utils.py +msgid "pro team" +msgstr "" + +#: tournaments/utils.py +msgid "con team" +msgstr "" + +#: tournaments/utils.py +msgid "Pro" +msgstr "" + +#: tournaments/utils.py +msgid "Con" +msgstr "" + +#: tournaments/utils.py +msgid "appellant" +msgstr "" + +#: tournaments/utils.py +msgid "respondent" +msgstr "" + +#: tournaments/utils.py +msgid "appellant team" +msgstr "" + +#: tournaments/utils.py +msgid "respondent team" +msgstr "" + +#: tournaments/utils.py +msgid "App" +msgstr "" + +#: tournaments/utils.py +msgid "Res" +msgstr "" + +#: tournaments/utils.py +msgid "opening government" +msgstr "" + +#: tournaments/utils.py +msgid "opening opposition" +msgstr "" + +#: tournaments/utils.py +msgid "closing government" +msgstr "" + +#: tournaments/utils.py +msgid "closing opposition" +msgstr "" + +#: tournaments/utils.py +msgid "opening government team" +msgstr "" + +#: tournaments/utils.py +msgid "opening opposition team" +msgstr "" + +#: tournaments/utils.py +msgid "closing government team" +msgstr "" + +#: tournaments/utils.py +msgid "closing opposition team" +msgstr "" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "OG" +msgstr "" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "OO" +msgstr "" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "CG" +msgstr "" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "CO" +msgstr "" + +#: tournaments/utils.py +#, python-format +msgid "Round %(number)d" +msgstr "" + +#. Translators: This stands for "Round %(number)d". +#: tournaments/utils.py +#, python-format +msgid "R%(number)d" +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" +msgstr "" + +#: tournaments/views.py +msgid "8-team generic dataset" +msgstr "" + +#: tournaments/views.py +msgid "24-team Australs dataset" +msgstr "" + +#: tournaments/views.py +msgid "88-team BP dataset" +msgstr "" + +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." +msgstr "" + diff --git a/tabbycat/utils/locale/bg/LC_MESSAGES/django.po b/tabbycat/utils/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..d70bf687d61 --- /dev/null +++ b/tabbycat/utils/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,328 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" +"Last-Translator: philip_tc\n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/utils/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 954\n" + +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "" + +#: utils/admin.py +msgid "Speaker" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "" + +#: utils/admin.py +msgid "Confirmed" +msgstr "" + +#: utils/admin.py +msgid "Adjudicator" +msgstr "" + +#: utils/tables.py +msgid "No Data Available" +msgstr "" + +#: utils/tables.py +msgid "Ⓒ" +msgstr "" + +#: utils/tables.py +msgid "Ⓣ" +msgstr "" + +#: utils/tables.py +msgid "chair" +msgstr "" + +#: utils/tables.py +msgid "panellist" +msgstr "" + +#: utils/tables.py +msgid "trainee" +msgstr "" + +#: utils/tables.py +msgid "—" +msgstr "" + +#: utils/tables.py +msgid "Redacted" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "View %(a)s's %(d)s Record" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "View %(team)s's Record" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Code name: %(name)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Real name: %(name)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s won" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s lost" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s—no result" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s placed %(place)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s is advancing" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s was eliminated" +msgstr "" + +#: utils/tables.py +msgid "View/edit debate ballot" +msgstr "" + +#: utils/tables.py +msgid "View debate ballot" +msgstr "" + +#: utils/tables.py +#, python-format +msgid " vs %(opposition)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Won against %(team)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Lost to %(team)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "No result for debate against %(team)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Total speaker score: %s" +msgstr "" + +#: utils/tables.py +msgid "Teams in debate:" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s (%(side)s)" +msgstr "" + +#: utils/tables.py +msgid "??" +msgstr "" + +#: utils/tables.py +msgid "advancing" +msgstr "" + +#: utils/tables.py +msgid "Advancing" +msgstr "" + +#: utils/tables.py +msgid "eliminated" +msgstr "" + +#: utils/tables.py +msgid "Eliminated" +msgstr "" + +#: utils/tables.py +msgid "No result for debate" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Placed %(place)s" +msgstr "" + +#: utils/tables.py +msgid "Name" +msgstr "" + +#: utils/tables.py +msgid "Institution" +msgstr "" + +#: utils/tables.py +msgid "Member of the Adjudication Core" +msgstr "" + +#: utils/tables.py +msgid "Independent Adjudicator" +msgstr "" + +#: utils/tables.py +msgid "Always Trainee" +msgstr "" + +#: utils/tables.py +msgid "in minority" +msgstr "" + +#: utils/tables.py +msgid "Debate Adjudicators" +msgstr "" + +#: utils/tables.py +msgid "Categories" +msgstr "" + +#: utils/tables.py +msgid "Category" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "This room %(predicate)s." +msgstr "" + +#: utils/tables.py +#, python-format +msgid "This room %(predicates)s, and %(last_predicate)s." +msgstr "" + +#: utils/tables.py +msgid "Room" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Teams have met once" +msgid_plural "Teams have met %(count)d times" +msgstr[0] "" +msgstr[1] "" + +#: utils/tables.py +msgid "Teams are from the same institution" +msgstr "" + +#: utils/tables.py +msgid "Conflicts/Flags" +msgstr "" + +#: utils/tables.py +msgid "The confirmed ballot" +msgstr "" + +#: utils/tables.py +msgid "No ballot" +msgstr "" + +#: utils/tables.py +msgid "No scores" +msgstr "" + +#: utils/tables.py +msgid "View Ballot" +msgstr "" + +#: utils/tables.py +msgid "The ballot you submitted" +msgstr "" + +#: utils/tables.py +msgid "View/Edit Ballot" +msgstr "" + +#: utils/tables.py +msgid "Result" +msgstr "" + +#. Translators: "TBC" stands for "to be confirmed". +#: utils/tables.py +msgid "TBC" +msgstr "" + +#: utils/tables.py +msgid "Team iron-personed this round and the last." +msgstr "" + +#: utils/tables.py +msgid "Team iron-personed this round." +msgstr "" + +#: utils/tables.py +msgid "Team iron-personed last round." +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Team %(num)d" +msgstr "" + +#: utils/tables.py +msgid "Postpone" +msgstr "" + +#: utils/views.py +msgid "Whoops! You're not meant to type that URL into your browser." +msgstr "" + diff --git a/tabbycat/venues/locale/bg/LC_MESSAGES/django.po b/tabbycat/venues/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000000..97aee75e2be --- /dev/null +++ b/tabbycat/venues/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,222 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" +"Last-Translator: philip_tc\n" +"Language-Team: Bulgarian\n" +"Language: bg_BG\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: bg\n" +"X-Crowdin-File: /develop/tabbycat/venues/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 956\n" + +#: venues/apps.py +msgid "Rooms" +msgstr "" + +#: venues/consumers.py +msgid "Draw is already released, unrelease draw to assign rooms." +msgstr "" + +#: venues/consumers.py +msgid "Draw is not confirmed, confirm draw to assign rooms." +msgstr "" + +#: venues/consumers.py +msgid "Successfully auto-allocated rooms to debates." +msgstr "" + +#: venues/models.py +msgid "name" +msgstr "" + +#: venues/models.py +msgid "priority" +msgstr "" + +#: venues/models.py +msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" +msgstr "" + +#: venues/models.py +msgid "tournament" +msgstr "" + +#: venues/models.py +msgid "URL" +msgstr "" + +#: venues/models.py +msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" +msgstr "" + +#: venues/models.py +msgid "room" +msgstr "" + +#: venues/models.py +msgid "rooms" +msgstr "" + +#: venues/models.py +msgid "Don't display in room name" +msgstr "" + +#: venues/models.py +msgid "Display as prefix" +msgstr "" + +#: venues/models.py +msgid "Display as suffix" +msgstr "" + +#: venues/models.py +msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." +msgstr "" + +#: venues/models.py +msgid "description" +msgstr "" + +#: venues/models.py +msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." +msgstr "" + +#: venues/models.py +msgid "display in room name" +msgstr "" + +#: venues/models.py +msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" +msgstr "" + +#: venues/models.py +msgid "display in public tooltip" +msgstr "" + +#: venues/models.py +msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." +msgstr "" + +#: venues/models.py +msgid "room category" +msgstr "" + +#: venues/models.py +msgid "room categories" +msgstr "" + +#: venues/models.py +msgid "category" +msgstr "" + +#: venues/models.py +msgid "subject content type" +msgstr "" + +#: venues/models.py +msgid "subject ID" +msgstr "" + +#: venues/models.py +msgid "room constraint" +msgstr "" + +#: venues/models.py +msgid "room constraints" +msgstr "" + +#: venues/templates/venue_categories_edit.html +msgid "Room Categories" +msgstr "" + +#: venues/templates/venue_categories_edit.html +msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." +msgstr "" + +#: venues/templates/venue_categories_edit.html +#, python-format +msgid "If you want to delete room categories, use the Edit Database area." +msgstr "" + +#: venues/templates/venue_categories_edit.html +msgid "Save Room Categories" +msgstr "" + +#: venues/templates/venue_constraints_edit.html +msgid "Room Constraints" +msgstr "" + +#: venues/templates/venue_constraints_edit.html +msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." +msgstr "" + +#: venues/templates/venue_constraints_edit.html +msgid "Save Room Constraints" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room constraint of %(name)s met (%(category)s)" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room does not meet any constraint of %(name)s" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" +msgstr "" + +#: venues/views.py +msgid "Edit Rooms" +msgstr "" + +#: venues/views.py +#, python-format +msgid "Saved room category: %(list)s" +msgid_plural "Saved venue categories: %(list)s" +msgstr[0] "" +msgstr[1] "" + +#: venues/views.py +msgid "No changes were made to the room categories." +msgstr "" + +#: venues/views.py +#, python-format +msgid "%s (Adjudicator)" +msgstr "" + +#: venues/views.py +#, python-format +msgid "%s (Team)" +msgstr "" + +#: venues/views.py +#, python-format +msgid "%s (Institution)" +msgstr "" + +#: venues/views.py +#, python-format +msgid "Saved %(count)d room constraint." +msgid_plural "Saved %(count)d room constraints." +msgstr[0] "" +msgstr[1] "" + From 45c6a12c52e588082088a5c2afced29859444ea8 Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Thu, 24 Nov 2022 02:08:39 +1100 Subject: [PATCH 205/255] New translations django.po (Catalan) --- docs/locale/ca/LC_MESSAGES/about/authors.po | 72 + docs/locale/ca/LC_MESSAGES/about/changelog.po | 1922 +++++++++++++++++ .../ca/LC_MESSAGES/about/contributing.po | 352 +++ docs/locale/ca/LC_MESSAGES/about/licence.po | 80 + docs/locale/ca/LC_MESSAGES/about/support.po | 56 + .../LC_MESSAGES/about/tournament-history.po | 248 +++ .../features/adjudicator-allocation.po | 160 ++ .../features/adjudicator-feedback.po | 258 +++ .../locale/ca/LC_MESSAGES/features/backups.po | 120 + docs/locale/ca/LC_MESSAGES/features/breaks.po | 212 ++ .../ca/LC_MESSAGES/features/check-ins.po | 136 ++ .../ca/LC_MESSAGES/features/data-entry.po | 168 ++ .../ca/LC_MESSAGES/features/data-importers.po | 272 +++ .../features/draw-generation-bp.po | 598 +++++ .../LC_MESSAGES/features/draw-generation.po | 436 ++++ .../ca/LC_MESSAGES/features/notifications.po | 257 +++ .../LC_MESSAGES/features/preformed-panels.po | 176 ++ .../ca/LC_MESSAGES/features/printing.po | 68 + .../LC_MESSAGES/features/standings-rules.po | 272 +++ .../LC_MESSAGES/features/team-code-names.po | 104 + .../ca/LC_MESSAGES/features/user-accounts.po | 196 ++ .../LC_MESSAGES/features/venue-constraints.po | 168 ++ .../ca/LC_MESSAGES/guide/comparisons.po | 338 +++ docs/locale/ca/LC_MESSAGES/guide/scaling.po | 252 +++ .../LC_MESSAGES/guide/tournament-logistics.po | 1394 ++++++++++++ docs/locale/ca/LC_MESSAGES/guide/upgrading.po | 60 + docs/locale/ca/LC_MESSAGES/index.po | 48 + docs/locale/ca/LC_MESSAGES/install/docker.po | 173 ++ docs/locale/ca/LC_MESSAGES/install/heroku.po | 445 ++++ docs/locale/ca/LC_MESSAGES/install/linux.po | 249 +++ docs/locale/ca/LC_MESSAGES/install/local.po | 156 ++ docs/locale/ca/LC_MESSAGES/install/osx.po | 216 ++ docs/locale/ca/LC_MESSAGES/install/windows.po | 317 +++ docs/locale/ca/LC_MESSAGES/install/wsl.po | 100 + .../LC_MESSAGES/use/finishing-a-tournament.po | 80 + .../ca/LC_MESSAGES/use/importing-data.po | 236 ++ .../LC_MESSAGES/use/running-a-tournament.po | 196 ++ .../LC_MESSAGES/use/starting-a-tournament.po | 196 ++ .../actionlog/locale/ca/LC_MESSAGES/django.po | 323 +++ .../locale/ca/LC_MESSAGES/django.po | 451 ++++ .../locale/ca/LC_MESSAGES/django.po | 966 +++++++++ .../locale/ca/LC_MESSAGES/django.po | 392 ++++ .../breakqual/locale/ca/LC_MESSAGES/django.po | 525 +++++ tabbycat/draw/locale/ca/LC_MESSAGES/django.po | 1119 ++++++++++ .../importer/locale/ca/LC_MESSAGES/django.po | 421 ++++ tabbycat/locale/ca/LC_MESSAGES/django.po | 957 ++++++++ tabbycat/locale/ca/LC_MESSAGES/djangojs.po | 554 +++++ .../motions/locale/ca/LC_MESSAGES/django.po | 399 ++++ .../locale/ca/LC_MESSAGES/django.po | 416 ++++ .../options/locale/ca/LC_MESSAGES/django.po | 1618 ++++++++++++++ .../locale/ca/LC_MESSAGES/django.po | 964 +++++++++ .../printing/locale/ca/LC_MESSAGES/django.po | 125 ++ .../locale/ca/LC_MESSAGES/django.po | 179 ++ .../results/locale/ca/LC_MESSAGES/django.po | 1093 ++++++++++ .../standings/locale/ca/LC_MESSAGES/django.po | 612 ++++++ .../locale/ca/LC_MESSAGES/django.po | 1033 +++++++++ .../utils/locale/ca/LC_MESSAGES/django.po | 328 +++ .../venues/locale/ca/LC_MESSAGES/django.po | 222 ++ 58 files changed, 23484 insertions(+) create mode 100644 docs/locale/ca/LC_MESSAGES/about/authors.po create mode 100644 docs/locale/ca/LC_MESSAGES/about/changelog.po create mode 100644 docs/locale/ca/LC_MESSAGES/about/contributing.po create mode 100644 docs/locale/ca/LC_MESSAGES/about/licence.po create mode 100644 docs/locale/ca/LC_MESSAGES/about/support.po create mode 100644 docs/locale/ca/LC_MESSAGES/about/tournament-history.po create mode 100644 docs/locale/ca/LC_MESSAGES/features/adjudicator-allocation.po create mode 100644 docs/locale/ca/LC_MESSAGES/features/adjudicator-feedback.po create mode 100644 docs/locale/ca/LC_MESSAGES/features/backups.po create mode 100644 docs/locale/ca/LC_MESSAGES/features/breaks.po create mode 100644 docs/locale/ca/LC_MESSAGES/features/check-ins.po create mode 100644 docs/locale/ca/LC_MESSAGES/features/data-entry.po create mode 100644 docs/locale/ca/LC_MESSAGES/features/data-importers.po create mode 100644 docs/locale/ca/LC_MESSAGES/features/draw-generation-bp.po create mode 100644 docs/locale/ca/LC_MESSAGES/features/draw-generation.po create mode 100644 docs/locale/ca/LC_MESSAGES/features/notifications.po create mode 100644 docs/locale/ca/LC_MESSAGES/features/preformed-panels.po create mode 100644 docs/locale/ca/LC_MESSAGES/features/printing.po create mode 100644 docs/locale/ca/LC_MESSAGES/features/standings-rules.po create mode 100644 docs/locale/ca/LC_MESSAGES/features/team-code-names.po create mode 100644 docs/locale/ca/LC_MESSAGES/features/user-accounts.po create mode 100644 docs/locale/ca/LC_MESSAGES/features/venue-constraints.po create mode 100644 docs/locale/ca/LC_MESSAGES/guide/comparisons.po create mode 100644 docs/locale/ca/LC_MESSAGES/guide/scaling.po create mode 100644 docs/locale/ca/LC_MESSAGES/guide/tournament-logistics.po create mode 100644 docs/locale/ca/LC_MESSAGES/guide/upgrading.po create mode 100644 docs/locale/ca/LC_MESSAGES/index.po create mode 100644 docs/locale/ca/LC_MESSAGES/install/docker.po create mode 100644 docs/locale/ca/LC_MESSAGES/install/heroku.po create mode 100644 docs/locale/ca/LC_MESSAGES/install/linux.po create mode 100644 docs/locale/ca/LC_MESSAGES/install/local.po create mode 100644 docs/locale/ca/LC_MESSAGES/install/osx.po create mode 100644 docs/locale/ca/LC_MESSAGES/install/windows.po create mode 100644 docs/locale/ca/LC_MESSAGES/install/wsl.po create mode 100644 docs/locale/ca/LC_MESSAGES/use/finishing-a-tournament.po create mode 100644 docs/locale/ca/LC_MESSAGES/use/importing-data.po create mode 100644 docs/locale/ca/LC_MESSAGES/use/running-a-tournament.po create mode 100644 docs/locale/ca/LC_MESSAGES/use/starting-a-tournament.po create mode 100644 tabbycat/actionlog/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/adjallocation/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/adjfeedback/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/availability/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/breakqual/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/draw/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/importer/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/locale/ca/LC_MESSAGES/djangojs.po create mode 100644 tabbycat/motions/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/notifications/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/options/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/participants/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/printing/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/privateurls/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/results/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/standings/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/tournaments/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/utils/locale/ca/LC_MESSAGES/django.po create mode 100644 tabbycat/venues/locale/ca/LC_MESSAGES/django.po diff --git a/docs/locale/ca/LC_MESSAGES/about/authors.po b/docs/locale/ca/LC_MESSAGES/about/authors.po new file mode 100644 index 00000000000..65f90133d1e --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/about/authors.po @@ -0,0 +1,72 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:09\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/authors.po\n" +"X-Crowdin-File-ID: 1259\n" +"Language: ca_ES\n" + +#: ../../../AUTHORS.rst:3 +msgid "Authors & Acknowledgements" +msgstr "" + +#: ../../../AUTHORS.rst:6 +msgid "Authors" +msgstr "" + +#: ../../../AUTHORS.rst:8 +msgid "Tabbycat was authored by Qi-Shan Lim for Auckland Australs 2010. The current active maintainers are:" +msgstr "" + +#: ../../../AUTHORS.rst:10 +msgid "Philip Belesky (`pb-e-mail `_)" +msgstr "" + +#: ../../../AUTHORS.rst:11 +msgid "Chuan-Zheng Lee (`cz-e-mail `_)" +msgstr "" + +#: ../../../AUTHORS.rst:13 +msgid "Please don't hesitate to contact us with any suggestions, expressions of interest or generally anything relating to Tabbycat." +msgstr "" + +#: ../../../AUTHORS.rst:16 +msgid "Contributors" +msgstr "" + +#: ../../../AUTHORS.rst:18 +msgid "Étienne Beaulé has contributed many features, fixes, and suggestions across many aspects of Tabbycat." +msgstr "" + +#: ../../../AUTHORS.rst:19 +msgid "Thevesh Theva contributed the algorithm for calculating the liveness of teams within a particular break category." +msgstr "" + +#: ../../../AUTHORS.rst:20 +msgid "Viran Weerasekera contributed the statistical tests used to estimate the degree to which a motion's results and vetoes are balanced." +msgstr "" + +#: ../../../AUTHORS.rst:21 +msgid "Viran Weerasekera, Valerie Tierney, Molly Dale, Madeline Schultz, and Vail Bromberger contributed to the \"Tournament Logistics\" section of our documentation." +msgstr "" + +#: ../../../AUTHORS.rst:24 +msgid "Sponsors" +msgstr "" + +#: ../../../AUTHORS.rst:26 +msgid "Thanks to the Western Australian Debating League for sponsoring various features related to organising division-based tournaments and round-robin based draw methods." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/about/changelog.po b/docs/locale/ca/LC_MESSAGES/about/changelog.po new file mode 100644 index 00000000000..974aa4139e4 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/about/changelog.po @@ -0,0 +1,1922 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:09\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/changelog.po\n" +"X-Crowdin-File-ID: 1261\n" +"Language: ca_ES\n" + +#: ../../../CHANGELOG.rst:3 +msgid "Change Log" +msgstr "" + +#: ../../../CHANGELOG.rst:6 +msgid "2.4.0 (Maine)" +msgstr "" + +#: ../../../CHANGELOG.rst:7 +msgid "*Release date: ?*" +msgstr "" + +#: ../../../CHANGELOG.rst:9 +msgid "Added support for Russian, and shortened the language selector" +msgstr "" + +#: ../../../CHANGELOG.rst:10 +msgid "Renamed 'test score' to 'base score'" +msgstr "" + +#: ../../../CHANGELOG.rst:11 +msgid "Divisions-specific features have been deprecated and removed" +msgstr "" + +#: ../../../CHANGELOG.rst:12 +msgid "Moved the 'Edit Database' menu item to the dropdown with the logo in the admin navigation" +msgstr "" + +#: ../../../CHANGELOG.rst:13 +msgid "Pull-ups can now be restricted to teams with the lowest draw strength (by speaker or team points) of their bracket" +msgstr "" + +#: ../../../CHANGELOG.rst:14 +msgid "The number of pull-ups and draw strength by speaker score are now available as team standing metrics" +msgstr "" + +#: ../../../CHANGELOG.rst:15 +msgid "Added the new emoji that come along with Unicode 11 — thanks to Viran Weerasekera for this addition!" +msgstr "" + +#: ../../../CHANGELOG.rst:16 +msgid "The 'Show adjudicator institutions' preference now covers a wider range of cases; meaning that if it is unchecked then all adjudicator's institutional affiliations should be hidden from the public" +msgstr "" + +#: ../../../CHANGELOG.rst:20 +msgid "2.3.2" +msgstr "" + +#: ../../../CHANGELOG.rst:21 +msgid "*Release date: 19 October 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:23 +msgid "Fixed issue where teams would appear to be unavailable in break rounds" +msgstr "" + +#: ../../../CHANGELOG.rst:24 ../../../CHANGELOG.rst:294 +#: ../../../CHANGELOG.rst:302 ../../../CHANGELOG.rst:314 +msgid "Other minor fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:28 +msgid "2.3.1" +msgstr "" + +#: ../../../CHANGELOG.rst:29 +msgid "*Release date: 6 October 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:31 +msgid "Fixed issue where the institutions list would count teams/adjudicators outside of the tournament" +msgstr "" + +#: ../../../CHANGELOG.rst:32 +msgid "Fixed issue where a rejected ballot form would crash rather than providing an error message" +msgstr "" + +#: ../../../CHANGELOG.rst:33 +msgid "Fixed issue where the javascript bundle would not build on a local windows install" +msgstr "" + +#: ../../../CHANGELOG.rst:34 +msgid "Fixed issue where the adjudicator record pages would show an unreleased motion if that round's draw was released" +msgstr "" + +#: ../../../CHANGELOG.rst:38 +msgid "2.3.0 (LaPerm)" +msgstr "" + +#: ../../../CHANGELOG.rst:39 +msgid "*Release date: 27 September 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:44 +msgid "Added a preformed panel system which provides a powerful take on a 'shadow draw' workflow" +msgstr "" + +#: ../../../CHANGELOG.rst:42 +msgid "Shadow draw systems allow an adjudication core to form panels prior to a round being drawn. For example, the panels for Round 4 could be formed while Round 3 is taking place. Most implementations do so by having the tab system create a copy of the Round 3 draw, form new panels on top of it, and then transpose these panels onto Round 4. In large tournaments this workflow allows an adjudication core much more time to consider panel formation" +msgstr "" + +#: ../../../CHANGELOG.rst:43 +msgid "Tabbycat's preformed panels are formed per-round under a section available under the Setup menu. This interface looks like the standard Edit Adjudicators interface, but the 'debates' shown are based on a simulation of that round's results. These fake debates can then be prioritised" +msgstr "" + +#: ../../../CHANGELOG.rst:44 +msgid "Adjudicators can then be allocated to those fake debates in order to create a pre-formed panel. When the real draw is ready to be created, the priority of each preformed panel will be matched to the priority of the real debates" +msgstr "" + +#: ../../../CHANGELOG.rst:45 +msgid "By using the existing per-debate priority system, and by giving pre-formed panels their own priority, this workflow allows for very fine amounts of control over exactly how preformed panels are allocated as compared to a more simple top-down transposition of panels. Adjudication cores can easily target general areas of the draw (e.g. break-threshold brackets); control adjudicator strength within and across panels; and still account for special cases where a debate requires a particularly strong panel. At the same time, our existing options for automatic prioritisation and automatic allocation apply to all steps of this process so that preformed panels can be created and deployed rapidly" +msgstr "" + +#: ../../../CHANGELOG.rst:50 +msgid "Rewrote the Edit Adjudication, Venues, and Teams pages to enable a number of enhancements" +msgstr "" + +#: ../../../CHANGELOG.rst:47 +msgid "These pages now live-update changes that were made on other instances of that page. As a result, users on different computers can each open the Edit Adjudicators page and see the changes made by the other users. This feature, along with sharding, should make it easier than ever to distribute the task of adjudicator allocation across an entire adjudication core" +msgstr "" + +#: ../../../CHANGELOG.rst:48 +msgid "A new interface layout should better maximise space, particularly in BP settings, while also increasing the font size of key information" +msgstr "" + +#: ../../../CHANGELOG.rst:49 +msgid "The unused panel is now able to sort adjudicators by name, score, or drag order" +msgstr "" + +#: ../../../CHANGELOG.rst:50 +msgid "Average scores for all adjudicators, and a voting majority, are now shown next to the panel" +msgstr "" + +#: ../../../CHANGELOG.rst:51 +msgid "Various allocation-relevant settings, such as the minimum feedback score needed for a voting position, are now available inline on the allocation page itself. This should enable much faster tweaks/iterations of these values" +msgstr "" + +#: ../../../CHANGELOG.rst:52 +msgid "The ballot entry page will now indicate which teams have currently or recently given 'iron person' speeches so that these can be easily tracked, audited, and confirmed. It does show by showing both a text-highlight/icon in the table and in a dedicated modal window. Thanks to Étienne Beaulé for contributing this feature!" +msgstr "" + +#: ../../../CHANGELOG.rst:54 +msgid "Split up the Django settings files. Note that this means if you are upgrading a local install of Tabbycat to this version you will need to:" +msgstr "" + +#: ../../../CHANGELOG.rst:54 +msgid "Copy ``tabbycat/settings/local.example`` to become ``local.py`` (and fill in your original database details)" +msgstr "" + +#: ../../../CHANGELOG.rst:55 +msgid "Optional: repeat the same copying procedure for ``development.example`` and set the ``LOCAL_DEVELOPMENT`` environmental variable to ``True`` if you would like to use the settings designed to aid local development" +msgstr "" + +#: ../../../CHANGELOG.rst:61 +msgid "A range of improvements to the email notifications contributed by Étienne Beaulé:" +msgstr "" + +#: ../../../CHANGELOG.rst:57 +msgid "Ballot receipt emails now provide more information about team scores/points" +msgstr "" + +#: ../../../CHANGELOG.rst:58 +msgid "Emails are now in a rich-text format" +msgstr "" + +#: ../../../CHANGELOG.rst:59 +msgid "Custom emails may be sent out to select participants through the web-interface" +msgstr "" + +#: ../../../CHANGELOG.rst:60 +msgid "Participants can be specifically included or excluded from receiving a notification before sending with checks for duplicate messages" +msgstr "" + +#: ../../../CHANGELOG.rst:61 +msgid "Teams can be sent emails with their draw details" +msgstr "" + +#: ../../../CHANGELOG.rst:62 +msgid "Emails can be tracked to determine if sent or read (SendGrid-specific)" +msgstr "" + +#: ../../../CHANGELOG.rst:65 +msgid "Expanded the use of private URLs (Encore Étienne Beaulé):" +msgstr "" + +#: ../../../CHANGELOG.rst:64 +msgid "QR codes are now included in addition to the URL when printing private URLs" +msgstr "" + +#: ../../../CHANGELOG.rst:65 +msgid "Private landing pages will now display check-in status (if check-ins are used) along with further details regarding break categories, regions, etc." +msgstr "" + +#: ../../../CHANGELOG.rst:66 +msgid "Current and former draw assignments will display along with submitted ballots (for adjudicators) on landing pages" +msgstr "" + +#: ../../../CHANGELOG.rst:70 +msgid "Reworked how conflicts are determined to support double-past institutional conflicts:" +msgstr "" + +#: ../../../CHANGELOG.rst:68 +msgid "Added a \"team-institution conflict\" model" +msgstr "" + +#: ../../../CHANGELOG.rst:69 +msgid "Like adjudicator-institution conflicts, team-institution conflicts are automatically created if you use the simple importer or the command-line importer; but if you edit the database, it's your responsibility to add/edit them" +msgstr "" + +#: ../../../CHANGELOG.rst:70 +msgid "Institutional affiliations no longer matter for determining conflicts for either teams or adjudicators; only institutions listed in the team's or adjudicator's conflicts matter" +msgstr "" + +#: ../../../CHANGELOG.rst:71 +msgid "An adjudicator/team now conflicts with an adjudicator if *any* institution appears as an institutional conflict for both parties" +msgstr "" + +#: ../../../CHANGELOG.rst:72 +msgid "When printing scoresheets you can now edit the motions display just on that printing page. This allows you to use placeholder motions in Tabbycat (in order to prevent leaks) while still producing ballots with the correct motions" +msgstr "" + +#: ../../../CHANGELOG.rst:73 +msgid "Tabbycat no longer tracks which round is the 'current' round and instead tracks the completion of individual rounds. This change does not alter any existing workflows, but makes it easier to run simultaneous draws in out-rounds" +msgstr "" + +#: ../../../CHANGELOG.rst:74 +msgid "Info-slides can now be split into paragraphs" +msgstr "" + +#: ../../../CHANGELOG.rst:75 +msgid "Check-in pages now differentiate between teams with 1 and 2 checked-in people in two-team formats" +msgstr "" + +#: ../../../CHANGELOG.rst:76 +msgid "Institutional caps in breaks can be based on the number of teams in the break. Thanks to Viran Weerasekera for this feature!" +msgstr "" + +#: ../../../CHANGELOG.rst:77 +msgid "Several Tabbycat functions, adjudicator/venue allocation and email notifications, have been shifted to worker processes to help make them more reliable. If you are upgrading a Tabbycat instance that you will continue to use for new tournaments you will need to install the Heroku toolbelt and run ``heroku ps:scale worker=1``" +msgstr "" + +#: ../../../CHANGELOG.rst:78 +msgid "Upgraded to Python 3.6, dropped support for Python 3.5 and below. Note that this will require you to upgrade your python versions if running locally." +msgstr "" + +#: ../../../CHANGELOG.rst:82 +msgid "2.2.10" +msgstr "" + +#: ../../../CHANGELOG.rst:83 +msgid "*Release date: 10 February 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:85 +msgid "Fixed the display of feedback quantities on the Feedback Overview Page" +msgstr "" + +#: ../../../CHANGELOG.rst:86 +msgid "Fixed issue where 'ignored' feedback would hide the result from the feedback graph but not affect an adjudicator's current score. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:90 +msgid "2.2.9" +msgstr "" + +#: ../../../CHANGELOG.rst:91 +msgid "*Release date: 24 January 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:93 +msgid "Fixed an issue that could cause errors for tournaments when using an atypical number of rounds and break sizes. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:94 +msgid "Fixed an issue where the display of adjudicator's record links would display their name twice" +msgstr "" + +#: ../../../CHANGELOG.rst:98 +msgid "2.2.8" +msgstr "" + +#: ../../../CHANGELOG.rst:99 +msgid "*Release date: 14 December 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:101 +msgid "Fix issue where the check-in buttons were always disabled on admin and assistant pages" +msgstr "" + +#: ../../../CHANGELOG.rst:102 +msgid "Other minor fixes. Thanks to Étienne for these and for the check-in button fix!" +msgstr "" + +#: ../../../CHANGELOG.rst:106 +msgid "2.2.7" +msgstr "" + +#: ../../../CHANGELOG.rst:107 +msgid "*Release date: 16 November 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:109 +msgid "Lock redis-py version to 2.10.6, as workaround for `compatibility issue between django-redis and redis-py `_" +msgstr "" + +#: ../../../CHANGELOG.rst:110 +msgid "Fix login link on page shown after a user logs out" +msgstr "" + +#: ../../../CHANGELOG.rst:114 +msgid "2.2.6" +msgstr "" + +#: ../../../CHANGELOG.rst:115 +msgid "*Release date: 14 November 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:117 +msgid "Fix issue where check-ins could not be revoked" +msgstr "" + +#: ../../../CHANGELOG.rst:118 +msgid "Fix issue where the standings overview 'dashboard' included scores from elimination rounds. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:119 +msgid "Fix issue where the Average Individual Speaker Score metric would fail to calculate in some circumstances. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:120 +msgid "Fix issue where draw emails would crash if venues were unspecified. Thanks, again, to Étienne for this fix!" +msgstr "" + +#: ../../../CHANGELOG.rst:124 +msgid "2.2.5" +msgstr "" + +#: ../../../CHANGELOG.rst:125 +msgid "*Release date: 21 October 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:127 +msgid "Remove the buttons from the public check-ins page (as these do nothing unless the user is logged in)" +msgstr "" + +#: ../../../CHANGELOG.rst:128 +msgid "Hopefully fixed error that could cause Team- and Adjudicator- Institutional conflicts to not show properly on Allocation pages" +msgstr "" + +#: ../../../CHANGELOG.rst:129 +msgid "Thanks to Étienne for pull requests fixing rare bugs in the user creation form and break generation when rounds are not present" +msgstr "" + +#: ../../../CHANGELOG.rst:133 +msgid "2.2.4" +msgstr "" + +#: ../../../CHANGELOG.rst:134 +msgid "*Release date: 9 October 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:136 +msgid "Small fixes for functions related to email sending, conflict highlighting, and certain configurations of standings metrics" +msgstr "" + +#: ../../../CHANGELOG.rst:140 +msgid "2.2.3" +msgstr "" + +#: ../../../CHANGELOG.rst:141 +msgid "*Release date: 28 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:143 +msgid "*Literally* fix the issue causing public views of released scoresheets to throw errors (thanks for the pull request Étienne)" +msgstr "" + +#: ../../../CHANGELOG.rst:144 +msgid "Fix minor spacing issues in printed ballots (thanks for the pull request Étienne)" +msgstr "" + +#: ../../../CHANGELOG.rst:145 +msgid "Fix issue where institution-less adjudicators would cause some draw views to crash (thanks for the pull request Étienne)" +msgstr "" + +#: ../../../CHANGELOG.rst:149 +msgid "2.2.2" +msgstr "" + +#: ../../../CHANGELOG.rst:150 +msgid "*Release date: 22 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:152 +msgid "*Actually* fix the issue causing public views of released scoresheets to throw errors" +msgstr "" + +#: ../../../CHANGELOG.rst:156 +msgid "2.2.1" +msgstr "" + +#: ../../../CHANGELOG.rst:157 +msgid "*Release date: 21 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:159 +msgid "Fix issue causing public views of released scoresheets to throw errors" +msgstr "" + +#: ../../../CHANGELOG.rst:163 +msgid "2.2.0 (Khao Manee)" +msgstr "" + +#: ../../../CHANGELOG.rst:164 +msgid "*Release date: 20 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:167 +msgid "Implemented a new server architecture on Heroku along with other optimisation that should significantly improve the performance of sites receiving lots of traffic. Note that if you are upgrading an existing Heroku instance this requires a few tweaks before you deploy the update:" +msgstr "" + +#: ../../../CHANGELOG.rst:167 +msgid "Add the `https://github.com/heroku/heroku-buildpack-nginx.git` build pack under the Settings area of the Heroku Dashboard and positioning it first" +msgstr "" + +#: ../../../CHANGELOG.rst:168 +msgid "If your Heroku Stack is not \"heroku-16\" (noted under that same Settings page) it will need to be set as such using the Heroku CLI and the ``heroku stack:set heroku-16 --app APP_NAME`` command" +msgstr "" + +#: ../../../CHANGELOG.rst:169 +msgid "Added a page to the documentation that details how to scale a Tabbycat site that is receiving large amounts of traffic; and another page that documents how to upgrade a Tabbycat site to a new version" +msgstr "" + +#: ../../../CHANGELOG.rst:170 +msgid "Added support for Japanese and Portuguese. Let us know if you'd like to help contribute translations for either language (or a new one)!" +msgstr "" + +#: ../../../CHANGELOG.rst:171 +msgid "The results-entry page now updates its data live, giving you a more up to date look at data entry progress and reducing the cases of old data leading people to enter new ballots when they meant to confirm them" +msgstr "" + +#: ../../../CHANGELOG.rst:178 +msgid "A huge thanks to Étienne Beaulé for contributing a number of major new features and bug fixes. Notably:" +msgstr "" + +#: ../../../CHANGELOG.rst:173 +msgid "Added a means to mark feedback as 'ignored' so that it still is recorded as having been submitted, but does not affect the targeted-adjudicator's feedback score" +msgstr "" + +#: ../../../CHANGELOG.rst:174 +msgid "Added email notification to adjudicators on round release" +msgstr "" + +#: ../../../CHANGELOG.rst:175 +msgid "Implemented participant self-check-in through the use of their private URLs" +msgstr "" + +#: ../../../CHANGELOG.rst:176 +msgid "Gave all participants to a tournament a private URL key rather than being by team, and added a landing page for the participants using this key" +msgstr "" + +#: ../../../CHANGELOG.rst:177 +msgid "Implemented templated email notifications with ballot submission and round advance with the messages in a new settings panel. Private URL emails are now also customizable" +msgstr "" + +#: ../../../CHANGELOG.rst:178 +msgid "Added the \"average individual speaker score\" metric which averages the scores of all substantive speeches by the team within preliminary rounds. The old \"average speaker score\" metric has been renamed to to \"average total speaker score\"" +msgstr "" + +#: ../../../CHANGELOG.rst:179 +msgid "Reworked the ballots status graph to be an area chart" +msgstr "" + +#: ../../../CHANGELOG.rst:180 +msgid "Added the ability to hide motions on printed ballots (even if they have been entered). Thanks to Github user 0zlw for the feature request!" +msgstr "" + +#: ../../../CHANGELOG.rst:181 +msgid "Added the ability to unconfirm feedback from any of the views that show it" +msgstr "" + +#: ../../../CHANGELOG.rst:182 +msgid "BP motion statistics now also show average points split by bench and half" +msgstr "" + +#: ../../../CHANGELOG.rst:183 +msgid "Added a warning when users are close to their free-tier database limit on Heroku that makes it clear not to create new tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:184 +msgid "Added ``exportconfig`` and ``importconfig`` management commands to export and import tournament configurations to a JSON file" +msgstr "" + +#: ../../../CHANGELOG.rst:185 +msgid "Upgraded `django-dynamic-preferences `_ to version 1.6" +msgstr "" + +#: ../../../CHANGELOG.rst:187 +msgid "This won't affect most users, but advanced users previously having problems with a stray ``dynamic_preferences_users_userpreferencemodel`` table who are upgrading an existing instance may wish to run the SQL command ``DROP TABLE dynamic_preferences_users_userpreferencemodel;`` to remove this stray table. When this table was present, it caused an inconsistency between migration state and database schema that in turned caused the ``python manage.py flush`` command to fail. More information is available in the `django-dynamic-preferences changelog `_" +msgstr "" + +#: ../../../CHANGELOG.rst:191 +msgid "2.1.3" +msgstr "" + +#: ../../../CHANGELOG.rst:192 +msgid "*Release date: 21 August 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:194 +msgid "Added an alert for British Parliamentary format grand-final ballots that explains the workaround needed to nominate a sole winner" +msgstr "" + +#: ../../../CHANGELOG.rst:195 +msgid "Improved display of images shown when sharing Tabbycat links on social media" +msgstr "" + +#: ../../../CHANGELOG.rst:196 +msgid "Optimised the performance of several commonly-loaded pages. Thanks to Étienne Beaulé for the pull request!" +msgstr "" + +#: ../../../CHANGELOG.rst:197 +msgid "Prevented the entry of integer-scale feedback questions without the required min/max attributes" +msgstr "" + +#: ../../../CHANGELOG.rst:198 +msgid "Provided a shortcut link to editing a round's feedback weight" +msgstr "" + +#: ../../../CHANGELOG.rst:199 +msgid "Prevented standings from crashing when only a single standings metric is set" +msgstr "" + +#: ../../../CHANGELOG.rst:203 +msgid "2.1.2" +msgstr "" + +#: ../../../CHANGELOG.rst:204 +msgid "*Release date: 14 July 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:206 +msgid "Fixed an error caused when calculating breaks including teams without institutions" +msgstr "" + +#: ../../../CHANGELOG.rst:207 +msgid "Improved display of long motions and info slides" +msgstr "" + +#: ../../../CHANGELOG.rst:208 +msgid "Fixed bug in feedback progress tracking with UADC-style adjudication" +msgstr "" + +#: ../../../CHANGELOG.rst:209 +msgid "Fixed bug where the public checks page would cause large amounts of failing requests" +msgstr "" + +#: ../../../CHANGELOG.rst:210 +msgid "Fixed visual issue with adjudicator lists wrapping poorly on mobile devices" +msgstr "" + +#: ../../../CHANGELOG.rst:211 +msgid "Limited the time it takes to serve requests to match Heroku's in-built limit; this may help improve the performance of sites under heavy load" +msgstr "" + +#: ../../../CHANGELOG.rst:215 +msgid "2.1.1" +msgstr "" + +#: ../../../CHANGELOG.rst:216 +msgid "*Release date: 19 May 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:218 +msgid "The Scan Identifiers page now orders check-ins from top to bottom" +msgstr "" + +#: ../../../CHANGELOG.rst:219 +msgid "The Scan Identifiers now plays different sounds for failed check-ins" +msgstr "" + +#: ../../../CHANGELOG.rst:220 +msgid "The Scan Identifiers now has a toggle for sounds; allowing it to work in browsers like Safari that block auto-playing audio" +msgstr "" + +#: ../../../CHANGELOG.rst:224 +msgid "2.1.0 (Japanese Bobtail)" +msgstr "" + +#: ../../../CHANGELOG.rst:225 +msgid "*Release date: 7 May 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:227 +msgid "Added an introductory modal for the adjudicator allocation page to help outline how the features and workflow operate" +msgstr "" + +#: ../../../CHANGELOG.rst:228 +msgid "Added an automated method for assigning importances to debates using their bracket or 'liveness'. This should allow smaller tournaments to more easily assign importances and save time for larger tournaments that do so" +msgstr "" + +#: ../../../CHANGELOG.rst:230 +msgid "Added the ability to switch between using 'team codes' and standard team names" +msgstr "" + +#: ../../../CHANGELOG.rst:230 +msgid "By default team codes are set to match that team's emoji, but team codes are editable and can be imported like standard data" +msgstr "" + +#: ../../../CHANGELOG.rst:231 +msgid "Team codes can be swapped in an out for standard team names at will, with precise control over the contexts in which either is used — i.e. in public-facing pages, in admin-facing pages, in tooltips, *etc.*" +msgstr "" + +#: ../../../CHANGELOG.rst:235 +msgid "Added a range of 'check-in' functionality" +msgstr "" + +#: ../../../CHANGELOG.rst:233 +msgid "This includes barcode assignment, printing, and scanning. Scanning methods are optimised both for manual entry, entry with barcodes scanners, and for a 'live' scanning view that uses your phone's camera!" +msgstr "" + +#: ../../../CHANGELOG.rst:234 +msgid "This includes new people and venue status pages that show an overview of check-in status and allow for easy manual check-ins; ideal for a roll-calls!. This page can also be made public" +msgstr "" + +#: ../../../CHANGELOG.rst:235 +msgid "Ballot check-ins have been converted to this new method, and now all printed ballots will contain the barcodes needed to scan them" +msgstr "" + +#: ../../../CHANGELOG.rst:236 +msgid "Venue check-ins have been added alongside the standard 'person' check-ins to allow you to track a room's status at the start of the day or round-by-round" +msgstr "" + +#: ../../../CHANGELOG.rst:239 +msgid "Added (partial) translations in French, Spanish and Arabic" +msgstr "" + +#: ../../../CHANGELOG.rst:238 +msgid "Users can now use a link in the footer to switch the site's language into French, Spanish, or Arabic. By default Tabbycat should also match your browser's language and so automatically apply those languages if it matches" +msgstr "" + +#: ../../../CHANGELOG.rst:239 +msgid "Our translations are generously provided by volunteers, but (so far) do not cover all of the interface text within Tabbycat. If you're interested in helping to translate new or existing languages please get in touch!" +msgstr "" + +#: ../../../CHANGELOG.rst:240 +msgid "Thanks to the excellent team at QatarDebate for contributing the Arabic translations, and to Alejandro, Hernando, Julian and Zoe for contributing the Spanish translations." +msgstr "" + +#: ../../../CHANGELOG.rst:242 +msgid "Added a new (beta) feature: allocation 'sharding'" +msgstr "" + +#: ../../../CHANGELOG.rst:242 +msgid "Sharding allows you to split up the Adjudicator Allocation screen into a defined subset of the draw. This has been designed so that you can have multiple computers doing allocations simultaneously; allowing the adjudication core to split itself and tackle allocations in parallel." +msgstr "" + +#: ../../../CHANGELOG.rst:243 +msgid "Shards can be assigned into defined fractions (i.e. halves or fifths) according to specific criteria (i.e. bracket or priority) and following either a top-to-bottom sorting or a mixed sorting that ensures each bracket has an even proportion of each criteria." +msgstr "" + +#: ../../../CHANGELOG.rst:244 +msgid "Added an option to show a \"Confirm Digits\" option to pre-printed ballots that asks adjudicators to confirm their scores in a manner that may help clarify instances or bad handwriting. This can be enabled in the \"Data Entry\" settings area." +msgstr "" + +#: ../../../CHANGELOG.rst:245 +msgid "Added a 'liveness' calculator for BP that will estimate whether each team has, can, or can't break in each of their categories (as previously existed for 2-team formats)" +msgstr "" + +#: ../../../CHANGELOG.rst:246 +msgid "Added draw pull-up option: pull up from middle" +msgstr "" + +#: ../../../CHANGELOG.rst:247 +msgid "Added new draw option: choose pull-up from teams who have been pulled up the fewest times so far" +msgstr "" + +#: ../../../CHANGELOG.rst:248 +msgid "Added the ability to have different 'ballots-per-debates' for in/out rounds; accommodating tournaments like Australian Easters that use consensus for preliminary rounds but voting for elimination rounds." +msgstr "" + +#: ../../../CHANGELOG.rst:249 +msgid "Added time zone support to the locations where times are displayed" +msgstr "" + +#: ../../../CHANGELOG.rst:250 +msgid "Administrators can now view pages as if they were Assistants; allowing them to (for example) use the data entry forms that enforce double-checking without needed to create a separate account" +msgstr "" + +#: ../../../CHANGELOG.rst:251 +msgid "Fixed χ² test in motion statistics, and refactored the motion statistics page" +msgstr "" + +#: ../../../CHANGELOG.rst:252 +msgid "Teams, like adjudicators, no longer need to have an institution" +msgstr "" + +#: ../../../CHANGELOG.rst:253 +msgid "Added a page allowing for bulk updates to adjudicator scores" +msgstr "" + +#: ../../../CHANGELOG.rst:254 +msgid "Added break categories to team standings, and new team standings pages for break categories" +msgstr "" + +#: ../../../CHANGELOG.rst:259 +msgid "Made speaker standings more configurable" +msgstr "" + +#: ../../../CHANGELOG.rst:256 +msgid "Second-order metrics can now be specified" +msgstr "" + +#: ../../../CHANGELOG.rst:257 +msgid "Added trimmed mean (also known as high-low drop)" +msgstr "" + +#: ../../../CHANGELOG.rst:258 +msgid "Added ability to set no limit for number of missed debates" +msgstr "" + +#: ../../../CHANGELOG.rst:259 +msgid "Standard deviation is now the population standard deviation (was previously sample), and ranks in ascending order if used to rank speakers." +msgstr "" + +#: ../../../CHANGELOG.rst:273 ../../../CHANGELOG.rst:386 +msgid "Quality of life improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:262 +msgid "Added a \"☆\" indicator to more obviously liveness in the adjudicator allocation screen" +msgstr "" + +#: ../../../CHANGELOG.rst:263 +msgid "Added WYSIWYG editor for tournament welcome message, and moved it to tournament configuration" +msgstr "" + +#: ../../../CHANGELOG.rst:264 +msgid "Added \"appellant\" and \"respondent\" to the side name options" +msgstr "" + +#: ../../../CHANGELOG.rst:265 +msgid "Added a two new columns to the feedback overview page: one that displays the current difference between an adjudicator's test score and their current weighted score; another the displays the standard deviation of an adjudicator's feedback scores" +msgstr "" + +#: ../../../CHANGELOG.rst:266 +msgid "Added an 'important feedback' page that highlights feedback significantly above or below an adjudicator's test score" +msgstr "" + +#: ../../../CHANGELOG.rst:267 +msgid "Added a means to bulk-import adjudicator scores (for example from a CSV) to make it easier to work with external feedback processing" +msgstr "" + +#: ../../../CHANGELOG.rst:268 +msgid "Speakers and speaker's emails in the simple importer can now be separated by commas or tabs in addition to new lines" +msgstr "" + +#: ../../../CHANGELOG.rst:269 +msgid "The \"shared\" checkbox in the simple importer is now hidden unless the relevant tournament option is enabled" +msgstr "" + +#: ../../../CHANGELOG.rst:270 +msgid "Current team standings page now shows silent round results if \"Release all round results to public\" is set" +msgstr "" + +#: ../../../CHANGELOG.rst:271 +msgid "The Consensus vs Voting options for how ballots work has now been split into two settings: one option for preliminary rounds and one option for elimination rounds" +msgstr "" + +#: ../../../CHANGELOG.rst:272 +msgid "Speaker scores now show as integers (without decimals) where the tournament format would not allow decimals" +msgstr "" + +#: ../../../CHANGELOG.rst:273 +msgid "Added a page showing a list of institutions in the tournament" +msgstr "" + +#: ../../../CHANGELOG.rst:274 +msgid "On the assistant \"enter results\" page, pressing \"/\" jumps to the \"Find in Table\" box, so data entry can be done entirely from your keyboard" +msgstr "" + +#: ../../../CHANGELOG.rst:276 +msgid "Switched to using a Websockets/Channels based infrastructure to better allow for asynchronous updates. This should also ameliorate cases where the Memcachier plugin expired due to inactivity which would then crash a site. Notes for those upgrading:" +msgstr "" + +#: ../../../CHANGELOG.rst:276 +msgid "On Heroku: You should remove the Memcachier plugin and instead add 'heroku-redis' to any instances being upgraded" +msgstr "" + +#: ../../../CHANGELOG.rst:277 +msgid "Locally: You should recreate your `local_settings.py` from the `local_settings.example` file" +msgstr "" + +#: ../../../CHANGELOG.rst:280 +msgid "Upgraded to Django 2.0" +msgstr "" + +#: ../../../CHANGELOG.rst:279 +msgid "Converted most raw SQL queries to use the new ``filter`` keyword in annotations" +msgstr "" + +#: ../../../CHANGELOG.rst:283 +msgid "2.0.7" +msgstr "" + +#: ../../../CHANGELOG.rst:284 +msgid "*Release date: 13 April 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:286 +msgid "Fixed an issue preventing draws with pre-allocate sides generating" +msgstr "" + +#: ../../../CHANGELOG.rst:290 +msgid "2.0.6" +msgstr "" + +#: ../../../CHANGELOG.rst:291 +msgid "*Release date: 20 March 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:293 +msgid "Added reminder to add own-institution conflicts in the Edit Database area" +msgstr "" + +#: ../../../CHANGELOG.rst:298 +msgid "2.0.5" +msgstr "" + +#: ../../../CHANGELOG.rst:299 +msgid "*Release date: 7 February 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:301 +msgid "Improved the printing of scoresheets and feedback forms on Chrome." +msgstr "" + +#: ../../../CHANGELOG.rst:306 +msgid "2.0.4" +msgstr "" + +#: ../../../CHANGELOG.rst:307 +msgid "*Release date: 22 January 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:309 +msgid "Add alert for users who try to do voting ballots on BP-configured tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:310 +msgid "Fixed issue where draws of the \"manual\" type would not generate correctly" +msgstr "" + +#: ../../../CHANGELOG.rst:311 +msgid "Fixed issue where a ballot's speaker names dropdown would contain both team's speakers when using formats with side selection" +msgstr "" + +#: ../../../CHANGELOG.rst:312 +msgid "Fixed issue where scoresheets would not show correctly under some configurations" +msgstr "" + +#: ../../../CHANGELOG.rst:313 +msgid "Improved display of really long motions when using the inbuilt motion-showing page" +msgstr "" + +#: ../../../CHANGELOG.rst:318 +msgid "2.0.3" +msgstr "" + +#: ../../../CHANGELOG.rst:319 +msgid "*Release date: 3 December 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:321 +msgid "Fixed issue where the 'prefix team name with institution name' checkbox would not be correctly saved when using the Simple Importer" +msgstr "" + +#: ../../../CHANGELOG.rst:322 +msgid "Removed the scroll speed / text size buttons on mobile draw views that were making it difficult to view the table" +msgstr "" + +#: ../../../CHANGELOG.rst:323 +msgid "Improved the display of the motions tab page on mobile devices and fixed an issue where it appeared as if only half the vetoes were made" +msgstr "" + +#: ../../../CHANGELOG.rst:327 +msgid "2.0.2" +msgstr "" + +#: ../../../CHANGELOG.rst:328 +msgid "*Release date: 27 November 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:333 +msgid "Fixes and improvements to diversity overview" +msgstr "" + +#: ../../../CHANGELOG.rst:331 +msgid "Fixed average feedback rating from teams, it was previously (incorrectly) showing the average feedback rating from all adjudicators" +msgstr "" + +#: ../../../CHANGELOG.rst:332 +msgid "Gender splits for average feedback rating now go by target adjudicator; this was previously source adjudicator" +msgstr "" + +#: ../../../CHANGELOG.rst:333 +msgid "Persons with unknown gender are now shown in counts (but not score/rating averages); a bug had previously caused them to be incorrectly counted as zero" +msgstr "" + +#: ../../../CHANGELOG.rst:334 +msgid "Improved query efficiency of the page" +msgstr "" + +#: ../../../CHANGELOG.rst:335 +msgid "Improved the BP motions tab for out-rounds by specifying advancing teams as \"top/bottom ½\" rather than as 1st/4th and removed the average-points-per-position graphs that were misleading" +msgstr "" + +#: ../../../CHANGELOG.rst:336 +msgid "Improved handling of long motions in the motion display interface" +msgstr "" + +#: ../../../CHANGELOG.rst:337 +msgid "Fixed issue where creating BP tournaments using the wizard would create an extra break round given the size of the break specified" +msgstr "" + +#: ../../../CHANGELOG.rst:338 +msgid "Fixed auto-allocation in consensus panels where there are fewer judges than debates in the round" +msgstr "" + +#: ../../../CHANGELOG.rst:339 +msgid "Fixed reply speaker validity check when speeches are marked as duplicate" +msgstr "" + +#: ../../../CHANGELOG.rst:340 +msgid "Prohibit assignment of teams to break categories of other tournaments in Edit Database area" +msgstr "" + +#: ../../../CHANGELOG.rst:344 +msgid "2.0.1" +msgstr "" + +#: ../../../CHANGELOG.rst:345 +msgid "*Release date: 21 November 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:347 +msgid "Fixed issue where results submission would crash if sides are unconfirmed" +msgstr "" + +#: ../../../CHANGELOG.rst:348 +msgid "Fixed issue where scoresheets would not display properly for adjudicators who lack institutions" +msgstr "" + +#: ../../../CHANGELOG.rst:349 +msgid "Fixed issue where the round history indicators in the Edit Adjudicators page would sometimes omit the \"rounds ago\" indicator" +msgstr "" + +#: ../../../CHANGELOG.rst:353 +msgid "2.0.0 (Iberian Lynx)" +msgstr "" + +#: ../../../CHANGELOG.rst:354 +msgid "*Release date: 13 November 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:358 +msgid "British Parliamentary support" +msgstr "" + +#: ../../../CHANGELOG.rst:357 +msgid "Full support for British Parliamentary format has been added and we're incredibly excited to see Tabbycat's unique features and design (finally) available as an option for those tabbing in the predominant global format" +msgstr "" + +#: ../../../CHANGELOG.rst:358 +msgid "As part of the implementation of this format we've made significant improvements over existing tab software on how sides are allocated within BP draws. This means that teams are less likely to have 'imbalanced' proportions of side allocations (for example having many more debates as Opening Government than Closing Opposition)" +msgstr "" + +#: ../../../CHANGELOG.rst:359 +msgid "We've added a new \"Comparisons\" page added to the documentation to outline some of the key differences between Tabbycat and other software in the context of BP tabbing" +msgstr "" + +#: ../../../CHANGELOG.rst:365 +msgid "Refreshed interface design" +msgstr "" + +#: ../../../CHANGELOG.rst:361 +msgid "The basic graphic elements of Tabbycat have had a their typography, icons, colours, forms, and more redesign for a more distinctive and clear look. We also now have an official logo!" +msgstr "" + +#: ../../../CHANGELOG.rst:362 +msgid "The \"Motions\" stage of the per-round workflow has now been rolled into the Display area to better accommodate BP formats and consolidate the Draw/Motion 'release' process" +msgstr "" + +#: ../../../CHANGELOG.rst:363 +msgid "Sidebar menu items now display all sub-items within a section, such as for Feedback, Standings, and Breaks" +msgstr "" + +#: ../../../CHANGELOG.rst:364 +msgid "Better tablet and mobile interfaces; including a fully responsive sidebar for the admin area that maximises the content area" +msgstr "" + +#: ../../../CHANGELOG.rst:365 +msgid "More explicit and obvious calls-to-action for the key tasks necessary to running a round, with better interface alerts and text to help users understand when and why to perform crucial actions" +msgstr "" + +#: ../../../CHANGELOG.rst:366 +msgid "Redesigned motions tab page that gives a better idea of the sample size and distribution of results in both two- and four- team formats" +msgstr "" + +#: ../../../CHANGELOG.rst:368 +msgid "Improved handling of Break Rounds ballots and sides allocation" +msgstr "" + +#: ../../../CHANGELOG.rst:368 +msgid "The positions of teams within a break round are now created by the initial draw generation in an 'unset' state in recognition that most tournaments assign these manually (through say a coin toss). This should help clarify when showing break rounds draws when sides are or are not finalised" +msgstr "" + +#: ../../../CHANGELOG.rst:369 +msgid "Break rounds ballots for formats where scores are not typically entered (i.e. BP) will only specify that you nominate the teams advancing rather than enter in all of the speakers' scores" +msgstr "" + +#: ../../../CHANGELOG.rst:370 +msgid "Now, like Break Categories, you can define arbitrary Categories such as 'Novice' or 'ESL' to create custom Speaker tabs for groups of Speakers" +msgstr "" + +#: ../../../CHANGELOG.rst:371 +msgid "You can now release an Adjudicators Tab showing test scores, final scores, and/or per-round feedback averages" +msgstr "" + +#: ../../../CHANGELOG.rst:372 +msgid "Information Slides can now be added to the system; either for showing to an auditorium within Tabbycat or for displaying alongside the public list of motions and/or the motions tab" +msgstr "" + +#: ../../../CHANGELOG.rst:373 +msgid "Teams and adjudicators are no longer required to have institutions; something that should be very useful when setting up small IVs and the like" +msgstr "" + +#: ../../../CHANGELOG.rst:374 +msgid "Private URLs can now be incrementally generated. Records of sent mail are now also kept by Tabbycat, so that emails can be incrementally sent to participants as registration data changes" +msgstr "" + +#: ../../../CHANGELOG.rst:376 +msgid "After creating a new tournament you will now be prompted to apply a basic rules and public information preset" +msgstr "" + +#: ../../../CHANGELOG.rst:377 +msgid "Better handling of errors that arise when a debate team is missing or where two teams have been assigned the same side" +msgstr "" + +#: ../../../CHANGELOG.rst:378 +msgid "Fixed issue where the adjudicator feedback graphs would not sort along with their table" +msgstr "" + +#: ../../../CHANGELOG.rst:379 +msgid "The Feedback Overview page now makes it more clear how the score is determined, the current distribution of scores, and how scores affect the distribution of chairs, panellists, and trainees" +msgstr "" + +#: ../../../CHANGELOG.rst:380 +msgid "Speaker tabs now default to sorting by average, except for formats where we are certain that they must be sorted by total. The speaker tab page itself now prominently notes which setting is is currently using" +msgstr "" + +#: ../../../CHANGELOG.rst:381 +msgid "'Feedback paths' now default to a more permissive setting (rather than only allowing Chairs to submit feedback) and the Feedback Overview page will note that current configuration" +msgstr "" + +#: ../../../CHANGELOG.rst:382 +msgid "Emails can be assigned to adjudicators and teams in the Simple Importer" +msgstr "" + +#: ../../../CHANGELOG.rst:383 +msgid "More of the tables that allow you to set or edit data (such as the check-in tables for adjudicators, teams and venues) now automatically save changes" +msgstr "" + +#: ../../../CHANGELOG.rst:384 +msgid "When adding/editing users extraneous fields have been hidden and the \"Staff\" and \"Superuser\" roles have new sub-text clarifying what they mean for users with those permissions" +msgstr "" + +#: ../../../CHANGELOG.rst:385 +msgid "Team record pages now show cumulative team points, and if the speaker tab is fully released, speaker scores for that team in each debate" +msgstr "" + +#: ../../../CHANGELOG.rst:389 +msgid "1.4.6" +msgstr "" + +#: ../../../CHANGELOG.rst:390 +msgid "*Release date: 23 October 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:392 +msgid "Fixed issue where speaker standings with a large amount of non-ranking speakers would cause the page to load slowly or time-out." +msgstr "" + +#: ../../../CHANGELOG.rst:396 +msgid "1.4.5" +msgstr "" + +#: ../../../CHANGELOG.rst:397 +msgid "*Release date: 14 October 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:399 +msgid "Added warning message when adjudicator scores are outside the expected range" +msgstr "" + +#: ../../../CHANGELOG.rst:400 +msgid "Fixed handling of uniqueness failure in simple importer for teams" +msgstr "" + +#: ../../../CHANGELOG.rst:404 +msgid "1.4.4" +msgstr "" + +#: ../../../CHANGELOG.rst:405 +msgid "*Release date: 27 September 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:407 +msgid "Fixed Vue dependency issue preventing Heroku installs after a dependency release" +msgstr "" + +#: ../../../CHANGELOG.rst:408 +msgid "Fixed issue with formatting non-numeric standings metrics" +msgstr "" + +#: ../../../CHANGELOG.rst:409 +msgid "Fixed behaviour of public tabs when all rounds are silent" +msgstr "" + +#: ../../../CHANGELOG.rst:413 +msgid "1.4.3" +msgstr "" + +#: ../../../CHANGELOG.rst:414 +msgid "*Release date: 9 September 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:416 +msgid "A number of improvements to error handling and logging" +msgstr "" + +#: ../../../CHANGELOG.rst:417 +msgid "Changed the \"previous round\" of an elimination round to point to the last one in the same break category" +msgstr "" + +#: ../../../CHANGELOG.rst:418 +msgid "Other minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:422 +msgid "1.4.2" +msgstr "" + +#: ../../../CHANGELOG.rst:423 +msgid "*Release date: 23 August 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:425 +msgid "Minor bug fixes and error logging improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:429 +msgid "1.4.1" +msgstr "" + +#: ../../../CHANGELOG.rst:430 +msgid "*Release date: 2 August 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:432 +msgid "Fixed bug that prevented edited matchups from being saved" +msgstr "" + +#: ../../../CHANGELOG.rst:433 +msgid "Added flag to prevent retired sites from using the database for sessions" +msgstr "" + +#: ../../../CHANGELOG.rst:437 +msgid "1.4.0 (Havana Brown)" +msgstr "" + +#: ../../../CHANGELOG.rst:438 +msgid "*Release date: 26 July 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:444 +msgid "Overhauled the adjudicator allocation, venue allocation, and matchups editing pages, including:" +msgstr "" + +#: ../../../CHANGELOG.rst:441 +msgid "Upgraded to Vue 2.0 and refactored the code so that each page better shares methods for displaying the draw, showing additional information, and dragging/dropping" +msgstr "" + +#: ../../../CHANGELOG.rst:442 +msgid "When dragging/dropping, the changed elements now 'lock' in place to indicate that their saving is in-progress" +msgstr "" + +#: ../../../CHANGELOG.rst:443 +msgid "Added conflicts and recent histories to the slideovers shown for teams/adjudicators" +msgstr "" + +#: ../../../CHANGELOG.rst:444 +msgid "Added 'ranking' toggles to visibly highlight adjudicator strengths and more easily identify unbalanced panels" +msgstr "" + +#: ../../../CHANGELOG.rst:445 +msgid "Each interface's table is now sortable by a debate's importance, bracket, liveness, etc." +msgstr "" + +#: ../../../CHANGELOG.rst:446 +msgid "Added a new \"Tournament Logistics\" guide to the documentation that outlines some general best practices for tabbing tournaments. Thanks to Viran Weerasekera, Valerie Tierney, Molly Dale, Madeline Schultz, and Vail Bromberger for contributing to this document" +msgstr "" + +#: ../../../CHANGELOG.rst:447 +msgid "Added (basic) support for the Canadian Parliamentary format by allowing for consensus ballots and providing a preset. However note that only some of the common draw rules are supported (check our documentation for more information)" +msgstr "" + +#: ../../../CHANGELOG.rst:448 +msgid "Added an ESL/EFL tab release option and status field" +msgstr "" + +#: ../../../CHANGELOG.rst:449 +msgid "Added a chi-squared test to measure motion balance in the motion standings/balance. Thanks to Viran Weerasekera for contributing this" +msgstr "" + +#: ../../../CHANGELOG.rst:450 +msgid "The Auto Allocate function for adjudicators will now also allocate trainees to solo-chaired debates" +msgstr "" + +#: ../../../CHANGELOG.rst:451 +msgid "Added a 'Tab Release' preset for easily releasing all standings/results pages after a tournament is finished" +msgstr "" + +#: ../../../CHANGELOG.rst:452 +msgid "Added 'Average Speaks by Round' to the standings overview page" +msgstr "" + +#: ../../../CHANGELOG.rst:453 +msgid "Fixed issue where the Auto Allocator was forming panels of incorrect strengths in debates identified as less important" +msgstr "" + +#: ../../../CHANGELOG.rst:454 +msgid "Fixed issue where toggling iron-person speeches on and off wouldn't hide/unset the relevant checkboxes" +msgstr "" + +#: ../../../CHANGELOG.rst:455 +msgid "Fixed issue where VenueCategories could not be edited if they did not have Venues set" +msgstr "" + +#: ../../../CHANGELOG.rst:456 +msgid "Various other small fixes and improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:460 +msgid "1.3.1" +msgstr "" + +#: ../../../CHANGELOG.rst:461 +msgid "*Release date: 26 May 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:463 +msgid "Fixed bug that allowed duplicate emoji to be occasionally generated" +msgstr "" + +#: ../../../CHANGELOG.rst:467 +msgid "1.3.0 (Genetta)" +msgstr "" + +#: ../../../CHANGELOG.rst:468 +msgid "*Release date: 9 May 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:470 +msgid "Added the ability to mark speeches as duplicates when entering ballots so that they will not show in speaker tabs, intended for use with 'iron-man' speeches and swing speakers" +msgstr "" + +#: ../../../CHANGELOG.rst:471 +msgid "Reworked venue constraints and venue display options by streamlining \"venue groups\" and \"venue constraint categories\" into a single \"venue category\" type, with options for how they are used and displayed" +msgstr "" + +#: ../../../CHANGELOG.rst:472 +msgid "Relocated the Random (now renamed 'Private') URL pages to the Setup section and added pages for printing/emailing out the ballot submission URLs" +msgstr "" + +#: ../../../CHANGELOG.rst:473 +msgid "Reworked the simple data importer (formerly the visual importer) to improve its robustness" +msgstr "" + +#: ../../../CHANGELOG.rst:474 +msgid "Improved guards against having no current round set, and added a new page for manually overriding the current round (under Configuration)" +msgstr "" + +#: ../../../CHANGELOG.rst:475 +msgid "Added a preference for controlling whether assistant users have access to pages that can reveal draw or motions information ahead of their public release" +msgstr "" + +#: ../../../CHANGELOG.rst:476 +msgid "Added the ability to limit tab releases to a given number of ranks (*i.e.* only show the top 10 speakers)" +msgstr "" + +#: ../../../CHANGELOG.rst:477 +msgid "Added the ability to redact individual person's identifying details from speaker tabs" +msgstr "" + +#: ../../../CHANGELOG.rst:478 +msgid "Added the ability for user passwords to be easily reset" +msgstr "" + +#: ../../../CHANGELOG.rst:479 +msgid "Added a minimal set of default feedback questions to newly created Tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:480 +msgid "When a tournament's current round is set, redirect to a page where it can be set, rather than crashing" +msgstr "" + +#: ../../../CHANGELOG.rst:481 +msgid "A number of other minor bug fixes and enhancements" +msgstr "" + +#: ../../../CHANGELOG.rst:485 +msgid "1.2.3" +msgstr "" + +#: ../../../CHANGELOG.rst:486 +msgid "*Release date: 17 March 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:488 +msgid "Improved the display of the admin ballot entry form on mobile devices" +msgstr "" + +#: ../../../CHANGELOG.rst:489 ../../../CHANGELOG.rst:497 +#: ../../../CHANGELOG.rst:505 +msgid "A number of other minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:493 +msgid "1.2.2" +msgstr "" + +#: ../../../CHANGELOG.rst:494 +msgid "*Release date: 4 March 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:496 +msgid "Protected debate-team objects from cascaded deletion, and added warning messages with guidance when users would otherwise do this" +msgstr "" + +#: ../../../CHANGELOG.rst:501 +msgid "1.2.1" +msgstr "" + +#: ../../../CHANGELOG.rst:502 +msgid "*Release date: 25 February 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:504 +msgid "Printable feedback forms will now display the default rating scale, any configured introduction text, and better prompt you to add additional questions" +msgstr "" + +#: ../../../CHANGELOG.rst:509 +msgid "1.2.0 (Foldex)" +msgstr "" + +#: ../../../CHANGELOG.rst:510 +msgid "*Release date: 15 February 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:512 +msgid "Changed the core workflow by splitting display- and motion- related activities into separate pages to simplify each stage of running a round" +msgstr "" + +#: ../../../CHANGELOG.rst:513 +msgid "Added support for Docker-based installations to make local/offline installations much more simple" +msgstr "" + +#: ../../../CHANGELOG.rst:514 +msgid "Added a \"Tabbykitten\" version of Tabbycat that can be deployed to Heroku without a needing a credit/debit card" +msgstr "" + +#: ../../../CHANGELOG.rst:515 +msgid "Added button to load a demo tournament on the 'New Tournament' page so it is easier to test-run Tabbycat" +msgstr "" + +#: ../../../CHANGELOG.rst:516 +msgid "Changed venue groups to be separate to venue constraint categories" +msgstr "" + +#: ../../../CHANGELOG.rst:517 +msgid "Modified the licence to clarify that donations are required for some tournaments and added a more explicit donations link and explanation page" +msgstr "" + +#: ../../../CHANGELOG.rst:518 +msgid "Added information about autosave status to the adjudicator allocations page" +msgstr "" + +#: ../../../CHANGELOG.rst:519 +msgid "Added configurable side names so that tournaments can use labels like \"Proposition\"/\"Opposition\" instead of \"Affirmative\"/\"Negative\"" +msgstr "" + +#: ../../../CHANGELOG.rst:520 +msgid "Started work on basic infrastructure for translations" +msgstr "" + +#: ../../../CHANGELOG.rst:524 +msgid "1.1.7" +msgstr "" + +#: ../../../CHANGELOG.rst:525 +msgid "*Release date: 31 January 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:527 +msgid "Yet more minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:528 +msgid "The auto-allocation UI will now detail your minimum rating setting better" +msgstr "" + +#: ../../../CHANGELOG.rst:529 +msgid "Added guidance on database backups to documentation" +msgstr "" + +#: ../../../CHANGELOG.rst:533 +msgid "1.1.6" +msgstr "" + +#: ../../../CHANGELOG.rst:534 +msgid "*Release date: 19 January 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:536 +msgid "A number of minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:537 +msgid "Added basic infrastructure for creating tabbycat translations" +msgstr "" + +#: ../../../CHANGELOG.rst:541 +msgid "1.1.5" +msgstr "" + +#: ../../../CHANGELOG.rst:542 +msgid "*Release date: 12 January 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:544 +msgid "A number of minor bug fixes and improvements to documentation" +msgstr "" + +#: ../../../CHANGELOG.rst:548 +msgid "1.1.4" +msgstr "" + +#: ../../../CHANGELOG.rst:549 +msgid "*Release date: 25 November 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:551 +msgid "Redesigned the footer area to better describe Tabbycat and to promote donations and related projects" +msgstr "" + +#: ../../../CHANGELOG.rst:552 +msgid "Slight tweaks to the site homepage and main menus to better accommodate the login/log out links" +msgstr "" + +#: ../../../CHANGELOG.rst:553 +msgid "A few minor bug fixes and improvements to error reporting" +msgstr "" + +#: ../../../CHANGELOG.rst:557 +msgid "1.1.3" +msgstr "" + +#: ../../../CHANGELOG.rst:558 +msgid "*Release date: 15 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:560 +msgid "Fixed bug affecting some migrations from earlier versions" +msgstr "" + +#: ../../../CHANGELOG.rst:561 +msgid "Made latest results show question mark rather than crash if a team is missing" +msgstr "" + +#: ../../../CHANGELOG.rst:562 +msgid "Fixed bug affecting the ability to save motions" +msgstr "" + +#: ../../../CHANGELOG.rst:563 +msgid "Fixed bug preventing draw flags from being displayed" +msgstr "" + +#: ../../../CHANGELOG.rst:567 +msgid "1.1.2" +msgstr "" + +#: ../../../CHANGELOG.rst:568 +msgid "*Release date: 14 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:570 +msgid "Allow panels with even number of adjudicators (with warnings), by giving chair the casting vote" +msgstr "" + +#: ../../../CHANGELOG.rst:571 +msgid "Removed defunct person check-in, which hasn't been used since 2010" +msgstr "" + +#: ../../../CHANGELOG.rst:572 +msgid "Collapsed availability database models into a single model with Django content types" +msgstr "" + +#: ../../../CHANGELOG.rst:573 +msgid "Collapsed optional fields in action log entries into a single generic field using Django content types" +msgstr "" + +#: ../../../CHANGELOG.rst:574 +msgid "Added better warnings when attempting to create an elimination round draw with fewer than two teams" +msgstr "" + +#: ../../../CHANGELOG.rst:575 +msgid "Added warnings in Edit Database view when editing debate teams" +msgstr "" + +#: ../../../CHANGELOG.rst:576 +msgid "Renamed \"AIDA pre-2015\" break rule to \"AIDA 1996\"" +msgstr "" + +#: ../../../CHANGELOG.rst:580 +msgid "1.1.1" +msgstr "" + +#: ../../../CHANGELOG.rst:581 +msgid "*Release date: 8 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:583 +msgid "Fixed a bug where the team standings and team tab would crash when some emoji were not set" +msgstr "" + +#: ../../../CHANGELOG.rst:587 +msgid "1.1.0 (Egyptian Mau)" +msgstr "" + +#: ../../../CHANGELOG.rst:588 +msgid "*Release date: 3 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:590 +msgid "Added support for the United Asian Debating Championships style" +msgstr "" + +#: ../../../CHANGELOG.rst:591 +msgid "Added support for the World Schools Debating Championships style" +msgstr "" + +#: ../../../CHANGELOG.rst:592 +msgid "Made Windows 8+ Emoji more colourful" +msgstr "" + +#: ../../../CHANGELOG.rst:593 +msgid "Fixed an incompatability between Vue and IE 10-11 which caused tables to not render" +msgstr "" + +#: ../../../CHANGELOG.rst:594 +msgid "Minor bug fixes and dependency updates" +msgstr "" + +#: ../../../CHANGELOG.rst:598 +msgid "1.0.1" +msgstr "" + +#: ../../../CHANGELOG.rst:599 +msgid "*Release date: 19 August 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:601 +msgid "Fixed a minor bug with the visual importer affecting similarly named institutions" +msgstr "" + +#: ../../../CHANGELOG.rst:602 +msgid "Fixed error message when user tries to auto-allocate adjudicators on unconfirmed or released draw" +msgstr "" + +#: ../../../CHANGELOG.rst:603 +msgid "Minor docs edits" +msgstr "" + +#: ../../../CHANGELOG.rst:607 +msgid "1.0.0 (Devon Rex)" +msgstr "" + +#: ../../../CHANGELOG.rst:608 +msgid "*Release date: 16 August 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:613 +msgid "Redesigned and redeveloped adjudicator allocation page" +msgstr "" + +#: ../../../CHANGELOG.rst:611 +msgid "Redesigned interface, featuring clearer displays of conflict and diversity information" +msgstr "" + +#: ../../../CHANGELOG.rst:612 +msgid "Changes to importances and panels are now automatically saved" +msgstr "" + +#: ../../../CHANGELOG.rst:613 +msgid "Added debate \"liveness\" to help identify critical rooms—many thanks to Thevesh Theva" +msgstr "" + +#: ../../../CHANGELOG.rst:614 +msgid "Panel score calculations performed live to show strength of voting majorities" +msgstr "" + +#: ../../../CHANGELOG.rst:616 +msgid "New features" +msgstr "" + +#: ../../../CHANGELOG.rst:616 +msgid "Added record pages for teams and adjudicators" +msgstr "" + +#: ../../../CHANGELOG.rst:617 +msgid "Added a diversity tab to display demographic information about participants and scoring" +msgstr "" + +#: ../../../CHANGELOG.rst:619 +msgid "Significant general improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:619 +msgid "Shifted most table rendering to Vue.js to improve performance and design" +msgstr "" + +#: ../../../CHANGELOG.rst:620 +msgid "Drastically reduced number of SQL queries in large tables, *e.g.* draw, results, tab" +msgstr "" + +#: ../../../CHANGELOG.rst:624 +msgid "Break round management" +msgstr "" + +#: ../../../CHANGELOG.rst:622 +msgid "Completed support for break round draws" +msgstr "" + +#: ../../../CHANGELOG.rst:623 +msgid "Simplified procedure for adding remarks to teams and updating break" +msgstr "" + +#: ../../../CHANGELOG.rst:624 +msgid "Reworked break generation code to be class-based, to improve future extensibility" +msgstr "" + +#: ../../../CHANGELOG.rst:625 +msgid "Added support for break qualification rules: AIDA Australs, AIDA Easters, WADL" +msgstr "" + +#: ../../../CHANGELOG.rst:628 +msgid "Feedback" +msgstr "" + +#: ../../../CHANGELOG.rst:627 +msgid "Changed Boolean fields in AdjudicatorFeedbackQuestion to reflect what they actually do" +msgstr "" + +#: ../../../CHANGELOG.rst:628 +msgid "Changed \"panellist feedback enabled\" option to \"feedback paths\", a choice of three options" +msgstr "" + +#: ../../../CHANGELOG.rst:630 +msgid "Dropped \"/t/\" from tournament URLs and moved \"/admin/\" to \"/database/\", with 301 redirects" +msgstr "" + +#: ../../../CHANGELOG.rst:631 +msgid "Added basic code linting to the continuous integration tests" +msgstr "" + +#: ../../../CHANGELOG.rst:632 +msgid "Many other small bug fixes, refactors, optimisations, and documentation updates" +msgstr "" + +#: ../../../CHANGELOG.rst:636 +msgid "0.9.0 (Chartreux)" +msgstr "" + +#: ../../../CHANGELOG.rst:637 +msgid "*Release date: 13 June 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:639 +msgid "Added a beta implementation of the break rounds workflow" +msgstr "" + +#: ../../../CHANGELOG.rst:640 +msgid "Added venue constraints, to allow participants or divisions to preferentially be given venues from predefined groups" +msgstr "" + +#: ../../../CHANGELOG.rst:641 +msgid "Added a button to regenerate draws" +msgstr "" + +#: ../../../CHANGELOG.rst:642 +msgid "Refactored speaker standings implementation to match team standings implementation" +msgstr "" + +#: ../../../CHANGELOG.rst:643 +msgid "New standings metrics, draw methods, and interface settings for running small tournaments and division-based tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:644 +msgid "Improved support for multiple tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:645 +msgid "Improved user-facing error messages in some scenarios" +msgstr "" + +#: ../../../CHANGELOG.rst:646 +msgid "Most frontend dependencies now handled by Bower" +msgstr "" + +#: ../../../CHANGELOG.rst:647 +msgid "Static file compilation now handled by Gulp" +msgstr "" + +#: ../../../CHANGELOG.rst:648 ../../../CHANGELOG.rst:660 +msgid "Various bug fixes, optimisations, and documentation edits" +msgstr "" + +#: ../../../CHANGELOG.rst:652 +msgid "0.8.3" +msgstr "" + +#: ../../../CHANGELOG.rst:653 +msgid "*Release date: 4 April 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:655 +msgid "Restored and reworking printing functionality for scoresheets/feedback" +msgstr "" + +#: ../../../CHANGELOG.rst:656 +msgid "Restored Edit Venues and Edit Matchups on the draw pages" +msgstr "" + +#: ../../../CHANGELOG.rst:657 +msgid "Reworked tournament data importers to use csv.DictReader, so that column order in files doesn't matter" +msgstr "" + +#: ../../../CHANGELOG.rst:658 +msgid "Improved dashboard and feedback graphs" +msgstr "" + +#: ../../../CHANGELOG.rst:659 +msgid "Add separate pro speakers tab" +msgstr "" + +#: ../../../CHANGELOG.rst:664 +msgid "0.8.2" +msgstr "" + +#: ../../../CHANGELOG.rst:665 +msgid "*Release date: 20 March 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:667 +msgid "Fixed issue where scores from individual ballots would be deleted when any other panel in the round was edited" +msgstr "" + +#: ../../../CHANGELOG.rst:668 +msgid "Fixed issue where page crashes for URLs with \"tab\" in it but that aren't recognized tab pages" +msgstr "" + +#: ../../../CHANGELOG.rst:672 +msgid "0.8.1" +msgstr "" + +#: ../../../CHANGELOG.rst:673 +msgid "*Release date: 15 March 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:675 +msgid "Fixed a bug where editing a Team in the admin section could cause an error" +msgstr "" + +#: ../../../CHANGELOG.rst:676 +msgid "Added instructions on how to account for speakers speaking twice to docs" +msgstr "" + +#: ../../../CHANGELOG.rst:677 +msgid "Venues Importer wont show VenueGroup import info unless that option is enabled" +msgstr "" + +#: ../../../CHANGELOG.rst:681 +msgid "0.8.0 (Bengal)" +msgstr "" + +#: ../../../CHANGELOG.rst:682 +msgid "*Release date: 29 February 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:684 +msgid "Upgraded to Python 3.4, dropped support for Python 2" +msgstr "" + +#: ../../../CHANGELOG.rst:685 +msgid "Restructured directories and, as a consequence, changed database schema" +msgstr "" + +#: ../../../CHANGELOG.rst:686 +msgid "Added Django migrations to the release (they were previously generated by the user)" +msgstr "" + +#: ../../../CHANGELOG.rst:687 +msgid "Migrated documentation to `Read The Docs `_" +msgstr "" + +#: ../../../CHANGELOG.rst:688 +msgid "New user interface design and workflow" +msgstr "" + +#: ../../../CHANGELOG.rst:689 +msgid "Overhauled tournament preferences to use `django-dynamic-preferences `_" +msgstr "" + +#: ../../../CHANGELOG.rst:690 +msgid "Added new visual data importer" +msgstr "" + +#: ../../../CHANGELOG.rst:691 +msgid "Improved flexibility of team standings rules" +msgstr "" + +#: ../../../CHANGELOG.rst:692 +msgid "Moved data utility scripts to Django management commands" +msgstr "" + +#: ../../../CHANGELOG.rst:693 +msgid "Changed emoji to Unicode characters" +msgstr "" + +#: ../../../CHANGELOG.rst:694 +msgid "Various other fixes and refinements" +msgstr "" + +#: ../../../CHANGELOG.rst:698 +msgid "0.7.0 (Abyssinian)" +msgstr "" + +#: ../../../CHANGELOG.rst:699 +msgid "*Release date: 31 July 2015*" +msgstr "" + +#: ../../../CHANGELOG.rst:701 +msgid "Support for multiple tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:702 +msgid "Improved and extensible tournament data importer" +msgstr "" + +#: ../../../CHANGELOG.rst:703 +msgid "Display gender, region, and break category in adjudicator allocation" +msgstr "" + +#: ../../../CHANGELOG.rst:704 +msgid "New views for online adjudicator feedback" +msgstr "" + +#: ../../../CHANGELOG.rst:705 +msgid "Customisable adjudicator feedback forms" +msgstr "" + +#: ../../../CHANGELOG.rst:706 +msgid "Randomised URLs for public submission" +msgstr "" + +#: ../../../CHANGELOG.rst:707 +msgid "Customisable break categories" +msgstr "" + +#: ../../../CHANGELOG.rst:708 +msgid "Computerised break generation (break round draws not supported)" +msgstr "" + +#: ../../../CHANGELOG.rst:709 +msgid "Lots of fixes, interface touch-ups and performance enhancements" +msgstr "" + +#: ../../../CHANGELOG.rst:710 +msgid "Now requires Django 1.8 (and other package upgrades)" +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/about/contributing.po b/docs/locale/ca/LC_MESSAGES/about/contributing.po new file mode 100644 index 00000000000..429bc2a6d70 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/about/contributing.po @@ -0,0 +1,352 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:09\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/contributing.po\n" +"X-Crowdin-File-ID: 1263\n" +"Language: ca_ES\n" + +#: ../../../CONTRIBUTING.rst:3 +msgid "Contributing" +msgstr "" + +#: ../../../CONTRIBUTING.rst:5 +msgid "Contributions are welcome, and are greatly appreciated! Every little bit helps, and credit will be given. While at its core Tabbycat is a software project, you do not need to know how to code or use Git in order to help. We welcome feedback and ideas based on your tabbing experience and appreciate suggestions or proposals for how to improve the wording, translation, and design of our interface and documentation." +msgstr "" + +#: ../../../CONTRIBUTING.rst:7 +msgid "Feel free to `join our Facebook group `_ if you have any questions about how to get started." +msgstr "" + +#: ../../../CONTRIBUTING.rst:10 +msgid "Feedback and ideas" +msgstr "" + +#: ../../../CONTRIBUTING.rst:12 +msgid "These can be added as issues in the `GitHub repository `_; posts in our `Facebook group `_; or as an :ref:`email to the developers `." +msgstr "" + +#: ../../../CONTRIBUTING.rst:15 +msgid "Bug reports" +msgstr "" + +#: ../../../CONTRIBUTING.rst:17 +msgid "Please report bugs by opening a new issue in our `GitHub repository `_. It is most helpful if you can include:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:19 +msgid "How Tabbycat was installed (on Heroku, locally on macOS, `etc.`)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:20 +msgid "Any details about your tournament and setup that might be helpful in troubleshooting" +msgstr "" + +#: ../../../CONTRIBUTING.rst:21 +msgid "Detailed steps for how to reproduce the bug" +msgstr "" + +#: ../../../CONTRIBUTING.rst:24 +msgid "Getting started with development" +msgstr "" + +#: ../../../CONTRIBUTING.rst:26 +msgid "To easily test your changes to Tabbycat you probably want a working :ref:`local install ` (without using Docker)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:27 +msgid "Please submit pull requests for features and bug fixes against `develop` (but not `master`)." +msgstr "" + +#: ../../../CONTRIBUTING.rst:28 +msgid "We broadly use the `git-flow workflow `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:29 +msgid "We use Django's testing tools — adding unit tests to new features is greatly appreciated" +msgstr "" + +#: ../../../CONTRIBUTING.rst:31 +msgid "A number of our tests use `Selenium `_ and `ChromeDriver `_ to simulate in-browser functionality. They will fail if you do not have the Chrome browser and ChromeDriver installed." +msgstr "" + +#: ../../../CONTRIBUTING.rst:33 +msgid "A number of extra dependencies are required for running tests, linting, and serving the documentation. These can be installed with::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:37 +msgid "Our ``package.json`` provides a convenience command that runs a standard set of development tools simultaneously, such as the Django server and the automatic recompilation with live injecting of javascript and CSS. Once you have set ``USE_WEBPACK_SERVER=True`` in your ``settings_local.py`` you can then run this with::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:42 +msgid "Generating test data" +msgstr "" + +#: ../../../CONTRIBUTING.rst:44 +msgid "There are management commands to help developers quickly generate data for use in testing, including results and feedback. A list of all commands can be found from ``dj help``, but the most useful in this context are:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:46 +msgid "``dj importtournament ( minimal8team | australs24team | bp88team )``, which imports participant data for the 8-team (``minimal8team``), 24-team Australs (``australs24team``) and 88-team BP (``bp88team``) demonstration tournaments respectively." +msgstr "" + +#: ../../../CONTRIBUTING.rst:47 +msgid "``dj simulaterounds ROUND [ROUND ROUND ...]``, which simulates all of the rounds specified, generating a draw, an adjudicator allocation and a complete set of random results (but not feedback)." +msgstr "" + +#: ../../../CONTRIBUTING.rst:48 +msgid "``dj generatefeedback ROUND [ROUND ROUND ...]``, which randomly generates feedback for all existing debates in the specified rounds." +msgstr "" + +#: ../../../CONTRIBUTING.rst:49 +msgid "``dj generateresults ROUND [ROUND ROUND ...]``, which randomly generates results for all existing debates in the specified rounds. (You don't need to run this if you ran ``simulaterounds``, because that already does it.)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:51 +msgid "Rounds can be specified by sequence number (``seq``) or abbreviation. You can find more information about each of them by adding ``--help`` after the command name." +msgstr "" + +#: ../../../CONTRIBUTING.rst:54 +msgid "Database schema changes" +msgstr "" + +#: ../../../CONTRIBUTING.rst:56 +msgid "When adding new features, it may be necessary to modify the database schema to support these new additions. After the changes are made, the migration files made by ``python manage.py makemigrations`` must also be committed. The migration files should also contain methods fill the new fields based on existing data if possible." +msgstr "" + +#: ../../../CONTRIBUTING.rst:58 +msgid "Fixture files (found under ``data/fixtures/``) may also need to be updated, which can be done by running the ``migrate_fixtures.py`` script under a unmigrated database, then committing the result. ::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:64 +msgid "Style guide" +msgstr "" + +#: ../../../CONTRIBUTING.rst:66 +msgid "For the front end interface design there is a style guide available at \"/style/\" once a tournament has been setup." +msgstr "" + +#: ../../../CONTRIBUTING.rst:68 +msgid "For python code, we use `flake8 `_ to check for a non-strict series of style rules. Warnings will trigger a Travis CI build to fail. The entire codebase can be checked by using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:72 +msgid "For stylesheets, we use `stylelint `_. The relevant code can be checked by using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:76 +msgid "For javascript, we use `eslint `_ to enforce the `standardJS `_ style and the standard recommendation of the vue plugin for eslint. The relevant code can be checked by using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:81 +msgid "Versioning convention" +msgstr "" + +#: ../../../CONTRIBUTING.rst:83 +msgid "Our convention is to increment the minor version whenever we add new functionality, and to increment the major version whenever:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:85 +msgid "the database can't be migrated forwards using ``python manage.py migrate --no-input``, or" +msgstr "" + +#: ../../../CONTRIBUTING.rst:86 +msgid "there is a major change to how the tournament workflow goes, or" +msgstr "" + +#: ../../../CONTRIBUTING.rst:87 +msgid "we make some other change that is, in our opinion, significant enough to warrant a milestone." +msgstr "" + +#: ../../../CONTRIBUTING.rst:89 +msgid "We write `data migrations `_ to allow existing systems to be upgraded easily. However, we don't always support backward database migrations. Our expectation is that long-lived installations keep up with our latest version." +msgstr "" + +#: ../../../CONTRIBUTING.rst:91 +msgid "One day, we hope to have a public API in place to facilitate the integration with other debating tournament software, like registration or adjudicator feedback systems. If and when that happens, we'll probably revise this convention to be more in line with `Semantic Versioning `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:93 +msgid "Starting from version 0.7.0, we use cat breeds as the code names for major versions." +msgstr "" + +#: ../../../CONTRIBUTING.rst:96 +msgid "Documentation" +msgstr "" + +#: ../../../CONTRIBUTING.rst:98 +msgid "Documentation is created using `Sphinx `_ and hosted at `Read The Docs `_. Pushes to ``develop`` will update the *latest* documentation set, while pushes to ``master`` will update the *stable* documentation set." +msgstr "" + +#: ../../../CONTRIBUTING.rst:100 +msgid "To preview the documentation locally, install the development dependencies and then start the server::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:104 +msgid "You should then be able to preview the docs at `127.0.0.1:7999 `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:107 +msgid "Project structure" +msgstr "" + +#: ../../../CONTRIBUTING.rst:109 +msgid "``bin`` contains a number of convenience scripts for starting/stopping Docker, and the webserver/asset pipeline." +msgstr "" + +#: ../../../CONTRIBUTING.rst:110 +msgid "``data`` contains the sample data sets and fixtures used to setup demo tournaments and in automated tests respectively" +msgstr "" + +#: ../../../CONTRIBUTING.rst:111 +msgid "``docs`` contains our document source files and images (although some are linked from the root directory)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:115 +msgid "``tabbycat`` is the main directory containing the Django project" +msgstr "" + +#: ../../../CONTRIBUTING.rst:113 +msgid "``locale`` contains translation strings for shared templates (others are in respective app directories)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:114 +msgid "``templates`` contains shared html templates, stylesheets, javascript source files, and Vue.js components/mixins." +msgstr "" + +#: ../../../CONTRIBUTING.rst:115 +msgid "``utils`` contains shared utilities" +msgstr "" + +#: ../../../CONTRIBUTING.rst:116 +msgid "All other folders are the Django apps that contain specific views, models, and templates for functions such as ``draw`` generation/display, or recording ``results``. Each has sub-folders for tests and templates." +msgstr "" + +#: ../../../CONTRIBUTING.rst:117 +msgid "In the root directory there are a number of files defining our python and javascript dependencies, core configuration files, and key documents like the ``README``" +msgstr "" + +#: ../../../CONTRIBUTING.rst:120 +msgid "Internationalization/Localization" +msgstr "" + +#: ../../../CONTRIBUTING.rst:122 +msgid "The `gettext `_ framework is used to enable the translation of strings in Python files and Django templates. Backend in this context signifies these types of files." +msgstr "" + +#: ../../../CONTRIBUTING.rst:124 +msgid "The backend's translation files can be updated from the ``tabbycat`` directory using one or more of the supporting language codes (see settings.py)::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:128 +msgid "To do more than one language, just specify ``-l`` multiple times, _e.g._ ``-les -lar``." +msgstr "" + +#: ../../../CONTRIBUTING.rst:130 +msgid "These can then be compiled using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:134 +msgid "As it stands Heroku needs the .mo files pre-compiled (see `issue in Heroku Python buildpack `_, so these are committed to Git. Note that the English (``en``) language files should not be compiled; their sole purpose is to provide a source language for `Crowdin `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:136 +msgid "Strings defined in Vue files must similarily be marked with ``gettext`` but must be added manually to ``tabbycat/locale/LANGUAGE_CODE/djangojs.po``, for each language supported. These can then compiled to javascript bundles using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:141 +msgid "These are then also committed to git to save users needing to run `compilejsi18n` during setup. The resulting files are then bundled as part of the npm build task. Updating these translations in development (live-reload) requires the use of the ``cp-i18n`` npm task." +msgstr "" + +#: ../../../CONTRIBUTING.rst:144 +msgid "Release checklist" +msgstr "" + +#: ../../../CONTRIBUTING.rst:146 +msgid "Check that all migrations have been generated and committed into Git" +msgstr "" + +#: ../../../CONTRIBUTING.rst:147 +msgid "Merge translations from the Crowdin pull request and compile messages" +msgstr "" + +#: ../../../CONTRIBUTING.rst:148 +msgid "Bump version number in ``docs/conf.py``" +msgstr "" + +#: ../../../CONTRIBUTING.rst:149 +msgid "Bump version number and (if applicable) codename in ``tabbycat/settings/core.py``" +msgstr "" + +#: ../../../CONTRIBUTING.rst:150 +msgid "Update the main ``CHANGELOG.rst`` file (including release date)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:155 +msgid "Check the major current deployment options, including:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:152 +msgid "The ``deploy_heroku.py`` script" +msgstr "" + +#: ../../../CONTRIBUTING.rst:153 +msgid "The Tabbykitten version" +msgstr "" + +#: ../../../CONTRIBUTING.rst:154 +msgid "Docker (macOS, Windows 10*) and Docker Toolbox (Windows 10 Home) methods" +msgstr "" + +#: ../../../CONTRIBUTING.rst:155 +msgid "Using Bash and Powershell on Windows" +msgstr "" + +#: ../../../CONTRIBUTING.rst:156 +msgid "Using Terminal on macOS (at least test out a fresh install of the npm/pip dependencies)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:157 +msgid "Check that the last Travis CI build passed and run the full local test suite (this will include the Selenium tests that are not on Travis)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:158 +msgid "Shift remaining issues from the Github Milestone" +msgstr "" + +#: ../../../CONTRIBUTING.rst:159 +msgid "Create and finish the release branch as per git-flow" +msgstr "" + +#: ../../../CONTRIBUTING.rst:160 +msgid "Ensure the tag is correct (``vX.Y.Z``) and published to GitHub" +msgstr "" + +#: ../../../CONTRIBUTING.rst:161 +msgid "Back-merge ``master`` to the ``kitten`` branch" +msgstr "" + +#: ../../../CONTRIBUTING.rst:162 +msgid "Back-merge ``develop`` to the in-progress feature branches" +msgstr "" + +#: ../../../CONTRIBUTING.rst:163 +msgid "Issue a formal release with change notes on GitHub" +msgstr "" + +#: ../../../CONTRIBUTING.rst:164 +msgid "Post change notes on the Facebook page/group" +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/about/licence.po b/docs/locale/ca/LC_MESSAGES/about/licence.po new file mode 100644 index 00000000000..f427039548d --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/about/licence.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:09\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/licence.po\n" +"X-Crowdin-File-ID: 1265\n" +"Language: ca_ES\n" + +#: ../../../LICENSE.rst:3 +msgid "Licence Information" +msgstr "" + +#: ../../../LICENSE.rst:5 +msgid "We haven't released Tabbycat under an open-source licence, so there is no formal and general right to use this software. Nonetheless, you're welcome to freely use Tabbycat to help run a debating tournament if it is a not-for-profit and not-for-fundraising activity. A voluntary donation of A$1 (Australian dollar) per team would be greatly appreciated, and would help us meet costs and justify our ongoing work and support for Tabbycat users. (A donation link is in the footer of your Tabbycat site.)" +msgstr "" + +#: ../../../LICENSE.rst:8 +msgid "Use at for-profit or fundraising tournaments" +msgstr "" + +#: ../../../LICENSE.rst:10 +msgid "If you use Tabbycat at a tournament where any individual or organisation is making a profit or raising funds (other than to cover the direct costs of the tournament), you or your tournament **must** make a donation of A$1 (Australian dollar) per team to the Tabbycat maintenance team, as outlined in each tournament’s donation page (the link is in the footer of your Tabbycat site). This includes instances where organisations run tournaments partly as fundraising activities and applies even if the organisation itself is a non-profit." +msgstr "" + +#: ../../../LICENSE.rst:12 +msgid "While we suggest that non-profit, non-fundraising tournaments budget for a donation of A$1 per team, it is not required in order for such tournaments to use Tabbycat." +msgstr "" + +#: ../../../LICENSE.rst:15 +msgid "Modifications to and redistributions of Tabbycat" +msgstr "" + +#: ../../../LICENSE.rst:17 +msgid "We grant you permission to modify and/or redistribute Tabbycat, provided that" +msgstr "" + +#: ../../../LICENSE.rst:19 +msgid "you do not receive any payment for this modification and/or redistribution," +msgstr "" + +#: ../../../LICENSE.rst:20 +msgid "if you modify Tabbycat, you add prominent notices stating that you modified it," +msgstr "" + +#: ../../../LICENSE.rst:21 +msgid "all references and functionality relating to donations are kept intact, and" +msgstr "" + +#: ../../../LICENSE.rst:22 +msgid "this licence page and all attributions of authorship are included as-is." +msgstr "" + +#: ../../../LICENSE.rst:24 +msgid "Modifying Tabbycat for payment, or using a version of Tabbycat that has been modified for payment, is strictly prohibited without our express permission." +msgstr "" + +#: ../../../LICENSE.rst:26 +msgid "If you use a version of Tabbycat that has been modified by you or a third party to run a for-profit or fundraising tournament, the abovementioned donation of A$1 per team is still required." +msgstr "" + +#: ../../../LICENSE.rst:29 +msgid "Disclaimer of warranty and liability" +msgstr "" + +#: ../../../LICENSE.rst:31 +msgid "We work on this software in our spare time and make it available for not-for-profit use in the hope that it will benefit the debating community. **It is provided \"as is\", without any warranty of any kind, express or implied, including without limitation any warranties of merchantability and fitness for a particular purpose, and we disclaim all legal liability. By using Tabbycat, you agree that none of its contributors will be held liable for any loss or claim arising directly or indirectly from using the software, or for any loss or claim otherwise in connection with the software.**" +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/about/support.po b/docs/locale/ca/LC_MESSAGES/about/support.po new file mode 100644 index 00000000000..e0f7d5e4e86 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/about/support.po @@ -0,0 +1,56 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-07-02 00:46\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/support.po\n" +"X-Crowdin-File-ID: 1267\n" +"Language: ca_ES\n" + +#: ../../about/support.rst:3 +msgid "Support" +msgstr "Assistència" + +#: ../../about/support.rst:5 +msgid "There are a number of ways to report bugs, ask for help, or submit feedback." +msgstr "" + +#: ../../about/support.rst:8 +msgid "Facebook" +msgstr "" + +#: ../../about/support.rst:10 +msgid "`Our Facebook group `_ is a good place to ask for help. It's also a good place to keep up with new releases and participate in more general discussions of features and ideas." +msgstr "" + +#: ../../about/support.rst:13 +msgid "GitHub" +msgstr "" + +#: ../../about/support.rst:15 +msgid "Adding an issue to our `GitHub repository `_ is a great way to let us know about bugs or writeup suggestions for how to improve Tabbycat. Pull requests are also encouraged!" +msgstr "" + +#: ../../about/support.rst:17 +msgid "When submitting bugs or reporting errors please let us know your site address (if installed online) or operating system (if local) along with a complete description of the problem along with any error messages." +msgstr "" + +#: ../../about/support.rst:20 +msgid "Email" +msgstr "" + +#: ../../about/support.rst:22 +msgid "Feel free to :ref:`contact the maintainers directly ` if you are not able to access Facebook or GitHub." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/about/tournament-history.po b/docs/locale/ca/LC_MESSAGES/about/tournament-history.po new file mode 100644 index 00000000000..0c944792eb7 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/about/tournament-history.po @@ -0,0 +1,248 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:09\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/tournament-history.po\n" +"X-Crowdin-File-ID: 1335\n" +"Language: ca_ES\n" + +#: ../../about/tournament-history.rst:3 +msgid "Tournament History" +msgstr "" + +#: ../../about/tournament-history.rst:5 +msgid "A partial list of major national and international tournaments (that we know of) which have used Tabbycat." +msgstr "" + +#: ../../about/tournament-history.rst:8 +msgid "2017" +msgstr "" + +#: ../../about/tournament-history.rst:10 +msgid "`APU Philosophy CHallenge `_" +msgstr "" + +#: ../../about/tournament-history.rst:11 +msgid "`ANU Spring IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:12 +msgid "`Australian British Parliamentary Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:13 +msgid "`Australasian Wom*ns Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:14 +msgid "Asia World Schools Debating Championship" +msgstr "" + +#: ../../about/tournament-history.rst:15 +msgid "`Asia British Parliamentary Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:16 +msgid "`Borneo British Parliamentary Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:17 +msgid "`Canadian British Parliamentary Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:18 +msgid "`Cambridge Asian Schools BP Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:19 +msgid "Cambodia United Asian Debating Championship" +msgstr "" + +#: ../../about/tournament-history.rst:20 +msgid "`China British Parliamentary Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:21 +msgid "`Japan British Parliamentary Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:22 +msgid "`Kings College London IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:23 +msgid "`Kuala Lumpur Open Challenge `_" +msgstr "" + +#: ../../about/tournament-history.rst:24 +msgid "`KPU Pro Ams `_" +msgstr "" + +#: ../../about/tournament-history.rst:25 +msgid "`Malaysian National Intervarsity Debating Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:26 +msgid "`Melbourne Mini `_" +msgstr "" + +#: ../../about/tournament-history.rst:27 +msgid "`New Zealand Easters 2017 `_" +msgstr "" + +#: ../../about/tournament-history.rst:28 +msgid "`New Zealand British Parliamentary Debating Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:29 +msgid "`North East Asia Open `_" +msgstr "" + +#: ../../about/tournament-history.rst:30 +msgid "`Swords Mini-Gong `_" +msgstr "" + +#: ../../about/tournament-history.rst:31 +msgid "`Shanghai Asian Schools British Parliamentary Debate Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:32 +msgid "`UCD Law Society IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:33 +msgid "`UCD Vice President's Cup `_" +msgstr "" + +#: ../../about/tournament-history.rst:34 +msgid "`UQ Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:35 +msgid "`UT MARA Open `_" +msgstr "" + +#: ../../about/tournament-history.rst:36 +msgid "`Victoria Cup IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:37 +msgid "`Western Sydney BP Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:38 +msgid "`Wollongong Easters `_" +msgstr "" + +#: ../../about/tournament-history.rst:39 +msgid "`Yale IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:42 +msgid "2016" +msgstr "" + +#: ../../about/tournament-history.rst:44 +msgid "`Sydney Easters `_" +msgstr "" + +#: ../../about/tournament-history.rst:45 +msgid "`Joynt Scroll 2016 `_" +msgstr "" + +#: ../../about/tournament-history.rst:46 +msgid "`Malaysia Debate Open 2016 `_" +msgstr "" + +#: ../../about/tournament-history.rst:47 +msgid "`New Zealand Easters 2016 `_" +msgstr "" + +#: ../../about/tournament-history.rst:48 +msgid "`Perth Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:49 +msgid "`Thailand United Asian Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:50 ../../about/tournament-history.rst:61 +msgid "The National Law School Debate" +msgstr "" + +#: ../../about/tournament-history.rst:51 +msgid "The Khazak National Schools Debating Championship" +msgstr "" + +#: ../../about/tournament-history.rst:54 +msgid "2015" +msgstr "" + +#: ../../about/tournament-history.rst:56 +msgid "`Bali United Asian Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:57 +msgid "`Daejeon Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:58 +msgid "`Joynt Scroll `_" +msgstr "" + +#: ../../about/tournament-history.rst:59 +msgid "`Malaysia Debate Open 2015 `_" +msgstr "" + +#: ../../about/tournament-history.rst:60 +msgid "`New Zealand Easters 2015 `_" +msgstr "" + +#: ../../about/tournament-history.rst:62 +msgid "`UNSW/UTS Easters `_" +msgstr "" + +#: ../../about/tournament-history.rst:65 +msgid "2014" +msgstr "" + +#: ../../about/tournament-history.rst:67 +msgid "`Joynt Scroll 2014 `_" +msgstr "" + +#: ../../about/tournament-history.rst:68 +msgid "NTU United Asian Debating Championships" +msgstr "" + +#: ../../about/tournament-history.rst:69 +msgid "`Otago Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:72 +msgid "2012" +msgstr "" + +#: ../../about/tournament-history.rst:74 +msgid "Wellington Australs" +msgstr "" + +#: ../../about/tournament-history.rst:77 +msgid "2010" +msgstr "" + +#: ../../about/tournament-history.rst:79 +msgid "Auckland Australs" +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/features/adjudicator-allocation.po b/docs/locale/ca/LC_MESSAGES/features/adjudicator-allocation.po new file mode 100644 index 00000000000..28332d08875 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/features/adjudicator-allocation.po @@ -0,0 +1,160 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-12-29 01:18\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-allocation.po\n" +"X-Crowdin-File-ID: 1271\n" +"Language: ca_ES\n" + +#: ../../features/adjudicator-allocation.rst:5 +msgid "Adjudicator Allocation" +msgstr "Assignació de Jutges" + +#: ../../features/adjudicator-allocation.rst:7 +msgid "The adjudicator allocation screen offers the ability to automatically generate an allocation and/or allow you to create or edit an allocation manually. This interface is somewhat complex as it attempts to provide all of the information needed to inform allocation while also providing a number of automatic and manual tools for the allocation process itself." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:10 +msgid "Assigning Debate Priority" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:12 +msgid "For tournaments with more than a few debates you generally want to begin the allocation process by applying a priority value to your debates. A debate's priority value is used by the automatic adjudicator allocator (or the preformed panel indicator) to match the strongest panels to the debates that need them most." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:16 +msgid "The prioritise button in the top-left allows you to assign a priority value automatically based on a debate's bracket or its 'liveness'. Remember that in early rounds there are usually not enough results for the liveness of each debate to be distinct and that Tabbycat measures liveness based on the sum of all live break categories — a debate can have more liveness points than it has teams if there are teams that are live in multiple categories." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:18 +msgid "The automatic prioritiser never uses the 'highest' priority value so that you can easily use this to highlight the debates that need the strongest panels without needing to redistribute the priority of other debates." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:20 +msgid "Regardless of whether you automatically assign priority, there are sliders to the left of each team that can be used to manually specify priority. These are usually used to override the automatic priority of a debate if that matchup needs and especially strong/weak/mediocre panel for reasons that are not reflected in its bracket/liveness." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:24 +msgid "If each debate's priority is the same, the automatic adjudicator will fall-back on using the debate's bracket as a substitute for priority. Thus, you can skip the prioritisation process (or only prioritise the most/least important debates) if you want a relatively even spread of panellists (e.g. during Round 1)." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:27 +msgid "Automatic Adjudicator Allocation" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:29 +msgid "Once you are happy with your priorities you can begin assigning adjudicators. This also has an (optional) automatic process that will create panels for you. In creating these panels automatically, the allocator will:" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:31 +msgid "Avoid creating 'hard' conflicts (i.e. personal or institutional clashes) between adjudicators and teams while also trying to avoid 'soft' conflicts (i.e. avoiding an adjudicator seeing the same team again)." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:32 +msgid "Form panels whose relative average voting score matches the relative priority you assigned to each debate." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:33 +msgid "Allocate trainees (unless disabled or none are under the threshold) to panels (allocated first to the highest-strength panels)." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:34 +msgid "Violate the above intents in cases where there are inescapable constraints — e.g. if there are too many soft or hard conflicts to avoid creating panels that do not trigger them." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:36 +msgid "Remember that Tabbycat will only automatically allocate adjudicators that have been marked as available for this round." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:38 +msgid "To begin this process, click the *Allocate* button in the top-left. If you have :ref:`formed preformed panels ` for this round, the modal will first ask whether you want to assign adjudicators using those panels; otherwise the modal will contain a number of options that can be used to control the allocation. In general, the *minimum feedback score* value is the most important setting to consider as it determines the threshold needed for adjudicators to not be allocated as trainees." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:42 +msgid "Once you click *Auto-Allocate* the modal should disappear and your panels should appear. At large tournaments, and in the later rounds, it is not unheard of for this process to take a minute or longer." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:44 +msgid "You can re-run the automatic allocation process on top of an existing allocation. Thus it is worth tweaking your priorities or allocation settings if the allocation does not seem optimal to you. Also note that the allocation process is not deterministic — if you rerun it the panels will be different." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:46 +msgid "Once your adjudicators have been allocated you can drag and drop them on to different panels. You can also drag and drop them to the 'unused area' (the gray bar at the bottom of the page) if you wish to store them temporarily or remove them from the draw. Dropping an adjudicator into the chair position will 'swap' that adjudicator into the previous position of the new chair." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:49 +msgid "Saving, Live Updates, and Sharing" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:51 +msgid "Changes to your panels save automatically and you can exit the allocation page whenever you wish." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:53 +msgid "In addition, the allocation pages maintain a 'live' connection to the server that shows updates made by other users who are viewing/using the same page. That is to say, if two people on two computers are both viewing the allocation page they should see each other's changes in real-time. This allows you to 'distribute' the task of allocation across individual people (rather than sharing a screen/projector) if desired." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:55 +msgid "It is possible to have users 'undo' or 'overwrite' each others changes despite this live system, e.g. if both users drag and adjudicator somewhere at the same time." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:57 +msgid "If you are dividing the task of allocation across multiple people, the *Sharding* system can help by allowing individuals to limit their view of the draw. The use case here is usually to divide the draw up into mutually-exclusive subsets so that individuals (or groups) of the adjudication core can focus on creating panels across the draw in parallel." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:61 +msgid "To activate sharding, click the small icon to the right of the \"Allocate\" button. This then presents a number of options for how the draw is divide up into distinct sets. If you want to ensure that each person opens a completely distinct set of the draw, you will need to coordinate the options that each user selects here. They will need to set the **same** options for *Shard Mix*, *Shard Split* and *Shard Sort* but select a **different** *Open* option (i.e. opt-in to viewing a different shard from the other users). The ability to exit a sharded view is available in the same dialogue." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:64 +msgid "In-Place Highlights" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:66 +msgid "Adjudicators and teams may have borders of varying colors. These borders indicate that there is a clash — soft or hard — within a debate and highlights the teams/adjudicators that have triggered this. There is a key for these colors available at the top of the page — e.g. orange means *institutional conflict* while blue means *this adjudicator has seen this adjudicator/team before*." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:70 +msgid "In general, you want to be on the lookout for red borders ('hard conflicts') and for teams with orange borders (institutional conflicts). Blue borders on teams/adjudicators and orange borders between adjudicators are usually of lesser concern." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:72 +msgid "There are two 'special' types of highlight — a gray background in the chair position (no chair) or in the panellist position (the panel is not an odd-size). Adjudicators may also have a black background if they have not been marked as available." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:75 +msgid "Hover Highlights" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:77 +msgid "When you hover over an adjudicator or team, they will take on a purple background and other adjudicators or teams may suddenly have different colored backgrounds. These indicate the conflicts that this team/adjudicator has with those other teams/adjudicators. By showing this information you can avoid swapping that adjudicator into a new debate which they have a conflict with." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:81 +msgid "When you hover over an adjudicator or team the top-most area of the screen will show additional information about them, such as all of their previous institutions, their conflicts, their break category, their team members, their region, and who they saw in the last few rounds." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:84 +msgid "Toggle Highlights" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:86 +msgid "In the top-right of the interface are a number of toggles that changes the color of adjudicators and teams to more easily check specific types of information. For example, selecting the gender toggle will color-code teams and adjudicators with the gender that has been recorded in Tabbycat. Note that when a toggle is active, the color key will update to show the meaning of these new colors." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:90 +msgid "When finalising an adjudication you may want to ensure you have turned off any toggle highlights — often they make it more difficult to see the border colors that indicate conflicts." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/features/adjudicator-feedback.po b/docs/locale/ca/LC_MESSAGES/features/adjudicator-feedback.po new file mode 100644 index 00000000000..d4190595609 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/features/adjudicator-feedback.po @@ -0,0 +1,258 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-12-29 02:20\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-feedback.po\n" +"X-Crowdin-File-ID: 1273\n" +"Language: ca_ES\n" + +#: ../../features/adjudicator-feedback.rst:5 +msgid "Adjudicator Feedback" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:7 +msgid "You can set the questions that are used on adjudicator feedback forms. The only field that is permanently there is the ``score`` field, which is an overall score assessing the adjudicator. All other questions (including a generic comments section) must be defined if you want them to be on the form." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:9 +msgid "Currently, there are two methods of setting questions:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:11 +msgid "Through the :ref:`edit database area `. Go to **Setup** > **Edit Database**, then click **Change** next to *Adjudicator feedback questions*. You can add questions here." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:14 +msgid "Using the :ref:`importtournament command `." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:16 +msgid "Most of what you need to know is explained in help text in the edit database area. (Even if you're using ``importtournament``, you might find the field descriptions in the edit database area helpful.) Some more details are here." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:20 +msgid "Answer types and options" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:23 +msgid "Type" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:23 +msgid "Relevant options" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:23 +msgid "Appearance" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:25 +msgid "**checkbox**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:25 +#: ../../features/adjudicator-feedback.rst:27 +#: ../../features/adjudicator-feedback.rst:35 +#: ../../features/adjudicator-feedback.rst:37 +msgid "\\-" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:27 +msgid "**yes/no (dropdown)**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:29 +msgid "**integer (textbox)**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:29 +#: ../../features/adjudicator-feedback.rst:31 +#: ../../features/adjudicator-feedback.rst:33 +msgid "min_value, max_value" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:31 +msgid "**integer scale**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:33 +msgid "**float**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:35 +msgid "**text**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:37 +msgid "**long text**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:39 +msgid "**select one**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:39 +#: ../../features/adjudicator-feedback.rst:41 +msgid "choices" +msgstr "opcions" + +#: ../../features/adjudicator-feedback.rst:41 +msgid "**select multiple**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:44 +msgid "Options:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:46 +msgid "**min_value** and **max_value** specify the minimum and maximum allowable values in the field. Mandatory for \"integer scale\" types and optional for \"integer (textbox)\" and \"float\" types." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:47 +msgid "**choices** is used with \"select one\" and \"select multiple\" types, and is a ``//``-delimited list of possible answers, *e.g.* ``biased//clear//concise//rambly//attentive//inattentive``" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:48 +msgid "**required** specifies whether users must fill out the field before clicking \"submit\". This requirement is only enforced on public submission forms. It is not enforced on forms entered by tab room assistants." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:50 +msgid "The exception to this is the \"checkbox\" type. For checkboxes, \"required\" means that the user cannot submit the form unless the box is checked. Think of it like an \"I agree to the terms\" checkbox. This isn't a deliberate design decision—it's just a quirk of how checkboxes work on web forms." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:53 +msgid "Want another answer type?" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:55 +msgid "We don't really intend to add any further complexity to the built-in feedback system. If the above answer types don't cover your needs, we suggest using a third-party feedback system. You might be able to adapt `SurveyMonkey `_, `Google Forms `_ or `Qualtrics `_ to your needs." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:60 +msgid "We may be persuaded to make an exception if the new question type you have in mind is easy to add: that is, if it is straightforward to implement using standard web page elements and fits into the existing questionnaire framework (see :ref:`feedback-questionnaires` below). If you think there is such a case, please contact us using the contact details in the :ref:`authors` section." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:69 +msgid "Different questionnaires" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:71 +msgid "Tabbycat allows you to specify two questionnaires: one for feedback submitted by teams, and one for feedback submitted by adjudicators. You must specify in each question whether to include the question in each questionnaire." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:75 +msgid "**from_team**, if checked, includes the question in feedback submitted by teams" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:77 +msgid "**from_adj**, if checked, includes the question in feedback submitted by adjudicators" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:81 +msgid "Who gives feedback on whom?" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:82 +msgid "Tabbycat allows for three choices for which adjudicators give feedback on which other adjudicators:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:85 +msgid "Chairs give feedback on panellists and trainees" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:86 +msgid "Chairs give feedback on panellists and trainees, and panellists give feedback on chairs" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:88 +msgid "All adjudicators, including trainees, give feedback on all other adjudicators they have adjudicated with" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:91 +msgid "You can set this in the **feedback paths** option under *Setup* > *Configuration* > *Feedback*. Your choice affects each of the following:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:94 +msgid "The options presented to adjudicators in the online feedback form" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:95 +msgid "The printable feedback forms" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:96 +msgid "The submissions expected when calculating feedback progress and highlighting missing feedback" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:99 +msgid "The feedback paths option only affects feedback from adjudicators. Teams are always assumed to give feedback on the orallist, and they are encouraged to do so through hints on the online and printable feedback forms, but there is nothing technically preventing them from submitting feedback from any adjudicator on their panel." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:105 +msgid "Advanced users" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:108 +msgid "If you need a different setting, you need to edit the source code. Specifically, you should edit the function ``expected_feedback_targets`` in tabbycat/adjfeedback/utils.py." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:112 +msgid "Unless we can be convinced that they are very common, we don't intend to add any further choices to the feedback paths option. If your needs are specific enough that you need to differ from the available settings, they are probably also beyond what is sensible for a built-in feedback system, and we recommend using a third-party feedback system instead." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:119 +msgid "How is an adjudicator's score determined?" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:121 +msgid "For the purpose of the automated allocation, an adjudicator's overall score is a function of their base score, the current round's feedback weight, and their average feedback score. This number is calculated according to the following formula:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:126 +msgid "\\textrm{score} = (1-w)\\times\\textrm{base score} + w\\times\\textrm{average feedback score}" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:130 +msgid "where :math:`w` is the feedback weight for the round. Note that because the feedback score is averaged across all pieces of feedback (rather than on a per-round total) rounds in which a person receives feedback from many sources (say from all teams and all panellists) could impact their average score much more than a round in which they only receive feedback from one or two sources." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:132 +msgid "Under this formula, each round's feedback weight can be used to determine the relative influence of the base score vs feedback in determining the overall score. As an example, say that an adjudicator received 5.0 as their base score, but their average feedback rating has thus far been 2.0. If the current rounds' feedback weight is set to 0.75, then their overall score would be 2.75. If the current round's feedback weight is set to 0.5 their score would be 3.5. If the weight was 0, their score will always be their base score; if the weight was 1 it will always be their average feedback value." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:141 +msgid "To change the weight of a round you will need to go to the Edit Database area, open the round in question, and change its *Feedback weight* value. It is common to set rounds with a low feedback weight value early on in the tournament (when feedback is scant) and to increase the feedback weight as the tournament progresses." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:143 +msgid "A participant's base score can, in conjunction with feedback weight, also be used as a manual override for an adjudicator's overall ranking. At several tournaments, adjudication cores have set every round's feedback weight to 0, and manually adjusted an adjudicator's base score in response to feedback they have received and reviewed. In this way complete control over every adjudicator's overall score can be exerted." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:145 +msgid "If feedback from trainee adjudicators is enabled, any scores that they submit in their feedback are not counted towards that adjudicator's overall score." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:148 +msgid "Ignoring/Discarding feedback" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:150 +msgid "There are some cases where feedback should be discarded or ignored, but there are some differences between the two. Discarded feedback is mostly due to having another piece of feedback that supersedes the discarded ones. Ignored feedback is different as it still counts the affected feedback as submitted, just inconsequential, ignored in the adjudicator's score calculation." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:152 +msgid "Feedback can be marked as discarded in the database view, under the ``confirmed`` field. It can also be marked as ignored in the same view. Controls to reverse these designations are also available there. To mark feedback as ignored, an option is available in the administrator's and assistant's feedback adding form, as well in the form of a toggle link at the bottom of each card." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/features/backups.po b/docs/locale/ca/LC_MESSAGES/features/backups.po new file mode 100644 index 00000000000..216e6ac5598 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/features/backups.po @@ -0,0 +1,120 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:09\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/backups.po\n" +"X-Crowdin-File-ID: 1275\n" +"Language: ca_ES\n" + +#: ../../features/backups.rst:5 +msgid "Backups" +msgstr "" + +#: ../../features/backups.rst:7 +msgid "Tabbycat doesn't provide an in-built backup system; instead you should create copies of your database directly. Heroku provides a very good backup utility for all sites hosted on Heroku which makes this easy, and for Heroku-based Tabbycat sites, we strongly recommend it." +msgstr "" + +#: ../../features/backups.rst:12 +msgid "You should **always** back up the database before deleting *any* data while in the Edit Database area, because deleting data cannot be undone. It is also a good idea to back up the database before doing anything in the Edit Database area, unless you're very familiar and confident with editing the Tabbycat database directly." +msgstr "" + +#: ../../features/backups.rst:18 +msgid "You may, as a matter of standard practice at large tournaments, wish to back up the database twice per round: Once just after you've generated the draw and allocated adjudicators, and once just after you've finished entering results." +msgstr "" + +#: ../../features/backups.rst:22 +msgid "If you're using an online version of Tabbycat, it's a good idea to download the backups. While it's extremely rare to lose internet access or have an outage in a critical web service (*i.e.*, Heroku), having a local copy of your backups allows you to :ref:`restore your tab to a local installation ` if this ever happens." +msgstr "" + +#: ../../features/backups.rst:29 +msgid "Installations on Heroku" +msgstr "" + +#: ../../features/backups.rst:31 +msgid "Heroku provides a utility to easily back up and restore the entire site database." +msgstr "" + +#: ../../features/backups.rst:35 +msgid "If you don't have the Heroku CLI" +msgstr "" + +#: ../../features/backups.rst:36 +msgid "You can capture backups from the Heroku Dashboard:" +msgstr "" + +#: ../../features/backups.rst:38 +msgid "Go to the `Heroku Dashboard `_ and click on your app." +msgstr "" + +#: ../../features/backups.rst:40 +msgid "Under *Installed add-ons*, go to **Heroku Postgres**." +msgstr "" + +#: ../../features/backups.rst:41 +msgid "Scroll down, and click on the **Capture Backup** button." +msgstr "" + +#: ../../features/backups.rst:42 +msgid "Once the capture has finished, a **Download** button will be available." +msgstr "" + +#: ../../features/backups.rst:44 +msgid "You can't restore a backup without the Heroku Command Line Interface (CLI), so if you end up needing your backup, you'll need to install the `Heroku CLI `_, and then follow the instructions below." +msgstr "" + +#: ../../features/backups.rst:50 +msgid "If you have the Heroku CLI" +msgstr "" + +#: ../../features/backups.rst:52 +msgid "The best guide to backing up databases is the `Heroku Dev Center's PGBackups guide `_." +msgstr "" + +#: ../../features/backups.rst:55 +msgid "To capture a backup::" +msgstr "" + +#: ../../features/backups.rst:59 +msgid "To download the most recently captured backup::" +msgstr "" + +#: ../../features/backups.rst:63 +msgid "To restore a backup::" +msgstr "" + +#: ../../features/backups.rst:67 +msgid "If you have multiple Tabbycat sites, you'll need to specify which one by adding ``--app mytournamentname`` to the end of the command." +msgstr "" + +#: ../../features/backups.rst:71 +msgid "Local installations" +msgstr "" + +#: ../../features/backups.rst:73 +msgid "There are lots of ways to back up local PostgreSQL databases, but we'd suggest using the `pg_dump `_ and `pg_restore `_ commands." +msgstr "" + +#: ../../features/backups.rst:83 +msgid "Restoring a Heroku backup to a local installation" +msgstr "" + +#: ../../features/backups.rst:85 +msgid "As detailed in the `Heroku Dev Center `_, you can restore a downloaded Heroku backup to a local installation. This might be useful if, say, your internet connection breaks irrecoverably in the middle of a tournament and you need to run offline. Of course, for this to work, you need to have downloaded your backup before your internet connection broke---a good reason to download a copy of your backups as soon as you make them." +msgstr "" + +#: ../../features/backups.rst:92 +msgid "Assuming your download is called ``latest.dump`` (this is the default name), your PostgreSQL username is ``tabbycat``, and you wish to call your local database ``fromheroku`` (if not, replace arguments as appropriate)::" +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/features/breaks.po b/docs/locale/ca/LC_MESSAGES/features/breaks.po new file mode 100644 index 00000000000..8e467ce90a4 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/features/breaks.po @@ -0,0 +1,212 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:08\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/breaks.po\n" +"X-Crowdin-File-ID: 1277\n" +"Language: ca_ES\n" + +#: ../../features/breaks.rst:5 +msgid "Breaks and Break Rounds" +msgstr "" + +#: ../../features/breaks.rst:7 +msgid "In Tabbycat, elimination rounds (sometimes called *outrounds* or the *final series*) are called \"break rounds\", and the qualification of teams to compete in the elimination phase of a tournament is called the \"break\"." +msgstr "" + +#: ../../features/breaks.rst:12 +msgid "About break categories" +msgstr "" + +#: ../../features/breaks.rst:14 +msgid "Tabbycat supports multiple and arbitrarily-named break categories. Most tournaments will have just one category, typically called \"Open\", leading to the grand final. Some tournaments also have restricted-eligibility break categories, for example, for novice teams or teams for whom English is a second language." +msgstr "" + +#: ../../features/breaks.rst:19 +msgid "Having multiple break categories is intended for tournaments where multiple *parallel* elimination phases derive from the *same* preliminary rounds (inrounds). It's not for parallel but distinct competitions---for those, you should create distinct tournaments." +msgstr "" + +#: ../../features/breaks.rst:27 +msgid "Break qualification rules" +msgstr "" + +#: ../../features/breaks.rst:29 +msgid "Tabbycat supports several break qualification rules, and each break category must be configured to use one of them. Most tournaments will use \"Standard\", which is the default." +msgstr "" + +#: ../../features/breaks.rst:38 +msgid "Rule name (string to use in ``importtournament`` CSV files)" +msgstr "" + +#: ../../features/breaks.rst:39 +msgid "Descrption" +msgstr "" + +#: ../../features/breaks.rst:41 +msgid "Standard (``standard``)" +msgstr "" + +#: ../../features/breaks.rst:42 +msgid "The top *n* teams break. This is the default, and most tournaments use this rule." +msgstr "" + +#: ../../features/breaks.rst:45 +msgid "AIDA 1996 (``aida-1996``)" +msgstr "" + +#: ../../features/breaks.rst:46 +msgid "The top *n* teams that are also in the top three teams from their institution break." +msgstr "" + +#: ../../features/breaks.rst:49 +msgid "AIDA 2016 (Australs) (``aida-2016-australs``)" +msgstr "" + +#: ../../features/breaks.rst:50 +msgid "The top *n* teams that fulfil either of these criteria break:" +msgstr "" + +#: ../../features/breaks.rst:53 +msgid "They are in the top *n* teams overall, and in the top three teams from their institution." +msgstr "" + +#: ../../features/breaks.rst:55 +msgid "They have at least as many wins as the *n*\\ th-ranked team, and they are the top team from their institution." +msgstr "" + +#: ../../features/breaks.rst:58 +msgid "If fewer than *n* teams fulfil either criterion, then the best teams not fulfilling the criteria are added to make *n* teams." +msgstr "" + +#: ../../features/breaks.rst:62 +msgid "AIDA 2016 (Easters) (``aida-2016-easters``)" +msgstr "" + +#: ../../features/breaks.rst:63 +msgid "As for AIDA 2016 (Australs), except that if fewer than *n* teams fulfil either criterion, then only the best teams who are in the top three teams from their institution are added to make *n* teams." +msgstr "" + +#: ../../features/breaks.rst:68 +msgid "The break generators are somewhat more complex than described in the above table: among other things, they also handle cases where there is a tie for the last place in the break, and for those break categories marked \"general\", they will show where ineligible teams would have broken, had they been eligible." +msgstr "" + +#: ../../features/breaks.rst:75 +msgid "Setting up break categories and rounds" +msgstr "" + +#: ../../features/breaks.rst:77 +msgid "For each break category in your tournament, you need to do two things:" +msgstr "" + +#: ../../features/breaks.rst:79 +msgid "Create (and name) a break category" +msgstr "" + +#: ../../features/breaks.rst:80 +msgid "Create break rounds for the category" +msgstr "" + +#: ../../features/breaks.rst:81 +msgid "Set the eligibility of teams to compete in the category" +msgstr "" + +#: ../../features/breaks.rst:83 +msgid "If you only have one break category (open) and you create your tournament using the \"Create New Tournament\" page, simply enter the number of teams in the break (*e.g.*, 8 if you're breaking to quarterfinals). Tabbycat will create the break category and break rounds for you. For any further break categories, you'll need to go to the **Breaks** item in the left-hand menu for a particular tournament and then click **Break Categories**. Fill out the forms for the number of new break categories and save. Rounds will be created automatically. You'll still need to set the eligibility of teams though, as in (3) below." +msgstr "" + +#: ../../features/breaks.rst:92 +msgid "If you create your tournament using the `importtournament` command or in **Edit Database**, you'll need to do all three steps above yourself. You may also want to edit the break rounds (2) to change their names." +msgstr "" + +#: ../../features/breaks.rst:97 +msgid "1. Creating break categories" +msgstr "" + +#: ../../features/breaks.rst:99 +msgid "If using the `importtournament` command, there is an example file, *break_categories.csv*, that you can copy and adjust. If using **Edit Database**, add categories under **Break Qualification > Break categories**." +msgstr "" + +#: ../../features/breaks.rst:103 +msgid "Most of the fields are self-explanatory or described on the Edit Database form, except for one: \"rule\", which sets the break qualification rule. Permissible values are described in :ref:`breakqual-rules` above. If using `importtournament`, be sure to use the correct string (in brackets in the table). The rule defaults to \"Standard\" (``standard``)." +msgstr "" + +#: ../../features/breaks.rst:109 +msgid "The \"institution cap\" field was removed in Tabbycat 1.0. All Australs break qualification rules are now hard-coded to a cap of three teams per institution." +msgstr "" + +#: ../../features/breaks.rst:114 +msgid "2. Creating break rounds" +msgstr "" + +#: ../../features/breaks.rst:116 +msgid "You should create a round for every break round you intend to hold, including it in *rounds.csv* if using `importtournament`, or adding them under **Tournaments > Rounds** if using **Edit Database**. Be careful to set the following fields correctly:" +msgstr "" + +#: ../../features/breaks.rst:121 +msgid "*Break category* must be set to the relevant break category." +msgstr "" + +#: ../../features/breaks.rst:122 +msgid "*Stage* and *draw type* must both be set to \"Elimination\"." +msgstr "" + +#: ../../features/breaks.rst:125 +msgid "3. Setting break eligibility" +msgstr "" + +#: ../../features/breaks.rst:127 +msgid "Once a break category has been created it will not have any teams eligible for it, even if it was marked as \"Is general\". To edit the eligibility of teams for any break round go to the **Breaks** item in the left-hand menu for a particular tournament and then click **Team Eligiblity**." +msgstr "" + +#: ../../features/breaks.rst:132 +msgid "Here you can select \"all\" or \"none\" to toggle all team eligiblities or edit them using the tick boxes. Once you **save** it should return you to the main break page which will display the number of teams marked eligible." +msgstr "" + +#: ../../features/breaks.rst:136 +msgid "Adjudicators can be marked as \"breaking\" on the **Feedback** page; clicking **Adjudicators** on the breaks page will take you straight there." +msgstr "" + +#: ../../features/breaks.rst:140 +msgid "Generating the break" +msgstr "" + +#: ../../features/breaks.rst:142 +msgid "Unlike team or speaker standings, each category's break (and the break ranks of teams) are not determined automatically and updated continuously. Instead each can be generated (and regenerated) as desired." +msgstr "" + +#: ../../features/breaks.rst:146 +msgid "To do so go to the **Breaks** item in the left-hand menu and then click the white button that corresponds to the break category you'd like to determine the rankings for. When prompted, select **Generate the break for all categories** to display the list of breaking teams." +msgstr "" + +#: ../../features/breaks.rst:151 +msgid "From this page you can update the breaking teams list for this break category (or all categories) as well as view and edit 'remarks' that account for cases in which a team may not break (such as being capped or losing a coin toss)." +msgstr "" + +#: ../../features/breaks.rst:155 +msgid "Please double-check the generated break before announcing or releasing it. Although the break generation code is designed to handle edge cases, we don't test the code for such cases." +msgstr "" + +#: ../../features/breaks.rst:160 +msgid "Creating draws for break rounds" +msgstr "" + +#: ../../features/breaks.rst:162 +msgid "Creating a draw for a break round proceeds as normal, except that the team availability process is skipped. Instead, when you visit the availability page for that round it will have automatically determined which teams should be debating based upon the determined break for that category. Once a draw has been generated it will then use the relevant break ranks to create the matchups (ie 1st-breaking vs 16th-breaking, 2nd vs 15th, *etc.*). Subsequent break rounds will then also automatically determine matchups based on the previous round's results and room ranks." +msgstr "" + +#: ../../features/breaks.rst:171 +msgid "If the \"break size\" of a break category is not a power of 2, it will treat the first break round as a partial-elimination draw and only create a draw for the teams not skipping the partial-elimination round. Subsequent break rounds will then process as described above." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/features/check-ins.po b/docs/locale/ca/LC_MESSAGES/features/check-ins.po new file mode 100644 index 00000000000..a0cdb7b3d0b --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/features/check-ins.po @@ -0,0 +1,136 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-07-02 00:46\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/check-ins.po\n" +"X-Crowdin-File-ID: 1279\n" +"Language: ca_ES\n" + +#: ../../features/check-ins.rst:5 +msgid "Check-Ins" +msgstr "Registre" + +#: ../../features/check-ins.rst:7 +msgid "A 'Check-in' is a record of a speaker, adjudicator, venue, or ballot's status at a particular point in time. Typically these are used at large tournaments to reliably track who is or is not present for the first round of each day." +msgstr "" + +#: ../../features/check-ins.rst:9 +msgid "Check-ins serve a similar purpose to the :ref:`availability ` system. However availabilities are tied to a particular round rather than to a particular time — they are generally used to record instances where you know ahead of time whether a person should or should not be included in a draw. In contrast, check-ins are useful for when you *don't* know ahead of time whether a person will be able to be put into the draw and so want to be able to confirm their presence with a high degree of confidence. That said the two systems interact — the standard availability pages allow you to easily set all adjudicators or teams who have checked-in as available for a given round." +msgstr "" + +#: ../../features/check-ins.rst:12 +msgid "Check-In Identifiers" +msgstr "" + +#: ../../features/check-ins.rst:14 +msgid "Check-ins are associated with a 'identifier' — a number that is unique to each speaker and adjudicator. To generate these numbers go to the *Identifiers* section under the Check-Ins menu. From here you generate identifiers for Speakers, Adjudicators, and Venues as needed. Note also that Identifiers can be manually added or edited in the *Edit Database* area if necessary." +msgstr "" + +#: ../../features/check-ins.rst:18 +msgid "Once this number has been generated it can be transformed into a barcode so that it can be easily included on tournament badges or otherwise printed and disbursed. On the same *Identifiers* page you can use the *View barcodes* option to open up a page that lists all the barcodes for the speakers, adjudicators, or venues." +msgstr "" + +#: ../../features/check-ins.rst:22 +msgid "The identifiers for ballots are automatically generated when printing ballots." +msgstr "" + +#: ../../features/check-ins.rst:25 +msgid "Recording Check-Ins" +msgstr "" + +#: ../../features/check-ins.rst:27 +msgid "On the *Scanning* section of Check-ins you can record a particular check-in. This can be done in a few different ways:" +msgstr "" + +#: ../../features/check-ins.rst:29 +msgid "You can type in the Identifier number into the box. Once five numbers have been identified it will automatically issue the check-in and clear the input field for the next number." +msgstr "" + +#: ../../features/check-ins.rst:31 +msgid "If you have purchased barcode scanners and configured them as USB keyboards they should then be compatible with this page: upon page load the cursor should be positioned in the input field, and any scanned barcodes should populate it with the specified number, issue the check-in, and then clear the box for the next scan." +msgstr "" + +#: ../../features/check-ins.rst:33 +msgid "Barcode scanners are probably cheaper than you think. A perfectly serviceable model should be around $20 USD or less although a cursory Google search might at first turn up models that are many times that amount. If you are a curious tab director, or are involved in a tournament with a little spare money, having just one or two around for critical tasks can be highly valuable." +msgstr "" + +#: ../../features/check-ins.rst:35 +msgid "If your device has a (web)cam you can use the Scan Using Camera button. Any barcodes put in front of the camera's video stream will be scanned into the form. A sound will play when a barcode has been identified — so be aware that turning sound on or using headphones can help identify when a scan has been made." +msgstr "" + +#: ../../features/check-ins.rst:39 +msgid "Camera scanning works on most modern browsers although it will only work with Safari 11 or higher (iOS 11+ and macOS 10.13+). Camera scanning may also not work when using a local-installation of Tabbycat in all browsers, *except* Firefox where it seems to. Depending on the quality of your camera barcodes that are less than 4cm wide may not be recognised — ideally barcodes should be at least 5cm if using this method as your main way of checking-in things." +msgstr "" + +#: ../../features/check-ins.rst:41 +msgid "The Check-in status page (described below) allows assistants and administrators to manually check-in particular people or entire institutions without needing to know their identifiers." +msgstr "" + +#: ../../features/check-ins.rst:44 +msgid "The Check-In 'Window'" +msgstr "" + +#: ../../features/check-ins.rst:46 +msgid "Because Check-In events are not explicitly linked to rounds there is essentially a 'window' or time period in which a check-in is still considered valid. The time of this 'window' in hours can be set in *Setup* > *Configuration* > *Data Entry*." +msgstr "" + +#: ../../features/check-ins.rst:48 +msgid "At tournaments the run check-ins during the start of each day the check-in 'window' (i.e. the time before check-ins expire) you can leave this window setting at the default time (12 hours) which should give enough time to distinguish between the first check-ins of that day as compared to the last check-ins of the previous day. At tournaments where you want to run a check-in process at the start of every round you may want to set the time to around 2 hours or something much shorter." +msgstr "" + +#: ../../features/check-ins.rst:51 +msgid "Viewing Check-Ins" +msgstr "" + +#: ../../features/check-ins.rst:53 +msgid "On the *People Statuses* section of Check-ins you can view who has or has not been checked-in. This page will live-update with the latest check-ins so you should be able to leave it open to monitor income attendances." +msgstr "" + +#: ../../features/check-ins.rst:57 +msgid "The blue \"tick\" boxes allow you to manually check-in people and/or entire institutions (for *People*) or venues and/or venue groups (for *Venues*) , without the need to scan their identifiers. This style of check-in is designed for use an auditorium roll-call type situation where you might be running through a list of people to the room or identifying absences on a per-institution basis." +msgstr "" + +#: ../../features/check-ins.rst:59 +msgid "A public version of this check-in status page can be enabled under *Setup* > *Configuration* > *Public Features* which can be useful for allowing people to self-police check-ins and/or validate their check-in worked." +msgstr "" + +#: ../../features/check-ins.rst:62 +msgid "Check-Ins for Ballots" +msgstr "" + +#: ../../features/check-ins.rst:64 +msgid "Ballots can be checked-in to quickly validate which ballots are physically present in the tab room. This can help more quickly identify ballots that are missing. Which ballots have or have not been checked-in will show up on the Results page. Ballots can be scanned using the standard 'Scan Identifiers' page." +msgstr "" + +#: ../../features/check-ins.rst:66 +msgid "Barcodes are automatically assigned and included to ballots when they are printed. Barcodes have no check-in window — any relevant check-in event counts regardless of how long ago it was." +msgstr "" + +#: ../../features/check-ins.rst:69 +msgid "Check-Ins for Venues" +msgstr "" + +#: ../../features/check-ins.rst:71 +msgid "Venues can be checked-in, but what a 'venue check-in' means is a bit more flexible. It might be used to validate which rooms are debate-ready at the start of a day (i.e. unlocked; has a desk) or it could be used during the rounds to record which rooms have returned their ballots." +msgstr "" + +#: ../../features/check-ins.rst:73 +msgid "Venues have a separate check-in window setting to that of people." +msgstr "" + +#: ../../features/check-ins.rst:75 +msgid "Venues have their own Status page (like people) and can be checked-in there manually. Like speakers and adjudicators their barcodes can also be printed off." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/features/data-entry.po b/docs/locale/ca/LC_MESSAGES/features/data-entry.po new file mode 100644 index 00000000000..b490f10d397 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/features/data-entry.po @@ -0,0 +1,168 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-07-02 20:38\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-entry.po\n" +"X-Crowdin-File-ID: 1281\n" +"Language: ca_ES\n" + +#: ../../features/data-entry.rst:5 +msgid "Entering Ballots and Feedback" +msgstr "" + +#: ../../features/data-entry.rst:8 +msgid "Ballot check-in" +msgstr "" + +#: ../../features/data-entry.rst:10 +msgid "For tournaments that require it, there is a \"ballot check-in\" page that can be used to record the arrival of ballots to the tab room. When there's a missing ballot, it can help establish whether the ballot never made it to the tab room, or whether it's probably floating around in the room forgotten. Also, it can help enforce early checks that panels return the correct number of ballots to the room." +msgstr "" + +#: ../../features/data-entry.rst:12 +msgid "To get to the ballot check-in, click the relevant round in the menu of the admin area, and then click \"Results\" and then \"Ballot Check-In\". This requires superuser privileges." +msgstr "" + +#: ../../features/data-entry.rst:14 +msgid "There's no adverse effect from not using the ballot check-in. Data enterers will still be able to enter and confirmed ballots, even if not checked in." +msgstr "" + +#: ../../features/data-entry.rst:18 +msgid "Since the ballot check-in tends to require a dedicated computer or two, it can be worth creating a separate superuser account for ballot check-in, so that it doesn't appear on the action logs as being by a particular person." +msgstr "" + +#: ../../features/data-entry.rst:19 +msgid "Don't forget to provision a computer or two for this if you're planning to use it." +msgstr "" + +#: ../../features/data-entry.rst:20 +msgid "Ballot check-ins can be a bottleneck, so you might decide they're not worth using. Alternatively, you might have multiple computers for this purpose, or you might dedicate a tab room helper to driving the process (since this is probably faster than runners doing the typing in turn)." +msgstr "" + +#: ../../features/data-entry.rst:23 +msgid "Ballot entry" +msgstr "" + +#: ../../features/data-entry.rst:27 +msgid "Most tab rooms run some sort of check system to ensure data is entered accurately. In Tabbycat, this is built into the system, which also helps speed it up." +msgstr "" + +#: ../../features/data-entry.rst:29 +msgid "As a general principle, Tabbycat requires all ballots to be looked at by two people. The first person enters the data from the ballot, and the second person checks it. The second person isn't allowed to modify the data—they either confirm it or reject it, and if they reject it, then the whole process starts again. This is by design: to be confirmed, the *same* data must have been seen by at least two people." +msgstr "" + +#: ../../features/data-entry.rst:31 +msgid "The administrator area does **not** work like this. It's designed to be flexible, so allows you to edit, confirm or unconfirm any ballot at any time. For this reason, you should use the **assistant** area to enter ballots, even if you have a superuser account." +msgstr "" + +#: ../../features/data-entry.rst:35 +msgid "Don't forget to check the totals against the ballot—they're a useful integrity check too." +msgstr "" + +#: ../../features/data-entry.rst:36 +msgid "Don't forget to check the winner against the ballot! If the adjudicator gets it wrong, it's worth asking to clarify." +msgstr "" + +#: ../../features/data-entry.rst:37 +msgid "It can be helpful to think about the room layout to maximize efficiency." +msgstr "" + +#: ../../features/data-entry.rst:38 +msgid "Some tab rooms like to assign some to data entry and some to verification. This isn't really necessary, since Tabbycat doesn't let the same person enter and verify the same ballot. (This is one of many reasons why every person should have their own account.)" +msgstr "" + +#: ../../features/data-entry.rst:39 +msgid "Emails can be configured to be sent to adjudicators as a receipt of their ballot once confirmed." +msgstr "" + +#: ../../features/data-entry.rst:42 +msgid "Duplicate/Swing Speeches" +msgstr "" + +#: ../../features/data-entry.rst:46 +msgid "When entering the ballots there is a toggle label *'Iron' speeches*. When set to \"yes\" this allows you to have the same speaker deliver multiple speeches provided their extra speeches are labelled on the form as 'duplicates'. Typically, most tournaments require that lesser 'iron man' speech is discarded from the tab, which would mean that you would mark the lower speaker of the two scores as the duplicate (note that this may require you to check each score's average across a panel)." +msgstr "" + +#: ../../features/data-entry.rst:48 +msgid "Speeches marked as duplicates are not included in the speaker tab. This means that they can also be used to exclude swing speakers from the tab as needed; even if they do not actually speak twice. To do so, change the name of the swing speaker to be that of an existing team member and ensure that that speech is marked as a duplicate." +msgstr "" + +#: ../../features/data-entry.rst:50 +msgid "There is also an option under **Standings** in the **Configuration** section that specifies the number of debates a speaker can miss before you will not show on the tab. By default there is no limit, but if need be this can be set to hide swing speakers from the final speaker tab." +msgstr "" + +#: ../../features/data-entry.rst:53 +msgid "Feedback entry" +msgstr "" + +#: ../../features/data-entry.rst:57 +msgid "Feedback doesn't have the same verification process as ballots. Feedback that is entered by the tab room is assumed to be confirmed. If feedback is entered multiple times, all copies are retained but only the last one \"counts\" (is considered confirmed)." +msgstr "" + +#: ../../features/data-entry.rst:60 +msgid "Online entry" +msgstr "" + +#: ../../features/data-entry.rst:62 +msgid "There are two methods of allowing ballots and feedback to be submitted online. Both are set in the **Data Entry** page of each tournament's **Configuration** section and can be set independently; both in whether each can be submitted online at all and in which method of online submission are available." +msgstr "" + +#: ../../features/data-entry.rst:68 +msgid "Private URLs" +msgstr "URLs privades" + +#: ../../features/data-entry.rst:70 +msgid "The first method of data entry is using 'private URLs'. When this setting is enabled you can create a special URL that is unique to a participant. This link contains a number of random characters and is not displayed publicly; it is in effect a secret that only that a specific participant should know. Presuming people do not share these links to others, this provides a means to (relatively) securely identify who is submitting what information. Because Tabbycat knows which participant has which URL it will only allow them to submit feedback/ballots for debates that they were speakers/adjudicators in." +msgstr "" + +#: ../../features/data-entry.rst:72 +msgid "Private URLs should provide more than adequate security for almost all tournaments' purposes, but they aren't foolproof. Anyone with access to the URL for a participant can submit feedback or ballots on their behalf, so it's important that participants not share their URLs. This also means participants need to be careful when submitting from devices they do not own, because the URL will be logged in that device's browser history." +msgstr "" + +#: ../../features/data-entry.rst:74 +msgid "These links must be generated within Tabbycat after the preference is enabled. To do so go to the **Feedback** section and then the **Private URLs** area. Once there you will be prompted to generate those URLs for all participants, which — once generated — will be presented in separate tables (one for teams; one for adjudicators)." +msgstr "" + +#: ../../features/data-entry.rst:78 +msgid "These URLs can then be distributed to each person in a number of ways. There are pages within Tabbycat for printing them out (one URL per page labelled by recipient) or emailing them out (providing participants have been assigned email addresses). In the past tournaments have also used data from this table to send out SMSs by bulk, or distributed them to institutional representatives to disburse." +msgstr "" + +#: ../../features/data-entry.rst:82 +msgid "You can assign email address to participants using the :ref:`importtournament command ` when importing your registration data, or by going to the *Edit Data* area and looking up each Speaker/Adjudicator." +msgstr "" + +#: ../../features/data-entry.rst:83 +msgid "If, after generating the private URLs, you add additional Teams or Adjudicators you can go to the *Edit Database* area , look up each Speaker/Adjudicator, and type in a bunch of random characters as their *Url key* to assign them a private URL." +msgstr "" + +#: ../../features/data-entry.rst:84 +msgid "You can delete the current set of URLs by running this command in a shell on your server (replacing TOURNAMENT_SLUG with the appropriate value): ``python manage.py privateurls delete --tournament TOURNAMENT_SLUG``" +msgstr "" + +#: ../../features/data-entry.rst:89 +msgid "Public URLs" +msgstr "" + +#: ../../features/data-entry.rst:91 +msgid "The second method of data entry is using 'normal URLs'. This essentially means that any users visiting the public version of the site is able to submit a ballot or feedback (as specified by their respective settings). They do so by self-selecting which Team or Adjudicator they are then entering in a form as normal." +msgstr "" + +#: ../../features/data-entry.rst:93 +msgid "This is, rather obviously, not a particularly secure method of data entry — nothing is stopping anyone on the site from entering data as someone else. The data can be checked, verified, and edited as normal by admins however. As such, this method is only recommended for small tournaments where you can trust those present to enter accurate information (or where accuracy is not crucial)." +msgstr "" + +#: ../../features/data-entry.rst:95 +msgid "There is an additional setting to set a 'tournament password' that needs to be submitted to enable the form. It is imagined, that if enabled, this password would only be distributed to tournament participants. However this only helps (at best) prevent non-participants from entering information; the fundamental problem of not verifying who is submitting what information is still present." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/features/data-importers.po b/docs/locale/ca/LC_MESSAGES/features/data-importers.po new file mode 100644 index 00000000000..bf2195131a0 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/features/data-importers.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:08\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-importers.po\n" +"X-Crowdin-File-ID: 1283\n" +"Language: ca_ES\n" + +#: ../../features/data-importers.rst:5 +msgid "Tournament Data Importers" +msgstr "" + +#: ../../features/data-importers.rst:7 +msgid "This page describes how to write your own tournament data importer. It is aimed at an audience that is familiar with programming in Python, and may be willing to get their head around the Django model if necessary." +msgstr "" + +#: ../../features/data-importers.rst:9 +msgid "The **tournament data importer** is the class that imports data from one or more files (usually CSV files) into the database. A base class ``BaseTournamentDataImporter`` is in `importer/base.py `_. An example of a data importer is in `importer/anorak.py `_." +msgstr "" + +#: ../../features/data-importers.rst:11 +msgid "Todo" +msgstr "" + +#: ../../features/data-importers.rst:11 +msgid "This page is incomplete. If you're finding this information insufficient, please contact Chuan-Zheng using the contact details in the :ref:`authors` section." +msgstr "" + +#: ../../features/data-importers.rst:14 +msgid "Why write your own?" +msgstr "" + +#: ../../features/data-importers.rst:16 +msgid "While Tabbycat has standard import formats, you might find that none of them fit the data that you need to import." +msgstr "" + +#: ../../features/data-importers.rst:18 +msgid "It's not possible to devise a single, universally-convenient import file format. Tabbycat supports way too many permutations of configurations for this to be workable. Instead, we provide the ones that have been useful before and are therefore likely to be useful again—but if your tournament has different needs, you might decide that it's easier to write an importer to conform to you, rather than conform to the importer." +msgstr "" + +#: ../../features/data-importers.rst:20 +msgid "A base importer class abstracts away most of the nitty-gritty of parsing files, allowing new importers to focus on their interpretation with as little code as possible." +msgstr "" + +#: ../../features/data-importers.rst:22 +msgid "To allow new importers to be written with as little code as possible, most of the work is abstracted to the base class. The flipside of this abstraction is that it induces a learning curve." +msgstr "" + +#: ../../features/data-importers.rst:25 +msgid "Basic workflow" +msgstr "" + +#: ../../features/data-importers.rst:27 +msgid "Choose a name. We name importers after items of clothing in alphabetical order (starting at 'Anorak')." +msgstr "" + +#: ../../features/data-importers.rst:28 +msgid "Write a subclass of ``BaseTournamentDataImporter``." +msgstr "" + +#: ../../features/data-importers.rst:29 +msgid "Write the front-end interface. This will probably be a `Django management command `_." +msgstr "" + +#: ../../features/data-importers.rst:32 +msgid "A basic example" +msgstr "" + +#: ../../features/data-importers.rst:34 +msgid "It's easiest to start with an example. Here's a basic importer with just one import method, which imports adjudicators." +msgstr "" + +#: ../../features/data-importers.rst:60 +msgid "Let's break this down. The method ``import_adjudicators()`` takes a single argument, a file object representing the CSV file. Most of the work is passed off to ``self._import()``. This helper method is defined in ``BaseTournamentDataImporter`` and is where most of the intelligence lies." +msgstr "" + +#: ../../features/data-importers.rst:65 +msgid "When called, ``self._import(f, model, interpreter)`` does the following:" +msgstr "" + +#: ../../features/data-importers.rst:67 +msgid "It reads the CSV file using a `csv.DictReader `_. A ``DictReader`` iterates through the CSV file, yielding a dict for each line, whose keys are given by the column header names in the first row of the file." +msgstr "" + +#: ../../features/data-importers.rst:72 +msgid "On each line:" +msgstr "" + +#: ../../features/data-importers.rst:74 +msgid "It passes the dict given by the ``DictReader`` to ``interpreter``. The interpreter modifies the dict (or creates a new one) to prepare it for the model constructor, and returns it." +msgstr "" + +#: ../../features/data-importers.rst:78 +msgid "The dict returned by ``interpreter`` is then passed as keyword arguments to the ``model`` constructor." +msgstr "" + +#: ../../features/data-importers.rst:81 +msgid "So in very simplified form, ``self._import(f, model, interpreter)`` does this:" +msgstr "" + +#: ../../features/data-importers.rst:92 +msgid "(There's a lot more to it than that, but that's the basic idea.)" +msgstr "" + +#: ../../features/data-importers.rst:94 +msgid "A consequence of relying on column headers to identify fields is that the header names in CSV files must match model field names exactly, unless they are deleted by the interpreter using the ``DELETE`` keyword (see below)." +msgstr "" + +#: ../../features/data-importers.rst:100 +msgid "Interpreters" +msgstr "" + +#: ../../features/data-importers.rst:101 +msgid "The main task of an importer, then, is to provide interpreters so that ``self._import`` knows how to interpret the data in a CSV file. An interpreter takes a dict and returns a dict. For example:" +msgstr "" + +#: ../../features/data-importers.rst:113 +msgid "This interpreter does the following:" +msgstr "" + +#: ../../features/data-importers.rst:115 +msgid "Replaces ``line['institution']`` with an Institution object, by looking up the original value by name." +msgstr "" + +#: ../../features/data-importers.rst:117 +msgid "Replaces ``line['gender']`` with a ``Person.GENDER_*`` constant. We'll come back to how this works later." +msgstr "" + +#: ../../features/data-importers.rst:119 +msgid "Adds a new ``line['tournament']`` entry to the dict, being the Tournament object represented by ``self.tournament``, the tournament that was passed to the importer's constructor." +msgstr "" + +#: ../../features/data-importers.rst:122 +msgid "Leaves all other entries in the dict unchanged." +msgstr "" + +#: ../../features/data-importers.rst:124 +msgid "This looks simple enough, but it's very robust. What if a cell in the CSV file is blank, or what if the file omits a column? (For example, some tournaments might not collect information about participant gender, so Tabbycat doesn't require it.) We could deal with these scenarios on a case-by-case basis, but that's cumbersome." +msgstr "" + +#: ../../features/data-importers.rst:130 +msgid "Instead, we provide a ``make_interpreter`` method that returns an interpreter method which, in turn, takes care of all these details. This way, all you have to do is provide the functions that transform fields. So the following is equivalent to the above, but better:" +msgstr "" + +#: ../../features/data-importers.rst:143 +msgid "Notice that we provided a callable in two of these keyword arguments, and a (non-callable) Tournament object to the third. ``make_interpreter`` is smart enough to tell the difference, and treat them differently. What it does with each field depends on (a) whether a value exists in the CSV file and (b) what transformation function was provided, as summarised in the following table:" +msgstr "" + +#: ../../features/data-importers.rst:150 +msgid "Value in CSV file" +msgstr "" + +#: ../../features/data-importers.rst:150 +msgid "Transformation" +msgstr "" + +#: ../../features/data-importers.rst:150 +msgid "Action" +msgstr "" + +#: ../../features/data-importers.rst:152 +msgid "provided and not callable" +msgstr "" + +#: ../../features/data-importers.rst:152 +msgid "populate model field with interpreter value" +msgstr "" + +#: ../../features/data-importers.rst:155 +msgid "does not exist or blank" +msgstr "" + +#: ../../features/data-importers.rst:155 +msgid "callable or not provided" +msgstr "" + +#: ../../features/data-importers.rst:155 +msgid "do not pass to model constructor" +msgstr "" + +#: ../../features/data-importers.rst:158 ../../features/data-importers.rst:161 +msgid "exists and not blank" +msgstr "" + +#: ../../features/data-importers.rst:158 +msgid "callable" +msgstr "" + +#: ../../features/data-importers.rst:158 +msgid "call interpreter on column value, pass result to model constructor" +msgstr "" + +#: ../../features/data-importers.rst:161 +msgid "not provided" +msgstr "" + +#: ../../features/data-importers.rst:161 +msgid "pass column value directly to model constructor" +msgstr "" + +#: ../../features/data-importers.rst:169 +msgid "If a transformation isn't an existing method, you might find `lambda functions `_ useful. For example: ``lambda x: Speaker.objects.get(name=x)``." +msgstr "" + +#: ../../features/data-importers.rst:173 +msgid "You shouldn't check for mandatory fields. If a mandatory field is omitted, the model constructor will throw an error, and ``self._import()`` will catch the error and pass a useful message on to the caller. On the other hand, if it's an optional field in the model, it should optional in the importer, too. Similarly, interpreters generally shouldn't specify defaults; these should be left to model definitions." +msgstr "" + +#: ../../features/data-importers.rst:180 +msgid "You don't need to include interpreter transformations for things like converting strings to integers, floats or booleans. Django converts strings to appropriate values when it instantiates models. So, for example, adding ``test_score=float`` to the above interpreter would be redundant." +msgstr "" + +#: ../../features/data-importers.rst:186 +msgid "More complicated interpreters" +msgstr "" + +#: ../../features/data-importers.rst:188 +msgid "If you have a column in the CSV file that shouldn't be passed to the model constructor, you can tell the interpreter to remove it by using the special ``DELETE`` argument:" +msgstr "" + +#: ../../features/data-importers.rst:199 +msgid "The ``make_interpreter`` can only deal with modifications where each field is modified separately of the others (or not at all). If you want to combine information from multiple fields, you need to write your interpreter the long way (perhaps calling a function returned by ``make_interpreter`` to do some of the work)." +msgstr "" + +#: ../../features/data-importers.rst:205 +msgid "On the other hand, if you don't need to do any transformations involving some sort of object or constant lookup, then you can just omit the ``interpreter`` argument of ``self._lookup()``, and it'll just leave the fields as-is." +msgstr "" + +#: ../../features/data-importers.rst:210 +msgid "Lookup functions" +msgstr "" + +#: ../../features/data-importers.rst:211 +msgid "In the above example, we used a function ``self.lookup_gender`` to convert from the text in the CSV file to a ``Person.GENDER_*`` constant. To make this easier, the importer provides a convenience function to define such lookup functions. Let's look at the relevant lines again:" +msgstr "" + +#: ../../features/data-importers.rst:224 +msgid "This should be a member of your subclass, in our case, ``ExampleTournamentDataImporter``. It generates a function that looks something like:" +msgstr "" + +#: ../../features/data-importers.rst:241 +msgid "The ``make_lookup`` function takes two arguments. The first is a text description of what it's looking up; this is used for the error message if the value in the CSV file isn't recognised. The second is a dict mapping tuples of valid strings to constants." +msgstr "" + +#: ../../features/data-importers.rst:247 +msgid "Debugging output" +msgstr "" + +#: ../../features/data-importers.rst:249 +msgid "The ``BaseTournamentDataImporter`` constructor accepts a ``loglevel`` argument:" +msgstr "" + +#: ../../features/data-importers.rst:255 +msgid "If ``loglevel`` is set to ``logging.DEBUG``, the importer will print information about every instance it creates." +msgstr "" + +#: ../../features/data-importers.rst:258 +msgid "You can also pass in a logger for it to use (instead of the default one) with the ``logger`` argument." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/features/draw-generation-bp.po b/docs/locale/ca/LC_MESSAGES/features/draw-generation-bp.po new file mode 100644 index 00000000000..516242b246c --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/features/draw-generation-bp.po @@ -0,0 +1,598 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-07-02 00:46\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation-bp.po\n" +"X-Crowdin-File-ID: 1285\n" +"Language: ca_ES\n" + +#: ../../features/draw-generation-bp.rst:5 +msgid "Draw Generation (BP)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:7 +msgid "The draw generator for British Parliamentary tournaments tries to rotate teams through positions by assigning them positions they've been in less often before the current round." +msgstr "" + +#: ../../features/draw-generation-bp.rst:10 +msgid "Summary of options" +msgstr "" + +#: ../../features/draw-generation-bp.rst:12 +msgid "Options are set in the **Configuration** page as described in :ref:`starting a tournament `. Options in `italics` with an asterisk are not WUDC-compliant. The recommended options are shown in **bold**." +msgstr "" + +#: ../../features/draw-generation-bp.rst:19 +msgid "Option" +msgstr "" + +#: ../../features/draw-generation-bp.rst:20 +msgid "Description" +msgstr "" + +#: ../../features/draw-generation-bp.rst:21 +msgid "Allowable values" +msgstr "" + +#: ../../features/draw-generation-bp.rst:22 +msgid ":ref:`Pullup distribution `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:23 +msgid "Where pullup teams get placed" +msgstr "" + +#: ../../features/draw-generation-bp.rst:24 +msgid "**Anywhere in bracket**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:25 +msgid "*All in the same room*\\*" +msgstr "" + +#: ../../features/draw-generation-bp.rst:26 +msgid ":ref:`Position cost `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:27 +msgid "Which cost function to use to indicate which position profiles are preferred" +msgstr "" + +#: ../../features/draw-generation-bp.rst:28 +#: ../../features/draw-generation-bp.rst:179 +msgid "Simple" +msgstr "" + +#: ../../features/draw-generation-bp.rst:29 +msgid "**Rényi entropy**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:30 +#: ../../features/draw-generation-bp.rst:254 +msgid "Population variance" +msgstr "" + +#: ../../features/draw-generation-bp.rst:31 +msgid ":ref:`Rényi order `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:32 +msgid "Order of Rényi entropy" +msgstr "" + +#: ../../features/draw-generation-bp.rst:33 +msgid "Any non-negative number (default: **1**, *i.e.* Shannon entropy)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:34 +msgid ":ref:`Position cost exponent `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:35 +msgid "Degree to which large position imbalances should be prioritised" +msgstr "" + +#: ../../features/draw-generation-bp.rst:36 +msgid "Any non-negative number (default: **4**)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:37 +msgid ":ref:`Assignment method `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:38 +msgid "Algorithm used to assign positions" +msgstr "" + +#: ../../features/draw-generation-bp.rst:39 +msgid "*Hungarian*\\*" +msgstr "" + +#: ../../features/draw-generation-bp.rst:40 +msgid "**Hungarian with preshuffling**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:45 +msgid "The big picture" +msgstr "" + +#: ../../features/draw-generation-bp.rst:47 +msgid "To try to achieve position balance, Tabbycat treats the allocation of teams to debates as an `assignment problem `_. That is, it computes the \"cost\" of assigning each team to each position in each debate, and finds an assignment of all teams to a position in a debate that minimises the total cost (the sum over all teams)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:50 +msgid "A simple example" +msgstr "" + +#: ../../features/draw-generation-bp.rst:52 +msgid "Here's a small example, to illustrate the idea. Say you have a tournament with 16 teams, and you're about to draw round 4. There are sixteen \"places\" in the draw: four positions in each of four rooms. Tabbycat calculates the \"cost\" of putting each team in each place, and puts them in a matrix, like this:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Room" +msgstr "Sala" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Top" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Second" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Third" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Bottom" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "Position" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "OG" +msgstr "AG" + +#: ../../features/draw-generation-bp.rst:63 +msgid "OO" +msgstr "AO" + +#: ../../features/draw-generation-bp.rst:63 +msgid "CG" +msgstr "BG" + +#: ../../features/draw-generation-bp.rst:63 +msgid "CO" +msgstr "BO" + +#: ../../features/draw-generation-bp.rst:65 +msgid "**A (8)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +#: ../../features/draw-generation-bp.rst:67 +#: ../../features/draw-generation-bp.rst:69 +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:77 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:81 +#: ../../features/draw-generation-bp.rst:83 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:93 +#: ../../features/draw-generation-bp.rst:95 +msgid "16" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +#: ../../features/draw-generation-bp.rst:67 +#: ../../features/draw-generation-bp.rst:69 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:77 +#: ../../features/draw-generation-bp.rst:81 +#: ../../features/draw-generation-bp.rst:83 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:93 +msgid ":q:`0`" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +#: ../../features/draw-generation-bp.rst:67 +#: ../../features/draw-generation-bp.rst:69 +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:77 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:81 +#: ../../features/draw-generation-bp.rst:83 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:93 +#: ../../features/draw-generation-bp.rst:95 +msgid "∞" +msgstr "" + +#: ../../features/draw-generation-bp.rst:67 +msgid "**B (7)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:69 +msgid "**C (7)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:71 +msgid "**D (6)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:95 +msgid "0" +msgstr "" + +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:95 +msgid ":q:`16`" +msgstr "" + +#: ../../features/draw-generation-bp.rst:73 +msgid "**E (6)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:75 +msgid "**F (6)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:77 +msgid "**G (5)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:79 +msgid "**H (5)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:81 +msgid "**I (4)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:83 +msgid "**J (4)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:85 +msgid "**K (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:87 +msgid "**L (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:89 +msgid "**M (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:91 +msgid "**N (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:93 +msgid "**O (1)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:95 +msgid "**P (1)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:98 +msgid "Each \"16\" is the cost of putting a team in a position it's seen once; each \"0\" is the cost of putting a team in the position it hasn't. (Details of how this is calculated are :ref:`below `.) For example, team A (on 8 points) has been in every position except CO. The ∞'s indicate places where the team isn't allowed to go, because the room isn't in their bracket. For example, the three teams on 6 points (D, E, F) can go in either the top or second room, because any of them can be the pullup team." +msgstr "" + +#: ../../features/draw-generation-bp.rst:100 +msgid "The algorithm then chooses entries so that one is selected from each row and one is selected from each column, in a way that minimises the sum of the selected entries. In this case, the selected entries are highlighted in blue. For example, the top room comprises teams E (OG), B (OO), C (CG) and A (CO)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:102 +msgid "Sometimes, particularly in round 4, it simply isn't possible to \"satisfy\" everyone. For example, among the top eight teams, five haven't been in OO, but only two can be accommodated within those brackets. In this case, teams B and G got lucky; there are also many other draws that would have incurred the same total cost." +msgstr "" + +#: ../../features/draw-generation-bp.rst:104 +msgid "More generally, in most cases, there will be many optimal solutions. To randomise the selection among them, Tabbycat (under default settings) randomly permutes the rows and columns of the matrix before starting the assignment algorithm." +msgstr "" + +#: ../../features/draw-generation-bp.rst:107 +msgid "Explanations of options" +msgstr "" + +#: ../../features/draw-generation-bp.rst:112 +msgid "Pullup distribution" +msgstr "" + +#: ../../features/draw-generation-bp.rst:114 +msgid "If the number of teams in a bracket is not a multiple of four, it pulls up teams from the next bracket down. The pullup distribution then governs how those teams are paired into the upper bracket." +msgstr "" + +#: ../../features/draw-generation-bp.rst:116 +msgid "The available options are as follows:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:120 +msgid "**Anywhere in bracket:** The pullup teams are treated as if they were any other team in their new bracket. For example, if there are 17 teams in a 10-point bracket, then the three 9-point teams that get pulled up may be paired anywhere in the 10-point bracket, independently of each other. Chance might put them in the same room, but more likely, they will not all be in the same room, so there will be multiple pullup rooms in the 10-point bracket." +msgstr "" + +#: ../../features/draw-generation-bp.rst:122 +msgid "**All in the same room:** All of the pullup teams will be paired into the same room. This means that there will be at most one pullup room per bracket, effectively creating an \"intermediate bracket\"." +msgstr "" + +#: ../../features/draw-generation-bp.rst:124 +msgid "While it can be argued that the `All in the same room` setting is fairer, it is prohibited by the WUDC constitution. If your tournament follows WUDC rules, you cannot use this setting." +msgstr "" + +#: ../../features/draw-generation-bp.rst:126 +msgid "The teams that get pulled up aren't specifically chosen---they're just assigned as part of the algorithm described :ref:`above `, which optimises for position balance. Tabbycat doesn't support taking anything else into account when choosing pullup teams. (WUDC rules wouldn't allow it, either.)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:131 +msgid "Position cost options" +msgstr "" + +#: ../../features/draw-generation-bp.rst:133 +msgid "The `position cost function` is a function that indicates how \"bad\" it would be if a team were to be allocated a certain position (OG, OO, CG, CO) in a debate. When generating a draw, Tabbycat chooses from among the draws that minimise the sum of the position costs for each team." +msgstr "" + +#: ../../features/draw-generation-bp.rst:135 +msgid "More formally:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:139 +msgid "A `position history` or just `history` :math:`\\mathbf{h}` is a 4-tuple where each element is the number of times a team has already been in the corresponding position. For example, :math:`\\mathbf{h} = (0, 2, 1, 1)` means that a team has been in OO twice, CG and CO once each, and hasn't been in OG." +msgstr "" + +#: ../../features/draw-generation-bp.rst:140 +msgid "A cost function :math:`C(\\mathbf{h},s)` is a function specifying how \"bad\" it would be if a team with position history :math:`\\mathbf{h}` were assigned the position :math:`s` in the next round." +msgstr "" + +#: ../../features/draw-generation-bp.rst:142 +msgid "Tabbycat allows you to choose from a number of different **position cost functions**, as well as a **position cost exponent** :math:`\\beta`. Then, when allocating teams to debates, Tabbycat allocates teams to positions :math:`(s_t, t \\in\\mathcal{T})` to minimise" +msgstr "" + +#: ../../features/draw-generation-bp.rst:144 +msgid "\\sum_{t \\in \\mathcal{T}} [C(\\mathbf{h}_t,s_t)]^\\beta" +msgstr "" + +#: ../../features/draw-generation-bp.rst:148 +msgid "where :math:`\\mathcal{T}` is the set of all teams, :math:`\\mathbf{h}_t` is the position history of team :math:`t` and :math:`s_t` is the position to which team :math:`t` would be allocated." +msgstr "" + +#: ../../features/draw-generation-bp.rst:153 +msgid "Position cost exponent" +msgstr "" + +#: ../../features/draw-generation-bp.rst:155 +msgid "The **position cost exponent** :math:`\\beta` controls how different teams trade off with each other." +msgstr "" + +#: ../../features/draw-generation-bp.rst:159 +msgid "The **larger** :math:`\\beta` is, the more concerned it is with preventing *very* bad situations. That is, it will give more teams some slight unevenness in order to prevent one team from getting a `very` uneven history." +msgstr "" + +#: ../../features/draw-generation-bp.rst:161 +msgid "The **smaller** :math:`\\beta` is, the more concerned it is with preventing *any* unevenness. That is, it will try to keep more teams from being uneven *at all*, at the cost of possibly letting just one team get a very uneven history." +msgstr "" + +#: ../../features/draw-generation-bp.rst:163 +msgid "At the large extreme, as :math:`\\beta\\rightarrow\\infty`, it will do everything it can to minimise the plight of the *worst-off* team, and it won't care for *any* team other than the worst-off." +msgstr "" + +#: ../../features/draw-generation-bp.rst:165 +msgid "At the small extreme, as :math:`\\beta\\rightarrow 0`, it will do everything it can to minimise the number of teams with a non-optimal profile---but if it's impossible to protect a team from sub-optimality, it won't care *how* uneven the unlucky team gets." +msgstr "" + +#: ../../features/draw-generation-bp.rst:167 +msgid "The \"balanced\" approach would be :math:`\\beta = 1`, which just takes the cost function as-is. This doesn't mean that this is the best idea, however---you'd typically want to bias towards preventing very uneven histories a bit more. Most tournaments will probably want :math:`\\beta` to be somewhere between 2 and 5. (Note that :math:`\\beta` need not be an integer.)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:172 +msgid "Position cost functions" +msgstr "" + +#: ../../features/draw-generation-bp.rst:174 +msgid "Tabbycat allows you to choose between three position cost functions :math:`C(\\mathbf{h},s)`: **Simple**, **Rényi entropy** and **Population variance**." +msgstr "" + +#: ../../features/draw-generation-bp.rst:176 +msgid "In the descriptions that follow, :math:`\\mathcal{S} = \\{\\texttt{OG}, \\texttt{OO}, \\texttt{CG}, \\texttt{CO}\\}`, the set of all BP positions." +msgstr "" + +#: ../../features/draw-generation-bp.rst:181 +msgid "The simple cost function :math:`C_\\textrm{simple}(\\mathbf{h},s)` returns the number of times the team has already been in position :math:`s`, less the number of times the team has been in its least frequent position. That is," +msgstr "" + +#: ../../features/draw-generation-bp.rst:183 +msgid "C_\\mathrm{simple}(\\mathbf{h},s) = \\mathbf{h}[s] - \\min_{s' \\in\\mathcal{S}} \\mathbf{h}[s']" +msgstr "" + +#: ../../features/draw-generation-bp.rst:187 +msgid "where :math:`\\mathbf{h}[s]` is the element of :math:`\\mathbf{h}` corresponding to position :math:`s`." +msgstr "" + +#: ../../features/draw-generation-bp.rst:190 +msgid "Rényi entropy" +msgstr "" + +#: ../../features/draw-generation-bp.rst:192 +msgid "Informally speaking, the `Rényi entropy `_ is a measure of the diversity of the positions in a team's history. A history consisting only of one position has *low* entropy, while a history that is perfectly evenly distributed has *high* entropy. The **Rényi entropy cost function** reverses this intuition, so that an even hypothetical history has low cost, while an uneven hypothetical history has high cost." +msgstr "" + +#: ../../features/draw-generation-bp.rst:194 +msgid "The Rényi entropy takes one parameter, known as its *order*, :math:`\\alpha`, which will be further discussed below." +msgstr "" + +#: ../../features/draw-generation-bp.rst:196 +msgid "More formally, the Rényi entropy cost function :math:`C_\\textrm{R\\'enyi}(\\mathbf{h},s)` is defined as" +msgstr "" + +#: ../../features/draw-generation-bp.rst:198 +msgid "C_\\textrm{R\\'enyi}(\\mathbf{h},s) = n_\\mathbf{h} [2 - H_\\alpha(\\hat{p}_{\\mathbf{h},s})]" +msgstr "" + +#: ../../features/draw-generation-bp.rst:202 +msgid "where" +msgstr "" + +#: ../../features/draw-generation-bp.rst:206 +msgid ":math:`n_\\mathbf{h} = \\sum_{s'} \\mathbf{h}[s']` is the number of rounds the team has competed in so far." +msgstr "" + +#: ../../features/draw-generation-bp.rst:207 +msgid ":math:`\\hat{p}_{\\mathbf{h},s}` is the *normalised hypothetical* position history that would arise if a team with history :math:`\\mathbf{h}` were to be allocated position :math:`s` in the next round; that is," +msgstr "" + +#: ../../features/draw-generation-bp.rst:209 +msgid "\\hat{p}_{\\mathbf{h},s}[s'] = \\begin{cases} \\frac{1}{n_\\mathbf{h} + 1} (\\mathbf{h}[s'] + 1), &\\text{ if } s = s', \\\\ \\frac{1}{n_\\mathbf{h} + 1} \\mathbf{h}[s'], &\\text{ if } s \\ne s'. \\end{cases}" +msgstr "" + +#: ../../features/draw-generation-bp.rst:216 +msgid "Note that :math:`\\hat{p}_{\\mathbf{h},s}` is a probability distribution (that is, its elements sum to 1)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:218 +msgid ":math:`H_\\alpha(\\cdot)` is the `Rényi entropy `_ of order :math:`\\alpha` of a probability distribution, defined as" +msgstr "" + +#: ../../features/draw-generation-bp.rst:220 +msgid "H_\\alpha(p) = \\frac{1}{1-\\alpha} \\log_2 \\left( \\sum_{s\\in\\mathcal{S}} (p[s])^\\alpha \\right), \\qquad \\alpha \\ne 1." +msgstr "" + +#: ../../features/draw-generation-bp.rst:224 +msgid "In the special (limiting) case where :math:`\\alpha=1`, it reduces to the `Shannon entropy `_," +msgstr "" + +#: ../../features/draw-generation-bp.rst:226 +msgid "H_1(p) =-\\sum_{s\\in\\mathcal{S}} p[s] \\log_2 p[s]." +msgstr "" + +#: ../../features/draw-generation-bp.rst:230 +msgid "Note that for all :math:`\\alpha`, :math:`0 \\le H_\\alpha(p) \\le \\log_2(4) = 2` (since there are four positions in BP)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:234 +msgid "The **Rényi order** is the parameter :math:`\\alpha` above, and it controls *what it means to be \"even among positions\"* for a team. Note that \"evenness\" is not easily defined. After round 8, which position history is more even: (0, 2, 3, 3) or (1, 1, 1, 5)? The Rényi order allows us to tune this definition." +msgstr "" + +#: ../../features/draw-generation-bp.rst:238 +msgid "The **smaller** :math:`\\alpha` is, the more it cares that teams compete in every position *at least* once, favouring (1, 1, 1, 5) over (0, 2, 3, 3): it's worse to have never OGed, than it is to have COed five times." +msgstr "" + +#: ../../features/draw-generation-bp.rst:240 +msgid "The **larger** :math:`\\alpha` is, the more it cares that teams do not compete in *any* (one) position too many times, favouring (0, 2, 3, 3) over (1, 1, 1, 5): it's worse to have COed five times, than it is to have never OGed." +msgstr "" + +#: ../../features/draw-generation-bp.rst:242 +msgid "At the small extreme, as :math:`\\alpha\\rightarrow0`, it *only* counts how many positions a team has seen at least once, and doesn't care about the distribution among them so long as a team has been in each position once." +msgstr "" + +#: ../../features/draw-generation-bp.rst:244 +msgid "At the large extreme, as :math:`\\alpha\\rightarrow\\infty`, it *only* looks at how many times each team has seen its *most frequent* position, and tries to keep this number even among all teams." +msgstr "" + +#: ../../features/draw-generation-bp.rst:246 +msgid "The \"balanced\" approach would be :math:`\\alpha=1` (the `Shannon entropy `_), though of course it's arguable what \"balanced\" means. Tabbycat defaults to this value." +msgstr "" + +#: ../../features/draw-generation-bp.rst:248 +msgid "To give some intuition for the useful range: In round 9, a strict ordering by number of positions seen at least once occurs for approximately :math:`\\alpha < 0.742`. A strict ordering by number of times in the most frequent position occurs for :math:`\\alpha>3`. Changing :math:`\\alpha` outside the range :math:`[0.742, 3]` will still affect the relative (cardinal) weighting *between teams*, but will not affect the *ordinal* ranking of possible histories." +msgstr "" + +#: ../../features/draw-generation-bp.rst:250 +msgid "The purpose of weighting costs by :math:`n_\\mathbf{h}` is to prioritise those teams who have competed in every round over those who have competed in fewer rounds." +msgstr "" + +#: ../../features/draw-generation-bp.rst:256 +msgid "The **population variance** cost function is just the population variance of the history 4-tuple," +msgstr "" + +#: ../../features/draw-generation-bp.rst:258 +msgid "C_\\textrm{popvar}(\\mathbf{h},s) = \\frac14 \\sum_{s'\\in\\mathcal{S}} \\left(\\mathbf{\\hat{h}}_s[s'] - \\mu_{\\mathbf{\\hat{h}}_s} \\right)^2," +msgstr "" + +#: ../../features/draw-generation-bp.rst:262 +msgid "where :math:`\\mathbf{\\hat{h}}_s` is the *hypothetical* position history that would arise if a team with history :math:`\\mathbf{h}` were to be allocated position :math:`s` in the next round; that is," +msgstr "" + +#: ../../features/draw-generation-bp.rst:264 +msgid "\\mathbf{\\hat{h}}_s[s'] = \\begin{cases} \\mathbf{h}[s'] + 1, &\\text{ if } s = s', \\\\ \\mathbf{h}[s'], &\\text{ if } s \\ne s'. \\end{cases}" +msgstr "" + +#: ../../features/draw-generation-bp.rst:271 +msgid "and where :math:`\\mu_{\\mathbf{\\hat{h}}_s}` is the mean of :math:`\\mathbf{\\hat{h}}_s`," +msgstr "" + +#: ../../features/draw-generation-bp.rst:273 +msgid "\\mu_{\\mathbf{\\hat{h}}_s} = \\frac14 \\sum_{s'\\in\\mathcal{S}} \\mathbf{\\hat{h}}_s[s']." +msgstr "" + +#: ../../features/draw-generation-bp.rst:277 +msgid "At the extremes, a team that has seen all positions evenly will have a population variance of zero, while a team that has seen just one position :math:`n` times will have a population variance of :math:`\\frac{3n^2}{16}`." +msgstr "" + +#: ../../features/draw-generation-bp.rst:282 +msgid "Assignment method" +msgstr "" + +#: ../../features/draw-generation-bp.rst:284 +msgid "Tabbycat uses the `Hungarian algorithm `_ to solve the `assignment problem `_ of assigning teams to positions in debates. This can be run with or without preshuffling:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:288 +msgid "**Hungarian algorithm** just runs the Hungarian algorithm as-is, with no randomness. This probably isn't what you want." +msgstr "" + +#: ../../features/draw-generation-bp.rst:290 +msgid "**Hungarian algorithm with preshuffling** also runs the Hungarian algorithm on the position cost matrix, but shuffles the input so that the draw is randomised, subject to having optimal position allocations." +msgstr "" + +#: ../../features/draw-generation-bp.rst:292 +msgid "Preshuffling doesn't compromise the optimality of position allocations: It simply shuffles the order in which teams and debates appear in the input to the algorithm, by randomly permuting the rows and columns of the position cost matrix. The Hungarian algorithm still guarantees an optimal position assignment, according to the chosen position cost function." +msgstr "" + +#: ../../features/draw-generation-bp.rst:294 +msgid "Running the Hungarian algorithm *without* preshuffling has the side effect of grouping teams with similar speaker scores in to the same room, and is therefore prohibited by WUDC rules. Its inclusion as an option is mainly academic; most tournaments will not want to use it in practice." +msgstr "" + +#: ../../features/draw-generation-bp.rst:296 +msgid "No other assignment methods are currently supported. For example, Tabbycat can't run fold (high-low) or adjacent (high-high) pairing *within* brackets." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/features/draw-generation.po b/docs/locale/ca/LC_MESSAGES/features/draw-generation.po new file mode 100644 index 00000000000..3fbd57d3d67 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/features/draw-generation.po @@ -0,0 +1,436 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:08\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation.po\n" +"X-Crowdin-File-ID: 1287\n" +"Language: ca_ES\n" + +#: ../../features/draw-generation.rst:5 +msgid "Draw Generation" +msgstr "" + +#: ../../features/draw-generation.rst:7 +msgid "The draw generator is quite flexible. You can specify a number of settings to suit different tournaments' rules." +msgstr "" + +#: ../../features/draw-generation.rst:10 +msgid "Summary of options" +msgstr "" + +#: ../../features/draw-generation.rst:11 +msgid "Options are set in the **Configuration** page as described in :ref:`starting a tournament `." +msgstr "" + +#: ../../features/draw-generation.rst:18 +msgid "Option" +msgstr "" + +#: ../../features/draw-generation.rst:19 +msgid "Description" +msgstr "" + +#: ../../features/draw-generation.rst:20 +msgid "Allowable values" +msgstr "" + +#: ../../features/draw-generation.rst:22 +msgid ":ref:`Odd bracket resolution method `" +msgstr "" + +#: ../../features/draw-generation.rst:23 +msgid "How to resolve odd brackets" +msgstr "" + +#: ../../features/draw-generation.rst:24 +msgid "Pull up from top" +msgstr "" + +#: ../../features/draw-generation.rst:25 +msgid "Pull up from bottom" +msgstr "" + +#: ../../features/draw-generation.rst:26 +msgid "Pull up from middle" +msgstr "" + +#: ../../features/draw-generation.rst:27 +msgid "Pull up at random" +msgstr "" + +#: ../../features/draw-generation.rst:29 +msgid "If sides are `Random` or `Balance`:" +msgstr "" + +#: ../../features/draw-generation.rst:31 +msgid "Intermediate" +msgstr "" + +#: ../../features/draw-generation.rst:32 +msgid "Intermediate with bubble-up-bubble-down" +msgstr "" + +#: ../../features/draw-generation.rst:34 +msgid "If sides are `Pre-allocated`:" +msgstr "" + +#: ../../features/draw-generation.rst:36 +msgid "Intermediate 1" +msgstr "" + +#: ../../features/draw-generation.rst:37 +msgid "Intermediate 2" +msgstr "" + +#: ../../features/draw-generation.rst:39 +msgid ":ref:`Side allocations method `" +msgstr "" + +#: ../../features/draw-generation.rst:40 +msgid "How to allocate aff/neg" +msgstr "" + +#: ../../features/draw-generation.rst:41 ../../features/draw-generation.rst:51 +msgid "Random" +msgstr "" + +#: ../../features/draw-generation.rst:42 +msgid "Balance" +msgstr "" + +#: ../../features/draw-generation.rst:43 +msgid "Pre-allocated" +msgstr "" + +#: ../../features/draw-generation.rst:44 +msgid "Manual ballot" +msgstr "" + +#: ../../features/draw-generation.rst:46 +msgid ":ref:`Pairing method `" +msgstr "" + +#: ../../features/draw-generation.rst:47 +msgid "How to pair teams within brackets" +msgstr "" + +#: ../../features/draw-generation.rst:48 +msgid "Slide" +msgstr "" + +#: ../../features/draw-generation.rst:49 +msgid "Fold" +msgstr "" + +#: ../../features/draw-generation.rst:50 +msgid "Adjacent" +msgstr "" + +#: ../../features/draw-generation.rst:53 +msgid ":ref:`Conflict avoidance method `" +msgstr "" + +#: ../../features/draw-generation.rst:54 +msgid "How to avoid history/institution conflicts" +msgstr "" + +#: ../../features/draw-generation.rst:55 +msgid "Off" +msgstr "" + +#: ../../features/draw-generation.rst:56 +msgid "One-up-one-down" +msgstr "" + +#: ../../features/draw-generation.rst:58 +msgid ":ref:`Pullup restriction `" +msgstr "" + +#: ../../features/draw-generation.rst:59 +msgid "Whether and how to restrict pullups" +msgstr "" + +#: ../../features/draw-generation.rst:60 +msgid "No restriction" +msgstr "" + +#: ../../features/draw-generation.rst:61 +msgid "Choose from teams who have been pulled up the fewest times so far" +msgstr "" + +#: ../../features/draw-generation.rst:62 +msgid "Choose from teams with the lowest draw strength by speaks so far" +msgstr "" + +#: ../../features/draw-generation.rst:64 +msgid "The valid options for intermediate brackets change depending on whether sides are pre-allocated, but these are **not** checked for validity. If you choose an invalid combination, Tabbycat will just crash. This won't corrupt the database, but it might be momentarily annoying." +msgstr "" + +#: ../../features/draw-generation.rst:67 +msgid "The big picture" +msgstr "" + +#: ../../features/draw-generation.rst:68 +msgid "When generating a power-paired draw, Tabbycat goes through five steps:" +msgstr "" + +#: ../../features/draw-generation.rst:70 +msgid "First, it divides teams into \"raw brackets\", grouping them by the number of wins." +msgstr "" + +#: ../../features/draw-generation.rst:71 +msgid "Second, it resolves odd brackets, applying the odd brackets rule to make sure there is an even number of teams in each bracket. This is often called \"pulling up\" teams." +msgstr "" + +#: ../../features/draw-generation.rst:72 +msgid "Third, within each bracket, it pairs teams into debates using the pairing method." +msgstr "" + +#: ../../features/draw-generation.rst:73 +msgid "Fourth, if enabled, it adjusts pairings to avoid history or institution conflicts." +msgstr "" + +#: ../../features/draw-generation.rst:74 +msgid "Finally, it assigns sides to teams in each debate." +msgstr "" + +#: ../../features/draw-generation.rst:76 +msgid "For each of these steps except the first, Tabbycat allows you to choose between a number of different methods." +msgstr "" + +#: ../../features/draw-generation.rst:80 +msgid "Explanations of options" +msgstr "" + +#: ../../features/draw-generation.rst:85 +msgid "Odd bracket resolution" +msgstr "" + +#: ../../features/draw-generation.rst:86 +msgid "The **draw odd brackets** option specifies what you do when a bracket has an odd number of teams. (Obviously you have to do something, otherwise you can't pair off teams within the bracket.) There are two groups of methods: pull-up and intermediate brackets." +msgstr "" + +#: ../../features/draw-generation.rst:90 +msgid "**Pull-up methods** take one or more teams from the next bracket down, and move them into the odd bracket to fill the bracket." +msgstr "" + +#: ../../features/draw-generation.rst:92 +msgid "**Intermediate brackets** take the excess teams from the odd bracket and move them down into a new bracket, which sits between the odd bracket and the next one down (the \"intermediate bracket\"). It then takes teams from the next bracket down and moves them up to fill the new intermediate bracket." +msgstr "" + +#: ../../features/draw-generation.rst:94 +msgid "The exact mechanics depend on whether or not sides are pre-allocated." +msgstr "" + +#: ../../features/draw-generation.rst:97 +msgid "When sides are not pre-allocated" +msgstr "" + +#: ../../features/draw-generation.rst:101 +msgid "**Pull-up methods:** Take a team from the next bracket down, and add them to the odd bracket to form an even bracket. You can choose to pull up the top team from the next bracket, or the bottom team, or the middle team, or a randomly chosen team. (If you pull up the middle team, and the bracket has an even number of teams, then it will choose randomly from the two middle teams.)" +msgstr "" + +#: ../../features/draw-generation.rst:103 +msgid "**Intermediate brackets:** Take the bottom team from the odd bracket and match them against the top team from the next bracket. An intermediate bracket always has two teams." +msgstr "" + +#: ../../features/draw-generation.rst:105 +msgid "If you're using conflict avoidance and intermediate brackets, you will probably want to use **Intermediate with bubble-up-bubble-down** instead. This uses the \"bubble-up-bubble-down\" rule to swap teams out of an intermediate bracket if there is a history or institution conflict. This is defined in the Australs constitution and is analogous to the \"one-up-one-down\" rule." +msgstr "" + +#: ../../features/draw-generation.rst:107 +msgid "Using `Intermediate` with `One-up-one-down` does **not** imply `Intermediate with bubble-up-bubble-down`. You must enable `Intermediate with bubble-up-bubble-down` specifically." +msgstr "" + +#: ../../features/draw-generation.rst:110 +msgid "When sides are pre-allocated" +msgstr "" + +#: ../../features/draw-generation.rst:111 +msgid "When sides are pre-allocated, an \"odd bracket\" is one that has an uneven number of affirmative and negative teams. (So odd brackets can have an even number of teams, *e.g.* 4 affs and 2 negs.)" +msgstr "" + +#: ../../features/draw-generation.rst:115 +msgid "**Pull-up methods:** Take as many teams from the next bracket down as necessary to fill the bracket. If there aren't enough teams in the next bracket down, take teams from the bracket after that, and so on, until the (original) odd bracket is filled. Higher brackets are always filled first. You can choose to pull up the top teams from the next bracket, the bottom teams, or a random selection of teams." +msgstr "" + +#: ../../features/draw-generation.rst:117 +msgid "**Intermediate brackets:** Take the unpaired teams in a bracket, and move them down to a new intermediate bracket. Then, take the number of teams necessary from the opposite side, from the next bracket down, to fill the next bracket." +msgstr "" + +#: ../../features/draw-generation.rst:119 +msgid "**Intermediate 1** and **Intermediate 2** differ only in what happens if there aren't enough teams in the next bracket to fill the intermediate bracket. In **Intermediate 1**, it will just take teams from the bracket after that, and so on, until the intermediate bracket is filled. In **Intermediate 2**, it will split the intermediate bracket: the teams that can be paired with the next bracket form the first intermediate bracket, and then the teams that aren't form a new (unfilled) intermediate bracket, to be filled from teams from the bracket after that. This keeps going, splitting into as many intermediate brackets as necessary, until all excess teams from the original odd bracket are paired." +msgstr "" + +#: ../../features/draw-generation.rst:124 +msgid "Side allocations" +msgstr "" + +#: ../../features/draw-generation.rst:125 +msgid "There are four methods:" +msgstr "" + +#: ../../features/draw-generation.rst:129 +msgid "**Random** allocates randomly. Some tournaments might like this, but most will probably want to use Balance, because Random doesn't guarantee that a team won't be (say) affirming the entire tournament." +msgstr "" + +#: ../../features/draw-generation.rst:130 +msgid "**Balance** assigns the team that has affirmed less so far the affirmative side (and, therefore, the team that has negated less the negative side). If both teams have affirmed the same number of times, it assigns sides randomly." +msgstr "" + +#: ../../features/draw-generation.rst:131 +msgid "**Preallocated** is used for pre-allocated sides. If used, you must enter data for pre-allocated sides into the database, as specified below." +msgstr "" + +#: ../../features/draw-generation.rst:132 +msgid "**Manually enter from ballot** is used for tournaments where the sides of the teams involved are not assigned in advance, but are instead determined by the teams themselves" +msgstr "" + +#: ../../features/draw-generation.rst:135 +msgid "Pre-allocated sides" +msgstr "" + +#: ../../features/draw-generation.rst:136 +msgid "There isn't currently any way to edit side allocations from the front end. To do so from the back end, you need to create one ``TeamPositionAllocation`` entry for each team in each round. All teams must have an allocation for every round. There are a few ways to do this, take your pick:" +msgstr "" + +#: ../../features/draw-generation.rst:140 +msgid "If you're using the :ref:`importtournament command `, it reads sides from the file sides.csv." +msgstr "" + +#: ../../features/draw-generation.rst:141 +msgid "You can do this from the Django admin interface (under Setup > Edit Database) by going to the relevant team and adding a **team position allocation** entry. That is:" +msgstr "" + +#: ../../features/draw-generation.rst:143 +msgid "Click **Admin** on the bottom right of any page after logging into an account with :ref:`superuser access `." +msgstr "" + +#: ../../features/draw-generation.rst:144 +msgid "Next to **Teams**, click **Change**." +msgstr "" + +#: ../../features/draw-generation.rst:145 +msgid "Click on the name of the team you want to edit side allocations for." +msgstr "" + +#: ../../features/draw-generation.rst:146 +msgid "Add or edit the entry or entries in the **Team position allocations** table at the bottom." +msgstr "" + +#: ../../features/draw-generation.rst:148 +msgid "You can also do this by writing a script that creates ``TeamPositionAllocation`` objects and saves them. Have a look at `draw/management/commands/generatesideallocations.py `_ for an example." +msgstr "" + +#: ../../features/draw-generation.rst:153 +msgid "Pairing method" +msgstr "" + +#: ../../features/draw-generation.rst:154 +msgid "It's easiest to describe these by example, using a ten-team bracket:" +msgstr "" + +#: ../../features/draw-generation.rst:156 +msgid "**Fold**: 1 vs 10, 2 vs 9, 3 vs 8, 4 vs 7, 5 vs 6. (Also known as high-low pairing.)" +msgstr "" + +#: ../../features/draw-generation.rst:157 +msgid "**Slide**: 1 vs 6, 2 vs 7, 3 vs 8, 4 vs 9, 5 vs 10." +msgstr "" + +#: ../../features/draw-generation.rst:158 +msgid "**Adjacent**: 1 vs 2, 3 vs 4, 5 vs 6, 7 vs 8, 9 vs 10. (Also known as high-high pairing.)" +msgstr "" + +#: ../../features/draw-generation.rst:159 +msgid "**Random**: paired at random within bracket." +msgstr "" + +#: ../../features/draw-generation.rst:161 +msgid "Teams are always paired within their brackets, after resolving odd brackets." +msgstr "" + +#: ../../features/draw-generation.rst:166 +msgid "Conflict avoidance method" +msgstr "" + +#: ../../features/draw-generation.rst:167 +msgid "A **conflict** is when two teams would face each other that have seen each other before, or are from the same institutions. Some tournaments have a preference against allowing this if it's avoidable within certain limits. The **draw avoid conflicts** option allows you to specify how." +msgstr "" + +#: ../../features/draw-generation.rst:169 +msgid "You can turn this off by using **Off**. Other than this, there is currently one conflict avoidance method implemented." +msgstr "" + +#: ../../features/draw-generation.rst:171 +msgid "**One-up-one-down** is the method specified in the Australs constitution. Broadly speaking, if there is a debate with a conflict:" +msgstr "" + +#: ../../features/draw-generation.rst:173 +msgid "It tries to swap teams with the debate \"one up\" from it in the draw." +msgstr "" + +#: ../../features/draw-generation.rst:174 +msgid "If that doesn't work, it tries to swap teams with the debate \"one down\" from it in the draw." +msgstr "" + +#: ../../features/draw-generation.rst:175 +msgid "If neither of those works, it accepts the original conflicted debate." +msgstr "" + +#: ../../features/draw-generation.rst:177 +msgid "It's a bit more complicated than that, for two reasons:" +msgstr "" + +#: ../../features/draw-generation.rst:181 +msgid "History conflicts are prioritised over (*i.e.*, \"worse than\") institution conflicts. So it's fine to resolve a history conflict by creating an institution conflict, but not the vice versa." +msgstr "" + +#: ../../features/draw-generation.rst:182 +msgid "Each swap obviously affects the debates around it, so it's not legal to have two adjacent swaps. (Otherwise, in theory, a team could \"one down\" all the way to the bottom of the draw!) So there is an optimization algorithm that finds the best combination of swaps, *i.e.* the one that minimises conflict, and if there are two profiles that have the same least conflict, then it chooses the one with fewer swaps." +msgstr "" + +#: ../../features/draw-generation.rst:187 +msgid "Pullup restriction" +msgstr "" + +#: ../../features/draw-generation.rst:188 +msgid "You can restrict which teams can be pulled up by configuring the draw generator to choose a pullup team from among only those teams who are the \"best off\" according to a given metric. If several teams are equally \"best off\" within the lower bracket, the draw generator chooses among them using the same **pull-up method** already specified (*e.g.*, \"pull up from top\")" +msgstr "" + +#: ../../features/draw-generation.rst:192 +msgid "You can **choose from teams who have been pulled up the fewest times so far**, that is, in rounds before the current round. Most of the time, this is equivalent to saying that a team cannot be pulled up more than once. But if *all* teams in a bracket have been pulled up at least once, it then chooses from among teams who have been pulled up *only* once (if any), and so on." +msgstr "" + +#: ../../features/draw-generation.rst:194 +msgid "You can **choose from teams with the lowest draw strength so far**, by **wins** or **speaks**." +msgstr "" + +#: ../../features/draw-generation.rst:196 +msgid "If you choose speaks, it's unlikely that two teams will have the same draw strength by speaks, so most of the time this will just choose the team in the lower bracket that's had the easiest draw so far (as measured by their opponents' speaker scores)." +msgstr "" + +#: ../../features/draw-generation.rst:198 +msgid "Pullup restrictions only apply when the :ref:`odd bracket resolution method ` is a pullup method. They have no effect on intermediate brackets." +msgstr "" + +#: ../../features/draw-generation.rst:201 +msgid "What do I do if the draw looks wrong?" +msgstr "" + +#: ../../features/draw-generation.rst:203 +msgid "You can edit match-ups directly from the draw page. Functionally, you can do anything you want. Of course, operationally, you should only edit the draw when you *know* that the draw algorithm got something wrong. If you need to do this, even just once, please file a bug report by creating a new issue on `our issues page on GitHub `_." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/features/notifications.po b/docs/locale/ca/LC_MESSAGES/features/notifications.po new file mode 100644 index 00000000000..79c0f4e2550 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/features/notifications.po @@ -0,0 +1,257 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:08\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/notifications.po\n" +"X-Crowdin-File-ID: 1289\n" +"Language: ca_ES\n" + +#: ../../features/notifications.rst:3 +msgid "Sending Notifications" +msgstr "" + +#: ../../features/notifications.rst:5 +msgid "Tabbycat offers integrations with email delivery services to send notifications to participants on certain enumerated events. For sending these emails, `SendGrid `_ is readily available as an add-on in Heroku. It may be necessary to install the `SendGrid add-on `_ manually. Other integrations may also be used in its place by changing the relevant environment variables." +msgstr "" + +#: ../../features/notifications.rst:8 +msgid "Events" +msgstr "" + +#: ../../features/notifications.rst:10 +msgid "Tabbycat includes a number of templated notifications that can be sent in various times. Variables which are included between curly brackets which are substituted for personalized information passed by email. Links to email will redirect to a page where the message can be changed and the participants selected." +msgstr "" + +#: ../../features/notifications.rst:12 +msgid "All emails have the ``{{ USER }}`` and ``{{ TOURN }}`` variables to indicate who the email is sent to, and the tournament it relates to. The \"From\" in the emails will also be the tournament's name." +msgstr "" + +#: ../../features/notifications.rst:17 +msgid "Email content and description" +msgstr "" + +#: ../../features/notifications.rst:18 +msgid "Variables" +msgstr "" + +#: ../../features/notifications.rst:20 +msgid "**Adjudicator draw notification**" +msgstr "" + +#: ../../features/notifications.rst:22 +msgid "Email to adjudicators indicating their room assignment." +msgstr "" + +#: ../../features/notifications.rst:24 ../../features/notifications.rst:36 +#: ../../features/notifications.rst:74 +msgid "Available through the admin draw page." +msgstr "" + +#: ../../features/notifications.rst:25 ../../features/notifications.rst:37 +msgid "``{{ ROUND }}``: The round name" +msgstr "" + +#: ../../features/notifications.rst:26 ../../features/notifications.rst:38 +msgid "``{{ VENUE }}``: The venue of the assigned debate" +msgstr "" + +#: ../../features/notifications.rst:27 ../../features/notifications.rst:39 +msgid "``{{ PANEL }}``: A list of all the adjudicators assigned to the venue (with positions)" +msgstr "" + +#: ../../features/notifications.rst:28 ../../features/notifications.rst:40 +msgid "``{{ DRAW }}``: A list of the team matchup with their roles" +msgstr "" + +#: ../../features/notifications.rst:29 +msgid "``{{ POSITION }}``: The target adjudicator's position in the panel" +msgstr "" + +#: ../../features/notifications.rst:30 +msgid "``{{ URL }}``: A link to the adjudicator's private URL page" +msgstr "" + +#: ../../features/notifications.rst:32 +msgid "**Team draw notification**" +msgstr "" + +#: ../../features/notifications.rst:34 +msgid "Email to teams indicating their pairing." +msgstr "" + +#: ../../features/notifications.rst:41 +msgid "``{{ TEAM }}``: The team's code or short name" +msgstr "" + +#: ../../features/notifications.rst:42 +msgid "``{{ SIDE }}``: The team's side" +msgstr "" + +#: ../../features/notifications.rst:44 +msgid "**Private URL distribution**" +msgstr "" + +#: ../../features/notifications.rst:46 +msgid "Email to participants giving them their private URL for electronic forms." +msgstr "" + +#: ../../features/notifications.rst:48 +msgid "Available through the private URLs page." +msgstr "" + +#: ../../features/notifications.rst:49 +msgid "``{{ URL }}``: The personalized URL" +msgstr "" + +#: ../../features/notifications.rst:50 +msgid "``{{ KEY }}``: The private code in the URL" +msgstr "" + +#: ../../features/notifications.rst:52 +msgid "**Ballot submission receipt**" +msgstr "" + +#: ../../features/notifications.rst:54 +msgid "Email to adjudicators of their ballot after tabroom confirmation." +msgstr "" + +#: ../../features/notifications.rst:56 +msgid "Sent automatically when their ballot's result status becomes confirmed, if enabled in the \"Notifications\" section of the tournament options." +msgstr "" + +#: ../../features/notifications.rst:58 +msgid "``{{ DEBATE }}``: The name (with round & venue) of the relevent debate" +msgstr "" + +#: ../../features/notifications.rst:59 +msgid "``{{ SCORES }}``: The submitted ballot with speaker scores ands team names" +msgstr "" + +#: ../../features/notifications.rst:61 +msgid "**Current team standings**" +msgstr "" + +#: ../../features/notifications.rst:63 +msgid "Email to speakers with their point total." +msgstr "" + +#: ../../features/notifications.rst:65 +msgid "Available through the \"Confirm Round Completion\" page." +msgstr "" + +#: ../../features/notifications.rst:66 +msgid "``{{ URL }}``: The URL of the team standings page (if public)" +msgstr "" + +#: ../../features/notifications.rst:67 +msgid "``{{ TEAM }}``: The team's name" +msgstr "" + +#: ../../features/notifications.rst:68 +msgid "``{{ POINTS }}``: The team's number of points" +msgstr "" + +#: ../../features/notifications.rst:70 +msgid "**Motion release**" +msgstr "" + +#: ../../features/notifications.rst:72 +msgid "Email to speakers with the motion(s) of the current round." +msgstr "" + +#: ../../features/notifications.rst:75 +msgid "``{{ ROUND }}``: The name of the round" +msgstr "" + +#: ../../features/notifications.rst:76 +msgid "``{{ MOTIONS }}``: A list of the motions released" +msgstr "" + +#: ../../features/notifications.rst:78 +msgid "**Team information**" +msgstr "" + +#: ../../features/notifications.rst:80 +msgid "Email to speakers with information pertaining to their team, such as eligibility and codes." +msgstr "" + +#: ../../features/notifications.rst:82 +msgid "Available through the Participants page." +msgstr "" + +#: ../../features/notifications.rst:83 +msgid "``{{ SHORT }}``: The team's short name" +msgstr "" + +#: ../../features/notifications.rst:84 +msgid "``{{ LONG }}``: The team's long name" +msgstr "" + +#: ../../features/notifications.rst:85 +msgid "``{{ CODE }}``: The team's code name" +msgstr "" + +#: ../../features/notifications.rst:86 +msgid "``{{ EMOJI }}``: The team's assigned emoji" +msgstr "" + +#: ../../features/notifications.rst:87 +msgid "``{{ DIVISION }}``: The team's division if applicable" +msgstr "" + +#: ../../features/notifications.rst:88 +msgid "``{{ BREAK }}``: Break categories which the team is a member" +msgstr "" + +#: ../../features/notifications.rst:89 +msgid "``{{ SPEAKERS }}``: A list of the speakers in the team" +msgstr "" + +#: ../../features/notifications.rst:90 +msgid "``{{ INSTITUTION }}``: The team's affiliation" +msgstr "" + +#: ../../features/notifications.rst:93 +msgid "Event Webhook" +msgstr "" + +#: ../../features/notifications.rst:95 +msgid "With SendGrid, the status of sent emails can be sent to Tabbycat to be displayed, giving an indication of failures and whether participants have opened the messages. To activate this feature, setup must be done both in your SendGrid account and in Tabbycat." +msgstr "" + +#: ../../features/notifications.rst:97 +msgid "Set a secret key in the Email section of the tournament's preferences. This key must be alphanumeric without any spaces." +msgstr "" + +#: ../../features/notifications.rst:98 +msgid "Copy the \"web-hook\" link presented in a box at the top of the \"email participants\" page." +msgstr "" + +#: ../../features/notifications.rst:99 +msgid "Go to https://app.sendgrid.com/settings/mail_settings and select \"Event Notifications\"" +msgstr "" + +#: ../../features/notifications.rst:100 +msgid "Enable the feature and paste the Tabbycat URL under \"HTTP POST URL\"." +msgstr "" + +#: ../../features/notifications.rst:101 +msgid "Select the notifications to keep track (or all of them)." +msgstr "" + +#: ../../features/notifications.rst:103 +msgid "Each email and change in status sent to Tabbycat will add a row to the database. If the number of rows is limited, as is for free Heroku apps, enabling the webhook may use up a significant number of rows. Be selective in the events to keep track." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/features/preformed-panels.po b/docs/locale/ca/LC_MESSAGES/features/preformed-panels.po new file mode 100644 index 00000000000..a7694fa5cfb --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/features/preformed-panels.po @@ -0,0 +1,176 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 21:53\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/preformed-panels.po\n" +"X-Crowdin-File-ID: 1291\n" +"Language: ca_ES\n" + +#: ../../features/preformed-panels.rst:5 +msgid "Preformed Panels" +msgstr "Grups de Jutges formats amb antelació" + +#: ../../features/preformed-panels.rst:7 +msgid "Preformed panels, also known as a 'shadow draw', allow adjudicator panels to be created *before* a round has been drawn and then applied once its draw is ready. This means that panel formation can be done during periods outside the normal time pressure of finalising a draw for release. This can save a lot of time at large tournaments, or at tournaments where the adjudication core wants to carefully control the specific combination of adjudicators within panels." +msgstr "" + +#: ../../features/preformed-panels.rst:9 +msgid "Tabbycat's implementation of preformed panels is more powerful, but less simple, than many others. The chief difference is that our workflow does not simply transpose a linear set of preformed panels atop a draw. Instead we employ Tabbycat's existing allocation tools, primarily the notion of a debate's *priority*, to allow for a non-linear matching of preformed panels that avoids adjudicator conflicts and better adapts to a given draw — particularly when the most important debates do not strictly follow the highest debate brackets." +msgstr "" + +#: ../../features/preformed-panels.rst:11 +msgid "The central concept is that each preformed panel has a priority value. When applying preformed panels to a draw, the allocator ties to best match the priority value of each preformed panel to the priority of each actual debate. This is similar to how Tabbycat's normal auto-allocator matches the strength of each panel (as measured by adjudicators' ratings) to the priority of each debate." +msgstr "" + +#: ../../features/preformed-panels.rst:14 +msgid "Step 1: Create preformed panels" +msgstr "" + +#: ../../features/preformed-panels.rst:16 +msgid "You can find the preformed panels section either" +msgstr "" + +#: ../../features/preformed-panels.rst:18 +msgid "under the **Setup** menu (for all rounds), or" +msgstr "" + +#: ../../features/preformed-panels.rst:19 +msgid "on the **Draw** page (for the current and next round)." +msgstr "" + +#: ../../features/preformed-panels.rst:21 +msgid "Initially, the preformed panels page will have no panels. Click the **Create Panels** button in the top left to make some. The panels it creates are based upon a projection of that round's general results using the results of the previous round. As a result, each preformed panel will have a *bracket range*, the lowest and highest brackets that debate might be in, and a *liveness range*, the maximum number of teams that could be live in that room." +msgstr "" + +#: ../../features/preformed-panels.rst:25 +msgid "Like the normal adjudicator allocation interface, the preformed panel interfaces will indicate when an adjudicator has not been marked as available. If using preformed panels, you may want to set adjudicator availability earlier than you would otherwise." +msgstr "" + +#: ../../features/preformed-panels.rst:27 +msgid "Liveness in the anticipated draw only pertains to the open category (the first break category that is marked as a \"general\" category). It's not possible to meaningfully predict where teams open-dead but live in other categories will end up." +msgstr "" + +#: ../../features/preformed-panels.rst:30 +msgid "Step 2: Assign priorities to preformed panels" +msgstr "" + +#: ../../features/preformed-panels.rst:32 +msgid "By default the priority slider for all preformed panels is in the neutral position. You can use the \"Prioritise\" button in the top left to assign priority values automatically, based upon their brackets or liveness. Before or after this step you can alter the priorities as usual — even after you have allocated adjudicators." +msgstr "" + +#: ../../features/preformed-panels.rst:34 +msgid "It's important to remember to assign a range of priorities to the panels. Without distinct priority values, the application of your preformed panels to the actual draw will be essentially random. If allocating priorities manually, it is a good idea to keep a relatively even distribution of priorities — use the range!" +msgstr "" + +#: ../../features/preformed-panels.rst:36 +msgid "In Round 1, each debate has a liveness and bracket of 0. If you are using preformed panels in this instance you may need to manually-differentiate their priorities." +msgstr "" + +#: ../../features/preformed-panels.rst:39 +msgid "Step 3: Allocate adjudicators to preformed panels" +msgstr "" + +#: ../../features/preformed-panels.rst:43 +msgid "Now that your panels have a priority, you can begin allocating adjudicators. You can do this manually, but do note that the normal auto-allocator for adjudicators also works in this context (the \"Allocate\" button). Even if you want to tweak your panels extensively, the auto-allocator can provide a good first-pass collection of panels, because it will give stronger adjudicators to the panels that you have marked as important." +msgstr "" + +#: ../../features/preformed-panels.rst:45 +msgid "The created panels all auto-save, so you can leave the page and return to pick up where you left. Like the main allocation interface, changes should appear 'live' across different computers and the sharding system is available to divide up each person's view of the draw." +msgstr "" + +#: ../../features/preformed-panels.rst:48 +msgid "Step 4: Generate the draw" +msgstr "" + +#: ../../features/preformed-panels.rst:50 +msgid "Proceed with the creation of the draw as usual. Open up the normal adjudicator allocation page for that round." +msgstr "" + +#: ../../features/preformed-panels.rst:53 +msgid "Step 5: Assign priorities to debates" +msgstr "" + +#: ../../features/preformed-panels.rst:55 +msgid "When allocating preformed panels, the priority levels are what connects the preformed panels to the actual debates. It is thus crucial that you assign priorities to the debates in the actual draw using automatic prioritisation or the manual sliders. Because the automatic prioritiser does not employ the highest priority value, it is worth having a look at the draw and seeing if any debates justify this before proceeding." +msgstr "" + +#: ../../features/preformed-panels.rst:58 +msgid "Step 6: Allocate preformed panels to debates" +msgstr "" + +#: ../../features/preformed-panels.rst:60 +msgid "To allocate preformed panels to your debates, click the normal \"Allocate\" button and then select the *Preformed Panels* option." +msgstr "" + +#: ../../features/preformed-panels.rst:64 +msgid "This will then allocate the preformed panels to debates." +msgstr "" + +#: ../../features/preformed-panels.rst:68 +msgid "You can the edit the allocation as normal. If needed, you can redo the allocation of the preformed panels at any point." +msgstr "" + +#: ../../features/preformed-panels.rst:71 +msgid "How does the allocator work?" +msgstr "" + +#: ../../features/preformed-panels.rst:73 +msgid "Roughly speaking, the allocator tries to match panel priorities to debate priorities, while avoiding conflicts. It'll mostly try to swap panels within priority levels in order to avoid conflicts. If there aren't exactly as many panels at each priority level as there are debates, it'll do its best to match what it can." +msgstr "" + +#: ../../features/preformed-panels.rst:75 +msgid "More formally, it treats the allocation of preformed panels to debates as an `assignment problem `_, with a cost of assigning each panel :math:`p` to each debate :math:`d` given by" +msgstr "" + +#: ../../features/preformed-panels.rst:77 +msgid "C(p,d) = w_\\mathrm{mism} [\\mathrm{importance}(p) - \\mathrm{importance(d)}]^2 + w_\\mathrm{conf} \\, \\mathrm{conflicts}(p,d) + w_\\mathrm{hist} \\, \\mathrm{history}(p,d)" +msgstr "" + +#: ../../features/preformed-panels.rst:81 +msgid "where" +msgstr "" + +#: ../../features/preformed-panels.rst:83 +msgid ":math:`w_\\mathrm{mism}` is the \"Importance mismatch penalty\" in the \"Draw rules\" settings," +msgstr "" + +#: ../../features/preformed-panels.rst:84 +msgid ":math:`w_\\mathrm{hist}` is the \"Adjudicator conflict penalty\" in the \"Draw rules\" settings," +msgstr "" + +#: ../../features/preformed-panels.rst:85 +msgid ":math:`w_\\mathrm{conf}` is the \"Adjudicator history penalty\" in the \"Draw rules\" settings," +msgstr "" + +#: ../../features/preformed-panels.rst:86 +msgid ":math:`\\mathrm{importance}(p)` is the importance of panel :math:`p`," +msgstr "" + +#: ../../features/preformed-panels.rst:87 +msgid ":math:`\\mathrm{importance}(d)` is the importance of debate :math:`d`," +msgstr "" + +#: ../../features/preformed-panels.rst:88 +msgid ":math:`\\mathrm{conflicts}(p,d)` is the number of adjudicator-team conflicts between panel :math:`p` and debate :math:`d`, and" +msgstr "" + +#: ../../features/preformed-panels.rst:89 +msgid ":math:`\\mathrm{history}(p,d)` is the number of adjudicators and teams who have seen each other between panel :math:`p` and debate :math:`d`." +msgstr "" + +#: ../../features/preformed-panels.rst:91 +msgid "It then uses the `Hungarian algorithm `_ to find the assignment of panels to debates that minimizes the total cost of the pairings." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/features/printing.po b/docs/locale/ca/LC_MESSAGES/features/printing.po new file mode 100644 index 00000000000..f8c31b3ea8f --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/features/printing.po @@ -0,0 +1,68 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:08\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/printing.po\n" +"X-Crowdin-File-ID: 1293\n" +"Language: ca_ES\n" + +#: ../../features/printing.rst:3 +msgid "Printing Ballots and Feedback" +msgstr "" + +#: ../../features/printing.rst:5 +msgid "Tabbycat offers the ability to print scoresheets and feedback sheets on a per-round basis. This means that each scoresheet is customised to match the draw, and so will display:" +msgstr "" + +#: ../../features/printing.rst:7 +msgid "The motion or possible motions that could have been chosen from" +msgstr "" + +#: ../../features/printing.rst:8 +msgid "The teams, and a list of speakers for each team" +msgstr "" + +#: ../../features/printing.rst:9 +msgid "The room number, and name of the adjudicators present" +msgstr "" + +#: ../../features/printing.rst:11 +msgid "Feedback sheets will also be customised in this manner; displaying:" +msgstr "" + +#: ../../features/printing.rst:13 +msgid "A 'from' source. Sheet will be printed for each possible piece of feedback in that room: ie adjudicators will each get a sheet for their panellists and trainees while teams and panellists will get sheets for the chair." +msgstr "" + +#: ../../features/printing.rst:14 +msgid "The specific questions you established when configuring the :ref:`adjudicator feedback questions `" +msgstr "" + +#: ../../features/printing.rst:15 +msgid "The room number" +msgstr "" + +#: ../../features/printing.rst:17 +msgid "To print the ballots for each round, you would go to the **Display** page for that round, the click one of the two relevant print links. This opens a new window. In each window, you then use your browser's print function (CTRL-P). In the resulting print interface (from your browser) you'll want to turn background graphics on, header/footers off, and set the layout to portrait (feedback sheets) or landscape (score sheets)." +msgstr "" + +#: ../../features/printing.rst:19 +msgid "Typically you'd save these to PDF for printing, although you should be able to print straight from this dialogue box." +msgstr "" + +#: ../../features/printing.rst:21 +msgid "Printing works best in Safari and Firefox; use those if possible." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/features/standings-rules.po b/docs/locale/ca/LC_MESSAGES/features/standings-rules.po new file mode 100644 index 00000000000..bc8c447a96a --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/features/standings-rules.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-07-01 23:41\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/standings-rules.po\n" +"X-Crowdin-File-ID: 1295\n" +"Language: ca_ES\n" + +#: ../../features/standings-rules.rst:5 +msgid "Standings Rules" +msgstr "" + +#: ../../features/standings-rules.rst:8 +msgid "Team standings rules" +msgstr "" + +#: ../../features/standings-rules.rst:10 +msgid "In Tabbycat, you can choose how teams are ranked in the team standings. For example, at Australs, teams are ranked first on the number of wins, and second on their total speaker score. The setting that specifies how teams are ranked is called the **team standings precedence**. The team standings precedence is used:" +msgstr "" + +#: ../../features/standings-rules.rst:15 +msgid "When displaying the team tab," +msgstr "" + +#: ../../features/standings-rules.rst:16 +msgid "Whenever a power-paired draw is generated, and" +msgstr "" + +#: ../../features/standings-rules.rst:17 +msgid "When computing which teams are in the break." +msgstr "" + +#: ../../features/standings-rules.rst:19 +msgid "When you choose the team standings precedence, you choose from a list of *metrics*. Then, in the standings, teams will be sorted first by the first metric, then by the second metric, and so on. You must choose at least one metric, and you can choose up to eight. Teams tied on all metrics will have the same rank." +msgstr "" + +#: ../../features/standings-rules.rst:25 +msgid "If you like, you can also choose **team standings extra metrics**, which are metrics that will be shown in the team standings, but not used to rank teams." +msgstr "" + +#: ../../features/standings-rules.rst:33 ../../features/standings-rules.rst:132 +msgid "Metric" +msgstr "" + +#: ../../features/standings-rules.rst:34 ../../features/standings-rules.rst:133 +msgid "Description" +msgstr "" + +#: ../../features/standings-rules.rst:36 +msgid "Wins" +msgstr "Victòries" + +#: ../../features/standings-rules.rst:37 +msgid "How many debates the team has won." +msgstr "" + +#: ../../features/standings-rules.rst:39 +msgid "Points" +msgstr "Punts" + +#: ../../features/standings-rules.rst:40 +msgid "How many points the team has. For two-team formats, this is just a synonym for wins, and differs only in column labelling. For BP, this is 3 points for a first, 2 for a second, 1 for a third and 0 for a fourth." +msgstr "" + +#: ../../features/standings-rules.rst:44 +msgid "Total speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:45 +msgid "The sum of all speaker scores attained in all debates." +msgstr "" + +#: ../../features/standings-rules.rst:47 +msgid "Average total speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:48 ../../features/standings-rules.rst:157 +msgid "The average total speaker score over all debates the team has had, not counting debates where they or their opponents forfeited." +msgstr "" + +#: ../../features/standings-rules.rst:51 +msgid "Average individual speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:52 +msgid "The total substantive speaker score, over all debates the team has had and the number of speakers. Provides an equivalent metric to average total speaker score in no-reply formats, but within the substantive speech scoring range." +msgstr "" + +#: ../../features/standings-rules.rst:57 +msgid "Speaker score standard deviation" +msgstr "" + +#: ../../features/standings-rules.rst:58 +msgid "The standard deviation of total speaker scores over all debates the team has had, not counting debates where they or their opponents forfeited. This metric is ranked in ascending order (smaller standard deviations ranked higher)." +msgstr "" + +#: ../../features/standings-rules.rst:63 +msgid "Sum of margins" +msgstr "" + +#: ../../features/standings-rules.rst:64 +msgid "The sum of all margins. Wins are positive, losses are negative." +msgstr "" + +#: ../../features/standings-rules.rst:66 +msgid "Average margin" +msgstr "" + +#: ../../features/standings-rules.rst:67 +msgid "The average margin over all debates the team has had, not counting debates where they or their opponents forfeited." +msgstr "" + +#: ../../features/standings-rules.rst:70 +msgid "Draw strength by wins" +msgstr "" + +#: ../../features/standings-rules.rst:71 +msgid "The sum of the number of wins of every team this team has faced so far." +msgstr "" + +#: ../../features/standings-rules.rst:73 +msgid "This is also known in some circuits as *win points*, *opponent wins* or *opponent strength*." +msgstr "" + +#: ../../features/standings-rules.rst:76 +msgid "Draw strength by speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:77 +msgid "The sum of speaker scores of every team this team has faced so far." +msgstr "" + +#: ../../features/standings-rules.rst:79 +msgid "Votes/ballots carried" +msgstr "" + +#: ../../features/standings-rules.rst:80 +msgid "The number of adjudicators that gave this team a win across all of their debates. Also known as the number of *ballots* or *judges* a team has." +msgstr "" + +#: ../../features/standings-rules.rst:83 +msgid "In cases where the panel is smaller or larger than 3, this number is normalised to be out of 3. For example, if a panel of five splits 3--2, then the winning team is recorded as gaining 1.8 votes, and the losing team is recorded as gaining 1.2. This also means that solo adjudicators are always worth three votes." +msgstr "" + +#: ../../features/standings-rules.rst:89 +msgid "Number of firsts" +msgstr "" + +#: ../../features/standings-rules.rst:90 +msgid "The number of debates in which the team came first. Only makes sense for British Parliamentary." +msgstr "" + +#: ../../features/standings-rules.rst:93 +msgid "Number of seconds" +msgstr "" + +#: ../../features/standings-rules.rst:94 +msgid "The number of debates in which the team came second. Only makes sense for British Parliamentary." +msgstr "" + +#: ../../features/standings-rules.rst:97 +msgid "Number of pullups before this round" +msgstr "" + +#: ../../features/standings-rules.rst:98 +msgid "The number of times the team has been pulled up as part of :ref:`draw generation `. You probably wouldn't use this as a metric to rank teams, but you may wish to display it as an \"extra metric\" in the team standings for transparency." +msgstr "" + +#: ../../features/standings-rules.rst:103 +msgid "Who-beat-whom" +msgstr "" + +#: ../../features/standings-rules.rst:104 +msgid "If there are exactly two teams tied on all metrics earlier in the precedence than this one, then check if the teams have faced each other. If they have, the team that won their encounter is ranked higher. If they have seen each other more than once, the team that has won more of their encounters is ranked higher." +msgstr "" + +#: ../../features/standings-rules.rst:110 +msgid "If there are more than two teams tied, this metric is not applied." +msgstr "" + +#: ../../features/standings-rules.rst:112 +msgid "This metric can be specified multiple times. Each time who-beat-whom occurs, it applies to all the metrics earlier in the precedence than the occurrence in question." +msgstr "" + +#: ../../features/standings-rules.rst:118 +msgid "Speaker standings rules" +msgstr "" + +#: ../../features/standings-rules.rst:120 +msgid "The speaker standings precedence is only used in speaker standings (*i.e.*, it doesn't affect the operation of the tournament). As for team standings, the **speaker standings precedence** specifies which metrics are used to rank speakers, with the second metric tie-breaking the first, the third tie-breaking the second, and so on. The **speaker standings extra metrics** are metrics that will be shown in the speaker standings, but won't be used to rank speakers." +msgstr "" + +#: ../../features/standings-rules.rst:135 +msgid "Total" +msgstr "Total" + +#: ../../features/standings-rules.rst:136 +msgid "The sum of all speaker scores attained by the speaker. Note that if a speaker misses a round, they'll typically be relegated to the bottom of the speaker standings by this metric." +msgstr "" + +#: ../../features/standings-rules.rst:140 +msgid "Average" +msgstr "" + +#: ../../features/standings-rules.rst:141 +msgid "The average of all speaker scores attained by the speaker." +msgstr "" + +#: ../../features/standings-rules.rst:143 +msgid "Trimmed mean" +msgstr "" + +#: ../../features/standings-rules.rst:144 +msgid "The average speaker score after excluding their highest and lowest speaker scores. Also known as the *high-low drop*, *truncated mean* or *Olympic average*." +msgstr "" + +#: ../../features/standings-rules.rst:148 +msgid "If the speaker has only one or two scores, this metric just returns the average of those scores, without excluding any." +msgstr "" + +#: ../../features/standings-rules.rst:151 +msgid "Standard deviation" +msgstr "" + +#: ../../features/standings-rules.rst:152 +msgid "The standard deviation of all speaker scores attained by the speaker. This metric is ranked in ascending order (smaller standard deviations ranked higher)." +msgstr "" + +#: ../../features/standings-rules.rst:156 +msgid "Average speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:160 +msgid "Number of speeches given" +msgstr "" + +#: ../../features/standings-rules.rst:161 +msgid "The number of speaker scores associated with the speaker. (In tournaments where teams can rotate speakers, this may not be all rounds.) This metric is normally used as an \"extra\" (unranked) metric, because it'd be weird to rank by number of speeches given, but you can if you want to." +msgstr "" + +#: ../../features/standings-rules.rst:168 +msgid "Motion balance" +msgstr "" + +#: ../../features/standings-rules.rst:170 +msgid "The motion balance page applies a statistical test to estimate the degree to which a motion is imbalanced. This is calculated by first making an underlying assumption that a motion is generally fair. This will be our null hypothesis: that, for a given motion, affirmative teams won the same number of times as negative teams." +msgstr "" + +#: ../../features/standings-rules.rst:172 +msgid "Our chi-squared test will then be centred around disproving this hypothesis. If we disprove the hypothesis, we say that, in the context of this tournament and this draw, the motion ended up being unbalanced. However (technically speaking) if we fail to reject the null hypothesis, we would conclude that there is insufficient evidence to suggest that the motion was unbalanced in the context of this tournament." +msgstr "" + +#: ../../features/standings-rules.rst:174 +msgid "The test proceeds by `calculating the chi-squared stat, then running a series of tests `_. The tests are where we go a little off-book with respect to statistical methodology. Normally we would test at a single \"level of significance\" (ie. with a certain degree of certainty), but that's insufficient in telling us how bad a motion ended up being. So, instead, we conduct a range of tests with a range of levels of significance, and calculate the minimum level of significance that causes our null hypothesis to be rejected. Using the minimum level of significance that rejects our null hypothesis, we can then grade the fairness of the motion on a scale. Motions whose tests fall below a certain threshold will be considered fair, while others will be graded based on the minimum." +msgstr "" + +#: ../../features/standings-rules.rst:176 +msgid "For formats with topic selection, the same test is applied using the number of affirmative and negative vetoes in place of wins. The assumption here is that, during the time allotted for motion selection, teams estimate how appealing a motion is from their position, and then veto the topic that they feel is least favourable. Thus, the null hypothesis is that a motion that is perceived of as fair would be vetoed by affirmative and negative teams to an equal degree." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/features/team-code-names.po b/docs/locale/ca/LC_MESSAGES/features/team-code-names.po new file mode 100644 index 00000000000..b010f4c2fb7 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/features/team-code-names.po @@ -0,0 +1,104 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:08\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/team-code-names.po\n" +"X-Crowdin-File-ID: 1297\n" +"Language: ca_ES\n" + +#: ../../features/team-code-names.rst:5 +msgid "Team Code Names" +msgstr "" + +#: ../../features/team-code-names.rst:7 +msgid "Some tournaments use \"code names\" to obscure the institutional affiliations of teams. For example, rather than calling a team \"Harvard DK\", they would be presented in the draw as \"Butterfly\". A natural way to do this would be just to change the name of every team, but then the team's \"real name\" would be hidden from tournament staff, too." +msgstr "" + +#: ../../features/team-code-names.rst:13 +msgid "Instead, Tabbycat allows you to assign code names to teams, alongside their real names. This way, you can have code names show to participants, while real team names show in administrative views (*e.g.* allocating adjudicators). It also allows you to \"decode\" team names for elimination rounds or final tab release easily, without having to actually change every team's name." +msgstr "" + +#: ../../features/team-code-names.rst:19 +msgid "While the most frequently-used public views have been checked to ensure that they show only code names, not all views have been checked thoroughly. Please check views using demonstration data on a test site, configured in the same way that you would use it at your tournament, before using code names at a real tournament." +msgstr "" + +#: ../../features/team-code-names.rst:26 +msgid "Assigning code names" +msgstr "" + +#: ../../features/team-code-names.rst:28 +msgid "Most methods of importing teams, including the simple importer and the ``importtournament`` command, automatically assign code names to teams. The code name is the name of the emoji that is automatically assigned at the same time. For example, the team assigned 🦋 will be code-named \"Butterfly\"." +msgstr "" + +#: ../../features/team-code-names.rst:33 +msgid "If you wish to use your own code names, you need to set the \"code name\" field of each team. Here are two ways to do this:" +msgstr "" + +#: ../../features/team-code-names.rst:36 +msgid "**Edit Database area:** Enter the Edit Database area, and under **Participants > Teams**, click **Change**. Modify each team one by one, entering a new code name then saving." +msgstr "" + +#: ../../features/team-code-names.rst:39 +msgid "``importtournament`` **command:** If you imported a tournament from CSV files, you can just add a ``code_name`` column to your teams CSV file." +msgstr "" + +#: ../../features/team-code-names.rst:43 +msgid "Displaying code names" +msgstr "" + +#: ../../features/team-code-names.rst:45 +msgid "Code names are disabled by default; to enable then, go to **Setup > Configuration > Public Options**, and change the **Team code names** option. You can choose between the following options:" +msgstr "" + +#: ../../features/team-code-names.rst:49 +msgid "Do not use code names" +msgstr "" + +#: ../../features/team-code-names.rst:50 +msgid "Use real names everywhere, and show code names in tooltips" +msgstr "" + +#: ../../features/team-code-names.rst:51 +msgid "Use code names for public; real names with code names in tooltips for admins" +msgstr "" + +#: ../../features/team-code-names.rst:52 +msgid "Use code names for public; code names with real names in tooltips for admins" +msgstr "" + +#: ../../features/team-code-names.rst:53 +msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" +msgstr "" + +#: ../../features/team-code-names.rst:55 +msgid "\"Code names in tooltips\" means that the code name will display in the details box that appears when you roll over a team's name, and similarly for real names." +msgstr "" + +#: ../../features/team-code-names.rst:58 +msgid "One typical use is as follows:" +msgstr "" + +#: ../../features/team-code-names.rst:60 +msgid "Before the tournament, set the team code names setting to *Use code names for public; real names with code names in tooltips for admins*. This hides real names from anything participants would see, but continues to refer to teams in administrative views by real names." +msgstr "" + +#: ../../features/team-code-names.rst:64 +msgid "After the break is announced, set it to *Use real names everywhere, and show code names in tooltips*. This basically decodes all team names, while still allowing people to look up the (now former) code name of a team." +msgstr "" + +#: ../../features/team-code-names.rst:68 +msgid "If you're enabling team codes, you probably want to disable the **Show team institutions** option too." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/features/user-accounts.po b/docs/locale/ca/LC_MESSAGES/features/user-accounts.po new file mode 100644 index 00000000000..d0d06fdb02e --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/features/user-accounts.po @@ -0,0 +1,196 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-07-01 23:41\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/user-accounts.po\n" +"X-Crowdin-File-ID: 1299\n" +"Language: ca_ES\n" + +#: ../../features/user-accounts.rst:5 +msgid "User Accounts" +msgstr "" + +#: ../../features/user-accounts.rst:7 +msgid "For obvious reasons, user logins are required to data entry and administrative functions. Conceptually, there are four levels of access:" +msgstr "" + +#: ../../features/user-accounts.rst:14 +msgid "Access" +msgstr "" + +#: ../../features/user-accounts.rst:15 +msgid "Should be used by" +msgstr "" + +#: ../../features/user-accounts.rst:16 +msgid "Grants access to" +msgstr "" + +#: ../../features/user-accounts.rst:17 +msgid "Is capable of" +msgstr "" + +#: ../../features/user-accounts.rst:19 +msgid "Public" +msgstr "Públic" + +#: ../../features/user-accounts.rst:20 +msgid "The public" +msgstr "" + +#: ../../features/user-accounts.rst:21 +msgid "Publicly available information." +msgstr "" + +#: ../../features/user-accounts.rst:22 +msgid "Viewing things, and submitting new ballots/feedback if electronic submission is permitted by the tournament." +msgstr "" + +#: ../../features/user-accounts.rst:24 +msgid "Assistant" +msgstr "" + +#: ../../features/user-accounts.rst:25 +msgid "Data entry helpers" +msgstr "" + +#: ../../features/user-accounts.rst:26 +msgid "The assistant area" +msgstr "" + +#: ../../features/user-accounts.rst:27 +msgid "Entering, confirming and printing ballots and feedback, checking in ballots and people, and displaying the draw." +msgstr "" + +#: ../../features/user-accounts.rst:29 +msgid "Superuser" +msgstr "" + +#: ../../features/user-accounts.rst:30 +msgid "Chief adjudicators" +msgstr "" + +#: ../../features/user-accounts.rst:31 +msgid "The administrator and assistant areas" +msgstr "" + +#: ../../features/user-accounts.rst:32 +msgid "Generating draws, allocating adjudicators and venues, and editing ballots, feedback and adjudicator scores." +msgstr "" + +#: ../../features/user-accounts.rst:34 +msgid "Staff and superuser" +msgstr "" + +#: ../../features/user-accounts.rst:35 +msgid "Tab director" +msgstr "" + +#: ../../features/user-accounts.rst:36 +msgid "The administrator, assistant and Edit Database areas" +msgstr "" + +#: ../../features/user-accounts.rst:37 +msgid "Editing the database directly." +msgstr "" + +#: ../../features/user-accounts.rst:39 +msgid "If a user account on the tab system belongs to someone who is also a participant in the tournament (*e.g.*, a chief adjudicator), these two capacities are completely separate. User accounts are only used to regulate access to administrative functions. Tabbycat doesn't know about any relationship between user accounts, and who is participating in the tournament." +msgstr "" + +#: ../../features/user-accounts.rst:42 +msgid "Account roles" +msgstr "" + +#: ../../features/user-accounts.rst:44 +msgid "You should create an account for each person who needs to access the tab system. When you create an account in the Edit Database area, there are checkboxes for **Superuser status** and **Staff access**. Superusers have access to the administrator area, and staff have access to the Edit Database area. You should grant permissions as follows:" +msgstr "" + +#: ../../features/user-accounts.rst:46 +msgid "Tab directors should get both superuser and staff status." +msgstr "" + +#: ../../features/user-accounts.rst:47 +msgid "Chief adjudicators and their deputies should get superuser status, but not staff status." +msgstr "" + +#: ../../features/user-accounts.rst:48 +msgid "Tab assistants (helping only with data entry) should get neither superuser nor staff status." +msgstr "" + +#: ../../features/user-accounts.rst:50 +msgid "Tournament participants (other than tab staff) do not need an account. Everything they need to know can be accessed without an account. If you're using electronic ballots or electronic feedback, they access these using a URL that only they know (see :ref:`private-urls`)." +msgstr "" + +#: ../../features/user-accounts.rst:52 +msgid "When doing data entry, users with superuser status should use the **assistant area**. The administrator area is intended for managing the tournament, and doesn't include someand should **not** in general be used for data entry. Specifically, the administrator area lacks checks that are important for data integrity assurance. It should be used only to override the normal :ref:`data entry ` procedure, for example, to unconfirm or modify a ballot." +msgstr "" + +#: ../../features/user-accounts.rst:54 +msgid "The **Edit Database** interface should not be used except where it is actually necessary. There are a few functions which require this, but as a principle, it shouldn't be used as a matter of course." +msgstr "" + +#: ../../features/user-accounts.rst:56 +msgid "In theory, you could grant an account staff status but not superuser status. But then they'd be allowed to edit the database, but not run the tournament, which would be weird." +msgstr "" + +#: ../../features/user-accounts.rst:59 +msgid "Adding accounts" +msgstr "" + +#: ../../features/user-accounts.rst:61 +msgid "To add an account:" +msgstr "" + +#: ../../features/user-accounts.rst:63 +msgid "Go to the Edit Database area of the site." +msgstr "" + +#: ../../features/user-accounts.rst:65 +msgid "Under **Authentication and Authorization**, click the **Add** link next to **Users**." +msgstr "" + +#: ../../features/user-accounts.rst:67 +msgid "Ask the user to enter a username, password and possibly email address." +msgstr "" + +#: ../../features/user-accounts.rst:69 +msgid "Only they should know what the password is." +msgstr "" + +#: ../../features/user-accounts.rst:70 +msgid "If you're hosting on the internet, all passwords should be at least moderately strong!" +msgstr "" + +#: ../../features/user-accounts.rst:71 +msgid "Passwords are not stored as raw passwords, so you can't figure out what their password is." +msgstr "" + +#: ../../features/user-accounts.rst:72 +msgid "The email address is optional." +msgstr "" + +#: ../../features/user-accounts.rst:73 +msgid "This email address is only used to reset their password if they forget it, and has nothing to do with the email address that Tabbycat uses to send emails to tournament participants (*e.g.* private URL links)." +msgstr "" + +#: ../../features/user-accounts.rst:75 +msgid "If they are being assigned superuser and/or staff status, check the relevant boxes." +msgstr "" + +#: ../../features/user-accounts.rst:77 +msgid "Click \"Save\" or \"Save and add another\"." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/features/venue-constraints.po b/docs/locale/ca/LC_MESSAGES/features/venue-constraints.po new file mode 100644 index 00000000000..2d399855dea --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/features/venue-constraints.po @@ -0,0 +1,168 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:08\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/venue-constraints.po\n" +"X-Crowdin-File-ID: 1301\n" +"Language: ca_ES\n" + +#: ../../features/venue-constraints.rst:5 +msgid "Venue Constraints" +msgstr "" + +#: ../../features/venue-constraints.rst:7 +msgid "Tabbycat supports a basic form of venue constraints. A **venue constraint** is a requirement that a particular **team, adjudicator, institution** or **division** be assigned to a venue in a particular **venue category**. Typical uses would include:" +msgstr "" + +#: ../../features/venue-constraints.rst:12 +msgid "Meeting venue accessibility requirements of particular teams (*e.g.* step-free access)" +msgstr "" + +#: ../../features/venue-constraints.rst:14 +msgid "Placing adjudication core and tab team members close to the tab room" +msgstr "" + +#: ../../features/venue-constraints.rst:15 +msgid "Keeping all debates in a division in one location" +msgstr "" + +#: ../../features/venue-constraints.rst:17 +msgid "Constraints apply to **venue categories**, not individual venues. That is, you specify that (say) a team should be given a venue from a particular *list* of venues. Of course, it's permissible for a venue category to have only one venue in it." +msgstr "" + +#: ../../features/venue-constraints.rst:22 +msgid "The algorithm used to satisfy venue constraints is not guaranteed to be optimal. In some rare cases, it may propose an allocation that fails some constraints, even though some other allocation would have satisfied all (or more) constraints. In almost all practical circumstances, however, it should work, and save human effort (and time) in specially allocating rooms." +msgstr "" + +#: ../../features/venue-constraints.rst:29 +msgid "Adding venue categories" +msgstr "" + +#: ../../features/venue-constraints.rst:31 +msgid "Before you add venue constraints, you first need to add venue categories. Each venue category is a list of venues, typically satisfying a particular need. For example, you might have a category for each of the following:" +msgstr "" + +#: ../../features/venue-constraints.rst:35 +msgid "Venues with step-free access" +msgstr "" + +#: ../../features/venue-constraints.rst:36 +msgid "Venues that are close to general assembly (the briefing room)" +msgstr "" + +#: ../../features/venue-constraints.rst:37 +msgid "Venues that are close to the tab room" +msgstr "" + +#: ../../features/venue-constraints.rst:38 +msgid "Venues that are, or venues that are not, being live-streamed" +msgstr "" + +#: ../../features/venue-constraints.rst:40 +msgid "Each venue can be in as many categories as you like (or none at all)." +msgstr "" + +#: ../../features/venue-constraints.rst:44 +msgid "To add or edit venue categories, go to the **Import Data** area (under Setup) then select **Add/Edit Venue Categories**. Note that this page will show all existing Venue Categories first before showing the blank forms that allow you to create new categories. Give your category a name (like \"Step-free access\"), assign it some venues, then click the \"Save Venue Categories\" button at the bottom of the page." +msgstr "" + +#: ../../features/venue-constraints.rst:47 +msgid "Alternately you can add or edit a venue category by going to the **Edit Database** area (under Setup), scroll down to \"Venues\" and click \"Venue categories\". Then click the **+ Add venue category** button in the top-right of the page or click an existing item." +msgstr "" + +#: ../../features/venue-constraints.rst:50 +msgid "Adding venue constraints" +msgstr "" + +#: ../../features/venue-constraints.rst:52 +msgid "To add or edit venue constraints, go to the **Import Data** area (under Setup) then select **Add/Edit Venue Constraints**. Note that this page will show all existing Venue Constraints first before showing the blank forms that allow you to create new categories. Note that the \"Constrainee ID\" field should let you select from a dropdown or type in the name of an adjudicator, institution, or team (rather than having to lookup the exact ID)." +msgstr "" + +#: ../../features/venue-constraints.rst:57 +msgid "Alternately you can add or edit a venue category by going to the **Edit Database** area (under Setup), scroll down to \"Venues\" and click \"Venue constraints\". Then click the **+ Add venue category** button in the top-right of the page or click an existing item." +msgstr "" + +#: ../../features/venue-constraints.rst:59 +msgid "For each constraint, you need to specify four things:" +msgstr "" + +#: ../../features/venue-constraints.rst:62 +msgid "**Category**" +msgstr "" + +#: ../../features/venue-constraints.rst:62 +msgid "The venue category to which the subject of this constraint should be locked." +msgstr "" + +#: ../../features/venue-constraints.rst:65 +msgid "**Priority**" +msgstr "" + +#: ../../features/venue-constraints.rst:65 +msgid "This is a number used to resolve conflicts between constraints. Constraints with higher priority (greater number) take precedence over those with lower priority. If none of your constraints will ever conflict, then the priority is arbitrary (but it must still be specified)." +msgstr "" + +#: ../../features/venue-constraints.rst:72 +msgid "**Subject content** **type**" +msgstr "" + +#: ../../features/venue-constraints.rst:72 +msgid "The type of subject to which this constraint relates: adjudicator, team, institution or division." +msgstr "" + +#: ../../features/venue-constraints.rst:75 +msgid "**Subject ID**" +msgstr "" + +#: ../../features/venue-constraints.rst:75 +msgid "Which adjudicator, team, institution or division the constraint relates to. The textbox takes a number (the ID of the object in the database), but you can search for the subject by clicking on the search icon next to it. This will bring up a table of objects of the type specified in \"subject content type\" for you to choose from. (You need to select the subject content type first.)" +msgstr "" + +#: ../../features/venue-constraints.rst:86 +msgid "Applying venue constraints" +msgstr "" + +#: ../../features/venue-constraints.rst:88 +msgid "If you don't have any venue constraints for adjudicators, venue constraints are applied automatically when the draw is generated." +msgstr "" + +#: ../../features/venue-constraints.rst:91 +msgid "However, if you have one or more venue constraints for adjudicators, it's not possible to take adjudicator venue constraints into account during draw generation, because the adjudicator allocation isn't known then. You'll need to run the venue allocation yourself after you've allocated adjudicators." +msgstr "" + +#: ../../features/venue-constraints.rst:96 +msgid "To run venue allocation, go to **Edit Venues** (while looking at the draw), then in the screen where you can edit venues, click the **Auto Allocate** button. You can also do this at any other point (say, after adding a new venue constraint) if, for whatever reason, you would like to re-run the venue allocation algorithm." +msgstr "" + +#: ../../features/venue-constraints.rst:102 +msgid "If a venue constraint couldn't be met, a message will show in the \"conflicts/flags\" column of the draw. A constraint might not be met for a number of reasons:" +msgstr "" + +#: ../../features/venue-constraints.rst:106 +msgid "It could be that constraints of different parties (say, one team and one adjudicator) conflicted, so only one could be fulfilled." +msgstr "" + +#: ../../features/venue-constraints.rst:108 +msgid "It could be that all available rooms in the relevant category were already taken by other, higher-priority constraints." +msgstr "" + +#: ../../features/venue-constraints.rst:110 +msgid "It could just be one of those edge cases that's too hard for the naïve algorithm to handle." +msgstr "" + +#: ../../features/venue-constraints.rst:113 +msgid "Currently, Tabbycat doesn't tell you which of these happened, so if the venue allocation fails to meet all your constraints, it's on you to figure out why. In most scenarios, we imagine you'll have few enough constraints that this will be obvious; for example, if the chief adjudicator is judging a team with accessibility requirements, it might be obvious that the latter's constraint took priority. We might in future add support for more useful guidance on conflicting constraints, but we currently consider this to be of low priority." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/guide/comparisons.po b/docs/locale/ca/LC_MESSAGES/guide/comparisons.po new file mode 100644 index 00000000000..061d88acf3c --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/guide/comparisons.po @@ -0,0 +1,338 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-04-05 21:07\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/comparisons.po\n" +"X-Crowdin-File-ID: 1303\n" +"Language: ca_ES\n" + +#: ../../guide/comparisons.rst:5 +msgid "Tab Software Comparisons" +msgstr "" + +#: ../../guide/comparisons.rst:7 +msgid "If you're reading this, you're probably interested in using Tabbycat, and wondering how it compares to other options. Perhaps you're a long-time user of another tab system, and wondering what Tabbycat can do better. This page is our effort to help answer this. Tabbycat's been around since 2010, but since BP support is a recent addition (2017), we thought it would be useful to outline the differences between Tabbycat and other BP software." +msgstr "" + +#: ../../guide/comparisons.rst:9 +msgid "Obviously, this page is written by the developers of Tabbycat, and naturally, we have our biases. But rarely is there a single best option for everyone and every situation: different tab programs imagine the tabbing process in a different ways and have made unique trade-offs in their development process and design decisions. So we've tried to be as fair and accurate as we can, and we've consulted experienced tab directors (other than us!) and chief adjudicators to help provide a balanced overview." +msgstr "" + +#: ../../guide/comparisons.rst:11 +msgid "At present, this guide just focuses on the major options available for the British Parliamentary format, although we'd like to expand this to incorporate the other formats that Tabbycat supports at some point in the future. As with all of our documentation, the source for this page `is on GitHub `_, and we welcome feedback and contributions." +msgstr "" + +#: ../../guide/comparisons.rst:14 +msgid "On feature lists" +msgstr "" + +#: ../../guide/comparisons.rst:16 +msgid "In the first draft of this document, we had a table that listed every feature we could think of, along with which software does and doesn't support it. This ended up not being a great idea, for a couple of reasons." +msgstr "" + +#: ../../guide/comparisons.rst:18 +msgid "Firstly, the largest feature disparities are for relatively niche features. All of the software discussed can do the basics necessary to run a tournament: generate draws, allocate adjudicators, enter results, etc. As a result, we will — like a good whip speech — be comparative and note key feature disparities when discussing each alternative software directly." +msgstr "" + +#: ../../guide/comparisons.rst:20 +msgid "Secondly, we felt that the 'checklist' approach to comparing tab software would do a disservice to the reasons you would actually choose one software over another. Except where a niche capability is essential, raw technical specifications rarely define the experience of using a product such as a phone, a car, or indeed, tabbing software. With Tabbycat, we've spent eight years continuously refining the tabbing workflow and smoothing out rough edges, and we believe you'll find the result extremely user-friendly and robust. As always, the best way to check this out is by :ref:`setting up a demo site and taking it for a spin `!" +msgstr "" + +#: ../../guide/comparisons.rst:23 +msgid "Comparison with Tabbie2" +msgstr "" + +#: ../../guide/comparisons.rst:26 +msgid "Centralised site vs individual sites" +msgstr "" + +#: ../../guide/comparisons.rst:28 +msgid "Tabbie2 and Tabbycat are both internet-based systems. Tabbie2 hosts all tournaments on a single site. However, when using Tabbycat, each tournament or organisation sets up its own site. Each model has its advantages and disadvantages in different areas:" +msgstr "" + +#: ../../guide/comparisons.rst:30 +msgid "**User identification**. Tabbie2's centralised model allows for site-wide user accounts for all tournament participants. This means that they can use the same login information for all tournaments, and perform tasks such as submitting ballots and feedback through that unified account. If you're in an established circuit, most of your participants probably already have user accounts which are identified and collected (via e-mail addresses) during registration. If you're in a newer circuit, or one where Tabbie2 is rarely used, most of your participants will probably need to create an account — a process which Tabbie2 handles by e-mailing them a request to do so when that person is added to your tournament." +msgstr "" + +#: ../../guide/comparisons.rst:32 +msgid "In Tabbycat's decentralised model, there is no persistent 'account' for tournament participants on each tab site or across different tab sites. Indeed, the only people who can log in to the site are those who have been given accounts by the tab director, such as tab staff and members of the adjudication core." +msgstr "" + +#: ../../guide/comparisons.rst:34 +msgid "For secure e-ballot and e-feedback submissions, Tabbycat assigns a \"private URL\" to each adjudicator or team. This is essentially a password that allows a participant to only submit data that they should have access to in that specific tournament. This means participants don't need user accounts and you don't need to collect user account information; however if your tournament uses e-ballots or e-feedback you will need to distribute those private URLs to participants. Tabbycat can e-mail these to participants for you, or print them to give them to participants, or you could distribute the URLs using your own means." +msgstr "" + +#: ../../guide/comparisons.rst:36 +msgid "**Control over data**. Some participant information in Tabbie2 is shared between tournaments, like their names and conflicts (discussed below). This means participants can manage it directly through their user accounts, without needing to go through you. On the other hand, this requires your participants to co-operate in keeping their accounts up to date, and to provide the correct e-mail address during registration (you'd be surprised how many don't). Furthermore, participants may look to you for assistance, and your ability to help is limited to directing them through Tabbie2 channels—easy enough if they forget their password, but not so much if they forget their account's e-mail address." +msgstr "" + +#: ../../guide/comparisons.rst:38 +msgid "Because each Tabbycat site is its own, you'll need to collect and import all participant details yourself. This might seem like more to do, but it also means there's no need to match your data to existing accounts, which can be time-consuming and prone to participant error. It also means you can freely change data, for example, to correct a participant's name or institution, or to add data like conflicts on an ad-hoc basis." +msgstr "" + +#: ../../guide/comparisons.rst:40 +msgid "**Data privacy**. Conflicts are typically entered into the tab, and are sensitive information. Tabbie2's centralisation allows for conflicts to be self-nominated by users and stored in their user accounts. This, in theory, saves the need for users to report conflicts to tab directors and other tournament staff. In practice, however, only special \"super\" users on Tabbie2 have access to the stored conflicts of users (otherwise anyone could access a user's conflicts by creating a new tournament and adding that user as a participant), so many tournaments need to collect this information from participants anyway." +msgstr "" + +#: ../../guide/comparisons.rst:42 +msgid "Tabbycat's decentralised model means that no-one will have access to conflict information except for the tab staff of each individual instance of Tabbycat. Unlike Tabbie2, Tabbycat's developers do not have any access to your tournament's data — conflicts or otherwise. However, to help us continually improve the software, Tabbycat does send error reports to its developers if there is a serious bug or crash in the code, which could potentially contain confidential information depending on which page triggered the report. As a result of Tabbycat's decentralised data storage, each tournament does need to collect and enter conflicts as part of their registration process." +msgstr "" + +#: ../../guide/comparisons.rst:44 +msgid "**When things go wrong**. In our view, this is probably the most important factor. Obviously, we all hope you never have to fix things. But no software is perfect, and software developed by volunteers in their spare time (as both Tabbie2 and Tabbycat are) is especially imperfect. On occasion, glitches or edge cases occur, and fixing them requires you to directly edit the offending data in the database. Being able to do this without assistance can be the difference between a delay of minutes and a delay of hours." +msgstr "" + +#: ../../guide/comparisons.rst:46 +msgid "In Tabbycat, because it's your site, you have full control of the database, and can edit it through Tabbycat's \"Edit Database\" area. This allows you to fix things (or break things, if you're not careful!). Tabbie2's centralisation prevents this—for obvious reasons, only Tabbie2's developers have direct database access, which makes their intervention necessary if direct database access is required to resolve a problem." +msgstr "" + +#: ../../guide/comparisons.rst:49 ../../guide/comparisons.rst:138 +msgid "Running your tournament" +msgstr "" + +#: ../../guide/comparisons.rst:51 +msgid "Tabbie2 and Tabbycat have broadly similar workflows for running rounds; at least on paper. Key differences are discussed below:" +msgstr "" + +#: ../../guide/comparisons.rst:53 +msgid "**Data import**. Tabbie2 takes CSV files for import. Tabbycat has a CSV file importer, but it's (for now) only accessible through a command-line interface and is only expected to be used for large tournaments by experienced tab directors. As a more user-friendly alternative, Tabbycat also has an import wizard that's designed to make it easy to copy and paste CSV data. This works well for small and medium scale tournaments, but is cumbersome for large ones." +msgstr "" + +#: ../../guide/comparisons.rst:55 +msgid "**Public interface**. Tabbycat can optionally publish the entire draw, as well as current team point standings and results of previous rounds, online. Tabbie2 shows to a logged-in user information about the debate that user is in for that round, but doesn't allow people to check up on people who are not themselves." +msgstr "" + +#: ../../guide/comparisons.rst:57 +msgid "**Position rotation**. Tabbie2 uses an algorithm known as the \"Silver Line algorithm\", which keeps swapping pairs of teams until no further improvement is found. Because it stops at any 'local optimum', this method isn't guaranteed to be the best possible distribution of positions, and for large tournaments it often isn't. Tabbycat instead uses the `Hungarian algorithm `_, an well-known algorithm that finds the (globally) optimal allocation of positions. (One might describe this algorithm, in technical terms, as 'powerful'.) Tabbycat also produces a position balance report, so that in every round you can see which teams have unbalanced position histories." +msgstr "" + +#: ../../guide/comparisons.rst:59 +msgid "**Venue allocations**. Both Tabbie2 and Tabbycat allow for debate venues to be automatically assigned and manually edited. Tabbycat also allows you to specify 'venue constraints' that can automatically match particular participants with their accessibility requirements, or alternatively allow for tournament staff, such as a convenor or chief adjudicator, to be allocated rooms close to the briefing hall or tab room." +msgstr "" + +#: ../../guide/comparisons.rst:61 +msgid "**Ballot entry**. Both Tabbie2 and Tabbycat support entering ballots online ('e-ballots') and entering ballots from paper from the tab room. Tabbie2 was built with e-ballots in mind, while Tabbycat was originally built for tab room staff, and the ballot entry paradigms reflect that. Both are flexible, just a little different—the best way to understand the difference is to try a demo of each. Also, Tabbycat takes note of the order in which speakers in a team spoke (i.e. who was PM and who was DPM), whereas Tabbie2 just records scores." +msgstr "" + +#: ../../guide/comparisons.rst:63 +msgid "As discussed earlier in *User identification*; Tabbie2's e-ballots are tied to unified user accounts, whereas Tabbycat's e-ballots are tied to per-tournament and per-adjudicator 'private URLs'." +msgstr "" + +#: ../../guide/comparisons.rst:65 +msgid "**Break and speaker categories**. Tabbie2 has ESL, EFL and novice markers, which you can enable in a tournament's settings. Tabbycat supports user-defined break and speaker categories, so if your tournament has ESL, EFL, novice or any other form of category, you can define and customise those categories as needed." +msgstr "" + +#: ../../guide/comparisons.rst:67 +msgid "**Adjudicator allocation algorithm**. Both Tabbie2 and Tabbycat use an algorithm to recommend an initial allocation of adjudicators to debates. In principle, they both work by assigning \"costs\" to allocations, and trying to find the minimum-cost assignment. Some notable differences:" +msgstr "" + +#: ../../guide/comparisons.rst:69 +msgid "Tabbie2 uses simulated annealing, which is not guaranteed to be optimal and technically needs to be tuned to be effective (which you're probably not doing). Tabbycat uses the Hungarian algorithm, which guarantees an optimal solution." +msgstr "" + +#: ../../guide/comparisons.rst:70 +msgid "On the other hand, the Hungarian algorithm can't account for relationships between adjudicators on a panel, so adjudicator-adjudicator conflicts aren't considered by Tabbycat's algorithm (though they are highlighted in the interface)." +msgstr "" + +#: ../../guide/comparisons.rst:71 +msgid "Tabbycat's cost function is simpler and more naive. On the other hand, Tabbie2's is more complicated and can be rather opaque (even if you read its source code)." +msgstr "" + +#: ../../guide/comparisons.rst:72 +msgid "Tabbie2 allows for single-gender panels to be charged an additional cost. Tabbycat's algorithm doesn't, but the interface does provide a way to easily check for this visually." +msgstr "" + +#: ../../guide/comparisons.rst:73 +msgid "Tabbie2 automatically calculates the importance of a room based on its bracket (team points). In Tabbycat, debate importance can be assigned for all debates automatically based on on a room's bracket or the quantity of live break categories inside it. Instead of — or subsequent to — automatic classification any importance value can be manually tweaked as desired. These options mean there is a greater flexibility in determining which debates the allocation algorithm should prioritise." +msgstr "" + +#: ../../guide/comparisons.rst:75 +msgid "**Adjudicator allocation interface**. While both interfaces use drag and drop interactions, and allow for color highlights to help identify adjudicators by gender, region, and feedback rating, Tabbycat's allocation interface was designed to be usable on both small screens and projectors, and has a number of extra features that can help inform allocations. These features include:" +msgstr "" + +#: ../../guide/comparisons.rst:77 +msgid "Clashes are shown directly in the interface when they apply, but dragging an adjudicator will also show you the potential conflicts that would occur if they were relocated in a new panel. This can make it much easier to avoid creating new clashes when shifting adjudicators around the draw." +msgstr "" + +#: ../../guide/comparisons.rst:78 +msgid "An inline display of an estimate of whether a team is 'live' for each of their break categories — i.e. whether they are 'safe' (have enough points to break); 'dead' (cannot gain enough points to break); or 'live' (still in contention)." +msgstr "" + +#: ../../guide/comparisons.rst:79 +msgid "'History' conflicts (where an adjudicator has seen a team before, or previously was on a panel with another judge) are displayed so they can be avoided." +msgstr "" + +#: ../../guide/comparisons.rst:80 +msgid "Each adjudicator is present as occupying a particular position (chair, panellist, trainee) rather than having those positions calculated automatically." +msgstr "" + +#: ../../guide/comparisons.rst:81 +msgid "Chairs can be 'swapped' by dragging adjudicators on top of each other, and an 'unallocated' area can be used to view and store adjudicators that have not been allocated." +msgstr "" + +#: ../../guide/comparisons.rst:83 +msgid "**Adjudicator feedback customisation**. Both Tabbie2 and Tabbycat have built-in adjudicator feedback forms, and allow you to specify the questions on the feedback form. Notable differences:" +msgstr "" + +#: ../../guide/comparisons.rst:85 +msgid "Setting up questions is painless on neither system. Tabbycat requires you to use the Edit Database area; Tabbie2 makes you click through a slightly more opaque maze of pages and forms." +msgstr "" + +#: ../../guide/comparisons.rst:86 +msgid "Tabbycat allows for a richer range of types of questions than Tabbie2 does." +msgstr "" + +#: ../../guide/comparisons.rst:87 +msgid "Tabbie2 allows you to specify different questionnaires for team-on-chair, chair-on-panellist and panellist-on-chair. Tabbycat only differentiates between team-on-adjudicator and adjudicator-on-adjudicator." +msgstr "" + +#: ../../guide/comparisons.rst:88 +msgid "Tabbycat gives you more control over who is expected to submit feedback on whom; e.g. whether teams submit on panellists, and whether panellists submit on each other. In Tabbie2, you can effect this with blank questionnaires, but only for the three options listed above." +msgstr "" + +#: ../../guide/comparisons.rst:89 +msgid "Tabbycat can, optionally, automatically incorporate feedback into adjudicator scores using a naive weighted average with the adjudicator base score. This can be disabled by simply setting feedback weight to zero, as some adjudication cores prefer. Tabbie2 has no ability to automatically incorporate feedback." +msgstr "" + +#: ../../guide/comparisons.rst:90 +msgid "Tabbycat produces a \"shame list\" of unsubmitted feedback, which you can optionally publish on the public-facing site to try to incentivise submission." +msgstr "" + +#: ../../guide/comparisons.rst:92 +msgid "(How participants access adjudicator feedback submission is discussed in *User identification* above.)" +msgstr "" + +#: ../../guide/comparisons.rst:95 ../../guide/comparisons.rst:149 +msgid "Other considerations" +msgstr "Altres consideracions" + +#: ../../guide/comparisons.rst:97 +msgid "**Offline availability**. If you like, you can also install Tabbycat on your own computer, rather than host it as website on a server. This means that you can use it offline. However installing Tabbycat in this manner will require the (at least brief) use of a command line interface." +msgstr "" + +#: ../../guide/comparisons.rst:99 +msgid "**Cost**. Tabbie2 is free to use. Tabbycat is free to use for not-for-profit, not-for-fundraising tournaments; tournaments for profit or fundraising must make a donation of A$1 per team. In addition, larger tournaments that run on Tabbycat's recommended web host (Heroku) may need to purchase an upgraded database service (the free tier has storage limits) which will cost around ~US$3 to use for the duration of a week-long tournament." +msgstr "" + +#: ../../guide/comparisons.rst:101 +msgid "**Documentation**. Tabbycat has `relatively extensive documentation `_ that can be useful for learning how to use a particular feature or understanding what is happening at a technical level." +msgstr "" + +#: ../../guide/comparisons.rst:103 +#, python-format +msgid "**Hosting location**. Tabbycat recommends using Heroku, an established cloud platform service for deploying web applications. Heroku is in turn hosted on Amazon Web Services (AWS). Both Heroku and AWS are highly reliable and widely used; downtime for both has historically been (at worst) less than 0.05% over an annual period. Tabbie2 is hosted on `Uberspace `_; a pay-what-you-want web hosting service. To the best of our knowledge, uptime statistics are not available." +msgstr "" + +#: ../../guide/comparisons.rst:105 +msgid "**Multi-format support**. If you are interested in tabbing both four- and two- team formats there may be some value in using and learning Tabbycat as it will let you use the same software in both settings." +msgstr "" + +#: ../../guide/comparisons.rst:108 +msgid "Comparison with Tournaman" +msgstr "" + +#: ../../guide/comparisons.rst:111 +msgid "Native app vs web app" +msgstr "" + +#: ../../guide/comparisons.rst:113 +msgid "The crucial strength — and limitation — of Tournaman is that it is a Windows desktop application. Naturally, being a desktop app limits the features it can offer, relative to web apps like Tabbycat or Tabbie2, since it can't offer any online access. On the other hand, working with a desktop app can often be simpler than a web app." +msgstr "" + +#: ../../guide/comparisons.rst:115 +msgid "**Installation**. You'll need to run (or emulate) a Windows machine to run Tournaman. Assuming you're using Windows, Tournaman's installation process is easy and familiar." +msgstr "" + +#: ../../guide/comparisons.rst:117 +#, python-format +msgid "Tabbycat has a simple one-click installation process if you're deploying online (:ref:`to Heroku `). However, if you want to run Tabbycat on your own computer rather than a website, this is substantially more complicated. Local installations of Tabbycat work by having your computer emulate a web server, and while we've tried to make this as accessible as possible, a technical background is definitely helpful for this. Using our :ref:`Docker-based method ` should be simple, but it's not 100% reliable, and if it fails it can be difficult to figure out why. If internet access is available, we recommend running Tabbycat on Heroku." +msgstr "" + +#: ../../guide/comparisons.rst:119 +msgid "**Online features**. Because Tournaman runs fully offline, it naturally can't support many internet-based features: electronic ballots, online publication of draws and live team standings, and integrated tab release. Typically, if you wanted to publish anything online from Tournaman, you'd do so by publishing the files that Tournaman generates locally. In Tabbycat, all of these are built in, so there's a single website for all tab information." +msgstr "" + +#: ../../guide/comparisons.rst:121 +msgid "**Multi-user access**. Tournaman can be configured to allow networked ballot entry, but in order to set it up, you need to be comfortable with basic computer networking. This works best on small isolated networks that you control directly, e.g. a dedicated router set up in the tab room. It's not a great idea to set this up on computers connected to a university-wide network: many IT departments won't permit it, and even if they do, it's insecure, since anyone on the network can access it." +msgstr "" + +#: ../../guide/comparisons.rst:123 +msgid "Tournaman's multi-user access is designed primarily to allow tab assistants to enter data. Key administrative tasks, such as draw generation and adjudicator allocation, must still be done on the computer on which Tournaman is installed. In contrast, web-based systems like Tabbycat and Tabbie2 allow users to login from any internet-connected device to access the functionality permitted by their account. This is often extremely useful if, say, you want to log in to a lectern computer, or have tab assistants work on mobile devices that they have with them." +msgstr "" + +#: ../../guide/comparisons.rst:125 +msgid "If you choose to install Tabbycat offline (rather than on Heroku), it's also possible to have the computer on which the local installation resides serve the website to other computers on the same network. This then permits anyone on the same network to access the \"local\" installation as if it were hosted on the internet. However, like Tournaman, such a configuration requires at least basic networking experience, and for security reasons is only advisable on small isolated networks that you control." +msgstr "" + +#: ../../guide/comparisons.rst:127 +msgid "**Backups and portability**. Both Tournaman and Tabbycat (unlike Tabbie2) store data in a way that is completely accessible to you. Tournaman does this by saving files on your computer's hard drive, while Tabbycat stores data in a SQL database that belongs to you." +msgstr "" + +#: ../../guide/comparisons.rst:129 +msgid "It should be emphasized that in both Tournaman and Tabbycat, actually needing to revert to a backup is extremely rare. Almost always, any glitch or error that breaks the tab can be resolved by editing data directly, without needing to \"roll back\" to a previous state. In Tournaman, this is done by editing the files that it writes to your hard drive (they're just XML files). In Tabbycat, this is done through the \"Edit Database\" area." +msgstr "" + +#: ../../guide/comparisons.rst:131 +msgid "Tournaman's storage of data as XML files makes backups easy, although effort should be made to have backups stored on other computers or the cloud (e.g. on Dropbox) in case the tab computer breaks or is lost. Restoring data from those backups (or transferring the tab to a different computer) is typically a simple process of copying the files back to the original location." +msgstr "" + +#: ../../guide/comparisons.rst:133 +msgid "As for Tabbycat, in online installations, backups can be taken easily using Heroku's `database backup capability `_. However, restoring backups requires you to have the Heroku command line interface installed. In offline installations, PostgreSQL's \"dump\" and \"restore\" commands are recommended, and may require some perseverance to get going reliability, particularly if you don't have prior SQL experience." +msgstr "" + +#: ../../guide/comparisons.rst:135 +msgid "Generally there is no need for data portability when working with an online copy of Tabbycat — the website can be accessed anywhere. However if working with an offline/local copy, a tab can be transferred between machines by creating a backup of the database and restoring it to the other machine's database (doing so requires technical knowledge)." +msgstr "" + +#: ../../guide/comparisons.rst:140 +msgid "**Adjudicator feedback**. Tournaman lets you assign judges rankings, however it does not directly manage or assist the process of collecting judge feedback. As such tab directors generally need to run a parallel feedback system, and then manually copy over changes to an adjudicator's ranking into Tournaman itself. In contrast, Tabbycat has integrated methods for collecting judge feedback that allow it to be more easily issued, collected, viewed, and automatically translated into modifications to an adjudicator's rank." +msgstr "" + +#: ../../guide/comparisons.rst:142 +msgid "**Adjudicator allocation**. Tournaman has a fixed judge ranking scale and (from what we understand) has a relatively fixed procedure for allocating panels according to their absolute ranks. We are unsure about the exact mechanics of how this works, but broad details are `available here `_." +msgstr "" + +#: ../../guide/comparisons.rst:144 +msgid "As with the discussion of allocation interfaces vis-à-vis Tabbie2, there are a number of features in the Tabbycat allocation interface that mean it is more easily used in a collaborative setting and can display additional information to inform draws." +msgstr "" + +#: ../../guide/comparisons.rst:146 +msgid "**Flexibility in draw rules**. As we've said, all major tab systems are WUDC-compliant. But if you want to deviate from WUDC rules, Tournaman has a few more options. Whereas Tabbycat allows you to use intermediate brackets (rather than pull-ups), Tournaman allows you to sacrifice power-pairing integrity for position balance (though this generally isn't necessary to achieve position balance), fold within brackets and avoid teams hitting their own institution. On the other hand, Tabbycat allows you to tune how position balance trades off between teams (which the WUDC constitution doesn't precisely specify)." +msgstr "" + +#: ../../guide/comparisons.rst:151 +msgid "**Stability and development**. Tournaman has been in use for over a decade and is generally considered to be stable and reliable. However, new features are relatively rarely added, and its being a native app means that it doesn't boast as many features as Tabbycat or Tabbie2." +msgstr "" + +#: ../../guide/comparisons.rst:153 +msgid "**Cost**. Tournaman is free to use. Tabbycat is free to use for not-for-profit, not-for-fundraising tournaments; tournaments for profit or fundraising must make a donation of A$1 per team. In addition, larger tournaments that run on Tabbycat's recommended web host (Heroku) may need to purchase an upgraded database service (the free tier has storage limits) which will cost around ~US$3 to use for the duration of a week-long tournament." +msgstr "" + +#: ../../guide/comparisons.rst:155 +msgid "**Availability of source code**. Tournaman's code is closed-source, meaning it is not publicly available. If you do not have any coding experience this is probably not relevant to you, but if you do, having access to the source of Tabbycat can help you understand how the program works and customise it as needed." +msgstr "" + +#: ../../guide/comparisons.rst:158 +msgid "Comparison with hand tabbing" +msgstr "" + +#: ../../guide/comparisons.rst:160 +msgid "Hand tabbing is easy, until it isn't. Traditionally, using a spreadsheet has been the go-to option for smallish tournaments because, hey, you're pretty handy with Excel, right? Making draws in spreadsheets (or on paper) seems like a pretty approachable task; ultimately it's all cells and formulae and numbers unlike the more arcane underpinnings of actual tab software." +msgstr "" + +#: ../../guide/comparisons.rst:162 +msgid "However, hand tabbing does require you to have a good working knowledge of how your format's rules work and how your spreadsheet software of choice can be made to work them. That process might be easy for you, or it might not be. But, either way, we'd like to think that Tabbycat offers a better alternative to hand-tabbing; regardless of how well you can actually hand-tab. The setup costs of creating a copy of Tabbycat are pretty low and you can speed through the process of draw creation, adjudicator allocation, and result entry at a pace. It's still not going to be as fast a spreadsheet for a small tournament, but we think it's getting pretty close. And in exchange for a little speed you get a much stronger guarantee of your draws being correct, options for online data entry, a more comprehensive and shareable final tab, and much more. Give it a shot!" +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/guide/scaling.po b/docs/locale/ca/LC_MESSAGES/guide/scaling.po new file mode 100644 index 00000000000..4b67cd1a8c2 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/guide/scaling.po @@ -0,0 +1,252 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:08\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/scaling.po\n" +"X-Crowdin-File-ID: 1305\n" +"Language: ca_ES\n" + +#: ../../guide/scaling.rst:5 +msgid "Scaling & Performance on Heroku" +msgstr "" + +#: ../../guide/scaling.rst:7 +msgid "If you expect your Tabbycat site to gain lots of traffic — either because it has lots of participants or will be followed by lots of people online — there are a number of strategies to ensure that it will remain fast despite this attention. This is typically only necessary for very large tournaments that will display information on the public-facing version of your Tabbycat site; and even then only minor amounts of 'scaling' are needed at particular moments. However, if your site does become slow you want to know what to do and how to do it ahead of time in order to prevent disruptions." +msgstr "" + +#: ../../guide/scaling.rst:9 +msgid "By default, a Tabbycat installation runs on Heroku's free tier. This is a resource-constrained environment and improving performance will typically require paying for higher levels of Heroku services. These services are billed on a per-minute (not monthly) basis, meaning that if you make use of any upgrades mentioned below, you will only be billed for the actual duration used — i.e. if an upgrade is listed at $100/month, but you only use it for 4 hours, the final bill will be around $0.50. As such you can make use of high-performing resources just when they are needed, without needing to pay the full monthly price to maintain the resource indefinitely." +msgstr "" + +#: ../../guide/scaling.rst:13 +msgid "This page was largely written before a number of improvements in the ``2.2`` release of Tabbycat that have significantly increased traffic capacity. Its recommendations may be overly cautious given these improvements." +msgstr "" + +#: ../../guide/scaling.rst:17 +msgid "Scaling for performance reasons is a separate issue to that of `upgrading the database capacity `_ of your tab which just provides the ability to store data. That said, typically only tournaments that are large enough to need an upgraded database will be the ones that ever need to consider scaling for performance anyway." +msgstr "" + +#: ../../guide/scaling.rst:20 +msgid "Introduction to Scaling" +msgstr "" + +#: ../../guide/scaling.rst:22 +msgid "Heroku's primary resource is that of a 'dyno'. Each dyno can be thought of as running a copy of Tabbycat. Following the 'many hands make light work' principle, running a greater number of dynos will generally improve the ability of your site to serve lots of pages simultaneously because traffic is divided up amongst all of the available dynos. In normal circumstances most Tabbycat pages on the public site are served by Heroku in under a second; however they can take noticeably longer than that when the quantity of incoming traffic exceeds the capacity of the existing dyno(s) to serve it. In such cases the delay accrues because the excess page loads need to first wait for an available dyno in addition to the standard wait for a page to be processed and transferred to the user." +msgstr "" + +#: ../../guide/scaling.rst:24 +msgid "Thus scaling is almost always a process of increasing *throughput* in order to decrease the chance that any page load needs to wait in order to be served by a dyno. On the flip side, having extra dynos or upgraded dynos won't make Tabbycat itself run any faster in general — they are essentially wasted unless there is sufficient large amounts of traffic that a single dyno cannot serve all of it without creating a queue." +msgstr "" + +#: ../../guide/scaling.rst:26 +msgid "Dynos can be scaled by adding more dynos ('horizontally') or by adding upgraded dynos ('vertically'). In general, horizontal scaling should be the first and most effective strategy — the problem traffic causes is due to *concurrency* or lots of people loading lots of pages all at once. The traffic on Tabbycat sites typically fluctuates a lot, with moments of high intensity clustering around draw releases, round advances, and the final tab release. As such you generally only need to scale your dynos for very short periods of time." +msgstr "" + +#: ../../guide/scaling.rst:28 +msgid "In order to increase the number of dynos you first need to be using at least the **Standard 1X** level of dyno. Once set the Heroku Dashboard will show you a slider that can be used to increase the dyno count. While dynos higher than the **Standard 1X** level may help serve pages a tiny bit faster, having *more* dynos is far more effective than having *upgraded* dynos. Upgrading beyond **Standard 1X** is generally only required if you need additional memory (as described below) or want to use auto-scaling (also described below)." +msgstr "" + +#: ../../guide/scaling.rst:32 +msgid "There should be no need to increase the number of 'worker' dynos. While 'web' dynos are responsible for serving traffic, the worker only handles a few rare tasks such as serving email and creating allocations." +msgstr "" + +#: ../../guide/scaling.rst:34 +msgid "At large tournaments you should always upgrade your existing '**Free**' dyno to a '**Hobby**'-level dyno. This upgrade is crucial as it will enable a \"Metrics\" tab on your Heroku dashboard that provides statistics which are crucial to understanding how your site is performing and how to improve said performance. If you are at all unsure about how your site will perform it is a good idea to do this pre-emptively and keep an eye on these metrics over the course of the tournament." +msgstr "" + +#: ../../guide/scaling.rst:38 +msgid "If pages are not loading it could be due to two things: your site being overloaded with traffic, or a bug in Tabbycat itself. Generally, if you see a generic or Heroku-branded 'application error' page that means it is the former problem, whereas a Tabbycat-branded page indicates the latter." +msgstr "" + +#: ../../guide/scaling.rst:41 +msgid "Scaling Dynos" +msgstr "" + +#: ../../guide/scaling.rst:43 +msgid "Once you have upgraded your dyno to the **Hobby** level, the metrics tab provides a number of graphs that can be used to help identify how your site is performing. The first graph, **Events** provides an overview of any problems that are occurring:" +msgstr "" + +#: ../../guide/scaling.rst:47 +msgid "Red marks, or those labelled *Critical* typically indicate some sort of problem. H13 errors are a good measure of the amount of pages failing to load during heavy traffic, however they can be triggered under normal conditions — you want to check how many are occurring within a given time period and ensure its more than a handful." +msgstr "" + +#: ../../guide/scaling.rst:50 +msgid "Response Time & Throughput" +msgstr "" + +#: ../../guide/scaling.rst:54 +msgid "The response time is the amount of time it takes a dyno to load a page and serve it to your users. Smaller response times are thus good, and long response times (over fifteen seconds) indicate that a site is struggling to serve its content due to a large amount of queueing." +msgstr "" + +#: ../../guide/scaling.rst:56 +msgid "Heroku dynos have a maximum response time of 30 seconds, at which point they will stop serving the request. To users this appears as an error page or as a page that never loads. Thus if you see the graph is at or approaching 30 seconds at any point you need to try and diagnose what is causing this and add more resources to reduce the response time." +msgstr "" + +#: ../../guide/scaling.rst:60 +msgid "You can toggle the percentiles in this graph. Problems are much more severe if it affects the 50th percentile which represents a site that is probably not loading for the majority of its users. There are also a couple of Tabbycat functions (like automatic adjudicator allocation) that naturally take 10-20 seconds which means that the maximum or 99th percentile metrics are not very reflective of general traffic." +msgstr "" + +#: ../../guide/scaling.rst:62 +msgid "Closely related to this is the **Throughput** graph (further down) which shows how many pages your site is serving per second. Normally this is not particularly interesting, however note that the red part of the bar graph shows the amount of failed page requests. Like the **Response Time** graph, this can indicate issues with the site — normally this red portion should be well below 1rps (and ideally 0rps). If it is above 0.5 it represents a site that is producing a significant number of failed page loads." +msgstr "" + +#: ../../guide/scaling.rst:64 +msgid "You can verify if pages are not being served to users by checking the **Events** graph and looking for H12 errors, although occasionally they are not reported properly. A large amount of H13 errors can also be a cause for concern." +msgstr "" + +#: ../../guide/scaling.rst:67 +msgid "Dyno Load" +msgstr "" + +#: ../../guide/scaling.rst:71 +msgid "This graph shows how well your dynos are being utilised. It is scaled relative to the total number of dynos you are running (or have run previously). So if you have 10 dynos and the bar graph is near the '10' this shows that each dyno is being utilised 100% (either on average over a 1-minute period or as the maximum use over a 1-minute period)." +msgstr "" + +#: ../../guide/scaling.rst:73 +msgid "If this bar graph is hitting the top it will usually mean that a site that is slow or failing to load pages — if each dyno is busy it can't serve a new page until it is finished. This issue can often compound, with more traffic coming in than it is possible to serve and clear." +msgstr "" + +#: ../../guide/scaling.rst:75 +msgid "If your average, rather than maximum, dyno load is approaching the upper limit of however many dynos you are running now (remember the y-axis will often exceed however many dynos you are currently running) that is a very good sign that you should increase the quantity of dynos being run. Continue adding dynos and evaluate how this effects load so that the bar is not hitting its limit." +msgstr "" + +#: ../../guide/scaling.rst:77 +msgid "If you are consistently needing to scale things (or having previously had issues and are expecting a very heavy burst of traffic) it may be worth upgrading to the **Performance-M** dyno type, which will then allow you to enable the *Auto-scaling* feature. This will automatically add dynos as needed to cope with traffic, and remove them when they become unnecessary. This is very effective; however, note that this dyno-type is $250/month per dyno and will self-add dynos (within an upper limit you can specify). While this is not a huge price on a per hour/minute basis (even running 10 for an hour is only $4) you definitely want to ensure you keep a close eye on it and turn it off when it is not necessary. Note that it also tends to be quite aggressive in how many dynos it 'thinks' you need — you may want to increase the default response time threshold to prevent it scaling so quickly." +msgstr "" + +#: ../../guide/scaling.rst:80 +msgid "Memory Usage" +msgstr "" + +#: ../../guide/scaling.rst:84 +msgid "It is very rare that Tabbycat sites will hit the memory limits of the Free or Hobby level dynos — its almost always hovering around 256MB of the (standard dyno) limit of 512MB. However, if the graph is approaching the dashed line you may want to first restart the dynos (in the *More* dropdown in the upper-right) and see if that resolves it." +msgstr "" + +#: ../../guide/scaling.rst:86 +msgid "You can also confirm that memory limits are causing the app to fail by checking for the presence of R14 errors in the Events chart. If your site continues to come very close to that memory limit you will want to upgrade your dynos to the higher level dynos which have increased memory." +msgstr "" + +#: ../../guide/scaling.rst:89 +msgid "Alerts" +msgstr "" + +#: ../../guide/scaling.rst:91 +msgid "If the site is really struggling to perform its usually relatively obvious. However, if you want to be pre-warned of this, or just ensure things are as fast as possible, you can use the \"Configure Alerts\" feature on the Metrics page to receive emails when things are getting slow. We would recommend creating a Response Time Threshold warning of ``15000ms`` and a Response Requests Percentage Threshold of ``5%``." +msgstr "" + +#: ../../guide/scaling.rst:94 +msgid "Understanding Caching" +msgstr "" + +#: ../../guide/scaling.rst:96 +msgid "When a page is 'cached' it means that Tabbycat has stored a copy of the final output of the page. It can then send that copy directly to a user who is loading that page without needing to go through the normal process of fetching the data from the database, running any calculations, and formatting the results. Pages that are cached will serve quickly — if a page is taking more than a few seconds to load it usually means that page has not been cached (or your site is having too much traffic to serve pages quickly in general). The downside is that changes to the underlying data won't update until the cache has 'expired' and is regenerated. So, for example, a cached copy of the draw will not immediately reflect change to panels and a newly-release motion or tab page will not show up in the menu immediately." +msgstr "" + +#: ../../guide/scaling.rst:98 +msgid "By default Tabbycat caches public pages according to three levels: a 1-minute timeout, a 3.5-minute timeout, and a 2-hour timeout. The only pages on the 2-hour timeout are those that come with a full tab release — such as speaker standings, the motions tab, etc. Public pages that need to update quickly, such as the draw and homepage, are on the 1-minute timeout to ensure data is up to date. Public pages that update less frequently such as Standings, Results, Participants, and Breaks are on the 3.5-minute timeout." +msgstr "" + +#: ../../guide/scaling.rst:100 +msgid "Caching means that a Tabbycat site should actually perform *faster* when it is being viewed by many people at once, as the caches are constantly up-to-date and can be used to serve the majority of requests. When there is less traffic the caches are more likely to be regenerated each time someone goes to a page resulting in slower page loads. Most often performance problems come when a popular page, such as a newly-released draw gains a large amount of traffic suddenly (such as by people constantly refreshing the draw). If the page hasn't finished caching it has to do a full page calculation for each of those new loads, which will spike the amount of resource use until the page load queue is cleared." +msgstr "" + +#: ../../guide/scaling.rst:102 +msgid "One way to help mitigate this is to try and load those pages first yourself to ensuring the cache is populated before other people access it. To do so you would generally open a new private browsing tab, and navigate to the specific page(s) immediately after you have enabled them. This may require going to the URL directly rather than relying on the homepage or menu (which may not have been updated to show the new information). In the case of draw releases, this can also be mitigated by not release online draws until they have been first shown on a projector (so that people aren't trying to get draw information ahead of time)." +msgstr "" + +#: ../../guide/scaling.rst:104 +msgid "You can also increase the 1-minute timeout for the pages that are popular during the in-rounds, by going to the **Settings** section of your Heroku dashboard, clicking *Reveal Config Vars*, and creating a new key/value of ``PUBLIC_FAST_CACHE_TIMEOUT`` and ``180`` (to set the timeout to be 3 minutes i.e. 180 seconds). This should only be necessary as a last resort. Turning off public pages is also an option." +msgstr "" + +#: ../../guide/scaling.rst:106 +msgid "If you ever need to clear the cache (say to force the site to quickly show an update to the speaker tab) you can install `Heroku's Command Line Interface `_ and run the following command, replacing ``YOUR_APP`` with your site's name in the Heroku dashboard::" +msgstr "" + +#: ../../guide/scaling.rst:111 +msgid "Postgres Limits" +msgstr "" + +#: ../../guide/scaling.rst:113 +msgid "The free tier of the Postgres database services has a limit of 20 'connections'. As with Redis, it is rare that a Tabbycat site will exceed this limit; most Australs-sized tournaments will see a maximum of 12 connections at any point in time." +msgstr "" + +#: ../../guide/scaling.rst:117 +msgid "You can monitor this in your Heroku Dashboard by going to the **Resources** tab and clicking on the purple Postgres link. The **Connections** graph here will show you how close you are to the limit. The first tier up from the 'free' Hobby tiers (i.e. ``Standard-0``) has a connection limit of 120 which can be used to overcome these limits if you do encounter them." +msgstr "" + +#: ../../guide/scaling.rst:120 +msgid "Mirror Admin Sites" +msgstr "" + +#: ../../guide/scaling.rst:122 +msgid "If you *really* want to be safe, or are unable to resolve traffic issues and unable to quickly complete tasks on the admin site, it is possible to create a 'mirror' of the tab site just for admin use. This site can be configured to share the same database as the primary site — meaning it is in effect always identical — but because it is at a separate URL it won't have to respond to public traffic and so can't be swamped with a large page load queue." +msgstr "" + +#: ../../guide/scaling.rst:124 +msgid "This requires some technical knowledge to setup and hasn't been rigorously tested. It works fine in our experience but we haven't tested it extensively. If using this make sure you backup (and now how to restore backups) before setting one up." +msgstr "" + +#: ../../guide/scaling.rst:126 +msgid "To do so you would deploy a new copy of Tabbycat on Heroku as you normally would. Once the site has been setup, go to it in the Heroku Dashboard, click through to the **Resources** tab and remove the Postgres and Redis Add-ons. Using the `Heroku Command Line Interface `_ run this command, substituting ``YOUR_APP`` with your *primary* tab site's name (i.e. the app that you had initially setup before this)::" +msgstr "" + +#: ../../guide/scaling.rst:130 +msgid "Here, make a copy of the ``DATABASE_URL`` and ``REDIS_URL`` values. They should look like ``postgres://`` or ``redis://`` followed by a long set of numbers and characters. Once you have those, go to the *Settings* tab of the Heroku dashboard for your *mirror* tab site. Click **Reveal Config Vars**. There should be no set ``DATABASE_URL`` or ``REDIS_URL`` values here — if there are check you are on the right app and that the add-ons were removed as instructed earlier. If they are not set, then add in those values, with ``DATABASE_URL`` on the left, and that Postgres URL from earlier on the right. Do the same for ``REDIS_URL`` and the Redis URL. Then restart the app using the link under **More** in the top right." +msgstr "" + +#: ../../guide/scaling.rst:132 +msgid "Once you visit the mirror site it should be setup just like the original one, with changes made to one site also affecting the other as if they were just a single site." +msgstr "" + +#: ../../guide/scaling.rst:135 +msgid "Estimated Costs" +msgstr "" + +#: ../../guide/scaling.rst:137 +msgid "As a quick and rough benchmark, here is a list of typical prices you would encounter if scaling to meet the performance needs of a high-team-count high-traffic tournament at the approximate scale of an Australs (~100 teams) or above. This is a probably an overly-conservative estimate in that it is based on tournaments run on the ``2.1`` version of Tabbycat. Versions ``2.2`` and above should perform dramatically better and thus have less need to scale using Standard and Performance dynos." +msgstr "" + +#: ../../guide/scaling.rst:139 +msgid "1x ``Hobby Basic Postgres Plan`` ($9/month) run all day for 14 days = ~$4" +msgstr "" + +#: ../../guide/scaling.rst:140 +msgid "A tournament of this size will require an upgraded database tier for the time when you are adding new data; i.e. during registration and rounds. Once the tab is released (and no further data changes needed) however you can downgrade it back to the ``Hobby Dev`` tier." +msgstr "" + +#: ../../guide/scaling.rst:141 +msgid "1x ``Hobby Dyno`` ($7/month each) run all day for 7 days = ~$2" +msgstr "" + +#: ../../guide/scaling.rst:142 +msgid "As recommended, 1 hobby dyno should be run as a baseline in order to see the metrics dashboard; but this can be downgraded a day or so after the tab has been released and traffic is sparse." +msgstr "" + +#: ../../guide/scaling.rst:143 +msgid "3x ``Standard 1X Dyno`` ($25/month each) run 10 hours a day for 4 days = ~$4" +msgstr "" + +#: ../../guide/scaling.rst:144 +msgid "This higher quantity of dynos should only be necessary during traffic spikes (i.e. draw releases, immediately after round advances, and tab release) but unless you want to be constantly turning things on/off its usually easier just to upgrade them at the start of each day of in-rounds (or when the tab is published) and downgrade them at the end of each day. As mentioned earlier, you should occasionally check the *Dyno Load* in the Metrics area and adjust the number of dynos as needed." +msgstr "" + +#: ../../:1 +msgid "``Autoscaled Performance M Dynos`` ($250/month each) average of 5 run for 1 hour = ~$2" +msgstr "" + +#: ../../guide/scaling.rst:146 +msgid "For just round 1 it is a good idea to upgrade to the ``Performance M`` tier so you can enable auto-scaling and thus have the site automatically adjust the number of dynos to the amount of traffic it's getting (rather than having to guess the number of dynos needed ahead of time). Doing so ensures that the first round runs smoothly and means that you can then review the Metrics graphs to see what your 'peak' load looks like and resume using whatever quantity of ``Standard 1X Dyno`` will accommodate this peak load in future rounds." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/guide/tournament-logistics.po b/docs/locale/ca/LC_MESSAGES/guide/tournament-logistics.po new file mode 100644 index 00000000000..0c28b2b0783 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/guide/tournament-logistics.po @@ -0,0 +1,1394 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-07-01 22:45\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/tournament-logistics.po\n" +"X-Crowdin-File-ID: 1307\n" +"Language: ca_ES\n" + +#: ../../guide/tournament-logistics.rst:5 +msgid "Tournament Logistics" +msgstr "" + +#: ../../guide/tournament-logistics.rst:7 +msgid "Unlike the rest of our documentation, this section does not deal with particular features or technical concerns with Tabbycat itself. Instead it is an attempt to outline the logistics of tab direction and aims to be of general relevance for people running major tournaments. At present, it is organised by the various ‘stages' of tabbing a tournament, and most of the content takes the form of check-lists or comments designed to highlight and provide guidance on common issues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:9 +msgid "Whilst it aims for general relevance, we should note that this guide is relatively opinionated and mostly written from the perspective of people whose primary experience is tabbing at Australasian tournaments using Tabbycat. That said, we welcome feedback and additions that can account for different format and regional considerations. In the future, if the guide becomes more general and more extensive, it could be spun off into a separate project." +msgstr "" + +#: ../../guide/tournament-logistics.rst:11 +msgid "As with the rest of our documentation, this page is source-available and we welcome :ref:`feedback and contributions `. Note also that we've formatted this guide a single page to reduce clutter, but the sub-sections in the sidebar can be used to help navigate across sections." +msgstr "" + +#: ../../guide/tournament-logistics.rst:14 +msgid "Planning and Preparation" +msgstr "" + +#: ../../guide/tournament-logistics.rst:16 +msgid "This section aims to outline concerns that occur in the months before the tournament: after you have agreed to help with tabbing and while the organising committee and adjudication core are deciding how they want to run key processes such as registration and feedback. It is organised in terms of who you should coordinate with in order to plan for a well-tabbed tournament." +msgstr "" + +#: ../../guide/tournament-logistics.rst:19 +msgid "General Notes" +msgstr "" + +#: ../../guide/tournament-logistics.rst:21 +msgid "You should avoid being the sole person responsible for that tab unless it is a small tournament. There are many cases where you want to be in several places at once and the easiest way to accommodate that is by having co-directors or trusted assistants. Few tab decisions require a single source of authority; it is far better to have multiple people available to share responsibilities around." +msgstr "" + +#: ../../guide/tournament-logistics.rst:23 +msgid "In a similar manner, it is worth considering how you can use the tournament to help train other people. Typically, knowledge of tabbing is concentrated in relatively few people and gained mostly through on-the-ground experience; meaning that every tournament should be approached as rare opportunity to help spread knowledge about tabbing more widely in a circuit. Consider reaching out to institutions or the tournament as a whole to see if they have anyone who would be interested in helping out." +msgstr "" + +#: ../../guide/tournament-logistics.rst:26 +msgid "Convenors" +msgstr "" + +#: ../../guide/tournament-logistics.rst:28 +msgid "It might sound obvious but it will pay to have a very thorough conversation about the tab process (more or less the contents of this document) with the convenors a few months out from the tournament. Do this even if you know the convenors to be knowledgeable or experienced debaters. Key concerns are:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:32 +msgid "Whether internet access will be available and whether participants can be presumed to have smart phones. This has an obvious impact on how online feedback, ballots, and draw release is done. Note that Eduroam is not necessarily a reliable guarantee of access; many participants will come from universities who don't have access to it or will need to follow a setup process that is onerous or requires them to be at their home institution." +msgstr "" + +#: ../../guide/tournament-logistics.rst:33 +msgid "What kind of room is the tab room going to be? Is it possible to optimize its placement when the bookings for rooms are made? Key details include: How large is it? Does it have a sufficient amount of desk space (for data entry)? Does it have a good projector (for allocations)?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:34 +msgid "If they have the resources, having an adjacent room available for just the adjudication core to use can also be useful. While you want to work closely with the adjudication core, they may want to discuss sensitive information (motions, equity) in a space without volunteers present; or they might at times get in the way of things, such as by eating lunch in the middle of a frenetic ballot entry process." +msgstr "" + +#: ../../guide/tournament-logistics.rst:35 +msgid "Ensure that plans are made for food to be brought to tab room. Otherwise you will starve and the adjudication core will swan off to lunch. Having regular access to caffeine can also be similarly essential to some adjudication and tab teams." +msgstr "" + +#: ../../guide/tournament-logistics.rst:36 +msgid "What kind of printers will be available? Can the tournament buy/borrow one? This is obviously a key consideration for pre-printed ballots. Also try and ensure there are back-up printing options if possible. Clearly stipulate your need for ink and paper; and try and opt for a black/white laserjet, over an inkjet, if possible." +msgstr "" + +#: ../../guide/tournament-logistics.rst:37 +msgid "What kind of volunteers will be available? How many, and what is their experience level? As a very broad recommendation, you probably want around 1 volunteer for every 10 rooms, assuming volunteers are performing a dual role as data-enterers and ballot-collectors." +msgstr "" + +#: ../../guide/tournament-logistics.rst:38 +msgid "Will the tournament make a donation to whoever maintains the tabbing software you are using? Depending on the license of your tabbing software and the nature of your tournament (for profit vs not for profit) this may be required. Also, if your tab is self-hosted or independently hosted (such as how Tabbycat is generally deployed on Heroku) accounting officers should also be aware that there will be some costs associated with hosting the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:39 +msgid "You should also ensure that people helping with the tab are fairly compensated for their flights, registration, etc and that any volunteers are invited along to socials and/or given some other recompense." +msgstr "" + +#: ../../guide/tournament-logistics.rst:40 +msgid "Will Swing teams be available? You should plan to have at least one more than you need. For example, with 39 teams, you should have both an 40th swing team to fill in the draw, and the option to easily assemble an 41st swing team in case a team goes missing. At very large tournaments (say over 150 teams) you should plan for even more swing team capacity — it's not unheard of for say three teams to vanish all in a single round. In these cases, you should try and ensure that the swing teams are always ready to go — i.e. that that they are pre-formed, you have a clear communication channel with them, and that they distributed/waiting near the debating rooms so they can fill in at a moment's notice (often you will only find out that teams are missing right as debates are scheduled to start)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:41 +msgid "How will critical information be communicated to participants? Consider that in general, Facebook announcements do not reach many people, although paying to boost the posts is often a very cheap way of dramatically raising their effectiveness. In particular also ensure or check how you manage to get in touch with teams or adjudicators who go missing: will they have reliable phone numbers? Can you get a list of institutional reps who can be reliably called? You want to have processes in place for chasing up adjudicators who do things such as make scoring mistakes as soon as possible in order to minimise delays." +msgstr "" + +#: ../../guide/tournament-logistics.rst:42 +msgid "How will critical information be shared between the tab team, adjudication core, and logistics/convening teams? For smaller/medium sized tournaments a group chat augmented by phone calls (assuming everyone knows everyone else's number) can be sufficient, but even then, you need to ensure that any critical information conveyed privately (i.e. in a call or in person) is conveyed back to the group channel. At very large tournaments (or if you have the resources) walkie-talkies are an excellent way to manage communication — just make sure you have (ahead of time) reserve the different channels to a distinct and known purpose (i.e. general discussion; just the tab team & adjudication core; just convenors)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:43 +msgid "As part of this it is ideal if the organising committees can procure local SIM cards for members of the tab team and adjudication core who are not local. These should be relatively generous in their plans — you don't want to worry about running out of minutes or data if on a critical call or using a hotspot to make critical allocation adjustments." +msgstr "" + +#: ../../guide/tournament-logistics.rst:44 +msgid "At major tournaments you want to arrive at least a day before check-in; and ideally whenever it is that the adjudication core is arriving for their own preparation." +msgstr "" + +#: ../../guide/tournament-logistics.rst:47 +msgid "Registration" +msgstr "" + +#: ../../guide/tournament-logistics.rst:49 +msgid "Having effective registration systems and processes is one of the most important aspects of preparing to tab a large tournament. Bad registration data *will* make setting up a tab extremely painful and introduces the chance for mistakes or inconsistencies in tab data that will only come to light in the first round. As such:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:53 +msgid "You should check in with the registration team and see what they plan to do as soon as possible after being brought on-board. As part of this you should make it clear that you should be consulted on any decisions they make about what data to collect, when to collect it, and how to collect it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:54 +msgid "Registration data should be collected into a shared and live-updating source, such as a Google Sheet. There should be as few canonical sources (ideally one) of data as possible; i.e. there should be a single sheet for individual details, a single sheet for team details, etc; and these should be maintained all the way through to check-in. For both you, and the registration team, having multiple conflicting or outdated copies of data will lead to errors. However, for the registration team these errors can usually be easily sorted out in person (at check-in) but for you that information always needs to be reliable and up to date otherwise what is imported into the tab cannot be trusted." +msgstr "" + +#: ../../guide/tournament-logistics.rst:56 +msgid "At this point our recommendation is to, in most cases, not use specialised registration systems as they are somewhat less intuitive and less flexible than setting up good Google Forms/Sheets." +msgstr "" + +#: ../../guide/tournament-logistics.rst:58 +msgid "If, for whatever reason, the registration team are not able to give you 'live' access to the data they have on hand, make sure they send you copies of it (even if it is incomplete) well before you need it to setup the tab itself. You want to be able to verify what data is actually being collected and how it is formatted well in advance." +msgstr "" + +#: ../../guide/tournament-logistics.rst:60 +msgid "You should have access to *all* of the data collected; often registration teams will make (false) assumptions about what you do or do not need. It is better to have everything and then selectively filter out what is not relevant to the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:61 +msgid "It is critical that the registration team should check in with you before setting up forms asking for information. Every additional time that registration asks for data there will be less and less participation in the process, so you should aim to gather all that you need at the first opportunity; typically during the canonical individual registration phase. Particular information that should not be overlooked for tab purposes:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:63 +msgid "Individual registration should ask whether a participant is a speaker or an adjudicator." +msgstr "" + +#: ../../guide/tournament-logistics.rst:64 +msgid "If that person is a speaker it should ask for their team name/number (reconciling these later is painful)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:65 +msgid "Individual registration should ask for any accessibility requirements of both adjudicators and speakers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:66 +msgid "Individual registration should ask for the previous institutions of both adjudicators and speakers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:67 +msgid "Individual registration should ask for the email addresses of all participants." +msgstr "" + +#: ../../guide/tournament-logistics.rst:68 +msgid "Individual registration should ask for the phone numbers of adjudicators." +msgstr "" + +#: ../../guide/tournament-logistics.rst:69 +msgid "Individual registration should ask for the gender identity of both adjudicators and speakers. Even if you are not *planning* on using this to inform processes, such as adjudicator allocations, you want it on hand in case plans change." +msgstr "" + +#: ../../guide/tournament-logistics.rst:71 +msgid "Independent adjudicators and the adjudication core should follow normal registration procedures. Having them not go through the normal process makes it easy to overlook their data or not get a complete picture of it. For example, adjudication core members might forget to nominate conflicts, or neglect to provide their previous institutions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:72 +msgid "You should confirm how the registration team plans to manage how people check-in to the accommodation in particular. Check-in is when issues with registration data come to light and it is vital that these changes are noted and recorded. Some form of validation of registration data *must* occur at check-in — in particular all adjudicators should be (individually) verified as present and all members of a team should confirm their presence along with their team's name/number and speakers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:73 +msgid "After check-in you need to have a definitive list of who is physically present at the tournament so you can run a first-round draw with confidence. Registration must know this and have processes in place for recording people individually as they arrive, and for that data to filter back to you." +msgstr "" + +#: ../../guide/tournament-logistics.rst:75 +msgid "If you are using Tabbycat's secret links for feedback or ballots these are best distributed at check-in. The registration team should know about this, prepare for it, and be provided with the pdfs to print and distribute." +msgstr "" + +#: ../../guide/tournament-logistics.rst:78 +msgid "Adjudication cores" +msgstr "" + +#: ../../guide/tournament-logistics.rst:80 +msgid "If there is a group chat for the adjudication core you probably want to be part of it; even if you don't contribute much. There are lots of small things that end up being discussed without consideration of how they will affect tab issues and it is also a chance to get to know — ahead of time — the people you will be working with closely over the tournament." +msgstr "" + +#: ../../guide/tournament-logistics.rst:82 +msgid "Members of the adjudication core will often leave tab-relevant decisions until the days prior to the first round or whenever it is that they can first meet with the tab team in person. This often wastes critical time and forces rushed decisions. Many considerations can instead be raised and discussed prior to the tournament. These could include:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:86 +msgid "How to manage the feedback process. This typically benefits from foresight and pre-planning, rather than being decided on the ground. Key considerations are:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:90 +msgid "Who submits feedback on whom? Do trainees do so on their chairs? Do panellists do so on each other? (Presuming your tab software supports these options)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:91 +msgid "Is feedback mandatory? If so, how will this be enforced exactly?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:92 +msgid "How much weight does each adjudicator's test or CV score have over the course of the tournament? By Round 3, or by Round 8, what proportion of an adjudicator's score is derived from their test and what proportion is derived from their feedback?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:93 +msgid "Will the adjudication core tweak an adjudicator's score to 'artificially' increase or decrease it to where they think it should be. For example, this could be done by adjusting a test/CV score upwards in order to compensate for bad feedback that (for whatever reason) they did not think was reliable or fair? Depending on your adjudication core's preferences and your tab software's allowances it is not unheard of for them to maintain full manual control over scores by reading/processing feedback results but only ever manually adjusting scores as a result (rather than having it automatically adjust due to the ratings in the feedback)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:94 +msgid "What is the score scale going to be? What do each of those numbers represent? How will this be communicated to participants so they can score accurately and consistently?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:95 +msgid "What kind of questions will feedback forms ask? If using :ref:`customisable printed or online forms ` consider how these questions be used tactically to identify key issues (say discriminatory scoring) or more easily identify people who should be promoted/demoted. While managing feedback is often a messy and subjective task, it can often be improved by being more targeted in what data it collects." +msgstr "" + +#: ../../guide/tournament-logistics.rst:96 +msgid "How will feedback be monitored, and how will this information feed back into the scores and allocations? At large tournaments it is not unusual for an adjudication core member to sit off each round to review and process feedback — there isn't really a good stretch of available time to do so otherwise. However even if doing this note that there are communication issues to manage here, as each adjudication core member will each end up with a relatively incomplete overview of the total volume of feedback." +msgstr "" + +#: ../../guide/tournament-logistics.rst:98 +msgid "If possible it's nice to plan in advance for when the tab will be released (i.e. on the last night; the day after; etc.) as this often gets left to the last minute to be decided. Also the possibility of whether people can redact themselves from tabs should be raised, as that might be useful to inform participants of during online registration or tournament briefings. In a similar fashion, some adjudication cores might also want to limit speaker tabs to only a certain number of places, particularly at novice-centric tournaments." +msgstr "" + +#: ../../guide/tournament-logistics.rst:99 +msgid "How to handle conflict collection; see the following section." +msgstr "" + +#: ../../guide/tournament-logistics.rst:100 +msgid "How to handle the submission of scoresheets and feedback, primarily in terms of which parts of the process should be done online and offline. Some adjudication cores will have strong thoughts here; others will happily follow whatever you recommend. Key considerations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:104 +msgid "Paper-based feedback is much more taxing to enter than paper-based scoresheets — typically there is much more of it; it asks for a greater variety of data; and it is submitted at inconsistent times. The one advantage is that it is easier to make feedback mandatory with paper, as you can ensure all teams and adjudicators have done so prior to leaving the room. Thus, in most cases, a good online feedback system is much more preferable than paper. If using paper be aware that you will need a lot of volunteers to ensure the feedback is collected promptly. If internet or smartphone access is limited at your tournament it is probably best to accommodate both paper-based and online methods." +msgstr "" + +#: ../../guide/tournament-logistics.rst:105 +msgid "The consequences of having incorrect or missing ballots are much more severe than for feedback. As such major tournaments use paper ballots in some form as the final stage in a checking process to ensure that the results of a debate are definitely correct — adjudicators will always make mistakes and while digital ballots can catch/prevent some types of error (i.e. a low point win) they can't catch others (assigning the wrong scores to the wrong speaker, nominating the wrong winning team, etc.). Assuming your software supports both options, the choice is thus whether to use a hybrid approach (online submission followed by paper verification) or to rely entirely on paper. A fully-paper based approach will be simpler for both yourself and adjudicators, and can be almost as efficient if you have a sufficient number of volunteers. In contrast, a hybrid approach will be potentially much faster if you are short of volunteers and if you expect that almost all adjudicators will have access to the internet, a smartphone, and are capable of following instructions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:107 +msgid "In some circuits, and when using some particular tab software, tournaments might run a 'dual tab' where there is a second, independent, version of the tab software and database into which all data is *also* entered. From what we understand this performs a dual role, as both a backup system that can take over from the main one (say if internet access drops) and as a way of verifying ballot data (by comparing draws or databases between software rather than having a two-step entry process operating for a single tab). This practice seems obsolete when working with modern web-based tab software that is capable of backing up and restoring to an offline system, but we would like to hear your feedback if you think that is not the case." +msgstr "" + +#: ../../guide/tournament-logistics.rst:110 +msgid "Conflicts/Clashes (registration/equity/adjudication core)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:114 +msgid "There should always be a *single* means of collecting conflicts (i.e. a single Google Sheet/Form) and all conflicts should go through it. Because the nature of this data is sensitive and evolving, there must be a single location where it can be easily captured and verified as having been entered into the tab. Conflicts data should never be spread across a loose collection of emails/personal messages/spreadsheets; otherwise keeping track and knowing which ones have been entered into the system will be painful and error prone. Get in touch in with equity and registration in advance and make it clear that they should not make their own conflicts form; or if they've already made one, make sure you adopt it and have access/control of it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:115 +msgid "Conflicts should, ideally, *only be collected after a participants list has been published* and requests for people to nominate conflicts should also be sent out as few times as possible. Most people will only fill this form in once, so it is vital that when asked to nominate conflicts they have as much information as they need to do so comprehensively. Without a public and reasonably-complete participants list people will either nominate conflicts that are not present (wasting your time in cross-referencing data) or not realise someone is present and raise the conflict at a latter, less opportune time." +msgstr "" + +#: ../../guide/tournament-logistics.rst:116 +msgid "In some circuits only adjudicators are allowed to nominate conflicts because of the risk of teams using conflicts 'tactically' to block adjudicators that they think are terrible judges. However, having teams nominate conflicts can be useful: adjudicators may overlook a conflict or there may be equity-based reasons that a conflict is non-symmetrical. This trade-off can be handled in two ways:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:120 +msgid "Not allow teams to nominate conflicts during registration; but allow them to approach equity teams before, or during, the tournament to identify the conflict. Equity can then raise the issue with the tab team and adjudication core and it can be added to the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:121 +msgid "Allow teams to nominate conflicts during registration; but have the adjudication core review the data for 'tactical' conflicts. These are usually relatively easily identified, although can be overlooked if the adjudication core does not know the participants or their region/circuit well. The adjudication core can then override the conflict, discuss it with the teams, or raise it with equity. However, if going down this route, the tab team should discuss with the adjudication core how to manage this process well-ahead of the tournament, and ensure they actually do review the conflicts prior to the first round — otherwise it will likely surface during an allocation and become a major distraction during a critical time period." +msgstr "" + +#: ../../guide/tournament-logistics.rst:123 +msgid "As mentioned in the previous section, the adjudication core (possibly with equity) should provide some degree of guidance about what kinds of debating-related conflicts should be provided. People should be able to self-define what constitutes a conflict, but there are circumstances where they are overly cautious and can be reassured that it is not necessary. The opposite problem may occur also, where many people may have a very high bar for what defines a conflict which could lead to perceptions of bias from other participants." +msgstr "" + +#: ../../guide/tournament-logistics.rst:124 +msgid "Generally, it is preferable that each form nominates a single conflict, and people are asked to re-submit for each conflict they are adding." +msgstr "" + +#: ../../guide/tournament-logistics.rst:126 +msgid "To save you some hassle the conflict form should make this very clear (i.e. that one conflict = one submission; ensure the field labels reinforce this)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:127 +msgid "The conflict form should also make clear that you shouldn't use the form if you don't have any conflicts (i.e. people will submit 'None', 'None' etc)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:128 +msgid "The conflicts form should also make clear that adjudicator's don't need to submit a conflict for their current institution and that team's don't need to submit conflicts for adjudicators from their current institution." +msgstr "" + +#: ../../guide/tournament-logistics.rst:130 +msgid "In poorly-structured conflict forms, identifying exactly who is doing the conflicting and who is being conflicted is a nightmare. You want to structure the questions to minimise this ambiguity. A form should definitely ask:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:132 +msgid "Who are you (the conflict-specifier)?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:133 +msgid "Are you a team or an adjudicator?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:134 +msgid "Which institution are you from?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:135 +msgid "If part of a team, which team are you in?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:136 +msgid "Who are you conflicting?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:137 +msgid "Are they a team or an adjudicator?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:138 +msgid "Which institution are they from?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:139 +msgid "If they are in a team, which team is it?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:140 +msgid "Have previously attended any other institutions; or have other reasons to conflict entire institutions? If so, specify those institutions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:142 +msgid "Note that this last question can be tricky to deal with; good tab software will let you conflict an adjudicator from an institution other than their own, but it is harder to mark an individual team as having members previously attending another institution. These circumstances are rare and typically very 'soft' conflicts but are probably best handled by creating individual conflicts between that team and adjudicators from the previous institution in question." +msgstr "" + +#: ../../guide/tournament-logistics.rst:143 +msgid "Adjudication core members will often not nominate their own conflicts; presuming that they will notice and correct them during allocations. They often forget or overlook this. Their conflicts should be entered as per normal." +msgstr "" + +#: ../../guide/tournament-logistics.rst:146 +msgid "Scheduling (convenors / venue organisers)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:148 +msgid "One of the easiest ways to have things run late is to set an unrealistic schedule. As much as possible the timing allocated to rounds (inclusive of events such as lunch or committee forums) should conform to an even distribution of how long it takes to process results and create a draw/allocation — you don't want to be in a position where particular rounds have too much time and others too little time to spend on allocations and other crucial tasks. This is something that should definitely be working on in conjunction with convenors and other critical parties before they lock down timing details with food suppliers or the operators of the debating venues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:150 +msgid "Note also that in most circumstances it is preferable to create a draw and allocation for the first day of the next round at the night before. This time should be built in to the schedule of the previous day, and raised with the adjudication core so they don't expect to be able to immediately depart after the day's rounds are done." +msgstr "" + +#: ../../guide/tournament-logistics.rst:152 +msgid "Below is the time taken within each round at Australs 2017. For context, this was neither a particular efficiently or inefficiently tabbed tournament. Notable details:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:156 +msgid "The tournament was ~40 rooms each round and had access to 3-6 runners and data enterers. Paper ballots were pre-printed and distributed by runners to rooms prior to the debates starting, then collected sometime after the 15 minute deliberation period. Feedback was submitted online. At Australs all adjudicators (excluding trainees) submit their own ballots." +msgstr "" + +#: ../../guide/tournament-logistics.rst:157 +msgid "The adjudication core were neither particular slow nor fast in allocating adjudicators compared to other adjudication cores. At Australs most adjudication cores will create allocations by using first running an automatic allocation then extensively tweak the results." +msgstr "" + +#: ../../guide/tournament-logistics.rst:158 +msgid "There were no serious issues that delayed the tabbing of any particular round beyond the routine and expected issues of last-minute draw changes, adjudicators producing incomprehensible ballots, etc." +msgstr "" + +#: ../../guide/tournament-logistics.rst:159 +msgid "Whilst the tab ran relatively quickly, there were minor delays because of mismatches between the planned schedule and the optimal schedule from a tab perspective." +msgstr "" + +#: ../../guide/tournament-logistics.rst:160 +msgid "A round at Australs takes around 2 hours from a debater's perspective: 30m of prep, ~60m for a debate, ~15m for deliberation, and ~15m for the oral adjudication and feedback." +msgstr "" + +#: ../../guide/tournament-logistics.rst:161 +msgid "We didn't note the timing of data-entry in Round 8 as there was no time pressure. After data entry was finished, finalising and double-checking the breaks took through to ~7-8pm." +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "Day" +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "One" +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "Two" +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "Three" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "Round" +msgstr "Ronda" + +#: ../../guide/tournament-logistics.rst:166 +msgid "1" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "2" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "3" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "4" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "5" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "6" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "7" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "8" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "Draw generated" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +#: ../../guide/tournament-logistics.rst:169 +msgid "*Night prior**" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "12:43" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "16:12" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "19:17*" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "12:05" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "15:46" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "19:10*" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "12:07" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "Allocation finished" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "13:17 ``+34m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "16:36 ``+24m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "20:28* ``+71m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "12:58 ``+53m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "16:24 ``+38m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "21:30* ``+140m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "13:25 ``+78m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "Motions released" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "09:28" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "13:50 ``+33m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "16:47 ``+11m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "09:22" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "13:14 ``+16m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "16:40 ``+16m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "9:30" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "14:18 ``+53m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "First ballot received" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "11:51 ``+143m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "15:46 ``+116m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "18:52 ``+125m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "11:18 ``+116m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "15:13 ``+119m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "18:40 ``+120m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "11:35 ``+125m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +#: ../../guide/tournament-logistics.rst:172 +msgid "?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "Last ballot confirmed" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "12:38 ``+47m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "16:07 ``+21m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "19:15 ``+23m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "12:05 ``+47m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "15:44 ``+31m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "19:09 ``+29m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "12:06 ``+31m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:176 +msgid "Tab Setup" +msgstr "" + +#: ../../guide/tournament-logistics.rst:178 +msgid "Setting up a tab site is the most technically challenging (or at least annoying) part of tabbing. It is where you need to reconcile large amounts of data and configure a variety of settings to ensure everything will run without issues during rounds. While this is often done a day or two before the tournament, ideally you should look to do as much as possible in the week or two beforehand where there is much less time pressure." +msgstr "" + +#: ../../guide/tournament-logistics.rst:181 +msgid "Importing data: workflow" +msgstr "" + +#: ../../guide/tournament-logistics.rst:185 +msgid "First check with registration people if their data is complete, and if not who is missing. If it's only a few people it's viable (for tab purposes) to use place-holders for them, as long as you remember to follow up and edit their data manually later." +msgstr "" + +#: ../../guide/tournament-logistics.rst:186 +msgid "Familiarise yourself with the different methods for importing data into your tabbing program. Typically, these include options for bulk-importing spreadsheets, for adding information piece-by-piece through a graphical interface, or a hybrid systems. Depending on your tabbing software it may be easiest to first setup your tournament on a local copy of the tab (where it will be faster to rectify mistakes) and transfer the data to the live site when everything is mostly complete." +msgstr "" + +#: ../../guide/tournament-logistics.rst:188 +msgid "If you are using Tabbycat our spreadsheet importer is definitely easiest to use on a local copy; however using the visual importer is perfectly viable for larger tournaments if you are not comfortable with the command line. When using the spreadsheet importer note that it will likely take several iterations to get the data to import cleanly as there will typically be small mismatches in speaker/institution names and the like." +msgstr "" + +#: ../../guide/tournament-logistics.rst:190 +msgid "If the tournament (or the host society) has their own domain name and your tab software is self-hosted consider whether you want to setup the tab site on their domain so that the URL is nicer and/or easier to type." +msgstr "" + +#: ../../guide/tournament-logistics.rst:192 +msgid "If you are using Tabbycat, and deploying to Heroku, be sure to read our documentation about the size of Postgres database your tournament will require. Setting up the correct size of database from the start is the best way to go, as transferring information at a later stage is a hassle and could delay the tab at inopportune times." +msgstr "" + +#: ../../guide/tournament-logistics.rst:195 +msgid "Importing data: regions/societies" +msgstr "" + +#: ../../guide/tournament-logistics.rst:199 +msgid "Societies will often have special names that they like to use in draws (that are not the same as their institution's name or acronym). These can be gathered from institutional reps or from prior tabs. When in doubt err on the colloquial / most recognisable name; particularly for formats where teams need to find each other prior to the debate." +msgstr "" + +#: ../../guide/tournament-logistics.rst:200 +msgid "If your tabbing software has methods for assigning region information to teams and adjudicators (for diversity purposes) determine with the adjudication core the types of regions that will be used." +msgstr "" + +#: ../../guide/tournament-logistics.rst:203 +msgid "Importing data: participants" +msgstr "" + +#: ../../guide/tournament-logistics.rst:207 +msgid "Check you have emails/phone numbers included in your data that will be imported (presuming your tabbing software supports this) there are useful to have on hand later for either emailing out information or quickly following up errant adjudicators." +msgstr "" + +#: ../../guide/tournament-logistics.rst:208 +msgid "Often, the easiest way to prepare registration data for tab imports is to create new tabs in the registration spreadsheet, and use referencing to automatically order and arrange their data into the format your tab software wants. If the registration data changes significantly this will also make it easier to re-import things." +msgstr "" + +#: ../../guide/tournament-logistics.rst:209 +msgid "Often some adjudicators, typically local independents, may not be available for all rounds. Try and find out who this affects and when; once data has been imported you can :ref:`pre-check these adjudicators in and out of rounds ` (if your tab software supports this; otherwise note it for later)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:210 +msgid "Remember that the swing team(s) probably also need to be imported into the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:213 +msgid "Data import: rooms" +msgstr "" + +#: ../../guide/tournament-logistics.rst:217 +msgid "Ideally you want not just a list of rooms, but also of their types and categories — i.e. what building a room is in and/or it will be coded so that participants can find it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:218 +msgid "You want to know if access to some rooms is conditional; i.e. if some rooms are only available for some rounds. Again, if your tab software supports it you can :ref:`record this availability information into the system ` (once data is imported) otherwise you can note it for later." +msgstr "" + +#: ../../guide/tournament-logistics.rst:219 +msgid "Registration should have collected information about accessibility requirements; they should be imported into your tab software (if it :ref:`supports automatically matching accessibility requirements `) or note for later. In general you will also want to use a similar process to ensure that members of the adjudication core are assigned rooms that are close to the tab room." +msgstr "" + +#: ../../guide/tournament-logistics.rst:220 +msgid "You also want some idea of priority; that is to say if some rooms are inconvenient (and you have more rooms than you need) they should be marked as a low priority so they will be allocated only if needed. Again, this might be automatically done by your tab software or something you will need to note and manually change after each draw is made." +msgstr "" + +#: ../../guide/tournament-logistics.rst:223 +msgid "Data import: adjudicator test/CV scores" +msgstr "" + +#: ../../guide/tournament-logistics.rst:225 +msgid "Ideally the adjudication core should do this themselves as they are marking the test or scoring CVs. If they won't, or you don't trust them with full tab access, be prepared to do so yourself." +msgstr "" + +#: ../../guide/tournament-logistics.rst:228 +msgid "Data import: tab access" +msgstr "" + +#: ../../guide/tournament-logistics.rst:230 +msgid "Set up user accounts for the adjudication core with dummy passwords (they can change them later)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:231 +msgid "Set up user accounts for runners/assistants with dummy passwords (they can change them later)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:233 +msgid "If using Tabbycat and using online ballots or feedback with the private URLs method, participants should be emailed out their private URLs before they start travelling to arrive at the tournament (i.e. when they have a reasonable chance of checking their email). This can be done using the inbuilt pages on Tabbycat, or by importing participants data into a service such as Mailchimp." +msgstr "" + +#: ../../guide/tournament-logistics.rst:236 +msgid "Pre-Rounds Setup" +msgstr "" + +#: ../../guide/tournament-logistics.rst:239 +msgid "Setting up the tab room" +msgstr "" + +#: ../../guide/tournament-logistics.rst:241 +msgid "This is typically the first order of business, as all future pre-round setup tasks (i.e. training the adjudication core, testing printing, etc.) are better for being done in the same space that will be used throughout the rounds. Once you're in the space there are a couple of small checks to run through before the larger question of how to arrange and use the space should be tackled:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:245 +msgid "Check with convenors whether things can be left in the tab room overnight. If they can't you'll need to make plans for how to move any big items (printers; ballot stacks) to and from the tab room each day." +msgstr "" + +#: ../../guide/tournament-logistics.rst:246 +msgid "Check that the internet access in the tab room is reliable." +msgstr "" + +#: ../../guide/tournament-logistics.rst:247 +msgid "Check that the projector system works, both with whatever wired-in computer is in the room and when connected to your laptop." +msgstr "" + +#: ../../guide/tournament-logistics.rst:248 +msgid "Check what items either yourself, or the organisers, have at hand and check if anything needs to be acquired before the next day. Critical items for tab rooms are typically:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:252 +msgid "An extension cord with multi box; ideally a pair of each." +msgstr "" + +#: ../../guide/tournament-logistics.rst:253 +msgid "Whiteboard markers (assuming there is a whiteboard) otherwise permanent markers and large sheets of paper (i.e. A2) can suffice." +msgstr "" + +#: ../../guide/tournament-logistics.rst:254 +msgid "Boxes. Lots of boxes. Loose ballots are a source of confusion and error, so you want some way of temporarily storing ballots as they proceed through the entering and checking process. You probably want at least three large boxes (for ballots to-enter, ballots to-check, and finished ballots) but more will be useful." +msgstr "" + +#: ../../guide/tournament-logistics.rst:255 +msgid "Spare printing ink/toner, and paper for the printer. Ideally your paper would be multi-coloured, with each colour being used for a different round. Pastel colours are ideal, and you ideally want at least three different colours so that you don't have to repeat a colour within the same day. Be sure to calculate how many sheets you will need per round and ensure you have a generous number of spares." +msgstr "" + +#: ../../guide/tournament-logistics.rst:256 +msgid "If tabbing a format that can produce multiple ballots per-debate, staplers are essential to keep those ballots organised. Buy at least two sturdy ones." +msgstr "" + +#: ../../guide/tournament-logistics.rst:258 +msgid "Non-essential, but often useful to have items:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:262 +msgid "Whatever dongles/adapters you need to connect your laptop to the projectors, both in the tab room and in the briefing room." +msgstr "" + +#: ../../guide/tournament-logistics.rst:263 +msgid "An Ethernet cable (or two) as a backup option if WiFi drops or is overloaded." +msgstr "" + +#: ../../guide/tournament-logistics.rst:264 +msgid "Post-it notes are a great way to temporarily mark ballots with information; typically used to indicate ballots that need correcting." +msgstr "" + +#: ../../guide/tournament-logistics.rst:265 +msgid "You'll often need to make impromptu signs; sticky tape and/or blu-tack are good here" +msgstr "" + +#: ../../guide/tournament-logistics.rst:266 +msgid "Spare pens for the people doing data entry to use" +msgstr "" + +#: ../../guide/tournament-logistics.rst:267 +msgid "Trash bags for collecting rubbish as it accumulates" +msgstr "" + +#: ../../guide/tournament-logistics.rst:268 +msgid "A Chrome Cast can occasionally be very useful if a projector or screen doesn't have accessible input cables or so that you can use a projector without having your laptop tethered to a particular podium and desk." +msgstr "" + +#: ../../guide/tournament-logistics.rst:270 +msgid "If you haven't already it's a good idea to check your printing setup by printing off a bunch of generic ballots and feedback forms to have on hand if the need arises (i.e. a ballot is missing and needs to go out ASAP; or if someone can't do feedback online and needs to do so on paper). At worst, the blank ballots you print can be used for the out-rounds. While printing these off, time how long it takes the printer to print say 25 ballots and extrapolate from that to figure out how long it will take to print the entire round's worth of ballots. Note that if printing off a round's ballots is relatively quick it can be useful to delay it in order to better accommodate any last-minute changes to the draw that happen post-announcement. It's also worth thinking about how you (or at least who will) group up the printed ballots in order to distribute them to runners." +msgstr "" + +#: ../../guide/tournament-logistics.rst:272 +msgid "At this point you should also setup whatever process you need for managing runners and the ballot collection process. At a minimum, this should probably be a spreadsheet or a list on a whiteboard outlining the different groups of rooms with spaces to mark in which runners are delivering/collecting ballots for each location. Who is running where might change from day to day and should be kept updated. It should also have some method for contacting each runner (i.e. a cell phone number)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:274 +msgid "The question of how to arrange the actual room is one with many answers, and is obviously shaped by the peculiarities of the space itself. However there needs to be some system behind it so that people know exactly where to go and what to do when there is time pressure." +msgstr "" + +#: ../../guide/tournament-logistics.rst:276 +msgid "The key consideration behind this system is typically the 'flow' of ballots: what happens after they are brought back from runners, but before they are completely entered into the system. Think through how you want this process to operate and how the space can be arranged to make each step as smooth as possible. Considerations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:280 +msgid "When runners initially return a big stack of ballots, what happens? They could be transferred directly to the data-enterers to start on, but it is often useful to have preliminary checks here in order to keep the job of the data-enterers as simple as possible. These checks could include:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:284 +msgid "For formats with multiple ballots per-debate, you typically want to identify and staple together all the ballots from a given panel." +msgstr "" + +#: ../../guide/tournament-logistics.rst:285 +msgid "For tournaments where ballots are liable to go missing (or for when you have plenty of data-enterers and want peace of mind) it is worth using the :ref:`ballot 'check-in' system of your tab software ` (if it has one) to mark off ballots as physically present in the tab room. This allows you to quickly identify which ballots are missing and begin tracking them down earlier than you would do otherwise if just waiting for the 'to enter' pile to be exhausted." +msgstr "" + +#: ../../guide/tournament-logistics.rst:286 +msgid "Depending on your preferences and resources, ballots could at this stage be checked for errors. This could include a basic sweep for missing information (i.e. totals) or a comprehensive sweep that includes checking math errors, ambiguous handwriting, low-point wins, etc.). While this will delay the time between ballots arriving and being entered, it will mean that you can start correcting ballots sooner, and lessens the burden on (potentially inexperienced) data-enterers to check and catch these. If you have many runners, and they are familiar with how debating scoring works, this is recommended." +msgstr "" + +#: ../../guide/tournament-logistics.rst:288 +msgid "Once this preliminary step has occurred the next task is actually entering the ballots. The number of steps here is dependent on your tab software and tab settings; you might have had the 'draft' ballot be submitted online by chairs or you might have the whole two-step process of a 'draft' ballot entry and the 'confirmed' ballot entry taking place within the tab room. Considerations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:292 +msgid "Regardless of whether you are working with a one-step or a two-step process, you want to arrange the tables where data-enterers are sitting such that their need to move is minimised. That might mean either have a central inbox of ballots to enter in the centre of the tables (such that everyone can reach it) or having multiple 'clusters' of enterers around boxes." +msgstr "" + +#: ../../guide/tournament-logistics.rst:293 +msgid "If work with a two-step process you want those two steps to be an active part of the spatial arrangement. That is to say, typically there will be a grouping of enterers who are working on the initial ballot entry (clustered around a box or boxes) and then a separate 'downstream' grouping of enterers that work on confirming/validating those entries. Depending on the size of tournament and quantity of runners, you either want it so that individuals from the first group can easily pass their ballots to the box of the second group; i.e. by reaching across the table or walking a short distance. At huge tournaments, you might want a dedicated person to transfer ballots between boxes to prevent enterers having to get up." +msgstr "" + +#: ../../guide/tournament-logistics.rst:294 +msgid "In a two-step process people may need to transfer roles, as generally you want to prioritise entry and then validation. Often this isn't necessarily much more efficient, but if 'rebalancing' the roles make sure that the spaces assigned to each role can accommodate extra people, and that people physically move to occupy each role." +msgstr "" + +#: ../../guide/tournament-logistics.rst:295 +msgid "In general, you want to minimise the number of ballots that each enterer feels the need to 'hoard' to work through to keep the work evenly distributed. If people are taking a large number of ballots to process, at the final stages of entering some people will have a bunch to work through while others will be finished. Making it easy to collect and pass on ballots in the space itself helps cut down on this while keeping entry efficient." +msgstr "" + +#: ../../guide/tournament-logistics.rst:296 +msgid "While the exact spatial arrangement depends on your numbers and what furniture is available, a long rectangle is a good starting point as the ballot process is in general linear (check, enter, validate, finish). Typically, this might look like a series of tables in a row with enterers sitting on either side and with the various ballot boxes in the middle." +msgstr "" + +#: ../../guide/tournament-logistics.rst:297 +msgid "When ballots have finished being enter/validated there definitely should be some sort of final 'done' box. Take care how ballots are put here, a common source of error is people putting ballots there before they are fully finished." +msgstr "" + +#: ../../guide/tournament-logistics.rst:298 +msgid "When ballots need to be corrected you generally want to 'extract' them from this process and hand them off to a tab-director or assistant to chase up and collect. There should be a forethought process for managing this; and ideally a dedicated space for it to prevent ballots being lost and to make it easy to identify ongoing issues. This might look like a process of sticking a post-it note (outlining the error) to the ballot, and then pulling it from entry/validation and placing it on a desk. Ideally you also want one of the tab directors always *not* doing data entry so that they are immediately available to manage this process." +msgstr "" + +#: ../../guide/tournament-logistics.rst:301 +msgid "Training volunteers" +msgstr "" + +#: ../../guide/tournament-logistics.rst:303 +msgid "If at all feasible you want to train that volunteers acting as runners and/or data enterers the day *before* the tournament starts otherwise the first round will be rough. It's generally a good idea for this training session to generally mirror the process of running a round. It's also generally a good idea that — even if you have enough people for dedicated runner and data-enterer roles — to train all volunteers so that they are familiar with each role and can fill in if needed. This has a couple of stages:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:307 +msgid "Introductions and details" +msgstr "" + +#: ../../guide/tournament-logistics.rst:311 +msgid "Volunteering is typically thankless and often stressful. It's also quite a dull and mechanical process: deliver paper; collect paper; enter numbers; check numbers. Given the rather unglamorous nature of their role you want your volunteers to feel welcome and a crucial part of a wider team. When meeting everyone for the first time try and run the introductions in a non-perfunctory manner and get to know people's background/interests and outline how valuable they are to the tournament." +msgstr "" + +#: ../../guide/tournament-logistics.rst:312 +msgid "As part of this process you should, note their cell phone numbers or whatever means you will use to coordinate communication between the team." +msgstr "" + +#: ../../guide/tournament-logistics.rst:313 +msgid "Figure out what will be happening during downtime and how you can make it more enjoyable. Would volunteers like to watch debates, work in the tab room, etc. Is there anything they would like during those down times (music, snacks, coffee, etc.)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:315 +msgid "Rooms and Running" +msgstr "" + +#: ../../guide/tournament-logistics.rst:319 +msgid "If runners are unfamiliar with debating in general, outline the basics of what draws are, what ballots are actually for, and what this process looks like from a debater's perspective." +msgstr "" + +#: ../../guide/tournament-logistics.rst:320 +msgid "Outline how/when the printing process occurs and who will sort/assign the ballots. Now is a good time to assign different runners to the different groups/rooms that they will be working with." +msgstr "" + +#: ../../guide/tournament-logistics.rst:321 +msgid "It is critical that, as a group, you actually go to everyone one of the venue groups and identify all of the venue rooms that are listed so that everyone knows exactly where to go. This may take some time. But it is a good chance to both check those rooms actually exist and pre-identify any problems that might occur with runners and debaters finding them." +msgstr "" + +#: ../../guide/tournament-logistics.rst:322 +msgid "Outline in general what happens during ballot collecting: when to do it, how to approach chairs, what do to if they are slow or delaying. You should raise the chance of chairs being belligerent and outline how they (and you) should deal with this." +msgstr "" + +#: ../../guide/tournament-logistics.rst:323 +msgid "If you are having runners pre-check ballots it's a good idea to fill out a few 'bad' ballots to demonstrate the kinds of checking required. If you are using any communication systems (i.e. having runners mark of buildings as 'done' in an online system) go through that now also." +msgstr "" + +#: ../../guide/tournament-logistics.rst:325 +msgid "Data entry and checking" +msgstr "" + +#: ../../guide/tournament-logistics.rst:329 +msgid "Before starting, setup logins for everyone and show them how to login. Also get an idea of what devices they will be using, or can bring, for data entry purposes. Check/ensure that they will have internet access on those devices." +msgstr "" + +#: ../../guide/tournament-logistics.rst:330 +msgid "Run through this in the actual tab room; illustrating examples with actual ballots and going through the roles in the actual spots which they will occur." +msgstr "" + +#: ../../guide/tournament-logistics.rst:331 +msgid "Run through how the seating/table/box arrangement works and the types of roles at different positions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:332 +msgid "Emphasise that in general, any ambiguities should be raised with the tab directors/assistants; i.e. that you should never guess about ballots but instead always delegate resolving issues to someone else." +msgstr "" + +#: ../../guide/tournament-logistics.rst:333 +msgid "Run through the different edge cases and things to check during entry. For example Iron Person speeches, mismatched totals, entering the wrong ballot for the wrong panellist, etc (see section below). Be sure to also go through what happens when the validation step fails; i.e. when a ballot needs to be re-entered." +msgstr "" + +#: ../../guide/tournament-logistics.rst:336 +msgid "Training the adjudication core" +msgstr "" + +#: ../../guide/tournament-logistics.rst:338 +msgid "Typically making the first-round's draw and allocation is the best time to really run through how your tab software and processes work in a 'real' environment as well as the expectations surrounding their and your role. Generous amounts of time should be budgeted for this; it's not uncommon for it to take up most of an evening. It's also worth having an older tab, or a tab full of fake data handy in order to show them how, say, the feedback or allocation interfaces look like when full of data." +msgstr "" + +#: ../../guide/tournament-logistics.rst:340 +msgid "To kick off you should probably setup tab logins for the adjudication core as necessary, outline what kinds of access they have, and (particularly if they haven't used your tab software before) outline broadly what pages they should and shouldn't access. In particular, show them how to find and parse feedback as that is often the interface where they will be spending most of their time individually. As part of this tour outline (if you haven't already) how feedback will work, as well as the means by which the adjudication core can use the tab software to keep track of feedback as it comes in. Ideally some sort of general strategy should be formed for this, so that particular people sit out rounds, or are delegated the task of catching up on feedback at other points." +msgstr "" + +#: ../../guide/tournament-logistics.rst:342 +msgid "Depending on how many runners you have it may be necessary, or beneficial, if the adjudication core helps out with data entry. However, if you go down this route the adjudication core need to be highly trained; they are often much more likely than volunteers (who are less self-confident and have more experience) to make errors. Whether you do or don't do this, ensure that adjudication core members know to come to the tab room ASAP after they have finished adjudications rather than swanning around socialising or going to lunch. Draws will often be held up just by the fact that not enough adjudication core members are present to start or finish an allocation." +msgstr "" + +#: ../../guide/tournament-logistics.rst:344 +msgid "The first-round allocation is the last thing you want to cover. It is typically your only change to slowly and comprehensively walk the adjudication core through the allocation interface and the allocation system." +msgstr "" + +#: ../../guide/tournament-logistics.rst:346 +msgid "Allocation interfaces, while often complex, should be stepped through so that the adjudication core knows precisely how to operate it themselves (if needed). They should know what it can (and can't do) and how the different features can be used and activated. For example, diversity highlights might be an optional toggle (in which case you explain how to active it, when to do so, and what it represents) or there might be parts of the interface that detail information such as a room's liveness, energy, or bracket which should be highlighted and explained (i.e. how 'liveness' is determined)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:348 +msgid "Secondly, and most importantly, is outlining how the automated process of adjudicator allocation operates, and how this can be made to match the adjudication core's preferences. Typically, you want to rely on automatic adjudicator allocations as much as possible in order to decrease the time taken to do an allocation; however every adjudication core has a different philosophy on what their perfect allocation looks like, and it is your job to try and align that ideal with what the automated system produces as much as is possible. The precursor to this is yourself knowing how your tab system allocation works: what is the relationship between a debate's bracket (or assigned priority/energy) and the numeric ranking of the automatically generated panel? Does the software optimise panel strength for a voting majority, or across all panellists? When does the software allocate solo chairs over panels? How does it avoid conflicts? Does it have (and enforce) particular expectations for a given adjudicator's score; or does it rely on a more relative comparison? The answers to the questions will often be dramatically different between different programs and you should know them in advance." +msgstr "" + +#: ../../guide/tournament-logistics.rst:350 +msgid "Most tab software will have at least some options for you to configure those automated processes — either by changing the automatic allocation's parameters directly or by controlling the ranking and feedback systems that feed into it. The first round is the prime opportunity to configure these options so that they align as close as possible with what the priorities of the adjudication core. If your feedback ranking system is mismatched with how you expect the automatic allocation to place adjudicators, or if the distribution of adjudicators across the draw is not what you expect, the adjudication core will end up wasting significant amounts of time adjusting allocations. Even if things work well using the default settings, ensure you experiment and demonstrate the consequences of changing the settings just to show that it can be done, what the general effects are, and to see if there are even-better configurations." +msgstr "" + +#: ../../guide/tournament-logistics.rst:352 +msgid "This process of tweaking the automatic allocation settings is one you should also revisit as the rounds progress." +msgstr "" + +#: ../../guide/tournament-logistics.rst:354 +msgid "How to approach diversity (typically in terms of region and gender) across an allocation in particular is something that some members of an adjudication core will not have had to consider in the context of a large tournament with time pressure or in terms of having to make explicit trade-offs. Again, you should make it clear how the software can accommodate this, and get the adjudication core to plan for how (in general) they want to approach this. Often it will form the final phase of the allocation process, and so can easily be forgotten or skipped over; or people will have different philosophies of how to approach this which are only raised at critical points." +msgstr "" + +#: ../../guide/tournament-logistics.rst:356 +msgid "Outline that there will usually be a trade-off between the quality of each allocations and the speed at which the tournament runs. When time is not a factor, many adjudication cores will often take an hour or more in order to create a perfect allocation; but they should know though that aiming for perfect during many rounds will break the schedule. You should try and get them to set some sort of time goal for allocations, and (during the rounds) ensure that they are aware of when they are going too fast or too slow. Depending on your personal preferences and the norms surrounding tab direction in your circuit you may want to actual enforce these time limits." +msgstr "" + +#: ../../guide/tournament-logistics.rst:358 +msgid "Finally, outline how you will all communicate. Again, there should be a single medium for this so that everyone knows what is going on; and this is ideally something that has been planned out beforehand with them and the organising committee. But at this point the tab team may have expanded, or there may be better options than what was being used previously. It's also worth outlining which parts of the tab team will generally be doing what roles and where — i.e. who will be rolling the draw, who will be chasing up people, etc." +msgstr "" + +#: ../../guide/tournament-logistics.rst:361 +msgid "Preparing a briefing" +msgstr "" + +#: ../../guide/tournament-logistics.rst:365 +msgid "At large tournaments there should be some form of briefing covering ballots and feedback process, even if it is just quick one. Usually you will want to be the person to design and deliver this; other people less-familiar with the system may miss details." +msgstr "" + +#: ../../guide/tournament-logistics.rst:366 +msgid "Liaise with convenors and the other people doing briefings to ensure (a) they know you're doing one; and (b) you are not overlapping in terms of content." +msgstr "" + +#: ../../guide/tournament-logistics.rst:367 +msgid "See the last section of this document for notes on what can be useful to include here" +msgstr "" + +#: ../../guide/tournament-logistics.rst:370 +msgid "Final checks" +msgstr "" + +#: ../../guide/tournament-logistics.rst:374 +msgid "Check if the convenors have made a map that clearly outlines where the rooms are. Ensure it's clear and post it to either the tab site (ideally) or somewhere like Facebook." +msgstr "" + +#: ../../guide/tournament-logistics.rst:375 +msgid "Check that convenors have some sort of way-finding system in place, i.e. chalked directions or colour-coded signs. Check these colour codes match the names of your venues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:376 +msgid "Check that the draw types are correct for each round in the tab system." +msgstr "" + +#: ../../guide/tournament-logistics.rst:377 +msgid "Check with adjudication core if/when there are secret rounds and that these are correct in the edit data base area." +msgstr "" + +#: ../../guide/tournament-logistics.rst:378 +msgid "Check how the draw will be displayed and managed. Is the projector good; how big does the text size need to be? How fast is the scroll?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:379 +msgid "If you will pre-print ballots check that you've set the \"return ballots to\" configuration setting; even if it just says \"to runners\"." +msgstr "" + +#: ../../guide/tournament-logistics.rst:382 +msgid "Managing Rounds" +msgstr "" + +#: ../../guide/tournament-logistics.rst:384 +msgid "Once everything has been setup and everyone knows what they should do, the actual process of running each round should go smoothly. It probably won't though. The earlier sections should have laid out what the ideal process for managing data entry and allocations, so this section will instead focus on what can go wrong and what to keep an eye out for." +msgstr "" + +#: ../../guide/tournament-logistics.rst:387 +msgid "Disaster scenarios" +msgstr "" + +#: ../../guide/tournament-logistics.rst:389 +msgid "There are two broad classes of disaster scenario here. The first, and more rare case is when either internet access at the venue goes out or if a web service that your tab software depends on has an outage (for example, both Tabbie 2 and Heroku-deployed Tabbycat instances depend on Amazon Web Services). The first can at least be solved temporarily if tethering is available, but if that is not possible (or the latter case occurs) you may need to switch to using an offline copy of that tab by restoring from a backup if the outage is non-transient." +msgstr "" + +#: ../../guide/tournament-logistics.rst:391 +msgid "Obviously, for this to work, you should be taking regular backups using whatever mechanism your tab software allows. Key times to do so are critical events such as finishing entering a round's data or finalising an adjudication allocation as these are especially difficult to recreate. Importantly, these backups are only useful to you if you have a downloaded copy of them; ideally download to a Dropbox or some other cloud service that will spread them across multiple computers and an online service." +msgstr "" + +#: ../../guide/tournament-logistics.rst:393 +msgid "Having an outage of internet access or a key web service go down to the point of having to switch to an offline tab is an exceedingly rare event, but one worth planning for at large tournaments. That is to say you should have ideally have an offline copy of your tabbing software setup on your local machine, and know how to restore a backup to it if necessary." +msgstr "" + +#: ../../guide/tournament-logistics.rst:395 +msgid "Backups are also useful as guards against a much more common source of error: data loss caused by user error. It is not unheard of for even experienced tab directors (or inexperienced adjudication core members) to accidentally delete an entire allocation, delete a round, or some other form of destructive action that would require a lot of work to redo. Taking backups at key points, and knowing how to restore them (to the online copy of the tab) is a useful — and occasionally essential — skill." +msgstr "" + +#: ../../guide/tournament-logistics.rst:397 +msgid "The much more common source of a major tab disruption is a major user-error or a bug within your tab software itself. Fixing these will be highly-context dependent and the best way you can prepare for them is to know your tab software well enough to understand what might have caused it or be able to contact someone else who does. That said, having backups on hand can also allow you to restore your database to before the bug or user-error occurred and try to proceed without re-triggering it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:400 +msgid "Expected problems" +msgstr "" + +#: ../../guide/tournament-logistics.rst:402 +msgid "Incorrect ballots are an inevitable tragedy. Many more optimistic tab directors will imagine that these can be prevented through sufficiently detailed briefings, recurring public shamings, or fool-proof ballot designs. While these might help in cutting down the number of errors, eliminating them entirely seems to be an unachievable goal. Note that this is particularly true at international tournaments and/or at tournaments that draw participants from circuits which have more than one predominant format." +msgstr "" + +#: ../../guide/tournament-logistics.rst:404 +msgid "While debaters as a whole display astonishing levels of innovation in discovering new ways to incorrectly fill in a ballot, there are a couple of broad cases that you should look out for an prepare people to deal with:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:408 +msgid "Not adding up score correctly. Pretty much everyone who does this will note that this is the first time that it has ever happened to them." +msgstr "" + +#: ../../guide/tournament-logistics.rst:409 +msgid "Omitting some information. Most common are not filling in total scores, the nominating winner, or the margin. Having omitted an entire team's scores or speaker names is not uncommon." +msgstr "" + +#: ../../guide/tournament-logistics.rst:410 +msgid "Scores that are outside the range." +msgstr "" + +#: ../../guide/tournament-logistics.rst:411 +msgid "Low-point wins, or tied-point wins. Typically occurs in conjunction with (1)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:412 +msgid "Poor handwriting rendering numbers illegible. While one could 'guess' whether a number is in fact a 6 or a 5 based on a team's total score, doing so is dangerous as it assumes that the person hasn't also done (1)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:413 +msgid "'Correcting' information in an ambiguous way. For example, using arrows to swap a speaker's order (which is typically circular/ambiguous) or drawing numbers over other numbers in a way that makes it unclear which is the original and which is the replacement." +msgstr "" + +#: ../../guide/tournament-logistics.rst:414 +msgid "Ballots just going entirely missing because either a runner missed the room, the chair forgot to return it, or the chair just left it in the room." +msgstr "" + +#: ../../guide/tournament-logistics.rst:416 +msgid "Ballots aside, there are a number of other common occurrences that will necessitate changes to the drawn and allocations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:420 +msgid "Teams will not turn up to debates, or turn up to debates extremely late. In both cases they will often not notifying anyone. Aside from needing to swap in a swing team in their place in the draw, it's worth keeping in mind that the necessity of a swing team might not be known until right when debates are about to start (which can lead to issues if you assume trainees or runners will be filling up the 'spare' swing team)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:421 +msgid "Adjudicators will also go missing. As with teams this can usually be caught during roll call; but might also not be known up until debates start. If the adjudication core is available they can make adjustments, but often you will need to make a call as to whether to form an even-sized panel or to redistribute adjudicators from elsewhere." +msgstr "" + +#: ../../guide/tournament-logistics.rst:422 +msgid "When a draw is released there will often be conflicts that were unknown to the tab system, and will necessitate making changes to the draw post-release. It's important that when making these changes you keep a clear record of what needs to change (if there are multiple swaps needed it can get tricky to keep track of) and ensure that all parties involved know about where they are being swapped to." +msgstr "" + +#: ../../guide/tournament-logistics.rst:425 +msgid "Ongoing checks" +msgstr "" + +#: ../../guide/tournament-logistics.rst:427 +msgid "You will have a decent amount of downtime during rounds when debates are happening. A couple of things its worth keeping an eye on during that time:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:431 +msgid "Ensuring your backups have been taken and downloaded." +msgstr "" + +#: ../../guide/tournament-logistics.rst:432 +msgid "Ensuring the tab room isn't devolving into mess." +msgstr "" + +#: ../../guide/tournament-logistics.rst:433 +msgid "If you can be bothered (and if no adjudication core member is doing so) reviewing feedback for critical issues (i.e. comments highlighting severe issues, or chairs getting very low scores) is a good way to be useful. If using paper-based feedback this can look like physically separating out these feedback forms for the attention of the adjudication core; while if using online feedback systems you may want to keep a collection of browser tabs to show." +msgstr "" + +#: ../../guide/tournament-logistics.rst:434 +msgid "Chasing up the language committee (if one exists for this tournament) to confirm which teams are in which category and what their break preferences are (if multiple breaks are not allowed). You want to have this information confirmed as soon as possible as it becomes of critical value to allocations once the draw starts segmenting into live/dead rooms." +msgstr "" + +#: ../../guide/tournament-logistics.rst:435 +msgid "Reviewing how efficiently things are running and whether there are any bottlenecks that can be better addressed in the next round. It's generally a good idea to (on a whiteboard or a spreadsheet) keep track of how long each stage of a round is taking (running, data-entry, allocation) and what (if anything) is causing delays." +msgstr "" + +#: ../../guide/tournament-logistics.rst:437 +msgid "If hosting Tabbycat on Heroku keep an eye on the metrics section of the dashboard area, noting if there are 'timeout errors' and what the average response times are. Adding more dynos should help with both." +msgstr "" + +#: ../../guide/tournament-logistics.rst:440 +msgid "Breaks and Break Rounds" +msgstr "" + +#: ../../guide/tournament-logistics.rst:443 +msgid "Generating the adjudicator's break" +msgstr "" + +#: ../../guide/tournament-logistics.rst:445 +msgid "Determining the adjudicator break generally involves a complex set of considerations rather than strictly ranking based on feedback. As such most adjudication cores will use whiteboards or Google docs to draft and discuss the possible options. One thing to note here is that breaking adjudicators will need to be marked as such in the tab at some point (both so they can be on future draws, and for publication) so you want to be careful that the tab is the final source of authority here — it is easy for information to get out of sync between what the adjudication core is using to draft the break and the system." +msgstr "" + +#: ../../guide/tournament-logistics.rst:447 +msgid "When the adjudication core is determining the break ensure that they have an idea of the *quantity* of adjudicators needed (breaking too few or too many will cause issues) and whether there are any special considerations (such as having conflicts with large portions of the draw, or leaving at a given point) that involve a specific adjudicator being considered." +msgstr "" + +#: ../../guide/tournament-logistics.rst:450 +msgid "Generating the team break" +msgstr "" + +#: ../../guide/tournament-logistics.rst:452 +msgid "Before doing so in an automated fashion, first check in your tab software whether all teams are assigned to the right break categories. Depending on whether your software supports multiple formats you probably also want to check that each break category is using the right 'rule' specified by the tournament (i.e. a WUDC- or Australs- compliant break ranking). Also double check the break size itself is correct in the software." +msgstr "" + +#: ../../guide/tournament-logistics.rst:454 +msgid "Hopefully the automated system will generate a correct break, but this should always be checked against what you'd expect the results to be from standings. Note also that there are cases, such as when a team has to leave, or when teams are or are not double-breaking, that mean the automated break results need to be overridden (typically in Tabbycat you would add a marker or note to include their ranking, but exclude them from having a break rank)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:457 +msgid "Announcing the break" +msgstr "" + +#: ../../guide/tournament-logistics.rst:459 +msgid "Mistakes are made surprisingly often during results announcements. Again, this is often a problem with incomplete or out of sync data, where print-outs, slides, or the tab site itself might not reflect (for example) last minute changes about breaks or have potentially mixed up teams or adjudicators with similar names. Things that can help:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:463 +msgid "Have a single source for what is being read out — i.e. a printed list (recommended) or the tab site itself — but don't mix and match. If making slides (often a good idea for large/crowded venues) copy the data from the canonical source being announced." +msgstr "" + +#: ../../guide/tournament-logistics.rst:464 +msgid "Double check what is being read out against the tab site, and/or whatever draft lists were used to determine the adjudicator's break. Verify with the adjudication core that everyone who should be there is, and that nobody is missing." +msgstr "" + +#: ../../guide/tournament-logistics.rst:465 +msgid "Clarify what information should be on the print-outs and the general order in which things are read. For example, it might be easy to omit breaking adjudicator's institutions, to use ambiguous abbreviations over full institution names, or to have an inconsistent approach to how the information is read (i.e. whether it is read as *wins* then *team points* then *team name*)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:466 +msgid "Without revealing any details try and get at least some guidance on how to pronounce names that people are not familiar with pronounce." +msgstr "" + +#: ../../guide/tournament-logistics.rst:467 +msgid "Have backup copies of whatever is being read from and clarify who is reading off what portions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:468 +msgid "Try to publish the break list on the tab website (or via some other online method) shortly after it is announced in order to minimise the chance of misinformation spreading." +msgstr "" + +#: ../../guide/tournament-logistics.rst:471 +msgid "Managing the out-rounds" +msgstr "" + +#: ../../guide/tournament-logistics.rst:473 +msgid "Out-rounds are generally under less time pressure and can be managed by just one or two members of the tab team. However, they tend to be run in a more haphazard fashion, so there are a couple of things to keep on top of:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:477 +msgid "You should keep track of which adjudicators have or have not been used throughout the finals allocations. It is easy for adjudication cores to forget to allocate someone and have to either drop them or promote them beyond what they had originally intended." +msgstr "" + +#: ../../guide/tournament-logistics.rst:478 +msgid "It is very easy for ballots to get lost in break rounds as chairs have less defined roles and processes in what they do with their ballots. While having correct speaker scores correctly entered for break rounds isn't a strict necessity, it is nice to have and the alternative (using fake speaks just to record the winner) can cause confusion. Closely manage distributing ballots to the chairs and collecting them as soon as possible afterwards; especially if there is any time pressure. Generally it is not worth printing off per-debate ballots; just print a stack of generic ballots at the start of the out-rounds and distribute as needed." +msgstr "" + +#: ../../guide/tournament-logistics.rst:479 +msgid "You should know, in addition to when the break rounds are, when the results announcements are. Often these announcements are saved (for suspense or logistics reasons) until particular points of time (i.e. until the evening social; or until other out-rounds are finished). Obviously it's important not to accidentally release results; but often convenors and the adjudication core will often have different ideas about when results are meant to be released." +msgstr "" + +#: ../../guide/tournament-logistics.rst:481 +msgid "If using Tabbycat to manage out-rounds with multiple break categories, note that the round progression is no longer strictly linear. So be careful with when/if results are released online and note that often you can't rely on online interface to release draws publicly." +msgstr "" + +#: ../../guide/tournament-logistics.rst:484 +msgid "Preparing for tab release" +msgstr "" + +#: ../../guide/tournament-logistics.rst:486 +msgid "At some point, if you haven't already, have a discussion with the adjudication core about when the tab itself will be released and what data will be released. Well before the tab is due to be released you want to check that anonymisations and any speaker flags (i.e. Novice, ESL) are up to date in your tab software." +msgstr "" + +#: ../../guide/tournament-logistics.rst:489 +msgid "Managing the tab release" +msgstr "" + +#: ../../guide/tournament-logistics.rst:491 +msgid "Almost there!" +msgstr "" + +#: ../../guide/tournament-logistics.rst:493 +msgid "If hosting Tabbycat on Heroku it's worth increasing the resources available to the server for the ~12 hour period following tab release; it's by far the most concentrated burst of traffic the site will receive. Because Heroku bills by the hour, even going to a relatively expensive option, such as performance dynos with auto-scaling, will be very cheap if run just for this period. That said the site should be relatively resilient even in the face of large amounts of traffic; even running with the most basic resources allocated, at worst pages will be temporarily slow or not load." +msgstr "" + +#: ../../guide/tournament-logistics.rst:495 +msgid "To get an idea of how the site is performing in the Heroku dashboard keep an eye on the average request time number and adjust the number of dynos to try and keep it under say two seconds; ideally just one. When you first turn on the tab release settings, make sure you go through and load every page before announcing it to the public, doing so will trigger the caching mechanism that means potentially complex pages (say the speaker tab) don't need to be calculated from scratch each time someone loads the page." +msgstr "" + +#: ../../guide/tournament-logistics.rst:498 +msgid "Post-tournament" +msgstr "" + +#: ../../guide/tournament-logistics.rst:500 +msgid "Once you have sufficiently recovered, consider writing up and sharing a post-script about how things went; noting things that did or didn't go well. Next year's tab directors would certainly appreciate it, and it would be great to see this kind of knowledge spread more widely. The developers of your tab software would also appreciate hearing your feedback; particularly if there were issues that could have been prevented or ameliorated by the software itself." +msgstr "" + +#: ../../guide/tournament-logistics.rst:503 +msgid "Appendix: Briefing Notes" +msgstr "" + +#: ../../guide/tournament-logistics.rst:505 +msgid "This is a very loose, but not exhaustive, collection of things that are useful to communicate to speakers and adjudicators in a tab briefing. While briefing fatigue is real, having clear expectations about how things like ballots and feedback work are highly valuable uses of the tournament's time if they can at all help cut down the kinds of problems that delay the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:508 +msgid "How feedback works" +msgstr "" + +#: ../../guide/tournament-logistics.rst:510 +msgid "Is it online, or offline? If online did people receive links? What do they do if they have lost it?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:511 +msgid "Is feedback mandatory? What accountability mechanisms are there? Will you publish the shame list online or raise it in between rounds?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:512 +msgid "Who will be submitting feedback on who? Do trainees do so?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:513 +msgid "Remind teams that only one of their feedbacks count; they should coordinate who is doing it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:514 +msgid "What is the feedback scale? What does it correspond to? Common sources of confusion:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:516 +msgid "Feedback scales are not like Uber. You do not get five stars for being adequate and generic." +msgstr "" + +#: ../../guide/tournament-logistics.rst:517 +msgid "Feedback scales are not relative to position; it is an absolute scale. That is to say, if your trainee was good, they probably do not deserve the highest rating; they get whatever rating indicates they should be a panellist or low-chair." +msgstr "" + +#: ../../guide/tournament-logistics.rst:518 +msgid "Consider accompanying the score/scale with a statement characterising how these numbers correspond to positions - e.g. a 4.0 means 'should continue on good panels, should chair low rooms'" +msgstr "" + +#: ../../guide/tournament-logistics.rst:520 +msgid "If using online submission options, what should people without phones or internet access do?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:523 +msgid "How ballots work" +msgstr "" + +#: ../../guide/tournament-logistics.rst:525 +msgid "This part of the presentation will be condescending. It is also necessary. The two causes of delays in the draw running late, and thus the tournament running late are (1) people not filling out ballots correctly or (2) people's ballots going missing. Emphasise that this should be taken seriously; minutes spent chasing bad ballots are often minutes that delay every single person at the tournament from doing what they are actually here to do. You should highlight, ideally with illustrated examples:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:529 +msgid "Which parts of the ballot *must* be filled in; people will often overlook margins, or special fields such as motion vetoes." +msgstr "" + +#: ../../guide/tournament-logistics.rst:530 +msgid "That people must specify the full names of speakers; not nicknames or just-first names. Often names will be written poorly or have ambiguities (i.e. two speakers on a team called James) and having the full name is the only way to resolve it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:531 +msgid "That people should **not draw arrows to swap the order of speakers** as these are impossible to decipher. Here, and in other areas, always *cross-out* information clearly and write it again rather than using arrows or drawing over what is there." +msgstr "" + +#: ../../guide/tournament-logistics.rst:532 +msgid "That people should try and write numbers in a manner that makes them crystal clear. Put cross-bars in 7s; bases on 1's. Make 8's actually look like two circles. If people know they have poor handwriting maybe consider writing the literal words — *seventy-one* below the numbers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:533 +msgid "That for styles that do not have a single ballot for a panel, reiterate that everyone fills in their own ballots. At Australs, if this isn't made absolutely clear someone will average their panels ballots in order to try and 'help' you." +msgstr "" + +#: ../../guide/tournament-logistics.rst:534 +msgid "That runners do not fill out ballots. In BP, remind them that only chairs should fill out ballots (i.e. it cannot be deputised to a wing). In formats with individual ballots, remind chairs to make sure their wings have actually filled out a ballot, and get them to check for errors or ambiguities." +msgstr "" + +#: ../../guide/tournament-logistics.rst:535 +msgid "That everyone is bad at math. People who think they are good at math just haven't messed up their ballot *yet*. Emphasize that people should always use their phone's calculators to check totals. At typical tournaments using exclusively paper ballots math errors happen multiple times a round, almost every round." +msgstr "" + +#: ../../guide/tournament-logistics.rst:536 +msgid "How long people have to fill out their ballots. Suggest that chairs actually keep track of this time during a stopwatch, and start moving towards critical steps (i.e. scoring) well *before* the time is up, not *once* it is up." +msgstr "" + +#: ../../guide/tournament-logistics.rst:537 +msgid "Outline what chairs should do to return ballots. If ballots are being run by runners, outline what they should do if a runner doesn't appear. If they are not being run by runners remind people that returning ballots should be there number one priority, over say giving a lengthy adjudication or team feedback. Or getting lunch." +msgstr "" + +#: ../../guide/tournament-logistics.rst:538 +msgid "Remind people to *be nice to runners* and that being mean to runners will have serious consequences." +msgstr "" + +#: ../../guide/tournament-logistics.rst:539 +msgid "Remind people that the tab team and adjudication core will not, except for absolutely exceptional circumstances, accept photos or messaged descriptions of ballots; that all results must be on paper and handled in the same manner. The adjudication core should also be reminded of this." +msgstr "" + +#: ../../guide/tournament-logistics.rst:542 +msgid "How to locate the tab room" +msgstr "" + +#: ../../guide/tournament-logistics.rst:544 +msgid "People should know how to get to the tab room, either to raise issues with the adjudication core or to correct ballot errors. Make it crystal clear where it is and how to get there. Also ensure people know not to barge in; that they should knock and wait." +msgstr "" + +#: ../../guide/tournament-logistics.rst:546 +msgid "Clearly communicate the contact details of the tab directors and get people to take them down. In most cases you do not want people going through convenors or the adjudication core for any tab-related issues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:549 +msgid "Misc" +msgstr "" + +#: ../../guide/tournament-logistics.rst:551 +msgid "Now is a good time to encourage people to consider getting involved with tabbing and tab-development. Emphasize that both do not necessarily require technical skills and that tabbers are (or should be) open to feedback and ideas from the wider community. Tell people to come find you and chat if they are interested and put up a link to the `Facebook tabbing group `_." +msgstr "" + +#: ../../guide/tournament-logistics.rst:553 +msgid "If you appreciated this guide we'd appreciate a slide promoting `Timekept `_ and `Debatekeeper `_. This would also be a good point to remind people that their timekeeping apps shouldn't be making noise *unless* they have been explicitly assigned to keep time by the chair." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/guide/upgrading.po b/docs/locale/ca/LC_MESSAGES/guide/upgrading.po new file mode 100644 index 00000000000..ead6bb204aa --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/guide/upgrading.po @@ -0,0 +1,60 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:08\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/upgrading.po\n" +"X-Crowdin-File-ID: 1309\n" +"Language: ca_ES\n" + +#: ../../guide/upgrading.rst:5 +msgid "Upgrading Tabbycat" +msgstr "" + +#: ../../guide/upgrading.rst:7 +msgid "Generally only want to upgrade copies of tab sites that are used on an ongoing basis for multiple tournaments, or if there is a bugfix release between when you setup your site and when the tournament is running." +msgstr "" + +#: ../../guide/upgrading.rst:11 +msgid "Going from any version of Tabbycat 1 to any version of Tabbycat 2 won't work with the below instructions — check out the CHANGELOG for the 2.0 version for details of how to perform this upgrade." +msgstr "" + +#: ../../guide/upgrading.rst:14 +msgid "Upgrading a Local Copy" +msgstr "" + +#: ../../guide/upgrading.rst:16 +msgid "Assuming you haven't made any changes to the Tabbycat code, upgrading a locally installed copy should just be a matter of `downloading the latest source code `_ and replacing the existing files with the new ones. If you used git to download these files initially you can just pull down the latest copy of the master branch to do this." +msgstr "" + +#: ../../guide/upgrading.rst:18 +msgid "You would then repeat the \"Install Tabbycat\" instructions for your original installation method." +msgstr "" + +#: ../../guide/upgrading.rst:21 +msgid "Upgrading on Heroku" +msgstr "" + +#: ../../guide/upgrading.rst:23 +msgid "The easiest way to upgrade a Heroku site is to create an account on Github and then to `'fork' `_ the `Tabbycat repository `_." +msgstr "" + +#: ../../guide/upgrading.rst:25 +msgid "Once you have done this you can login to your Heroku Dashboard, go to your app, and then navigate to the Deploy tab. In this tab, adjacent to *Deployment method* select the GitHub option. This will bring up a new 'Connect to GitHub' section where you can search for 'Tabbycat' to find the copy of the repository you made earlier and connect it." +msgstr "" + +#: ../../guide/upgrading.rst:29 +msgid "Once connected a new *Manual deploy* section will appear. Make sure you select the *master* branch (not develop) and then click *Deploy Branch*. This will then show the app deploying and notify you when it has finished; which may take several minutes." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/index.po b/docs/locale/ca/LC_MESSAGES/index.po new file mode 100644 index 00000000000..d3291bcd17e --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/index.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-07-01 22:45\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/index.po\n" +"X-Crowdin-File-ID: 1311\n" +"Language: ca_ES\n" + +#: ../../index.rst:18 +msgid "Installation" +msgstr "Instal·lació" + +#: ../../index.rst:32 +msgid "Using Tabbycat" +msgstr "Utilitzant Tabbycat" + +#: ../../index.rst:41 +msgid "Tabbing Guide" +msgstr "" + +#: ../../index.rst:52 +msgid "Feature notes" +msgstr "" + +#: ../../index.rst:75 +msgid "About" +msgstr "" + +#: ../../index.rst:8 +msgid "Tabbycat User Guide" +msgstr "" + +#: ../../index.rst:10 +msgid "Tabbycat is a draw tabulation system for parliamentary debate tournaments. It supports two-team formats such as Australs, World Schools, Asians, Australian Easters and all New Zealand formats, as well as British Parliamentary (WUDC). It is also highly configurable, supporting many custom variations of the above formats too. If you're looking for a general overview of the software, check out our `README on Github `_." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/install/docker.po b/docs/locale/ca/LC_MESSAGES/install/docker.po new file mode 100644 index 00000000000..395e16da790 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/install/docker.po @@ -0,0 +1,173 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:09\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/docker.po\n" +"X-Crowdin-File-ID: 1313\n" +"Language: ca_ES\n" + +#: ../../install/docker.rst:5 +msgid "Installing Locally using Docker" +msgstr "" + +#: ../../install/docker.rst:7 +msgid "Is this the best install method for you?" +msgstr "" + +#: ../../install/docker.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/docker.rst:12 +#, python-format +msgid "If you need an offline copy of Tabbycat, installing using Docker should be simpler and quicker than using the \"Install Locally on…\" instructions for your operating system. However if a Docker installation doesn't work as outlined below, it's harder to address what isn't working. If you encounter any problems with Docker, we recommend using the \"Install Locally on…\" option as a fallback, but if you need to do so, `please also report the issue you're having on GitHub `_ or :ref:`contact the developers `." +msgstr "" + +#: ../../install/docker.rst:14 +msgid "Docker is an application that makes it very easy to load and run a specific collection of software. It allows us to bundle everything necessary to run Tabbycat into a single package rather than have users install everything needed step-by-step. Once set up, Docker will allow you to start and stop a webserver (that in turn runs Tabbycat) on your computer whenever you want and without the need for internet access." +msgstr "" + +#: ../../install/docker.rst:18 +msgid "1. Download Tabbycat" +msgstr "" + +#: ../../install/docker.rst:20 +msgid "`Go to the page for our latest release `_." +msgstr "" + +#: ../../install/docker.rst:22 +msgid "Download the zip or tar.gz file." +msgstr "" + +#: ../../install/docker.rst:24 +msgid "Extract all files in it to a folder of your choice." +msgstr "" + +#: ../../install/docker.rst:28 +msgid "2. Install Docker" +msgstr "" + +#: ../../install/docker.rst:31 +msgid "If using macOS or Linux" +msgstr "" + +#: ../../install/docker.rst:33 +msgid "Install the **Docker Community Edition (stable)** from the `Docker store page `_." +msgstr "" + +#: ../../install/docker.rst:36 +msgid "If using Windows 10 Pro, Enterprise, or Education Edition" +msgstr "" + +#: ../../install/docker.rst:40 +msgid "Install the ****Docker Community Edition (stable)*** from the `Docker store page `_." +msgstr "" + +#: ../../install/docker.rst:41 +msgid "Before or shortly after installing it, Docker may ask you to enable hypervisor and restart your PC. If it asks you this follow the prompts and restart as asked." +msgstr "" + +#: ../../install/docker.rst:42 +msgid "Once Docker has finished installing, open up the newly-installed Docker application, then right-click the app's icon (the whale) in the Taskbar." +msgstr "" + +#: ../../install/docker.rst:43 +msgid "From there, hit *Settings* in the menu and *Shared Drives* in the sidebar. Tick the checkbox next to your hardrive and then click *Apply*. After that has applied exit and reopen the docker app (ie right-click the taskbar icon and hit exit) and verify that the checkbox is still there." +msgstr "" + +#: ../../install/docker.rst:49 +msgid "If using Windows 7, Windows 8, or Windows 10 Home Edition" +msgstr "" + +#: ../../install/docker.rst:51 +msgid "Install the **Docker Toolbox** from the `Docker Toolbox downloads page `_." +msgstr "" + +#: ../../install/docker.rst:53 +msgid "Not sure which edition of Windows you have? Click Start, search for \"System\", and open the Control Panel item \"System\"." +msgstr "" + +#: ../../install/docker.rst:57 +msgid "3. Run Tabbycat in Docker" +msgstr "" + +#: ../../install/docker.rst:60 +msgid "If using the Docker App" +msgstr "" + +#: ../../install/docker.rst:62 +msgid "*These instructions apply if you installed the Docker App, i.e., if you are using macOS, Linux or Windows Pro/Enterprise/Education.*" +msgstr "" + +#: ../../install/docker.rst:66 +msgid "Ensure that Docker application is open (there should be a whale icon in your menu/task bar) and that it says that Docker is running." +msgstr "" + +#: ../../install/docker.rst:68 +msgid "Browse to the location where you extracted Tabbycat to. Open up the **bin** folder there. Within that folder:" +msgstr "" + +#: ../../install/docker.rst:70 +msgid "If you're on macOS, press the Control key, click the icon for **osx_docker_start.command**, then choose Open from the shortcut menu." +msgstr "" + +#: ../../install/docker.rst:71 +msgid "If you're on Windows, open **windows_docker_start.bat**." +msgstr "" + +#: ../../install/docker.rst:72 +msgid "If you're on Linux, open up a terminal in the Tabbycat folder (*i.e.* the folder containing ``README.md``) and run ``docker-compose up``." +msgstr "" + +#: ../../install/docker.rst:74 +msgid "A terminal window should popup and bunch of text scroll by. If this is your first time running Docker it may take a while (30 minutes or more) to download the virtual machine. When the text has stopped scrolling by you should see a `Finished building Tabbycat!` message." +msgstr "" + +#: ../../install/docker.rst:76 +msgid "Open up http://localhost:8000/ (Windows) or http://0.0.0.0:8000 (OSX/Linux) in a browser of your choice!" +msgstr "" + +#: ../../install/docker.rst:78 ../../install/docker.rst:100 +msgid "If you want to reopen Tabbycat at a later time (say after restarting) repeat steps 1 through 4 here." +msgstr "" + +#: ../../install/docker.rst:81 +msgid "If using the Docker Toolbox" +msgstr "" + +#: ../../install/docker.rst:83 +msgid "*These instructions apply if you installed the Docker Toolbox, i.e., if you are using Windows 7, Windows 8 or Windows 10 Home.*" +msgstr "" + +#: ../../install/docker.rst:87 +msgid "Start the **Docker Quickstart Terminal**." +msgstr "" + +#: ../../install/docker.rst:89 +msgid "Run the command ``docker-machine ip``. Take note of the IP address it shows, for example::" +msgstr "" + +#: ../../install/docker.rst:94 +msgid "Navigate to the Tabbycat folder (*i.e.* the folder containing ``README.md``) and run ``docker-compose up``." +msgstr "" + +#: ../../install/docker.rst:96 +msgid "Open a browser and go to http://192.168.99.100:8000/, replacing \"192.168.99.100\" with whatever IP address was shown in step 2." +msgstr "" + +#: ../../install/docker.rst:98 +msgid "Once you're done and want to stop the Tabbycat server, press Ctrl+C, wait until the next prompt appears, and then run ``docker-machine stop``." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/install/heroku.po b/docs/locale/ca/LC_MESSAGES/install/heroku.po new file mode 100644 index 00000000000..653db753972 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/install/heroku.po @@ -0,0 +1,445 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:09\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/heroku.po\n" +"X-Crowdin-File-ID: 1315\n" +"Language: ca_ES\n" + +#: ../../install/heroku.rst:5 +msgid "Installing on Heroku" +msgstr "" + +#: ../../install/heroku.rst:7 +msgid "When running Tabbycat on the internet, we set it up on `Heroku `_. The project is set up to be good to go on Heroku, and it works well for us, so if you'd like to run it online, we recommend that you do the same. Naturally, this requires you to have a Heroku account." +msgstr "" + +#: ../../install/heroku.rst:9 +msgid "There are two ways to do this: a **short way** and a **long way**. Most people should use the short way. The long way requires some familiarity with command-line interfaces and Git, and requires a :ref:`local installation ` as a prerequisite, but makes it easier to :ref:`upgrade versions ` later on and (unlike the short way) allows you to import data from CSV files." +msgstr "" + +#: ../../install/heroku.rst:12 +msgid "The short way" +msgstr "" + +#: ../../install/heroku.rst:13 +msgid "Click this button:" +msgstr "" + +#: ../../install/heroku.rst:18 +msgid "This is the easiest way to deploy an instance of Tabbycat online. It requires no technical background." +msgstr "" + +#: ../../install/heroku.rst:20 +msgid "If you don't already have a Heroku account, it'll prompt you to create one. Once you're logged in to Heroku, choose a name for your installation, then scroll down and click **Deploy**. Once it's finished, click **View** and follow the prompts. Once finished, open the site and from there you can easily set up a demo data set (if you just want to learn Tabbycat) or use the data importer to set up a real tournament." +msgstr "" + +#: ../../install/heroku.rst:22 +msgid "During the setup process, Heroku will ask you to verify your account by adding a credit card. A standard Tabbycat site *will not charge* your card — charges only accrue if you deliberately add a paid service in the Heroku dashboard." +msgstr "" + +#: ../../install/heroku.rst:24 +msgid "If you can't access a credit card, you can instead install a limited version, which we call \"Tabbykitten\". However, Tabbykitten cannot send any e-mails or handle as much public traffic. We therefore strongly recommend it only as a last resort, and even then only for small tournaments. `Use this link to set up a Tabbykitten site `_." +msgstr "" + +#: ../../install/heroku.rst:27 +msgid "The long way" +msgstr "" + +#: ../../install/heroku.rst:28 +msgid "The long way sets you up with more control over your environment. Because you'll clone `our GitHub repository`_, it'll be easier for you to :ref:`upgrade your app ` when a new version is released. You'll also have the flexibility to make and contribute updates to the source code. We recommend it if you have experience with Git. It's also easier with this method to import CSV files using the command-line importer, so if you have a very large tournament, this might make importing initial data easier." +msgstr "" + +#: ../../install/heroku.rst:30 +msgid "We've tested these instructions successfully on Windows, Linux and macOS." +msgstr "" + +#: ../../install/heroku.rst:33 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/heroku.rst:35 +msgid "You need to have at least a passing familiarity with command-line interfaces to get through the longer traditional method. We'll talk you through the rest." +msgstr "" + +#: ../../install/heroku.rst:37 +msgid "When we say \"command shell\", on Windows we mean **Command Prompt**, and on Linux and macOS we mean **Terminal** (or your favourite command shell)." +msgstr "" + +#: ../../install/heroku.rst:39 ../../install/heroku.rst:100 +msgid "Advanced users" +msgstr "" + +#: ../../install/heroku.rst:42 +msgid "Tabbycat is a `Django `_ project. As such, it can be installed on any web platform that supports Django, using any SQL system that Django supports. Just be aware that we haven't tried any other platform." +msgstr "" + +#: ../../install/heroku.rst:45 +msgid "Short version of the long way" +msgstr "" + +#: ../../install/heroku.rst:47 +msgid "We provide a \"short version\" for experienced users. Don't just copy and paste these commands before you understand what they do! If things aren't set up perfectly they can fail, so it's important to supervise them the first time you do them. If this is all new to you, read the long version of the instructions below." +msgstr "" + +#: ../../install/heroku.rst:56 +msgid "If you want to :ref:`import tournament data ` from CSV files, :ref:`install Tabbycat locally `, put your CSV files in ``data/yourtournamentname``, then::" +msgstr "" + +#: ../../install/heroku.rst:68 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/heroku.rst:70 +msgid "Install the `Heroku Command Line Interface (CLI) `_, then log in with the command ``heroku login``." +msgstr "" + +#: ../../install/heroku.rst:72 +msgid "If you don't already have **Git**, follow the `instructions on the GitHub website `_ to set up Git." +msgstr "" + +#: ../../install/heroku.rst:75 +msgid "2. Set up a local installation" +msgstr "" + +#: ../../install/heroku.rst:77 +msgid "If you don't already have a local installation, follow the instructions on the page for your operating system, listed below, to set up a local installation." +msgstr "" + +#: ../../install/heroku.rst:79 +msgid "When downloading the source code, you **must** take the option involving cloning the GitHub repository using Git. In the macOS and Windows instructions, this means the option described in the \"Advanced users\" box. To do so, use these commands:" +msgstr "" + +#: ../../install/heroku.rst:86 +msgid "Do not download the .tar.gz or .zip file and extract it." +msgstr "" + +#: ../../install/heroku.rst:88 +msgid ":ref:`install-linux`" +msgstr "" + +#: ../../install/heroku.rst:89 +msgid ":ref:`install-osx`" +msgstr "" + +#: ../../install/heroku.rst:90 +msgid ":ref:`install-wsl`" +msgstr "" + +#: ../../install/heroku.rst:91 +msgid ":ref:`install-windows`" +msgstr "" + +#: ../../install/heroku.rst:93 +msgid "If you do already have a local installation, update to the latest version using:" +msgstr "" + +#: ../../install/heroku.rst:103 +msgid "It's not *strictly* necessary to have a fully functional local installation if you don't want to import data from CSV files. But it certainly helps." +msgstr "" + +#: ../../install/heroku.rst:106 +msgid "3. Deploy to Heroku" +msgstr "" + +#: ../../install/heroku.rst:110 +msgid "Navigate to your Tabbycat directory::" +msgstr "" + +#: ../../install/heroku.rst:114 +msgid "Run the script to deploy the app to Heroku. Replace ``yourappname`` with your preferred URL. Your website will be at ``yourappname.herokuapp.com``." +msgstr "" + +#: ../../install/heroku.rst:120 +msgid "This script has other options that you might find useful. Run ``python deploy_heroku.py --help`` for details." +msgstr "" + +#: ../../install/heroku.rst:122 +msgid "When this script finishes, it will open the app in your browser. It should look something like this:" +msgstr "" + +#: ../../install/heroku.rst:127 +msgid "4. Import tournament data locally" +msgstr "" + +#: ../../install/heroku.rst:129 +msgid "Steps 4 and 5 are optional; there are other methods of :ref:`importing data `. However the following method is most useful for large tournaments where manual entry would be tedious." +msgstr "" + +#: ../../install/heroku.rst:131 +msgid "Step 4 is the same as the process described in :ref:`importtournament-command`." +msgstr "" + +#: ../../install/heroku.rst:135 +msgid "Place your CSV files in ``data/yourtournamentname``, as described in :ref:`importing-initial-data`." +msgstr "" + +#: ../../install/heroku.rst:137 +msgid "Create a new, blank local database::" +msgstr "" + +#: ../../install/heroku.rst:141 +msgid "It's normally easiest to name your local database after your app name, so that if you have multiple sites, you know which one relates to which." +msgstr "" + +#: ../../install/heroku.rst:143 +msgid "Reconfigure ``DATABASES`` in your settings_local.py file to point to this new database." +msgstr "" + +#: ../../install/heroku.rst:145 +msgid "Activate your virtual environment::" +msgstr "" + +#: ../../install/heroku.rst:149 +msgid "Run initial migrations on your blank local database::" +msgstr "" + +#: ../../install/heroku.rst:154 +msgid "Import your tournament data into your blank local database::" +msgstr "" + +#: ../../install/heroku.rst:158 +msgid "If your data's not clean, it might take a few attempts to get this right. We recommend either destroying and recreating the database (``dropdb``, ``createdb``), or wiping it using ``dj flush``, before retrying." +msgstr "" + +#: ../../install/heroku.rst:160 +msgid "Check it looks like how you expect it to look, by starting your local installation::" +msgstr "" + +#: ../../install/heroku.rst:165 +msgid "5. Push the local database to Heroku" +msgstr "" + +#: ../../install/heroku.rst:167 +msgid "Once you're happy with how your local import went, you can push the local database to Heroku." +msgstr "" + +#: ../../install/heroku.rst:169 +msgid "This step wipes the Heroku database clean, and replaces it with the contents of your local database. If you have any data on the Heroku site that isn't also in your local database, **that data will be lost** and will not be recoverable." +msgstr "" + +#: ../../install/heroku.rst:171 +msgid "If you have multiple Heroku sites, you may find that the ``heroku`` commands refuse to run, prompting you to specify an app. If so, add ``--app yourappname`` to each ``heroku`` command." +msgstr "" + +#: ../../install/heroku.rst:173 +msgid "Enable maintenance mode. This takes the site offline, to ensure that no-one can possibly create or change any data on the site while you're pushing a new database up::" +msgstr "" + +#: ../../install/heroku.rst:177 +msgid "Reset the database. (Caution: This permanently deletes all information on your Heroku database!)" +msgstr "" + +#: ../../install/heroku.rst:183 +msgid "Push your local database to Heroku::" +msgstr "" + +#: ../../install/heroku.rst:187 +msgid "You might need to specify your local PostgreSQL credentials by adding ``PGUSER=yourusername PGPASSWORD=******** PGHOST=localhost`` to the *beginning* of that command. (This sets environment variables to those values for the duration of that one command.)" +msgstr "" + +#: ../../install/heroku.rst:189 +msgid "Disable maintenance mode::" +msgstr "" + +#: ../../install/heroku.rst:195 +msgid "Heroku options you may want to change" +msgstr "" + +#: ../../install/heroku.rst:197 +msgid "If you have a large tournament, you may want to customize your Heroku app. This section provides some guidance on upgrades and settings you may wish to consider. Some of these configurations require you to have the `Heroku Command Line Interface (CLI) `_ installed." +msgstr "" + +#: ../../install/heroku.rst:202 +msgid "Upgrading your database size" +msgstr "" + +#: ../../install/heroku.rst:204 +msgid "The free plan of `Heroku Postgres `_, \"Hobby Dev\", should work for most small tournaments. For large tournaments, however, you may find that you exceed the 10,000-row limit of this plan. It's difficult to give general guidance on how many rows you're likely to use, because it depends on which features of Tabbycat you use (*e.g.*, if you use adjudicator feedback). But to give some idea:" +msgstr "" + +#: ../../install/heroku.rst:206 +msgid "Australs 2016, which had 74 teams, 8 preliminary rounds and heavily used adjudicator feedback, ended up at around 30,000 rows." +msgstr "" + +#: ../../install/heroku.rst:207 +#, python-format +msgid "The Asia BP championships 2017 had 100 teams, 6 preliminary rounds, and mandatory feedback (i.e. 100% return rates) used 15,000 rows." +msgstr "" + +#: ../../install/heroku.rst:208 +msgid "A 3 vs 3 tournament with 54 teams, 5 preliminary rounds, and which only lightly used adjudicator feedback ended up using around 4,500 rows" +msgstr "" + +#: ../../install/heroku.rst:210 +msgid "If you need more than 10,000 rows, you'll need to upgrade to a paid Heroku Postgres Plan. The 10,000,000 rows allowed in the lowest paid plan, \"Hobby Basic\", should certainly be more than sufficient." +msgstr "" + +#: ../../install/heroku.rst:212 +msgid "If you're not sure, you can always start at Hobby Dev—just be prepared to `upgrade `_ during the tournament if you run close to capacity." +msgstr "" + +#: ../../install/heroku.rst:215 +msgid "Custom domain names" +msgstr "" + +#: ../../install/heroku.rst:217 +msgid "Your Heroku app will be available at ``yourappname.herokuapp.com``. You may want it to be a subdomain of your tournament's website, like ``tab.australasians2015.org``. If so, you'll need to configure your custom domain and SSL. Instructions for both are in the Heroku Dev Center:" +msgstr "" + +#: ../../install/heroku.rst:219 +msgid "`Custom Domain Names for Apps `_" +msgstr "" + +#: ../../install/heroku.rst:220 +msgid "`Heroku SSL `_" +msgstr "" + +#: ../../install/heroku.rst:222 +msgid "The custom domain name basically requires two things: a DNS ``CNAME`` entry on your website targeting ``yourappname.herokuapp.com``, and the custom domain configured on Heroku using ``heroku domains:add tab.yourwebsite.com``. You'll also need to provide an SSL certificate for your custom domain and add it using the ``heroku certs:add`` command." +msgstr "" + +#: ../../install/heroku.rst:225 +msgid "HTTPS" +msgstr "" + +#: ../../install/heroku.rst:227 +msgid "All Tabbycat sites deployed to Heroku redirect all traffic to HTTPS by default." +msgstr "" + +#: ../../install/heroku.rst:229 +msgid "For a myriad of reasons, we strongly advise against disabling this. But if for some reason you need to run on plain HTTP, you can do this by setting the ``DISABLE_HTTPS_REDIRECTS`` config variable in Heroku to ``disable`` (see `Heroku documentation on config vars `_). The value of the config var must be ``disable``; if it's anything else, HTTPS redirects will remain in place." +msgstr "" + +#: ../../install/heroku.rst:231 +msgid "Most modern browsers, after having been redirected by a site to HTTPS once, remember that that site requires HTTPS and go there for all subsequent visits even if the user typed in a plain http\\:// address. It may do this because it cached the HTTP 301 permanent redirect, stored an HSTS entry and/or tagged its session cookie to require HTTPS. If, after disabling HTTPS on your Tabbycat site, you find that you're still being redirected to HTTPS, first try a browser or computer that *hasn't* visited the site before. If that works, then remove the relevant entry from your (original) browser's cache, HSTS set and cookies, and try again." +msgstr "" + +#: ../../install/heroku.rst:234 +msgid "Time zone" +msgstr "" + +#: ../../install/heroku.rst:236 +msgid "If you want to change the time zone you nominated during deployment, you can do so by going to the `Heroku Dashboard `_, clicking on your app, going to the **Settings** tab, clicking **Reveal Config Vars** and changing the value of the ``TIME_ZONE`` variable. This value must be one of the names in the IANA tz database, *e.g.* ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``. You can find a `list of these on Wikipedia `_ in the 'TZ\\*' column." +msgstr "" + +#: ../../install/heroku.rst:239 +msgid "SendGrid account details" +msgstr "" + +#: ../../install/heroku.rst:241 +msgid "By default, Heroku will automatically create a SendGrid account for you. For small tournaments, this should work fine. For larger ones, though, SendGrid typically doesn't allow new accounts to send so many emails without additional vetting. This vetting is separate to the verification you did for your Heroku account, and as far as we're aware, it can't be done until you send your first email, by which time it's probably too late." +msgstr "" + +#: ../../install/heroku.rst:243 +msgid "If you're running a large tournament, you may wish to use your own SendGrid account instead. The free tier probably won't suffice after the trial period, but the Essentials tier should be more than adequate. If you're a student and have the `GitHub Education Pack `_, you might find the SendGrid plan here useful." +msgstr "" + +#: ../../install/heroku.rst:245 +msgid "If you set up and use your own SendGrid account, you can remove the SendGrid add-on from your Heroku app. The SendGrid add-on is only necessary if you wish to use Heroku's auto-created SendGrid account." +msgstr "" + +#: ../../install/heroku.rst:247 +msgid "To set up your app to use your own SendGrid account:" +msgstr "" + +#: ../../install/heroku.rst:251 +msgid "`Sign up for a SendGrid account `_, if you don't already have one." +msgstr "" + +#: ../../install/heroku.rst:253 +msgid "`Create an API key `_ in your SendGrid account." +msgstr "" + +#: ../../install/heroku.rst:255 +msgid "There are `instructions for how to do this in the SendGrid documentation `_. The only permission that is needed is the \"Mail Send\" permission, so you can turn off all others if you want to be safe." +msgstr "" + +#: ../../install/heroku.rst:257 +msgid "Set the following config vars in Heroku Dashboard (or using the Heroku CLI, if you have it):" +msgstr "" + +#: ../../install/heroku.rst:259 +msgid "``SENDGRID_USERNAME`` should be set to ``apikey`` (not your username)." +msgstr "" + +#: ../../install/heroku.rst:260 +msgid "``SENDGRID_PASSWORD`` should be set to your API key, which will start with ``SG*******``." +msgstr "" + +#: ../../install/heroku.rst:262 +msgid "The `Heroku SendGrid instructions `_ to do something with ``SENDGRID_API_KEY`` are **incorrect**. We figured this out by contacting SendGrid support staff. Use the above config vars instead." +msgstr "" + +#: ../../install/heroku.rst:268 +msgid "Upgrading an existing Heroku app" +msgstr "" + +#: ../../install/heroku.rst:270 +msgid "For most users, we recommend starting a new site for every tournament, when you set up the tab for that tournament. There's generally not a pressing need to upgrade Tabbycat after a tournament is concluded, and every time you deploy a new site, you'll be using the latest version at the time of deployment." +msgstr "" + +#: ../../install/heroku.rst:272 +msgid "To upgrade an existing Heroku-based Tabbycat app to the latest version, you need to *deploy* the current version of Tabbycat to your Heroku app. There are several ways to do this. We list one below, primarily targeted at users with some background in Git." +msgstr "" + +#: ../../install/heroku.rst:274 +msgid "The essence of it is that you need to `create a Git remote `_ for your Heroku app (if you don't already have one), then `push to it `_." +msgstr "" + +#: ../../install/heroku.rst:276 +msgid "You should **always** :ref:`back up your database ` before upgrading Tabbycat." +msgstr "" + +#: ../../install/heroku.rst:278 +msgid "You'll need both Git and the Heroku CLI, and you'll need to be logged in to the Heroku CLI already." +msgstr "" + +#: ../../install/heroku.rst:280 +msgid "Take a backup of your database::" +msgstr "" + +#: ../../install/heroku.rst:284 +msgid "If you haven't already, clone our Git repository and check out the master branch::" +msgstr "" + +#: ../../install/heroku.rst:289 +msgid "If you've already cloned our Git repository, don't forget to pull so you're up to date::" +msgstr "" + +#: ../../install/heroku.rst:294 +msgid "Check to see if you have a Git remote already in place::" +msgstr "" + +#: ../../install/heroku.rst:300 +msgid "If you do, the name of the remote will be on the left (``heroku`` in the above example), and the URL of your Git repository will be on the right. In the example above, our Tabbycat site URL would be ``mytournament2018.herokuapp.com``; the Git remote URL is then ``https://git.heroku.com/mytournament2018.git``." +msgstr "" + +#: ../../install/heroku.rst:302 +msgid "If a Git remote URL for your Tabbycat site *doesn't* appear, then create one::" +msgstr "" + +#: ../../install/heroku.rst:307 +msgid "If you tab many tournaments, it'll probably be helpful to use a name other than ``heroku`` (say, ``mytournament2018``), so that you can manage multiple tournaments." +msgstr "" + +#: ../../install/heroku.rst:309 +msgid "Push to Heroku::" +msgstr "" + +#: ../../install/heroku.rst:313 +msgid "This will take a while to complete." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/install/linux.po b/docs/locale/ca/LC_MESSAGES/install/linux.po new file mode 100644 index 00000000000..010638126ea --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/install/linux.po @@ -0,0 +1,249 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:09\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/linux.po\n" +"X-Crowdin-File-ID: 1317\n" +"Language: ca_ES\n" + +#: ../../install/linux.rst:5 +msgid "Installing Locally on Linux" +msgstr "" + +#: ../../install/linux.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/linux.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/linux.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on Linux, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/linux.rst:14 +msgid "The instructions apply to both Linux, and :ref:`Linux on Windows `." +msgstr "" + +#: ../../install/linux.rst:17 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/linux.rst:19 +msgid "You need to be familiar with command-line interfaces to get through this comfortably. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest." +msgstr "" + +#: ../../install/linux.rst:21 ../../install/linux.rst:56 +#: ../../install/linux.rst:130 +msgid "Advanced users" +msgstr "" + +#: ../../install/linux.rst:24 +msgid "If you wish to use an SQL engine other that PostgreSQL, most of Tabbycat should work, but a few features rely on SQL functions that aren't supported by all engines. To configure Tabbycat to use a different engine, set the ``DATABASES`` `Django setting `_ accordingly." +msgstr "" + +#: ../../install/linux.rst:27 +msgid "Short version" +msgstr "" + +#: ../../install/linux.rst:38 +msgid "Then create **settings/local.py** as described :ref:`below `, then::" +msgstr "" + +#: ../../install/linux.rst:53 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/linux.rst:54 +msgid "First, you need to install all of the software on which Tabbycat depends, if you don't already have it installed." +msgstr "" + +#: ../../install/linux.rst:59 +msgid "These instructions are for Ubuntu, and are targeted at Ubuntu 18.04. If you have another distribution of Linux, we trust you'll know how to navigate the package manager for your distribution to install the dependencies." +msgstr "" + +#: ../../install/linux.rst:64 +msgid "1(a). Python" +msgstr "" + +#: ../../install/linux.rst:65 +msgid "Tabbycat requires Python 3.6 or later. You probably already have Python 3.6, but you'll also need the development package in order to install Psycopg2 later. The ``venv`` module will come in handy too. Install::" +msgstr "" + +#: ../../install/linux.rst:69 +msgid "Check the version::" +msgstr "" + +#: ../../install/linux.rst:74 +msgid "Tabbycat does not support Python 2. You must use Python 3.6 or later." +msgstr "" + +#: ../../install/linux.rst:77 +msgid "1(b). PostgreSQL" +msgstr "" + +#: ../../install/linux.rst:78 +msgid "*PostgreSQL is a database management system.*" +msgstr "" + +#: ../../install/linux.rst:80 +msgid "Install PostgreSQL using the `PostgreSQL installation instructions here `_." +msgstr "" + +#: ../../install/linux.rst:82 +msgid "Normally, installing the latest stable version should be best, but if you're having issues, install the same version as the current `default version on Heroku `_, as that will be what is currently most commonly used with Tabbycat. If you're planning on pushing data between your local installation and a Heroku site, it's best to match the Heroku's current default version." +msgstr "" + +#: ../../install/linux.rst:84 +msgid "You'll also need the ``libpq-dev`` package in order to install Psycopg2 later::" +msgstr "" + +#: ../../install/linux.rst:91 +msgid "1(c). Node.js/NPM" +msgstr "" + +#: ../../install/linux.rst:92 +msgid "*Node.js is a JavaScript runtime.*" +msgstr "" + +#: ../../install/linux.rst:94 +msgid "Tabbycat requires Node and its package manager to compile front-end dependencies. Install using:" +msgstr "" + +#: ../../install/linux.rst:104 +msgid "1(d). Other development tools" +msgstr "" + +#: ../../install/linux.rst:105 +msgid "Some of the Python packages require GCC, G++ and Make in order to install::" +msgstr "" + +#: ../../install/linux.rst:112 +msgid "2. Get the source code" +msgstr "" + +#: ../../install/linux.rst:114 +msgid "Choose either of the following two methods." +msgstr "" + +#: ../../install/linux.rst:117 +msgid "Method 1 (Git clone)" +msgstr "" + +#: ../../install/linux.rst:119 +msgid "If you have Git, life will be easier if you clone `our GitHub repository`_:" +msgstr "" + +#: ../../install/linux.rst:126 +msgid "(You can find out if you have Git using ``git --version``. If you don't, you can install it using ``sudo apt install git``.)" +msgstr "" + +#: ../../install/linux.rst:128 +msgid "The default branch is ``develop``, so you need to explicitly change the branch to ``master``, which is what the ``git checkout master`` line does." +msgstr "" + +#: ../../install/linux.rst:133 +msgid "You might like to fork the repository first, to give yourself a little more freedom to make code changes on the fly (and potentially :ref:`contribute ` them to the project)." +msgstr "" + +#: ../../install/linux.rst:136 +msgid "Method 2 (tarball)" +msgstr "" + +#: ../../install/linux.rst:138 +msgid "If you don't want to use Git, simply download and extract:" +msgstr "" + +#: ../../install/linux.rst:147 +msgid "3. Set up a new database" +msgstr "" + +#: ../../install/linux.rst:149 +msgid "You can skip step 1 if this is not your first installation. Every Tabbycat installation requires its own database, but they can use the same login role if you like." +msgstr "" + +#: ../../install/linux.rst:151 +msgid "Create a new user account with a password, replacing ``myusername`` with whatever name you prefer. If you don't know what username to pick, use ``tabbycat``. Grant this user the ability to create databases, since this'll make it easier to spin up new instances of Tabbycat in the future." +msgstr "" + +#: ../../install/linux.rst:157 +msgid "If you'll be running multiple instances of Tabbycat, developing, or diving into the database yourself, you might find it convenient to set up client authentication so that you don't need to do all manual operations from ``sudo -u postgres``. See the `PostgreSQL documentation on client authentication `_ for more information. For example, you could add a ``local all myusername md5`` line to the *pg_hba.conf* file, or you could define a mapping in *pg_ident.conf* and append the ``map=`` option to the ``local all all peer`` line in *pg_hba.conf*." +msgstr "" + +#: ../../install/linux.rst:159 +msgid "Create a new database, replacing ``mydatabasename`` with whatever name you prefer, probably the name of the tournament you're running::" +msgstr "" + +#: ../../install/linux.rst:167 +msgid "4. Install Tabbycat" +msgstr "" + +#: ../../install/linux.rst:168 +msgid "Almost there!" +msgstr "" + +#: ../../install/linux.rst:170 +msgid "Navigate to your Tabbycat directory::" +msgstr "" + +#: ../../install/linux.rst:176 +msgid "Start a new virtual environment. We suggest the name ``venv``, though it can be any name you like:" +msgstr "" + +#: ../../install/linux.rst:182 +msgid "Run the ``activate`` script. This puts you \"into\" the virtual environment::" +msgstr "" + +#: ../../install/linux.rst:186 +msgid "Install Tabbycat's requirements into your virtual environment::" +msgstr "" + +#: ../../install/linux.rst:192 +msgid "Navigate to the **tabbycat/settings** sub folder and copy **local.example** to **local.py**. Find this part in your new **local.py**, and fill in the blanks as indicated:" +msgstr "" + +#: ../../install/linux.rst:207 +msgid "Optionally, replace the value in this line in the same file with your own time zone, as defined in the `IANA time zone database `_ (*e.g.*, ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``)::" +msgstr "" + +#: ../../install/linux.rst:211 +msgid "Navigate to the **tabbycat** sub-directory, initialize the database, compile the assets, and create a user account for yourself::" +msgstr "" + +#: ../../install/linux.rst:219 +msgid "Start Tabbycat!" +msgstr "" + +#: ../../install/linux.rst:225 +msgid "It should show something like this::" +msgstr "" + +#: ../../install/linux.rst:229 +msgid "Open your browser and go to the URL printed above. (In the above example, it's http://127.0.0.1:8000.) It should look something like the screenshot below. If it does, great! You've successfully installed Tabbycat." +msgstr "" + +#: ../../install/linux.rst:234 +msgid "Naturally, your database is currently empty, so proceed to :ref:`importing initial data `." +msgstr "" + +#: ../../install/linux.rst:237 +msgid "Starting up an existing Tabbycat instance" +msgstr "" + +#: ../../install/linux.rst:238 +msgid "To start your Tabbycat instance up again next time you use your computer::" +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/install/local.po b/docs/locale/ca/LC_MESSAGES/install/local.po new file mode 100644 index 00000000000..f584046ff34 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/install/local.po @@ -0,0 +1,156 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:09\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/local.po\n" +"X-Crowdin-File-ID: 1319\n" +"Language: ca_ES\n" + +#: ../../install/local.rst:5 +msgid "Local Installations" +msgstr "" + +#: ../../install/local.rst:8 +msgid "What is a local installation?" +msgstr "" + +#: ../../install/local.rst:10 +msgid "Tabbycat is a web-based system: it's designed to run as a web site. However, instead of installing it on a web server, you can install it on your computer, serving web pages to yourself. This is called a local installation." +msgstr "" + +#: ../../install/local.rst:12 +msgid "Then, when you open your browser, you can use Tabbycat like any other web site. The only difference is that this one is on **your** computer, not some computer in a data centre in a far-away land. In effect, you are getting your computer to behave like a web server." +msgstr "" + +#: ../../install/local.rst:17 +msgid "Should I use a local installation?" +msgstr "" + +#: ../../install/local.rst:19 +msgid "In most cases, you should make an online Tabbycat installation by :ref:`setting up an instance on Heroku `. This has a number of major advantages:" +msgstr "" + +#: ../../install/local.rst:21 +msgid "The installation process is easier." +msgstr "" + +#: ../../install/local.rst:22 +msgid "You can enter ballots and manage your tournament from multiple computers." +msgstr "" + +#: ../../install/local.rst:23 +msgid "Participants can access the draw, motions, results and more online." +msgstr "" + +#: ../../install/local.rst:24 +msgid "Heroku's data centers are less likely to fail than your computer is." +msgstr "" + +#: ../../install/local.rst:25 +msgid "Heroku e-mails Tabbycat's developers error reports to help us fix bugs." +msgstr "" + +#: ../../install/local.rst:27 +msgid "In some cases, you might have a good reason to use a local installation. We can think of just one such reason: If you won't have access to the internet at your tournament, or if internet access will be flaky, then you should use a local installation." +msgstr "" + +#: ../../install/local.rst:32 +msgid "You'll need internet access to download dependencies during the local installation process. So if you're not expecting to have reliable internet access at your tournament, be sure to have Tabbycat installed *before* you get there!" +msgstr "" + +#: ../../install/local.rst:37 +msgid "Advanced users" +msgstr "" + +#: ../../install/local.rst:40 +msgid "Tabbycat is a `Django `_ project, so if you have your own preferred method of running Django projects, you can also do that. Just be aware that we haven't tried it." +msgstr "" + +#: ../../install/local.rst:45 +msgid "Okay, so how do I do it?" +msgstr "" + +#: ../../install/local.rst:47 +msgid "The easiest option is to :ref:`install Tabbycat using Docker `. This method should work across all operating systems and is by far the easiest way to get a local copy running." +msgstr "" + +#: ../../install/local.rst:49 +msgid "If installing using Docker does not work, or if you want to be able to modify Tabbycat's code we also have a number of instructions for manually setting up a copy of Tabbycat. There instructions are here:" +msgstr "" + +#: ../../install/local.rst:51 +msgid ":ref:`install-linux`" +msgstr "" + +#: ../../install/local.rst:52 +msgid ":ref:`install-osx`" +msgstr "" + +#: ../../install/local.rst:53 +msgid ":ref:`install-wsl`" +msgstr "" + +#: ../../install/local.rst:54 +msgid ":ref:`install-windows`" +msgstr "" + +#: ../../install/local.rst:57 +msgid "Advanced uses" +msgstr "" + +#: ../../install/local.rst:60 +msgid "Can others access my local install?" +msgstr "" + +#: ../../install/local.rst:62 +msgid "Local installations can also take advantage of multiple-computer site access, including data entry---it's just takes more work than a Heroku installation to set up." +msgstr "" + +#: ../../install/local.rst:64 +msgid "Since a local installation is just having your computer run a web server, it can serve other computers too. You can make this work even if you don't have internet access: all you need is a router that you can use to connect a few computers together. Then other computers on your local network can access the Tabbycat site hosted on your computer. We did this at Victoria Australs 2012." +msgstr "" + +#: ../../install/local.rst:66 +msgid "We don't provide detailed instructions for this; we leave it for advanced users to set up themselves. As a rough guide:" +msgstr "" + +#: ../../install/local.rst:68 +msgid "You need to pass in your computer's IP address and port to the `runserver` command, for example, if your computer (the one acting as a server) is 196.168.0.2 and you want to run it on port 8000: ``dj runserver 192.168.0.2:8000``" +msgstr "" + +#: ../../install/local.rst:69 +msgid "You need to configure your firewall settings to allow incoming connections on the IP address and port you specified in that command." +msgstr "" + +#: ../../install/local.rst:70 +msgid "Be aware that local installs use the Django development server, whose **security is not tested**. Therefore, it's a good idea to make sure your firewall **only lets in computers on your local network** (or, if you're really paranoid, isolate the network from the internet completely)." +msgstr "" + +#: ../../install/local.rst:73 +msgid "Can I run an internet-accessible website from a local installation?" +msgstr "" + +#: ../../install/local.rst:75 +msgid "Probably not. Even if you disable your firewall, chances are your home router (or university router) will block any connections from the outside world to you. Even if you can though, **you really shouldn't**. The local installation uses the *Django development server*, which is a lightweight server designed for developers. Specifically, Django **does not test the security of its development server** in the way that proper web servers do. That is: It's a security risk to run a local installation as an internet-accessible site. Don't do it. `Install Tabbycat on Heroku `_ instead." +msgstr "" + +#: ../../install/local.rst:77 +msgid "Alternatively, if you have a background in web development, you might choose to install Tabbycat on your own production server. It's a Django project, so any means of supporting Django projects should work fine." +msgstr "" + +#: ../../install/local.rst:79 +msgid "It's safe to run on a small, isolated network (see above) with your firewall correctly configured because you presumably trust everyone you let on the network!" +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/install/osx.po b/docs/locale/ca/LC_MESSAGES/install/osx.po new file mode 100644 index 00000000000..e25f5b56015 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/install/osx.po @@ -0,0 +1,216 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:09\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/osx.po\n" +"X-Crowdin-File-ID: 1321\n" +"Language: ca_ES\n" + +#: ../../install/osx.rst:5 +msgid "Installing Locally on macOS" +msgstr "" + +#: ../../install/osx.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/osx.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/osx.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on macOS, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/osx.rst:15 +msgid "Requisite technical knowledge" +msgstr "" + +#: ../../install/osx.rst:17 +msgid "You need to be familiar with command-line interfaces to get through this comfortably. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest. You just need to be prepared to bear with us. It'll take a while the first time, but it gets easier after that." +msgstr "" + +#: ../../install/osx.rst:19 +msgid "Every line in the instructions that begins with ``$`` is a command that you need to run in a **Terminal**, but without the ``$``: that sign is a convention used in instructions to make it clear that it is a command you need to run." +msgstr "" + +#: ../../install/osx.rst:21 ../../install/osx.rst:42 ../../install/osx.rst:68 +msgid "Advanced users" +msgstr "" + +#: ../../install/osx.rst:24 +msgid "If you wish to use an SQL engine other that PostgreSQL, most of Tabbycat should work, but a few features rely on SQL functions that aren't supported by all engines. To configure Tabbycat to use a different engine, set the ``DATABASES`` `Django setting `_ accordingly." +msgstr "" + +#: ../../install/osx.rst:27 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/osx.rst:29 +msgid "First, you need to install all of the software on which Tabbycat depends, if you don't already have it installed." +msgstr "" + +#: ../../install/osx.rst:32 +msgid "1(a). Python" +msgstr "" + +#: ../../install/osx.rst:33 +msgid "Tabbycat requires Python 3.6 or later. macOS only comes with Python 2.7, so you'll need to install this. You can download the latest version from the `Python website `_." +msgstr "" + +#: ../../install/osx.rst:35 +msgid "The executable will probably be called ``python3``, rather than ``python``. Check::" +msgstr "" + +#: ../../install/osx.rst:40 +msgid "Tabbycat does not support Python 2. You must use Python 3.6 or later." +msgstr "" + +#: ../../install/osx.rst:45 +msgid "These instructions will use the ``venv`` module. If you prefer, you can use `Virtualenv `_ instead." +msgstr "" + +#: ../../install/osx.rst:48 +msgid "1(b). Postgres.app" +msgstr "" + +#: ../../install/osx.rst:50 +msgid "Download `Postgres.app `_, move it to your Applications folder, and open it. This should place an icon in your menu bar, showing that the postgres database is running. Whenever you are running Tabbycat you'll need to have this app running." +msgstr "" + +#: ../../install/osx.rst:52 +msgid "You'll need to use the PostgreSQL command-line tools, so run the command that the Postgres.app suggests in its `installation instructions `_ for adding them to your ``$PATH``. As of February 2018, it was::" +msgstr "" + +#: ../../install/osx.rst:57 +msgid "1(c). Node.js/NPM" +msgstr "" + +#: ../../install/osx.rst:59 +msgid "Download and run the `node.js 8 macOS Installer (.pkg) `_" +msgstr "" + +#: ../../install/osx.rst:62 +msgid "2. Get the source code" +msgstr "" + +#: ../../install/osx.rst:64 +msgid "`Go to the page for our latest release `_." +msgstr "" + +#: ../../install/osx.rst:65 +msgid "Download the zip or tar.gz file." +msgstr "" + +#: ../../install/osx.rst:66 +msgid "Extract all files in it to a folder of your choice." +msgstr "" + +#: ../../install/osx.rst:71 +msgid "If you've used Git before, you might prefer to clone `our GitHub repository`_ instead. Don't forget to check out the |vrelease| tag or the master branch." +msgstr "" + +#: ../../install/osx.rst:73 +msgid "Even better, you might like to fork the repository first, to give yourself a little more freedom to make code changes on the fly (and potentially :ref:`contribute ` them to the project)." +msgstr "" + +#: ../../install/osx.rst:76 +msgid "3. Set up a new database" +msgstr "" + +#: ../../install/osx.rst:78 +msgid "You can skip steps 1--3 if this is not your first installation. Every Tabbycat installation requires its own database, but they can use the same login role if you like." +msgstr "" + +#: ../../install/osx.rst:80 +msgid "Open up a copy of the Terminal app, then copy/paste or type in::" +msgstr "" + +#: ../../install/osx.rst:84 +msgid "Hit enter then quit and reopen the Terminal app." +msgstr "" + +#: ../../install/osx.rst:86 +msgid "Create a new user account with a password, replacing ``myusername`` with whatever name you prefer. If you don't know what username to pick, use ``tabbycat``." +msgstr "" + +#: ../../install/osx.rst:92 +msgid "Create a new database, replacing ``mydatabasename`` with whatever name you prefer, probably the name of the tournament you're running::" +msgstr "" + +#: ../../install/osx.rst:96 +msgid "In terminal type in::" +msgstr "" + +#: ../../install/osx.rst:101 +msgid "4. Install Tabbycat" +msgstr "" + +#: ../../install/osx.rst:102 +msgid "Almost there!" +msgstr "" + +#: ../../install/osx.rst:104 +msgid "Navigate to your Tabbycat directory::" +msgstr "" + +#: ../../install/osx.rst:108 +msgid "Copy **settings/local.example** to **settings/local.py**. Find this part in your new **local.py**, and fill in the blanks as indicated:" +msgstr "" + +#: ../../install/osx.rst:123 +msgid "Optionally, replace the value in this line in the same file with your own time zone, as defined in the `IANA time zone database `_ (*e.g.*, ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``)::" +msgstr "" + +#: ../../install/osx.rst:127 +msgid "Ensure you are in the main Tabbycat directory (not the config folder where **settings_local.py** is and start a new virtual environment. We suggest the name ``venv``, though it can be any name you like::" +msgstr "" + +#: ../../install/osx.rst:131 +msgid "Run the ``activate`` script. This puts you \"into\" the virtual environment::" +msgstr "" + +#: ../../install/osx.rst:135 +msgid "Install Tabbycat's requirements into your virtual environment::" +msgstr "" + +#: ../../install/osx.rst:141 +msgid "Navigate to the **tabbycat** sub folder, initialize the database, compile the assets, and create a user account for yourself::" +msgstr "" + +#: ../../install/osx.rst:149 +msgid "Start Tabbycat!" +msgstr "" + +#: ../../install/osx.rst:155 +msgid "It should show something like this::" +msgstr "" + +#: ../../install/osx.rst:159 +msgid "Open your browser and go to the URL printed above. (In the above example, it's http://127.0.0.1:8000.) It should look something like the screenshot below. If it does, great! You've successfully installed Tabbycat." +msgstr "" + +#: ../../install/osx.rst:164 +msgid "Naturally, your database is currently empty, so proceed to :ref:`importing initial data `." +msgstr "" + +#: ../../install/osx.rst:167 +msgid "Starting up an existing Tabbycat instance" +msgstr "" + +#: ../../install/osx.rst:168 +msgid "To start your Tabbycat instance up again next time you use your computer::" +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/install/windows.po b/docs/locale/ca/LC_MESSAGES/install/windows.po new file mode 100644 index 00000000000..1145056cc9b --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/install/windows.po @@ -0,0 +1,317 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:09\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/windows.po\n" +"X-Crowdin-File-ID: 1323\n" +"Language: ca_ES\n" + +#: ../../install/windows.rst:5 +msgid "Installing Locally on Windows" +msgstr "" + +#: ../../install/windows.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/windows.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/windows.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on Windows, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/windows.rst:14 +msgid "If you have Windows 10 and any experience with Linux, we recommend installing it on :ref:`Linux on Windows (WSL) ` instead, which is much easier than the process below." +msgstr "" + +#: ../../install/windows.rst:17 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/windows.rst:19 +msgid "You need to be familiar with command-line interfaces to get through this comfortably. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest. You just need to be prepared to bear with us. It'll take a while the first time, but it gets easier after that." +msgstr "" + +#: ../../install/windows.rst:21 +msgid "In these instructions, we'll use **Windows PowerShell**, a command-line interface that comes with every installation of Windows (since XP). The easiest way to find it (on Windows 7 and later) is to search for it in your Start Menu. Every line in the instructions that begins with ``>`` is a command that you need to run in PowerShell, but without the ``>``: that sign is a convention used in instructions to make it clear that it is a command you need to run." +msgstr "" + +#: ../../install/windows.rst:23 ../../install/windows.rst:81 +#: ../../install/windows.rst:104 +msgid "Advanced users" +msgstr "" + +#: ../../install/windows.rst:26 +msgid "If you wish to use an SQL engine other that PostgreSQL, most of Tabbycat should work, but a few features rely on SQL functions that aren't supported by all engines. To configure Tabbycat to use a different engine, set the ``DATABASES`` `Django setting `_ accordingly." +msgstr "" + +#: ../../install/windows.rst:29 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/windows.rst:31 +msgid "First, you need to install all of the software on which Tabbycat depends, if you don't already have it installed." +msgstr "" + +#: ../../install/windows.rst:36 +msgid "1(a). Python" +msgstr "" + +#: ../../install/windows.rst:37 +msgid "*Python is a popular programming language, and the language in which the core of Tabbycat is coded.*" +msgstr "" + +#: ../../install/windows.rst:39 +msgid "Download and install the latest version of Python 3.6 from the `Python website `_. In the installer, check the box to add Python to your PATH (see box below)." +msgstr "" + +#: ../../install/windows.rst:42 +msgid "Which file should I download?" +msgstr "" + +#: ../../install/windows.rst:44 +msgid "Regardless of if you have 64-bit or 32-bit Windows, choose the \"Windows x86 executable installer\"." +msgstr "" + +#: ../../install/windows.rst:46 +msgid "**Please take note:** Just after you open the installer, **check the \"Add Python 3.6 to PATH\" box**:" +msgstr "" + +#: ../../install/windows.rst:51 +msgid "To check that Python is installed correctly, open Windows PowerShell, type ``python`` and press Enter. It should look something like this. If you installed the 32-bit version, it will say ``32 bit`` instead of ``64 bit``." +msgstr "" + +#: ../../install/windows.rst:55 +msgid "(To exit Python, type ``exit()`` then press Enter.)" +msgstr "" + +#: ../../install/windows.rst:57 +msgid "**If you already have Python**, great! Some things to double-check:" +msgstr "" + +#: ../../install/windows.rst:59 +msgid "You must have at least Python 3.6 (Python 2 is not supported.)" +msgstr "" + +#: ../../install/windows.rst:60 +msgid "Your installation path must not have any spaces in it." +msgstr "" + +#: ../../install/windows.rst:61 +msgid "If that doesn't work, note that the following must be part of your ``PATH`` environment variable: ``C:\\Python36;C:\\Python36\\Scripts`` (or as appropriate for your installation directory). Follow `the instructions here `_ to add this to your path." +msgstr "" + +#: ../../install/windows.rst:66 +msgid "1(b). PostgreSQL" +msgstr "" + +#: ../../install/windows.rst:67 +msgid "*PostgreSQL is a database management system.*" +msgstr "" + +#: ../../install/windows.rst:69 +msgid "Go to the `PostgreSQL downloads page `_, then follow the link through to EnterpriseDB to download and install the latest version of PostgreSQL." +msgstr "" + +#: ../../install/windows.rst:71 +msgid "Once PostgreSQL is installed, the PostgreSQL service will run on your computer whenever you are using it. You might prefer to configure it so that it only runs when you want to run Tabbycat. To do this, open \"Services\" in your Control Panel on Windows, find the PostgreSQL service, and change its startup type to \"Manual\". This will tell it not to start whenever you log in. Then, if you want to run the server (so you can use Tabbycat), you can do so from \"Services\" by selecting the PostgreSQL service and clicking \"Start the service\"." +msgstr "" + +#: ../../install/windows.rst:74 +msgid "1(c). Git" +msgstr "" + +#: ../../install/windows.rst:75 +msgid "*Git is a version control system.*" +msgstr "" + +#: ../../install/windows.rst:77 +msgid "We won't use Git directly, but Node.js (which we install in the next step) requires Git to work. So, install the latest version for Windows from the `Git website `_." +msgstr "" + +#: ../../install/windows.rst:84 +msgid "If you already have `GitHub Desktop `_ installed, you might think that this would be good enough. Unfortunately, it's not---GitHub Desktop installs a portable version of Git. Node.js, on the other hand, requires the ``git`` to be in the ``PATH``, so it can call it directly. The easiest (but not only) way to do this is just to install Git from the link above." +msgstr "" + +#: ../../install/windows.rst:92 +msgid "1(d). Node.js/NPM" +msgstr "" + +#: ../../install/windows.rst:93 +msgid "*Node.js is a JavaScript runtime.*" +msgstr "" + +#: ../../install/windows.rst:95 +msgid "Download and run the node.js 8 Installer (.msi) for either `x64 versions `_ of Windows or `x86 versions `_." +msgstr "" + +#: ../../install/windows.rst:98 +msgid "2. Get the source code" +msgstr "" + +#: ../../install/windows.rst:100 +msgid "`Go to the page for our latest release `_." +msgstr "" + +#: ../../install/windows.rst:101 +msgid "Download the zip file." +msgstr "" + +#: ../../install/windows.rst:102 +msgid "Extract all files in it to a folder of your choice." +msgstr "" + +#: ../../install/windows.rst:107 +msgid "If you've used Git before, you might prefer to clone `our GitHub repository`_ instead. Don't forget to check out the |vrelease| tag or the master branch." +msgstr "" + +#: ../../install/windows.rst:109 +msgid "Even better, you might like to fork the repository first, to give yourself a little more freedom to make code changes on the fly (and potentially :ref:`contribute ` them to the project)." +msgstr "" + +#: ../../install/windows.rst:114 +msgid "3. Set up a new database" +msgstr "" + +#: ../../install/windows.rst:116 +msgid "You can skip steps 2 and 3 if this is not your first installation. Every Tabbycat installation requires its own database, but they can use the same login role if you like." +msgstr "" + +#: ../../install/windows.rst:118 +msgid "Open the **pgAdmin** tool, which you installed as part of installing PostgreSQL. In the object browser on the left, double-click the server marked \"(localhost:5432)\". Log in using the password you set during installation." +msgstr "" + +#: ../../install/windows.rst:120 +msgid "Right-click Login Roles, and click \"New Login Role…\"" +msgstr "" + +#: ../../install/windows.rst:124 +msgid "Fill in the New Login Role box as follows (everything not listed below can be left as-is):" +msgstr "" + +#: ../../install/windows.rst:126 +msgid "In the **Properties** tab, in **Role Name**, choose a user account name. (If you don't know what to pick, we suggest \"tabbycat\".)" +msgstr "" + +#: ../../install/windows.rst:127 +msgid "In the **Definition** tab, choose a **Password** and type it in **Password (again)**." +msgstr "" + +#: ../../install/windows.rst:129 +msgid "Then click OK. (Remember this user name and password, you'll need it later.)" +msgstr "" + +#: ../../install/windows.rst:131 +msgid "Right-click Databases, and click \"New Database…\"" +msgstr "" + +#: ../../install/windows.rst:135 +msgid "Fill in the New Database box as follows (everything not listed below can be left as-is):" +msgstr "" + +#: ../../install/windows.rst:137 +msgid "In the **Properties** tab, in **Name**, choose a database name (with no spaces in it)." +msgstr "" + +#: ../../install/windows.rst:138 +msgid "In the **Properties** tab, in **Owner**, type the name of the login role you just created." +msgstr "" + +#: ../../install/windows.rst:140 +msgid "Then click OK. (Remember the database name, you'll need it later.)" +msgstr "" + +#: ../../install/windows.rst:143 +msgid "4. Install Tabbycat" +msgstr "" + +#: ../../install/windows.rst:145 +msgid "Almost there!" +msgstr "" + +#: ../../install/windows.rst:147 +msgid "Open a Windows PowerShell. Navigate to the folder where you cloned/extracted Tabbycat. For example, if you installed it in ``C:\\Users\\myusername\\Documents\\GitHub\\tabbycat``, then run::" +msgstr "" + +#: ../../install/windows.rst:151 +msgid "Make a copy of **settings\\\\local.example** and rename it to **settings\\\\local.py**. Open your new **local.py** file. Find this part, and fill in the blanks (the empty quotation marks) as indicated:" +msgstr "" + +#: ../../install/windows.rst:166 +msgid "Optionally, replace the value in this line in the same file with your own time zone, as defined in the `IANA time zone database `_ (*e.g.*, ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``)::" +msgstr "" + +#: ../../install/windows.rst:170 +msgid "Start a new virtual environment. We suggest the name `venv`, though it can be any name you like::" +msgstr "" + +#: ../../install/windows.rst:174 +msgid "Run the `Activate.ps1` script. This puts you \"into\" the virtual environment::" +msgstr "" + +#: ../../install/windows.rst:178 +msgid "If you get an error message saying that the script isn't digitally signed, open a PowerShell with administrator privileges by right-clicking PowerShell in the Start meny and clicking \"Run as administrator\". Then run this command::" +msgstr "" + +#: ../../install/windows.rst:182 +msgid "Read the warning message, then type ``y`` to confirm. By default, the execution policy on Windows is ``Restricted``, which does not permit scripts like ``activate`` to be run. Changing it to ``RemoteSigned`` relaxes it to allow local scripts to be run without checking the signature." +msgstr "" + +#: ../../install/windows.rst:184 +msgid "Install Tabbycat's requirements." +msgstr "" + +#: ../../install/windows.rst:186 +msgid "If you installed **32-bit Python**::" +msgstr "" + +#: ../../install/windows.rst:192 +msgid "You might be wondering: I thought I already installed the requirements. Why am I installing more? And the answer is: Before, you were installing the requirements to create a Python virtual environment for Tabbycat to live in. Now, you're *in* the virtual environment, and you're installing everything required for *Tabbycat* to operate." +msgstr "" + +#: ../../install/windows.rst:194 +msgid "Initialize the database and create a user account for yourself::" +msgstr "" + +#: ../../install/windows.rst:202 +msgid "Start Tabbycat!" +msgstr "" + +#: ../../install/windows.rst:208 +msgid "It should show something like this::" +msgstr "" + +#: ../../install/windows.rst:212 +msgid "Open your browser and go to the URL printed above. (In the above example, it's http://127.0.0.1:8000/). It should look something like this:" +msgstr "" + +#: ../../install/windows.rst:216 +msgid "If it does, great! You've successfully installed Tabbycat." +msgstr "" + +#: ../../install/windows.rst:218 +msgid "Naturally, your database is currently empty, so proceed to :ref:`importing initial data `." +msgstr "" + +#: ../../install/windows.rst:221 +msgid "Starting up an existing Tabbycat instance" +msgstr "" + +#: ../../install/windows.rst:223 +msgid "To start your Tabbycat instance up again next time you use your computer, open a PowerShell and::" +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/install/wsl.po b/docs/locale/ca/LC_MESSAGES/install/wsl.po new file mode 100644 index 00000000000..c55ce9d3e9e --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/install/wsl.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:09\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/wsl.po\n" +"X-Crowdin-File-ID: 1325\n" +"Language: ca_ES\n" + +#: ../../install/wsl.rst:5 +msgid "Installing Locally on Linux on Windows (WSL)" +msgstr "" + +#: ../../install/wsl.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/wsl.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/wsl.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on Windows, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/wsl.rst:14 +msgid "Windows Subsystem for Linux is only available on Windows 10. If you have an older version of Windows, :ref:`install Tabbycat locally on Windows ` instead." +msgstr "" + +#: ../../install/wsl.rst:18 +msgid "Windows Subsystem for Linux (WSL) was taken out of beta in the `Windows 10 Fall Creators Update `_, which was released in October 2017. On Windows 10 computers, we now recommend this local installation method over :ref:`installing it directly on Windows `." +msgstr "" + +#: ../../install/wsl.rst:21 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/wsl.rst:23 +msgid "It will help a lot if you have some experience with Linux, but mainly you need to be familiar with command-line interfaces, and you should be willing to install and work with the `Windows Subsystem for Linux `_. You might need to be prepared to familiarise yourself with aspects of WSL not covered in these instructions. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest." +msgstr "" + +#: ../../install/wsl.rst:27 +msgid "A. Install Ubuntu on Windows" +msgstr "" + +#: ../../install/wsl.rst:29 +msgid "*If you already have a Linux distribution installed on your PC, skip to* :ref:`part B `." +msgstr "" + +#: ../../install/wsl.rst:31 +msgid "First, `check that you have the Fall Creators Update (build 1709) `_. If you don't, update Windows." +msgstr "" + +#: ../../install/wsl.rst:33 +msgid "Then, install the Windows Subsystem for Linux. For most people, this involves the following:" +msgstr "" + +#: ../../install/wsl.rst:35 +msgid "Enable the Windows Subsystem for Linux feature, by finding **Turn Windows features on or off** on the Start Menu, then checking the box for **Windows Subsystem for Linux** and clicking **OK**. You'll be prompted to restart your computer to make the changes take effect." +msgstr "" + +#: ../../install/wsl.rst:39 +msgid "Install Ubuntu by finding it on the Microsoft Store. For your convenience, `here's a direct link to Ubuntu on the Microsoft Store `_." +msgstr "" + +#: ../../install/wsl.rst:41 +msgid "Launch Ubuntu and follow the instructions. You'll be prompted to create a user account for your Ubuntu system." +msgstr "" + +#: ../../install/wsl.rst:43 +msgid "Some more detailed instructions, including some troubleshooting, are `available on Microsoft's website `_." +msgstr "" + +#: ../../install/wsl.rst:45 +msgid "Advanced users" +msgstr "" + +#: ../../install/wsl.rst:48 +msgid "You can, of course, use any Linux distribution that Windows supports. We just suggest Ubuntu because it's the most well-known (and the one that we use)." +msgstr "" + +#: ../../install/wsl.rst:53 +msgid "B. Install Tabbycat" +msgstr "" + +#: ../../install/wsl.rst:55 +msgid "You now have a Linux subsystem running on your computer, so head over to the :ref:`instructions to install Tabbycat locally on Linux ` and follow those (in full)." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/use/finishing-a-tournament.po b/docs/locale/ca/LC_MESSAGES/use/finishing-a-tournament.po new file mode 100644 index 00000000000..e0fb00596fe --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/use/finishing-a-tournament.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-07-02 00:46\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/finishing-a-tournament.po\n" +"X-Crowdin-File-ID: 1327\n" +"Language: ca_ES\n" + +#: ../../use/finishing-a-tournament.rst:5 +msgid "Finishing a Tournament" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:7 +msgid "This page outlines some final steps to take after the conclusion of outrounds." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:10 +msgid "Tab Release" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:12 +msgid "Tabs can be released using the *Tab released* option under **Setup** > **Configuration**. Tabbycat offers the following system tabs:" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:14 +msgid "Team Tab" +msgstr "Taula d'Equips" + +#: ../../use/finishing-a-tournament.rst:15 +msgid "Speakers Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:16 +msgid "Replies Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:17 +msgid "Motions Tab" +msgstr "Taula de mocions" + +#: ../../use/finishing-a-tournament.rst:19 +msgid "You can configure the team, speakers and replies tab to display only a certain number of speakers, *e.g.*, to show only a \"Top 10 Speakers\" tab." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:21 +msgid "If you defined any speaker categories (for example, Novice, ESL or EFL), a tab for each category marked \"public\" can also be released using the **Release speaker category tabs to public**. You can similarly limit each of these tabs to display just the top few speakers, in the definition of the speaker categories. The speaker categories not marked public are *not* released by this option." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:23 +msgid "You can also redact individual speaker's identifying details (name, team, and institution) from the public individual tabs. You can do so by going into the **Edit Database** area, going to *Participants > Speakers*, finding the speaker and clicking the **Anonymous** box (and saving)." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:25 +msgid "Public tab pages are cached for performance reasons. This means that any changes that affect a tab page (say redacting a speaker or changing a speaker score) may not show up on the public site for up to an hour." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:28 +msgid "Wrapping Up" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:30 +msgid "You probably want to turn off the *Public ballots*, *Public feedback*, *Feedback progress*, and *Public draw* features under **Configuration** at this stage as they no longer have any use." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:32 +msgid "You also want to go into the **Edit Database** area, find the tournament and hit \"release all\" so that the results for the final round can be released." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/use/importing-data.po b/docs/locale/ca/LC_MESSAGES/use/importing-data.po new file mode 100644 index 00000000000..b6a83b66393 --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/use/importing-data.po @@ -0,0 +1,236 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:09\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/importing-data.po\n" +"X-Crowdin-File-ID: 1329\n" +"Language: ca_ES\n" + +#: ../../use/importing-data.rst:5 +msgid "Importing Initial Data" +msgstr "" + +#: ../../use/importing-data.rst:7 +msgid "Once you've got Tabbycat installed, the next step is to import data for the tournament: that is, import details of teams, speakers, adjudicators and rounds. There are a few ways to do this, each with their advantages and disadvantages." +msgstr "" + +#: ../../use/importing-data.rst:9 +msgid "To help you decide which to choose, here's a summary:" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Method" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Best for" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Drawcard" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Drawback" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "**Demonstration data**" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "Trying out Tabbycat" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "Loads sample data in one click" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "Not for use with real tournaments" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "**Simple importer**" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "Small and medium-sized tournaments" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "Easy to use" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "Only deals with basic data" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "**Edit database**" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "Adding data not handled by the simple importer or editing existing data" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "Can handle all types of information" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "Adding large amounts of data is time consuming" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "``importtournament`` **command**" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "Large tournaments" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "Easier to repeat, can handle most formats of information" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "Requires basic knowledge of how to use a command line interface" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "**Developing your own importer**" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "Large tournaments with custom needs" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "Easier to repeat, will take information in whatever format it is already in" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "Requires background in Python and and learning about the importer classes" +msgstr "" + +#: ../../use/importing-data.rst:41 +msgid "Demonstration data" +msgstr "" + +#: ../../use/importing-data.rst:42 +msgid "If you're just learning or experimenting with Tabbycat, there are two demonstration datasets available, each with a sample set of teams, adjudicators, *etc.*, so that you can immediately start running rounds. Just be aware that these probably won't relate to anyone at your real-life tournament." +msgstr "" + +#: ../../use/importing-data.rst:44 +msgid "To load a demonstration dataset, click **New Tournament** link on the home page (once logged in as admin). You'll see a page titled \"Create New Tournament\". Scroll to the bottom of this page and click on one of the links at the bottom." +msgstr "" + +#: ../../use/importing-data.rst:47 +msgid "Simple importer" +msgstr "" + +#: ../../use/importing-data.rst:48 +msgid "The simple importer is the easiest way to get a tournament going, and we recommend it for small- and medium-sized tournaments. It allows you to add institutions, teams, adjudicators, venues, venue categories and venue constraints. (If you need to add anything else, use the :ref:`Edit Database area ` instead.)" +msgstr "" + +#: ../../use/importing-data.rst:50 +msgid "To get started, create a new tournament using the **New Tournament** link on the home page (once logged in as admin). It'll ask you for a few basic pieces of information." +msgstr "" + +#: ../../use/importing-data.rst:54 +msgid "Then, once you're in your tournament, click **Setup** in the left-hand menu, then **Import Data**, to open the simple importer." +msgstr "" + +#: ../../use/importing-data.rst:58 +msgid "You first need to add institutions. Once institutions are added, you can then add teams and adjudicators in the relevant sections. Each of these is a two-step process:" +msgstr "" + +#: ../../use/importing-data.rst:60 +msgid "For **institutions** and **venues**, it will first ask you to copy-paste a list of names and properties in a comma-separated table format. The second step is to confirm individual fiels." +msgstr "" + +#: ../../use/importing-data.rst:61 +msgid "For **teams** and **adjudicators**, it will first ask you how many teams/adjudicators to add for each institution (or who lack an institutional affiliation). The second step is to fill in their details, for example, names." +msgstr "" + +#: ../../use/importing-data.rst:69 +msgid "Finally, if you would like to use venue categories and/or :ref:`venue constraints `, you can do so using the two last sections of the simple importer." +msgstr "" + +#: ../../use/importing-data.rst:71 +msgid "If copying and pasting from a spreadsheet, an easy way to make a comma-separated table is to save a spreadsheet with the relevant information as a \\*.csv file, then open this file in a plain text editor (such as Notepad or TextEdit), and copying it from there." +msgstr "" + +#: ../../use/importing-data.rst:76 +msgid "Editing the database" +msgstr "" + +#: ../../use/importing-data.rst:77 +msgid "Sometimes, the simple importer just isn't enough---whether because you need more customization than the simple importer handles (*e.g.* adjudicator feedback questions), or because some participants changed their details after you imported the inital data. In this case, the easiest thing to do is to edit the database via the Django administrative interface (under Setup > Edit Database)." +msgstr "" + +#: ../../use/importing-data.rst:79 +msgid "The general pattern goes like this: Go to **Setup > Edit Database**, find the type of object you wish to add/change, and click \"Add\" or \"Change\". Then, fill in what you need to and save the object." +msgstr "" + +#: ../../use/importing-data.rst:81 +msgid "The Edit Database area is very powerful, and naturally if you mess things up, you can insert potentially catastrophic inconsistencies into the database. For participant information this is hard to do, but it's worth keeping in mind." +msgstr "" + +#: ../../use/importing-data.rst:86 +msgid "The ``importtournament`` command on local installations" +msgstr "" + +#: ../../use/importing-data.rst:88 +msgid "We've written a management command called ``importtournament`` to help automate the tournament set-up. The script, however, is neither foolproof nor comprehensive, so you might find you need to modify things slightly if your tournament structure is different from ours. Be prepared to try this a few times to get it to work. Nonetheless, this is probably the fastest way to set up a tournament." +msgstr "" + +#: ../../use/importing-data.rst:90 +msgid "Copy and rename the ``data/demo`` folder" +msgstr "" + +#: ../../use/importing-data.rst:91 +msgid "See the CSV files in the new folder, and add/replace the data as per your tournament. Note that the institutions (*i.e.* first column) in the ``speakers.csv`` and ``adjudicators.csv`` files must match the institutions in the second column of the ``institutions.csv`` file. And that all CSV files must end with a blank line." +msgstr "" + +#: ../../use/importing-data.rst:92 +msgid "Use this command, replacing ``YOUR_DATA_DIR`` with your new folder's name. (Square brackets indicate optional arguments; if you use them, omit the square brackets. All of them relate to the name of your tournament.)" +msgstr "" + +#: ../../use/importing-data.rst:98 +msgid "This script has a number of options. They're worth taking a look at before you run the script. For details, see::" +msgstr "" + +#: ../../use/importing-data.rst:102 +msgid "Assuming the command completes successfully without errors, you should double check the data in the Django interface, as described above in :ref:`import-edit-database`. In particular you should check that the *Rounds* have the correct draw types and that silent rounds have been marked correctly." +msgstr "" + +#: ../../use/importing-data.rst:105 +msgid "``importtournament`` on Heroku installs" +msgstr "" + +#: ../../use/importing-data.rst:107 +msgid "Instructions for using the ``importtournament`` command on Heroku installations are in steps 4 and 5 of :ref:`install-heroku`. The recommended procedure is first to import the tournament into a local installation, :ref:`as described above `, and then to push the local database to Heroku using the ``heroku pg:push`` command." +msgstr "" + +#: ../../use/importing-data.rst:110 +msgid "Developing your own importer" +msgstr "" + +#: ../../use/importing-data.rst:112 +msgid "If our suggested file formats cause you headaches, it might be easier to write your own importer. We have a generic importer framework that should make this easier, so for some tournaments it might (very conceivably) be faster to write your own importer to conform to your data, than it is to make your data conform to our importer. You need a background in Python in order to do this. For more details, see :ref:`tournament-data-importers`." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/use/running-a-tournament.po b/docs/locale/ca/LC_MESSAGES/use/running-a-tournament.po new file mode 100644 index 00000000000..e5df84c235e --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/use/running-a-tournament.po @@ -0,0 +1,196 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:09\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/running-a-tournament.po\n" +"X-Crowdin-File-ID: 1331\n" +"Language: ca_ES\n" + +#: ../../use/running-a-tournament.rst:5 +msgid "Running a Tournament" +msgstr "" + +#: ../../use/running-a-tournament.rst:7 +msgid "Once you've finished the steps in :ref:`starting-a-tournament`, you're ready to go! This page outlines what you would do for each round during the tournament. After the tournament, proceed to :ref:`finishing-a-tournament`." +msgstr "" + +#: ../../use/running-a-tournament.rst:9 +msgid "This is all done from the admin area (*i.e.*, by the tab director or adjudication core member). In the admin area, tournament-wide pages (feedback, standings, and break) are at the top of the left-hand menu, while round-specific pages (availability, draw, display, motions, and results) are in dropdown's organised by each round's abbreviation." +msgstr "" + +#: ../../use/running-a-tournament.rst:11 +msgid "The basic workflow for each round is:" +msgstr "" + +#: ../../use/running-a-tournament.rst:13 +msgid ":ref:`Mark the teams, adjudicators, and venues present as available `" +msgstr "" + +#: ../../use/running-a-tournament.rst:14 +msgid ":ref:`Generate the draw ` and allocate the adjudicators" +msgstr "" + +#: ../../use/running-a-tournament.rst:15 +msgid ":ref:`Show/release the draw `" +msgstr "" + +#: ../../use/running-a-tournament.rst:16 +msgid ":ref:`Release/enter ` the motions" +msgstr "" + +#: ../../use/running-a-tournament.rst:17 +msgid "Have the debates" +msgstr "" + +#: ../../use/running-a-tournament.rst:18 +msgid ":ref:`Enter results `" +msgstr "" + +#: ../../use/running-a-tournament.rst:19 +msgid ":ref:`Advance to the next round `" +msgstr "" + +#: ../../use/running-a-tournament.rst:24 +msgid "Availability" +msgstr "" + +#: ../../use/running-a-tournament.rst:26 +msgid "**Set availability.** For each round, you need to set the venue, team and adjudicator availability. If any of those are not marked as available they will not be used within the draw; so this feature is mostly useful for when adjudicators or venues are only available for certain rounds." +msgstr "" + +#: ../../use/running-a-tournament.rst:28 +msgid "To do this, click the round in the menu, then click **Check-Ins**. Here you can then go to the availability pages for venue, teams, and adjudicators, or check in everything at once. When you've set everything appropriately use the **Generate Draw** button in the top right to advance." +msgstr "" + +#: ../../use/running-a-tournament.rst:34 +msgid "You can set availabilities in advance of the current round — ie if you know the venue/adjudicator schedules their availabilities can be set ahead of time." +msgstr "" + +#: ../../use/running-a-tournament.rst:37 +msgid "Generating the draw" +msgstr "" + +#: ../../use/running-a-tournament.rst:39 +msgid "**Confirm the draft draw**. After advancing from availability section you will first be shown a draft draw that details how the draw was formulated, pointing out pull-ups and conflict swaps and the like." +msgstr "" + +#: ../../use/running-a-tournament.rst:43 +msgid "The draft draw is for you to double-check. While there are some basic tests on the draw algorithm, it never hurts to sanity-check it again." +msgstr "" + +#: ../../use/running-a-tournament.rst:45 +msgid "If you *do* find something wrong with a draft draw, you can edit the match-ups, but please also let us know what the problem was! You can find our contact details in the :ref:`authors` section." +msgstr "" + +#: ../../use/running-a-tournament.rst:47 +msgid "Once on the confirmed draw page you can click **Edit Adjudicators**." +msgstr "" + +#: ../../use/running-a-tournament.rst:51 +msgid "**Allocate the adjudicators**. Changes here will auto-save; feel free to return to the **Draw** when needed. See :ref:`adjudicator allocation ` for more details about the allocation process." +msgstr "" + +#: ../../use/running-a-tournament.rst:55 +msgid "If you are using venue constraints the **Draw** page may prompt you to Auto Allocate the venues used to satisfy those constraints; see :ref:`venue-constraints ` for more details. Regardless of whether you are using venue constraints or not you can change the Venues per-debate in the **Edit Venues** area." +msgstr "" + +#: ../../use/running-a-tournament.rst:60 +msgid "Releasing the draw" +msgstr "" + +#: ../../use/running-a-tournament.rst:62 +msgid "Once you're happy with your adjudicator allocation, you're ready to start the round." +msgstr "" + +#: ../../use/running-a-tournament.rst:64 +msgid "**Release to general assembly.** From the *Display* page for that round, go to **Show by Venue** or **Show by Team** (whichever you prefer). Then put it up on the projector. There are automatic scroll buttons and buttons for changing text sizing." +msgstr "" + +#: ../../use/running-a-tournament.rst:68 +msgid "**Release to public.** If you're using the public draw function (where the draw is posted publicly to your Tabbycat website) use the **Release to Public** button to allow the page to display." +msgstr "" + +#: ../../use/running-a-tournament.rst:72 +msgid "To avoid the site from being overloaded by anxious refreshers, we recommend that large tournaments not release the draw to the public until after it's been seen by general assembly. That said, note that due to caching there can be a delay of up to 1 minute between when a draw is released and when it first shows up on the public site." +msgstr "" + +#: ../../use/running-a-tournament.rst:73 +msgid "Tabbycat can be set to send emails once the draw is released to adjudicators informing them of their assignments for convenience." +msgstr "" + +#: ../../use/running-a-tournament.rst:78 +msgid "Entering and Releasing Motions" +msgstr "" + +#: ../../use/running-a-tournament.rst:80 +msgid "Tabbycat is agnostic as to whether you enter motions into Tabbycat before or after they are shown publicly. However, they must be entered *at some point* before ballots are entered." +msgstr "" + +#: ../../use/running-a-tournament.rst:82 +msgid "**Enter the motion text.** Either before or after their public release motions can be entered in the **Motions** section for that round." +msgstr "" + +#: ../../use/running-a-tournament.rst:84 +msgid "**Release to general assembly.** If you are entering motions *before* they are publicly revealed note that there is a *Display Motions* button in the **Display** area that allows you to do a Power Point style motion release." +msgstr "" + +#: ../../use/running-a-tournament.rst:86 +msgid "**Release to public.** As with draws, if you have the *enable public view of motions* setting configured your Tabbycat website will display a running list of motions from the tournament. When this is on, using the **Release Motions to Public** button on the **Motions** page will mark the current set of motions as able to be displayed on this page." +msgstr "" + +#: ../../use/running-a-tournament.rst:91 +msgid "Entering Results" +msgstr "" + +#: ../../use/running-a-tournament.rst:93 +msgid "Enter debate results and feedback as they come in (and/or allow online entry of results and feedback)." +msgstr "" + +#: ../../use/running-a-tournament.rst:95 +msgid "Both results and feedback entered in the tab room or online need to be confirmed before the results are counted. To confirm a debate ballot and the debate as a whole, the confirmed checkbox under *Ballot Status* should be ticket in addition to the *Debate Status* being set to Confirmed." +msgstr "" + +#: ../../use/running-a-tournament.rst:97 +msgid "Note that you can track data entry progress from the **Overview** page for the tournament." +msgstr "" + +#: ../../use/running-a-tournament.rst:99 +msgid "See :ref:`data-entry` for more details about the data entry process." +msgstr "" + +#: ../../use/running-a-tournament.rst:101 +msgid "We strongly recommend entering all data using the assistant area, not the admin area. This is because the admin area (intentionally) does not enforce the data confirmation procedure." +msgstr "" + +#: ../../use/running-a-tournament.rst:106 +msgid "Advancing to the next round" +msgstr "" + +#: ../../use/running-a-tournament.rst:108 +msgid "Once you've got all the results entered and confirmed, you're ready to progress to the next round. This can be done by going to the **Results** area, and then using the **Advance to Next Round** button." +msgstr "" + +#: ../../use/running-a-tournament.rst:112 +msgid "When you advance to the next round, if you've enabled public results, the results for the current round (which is now the previous round) will be released to the public **unless** the round is marked as \"silent\" in the database. So if you're careful about when results should be released, don't change the current round until you're ready to release those results." +msgstr "" + +#: ../../use/running-a-tournament.rst:114 +msgid "There is a design assumption that you will always want to release results for non-silent rounds before you start working on the draw for the next round. If this isn't true for you, please get in touch with us so that we know. The workaround is to make all rounds silent, then unsilent them when you're ready to release results." +msgstr "" + +#: ../../use/running-a-tournament.rst:116 +msgid "Emails can be sent to speakers informing them of their team's win/loss/points record before advancing rounds. This is independent from whether the whole round's results are released to the public." +msgstr "" + diff --git a/docs/locale/ca/LC_MESSAGES/use/starting-a-tournament.po b/docs/locale/ca/LC_MESSAGES/use/starting-a-tournament.po new file mode 100644 index 00000000000..3c039f7e06c --- /dev/null +++ b/docs/locale/ca/LC_MESSAGES/use/starting-a-tournament.po @@ -0,0 +1,196 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-23 15:09\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/starting-a-tournament.po\n" +"X-Crowdin-File-ID: 1333\n" +"Language: ca_ES\n" + +#: ../../use/starting-a-tournament.rst:5 +msgid "Starting a Tournament" +msgstr "" + +#: ../../use/starting-a-tournament.rst:7 +msgid "This page outlines a few things you should do at the start of a tournament, after you've :ref:`imported the initial data `. Once you've done these, proceed to :ref:`running a tournament `." +msgstr "" + +#: ../../use/starting-a-tournament.rst:9 +msgid "Tabbycat is developed for — and tested on — modern web browsers. If you are using **Internet Explorer versions 8, 7, or 6** the interface may look odd or not function properly. Switch to a newer browser if possible." +msgstr "" + +#: ../../use/starting-a-tournament.rst:13 +msgid "Tournament configuration" +msgstr "" + +#: ../../use/starting-a-tournament.rst:15 +msgid "After importing all your data you can log into the site as an administrator by loading up the homepage and then using the **Login** button in the lower-right. From there you should go to the administration section of your tournament, and then go to the tournament configuration page by clicking **Setup** then **Configuration** in the menu." +msgstr "" + +#: ../../use/starting-a-tournament.rst:17 +msgid "Here you can adjust the debate rules and interface options to your liking then hit **Save** when finished. We also offer a number of presets that apply particular rule sets (such as the Australs rules) or feature sets (such as displaying information normally released during briefs on the website)." +msgstr "" + +#: ../../use/starting-a-tournament.rst:20 +msgid "Special data types and options" +msgstr "" + +#: ../../use/starting-a-tournament.rst:22 +msgid "There are a few optional fields that are not covered in the initial data templates, in the visual importer, or that may only be relevant in particular scenarios. It's worth going over these quickly to see if they are needed for your tournament. You can view and edit these fields in the **Edit Database** area (link is in the menu under **Setup**)." +msgstr "" + +#: ../../use/starting-a-tournament.rst:25 +msgid "Adjudicator Feedback > Adj Feedback Questions" +msgstr "" + +#: ../../use/starting-a-tournament.rst:25 +msgid "As described in :ref:`adjudicator-feedback`, the types of questions that can be posed for adjudicator feedback are able to be heavily customised. If you are customising your feedback form it should be done here, and before the tournament starts." +msgstr "" + +#: ../../use/starting-a-tournament.rst:30 +msgid "Authentication and Authorisation > Users" +msgstr "" + +#: ../../use/starting-a-tournament.rst:28 +msgid "Here you can add new admin users (those with full access) as well as new assistant users those (who can only do common data-entry tasks but not edit or view the full tab interface). See :ref:`user-accounts` for information on how to do this." +msgstr "" + +#: ../../use/starting-a-tournament.rst:30 +msgid "The people you're adding accounts for should be physically present when you do this, so that they can enter their password." +msgstr "" + +#: ../../use/starting-a-tournament.rst:33 +msgid "Participants > Regions" +msgstr "" + +#: ../../use/starting-a-tournament.rst:33 +msgid "Optionally, each institution may belong to a *Region*. An institution's region is used within the adjudicator allocation process to visually identify teams and adjudicators for the purposes of highlighting diversity issues. These have traditionally been used for geographic regions (such as Oceania), although could be repurposed as arbitrary markers of information — for example they could be used to denote teams from a particular State, institutional size, or circuit." +msgstr "" + +#: ../../use/starting-a-tournament.rst:41 +msgid "Participants > Adjudicators" +msgstr "" + +#: ../../use/starting-a-tournament.rst:36 +msgid "An adjudicators *Base Score* represents their relative ability to judge important rooms, where adjudicators with higher numbers will, relative to the other adjudicators, be placed in better roles (ie as Chairs) and in the rooms you deem most important in each round. If you are running a small tournament, and plan to do your allocations manually, you can set everyone's number to the same amount." +msgstr "" + +#: ../../use/starting-a-tournament.rst:37 +msgid "For larger tournaments, particularly those that collect feedback, see the :ref:`adjudicator-feedback` section for more information on how base scores and other variables influence the automated allocation process." +msgstr "" + +#: ../../use/starting-a-tournament.rst:38 +msgid "Regardless of how you score the adjs, if you have changed the minimimum chairing score in settings, you'll want to make sure there are enough adjudicators that meet this minimum threshold or the automated allocator may not function effectively." +msgstr "" + +#: ../../use/starting-a-tournament.rst:39 +msgid "All types of conflicts are assigned to the relevant adjudicator. Adjudicator's can be conflicted against particular teams, particular institutions, and other adjudicators. Each of these is a located in a tab at the top of the page." +msgstr "" + +#: ../../use/starting-a-tournament.rst:40 +msgid "Each adjudicator's gender is optional and is not displayed publicly; it is only shown in the adjudicator allocation interface" +msgstr "" + +#: ../../use/starting-a-tournament.rst:41 +msgid "Each adjudicator's pronoun is optional, and is only displayed if you use tabbycat to print the ballots and feedback sheets for each round." +msgstr "" + +#: ../../use/starting-a-tournament.rst:48 +msgid "Participants > Teams" +msgstr "" + +#: ../../use/starting-a-tournament.rst:44 +msgid "Note the distinction here between full name and short name. The latter is used on pages where space is tight, such as the draw displays or the adjudicator allocation interface." +msgstr "" + +#: ../../use/starting-a-tournament.rst:45 +msgid "Note that \"Uses institutional prefix\" option. With this option on, a team from the 'MUDS' insttution named '1' or 'Gold' would be displayed as 'MUDS 1' or 'MUDS Gold'." +msgstr "" + +#: ../../use/starting-a-tournament.rst:46 +msgid "At present, setting a team's type to Bye, Swing, or Composite only affects very particular circumstances, and should be considered unnecessary." +msgstr "" + +#: ../../use/starting-a-tournament.rst:47 +msgid "If you do have composite teams, and wish to have them be conflicted by adjudicators from each respective instutution, you'll need to add a new team conflict to each adjudicator from each institution." +msgstr "" + +#: ../../use/starting-a-tournament.rst:48 +msgid "If you do have swing teams, or teams that are otherwise ineligible for breaking, this is typically handled through the breaks interface in the main site" +msgstr "" + +#: ../../use/starting-a-tournament.rst:52 +msgid "Participants > Speakers" +msgstr "" + +#: ../../use/starting-a-tournament.rst:51 +msgid "Each speaker's gender is optional and is not displayed publicly; it is only shown in the adjudicator allocation interface" +msgstr "" + +#: ../../use/starting-a-tournament.rst:52 +msgid "Each speaker's pronoun is optional, and is only displayed if you use tabbycat to print the ballots and feedback sheets for each round." +msgstr "" + +#: ../../use/starting-a-tournament.rst:55 +msgid "Tournaments > Divisions" +msgstr "" + +#: ../../use/starting-a-tournament.rst:55 +msgid "At the moment divisions are only useful for running tournaments that use round-robin style draws. Here, each division represents a draw pool within a round. Division support here is under development and not tested in many scenarios." +msgstr "" + +#: ../../use/starting-a-tournament.rst:58 +msgid "Tournaments > Tournaments" +msgstr "" + +#: ../../use/starting-a-tournament.rst:58 +msgid "Note that tournaments can have a welcome message (useful for displaying maps and other information on the homepage)." +msgstr "" + +#: ../../use/starting-a-tournament.rst:61 +msgid "Venues > Venues" +msgstr "" + +#: ../../use/starting-a-tournament.rst:61 +msgid "A venue's priority determines its priority in being allocated. If there are 20 debates, and 30 rooms, the 20 rooms with the highest priorities will be chosen. Furthermore, if particular debates are marked as important during the draw process, those debates will receive the rooms with the highest priorities. In this way you can give close rooms to members of the adj core, or give larger rooms to debates that will draw a large audience." +msgstr "" + +#: ../../use/starting-a-tournament.rst:64 +msgid "Venues > Venue Categories" +msgstr "" + +#: ../../use/starting-a-tournament.rst:64 +msgid "Venue categories are not needed for most kinds of tournaments. Their purpose is to classify particular venues, such as venues all within one building or venues that are accessible. Once assigned these categories can display in the venue's name — ie \"Red 01.01\" or be used to assign Venue Constraints that match particular teams, institutions, or adjudicators to particular types of venues." +msgstr "" + +#: ../../use/starting-a-tournament.rst:67 +msgid "Information for the briefing" +msgstr "" + +#: ../../use/starting-a-tournament.rst:69 +msgid "If you're using the online submissions feature, some things you should probably mention in the briefing:" +msgstr "" + +#: ../../use/starting-a-tournament.rst:71 +msgid "Adjudicators must fill out ballots completely, including motions and venues—they are entered into the system." +msgstr "" + +#: ../../use/starting-a-tournament.rst:72 +msgid "There is a static URL for each person's ballots and feedback forms. It can be bookmarked, or the page can refreshed after each round." +msgstr "" + +#: ../../use/starting-a-tournament.rst:73 +msgid "If people submit a result or feedback online, they should indicate that they have done so on the paper copy of their ballot." +msgstr "" + diff --git a/tabbycat/actionlog/locale/ca/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..d1894530c44 --- /dev/null +++ b/tabbycat/actionlog/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,323 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-07-02 20:38\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 920\n" + +#: actionlog/apps.py +msgid "Action Log" +msgstr "" + +#: actionlog/models.py +msgid "Discarded ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Checked in ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Created ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Edited ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Confirmed ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Submitted ballot set from the public form" +msgstr "" + +#: actionlog/models.py +msgid "Submitted feedback from the public form" +msgstr "" + +#: actionlog/models.py +msgid "Saved feedback" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator base score" +msgstr "" + +#: actionlog/models.py +msgid "Set adjudicator note" +msgstr "" + +#: actionlog/models.py +msgid "Saved adjudicator allocation" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated adjudicators" +msgstr "" + +#: actionlog/models.py +msgid "Saved a room manual edit" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated rooms" +msgstr "" + +#: actionlog/models.py +msgid "Edited room categories" +msgstr "" + +#: actionlog/models.py +msgid "Edited room constraints" +msgstr "" + +#: actionlog/models.py +msgid "Created draw" +msgstr "Emparellament creat" + +#: actionlog/models.py +msgid "Confirmed draw" +msgstr "Emparellament confirmat" + +#: actionlog/models.py +msgid "Regenerated draw" +msgstr "Emparellament regenerat" + +#: actionlog/models.py +msgid "Released draw" +msgstr "Emparellament publicat" + +#: actionlog/models.py +msgid "Unreleased draw" +msgstr "Emparellament sense publicar" + +#: actionlog/models.py +msgid "Saved a matchup manual edit" +msgstr "" + +#: actionlog/models.py +msgid "Saved the sides status of a matchup" +msgstr "" + +#: actionlog/models.py +msgid "Saved divisions" +msgstr "" + +#: actionlog/models.py +msgid "Added/edited motion" +msgstr "" + +#: actionlog/models.py +msgid "Released motions" +msgstr "Mocions publicades" + +#: actionlog/models.py +msgid "Unreleased motions" +msgstr "Mocions sense publicar" + +#: actionlog/models.py +msgid "Auto-prioritized debate importance" +msgstr "" + +#: actionlog/models.py +msgid "Edited debate importance" +msgstr "" + +#: actionlog/models.py +msgid "Changed adjudicator breaking status" +msgstr "" + +#: actionlog/models.py +msgid "Edited break eligibility" +msgstr "" + +#: actionlog/models.py +msgid "Edited break categories" +msgstr "" + +#: actionlog/models.py +msgid "Generated the team break for all categories" +msgstr "" + +#: actionlog/models.py +msgid "Edited breaking team remarks and updated all team breaks" +msgstr "" + +#: actionlog/models.py +msgid "Edited breaking team remarks and updated this team break" +msgstr "" + +#: actionlog/models.py +msgid "Edited breaking team remarks" +msgstr "" + +#: actionlog/models.py +msgid "Set start time" +msgstr "Establir hora d'inici" + +#: actionlog/models.py +msgid "Advanced the current round to" +msgstr "" + +#: actionlog/models.py +msgid "Marked round as completed" +msgstr "Va marcar ronda com a completada" + +#: actionlog/models.py +msgid "Edited teams availability" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicators availability" +msgstr "" + +#: actionlog/models.py +msgid "Edited room availability" +msgstr "" + +#: actionlog/models.py +msgid "Edited tournament options" +msgstr "Va editar opcions del torneig" + +#: actionlog/models.py +msgid "Edited speaker category eligibility" +msgstr "" + +#: actionlog/models.py +msgid "Edited speaker categories" +msgstr "" + +#: actionlog/models.py +msgid "Imported institutions using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Imported rooms using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Imported teams using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Imported adjudicators using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Updated adjudicator scores in bulk" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator-team conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator-adjudicator conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator-institution conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Edited team-institution conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Generated check in identifiers for speakers" +msgstr "" + +#: actionlog/models.py +msgid "Generated check in identifiers for adjudicators" +msgstr "" + +#: actionlog/models.py +msgid "Generated check in identifiers for rooms" +msgstr "" + +#: actionlog/models.py +msgid "Created preformed panels" +msgstr "" + +#: actionlog/models.py +msgid "Auto-prioritized preformed panels" +msgstr "" + +#: actionlog/models.py +msgid "Edited preformed panel importance" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated adjudicators to preformed panels" +msgstr "" + +#: actionlog/models.py +msgid "Edited preformed panel adjudicator" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated preformed panels to debates" +msgstr "" + +#: actionlog/models.py +msgid "type" +msgstr "" + +#: actionlog/models.py +msgid "timestamp" +msgstr "" + +#: actionlog/models.py +msgid "user" +msgstr "" + +#: actionlog/models.py +msgid "IP address" +msgstr "" + +#: actionlog/models.py +msgid "tournament" +msgstr "" + +#: actionlog/models.py +msgid "round" +msgstr "" + +#: actionlog/models.py +msgid "content type" +msgstr "" + +#: actionlog/models.py +msgid "object ID" +msgstr "" + +#: actionlog/models.py +msgid "action log" +msgstr "" + +#: actionlog/models.py +msgid "action log entries" +msgstr "" + +#: actionlog/models.py +msgid "All log entries require at least one of a user and an IP address." +msgstr "" + +#: actionlog/models.py +msgid "anonymous" +msgstr "" + diff --git a/tabbycat/adjallocation/locale/ca/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..25780e3228d --- /dev/null +++ b/tabbycat/adjallocation/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,451 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-06-22 12:35\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 922\n" + +#: adjallocation/allocators/base.py +msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." +msgstr "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." +msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." +msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/allocators/hungarian.py +msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." +msgstr "" + +#: adjallocation/allocators/hungarian.py +msgid "There are no debates for this round. Maybe you haven't created a draw yet?" +msgstr "No hi ha debats per aquesta ronda. Potser no has creat l'emparellament encara?" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." +msgstr "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." +msgstr "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." +msgstr "" + +#: adjallocation/apps.py +msgid "Adjudicator Allocation" +msgstr "Assignació de Jutges" + +#: adjallocation/consumers.py +msgid "Draw is already released, unrelease draw to redo auto-allocations." +msgstr "Els empajeraments han estat revelats, oculta els aparellaments per refer autocol·locacions." + +#: adjallocation/consumers.py +msgid "Draw is not confirmed, confirm draw to run auto-allocations." +msgstr "Els empajeraments no han estat confirmats, confirma els aparellaments per executar autoaparellaments." + +#: adjallocation/consumers.py +msgid "There are no preformed panels available to allocate." +msgstr "No hi ha Grups de Jutges preformats disponibles per col·locar." + +#: adjallocation/consumers.py +msgid "Successfully auto-allocated preformed panels to debates." +msgstr "" + +#: adjallocation/consumers.py +#, python-format +msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" +msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/consumers.py +msgid "Successfully auto-allocated adjudicators to debates." +msgstr "" + +#: adjallocation/consumers.py +msgid "There aren't any panels to fill. Create panels first." +msgstr "" + +#: adjallocation/consumers.py +#, python-format +msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" +msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/consumers.py +msgid "Successfully auto-allocated adjudicators to preformed panels." +msgstr "" + +#: adjallocation/consumers.py +msgid "You have no break category set as 'is general' so debate importances can't be calculated." +msgstr "" + +#: adjallocation/consumers.py +msgid "Succesfully auto-prioritised debates." +msgstr "" + +#: adjallocation/consumers.py +msgid "You have no break category set as 'is general' so panel importances can't be calculated." +msgstr "" + +#: adjallocation/consumers.py +msgid "Succesfully auto-prioritised preformed panels." +msgstr "" + +#: adjallocation/consumers.py +msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." +msgstr "" + +#: adjallocation/consumers.py +msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." +msgstr "" + +#: adjallocation/consumers.py +msgid "Succesfully created new preformed panels for this round." +msgstr "" + +#: adjallocation/models.py +msgid "chair" +msgstr "principal" + +#: adjallocation/models.py +msgid "panellist" +msgstr "panelista" + +#: adjallocation/models.py +msgid "trainee" +msgstr "jutge aprenent" + +#: adjallocation/models.py +msgid "debate" +msgstr "debat" + +#: adjallocation/models.py +msgid "adjudicator" +msgstr "jutges" + +#: adjallocation/models.py +msgid "type" +msgstr "mena" + +#: adjallocation/models.py +msgid "available?" +msgstr "disponible?" + +#: adjallocation/models.py +msgid "debate adjudicator" +msgstr "jutge del debat" + +#: adjallocation/models.py +msgid "debate adjudicators" +msgstr "jutges del debat" + +#: adjallocation/models.py +msgid "team" +msgstr "equip" + +#: adjallocation/models.py +msgid "adjudicator-team conflict" +msgstr "Incompatibilitat Jutge-Equip" + +#: adjallocation/models.py +msgid "adjudicator-team conflicts" +msgstr "Incompatibilitats Jutge-Equip" + +#: adjallocation/models.py +msgid "adjudicator 1" +msgstr "Primer Jutge" + +#: adjallocation/models.py +msgid "adjudicator 2" +msgstr "Segon Jutge" + +#: adjallocation/models.py +msgid "adjudicator-adjudicator conflict" +msgstr "Incompatibilitat Jutge-Jutge" + +#: adjallocation/models.py +msgid "adjudicator-adjudicator conflicts" +msgstr "Incompatibilitats Jutge-Jutge" + +#: adjallocation/models.py +msgid "institution" +msgstr "Institució" + +#: adjallocation/models.py +msgid "adjudicator-institution conflict" +msgstr "Incompatibilitat Jutge-Institució" + +#: adjallocation/models.py +msgid "adjudicator-institution conflicts" +msgstr "Incompatibilitats Jutge-Institució" + +#: adjallocation/models.py +msgid "team-institution conflict" +msgstr "Incompatibilitat Equip-Institució" + +#: adjallocation/models.py +msgid "team-institution conflicts" +msgstr "Incompatibilitats Equip-Institució" + +#: adjallocation/models.py +msgid "round" +msgstr "ronda" + +#: adjallocation/models.py +msgid "importance" +msgstr "importància" + +#: adjallocation/models.py +msgid "minimum bracket" +msgstr "Grup inferior" + +#: adjallocation/models.py +msgid "Estimate of the lowest bracket for which this panel might be" +msgstr "Estimació del grup inferior en què aquests jutges podrien estar" + +#: adjallocation/models.py +msgid "maximum bracket" +msgstr "" + +#: adjallocation/models.py +msgid "Estimate of the highest bracket for which this panel might be" +msgstr "" + +#: adjallocation/models.py +msgid "room rank" +msgstr "rang de sala" + +#: adjallocation/models.py +msgid "Sequential number of panel, not used in any algorithms" +msgstr "" + +#: adjallocation/models.py +msgid "liveness" +msgstr "" + +#: adjallocation/models.py +msgid "Number of categories this room is expected to be live for" +msgstr "" + +#: adjallocation/models.py +msgid "preformed panel" +msgstr "Grup de Jutges format amb antelació" + +#: adjallocation/models.py +msgid "preformed panels" +msgstr "Grups de Jutges formats amb antelació" + +#: adjallocation/models.py +msgid "panel" +msgstr "Grup de Jutges" + +#: adjallocation/models.py +msgid "preformed panel adjudicator" +msgstr "Jutge d'un Grup de Jutges format amb antelació" + +#: adjallocation/models.py +msgid "preformed panel adjudicators" +msgstr "Jutges d'un Grup de Jutges format amb antelació" + +#: adjallocation/preformed/base.py +msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." +msgstr "No hi ha cap Grup de Jutges format amb antelació per utilitzar. Has col·locat Grup de Jutges format amb antelació per aquesta ronda? Si no has fet, tan sols mira d'autocol·locar-ne." + +#: adjallocation/templates/preformed_index.html adjallocation/views.py +msgid "Preformed Panels" +msgstr "Grups de Jutges formats amb antelació" + +#: adjallocation/templates/preformed_index.html +msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." +msgstr "Un Grup de Jutges format amb antelació és un grup definit de Jutges que és escollit per una ronda abans que el seu emparellament hagi estat generat. Llavors, pots col·locar aquests Grups de Jutges durant el procés usual de col·locació de Jutges de forma automàtica o manual. Això pot fer que les col·locacions siguin més ràpides o et pot permetre crear Grups de Jutges amb més contemplació." + +#: adjallocation/templates/preformed_index.html +msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." +msgstr "Adona-te'n que tan sols els Jutges que apareixen marcats com \"disponible\" per aquesta ronda estaran disponibles per ser col·locats, doncs tu podràs necessitar marcar la seva disponibilitat amb anterioritat. " + +#: adjallocation/templates/preformed_index.html +#, python-format +msgid "Edit Preformed Panels for %(round)s" +msgstr "Editar Grups de Jutges formats amb antelació per %(round)s" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator)s & %(team)s (personal)" +msgstr "Incompatibilitat: %(adjudicator)s i %(team)s (personal)" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" +msgstr "Incompatibilitat: %(adjudicator)s i %(team)s degut a Institució %(institution)s" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" +msgstr "Incompatibilitat: %(adjudicator1)s i %(adjudicator2)s (personal)" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" +msgstr "Incompatibilitat: %(adjudicator1)s i %(adjudicator2)s degut a Institució %(institution)s" + +#: adjallocation/views.py +msgid "Male" +msgstr "Home" + +#: adjallocation/views.py +msgid "Female" +msgstr "Dona" + +#: adjallocation/views.py +msgid "Other" +msgstr "Altre" + +#: adjallocation/views.py +msgid "Unknown" +msgstr "Desconegut" + +#: adjallocation/views.py +msgid "Edit Allocation" +msgstr "Edita Localització" + +#: adjallocation/views.py +msgid "Edit Panels" +msgstr "Edita Grup de Jutges" + +#: adjallocation/views.py +msgid "Return to Panels Overview" +msgstr "Retorna a la supervisió dels Grups de Jutges" + +#: adjallocation/views.py +msgid "Adjudicator-Team Conflicts" +msgstr "Incompatibilitats Jutge-Equip" + +#: adjallocation/views.py +msgid "Save Adjudicator-Team Conflicts" +msgstr "Guardar Incompatibilitats Jutge-Equip" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d adjudicator-team conflict." +msgid_plural "Saved %(count)d adjudicator-team conflicts." +msgstr[0] " %(count)d Incompatibilitat Jutge-Equip guardada." +msgstr[1] " %(count)d Incompatibilitats Jutge-Equip guardades." + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d adjudicator-team conflict." +msgid_plural "Deleted %(count)d adjudicator-team conflicts." +msgstr[0] "%(count)d Incompatibilitat Jutge-Equip esborrada." +msgstr[1] "%(count)d Incompatibilitats Jutge-Equip esborrades." + +#: adjallocation/views.py +msgid "No changes were made to adjudicator-team conflicts." +msgstr "No s'han fet canvis a les Incompatibilitats Jutge-Equip." + +#: adjallocation/views.py +msgid "Adjudicator-Adjudicator Conflicts" +msgstr "Incompatibilitats Jutge-Jutge" + +#: adjallocation/views.py +msgid "Save Adjudicator-Adjudicator Conflicts" +msgstr "Guardar Incompatibilitats Jutge-Jutge" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d adjudicator-adjudicator conflict." +msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." +msgstr[0] "%(count)d Incompatibilitat Jutge-Jutge guardada." +msgstr[1] "%(count)d Incompatibilitats Jutge-Jutge guardades." + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d adjudicator-adjudicator conflict." +msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." +msgstr[0] "%(count)d Incompatibilitat Jutge-Jutge esborrada." +msgstr[1] "%(count)d Incompatibilitats Jutge-Jutge esborrades." + +#: adjallocation/views.py +msgid "No changes were made to adjudicator-adjudicator conflicts." +msgstr "No s'han fet canvis a les Incompatibilitats Jutge-Jutge." + +#: adjallocation/views.py +msgid "Adjudicator-Institution Conflicts" +msgstr "Incompatibilitats Jutge-Institució" + +#: adjallocation/views.py +msgid "Save Adjudicator-Institution Conflicts" +msgstr "Guardar Incompatibilitats Jutge-Institució" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d adjudicator-institution conflict." +msgid_plural "Saved %(count)d adjudicator-institution conflicts." +msgstr[0] "%(count)d Incompatibilitat Jutge-Institució guardada." +msgstr[1] "%(count)d Incompatibilitats Jutge-Institució guardades." + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d adjudicator-institution conflict." +msgid_plural "Deleted %(count)d adjudicator-institution conflicts." +msgstr[0] "%(count)d Incompatibilitat Jutge-Institució esborrada." +msgstr[1] "%(count)d Incompatibilitats Jutge-Institució esborrades." + +#: adjallocation/views.py +msgid "No changes were made to adjudicator-institution conflicts." +msgstr "No s'han fet canvis a les Incompatibilitats Jutge-Institució." + +#: adjallocation/views.py +msgid "Team-Institution Conflicts" +msgstr "Incompatibilitats Equip-Institució" + +#: adjallocation/views.py +msgid "Save Team-Institution Conflicts" +msgstr "Guardar Incompatibilitats Equip-Institució" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d team-institution conflict." +msgid_plural "Saved %(count)d team-institution conflicts." +msgstr[0] "%(count)d Incompatibilitat Equip-Institució guardada." +msgstr[1] "%(count)d Incompatibilitats Equip-Institució guardades." + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d team-institution conflict." +msgid_plural "Deleted %(count)d team-institution conflicts." +msgstr[0] "%(count)d Incompatibilitat Equip-Institució esborrada." +msgstr[1] "%(count)d Incompatibilitats Equip-Institució esborrades." + +#: adjallocation/views.py +msgid "No changes were made to team-institution conflicts." +msgstr "No s'han fet canvis a les Incompatibilitats Equip-Institució." + diff --git a/tabbycat/adjfeedback/locale/ca/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..78048e685f1 --- /dev/null +++ b/tabbycat/adjfeedback/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,966 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-07-02 00:46\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 924\n" + +#: adjfeedback/admin.py +msgid "Integer scales must have a minimum and maximum" +msgstr "" + +#: adjfeedback/admin.py +msgid "target" +msgstr "objectiu" + +#: adjfeedback/admin.py adjfeedback/models.py +msgid "source adjudicator" +msgstr "" + +#: adjfeedback/admin.py adjfeedback/models.py +msgid "source team" +msgstr "" + +#: adjfeedback/admin.py +msgid "Target" +msgstr "Objectiu" + +#: adjfeedback/admin.py +msgid "Source" +msgstr "Font" + +#: adjfeedback/admin.py +msgid "Feedback timestamp and version" +msgstr "" + +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "%(timestamp)s (versió %(version)s)" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." +msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." +msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission was marked as unconfirmed." +msgid_plural "%(count)d feedback submissions were marked as unconfirmed." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission is now ignored." +msgid_plural "%(count)d feedback submissions are now ignored." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission is now recognized." +msgid_plural "%(count)d feedback submissions are now recognized." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/apps.py +msgid "Adjudicator Feedback" +msgstr "" + +#: adjfeedback/forms.py +msgid "chair" +msgstr "principal" + +#: adjfeedback/forms.py +msgid "solo" +msgstr "" + +#: adjfeedback/forms.py +msgid "panellist" +msgstr "panelista" + +#: adjfeedback/forms.py +msgid "trainee" +msgstr "jutge aprenent" + +#. Translators: Please leave this blank, it should be left for the base Django translations. +#: adjfeedback/forms.py +msgid "Yes" +msgstr "" + +#. Translators: Please leave this blank, it should be left for the base Django translations. +#: adjfeedback/forms.py +msgid "No" +msgstr "" + +#. Translators: Please leave this blank, it should be left for the base Django translations. +#: adjfeedback/forms.py +msgid "This field is required." +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "Overall score (%(min)d=worst; %(max)d=best)*" +msgstr "" + +#: adjfeedback/forms.py +msgid "Ignored" +msgstr "Ignorat" + +#. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" +#: adjfeedback/forms.py +msgid "Submitted - " +msgstr "Presentat " + +#. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s (%(adjpos)s)" +msgstr "%(name)s (%(adjpos)s)" + +#: adjfeedback/forms.py +msgid "-- Adjudicators --" +msgstr "-- Grup de Jutges --" + +#: adjfeedback/forms.py +msgid "Adjudicator this feedback is about" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s (chair gave oral)" +msgstr "%(name)s (principal va donar retroalimentació)" + +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s (panellist gave oral as chair rolled)" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "This line (for %(adjudicator)s) didn't have a score" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "This line (for %(adjudicator)s) had too many columns" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" +msgstr "" + +#: adjfeedback/forms.py +msgid "There were no scores to import." +msgstr "No hi va haver puntuacions per importar." + +#: adjfeedback/models.py +msgid "adjudicator" +msgstr "jutges" + +#: adjfeedback/models.py +msgid "round" +msgstr "" + +#: adjfeedback/models.py +msgid "score" +msgstr "puntuació" + +#: adjfeedback/models.py +msgid "timestamp" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator base score history" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator base score histories" +msgstr "" + +#: adjfeedback/models.py +msgid "question" +msgstr "pregunta" + +#: adjfeedback/models.py +msgid "feedback" +msgstr "retroalimentació" + +#: adjfeedback/models.py +msgid "answer" +msgstr "resposta" + +#: adjfeedback/models.py +msgid "adjudicator feedback boolean answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback boolean answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback integer answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback integer answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback float answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback float answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback string answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback string answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answers" +msgstr "" + +#: adjfeedback/models.py +msgid "checkbox" +msgstr "" + +#: adjfeedback/models.py +msgid "yes/no (dropdown)" +msgstr "" + +#: adjfeedback/models.py +msgid "integer (textbox)" +msgstr "" + +#: adjfeedback/models.py +msgid "integer scale" +msgstr "" + +#: adjfeedback/models.py +msgid "float" +msgstr "" + +#: adjfeedback/models.py +msgid "text" +msgstr "text" + +#: adjfeedback/models.py +msgid "long text" +msgstr "text llarg" + +#: adjfeedback/models.py +msgid "select one" +msgstr "selecciona una" + +#: adjfeedback/models.py +msgid "select multiple" +msgstr "esculli diversos" + +#: adjfeedback/models.py +msgid "tournament" +msgstr "torneig" + +#: adjfeedback/models.py +msgid "sequence number" +msgstr "número de seqüència" + +#: adjfeedback/models.py +msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" +msgstr "" + +#: adjfeedback/models.py +msgid "name" +msgstr "nom" + +#: adjfeedback/models.py +msgid "A short name for the question, e.g., \"Agree with decision\"" +msgstr "" + +#: adjfeedback/models.py +msgid "reference" +msgstr "referència" + +#: adjfeedback/models.py +msgid "Code-compatible reference, e.g., \"agree_with_decision\"" +msgstr "" + +#: adjfeedback/models.py +msgid "from adjudicator" +msgstr "" + +#: adjfeedback/models.py +msgid "Adjudicators should be asked this question (about other adjudicators)" +msgstr "" + +#: adjfeedback/models.py +msgid "from team" +msgstr "" + +#: adjfeedback/models.py +msgid "Teams should be asked this question" +msgstr "" + +#: adjfeedback/models.py +msgid "answer type" +msgstr "tipus de resposta" + +#: adjfeedback/models.py +msgid "required" +msgstr "necessari" + +#: adjfeedback/models.py +msgid "Whether participants are required to fill out this field" +msgstr "" + +#: adjfeedback/models.py +msgid "minimum value" +msgstr "valor mínim" + +#: adjfeedback/models.py +msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" +msgstr "" + +#: adjfeedback/models.py +msgid "maximum value" +msgstr "valor màxim" + +#: adjfeedback/models.py +msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" +msgstr "" + +#: adjfeedback/models.py +msgid "choices" +msgstr "opcions" + +#: adjfeedback/models.py +msgid "Permissible choices for select one/multiple fields (ignored for other fields)" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback question" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback questions" +msgstr "" + +#: adjfeedback/models.py adjfeedback/views.py +msgid "ignored" +msgstr "ignorat" + +#: adjfeedback/models.py +msgid "Whether the feedback should affect the adjudicator's score" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback" +msgstr "retroalimentació del jutge" + +#: adjfeedback/models.py +msgid "adjudicator feedbacks" +msgstr "retroalimentacions del jutge" + +#: adjfeedback/models.py +msgid "Either the source adjudicator or source team wasn't specified." +msgstr "" + +#: adjfeedback/models.py +msgid "There was both a source adjudicator and a source team." +msgstr "" + +#: adjfeedback/models.py +msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" +msgstr "" + +#: adjfeedback/models.py +msgid "Adjudicator did not see this debate." +msgstr "" + +#: adjfeedback/tables.py +msgid "Whether the adj is marked as breaking (click to mark)" +msgstr "" + +#: adjfeedback/tables.py +msgid "N/A" +msgstr "N/D" + +#: adjfeedback/tables.py +msgid "Current weighted score" +msgstr "" + +#: adjfeedback/tables.py +msgid "This adjudicator's current rating." +msgstr "" + +#: adjfeedback/tables.py +msgid "Base score result" +msgstr "" + +#: adjfeedback/tables.py +msgid "Click to edit base score" +msgstr "" + +#: adjfeedback/tables.py +msgid "Assigned base score" +msgstr "" + +#: adjfeedback/tables.py +msgid "The current difference between an adjudicator's base score and current score" +msgstr "" + +#: adjfeedback/tables.py +msgid "The difference between this adjudicator's base score and current score" +msgstr "" + +#: adjfeedback/tables.py +msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." +msgstr "" + +#: adjfeedback/tables.py +msgid "The standard deviation of this adjudicator's current scores" +msgstr "" + +#: adjfeedback/tables.py +msgid "Feedback Per Round" +msgstr "" + +#: adjfeedback/tables.py +msgid "Hover over the data points to show the average score received in that round" +msgstr "" + +#: adjfeedback/tables.py +#, python-format +msgid "View %(count)s
    feedback" +msgid_plural "View %(count)s
    feedbacks" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/tables.py +msgid "Unsubmitted feedback ballots" +msgstr "" + +#: adjfeedback/tables.py +msgid "View Missing Feedback" +msgstr "" + +#: adjfeedback/templates/add_feedback.html +msgid "Who is the feedback from?" +msgstr "" + +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html +msgid "Enter Feedback" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html +#, python-format +msgid "Add Feedback from %(name)s" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html +msgid "Add Feedback" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "There are some problems with this feedback submission. Please review and correct them." +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "When submitting this form your IP address will be stored for logging purposes." +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Overview" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Latest" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Unsubmitted" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Important" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Comments" +msgstr "Comentaris" + +#: adjfeedback/templates/feedback_base.html +msgid "By Source" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "By Target" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Bulk Update Scores" +msgstr "" + +#: adjfeedback/templates/feedback_by_source.html +#, python-format +msgid "Feedback %(source_type)s %(source_name)s" +msgstr "" + +#: adjfeedback/templates/feedback_by_source.html +#, python-format +msgid "%(source_name)s hasn't submitted any feedback yet." +msgstr "" + +#: adjfeedback/templates/feedback_by_source.html +#, python-format +msgid "%(source_name)s hasn't received any feedback yet." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Unconfirmed; will not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Ignored; will not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "The score given in this piece of feedback." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "%(round)s %(score)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "On %(adjudicator)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "Received as %(as_type)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "Base %(base)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "From %(source)s (their %(relationship)s)" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "From %(source)s (%(relationship)s from %(side)s)" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "From unknown" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "%(time)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Un-confirm" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Confirm" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Un-ignore" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Ignore" +msgstr "" + +#: adjfeedback/templates/feedback_cards_list.html +msgid "No feedback has been submitted yet" +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "%(c_breaking)s marked as breaking" +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." +msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." +msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "Base" +msgstr "Base" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "Feedback" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "Score Ratio" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." +msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." +msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(c_chairs)s chair" +msgid_plural "%(c_chairs)s chairs" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(c_panellists)s panellist" +msgid_plural "%(c_panellists)s panellists" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(c_trainees)s trainee" +msgid_plural "%(c_trainees)s trainees" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" +msgstr "" + +#: adjfeedback/templates/overview_modals.html +msgid "Change Base Score" +msgstr "" + +#: adjfeedback/templates/overview_modals.html +#, python-format +msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." +msgstr "" + +#: adjfeedback/templates/overview_modals.html +#, python-format +msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." +msgstr "" + +#: adjfeedback/templates/overview_modals.html +msgid "Base score" +msgstr "" + +#: adjfeedback/templates/overview_modals.html +msgid "Save Base Score" +msgstr "" + +#: adjfeedback/templates/public_add_feedback.html +msgid "Who are you?" +msgstr "" + +#: adjfeedback/templates/public_add_feedback.html +msgid "click your name or your team on this list" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgctxt "page title" +msgid "Update Adjudicator Scores" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +#, python-format +msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "The adjudicators' names must match their names in the tab system exactly." +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "There are some problems with the data on this form:" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "Submit" +msgstr "" + +#: adjfeedback/views.py +msgid "Feedback Overview" +msgstr "" + +#: adjfeedback/views.py +msgid "Find Feedback on Adjudicator" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "%(count)d feedback" +msgid_plural "%(count)d feedbacks" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/views.py +msgid "Feedbacks" +msgstr "" + +#: adjfeedback/views.py +msgid "Find Feedback" +msgstr "" + +#: adjfeedback/views.py +msgid "From Teams" +msgstr "" + +#: adjfeedback/views.py +msgid "From Adjudicators" +msgstr "" + +#: adjfeedback/views.py +msgid "Latest Feedback" +msgstr "" + +#: adjfeedback/views.py +msgid "(30 most recent)" +msgstr "" + +#: adjfeedback/views.py +msgid "Only Comments" +msgstr "" + +#: adjfeedback/views.py +msgid "(250 most recent)" +msgstr "" + +#: adjfeedback/views.py +msgid "Important Feedback" +msgstr "" + +#: adjfeedback/views.py +msgid "(rating was much higher/lower than expected)" +msgstr "" + +#: adjfeedback/views.py +msgid "A Team" +msgstr "" + +#: adjfeedback/views.py +msgid "Team" +msgstr "Equip" + +#: adjfeedback/views.py +msgid "Institution" +msgstr "" + +#: adjfeedback/views.py +msgid "An Adjudicator" +msgstr "" + +#: adjfeedback/views.py +msgid "Adjudicator" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Feedback from %(source)s on %(target)s added." +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" +msgstr "" + +#: adjfeedback/views.py +msgid "Whoops! The value isn't a valid base score." +msgstr "" + +#: adjfeedback/views.py +msgid "Feedback Progress" +msgstr "Progrés en les retroalimentacions" + +#: adjfeedback/views.py +#, python-format +msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" +msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/views.py +#, python-format +msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." +msgstr "" + +#: adjfeedback/views.py +msgid "confirmed" +msgstr "confirmat" + +#: adjfeedback/views.py +msgid "un-confirmed" +msgstr "" + +#: adjfeedback/views.py +msgid "un-ignored" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Updated base score for %(count)d adjudicator." +msgid_plural "Updated base scores for %(count)d adjudicators." +msgstr[0] "" +msgstr[1] "" + diff --git a/tabbycat/availability/locale/ca/LC_MESSAGES/django.po b/tabbycat/availability/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..8b0b3f1b7b2 --- /dev/null +++ b/tabbycat/availability/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,392 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-07-02 00:46\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 926\n" + +#: availability/apps.py availability/views.py +msgid "Availability" +msgstr "" + +#: availability/models.py +msgid "content type" +msgstr "" + +#: availability/models.py +msgid "object id" +msgstr "" + +#: availability/models.py +msgid "round" +msgstr "" + +#: availability/models.py +msgid "round availability" +msgstr "" + +#: availability/models.py +msgid "round availabilities" +msgstr "" + +#: availability/templates/availability_index.html +msgid "Mark All Breaking Adjs as Available" +msgstr "" + +#: availability/templates/availability_index.html +msgid "Mark Everything as Available" +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "Copy Availability from %(prev_round)s" +msgstr "" + +#: availability/templates/availability_index.html +msgid "View Draw" +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" +msgstr "" + +#: availability/templates/availability_index.html +msgid "Generate Draw" +msgstr "" + +#: availability/templates/availability_index.html +msgid "The draw cannot be generated until some teams have been marked as available." +msgstr "" + +#: availability/templates/availability_index.html +msgid "The draw cannot be generated until some adjudicators have been marked as available." +msgstr "" + +#: availability/templates/availability_index.html +msgid "The draw cannot be generated until some rooms have been marked as available." +msgstr "" + +#: availability/templates/availability_index.html +msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." +msgstr "" + +#: availability/templates/availability_index.html +msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." +msgstr "" + +#: availability/templates/availability_index.html +msgid "There is an uneven number of teams marked as available — the draw may not generate properly." +msgstr "" + +#: availability/templates/availability_index.html +msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " +msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." +msgstr "" + +#: availability/templates/base_availability.html +msgid "Select All" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Select None" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Check-Ins" +msgstr "Registre" + +#: availability/templates/base_availability.html +msgid "Check In All Breaking" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Copy from Previous" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Save Selected" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Teams" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Adjudicators" +msgstr "Grup de Jutges" + +#: availability/templates/checkin_progress.html +msgid "Rooms" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Mark teams as available" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "No need to set team availability" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "There is an uneven number of teams marked as available for this round." +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "The number of teams marked as available for this round is not a multiple of 4." +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Edit team availability" +msgstr "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." +msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s adjudicator who was not available last round, is available this round." +msgid_plural "%(count)s adjudicators who were not available last round, are available this round." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" +msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s adjudicator who was available last round, is not available this round." +msgid_plural "%(count)s adjudicators who were available last round, are not available this round." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" +msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +msgid "Mark adjudicators as available" +msgstr "" + +#. Translators: required_count is a word for a number (e.g. "two", "three", etc.) +#: availability/templates/checkin_progress.html +#, python-format +msgid "There needs to be at least one adjudicator marked as available, given the number of debates." +msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +msgid "Edit adjudicator availability" +msgstr "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s room that was not available last round, is available this round." +msgid_plural "%(count)s rooms that were not available last round, are available this round." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" +msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s room that was available last round, is not available this round." +msgid_plural "%(count)s rooms that were available last round, are not available this round." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" +msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." +msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +msgid "Mark rooms as available" +msgstr "" + +#. Translators: required_count is a word for a number (e.g. "two", "three", etc.) +#: availability/templates/checkin_progress.html +#, python-format +msgid "There needs to be at least one room marked as available, given the number of debates." +msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +msgid "Edit room availability" +msgstr "" + +#: availability/views.py +msgid "no teams are debating" +msgstr "" + +#. Translators: nteams in this string can only be 0 or 1 +#: availability/views.py +#, python-format +msgid "%(nteams)d breaking team — no debates can happen" +msgid_plural "%(nteams)d breaking teams — no debates can happen" +msgstr[0] "" +msgstr[1] "" + +#. Translators: ndebating in this string is always at least 2 +#: availability/views.py +#, python-format +msgid "%(ndebating)d breaking team is debating this round" +msgid_plural "%(ndebating)d breaking teams are debating this round" +msgstr[0] "" +msgstr[1] "" + +#. Translators: This gets appended to the previous string (the one with +#. ndebating in it) if (and only if) nbypassing is greater than 0. +#. "It" refers to this round. +#: availability/views.py +#, python-format +msgid "; %(nbypassing)d team is bypassing it" +msgid_plural "; %(nbypassing)d teams are bypassing it" +msgstr[0] "" +msgstr[1] "" + +#. Translators: nadvancing in this string is always at least 2 +#: availability/views.py +#, python-format +msgid "%(nadvancing)s advancing team is debating this round" +msgid_plural "%(nadvancing)s advancing teams are debating this round" +msgstr[0] "" +msgstr[1] "" + +#: availability/views.py +msgid "Active Now" +msgstr "" + +#: availability/views.py +#, python-format +msgid "Active in %(prev_round)s" +msgstr "" + +#: availability/views.py +msgid "Checked-In" +msgstr "" + +#: availability/views.py +msgid "Team Availability" +msgstr "" + +#: availability/views.py +msgid "Adjudicator Availability" +msgstr "" + +#: availability/views.py +msgid "Room Availability" +msgstr "" + +#: availability/views.py +msgid "Room" +msgstr "Sala" + +#: availability/views.py +msgid "Display Name (for the draw)" +msgstr "" + +#: availability/views.py +msgid "Categories" +msgstr "" + +#: availability/views.py +msgid "Priority" +msgstr "" + +#: availability/views.py +msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." +msgstr "" + +#: availability/views.py +msgid "Checked in all teams, adjudicators and rooms." +msgstr "" + +#: availability/views.py +msgid "Checked in all breaking adjudicators." +msgstr "" + +#: availability/views.py +msgid "Checked in all teams, adjudicators and rooms from previous round." +msgstr "" + diff --git a/tabbycat/breakqual/locale/ca/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..d63b5978a8a --- /dev/null +++ b/tabbycat/breakqual/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,525 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-07-02 00:46\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 928\n" + +#: breakqual/apps.py +msgid "Break Qualification" +msgstr "" + +#: breakqual/base.py +#, python-format +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" +msgstr[1] "" + +#: breakqual/models.py +msgid "tournament" +msgstr "" + +#: breakqual/models.py +msgid "name" +msgstr "nom" + +#: breakqual/models.py +msgid "Name to be displayed, e.g., \"ESL\"" +msgstr "" + +#: breakqual/models.py +msgid "slug" +msgstr "" + +#: breakqual/models.py +msgid "Slug for URLs, e.g., \"esl\"" +msgstr "" + +#: breakqual/models.py +msgid "sequence number" +msgstr "número de seqüència" + +#: breakqual/models.py +msgid "The order in which the categories are displayed" +msgstr "" + +#: breakqual/models.py +msgid "break size" +msgstr "" + +#: breakqual/models.py +msgid "Number of breaking teams in this category" +msgstr "" + +#: breakqual/models.py +msgid "is general" +msgstr "" + +#: breakqual/models.py +msgid "True if most teams eligible for this category, e.g. Open, False otherwise" +msgstr "" + +#: breakqual/models.py +msgid "priority" +msgstr "" + +#: breakqual/models.py +msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" +msgstr "" + +#: breakqual/models.py +msgid "limit" +msgstr "" + +#: breakqual/models.py +msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" +msgstr "" + +#: breakqual/models.py +msgid "Standard" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 1996" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 2016 (Easters)" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 2016 (Australs)" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 2019 (Australs, Dynamic Cap)" +msgstr "" + +#: breakqual/models.py +msgid "rule" +msgstr "" + +#: breakqual/models.py +msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" +msgstr "" + +#: breakqual/models.py +msgid "breaking teams" +msgstr "" + +#: breakqual/models.py +msgid "break category" +msgstr "" + +#: breakqual/models.py +msgid "break categories" +msgstr "" + +#: breakqual/models.py +msgid "team" +msgstr "equip" + +#: breakqual/models.py +msgid "rank" +msgstr "" + +#: breakqual/models.py +msgid "break rank" +msgstr "" + +#: breakqual/models.py +msgid "Capped" +msgstr "" + +#: breakqual/models.py +msgid "Ineligible" +msgstr "" + +#: breakqual/models.py +msgid "Different break" +msgstr "" + +#: breakqual/models.py +msgid "Disqualified" +msgstr "" + +#: breakqual/models.py +msgid "Lost coin toss" +msgstr "" + +#: breakqual/models.py +msgid "Withdrawn" +msgstr "" + +#: breakqual/models.py +msgid "remark" +msgstr "" + +#: breakqual/models.py +msgid "Used to explain why an otherwise-qualified team didn't break" +msgstr "" + +#: breakqual/models.py +msgid "breaking team" +msgstr "" + +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html +msgid "Break Categories" +msgstr "" + +#: breakqual/templates/break_categories_edit.html +#, python-format +msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." +msgstr "" + +#: breakqual/templates/break_categories_edit.html +#, python-format +msgid "If you want to delete break categories, use the Edit Database area." +msgstr "" + +#: breakqual/templates/break_categories_edit.html +msgid "Save Break Categories" +msgstr "" + +#: breakqual/templates/breaking_adjs.html +#, python-format +msgid "Adjudicators can be marked as breaking in the Feedback Overview section." +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Breaks" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Team Eligibility" +msgstr "" + +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py +#, python-format +msgid "%(category)s Break" +msgstr "%(category)s Tall" + +#: breakqual/templates/breaking_index.html +#, python-format +msgid " %(size)s Spots " +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Teams Eligible" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Breaking" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Excluded" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Eligible" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Mark teams as eligible" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Generate this break" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "View this break" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "publicly visible" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "not publicly visible" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Delete and Regenerate All Breaks" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Generate the Break for All Categories" +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Save Remarks and Update All Breaks" +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "Save Remarks and Update the %(category)s Break" +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" +msgstr "" + +#: breakqual/templates/breakqual_subnav.html +msgid "Overview" +msgstr "" + +#: breakqual/templates/breakqual_subnav.html +msgid "Adjudicators' Break" +msgstr "" + +#: breakqual/templates/edit_break_eligibility.html +#, python-format +msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." +msgstr "" + +#: breakqual/templates/public_break_index.html breakqual/views.py +msgid "Break" +msgstr "Tall" + +#: breakqual/templates/public_break_index.html +msgid "Adjudicators" +msgstr "Grup de Jutges" + +#. Translators: abbreviation for "grand final" +#: breakqual/utils.py +msgid "Grand Final" +msgstr "" + +#: breakqual/utils.py +msgid "GF" +msgstr "" + +#. Translators: abbreviation for "semifinals" +#: breakqual/utils.py +msgid "Semifinals" +msgstr "" + +#: breakqual/utils.py +msgid "SF" +msgstr "" + +#. Translators: abbreviation for "quarterfinals" +#: breakqual/utils.py +msgid "Quarterfinals" +msgstr "" + +#: breakqual/utils.py +msgid "QF" +msgstr "" + +#. Translators: abbreviation for "octofinals" +#: breakqual/utils.py +msgid "Octofinals" +msgstr "" + +#: breakqual/utils.py +msgid "OF" +msgstr "" + +#. Translators: abbreviation for "double-octofinals" +#: breakqual/utils.py +msgid "Double-Octofinals" +msgstr "" + +#: breakqual/utils.py +msgid "DOF" +msgstr "" + +#. Translators: abbreviation for "triple-octofinals" +#: breakqual/utils.py +msgid "Triple-Octofinals" +msgstr "" + +#: breakqual/utils.py +msgid "TOF" +msgstr "" + +#. Translators: abbreviation for "finals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Finals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sF" +msgstr "" + +#. Translators: abbreviation for "semifinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Semifinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sSF" +msgstr "" + +#. Translators: abbreviation for "quarterfinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Quarterfinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sQF" +msgstr "" + +#. Translators: abbreviation for "octofinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Octofinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sOF" +msgstr "" + +#. Translators: abbreviation for "double-octofinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Double-Octofinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sDOF" +msgstr "" + +#. Translators: abbreviation for "triple-octofinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Triple-Octofinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sTOF" +msgstr "" + +#. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) +#: breakqual/utils.py +#, python-format +msgid "Unknown %s break round" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "U%sBR" +msgstr "" + +#: breakqual/utils.py +msgid "Unknown break round" +msgstr "" + +#: breakqual/utils.py +msgid "UBR" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "There was an error generating the break for category %(category)s: %(message)s" +msgstr "" + +#: breakqual/views.py +msgid "Eligible for" +msgstr "" + +#: breakqual/views.py +msgid "Edit Remark" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." +msgstr "" + +#: breakqual/views.py +msgid "Changes to breaking team remarks saved." +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Teams break generated for the following break categories: %(categories)s." +msgstr "" + +#: breakqual/views.py +msgid "Breaking Adjudicators" +msgstr "Jutges que passen el tall" + +#: breakqual/views.py +msgid "Break Eligibility" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "%s Speakers" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" +msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" +msgstr[0] "" +msgstr[1] "" + diff --git a/tabbycat/draw/locale/ca/LC_MESSAGES/django.po b/tabbycat/draw/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..7037065f8e8 --- /dev/null +++ b/tabbycat/draw/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,1119 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-07-02 00:46\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 930\n" + +#: draw/admin.py +#, python-format +msgid "%(count)d debate was marked as having its sides confirmed." +msgid_plural "%(count)d debates were marked as having their sides confirmed." +msgstr[0] "" +msgstr[1] "" + +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "Marca els bancades com a no confirmats" + +#: draw/admin.py +#, python-format +msgid "%(count)d debate was marked as having its sides not confirmed." +msgid_plural "%(count)d debates were marked as having their sides not confirmed." +msgstr[0] "" +msgstr[1] "" + +#: draw/apps.py draw/views.py +msgid "Draw" +msgstr "Emparellaments" + +#: draw/generator/__init__.py +msgid "Too many swaps" +msgstr "" + +#: draw/generator/__init__.py +msgid "One-up-one-down (history)" +msgstr "" + +#: draw/generator/__init__.py +msgid "One-up-one-down (institution)" +msgstr "" + +#: draw/generator/__init__.py +msgid "One-up-one-down (to accommodate)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble up (history)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble down (history)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble up (institution)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble down (institution)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble up (to accommodate)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble down (to accommodate)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Can't bubble up/down" +msgstr "" + +#: draw/generator/__init__.py +msgid "Pull-up team" +msgstr "" + +#: draw/generator/bpelimination.py draw/generator/elimination.py +#, python-format +msgid "%d debates in the previous round don't have a result." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "%d debates in the previous round don't have exactly two teams advancing." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "The number of debates (%d) in the last round is not a power of two." +msgstr "" + +#: draw/generator/bphungarian.py +#, python-format +msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." +msgstr "" + +#: draw/generator/common.py +#, python-format +msgid "The number of teams presented for the draw was not a multiple of %(num)d." +msgstr "" + +#: draw/generator/common.py +msgid "There were no teams for the draw." +msgstr "" + +#: draw/generator/elimination.py +#, python-format +msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." +msgstr "" + +#: draw/generator/elimination.py +#, python-format +msgid "The number of teams (%d) in this round is not a power of two." +msgstr "" + +#: draw/generator/powerpair.py +#, python-format +msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." +msgstr "" + +#: draw/generator/random.py +#, python-format +msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." +msgstr "" + +#: draw/generator/random.py +msgid "One or more teams had an allocated side that wasn't affirmative or negative." +msgstr "" + +#: draw/manager.py +#, python-format +msgid "The draw type %(type)s can't be used with two-team formats." +msgstr "" + +#: draw/manager.py +#, python-format +msgid "The draw type %(type)s can't be used with British Parliamentary." +msgstr "" + +#: draw/manager.py +#, python-format +msgid "Unrecognised \"teams in debate\" option: %(option)s" +msgstr "" + +#: draw/manager.py +#, python-format +msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." +msgstr "" + +#: draw/models.py +msgid "none" +msgstr "Cap" + +#: draw/models.py +msgid "postponed" +msgstr "posposat" + +#: draw/models.py +msgid "draft" +msgstr "esborrany" + +#: draw/models.py +msgid "confirmed" +msgstr "confirmat" + +#: draw/models.py +msgid "round" +msgstr "ronda" + +#: draw/models.py +msgid "room" +msgstr "sala" + +#: draw/models.py +msgid "bracket" +msgstr "grup" + +#: draw/models.py +msgid "room rank" +msgstr "rang de sala" + +#: draw/models.py +msgid "importance" +msgstr "importància" + +#: draw/models.py +msgid "result status" +msgstr "estat del resultat" + +#: draw/models.py +msgid "sides confirmed" +msgstr "bàndols confirmats" + +#: draw/models.py +msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." +msgstr "" + +#: draw/models.py +msgid "debate" +msgstr "debat" + +#: draw/models.py +msgid "debates" +msgstr "debats" + +#. Translators: This is appended to a list of teams, e.g. "Auckland +#. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading +#. space. +#: draw/models.py +msgid " (sides not confirmed)" +msgstr "" + +#. Translators: This goes between teams in a debate, e.g. "Auckland 1 +#. vs Vic Wellington 1". Mind the leading and trailing spaces. +#: draw/models.py +msgid " vs " +msgstr " contra " + +#: draw/models.py +msgid "affirmative" +msgstr "afirmatiu" + +#: draw/models.py +msgid "negative" +msgstr "negatiu" + +#: draw/models.py +msgid "opening government" +msgstr "Alta de Govern" + +#: draw/models.py +msgid "opening opposition" +msgstr "Alta d'Oposició" + +#: draw/models.py +msgid "closing government" +msgstr "Baixa de Govern" + +#: draw/models.py +msgid "closing opposition" +msgstr "Baixa d'Oposició" + +#: draw/models.py +msgid "team" +msgstr "equip" + +#: draw/models.py +msgid "side" +msgstr "bancada" + +#: draw/models.py +msgid "debate team" +msgstr "equip de debat" + +#: draw/models.py +msgid "debate teams" +msgstr "equips de debat" + +#: draw/models.py +#, python-format +msgid "placed %(place)s" +msgstr "col·locat %(place)s" + +#: draw/models.py +msgid "result unknown" +msgstr "resultat desconegut" + +#: draw/models.py +msgid "won" +msgstr "va guanyar" + +#: draw/models.py +msgid "lost" +msgstr "va perdre" + +#: draw/models.py +msgid "team side allocation" +msgstr "assignació per equip" + +#: draw/models.py +msgid "team side allocations" +msgstr "assignacions per equip" + +#. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", +#. "Opening government: Total speaker score", "Closing opposition: Number of firsts" +#: draw/tables.py +#, python-format +msgid "%(side)s: %(metric)s" +msgstr "%(side)s: %(metric)s" + +#: draw/tables.py +#, python-format +msgid "Team %(num)d" +msgstr "Equip %(num)d" + +#: draw/tables.py +msgid "Room rank of this debate" +msgstr "" + +#: draw/tables.py +msgid "Bracket of this debate" +msgstr "" + +#: draw/tables.py +msgid "side history
    \n" +"(number of times the team has been on each side before this round)" +msgstr "" + +#. Translators: Abbreviation for "side history" +#: draw/tables.py +msgid "SH" +msgstr "" + +#: draw/tables.py +msgid "Went from balanced to imbalanced" +msgstr "" + +#: draw/tables.py +msgid "Went from imbalanced to balanced" +msgstr "" + +#: draw/tables.py +msgid "Best improvement possible, still imbalanced" +msgstr "" + +#: draw/tables.py +msgid "Was imbalanced and still imbalanced" +msgstr "" + +#: draw/tables.py +msgid "No metrics in the team standings precedence" +msgstr "" + +#: draw/tables.py +msgid "Side" +msgstr "Bancada" + +#: draw/tables.py +msgid "Position this round" +msgstr "Posicioneu aquesta ronda" + +#: draw/tables.py +msgid "Before" +msgstr "Abans" + +#: draw/tables.py +msgid "Side history before this round" +msgstr "" + +#: draw/tables.py +msgid "After" +msgstr "Després" + +#: draw/tables.py +msgid "Side history after this round" +msgstr "" + +#: draw/tables.py +msgid "Cost" +msgstr "Cost" + +#: draw/tables.py +msgid "Position cost" +msgstr "Cost de la posició" + +#: draw/tables.py +msgid "Status" +msgstr "Estat" + +#: draw/tables.py +msgid "Teams with this many points are permitted in this debate
    \n" +"(bracket in bold)" +msgstr "" + +#: draw/tables.py +#, python-format +msgid "%(team)s: %(metric)s" +msgstr "" + +#: draw/tables.py +msgid "side history before this round" +msgstr "" + +#: draw/tables.py +msgid "Sides" +msgstr "Costats" + +#: draw/tables.py +msgid "position cost" +msgstr "" + +#: draw/templates/admin/draw/debateteam/delete_warning.html +msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" +msgstr "" + +#: draw/templates/admin/draw/debateteam/delete_warning.html +msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." +msgstr "" + +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html +msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." +msgstr "" + +#: draw/templates/admin/draw/debateteam/edit_warning.html +msgid "WARNING!!! If you are editing debate teams, read this first!" +msgstr "" + +#: draw/templates/admin/draw/debateteam/edit_warning.html +msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." +msgstr "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 debate does not have a chair." +msgid_plural "%(ndebates)s debates do not have a chair." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "%(adjudicators)s is adjudicating multiple debates." +msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 debate has a panel with an even number of adjudicators." +msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 debate has an adjudicator conflict." +msgid_plural "%(ndebates)s debates have adjudicator conflicts." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." +msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 adjudicator is available but not assigned to a debate." +msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_teams.html +#, python-format +msgid "%(teams)s is competing in multiple debates." +msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_venues.html +#, python-format +msgid "1 debate does not have a room." +msgid_plural "%(ndebates)s debates do not have a room." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_venues.html +#, python-format +msgid "There are multiple debates in %(rooms)s." +msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_venues.html +#, python-format +msgid "1 debate has a room constraint violation." +msgid_plural "%(ndebates)s debates have room constraint violations." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_base.html +msgid "Availability" +msgstr "Disponibilitat" + +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html +msgid "Edit Sides/Matchups" +msgstr "" + +#: draw/templates/draw_base.html +msgid "Redo Draw" +msgstr "Refer Aparellaments" + +#: draw/templates/draw_base.html +msgid "Draw Details" +msgstr "" + +#: draw/templates/draw_base.html +msgid "Position Balance" +msgstr "" + +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draw" +msgstr "Mostrar aparellaments" + +#: draw/templates/draw_confirm_regeneration.html +msgid "Confirm draw regeneration" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html +msgid "Back to Draw" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#, python-format +msgid "Confirm Draw Deletion for %(round)s" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#, python-format +msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#, python-format +msgid "Yes, I want to delete the current draw for %(round)s" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "View Draw" +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "Debates start at %(start_time)s" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Add Start Time" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Enter Results" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Motion Details" +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "%(motions_count)s motion has been entered." +msgid_plural "%(motions_count)s motions have been entered." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "Editar la moció" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Enter a motion" +msgid_plural "Enter motions" +msgstr[0] "Introduïu la moció" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Release Draw" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "You have not generated a draw for this round yet. There is nothing to release." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Unrelease draw to public" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "The draw has been released publicly." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "View public draw page" +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Release draw to public" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Release Motion" +msgid_plural "Release Motions" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "The motion has been released publicly." +msgid_plural "Motions have been released publicly." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "View public motions page" +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "(for the briefing room)" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draw ordered by Room" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draw ordered by Team" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draws for All Current Rounds ordered by Room" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draws for All Current Rounds ordered by Team" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +#, python-format +msgid "Display Draw for %(round)s ordered by Room" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +#, python-format +msgid "Display Draw for %(round)s ordered by Team" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Motions" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Email Motions" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Email Motion" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Start at" +msgstr "Va començar a" + +#: draw/templates/draw_display_assistant.html +msgid "(for printing)" +msgstr "" + +#: draw/templates/draw_display_assistant.html +msgid "View Ballot Forms" +msgstr "" + +#: draw/templates/draw_display_assistant.html +msgid "View Feedback Forms" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Scroll Speed" +msgstr "Velocitat de desplaçament:" + +#: draw/templates/draw_display_by.html +msgid "Fast" +msgstr "Ràpid" + +#: draw/templates/draw_display_by.html +msgid "Medium" +msgstr "Mitjana" + +#: draw/templates/draw_display_by.html +msgid "Slow" +msgstr "Lenta" + +#: draw/templates/draw_display_by.html +msgid "Extra Slow" +msgstr "Extra lenta" + +#: draw/templates/draw_display_by.html +msgid "Hide Adjudicators" +msgstr "Amagar Grup de Jutges" + +#: draw/templates/draw_display_by.html +msgid "Show Adjudicators" +msgstr "Mostrar Grup de Jutges" + +#: draw/templates/draw_display_by.html +msgid "Text Size" +msgstr "Mida del text" + +#: draw/templates/draw_display_by.html +msgid "Tiny" +msgstr "Molt petita" + +#: draw/templates/draw_display_by.html +msgid "Small" +msgstr "Petit" + +#: draw/templates/draw_display_by.html +msgid "Large" +msgstr "Gran" + +#: draw/templates/draw_display_by.html +msgid "Huge" +msgstr "Enorme" + +#: draw/templates/draw_display_by.html +msgid "Stop Scroll" +msgstr "Atura el desplaçament" + +#: draw/templates/draw_not_released.html +#, python-format +msgid "The draw for %(round)s has yet to be released." +msgstr "" + +#: draw/templates/draw_not_released.html +msgid "The draw for the next round has yet to be released." +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Adjudicator Allocations" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "There are currently fewer adjudicators checked in than there are rooms." +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Allocate adjudicators" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Edit adjudicator allocation" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Room Allocations" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Allocate rooms" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Edit room allocation" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Preformed Panels" +msgstr "Grups de Jutges formats amb antelació" + +#: draw/templates/draw_status_confirmed.html +#, python-format +msgid "There is %(npanels)s preformed panel available for this round." +msgid_plural "There are %(npanels)s preformed panels available for this round." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_status_confirmed.html +msgid "There are no preformed panels available for this round" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +#, python-format +msgid "Edit preformed panels for %(round)s" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Side Allocations" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +#, python-format +msgid "1 debate does not have its sides confirmed." +msgid_plural "%(ndebates)s debates do not have their sides confirmed." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_status_draft.html +msgid "Delete Draw" +msgstr "" + +#: draw/templates/draw_status_draft.html +msgid "Confirm Draw" +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." +msgstr "" + +#: draw/templates/draw_status_draft.html +msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." +msgstr "" + +#: draw/templates/draw_status_draft.html +msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " +msgstr "" + +#: draw/templates/draw_status_none.html +#, python-format +msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." +msgstr "" + +#: draw/templates/position_balance.html +msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." +msgstr "" + +#: draw/templates/position_balance.html +#, python-format +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgstr "" + +#: draw/templates/position_balance_break.html +msgid "Position balance reports aren't computed for elimination rounds." +msgstr "" + +#: draw/templates/position_balance_nonbp.html +msgid "Position balance reports are only available for British Parliamentary tournaments." +msgstr "" + +#: draw/templates/position_balance_round1.html +msgid "Position balance reports aren't computed for the first round of a tournament." +msgstr "" + +#: draw/views.py +msgid "No debates in this round" +msgstr "" + +#: draw/views.py +#, python-format +msgid "Draw for %(round)s" +msgstr "" + +#: draw/views.py +msgid "Draws for Current Rounds" +msgstr "" + +#: draw/views.py +#, python-format +msgid "debates start at %(time)s (in %(time_zone)s)" +msgstr "" + +#: draw/views.py +#, python-format +msgid "start times in time zone: %(time_zone)s" +msgstr "" + +#: draw/views.py +#, python-format +msgid "debate starts at %(time)s" +msgid_plural "debates start at %(time)s" +msgstr[0] "" +msgstr[1] "" + +#: draw/views.py +msgid "The draw for this round hasn't been released." +msgstr "" + +#: draw/views.py +#, python-format +msgid "All Debates for All Rounds of %(tournament)s" +msgstr "" + +#: draw/views.py +msgid "Adjudicator Assignments" +msgstr "" + +#: draw/views.py +msgid "Position" +msgstr "Posició" + +#: draw/views.py +msgid "Team Pairings" +msgstr "" + +#: draw/views.py +msgid "No Draw" +msgstr "" + +#: draw/views.py +msgid "Draft Draw" +msgstr "" + +#. Translators: e.g. "Affirmative: Break rank" +#: draw/views.py +#, python-format +msgid "%(side)s: Break rank" +msgstr "" + +#. Translators: "BR" stands for "Break rank" +#: draw/views.py +msgid "BR" +msgstr "" + +#: draw/views.py +msgid "Draw with Details" +msgstr "" + +#: draw/views.py +msgid "Position Balance Report" +msgstr "" + +#: draw/views.py +#, python-format +msgid "Rényi entropy of order %(order)s" +msgstr "" + +#. Translators: This is appended to the string "Rényi entropy of order 1.0" +#: draw/views.py +msgid " (i.e., Shannon entropy)" +msgstr "" + +#: draw/views.py +msgid "Teams with position imbalances" +msgstr "" + +#: draw/views.py +msgid "No teams with position imbalances! Hooray!" +msgstr "" + +#: draw/views.py +msgid "Annotated draw" +msgstr "" + +#: draw/views.py +#, python-format +msgid "Could not create draw for %(round)s, there was already a draw!" +msgstr "" + +#: draw/views.py +#, python-format +msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" +"

    Please fix this issue before attempting to create the draw.

    " +msgstr "" + +#: draw/views.py +#, python-format +msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" +"

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " +msgstr "" + +#: draw/views.py +#, python-format +msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" +"

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " +msgstr "" + +#: draw/views.py +msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." +msgstr "" + +#: draw/views.py +msgid "Deleted the draw. You can now recreate it as normal." +msgstr "" + +#: draw/views.py +msgid "Released the draw." +msgstr "Publicat l'aparellament." + +#: draw/views.py +msgid "Unreleased the draw." +msgstr "Despublicat l'aparellament." + +#: draw/views.py +#, python-format +msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." +msgstr "" + +#: draw/views.py +msgid "Side Pre-Allocations" +msgstr "" + +#: draw/views.py +msgid "Edit Matchups" +msgstr "" + diff --git a/tabbycat/importer/locale/ca/LC_MESSAGES/django.po b/tabbycat/importer/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..d715872a335 --- /dev/null +++ b/tabbycat/importer/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,421 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 932\n" + +#: importer/forms.py +#, python-format +msgid "line %(lineno)d: %(message)s" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "This line (for %(institution)s) didn't have a code" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "This line (for %(institution)s) had too many columns" +msgstr "" + +#: importer/forms.py +msgid "There were no institutions to import." +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" +msgstr[1] "" + +#: importer/forms.py +msgid "There were no rooms to import." +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" +msgstr[1] "" + +#: importer/forms.py +msgid "Speakers' names" +msgstr "" + +#: importer/forms.py +msgid "Speakers' email addresses" +msgstr "" + +#: importer/forms.py +msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" +msgstr "" + +#: importer/forms.py +msgid "Name (excluding institution name)" +msgstr "" + +#: importer/forms.py +msgid "Prefix team name with institution name?" +msgstr "" + +#: importer/forms.py +msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" +msgstr "" + +#: importer/forms.py +msgid "(Not applicable to unaffiliated teams)" +msgstr "" + +#: importer/forms.py +msgid "One speaker's name per line" +msgstr "" + +#: importer/forms.py +msgid "Can be separated by newlines, tabs or commas" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Speaker %d" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "speaker%d@example.edu" +msgstr "" + +#: importer/forms.py +msgid "There must be at least one speaker." +msgstr "" + +#: importer/forms.py +#, python-format +msgid "%(email)s is not a valid email address." +msgstr "" + +#: importer/forms.py +msgid "There are more email addresses than speakers." +msgstr "" + +#: importer/forms.py +msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." +msgstr "" + +#: importer/forms.py +msgid "Rating" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "This value must be between %(min)d and %(max)d." +msgstr "" + +#: importer/forms.py +msgid "Unaffiliated (no institution)" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "%(name)s (%(code)s)" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" +msgstr[1] "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" +msgstr[1] "" + +#: importer/forms.py +msgid "XML" +msgstr "" + +#: importer/forms.py +msgid "The Debate XML archive to parse" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export Tournament Archive" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Tournaments can be exported in an XML format for use outside Tabbycat." +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export all data" +msgstr "" + +#: importer/templates/archive_importer.html +msgctxt "page title" +msgid "Import Tournament Archive" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "This form will create a tournament with the data provided as a Debate XML format." +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Import" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Go back to the site home page" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +msgctxt "page title" +msgid "Add Adjudicators" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html +#, python-format +msgid "(Step %(step)s of %(count)s)" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html +msgid "Previous Step" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#, python-format +msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#, python-format +msgid "Adjudicators for %(institution)s" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +msgid "Unaffiliated Adjudicators" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +msgid "Save All Adjudicators" +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +#, python-format +msgid "You need to add institutions before adding adjudicators." +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html +msgctxt "button" +msgid "Next Step" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Simple Importer" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Institutions" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Teams" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Adjudicators" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Rooms" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Room Categories" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Room Constraints" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Adjudicator-Team Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Adjudicator-Adjudicator Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Adjudicator-Institution Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Team-Institution Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Break Categories" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Speaker Categories" +msgstr "" + +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +msgctxt "page title" +msgid "Add Institutions" +msgstr "" + +#: importer/templates/simple_import_institutions_details.html +msgid "Save All Institutions" +msgstr "" + +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html +msgid "There are some problems with the data on this form:" +msgstr "" + +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html +msgid "Next Step" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +msgctxt "page title" +msgid "Add Teams" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +#, python-format +msgid "Teams for %(institution)s" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +msgid "Unaffiliated Teams" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +msgid "Save All Teams" +msgstr "" + +#: importer/templates/simple_import_teams_numbers.html +#, python-format +msgid "You need to add institutions before adding teams." +msgstr "" + +#: importer/templates/simple_import_teams_numbers.html +msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." +msgstr "" + +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" +msgstr "" + +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html +msgctxt "page title" +msgid "Add Rooms" +msgstr "" + +#: importer/templates/simple_import_venues_details.html +msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." +msgstr "" + +#: importer/templates/simple_import_venues_details.html +msgid "Save All Rooms" +msgstr "" + +#: importer/templates/simple_import_venues_raw.html +msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" +msgstr "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d institution." +msgid_plural "Added %(count)d institutions." +msgstr[0] "" +msgstr[1] "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d room." +msgid_plural "Added %(count)d rooms." +msgstr[0] "" +msgstr[1] "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d team." +msgid_plural "Added %(count)d teams." +msgstr[0] "" +msgstr[1] "" + +#: importer/views.py +#, python-format +msgid "Adjudicator %(number)d" +msgstr "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d adjudicator." +msgid_plural "Added %(count)d adjudicators." +msgstr[0] "" +msgstr[1] "" + +#: importer/views.py +msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " +msgstr "" + +#: importer/views.py +msgid "Created new demo tournament. You can now configure it below." +msgstr "" + +#: importer/views.py +msgid "Tournament archive has been imported." +msgstr "" + diff --git a/tabbycat/locale/ca/LC_MESSAGES/django.po b/tabbycat/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..d9a50755569 --- /dev/null +++ b/tabbycat/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,957 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-07-02 21:50\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 934\n" + +#: api/apps.py +msgid "Application Programming Interface" +msgstr "" + +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html +msgid "Check-Ins" +msgstr "Registre" + +#: checkins/consumers.py +msgid "Sent checkin identifier doesn't exist" +msgstr "" + +#: checkins/consumers.py +msgid "Checkins" +msgstr "" + +#: checkins/consumers.py +msgid "No checkin identifiers exist for sent barcodes" +msgstr "" + +#: checkins/models.py +msgid "The barcode must contain exactly six digits." +msgstr "" + +#: checkins/models.py +msgid "barcode" +msgstr "" + +#: checkins/models.py +msgid "" +msgstr "" + +#: checkins/models.py +#, python-format +msgid "%(classname)s %(barcode)s" +msgstr "" + +#: checkins/models.py +msgid "person" +msgstr "" + +#: checkins/models.py +msgid "person identifier" +msgstr "" + +#: checkins/models.py +msgid "person identifiers" +msgstr "" + +#: checkins/models.py +msgid "debate" +msgstr "debat" + +#: checkins/models.py +msgid "debate identifier" +msgstr "" + +#: checkins/models.py +msgid "debate identifiers" +msgstr "" + +#: checkins/models.py +msgid "room identifier" +msgstr "" + +#: checkins/models.py +msgid "room identifiers" +msgstr "" + +#: checkins/models.py +msgid "identifier" +msgstr "" + +#: checkins/models.py +msgid "check-in time" +msgstr "" + +#: checkins/models.py +msgid "tournament" +msgstr "" + +#: checkins/models.py +msgid "check-in event" +msgstr "" + +#: checkins/models.py +msgid "check-in events" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "With identifiers" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "View as barcodes" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "Generate missing identifiers" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "Generate all identifiers" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "There are no identifiers available to view. An admin will need to generate them." +msgstr "" + +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +msgstr "" + +#: checkins/templates/checkin_printables.html +msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." +msgstr "" + +#: checkins/templates/checkin_scan.html +msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "Not checked in (barcode %(barcode)s)" +msgstr "" + +#: checkins/utils.py +msgid "Not checked in; no barcode assigned" +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "checked in at %(time)s" +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "%(speaker)s checked in at %(time)s." +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "%(speaker)s is missing." +msgstr "" + +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html +msgid "Scan Identifiers" +msgstr "Escanejar identificadors" + +#: checkins/views.py +msgid "People's Check-In Statuses" +msgstr "" + +#: checkins/views.py +msgid "Rooms' Check-In Statuses" +msgstr "" + +#: checkins/views.py templates/nav/admin_nav.html +msgid "Make Identifiers" +msgstr "Fer identificadors" + +#: checkins/views.py templates/nav/admin_nav.html +msgid "Speakers" +msgstr "Oradors" + +#: checkins/views.py templates/nav/public_nav.html +msgid "Adjudicators" +msgstr "Grup de Jutges" + +#: checkins/views.py +msgid "Rooms" +msgstr "" + +#: checkins/views.py +#, python-format +msgid "Generated identifiers for %s" +msgstr "" + +#: checkins/views.py +msgid "Identifiers" +msgstr "" + +#: checkins/views.py +msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." +msgstr "" + +#: checkins/views.py +msgid "You have revoked your check-in." +msgstr "" + +#: checkins/views.py +msgid "Whoops! Looks like your check-in was already revoked." +msgstr "" + +#: checkins/views.py +msgid "Whoops! Looks like you're already checked in." +msgstr "" + +#: checkins/views.py +msgid "You are now checked in." +msgstr "" + +#: settings/core.py +msgid "Arabic" +msgstr "" + +#: settings/core.py +msgid "Bengali" +msgstr "" + +#: settings/core.py +msgid "English" +msgstr "" + +#: settings/core.py +msgid "Spanish" +msgstr "" + +#: settings/core.py +msgid "French" +msgstr "" + +#: settings/core.py +msgid "Indonesian" +msgstr "" + +#: settings/core.py +msgid "Japanese" +msgstr "" + +#: settings/core.py +msgid "Malay" +msgstr "" + +#: settings/core.py +msgid "Portuguese" +msgstr "" + +#: settings/core.py +msgid "Russian" +msgstr "" + +#: settings/core.py +msgid "Simplified Chinese" +msgstr "" + +#: settings/core.py +msgid "Translation" +msgstr "" + +#: templates/admin/delete_protected_message.html +msgid "You need to delete the above objects first." +msgstr "" + +#: templates/admin/style_guide.html +msgid "This style of info card announces critical information. Link." +msgstr "" + +#: templates/admin/style_guide.html +msgid "This style of info card announces general information." +msgstr "" + +#: templates/admin/style_guide.html +msgctxt "page title" +msgid "Form Title" +msgstr "" + +#: templates/admin/style_guide.html +msgid "Sub Title Title" +msgstr "" + +#: templates/admin/style_guide.html templates/registration/login.html +msgctxt "button" +msgid "Log In" +msgstr "Inicia la sessió" + +#: templates/admin/style_guide.html templates/registration/login.html +msgctxt "button" +msgid "I forgot my password" +msgstr "He oblidat la meva contrasenya" + +#: templates/base.html +msgid "Tabbycat" +msgstr "" + +#: templates/base.html +#, python-format +msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" +msgstr "" + +#: templates/base.html +msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" +msgstr "" + +#: templates/components/form-errors.html +msgid "Whoops! There was an error with one or more fields." +msgstr "" + +#: templates/components/formset.html +msgid "Save and Add More" +msgstr "" + +#: templates/errors/assistant_403.html templates/errors/public_403.html +msgid "Permission Denied (403)" +msgstr "" + +#: templates/errors/assistant_403.html +#, python-format +msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." +msgstr "" + +#: templates/errors/database_limit_warning.html +#, python-format +msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." +msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." +msgstr[0] "" +msgstr[1] "" + +#: templates/errors/legacy_sendgrid_warning.html +msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." +msgstr "" + +#: templates/errors/public_403.html +#, python-format +msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." +msgstr "" + +#: templates/errors/public_403.html +#, python-format +msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." +msgstr "" + +#: templates/footer.html +#, python-format +msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" +msgstr "" + +#: templates/footer.html +#, python-format +msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" +msgstr "" + +#: templates/footer.html +msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." +msgstr "" + +#: templates/footer.html +#, python-format +msgid "For a tournament of this size, we suggest a donation of $%(amount)s." +msgstr "" + +#: templates/footer.html +msgid "Learn more about donating." +msgstr "Més informació sobre la donació." + +#: templates/footer.html +msgid "Donations to Tabbycat from individuals or organisations are much appreciated." +msgstr "" + +#: templates/footer.html +msgid "Still timing debates with the stopwatch app?" +msgstr "" + +#: templates/footer.html +#, python-format +msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." +msgstr "" + +#: templates/footer.html +msgid "Our Organisation" +msgstr "" + +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +msgstr "" + +#: templates/footer.html +msgid "Language" +msgstr "Idioma" + +#: templates/footer.html +msgid "GitHub" +msgstr "" + +#: templates/footer.html +msgid "Documentation" +msgstr "" + +#: templates/footer.html +msgid "Support" +msgstr "Assistència" + +#: templates/footer.html +msgid "Facebook" +msgstr "" + +#: templates/footer.html +msgid "Set Up A Copy" +msgstr "" + +#: templates/footer.html +msgid "Change Language" +msgstr "" + +#: templates/footer.html +msgid "Use this language" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Tabbycat Logo" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Site Home" +msgstr "Inici del lloc" + +#: templates/nav/admin_nav.html +msgid "New Tournament" +msgstr "Nou torneig" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Edit Database" +msgstr "Edita la base de dades" + +#: templates/nav/admin_nav.html +msgid "Admin Area" +msgstr "Àrea d'administració" + +#: templates/nav/admin_nav.html +msgid "Assistant Area" +msgstr "Àrea d'assistents" + +#: templates/nav/admin_nav.html +msgid "Public Area" +msgstr "Àrea pública" + +#: templates/nav/admin_nav.html +msgid "Overview" +msgstr "Visió general" + +#: templates/nav/admin_nav.html +msgid "Setup" +msgstr "Parametres" + +#: templates/nav/admin_nav.html +msgid "Configuration" +msgstr "Configuració" + +#: templates/nav/admin_nav.html +msgid "Import Data" +msgstr "Importar dades" + +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html +msgid "Participants" +msgstr "Participants" + +#: templates/nav/admin_nav.html +msgid "Private URLs" +msgstr "URLs privades" + +#: templates/nav/admin_nav.html +msgid "Emails" +msgstr "Correus electrònics" + +#: templates/nav/admin_nav.html +msgid "Preformed Panels" +msgstr "Grups de Jutges formats amb antelació" + +#: templates/nav/admin_nav.html +msgid "Export XML" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Sides" +msgstr "Costats" + +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +msgid "People's Status" +msgstr "Estat dels participants" + +#: templates/nav/admin_nav.html +msgid "Rooms' Status" +msgstr "Estat de les sales" + +#: templates/nav/admin_nav.html +msgid "Feedback" +msgstr "Retroalimentació" + +#: templates/nav/admin_nav.html +msgid "Latest" +msgstr "Últimes" + +#: templates/nav/admin_nav.html +msgid "Important" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Comments" +msgstr "Comentaris" + +#: templates/nav/admin_nav.html +msgid "Find by Source" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Find by Target" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Unsubmitted" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Add Feedback" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Bulk Update" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Standings" +msgstr "Classificació" + +#: templates/nav/admin_nav.html +msgid "All Teams" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Teams" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +#, python-format +msgid "%(category)s Teams" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "All Speakers" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +#, python-format +msgid "%(category)s Speakers" +msgstr "Taula de Oradors de %(category)s" + +#: templates/nav/admin_nav.html +msgid "Replies" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Motions" +msgstr "Mocions" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Diversity" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Breaks" +msgstr "Talls" + +#: templates/nav/admin_nav.html +#, python-format +msgid "%(category)s" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Adjudicators'" +msgstr "Grup de Jutges" + +#: templates/nav/admin_nav.html +msgid "Edit Categories" +msgstr "Edita categoria" + +#: templates/nav/admin_nav.html +msgid "Edit Eligibility" +msgstr "Edita l'elegibilitat" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Log Out" +msgstr "Tancar sessió" + +#: templates/nav/assistant_nav.html +msgid "Enter Results" +msgstr "" + +#: templates/nav/assistant_nav.html templates/nav/public_nav.html +msgid "Enter Feedback" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Participants List" +msgstr "" + +#: templates/nav/assistant_nav.html templates/nav/public_nav.html +msgid "Institutions" +msgstr "Institucions" + +#: templates/nav/assistant_nav.html +msgid "Code Names" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "View Identifiers" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Room's Status" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Display/Print Draw" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Team Tab" +msgstr "Taula d'Equips" + +#: templates/nav/public_nav.html +msgid "Speaker Tab" +msgstr "Taula d'oradors" + +#: templates/nav/public_nav.html +msgid "Replies Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Adjudicator Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Motions Tab" +msgstr "Taula de mocions" + +#: templates/nav/public_nav.html +msgid "By round" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Globally" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Draws" +msgstr "" + +#: templates/nav/public_nav.html +msgid "No Draws Available" +msgstr "" + +#: templates/nav/public_nav.html +#, python-format +msgid "Draw for %(round)s" +msgstr "Aparellaments per a %(round)s" + +#: templates/nav/public_nav.html +msgid "Current Draws" +msgstr "" + +#: templates/nav/public_nav.html templates/nav/round_panel.html +msgid "Results" +msgstr "Resultats" + +#: templates/nav/public_nav.html +msgid "Break" +msgstr "Tall" + +#: templates/nav/public_nav.html +msgid "Feedback Progress" +msgstr "Progrés en les retroalimentacions" + +#: templates/nav/public_nav.html +msgid "Enter Ballot" +msgstr "" + +#: templates/nav/round_panel.html +msgid "Availability" +msgstr "Disponibilitat" + +#: templates/nav/round_panel.html +msgid "Draw" +msgstr "Emparellaments" + +#: templates/nav/round_panel.html +msgid "Display" +msgstr "Mostrar" + +#: templates/nav/top_nav_base.html +#, python-format +msgid "Administrator area for %(tournament)s" +msgstr "" + +#: templates/nav/top_nav_base.html +#, python-format +msgid "Assistant area for %(tournament)s" +msgstr "" + +#: templates/nav/top_nav_base.html +#, python-format +msgid "Public area for %(tournament)s" +msgstr "" + +#: templates/nav/top_nav_base.html +msgid "Login" +msgstr "Inici de sessió" + +#: templates/registration/logged_out.html +msgid "Goodbye" +msgstr "" + +#: templates/registration/logged_out.html +#, python-format +msgid "You have been logged out. Log in again?" +msgstr "" + +#: templates/registration/login.html +msgctxt "page title" +msgid "Login" +msgstr "Inici de sessió" + +#: templates/registration/login.html +msgctxt "page title" +msgid "Log in to Tabbycat" +msgstr "Inicieu sessió a Tabbycat" + +#: templates/registration/login.html +msgid "Your username and password didn't match." +msgstr "" + +#: templates/registration/login.html +msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." +msgstr "" + +#: templates/registration/login.html +msgid "Please log in to see this page." +msgstr "" + +#: templates/registration/password_change_done.html +msgctxt "page title" +msgid "Password changed" +msgstr "" + +#: templates/registration/password_change_done.html +msgid "Your password has been changed." +msgstr "" + +#: templates/registration/password_change_done.html +msgid "Go to the home page" +msgstr "" + +#: templates/registration/password_change_form.html +msgctxt "page title" +msgid "Password Change" +msgstr "" + +#: templates/registration/password_change_form.html +#, python-format +msgid "API Token: %(api_token)s" +msgstr "" + +#: templates/registration/password_change_form.html +msgid "The API token will allow you to authorize external applications to access the site as staff." +msgstr "" + +#: templates/registration/password_change_form.html +msgid "Please enter your old password, then enter a new one." +msgstr "" + +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html +msgctxt "button" +msgid "Change my password" +msgstr "" + +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html +msgid "Cancel and go back to the site home page" +msgstr "" + +#: templates/registration/password_reset_complete.html +msgctxt "page title" +msgid "Password reset complete" +msgstr "" + +#: templates/registration/password_reset_complete.html +msgid "Your password has been reset." +msgstr "" + +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html +msgid "Go to the login page" +msgstr "" + +#: templates/registration/password_reset_confirm.html +msgctxt "page title" +msgid "Password Reset Confirmation" +msgstr "" + +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html +msgctxt "page title" +msgid "Password Reset" +msgstr "" + +#: templates/registration/password_reset_confirm.html +msgid "Please enter a new password (twice):" +msgstr "" + +#: templates/registration/password_reset_confirm.html +msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." +msgstr "" + +#: templates/registration/password_reset_done.html +msgctxt "page title" +msgid "Password reset email sent" +msgstr "" + +#: templates/registration/password_reset_done.html +msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." +msgstr "" + +#: templates/registration/password_reset_done.html +msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." +msgstr "" + +#: templates/registration/password_reset_email.html +#, python-format +msgid "Hi, %(user)s!" +msgstr "" + +#: templates/registration/password_reset_email.html +#, python-format +msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." +msgstr "" + +#: templates/registration/password_reset_email.html +msgid "If this was you, follow the link below to reset your password:" +msgstr "" + +#: templates/registration/password_reset_email.html +#, python-format +msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." +msgstr "" + +#: templates/registration/password_reset_form.html +msgid "Enter your email address below, and we'll email you a password reset link." +msgstr "" + +#: templates/registration/password_reset_form.html +msgid "Please enter a valid email address." +msgstr "" + +#: templates/registration/password_reset_form.html users/forms.py +msgid "Email address" +msgstr "" + +#: templates/registration/password_reset_form.html +msgctxt "button" +msgid "Reset my password" +msgstr "" + +#: templates/registration/password_reset_form.html +msgid "Back to the login page" +msgstr "" + +#: templates/registration/password_reset_subject.txt +#, python-format +msgid "Password reset on Tabbycat site at %(domain)s" +msgstr "" + +#: urls.py +#, python-format +msgid "Hi, %(user)s — you just logged in!" +msgstr "" + +#: urls.py +msgid "Welcome! You just logged in!" +msgstr "" + +#: users/admin.py +msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." +msgstr "" + +#: users/admin.py +msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." +msgstr "" + +#: users/templates/admin/auth/delete_user_warning.html +msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." +msgstr "" + +#: users/templates/signup.html +msgid "Sign-Up" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Administrator Account" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Assistant Account" +msgstr "" + +#: users/templates/signup.html +msgid "Create Account" +msgstr "" + +#: users/views.py +msgid "You have successfully created a new administrator account." +msgstr "" + +#: users/views.py +msgid "You have successfully created a new assistant account." +msgstr "" + +#: users/views.py +msgid "Whoops! It looks like someone's already created the first user account. Please log in." +msgstr "" + +#: users/views.py +#, python-format +msgid "Welcome! You've created an account for %s." +msgstr "" + diff --git a/tabbycat/locale/ca/LC_MESSAGES/djangojs.po b/tabbycat/locale/ca/LC_MESSAGES/djangojs.po new file mode 100644 index 00000000000..37f62b3afca --- /dev/null +++ b/tabbycat/locale/ca/LC_MESSAGES/djangojs.po @@ -0,0 +1,554 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-14 04:50+1100\n" +"PO-Revision-Date: 2023-07-02 20:38\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/djangojs.po\n" +"X-Crowdin-File-ID: 962\n" + +#: checkins/templates/CheckInScanContainer.vue: +msgid "Scan Using Camera" +msgstr "" + +#: checkins/templates/CheckInScanContainer.vue: +msgid "Stop Camera Scan" +msgstr "" + +#: checkins/templates/CheckInScanContainer.vue: +msgid "Turn On Sounds" +msgstr "" + +#. Translators: %1: Time of checkin, %2: Barcode number, %3: Name of "owner" +#: checkins/templates/CheckInScanContainer.vue: +msgid "%1 checked in %2: %3" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "All" +msgstr "Tot" + +#. Translators: %1: Option name +#: checkins/templates/CheckInStatusContainer.vue: +msgid "By %1" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "No matching rooms found." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "No matching people found." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "This page will live-update with new check-ins as they occur although the initial list may be up to a minute old." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid " All" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid " All" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "Click to check-in manually" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "saving..." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "This person does not have a check-in identifier so they can't be checked in" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "If you want to view this page without the sidebar (i.e. for displaying to an auditorium) you can use the assistant version." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "Open the assistant version." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "Click to undo a check-in" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 of no institutional affiliation with identifier of %3" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 of no institutional affiliation with no assigned identifier" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 from %3 with identifier of %4" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 from %3 with no assigned identifier" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1 (Present; id=%2)" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1 (Absent; id=%2)" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a team with speakers %2" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "Anonymous (due to team codes)" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "Anon" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "Independent" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (%2) with identifier of %3" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (no category) with identifier of %2" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (%2) with no assigned identifier" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (no category) with no assigned identifier" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "Uncategorised" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "No Category" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "Priority %1" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 %4" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 on %4 (Chair)" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 on %4 (Panellist)" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 on %4 (Trainee)" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "ID %1," +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "Room:" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "Chair for Panel of %1" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: +msgid "Solo Chair" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: +msgid "Panellist" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: +msgid "Trainee" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "Team" +msgstr "Equip" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Mark speeches %1 to %2; %3." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Mark replies %1 to %2; %3." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Return ballots to %1." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "The motion is %1" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Debated" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Circle %1" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "%1: %2" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Aff Veto" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Neg Veto" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: printing/templates/PrintableTeamScores.vue: +msgid "%1:" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "tab entry" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "tab check" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: checkins/templates/PeopleStatusMixin.vue: +msgid "Unaffiliated" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "no ½ marks" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "½ marks are allowed" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "decimal marks are allowed" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "%1 (%2, %3)" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Adjudicating with %1." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "; " +msgstr "" + +#: printing/templates/PrintableFeedback.vue: +msgid "Did %1 deliver the adjudication?" +msgstr "" + +#: printing/templates/PrintableFeedback.vue: printing/templates/PrintableFeedbackQuestion.vue: +msgid "Yes" +msgstr "" + +#: printing/templates/PrintableFeedback.vue: +msgid "No, I am submitting feedback on:" +msgstr "" + +#: printing/templates/PrintableFeedbackQuestion.vue: +msgid "Unsure" +msgstr "" + +#: printing/templates/PrintableFeedbackQuestion.vue: +msgid "No" +msgstr "" + +#: printing/templates/PrintableScoresheet.vue: +msgid "Which team won the debate:" +msgstr "" + +#: printing/templates/PrintableScoresheet.vue: +msgid "By how many points did they win:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "%1, %2" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "IMPORTANT: Check and explicitly note if a speaker gives multiple speeches" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Score:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Circle the last digit of the %1's score:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Circle Rank:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Total:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Circle the last digit of the team's total:" +msgstr "" + +#: templates/tables/TablesContainer.vue:8 +msgid "Find in Table" +msgstr "Troba a la taula" + +#: templates/tables/CheckboxTables.vue:30 +msgid "Set All Breaking as Available" +msgstr "" + +#: templates/tables/CheckboxTables.vue:36 +msgid "Set all the availabilities to exactly match what they were in the previous round." +msgstr "" + +#: templates/tables/CheckboxTables.vue:37 +msgid "Match" +msgstr "" + +#: templates/tables/CheckboxTables.vue:41 +msgid "Set all availabilities to exactly match check-ins." +msgstr "" + +#: templates/tables/CheckboxTables.vue:44 +msgid "Match Check-Ins" +msgstr "" + +#: templates/tables/CheckboxTables.vue: +msgid "Set people as available only if they have a check-in and are currently unavailable — i.e. it will not overwrite any existing availabilities." +msgstr "" + +#: templates/tables/CheckboxTables.vue:47 +msgid "Copy From Check-Ins" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "Ballots Status" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "Latest Actions" +msgstr "Últimes accions" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "No Actions Yet" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "Latest Results" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "No Confirmed Results Yet" +msgstr "" + +#: participants/templates/DiversityContainer.vue:6 +msgid "Speaker Demographics" +msgstr "" + +#: participants/templates/DiversityContainer.vue:11 +msgid "No Gender Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:18 +msgid "No Speaker Categories Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:33 +msgid "Speaker Results" +msgstr "" + +#: participants/templates/DiversityContainer.vue:36 +msgid "speakers with gender data" +msgstr "" + +#: participants/templates/DiversityContainer.vue:38 +msgid "speaker scores total" +msgstr "" + +#: participants/templates/DiversityContainer.vue:49 +msgid "No Region Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:56 +msgid "Adjudicator Demographics" +msgstr "" + +#: participants/templates/DiversityContainer.vue:68 +msgid "No Position Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:83 +msgid "Adjudicator Results" +msgstr "" + +#: participants/templates/DiversityContainer.vue:86 +msgid "adjudicators with gender data" +msgstr "" + +#: participants/templates/DiversityContainer.vue:88 +msgid "feedback scores total" +msgstr "" + +#: participants/templates/DiversityContainer.vue:94 +msgid "No Adjudicator Ratings Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:99 +msgid "No Adjudicator-Adjudicator Feedback Information" +msgstr "" + +#: results/templates/ResultsStats.vue:10 +msgid "Checked-In" +msgstr "" + +#: results/templates/ResultsStats.vue:15 +msgid "Not Checked-In" +msgstr "" + +#: results/templates/ResultsStats.vue:19 +msgid "Ballot Check-Ins" +msgstr "" + +#: results/templates/ResultsStats.vue:26 +msgid "Unknown" +msgstr "Desconegut" + +#: results/templates/ResultsStats.vue:31 +msgid "Unconfirmed" +msgstr "" + +#: results/templates/ResultsStats.vue:36 +msgid "Confirmed" +msgstr "Confirmat" + +#: results/templates/ResultsStats.vue:40 +msgid "Ballot Statuses" +msgstr "" + +#: results/templates/BallotsCell.vue:18 +msgid "You cannot confirm this ballot because you entered it" +msgstr "" + +#: results/templates/BallotsCell.vue:34 +msgid "Add Ballot" +msgstr "" + +#: results/templates/BallotsCell.vue:79 +msgid "Re-Edit" +msgstr "" + +#: results/templates/BallotsCell.vue:81 +msgid "Review" +msgstr "" + +#: utils/templates/AutoSaveCounter.vue:4 +msgid "No changes" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:8 +msgid "Return to Draw" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:15 +msgid "Auto-Prioritise" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:17 +msgid "Auto-Allocate" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Break" +msgstr "Tall" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Gender" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Rank" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Region" +msgstr "" + +#. Translators: Short for "Venue Category" +#: utils/templates/DragAndDropActions.vue:65 +msgid "Category" +msgstr "Categoria" + +#: utils/templates/DragAndDropDebate.vue:5 +msgid "The debate's bracket" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:9 +msgid "The bracket range of the hypothetical debate" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:20 +msgid "The total number of live break categories across all teams" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:26 +msgid "The estimated total number of live break categories across all teams of the hypothetical debate" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:33 +msgid "This debate's priority" +msgstr "" + +#: draw/templates/InlineTeam.vue:41 +msgid "No code name set" +msgstr "" + diff --git a/tabbycat/motions/locale/ca/LC_MESSAGES/django.po b/tabbycat/motions/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..acb07b91277 --- /dev/null +++ b/tabbycat/motions/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,399 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-07-01 23:41\n" +"Last-Translator: \n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 936\n" + +#: motions/apps.py motions/templates/public_motions.html +msgid "Motions" +msgstr "Mocions" + +#: motions/models.py +msgid "text" +msgstr "text" + +#: motions/models.py +msgid "The full motion e.g., \"This House would straighten all bananas\"" +msgstr "La moció completa e.g., \"Aquesta Casa redreçaria tots els plàtans\"" + +#: motions/models.py +msgid "reference" +msgstr "referència" + +#: motions/models.py +msgid "Shortcode for the motion, e.g., \"Bananas\"" +msgstr "Etiqueta per a la moció, e.g., \"Plàtans\"" + +#: motions/models.py +msgid "info slide" +msgstr "diapositiva d'informació" + +#: motions/models.py +msgid "The information slide for this topic; if it has one" +msgstr "" + +#: motions/models.py +msgid "tournament" +msgstr "torneig" + +#: motions/models.py +msgid "rounds" +msgstr "ronda" + +#: motions/models.py +msgid "motion" +msgstr "moció" + +#: motions/models.py +msgid "motions" +msgstr "mocions" + +#: motions/models.py +msgid "debate team" +msgstr "equip de debat" + +#: motions/models.py +msgid "preferences" +msgstr "preferències" + +#: motions/models.py +msgid "ballot submission" +msgstr "" + +#: motions/models.py +msgid "debate team motion preference" +msgstr "" + +#: motions/models.py +msgid "debate team motion preferences" +msgstr "" + +#: motions/models.py +msgid "round" +msgstr "ronda" + +#: motions/models.py +msgid "sequence number" +msgstr "número de seqüència" + +#: motions/models.py +msgid "The order in which motions are displayed" +msgstr "L'ordre en què es mostren les mocions" + +#: motions/models.py +msgid "round motion" +msgstr "" + +#: motions/models.py +msgid "round motions" +msgstr "" + +#: motions/statistics.py +msgid "extremely strong evidence" +msgstr "" + +#: motions/statistics.py +msgid "strong evidence" +msgstr "" + +#: motions/statistics.py +msgid "moderate evidence" +msgstr "" + +#: motions/statistics.py +msgid "weak evidence" +msgstr "" + +#: motions/statistics.py +msgid "very weak evidence" +msgstr "" + +#: motions/statistics.py +msgid "extremely weak evidence" +msgstr "" + +#: motions/statistics.py +msgid "balance inconclusive" +msgstr "" + +#: motions/statistics.py +msgid "too few debates to get a meaningful statistic" +msgstr "" + +#: motions/statistics.py +#, python-format +msgid "imbalanced at %(level)s level" +msgstr "" + +#: motions/statistics.py +#, python-format +msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." +msgstr "" + +#: motions/statistics.py +msgid "probably balanced" +msgstr "" + +#: motions/statistics.py +#, python-format +msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." +msgstr "" + +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html +msgid "View Info Slide" +msgstr "Veure Diapositiva d'informació" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "results from %(ndebates)s debate" +msgid_plural "results from %(ndebates)s debates" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" +msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" +msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_bp_elim.html +msgid "advanced" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +msgctxt "abbreviation for 'advanced', used when not enough space" +msgid "adv." +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +msgid "eliminated" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +msgctxt "abbreviation for 'eliminated', used when not enough space" +msgid "elim." +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "%(side)s results distribution" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html +msgid "No results for this motion" +msgstr "No hi ha resultats per a aquesta moció" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Government" +msgstr "Govern" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Opposition" +msgstr "Oposició" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Average Points per bench" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Opening" +msgstr "Alta" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Closing" +msgstr "Baixa" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Average Points per half" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +#, python-format +msgid "average points per position (%(ndebates)s debate)" +msgid_plural "average points per position (%(ndebates)s debates)" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_bp_prelim.html +#, python-format +msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" +msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_bp_prelim.html +#, python-format +msgid "%(side)s results" +msgstr "" + +#: motions/templates/motion_statistics_twoteam.html +#, python-format +msgid "%(count)s %(side)s win" +msgid_plural "%(count)s %(side)s wins" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_twoteam.html +msgid "No teams debated this motion" +msgstr "" + +#: motions/templates/motion_statistics_twoteam.html +#, python-format +msgid "%(count)s %(side)s veto" +msgid_plural "%(count)s %(side)s vetoes" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_twoteam.html +msgid "No teams vetoed this motion" +msgstr "Cap equip va vetar aquesta moció" + +#: motions/templates/motions_edit.html +msgid "Edit Motion" +msgid_plural "Edit Motions" +msgstr[0] "Editar moció" +msgstr[1] "" + +#: motions/templates/motions_edit.html +msgid "Display Draw" +msgstr "Mostrar aparellaments" + +#: motions/templates/motions_edit.html +msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Reuse Motions from Last Round" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Use Existing Motions" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motions_edit.html +msgid "Save Motion" +msgid_plural "Save Motions" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motions_info.html +msgid "Info Slide" +msgstr "Diapositiva d'informació" + +#: motions/templates/public_motions.html +msgid "There are no motions available for this round." +msgstr "" + +#: motions/templates/public_motions.html +msgid "The motions for this round have not been released." +msgstr "" + +#: motions/templates/public_motions.html +msgid "The motion for this round has not been released." +msgstr "" + +#: motions/templates/show.html +#, python-format +msgid "Reveal Info Slide for %(round)s" +msgid_plural "Reveal Info Slides for %(round)s" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/show.html +#, python-format +msgid "Reveal Motion for %(round)s" +msgid_plural "Reveal Motions for %(round)s" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/show.html +msgid "There are no motions for this round entered into Tabbycat." +msgstr "" + +#: motions/utils.py +msgid "Not all latest ballots list the same motion, so could not be merged." +msgstr "" + +#: motions/utils.py +msgid "Motion vetos are inconsistent, so could not be merged." +msgstr "" + +#: motions/views.py +msgid "The motion has been saved." +msgstr "" + +#: motions/views.py +#, python-format +msgid "%(count)d motion has been saved." +msgid_plural "%(count)d motions have been saved." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +#, python-format +msgid "%(count)d motion has been deleted." +msgid_plural "%(count)d motions have been deleted." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "" + +#: motions/views.py +#, python-format +msgid "Reused the motion from the previous round." +msgid_plural "Reused the %(count)d motions from the previous round." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +msgid "Round Motions" +msgstr "" + +#: motions/views.py +msgid "Motion Statistics" +msgstr "" + diff --git a/tabbycat/notifications/locale/ca/LC_MESSAGES/django.po b/tabbycat/notifications/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..c4defc42536 --- /dev/null +++ b/tabbycat/notifications/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,416 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-07-02 00:46\n" +"Last-Translator: philip_tc\n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/notifications/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 938\n" + +#: notifications/apps.py +msgid "Notifications" +msgstr "" + +#: notifications/forms.py +msgid "Recipient email address" +msgstr "" + +#: notifications/forms.py +#, python-format +msgid "Test email from %(host)s" +msgstr "" + +#: notifications/forms.py +#, python-format +msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" +msgstr "" + +#: notifications/forms.py +msgid "Subject" +msgstr "" + +#: notifications/forms.py +msgid "Message" +msgstr "" + +#: notifications/models.py +msgid "email" +msgstr "" + +#: notifications/models.py +msgid "SMS" +msgstr "" + +#: notifications/models.py +msgid "recipient" +msgstr "" + +#: notifications/models.py +msgid "method" +msgstr "" + +#: notifications/models.py +msgid "context" +msgstr "" + +#: notifications/models.py +msgid "notification" +msgstr "" + +#: notifications/models.py +msgid "timestamp" +msgstr "" + +#: notifications/models.py +msgid "sent message" +msgstr "" + +#: notifications/models.py +msgid "sent messages" +msgstr "" + +#: notifications/models.py +msgid "team points" +msgstr "" + +#: notifications/models.py +msgid "ballot confirmed" +msgstr "" + +#: notifications/models.py +msgid "feedback URL" +msgstr "" + +#: notifications/models.py +msgid "ballot URL" +msgstr "" + +#: notifications/models.py +msgid "landing page URL" +msgstr "" + +#: notifications/models.py +msgid "adjudicator draw released" +msgstr "" + +#: notifications/models.py +msgid "team registration" +msgstr "" + +#: notifications/models.py +msgid "adjudicator registration" +msgstr "" + +#: notifications/models.py +msgid "motion(s) released" +msgstr "" + +#: notifications/models.py +msgid "team draw released" +msgstr "" + +#: notifications/models.py +msgid "custom message" +msgstr "" + +#: notifications/models.py +msgid "event" +msgstr "" + +#: notifications/models.py +msgid "tournament" +msgstr "" + +#: notifications/models.py +msgid "round" +msgstr "" + +#: notifications/models.py +msgid "subject template" +msgstr "" + +#: notifications/models.py +msgid "body template" +msgstr "" + +#: notifications/models.py +msgid "bulk notification" +msgstr "" + +#: notifications/models.py +msgid "bulk notifications" +msgstr "" + +#: notifications/models.py +msgid "Processed" +msgstr "" + +#: notifications/models.py +msgid "Dropped" +msgstr "" + +#: notifications/models.py +msgid "Deferred" +msgstr "" + +#: notifications/models.py +msgid "Delivered" +msgstr "" + +#: notifications/models.py +msgid "Bounced" +msgstr "" + +#: notifications/models.py +msgid "Opened" +msgstr "" + +#: notifications/models.py +msgid "Clicked" +msgstr "" + +#: notifications/models.py +msgid "Unsubscribed" +msgstr "" + +#: notifications/models.py +msgid "Marked as spam" +msgstr "" + +#: notifications/models.py +msgid "Unsubscribed from group" +msgstr "" + +#: notifications/models.py +msgid "Resubscribed to group" +msgstr "" + +#: notifications/models.py +msgid "email message" +msgstr "" + +#: notifications/models.py +msgid "email status" +msgstr "" + +#: notifications/models.py +msgid "email statuses" +msgstr "" + +#: notifications/templates/email_participants.html +#, python-format +msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." +msgstr "" + +#: notifications/templates/email_participants.html +#, python-format +msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." +msgstr "" + +#: notifications/templates/email_participants.html +msgid "Send Message(s)" +msgstr "" + +#: notifications/templates/email_statuses.html +msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." +msgstr "" + +#: notifications/templates/notifications_nav.html notifications/views.py +msgid "Email Statuses" +msgstr "" + +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html +msgid "Send Test Email" +msgstr "" + +#: notifications/templates/notifications_nav.html +msgid "Send Custom Email" +msgstr "" + +#: notifications/templates/test_email.html +msgctxt "page title" +msgid "Send Test Email" +msgstr "" + +#: notifications/templates/test_email.html +msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." +msgstr "" + +#: notifications/templates/test_email.html +#, python-format +msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." +msgstr "" + +#: notifications/templates/test_email.html +msgid "Go back to the site home page" +msgstr "" + +#: notifications/utils.py +msgid "the chair" +msgstr "" + +#: notifications/utils.py +msgid "the only" +msgstr "" + +#: notifications/utils.py +msgid "a panellist" +msgstr "" + +#: notifications/utils.py +msgid "a trainee" +msgstr "" + +#: notifications/utils.py +msgid "TBA" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "%(tournament)s %(round)s @ %(room)s" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" +msgstr "" + +#: notifications/utils.py +msgid "Win" +msgstr "" + +#: notifications/utils.py +msgid "Loss" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(text)s (%(ref)s)
  • " +msgstr "" + +#: notifications/utils.py +msgid ", " +msgstr "" + +#: notifications/views.py +#, python-format +msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" +msgstr "" + +#: notifications/views.py +msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." +msgstr "" + +#: notifications/views.py +#, python-format +msgid "There was an error sending the test email: %(error)s" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "A test email has been sent to %(recipient)s." +msgstr "" + +#: notifications/views.py +msgid "N/A" +msgstr "" + +#: notifications/views.py +msgid "Not known" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "%(status)s @ %(time)s" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "@ %s" +msgstr "" + +#: notifications/views.py +msgid "Timeline" +msgstr "" + +#: notifications/views.py +msgid "Participant" +msgstr "" + +#: notifications/views.py +msgid "Email address" +msgstr "" + +#: notifications/views.py +msgid "Status" +msgstr "Estat" + +#: notifications/views.py +msgid "Time" +msgstr "" + +#: notifications/views.py +msgid "Email Participants" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "%(email_count)s email has been queued for sending." +msgid_plural "%(email_count)s emails have been queued for sending." +msgstr[0] "" +msgstr[1] "" + +#: notifications/views.py +msgid "No emails were sent — likely because no recipients were selected." +msgstr "" + +#: notifications/views.py +msgid "Send Email" +msgstr "" + +#: notifications/views.py +msgid "Not Provided" +msgstr "" + +#: notifications/views.py +msgid "Role" +msgstr "" + +#: notifications/views.py +msgid "Adjudicator" +msgstr "" + +#: notifications/views.py +msgid "Speaker" +msgstr "" + +#: notifications/views.py +msgid "Speakers" +msgstr "Oradors" + +#: notifications/views.py +msgid "Adjudicators" +msgstr "Grup de Jutges" + diff --git a/tabbycat/options/locale/ca/LC_MESSAGES/django.po b/tabbycat/options/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..c8cdfee7b8f --- /dev/null +++ b/tabbycat/options/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,1618 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-07-02 20:38\n" +"Last-Translator: philip_tc\n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/options/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 940\n" + +#: options/apps.py +msgid "Tournament Options" +msgstr "" + +#: options/models.py +msgid "instance" +msgstr "" + +#: options/models.py +msgid "tournament preference" +msgstr "" + +#: options/models.py +msgid "tournament preferences" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Score Rules" +msgstr "" + +#: options/preferences.py +msgid "Minimum allowed score for substantive speeches" +msgstr "" + +#: options/preferences.py +msgid "Minimum speaker score" +msgstr "" + +#: options/preferences.py +msgid "Maximum speaker score" +msgstr "" + +#: options/preferences.py +msgid "Maximum allowed score for substantive speeches" +msgstr "" + +#: options/preferences.py +msgid "Speaker score step" +msgstr "" + +#: options/preferences.py +msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" +msgstr "" + +#: options/preferences.py +msgid "The largest amount by which one team can beat another (0 means no limit)" +msgstr "" + +#: options/preferences.py +msgid "Maximum margin" +msgstr "" + +#: options/preferences.py +msgid "Minimum allowed score for reply speeches" +msgstr "" + +#: options/preferences.py +msgid "Minimum reply score" +msgstr "" + +#: options/preferences.py +msgid "Maximum allowed score for reply speeches" +msgstr "" + +#: options/preferences.py +msgid "Maximum reply score" +msgstr "" + +#: options/preferences.py +msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" +msgstr "" + +#: options/preferences.py +msgid "Reply score step" +msgstr "" + +#: options/preferences.py +msgid "If checked, a team's winning margin includes dissenting adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Margin includes dissenters" +msgstr "" + +#: options/preferences.py +msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" +msgstr "" + +#: options/preferences.py +msgid "Team score includes ghosts" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Draw Rules" +msgstr "" + +#: options/preferences.py +msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" +msgstr "" + +#: options/preferences.py +msgid "Minimum adjudicator score to vote" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by adjudicator auto-allocator for conflicts" +msgstr "" + +#: options/preferences.py +msgid "Adjudicator conflict penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by adjudicator auto-allocator for history" +msgstr "" + +#: options/preferences.py +msgid "Adjudicator history penalty" +msgstr "" + +#: options/preferences.py +msgid "Penality applied by preformed panel auto-allocator for priority mismatch" +msgstr "" + +#: options/preferences.py +msgid "Importance mismatch penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" +msgstr "" + +#: options/preferences.py +msgid "Team institution penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" +msgstr "" + +#: options/preferences.py +msgid "Team history penalty" +msgstr "" + +#: options/preferences.py +msgid "If checked, the draw will try to avoid pairing teams against their own institution" +msgstr "" + +#: options/preferences.py +msgid "Avoid same institution" +msgstr "" + +#: options/preferences.py +msgid "If checked, the draw will try to avoid having teams see each other twice" +msgstr "" + +#: options/preferences.py +msgid "Avoid team history" +msgstr "" + +#: options/preferences.py +msgid "How odd brackets are resolved (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Odd bracket resolution method" +msgstr "" + +#: options/preferences.py +msgid "Pull up from top" +msgstr "" + +#: options/preferences.py +msgid "Pull up from bottom" +msgstr "" + +#: options/preferences.py +msgid "Pull up from middle" +msgstr "" + +#: options/preferences.py +msgid "Pull up at random" +msgstr "" + +#: options/preferences.py +msgid "Intermediate brackets" +msgstr "" + +#: options/preferences.py +msgid "Intermediate brackets with bubble-up-bubble-down" +msgstr "" + +#: options/preferences.py +msgid "Intermediate 1 (pre-allocated sides)" +msgstr "" + +#: options/preferences.py +msgid "Intermediate 2 (pre-allocated sides)" +msgstr "" + +#: options/preferences.py +msgid "How affirmative/negative positions are assigned (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Side allocations method" +msgstr "" + +#: options/preferences.py +msgid "Random" +msgstr "" + +#: options/preferences.py +msgid "Balance" +msgstr "" + +#: options/preferences.py +msgid "Pre-allocated" +msgstr "" + +#: options/preferences.py +msgid "Manually enter from ballot" +msgstr "" + +#: options/preferences.py +msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." +msgstr "" + +#: options/preferences.py +msgid "Pairing method" +msgstr "" + +#: options/preferences.py +msgid "Slide" +msgstr "" + +#: options/preferences.py +msgid "Fold" +msgstr "" + +#: options/preferences.py +msgid "Adjacent" +msgstr "" + +#: options/preferences.py +msgid "Fold top, adjacent rest" +msgstr "" + +#: options/preferences.py +msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Conflict avoidance method" +msgstr "" + +#: options/preferences.py +msgid "Off" +msgstr "" + +#: options/preferences.py +msgid "One-up-one-down" +msgstr "" + +#: options/preferences.py +msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." +msgstr "" + +#: options/preferences.py +msgid "Pullup restriction" +msgstr "" + +#: options/preferences.py +msgid "No restriction" +msgstr "" + +#: options/preferences.py +msgid "Choose from teams who have been pulled up the fewest times so far" +msgstr "" + +#: options/preferences.py +msgid "Choose from teams with the lowest draw strength by wins so far" +msgstr "" + +#: options/preferences.py +msgid "Choose from teams with the lowest draw strength by speaks so far" +msgstr "" + +#: options/preferences.py +msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." +msgstr "" + +#: options/preferences.py +msgid "BP pullup distribution" +msgstr "" + +#: options/preferences.py +msgid "Anywhere in bracket" +msgstr "" + +#: options/preferences.py +msgid "All in the same room (not WUDC-compliant)" +msgstr "" + +#: options/preferences.py +msgid "In BP, which position cost function to use (see documentation for details)" +msgstr "" + +#: options/preferences.py +msgid "BP position cost" +msgstr "" + +#: options/preferences.py +msgid "Simple" +msgstr "" + +#: options/preferences.py +msgid "Rényi entropy" +msgstr "" + +#: options/preferences.py +msgid "Population variance" +msgstr "" + +#: options/preferences.py +msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." +msgstr "" + +#: options/preferences.py +msgid "Rényi order (BP)" +msgstr "" + +#: options/preferences.py +msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." +msgstr "" + +#: options/preferences.py +msgid "BP position cost exponent" +msgstr "" + +#: options/preferences.py +msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." +msgstr "" + +#: options/preferences.py +msgid "BP assignment method" +msgstr "" + +#: options/preferences.py +msgid "Hungarian algorithm (not WUDC-compliant)" +msgstr "" + +#: options/preferences.py +msgid "Hungarian algorithm with preshuffling" +msgstr "" + +#: options/preferences.py +msgid "Automatically make all adjudicators available for all rounds" +msgstr "" + +#: options/preferences.py +msgid "Skip adjudicator check-ins" +msgstr "" + +#: options/preferences.py +msgid "Hide panellist positions in the UI (and don't allocate them)" +msgstr "" + +#: options/preferences.py +msgid "No panellist adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Hide trainee positions in the UI (and don't allocate them)" +msgstr "" + +#: options/preferences.py +msgid "No trainee adjudicators" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Feedback" +msgstr "" + +#: options/preferences.py +msgid "Minimum possible adjudicator score that can be given" +msgstr "" + +#: options/preferences.py +msgid "Minimum adjudicator score" +msgstr "" + +#: options/preferences.py +msgid "Maximum possible adjudicator score that can be given" +msgstr "" + +#: options/preferences.py +msgid "Maximum adjudicator score" +msgstr "" + +#: options/preferences.py +msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" +msgstr "" + +#: options/preferences.py +msgid "Allow and expect feedback to be submitted by" +msgstr "" + +#: options/preferences.py +msgid "Chairs on panellists and trainees" +msgstr "" + +#: options/preferences.py +msgid "Panellists on chairs, chairs on panellists and trainees" +msgstr "" + +#: options/preferences.py +msgid "Panellists and trainees on chairs, vice-versa" +msgstr "" + +#: options/preferences.py +msgid "All adjudicators (including trainees) on each other" +msgstr "" + +#: options/preferences.py +msgid "Expect feedback to be submitted by teams on" +msgstr "" + +#: options/preferences.py +msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" +msgstr "" + +#: options/preferences.py +msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" +msgstr "" + +#: options/preferences.py +msgid "All adjudicators in their panels (including trainees)" +msgstr "" + +#: options/preferences.py +msgid "Show unexpected feedback submissions in participants pages" +msgstr "" + +#: options/preferences.py +msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" +msgstr "" + +#: options/preferences.py +msgid "Show if an adjudicator is a trainee (unaccredited)" +msgstr "" + +#: options/preferences.py +msgid "Show unaccredited" +msgstr "" + +#: options/preferences.py +msgid "Any explanatory text needed to introduce the feedback form" +msgstr "" + +#: options/preferences.py +msgid "Feedback introduction/explanation" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Debate Rules" +msgstr "" + +#: options/preferences.py +msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" +msgstr "" + +#: options/preferences.py +msgid "Teams in debate" +msgstr "" + +#: options/preferences.py +msgid "Two-team format" +msgstr "" + +#: options/preferences.py +msgid "British Parliamentary (four teams)" +msgstr "" + +#: options/preferences.py +msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." +msgstr "" + +#: options/preferences.py +msgid "Ballots per debate, preliminary rounds" +msgstr "" + +#: options/preferences.py +msgid "One ballot per voting adjudicator" +msgstr "" + +#: options/preferences.py +msgid "Consensus ballot (one ballot per debate)" +msgstr "" + +#: options/preferences.py +msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." +msgstr "" + +#: options/preferences.py +msgid "Ballots per debate, elimination rounds" +msgstr "" + +#: options/preferences.py +msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." +msgstr "" + +#: options/preferences.py +msgid "Winner Declaration in ballot(s)" +msgstr "" + +#: options/preferences.py +msgid "Do not require separate winner selection" +msgstr "" + +#: options/preferences.py +msgid "Require separate winner selection as a check on correct scores" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection to break tied-point debates" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection, overriding scores" +msgstr "" + +#: options/preferences.py +msgid "When ballots should ask for speaker scores." +msgstr "" + +#: options/preferences.py +msgid "Require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Always require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Only require speaker scores in preliminary rounds" +msgstr "" + +#: options/preferences.py +msgid "Never require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "How many substantive speakers on a team" +msgstr "" + +#: options/preferences.py +msgid "Substantive speakers" +msgstr "" + +#: options/preferences.py +msgid "What to call the teams" +msgstr "" + +#: options/preferences.py +msgid "Side names" +msgstr "" + +#: options/preferences.py +msgid "Whether this style features scored reply speeches" +msgstr "" + +#: options/preferences.py +msgid "Reply scores" +msgstr "" + +#: options/preferences.py +msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" +msgstr "" + +#: options/preferences.py +msgid "Require reply speaker to have given a substantive speech" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Standings" +msgstr "Classificació" + +#: options/preferences.py +msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" +msgstr "" + +#: options/preferences.py +msgid "Speeches missable for standings eligibility" +msgstr "" + +#: options/preferences.py +msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" +msgstr "" + +#: options/preferences.py +msgid "Replies missable for standings eligibility" +msgstr "" + +#: options/preferences.py +msgid "Metrics to use to rank teams (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Team standings precedence" +msgstr "" + +#: options/preferences.py +#, python-format +msgid "The following metrics can't be listed twice: %(duplicates)s" +msgstr "" + +#: options/preferences.py +msgid "Metrics to calculate, but not used to rank teams" +msgstr "" + +#: options/preferences.py +msgid "Team standings extra metrics" +msgstr "" + +#: options/preferences.py +msgid "Metrics to use to rank speakers (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Speaker standings precedence" +msgstr "" + +#: options/preferences.py +msgid "Metrics to calculate, but not used to rank speakers" +msgstr "" + +#: options/preferences.py +msgid "Speaker standings extra metrics" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Tab Release" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the team tab. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release team tab to public" +msgstr "" + +#: options/preferences.py +msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." +msgstr "" + +#: options/preferences.py +msgid "Top teams cutoff" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the speaker tab. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release speaker tab to public" +msgstr "" + +#: options/preferences.py +msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." +msgstr "" + +#: options/preferences.py +msgid "Top speakers cutoff" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the replies tab. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release replies tab to public" +msgstr "" + +#: options/preferences.py +msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." +msgstr "" + +#: options/preferences.py +msgid "Top replies cutoff" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release motions tab to public" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the feedback scores of all adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Release adjudicator tab to public" +msgstr "" + +#: options/preferences.py +msgid "What (if released) the adjudicator tab shows" +msgstr "" + +#: options/preferences.py +msgid "Adjudicator tab displays" +msgstr "" + +#: options/preferences.py +msgid "Only shows base score" +msgstr "" + +#: options/preferences.py +msgid "Only shows final score" +msgstr "" + +#: options/preferences.py +msgid "Shows base, final, and per-round scores" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release ballots to public" +msgstr "" + +#: options/preferences.py +msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" +msgstr "" + +#: options/preferences.py +msgid "Release all round results to public" +msgstr "" + +#: options/preferences.py +msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release ballots through private URLs" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Data Entry" +msgstr "" + +#: options/preferences.py +msgid "Whether adjudicators can submit ballots themselves, and how they do so" +msgstr "" + +#: options/preferences.py +msgid "Ballot submissions from adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Disabled (tab staff only)" +msgstr "" + +#: options/preferences.py +msgid "Use private URLs" +msgstr "" + +#: options/preferences.py +msgid "Use publicly accessible form" +msgstr "" + +#: options/preferences.py +msgid "Whether participants can submit feedback themselves, and how they do so" +msgstr "" + +#: options/preferences.py +msgid "Feedback submissions from participants" +msgstr "" + +#: options/preferences.py +msgid "If checked, users must enter a password when submitting public feedback and ballots" +msgstr "" + +#: options/preferences.py +msgid "Require password for submission" +msgstr "" + +#: options/preferences.py +msgid "Value of the password required for public submissions, if passwords are required" +msgstr "" + +#: options/preferences.py +msgid "Password for public submission" +msgstr "" + +#: options/preferences.py +msgid "Bypasses double checking by setting ballots to be automatically confirmed" +msgstr "" + +#: options/preferences.py +msgid "Bypass double checking" +msgstr "" + +#: options/preferences.py +msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." +msgstr "" + +#: options/preferences.py +msgid "Enforce blind confirmations" +msgstr "" + +#: options/preferences.py +msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." +msgstr "" + +#: options/preferences.py +msgid "Assistant user access" +msgstr "" + +#: options/preferences.py +msgid "All areas (results entry, draw display, and motions)" +msgstr "" + +#: options/preferences.py +msgid "Just results entry and draw display" +msgstr "" + +#: options/preferences.py +msgid "Only results entry" +msgstr "" + +#: options/preferences.py +msgid "Whether participants can check themselves in/out through their private URL." +msgstr "" + +#: options/preferences.py +msgid "Participant self-checkin" +msgstr "" + +#: options/preferences.py +msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" +msgstr "" + +#: options/preferences.py +msgid "Check-In Window (People)" +msgstr "" + +#: options/preferences.py +msgid "The amount of time (in hours) before a room's check-in event expires" +msgstr "" + +#: options/preferences.py +msgid "Check-In Window (Rooms)" +msgstr "" + +#: options/preferences.py +msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" +msgstr "" + +#: options/preferences.py +msgid "Ballot Digit Checks" +msgstr "" + +#: options/preferences.py +msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." +msgstr "" + +#: options/preferences.py +msgid "Score return location" +msgstr "" + +#: options/preferences.py +msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." +msgstr "" + +#: options/preferences.py +msgid "Feedback return location" +msgstr "" + +#: options/preferences.py +msgid "Lets debates have their status as postponed, as to not block draw generation." +msgstr "" + +#: options/preferences.py +msgid "Enable postponements" +msgstr "" + +#: options/preferences.py +msgid "Have each voting adjudicator submit a separate ballot." +msgstr "" + +#: options/preferences.py +msgid "Individual voting ballots" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Public Features" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing all participants in the tournament" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of participants list" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing all institutions in the tournament" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of institutions list" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing diversity statistics" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of diversity info" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." +msgstr "" + +#: options/preferences.py +msgid "Enable public view of the checkin statuses" +msgstr "" + +#: options/preferences.py +msgid "If the participants list is enabled, displays break category eligibility on that page" +msgstr "" + +#: options/preferences.py +msgid "Show break categories on participants page" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing pre-allocated sides" +msgstr "" + +#: options/preferences.py +msgid "Show pre-allocated sides to public" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing released draws" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of draw" +msgstr "" + +#: options/preferences.py +msgid "Disabled" +msgstr "" + +#: options/preferences.py +msgid "Show a single page for the current round's draw" +msgstr "" + +#: options/preferences.py +msgid "Show individual pages for all released draws" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing results of non-silent rounds" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of results" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing motions that have been explicitly released to the public" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of motions" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of team standings" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page for each team and adjudicator showing their records" +msgstr "" + +#: options/preferences.py +msgid "Enable public record pages" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." +msgstr "" + +#: options/preferences.py +msgid "Release team breaks to public" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." +msgstr "" + +#: options/preferences.py +msgid "Release adjudicators break to public" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page detailing who has unsubmitted feedback" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of unsubmitted feedback" +msgstr "" + +#: options/preferences.py +msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." +msgstr "" + +#: options/preferences.py +msgid "Tournament staff" +msgstr "" + +#: options/preferences.py +msgid "Message to be displayed on the tournament home page" +msgstr "" + +#: options/preferences.py +msgid "Welcome message" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "UI Options" +msgstr "" + +#: options/preferences.py +msgid "If showing results to public, show splitting adjudicators in them" +msgstr "" + +#: options/preferences.py +msgid "Show splitting adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Whether and how to use code names for teams" +msgstr "" + +#: options/preferences.py +msgid "Team code names" +msgstr "" + +#: options/preferences.py +msgid "Do not use code names" +msgstr "" + +#: options/preferences.py +msgid "Use real names everywhere, and show code names in tooltips" +msgstr "" + +#: options/preferences.py +msgid "Use code names for public; real names with code names in tooltips for admins" +msgstr "" + +#: options/preferences.py +msgid "Use code names for public; code names with real names in tooltips for admins" +msgstr "" + +#: options/preferences.py +msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" +msgstr "" + +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py +msgid "Display team emoji in the public and admin interfaces" +msgstr "" + +#: options/preferences.py +msgid "Show emoji" +msgstr "" + +#: options/preferences.py +msgid "In tables listing teams, adds a column showing their institutions" +msgstr "" + +#: options/preferences.py +msgid "Show team institutions" +msgstr "" + +#: options/preferences.py +msgid "Hide the institutions of adjudicators on public pages and on printed ballots" +msgstr "" + +#: options/preferences.py +msgid "Show adjudicator institutions" +msgstr "" + +#: options/preferences.py +msgid "Enables a hover element on every team's name showing that team's speakers" +msgstr "" + +#: options/preferences.py +msgid "Show speakers in draw" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Notifications" +msgstr "" + +#: options/preferences.py +msgid "The name of the organizer tasked with managing emails (in case of replies)" +msgstr "" + +#: options/preferences.py +msgid "Reply-to name" +msgstr "" + +#: options/preferences.py +msgid "The email address for handling replies" +msgstr "" + +#: options/preferences.py +msgid "Reply-to address" +msgstr "" + +#: options/preferences.py +msgid "A secret key to accept email status events" +msgstr "" + +#: options/preferences.py +msgid "Email status secret key" +msgstr "" + +#: options/preferences.py +msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" +msgstr "" + +#: options/preferences.py +msgid "Ballot receipts" +msgstr "" + +#: options/preferences.py +msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" +msgstr "" + +#: options/preferences.py +msgid "Ballot receipt subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to adjudicators with their submitted ballot." +msgstr "" + +#: options/preferences.py +msgid "Ballot receipt message" +msgstr "" + +#: options/preferences.py +msgid "The subject line for emails sent to speakers with their team points." +msgstr "" + +#: options/preferences.py +msgid "Team points subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to speakers with their team points." +msgstr "" + +#: options/preferences.py +msgid "Team points message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to adjudicators with their assignments." +msgstr "" + +#: options/preferences.py +msgid "Adjudicator draw subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to adjudicators with their assignments." +msgstr "" + +#: options/preferences.py +msgid "Adjudicator draw message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to teams with their draw." +msgstr "" + +#: options/preferences.py +msgid "Team draw subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to participants with their private URLs." +msgstr "" + +#: options/preferences.py +msgid "Private URL notification message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to participants with their private URLs." +msgstr "" + +#: options/preferences.py +msgid "Private URL notification subject line" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to participants on motion release." +msgstr "" + +#: options/preferences.py +msgid "Motion release notification subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to participants on motion release." +msgstr "" + +#: options/preferences.py +msgid "Motion release notification message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to participants informing them of their team registration." +msgstr "" + +#: options/preferences.py +msgid "Team registration notification subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to participants informing them of their team registration." +msgstr "" + +#: options/preferences.py +msgid "Team registration notification message" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Motions" +msgstr "Mocions" + +#: options/preferences.py +msgid "If checked, ballots require a motion to be entered" +msgstr "" + +#: options/preferences.py +msgid "Enable motions" +msgstr "" + +#: options/preferences.py +msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" +msgstr "" + +#: options/preferences.py +msgid "Ballot Hide Motions" +msgstr "" + +#: options/preferences.py +msgid "Enables the motion veto field on ballots, to track veto statistics" +msgstr "" + +#: options/preferences.py +msgid "Motion vetoes" +msgstr "" + +#: options/preferences.py +msgid "If showing results to public, show which motions were selected in the record" +msgstr "" + +#: options/preferences.py +msgid "Show motions in results" +msgstr "" + +#: options/preferences.py +msgid "Order in which are listed by round in the public view" +msgstr "" + +#: options/preferences.py +msgid "Order to display motions" +msgstr "" + +#: options/preferences.py +msgid "Earliest round first" +msgstr "" + +#: options/preferences.py +msgid "Latest round first" +msgstr "" + +#: options/preferences.py +msgid "Whether motions can be reused from one round to another." +msgstr "" + +#: options/preferences.py +msgid "Allow motion reuse" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Global Settings" +msgstr "" + +#: options/preferences.py +msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." +msgstr "" + +#: options/preferences.py +msgid "Enable API access" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Assistant account creation key" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Administrator account creation key" +msgstr "" + +#: options/presets.py +msgid "Public Information Options" +msgstr "" + +#: options/presets.py +msgid "Enable Public Information" +msgstr "" + +#: options/presets.py +msgid "Disable Public Information" +msgstr "" + +#: options/presets.py +msgid "Australs Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." +msgstr "" + +#: options/presets.py +msgid "British Parliamentary Rules" +msgstr "" + +#: options/presets.py +msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." +msgstr "" + +#: options/presets.py +msgid "Canadian Parliamentary Rules" +msgstr "" + +#: options/presets.py +msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." +msgstr "" + +#: options/presets.py +msgid "Australian Easters Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." +msgstr "" + +#: options/presets.py +msgid "2 vs 2 Impromptu" +msgstr "" + +#: options/presets.py +msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." +msgstr "" + +#: options/presets.py +msgid "3 vs 3 Prepared" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." +msgstr "" + +#: options/presets.py +msgid "UADC Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." +msgstr "" + +#: options/presets.py +msgid "WSDC Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." +msgstr "" + +#: options/presets.py +msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." +msgstr "" + +#: options/presets.py +msgid "Tab Release Options" +msgstr "" + +#: options/presets.py +msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" +msgstr "" + +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html +msgid "Configuration" +msgstr "Configuració" + +#: options/templates/preferences_index.html +#, python-format +msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." +msgstr "" + +#: options/templates/preferences_index.html +msgid "The range of scores that can awarded to speeches, replies, and teams" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How teams are paired in the draw and how adjudicators are auto-allocated" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How teams and speakers are ranked in the released tabs" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How adjudicators are ranked and who can submit feedback" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How and where are motions used" +msgstr "" + +#: options/templates/preferences_index.html +msgid "When to release a public tab is made visible and what data it shows" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How ballots, feedback, and check-ins are entered, including online submission options" +msgstr "" + +#: options/templates/preferences_index.html +msgid "What information the site displays on the publicly accessible pages" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Small tweaks in what information is presented by the interface" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Settings which can affect all tournaments on the site" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Manually Set Current Round" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." +msgstr "" + +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Rounds can be weighted so that certain rounds are worth more team points." +msgstr "" + +#: options/templates/preferences_index.html +msgid "Presets" +msgstr "" + +#: options/templates/preferences_index.html +msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "Apply %(preset)s" +msgstr "" + +#: options/templates/preferences_presets_complete.html +#, python-format +msgid "Presets Applied: %(preset_title)s" +msgstr "" + +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html +msgid "Back to Configuration" +msgstr "" + +#: options/templates/preferences_presets_complete.html +msgid "Preferences that were changed" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +#, python-format +msgid "Confirm Presets: %(preset_title)s" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +msgid "Preferences that will not change" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +msgid "Preferences that will change" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +#, python-format +msgid "Apply Presets: %(preset_title)s" +msgstr "" + +#: options/templates/preferences_section_set.html +#, python-format +msgid "Configuration: %(section)s" +msgstr "" + +#: options/templates/preferences_section_set.html +#, python-format +msgid "Edit Configuration: %(section)s" +msgstr "" + +#: options/views.py +#, python-format +msgid "Tournament options (%(section)s) saved." +msgstr "" + +#: options/views.py +#, python-format +msgid "Tournament options saved according to preset %(name)s." +msgstr "" + diff --git a/tabbycat/participants/locale/ca/LC_MESSAGES/django.po b/tabbycat/participants/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..facae240e97 --- /dev/null +++ b/tabbycat/participants/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,964 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-07-02 21:50\n" +"Last-Translator: philip_tc\n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/participants/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 942\n" + +#: participants/admin.py +#, python-format +msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" +msgstr "" + +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d speaker had their URL key removed." +msgid_plural "%(count)d speakers had their URL keys removed." +msgstr[0] "" +msgstr[1] "" + +#: participants/admin.py +msgid "Reset emoji" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d team had their emoji reset." +msgid_plural "%(count)d teams had their emojis reset." +msgstr[0] "" +msgstr[1] "" + +#: participants/admin.py +msgid "Reset code name" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d team had their code name reset." +msgid_plural "%(count)d teams had their code names reset." +msgstr[0] "" +msgstr[1] "" + +#: participants/admin.py +#, python-format +msgid "%(count)d adjudicator had their URL key removed." +msgid_plural "%(count)d adjudicators had their URL keys removed." +msgstr[0] "" +msgstr[1] "" + +#: participants/apps.py participants/views.py +msgid "Participants" +msgstr "Participants" + +#: participants/models.py +msgid "name" +msgstr "nom" + +#: participants/models.py +msgid "region" +msgstr "" + +#: participants/models.py +msgid "regions" +msgstr "" + +#. Translators: Change the examples to institutions native to your language; keep consistent between strings +#: participants/models.py +msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" +msgstr "" + +#: participants/models.py +msgid "code" +msgstr "" + +#. Translators: Change the examples to institutions native to your language; keep consistent between strings +#: participants/models.py +msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" +msgstr "" + +#: participants/models.py +msgid "institution" +msgstr "Institució" + +#: participants/models.py +msgid "institutions" +msgstr "" + +#: participants/models.py +msgid "tournament" +msgstr "" + +#. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" +#: participants/models.py +msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" +msgstr "" + +#: participants/models.py +msgid "slug" +msgstr "" + +#. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" +#: participants/models.py +msgid "Slug for URLs, e.g., \"novice\", \"esl\"" +msgstr "" + +#: participants/models.py +msgid "sequence number" +msgstr "número de seqüència" + +#: participants/models.py +msgid "The order in which the categories are displayed" +msgstr "" + +#: participants/models.py +msgid "limit" +msgstr "" + +#: participants/models.py +msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" +msgstr "" + +#: participants/models.py +msgid "public" +msgstr "" + +#: participants/models.py +msgid "If checked, this category will be included in the speaker category tabs shown to the public" +msgstr "" + +#: participants/models.py +msgid "speaker category" +msgstr "" + +#: participants/models.py +msgid "speaker categories" +msgstr "" + +#: participants/models.py +msgid "email address" +msgstr "" + +#: participants/models.py +msgid "phone" +msgstr "" + +#: participants/models.py +msgid "anonymous" +msgstr "" + +#: participants/models.py +msgid "Anonymous persons will have their name and team redacted on public tab releases" +msgstr "" + +#: participants/models.py +msgid "code name" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py +msgid "URL key" +msgstr "" + +#: participants/models.py +msgid "male" +msgstr "" + +#: participants/models.py +msgid "female" +msgstr "" + +#: participants/models.py +msgid "other" +msgstr "" + +#: participants/models.py +msgid "gender" +msgstr "" + +#: participants/models.py +msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" +msgstr "" + +#: participants/models.py +msgid "pronoun" +msgstr "" + +#: participants/models.py +msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" +msgstr "" + +#: participants/models.py +msgid "person" +msgstr "" + +#: participants/models.py +msgid "persons" +msgstr "" + +#: participants/models.py +msgid "full name/suffix" +msgstr "" + +#: participants/models.py +msgid "Do not include institution name (see \"uses institutional prefix\" below)" +msgstr "" + +#: participants/models.py +msgid "short name/suffix" +msgstr "" + +#: participants/models.py +msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure institutional identity on public-facing pages" +msgstr "" + +#: participants/models.py +msgid "short name" +msgstr "" + +#: participants/models.py +msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" +msgstr "" + +#: participants/models.py +msgid "long name" +msgstr "" + +#: participants/models.py +msgid "The full name of the team, including institution name. (This is autogenerated.)" +msgstr "" + +#: participants/models.py +msgid "Uses institutional prefix" +msgstr "" + +#: participants/models.py +msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" +msgstr "" + +#: participants/models.py +msgid "break categories" +msgstr "" + +#: participants/models.py +msgid "institution conflicts" +msgstr "" + +#: participants/models.py +msgid "none" +msgstr "Cap" + +#: participants/models.py +msgid "swing" +msgstr "" + +#: participants/models.py +msgid "composite" +msgstr "" + +#: participants/models.py +msgid "bye" +msgstr "" + +#: participants/models.py +msgid "type" +msgstr "" + +#: participants/models.py +msgid "emoji" +msgstr "" + +#: participants/models.py +msgid "team" +msgstr "equip" + +#: participants/models.py +msgid "teams" +msgstr "" + +#: participants/models.py +msgid "Teams must have an institution if they are using the institutional prefix." +msgstr "" + +#: participants/models.py +msgid "Teams must have a full name if they don't use the institutional prefix." +msgstr "" + +#: participants/models.py +msgid "Teams must have a short name if they don't use the institutional prefix." +msgstr "" + +#: participants/models.py +msgid "speaker" +msgstr "" + +#: participants/models.py +msgid "speakers" +msgstr "" + +#: participants/models.py +msgid "Adjudicators not assigned to any tournament can be shared between tournaments" +msgstr "" + +#: participants/models.py +msgid "base score" +msgstr "puntuació de l'examen" + +#: participants/models.py +msgid "team conflicts" +msgstr "" + +#: participants/models.py +msgid "adjudicator conflicts" +msgstr "" + +#: participants/models.py +msgid "always trainee" +msgstr "" + +#: participants/models.py +msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" +msgstr "" + +#: participants/models.py +msgid "breaking" +msgstr "" + +#: participants/models.py +msgid "independent" +msgstr "" + +#: participants/models.py +msgid "adjudication core" +msgstr "" + +#: participants/models.py +msgid "adjudicator" +msgstr "jutges" + +#: participants/models.py +msgid "adjudicators" +msgstr "" + +#: participants/tables.py +msgid "Points after this debate" +msgstr "Punts després d'aquest debat" + +#: participants/tables.py +msgid "Wins after this debate" +msgstr "" + +#: participants/tables.py +msgid "Speaker scores
    (in speaking order)" +msgstr "Punts d'orador
    (en ordre)" + +#: participants/tables.py +msgid "Speaks" +msgstr "Punts d'Orador" + +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html +#, python-format +msgid "About %(name)s" +msgstr "Sobre %(name)s" + +#: participants/templates/adjudicator_registration_card.html +msgid "Independent adjudicator" +msgstr "Jutge Independent" + +#: participants/templates/adjudicator_registration_card.html +msgid "Member of the adjudication core" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Institution:" +msgstr "Institució:" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Unaffiliated" +msgstr "Independent" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Region:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +msgid "The institutional affiliations of adjudicators are not public at this tournament." +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Institutional Conflicts:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "; " +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "None" +msgstr "Cap" + +#: participants/templates/adjudicator_registration_card.html +msgid "Team Conflicts:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid ", " +msgstr ", " + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Adjudicator Conflicts:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Room Constraints:" +msgstr "" + +#: participants/templates/admin/participants/adjudicator/change_form.html +msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." +msgstr "" + +#. Translators: This follows the above sentence in the same paragraph. +#: participants/templates/admin/participants/delete_debateteam_warning.html +msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +msgid "Note that deleting an institution also deletes all teams from that institution." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." +msgstr "" + +#: participants/templates/admin/participants/team/change_form.html +msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." +msgstr "" + +#: participants/templates/current_round/common.html +#, python-format +msgid "The round begins at %(start_time)s" +msgstr "" + +#: participants/templates/current_round/common.html +msgid "Teams:" +msgstr "Equips:" + +#: participants/templates/current_round/common.html +msgid "Adjudicator:" +msgid_plural "Adjudicators:" +msgstr[0] "Jutge:" +msgstr[1] "Grup de Jutges:" + +#: participants/templates/current_round/common.html +msgctxt "chair icon" +msgid "Ⓒ" +msgstr "Ⓟ" + +#: participants/templates/current_round/common.html +msgctxt "trainee icon" +msgid "Ⓣ" +msgstr "Ⓐ" + +#: participants/templates/current_round/common.html +msgid "There are no panellists or trainees assigned to this debate." +msgstr "" + +#: participants/templates/current_round/common.html +msgid "Motions are not released to public." +msgstr "" + +#: participants/templates/current_round/common.html +msgid "Motion:" +msgstr "" + +#: participants/templates/current_round/common.html +#, python-format +msgid "Motion %(seq)s:" +msgstr "" + +#: participants/templates/current_round/common.html +msgid "The motion(s) for this round haven't yet been released." +msgstr "La moció d'aquesta ronda encara no s'han publicat." + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating in %(room)s." +msgstr "%(adjudicator)s és principal jutjant la %(room)s." + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating as the %(side)s team." +msgstr "%(team)s està debatent com l'equip de %(side)s." + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating as the %(side)s team." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s's debate is in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s's debate is in %(room)s." +msgstr "El Debat de %(team)s succeeix a %(room)s." + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "Your debate is in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "Your debate is in %(room)s." +msgstr "" + +#: participants/templates/edit_speaker_eligibility.html +#, python-format +msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." +msgstr "" + +#: participants/templates/feedback_progress_panel.html +msgid "Feedback Returns" +msgstr "Devolució de retroalimentacions" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Has submitted feedback for %(adjudicator)s" +msgstr "Ha enviat retroalimentació per a %(adjudicator)s" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" +msgstr "No ha enviat retroalimentació per a un de: %(adjudicators)s (qualsevol que hagi donat retroalimentació oral)" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Has not submitted feedback for %(adjudicator)s" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +msgid "More feedback submissions than expected for this debate:" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Unexpected feedback submission for %(adjudicator)s" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "%(name)s doesn't have any feedback to submit." +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "In This Round (%(round)s)" +msgstr "En aquesta ronda (%(round)s)" + +#: participants/templates/in_this_round.html +msgid "In This Round" +msgstr "En aquesta ronda" + +#: participants/templates/in_this_round.html +msgid "(Not Released to Public)" +msgstr "" + +#: participants/templates/in_this_round.html +msgid "Room TBA" +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "%(adjudicator)s is not adjudicating this round." +msgstr "" + +#: participants/templates/in_this_round.html +msgid "You are not adjudicating this round." +msgstr "No estàs jutjant aquesta ronda." + +#: participants/templates/in_this_round.html +#, python-format +msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." +msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." +msgstr[0] "" +msgstr[1] "" + +#: participants/templates/in_this_round.html +msgid "If this is an error, please contact a tab director immediately." +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "%(team)s does not have a debate this round." +msgstr "" + +#: participants/templates/in_this_round.html +msgid "You do not have a debate this round." +msgstr "No teniu debat aquesta ronda." + +#: participants/templates/in_this_round.html +msgid "The draw for this round hasn't yet been released." +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Participants List" +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Institutions List" +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Emails have already been sent." +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Email Team Registrations" +msgstr "" + +#: participants/templates/participants_subnav.html participants/views.py +msgid "Code Names" +msgstr "" + +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html +msgid "Speaker Categories" +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Speaker Eligibility" +msgstr "" + +#: participants/templates/speaker_categories_edit.html +msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." +msgstr "" + +#: participants/templates/speaker_categories_edit.html +#, python-format +msgid "If you want to delete speaker categories, use the Edit Database area." +msgstr "" + +#: participants/templates/speaker_categories_edit.html +msgid "Save Speaker Categories" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Team name:" +msgstr "Nom de l'equip:" + +#: participants/templates/team_registration_card.html +msgid "Full team name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Short team name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Code name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "No code name assigned" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Emoji:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "No emoji assigned" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Speakers:" +msgstr "Oradors:" + +#: participants/templates/team_registration_card.html +msgid "Eligible for break categories:" +msgstr "Elegibilitat per al tall de les categories:" + +#: participants/templates/team_registration_card.html +msgid "Speaker categories:" +msgstr "Categories d'orador:" + +#: participants/templatetags/team_name_for_data_entry.py +#, python-format +msgid "%(code_name)s (%(real_name)s)" +msgstr "" + +#: participants/views.py +msgid "Adjudicators" +msgstr "Grup de Jutges" + +#: participants/views.py +msgid "Speakers" +msgstr "Oradors" + +#: participants/views.py +msgid "Institutions" +msgstr "Institucions" + +#: participants/views.py +msgid "Code" +msgstr "" + +#: participants/views.py +msgid "Full name" +msgstr "" + +#: participants/views.py +msgid "Region" +msgstr "" + +#: participants/views.py +msgid "Teams" +msgstr "" + +#: participants/views.py +msgid "Number of teams" +msgstr "" + +#: participants/views.py +msgid "Adjs" +msgstr "" + +#: participants/views.py +msgid "Number of adjudicators, excluding independents" +msgstr "" + +#: participants/views.py +msgid "IAs" +msgstr "" + +#: participants/views.py +msgid "Number of independent adjudicators" +msgstr "" + +#: participants/views.py +msgid "Code name" +msgstr "" + +#: participants/views.py +msgid "Team Registration" +msgstr "" + +#: participants/views.py +msgid "Results" +msgstr "Resultats" + +#: participants/views.py +#, python-format +msgid "Record for %(name)s" +msgstr "Recorregut per a %(name)s" + +#: participants/views.py +msgid "Previous Rounds" +msgstr "" + +#: participants/views.py +#, python-format +msgid "Saved category: %(list)s" +msgid_plural "Saved categories: %(list)s" +msgstr[0] "" +msgstr[1] "" + +#: participants/views.py +msgid "No changes were made to the categories." +msgstr "" + +#: participants/views.py +msgid "Speaker Category Eligibility" +msgstr "" + diff --git a/tabbycat/printing/locale/ca/LC_MESSAGES/django.po b/tabbycat/printing/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..5e969d7b3ca --- /dev/null +++ b/tabbycat/printing/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-04-05 21:07\n" +"Last-Translator: philip_tc\n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/printing/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 944\n" + +#: printing/templates/feedback_list.html +msgid "Feedback Forms" +msgstr "" + +#: printing/templates/feedback_list.html +#, python-format +msgid "Printable Feedback Forms for %(round)s" +msgstr "" + +#: printing/templates/feedback_list.html +msgid "No feedback questions have been added for either teams or adjudicators to answer." +msgstr "" + +#: printing/templates/feedback_list.html +msgid "No feedback questions have been added for teams to answer." +msgstr "" + +#: printing/templates/feedback_list.html +msgid "No feedback questions have been added for adjudicators to answer." +msgstr "" + +#: printing/templates/feedback_list.html +#, python-format +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgstr "" + +#: printing/templates/feedback_list.html +msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" +msgstr "" + +#: printing/templates/printables_list.html +msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." +msgstr "" + +#: printing/templates/randomised_url_sheets.html +#, python-format +msgid "Printable %(sheet)s URLs" +msgstr "" + +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +msgstr "" + +#: printing/templates/randomised_url_sheets.html +#, python-format +msgid "Private URL for %(name)s (%(group)s)" +msgstr "" + +#: printing/templates/randomised_url_sheets.html +msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Printable Scoresheets" +msgstr "" + +#: printing/templates/scoresheet_list.html +#, python-format +msgid "for %(round)s" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Edit Motion(s)" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "There are no scoresheets available — perhaps the round has not been drawn?" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Edit Ballot Motions" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "×" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Motion" +msgstr "Moció" + +#: printing/templates/scoresheet_list.html +msgid "Changes to motions will update in the displayed ballots automatically" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." +msgstr "" + +#: printing/views.py +msgid "Overall Score" +msgstr "" + +#: printing/views.py +msgid "Unaffiliated" +msgstr "" + +#: printing/views.py +msgid "Team" +msgstr "Equip" + diff --git a/tabbycat/privateurls/locale/ca/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..2cf835a0b14 --- /dev/null +++ b/tabbycat/privateurls/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,179 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-07-01 22:45\n" +"Last-Translator: philip_tc\n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/privateurls/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 946\n" + +#: privateurls/apps.py +msgid "Private URL Management" +msgstr "Gestió d'URL privades" + +#: privateurls/templates/private_urls.html privateurls/views.py +msgid "Private URLs" +msgstr "URLs privades" + +#: privateurls/templates/private_urls.html +msgid "The private URLs for ballot and/or feedback submission from participants are given below." +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +msgstr "" + +#: privateurls/templates/private_urls.html +#, python-format +msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "There are no private URLs assigned." +msgstr "No hi ha URLs privades assignades." + +#: privateurls/templates/private_urls.html +msgid "Generate Private URLs" +msgstr "Generar URLs privades" + +#: privateurls/templates/private_urls_nav.html +msgid "View URLs" +msgstr "Veure URLs" + +#: privateurls/templates/private_urls_nav.html +msgid "Print Teams' URLs" +msgstr "Imprimir URLs d'equips" + +#: privateurls/templates/private_urls_nav.html +msgid "Print Adjudicators' URLs" +msgstr "Imprimir URLs de Jutges" + +#: privateurls/templates/private_urls_nav.html +msgid "All reachable participants have already been sent their private URLs." +msgstr "Ja han estat enviades a tots els participants accessibles les seves URLs privades." + +#: privateurls/templates/private_urls_nav.html +msgid "Email URLs" +msgstr "Enviar URLs" + +#: privateurls/templates/private_urls_nav.html +msgid "This button only generates private URLs for participants who do not already have one." +msgstr "Aquest botó només genera URLs privades per a aquells participants que no tenen una encara." + +#: privateurls/templates/private_urls_nav.html +msgid "Generate URLs" +msgstr "Generar URLs" + +#: privateurls/templates/private_urls_nav.html +msgid "All participants already have private URLs." +msgstr "Tots els participants ja tenen URLs privades." + +#: privateurls/templates/public_url_landing.html +msgid "Private URL" +msgstr "URL privada" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "for %(name)s" +msgstr "per %(name)s" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "(%(team)s)" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." +msgstr "La URL d'aquesta pàgina està personalitzada per a tu, %(name)s. No la comparteixis amb ningú; qualsevol persona que tingui accés a aquest URL pot enviar resultats i/o retroalimentació per als teus debats. Podeu afegir a favorits aquesta pàgina i tornar aquí després de cada debat per realitzar les accions oportunes." + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Revoke check-in from %(check_time)s" +msgstr "Retirar registre de les %(check_time)s" + +#: privateurls/templates/public_url_landing.html +msgid "Check in" +msgstr "Registrar-se" + +#. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "You have been checked in at %(check_time)s" +msgstr "Has estat registrat a les %(check_time)s" + +#: privateurls/templates/public_url_landing.html +msgid "You are not currently checked in." +msgstr "Encara no estàs registrat." + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Submit Ballot for %(round)s" +msgstr "Enviar Taula de resultats per %(round)s" + +#: privateurls/templates/public_url_landing.html +msgid "Submit Feedback" +msgstr "Enviar retroalimentació" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Registration (%(name)s)" +msgstr "Registre (%(name)s)" + +#: privateurls/views.py +msgid "no URL" +msgstr "no URL" + +#: privateurls/views.py +msgid "URL" +msgstr "URL" + +#: privateurls/views.py +msgid "Speakers" +msgstr "Oradors" + +#: privateurls/views.py +msgid "Adjudicators" +msgstr "Grup de Jutges" + +#: privateurls/views.py +msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." +msgstr "" + +#: privateurls/views.py +#, python-format +msgid "A private URL was generated for %(nblank_people)d person." +msgid_plural "Private URLs were generated for all %(nblank_people)d people." +msgstr[0] "Una URL privada va ser generada per %(nblank_people)d." +msgstr[1] "Unes URLs privades van ser generades per %(nblank_people)d." + +#: privateurls/views.py +#, python-format +msgid "The already-existing private URL for %(nexisting_people)d person was left intact." +msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." +msgstr[0] "" +msgstr[1] "" + +#: privateurls/views.py +msgid "URL Key" +msgstr "Clau de l'URL" + +#: privateurls/views.py +msgid "Debates" +msgstr "Debats" + diff --git a/tabbycat/results/locale/ca/LC_MESSAGES/django.po b/tabbycat/results/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..2ece5788fd1 --- /dev/null +++ b/tabbycat/results/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,1093 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-07-01 23:41\n" +"Last-Translator: philip_tc\n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/results/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 948\n" + +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py +#, python-format +msgid "Resaved results for %(count)d ballot submission." +msgid_plural "Resaved results for %(count)d ballot submissions." +msgstr[0] "" +msgstr[1] "" + +#: results/apps.py results/templates/public_results_index.html results/views.py +msgid "Results" +msgstr "Resultats" + +#: results/forms.py +msgid "Tournament password" +msgstr "" + +#: results/forms.py +msgid "That password isn't correct." +msgstr "La contrasenya és incorrecta." + +#: results/forms.py +msgid "Please enter a whole number." +msgstr "" + +#: results/forms.py +#, python-format +msgid "Please enter a multiple of %s." +msgstr "" + +#: results/forms.py +msgid "The ballot set can't be both discarded and confirmed." +msgstr "" + +#: results/forms.py +msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." +msgstr "" + +#: results/forms.py +msgid "---------" +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(aff_team)s affirmed, %(neg_team)s negated" +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(side)s's motion veto" +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(team)s (%(side)s)" +msgstr "%(team)s (%(side)s)" + +#: results/forms.py +msgid "Winner" +msgstr "Guanyador" + +#: results/forms.py +msgid "Mark as a duplicate speech" +msgstr "Marcar com a discurs duplicat" + +#: results/forms.py +#, python-format +msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(speaker)s appears to have given %(count)d substantive speech." +msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." +msgstr[0] "" +msgstr[1] "" + +#: results/forms.py +msgid "The last substantive speaker and reply speaker can't be the same." +msgstr "El darrer orador propositiu i l'orador de rèplica no poden ser el mateix." + +#: results/forms.py +msgid "The reply speaker for this team did not give a substantive speech." +msgstr "L'orador de rèplica d'aquest equip no va fer un discurs propositiu." + +#: results/forms.py +msgid "The total scores for the teams are the same (i.e. a draw)." +msgstr "" + +#: results/forms.py +msgid "The declared winner does not correspond to the team with the highest score." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The total scores for the following teams are the same: %(teams)s" +msgstr "" + +#: results/forms.py +#, python-format +msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." +msgstr "" + +#: results/forms.py +msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." +msgstr "" + +#: results/forms.py +#, python-format +msgid "There must be exactly %(n)d team advancing." +msgid_plural "There must be exactly %(n)d teams advancing." +msgstr[0] "" +msgstr[1] "" + +#: results/forms.py +msgid "There must be exactly 1 team advancing." +msgstr "" + +#: results/models.py +msgid "Tab room" +msgstr "Sala de tabulació" + +#: results/models.py +msgid "Public" +msgstr "Públic" + +#: results/models.py +msgid "timestamp" +msgstr "marca de temps" + +#: results/models.py +msgid "version" +msgstr "versió" + +#: results/models.py +msgid "submitter type" +msgstr "" + +#: results/models.py +msgid "confirmed" +msgstr "confirmat" + +#: results/models.py +msgid "from private URL" +msgstr "" + +#: results/models.py +msgid "from participant" +msgstr "" + +#: results/models.py +msgid "submitter" +msgstr "" + +#: results/models.py +msgid "confirmer" +msgstr "" + +#: results/models.py +msgid "confirm timestamp" +msgstr "" + +#: results/models.py +msgid "IP address" +msgstr "" + +#: results/models.py +msgid "A tab room ballot must have a user associated." +msgstr "Un Taula de resultats de la sala de tabulació ha de tenir un usuari associat." + +#: results/models.py +msgid "debate" +msgstr "debat" + +#: results/models.py +msgid "motion" +msgstr "moció" + +#: results/models.py +msgid "discarded" +msgstr "Descartat." + +#: results/models.py +msgid "single adjudicator" +msgstr "" + +#: results/models.py +msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." +msgstr "" + +#: results/models.py +msgid "ballot submission" +msgstr "enviament de la Taula de Resultats" + +#: results/models.py +msgid "ballot submissions" +msgstr "enviaments de la Taula de Resultats" + +#: results/models.py +#, python-format +msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" +msgstr "" + +#: results/models.py +msgid "A ballot can't be both confirmed and discarded!" +msgstr "" + +#: results/models.py +msgid "debate adjudicator" +msgstr "jutge del debat" + +#: results/models.py +msgid "debate team" +msgstr "equip de debat" + +#: results/models.py +msgid "win" +msgstr "" + +#: results/models.py +msgid "margin" +msgstr "" + +#: results/models.py +msgid "score" +msgstr "puntuació" + +#: results/models.py +msgid "team score by adjudicator" +msgstr "" + +#: results/models.py +msgid "team scores by adjudicator" +msgstr "" + +#: results/models.py +msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." +msgstr "" + +#: results/models.py +msgid "position" +msgstr "posició" + +#: results/models.py +msgid "speaker score by adjudicator" +msgstr "" + +#: results/models.py +msgid "speaker scores by adjudicator" +msgstr "" + +#: results/models.py +msgid "points" +msgstr "punts" + +#: results/models.py +msgid "votes given" +msgstr "" + +#: results/models.py +msgid "votes possible" +msgstr "" + +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py +msgid "team score" +msgstr "" + +#: results/models.py +msgid "team scores" +msgstr "" + +#: results/models.py +msgid "speaker" +msgstr "orador" + +#: results/models.py +msgid "ghost" +msgstr "fantasma" + +#: results/models.py +msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." +msgstr "" + +#: results/models.py +msgid "speaker score" +msgstr "" + +#: results/models.py +msgid "speaker scores" +msgstr "" + +#: results/models.py +msgid "The debate team and speaker must be from the same team." +msgstr "" + +#: results/models.py +msgid "The ballot submission and debate team must relate to the same debate." +msgstr "" + +#: results/tables.py +msgid "Whether this debate's ballot has been checked in" +msgstr "" + +#: results/tables.py +msgid "Status of this debate's ballot" +msgstr "" + +#: results/templates/admin_results.html +msgid "Display Draw" +msgstr "Mostrar aparellaments" + +#: results/templates/admin_results.html +msgid "Check-In Ballots" +msgstr "" + +#: results/templates/admin_results.html +msgid "Recent 'Iron-Persons'" +msgstr "" + +#: results/templates/admin_results.html +msgid "Teams who have recently missed a speaker" +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "A speaker from %(team)s gave multiple speeches in the previous round" +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "A speaker from %(team)s gave multiple speeches in the current round" +msgstr "" + +#: results/templates/admin_results.html +msgid "No known cases in the current or previous round" +msgstr "" + +#: results/templates/admin_results.html +msgid "Complete Round" +msgstr "" + +#: results/templates/admin_results.html +msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." +msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/admin_results.html +#, python-format +msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." +msgstr "" + +#: results/templates/admin_results.html +msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." +msgstr "" + +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html +msgid "Back to All Results" +msgstr "" + +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html +msgid "Create a new ballot set for this debate" +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because you entered it." +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "Confirm results" +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "Results are incorrect" +msgstr "" + +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html +msgid "Emails will be sent to adjudicators when the ballot is confirmed." +msgstr "" + +#: results/templates/assistant_results.html results/views.py +msgid "Enter Results" +msgstr "" + +#: results/templates/assistant_results.html +msgid "This page automatically updates with the new ballot entries and checkins as they occur." +msgstr "" + +#: results/templates/assistant_results.html +msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." +msgstr "" + +#: results/templates/assistant_results.html +msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." +msgstr "" + +#: results/templates/assistant_results.html +#, python-format +msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." +msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/assistant_results.html +#, python-format +msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." +msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/ballot/ballot_debate_info.html +msgid "Debate Information" +msgstr "" + +#: results/templates/ballot/ballot_debate_info.html +msgid "No speakers spoke twice (no 'iron-person' speeches)" +msgstr "" + +#: results/templates/ballot/ballot_debate_info.html +msgid "A speaker spoke twice (an 'iron-person' speech)" +msgstr "" + +#: results/templates/ballot/ballot_scoresheet.html +msgid "Result" +msgstr "Resultat" + +#: results/templates/ballot/ballot_scoresheet.html +msgid "Rank" +msgstr "" + +#: results/templates/ballot/ballot_scoresheet.html +msgid "Margin" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "There are some problems with this scoresheet. Please review and correct them." +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s (%(institution)s)" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html +msgid "Scoresheet" +msgstr "Full de resultats" + +#: results/templates/ballot/ballot_set.html +msgid "Solo Chair" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Chair" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Panellist" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Trainee" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Assign sides before entering scores" +msgstr "" + +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "There is %(number)s existing ballot set for this debate." +msgid_plural "There are %(number)s existing ballot sets for this debate." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/ballot/other_ballots_list.html +msgid "This ballot set is confirmed." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "This ballot set is discarded." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "CURRENTLY VIEWING" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "MERGING" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "Version %(version)s," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "entered by %(submitter)s," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "submitted from %(adjudicator)s's private URL," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "submitted from the public form on %(ip_address)s," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "%(timestamp)s (%(timeago)s ago)," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "unknown" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "confirmed by %(confirmer)s" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "unconfirmed" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "(discarded)" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "(identical to version %(others)s)" +msgid_plural "(identical to versions %(others)s)" +msgstr[0] "" +msgstr[1] "" + +#: results/templates/ballot_entry.html +#, python-format +msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." +msgstr "" + +#: results/templates/ballot_entry_base.html +msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." +msgstr "" + +#: results/templates/ballot_entry_base.html +#, python-format +msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Scoresheet from chair %(chair)s" +msgstr "" + +#: results/templates/ballot_entry_form.html +msgid "Scoresheet, no chair set" +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Error with %(pos)s's speaker field: %(error)s" +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Error with %(pos)s's duplicate speaker field: %(error)s" +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Error with %(pos)s's score field: %(error)s" +msgstr "" + +#: results/templates/debate_postponement_form.html +msgid "Postponed" +msgstr "" + +#: results/templates/debate_postponement_form.html +msgid "Postpone" +msgstr "" + +#: results/templates/enter_results.html +msgid "Ballot Status" +msgstr "" + +#: results/templates/enter_results.html +msgid "only the confirmed ballot set will affect this debate's result" +msgstr "" + +#: results/templates/enter_results.html +msgid "Debate Status" +msgstr "" + +#: results/templates/enter_results.html +msgid "all debates must be confirmed to complete the round" +msgstr "" + +#: results/templates/enter_results.html +msgid "Save Ballot" +msgstr "" + +#: results/templates/enter_results.html +msgid "Cancel Entry" +msgstr "" + +#: results/templates/includes/public_enter_results_info.html +#, python-format +msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." +msgstr "La URL d'aquesta pàgina està personalitzada per a tu, %(name)s. No la comparteixis amb ningú; qualsevol persona que tingui accés a aquest URL pot enviar resultats i/o retroalimentació per als teus debats. Podeu afegir a favorits aquesta pàgina i tornar aquí després de cada debat per realitzar les accions oportunes." + +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html +#, python-format +msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." +msgstr "" + +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html +msgid "Ballot Not Available" +msgstr "" + +#: results/templates/privateurl_ballot_set_error.html +#, python-format +msgid "Back to your private landing page." +msgstr "" + +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html +msgid "Enter Ballot" +msgstr "" + +#: results/templates/public_add_ballot.html +msgid "Who are you?" +msgstr "" + +#: results/templates/public_add_ballot.html +msgid "(click your name on this list)" +msgstr "" + +#: results/templates/public_add_ballot_unreleased.html +#, python-format +msgid "The draw and/or motions for %(round)s have yet to be released." +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "Ballot for %(matchup)s" +msgstr "Taula de resultats per a %(matchup)s" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "%(round)s @ %(room)s" +msgstr "%(round)s @ %(room)s" + +#: results/templates/public_ballot_set.html +msgid "Return to landing page" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "Return to Results for %(round)s" +msgstr "Tornar als resultats de la %(round)s" + +#: results/templates/public_ballot_set.html +msgid "Motion" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "From %(name)s (%(institution)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "Total for %(name)s (%(side)s)" +msgstr "Total per a %(name)s (%(side)s)" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "%(name)s (%(side)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Won" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Lost" +msgstr "" + +#: results/templates/public_ballot_set_error.html +#, python-format +msgid "Back to the tournament home page." +msgstr "" + +#: results/templates/public_enter_results.html +#, python-format +msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" +msgstr "" + +#: results/templates/public_enter_results.html +msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." +msgstr "" + +#: results/templates/public_enter_results.html +#, python-format +msgid "This form has already been submitted once. Please contact a tab official after submitting your form." +msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" +msgstr[1] "" + +#: results/templates/public_enter_results.html +msgid "When submitting this form your IP address will be stored for logging purposes." +msgstr "" + +#: results/templates/public_enter_results_error.html +#, python-format +msgid "No Result to Enter (%(adjudicator)s)" +msgstr "" + +#: results/templates/public_enter_results_error.html +msgid "No Result to Enter" +msgstr "" + +#: results/templates/public_results_for_round.html +msgid "View by Team" +msgstr "" + +#: results/templates/public_results_for_round.html +msgid "View by Debate" +msgstr "" + +#: results/templates/public_results_index.html +#, python-format +msgid "Results for %(round)s" +msgstr "" + +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html +msgid "Results Not Available" +msgstr "" + +#: results/templates/public_results_not_available.html +#, python-format +msgid "The results for %(round)s aren't yet available." +msgstr "" + +#: results/templates/public_results_silent.html +#, python-format +msgid "%(round)s is a silent round." +msgstr "" + +#: results/utils.py +msgid "No Ballot" +msgstr "" + +#: results/utils.py +msgid "Debate was Postponed" +msgstr "" + +#: results/utils.py +msgid "Ballot is Unconfirmed" +msgstr "" + +#: results/utils.py +msgid "Ballot is Confirmed" +msgstr "" + +#. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" +#: results/utils.py +#, python-format +msgid "%(team)s as %(side)s" +msgstr "" + +#: results/utils.py +#, python-format +msgid "%(team)s (%(side)s) won" +msgstr "" + +#. Translators: The team here is the losing team +#: results/utils.py +#, python-format +msgid "vs %(team)s (%(side)s)" +msgstr "" + +#: results/utils.py +#, python-format +msgid "Advancing: %(advancing_list)s
    " +msgstr "" + +#: results/utils.py +#, python-format +msgid "Eliminated: %(eliminated_list)s" +msgstr "" + +#: results/utils.py +#, python-format +msgid "1st: %(first_team)s
    " +msgstr "" + +#: results/utils.py +#, python-format +msgid "2nd: %(second_team)s
    \n" +"3rd: %(third_team)s
    \n" +"4th: %(fourth_team)s" +msgstr "" + +#: results/utils.py +#, python-format +msgid "Error with result for %(debate)s" +msgstr "" + +#. Translators: Abbreviation for Prime Minister +#: results/utils.py +msgid "PM" +msgstr "" + +#. Translators: Abbreviation for Deputy Prime Minister +#: results/utils.py +msgid "DPM" +msgstr "VPM" + +#. Translators: Abbreviation for Leader of the Opposition +#: results/utils.py +msgid "LO" +msgstr "LO" + +#. Translators: Abbreviation for Deputy Leader of the Opposition +#: results/utils.py +msgid "DLO" +msgstr "VLO" + +#. Translators: Abbreviation for Member for the Government +#: results/utils.py +msgid "MG" +msgstr "EG" + +#. Translators: Abbreviation for Government Whip +#: results/utils.py +msgid "GW" +msgstr "LG" + +#. Translators: Abbreviation for Member for the Opposition +#: results/utils.py +msgid "MO" +msgstr "EO" + +#. Translators: Abbreviation for Opposition Whip +#: results/utils.py +msgid "OW" +msgstr "LO" + +#: results/utils.py +msgid "Reply" +msgstr "" + +#: results/views.py +msgid " vs " +msgstr " contra " + +#: results/views.py +#, python-format +msgid "%(matchup)s: %(round)s @ %(room)s" +msgstr "" + +#: results/views.py +msgid "N/A" +msgstr "" + +#: results/views.py +msgid "New Ballot Set" +msgstr "" + +#: results/views.py +#, python-format +msgid "Ballot set for %(debate)s added." +msgstr "" + +#: results/views.py +msgid " Email receipts queued to be sent." +msgstr "" + +#: results/views.py +#, python-format +msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." +msgstr "" + +#: results/views.py +#, python-format +msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." +msgstr "" + +#: results/views.py +msgid "Edit Ballot Set" +msgstr "" + +#: results/views.py +#, python-format +msgid "Ballot set for %(matchup)s discarded." +msgstr "" + +#: results/views.py +#, python-format +msgid "Ballot set for %(matchup)s confirmed." +msgstr "" + +#: results/views.py +#, python-format +msgid "Edits to ballot set for %(matchup)s saved." +msgstr "" + +#: results/views.py +#, python-format +msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." +msgstr "" + +#: results/views.py +msgid "The draw for this round hasn't been released yet." +msgstr "" + +#: results/views.py +msgid "The motions for this round haven't been released yet." +msgstr "" + +#: results/views.py +msgid "It looks like you don't have a debate this round." +msgstr "" + +#: results/views.py +msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." +msgstr "" + +#: results/views.py +msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." +msgstr "" + +#: results/views.py +msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." +msgstr "" + +#: results/views.py +msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." +msgstr "" + +#: results/views.py +#, python-format +msgid "This debate is in %s, which is a silent round." +msgstr "" + +#: results/views.py +#, python-format +msgid "This debate is in %s, the results for which aren't available yet." +msgstr "" + +#: results/views.py +#, python-format +msgid "The result for debate %s is not confirmed." +msgstr "" + +#: results/views.py +#, python-format +msgid "The debate %s does not have a confirmed ballot." +msgstr "" + +#: results/views.py +#, python-format +msgid "There is no result yet for debate %s." +msgstr "" + +#: results/views.py +#, python-format +msgid "Add result from %(adjudicator)s" +msgstr "" + +#: results/views.py +msgid "Adjudicator" +msgstr "" + +#: results/views.py +msgid "Merge Ballots" +msgstr "" + +#: results/views.py +msgid "The speaking order in the ballots is inconsistent, so could not be merged." +msgstr "" + +#: results/views.py +msgid "Duplicate speeches are marked inconsistently, so could not be merged." +msgstr "" + +#: results/views.py +#, python-format +msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." +msgstr "" + diff --git a/tabbycat/standings/locale/ca/LC_MESSAGES/django.po b/tabbycat/standings/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..6736d8f2308 --- /dev/null +++ b/tabbycat/standings/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,612 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-07-01 23:41\n" +"Last-Translator: philip_tc\n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/standings/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 950\n" + +#: standings/base.py +msgid "The same metric would be added twice:" +msgstr "" + +#: standings/base.py +msgid "The same ranking would be added twice:" +msgstr "" + +#: standings/base.py +#, python-format +msgid "Unrecognized metric code: \"%(code)s\"" +msgstr "" + +#: standings/diversity.py +msgid "All" +msgstr "Tot" + +#: standings/diversity.py +msgid "Breaking" +msgstr "" + +#: standings/diversity.py +#, python-format +msgid "Not %(category)s" +msgstr "" + +#: standings/diversity.py +msgid "All Speakers" +msgstr "" + +#: standings/diversity.py +msgid "IAs" +msgstr "JIs" + +#: standings/diversity.py +msgid "Chairs" +msgstr "Principals" + +#: standings/diversity.py +msgid "Panellists" +msgstr "Panelista" + +#: standings/diversity.py +msgid "Trainees" +msgstr "Jutge aprenent" + +#: standings/diversity.py +msgid "Average Rating" +msgstr "Puntaje promedio" + +#: standings/diversity.py +msgid "Median Rating" +msgstr "" + +#: standings/diversity.py +msgid "Upper Quartile Rating" +msgstr "" + +#: standings/diversity.py +msgid "Lower Quartile Rating" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Teams" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Chairs" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Panellists" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Trainees" +msgstr "" + +#: standings/diversity.py +msgid "Average Score" +msgstr "" + +#: standings/diversity.py +msgid "Median Score" +msgstr "" + +#: standings/diversity.py +msgid "Upper Quartile Score" +msgstr "" + +#: standings/diversity.py +msgid "Lower Quartile Score" +msgstr "" + +#: standings/diversity.py +msgid "Reply Speaker Average" +msgstr "" + +#: standings/diversity.py +#, python-format +msgid "Speaker %(num)d Average" +msgstr "" + +#: standings/diversity.py +msgid "Average Finals Score" +msgstr "" + +#: standings/speakers.py +msgid "total" +msgstr "total" + +#: standings/speakers.py +msgid "Total" +msgstr "Total" + +#: standings/speakers.py +msgid "average" +msgstr "mitjana" + +#: standings/speakers.py +msgid "Avg" +msgstr "Mtj." + +#: standings/speakers.py +msgid "team points" +msgstr "punts d'equip" + +#: standings/speakers.py +msgid "Team" +msgstr "Equip" + +#: standings/speakers.py +msgid "standard deviation" +msgstr "desviació estàndard" + +#: standings/speakers.py +msgid "Stdev" +msgstr "DS" + +#: standings/speakers.py +msgid "number of speeches given" +msgstr "nombre de discursos fets" + +#: standings/speakers.py +msgid "Num" +msgstr "Núm." + +#: standings/speakers.py +msgid "replies given" +msgstr "" + +#: standings/speakers.py +msgid "trimmed mean (high-low drop)" +msgstr "" + +#: standings/speakers.py +msgid "Trim" +msgstr "" + +#: standings/teams.py +msgid "points" +msgstr "punts" + +#: standings/teams.py +msgid "Pts" +msgstr "Pts." + +#: standings/teams.py +msgid "wins" +msgstr "victòries" + +#: standings/teams.py standings/views.py +msgid "Wins" +msgstr "Victòries" + +#: standings/teams.py +msgid "total speaker score" +msgstr "punts d'orador totals" + +#: standings/teams.py +msgid "Spk" +msgstr "PtsOr." + +#: standings/teams.py +msgid "average total speaker score" +msgstr "mitjana total de punts d'orador" + +#: standings/teams.py +msgid "ATSS" +msgstr "MTPO" + +#: standings/teams.py +msgid "speaker score standard deviation" +msgstr "desviació estàndard de punts d'orador" + +#: standings/teams.py +msgid "SSD" +msgstr "DEPO" + +#: standings/teams.py +msgid "sum of margins" +msgstr "" + +#: standings/teams.py +msgid "Marg" +msgstr "" + +#: standings/teams.py +msgid "average margin" +msgstr "" + +#: standings/teams.py +msgid "AWM" +msgstr "" + +#: standings/teams.py +msgid "average individual speaker score" +msgstr "" + +#: standings/teams.py +msgid "AISS" +msgstr "" + +#: standings/teams.py +msgid "draw strength by wins" +msgstr "" + +#: standings/teams.py +msgid "DS" +msgstr "" + +#: standings/teams.py +msgid "draw strength by total speaker score" +msgstr "" + +#: standings/teams.py +msgid "DSS" +msgstr "" + +#: standings/teams.py +msgid "number of pullups before this round" +msgstr "" + +#: standings/teams.py +msgid "PU" +msgstr "" + +#: standings/teams.py +msgid "number of adjudicators who voted for this team" +msgstr "" + +#: standings/teams.py +msgid "Ballots" +msgstr "Taula de resultats" + +#: standings/teams.py +msgid "votes/ballots carried" +msgstr "" + +#: standings/teams.py +msgid "number of firsts" +msgstr "nombre de primers" + +#: standings/teams.py +msgid "1sts" +msgstr "1rs" + +#: standings/teams.py +msgid "number of seconds" +msgstr "nombre de segons" + +#: standings/teams.py +msgid "2nds" +msgstr "2ns" + +#: standings/teams.py +msgid "number of thirds" +msgstr "nombre de tercers" + +#: standings/teams.py +msgid "3rds" +msgstr "3rs" + +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py +msgid "Who-beat-whom" +msgstr "" + +#: standings/teams.py +msgid "WBW" +msgstr "" + +#: standings/teams.py +msgid "who-beat-whom" +msgstr "" + +#: standings/templates/current_standings.html +msgid "It also excludes results from silent rounds (if any) and from the current round." +msgstr "" + +#: standings/templates/current_standings.html +#, python-format +msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" +msgstr "" + +#: standings/templates/current_standings.html +#, python-format +msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" +msgstr "" + +#: standings/templates/current_standings_no_round.html +msgid "There aren't any rounds for which results are available." +msgstr "" + +#: standings/templates/reply_standings.html +msgid "Reply speakers are ranked by their average reply score." +msgstr "" + +#: standings/templates/reply_standings.html +#, python-format +msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." +msgstr "" + +#: standings/templates/reply_standings.html +msgid "All reply speakers appear in these standings, no matter how many replies they've missed." +msgstr "" + +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html +#, python-format +msgid "These settings can be changed in the Standings section of this tournament's configuration." +msgstr "" + +#: standings/templates/speaker_standings.html +#, python-format +msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." +msgstr "" + +#: standings/templates/speaker_standings.html +msgid "Speakers are ranked by their average score." +msgstr "" + +#: standings/templates/speaker_standings.html +msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." +msgstr "" + +#: standings/templates/speaker_standings.html +#, python-format +msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." +msgstr "" + +#: standings/templates/speaker_standings.html +msgid "All speakers appear in these standings, no matter how many debates they've missed." +msgstr "" + +#: standings/templates/speaker_standings.html +#, python-format +msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Diversity Overview" +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Non-cis male identifying" +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Cis-male identifying" +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Unspecified/unrecorded" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Standings" +msgstr "Classificació" + +#: standings/templates/standings_index.html +msgid "Top Speaks" +msgstr "Top d'Oradors" + +#: standings/templates/standings_index.html +#, python-format +msgid "%(speaker)s in %(round)s" +msgstr "%(speaker)s en %(round)s" + +#: standings/templates/standings_index.html +msgid "No data yet" +msgstr "Encara no hi ha dades" + +#: standings/templates/standings_index.html +msgid "Bottom Speaks" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Largest Margins" +msgstr "" + +#: standings/templates/standings_index.html +#, python-format +msgid "%(team)s vs %(opp)s in %(round)s" +msgstr "%(team)s vs. %(opp)s en %(round)s" + +#: standings/templates/standings_index.html +msgid "Closest Margins" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Top Team Scores" +msgstr "" + +#: standings/templates/standings_index.html +#, python-format +msgid "%(team)s in %(round)s" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Bottom Team Scores" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Most/Least Popular Motions" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Average Speaks" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Overview" +msgstr "Visió general" + +#: standings/templates/standings_menu.html +msgid "Teams" +msgstr "Equips" + +#: standings/templates/standings_menu.html +msgctxt "All [Teams]" +msgid "All" +msgstr "Tot" + +#: standings/templates/standings_menu.html +msgid "Speakers" +msgstr "Oradors" + +#: standings/templates/standings_menu.html +msgctxt "Substantive speeches" +msgid "Substantives" +msgstr "" + +#: standings/templates/standings_menu.html +msgctxt "All [Speakers]" +msgid "All" +msgstr "Tot" + +#: standings/templates/standings_menu.html +msgid "Speakers " +msgstr "Oradors " + +#: standings/templates/standings_menu.html +#, python-format +msgid "%(category)s" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Replies" +msgstr "Respostes" + +#: standings/templates/standings_menu.html +msgid "Motions" +msgstr "Mocions" + +#: standings/templates/standings_menu.html +msgid "By Round" +msgstr "Per ronda" + +#: standings/templates/standings_menu.html +msgid "Diversity" +msgstr "" + +#: standings/templates/team_standings.html +#, python-format +msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." +msgstr "" + +#: standings/views.py +#, python-format +msgid "

    There was an error generating the standings: %(message)s

    " +msgstr "" + +#: standings/views.py +#, python-format +msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " +msgstr "" + +#: standings/views.py +msgid "

    The tab director will need to resolve this issue.

    " +msgstr "" + +#: standings/views.py +#, python-format +msgid "as of %(round)s" +msgstr "" + +#. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix +#: standings/views.py +#, python-format +msgid "%(title)s (Top %(limit)d Only)" +msgstr "" + +#: standings/views.py +msgid "The tab can't be displayed because all rounds so far in this tournament are silent." +msgstr "" + +#: standings/views.py +msgid "Speaker Standings" +msgstr "Classificació d'oradors" + +#: standings/views.py +msgid "Speaker Tab" +msgstr "Taula d'oradors" + +#: standings/views.py +#, python-format +msgid "%(category)s Speaker Standings" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Speaker Tab" +msgstr "" + +#: standings/views.py +msgid "Reply Speaker Standings" +msgstr "" + +#: standings/views.py +msgid "Reply speeches aren't enabled in this tournament." +msgstr "" + +#: standings/views.py +msgid "Reply Speaker Tab" +msgstr "" + +#: standings/views.py +msgid "Team Standings" +msgstr "Classificació d'equips" + +#: standings/views.py +msgid "Team Tab" +msgstr "Taula d'Equips" + +#: standings/views.py +#, python-format +msgid "%(category)s Team Standings" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Team Tab" +msgstr "" + +#: standings/views.py +msgid "Current Team Standings" +msgstr "" + +#: standings/views.py +msgid "Points" +msgstr "Punts" + +#: standings/views.py +msgid "Feedback Overview" +msgstr "" + +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +msgstr "" + diff --git a/tabbycat/tournaments/locale/ca/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..cc37e4327a9 --- /dev/null +++ b/tabbycat/tournaments/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,1033 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-07-02 20:38\n" +"Last-Translator: philip_tc\n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/tournaments/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 952\n" + +#: tournaments/apps.py +msgid "Tournaments" +msgstr "Tornejos" + +#: tournaments/forms.py +msgid "Number of preliminary rounds" +msgstr "Nombre de rondes preliminars" + +#: tournaments/forms.py +msgid "Number of teams in the open break" +msgstr "Nombre d'equips al tall obert" + +#: tournaments/forms.py +msgid "Leave blank if there are no break rounds." +msgstr "Deixeu en blanc si no hi ha rondes eliminatòries." + +#: tournaments/forms.py +msgid "Did you agree with their decision?" +msgstr "Estaveu d'acord amb la seva decisió?" + +#: tournaments/forms.py +msgid "Agree?" +msgstr "D`acord?" + +#: tournaments/forms.py +msgid "Comments" +msgstr "Comentaris" + +#. Translators: This is the name given to the 'Open Break'. +#: tournaments/forms.py +msgid "Open" +msgstr "Obre" + +#: tournaments/forms.py +msgid "Format Configuration" +msgstr "Configuració del format" + +#: tournaments/forms.py +msgid "Apply a standard set of settings to match a common debate format" +msgstr "Apliqueu un conjunt estàndard de paràmetres perquè coincideixi amb un format de debat comú" + +#: tournaments/forms.py +msgid "Public Configuration" +msgstr "Configuració pública" + +#: tournaments/forms.py +msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" +msgstr "Mostra informació no sensible a la part pública d'aquest lloc, com ara els sortejos (un cop publicats) i les mocions de les rondes anteriors" + +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +msgstr "Tabulació [llista l'equip de tabulació aquí]
    Equitat [llista l'equip d'equitat aquí]
    Organització: [llista l'equip d'Organització aquí]
    Adjudicació: [llista l'equip d'adjudicació aquí]" + +#: tournaments/forms.py +msgid "Current preliminary round" +msgstr "Ronda preliminar actual" + +#: tournaments/forms.py +msgid "All preliminary rounds have been completed" +msgstr "S'han completat totes les rondes preliminars" + +#: tournaments/forms.py +#, python-format +msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" +msgstr "Actual ronda eliminatòria %(category)s (només si s'han completat totes les rondes preliminars)" + +#: tournaments/forms.py +#, python-format +msgid "All elimination rounds in %(category)s have been completed" +msgstr "S'han completat totes les rondes eliminatòries en %(category)s" + +#: tournaments/forms.py +msgid "If the current round is a preliminary round, this field must be blank." +msgstr "Si la ronda actual és una ronda preliminar, aquest camp ha d'estar en blanc." + +#: tournaments/forms.py +msgid "If all preliminary rounds have been completed, this field is required." +msgstr "Si s'han completat totes les rondes preliminars, aquest camp és obligatori." + +#: tournaments/forms.py +#, python-format +msgid "%(name)s (%(abbreviation)s)" +msgstr "%(name)s (%(abbreviation)s)" + +#: tournaments/mixins.py +#, python-format +msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." +msgstr "" + +#: tournaments/mixins.py +#, python-format +msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." +msgstr "" + +#: tournaments/mixins.py +msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." +msgstr "" + +#: tournaments/mixins.py +msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." +msgstr "" + +#: tournaments/mixins.py tournaments/templates/round_complete_check.html +#, python-format +msgid "for %(round)s" +msgstr "" + +#: tournaments/mixins.py +msgid "Return to Draw" +msgstr "Tornar a Aparellaments" + +#: tournaments/models.py +msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." +msgstr "" + +#: tournaments/models.py +msgid "name" +msgstr "nom" + +#: tournaments/models.py +msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" +msgstr "" + +#: tournaments/models.py +msgid "short name" +msgstr "nom curt" + +#: tournaments/models.py +msgid "The name used in the menu, e.g. \"Australs 2016\"" +msgstr "" + +#: tournaments/models.py +msgid "sequence number" +msgstr "número de seqüència" + +#: tournaments/models.py +msgid "A number that determines the relative order in which tournaments are displayed on the homepage." +msgstr "" + +#: tournaments/models.py +msgid "slug" +msgstr "identificador" + +#: tournaments/models.py +msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" +msgstr "" + +#: tournaments/models.py +msgid "active" +msgstr "actiu" + +#: tournaments/models.py +msgid "tournament" +msgstr "torneig" + +#: tournaments/models.py +msgid "tournaments" +msgstr "tornejos" + +#: tournaments/models.py +msgid "Random" +msgstr "A l'atzar" + +#: tournaments/models.py +msgid "Manual" +msgstr "Manual" + +#: tournaments/models.py +msgid "Round-robin" +msgstr "Round-robin" + +#: tournaments/models.py +msgid "Power-paired" +msgstr "" + +#: tournaments/models.py +msgid "Elimination" +msgstr "Eliminació" + +#: tournaments/models.py +msgid "Preliminary" +msgstr "Preliminar" + +#: tournaments/models.py +msgid "None" +msgstr "Cap" + +#: tournaments/models.py +msgid "Draft" +msgstr "Esborrany" + +#: tournaments/models.py +msgid "Confirmed" +msgstr "Confirmat" + +#: tournaments/models.py +msgid "Released" +msgstr "Publicat" + +#: tournaments/models.py +msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" +msgstr "" + +#: tournaments/models.py +msgid "completed" +msgstr "completat" + +#: tournaments/models.py +msgid "True if the round is over, which normally means all results have been entered and confirmed" +msgstr "" + +#: tournaments/models.py +msgid "e.g. \"Round 1\"" +msgstr "" + +#: tournaments/models.py +msgid "abbreviation" +msgstr "" + +#: tournaments/models.py +msgid "e.g. \"R1\"" +msgstr "" + +#: tournaments/models.py +msgid "stage" +msgstr "" + +#: tournaments/models.py +msgid "Preliminary = inrounds, elimination = outrounds" +msgstr "" + +#: tournaments/models.py +msgid "draw type" +msgstr "" + +#: tournaments/models.py +msgid "Which draw method to use" +msgstr "" + +#: tournaments/models.py +msgid "break category" +msgstr "" + +#: tournaments/models.py +msgid "If elimination round, which break category" +msgstr "" + +#: tournaments/models.py +msgid "draw status" +msgstr "" + +#: tournaments/models.py +msgid "The status of this round's draw" +msgstr "" + +#: tournaments/models.py +msgid "feedback weight" +msgstr "" + +#: tournaments/models.py +#, no-python-format +msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." +msgstr "" + +#. Translators: A silent round is a round for which results are not disclosed once the round is over. +#: tournaments/models.py +msgid "silent" +msgstr "" + +#: tournaments/models.py +msgid "If marked silent, information about this round (such as its results) will not be shown publicly." +msgstr "" + +#: tournaments/models.py +msgid "motions released" +msgstr "" + +#: tournaments/models.py +msgid "Whether motions will appear on the public website, assuming that feature is turned on" +msgstr "" + +#: tournaments/models.py +msgid "starts at" +msgstr "" + +#: tournaments/models.py +msgid "weight" +msgstr "" + +#: tournaments/models.py +msgid "A factor for the points received in the round. For example, if 2, all points are doubled." +msgstr "" + +#: tournaments/models.py +msgid "round" +msgstr "" + +#: tournaments/models.py +msgid "rounds" +msgstr "" + +#: tournaments/models.py +msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." +msgstr "" + +#: tournaments/models.py +msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." +msgstr "" + +#: tournaments/models.py +msgid "Elimination rounds must have a break category." +msgstr "" + +#: tournaments/templates/assistant_tournament_index.html +msgid "Dashboard" +msgstr "" + +#: tournaments/templates/assistant_tournament_index.html +msgid "Overview" +msgstr "" + +#: tournaments/templates/assistant_tournament_index.html +#, python-format +msgid "current round: %(round)s, status: %(status)s" +msgstr "ronda actual: %(round)s, estat: %(status)s" + +#: tournaments/templates/blank_site_start.html +msgid "Welcome to Tabbycat!" +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "Create Account" +msgstr "" + +#: tournaments/templates/configure_tournament.html +#, python-format +msgid "Configure Tournament %(tournament)s" +msgstr "" + +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html +msgid "Tabbycat" +msgstr "" + +#: tournaments/templates/configure_tournament.html +msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." +msgstr "" + +#: tournaments/templates/configure_tournament.html +msgid "Configure Tournament" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Create New Tournament" +msgstr "" + +#: tournaments/templates/create_tournament.html +#, python-format +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Just trying out Tabbycat?" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." +msgstr "" + +#: tournaments/templates/create_tournament.html +#, python-format +msgid "Load %(demo)s" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Create Tournament" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Cancel and go back to the site home page" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Debate Team Missing" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Click the Fix this debate button for that debate." +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Ensure that no side appears more than once in the debate." +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Save the changes." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +#, python-format +msgid "You can also see all the debates in the Debates section of the Edit Database Area." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Debate ID" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +#, python-format +msgid "Teams on %(side)s" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Link to fix this debate" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "No teams" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Multiple teams" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgctxt "button label" +msgid "Fix this debate" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "It looks like all debates are in good shape!" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Welcome to %(tournament)s" +msgstr "Benvingut a %(tournament)s" + +#: tournaments/templates/public_tournament_index.html +msgid "There is currently no public information available for this tournament." +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Team Tab" +msgstr "Taula d'Equips" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(category)s Team Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Speaker Tab" +msgstr "Taula d'oradors" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(category)s Speaker Tab" +msgstr "Taula de Oradors de %(category)s" + +#: tournaments/templates/public_tournament_index.html +msgid "Replies Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Adjudicator Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Motions Tab" +msgstr "Taula de mocions" + +#: tournaments/templates/public_tournament_index.html +msgid "Sides" +msgstr "Costats" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Draw for %(round)s" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Draws for Current Rounds" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(round)s's draw has yet to be released" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "The draw for the next round has yet to be released" +msgstr "Els aparellaments per a la següent ronda encara no han estat revelats" + +#: tournaments/templates/public_tournament_index.html +msgid "Check-Ins" +msgstr "Registre" + +#: tournaments/templates/public_tournament_index.html +msgid "Results" +msgstr "Resultats" + +#: tournaments/templates/public_tournament_index.html +msgid "Motions" +msgstr "Mocions" + +#: tournaments/templates/public_tournament_index.html +msgid "Team Standings" +msgstr "Classificació d'equips" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(category)s Break" +msgstr "%(category)s Tall" + +#: tournaments/templates/public_tournament_index.html +msgid "Breaking Adjudicators" +msgstr "Jutges que passen el tall" + +#: tournaments/templates/public_tournament_index.html +msgid "Diversity" +msgstr "Diversitat" + +#: tournaments/templates/public_tournament_index.html +msgid "Participants" +msgstr "Participants" + +#: tournaments/templates/public_tournament_index.html +msgid "Institutions" +msgstr "Institucions" + +#: tournaments/templates/public_tournament_index.html +msgid "Feedback Progress" +msgstr "Progrés en les retroalimentacions" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Enter Ballot for %(round)s" +msgstr "Enviar Taula de resultats per %(round)s" + +#: tournaments/templates/public_tournament_index.html +msgid "Enter Feedback" +msgstr "Introduir retroalimentació" + +#: tournaments/templates/public_tournament_index.html +msgid "Tournament Staff" +msgstr "Personal del torneig" + +#: tournaments/templates/round_complete_check.html +msgid "Confirm Round Completion" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Enter Results" +msgstr "Afegir resultats" + +#: tournaments/templates/round_complete_check.html +msgid "Emails have already been sent." +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Email Team Wins/Losses" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Email Team Points" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "Mark %(round)s as Completed" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "Mark %(round)s as Completed Anyway" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "Go to %(round)s" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "%(round)s has already been marked as completed!" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." +msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." +msgstr[0] "" +msgstr[1] "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "All ballots from %(round)s are confirmed. You should be good to go!" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." +msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." +msgstr[0] "" +msgstr[1] "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " +msgstr "" + +#: tournaments/templates/set_current_round.html +msgid "Set Current Round" +msgstr "" + +#: tournaments/templates/set_current_round.html +msgid "Back to Configuration" +msgstr "Tornar a la configuració" + +#: tournaments/templates/set_current_round.html +#, python-format +msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." +msgstr "" + +#: tournaments/templates/set_current_round.html +#, python-format +msgid "On this page, you can set the current round of the tournament %(tournament)s." +msgstr "" + +#: tournaments/templates/set_current_round.html +#, python-format +msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgctxt "page title" +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgctxt "button" +msgid "Set weights" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Welcome!" +msgstr "Benvinguda! Benvingut!" + +#: tournaments/templates/site_index.html +msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "There are currently no active tournaments set up on this site." +msgstr "" + +#: tournaments/templates/site_index.html +msgid "There are currently no tournaments set up on this site." +msgstr "" + +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "New Tournament" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Edit Database Area" +msgstr "Edita la base de dades" + +#: tournaments/templates/site_index.html +msgid "Send a Test Email" +msgstr "Envia un correu electrònic de prova" + +#: tournaments/templates/site_index.html +msgid "Import DebateXML" +msgstr "" + +#: tournaments/templates/site_index.html +#, python-format +msgid "Get API Token / Change Password (%(user)s)" +msgstr "" + +#: tournaments/templates/site_index.html +#, python-format +msgid "Log Out (%(user)s)" +msgstr "Tancar sessió (%(user)s)" + +#: tournaments/templates/site_index.html +msgid "Log In as Admin" +msgstr "Inicieu sessió com a Administrador" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "Welcome to your new tournament!" +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." +msgstr "" + +#. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. +#: tournaments/templates/tournament_index.html +#, python-format +msgid "For more information, please consult our documentation on importing initial data." +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "Use the simple importer to add your initial data." +msgstr "Fes servir l'importador simple per afegir les teves dades inicials." + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "Mark participants as available to prepare a draw for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "Go to the draw area to allocate adjudicators for %(round)s" +msgstr "Aneu a l'àrea de generació de ronda per assignar als Jutges per a la ronda %(round)s" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "Go to the results area to enter ballots for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." +msgstr "" + +#: tournaments/templates/tournament_index_links.html +#, python-format +msgid "Administrator area for %(tn)s" +msgstr "Àrea d'administrador per a %(tn)s" + +#: tournaments/templates/tournament_index_links.html +#, python-format +msgid "Assistant area for %(tn)s" +msgstr "Àrea d'assistent per a %(tn)s" + +#: tournaments/templates/tournament_index_links.html +#, python-format +msgid "Public area for %(tn)s" +msgstr "Àrea pública per a %(tn)s" + +#: tournaments/utils.py +msgid "affirmative" +msgstr "afirmatiu" + +#: tournaments/utils.py +msgid "negative" +msgstr "negatiu" + +#: tournaments/utils.py +msgid "affirmative team" +msgstr "equip afirmatiu" + +#: tournaments/utils.py +msgid "negative team" +msgstr "equip negatiu" + +#: tournaments/utils.py +msgid "Aff" +msgstr "Af" + +#: tournaments/utils.py +msgid "Neg" +msgstr "Neg" + +#: tournaments/utils.py +msgid "government" +msgstr "govern" + +#: tournaments/utils.py +msgid "opposition" +msgstr "oposició" + +#: tournaments/utils.py +msgid "government team" +msgstr "equip de govern" + +#: tournaments/utils.py +msgid "opposition team" +msgstr "equip d'oposició" + +#: tournaments/utils.py +msgid "Gov" +msgstr "Gov" + +#: tournaments/utils.py +msgid "Opp" +msgstr "Opo" + +#: tournaments/utils.py +msgid "proposition" +msgstr "proposició" + +#: tournaments/utils.py +msgid "proposition team" +msgstr "equip de proposició" + +#: tournaments/utils.py +msgid "Prop" +msgstr "Prop" + +#: tournaments/utils.py +msgid "pro" +msgstr "pro" + +#: tournaments/utils.py +msgid "con" +msgstr "con" + +#: tournaments/utils.py +msgid "pro team" +msgstr "" + +#: tournaments/utils.py +msgid "con team" +msgstr "" + +#: tournaments/utils.py +msgid "Pro" +msgstr "" + +#: tournaments/utils.py +msgid "Con" +msgstr "" + +#: tournaments/utils.py +msgid "appellant" +msgstr "" + +#: tournaments/utils.py +msgid "respondent" +msgstr "" + +#: tournaments/utils.py +msgid "appellant team" +msgstr "" + +#: tournaments/utils.py +msgid "respondent team" +msgstr "" + +#: tournaments/utils.py +msgid "App" +msgstr "" + +#: tournaments/utils.py +msgid "Res" +msgstr "" + +#: tournaments/utils.py +msgid "opening government" +msgstr "Alta de Govern" + +#: tournaments/utils.py +msgid "opening opposition" +msgstr "Alta d'Oposició" + +#: tournaments/utils.py +msgid "closing government" +msgstr "Baixa de Govern" + +#: tournaments/utils.py +msgid "closing opposition" +msgstr "Baixa d'Oposició" + +#: tournaments/utils.py +msgid "opening government team" +msgstr "equip d'alta de govern" + +#: tournaments/utils.py +msgid "opening opposition team" +msgstr "equip d'alta d'oposició" + +#: tournaments/utils.py +msgid "closing government team" +msgstr "equip de baixa de govern" + +#: tournaments/utils.py +msgid "closing opposition team" +msgstr "equip de baixa d'oposició" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "OG" +msgstr "AG" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "OO" +msgstr "AO" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "CG" +msgstr "BG" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "CO" +msgstr "BO" + +#: tournaments/utils.py +#, python-format +msgid "Round %(number)d" +msgstr "Ronda %(number)d" + +#. Translators: This stands for "Round %(number)d". +#: tournaments/utils.py +#, python-format +msgid "R%(number)d" +msgstr "R%(number)d" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" +msgstr "" + +#: tournaments/views.py +msgid "8-team generic dataset" +msgstr "" + +#: tournaments/views.py +msgid "24-team Australs dataset" +msgstr "" + +#: tournaments/views.py +msgid "88-team BP dataset" +msgstr "" + +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." +msgstr "" + diff --git a/tabbycat/utils/locale/ca/LC_MESSAGES/django.po b/tabbycat/utils/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..babe9c6b4e1 --- /dev/null +++ b/tabbycat/utils/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,328 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-07-02 00:46\n" +"Last-Translator: philip_tc\n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/utils/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 954\n" + +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "Ronda" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "Equip" + +#: utils/admin.py +msgid "Speaker" +msgstr "Orador" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "Torneig" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "Bancada" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "Moció" + +#: utils/admin.py +msgid "Confirmed" +msgstr "Confirmat" + +#: utils/admin.py +msgid "Adjudicator" +msgstr "Jutge" + +#: utils/tables.py +msgid "No Data Available" +msgstr "Sense dades disponibles" + +#: utils/tables.py +msgid "Ⓒ" +msgstr "℗" + +#: utils/tables.py +msgid "Ⓣ" +msgstr "Ⓐ" + +#: utils/tables.py +msgid "chair" +msgstr "principal" + +#: utils/tables.py +msgid "panellist" +msgstr "panelista" + +#: utils/tables.py +msgid "trainee" +msgstr "jutge aprenent" + +#: utils/tables.py +msgid "—" +msgstr "" + +#: utils/tables.py +msgid "Redacted" +msgstr "Redactat" + +#: utils/tables.py +#, python-format +msgid "View %(a)s's %(d)s Record" +msgstr "Veure el recorregut de %(a)s %(d)s" + +#: utils/tables.py +#, python-format +msgid "View %(team)s's Record" +msgstr "Veure el recorregut de %(team)s" + +#: utils/tables.py +#, python-format +msgid "Code name: %(name)s" +msgstr "Nom en clau: %(name)s" + +#: utils/tables.py +#, python-format +msgid "Real name: %(name)s" +msgstr "Nom real: %(name)s" + +#: utils/tables.py +#, python-format +msgid "%(team)s won" +msgstr "%(team)s va guanyar" + +#: utils/tables.py +#, python-format +msgid "%(team)s lost" +msgstr "%(team)s va perdre" + +#: utils/tables.py +#, python-format +msgid "%(team)s—no result" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s placed %(place)s" +msgstr "%(team)s va resultar %(place)s" + +#: utils/tables.py +#, python-format +msgid "%(team)s is advancing" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s was eliminated" +msgstr "%(team)s va ser eliminat" + +#: utils/tables.py +msgid "View/edit debate ballot" +msgstr "Veure/Edita la Taula de resultats del Debat" + +#: utils/tables.py +msgid "View debate ballot" +msgstr "Veure la Taula de resultats del Debat" + +#: utils/tables.py +#, python-format +msgid " vs %(opposition)s" +msgstr " vs. %(opposition)s" + +#: utils/tables.py +#, python-format +msgid "Won against %(team)s" +msgstr "Va guanyar contra %(team)s" + +#: utils/tables.py +#, python-format +msgid "Lost to %(team)s" +msgstr "Va perdre contra %(team)s" + +#: utils/tables.py +#, python-format +msgid "No result for debate against %(team)s" +msgstr "Cap resultat per al Debat contra %(team)s" + +#: utils/tables.py +#, python-format +msgid "Total speaker score: %s" +msgstr "Puntuació total dels oradors: %s" + +#: utils/tables.py +msgid "Teams in debate:" +msgstr "Equips al Debat:" + +#: utils/tables.py +#, python-format +msgid "%(team)s (%(side)s)" +msgstr "%(team)s (%(side)s)" + +#: utils/tables.py +msgid "??" +msgstr "??" + +#: utils/tables.py +msgid "advancing" +msgstr "avançant" + +#: utils/tables.py +msgid "Advancing" +msgstr "Avançant" + +#: utils/tables.py +msgid "eliminated" +msgstr "eliminat" + +#: utils/tables.py +msgid "Eliminated" +msgstr "Eliminat" + +#: utils/tables.py +msgid "No result for debate" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Placed %(place)s" +msgstr "Posicionat %(place)s" + +#: utils/tables.py +msgid "Name" +msgstr "Nom" + +#: utils/tables.py +msgid "Institution" +msgstr "Institució" + +#: utils/tables.py +msgid "Member of the Adjudication Core" +msgstr "Membre de l'Equip d'Adjudicació" + +#: utils/tables.py +msgid "Independent Adjudicator" +msgstr "Jutge Independent" + +#: utils/tables.py +msgid "Always Trainee" +msgstr "Sempre Jutge Aprenent" + +#: utils/tables.py +msgid "in minority" +msgstr "en minoria" + +#: utils/tables.py +msgid "Debate Adjudicators" +msgstr "Jutges del Debat" + +#: utils/tables.py +msgid "Categories" +msgstr "Categories" + +#: utils/tables.py +msgid "Category" +msgstr "Categoria" + +#: utils/tables.py +#, python-format +msgid "This room %(predicate)s." +msgstr "Aquesta sala %(predicate)s." + +#: utils/tables.py +#, python-format +msgid "This room %(predicates)s, and %(last_predicate)s." +msgstr "Aquesta sala %(predicates)s, i %(last_predicate)s." + +#: utils/tables.py +msgid "Room" +msgstr "Sala" + +#: utils/tables.py +#, python-format +msgid "Teams have met once" +msgid_plural "Teams have met %(count)d times" +msgstr[0] "Els equips s'han enfrontat un cop" +msgstr[1] "Els equips s'han enfrontat %(count)d cops" + +#: utils/tables.py +msgid "Teams are from the same institution" +msgstr "Els equips són de la mateixa institució" + +#: utils/tables.py +msgid "Conflicts/Flags" +msgstr "" + +#: utils/tables.py +msgid "The confirmed ballot" +msgstr "La taula de resultats confirmada" + +#: utils/tables.py +msgid "No ballot" +msgstr "No Taula de resultats" + +#: utils/tables.py +msgid "No scores" +msgstr "" + +#: utils/tables.py +msgid "View Ballot" +msgstr "Veure Taula de resultats" + +#: utils/tables.py +msgid "The ballot you submitted" +msgstr "La Taula de Resultats associada" + +#: utils/tables.py +msgid "View/Edit Ballot" +msgstr "Veure/Edita Taula de Resultats" + +#: utils/tables.py +msgid "Result" +msgstr "Resultat" + +#. Translators: "TBC" stands for "to be confirmed". +#: utils/tables.py +msgid "TBC" +msgstr "SC (ser confirmat)" + +#: utils/tables.py +msgid "Team iron-personed this round and the last." +msgstr "" + +#: utils/tables.py +msgid "Team iron-personed this round." +msgstr "" + +#: utils/tables.py +msgid "Team iron-personed last round." +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Team %(num)d" +msgstr "Equip %(num)d" + +#: utils/tables.py +msgid "Postpone" +msgstr "" + +#: utils/views.py +msgid "Whoops! You're not meant to type that URL into your browser." +msgstr "Vaja! No heu d'escriure aquest URL al vostre navegador." + diff --git a/tabbycat/venues/locale/ca/LC_MESSAGES/django.po b/tabbycat/venues/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 00000000000..36f2c8cb837 --- /dev/null +++ b/tabbycat/venues/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,222 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-07-01 22:45\n" +"Last-Translator: philip_tc\n" +"Language-Team: Catalan\n" +"Language: ca_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: ca\n" +"X-Crowdin-File: /develop/tabbycat/venues/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 956\n" + +#: venues/apps.py +msgid "Rooms" +msgstr "" + +#: venues/consumers.py +msgid "Draw is already released, unrelease draw to assign rooms." +msgstr "" + +#: venues/consumers.py +msgid "Draw is not confirmed, confirm draw to assign rooms." +msgstr "" + +#: venues/consumers.py +msgid "Successfully auto-allocated rooms to debates." +msgstr "" + +#: venues/models.py +msgid "name" +msgstr "nom" + +#: venues/models.py +msgid "priority" +msgstr "" + +#: venues/models.py +msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" +msgstr "" + +#: venues/models.py +msgid "tournament" +msgstr "" + +#: venues/models.py +msgid "URL" +msgstr "URL" + +#: venues/models.py +msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" +msgstr "" + +#: venues/models.py +msgid "room" +msgstr "" + +#: venues/models.py +msgid "rooms" +msgstr "" + +#: venues/models.py +msgid "Don't display in room name" +msgstr "" + +#: venues/models.py +msgid "Display as prefix" +msgstr "" + +#: venues/models.py +msgid "Display as suffix" +msgstr "" + +#: venues/models.py +msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." +msgstr "" + +#: venues/models.py +msgid "description" +msgstr "" + +#: venues/models.py +msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." +msgstr "" + +#: venues/models.py +msgid "display in room name" +msgstr "" + +#: venues/models.py +msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" +msgstr "" + +#: venues/models.py +msgid "display in public tooltip" +msgstr "" + +#: venues/models.py +msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." +msgstr "" + +#: venues/models.py +msgid "room category" +msgstr "" + +#: venues/models.py +msgid "room categories" +msgstr "" + +#: venues/models.py +msgid "category" +msgstr "" + +#: venues/models.py +msgid "subject content type" +msgstr "" + +#: venues/models.py +msgid "subject ID" +msgstr "" + +#: venues/models.py +msgid "room constraint" +msgstr "" + +#: venues/models.py +msgid "room constraints" +msgstr "" + +#: venues/templates/venue_categories_edit.html +msgid "Room Categories" +msgstr "" + +#: venues/templates/venue_categories_edit.html +msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." +msgstr "" + +#: venues/templates/venue_categories_edit.html +#, python-format +msgid "If you want to delete room categories, use the Edit Database area." +msgstr "" + +#: venues/templates/venue_categories_edit.html +msgid "Save Room Categories" +msgstr "" + +#: venues/templates/venue_constraints_edit.html +msgid "Room Constraints" +msgstr "" + +#: venues/templates/venue_constraints_edit.html +msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." +msgstr "" + +#: venues/templates/venue_constraints_edit.html +msgid "Save Room Constraints" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room constraint of %(name)s met (%(category)s)" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room does not meet any constraint of %(name)s" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" +msgstr "" + +#: venues/views.py +msgid "Edit Rooms" +msgstr "" + +#: venues/views.py +#, python-format +msgid "Saved room category: %(list)s" +msgid_plural "Saved venue categories: %(list)s" +msgstr[0] "" +msgstr[1] "" + +#: venues/views.py +msgid "No changes were made to the room categories." +msgstr "" + +#: venues/views.py +#, python-format +msgid "%s (Adjudicator)" +msgstr "" + +#: venues/views.py +#, python-format +msgid "%s (Team)" +msgstr "" + +#: venues/views.py +#, python-format +msgid "%s (Institution)" +msgstr "" + +#: venues/views.py +#, python-format +msgid "Saved %(count)d room constraint." +msgid_plural "Saved %(count)d room constraints." +msgstr[0] "" +msgstr[1] "" + From 11a25e2065922bea256cf2d83391672bb48612cd Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Sun, 5 Feb 2023 11:56:30 +1100 Subject: [PATCH 206/255] New translations django.po (Chinese Simplified) --- .../locale/zh_Hans/LC_MESSAGES/django.po | 156 ++-- .../locale/zh_Hans/LC_MESSAGES/django.po | 199 +++-- .../locale/zh_Hans/LC_MESSAGES/django.po | 450 +++++----- .../locale/zh_Hans/LC_MESSAGES/django.po | 164 ++-- .../locale/zh_Hans/LC_MESSAGES/django.po | 249 +++--- .../draw/locale/zh_Hans/LC_MESSAGES/django.po | 594 ++++++------- .../locale/zh_Hans/LC_MESSAGES/django.po | 223 +++-- tabbycat/locale/zh_Hans/LC_MESSAGES/django.po | 476 +++++----- .../locale/zh_Hans/LC_MESSAGES/django.po | 190 ++-- .../locale/zh_Hans/LC_MESSAGES/django.po | 196 +++-- .../locale/zh_Hans/LC_MESSAGES/django.po | 813 +++++++++--------- .../locale/zh_Hans/LC_MESSAGES/django.po | 493 ++++++----- .../locale/zh_Hans/LC_MESSAGES/django.po | 59 +- .../locale/zh_Hans/LC_MESSAGES/django.po | 85 +- .../locale/zh_Hans/LC_MESSAGES/django.po | 537 ++++++------ .../locale/zh_Hans/LC_MESSAGES/django.po | 311 ++++--- .../locale/zh_Hans/LC_MESSAGES/django.po | 508 ++++++----- .../locale/zh_Hans/LC_MESSAGES/django.po | 189 ++-- .../locale/zh_Hans/LC_MESSAGES/django.po | 100 ++- 19 files changed, 2957 insertions(+), 3035 deletions(-) diff --git a/tabbycat/actionlog/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/zh_Hans/LC_MESSAGES/django.po index 6ae8aa58498..6f27dcb1938 100644 --- a/tabbycat/actionlog/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:07\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -17,307 +17,307 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" msgstr "" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" msgstr "" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" msgstr "" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" msgstr "" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" msgstr "" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" msgstr "" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" msgstr "" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" msgstr "" -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" msgstr "" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" msgstr "" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" msgstr "" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" msgstr "" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" msgstr "" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" msgstr "" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" msgstr "" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" msgstr "" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" msgstr "" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" msgstr "" -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" msgstr "" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" msgstr "" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" msgstr "" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" msgstr "" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" msgstr "" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" msgstr "" -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "" -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" msgstr "" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" msgstr "" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" msgstr "" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" msgstr "" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" msgstr "" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" msgstr "" -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" msgstr "" -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" msgstr "" -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" msgstr "" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" msgstr "" -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" msgstr "" -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" msgstr "" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" msgstr "" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" msgstr "" -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" msgstr "" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" msgstr "" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" msgstr "" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" msgstr "" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" msgstr "" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" msgstr "" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" msgstr "" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" msgstr "" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" msgstr "" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" msgstr "" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" msgstr "" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" msgstr "" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" msgstr "" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" msgstr "" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" msgstr "" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" msgstr "" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" msgstr "" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" msgstr "" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" msgstr "" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" msgstr "" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" msgstr "" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" msgstr "" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" msgstr "" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" msgstr "" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" msgstr "" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" msgstr "" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" msgstr "时间戳" -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "用户" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "IP地址" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "比赛" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "赛" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" msgstr "" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" msgstr "" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" msgstr "" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" msgstr "" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." msgstr "" -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" msgstr "匿名" diff --git a/tabbycat/adjallocation/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/zh_Hans/LC_MESSAGES/django.po index a918a103fb7..4cb2a0e71cd 100644 --- a/tabbycat/adjallocation/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2021-05-19 06:45\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -17,424 +17,423 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." msgstr "当前没有可用裁判。请确保在本回合自动分配前已有裁判可用。" -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." msgstr[0] "" -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." msgstr[0] "" -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." msgstr "" -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" msgstr "" -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." msgstr "" -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." msgstr "" -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." msgstr "" -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" msgstr "" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." msgstr "" -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." msgstr "" -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." msgstr "" -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." msgstr "" -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" msgstr[0] "" -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." msgstr "" -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." msgstr "" -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" msgstr[0] "" -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." msgstr "" -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." msgstr "" -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." msgstr "" -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." msgstr "" -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." msgstr "" -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." msgstr "" -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." msgstr "" -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." msgstr "" -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" msgstr "主席" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" msgstr "成员" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" msgstr "实习生" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "辩论" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "裁判" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" msgstr "职务" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" msgstr "" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" msgstr "" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" msgstr "" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "队伍" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" msgstr "" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" msgstr "" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "裁判1" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "裁判2" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" msgstr "" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" msgstr "" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" msgstr "" -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" msgstr "" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" msgstr "" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" msgstr "" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" msgstr "" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "赛" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" msgstr "" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" msgstr "" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" msgstr "" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" msgstr "" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" msgstr "" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" msgstr "" -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" msgstr "" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" msgstr "" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" msgstr "" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" msgstr "" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" msgstr "" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" msgstr "裁判组" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" msgstr "" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" msgstr "" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." msgstr "" -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" msgstr "" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." msgstr "" -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." msgstr "" -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" msgstr "" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" msgstr "" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" msgstr "" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" msgstr "" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" msgstr "" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "男性" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" msgstr "女性" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" msgstr "未知" -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" msgstr "" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" msgstr "" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" msgstr "" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" msgstr "" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" msgstr "" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." msgstr[0] "" -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." msgstr[0] "" -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." msgstr "" -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" msgstr "" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" msgstr "" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." msgstr[0] "" -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." msgstr[0] "" -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." msgstr "" -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" msgstr "" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" msgstr "" -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." msgstr[0] "" -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." msgstr[0] "" -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." msgstr "" -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." msgstr[0] "" -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." msgstr[0] "" -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." msgstr "" diff --git a/tabbycat/adjfeedback/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/zh_Hans/LC_MESSAGES/django.po index aa5f1775156..21ab8e316c8 100644 --- a/tabbycat/adjfeedback/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:50\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -17,936 +17,932 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:44 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" msgstr "" -#: adjfeedback/admin.py:73 adjfeedback/admin.py:139 +#: adjfeedback/admin.py msgid "target" msgstr "" -#: adjfeedback/admin.py:74 adjfeedback/admin.py:140 adjfeedback/models.py:236 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" msgstr "" -#: adjfeedback/admin.py:75 adjfeedback/admin.py:141 adjfeedback/models.py:238 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" msgstr "" -#: adjfeedback/admin.py:91 -#, python-format -msgid "%(timestamp)s (version %(version)s)" -msgstr "" - -#: adjfeedback/admin.py:96 +#: adjfeedback/admin.py msgid "Target" msgstr "" -#: adjfeedback/admin.py:97 adjfeedback/admin.py:162 +#: adjfeedback/admin.py msgid "Source" msgstr "" -#: adjfeedback/admin.py:98 +#: adjfeedback/admin.py msgid "Feedback timestamp and version" msgstr "" -#: adjfeedback/admin.py:180 +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgstr[0] "" -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." msgstr[0] "" -#: adjfeedback/admin.py:205 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." msgstr[0] "" -#: adjfeedback/admin.py:215 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." msgstr[0] "" -#: adjfeedback/admin.py:225 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." msgstr[0] "" -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" msgstr "" -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "chair" msgstr "主席" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "solo" msgstr "單主" -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "panellist" msgstr "成员" -#: adjfeedback/forms.py:29 +#: adjfeedback/forms.py msgid "trainee" msgstr "实习生" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:57 +#: adjfeedback/forms.py msgid "Yes" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:59 +#: adjfeedback/forms.py msgid "No" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:74 adjfeedback/forms.py:83 +#: adjfeedback/forms.py msgid "This field is required." msgstr "" -#: adjfeedback/forms.py:164 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" msgstr "" -#: adjfeedback/forms.py:176 +#: adjfeedback/forms.py msgid "Ignored" msgstr "不理了" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:228 adjfeedback/forms.py:291 +#: adjfeedback/forms.py msgid "Submitted - " msgstr "" #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:229 adjfeedback/forms.py:296 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" msgstr "" -#: adjfeedback/forms.py:252 adjfeedback/forms.py:326 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "-- 裁判 --" -#: adjfeedback/forms.py:269 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" msgstr "" -#: adjfeedback/forms.py:293 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "" -#: adjfeedback/forms.py:299 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" msgstr "" -#: adjfeedback/forms.py:301 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" msgstr "" -#: adjfeedback/forms.py:392 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" msgstr "" -#: adjfeedback/forms.py:397 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" msgstr "" -#: adjfeedback/forms.py:410 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." msgstr "" -#: adjfeedback/forms.py:416 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" msgstr "" -#: adjfeedback/forms.py:424 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" msgstr "" -#: adjfeedback/forms.py:439 +#: adjfeedback/forms.py msgid "There were no scores to import." msgstr "" -#: adjfeedback/models.py:13 adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator" msgstr "裁判" -#: adjfeedback/models.py:16 +#: adjfeedback/models.py msgid "round" msgstr "赛" -#: adjfeedback/models.py:17 adjfeedback/models.py:232 +#: adjfeedback/models.py msgid "score" msgstr "" -#: adjfeedback/models.py:18 +#: adjfeedback/models.py msgid "timestamp" msgstr "时间戳" -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score history" msgstr "" -#: adjfeedback/models.py:22 +#: adjfeedback/models.py msgid "adjudicator base score histories" msgstr "" -#: adjfeedback/models.py:30 +#: adjfeedback/models.py msgid "question" msgstr "问题" -#: adjfeedback/models.py:32 +#: adjfeedback/models.py msgid "feedback" msgstr "" -#: adjfeedback/models.py:45 adjfeedback/models.py:55 adjfeedback/models.py:65 -#: adjfeedback/models.py:74 +#: adjfeedback/models.py msgid "answer" msgstr "回答" -#: adjfeedback/models.py:48 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" msgstr "" -#: adjfeedback/models.py:49 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" msgstr "" -#: adjfeedback/models.py:58 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" msgstr "" -#: adjfeedback/models.py:59 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" msgstr "" -#: adjfeedback/models.py:68 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" msgstr "" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" msgstr "" -#: adjfeedback/models.py:77 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" msgstr "" -#: adjfeedback/models.py:78 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" msgstr "" -#: adjfeedback/models.py:86 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answer" msgstr "" -#: adjfeedback/models.py:87 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answers" msgstr "" -#: adjfeedback/models.py:106 +#: adjfeedback/models.py msgid "checkbox" msgstr "" -#: adjfeedback/models.py:107 +#: adjfeedback/models.py msgid "yes/no (dropdown)" msgstr "" -#: adjfeedback/models.py:108 +#: adjfeedback/models.py msgid "integer (textbox)" msgstr "" -#: adjfeedback/models.py:109 +#: adjfeedback/models.py msgid "integer scale" msgstr "" -#: adjfeedback/models.py:110 +#: adjfeedback/models.py msgid "float" msgstr "浮点" -#: adjfeedback/models.py:111 adjfeedback/models.py:145 +#: adjfeedback/models.py msgid "text" msgstr "" -#: adjfeedback/models.py:112 +#: adjfeedback/models.py msgid "long text" msgstr "" -#: adjfeedback/models.py:113 +#: adjfeedback/models.py msgid "select one" msgstr "" -#: adjfeedback/models.py:114 +#: adjfeedback/models.py msgid "select multiple" msgstr "" -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "tournament" msgstr "比赛" -#: adjfeedback/models.py:143 +#: adjfeedback/models.py msgid "sequence number" msgstr "" -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" msgstr "" -#: adjfeedback/models.py:148 +#: adjfeedback/models.py msgid "name" msgstr "名称" -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" msgstr "" -#: adjfeedback/models.py:151 +#: adjfeedback/models.py msgid "reference" msgstr "" -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" msgstr "" -#: adjfeedback/models.py:155 +#: adjfeedback/models.py msgid "from adjudicator" msgstr "" -#: adjfeedback/models.py:156 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" msgstr "" -#: adjfeedback/models.py:158 +#: adjfeedback/models.py msgid "from team" msgstr "" -#: adjfeedback/models.py:159 +#: adjfeedback/models.py msgid "Teams should be asked this question" msgstr "" -#: adjfeedback/models.py:162 +#: adjfeedback/models.py msgid "answer type" msgstr "" -#: adjfeedback/models.py:164 +#: adjfeedback/models.py msgid "required" msgstr "必须的" -#: adjfeedback/models.py:165 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" msgstr "" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "minimum value" msgstr "" -#: adjfeedback/models.py:168 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "" -#: adjfeedback/models.py:170 +#: adjfeedback/models.py msgid "maximum value" msgstr "" -#: adjfeedback/models.py:171 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "" -#: adjfeedback/models.py:176 +#: adjfeedback/models.py msgid "choices" msgstr "" -#: adjfeedback/models.py:177 +#: adjfeedback/models.py msgid "Permissible choices for select one/multiple fields (ignored for other fields)" msgstr "" -#: adjfeedback/models.py:182 +#: adjfeedback/models.py msgid "adjudicator feedback question" msgstr "" -#: adjfeedback/models.py:183 +#: adjfeedback/models.py msgid "adjudicator feedback questions" msgstr "" -#: adjfeedback/models.py:241 adjfeedback/views.py:768 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" msgstr "不理了" -#: adjfeedback/models.py:242 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" msgstr "" -#: adjfeedback/models.py:246 +#: adjfeedback/models.py msgid "adjudicator feedback" msgstr "" -#: adjfeedback/models.py:247 +#: adjfeedback/models.py msgid "adjudicator feedbacks" msgstr "" -#: adjfeedback/models.py:307 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." msgstr "" -#: adjfeedback/models.py:310 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." msgstr "" -#: adjfeedback/models.py:312 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" msgstr "" -#: adjfeedback/models.py:314 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." msgstr "" -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" msgstr "" -#: adjfeedback/tables.py:35 +#: adjfeedback/tables.py msgid "N/A" msgstr "不适用" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py msgid "Current weighted score" msgstr "" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." msgstr "" -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" msgstr "" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" msgstr "" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" msgstr "" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:84 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:93 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." msgstr "" -#: adjfeedback/tables.py:97 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" msgstr "" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Feedback Per Round" msgstr "" -#: adjfeedback/tables.py:107 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" msgstr "" -#: adjfeedback/tables.py:125 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" msgstr[0] "" -#: adjfeedback/tables.py:148 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" msgstr "" -#: adjfeedback/tables.py:172 +#: adjfeedback/tables.py msgid "View Missing Feedback" msgstr "" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" msgstr "" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" msgstr "" -#: adjfeedback/templates/enter_feedback.html:9 -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format msgid "Add Feedback from %(name)s" msgstr "" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" msgstr "" -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" msgstr "" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." msgstr "" -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." msgstr "" -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." msgstr "" -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" msgstr "" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" msgstr "" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" msgstr "" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" msgstr "" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" msgstr "" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" msgstr "" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" msgstr "" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." msgstr "" -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." msgstr "" -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "On %(adjudicator)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" +msgid "Received as %(as_type)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" msgstr "" -#: adjfeedback/templates/feedback_card.html:88 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:93 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:103 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" msgstr "" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" msgstr "不理" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" msgstr "" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" msgstr "" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." msgstr "" -#: adjfeedback/templates/feedback_overview.html:18 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:22 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:30 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" msgstr[0] "%(c_chairs)s位主席" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" msgstr[0] "%(c_panellists)s的成员" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" msgstr[0] "%(c_trainees)s个实习生" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" msgstr "" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" msgstr "" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" msgstr "" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" msgstr "您是谁?" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" msgstr "" -#: adjfeedback/views.py:118 +#: adjfeedback/views.py msgid "Feedback Overview" msgstr "" -#: adjfeedback/views.py:142 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" msgstr "" -#: adjfeedback/views.py:153 adjfeedback/views.py:177 adjfeedback/views.py:192 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" msgstr[0] "" -#: adjfeedback/views.py:156 adjfeedback/views.py:182 adjfeedback/views.py:197 +#: adjfeedback/views.py msgid "Feedbacks" msgstr "" -#: adjfeedback/views.py:163 +#: adjfeedback/views.py msgid "Find Feedback" msgstr "" -#: adjfeedback/views.py:171 adjfeedback/views.py:710 +#: adjfeedback/views.py msgid "From Teams" msgstr "" -#: adjfeedback/views.py:186 adjfeedback/views.py:704 +#: adjfeedback/views.py msgid "From Adjudicators" msgstr "" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "Latest Feedback" msgstr "" -#: adjfeedback/views.py:272 +#: adjfeedback/views.py msgid "(30 most recent)" msgstr "" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "Only Comments" msgstr "" -#: adjfeedback/views.py:283 +#: adjfeedback/views.py msgid "(250 most recent)" msgstr "" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "Important Feedback" msgstr "" -#: adjfeedback/views.py:295 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" msgstr "" -#: adjfeedback/views.py:362 +#: adjfeedback/views.py msgid "A Team" msgstr "一个队伍" -#: adjfeedback/views.py:367 +#: adjfeedback/views.py msgid "Team" msgstr "队伍" -#: adjfeedback/views.py:374 adjfeedback/views.py:391 +#: adjfeedback/views.py msgid "Institution" msgstr "" -#: adjfeedback/views.py:377 +#: adjfeedback/views.py msgid "An Adjudicator" msgstr "一个裁判" -#: adjfeedback/views.py:384 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "裁判" -#: adjfeedback/views.py:511 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." msgstr "" -#: adjfeedback/views.py:541 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." msgstr "" -#: adjfeedback/views.py:625 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" msgstr "" -#: adjfeedback/views.py:648 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." msgstr "" -#: adjfeedback/views.py:675 +#: adjfeedback/views.py msgid "Feedback Progress" msgstr "" -#: adjfeedback/views.py:696 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" msgstr[0] "" -#: adjfeedback/views.py:741 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." msgstr "" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "confirmed" msgstr "" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "un-confirmed" msgstr "" -#: adjfeedback/views.py:768 +#: adjfeedback/views.py msgid "un-ignored" msgstr "" -#: adjfeedback/views.py:804 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." diff --git a/tabbycat/availability/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/availability/locale/zh_Hans/LC_MESSAGES/django.po index f6792736508..70bb5dd62df 100644 --- a/tabbycat/availability/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:07\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -17,292 +17,284 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" msgstr "" -#: availability/models.py:15 +#: availability/models.py msgid "content type" msgstr "" -#: availability/models.py:16 +#: availability/models.py msgid "object id" msgstr "" -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "赛" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" msgstr "" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" msgstr "" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" msgstr "" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" msgstr "" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" msgstr "" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" msgstr "" -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" msgstr "" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" msgstr "" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." msgstr "" -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." msgstr "" -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." msgstr "" -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgstr[0] "" -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " msgstr "" -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" msgstr "" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." msgstr "" -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" msgstr "" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" msgstr "" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" msgstr "" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" msgstr "" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" msgstr "" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" msgstr "" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "队伍" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "裁判" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" msgstr "房间" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" msgstr "" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" msgstr "" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." msgstr "" -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." msgstr "" -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" msgstr "" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." msgstr[0] "" -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" msgstr[0] "" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." msgstr[0] "" -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" msgstr[0] "" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." msgstr[0] "" -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" msgstr "" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." msgstr[0] "" -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" msgstr[0] "" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." msgstr[0] "" -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" msgstr[0] "" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." msgstr[0] "" -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" msgstr "" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" msgstr "" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" msgstr[0] "" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" @@ -311,73 +303,73 @@ msgstr[0] "" #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" msgstr[0] "" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" msgstr[0] "" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" msgstr "" -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" msgstr "" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" msgstr "" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" msgstr "" -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" msgstr "" -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" msgstr "" -#: availability/views.py:260 +#: availability/views.py msgid "Room" msgstr "房间" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" msgstr "" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" msgstr "类别" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" msgstr "" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." msgstr "" -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." msgstr "" -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." msgstr "" -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." msgstr "" diff --git a/tabbycat/breakqual/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/zh_Hans/LC_MESSAGES/django.po index a453ce14913..e5bc1903a67 100644 --- a/tabbycat/breakqual/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:10\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -17,508 +17,505 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" msgstr "资格" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "" +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "比赛" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "名称" -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" msgstr "" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" msgstr "" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" msgstr "" -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" msgstr "" -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" msgstr "" -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" msgstr "" -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" msgstr "" -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" msgstr "" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" msgstr "" -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" msgstr "" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" msgstr "" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" msgstr "" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" msgstr "基准" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" msgstr "规定" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" msgstr "" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" msgstr "有资格的队伍" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" msgstr "类别的资格" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" msgstr "" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "队伍" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "排名" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" msgstr "" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" msgstr "" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" msgstr "" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" msgstr "" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" msgstr "取消资格了" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" msgstr "掷硬币败北了" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" msgstr "" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" msgstr "" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" msgstr "" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" msgstr "有资格的队伍" -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" msgstr "" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." msgstr "" -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." msgstr "" -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" msgstr "" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." msgstr "" -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" msgstr "资格" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " msgstr "" -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" msgstr "" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" msgstr "%(category)s的资格" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " msgstr "" -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" msgstr "有资格" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" msgstr "" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" msgstr "" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" msgstr "" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" msgstr "" -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" msgstr "" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." msgstr "" -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." msgstr "" -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." msgstr "" -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." msgstr "" -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." msgstr "" -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." msgstr "" -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" msgstr "" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" msgstr "" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" msgstr "" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" msgstr "" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." msgstr "" -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" msgstr "资格" -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "裁判" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" msgstr "总决赛" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" msgstr "总决赛" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "四强赛" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "半决赛" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "八强赛" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "八强赛" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "十六强赛" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "一十六强赛" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" msgstr "三十二强赛" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" msgstr "三十二强赛" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" msgstr "六十四强赛" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" msgstr "六十四强赛" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" msgstr "%s的决赛" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" msgstr "" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" msgstr "%s的四强赛" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" msgstr "" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" msgstr "%s的八强赛" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" msgstr "" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" msgstr "%s的十六强赛" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" msgstr "" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" msgstr "%s的三十二强赛" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" msgstr "%s的六十四强赛" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" msgstr "" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" msgstr "" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" msgstr "" -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" msgstr "" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" msgstr "" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" msgstr "" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." msgstr "" -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." msgstr "" -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" msgstr "有资格的裁判" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" msgstr "" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "%s讲员" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" diff --git a/tabbycat/draw/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/draw/locale/zh_Hans/LC_MESSAGES/django.po index 5e0d39087b2..b92f405c435 100644 --- a/tabbycat/draw/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -17,1106 +17,1078 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "" - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." msgstr[0] "" -#: draw/admin.py:93 +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." msgstr[0] "" -#: draw/apps.py:7 draw/views.py:452 draw/views.py:455 +#: draw/apps.py draw/views.py msgid "Draw" msgstr "" -#: draw/generator/__init__.py:14 +#: draw/generator/__init__.py msgid "Too many swaps" msgstr "" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" msgstr "" -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" msgstr "" -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "Bubble up (history)" msgstr "" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble down (history)" msgstr "" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble up (institution)" msgstr "" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble down (institution)" msgstr "" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" msgstr "" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Can't bubble up/down" msgstr "" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Pull-up team" msgstr "" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." msgstr "" -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." msgstr "%d个辩论在以前的赛没有二在推进的队伍。" -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." msgstr "" -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." msgstr "" -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." msgstr "" -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." msgstr "" -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." msgstr "" -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." msgstr "" -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." msgstr "" -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." msgstr "" -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." msgstr "" -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." msgstr "" -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." msgstr "" -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." msgstr "" -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." msgstr "" -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" msgstr "" -#: draw/manager.py:276 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." msgstr "" -#: draw/models.py:29 draw/models.py:35 +#: draw/models.py msgid "none" msgstr "无" -#: draw/models.py:30 +#: draw/models.py msgid "postponed" msgstr "" -#: draw/models.py:31 draw/models.py:36 +#: draw/models.py msgid "draft" msgstr "草稿" -#: draw/models.py:32 draw/models.py:37 +#: draw/models.py msgid "confirmed" msgstr "" -#: draw/models.py:43 draw/models.py:375 +#: draw/models.py msgid "round" msgstr "赛" -#: draw/models.py:45 +#: draw/models.py msgid "room" msgstr "" -#: draw/models.py:48 +#: draw/models.py msgid "bracket" msgstr "" -#: draw/models.py:50 +#: draw/models.py msgid "room rank" msgstr "" -#: draw/models.py:56 +#: draw/models.py msgid "importance" msgstr "" -#: draw/models.py:58 +#: draw/models.py msgid "result status" msgstr "" -#: draw/models.py:60 +#: draw/models.py msgid "sides confirmed" msgstr "" -#: draw/models.py:61 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." msgstr "" -#: draw/models.py:64 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "辩论" -#: draw/models.py:65 +#: draw/models.py msgid "debates" msgstr "辩论" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:84 draw/models.py:109 +#: draw/models.py msgid " (sides not confirmed)" msgstr "" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:96 draw/models.py:113 +#: draw/models.py msgid " vs " msgstr "对" -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" msgstr "" -#: draw/models.py:263 +#: draw/models.py msgid "negative" msgstr "" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" msgstr "上议院政府" -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" msgstr "上议院反对党" -#: draw/models.py:266 +#: draw/models.py msgid "closing government" msgstr "下议院政府" -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" msgstr "下议院反对党" -#: draw/models.py:274 draw/models.py:377 +#: draw/models.py msgid "team" msgstr "队伍" -#: draw/models.py:276 draw/models.py:379 +#: draw/models.py msgid "side" msgstr "方" -#: draw/models.py:281 +#: draw/models.py msgid "debate team" msgstr "" -#: draw/models.py:282 +#: draw/models.py msgid "debate teams" msgstr "" -#: draw/models.py:303 +#: draw/models.py #, python-format msgid "placed %(place)s" msgstr "" -#: draw/models.py:305 draw/models.py:312 +#: draw/models.py msgid "result unknown" msgstr "" -#: draw/models.py:308 +#: draw/models.py msgid "won" msgstr "获胜了" -#: draw/models.py:310 +#: draw/models.py msgid "lost" msgstr "败北了" -#: draw/models.py:383 +#: draw/models.py msgid "team side allocation" msgstr "" -#: draw/models.py:384 +#: draw/models.py msgid "team side allocations" msgstr "" #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" msgstr "" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" msgstr "队伍 %(num)d" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" msgstr "" -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" msgstr "" -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" msgstr "" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" msgstr "" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" msgstr "" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" msgstr "" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" msgstr "" -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" msgstr "" -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" msgstr "" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" msgstr "方" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" msgstr "" -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" msgstr "之前" -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" msgstr "" -#: draw/tables.py:292 +#: draw/tables.py msgid "After" msgstr "之后" -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" msgstr "" -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" msgstr "" -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" msgstr "" -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" msgstr "" -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" msgstr "" -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "%(team)s:%(metric)s" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" msgstr "方" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." msgstr[0] "" -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" msgstr[0] "" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." msgstr[0] "" -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." msgstr[0] "" -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" msgstr[0] "" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." msgstr[0] "" -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" msgstr[0] "" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." msgstr[0] "" -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" msgstr[0] "" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." msgstr[0] "" -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" msgstr "" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" msgstr "" -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" msgstr "" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" msgstr "" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" msgstr "" -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" msgstr "" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" msgstr "" -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" msgstr "" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" msgstr "" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" msgstr "" -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" msgstr "" -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." msgstr[0] "" -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" msgstr "" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." msgstr "" -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." -msgstr "" - -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." -msgstr "" - -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "" +msgid_plural "Enter motions" +msgstr[0] "" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" msgstr "" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." msgstr "" -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." msgstr "" -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." msgstr "" -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" msgstr "" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." msgstr "" -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." msgstr "" -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" -#: draw/templates/draw_display_admin.html:200 +#: draw/templates/draw_display_admin.html msgid "Release Motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:201 -msgid "Release motion to public" -msgstr "" +msgid_plural "Release Motions" +msgstr[0] "" -#: draw/templates/draw_display_admin.html:202 -msgid "Unrelease motion to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." msgstr "" -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." msgstr "" -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "" - -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "" +msgid_plural "Motions have been released publicly." +msgstr[0] "" -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" msgstr "" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" msgstr "" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" msgstr "" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" msgstr "" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" msgstr "" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" msgstr "" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" msgstr "" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" msgstr "" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" msgstr "" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" msgstr "" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" msgstr "快" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" msgstr "" -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" msgstr "慢" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" msgstr "" -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" msgstr "" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" msgstr "微细" -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" msgstr "小" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" msgstr "大" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" msgstr "巨大" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" msgstr "" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." msgstr "" -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." msgstr "" -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." msgstr "" -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" msgstr "" -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" msgstr "" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" msgstr "" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." msgstr[0] "" -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" msgstr "" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" msgstr "" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." msgstr[0] "" -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" msgstr "" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" msgstr "" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." msgstr "" -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." msgstr "" -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " msgstr "" -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." msgstr "" -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." msgstr "" -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." msgstr "" -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." msgstr "" -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." msgstr "" -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." msgstr "" -#: draw/views.py:68 draw/views.py:483 +#: draw/views.py msgid "No debates in this round" msgstr "" -#: draw/views.py:76 +#: draw/views.py #, python-format msgid "Draw for %(round)s" msgstr "" -#: draw/views.py:78 +#: draw/views.py msgid "Draws for Current Rounds" msgstr "" -#: draw/views.py:82 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" msgstr "" -#: draw/views.py:86 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" msgstr "" -#: draw/views.py:124 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" msgstr[0] "" -#: draw/views.py:171 +#: draw/views.py msgid "The draw for this round hasn't been released." msgstr "" -#: draw/views.py:224 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" msgstr "" -#: draw/views.py:382 +#: draw/views.py msgid "Adjudicator Assignments" msgstr "" -#: draw/views.py:404 +#: draw/views.py msgid "Position" msgstr "" -#: draw/views.py:424 +#: draw/views.py msgid "Team Pairings" msgstr "" -#: draw/views.py:447 +#: draw/views.py msgid "No Draw" msgstr "" -#: draw/views.py:449 +#: draw/views.py msgid "Draft Draw" msgstr "" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:541 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" msgstr "" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:546 +#: draw/views.py msgid "BR" msgstr "" -#: draw/views.py:571 +#: draw/views.py msgid "Draw with Details" msgstr "" -#: draw/views.py:579 +#: draw/views.py msgid "Position Balance Report" msgstr "" -#: draw/views.py:590 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" msgstr "" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:593 +#: draw/views.py msgid " (i.e., Shannon entropy)" msgstr "(也就是Shannon的熵)" -#: draw/views.py:623 +#: draw/views.py msgid "Teams with position imbalances" msgstr "" -#: draw/views.py:624 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" msgstr "" -#: draw/views.py:627 +#: draw/views.py msgid "Annotated draw" msgstr "" -#: draw/views.py:658 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" msgstr "" -#: draw/views.py:666 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " msgstr "" -#: draw/views.py:674 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " msgstr "" -#: draw/views.py:683 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " msgstr "" -#: draw/views.py:699 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "" -#: draw/views.py:726 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "" -#: draw/views.py:746 +#: draw/views.py msgid "Released the draw." msgstr "" -#: draw/views.py:761 +#: draw/views.py msgid "Unreleased the draw." msgstr "" -#: draw/views.py:774 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." msgstr "" -#: draw/views.py:793 +#: draw/views.py msgid "Side Pre-Allocations" msgstr "" -#: draw/views.py:826 +#: draw/views.py msgid "Edit Matchups" msgstr "" diff --git a/tabbycat/importer/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/importer/locale/zh_Hans/LC_MESSAGES/django.po index 6bbe97daf85..fc7b895d60b 100644 --- a/tabbycat/importer/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:50\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -17,408 +17,397 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" msgstr "行 %(lineno)d:%(message)s" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" msgstr "" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" msgstr "" -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." msgstr "" -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." msgstr "" -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" msgstr "" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" msgstr "" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" msgstr "" -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" msgstr "" -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" msgstr "" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" msgstr "" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" msgstr "" -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" msgstr "" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" msgstr "" -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "讲员%d" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" msgstr "" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." msgstr "" -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." msgstr "" -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." msgstr "" -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." msgstr "" -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" msgstr "" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." msgstr "" -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" msgstr "" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "%(name)s(%(code)s)" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" -#: importer/forms.py:396 +#: importer/forms.py msgid "XML" msgstr "" -#: importer/forms.py:397 +#: importer/forms.py msgid "The Debate XML archive to parse" msgstr "" -#: importer/templates/archive_export_index.html:4 -#: importer/templates/archive_export_index.html:5 +#: importer/templates/archive_export_index.html msgid "Export Tournament Archive" msgstr "" -#: importer/templates/archive_export_index.html:9 +#: importer/templates/archive_export_index.html msgid "Tournaments can be exported in an XML format for use outside Tabbycat." msgstr "" -#: importer/templates/archive_export_index.html:17 +#: importer/templates/archive_export_index.html msgid "Export all data" msgstr "" -#: importer/templates/archive_importer.html:6 -#: importer/templates/archive_importer.html:18 +#: importer/templates/archive_importer.html msgctxt "page title" msgid "Import Tournament Archive" msgstr "" -#: importer/templates/archive_importer.html:19 +#: importer/templates/archive_importer.html msgid "This form will create a tournament with the data provided as a Debate XML format." msgstr "" -#: importer/templates/archive_importer.html:24 +#: importer/templates/archive_importer.html msgid "Import" msgstr "" -#: importer/templates/archive_importer.html:25 +#: importer/templates/archive_importer.html msgid "Go back to the site home page" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html msgctxt "page title" msgid "Add Adjudicators" msgstr "添加裁判" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" msgstr "(第%(step)s个步,共有%(count)s的步)" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" msgstr "上一个步" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" msgstr "下一个步" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" msgstr "" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." msgstr "" -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" msgstr "" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" msgstr "添加队伍" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" msgstr "添加裁判" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" msgstr "添加房间" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" msgstr "" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" msgstr "" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:66 +#: importer/templates/simple_import_index.html msgid "Add/Edit Break Categories" msgstr "" -#: importer/templates/simple_import_index.html:70 +#: importer/templates/simple_import_index.html msgid "Add/Edit Speaker Categories" msgstr "" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" msgstr "" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" msgstr "下一个步" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" msgstr "添加队伍" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" msgstr "%(institution)s 的队伍" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" msgstr "" -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" msgstr "保存所有队伍" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" msgstr "添加房间" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." msgstr "" -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" msgstr "" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" msgstr "" -#: importer/views.py:108 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." msgstr[0] "" -#: importer/views.py:129 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." msgstr[0] "添加了%(count)d个房间" -#: importer/views.py:188 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." msgstr[0] "添加了 %(count)d 个队伍。" -#: importer/views.py:209 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "" -#: importer/views.py:214 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." msgstr[0] "添加了%(count)d个裁判。" -#: importer/views.py:230 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " msgstr "" -#: importer/views.py:238 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." msgstr "" -#: importer/views.py:256 +#: importer/views.py msgid "Tournament archive has been imported." msgstr "" diff --git a/tabbycat/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/locale/zh_Hans/LC_MESSAGES/django.po index 1a8a810cc85..1864a7c9d44 100644 --- a/tabbycat/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -17,939 +17,939 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" msgstr "应用程序接口" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:105 +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" msgstr "签到" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" msgstr "" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" msgstr "" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" msgstr "" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." msgstr "" -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" msgstr "条形码" -#: checkins/models.py:37 +#: checkins/models.py msgid "" msgstr "" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" msgstr "人" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" msgstr "人员标识符" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" msgstr "人员标识符" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "辩论" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" msgstr "辩论标识符" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" msgstr "辩论标识符" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" msgstr "" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" msgstr "" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" msgstr "" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" msgstr "签到时间" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "比赛" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" msgstr "签到事件" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" msgstr "签到事件" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" msgstr "以条形码方式显示" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." msgstr "" -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." msgstr "" -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." msgstr "" -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" msgstr "" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" msgstr "" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" msgstr "" -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." msgstr "" -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." msgstr "" -#: checkins/views.py:30 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" msgstr "" -#: checkins/views.py:63 +#: checkins/views.py msgid "People's Check-In Statuses" msgstr "" -#: checkins/views.py:120 +#: checkins/views.py msgid "Rooms' Check-In Statuses" msgstr "" -#: checkins/views.py:169 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" msgstr "" -#: checkins/views.py:176 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" msgstr "讲员" -#: checkins/views.py:181 templates/nav/public_nav.html:145 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "裁判" -#: checkins/views.py:186 +#: checkins/views.py msgid "Rooms" msgstr "房间" -#: checkins/views.py:227 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" msgstr "" -#: checkins/views.py:234 +#: checkins/views.py msgid "Identifiers" msgstr "" -#: checkins/views.py:272 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." msgstr "" -#: checkins/views.py:280 +#: checkins/views.py msgid "You have revoked your check-in." msgstr "" -#: checkins/views.py:282 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." msgstr "" -#: checkins/views.py:286 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." msgstr "" -#: checkins/views.py:293 +#: checkins/views.py msgid "You are now checked in." msgstr "" -#: settings/core.py:67 +#: settings/core.py msgid "Arabic" msgstr "阿拉伯文" -#: settings/core.py:68 +#: settings/core.py msgid "Bengali" msgstr "" -#: settings/core.py:69 +#: settings/core.py msgid "English" msgstr "英文" -#: settings/core.py:70 +#: settings/core.py msgid "Spanish" msgstr "西班牙文" -#: settings/core.py:71 +#: settings/core.py msgid "French" msgstr "法文" -#: settings/core.py:72 +#: settings/core.py msgid "Indonesian" msgstr "" -#: settings/core.py:73 +#: settings/core.py msgid "Japanese" msgstr "" -#: settings/core.py:74 +#: settings/core.py msgid "Malay" msgstr "" -#: settings/core.py:75 +#: settings/core.py msgid "Portuguese" msgstr "" -#: settings/core.py:76 +#: settings/core.py msgid "Russian" msgstr "" -#: settings/core.py:77 +#: settings/core.py msgid "Simplified Chinese" msgstr "" -#: settings/core.py:78 +#: settings/core.py msgid "Translation" msgstr "" -#: templates/admin/delete_protected_message.html:4 +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." msgstr "" -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." msgstr "" -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." msgstr "" -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" msgstr "" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" msgstr "" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" msgstr "登录" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" msgstr "" -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." msgstr "" -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" msgstr "" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" msgstr "" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." msgstr "" -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgstr[0] "" -#: templates/errors/legacy_sendgrid_warning.html:11 +#: templates/errors/legacy_sendgrid_warning.html msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." msgstr "" -#: templates/errors/public_403.html:14 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." msgstr "" -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." msgstr "" -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." msgstr "" -#: templates/footer.html:24 +#: templates/footer.html #, python-format msgid "For a tournament of this size, we suggest a donation of $%(amount)s." msgstr "" -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." msgstr "" -#: templates/footer.html:31 +#: templates/footer.html msgid "Donations to Tabbycat from individuals or organisations are much appreciated." msgstr "" -#: templates/footer.html:39 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" msgstr "" -#: templates/footer.html:41 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." msgstr "" -#: templates/footer.html:50 +#: templates/footer.html msgid "Our Organisation" msgstr "" -#: templates/footer.html:52 -msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." msgstr "" -#: templates/footer.html:65 +#: templates/footer.html msgid "Language" msgstr "语言" -#: templates/footer.html:72 +#: templates/footer.html msgid "GitHub" msgstr "GitHub" -#: templates/footer.html:78 +#: templates/footer.html msgid "Documentation" msgstr "手册" -#: templates/footer.html:84 +#: templates/footer.html msgid "Support" msgstr "" -#: templates/footer.html:90 +#: templates/footer.html msgid "Facebook" msgstr "Facebook" -#: templates/footer.html:96 +#: templates/footer.html msgid "Set Up A Copy" msgstr "" -#: templates/footer.html:110 +#: templates/footer.html msgid "Change Language" msgstr "" -#: templates/footer.html:127 +#: templates/footer.html msgid "Use this language" msgstr "" -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" msgstr "Tabbycat标志" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" msgstr "" -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" msgstr "" -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" msgstr "" -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" msgstr "管理中心" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" msgstr "" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" msgstr "" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" msgstr "" -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" msgstr "" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" msgstr "" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" msgstr "" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:175 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" msgstr "" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" msgstr "" -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" msgstr "电子邮件" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" msgstr "" -#: templates/nav/admin_nav.html:97 +#: templates/nav/admin_nav.html msgid "Export XML" msgstr "" -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:160 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" msgstr "方" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" msgstr "" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" msgstr "" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" msgstr "" -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" msgstr "" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" msgstr "" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" msgstr "" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" msgstr "" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" msgstr "" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" msgstr "" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" msgstr "" -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" msgstr "" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:165 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" msgstr "" -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" msgstr "所有队伍" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "队伍" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" msgstr "%(category)s 的队伍" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" msgstr "" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" msgstr "%(category)s的讲员" -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" msgstr "" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:155 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "话题" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:170 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" msgstr "" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" msgstr "资格" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" msgstr "" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" msgstr "" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" msgstr "" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" msgstr "登出" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" msgstr "" -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:211 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" msgstr "" -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" msgstr "" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:180 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" msgstr "" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" msgstr "代号" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" msgstr "" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" msgstr "" -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" msgstr "" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" msgstr "" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" msgstr "" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" msgstr "" -#: templates/nav/public_nav.html:53 templates/nav/public_nav.html:62 +#: templates/nav/public_nav.html msgid "Motions Tab" msgstr "" -#: templates/nav/public_nav.html:56 +#: templates/nav/public_nav.html msgid "By round" msgstr "" -#: templates/nav/public_nav.html:57 +#: templates/nav/public_nav.html msgid "Globally" msgstr "" -#: templates/nav/public_nav.html:72 +#: templates/nav/public_nav.html msgid "Draws" msgstr "" -#: templates/nav/public_nav.html:83 +#: templates/nav/public_nav.html msgid "No Draws Available" msgstr "" -#: templates/nav/public_nav.html:91 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: templates/nav/public_nav.html:95 +#: templates/nav/public_nav.html msgid "Current Draws" msgstr "" -#: templates/nav/public_nav.html:115 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" msgstr "" -#: templates/nav/public_nav.html:133 +#: templates/nav/public_nav.html msgid "Break" msgstr "资格" -#: templates/nav/public_nav.html:185 +#: templates/nav/public_nav.html msgid "Feedback Progress" msgstr "" -#: templates/nav/public_nav.html:191 templates/nav/public_nav.html:197 +#: templates/nav/public_nav.html msgid "Enter Ballot" msgstr "" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" msgstr "" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" msgstr "" -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" msgstr "" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" msgstr "登录" -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" msgstr "再会" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" msgstr "" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" msgstr "登录" -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" msgstr "登录Tabbycat" -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." msgstr "" -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." msgstr "" -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." msgstr "" -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" msgstr "密码更改了" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." msgstr "您的密码更改了。" -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" msgstr "" -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:27 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" msgstr "密码更改" -#: templates/registration/password_change_form.html:16 +#: templates/registration/password_change_form.html #, python-format msgid "API Token: %(api_token)s" msgstr "" -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgid "The API token will allow you to authorize external applications to access the site as staff." msgstr "" -#: templates/registration/password_change_form.html:28 +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." msgstr "" -#: templates/registration/password_change_form.html:33 -#: templates/registration/password_reset_confirm.html:25 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" msgstr "更改我的密码" -#: templates/registration/password_change_form.html:34 -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" msgstr "" -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "" -#: templates/registration/password_reset_complete.html:11 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." msgstr "" -#: templates/registration/password_reset_complete.html:14 -#: templates/registration/password_reset_done.html:15 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" msgstr "" -#: templates/registration/password_reset_confirm.html:4 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" msgstr "" -#: templates/registration/password_reset_confirm.html:16 -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html msgctxt "page title" msgid "Password Reset" msgstr "重置密码" -#: templates/registration/password_reset_confirm.html:18 +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" msgstr "" -#: templates/registration/password_reset_confirm.html:33 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." msgstr "" -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" msgid "Password reset email sent" msgstr "密码重置链接已经发送" -#: templates/registration/password_reset_done.html:11 +#: templates/registration/password_reset_done.html msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." msgstr "" -#: templates/registration/password_reset_done.html:12 +#: templates/registration/password_reset_done.html msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." msgstr "" -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" msgstr "您好,%(user)s!" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" msgstr "" -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_form.html:27 +#: templates/registration/password_reset_form.html msgid "Enter your email address below, and we'll email you a password reset link." msgstr "" -#: templates/registration/password_reset_form.html:34 +#: templates/registration/password_reset_form.html msgid "Please enter a valid email address." msgstr "" -#: templates/registration/password_reset_form.html:39 users/forms.py:10 -#: users/forms.py:25 +#: templates/registration/password_reset_form.html users/forms.py msgid "Email address" msgstr "" -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" msgstr "重置我的密码" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" msgstr "" -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" msgstr "" -#: urls.py:102 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" msgstr "" -#: urls.py:105 +#: urls.py msgid "Welcome! You just logged in!" msgstr "" -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." msgstr "" -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." msgstr "" -#: users/templates/admin/auth/delete_user_warning.html:6 +#: users/templates/admin/auth/delete_user_warning.html msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." msgstr "" -#: users/templates/signup.html:4 users/templates/signup.html:5 +#: users/templates/signup.html msgid "Sign-Up" msgstr "" -#: users/templates/signup.html:16 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Administrator Account" msgstr "" -#: users/templates/signup.html:18 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Assistant Account" msgstr "" -#: users/templates/signup.html:25 +#: users/templates/signup.html msgid "Create Account" msgstr "" -#: users/views.py:54 +#: users/views.py msgid "You have successfully created a new administrator account." msgstr "" -#: users/views.py:56 +#: users/views.py msgid "You have successfully created a new assistant account." msgstr "" -#: users/views.py:84 +#: users/views.py msgid "Whoops! It looks like someone's already created the first user account. Please log in." msgstr "" -#: users/views.py:92 +#: users/views.py #, python-format msgid "Welcome! You've created an account for %s." msgstr "" diff --git a/tabbycat/motions/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/motions/locale/zh_Hans/LC_MESSAGES/django.po index 4fa43f5f936..3ca9ef19eea 100644 --- a/tabbycat/motions/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -17,358 +17,366 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "话题" -#: motions/models.py:9 +#: motions/models.py msgid "text" msgstr "文本" -#: motions/models.py:10 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" msgstr "" -#: motions/models.py:12 +#: motions/models.py msgid "reference" msgstr "" -#: motions/models.py:13 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" msgstr "" -#: motions/models.py:15 +#: motions/models.py msgid "info slide" msgstr "" -#: motions/models.py:16 +#: motions/models.py msgid "The information slide for this topic; if it has one" msgstr "" -#: motions/models.py:19 +#: motions/models.py msgid "tournament" msgstr "比赛" -#: motions/models.py:21 +#: motions/models.py msgid "rounds" msgstr "赛" -#: motions/models.py:24 motions/models.py:37 motions/models.py:62 +#: motions/models.py msgid "motion" msgstr "话题" -#: motions/models.py:25 +#: motions/models.py msgid "motions" msgstr "话题" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" msgstr "" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" msgstr "" -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" msgstr "" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" msgstr "" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" msgstr "" -#: motions/models.py:64 +#: motions/models.py msgid "round" msgstr "赛" -#: motions/models.py:67 +#: motions/models.py msgid "sequence number" msgstr "" -#: motions/models.py:68 +#: motions/models.py msgid "The order in which motions are displayed" msgstr "" -#: motions/models.py:73 +#: motions/models.py msgid "round motion" msgstr "" -#: motions/models.py:74 +#: motions/models.py msgid "round motions" msgstr "" -#: motions/statistics.py:86 +#: motions/statistics.py msgid "extremely strong evidence" msgstr "" -#: motions/statistics.py:87 +#: motions/statistics.py msgid "strong evidence" msgstr "" -#: motions/statistics.py:88 +#: motions/statistics.py msgid "moderate evidence" msgstr "" -#: motions/statistics.py:89 +#: motions/statistics.py msgid "weak evidence" msgstr "" -#: motions/statistics.py:90 +#: motions/statistics.py msgid "very weak evidence" msgstr "" -#: motions/statistics.py:91 +#: motions/statistics.py msgid "extremely weak evidence" msgstr "" -#: motions/statistics.py:114 +#: motions/statistics.py msgid "balance inconclusive" msgstr "" -#: motions/statistics.py:115 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" msgstr "" -#: motions/statistics.py:123 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" msgstr "" -#: motions/statistics.py:124 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." msgstr "" -#: motions/statistics.py:129 +#: motions/statistics.py msgid "probably balanced" msgstr "" -#: motions/statistics.py:130 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." msgstr "" -#: motions/templates/motion_global_statistics.html:22 -#: motions/templates/motion_round_statistics.html:31 -#: motions/templates/public_motions.html:32 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" msgstr[0] "" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" msgstr[0] "" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" msgstr[0] "" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" msgstr "推进了" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." msgstr "推进了" -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" msgstr "淘汰了" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." msgstr "淘汰" -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" msgstr "政府" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" msgstr "反对党" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" msgstr "上议院" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" msgstr "下议院" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" msgstr[0] "" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" msgstr[0] "" -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" msgstr[0] "" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" msgstr[0] "" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" msgstr "" -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" msgstr[0] "" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" msgstr "" -#: motions/templates/motions_edit.html:28 +#: motions/templates/motions_edit.html msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." msgstr "" -#: motions/templates/motions_edit.html:30 +#: motions/templates/motions_edit.html msgid "Reuse Motions from Last Round" msgstr "" -#: motions/templates/motions_edit.html:35 +#: motions/templates/motions_edit.html msgid "Use Existing Motions" msgstr "" -#: motions/templates/motions_edit.html:74 +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" msgstr[0] "保存话题" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "" -#: motions/templates/public_motions.html:41 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." msgstr "" -#: motions/templates/public_motions.html:47 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." msgstr "" -#: motions/templates/public_motions.html:52 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." msgstr "" -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" msgstr[0] "" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" msgstr[0] "" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." msgstr "" -#: motions/utils.py:11 +#: motions/utils.py msgid "Not all latest ballots list the same motion, so could not be merged." msgstr "" -#: motions/utils.py:29 +#: motions/utils.py msgid "Motion vetos are inconsistent, so could not be merged." msgstr "" -#: motions/views.py:91 +#: motions/views.py msgid "The motion has been saved." msgstr "" -#: motions/views.py:93 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." msgstr[0] "" -#: motions/views.py:97 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." msgstr[0] "" -#: motions/views.py:140 +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "" + +#: motions/views.py #, python-format msgid "Reused the motion from the previous round." msgid_plural "Reused the %(count)d motions from the previous round." msgstr[0] "" -#: motions/views.py:164 -msgid "Released the motion(s)." -msgstr "" +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" -#: motions/views.py:171 -msgid "Unreleased the motion(s)." -msgstr "" +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" -#: motions/views.py:195 +#: motions/views.py msgid "Round Motions" msgstr "" -#: motions/views.py:209 +#: motions/views.py msgid "Motion Statistics" msgstr "" diff --git a/tabbycat/notifications/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/notifications/locale/zh_Hans/LC_MESSAGES/django.po index ba1a694974c..4cedbe60633 100644 --- a/tabbycat/notifications/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -18,400 +18,398 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" msgstr "通知栏" -#: notifications/forms.py:12 +#: notifications/forms.py msgid "Recipient email address" msgstr "" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" msgstr "" -#: notifications/forms.py:17 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" msgstr "" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Subject" msgstr "" -#: notifications/forms.py:31 +#: notifications/forms.py msgid "Message" msgstr "" -#: notifications/models.py:11 notifications/models.py:26 +#: notifications/models.py msgid "email" msgstr "电子邮件" -#: notifications/models.py:12 +#: notifications/models.py msgid "SMS" msgstr "短信" -#: notifications/models.py:21 +#: notifications/models.py msgid "recipient" msgstr "" -#: notifications/models.py:23 +#: notifications/models.py msgid "method" msgstr "" -#: notifications/models.py:28 notifications/models.py:134 +#: notifications/models.py msgid "context" msgstr "" -#: notifications/models.py:31 +#: notifications/models.py msgid "notification" msgstr "通知栏" -#: notifications/models.py:33 notifications/models.py:74 -#: notifications/models.py:130 +#: notifications/models.py msgid "timestamp" msgstr "时间戳" -#: notifications/models.py:36 +#: notifications/models.py msgid "sent message" msgstr "" -#: notifications/models.py:37 +#: notifications/models.py msgid "sent messages" msgstr "" -#: notifications/models.py:58 +#: notifications/models.py msgid "team points" msgstr "" -#: notifications/models.py:59 +#: notifications/models.py msgid "ballot confirmed" msgstr "" -#: notifications/models.py:60 +#: notifications/models.py msgid "feedback URL" msgstr "" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot URL" msgstr "" -#: notifications/models.py:62 +#: notifications/models.py msgid "landing page URL" msgstr "" -#: notifications/models.py:63 +#: notifications/models.py msgid "adjudicator draw released" msgstr "" -#: notifications/models.py:64 +#: notifications/models.py msgid "team registration" msgstr "" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator registration" msgstr "" -#: notifications/models.py:66 +#: notifications/models.py msgid "motion(s) released" msgstr "" -#: notifications/models.py:67 +#: notifications/models.py msgid "team draw released" msgstr "" -#: notifications/models.py:68 +#: notifications/models.py msgid "custom message" msgstr "" -#: notifications/models.py:72 notifications/models.py:132 +#: notifications/models.py msgid "event" msgstr "事件" -#: notifications/models.py:77 +#: notifications/models.py msgid "tournament" msgstr "比赛" -#: notifications/models.py:79 +#: notifications/models.py msgid "round" msgstr "赛" -#: notifications/models.py:82 +#: notifications/models.py msgid "subject template" msgstr "" -#: notifications/models.py:84 +#: notifications/models.py msgid "body template" msgstr "" -#: notifications/models.py:87 +#: notifications/models.py msgid "bulk notification" msgstr "" -#: notifications/models.py:88 +#: notifications/models.py msgid "bulk notifications" msgstr "" -#: notifications/models.py:114 +#: notifications/models.py msgid "Processed" msgstr "" -#: notifications/models.py:115 +#: notifications/models.py msgid "Dropped" msgstr "" -#: notifications/models.py:116 +#: notifications/models.py msgid "Deferred" msgstr "" -#: notifications/models.py:117 +#: notifications/models.py msgid "Delivered" msgstr "" -#: notifications/models.py:118 +#: notifications/models.py msgid "Bounced" msgstr "" -#: notifications/models.py:119 +#: notifications/models.py msgid "Opened" msgstr "" -#: notifications/models.py:120 +#: notifications/models.py msgid "Clicked" msgstr "" -#: notifications/models.py:121 +#: notifications/models.py msgid "Unsubscribed" msgstr "" -#: notifications/models.py:122 +#: notifications/models.py msgid "Marked as spam" msgstr "" -#: notifications/models.py:123 +#: notifications/models.py msgid "Unsubscribed from group" msgstr "" -#: notifications/models.py:124 +#: notifications/models.py msgid "Resubscribed to group" msgstr "" -#: notifications/models.py:128 +#: notifications/models.py msgid "email message" msgstr "" -#: notifications/models.py:137 +#: notifications/models.py msgid "email status" msgstr "" -#: notifications/models.py:138 +#: notifications/models.py msgid "email statuses" msgstr "" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." msgstr "" -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." msgstr "" -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" msgstr "" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." msgstr "" -#: notifications/templates/notifications_nav.html:5 notifications/views.py:75 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" msgstr "" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:29 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" msgstr "" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" msgstr "" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" msgstr "" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." msgstr "" -#: notifications/templates/test_email.html:20 +#: notifications/templates/test_email.html #, python-format msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." msgstr "" -#: notifications/templates/test_email.html:30 +#: notifications/templates/test_email.html msgid "Go back to the site home page" msgstr "" -#: notifications/utils.py:26 +#: notifications/utils.py msgid "the chair" msgstr "主席" -#: notifications/utils.py:27 +#: notifications/utils.py msgid "the only" msgstr "" -#: notifications/utils.py:28 +#: notifications/utils.py msgid "a panellist" msgstr "成员" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "a trainee" msgstr "一位实习生" -#: notifications/utils.py:59 +#: notifications/utils.py msgid "TBA" msgstr "" -#: notifications/utils.py:88 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "" -#: notifications/utils.py:99 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:102 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Win" msgstr "胜利" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Loss" msgstr "失败" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " msgstr "
  • %(pos)s:%(speaker)s(%(score)s)
  • " -#: notifications/utils.py:183 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " msgstr "" -#: notifications/utils.py:206 notifications/utils.py:207 +#: notifications/utils.py msgid ", " msgstr "," -#: notifications/views.py:47 +#: notifications/views.py #, python-format msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" msgstr "" -#: notifications/views.py:51 +#: notifications/views.py msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." msgstr "" -#: notifications/views.py:60 +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" msgstr "" -#: notifications/views.py:65 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." msgstr "" -#: notifications/views.py:81 +#: notifications/views.py msgid "N/A" msgstr "不适用" -#: notifications/views.py:82 +#: notifications/views.py msgid "Not known" msgstr "" -#: notifications/views.py:87 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" msgstr "" -#: notifications/views.py:133 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "" -#: notifications/views.py:152 +#: notifications/views.py msgid "Timeline" msgstr "" -#: notifications/views.py:162 notifications/views.py:260 +#: notifications/views.py msgid "Participant" msgstr "" -#: notifications/views.py:163 notifications/views.py:265 +#: notifications/views.py msgid "Email address" msgstr "" -#: notifications/views.py:164 +#: notifications/views.py msgid "Status" msgstr "" -#: notifications/views.py:165 +#: notifications/views.py msgid "Time" msgstr "时间" -#: notifications/views.py:204 +#: notifications/views.py msgid "Email Participants" msgstr "" -#: notifications/views.py:233 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." msgstr[0] "" -#: notifications/views.py:239 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." msgstr "" -#: notifications/views.py:250 +#: notifications/views.py msgid "Send Email" msgstr "" -#: notifications/views.py:266 +#: notifications/views.py msgid "Not Provided" msgstr "" -#: notifications/views.py:279 +#: notifications/views.py msgid "Role" msgstr "" -#: notifications/views.py:280 +#: notifications/views.py msgid "Adjudicator" msgstr "裁判" -#: notifications/views.py:280 +#: notifications/views.py msgid "Speaker" msgstr "讲员" -#: notifications/views.py:288 +#: notifications/views.py msgid "Speakers" msgstr "讲员" -#: notifications/views.py:289 +#: notifications/views.py msgid "Adjudicators" msgstr "裁判" diff --git a/tabbycat/options/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/options/locale/zh_Hans/LC_MESSAGES/django.po index 9f7ca166ac2..138e4ba7495 100644 --- a/tabbycat/options/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -18,1587 +18,1600 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" msgstr "" -#: options/models.py:13 +#: options/models.py msgid "instance" msgstr "" -#: options/models.py:18 +#: options/models.py msgid "tournament preference" msgstr "" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" msgstr "" -#: options/preferences.py:19 options/templates/preferences_index.html:53 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" msgstr "" -#: options/preferences.py:25 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:28 +#: options/preferences.py msgid "Minimum speaker score" msgstr "" -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum speaker score" msgstr "" -#: options/preferences.py:35 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:43 +#: options/preferences.py msgid "Speaker score step" msgstr "" -#: options/preferences.py:44 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:52 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" msgstr "" -#: options/preferences.py:53 +#: options/preferences.py msgid "Maximum margin" msgstr "最大的范围" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" msgstr "" -#: options/preferences.py:63 +#: options/preferences.py msgid "Minimum reply score" msgstr "" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" msgstr "" -#: options/preferences.py:72 +#: options/preferences.py msgid "Maximum reply score" msgstr "" -#: options/preferences.py:80 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:81 +#: options/preferences.py msgid "Reply score step" msgstr "" -#: options/preferences.py:89 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" msgstr "" -#: options/preferences.py:90 +#: options/preferences.py msgid "Margin includes dissenters" msgstr "" -#: options/preferences.py:98 +#: options/preferences.py msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" msgstr "" -#: options/preferences.py:99 +#: options/preferences.py msgid "Team score includes ghosts" msgstr "" -#: options/preferences.py:106 options/templates/preferences_index.html:58 +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" msgstr "" -#: options/preferences.py:112 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" msgstr "" -#: options/preferences.py:113 +#: options/preferences.py msgid "Minimum adjudicator score to vote" msgstr "" -#: options/preferences.py:121 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" msgstr "" -#: options/preferences.py:122 +#: options/preferences.py msgid "Adjudicator conflict penalty" msgstr "" -#: options/preferences.py:130 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" msgstr "" -#: options/preferences.py:131 +#: options/preferences.py msgid "Adjudicator history penalty" msgstr "" -#: options/preferences.py:139 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" msgstr "" -#: options/preferences.py:140 +#: options/preferences.py msgid "Importance mismatch penalty" msgstr "" -#: options/preferences.py:148 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" msgstr "" -#: options/preferences.py:149 +#: options/preferences.py msgid "Team institution penalty" msgstr "" -#: options/preferences.py:157 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" msgstr "" -#: options/preferences.py:158 +#: options/preferences.py msgid "Team history penalty" msgstr "" -#: options/preferences.py:166 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" msgstr "" -#: options/preferences.py:167 +#: options/preferences.py msgid "Avoid same institution" msgstr "" -#: options/preferences.py:175 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" msgstr "" -#: options/preferences.py:176 +#: options/preferences.py msgid "Avoid team history" msgstr "" -#: options/preferences.py:184 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "" -#: options/preferences.py:185 +#: options/preferences.py msgid "Odd bracket resolution method" msgstr "" -#: options/preferences.py:189 +#: options/preferences.py msgid "Pull up from top" msgstr "" -#: options/preferences.py:190 +#: options/preferences.py msgid "Pull up from bottom" msgstr "" -#: options/preferences.py:191 +#: options/preferences.py msgid "Pull up from middle" msgstr "" -#: options/preferences.py:192 +#: options/preferences.py msgid "Pull up at random" msgstr "" -#: options/preferences.py:193 +#: options/preferences.py msgid "Intermediate brackets" msgstr "" -#: options/preferences.py:194 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" msgstr "" -#: options/preferences.py:195 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" msgstr "" -#: options/preferences.py:196 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" msgstr "" -#: options/preferences.py:203 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" msgstr "" -#: options/preferences.py:204 +#: options/preferences.py msgid "Side allocations method" msgstr "" -#: options/preferences.py:208 options/preferences.py:225 +#: options/preferences.py msgid "Random" msgstr "" -#: options/preferences.py:209 +#: options/preferences.py msgid "Balance" msgstr "" -#: options/preferences.py:210 +#: options/preferences.py msgid "Pre-allocated" msgstr "" -#: options/preferences.py:211 +#: options/preferences.py msgid "Manually enter from ballot" msgstr "" -#: options/preferences.py:218 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." msgstr "" -#: options/preferences.py:219 +#: options/preferences.py msgid "Pairing method" msgstr "" -#: options/preferences.py:223 +#: options/preferences.py msgid "Slide" msgstr "" -#: options/preferences.py:224 +#: options/preferences.py msgid "Fold" msgstr "" -#: options/preferences.py:226 +#: options/preferences.py msgid "Adjacent" msgstr "" -#: options/preferences.py:227 +#: options/preferences.py msgid "Fold top, adjacent rest" msgstr "" -#: options/preferences.py:234 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" msgstr "" -#: options/preferences.py:236 +#: options/preferences.py msgid "Conflict avoidance method" msgstr "" -#: options/preferences.py:240 +#: options/preferences.py msgid "Off" msgstr "" -#: options/preferences.py:241 +#: options/preferences.py msgid "One-up-one-down" msgstr "" -#: options/preferences.py:248 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "" -#: options/preferences.py:250 +#: options/preferences.py msgid "Pullup restriction" msgstr "" -#: options/preferences.py:254 +#: options/preferences.py msgid "No restriction" msgstr "" -#: options/preferences.py:255 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" msgstr "" -#: options/preferences.py:256 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" msgstr "" -#: options/preferences.py:257 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" msgstr "" -#: options/preferences.py:264 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." msgstr "" -#: options/preferences.py:265 +#: options/preferences.py msgid "BP pullup distribution" msgstr "" -#: options/preferences.py:269 +#: options/preferences.py msgid "Anywhere in bracket" msgstr "" -#: options/preferences.py:270 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" msgstr "" -#: options/preferences.py:277 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" msgstr "" -#: options/preferences.py:278 +#: options/preferences.py msgid "BP position cost" msgstr "" -#: options/preferences.py:282 +#: options/preferences.py msgid "Simple" msgstr "" -#: options/preferences.py:283 +#: options/preferences.py msgid "Rényi entropy" msgstr "" -#: options/preferences.py:284 +#: options/preferences.py msgid "Population variance" msgstr "" -#: options/preferences.py:291 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." msgstr "" -#: options/preferences.py:294 +#: options/preferences.py msgid "Rényi order (BP)" msgstr "" -#: options/preferences.py:303 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." msgstr "" -#: options/preferences.py:306 +#: options/preferences.py msgid "BP position cost exponent" msgstr "" -#: options/preferences.py:315 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." msgstr "" -#: options/preferences.py:317 +#: options/preferences.py msgid "BP assignment method" msgstr "" -#: options/preferences.py:321 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" msgstr "" -#: options/preferences.py:322 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" msgstr "" -#: options/preferences.py:329 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" msgstr "" -#: options/preferences.py:330 +#: options/preferences.py msgid "Skip adjudicator check-ins" msgstr "" -#: options/preferences.py:338 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:339 +#: options/preferences.py msgid "No panellist adjudicators" msgstr "" -#: options/preferences.py:347 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:348 +#: options/preferences.py msgid "No trainee adjudicators" msgstr "" -#: options/preferences.py:355 options/templates/preferences_index.html:73 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" msgstr "" -#: options/preferences.py:361 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:362 +#: options/preferences.py msgid "Minimum adjudicator score" msgstr "" -#: options/preferences.py:370 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:371 +#: options/preferences.py msgid "Maximum adjudicator score" msgstr "" -#: options/preferences.py:379 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" msgstr "" -#: options/preferences.py:380 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" msgstr "" -#: options/preferences.py:384 +#: options/preferences.py msgid "Chairs on panellists and trainees" msgstr "" -#: options/preferences.py:385 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" msgstr "" -#: options/preferences.py:386 +#: options/preferences.py msgid "Panellists and trainees on chairs, vice-versa" msgstr "" -#: options/preferences.py:387 +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" msgstr "" -#: options/preferences.py:394 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "" -#: options/preferences.py:395 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" msgstr "" -#: options/preferences.py:399 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" msgstr "" -#: options/preferences.py:400 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" msgstr "" -#: options/preferences.py:407 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" msgstr "" -#: options/preferences.py:408 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" msgstr "" -#: options/preferences.py:416 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" msgstr "" -#: options/preferences.py:417 +#: options/preferences.py msgid "Show unaccredited" msgstr "" -#: options/preferences.py:425 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" msgstr "" -#: options/preferences.py:426 +#: options/preferences.py msgid "Feedback introduction/explanation" msgstr "" -#: options/preferences.py:435 options/templates/preferences_index.html:63 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" msgstr "" -#: options/preferences.py:441 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" msgstr "" -#: options/preferences.py:442 +#: options/preferences.py msgid "Teams in debate" msgstr "" -#: options/preferences.py:446 +#: options/preferences.py msgid "Two-team format" msgstr "" -#: options/preferences.py:447 +#: options/preferences.py msgid "British Parliamentary (four teams)" msgstr "英国议会(四个队伍)" -#: options/preferences.py:454 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:455 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" msgstr "" -#: options/preferences.py:459 options/preferences.py:472 +#: options/preferences.py msgid "One ballot per voting adjudicator" msgstr "" -#: options/preferences.py:460 options/preferences.py:473 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" msgstr "" -#: options/preferences.py:467 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:468 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" msgstr "" -#: options/preferences.py:480 +#: options/preferences.py msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." msgstr "" -#: options/preferences.py:481 +#: options/preferences.py msgid "Winner Declaration in ballot(s)" msgstr "" -#: options/preferences.py:485 +#: options/preferences.py msgid "Do not require separate winner selection" msgstr "" -#: options/preferences.py:486 +#: options/preferences.py msgid "Require separate winner selection as a check on correct scores" msgstr "" -#: options/preferences.py:487 +#: options/preferences.py msgid "Require winner selection to break tied-point debates" msgstr "" -#: options/preferences.py:488 +#: options/preferences.py msgid "Require winner selection, overriding scores" msgstr "" -#: options/preferences.py:495 +#: options/preferences.py msgid "When ballots should ask for speaker scores." msgstr "" -#: options/preferences.py:496 +#: options/preferences.py msgid "Require speaker scores" msgstr "" -#: options/preferences.py:500 +#: options/preferences.py msgid "Always require speaker scores" msgstr "" -#: options/preferences.py:501 +#: options/preferences.py msgid "Only require speaker scores in preliminary rounds" msgstr "" -#: options/preferences.py:502 +#: options/preferences.py msgid "Never require speaker scores" msgstr "" -#: options/preferences.py:509 +#: options/preferences.py msgid "How many substantive speakers on a team" msgstr "" -#: options/preferences.py:510 +#: options/preferences.py msgid "Substantive speakers" msgstr "" -#: options/preferences.py:518 +#: options/preferences.py msgid "What to call the teams" msgstr "" -#: options/preferences.py:519 +#: options/preferences.py msgid "Side names" msgstr "" -#: options/preferences.py:528 +#: options/preferences.py msgid "Whether this style features scored reply speeches" msgstr "" -#: options/preferences.py:529 +#: options/preferences.py msgid "Reply scores" msgstr "" -#: options/preferences.py:537 +#: options/preferences.py msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" msgstr "" -#: options/preferences.py:538 +#: options/preferences.py msgid "Require reply speaker to have given a substantive speech" msgstr "" -#: options/preferences.py:545 options/templates/preferences_index.html:68 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "" -#: options/preferences.py:551 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" msgstr "" -#: options/preferences.py:552 +#: options/preferences.py msgid "Speeches missable for standings eligibility" msgstr "" -#: options/preferences.py:560 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" msgstr "" -#: options/preferences.py:561 +#: options/preferences.py msgid "Replies missable for standings eligibility" msgstr "" -#: options/preferences.py:569 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" msgstr "" -#: options/preferences.py:570 +#: options/preferences.py msgid "Team standings precedence" msgstr "" -#: options/preferences.py:586 options/preferences.py:621 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" msgstr "" -#: options/preferences.py:592 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" msgstr "" -#: options/preferences.py:593 +#: options/preferences.py msgid "Team standings extra metrics" msgstr "" -#: options/preferences.py:604 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" msgstr "" -#: options/preferences.py:605 +#: options/preferences.py msgid "Speaker standings precedence" msgstr "" -#: options/preferences.py:627 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" msgstr "" -#: options/preferences.py:628 +#: options/preferences.py msgid "Speaker standings extra metrics" msgstr "" -#: options/preferences.py:638 options/templates/preferences_index.html:89 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" msgstr "" -#: options/preferences.py:644 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:645 +#: options/preferences.py msgid "Release team tab to public" msgstr "" -#: options/preferences.py:653 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." msgstr "" -#: options/preferences.py:654 +#: options/preferences.py msgid "Top teams cutoff" msgstr "" -#: options/preferences.py:662 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:663 +#: options/preferences.py msgid "Release speaker tab to public" msgstr "" -#: options/preferences.py:671 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." msgstr "" -#: options/preferences.py:672 +#: options/preferences.py msgid "Top speakers cutoff" msgstr "" -#: options/preferences.py:680 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:681 +#: options/preferences.py msgid "Release replies tab to public" msgstr "" -#: options/preferences.py:689 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." msgstr "" -#: options/preferences.py:690 +#: options/preferences.py msgid "Top replies cutoff" msgstr "" -#: options/preferences.py:716 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." msgstr "" -#: options/preferences.py:719 +#: options/preferences.py msgid "Release motions tab to public" msgstr "" -#: options/preferences.py:727 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" msgstr "" -#: options/preferences.py:728 +#: options/preferences.py msgid "Release adjudicator tab to public" msgstr "" -#: options/preferences.py:736 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" msgstr "" -#: options/preferences.py:737 +#: options/preferences.py msgid "Adjudicator tab displays" msgstr "" -#: options/preferences.py:741 +#: options/preferences.py msgid "Only shows base score" msgstr "" -#: options/preferences.py:742 +#: options/preferences.py msgid "Only shows final score" msgstr "" -#: options/preferences.py:743 +#: options/preferences.py msgid "Shows base, final, and per-round scores" msgstr "" -#: options/preferences.py:750 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." msgstr "" -#: options/preferences.py:751 +#: options/preferences.py msgid "Release ballots to public" msgstr "" -#: options/preferences.py:759 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" msgstr "" -#: options/preferences.py:760 +#: options/preferences.py msgid "Release all round results to public" msgstr "" -#: options/preferences.py:768 +#: options/preferences.py msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." msgstr "" -#: options/preferences.py:769 +#: options/preferences.py msgid "Release ballots through private URLs" msgstr "" -#: options/preferences.py:776 options/templates/preferences_index.html:94 +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" msgstr "" -#: options/preferences.py:782 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" msgstr "" -#: options/preferences.py:783 +#: options/preferences.py msgid "Ballot submissions from adjudicators" msgstr "" -#: options/preferences.py:787 options/preferences.py:801 +#: options/preferences.py msgid "Disabled (tab staff only)" msgstr "" -#: options/preferences.py:788 options/preferences.py:802 +#: options/preferences.py msgid "Use private URLs" msgstr "" -#: options/preferences.py:789 options/preferences.py:803 +#: options/preferences.py msgid "Use publicly accessible form" msgstr "" -#: options/preferences.py:796 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" msgstr "" -#: options/preferences.py:797 +#: options/preferences.py msgid "Feedback submissions from participants" msgstr "" -#: options/preferences.py:810 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" msgstr "" -#: options/preferences.py:811 +#: options/preferences.py msgid "Require password for submission" msgstr "" -#: options/preferences.py:819 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" msgstr "" -#: options/preferences.py:820 +#: options/preferences.py msgid "Password for public submission" msgstr "" -#: options/preferences.py:828 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" msgstr "" -#: options/preferences.py:829 +#: options/preferences.py msgid "Bypass double checking" msgstr "" -#: options/preferences.py:837 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." msgstr "" -#: options/preferences.py:838 +#: options/preferences.py msgid "Enforce blind confirmations" msgstr "" -#: options/preferences.py:846 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." msgstr "" -#: options/preferences.py:849 +#: options/preferences.py msgid "Assistant user access" msgstr "" -#: options/preferences.py:854 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" msgstr "" -#: options/preferences.py:855 +#: options/preferences.py msgid "Just results entry and draw display" msgstr "" -#: options/preferences.py:856 +#: options/preferences.py msgid "Only results entry" msgstr "" -#: options/preferences.py:862 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." msgstr "" -#: options/preferences.py:863 +#: options/preferences.py msgid "Participant self-checkin" msgstr "" -#: options/preferences.py:871 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" msgstr "" -#: options/preferences.py:874 +#: options/preferences.py msgid "Check-In Window (People)" msgstr "" -#: options/preferences.py:880 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" msgstr "" -#: options/preferences.py:883 +#: options/preferences.py msgid "Check-In Window (Rooms)" msgstr "" -#: options/preferences.py:889 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" msgstr "" -#: options/preferences.py:890 +#: options/preferences.py msgid "Ballot Digit Checks" msgstr "" -#: options/preferences.py:898 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:899 +#: options/preferences.py msgid "Score return location" msgstr "" -#: options/preferences.py:907 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:908 +#: options/preferences.py msgid "Feedback return location" msgstr "" -#: options/preferences.py:916 +#: options/preferences.py msgid "Lets debates have their status as postponed, as to not block draw generation." msgstr "" -#: options/preferences.py:917 +#: options/preferences.py msgid "Enable postponements" msgstr "" -#: options/preferences.py:925 +#: options/preferences.py msgid "Have each voting adjudicator submit a separate ballot." msgstr "" -#: options/preferences.py:926 +#: options/preferences.py msgid "Individual voting ballots" msgstr "" -#: options/preferences.py:933 options/templates/preferences_index.html:99 +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" msgstr "" -#: options/preferences.py:939 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" msgstr "" -#: options/preferences.py:940 +#: options/preferences.py msgid "Enable public view of participants list" msgstr "" -#: options/preferences.py:948 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" msgstr "" -#: options/preferences.py:949 +#: options/preferences.py msgid "Enable public view of institutions list" msgstr "" -#: options/preferences.py:957 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" msgstr "" -#: options/preferences.py:958 +#: options/preferences.py msgid "Enable public view of diversity info" msgstr "" -#: options/preferences.py:966 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." msgstr "" -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of the checkin statuses" msgstr "" -#: options/preferences.py:977 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" msgstr "" -#: options/preferences.py:978 +#: options/preferences.py msgid "Show break categories on participants page" msgstr "" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" msgstr "" -#: options/preferences.py:987 +#: options/preferences.py msgid "Show pre-allocated sides to public" msgstr "" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing released draws" msgstr "" -#: options/preferences.py:996 +#: options/preferences.py msgid "Enable public view of draw" msgstr "" -#: options/preferences.py:1000 +#: options/preferences.py msgid "Disabled" msgstr "" -#: options/preferences.py:1001 +#: options/preferences.py msgid "Show a single page for the current round's draw" msgstr "" -#: options/preferences.py:1002 +#: options/preferences.py msgid "Show individual pages for all released draws" msgstr "" -#: options/preferences.py:1009 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" msgstr "" -#: options/preferences.py:1010 +#: options/preferences.py msgid "Enable public view of results" msgstr "" -#: options/preferences.py:1018 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" msgstr "" -#: options/preferences.py:1019 +#: options/preferences.py msgid "Enable public view of motions" msgstr "" -#: options/preferences.py:1027 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" msgstr "" -#: options/preferences.py:1028 +#: options/preferences.py msgid "Enable public view of team standings" msgstr "" -#: options/preferences.py:1036 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" msgstr "" -#: options/preferences.py:1037 +#: options/preferences.py msgid "Enable public record pages" msgstr "" -#: options/preferences.py:1045 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1046 +#: options/preferences.py msgid "Release team breaks to public" msgstr "" -#: options/preferences.py:1054 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1055 +#: options/preferences.py msgid "Release adjudicators break to public" msgstr "" -#: options/preferences.py:1063 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" msgstr "" -#: options/preferences.py:1064 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" msgstr "" -#: options/preferences.py:1072 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." msgstr "" -#: options/preferences.py:1073 +#: options/preferences.py msgid "Tournament staff" msgstr "" -#: options/preferences.py:1083 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" msgstr "" -#: options/preferences.py:1084 +#: options/preferences.py msgid "Welcome message" msgstr "" -#: options/preferences.py:1093 options/templates/preferences_index.html:104 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" msgstr "" -#: options/preferences.py:1099 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" msgstr "" -#: options/preferences.py:1100 +#: options/preferences.py msgid "Show splitting adjudicators" msgstr "" -#: options/preferences.py:1108 +#: options/preferences.py msgid "Whether and how to use code names for teams" msgstr "" -#: options/preferences.py:1109 +#: options/preferences.py msgid "Team code names" msgstr "代号的队伍" -#: options/preferences.py:1114 +#: options/preferences.py msgid "Do not use code names" msgstr "不要使用代号" -#: options/preferences.py:1115 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" msgstr "" -#: options/preferences.py:1116 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" msgstr "" -#: options/preferences.py:1118 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" msgstr "" -#: options/preferences.py:1120 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" msgstr "" -#: options/preferences.py:1126 +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" msgstr "" -#: options/preferences.py:1127 +#: options/preferences.py msgid "Show emoji" msgstr "" -#: options/preferences.py:1135 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" msgstr "" -#: options/preferences.py:1136 +#: options/preferences.py msgid "Show team institutions" msgstr "" -#: options/preferences.py:1144 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" msgstr "" -#: options/preferences.py:1145 +#: options/preferences.py msgid "Show adjudicator institutions" msgstr "" -#: options/preferences.py:1153 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" msgstr "" -#: options/preferences.py:1154 +#: options/preferences.py msgid "Show speakers in draw" msgstr "" -#: options/preferences.py:1161 options/templates/preferences_index.html:109 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" msgstr "通知栏" -#: options/preferences.py:1167 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Reply-to name" msgstr "" -#: options/preferences.py:1176 +#: options/preferences.py msgid "The email address for handling replies" msgstr "" -#: options/preferences.py:1177 +#: options/preferences.py msgid "Reply-to address" msgstr "" -#: options/preferences.py:1185 +#: options/preferences.py msgid "A secret key to accept email status events" msgstr "" -#: options/preferences.py:1186 +#: options/preferences.py msgid "Email status secret key" msgstr "" -#: options/preferences.py:1196 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "" -#: options/preferences.py:1197 +#: options/preferences.py msgid "Ballot receipts" msgstr "" -#: options/preferences.py:1205 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "" -#: options/preferences.py:1207 +#: options/preferences.py msgid "Ballot receipt subject line" msgstr "" -#: options/preferences.py:1215 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "" -#: options/preferences.py:1216 +#: options/preferences.py msgid "Ballot receipt message" msgstr "" -#: options/preferences.py:1232 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1233 +#: options/preferences.py msgid "Team points subject line" msgstr "" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team points message" msgstr "" -#: options/preferences.py:1250 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1251 +#: options/preferences.py msgid "Adjudicator draw subject line" msgstr "" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1259 +#: options/preferences.py msgid "Adjudicator draw message" msgstr "" -#: options/preferences.py:1268 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." msgstr "" -#: options/preferences.py:1269 +#: options/preferences.py msgid "Team draw subject line" msgstr "" -#: options/preferences.py:1276 options/preferences.py:1294 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1277 options/preferences.py:1295 +#: options/preferences.py msgid "Private URL notification message" msgstr "" -#: options/preferences.py:1286 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1287 +#: options/preferences.py msgid "Private URL notification subject line" msgstr "" -#: options/preferences.py:1308 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1309 +#: options/preferences.py msgid "Motion release notification subject line" msgstr "" -#: options/preferences.py:1316 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1317 +#: options/preferences.py msgid "Motion release notification message" msgstr "" -#: options/preferences.py:1325 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1326 +#: options/preferences.py msgid "Team registration notification subject line" msgstr "" -#: options/preferences.py:1333 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1334 +#: options/preferences.py msgid "Team registration notification message" msgstr "" -#: options/preferences.py:1343 options/templates/preferences_index.html:78 +#: options/preferences.py options/templates/preferences_index.html msgid "Motions" msgstr "话题" -#: options/preferences.py:1349 +#: options/preferences.py msgid "If checked, ballots require a motion to be entered" msgstr "" -#: options/preferences.py:1350 +#: options/preferences.py msgid "Enable motions" msgstr "" -#: options/preferences.py:1358 +#: options/preferences.py msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" msgstr "" -#: options/preferences.py:1359 +#: options/preferences.py msgid "Ballot Hide Motions" msgstr "" -#: options/preferences.py:1367 +#: options/preferences.py msgid "Enables the motion veto field on ballots, to track veto statistics" msgstr "" -#: options/preferences.py:1368 +#: options/preferences.py msgid "Motion vetoes" msgstr "" -#: options/preferences.py:1376 +#: options/preferences.py msgid "If showing results to public, show which motions were selected in the record" msgstr "" -#: options/preferences.py:1377 +#: options/preferences.py msgid "Show motions in results" msgstr "" -#: options/preferences.py:1385 +#: options/preferences.py msgid "Order in which are listed by round in the public view" msgstr "" -#: options/preferences.py:1386 +#: options/preferences.py msgid "Order to display motions" msgstr "" -#: options/preferences.py:1390 +#: options/preferences.py msgid "Earliest round first" msgstr "" -#: options/preferences.py:1391 +#: options/preferences.py msgid "Latest round first" msgstr "" -#: options/preferences.py:1398 +#: options/preferences.py msgid "Whether motions can be reused from one round to another." msgstr "" -#: options/preferences.py:1399 +#: options/preferences.py msgid "Allow motion reuse" msgstr "" -#: options/preferences.py:1406 options/templates/preferences_index.html:114 +#: options/preferences.py options/templates/preferences_index.html msgid "Global Settings" msgstr "" -#: options/preferences.py:1412 +#: options/preferences.py msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." msgstr "" -#: options/preferences.py:1413 +#: options/preferences.py msgid "Enable API access" msgstr "" -#: options/preferences.py:1421 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1422 +#: options/preferences.py msgid "Assistant account creation key" msgstr "" -#: options/preferences.py:1431 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1433 +#: options/preferences.py msgid "Administrator account creation key" msgstr "" -#: options/presets.py:32 options/presets.py:324 +#: options/presets.py msgid "Public Information Options" msgstr "" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" msgstr "" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" msgstr "" -#: options/presets.py:74 +#: options/presets.py msgid "Australs Rules" msgstr "" -#: options/presets.py:75 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:114 +#: options/presets.py msgid "British Parliamentary Rules" msgstr "英国议会式" -#: options/presets.py:115 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." msgstr "" -#: options/presets.py:157 +#: options/presets.py msgid "Canadian Parliamentary Rules" msgstr "" -#: options/presets.py:159 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." msgstr "" -#: options/presets.py:182 +#: options/presets.py msgid "Australian Easters Rules" msgstr "" -#: options/presets.py:184 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:202 +#: options/presets.py msgid "2 vs 2 Impromptu" msgstr "" -#: options/presets.py:204 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." msgstr "" -#: options/presets.py:229 +#: options/presets.py msgid "3 vs 3 Prepared" msgstr "" -#: options/presets.py:231 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." msgstr "" -#: options/presets.py:258 +#: options/presets.py msgid "UADC Rules" msgstr "" -#: options/presets.py:260 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:296 +#: options/presets.py msgid "WSDC Rules" msgstr "" -#: options/presets.py:298 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:326 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "" -#: options/presets.py:338 +#: options/presets.py msgid "Tab Release Options" msgstr "" -#: options/presets.py:340 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" msgstr "" -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html msgid "Configuration" msgstr "" -#: options/templates/preferences_index.html:11 +#: options/templates/preferences_index.html #, python-format msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." msgstr "" -#: options/templates/preferences_index.html:24 +#: options/templates/preferences_index.html #, python-format msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." msgstr "" -#: options/templates/preferences_index.html:35 +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." msgstr "" -#: options/templates/preferences_index.html:54 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" msgstr "" -#: options/templates/preferences_index.html:59 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" msgstr "" -#: options/templates/preferences_index.html:64 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" msgstr "" -#: options/templates/preferences_index.html:69 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" msgstr "" -#: options/templates/preferences_index.html:74 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" msgstr "" -#: options/templates/preferences_index.html:79 +#: options/templates/preferences_index.html msgid "How and where are motions used" msgstr "" -#: options/templates/preferences_index.html:90 +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" msgstr "" -#: options/templates/preferences_index.html:95 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" msgstr "" -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" msgstr "" -#: options/templates/preferences_index.html:105 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" msgstr "" -#: options/templates/preferences_index.html:110 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" msgstr "" -#: options/templates/preferences_index.html:115 +#: options/templates/preferences_index.html msgid "Settings which can affect all tournaments on the site" msgstr "" -#: options/templates/preferences_index.html:127 +#: options/templates/preferences_index.html msgid "Manually Set Current Round" msgstr "" -#: options/templates/preferences_index.html:128 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." msgstr "" -#: options/templates/preferences_index.html:132 -msgid "Set Round Weights" +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: options/templates/preferences_index.html:133 +#: options/templates/preferences_index.html msgid "Rounds can be weighted so that certain rounds are worth more team points." msgstr "" -#: options/templates/preferences_index.html:140 +#: options/templates/preferences_index.html msgid "Presets" msgstr "" -#: options/templates/preferences_index.html:141 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." msgstr "" -#: options/templates/preferences_index.html:152 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" msgstr "" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" msgstr "" -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" msgstr "" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" msgstr "" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" msgstr "" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" msgstr "" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" msgstr "" -#: options/views.py:65 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." msgstr "" -#: options/views.py:111 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." msgstr "" diff --git a/tabbycat/participants/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/participants/locale/zh_Hans/LC_MESSAGES/django.po index 9b335b528bc..be43bec2c4b 100644 --- a/tabbycat/participants/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -18,953 +18,940 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 942\n" -#: participants/admin.py:96 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" msgstr "" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." msgstr[0] "" -#: participants/admin.py:152 participants/admin.py:233 -msgid "Delete URL key" +#: participants/admin.py +msgid "Reset emoji" msgstr "" -#: participants/admin.py:160 +#: participants/admin.py #, python-format msgid "%(count)d team had their emoji reset." msgid_plural "%(count)d teams had their emojis reset." msgstr[0] "" -#: participants/admin.py:164 -msgid "Reset emoji" +#: participants/admin.py +msgid "Reset code name" msgstr "" -#: participants/admin.py:170 +#: participants/admin.py #, python-format msgid "%(count)d team had their code name reset." msgid_plural "%(count)d teams had their code names reset." msgstr[0] "" -#: participants/admin.py:174 -msgid "Reset code name" -msgstr "" - -#: participants/admin.py:228 +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." msgstr[0] "" -#: participants/apps.py:7 participants/views.py:41 +#: participants/apps.py participants/views.py msgid "Participants" msgstr "" -#: participants/models.py:21 participants/models.py:37 -#: participants/models.py:66 participants/models.py:96 +#: participants/models.py msgid "name" msgstr "名字" -#: participants/models.py:24 participants/models.py:45 +#: participants/models.py msgid "region" msgstr "地区" -#: participants/models.py:25 +#: participants/models.py msgid "regions" msgstr "地区" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:39 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" msgstr "" -#: participants/models.py:41 +#: participants/models.py msgid "code" msgstr "简写" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:43 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" msgstr "" -#: participants/models.py:55 participants/models.py:155 -#: participants/models.py:353 +#: participants/models.py msgid "institution" msgstr "" -#: participants/models.py:56 +#: participants/models.py msgid "institutions" msgstr "" -#: participants/models.py:64 participants/models.py:157 -#: participants/models.py:356 +#: participants/models.py msgid "tournament" msgstr "比赛" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:68 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" msgstr "" -#: participants/models.py:70 +#: participants/models.py msgid "slug" msgstr "" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:72 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" msgstr "" -#: participants/models.py:74 +#: participants/models.py msgid "sequence number" msgstr "" -#: participants/models.py:75 +#: participants/models.py msgid "The order in which the categories are displayed" msgstr "" -#: participants/models.py:77 +#: participants/models.py msgid "limit" msgstr "" -#: participants/models.py:78 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: participants/models.py:80 +#: participants/models.py msgid "public" msgstr "" -#: participants/models.py:81 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" msgstr "" -#: participants/models.py:87 +#: participants/models.py msgid "speaker category" msgstr "" -#: participants/models.py:88 participants/models.py:330 +#: participants/models.py msgid "speaker categories" msgstr "" -#: participants/models.py:98 +#: participants/models.py msgid "email address" msgstr "" -#: participants/models.py:100 +#: participants/models.py msgid "phone" msgstr "电话号码" -#: participants/models.py:102 +#: participants/models.py msgid "anonymous" msgstr "匿名" -#: participants/models.py:103 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" msgstr "" -#: participants/models.py:106 +#: participants/models.py +msgid "code name" +msgstr "代号" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py msgid "URL key" msgstr "" -#: participants/models.py:111 +#: participants/models.py msgid "male" msgstr "男性" -#: participants/models.py:112 +#: participants/models.py msgid "female" msgstr "女性" -#: participants/models.py:113 +#: participants/models.py msgid "other" msgstr "" -#: participants/models.py:115 +#: participants/models.py msgid "gender" msgstr "性别" -#: participants/models.py:116 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" msgstr "" -#: participants/models.py:118 +#: participants/models.py msgid "pronoun" msgstr "代词" -#: participants/models.py:119 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" msgstr "" -#: participants/models.py:122 +#: participants/models.py msgid "person" msgstr "人" -#: participants/models.py:123 +#: participants/models.py msgid "persons" msgstr "人" -#: participants/models.py:138 +#: participants/models.py msgid "full name/suffix" msgstr "" -#: participants/models.py:139 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:141 +#: participants/models.py msgid "short name/suffix" msgstr "" -#: participants/models.py:142 +#: participants/models.py msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:144 -msgid "code name" -msgstr "代号" - -#: participants/models.py:145 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" msgstr "" -#: participants/models.py:148 +#: participants/models.py msgid "short name" msgstr "" -#: participants/models.py:149 +#: participants/models.py msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:151 +#: participants/models.py msgid "long name" msgstr "长名称" -#: participants/models.py:152 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:159 +#: participants/models.py msgid "Uses institutional prefix" msgstr "" -#: participants/models.py:160 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" msgstr "" -#: participants/models.py:162 +#: participants/models.py msgid "break categories" msgstr "" -#: participants/models.py:167 participants/models.py:364 +#: participants/models.py msgid "institution conflicts" msgstr "" -#: participants/models.py:178 +#: participants/models.py msgid "none" msgstr "无" -#: participants/models.py:179 +#: participants/models.py msgid "swing" msgstr "" -#: participants/models.py:180 +#: participants/models.py msgid "composite" msgstr "" -#: participants/models.py:181 +#: participants/models.py msgid "bye" msgstr "轮空" -#: participants/models.py:184 +#: participants/models.py msgid "type" msgstr "" -#: participants/models.py:188 +#: participants/models.py msgid "emoji" msgstr "绘文字" -#: participants/models.py:202 participants/models.py:328 +#: participants/models.py msgid "team" msgstr "队伍" -#: participants/models.py:203 +#: participants/models.py msgid "teams" msgstr "队伍" -#: participants/models.py:311 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." msgstr "" -#: participants/models.py:313 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:315 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:333 +#: participants/models.py msgid "speaker" msgstr "讲员" -#: participants/models.py:334 +#: participants/models.py msgid "speakers" msgstr "讲员" -#: participants/models.py:357 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" msgstr "" -#: participants/models.py:359 +#: participants/models.py msgid "base score" msgstr "" -#: participants/models.py:368 +#: participants/models.py msgid "team conflicts" msgstr "" -#: participants/models.py:372 +#: participants/models.py msgid "adjudicator conflicts" msgstr "" -#: participants/models.py:375 +#: participants/models.py msgid "always trainee" msgstr "" -#: participants/models.py:376 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" msgstr "" -#: participants/models.py:378 +#: participants/models.py msgid "breaking" msgstr "有资格" -#: participants/models.py:380 +#: participants/models.py msgid "independent" msgstr "" -#: participants/models.py:382 +#: participants/models.py msgid "adjudication core" msgstr "" -#: participants/models.py:391 +#: participants/models.py msgid "adjudicator" msgstr "裁判" -#: participants/models.py:392 +#: participants/models.py msgid "adjudicators" msgstr "裁判" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" msgstr "" -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" msgstr "" -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" msgstr "" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" msgstr "" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" msgstr "" -#: participants/templates/adjudicator_registration_card.html:27 -#: participants/templates/team_registration_card.html:89 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:31 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" msgstr "" -#: participants/templates/adjudicator_registration_card.html:36 -#: participants/templates/team_registration_card.html:98 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "地区:" -#: participants/templates/adjudicator_registration_card.html:43 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." msgstr "" -#: participants/templates/adjudicator_registration_card.html:50 -#: participants/templates/team_registration_card.html:109 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:52 -#: participants/templates/team_registration_card.html:111 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr ";" -#: participants/templates/adjudicator_registration_card.html:54 -#: participants/templates/adjudicator_registration_card.html:62 -#: participants/templates/adjudicator_registration_card.html:74 -#: participants/templates/adjudicator_registration_card.html:84 -#: participants/templates/team_registration_card.html:58 -#: participants/templates/team_registration_card.html:70 -#: participants/templates/team_registration_card.html:79 -#: participants/templates/team_registration_card.html:113 -#: participants/templates/team_registration_card.html:122 -#: participants/templates/team_registration_card.html:133 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" msgstr "无" -#: participants/templates/adjudicator_registration_card.html:58 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:60 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:71 -#: participants/templates/adjudicator_registration_card.html:82 -#: participants/templates/team_registration_card.html:56 -#: participants/templates/team_registration_card.html:68 -#: participants/templates/team_registration_card.html:77 -#: participants/templates/team_registration_card.html:120 -#: participants/templates/team_registration_card.html:131 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr "," -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/team_registration_card.html:118 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:80 -#: participants/templates/team_registration_card.html:129 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" msgstr "" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:14 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." msgstr "" #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:21 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:33 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:41 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:47 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" msgstr "" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "队伍:" -#: participants/templates/current_round/common.html:28 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "裁判:" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" msgstr "Ⓒ" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" msgstr "Ⓣ" -#: participants/templates/current_round/common.html:44 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." msgstr "" -#: participants/templates/current_round/common.html:54 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." msgstr "" -#: participants/templates/current_round/common.html:57 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "话题:" -#: participants/templates/current_round/common.html:61 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "话题%(seq)s:" -#: participants/templates/current_round/common.html:69 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." msgstr "" -#: participants/templates/current_round/round_adj.html:14 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:18 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:24 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:28 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:36 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:40 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:46 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:50 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:85 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:89 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:95 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:99 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:107 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:111 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:117 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:121 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:129 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:133 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:139 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:143 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:39 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:43 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:56 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:60 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:66 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:70 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." msgstr "" -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" msgstr "" -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" msgstr "" -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:38 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" msgstr "" -#: participants/templates/feedback_progress_panel.html:46 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:53 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." msgstr "" -#: participants/templates/in_this_round.html:9 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" msgstr "" -#: participants/templates/in_this_round.html:13 +#: participants/templates/in_this_round.html msgid "In This Round" msgstr "" -#: participants/templates/in_this_round.html:16 +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" msgstr "" -#: participants/templates/in_this_round.html:23 +#: participants/templates/in_this_round.html msgid "Room TBA" msgstr "" -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:39 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:54 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." msgstr[0] "" -#: participants/templates/in_this_round.html:60 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." msgstr "" -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:79 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:91 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." msgstr "" -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" msgstr "" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" msgstr "" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." msgstr "" -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" msgstr "" -#: participants/templates/participants_subnav.html:26 participants/views.py:135 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" msgstr "代号" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" msgstr "" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" msgstr "" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." msgstr "" -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." msgstr "" -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" msgstr "" -#: participants/templates/team_registration_card.html:16 +#: participants/templates/team_registration_card.html msgid "Team name:" msgstr "队伍名称:" -#: participants/templates/team_registration_card.html:21 +#: participants/templates/team_registration_card.html msgid "Full team name:" msgstr "" -#: participants/templates/team_registration_card.html:25 +#: participants/templates/team_registration_card.html msgid "Short team name:" msgstr "" -#: participants/templates/team_registration_card.html:32 +#: participants/templates/team_registration_card.html msgid "Code name:" msgstr "代号:" -#: participants/templates/team_registration_card.html:36 +#: participants/templates/team_registration_card.html msgid "No code name assigned" msgstr "" -#: participants/templates/team_registration_card.html:42 +#: participants/templates/team_registration_card.html msgid "Emoji:" msgstr "" -#: participants/templates/team_registration_card.html:46 +#: participants/templates/team_registration_card.html msgid "No emoji assigned" msgstr "" -#: participants/templates/team_registration_card.html:54 +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "讲员:" -#: participants/templates/team_registration_card.html:66 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" msgstr "" -#: participants/templates/team_registration_card.html:75 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" msgstr "" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" msgstr "%(code_name)s(%(real_name)s)" -#: participants/views.py:46 +#: participants/views.py msgid "Adjudicators" msgstr "裁判" -#: participants/views.py:55 +#: participants/views.py msgid "Speakers" msgstr "讲员" -#: participants/views.py:86 +#: participants/views.py msgid "Institutions" msgstr "" -#: participants/views.py:102 +#: participants/views.py msgid "Code" msgstr "简写" -#: participants/views.py:103 +#: participants/views.py msgid "Full name" msgstr "全称" -#: participants/views.py:105 +#: participants/views.py msgid "Region" msgstr "地区" -#: participants/views.py:107 +#: participants/views.py msgid "Teams" msgstr "队伍" -#: participants/views.py:107 +#: participants/views.py msgid "Number of teams" msgstr "" -#: participants/views.py:109 +#: participants/views.py msgid "Adjs" msgstr "裁判" -#: participants/views.py:110 +#: participants/views.py msgid "Number of adjudicators, excluding independents" msgstr "" -#: participants/views.py:112 +#: participants/views.py msgid "IAs" msgstr "" -#: participants/views.py:113 +#: participants/views.py msgid "Number of independent adjudicators" msgstr "" -#: participants/views.py:143 +#: participants/views.py msgid "Code name" msgstr "代号" -#: participants/views.py:163 +#: participants/views.py msgid "Team Registration" msgstr "" -#: participants/views.py:231 +#: participants/views.py msgid "Results" msgstr "" -#: participants/views.py:239 participants/views.py:264 +#: participants/views.py #, python-format msgid "Record for %(name)s" msgstr "" -#: participants/views.py:261 +#: participants/views.py msgid "Previous Rounds" msgstr "" -#: participants/views.py:352 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" msgstr[0] "" -#: participants/views.py:358 +#: participants/views.py msgid "No changes were made to the categories." msgstr "" -#: participants/views.py:371 +#: participants/views.py msgid "Speaker Category Eligibility" msgstr "" diff --git a/tabbycat/printing/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/printing/locale/zh_Hans/LC_MESSAGES/django.po index 8e140def0e9..36729a90b62 100644 --- a/tabbycat/printing/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:18\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -18,109 +18,108 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" msgstr "" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" msgstr "" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." msgstr "" -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." msgstr "" -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" msgstr "" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" msgstr "" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" msgstr "" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" msgstr "" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" msgstr "" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" msgstr "" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" msgstr "" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" msgstr "" -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" msgstr "" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "" -#: printing/templates/scoresheet_list.html:47 +#: printing/templates/scoresheet_list.html msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." msgstr "" -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "话题" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" msgstr "" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." msgstr "" -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" msgstr "" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" msgstr "" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "队伍" diff --git a/tabbycat/privateurls/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/zh_Hans/LC_MESSAGES/django.po index 0d5f4a5b6d6..f3715e80e8a 100644 --- a/tabbycat/privateurls/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:49\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -18,167 +18,160 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" msgstr "" -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:145 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" msgstr "" -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." msgstr "" -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" msgstr "" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." msgstr "" -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." msgstr "" -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." msgstr "" -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." msgstr "" -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." msgstr "" -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." msgstr "" -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" msgstr "" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" msgstr "" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "(%(team)s)" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" msgstr "" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." msgstr "" -#: privateurls/templates/public_url_landing.html:62 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Submit Ballot for %(round)s" msgstr "" -#: privateurls/templates/public_url_landing.html:65 -msgid "There are no current rounds" -msgstr "" - -#: privateurls/templates/public_url_landing.html:71 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" msgstr "" -#: privateurls/templates/public_url_landing.html:84 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" msgstr "" -#: privateurls/views.py:63 privateurls/views.py:164 +#: privateurls/views.py msgid "no URL" msgstr "没有URL" -#: privateurls/views.py:76 +#: privateurls/views.py msgid "URL" msgstr "网址" -#: privateurls/views.py:87 +#: privateurls/views.py msgid "Speakers" msgstr "讲员" -#: privateurls/views.py:97 +#: privateurls/views.py msgid "Adjudicators" msgstr "裁判" -#: privateurls/views.py:119 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." msgstr "" -#: privateurls/views.py:126 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." msgstr[0] "" -#: privateurls/views.py:131 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." msgstr[0] "" -#: privateurls/views.py:172 +#: privateurls/views.py msgid "URL Key" msgstr "" -#: privateurls/views.py:181 +#: privateurls/views.py msgid "Debates" msgstr "辩论" diff --git a/tabbycat/results/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/results/locale/zh_Hans/LC_MESSAGES/django.po index 5e82ed1cdd7..5652b8a8fa3 100644 --- a/tabbycat/results/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:14\n" "Last-Translator: philip_tc\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -18,1072 +18,1065 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 948\n" -#: results/admin.py:44 +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py #, python-format msgid "Resaved results for %(count)d ballot submission." msgid_plural "Resaved results for %(count)d ballot submissions." msgstr[0] "" -#: results/admin.py:47 -msgid "Resave results" -msgstr "" - -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:158 +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" msgstr "" -#: results/forms.py:39 +#: results/forms.py msgid "Tournament password" msgstr "" -#: results/forms.py:45 +#: results/forms.py msgid "That password isn't correct." msgstr "" -#: results/forms.py:77 +#: results/forms.py msgid "Please enter a whole number." msgstr "" -#: results/forms.py:79 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." msgstr "" -#: results/forms.py:166 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." msgstr "" -#: results/forms.py:173 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." msgstr "" -#: results/forms.py:302 results/forms.py:336 +#: results/forms.py msgid "---------" msgstr "---------" -#: results/forms.py:304 results/forms.py:306 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" msgstr "" -#: results/forms.py:323 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" msgstr "" -#: results/forms.py:332 results/forms.py:901 +#: results/forms.py #, python-format msgid "%(team)s (%(side)s)" msgstr "%(team)s(%(side)s)" -#: results/forms.py:335 +#: results/forms.py msgid "Winner" msgstr "" -#: results/forms.py:489 +#: results/forms.py msgid "Mark as a duplicate speech" msgstr "" -#: results/forms.py:549 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." msgstr "" -#: results/forms.py:563 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." msgstr[0] "" -#: results/forms.py:580 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." msgstr "" -#: results/forms.py:587 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." msgstr "" -#: results/forms.py:719 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." msgstr "" -#: results/forms.py:724 +#: results/forms.py msgid "The declared winner does not correspond to the team with the highest score." msgstr "" -#: results/forms.py:733 +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" msgstr "" -#: results/forms.py:743 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:846 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:851 +#: results/forms.py #, python-format msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:859 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:921 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." msgstr "" -#: results/forms.py:964 +#: results/forms.py #, python-format msgid "There must be exactly %(n)d team advancing." msgid_plural "There must be exactly %(n)d teams advancing." msgstr[0] "" -#: results/forms.py:1007 +#: results/forms.py msgid "There must be exactly 1 team advancing." msgstr "" -#: results/models.py:33 +#: results/models.py msgid "Tab room" msgstr "" -#: results/models.py:34 +#: results/models.py msgid "Public" msgstr "" -#: results/models.py:38 +#: results/models.py msgid "timestamp" msgstr "时间戳" -#: results/models.py:40 +#: results/models.py msgid "version" msgstr "版本" -#: results/models.py:42 +#: results/models.py msgid "submitter type" msgstr "" -#: results/models.py:44 +#: results/models.py msgid "confirmed" msgstr "" -#: results/models.py:48 +#: results/models.py msgid "from private URL" msgstr "" -#: results/models.py:51 +#: results/models.py msgid "from participant" msgstr "" -#: results/models.py:56 +#: results/models.py msgid "submitter" msgstr "" -#: results/models.py:59 +#: results/models.py msgid "confirmer" msgstr "" -#: results/models.py:61 +#: results/models.py msgid "confirm timestamp" msgstr "" -#: results/models.py:63 +#: results/models.py msgid "IP address" msgstr "IP地址" -#: results/models.py:103 +#: results/models.py msgid "A tab room ballot must have a user associated." msgstr "" -#: results/models.py:111 +#: results/models.py msgid "debate" msgstr "辩论" -#: results/models.py:113 +#: results/models.py msgid "motion" msgstr "话题" -#: results/models.py:115 +#: results/models.py msgid "discarded" msgstr "" -#: results/models.py:117 +#: results/models.py msgid "single adjudicator" msgstr "" -#: results/models.py:118 +#: results/models.py msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." msgstr "" -#: results/models.py:123 results/models.py:228 results/models.py:267 -#: results/models.py:305 results/models.py:347 +#: results/models.py msgid "ballot submission" msgstr "" -#: results/models.py:124 +#: results/models.py msgid "ballot submissions" msgstr "" -#: results/models.py:143 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" msgstr "" -#: results/models.py:150 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" msgstr "" -#: results/models.py:230 results/models.py:269 +#: results/models.py msgid "debate adjudicator" msgstr "" -#: results/models.py:232 results/models.py:271 results/models.py:307 -#: results/models.py:349 +#: results/models.py msgid "debate team" msgstr "" -#: results/models.py:235 results/models.py:312 +#: results/models.py msgid "win" msgstr "胜利" -#: results/models.py:237 results/models.py:314 +#: results/models.py msgid "margin" msgstr "范围" -#: results/models.py:239 results/models.py:272 results/models.py:316 -#: results/models.py:352 +#: results/models.py msgid "score" msgstr "" -#: results/models.py:244 +#: results/models.py msgid "team score by adjudicator" msgstr "" -#: results/models.py:245 +#: results/models.py msgid "team scores by adjudicator" msgstr "" -#: results/models.py:260 results/models.py:294 +#: results/models.py msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." msgstr "" -#: results/models.py:273 results/models.py:353 +#: results/models.py msgid "position" msgstr "" -#: results/models.py:279 +#: results/models.py msgid "speaker score by adjudicator" msgstr "" -#: results/models.py:280 +#: results/models.py msgid "speaker scores by adjudicator" msgstr "" -#: results/models.py:310 +#: results/models.py msgid "points" msgstr "分" -#: results/models.py:318 +#: results/models.py msgid "votes given" msgstr "" -#: results/models.py:320 +#: results/models.py msgid "votes possible" msgstr "" -#: results/models.py:324 +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py msgid "team score" msgstr "" -#: results/models.py:325 +#: results/models.py msgid "team scores" msgstr "" -#: results/models.py:351 +#: results/models.py msgid "speaker" msgstr "讲员" -#: results/models.py:355 +#: results/models.py msgid "ghost" msgstr "" -#: results/models.py:356 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." msgstr "" -#: results/models.py:365 +#: results/models.py msgid "speaker score" msgstr "" -#: results/models.py:366 +#: results/models.py msgid "speaker scores" msgstr "" -#: results/models.py:375 +#: results/models.py msgid "The debate team and speaker must be from the same team." msgstr "" -#: results/models.py:378 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." msgstr "" -#: results/tables.py:15 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" msgstr "" -#: results/tables.py:36 +#: results/tables.py msgid "Status of this debate's ballot" msgstr "" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" msgstr "" -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" msgstr "" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" msgstr "" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" msgstr "" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" msgstr "" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the current round" msgstr "" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" msgstr "" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" msgstr "" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." msgstr "" -#: results/templates/admin_results.html:88 +#: results/templates/admin_results.html #, python-format msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." msgstr[0] "" -#: results/templates/admin_results.html:94 +#: results/templates/admin_results.html #, python-format msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." msgstr "" -#: results/templates/admin_results.html:113 +#: results/templates/admin_results.html msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." msgstr "" -#: results/templates/admin_results.html:127 +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." msgstr "" -#: results/templates/admin_results.html:135 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." msgstr "" -#: results/templates/admin_results.html:144 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/admin_results.html:151 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:12 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" msgstr "" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:17 -#: results/templates/ballot_entry_base.html:21 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" msgstr "" -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." msgstr "" -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html msgid "Confirm results" msgstr "" -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" msgstr "" -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:68 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." msgstr "" -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 results/views.py:513 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" msgstr "" -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "" -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." msgstr "" -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "" -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." msgstr[0] "" -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr[0] "" -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:42 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:45 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "排名" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" msgstr "范围" -#: results/templates/ballot/ballot_set.html:6 +#: results/templates/ballot/ballot_set.html msgid "There are some problems with this scoresheet. Please review and correct them." msgstr "" -#: results/templates/ballot/ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s (%(institution)s)" msgstr "" -#: results/templates/ballot/ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s" msgstr "" -#: results/templates/ballot/ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html msgid "Scoresheet" msgstr "" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Solo Chair" msgstr "單主席" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Chair" msgstr "主席" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Panellist" msgstr "成员" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Trainee" msgstr "实习生" -#: results/templates/ballot/ballot_set.html:44 +#: results/templates/ballot/ballot_set.html msgid "Assign sides before entering scores" msgstr "" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." msgstr "" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "There is %(number)s existing ballot set for this debate." msgid_plural "There are %(number)s existing ballot sets for this debate." msgstr[0] "" -#: results/templates/ballot/other_ballots_list.html:21 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." msgstr "" -#: results/templates/ballot/other_ballots_list.html:26 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." msgstr "" -#: results/templates/ballot/other_ballots_list.html:41 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:45 +#: results/templates/ballot/other_ballots_list.html msgid "MERGING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:48 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:53 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:58 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from %(adjudicator)s's private URL," msgstr "" -#: results/templates/ballot/other_ballots_list.html:62 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:68 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," msgstr "" -#: results/templates/ballot/other_ballots_list.html:73 +#: results/templates/ballot/other_ballots_list.html msgid "unknown" msgstr "" -#: results/templates/ballot/other_ballots_list.html:74 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "confirmed by %(confirmer)s" msgstr "" -#: results/templates/ballot/other_ballots_list.html:78 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" msgstr "" -#: results/templates/ballot/other_ballots_list.html:82 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" msgstr "" -#: results/templates/ballot/other_ballots_list.html:86 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" msgstr[0] "" -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." msgstr "" -#: results/templates/ballot_entry_base.html:30 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr "" -#: results/templates/ballot_entry_base.html:41 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." msgstr "" -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" msgstr "" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" msgstr "" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" msgstr "" -#: results/templates/debate_postponement_form.html:3 +#: results/templates/debate_postponement_form.html msgid "Postponed" msgstr "" -#: results/templates/debate_postponement_form.html:8 +#: results/templates/debate_postponement_form.html msgid "Postpone" msgstr "" -#: results/templates/enter_results.html:15 +#: results/templates/enter_results.html msgid "Ballot Status" msgstr "" -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" msgstr "" -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" msgstr "" -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" msgstr "" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" msgstr "" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" msgstr "" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." msgstr "" -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" msgstr "" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." msgstr "" -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" msgstr "" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" msgstr "您是谁?" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" msgstr "" -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." msgstr "" -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" msgstr "" -#: results/templates/public_ballot_set.html:28 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" msgstr "" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" msgstr "" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" msgstr "" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "话题" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" msgstr "" -#: results/templates/public_ballot_set.html:92 -#: results/templates/public_ballot_set.html:96 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:105 -#: results/templates/public_ballot_set.html:109 +#: results/templates/public_ballot_set.html #, python-format msgid "%(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Won" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Lost" msgstr "" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set_error.html #, python-format msgid "Back to the tournament home page." msgstr "" -#: results/templates/public_enter_results.html:9 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" msgstr "" -#: results/templates/public_enter_results.html:16 +#: results/templates/public_enter_results.html msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." msgstr "" -#: results/templates/public_enter_results.html:24 +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." msgstr[0] "" -#: results/templates/public_enter_results.html:63 -msgid "Submit Ballot(s)" -msgstr "" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" -#: results/templates/public_enter_results.html:65 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" msgstr "" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" msgstr "" -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" msgstr "" -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" msgstr "" -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" msgstr "" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" msgstr "" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." msgstr "" -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." msgstr "" -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" msgstr "" -#: results/utils.py:19 +#: results/utils.py msgid "Debate was Postponed" msgstr "" -#: results/utils.py:20 +#: results/utils.py msgid "Ballot is Unconfirmed" msgstr "" -#: results/utils.py:21 +#: results/utils.py msgid "Ballot is Confirmed" msgstr "" #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:36 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" msgstr "" -#: results/utils.py:43 +#: results/utils.py #, python-format msgid "%(team)s (%(side)s) won" msgstr "" #. Translators: The team here is the losing team -#: results/utils.py:45 +#: results/utils.py #, python-format msgid "vs %(team)s (%(side)s)" msgstr "" -#: results/utils.py:47 +#: results/utils.py #, python-format msgid "Advancing: %(advancing_list)s
    " msgstr "" -#: results/utils.py:50 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" msgstr "淘汰了:%(eliminated_list)s" -#: results/utils.py:58 +#: results/utils.py #, python-format msgid "1st: %(first_team)s
    " msgstr "" -#: results/utils.py:59 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" "4th: %(fourth_team)s" msgstr "" -#: results/utils.py:74 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" msgstr "" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:134 +#: results/utils.py msgid "PM" msgstr "首相" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:136 +#: results/utils.py msgid "DPM" msgstr "副首相" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:138 +#: results/utils.py msgid "LO" msgstr "反对党领袖" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:140 +#: results/utils.py msgid "DLO" msgstr "反对党副领袖" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:142 +#: results/utils.py msgid "MG" msgstr "政府成员" #. Translators: Abbreviation for Government Whip -#: results/utils.py:144 +#: results/utils.py msgid "GW" msgstr "政府党鞭" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:146 +#: results/utils.py msgid "MO" msgstr "反对党成员" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:148 +#: results/utils.py msgid "OW" msgstr "反对党党鞭" -#: results/utils.py:168 +#: results/utils.py msgid "Reply" msgstr "" -#: results/views.py:270 results/views.py:272 +#: results/views.py msgid " vs " msgstr "对" -#: results/views.py:273 +#: results/views.py #, python-format msgid "%(matchup)s: %(round)s @ %(room)s" msgstr "" -#: results/views.py:275 +#: results/views.py msgid "N/A" msgstr "不适用" -#: results/views.py:408 +#: results/views.py msgid "New Ballot Set" msgstr "" -#: results/views.py:411 +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." msgstr "" -#: results/views.py:413 results/views.py:480 +#: results/views.py msgid " Email receipts queued to be sent." msgstr "" -#: results/views.py:427 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." msgstr "" -#: results/views.py:433 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." msgstr "" -#: results/views.py:459 +#: results/views.py msgid "Edit Ballot Set" msgstr "" -#: results/views.py:473 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." msgstr "" -#: results/views.py:475 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." msgstr "" -#: results/views.py:477 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." msgstr "" -#: results/views.py:528 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." msgstr "" -#: results/views.py:535 +#: results/views.py msgid "The draw for this round hasn't been released yet." msgstr "" -#: results/views.py:539 +#: results/views.py msgid "The motions for this round haven't been released yet." msgstr "" -#: results/views.py:544 +#: results/views.py msgid "It looks like you don't have a debate this round." msgstr "" -#: results/views.py:546 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." msgstr "" -#: results/views.py:573 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:578 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:689 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." msgstr "" -#: results/views.py:707 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." msgstr "" -#: results/views.py:710 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." msgstr "" -#: results/views.py:714 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." msgstr "" -#: results/views.py:717 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." msgstr "" -#: results/views.py:739 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." msgstr "" -#: results/views.py:805 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" msgstr "" -#: results/views.py:809 +#: results/views.py msgid "Adjudicator" msgstr "裁判" -#: results/views.py:846 +#: results/views.py msgid "Merge Ballots" msgstr "" -#: results/views.py:877 +#: results/views.py msgid "The speaking order in the ballots is inconsistent, so could not be merged." msgstr "" -#: results/views.py:879 +#: results/views.py msgid "Duplicate speeches are marked inconsistently, so could not be merged." msgstr "" -#: results/views.py:880 +#: results/views.py #, python-format msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." msgstr "" diff --git a/tabbycat/standings/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/standings/locale/zh_Hans/LC_MESSAGES/django.po index 1ac32bbfc09..3ff7936450b 100644 --- a/tabbycat/standings/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-29 23:49-0400\n" -"PO-Revision-Date: 2020-12-30 04:10\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:01\n" "Last-Translator: philip_tc\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -18,604 +18,595 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 950\n" -#: standings/base.py:297 +#: standings/base.py msgid "The same metric would be added twice:" msgstr "" -#: standings/base.py:298 +#: standings/base.py msgid "The same ranking would be added twice:" msgstr "" -#: standings/base.py:414 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" msgstr "" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" msgstr "都" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" msgstr "有资格" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" msgstr "不%(category)s" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" msgstr "" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "主席" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" msgstr "成员" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" msgstr "实习生" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" msgstr "" -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" msgstr "" -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" msgstr "" -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" msgstr "" -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" msgstr "" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" msgstr "" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" msgstr "" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" msgstr "" -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" msgstr "平均分" -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" msgstr "" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" msgstr "" -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" msgstr "" -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" msgstr "" -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" msgstr "" -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" msgstr "" -#: standings/speakers.py:50 standings/speakers.py:106 +#: standings/speakers.py msgid "total" msgstr "" -#: standings/speakers.py:51 standings/speakers.py:107 +#: standings/speakers.py msgid "Total" msgstr "" -#: standings/speakers.py:58 standings/speakers.py:116 +#: standings/speakers.py msgid "average" msgstr "平均" -#: standings/speakers.py:59 standings/speakers.py:117 +#: standings/speakers.py msgid "Avg" msgstr "平均" -#: standings/speakers.py:66 +#: standings/speakers.py msgid "team points" msgstr "" -#: standings/speakers.py:67 +#: standings/speakers.py msgid "Team" msgstr "队伍" -#: standings/speakers.py:89 standings/speakers.py:126 +#: standings/speakers.py msgid "standard deviation" msgstr "标准差" -#: standings/speakers.py:90 standings/speakers.py:127 +#: standings/speakers.py msgid "Stdev" msgstr "标准差" -#: standings/speakers.py:98 +#: standings/speakers.py msgid "number of speeches given" msgstr "" -#: standings/speakers.py:99 standings/speakers.py:138 +#: standings/speakers.py msgid "Num" msgstr "" -#: standings/speakers.py:137 +#: standings/speakers.py msgid "replies given" msgstr "" -#: standings/speakers.py:147 +#: standings/speakers.py msgid "trimmed mean (high-low drop)" msgstr "" -#: standings/speakers.py:148 +#: standings/speakers.py msgid "Trim" msgstr "" -#: standings/teams.py:62 +#: standings/teams.py msgid "points" msgstr "分" -#: standings/teams.py:63 +#: standings/teams.py msgid "Pts" msgstr "分" -#: standings/teams.py:76 +#: standings/teams.py msgid "wins" msgstr "胜利数" -#: standings/teams.py:77 standings/views.py:592 +#: standings/teams.py standings/views.py msgid "Wins" msgstr "胜利数" -#: standings/teams.py:87 +#: standings/teams.py msgid "total speaker score" msgstr "" -#: standings/teams.py:88 +#: standings/teams.py msgid "Spk" msgstr "" -#: standings/teams.py:97 +#: standings/teams.py msgid "average total speaker score" msgstr "" -#: standings/teams.py:98 +#: standings/teams.py msgid "ATSS" msgstr "" -#: standings/teams.py:107 +#: standings/teams.py msgid "speaker score standard deviation" msgstr "" -#: standings/teams.py:108 +#: standings/teams.py msgid "SSD" msgstr "" -#: standings/teams.py:118 +#: standings/teams.py msgid "sum of margins" msgstr "范围总和" -#: standings/teams.py:119 +#: standings/teams.py msgid "Marg" msgstr "范围" -#: standings/teams.py:128 +#: standings/teams.py msgid "average margin" msgstr "平均范围" -#: standings/teams.py:129 +#: standings/teams.py msgid "AWM" msgstr "" -#: standings/teams.py:138 +#: standings/teams.py msgid "average individual speaker score" msgstr "" -#: standings/teams.py:139 +#: standings/teams.py msgid "AISS" msgstr "" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by wins" msgstr "" -#: standings/teams.py:212 +#: standings/teams.py msgid "DS" msgstr "" -#: standings/teams.py:219 +#: standings/teams.py msgid "draw strength by total speaker score" msgstr "" -#: standings/teams.py:220 +#: standings/teams.py msgid "DSS" msgstr "" -#: standings/teams.py:231 +#: standings/teams.py msgid "number of pullups before this round" msgstr "" -#: standings/teams.py:232 +#: standings/teams.py msgid "PU" msgstr "" -#: standings/teams.py:254 +#: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "" -#: standings/teams.py:255 +#: standings/teams.py msgid "Ballots" msgstr "" -#: standings/teams.py:256 +#: standings/teams.py msgid "votes/ballots carried" msgstr "" -#: standings/teams.py:280 +#: standings/teams.py msgid "number of firsts" msgstr "第一数" -#: standings/teams.py:281 +#: standings/teams.py msgid "1sts" msgstr "第一数" -#: standings/teams.py:290 +#: standings/teams.py msgid "number of seconds" msgstr "第二数" -#: standings/teams.py:291 +#: standings/teams.py msgid "2nds" msgstr "第二数" -#: standings/teams.py:300 +#: standings/teams.py msgid "number of thirds" msgstr "" -#: standings/teams.py:301 +#: standings/teams.py msgid "3rds" msgstr "" -#: standings/teams.py:313 +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py msgid "Who-beat-whom" msgstr "" -#: standings/teams.py:314 +#: standings/teams.py msgid "WBW" msgstr "" -#: standings/teams.py:315 +#: standings/teams.py msgid "who-beat-whom" msgstr "" -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." msgstr "" -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." msgstr "" -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." msgstr "" -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." msgstr "" -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." msgstr "" -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." msgstr "" -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." msgstr "" -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." msgstr "" -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." msgstr "" -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." msgstr "" -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" msgstr "" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." msgstr "" -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" msgstr "" -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" msgstr "" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" msgstr "" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" msgstr "" -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" msgstr "" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:152 -#: standings/templates/standings_index.html:167 -#: standings/templates/standings_index.html:186 +#: standings/templates/standings_index.html msgid "No data yet" msgstr "" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" msgstr "" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" msgstr "最大值的范围" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" msgstr "最近的范围" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" msgstr "" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" msgstr "" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" msgstr "" -#: standings/templates/standings_index.html:177 +#: standings/templates/standings_index.html msgid "Average Speaks" msgstr "" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" msgstr "" -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "队伍" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" msgstr "都" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" msgstr "讲员" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" msgstr "" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" msgstr "都" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "讲员" -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" msgstr "" -#: standings/templates/standings_menu.html:63 -#: standings/templates/standings_menu.html:76 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "话题" -#: standings/templates/standings_menu.html:66 +#: standings/templates/standings_menu.html msgid "By Round" msgstr "" -#: standings/templates/standings_menu.html:81 +#: standings/templates/standings_menu.html msgid "Diversity" msgstr "" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." msgstr "" -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " msgstr "" -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " msgstr "" -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " msgstr "" -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" msgstr "" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" msgstr "" -#: standings/views.py:208 standings/views.py:428 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." msgstr "" -#: standings/views.py:290 +#: standings/views.py msgid "Speaker Standings" msgstr "" -#: standings/views.py:326 +#: standings/views.py msgid "Speaker Tab" msgstr "" -#: standings/views.py:341 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" msgstr "" -#: standings/views.py:359 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" msgstr "" -#: standings/views.py:372 +#: standings/views.py msgid "Reply Speaker Standings" msgstr "" -#: standings/views.py:380 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." msgstr "" -#: standings/views.py:408 +#: standings/views.py msgid "Reply Speaker Tab" msgstr "" -#: standings/views.py:420 standings/views.py:669 +#: standings/views.py msgid "Team Standings" msgstr "" -#: standings/views.py:499 +#: standings/views.py msgid "Team Tab" msgstr "" -#: standings/views.py:518 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" msgstr "" -#: standings/views.py:545 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" msgstr "" -#: standings/views.py:556 +#: standings/views.py msgid "Current Team Standings" msgstr "" -#: standings/views.py:592 +#: standings/views.py msgid "Points" msgstr "分" -#: standings/views.py:638 +#: standings/views.py msgid "Feedback Overview" msgstr "" -#: standings/views.py:655 -msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." msgstr "" diff --git a/tabbycat/tournaments/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/zh_Hans/LC_MESSAGES/django.po index 3833662c5b4..98b6168e55f 100644 --- a/tabbycat/tournaments/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -18,1024 +18,1014 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "比赛" -#: tournaments/forms.py:29 +#: tournaments/forms.py msgid "Number of preliminary rounds" msgstr "" -#: tournaments/forms.py:34 +#: tournaments/forms.py msgid "Number of teams in the open break" msgstr "" -#: tournaments/forms.py:35 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." msgstr "" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Did you agree with their decision?" msgstr "" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Agree?" msgstr "同意吗?" -#: tournaments/forms.py:47 +#: tournaments/forms.py msgid "Comments" msgstr "" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:61 +#: tournaments/forms.py msgid "Open" msgstr "" -#: tournaments/forms.py:86 +#: tournaments/forms.py msgid "Format Configuration" msgstr "" -#: tournaments/forms.py:87 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" msgstr "" -#: tournaments/forms.py:91 +#: tournaments/forms.py msgid "Public Configuration" msgstr "" -#: tournaments/forms.py:92 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" msgstr "" -#: tournaments/forms.py:99 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" msgstr "" -#: tournaments/forms.py:195 +#: tournaments/forms.py msgid "Current preliminary round" msgstr "" -#: tournaments/forms.py:196 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" msgstr "" -#: tournaments/forms.py:208 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" msgstr "" -#: tournaments/forms.py:214 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" msgstr "" -#: tournaments/forms.py:226 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." msgstr "" -#: tournaments/forms.py:232 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." msgstr "" -#: tournaments/forms.py:267 +#: tournaments/forms.py #, python-format msgid "%(name)s (%(abbreviation)s)" msgstr "" -#: tournaments/mixins.py:109 +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." msgstr "" -#: tournaments/mixins.py:117 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." msgstr "" -#: tournaments/mixins.py:130 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." msgstr "" -#: tournaments/mixins.py:137 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." msgstr "" -#: tournaments/mixins.py:236 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" msgstr "" -#: tournaments/mixins.py:437 +#: tournaments/mixins.py msgid "Return to Draw" msgstr "" -#: tournaments/models.py:26 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." msgstr "" -#: tournaments/models.py:33 tournaments/models.py:320 +#: tournaments/models.py msgid "name" msgstr "名称" -#: tournaments/models.py:34 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" msgstr "" -#: tournaments/models.py:36 +#: tournaments/models.py msgid "short name" msgstr "" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" msgstr "" -#: tournaments/models.py:39 tournaments/models.py:314 +#: tournaments/models.py msgid "sequence number" msgstr "" -#: tournaments/models.py:40 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." msgstr "" -#: tournaments/models.py:42 +#: tournaments/models.py msgid "slug" msgstr "" -#: tournaments/models.py:43 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" msgstr "" -#: tournaments/models.py:44 +#: tournaments/models.py msgid "active" msgstr "现行" -#: tournaments/models.py:47 tournaments/models.py:313 +#: tournaments/models.py msgid "tournament" msgstr "比赛" -#: tournaments/models.py:48 +#: tournaments/models.py msgid "tournaments" msgstr "比赛" -#: tournaments/models.py:285 +#: tournaments/models.py msgid "Random" msgstr "" -#: tournaments/models.py:286 +#: tournaments/models.py msgid "Manual" msgstr "" -#: tournaments/models.py:287 +#: tournaments/models.py msgid "Round-robin" msgstr "" -#: tournaments/models.py:288 +#: tournaments/models.py msgid "Power-paired" msgstr "实力匹配" -#: tournaments/models.py:289 tournaments/models.py:296 +#: tournaments/models.py msgid "Elimination" msgstr "淘汰" -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Preliminary" msgstr "预" -#: tournaments/models.py:305 +#: tournaments/models.py msgid "None" msgstr "无" -#: tournaments/models.py:306 +#: tournaments/models.py msgid "Draft" msgstr "草稿" -#: tournaments/models.py:307 +#: tournaments/models.py msgid "Confirmed" msgstr "" -#: tournaments/models.py:308 +#: tournaments/models.py msgid "Released" msgstr "" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" msgstr "" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "completed" msgstr "" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" msgstr "" -#: tournaments/models.py:320 +#: tournaments/models.py msgid "e.g. \"Round 1\"" msgstr "" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "abbreviation" msgstr "" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "e.g. \"R1\"" msgstr "例如“R1”" -#: tournaments/models.py:323 +#: tournaments/models.py msgid "stage" msgstr "" -#: tournaments/models.py:324 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" msgstr "" -#: tournaments/models.py:326 +#: tournaments/models.py msgid "draw type" msgstr "" -#: tournaments/models.py:327 +#: tournaments/models.py msgid "Which draw method to use" msgstr "" -#: tournaments/models.py:330 +#: tournaments/models.py msgid "break category" msgstr "类别的资格" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "If elimination round, which break category" msgstr "" -#: tournaments/models.py:334 +#: tournaments/models.py msgid "draw status" msgstr "" -#: tournaments/models.py:335 +#: tournaments/models.py msgid "The status of this round's draw" msgstr "" -#: tournaments/models.py:338 +#: tournaments/models.py msgid "feedback weight" msgstr "" -#: tournaments/models.py:340 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." msgstr "" #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:343 +#: tournaments/models.py msgid "silent" msgstr "" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." msgstr "" -#: tournaments/models.py:346 +#: tournaments/models.py msgid "motions released" msgstr "" -#: tournaments/models.py:347 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" msgstr "" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "starts at" msgstr "" -#: tournaments/models.py:351 +#: tournaments/models.py msgid "weight" msgstr "" -#: tournaments/models.py:352 +#: tournaments/models.py msgid "A factor for the points received in the round. For example, if 2, all points are doubled." msgstr "" -#: tournaments/models.py:355 +#: tournaments/models.py msgid "round" msgstr "赛" -#: tournaments/models.py:356 +#: tournaments/models.py msgid "rounds" msgstr "赛" -#: tournaments/models.py:369 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:372 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:377 +#: tournaments/models.py msgid "Elimination rounds must have a break category." msgstr "" -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" msgstr "" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" msgstr "" -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" msgstr "" -#: tournaments/templates/blank_site_start.html:7 -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" msgstr "" -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." msgstr "" -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." msgstr "" -#: tournaments/templates/blank_site_start.html:32 +#: tournaments/templates/blank_site_start.html msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." msgstr "" -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" msgstr "" -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" msgstr "" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." msgstr "" -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." msgstr "" -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" msgstr "" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." msgstr "" -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" msgstr "" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." msgstr "" -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" msgstr "" -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" msgstr "" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." msgstr "" -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." msgstr "" -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." msgstr "" -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." msgstr "" -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" msgstr "" -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" +msgid "Teams on %(side)s" msgstr "" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" msgstr "没有队伍" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" msgstr "" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." msgstr "" -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." msgstr "" -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" msgstr "方" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:203 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" msgstr "" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" msgstr "" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" msgstr "" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "话题" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" msgstr "" -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" msgstr "%(category)s的资格" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" msgstr "有资格的裁判" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" msgstr "" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" msgstr "" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" msgstr "" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" msgstr "" -#: tournaments/templates/public_tournament_index.html:188 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Enter Ballot for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:195 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" msgstr "" -#: tournaments/templates/public_tournament_index.html:217 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" msgstr "" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" msgstr "" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" msgstr "" -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." msgstr "" -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" msgstr "" -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" msgstr "" -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" msgstr "" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" msgstr "" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" msgstr "" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" msgstr "" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." msgstr[0] "" -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" msgstr "" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." msgstr[0] "" -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " msgstr "" -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "" -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" msgstr "" -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" msgstr "" -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "" -#: tournaments/templates/set_round_weights.html:4 -#: tournaments/templates/set_round_weights.html:5 +#: tournaments/templates/set_round_weights.html msgctxt "page title" -msgid "Set Round Weights" +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: tournaments/templates/set_round_weights.html:8 +#: tournaments/templates/set_round_weights.html msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." msgstr "" -#: tournaments/templates/set_round_weights.html:41 +#: tournaments/templates/set_round_weights.html msgctxt "button" msgid "Set weights" msgstr "" -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:47 -msgid "Inactive Tournaments" -msgstr "" - -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/site_index.html msgid "Welcome!" msgstr "欢迎光临!" -#: tournaments/templates/site_index.html:21 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" msgstr "" -#: tournaments/templates/site_index.html:30 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:34 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:55 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html msgid "New Tournament" msgstr "" -#: tournaments/templates/site_index.html:58 +#: tournaments/templates/site_index.html msgid "Edit Database Area" msgstr "" -#: tournaments/templates/site_index.html:61 +#: tournaments/templates/site_index.html msgid "Send a Test Email" msgstr "" -#: tournaments/templates/site_index.html:64 +#: tournaments/templates/site_index.html msgid "Import DebateXML" msgstr "" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Get API Token / Change Password (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:77 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" msgstr "登出(%(user)s)" -#: tournaments/templates/site_index.html:83 +#: tournaments/templates/site_index.html msgid "Log In as Admin" msgstr "登录的管理" -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." msgstr "" -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" msgstr "" -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." msgstr "" #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." msgstr "" -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." msgstr "" -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" +msgid "Mark participants as available to prepare a draw for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" +msgid "Go to the results area to enter ballots for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:74 +#: tournaments/templates/tournament_index.html msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." msgstr "" -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" msgstr "" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" msgstr "" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" msgstr "" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" msgstr "" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" msgstr "" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" msgstr "" -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" msgstr "" -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" msgstr "政府" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" msgstr "反对党" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" msgstr "政府队伍" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" msgstr "反对党队伍" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" msgstr "政府" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" msgstr "反对党" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" msgstr "" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" msgstr "" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" msgstr "" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" msgstr "" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" msgstr "" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" msgstr "" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" msgstr "" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" msgstr "" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" msgstr "" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" msgstr "" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" msgstr "" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" msgstr "" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" msgstr "" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" msgstr "" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" msgstr "" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "上议院政府" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "上议院反对党" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "下议院政府" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "下议院反对党" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" msgstr "上议院政府队伍" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" msgstr "上议院反对党队伍" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" msgstr "下议院政府队伍" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" msgstr "下议院反对党队伍" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "上政府" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "上反对党" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "下政府" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "下反对党" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "赛%(number)d" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" msgstr "赛%(number)d" -#: tournaments/views.py:151 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" msgstr "" -#: tournaments/views.py:157 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." msgstr "" -#: tournaments/views.py:170 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." msgstr "" -#: tournaments/views.py:176 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." msgstr "" -#: tournaments/views.py:184 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" msgstr "" -#: tournaments/views.py:201 +#: tournaments/views.py msgid "8-team generic dataset" msgstr "" -#: tournaments/views.py:202 +#: tournaments/views.py msgid "24-team Australs dataset" msgstr "" -#: tournaments/views.py:203 +#: tournaments/views.py msgid "88-team BP dataset" msgstr "" -#: tournaments/views.py:288 -msgid "Successfully set round weights." +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." msgstr "" diff --git a/tabbycat/utils/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/utils/locale/zh_Hans/LC_MESSAGES/django.po index c8c2305631b..40f84a67f39 100644 --- a/tabbycat/utils/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:49\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -18,303 +18,310 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "Email address" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "赛" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "队伍" + +#: utils/admin.py +msgid "Speaker" +msgstr "讲员" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "比赛" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "方" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "话题" + +#: utils/admin.py +msgid "Confirmed" msgstr "" -#: utils/tables.py:47 +#: utils/admin.py +msgid "Adjudicator" +msgstr "裁判" + +#: utils/tables.py msgid "No Data Available" msgstr "" -#: utils/tables.py:155 utils/tables.py:156 +#: utils/tables.py msgid "Ⓒ" msgstr "Ⓒ" -#: utils/tables.py:157 +#: utils/tables.py msgid "Ⓣ" msgstr "Ⓣ" -#: utils/tables.py:161 +#: utils/tables.py msgid "chair" msgstr "主席" -#: utils/tables.py:162 +#: utils/tables.py msgid "panellist" msgstr "成员" -#: utils/tables.py:163 +#: utils/tables.py msgid "trainee" msgstr "实习生" -#: utils/tables.py:166 +#: utils/tables.py msgid "—" msgstr "—" -#: utils/tables.py:167 +#: utils/tables.py msgid "Redacted" msgstr "" -#: utils/tables.py:231 utils/tables.py:237 +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" msgstr "" -#: utils/tables.py:247 utils/tables.py:252 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" msgstr "" -#: utils/tables.py:274 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" msgstr "代号:%(name)s" -#: utils/tables.py:276 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" msgstr "" -#: utils/tables.py:296 +#: utils/tables.py #, python-format msgid "%(team)s won" msgstr "%(team)s获胜了" -#: utils/tables.py:301 +#: utils/tables.py #, python-format msgid "%(team)s lost" msgstr "%(team)s败北了" -#: utils/tables.py:306 utils/tables.py:318 utils/tables.py:342 +#: utils/tables.py #, python-format msgid "%(team)s—no result" msgstr "" -#: utils/tables.py:323 +#: utils/tables.py #, python-format msgid "%(team)s placed %(place)s" msgstr "" -#: utils/tables.py:332 +#: utils/tables.py #, python-format msgid "%(team)s is advancing" msgstr "%(team)s在推进" -#: utils/tables.py:337 +#: utils/tables.py #, python-format msgid "%(team)s was eliminated" msgstr "%(team)s淘汰了" -#: utils/tables.py:350 +#: utils/tables.py msgid "View/edit debate ballot" msgstr "" -#: utils/tables.py:356 +#: utils/tables.py msgid "View debate ballot" msgstr "" -#: utils/tables.py:369 +#: utils/tables.py #, python-format msgid " vs %(opposition)s" msgstr "对%(opposition)s" -#: utils/tables.py:376 +#: utils/tables.py #, python-format msgid "Won against %(team)s" msgstr "" -#: utils/tables.py:378 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" msgstr "败北了给%(team)s" -#: utils/tables.py:380 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" msgstr "" -#: utils/tables.py:405 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" msgstr "" -#: utils/tables.py:412 +#: utils/tables.py msgid "Teams in debate:" msgstr "" -#: utils/tables.py:415 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "%(team)s(%(side)s)" -#: utils/tables.py:416 utils/tables.py:420 utils/tables.py:446 -#: utils/tables.py:618 +#: utils/tables.py msgid "??" msgstr "??" -#: utils/tables.py:434 +#: utils/tables.py msgid "advancing" msgstr "在推进" -#: utils/tables.py:435 +#: utils/tables.py msgid "Advancing" msgstr "在推进" -#: utils/tables.py:437 +#: utils/tables.py msgid "eliminated" msgstr "淘汰了" -#: utils/tables.py:438 +#: utils/tables.py msgid "Eliminated" msgstr "淘汰了" -#: utils/tables.py:441 utils/tables.py:451 +#: utils/tables.py msgid "No result for debate" msgstr "" -#: utils/tables.py:448 +#: utils/tables.py #, python-format msgid "Placed %(place)s" msgstr "" -#: utils/tables.py:463 -msgid "Tournament" -msgstr "比赛" - -#: utils/tables.py:472 -msgid "Round" -msgstr "赛" - -#: utils/tables.py:495 utils/tables.py:672 +#: utils/tables.py msgid "Name" msgstr "名字" -#: utils/tables.py:501 utils/tables.py:650 +#: utils/tables.py msgid "Institution" msgstr "" -#: utils/tables.py:507 +#: utils/tables.py msgid "Member of the Adjudication Core" msgstr "" -#: utils/tables.py:514 +#: utils/tables.py msgid "Independent Adjudicator" msgstr "" -#: utils/tables.py:522 +#: utils/tables.py msgid "Always Trainee" msgstr "" -#: utils/tables.py:557 +#: utils/tables.py msgid "in minority" msgstr "" -#: utils/tables.py:590 +#: utils/tables.py msgid "Debate Adjudicators" msgstr "" -#: utils/tables.py:621 -msgid "Motion" -msgstr "话题" - -#: utils/tables.py:636 -msgid "Team" -msgstr "队伍" - -#: utils/tables.py:641 utils/tables.py:694 +#: utils/tables.py msgid "Categories" msgstr "类别" -#: utils/tables.py:692 +#: utils/tables.py msgid "Category" msgstr "类别" -#: utils/tables.py:719 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." msgstr "" -#: utils/tables.py:721 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." msgstr "" -#: utils/tables.py:736 +#: utils/tables.py msgid "Room" msgstr "房间" -#: utils/tables.py:754 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" msgstr[0] "" -#: utils/tables.py:760 +#: utils/tables.py msgid "Teams are from the same institution" msgstr "" -#: utils/tables.py:766 +#: utils/tables.py msgid "Conflicts/Flags" msgstr "" -#: utils/tables.py:819 +#: utils/tables.py msgid "The confirmed ballot" msgstr "" -#: utils/tables.py:824 utils/tables.py:849 +#: utils/tables.py msgid "No ballot" msgstr "" -#: utils/tables.py:826 utils/tables.py:851 +#: utils/tables.py msgid "No scores" msgstr "" -#: utils/tables.py:829 utils/tables.py:854 utils/tables.py:866 +#: utils/tables.py msgid "View Ballot" msgstr "" -#: utils/tables.py:836 +#: utils/tables.py msgid "The ballot you submitted" msgstr "" -#: utils/tables.py:840 +#: utils/tables.py msgid "View/Edit Ballot" msgstr "" -#: utils/tables.py:874 +#: utils/tables.py msgid "Result" msgstr "" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:880 +#: utils/tables.py msgid "TBC" msgstr "待定" -#: utils/tables.py:881 -msgid "Side" -msgstr "方" - -#: utils/tables.py:919 -msgid "Team iron-manned this round and the last." +#: utils/tables.py +msgid "Team iron-personed this round and the last." msgstr "" -#: utils/tables.py:922 -msgid "Team iron-manned this round." +#: utils/tables.py +msgid "Team iron-personed this round." msgstr "" -#: utils/tables.py:925 -msgid "Team iron-manned last round." +#: utils/tables.py +msgid "Team iron-personed last round." msgstr "" -#: utils/tables.py:942 utils/tables.py:943 +#: utils/tables.py #, python-format msgid "Team %(num)d" msgstr "队伍 %(num)d" -#: utils/tables.py:950 +#: utils/tables.py msgid "Postpone" msgstr "" -#: utils/views.py:38 +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." msgstr "" diff --git a/tabbycat/venues/locale/zh_Hans/LC_MESSAGES/django.po b/tabbycat/venues/locale/zh_Hans/LC_MESSAGES/django.po index 4f89debf381..94f8de04009 100644 --- a/tabbycat/venues/locale/zh_Hans/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-05 15:26-0300\n" -"PO-Revision-Date: 2020-07-10 07:04\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" "Last-Translator: philip_tc\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -18,203 +18,201 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 +#: venues/apps.py msgid "Rooms" msgstr "房间" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." msgstr "" -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." msgstr "" -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." msgstr "" -#: venues/models.py:9 venues/models.py:66 +#: venues/models.py msgid "name" msgstr "名称" -#: venues/models.py:11 venues/models.py:120 +#: venues/models.py msgid "priority" msgstr "" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" msgstr "" -#: venues/models.py:15 venues/models.py:78 +#: venues/models.py msgid "tournament" msgstr "比赛" -#: venues/models.py:16 +#: venues/models.py msgid "URL" msgstr "网址" -#: venues/models.py:17 +#: venues/models.py msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" msgstr "" -#: venues/models.py:24 +#: venues/models.py msgid "room" msgstr "房间" -#: venues/models.py:25 venues/models.py:76 +#: venues/models.py msgid "rooms" msgstr "房间" -#: venues/models.py:61 +#: venues/models.py msgid "Don't display in room name" msgstr "" -#: venues/models.py:62 +#: venues/models.py msgid "Display as prefix" msgstr "" -#: venues/models.py:63 +#: venues/models.py msgid "Display as suffix" msgstr "" -#: venues/models.py:67 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." msgstr "" -#: venues/models.py:71 +#: venues/models.py msgid "description" msgstr "" -#: venues/models.py:72 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." msgstr "" -#: venues/models.py:82 +#: venues/models.py msgid "display in room name" msgstr "" -#: venues/models.py:83 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" msgstr "" -#: venues/models.py:85 +#: venues/models.py msgid "display in public tooltip" msgstr "" -#: venues/models.py:86 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." msgstr "" -#: venues/models.py:90 +#: venues/models.py msgid "room category" msgstr "" -#: venues/models.py:91 +#: venues/models.py msgid "room categories" msgstr "" -#: venues/models.py:119 +#: venues/models.py msgid "category" msgstr "类别" -#: venues/models.py:123 +#: venues/models.py msgid "subject content type" msgstr "" -#: venues/models.py:126 +#: venues/models.py msgid "subject ID" msgstr "" -#: venues/models.py:132 +#: venues/models.py msgid "room constraint" msgstr "" -#: venues/models.py:133 +#: venues/models.py msgid "room constraints" msgstr "" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" msgstr "" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." msgstr "" -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." msgstr "" -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" msgstr "" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" msgstr "" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." msgstr "" -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" msgstr "" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" msgstr "" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" msgstr "" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" msgstr "" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" msgstr "" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" msgstr "" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" msgstr[0] "" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." msgstr "" -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "%s(裁判)" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" msgstr "%s(队伍)" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" msgstr "" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." From 0ad61a6ac1a7c22b9a25c28a8682fbc93d7dcbba Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Mon, 29 Nov 2021 13:16:07 +1100 Subject: [PATCH 207/255] New translations django.po (Czech) --- docs/locale/cs/LC_MESSAGES/about/authors.po | 72 + docs/locale/cs/LC_MESSAGES/about/changelog.po | 1922 +++++++++++++++++ .../cs/LC_MESSAGES/about/contributing.po | 352 +++ docs/locale/cs/LC_MESSAGES/about/licence.po | 80 + docs/locale/cs/LC_MESSAGES/about/support.po | 56 + .../LC_MESSAGES/about/tournament-history.po | 248 +++ .../features/adjudicator-allocation.po | 160 ++ .../features/adjudicator-feedback.po | 258 +++ .../locale/cs/LC_MESSAGES/features/backups.po | 120 + docs/locale/cs/LC_MESSAGES/features/breaks.po | 212 ++ .../cs/LC_MESSAGES/features/check-ins.po | 136 ++ .../cs/LC_MESSAGES/features/data-entry.po | 168 ++ .../cs/LC_MESSAGES/features/data-importers.po | 272 +++ .../features/draw-generation-bp.po | 598 +++++ .../LC_MESSAGES/features/draw-generation.po | 436 ++++ .../cs/LC_MESSAGES/features/notifications.po | 257 +++ .../LC_MESSAGES/features/preformed-panels.po | 176 ++ .../cs/LC_MESSAGES/features/printing.po | 68 + .../LC_MESSAGES/features/standings-rules.po | 272 +++ .../LC_MESSAGES/features/team-code-names.po | 104 + .../cs/LC_MESSAGES/features/user-accounts.po | 196 ++ .../LC_MESSAGES/features/venue-constraints.po | 168 ++ .../cs/LC_MESSAGES/guide/comparisons.po | 338 +++ docs/locale/cs/LC_MESSAGES/guide/scaling.po | 252 +++ .../LC_MESSAGES/guide/tournament-logistics.po | 1394 ++++++++++++ docs/locale/cs/LC_MESSAGES/guide/upgrading.po | 60 + docs/locale/cs/LC_MESSAGES/index.po | 48 + docs/locale/cs/LC_MESSAGES/install/docker.po | 173 ++ docs/locale/cs/LC_MESSAGES/install/heroku.po | 445 ++++ docs/locale/cs/LC_MESSAGES/install/linux.po | 249 +++ docs/locale/cs/LC_MESSAGES/install/local.po | 156 ++ docs/locale/cs/LC_MESSAGES/install/osx.po | 216 ++ docs/locale/cs/LC_MESSAGES/install/windows.po | 317 +++ docs/locale/cs/LC_MESSAGES/install/wsl.po | 100 + .../LC_MESSAGES/use/finishing-a-tournament.po | 80 + .../cs/LC_MESSAGES/use/importing-data.po | 236 ++ .../LC_MESSAGES/use/running-a-tournament.po | 196 ++ .../LC_MESSAGES/use/starting-a-tournament.po | 196 ++ .../actionlog/locale/cs/LC_MESSAGES/django.po | 323 +++ .../locale/cs/LC_MESSAGES/django.po | 475 ++++ .../locale/cs/LC_MESSAGES/django.po | 998 +++++++++ .../locale/cs/LC_MESSAGES/django.po | 426 ++++ .../breakqual/locale/cs/LC_MESSAGES/django.po | 529 +++++ tabbycat/draw/locale/cs/LC_MESSAGES/django.po | 1169 ++++++++++ .../importer/locale/cs/LC_MESSAGES/django.po | 437 ++++ tabbycat/locale/cs/LC_MESSAGES/django.po | 959 ++++++++ tabbycat/locale/cs/LC_MESSAGES/djangojs.po | 554 +++++ .../motions/locale/cs/LC_MESSAGES/django.po | 433 ++++ .../locale/cs/LC_MESSAGES/django.po | 418 ++++ .../options/locale/cs/LC_MESSAGES/django.po | 1618 ++++++++++++++ .../locale/cs/LC_MESSAGES/django.po | 978 +++++++++ .../printing/locale/cs/LC_MESSAGES/django.po | 125 ++ .../locale/cs/LC_MESSAGES/django.po | 183 ++ .../results/locale/cs/LC_MESSAGES/django.po | 1113 ++++++++++ .../standings/locale/cs/LC_MESSAGES/django.po | 612 ++++++ .../locale/cs/LC_MESSAGES/django.po | 1037 +++++++++ .../utils/locale/cs/LC_MESSAGES/django.po | 330 +++ .../venues/locale/cs/LC_MESSAGES/django.po | 226 ++ 58 files changed, 23730 insertions(+) create mode 100644 docs/locale/cs/LC_MESSAGES/about/authors.po create mode 100644 docs/locale/cs/LC_MESSAGES/about/changelog.po create mode 100644 docs/locale/cs/LC_MESSAGES/about/contributing.po create mode 100644 docs/locale/cs/LC_MESSAGES/about/licence.po create mode 100644 docs/locale/cs/LC_MESSAGES/about/support.po create mode 100644 docs/locale/cs/LC_MESSAGES/about/tournament-history.po create mode 100644 docs/locale/cs/LC_MESSAGES/features/adjudicator-allocation.po create mode 100644 docs/locale/cs/LC_MESSAGES/features/adjudicator-feedback.po create mode 100644 docs/locale/cs/LC_MESSAGES/features/backups.po create mode 100644 docs/locale/cs/LC_MESSAGES/features/breaks.po create mode 100644 docs/locale/cs/LC_MESSAGES/features/check-ins.po create mode 100644 docs/locale/cs/LC_MESSAGES/features/data-entry.po create mode 100644 docs/locale/cs/LC_MESSAGES/features/data-importers.po create mode 100644 docs/locale/cs/LC_MESSAGES/features/draw-generation-bp.po create mode 100644 docs/locale/cs/LC_MESSAGES/features/draw-generation.po create mode 100644 docs/locale/cs/LC_MESSAGES/features/notifications.po create mode 100644 docs/locale/cs/LC_MESSAGES/features/preformed-panels.po create mode 100644 docs/locale/cs/LC_MESSAGES/features/printing.po create mode 100644 docs/locale/cs/LC_MESSAGES/features/standings-rules.po create mode 100644 docs/locale/cs/LC_MESSAGES/features/team-code-names.po create mode 100644 docs/locale/cs/LC_MESSAGES/features/user-accounts.po create mode 100644 docs/locale/cs/LC_MESSAGES/features/venue-constraints.po create mode 100644 docs/locale/cs/LC_MESSAGES/guide/comparisons.po create mode 100644 docs/locale/cs/LC_MESSAGES/guide/scaling.po create mode 100644 docs/locale/cs/LC_MESSAGES/guide/tournament-logistics.po create mode 100644 docs/locale/cs/LC_MESSAGES/guide/upgrading.po create mode 100644 docs/locale/cs/LC_MESSAGES/index.po create mode 100644 docs/locale/cs/LC_MESSAGES/install/docker.po create mode 100644 docs/locale/cs/LC_MESSAGES/install/heroku.po create mode 100644 docs/locale/cs/LC_MESSAGES/install/linux.po create mode 100644 docs/locale/cs/LC_MESSAGES/install/local.po create mode 100644 docs/locale/cs/LC_MESSAGES/install/osx.po create mode 100644 docs/locale/cs/LC_MESSAGES/install/windows.po create mode 100644 docs/locale/cs/LC_MESSAGES/install/wsl.po create mode 100644 docs/locale/cs/LC_MESSAGES/use/finishing-a-tournament.po create mode 100644 docs/locale/cs/LC_MESSAGES/use/importing-data.po create mode 100644 docs/locale/cs/LC_MESSAGES/use/running-a-tournament.po create mode 100644 docs/locale/cs/LC_MESSAGES/use/starting-a-tournament.po create mode 100644 tabbycat/actionlog/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/adjallocation/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/adjfeedback/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/availability/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/breakqual/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/draw/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/importer/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/locale/cs/LC_MESSAGES/djangojs.po create mode 100644 tabbycat/motions/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/notifications/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/options/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/participants/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/printing/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/privateurls/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/results/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/standings/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/tournaments/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/utils/locale/cs/LC_MESSAGES/django.po create mode 100644 tabbycat/venues/locale/cs/LC_MESSAGES/django.po diff --git a/docs/locale/cs/LC_MESSAGES/about/authors.po b/docs/locale/cs/LC_MESSAGES/about/authors.po new file mode 100644 index 00000000000..1a84e7d64e4 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/about/authors.po @@ -0,0 +1,72 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:56\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/authors.po\n" +"X-Crowdin-File-ID: 1259\n" +"Language: cs_CZ\n" + +#: ../../../AUTHORS.rst:3 +msgid "Authors & Acknowledgements" +msgstr "" + +#: ../../../AUTHORS.rst:6 +msgid "Authors" +msgstr "" + +#: ../../../AUTHORS.rst:8 +msgid "Tabbycat was authored by Qi-Shan Lim for Auckland Australs 2010. The current active maintainers are:" +msgstr "" + +#: ../../../AUTHORS.rst:10 +msgid "Philip Belesky (`pb-e-mail `_)" +msgstr "" + +#: ../../../AUTHORS.rst:11 +msgid "Chuan-Zheng Lee (`cz-e-mail `_)" +msgstr "" + +#: ../../../AUTHORS.rst:13 +msgid "Please don't hesitate to contact us with any suggestions, expressions of interest or generally anything relating to Tabbycat." +msgstr "" + +#: ../../../AUTHORS.rst:16 +msgid "Contributors" +msgstr "" + +#: ../../../AUTHORS.rst:18 +msgid "Étienne Beaulé has contributed many features, fixes, and suggestions across many aspects of Tabbycat." +msgstr "" + +#: ../../../AUTHORS.rst:19 +msgid "Thevesh Theva contributed the algorithm for calculating the liveness of teams within a particular break category." +msgstr "" + +#: ../../../AUTHORS.rst:20 +msgid "Viran Weerasekera contributed the statistical tests used to estimate the degree to which a motion's results and vetoes are balanced." +msgstr "" + +#: ../../../AUTHORS.rst:21 +msgid "Viran Weerasekera, Valerie Tierney, Molly Dale, Madeline Schultz, and Vail Bromberger contributed to the \"Tournament Logistics\" section of our documentation." +msgstr "" + +#: ../../../AUTHORS.rst:24 +msgid "Sponsors" +msgstr "" + +#: ../../../AUTHORS.rst:26 +msgid "Thanks to the Western Australian Debating League for sponsoring various features related to organising division-based tournaments and round-robin based draw methods." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/about/changelog.po b/docs/locale/cs/LC_MESSAGES/about/changelog.po new file mode 100644 index 00000000000..8869b3155cd --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/about/changelog.po @@ -0,0 +1,1922 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:56\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/changelog.po\n" +"X-Crowdin-File-ID: 1261\n" +"Language: cs_CZ\n" + +#: ../../../CHANGELOG.rst:3 +msgid "Change Log" +msgstr "" + +#: ../../../CHANGELOG.rst:6 +msgid "2.4.0 (Maine)" +msgstr "" + +#: ../../../CHANGELOG.rst:7 +msgid "*Release date: ?*" +msgstr "" + +#: ../../../CHANGELOG.rst:9 +msgid "Added support for Russian, and shortened the language selector" +msgstr "" + +#: ../../../CHANGELOG.rst:10 +msgid "Renamed 'test score' to 'base score'" +msgstr "" + +#: ../../../CHANGELOG.rst:11 +msgid "Divisions-specific features have been deprecated and removed" +msgstr "" + +#: ../../../CHANGELOG.rst:12 +msgid "Moved the 'Edit Database' menu item to the dropdown with the logo in the admin navigation" +msgstr "" + +#: ../../../CHANGELOG.rst:13 +msgid "Pull-ups can now be restricted to teams with the lowest draw strength (by speaker or team points) of their bracket" +msgstr "" + +#: ../../../CHANGELOG.rst:14 +msgid "The number of pull-ups and draw strength by speaker score are now available as team standing metrics" +msgstr "" + +#: ../../../CHANGELOG.rst:15 +msgid "Added the new emoji that come along with Unicode 11 — thanks to Viran Weerasekera for this addition!" +msgstr "" + +#: ../../../CHANGELOG.rst:16 +msgid "The 'Show adjudicator institutions' preference now covers a wider range of cases; meaning that if it is unchecked then all adjudicator's institutional affiliations should be hidden from the public" +msgstr "" + +#: ../../../CHANGELOG.rst:20 +msgid "2.3.2" +msgstr "" + +#: ../../../CHANGELOG.rst:21 +msgid "*Release date: 19 October 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:23 +msgid "Fixed issue where teams would appear to be unavailable in break rounds" +msgstr "" + +#: ../../../CHANGELOG.rst:24 ../../../CHANGELOG.rst:294 +#: ../../../CHANGELOG.rst:302 ../../../CHANGELOG.rst:314 +msgid "Other minor fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:28 +msgid "2.3.1" +msgstr "" + +#: ../../../CHANGELOG.rst:29 +msgid "*Release date: 6 October 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:31 +msgid "Fixed issue where the institutions list would count teams/adjudicators outside of the tournament" +msgstr "" + +#: ../../../CHANGELOG.rst:32 +msgid "Fixed issue where a rejected ballot form would crash rather than providing an error message" +msgstr "" + +#: ../../../CHANGELOG.rst:33 +msgid "Fixed issue where the javascript bundle would not build on a local windows install" +msgstr "" + +#: ../../../CHANGELOG.rst:34 +msgid "Fixed issue where the adjudicator record pages would show an unreleased motion if that round's draw was released" +msgstr "" + +#: ../../../CHANGELOG.rst:38 +msgid "2.3.0 (LaPerm)" +msgstr "" + +#: ../../../CHANGELOG.rst:39 +msgid "*Release date: 27 September 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:44 +msgid "Added a preformed panel system which provides a powerful take on a 'shadow draw' workflow" +msgstr "" + +#: ../../../CHANGELOG.rst:42 +msgid "Shadow draw systems allow an adjudication core to form panels prior to a round being drawn. For example, the panels for Round 4 could be formed while Round 3 is taking place. Most implementations do so by having the tab system create a copy of the Round 3 draw, form new panels on top of it, and then transpose these panels onto Round 4. In large tournaments this workflow allows an adjudication core much more time to consider panel formation" +msgstr "" + +#: ../../../CHANGELOG.rst:43 +msgid "Tabbycat's preformed panels are formed per-round under a section available under the Setup menu. This interface looks like the standard Edit Adjudicators interface, but the 'debates' shown are based on a simulation of that round's results. These fake debates can then be prioritised" +msgstr "" + +#: ../../../CHANGELOG.rst:44 +msgid "Adjudicators can then be allocated to those fake debates in order to create a pre-formed panel. When the real draw is ready to be created, the priority of each preformed panel will be matched to the priority of the real debates" +msgstr "" + +#: ../../../CHANGELOG.rst:45 +msgid "By using the existing per-debate priority system, and by giving pre-formed panels their own priority, this workflow allows for very fine amounts of control over exactly how preformed panels are allocated as compared to a more simple top-down transposition of panels. Adjudication cores can easily target general areas of the draw (e.g. break-threshold brackets); control adjudicator strength within and across panels; and still account for special cases where a debate requires a particularly strong panel. At the same time, our existing options for automatic prioritisation and automatic allocation apply to all steps of this process so that preformed panels can be created and deployed rapidly" +msgstr "" + +#: ../../../CHANGELOG.rst:50 +msgid "Rewrote the Edit Adjudication, Venues, and Teams pages to enable a number of enhancements" +msgstr "" + +#: ../../../CHANGELOG.rst:47 +msgid "These pages now live-update changes that were made on other instances of that page. As a result, users on different computers can each open the Edit Adjudicators page and see the changes made by the other users. This feature, along with sharding, should make it easier than ever to distribute the task of adjudicator allocation across an entire adjudication core" +msgstr "" + +#: ../../../CHANGELOG.rst:48 +msgid "A new interface layout should better maximise space, particularly in BP settings, while also increasing the font size of key information" +msgstr "" + +#: ../../../CHANGELOG.rst:49 +msgid "The unused panel is now able to sort adjudicators by name, score, or drag order" +msgstr "" + +#: ../../../CHANGELOG.rst:50 +msgid "Average scores for all adjudicators, and a voting majority, are now shown next to the panel" +msgstr "" + +#: ../../../CHANGELOG.rst:51 +msgid "Various allocation-relevant settings, such as the minimum feedback score needed for a voting position, are now available inline on the allocation page itself. This should enable much faster tweaks/iterations of these values" +msgstr "" + +#: ../../../CHANGELOG.rst:52 +msgid "The ballot entry page will now indicate which teams have currently or recently given 'iron person' speeches so that these can be easily tracked, audited, and confirmed. It does show by showing both a text-highlight/icon in the table and in a dedicated modal window. Thanks to Étienne Beaulé for contributing this feature!" +msgstr "" + +#: ../../../CHANGELOG.rst:54 +msgid "Split up the Django settings files. Note that this means if you are upgrading a local install of Tabbycat to this version you will need to:" +msgstr "" + +#: ../../../CHANGELOG.rst:54 +msgid "Copy ``tabbycat/settings/local.example`` to become ``local.py`` (and fill in your original database details)" +msgstr "" + +#: ../../../CHANGELOG.rst:55 +msgid "Optional: repeat the same copying procedure for ``development.example`` and set the ``LOCAL_DEVELOPMENT`` environmental variable to ``True`` if you would like to use the settings designed to aid local development" +msgstr "" + +#: ../../../CHANGELOG.rst:61 +msgid "A range of improvements to the email notifications contributed by Étienne Beaulé:" +msgstr "" + +#: ../../../CHANGELOG.rst:57 +msgid "Ballot receipt emails now provide more information about team scores/points" +msgstr "" + +#: ../../../CHANGELOG.rst:58 +msgid "Emails are now in a rich-text format" +msgstr "" + +#: ../../../CHANGELOG.rst:59 +msgid "Custom emails may be sent out to select participants through the web-interface" +msgstr "" + +#: ../../../CHANGELOG.rst:60 +msgid "Participants can be specifically included or excluded from receiving a notification before sending with checks for duplicate messages" +msgstr "" + +#: ../../../CHANGELOG.rst:61 +msgid "Teams can be sent emails with their draw details" +msgstr "" + +#: ../../../CHANGELOG.rst:62 +msgid "Emails can be tracked to determine if sent or read (SendGrid-specific)" +msgstr "" + +#: ../../../CHANGELOG.rst:65 +msgid "Expanded the use of private URLs (Encore Étienne Beaulé):" +msgstr "" + +#: ../../../CHANGELOG.rst:64 +msgid "QR codes are now included in addition to the URL when printing private URLs" +msgstr "" + +#: ../../../CHANGELOG.rst:65 +msgid "Private landing pages will now display check-in status (if check-ins are used) along with further details regarding break categories, regions, etc." +msgstr "" + +#: ../../../CHANGELOG.rst:66 +msgid "Current and former draw assignments will display along with submitted ballots (for adjudicators) on landing pages" +msgstr "" + +#: ../../../CHANGELOG.rst:70 +msgid "Reworked how conflicts are determined to support double-past institutional conflicts:" +msgstr "" + +#: ../../../CHANGELOG.rst:68 +msgid "Added a \"team-institution conflict\" model" +msgstr "" + +#: ../../../CHANGELOG.rst:69 +msgid "Like adjudicator-institution conflicts, team-institution conflicts are automatically created if you use the simple importer or the command-line importer; but if you edit the database, it's your responsibility to add/edit them" +msgstr "" + +#: ../../../CHANGELOG.rst:70 +msgid "Institutional affiliations no longer matter for determining conflicts for either teams or adjudicators; only institutions listed in the team's or adjudicator's conflicts matter" +msgstr "" + +#: ../../../CHANGELOG.rst:71 +msgid "An adjudicator/team now conflicts with an adjudicator if *any* institution appears as an institutional conflict for both parties" +msgstr "" + +#: ../../../CHANGELOG.rst:72 +msgid "When printing scoresheets you can now edit the motions display just on that printing page. This allows you to use placeholder motions in Tabbycat (in order to prevent leaks) while still producing ballots with the correct motions" +msgstr "" + +#: ../../../CHANGELOG.rst:73 +msgid "Tabbycat no longer tracks which round is the 'current' round and instead tracks the completion of individual rounds. This change does not alter any existing workflows, but makes it easier to run simultaneous draws in out-rounds" +msgstr "" + +#: ../../../CHANGELOG.rst:74 +msgid "Info-slides can now be split into paragraphs" +msgstr "" + +#: ../../../CHANGELOG.rst:75 +msgid "Check-in pages now differentiate between teams with 1 and 2 checked-in people in two-team formats" +msgstr "" + +#: ../../../CHANGELOG.rst:76 +msgid "Institutional caps in breaks can be based on the number of teams in the break. Thanks to Viran Weerasekera for this feature!" +msgstr "" + +#: ../../../CHANGELOG.rst:77 +msgid "Several Tabbycat functions, adjudicator/venue allocation and email notifications, have been shifted to worker processes to help make them more reliable. If you are upgrading a Tabbycat instance that you will continue to use for new tournaments you will need to install the Heroku toolbelt and run ``heroku ps:scale worker=1``" +msgstr "" + +#: ../../../CHANGELOG.rst:78 +msgid "Upgraded to Python 3.6, dropped support for Python 3.5 and below. Note that this will require you to upgrade your python versions if running locally." +msgstr "" + +#: ../../../CHANGELOG.rst:82 +msgid "2.2.10" +msgstr "" + +#: ../../../CHANGELOG.rst:83 +msgid "*Release date: 10 February 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:85 +msgid "Fixed the display of feedback quantities on the Feedback Overview Page" +msgstr "" + +#: ../../../CHANGELOG.rst:86 +msgid "Fixed issue where 'ignored' feedback would hide the result from the feedback graph but not affect an adjudicator's current score. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:90 +msgid "2.2.9" +msgstr "" + +#: ../../../CHANGELOG.rst:91 +msgid "*Release date: 24 January 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:93 +msgid "Fixed an issue that could cause errors for tournaments when using an atypical number of rounds and break sizes. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:94 +msgid "Fixed an issue where the display of adjudicator's record links would display their name twice" +msgstr "" + +#: ../../../CHANGELOG.rst:98 +msgid "2.2.8" +msgstr "" + +#: ../../../CHANGELOG.rst:99 +msgid "*Release date: 14 December 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:101 +msgid "Fix issue where the check-in buttons were always disabled on admin and assistant pages" +msgstr "" + +#: ../../../CHANGELOG.rst:102 +msgid "Other minor fixes. Thanks to Étienne for these and for the check-in button fix!" +msgstr "" + +#: ../../../CHANGELOG.rst:106 +msgid "2.2.7" +msgstr "" + +#: ../../../CHANGELOG.rst:107 +msgid "*Release date: 16 November 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:109 +msgid "Lock redis-py version to 2.10.6, as workaround for `compatibility issue between django-redis and redis-py `_" +msgstr "" + +#: ../../../CHANGELOG.rst:110 +msgid "Fix login link on page shown after a user logs out" +msgstr "" + +#: ../../../CHANGELOG.rst:114 +msgid "2.2.6" +msgstr "" + +#: ../../../CHANGELOG.rst:115 +msgid "*Release date: 14 November 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:117 +msgid "Fix issue where check-ins could not be revoked" +msgstr "" + +#: ../../../CHANGELOG.rst:118 +msgid "Fix issue where the standings overview 'dashboard' included scores from elimination rounds. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:119 +msgid "Fix issue where the Average Individual Speaker Score metric would fail to calculate in some circumstances. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:120 +msgid "Fix issue where draw emails would crash if venues were unspecified. Thanks, again, to Étienne for this fix!" +msgstr "" + +#: ../../../CHANGELOG.rst:124 +msgid "2.2.5" +msgstr "" + +#: ../../../CHANGELOG.rst:125 +msgid "*Release date: 21 October 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:127 +msgid "Remove the buttons from the public check-ins page (as these do nothing unless the user is logged in)" +msgstr "" + +#: ../../../CHANGELOG.rst:128 +msgid "Hopefully fixed error that could cause Team- and Adjudicator- Institutional conflicts to not show properly on Allocation pages" +msgstr "" + +#: ../../../CHANGELOG.rst:129 +msgid "Thanks to Étienne for pull requests fixing rare bugs in the user creation form and break generation when rounds are not present" +msgstr "" + +#: ../../../CHANGELOG.rst:133 +msgid "2.2.4" +msgstr "" + +#: ../../../CHANGELOG.rst:134 +msgid "*Release date: 9 October 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:136 +msgid "Small fixes for functions related to email sending, conflict highlighting, and certain configurations of standings metrics" +msgstr "" + +#: ../../../CHANGELOG.rst:140 +msgid "2.2.3" +msgstr "" + +#: ../../../CHANGELOG.rst:141 +msgid "*Release date: 28 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:143 +msgid "*Literally* fix the issue causing public views of released scoresheets to throw errors (thanks for the pull request Étienne)" +msgstr "" + +#: ../../../CHANGELOG.rst:144 +msgid "Fix minor spacing issues in printed ballots (thanks for the pull request Étienne)" +msgstr "" + +#: ../../../CHANGELOG.rst:145 +msgid "Fix issue where institution-less adjudicators would cause some draw views to crash (thanks for the pull request Étienne)" +msgstr "" + +#: ../../../CHANGELOG.rst:149 +msgid "2.2.2" +msgstr "" + +#: ../../../CHANGELOG.rst:150 +msgid "*Release date: 22 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:152 +msgid "*Actually* fix the issue causing public views of released scoresheets to throw errors" +msgstr "" + +#: ../../../CHANGELOG.rst:156 +msgid "2.2.1" +msgstr "" + +#: ../../../CHANGELOG.rst:157 +msgid "*Release date: 21 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:159 +msgid "Fix issue causing public views of released scoresheets to throw errors" +msgstr "" + +#: ../../../CHANGELOG.rst:163 +msgid "2.2.0 (Khao Manee)" +msgstr "" + +#: ../../../CHANGELOG.rst:164 +msgid "*Release date: 20 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:167 +msgid "Implemented a new server architecture on Heroku along with other optimisation that should significantly improve the performance of sites receiving lots of traffic. Note that if you are upgrading an existing Heroku instance this requires a few tweaks before you deploy the update:" +msgstr "" + +#: ../../../CHANGELOG.rst:167 +msgid "Add the `https://github.com/heroku/heroku-buildpack-nginx.git` build pack under the Settings area of the Heroku Dashboard and positioning it first" +msgstr "" + +#: ../../../CHANGELOG.rst:168 +msgid "If your Heroku Stack is not \"heroku-16\" (noted under that same Settings page) it will need to be set as such using the Heroku CLI and the ``heroku stack:set heroku-16 --app APP_NAME`` command" +msgstr "" + +#: ../../../CHANGELOG.rst:169 +msgid "Added a page to the documentation that details how to scale a Tabbycat site that is receiving large amounts of traffic; and another page that documents how to upgrade a Tabbycat site to a new version" +msgstr "" + +#: ../../../CHANGELOG.rst:170 +msgid "Added support for Japanese and Portuguese. Let us know if you'd like to help contribute translations for either language (or a new one)!" +msgstr "" + +#: ../../../CHANGELOG.rst:171 +msgid "The results-entry page now updates its data live, giving you a more up to date look at data entry progress and reducing the cases of old data leading people to enter new ballots when they meant to confirm them" +msgstr "" + +#: ../../../CHANGELOG.rst:178 +msgid "A huge thanks to Étienne Beaulé for contributing a number of major new features and bug fixes. Notably:" +msgstr "" + +#: ../../../CHANGELOG.rst:173 +msgid "Added a means to mark feedback as 'ignored' so that it still is recorded as having been submitted, but does not affect the targeted-adjudicator's feedback score" +msgstr "" + +#: ../../../CHANGELOG.rst:174 +msgid "Added email notification to adjudicators on round release" +msgstr "" + +#: ../../../CHANGELOG.rst:175 +msgid "Implemented participant self-check-in through the use of their private URLs" +msgstr "" + +#: ../../../CHANGELOG.rst:176 +msgid "Gave all participants to a tournament a private URL key rather than being by team, and added a landing page for the participants using this key" +msgstr "" + +#: ../../../CHANGELOG.rst:177 +msgid "Implemented templated email notifications with ballot submission and round advance with the messages in a new settings panel. Private URL emails are now also customizable" +msgstr "" + +#: ../../../CHANGELOG.rst:178 +msgid "Added the \"average individual speaker score\" metric which averages the scores of all substantive speeches by the team within preliminary rounds. The old \"average speaker score\" metric has been renamed to to \"average total speaker score\"" +msgstr "" + +#: ../../../CHANGELOG.rst:179 +msgid "Reworked the ballots status graph to be an area chart" +msgstr "" + +#: ../../../CHANGELOG.rst:180 +msgid "Added the ability to hide motions on printed ballots (even if they have been entered). Thanks to Github user 0zlw for the feature request!" +msgstr "" + +#: ../../../CHANGELOG.rst:181 +msgid "Added the ability to unconfirm feedback from any of the views that show it" +msgstr "" + +#: ../../../CHANGELOG.rst:182 +msgid "BP motion statistics now also show average points split by bench and half" +msgstr "" + +#: ../../../CHANGELOG.rst:183 +msgid "Added a warning when users are close to their free-tier database limit on Heroku that makes it clear not to create new tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:184 +msgid "Added ``exportconfig`` and ``importconfig`` management commands to export and import tournament configurations to a JSON file" +msgstr "" + +#: ../../../CHANGELOG.rst:185 +msgid "Upgraded `django-dynamic-preferences `_ to version 1.6" +msgstr "" + +#: ../../../CHANGELOG.rst:187 +msgid "This won't affect most users, but advanced users previously having problems with a stray ``dynamic_preferences_users_userpreferencemodel`` table who are upgrading an existing instance may wish to run the SQL command ``DROP TABLE dynamic_preferences_users_userpreferencemodel;`` to remove this stray table. When this table was present, it caused an inconsistency between migration state and database schema that in turned caused the ``python manage.py flush`` command to fail. More information is available in the `django-dynamic-preferences changelog `_" +msgstr "" + +#: ../../../CHANGELOG.rst:191 +msgid "2.1.3" +msgstr "" + +#: ../../../CHANGELOG.rst:192 +msgid "*Release date: 21 August 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:194 +msgid "Added an alert for British Parliamentary format grand-final ballots that explains the workaround needed to nominate a sole winner" +msgstr "" + +#: ../../../CHANGELOG.rst:195 +msgid "Improved display of images shown when sharing Tabbycat links on social media" +msgstr "" + +#: ../../../CHANGELOG.rst:196 +msgid "Optimised the performance of several commonly-loaded pages. Thanks to Étienne Beaulé for the pull request!" +msgstr "" + +#: ../../../CHANGELOG.rst:197 +msgid "Prevented the entry of integer-scale feedback questions without the required min/max attributes" +msgstr "" + +#: ../../../CHANGELOG.rst:198 +msgid "Provided a shortcut link to editing a round's feedback weight" +msgstr "" + +#: ../../../CHANGELOG.rst:199 +msgid "Prevented standings from crashing when only a single standings metric is set" +msgstr "" + +#: ../../../CHANGELOG.rst:203 +msgid "2.1.2" +msgstr "" + +#: ../../../CHANGELOG.rst:204 +msgid "*Release date: 14 July 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:206 +msgid "Fixed an error caused when calculating breaks including teams without institutions" +msgstr "" + +#: ../../../CHANGELOG.rst:207 +msgid "Improved display of long motions and info slides" +msgstr "" + +#: ../../../CHANGELOG.rst:208 +msgid "Fixed bug in feedback progress tracking with UADC-style adjudication" +msgstr "" + +#: ../../../CHANGELOG.rst:209 +msgid "Fixed bug where the public checks page would cause large amounts of failing requests" +msgstr "" + +#: ../../../CHANGELOG.rst:210 +msgid "Fixed visual issue with adjudicator lists wrapping poorly on mobile devices" +msgstr "" + +#: ../../../CHANGELOG.rst:211 +msgid "Limited the time it takes to serve requests to match Heroku's in-built limit; this may help improve the performance of sites under heavy load" +msgstr "" + +#: ../../../CHANGELOG.rst:215 +msgid "2.1.1" +msgstr "" + +#: ../../../CHANGELOG.rst:216 +msgid "*Release date: 19 May 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:218 +msgid "The Scan Identifiers page now orders check-ins from top to bottom" +msgstr "" + +#: ../../../CHANGELOG.rst:219 +msgid "The Scan Identifiers now plays different sounds for failed check-ins" +msgstr "" + +#: ../../../CHANGELOG.rst:220 +msgid "The Scan Identifiers now has a toggle for sounds; allowing it to work in browsers like Safari that block auto-playing audio" +msgstr "" + +#: ../../../CHANGELOG.rst:224 +msgid "2.1.0 (Japanese Bobtail)" +msgstr "" + +#: ../../../CHANGELOG.rst:225 +msgid "*Release date: 7 May 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:227 +msgid "Added an introductory modal for the adjudicator allocation page to help outline how the features and workflow operate" +msgstr "" + +#: ../../../CHANGELOG.rst:228 +msgid "Added an automated method for assigning importances to debates using their bracket or 'liveness'. This should allow smaller tournaments to more easily assign importances and save time for larger tournaments that do so" +msgstr "" + +#: ../../../CHANGELOG.rst:230 +msgid "Added the ability to switch between using 'team codes' and standard team names" +msgstr "" + +#: ../../../CHANGELOG.rst:230 +msgid "By default team codes are set to match that team's emoji, but team codes are editable and can be imported like standard data" +msgstr "" + +#: ../../../CHANGELOG.rst:231 +msgid "Team codes can be swapped in an out for standard team names at will, with precise control over the contexts in which either is used — i.e. in public-facing pages, in admin-facing pages, in tooltips, *etc.*" +msgstr "" + +#: ../../../CHANGELOG.rst:235 +msgid "Added a range of 'check-in' functionality" +msgstr "" + +#: ../../../CHANGELOG.rst:233 +msgid "This includes barcode assignment, printing, and scanning. Scanning methods are optimised both for manual entry, entry with barcodes scanners, and for a 'live' scanning view that uses your phone's camera!" +msgstr "" + +#: ../../../CHANGELOG.rst:234 +msgid "This includes new people and venue status pages that show an overview of check-in status and allow for easy manual check-ins; ideal for a roll-calls!. This page can also be made public" +msgstr "" + +#: ../../../CHANGELOG.rst:235 +msgid "Ballot check-ins have been converted to this new method, and now all printed ballots will contain the barcodes needed to scan them" +msgstr "" + +#: ../../../CHANGELOG.rst:236 +msgid "Venue check-ins have been added alongside the standard 'person' check-ins to allow you to track a room's status at the start of the day or round-by-round" +msgstr "" + +#: ../../../CHANGELOG.rst:239 +msgid "Added (partial) translations in French, Spanish and Arabic" +msgstr "" + +#: ../../../CHANGELOG.rst:238 +msgid "Users can now use a link in the footer to switch the site's language into French, Spanish, or Arabic. By default Tabbycat should also match your browser's language and so automatically apply those languages if it matches" +msgstr "" + +#: ../../../CHANGELOG.rst:239 +msgid "Our translations are generously provided by volunteers, but (so far) do not cover all of the interface text within Tabbycat. If you're interested in helping to translate new or existing languages please get in touch!" +msgstr "" + +#: ../../../CHANGELOG.rst:240 +msgid "Thanks to the excellent team at QatarDebate for contributing the Arabic translations, and to Alejandro, Hernando, Julian and Zoe for contributing the Spanish translations." +msgstr "" + +#: ../../../CHANGELOG.rst:242 +msgid "Added a new (beta) feature: allocation 'sharding'" +msgstr "" + +#: ../../../CHANGELOG.rst:242 +msgid "Sharding allows you to split up the Adjudicator Allocation screen into a defined subset of the draw. This has been designed so that you can have multiple computers doing allocations simultaneously; allowing the adjudication core to split itself and tackle allocations in parallel." +msgstr "" + +#: ../../../CHANGELOG.rst:243 +msgid "Shards can be assigned into defined fractions (i.e. halves or fifths) according to specific criteria (i.e. bracket or priority) and following either a top-to-bottom sorting or a mixed sorting that ensures each bracket has an even proportion of each criteria." +msgstr "" + +#: ../../../CHANGELOG.rst:244 +msgid "Added an option to show a \"Confirm Digits\" option to pre-printed ballots that asks adjudicators to confirm their scores in a manner that may help clarify instances or bad handwriting. This can be enabled in the \"Data Entry\" settings area." +msgstr "" + +#: ../../../CHANGELOG.rst:245 +msgid "Added a 'liveness' calculator for BP that will estimate whether each team has, can, or can't break in each of their categories (as previously existed for 2-team formats)" +msgstr "" + +#: ../../../CHANGELOG.rst:246 +msgid "Added draw pull-up option: pull up from middle" +msgstr "" + +#: ../../../CHANGELOG.rst:247 +msgid "Added new draw option: choose pull-up from teams who have been pulled up the fewest times so far" +msgstr "" + +#: ../../../CHANGELOG.rst:248 +msgid "Added the ability to have different 'ballots-per-debates' for in/out rounds; accommodating tournaments like Australian Easters that use consensus for preliminary rounds but voting for elimination rounds." +msgstr "" + +#: ../../../CHANGELOG.rst:249 +msgid "Added time zone support to the locations where times are displayed" +msgstr "" + +#: ../../../CHANGELOG.rst:250 +msgid "Administrators can now view pages as if they were Assistants; allowing them to (for example) use the data entry forms that enforce double-checking without needed to create a separate account" +msgstr "" + +#: ../../../CHANGELOG.rst:251 +msgid "Fixed χ² test in motion statistics, and refactored the motion statistics page" +msgstr "" + +#: ../../../CHANGELOG.rst:252 +msgid "Teams, like adjudicators, no longer need to have an institution" +msgstr "" + +#: ../../../CHANGELOG.rst:253 +msgid "Added a page allowing for bulk updates to adjudicator scores" +msgstr "" + +#: ../../../CHANGELOG.rst:254 +msgid "Added break categories to team standings, and new team standings pages for break categories" +msgstr "" + +#: ../../../CHANGELOG.rst:259 +msgid "Made speaker standings more configurable" +msgstr "" + +#: ../../../CHANGELOG.rst:256 +msgid "Second-order metrics can now be specified" +msgstr "" + +#: ../../../CHANGELOG.rst:257 +msgid "Added trimmed mean (also known as high-low drop)" +msgstr "" + +#: ../../../CHANGELOG.rst:258 +msgid "Added ability to set no limit for number of missed debates" +msgstr "" + +#: ../../../CHANGELOG.rst:259 +msgid "Standard deviation is now the population standard deviation (was previously sample), and ranks in ascending order if used to rank speakers." +msgstr "" + +#: ../../../CHANGELOG.rst:273 ../../../CHANGELOG.rst:386 +msgid "Quality of life improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:262 +msgid "Added a \"☆\" indicator to more obviously liveness in the adjudicator allocation screen" +msgstr "" + +#: ../../../CHANGELOG.rst:263 +msgid "Added WYSIWYG editor for tournament welcome message, and moved it to tournament configuration" +msgstr "" + +#: ../../../CHANGELOG.rst:264 +msgid "Added \"appellant\" and \"respondent\" to the side name options" +msgstr "" + +#: ../../../CHANGELOG.rst:265 +msgid "Added a two new columns to the feedback overview page: one that displays the current difference between an adjudicator's test score and their current weighted score; another the displays the standard deviation of an adjudicator's feedback scores" +msgstr "" + +#: ../../../CHANGELOG.rst:266 +msgid "Added an 'important feedback' page that highlights feedback significantly above or below an adjudicator's test score" +msgstr "" + +#: ../../../CHANGELOG.rst:267 +msgid "Added a means to bulk-import adjudicator scores (for example from a CSV) to make it easier to work with external feedback processing" +msgstr "" + +#: ../../../CHANGELOG.rst:268 +msgid "Speakers and speaker's emails in the simple importer can now be separated by commas or tabs in addition to new lines" +msgstr "" + +#: ../../../CHANGELOG.rst:269 +msgid "The \"shared\" checkbox in the simple importer is now hidden unless the relevant tournament option is enabled" +msgstr "" + +#: ../../../CHANGELOG.rst:270 +msgid "Current team standings page now shows silent round results if \"Release all round results to public\" is set" +msgstr "" + +#: ../../../CHANGELOG.rst:271 +msgid "The Consensus vs Voting options for how ballots work has now been split into two settings: one option for preliminary rounds and one option for elimination rounds" +msgstr "" + +#: ../../../CHANGELOG.rst:272 +msgid "Speaker scores now show as integers (without decimals) where the tournament format would not allow decimals" +msgstr "" + +#: ../../../CHANGELOG.rst:273 +msgid "Added a page showing a list of institutions in the tournament" +msgstr "" + +#: ../../../CHANGELOG.rst:274 +msgid "On the assistant \"enter results\" page, pressing \"/\" jumps to the \"Find in Table\" box, so data entry can be done entirely from your keyboard" +msgstr "" + +#: ../../../CHANGELOG.rst:276 +msgid "Switched to using a Websockets/Channels based infrastructure to better allow for asynchronous updates. This should also ameliorate cases where the Memcachier plugin expired due to inactivity which would then crash a site. Notes for those upgrading:" +msgstr "" + +#: ../../../CHANGELOG.rst:276 +msgid "On Heroku: You should remove the Memcachier plugin and instead add 'heroku-redis' to any instances being upgraded" +msgstr "" + +#: ../../../CHANGELOG.rst:277 +msgid "Locally: You should recreate your `local_settings.py` from the `local_settings.example` file" +msgstr "" + +#: ../../../CHANGELOG.rst:280 +msgid "Upgraded to Django 2.0" +msgstr "" + +#: ../../../CHANGELOG.rst:279 +msgid "Converted most raw SQL queries to use the new ``filter`` keyword in annotations" +msgstr "" + +#: ../../../CHANGELOG.rst:283 +msgid "2.0.7" +msgstr "" + +#: ../../../CHANGELOG.rst:284 +msgid "*Release date: 13 April 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:286 +msgid "Fixed an issue preventing draws with pre-allocate sides generating" +msgstr "" + +#: ../../../CHANGELOG.rst:290 +msgid "2.0.6" +msgstr "" + +#: ../../../CHANGELOG.rst:291 +msgid "*Release date: 20 March 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:293 +msgid "Added reminder to add own-institution conflicts in the Edit Database area" +msgstr "" + +#: ../../../CHANGELOG.rst:298 +msgid "2.0.5" +msgstr "" + +#: ../../../CHANGELOG.rst:299 +msgid "*Release date: 7 February 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:301 +msgid "Improved the printing of scoresheets and feedback forms on Chrome." +msgstr "" + +#: ../../../CHANGELOG.rst:306 +msgid "2.0.4" +msgstr "" + +#: ../../../CHANGELOG.rst:307 +msgid "*Release date: 22 January 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:309 +msgid "Add alert for users who try to do voting ballots on BP-configured tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:310 +msgid "Fixed issue where draws of the \"manual\" type would not generate correctly" +msgstr "" + +#: ../../../CHANGELOG.rst:311 +msgid "Fixed issue where a ballot's speaker names dropdown would contain both team's speakers when using formats with side selection" +msgstr "" + +#: ../../../CHANGELOG.rst:312 +msgid "Fixed issue where scoresheets would not show correctly under some configurations" +msgstr "" + +#: ../../../CHANGELOG.rst:313 +msgid "Improved display of really long motions when using the inbuilt motion-showing page" +msgstr "" + +#: ../../../CHANGELOG.rst:318 +msgid "2.0.3" +msgstr "" + +#: ../../../CHANGELOG.rst:319 +msgid "*Release date: 3 December 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:321 +msgid "Fixed issue where the 'prefix team name with institution name' checkbox would not be correctly saved when using the Simple Importer" +msgstr "" + +#: ../../../CHANGELOG.rst:322 +msgid "Removed the scroll speed / text size buttons on mobile draw views that were making it difficult to view the table" +msgstr "" + +#: ../../../CHANGELOG.rst:323 +msgid "Improved the display of the motions tab page on mobile devices and fixed an issue where it appeared as if only half the vetoes were made" +msgstr "" + +#: ../../../CHANGELOG.rst:327 +msgid "2.0.2" +msgstr "" + +#: ../../../CHANGELOG.rst:328 +msgid "*Release date: 27 November 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:333 +msgid "Fixes and improvements to diversity overview" +msgstr "" + +#: ../../../CHANGELOG.rst:331 +msgid "Fixed average feedback rating from teams, it was previously (incorrectly) showing the average feedback rating from all adjudicators" +msgstr "" + +#: ../../../CHANGELOG.rst:332 +msgid "Gender splits for average feedback rating now go by target adjudicator; this was previously source adjudicator" +msgstr "" + +#: ../../../CHANGELOG.rst:333 +msgid "Persons with unknown gender are now shown in counts (but not score/rating averages); a bug had previously caused them to be incorrectly counted as zero" +msgstr "" + +#: ../../../CHANGELOG.rst:334 +msgid "Improved query efficiency of the page" +msgstr "" + +#: ../../../CHANGELOG.rst:335 +msgid "Improved the BP motions tab for out-rounds by specifying advancing teams as \"top/bottom ½\" rather than as 1st/4th and removed the average-points-per-position graphs that were misleading" +msgstr "" + +#: ../../../CHANGELOG.rst:336 +msgid "Improved handling of long motions in the motion display interface" +msgstr "" + +#: ../../../CHANGELOG.rst:337 +msgid "Fixed issue where creating BP tournaments using the wizard would create an extra break round given the size of the break specified" +msgstr "" + +#: ../../../CHANGELOG.rst:338 +msgid "Fixed auto-allocation in consensus panels where there are fewer judges than debates in the round" +msgstr "" + +#: ../../../CHANGELOG.rst:339 +msgid "Fixed reply speaker validity check when speeches are marked as duplicate" +msgstr "" + +#: ../../../CHANGELOG.rst:340 +msgid "Prohibit assignment of teams to break categories of other tournaments in Edit Database area" +msgstr "" + +#: ../../../CHANGELOG.rst:344 +msgid "2.0.1" +msgstr "" + +#: ../../../CHANGELOG.rst:345 +msgid "*Release date: 21 November 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:347 +msgid "Fixed issue where results submission would crash if sides are unconfirmed" +msgstr "" + +#: ../../../CHANGELOG.rst:348 +msgid "Fixed issue where scoresheets would not display properly for adjudicators who lack institutions" +msgstr "" + +#: ../../../CHANGELOG.rst:349 +msgid "Fixed issue where the round history indicators in the Edit Adjudicators page would sometimes omit the \"rounds ago\" indicator" +msgstr "" + +#: ../../../CHANGELOG.rst:353 +msgid "2.0.0 (Iberian Lynx)" +msgstr "" + +#: ../../../CHANGELOG.rst:354 +msgid "*Release date: 13 November 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:358 +msgid "British Parliamentary support" +msgstr "" + +#: ../../../CHANGELOG.rst:357 +msgid "Full support for British Parliamentary format has been added and we're incredibly excited to see Tabbycat's unique features and design (finally) available as an option for those tabbing in the predominant global format" +msgstr "" + +#: ../../../CHANGELOG.rst:358 +msgid "As part of the implementation of this format we've made significant improvements over existing tab software on how sides are allocated within BP draws. This means that teams are less likely to have 'imbalanced' proportions of side allocations (for example having many more debates as Opening Government than Closing Opposition)" +msgstr "" + +#: ../../../CHANGELOG.rst:359 +msgid "We've added a new \"Comparisons\" page added to the documentation to outline some of the key differences between Tabbycat and other software in the context of BP tabbing" +msgstr "" + +#: ../../../CHANGELOG.rst:365 +msgid "Refreshed interface design" +msgstr "" + +#: ../../../CHANGELOG.rst:361 +msgid "The basic graphic elements of Tabbycat have had a their typography, icons, colours, forms, and more redesign for a more distinctive and clear look. We also now have an official logo!" +msgstr "" + +#: ../../../CHANGELOG.rst:362 +msgid "The \"Motions\" stage of the per-round workflow has now been rolled into the Display area to better accommodate BP formats and consolidate the Draw/Motion 'release' process" +msgstr "" + +#: ../../../CHANGELOG.rst:363 +msgid "Sidebar menu items now display all sub-items within a section, such as for Feedback, Standings, and Breaks" +msgstr "" + +#: ../../../CHANGELOG.rst:364 +msgid "Better tablet and mobile interfaces; including a fully responsive sidebar for the admin area that maximises the content area" +msgstr "" + +#: ../../../CHANGELOG.rst:365 +msgid "More explicit and obvious calls-to-action for the key tasks necessary to running a round, with better interface alerts and text to help users understand when and why to perform crucial actions" +msgstr "" + +#: ../../../CHANGELOG.rst:366 +msgid "Redesigned motions tab page that gives a better idea of the sample size and distribution of results in both two- and four- team formats" +msgstr "" + +#: ../../../CHANGELOG.rst:368 +msgid "Improved handling of Break Rounds ballots and sides allocation" +msgstr "" + +#: ../../../CHANGELOG.rst:368 +msgid "The positions of teams within a break round are now created by the initial draw generation in an 'unset' state in recognition that most tournaments assign these manually (through say a coin toss). This should help clarify when showing break rounds draws when sides are or are not finalised" +msgstr "" + +#: ../../../CHANGELOG.rst:369 +msgid "Break rounds ballots for formats where scores are not typically entered (i.e. BP) will only specify that you nominate the teams advancing rather than enter in all of the speakers' scores" +msgstr "" + +#: ../../../CHANGELOG.rst:370 +msgid "Now, like Break Categories, you can define arbitrary Categories such as 'Novice' or 'ESL' to create custom Speaker tabs for groups of Speakers" +msgstr "" + +#: ../../../CHANGELOG.rst:371 +msgid "You can now release an Adjudicators Tab showing test scores, final scores, and/or per-round feedback averages" +msgstr "" + +#: ../../../CHANGELOG.rst:372 +msgid "Information Slides can now be added to the system; either for showing to an auditorium within Tabbycat or for displaying alongside the public list of motions and/or the motions tab" +msgstr "" + +#: ../../../CHANGELOG.rst:373 +msgid "Teams and adjudicators are no longer required to have institutions; something that should be very useful when setting up small IVs and the like" +msgstr "" + +#: ../../../CHANGELOG.rst:374 +msgid "Private URLs can now be incrementally generated. Records of sent mail are now also kept by Tabbycat, so that emails can be incrementally sent to participants as registration data changes" +msgstr "" + +#: ../../../CHANGELOG.rst:376 +msgid "After creating a new tournament you will now be prompted to apply a basic rules and public information preset" +msgstr "" + +#: ../../../CHANGELOG.rst:377 +msgid "Better handling of errors that arise when a debate team is missing or where two teams have been assigned the same side" +msgstr "" + +#: ../../../CHANGELOG.rst:378 +msgid "Fixed issue where the adjudicator feedback graphs would not sort along with their table" +msgstr "" + +#: ../../../CHANGELOG.rst:379 +msgid "The Feedback Overview page now makes it more clear how the score is determined, the current distribution of scores, and how scores affect the distribution of chairs, panellists, and trainees" +msgstr "" + +#: ../../../CHANGELOG.rst:380 +msgid "Speaker tabs now default to sorting by average, except for formats where we are certain that they must be sorted by total. The speaker tab page itself now prominently notes which setting is is currently using" +msgstr "" + +#: ../../../CHANGELOG.rst:381 +msgid "'Feedback paths' now default to a more permissive setting (rather than only allowing Chairs to submit feedback) and the Feedback Overview page will note that current configuration" +msgstr "" + +#: ../../../CHANGELOG.rst:382 +msgid "Emails can be assigned to adjudicators and teams in the Simple Importer" +msgstr "" + +#: ../../../CHANGELOG.rst:383 +msgid "More of the tables that allow you to set or edit data (such as the check-in tables for adjudicators, teams and venues) now automatically save changes" +msgstr "" + +#: ../../../CHANGELOG.rst:384 +msgid "When adding/editing users extraneous fields have been hidden and the \"Staff\" and \"Superuser\" roles have new sub-text clarifying what they mean for users with those permissions" +msgstr "" + +#: ../../../CHANGELOG.rst:385 +msgid "Team record pages now show cumulative team points, and if the speaker tab is fully released, speaker scores for that team in each debate" +msgstr "" + +#: ../../../CHANGELOG.rst:389 +msgid "1.4.6" +msgstr "" + +#: ../../../CHANGELOG.rst:390 +msgid "*Release date: 23 October 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:392 +msgid "Fixed issue where speaker standings with a large amount of non-ranking speakers would cause the page to load slowly or time-out." +msgstr "" + +#: ../../../CHANGELOG.rst:396 +msgid "1.4.5" +msgstr "" + +#: ../../../CHANGELOG.rst:397 +msgid "*Release date: 14 October 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:399 +msgid "Added warning message when adjudicator scores are outside the expected range" +msgstr "" + +#: ../../../CHANGELOG.rst:400 +msgid "Fixed handling of uniqueness failure in simple importer for teams" +msgstr "" + +#: ../../../CHANGELOG.rst:404 +msgid "1.4.4" +msgstr "" + +#: ../../../CHANGELOG.rst:405 +msgid "*Release date: 27 September 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:407 +msgid "Fixed Vue dependency issue preventing Heroku installs after a dependency release" +msgstr "" + +#: ../../../CHANGELOG.rst:408 +msgid "Fixed issue with formatting non-numeric standings metrics" +msgstr "" + +#: ../../../CHANGELOG.rst:409 +msgid "Fixed behaviour of public tabs when all rounds are silent" +msgstr "" + +#: ../../../CHANGELOG.rst:413 +msgid "1.4.3" +msgstr "" + +#: ../../../CHANGELOG.rst:414 +msgid "*Release date: 9 September 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:416 +msgid "A number of improvements to error handling and logging" +msgstr "" + +#: ../../../CHANGELOG.rst:417 +msgid "Changed the \"previous round\" of an elimination round to point to the last one in the same break category" +msgstr "" + +#: ../../../CHANGELOG.rst:418 +msgid "Other minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:422 +msgid "1.4.2" +msgstr "" + +#: ../../../CHANGELOG.rst:423 +msgid "*Release date: 23 August 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:425 +msgid "Minor bug fixes and error logging improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:429 +msgid "1.4.1" +msgstr "" + +#: ../../../CHANGELOG.rst:430 +msgid "*Release date: 2 August 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:432 +msgid "Fixed bug that prevented edited matchups from being saved" +msgstr "" + +#: ../../../CHANGELOG.rst:433 +msgid "Added flag to prevent retired sites from using the database for sessions" +msgstr "" + +#: ../../../CHANGELOG.rst:437 +msgid "1.4.0 (Havana Brown)" +msgstr "" + +#: ../../../CHANGELOG.rst:438 +msgid "*Release date: 26 July 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:444 +msgid "Overhauled the adjudicator allocation, venue allocation, and matchups editing pages, including:" +msgstr "" + +#: ../../../CHANGELOG.rst:441 +msgid "Upgraded to Vue 2.0 and refactored the code so that each page better shares methods for displaying the draw, showing additional information, and dragging/dropping" +msgstr "" + +#: ../../../CHANGELOG.rst:442 +msgid "When dragging/dropping, the changed elements now 'lock' in place to indicate that their saving is in-progress" +msgstr "" + +#: ../../../CHANGELOG.rst:443 +msgid "Added conflicts and recent histories to the slideovers shown for teams/adjudicators" +msgstr "" + +#: ../../../CHANGELOG.rst:444 +msgid "Added 'ranking' toggles to visibly highlight adjudicator strengths and more easily identify unbalanced panels" +msgstr "" + +#: ../../../CHANGELOG.rst:445 +msgid "Each interface's table is now sortable by a debate's importance, bracket, liveness, etc." +msgstr "" + +#: ../../../CHANGELOG.rst:446 +msgid "Added a new \"Tournament Logistics\" guide to the documentation that outlines some general best practices for tabbing tournaments. Thanks to Viran Weerasekera, Valerie Tierney, Molly Dale, Madeline Schultz, and Vail Bromberger for contributing to this document" +msgstr "" + +#: ../../../CHANGELOG.rst:447 +msgid "Added (basic) support for the Canadian Parliamentary format by allowing for consensus ballots and providing a preset. However note that only some of the common draw rules are supported (check our documentation for more information)" +msgstr "" + +#: ../../../CHANGELOG.rst:448 +msgid "Added an ESL/EFL tab release option and status field" +msgstr "" + +#: ../../../CHANGELOG.rst:449 +msgid "Added a chi-squared test to measure motion balance in the motion standings/balance. Thanks to Viran Weerasekera for contributing this" +msgstr "" + +#: ../../../CHANGELOG.rst:450 +msgid "The Auto Allocate function for adjudicators will now also allocate trainees to solo-chaired debates" +msgstr "" + +#: ../../../CHANGELOG.rst:451 +msgid "Added a 'Tab Release' preset for easily releasing all standings/results pages after a tournament is finished" +msgstr "" + +#: ../../../CHANGELOG.rst:452 +msgid "Added 'Average Speaks by Round' to the standings overview page" +msgstr "" + +#: ../../../CHANGELOG.rst:453 +msgid "Fixed issue where the Auto Allocator was forming panels of incorrect strengths in debates identified as less important" +msgstr "" + +#: ../../../CHANGELOG.rst:454 +msgid "Fixed issue where toggling iron-person speeches on and off wouldn't hide/unset the relevant checkboxes" +msgstr "" + +#: ../../../CHANGELOG.rst:455 +msgid "Fixed issue where VenueCategories could not be edited if they did not have Venues set" +msgstr "" + +#: ../../../CHANGELOG.rst:456 +msgid "Various other small fixes and improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:460 +msgid "1.3.1" +msgstr "" + +#: ../../../CHANGELOG.rst:461 +msgid "*Release date: 26 May 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:463 +msgid "Fixed bug that allowed duplicate emoji to be occasionally generated" +msgstr "" + +#: ../../../CHANGELOG.rst:467 +msgid "1.3.0 (Genetta)" +msgstr "" + +#: ../../../CHANGELOG.rst:468 +msgid "*Release date: 9 May 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:470 +msgid "Added the ability to mark speeches as duplicates when entering ballots so that they will not show in speaker tabs, intended for use with 'iron-man' speeches and swing speakers" +msgstr "" + +#: ../../../CHANGELOG.rst:471 +msgid "Reworked venue constraints and venue display options by streamlining \"venue groups\" and \"venue constraint categories\" into a single \"venue category\" type, with options for how they are used and displayed" +msgstr "" + +#: ../../../CHANGELOG.rst:472 +msgid "Relocated the Random (now renamed 'Private') URL pages to the Setup section and added pages for printing/emailing out the ballot submission URLs" +msgstr "" + +#: ../../../CHANGELOG.rst:473 +msgid "Reworked the simple data importer (formerly the visual importer) to improve its robustness" +msgstr "" + +#: ../../../CHANGELOG.rst:474 +msgid "Improved guards against having no current round set, and added a new page for manually overriding the current round (under Configuration)" +msgstr "" + +#: ../../../CHANGELOG.rst:475 +msgid "Added a preference for controlling whether assistant users have access to pages that can reveal draw or motions information ahead of their public release" +msgstr "" + +#: ../../../CHANGELOG.rst:476 +msgid "Added the ability to limit tab releases to a given number of ranks (*i.e.* only show the top 10 speakers)" +msgstr "" + +#: ../../../CHANGELOG.rst:477 +msgid "Added the ability to redact individual person's identifying details from speaker tabs" +msgstr "" + +#: ../../../CHANGELOG.rst:478 +msgid "Added the ability for user passwords to be easily reset" +msgstr "" + +#: ../../../CHANGELOG.rst:479 +msgid "Added a minimal set of default feedback questions to newly created Tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:480 +msgid "When a tournament's current round is set, redirect to a page where it can be set, rather than crashing" +msgstr "" + +#: ../../../CHANGELOG.rst:481 +msgid "A number of other minor bug fixes and enhancements" +msgstr "" + +#: ../../../CHANGELOG.rst:485 +msgid "1.2.3" +msgstr "" + +#: ../../../CHANGELOG.rst:486 +msgid "*Release date: 17 March 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:488 +msgid "Improved the display of the admin ballot entry form on mobile devices" +msgstr "" + +#: ../../../CHANGELOG.rst:489 ../../../CHANGELOG.rst:497 +#: ../../../CHANGELOG.rst:505 +msgid "A number of other minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:493 +msgid "1.2.2" +msgstr "" + +#: ../../../CHANGELOG.rst:494 +msgid "*Release date: 4 March 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:496 +msgid "Protected debate-team objects from cascaded deletion, and added warning messages with guidance when users would otherwise do this" +msgstr "" + +#: ../../../CHANGELOG.rst:501 +msgid "1.2.1" +msgstr "" + +#: ../../../CHANGELOG.rst:502 +msgid "*Release date: 25 February 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:504 +msgid "Printable feedback forms will now display the default rating scale, any configured introduction text, and better prompt you to add additional questions" +msgstr "" + +#: ../../../CHANGELOG.rst:509 +msgid "1.2.0 (Foldex)" +msgstr "" + +#: ../../../CHANGELOG.rst:510 +msgid "*Release date: 15 February 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:512 +msgid "Changed the core workflow by splitting display- and motion- related activities into separate pages to simplify each stage of running a round" +msgstr "" + +#: ../../../CHANGELOG.rst:513 +msgid "Added support for Docker-based installations to make local/offline installations much more simple" +msgstr "" + +#: ../../../CHANGELOG.rst:514 +msgid "Added a \"Tabbykitten\" version of Tabbycat that can be deployed to Heroku without a needing a credit/debit card" +msgstr "" + +#: ../../../CHANGELOG.rst:515 +msgid "Added button to load a demo tournament on the 'New Tournament' page so it is easier to test-run Tabbycat" +msgstr "" + +#: ../../../CHANGELOG.rst:516 +msgid "Changed venue groups to be separate to venue constraint categories" +msgstr "" + +#: ../../../CHANGELOG.rst:517 +msgid "Modified the licence to clarify that donations are required for some tournaments and added a more explicit donations link and explanation page" +msgstr "" + +#: ../../../CHANGELOG.rst:518 +msgid "Added information about autosave status to the adjudicator allocations page" +msgstr "" + +#: ../../../CHANGELOG.rst:519 +msgid "Added configurable side names so that tournaments can use labels like \"Proposition\"/\"Opposition\" instead of \"Affirmative\"/\"Negative\"" +msgstr "" + +#: ../../../CHANGELOG.rst:520 +msgid "Started work on basic infrastructure for translations" +msgstr "" + +#: ../../../CHANGELOG.rst:524 +msgid "1.1.7" +msgstr "" + +#: ../../../CHANGELOG.rst:525 +msgid "*Release date: 31 January 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:527 +msgid "Yet more minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:528 +msgid "The auto-allocation UI will now detail your minimum rating setting better" +msgstr "" + +#: ../../../CHANGELOG.rst:529 +msgid "Added guidance on database backups to documentation" +msgstr "" + +#: ../../../CHANGELOG.rst:533 +msgid "1.1.6" +msgstr "" + +#: ../../../CHANGELOG.rst:534 +msgid "*Release date: 19 January 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:536 +msgid "A number of minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:537 +msgid "Added basic infrastructure for creating tabbycat translations" +msgstr "" + +#: ../../../CHANGELOG.rst:541 +msgid "1.1.5" +msgstr "" + +#: ../../../CHANGELOG.rst:542 +msgid "*Release date: 12 January 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:544 +msgid "A number of minor bug fixes and improvements to documentation" +msgstr "" + +#: ../../../CHANGELOG.rst:548 +msgid "1.1.4" +msgstr "" + +#: ../../../CHANGELOG.rst:549 +msgid "*Release date: 25 November 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:551 +msgid "Redesigned the footer area to better describe Tabbycat and to promote donations and related projects" +msgstr "" + +#: ../../../CHANGELOG.rst:552 +msgid "Slight tweaks to the site homepage and main menus to better accommodate the login/log out links" +msgstr "" + +#: ../../../CHANGELOG.rst:553 +msgid "A few minor bug fixes and improvements to error reporting" +msgstr "" + +#: ../../../CHANGELOG.rst:557 +msgid "1.1.3" +msgstr "" + +#: ../../../CHANGELOG.rst:558 +msgid "*Release date: 15 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:560 +msgid "Fixed bug affecting some migrations from earlier versions" +msgstr "" + +#: ../../../CHANGELOG.rst:561 +msgid "Made latest results show question mark rather than crash if a team is missing" +msgstr "" + +#: ../../../CHANGELOG.rst:562 +msgid "Fixed bug affecting the ability to save motions" +msgstr "" + +#: ../../../CHANGELOG.rst:563 +msgid "Fixed bug preventing draw flags from being displayed" +msgstr "" + +#: ../../../CHANGELOG.rst:567 +msgid "1.1.2" +msgstr "" + +#: ../../../CHANGELOG.rst:568 +msgid "*Release date: 14 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:570 +msgid "Allow panels with even number of adjudicators (with warnings), by giving chair the casting vote" +msgstr "" + +#: ../../../CHANGELOG.rst:571 +msgid "Removed defunct person check-in, which hasn't been used since 2010" +msgstr "" + +#: ../../../CHANGELOG.rst:572 +msgid "Collapsed availability database models into a single model with Django content types" +msgstr "" + +#: ../../../CHANGELOG.rst:573 +msgid "Collapsed optional fields in action log entries into a single generic field using Django content types" +msgstr "" + +#: ../../../CHANGELOG.rst:574 +msgid "Added better warnings when attempting to create an elimination round draw with fewer than two teams" +msgstr "" + +#: ../../../CHANGELOG.rst:575 +msgid "Added warnings in Edit Database view when editing debate teams" +msgstr "" + +#: ../../../CHANGELOG.rst:576 +msgid "Renamed \"AIDA pre-2015\" break rule to \"AIDA 1996\"" +msgstr "" + +#: ../../../CHANGELOG.rst:580 +msgid "1.1.1" +msgstr "" + +#: ../../../CHANGELOG.rst:581 +msgid "*Release date: 8 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:583 +msgid "Fixed a bug where the team standings and team tab would crash when some emoji were not set" +msgstr "" + +#: ../../../CHANGELOG.rst:587 +msgid "1.1.0 (Egyptian Mau)" +msgstr "" + +#: ../../../CHANGELOG.rst:588 +msgid "*Release date: 3 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:590 +msgid "Added support for the United Asian Debating Championships style" +msgstr "" + +#: ../../../CHANGELOG.rst:591 +msgid "Added support for the World Schools Debating Championships style" +msgstr "" + +#: ../../../CHANGELOG.rst:592 +msgid "Made Windows 8+ Emoji more colourful" +msgstr "" + +#: ../../../CHANGELOG.rst:593 +msgid "Fixed an incompatability between Vue and IE 10-11 which caused tables to not render" +msgstr "" + +#: ../../../CHANGELOG.rst:594 +msgid "Minor bug fixes and dependency updates" +msgstr "" + +#: ../../../CHANGELOG.rst:598 +msgid "1.0.1" +msgstr "" + +#: ../../../CHANGELOG.rst:599 +msgid "*Release date: 19 August 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:601 +msgid "Fixed a minor bug with the visual importer affecting similarly named institutions" +msgstr "" + +#: ../../../CHANGELOG.rst:602 +msgid "Fixed error message when user tries to auto-allocate adjudicators on unconfirmed or released draw" +msgstr "" + +#: ../../../CHANGELOG.rst:603 +msgid "Minor docs edits" +msgstr "" + +#: ../../../CHANGELOG.rst:607 +msgid "1.0.0 (Devon Rex)" +msgstr "" + +#: ../../../CHANGELOG.rst:608 +msgid "*Release date: 16 August 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:613 +msgid "Redesigned and redeveloped adjudicator allocation page" +msgstr "" + +#: ../../../CHANGELOG.rst:611 +msgid "Redesigned interface, featuring clearer displays of conflict and diversity information" +msgstr "" + +#: ../../../CHANGELOG.rst:612 +msgid "Changes to importances and panels are now automatically saved" +msgstr "" + +#: ../../../CHANGELOG.rst:613 +msgid "Added debate \"liveness\" to help identify critical rooms—many thanks to Thevesh Theva" +msgstr "" + +#: ../../../CHANGELOG.rst:614 +msgid "Panel score calculations performed live to show strength of voting majorities" +msgstr "" + +#: ../../../CHANGELOG.rst:616 +msgid "New features" +msgstr "" + +#: ../../../CHANGELOG.rst:616 +msgid "Added record pages for teams and adjudicators" +msgstr "" + +#: ../../../CHANGELOG.rst:617 +msgid "Added a diversity tab to display demographic information about participants and scoring" +msgstr "" + +#: ../../../CHANGELOG.rst:619 +msgid "Significant general improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:619 +msgid "Shifted most table rendering to Vue.js to improve performance and design" +msgstr "" + +#: ../../../CHANGELOG.rst:620 +msgid "Drastically reduced number of SQL queries in large tables, *e.g.* draw, results, tab" +msgstr "" + +#: ../../../CHANGELOG.rst:624 +msgid "Break round management" +msgstr "" + +#: ../../../CHANGELOG.rst:622 +msgid "Completed support for break round draws" +msgstr "" + +#: ../../../CHANGELOG.rst:623 +msgid "Simplified procedure for adding remarks to teams and updating break" +msgstr "" + +#: ../../../CHANGELOG.rst:624 +msgid "Reworked break generation code to be class-based, to improve future extensibility" +msgstr "" + +#: ../../../CHANGELOG.rst:625 +msgid "Added support for break qualification rules: AIDA Australs, AIDA Easters, WADL" +msgstr "" + +#: ../../../CHANGELOG.rst:628 +msgid "Feedback" +msgstr "" + +#: ../../../CHANGELOG.rst:627 +msgid "Changed Boolean fields in AdjudicatorFeedbackQuestion to reflect what they actually do" +msgstr "" + +#: ../../../CHANGELOG.rst:628 +msgid "Changed \"panellist feedback enabled\" option to \"feedback paths\", a choice of three options" +msgstr "" + +#: ../../../CHANGELOG.rst:630 +msgid "Dropped \"/t/\" from tournament URLs and moved \"/admin/\" to \"/database/\", with 301 redirects" +msgstr "" + +#: ../../../CHANGELOG.rst:631 +msgid "Added basic code linting to the continuous integration tests" +msgstr "" + +#: ../../../CHANGELOG.rst:632 +msgid "Many other small bug fixes, refactors, optimisations, and documentation updates" +msgstr "" + +#: ../../../CHANGELOG.rst:636 +msgid "0.9.0 (Chartreux)" +msgstr "" + +#: ../../../CHANGELOG.rst:637 +msgid "*Release date: 13 June 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:639 +msgid "Added a beta implementation of the break rounds workflow" +msgstr "" + +#: ../../../CHANGELOG.rst:640 +msgid "Added venue constraints, to allow participants or divisions to preferentially be given venues from predefined groups" +msgstr "" + +#: ../../../CHANGELOG.rst:641 +msgid "Added a button to regenerate draws" +msgstr "" + +#: ../../../CHANGELOG.rst:642 +msgid "Refactored speaker standings implementation to match team standings implementation" +msgstr "" + +#: ../../../CHANGELOG.rst:643 +msgid "New standings metrics, draw methods, and interface settings for running small tournaments and division-based tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:644 +msgid "Improved support for multiple tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:645 +msgid "Improved user-facing error messages in some scenarios" +msgstr "" + +#: ../../../CHANGELOG.rst:646 +msgid "Most frontend dependencies now handled by Bower" +msgstr "" + +#: ../../../CHANGELOG.rst:647 +msgid "Static file compilation now handled by Gulp" +msgstr "" + +#: ../../../CHANGELOG.rst:648 ../../../CHANGELOG.rst:660 +msgid "Various bug fixes, optimisations, and documentation edits" +msgstr "" + +#: ../../../CHANGELOG.rst:652 +msgid "0.8.3" +msgstr "" + +#: ../../../CHANGELOG.rst:653 +msgid "*Release date: 4 April 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:655 +msgid "Restored and reworking printing functionality for scoresheets/feedback" +msgstr "" + +#: ../../../CHANGELOG.rst:656 +msgid "Restored Edit Venues and Edit Matchups on the draw pages" +msgstr "" + +#: ../../../CHANGELOG.rst:657 +msgid "Reworked tournament data importers to use csv.DictReader, so that column order in files doesn't matter" +msgstr "" + +#: ../../../CHANGELOG.rst:658 +msgid "Improved dashboard and feedback graphs" +msgstr "" + +#: ../../../CHANGELOG.rst:659 +msgid "Add separate pro speakers tab" +msgstr "" + +#: ../../../CHANGELOG.rst:664 +msgid "0.8.2" +msgstr "" + +#: ../../../CHANGELOG.rst:665 +msgid "*Release date: 20 March 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:667 +msgid "Fixed issue where scores from individual ballots would be deleted when any other panel in the round was edited" +msgstr "" + +#: ../../../CHANGELOG.rst:668 +msgid "Fixed issue where page crashes for URLs with \"tab\" in it but that aren't recognized tab pages" +msgstr "" + +#: ../../../CHANGELOG.rst:672 +msgid "0.8.1" +msgstr "" + +#: ../../../CHANGELOG.rst:673 +msgid "*Release date: 15 March 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:675 +msgid "Fixed a bug where editing a Team in the admin section could cause an error" +msgstr "" + +#: ../../../CHANGELOG.rst:676 +msgid "Added instructions on how to account for speakers speaking twice to docs" +msgstr "" + +#: ../../../CHANGELOG.rst:677 +msgid "Venues Importer wont show VenueGroup import info unless that option is enabled" +msgstr "" + +#: ../../../CHANGELOG.rst:681 +msgid "0.8.0 (Bengal)" +msgstr "" + +#: ../../../CHANGELOG.rst:682 +msgid "*Release date: 29 February 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:684 +msgid "Upgraded to Python 3.4, dropped support for Python 2" +msgstr "" + +#: ../../../CHANGELOG.rst:685 +msgid "Restructured directories and, as a consequence, changed database schema" +msgstr "" + +#: ../../../CHANGELOG.rst:686 +msgid "Added Django migrations to the release (they were previously generated by the user)" +msgstr "" + +#: ../../../CHANGELOG.rst:687 +msgid "Migrated documentation to `Read The Docs `_" +msgstr "" + +#: ../../../CHANGELOG.rst:688 +msgid "New user interface design and workflow" +msgstr "" + +#: ../../../CHANGELOG.rst:689 +msgid "Overhauled tournament preferences to use `django-dynamic-preferences `_" +msgstr "" + +#: ../../../CHANGELOG.rst:690 +msgid "Added new visual data importer" +msgstr "" + +#: ../../../CHANGELOG.rst:691 +msgid "Improved flexibility of team standings rules" +msgstr "" + +#: ../../../CHANGELOG.rst:692 +msgid "Moved data utility scripts to Django management commands" +msgstr "" + +#: ../../../CHANGELOG.rst:693 +msgid "Changed emoji to Unicode characters" +msgstr "" + +#: ../../../CHANGELOG.rst:694 +msgid "Various other fixes and refinements" +msgstr "" + +#: ../../../CHANGELOG.rst:698 +msgid "0.7.0 (Abyssinian)" +msgstr "" + +#: ../../../CHANGELOG.rst:699 +msgid "*Release date: 31 July 2015*" +msgstr "" + +#: ../../../CHANGELOG.rst:701 +msgid "Support for multiple tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:702 +msgid "Improved and extensible tournament data importer" +msgstr "" + +#: ../../../CHANGELOG.rst:703 +msgid "Display gender, region, and break category in adjudicator allocation" +msgstr "" + +#: ../../../CHANGELOG.rst:704 +msgid "New views for online adjudicator feedback" +msgstr "" + +#: ../../../CHANGELOG.rst:705 +msgid "Customisable adjudicator feedback forms" +msgstr "" + +#: ../../../CHANGELOG.rst:706 +msgid "Randomised URLs for public submission" +msgstr "" + +#: ../../../CHANGELOG.rst:707 +msgid "Customisable break categories" +msgstr "" + +#: ../../../CHANGELOG.rst:708 +msgid "Computerised break generation (break round draws not supported)" +msgstr "" + +#: ../../../CHANGELOG.rst:709 +msgid "Lots of fixes, interface touch-ups and performance enhancements" +msgstr "" + +#: ../../../CHANGELOG.rst:710 +msgid "Now requires Django 1.8 (and other package upgrades)" +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/about/contributing.po b/docs/locale/cs/LC_MESSAGES/about/contributing.po new file mode 100644 index 00000000000..299d337a198 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/about/contributing.po @@ -0,0 +1,352 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:56\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/contributing.po\n" +"X-Crowdin-File-ID: 1263\n" +"Language: cs_CZ\n" + +#: ../../../CONTRIBUTING.rst:3 +msgid "Contributing" +msgstr "" + +#: ../../../CONTRIBUTING.rst:5 +msgid "Contributions are welcome, and are greatly appreciated! Every little bit helps, and credit will be given. While at its core Tabbycat is a software project, you do not need to know how to code or use Git in order to help. We welcome feedback and ideas based on your tabbing experience and appreciate suggestions or proposals for how to improve the wording, translation, and design of our interface and documentation." +msgstr "" + +#: ../../../CONTRIBUTING.rst:7 +msgid "Feel free to `join our Facebook group `_ if you have any questions about how to get started." +msgstr "" + +#: ../../../CONTRIBUTING.rst:10 +msgid "Feedback and ideas" +msgstr "" + +#: ../../../CONTRIBUTING.rst:12 +msgid "These can be added as issues in the `GitHub repository `_; posts in our `Facebook group `_; or as an :ref:`email to the developers `." +msgstr "" + +#: ../../../CONTRIBUTING.rst:15 +msgid "Bug reports" +msgstr "" + +#: ../../../CONTRIBUTING.rst:17 +msgid "Please report bugs by opening a new issue in our `GitHub repository `_. It is most helpful if you can include:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:19 +msgid "How Tabbycat was installed (on Heroku, locally on macOS, `etc.`)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:20 +msgid "Any details about your tournament and setup that might be helpful in troubleshooting" +msgstr "" + +#: ../../../CONTRIBUTING.rst:21 +msgid "Detailed steps for how to reproduce the bug" +msgstr "" + +#: ../../../CONTRIBUTING.rst:24 +msgid "Getting started with development" +msgstr "" + +#: ../../../CONTRIBUTING.rst:26 +msgid "To easily test your changes to Tabbycat you probably want a working :ref:`local install ` (without using Docker)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:27 +msgid "Please submit pull requests for features and bug fixes against `develop` (but not `master`)." +msgstr "" + +#: ../../../CONTRIBUTING.rst:28 +msgid "We broadly use the `git-flow workflow `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:29 +msgid "We use Django's testing tools — adding unit tests to new features is greatly appreciated" +msgstr "" + +#: ../../../CONTRIBUTING.rst:31 +msgid "A number of our tests use `Selenium `_ and `ChromeDriver `_ to simulate in-browser functionality. They will fail if you do not have the Chrome browser and ChromeDriver installed." +msgstr "" + +#: ../../../CONTRIBUTING.rst:33 +msgid "A number of extra dependencies are required for running tests, linting, and serving the documentation. These can be installed with::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:37 +msgid "Our ``package.json`` provides a convenience command that runs a standard set of development tools simultaneously, such as the Django server and the automatic recompilation with live injecting of javascript and CSS. Once you have set ``USE_WEBPACK_SERVER=True`` in your ``settings_local.py`` you can then run this with::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:42 +msgid "Generating test data" +msgstr "" + +#: ../../../CONTRIBUTING.rst:44 +msgid "There are management commands to help developers quickly generate data for use in testing, including results and feedback. A list of all commands can be found from ``dj help``, but the most useful in this context are:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:46 +msgid "``dj importtournament ( minimal8team | australs24team | bp88team )``, which imports participant data for the 8-team (``minimal8team``), 24-team Australs (``australs24team``) and 88-team BP (``bp88team``) demonstration tournaments respectively." +msgstr "" + +#: ../../../CONTRIBUTING.rst:47 +msgid "``dj simulaterounds ROUND [ROUND ROUND ...]``, which simulates all of the rounds specified, generating a draw, an adjudicator allocation and a complete set of random results (but not feedback)." +msgstr "" + +#: ../../../CONTRIBUTING.rst:48 +msgid "``dj generatefeedback ROUND [ROUND ROUND ...]``, which randomly generates feedback for all existing debates in the specified rounds." +msgstr "" + +#: ../../../CONTRIBUTING.rst:49 +msgid "``dj generateresults ROUND [ROUND ROUND ...]``, which randomly generates results for all existing debates in the specified rounds. (You don't need to run this if you ran ``simulaterounds``, because that already does it.)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:51 +msgid "Rounds can be specified by sequence number (``seq``) or abbreviation. You can find more information about each of them by adding ``--help`` after the command name." +msgstr "" + +#: ../../../CONTRIBUTING.rst:54 +msgid "Database schema changes" +msgstr "" + +#: ../../../CONTRIBUTING.rst:56 +msgid "When adding new features, it may be necessary to modify the database schema to support these new additions. After the changes are made, the migration files made by ``python manage.py makemigrations`` must also be committed. The migration files should also contain methods fill the new fields based on existing data if possible." +msgstr "" + +#: ../../../CONTRIBUTING.rst:58 +msgid "Fixture files (found under ``data/fixtures/``) may also need to be updated, which can be done by running the ``migrate_fixtures.py`` script under a unmigrated database, then committing the result. ::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:64 +msgid "Style guide" +msgstr "" + +#: ../../../CONTRIBUTING.rst:66 +msgid "For the front end interface design there is a style guide available at \"/style/\" once a tournament has been setup." +msgstr "" + +#: ../../../CONTRIBUTING.rst:68 +msgid "For python code, we use `flake8 `_ to check for a non-strict series of style rules. Warnings will trigger a Travis CI build to fail. The entire codebase can be checked by using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:72 +msgid "For stylesheets, we use `stylelint `_. The relevant code can be checked by using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:76 +msgid "For javascript, we use `eslint `_ to enforce the `standardJS `_ style and the standard recommendation of the vue plugin for eslint. The relevant code can be checked by using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:81 +msgid "Versioning convention" +msgstr "" + +#: ../../../CONTRIBUTING.rst:83 +msgid "Our convention is to increment the minor version whenever we add new functionality, and to increment the major version whenever:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:85 +msgid "the database can't be migrated forwards using ``python manage.py migrate --no-input``, or" +msgstr "" + +#: ../../../CONTRIBUTING.rst:86 +msgid "there is a major change to how the tournament workflow goes, or" +msgstr "" + +#: ../../../CONTRIBUTING.rst:87 +msgid "we make some other change that is, in our opinion, significant enough to warrant a milestone." +msgstr "" + +#: ../../../CONTRIBUTING.rst:89 +msgid "We write `data migrations `_ to allow existing systems to be upgraded easily. However, we don't always support backward database migrations. Our expectation is that long-lived installations keep up with our latest version." +msgstr "" + +#: ../../../CONTRIBUTING.rst:91 +msgid "One day, we hope to have a public API in place to facilitate the integration with other debating tournament software, like registration or adjudicator feedback systems. If and when that happens, we'll probably revise this convention to be more in line with `Semantic Versioning `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:93 +msgid "Starting from version 0.7.0, we use cat breeds as the code names for major versions." +msgstr "" + +#: ../../../CONTRIBUTING.rst:96 +msgid "Documentation" +msgstr "" + +#: ../../../CONTRIBUTING.rst:98 +msgid "Documentation is created using `Sphinx `_ and hosted at `Read The Docs `_. Pushes to ``develop`` will update the *latest* documentation set, while pushes to ``master`` will update the *stable* documentation set." +msgstr "" + +#: ../../../CONTRIBUTING.rst:100 +msgid "To preview the documentation locally, install the development dependencies and then start the server::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:104 +msgid "You should then be able to preview the docs at `127.0.0.1:7999 `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:107 +msgid "Project structure" +msgstr "" + +#: ../../../CONTRIBUTING.rst:109 +msgid "``bin`` contains a number of convenience scripts for starting/stopping Docker, and the webserver/asset pipeline." +msgstr "" + +#: ../../../CONTRIBUTING.rst:110 +msgid "``data`` contains the sample data sets and fixtures used to setup demo tournaments and in automated tests respectively" +msgstr "" + +#: ../../../CONTRIBUTING.rst:111 +msgid "``docs`` contains our document source files and images (although some are linked from the root directory)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:115 +msgid "``tabbycat`` is the main directory containing the Django project" +msgstr "" + +#: ../../../CONTRIBUTING.rst:113 +msgid "``locale`` contains translation strings for shared templates (others are in respective app directories)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:114 +msgid "``templates`` contains shared html templates, stylesheets, javascript source files, and Vue.js components/mixins." +msgstr "" + +#: ../../../CONTRIBUTING.rst:115 +msgid "``utils`` contains shared utilities" +msgstr "" + +#: ../../../CONTRIBUTING.rst:116 +msgid "All other folders are the Django apps that contain specific views, models, and templates for functions such as ``draw`` generation/display, or recording ``results``. Each has sub-folders for tests and templates." +msgstr "" + +#: ../../../CONTRIBUTING.rst:117 +msgid "In the root directory there are a number of files defining our python and javascript dependencies, core configuration files, and key documents like the ``README``" +msgstr "" + +#: ../../../CONTRIBUTING.rst:120 +msgid "Internationalization/Localization" +msgstr "" + +#: ../../../CONTRIBUTING.rst:122 +msgid "The `gettext `_ framework is used to enable the translation of strings in Python files and Django templates. Backend in this context signifies these types of files." +msgstr "" + +#: ../../../CONTRIBUTING.rst:124 +msgid "The backend's translation files can be updated from the ``tabbycat`` directory using one or more of the supporting language codes (see settings.py)::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:128 +msgid "To do more than one language, just specify ``-l`` multiple times, _e.g._ ``-les -lar``." +msgstr "" + +#: ../../../CONTRIBUTING.rst:130 +msgid "These can then be compiled using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:134 +msgid "As it stands Heroku needs the .mo files pre-compiled (see `issue in Heroku Python buildpack `_, so these are committed to Git. Note that the English (``en``) language files should not be compiled; their sole purpose is to provide a source language for `Crowdin `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:136 +msgid "Strings defined in Vue files must similarily be marked with ``gettext`` but must be added manually to ``tabbycat/locale/LANGUAGE_CODE/djangojs.po``, for each language supported. These can then compiled to javascript bundles using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:141 +msgid "These are then also committed to git to save users needing to run `compilejsi18n` during setup. The resulting files are then bundled as part of the npm build task. Updating these translations in development (live-reload) requires the use of the ``cp-i18n`` npm task." +msgstr "" + +#: ../../../CONTRIBUTING.rst:144 +msgid "Release checklist" +msgstr "" + +#: ../../../CONTRIBUTING.rst:146 +msgid "Check that all migrations have been generated and committed into Git" +msgstr "" + +#: ../../../CONTRIBUTING.rst:147 +msgid "Merge translations from the Crowdin pull request and compile messages" +msgstr "" + +#: ../../../CONTRIBUTING.rst:148 +msgid "Bump version number in ``docs/conf.py``" +msgstr "" + +#: ../../../CONTRIBUTING.rst:149 +msgid "Bump version number and (if applicable) codename in ``tabbycat/settings/core.py``" +msgstr "" + +#: ../../../CONTRIBUTING.rst:150 +msgid "Update the main ``CHANGELOG.rst`` file (including release date)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:155 +msgid "Check the major current deployment options, including:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:152 +msgid "The ``deploy_heroku.py`` script" +msgstr "" + +#: ../../../CONTRIBUTING.rst:153 +msgid "The Tabbykitten version" +msgstr "" + +#: ../../../CONTRIBUTING.rst:154 +msgid "Docker (macOS, Windows 10*) and Docker Toolbox (Windows 10 Home) methods" +msgstr "" + +#: ../../../CONTRIBUTING.rst:155 +msgid "Using Bash and Powershell on Windows" +msgstr "" + +#: ../../../CONTRIBUTING.rst:156 +msgid "Using Terminal on macOS (at least test out a fresh install of the npm/pip dependencies)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:157 +msgid "Check that the last Travis CI build passed and run the full local test suite (this will include the Selenium tests that are not on Travis)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:158 +msgid "Shift remaining issues from the Github Milestone" +msgstr "" + +#: ../../../CONTRIBUTING.rst:159 +msgid "Create and finish the release branch as per git-flow" +msgstr "" + +#: ../../../CONTRIBUTING.rst:160 +msgid "Ensure the tag is correct (``vX.Y.Z``) and published to GitHub" +msgstr "" + +#: ../../../CONTRIBUTING.rst:161 +msgid "Back-merge ``master`` to the ``kitten`` branch" +msgstr "" + +#: ../../../CONTRIBUTING.rst:162 +msgid "Back-merge ``develop`` to the in-progress feature branches" +msgstr "" + +#: ../../../CONTRIBUTING.rst:163 +msgid "Issue a formal release with change notes on GitHub" +msgstr "" + +#: ../../../CONTRIBUTING.rst:164 +msgid "Post change notes on the Facebook page/group" +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/about/licence.po b/docs/locale/cs/LC_MESSAGES/about/licence.po new file mode 100644 index 00000000000..8ae73cd7837 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/about/licence.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:56\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/licence.po\n" +"X-Crowdin-File-ID: 1265\n" +"Language: cs_CZ\n" + +#: ../../../LICENSE.rst:3 +msgid "Licence Information" +msgstr "" + +#: ../../../LICENSE.rst:5 +msgid "We haven't released Tabbycat under an open-source licence, so there is no formal and general right to use this software. Nonetheless, you're welcome to freely use Tabbycat to help run a debating tournament if it is a not-for-profit and not-for-fundraising activity. A voluntary donation of A$1 (Australian dollar) per team would be greatly appreciated, and would help us meet costs and justify our ongoing work and support for Tabbycat users. (A donation link is in the footer of your Tabbycat site.)" +msgstr "" + +#: ../../../LICENSE.rst:8 +msgid "Use at for-profit or fundraising tournaments" +msgstr "" + +#: ../../../LICENSE.rst:10 +msgid "If you use Tabbycat at a tournament where any individual or organisation is making a profit or raising funds (other than to cover the direct costs of the tournament), you or your tournament **must** make a donation of A$1 (Australian dollar) per team to the Tabbycat maintenance team, as outlined in each tournament’s donation page (the link is in the footer of your Tabbycat site). This includes instances where organisations run tournaments partly as fundraising activities and applies even if the organisation itself is a non-profit." +msgstr "" + +#: ../../../LICENSE.rst:12 +msgid "While we suggest that non-profit, non-fundraising tournaments budget for a donation of A$1 per team, it is not required in order for such tournaments to use Tabbycat." +msgstr "" + +#: ../../../LICENSE.rst:15 +msgid "Modifications to and redistributions of Tabbycat" +msgstr "" + +#: ../../../LICENSE.rst:17 +msgid "We grant you permission to modify and/or redistribute Tabbycat, provided that" +msgstr "" + +#: ../../../LICENSE.rst:19 +msgid "you do not receive any payment for this modification and/or redistribution," +msgstr "" + +#: ../../../LICENSE.rst:20 +msgid "if you modify Tabbycat, you add prominent notices stating that you modified it," +msgstr "" + +#: ../../../LICENSE.rst:21 +msgid "all references and functionality relating to donations are kept intact, and" +msgstr "" + +#: ../../../LICENSE.rst:22 +msgid "this licence page and all attributions of authorship are included as-is." +msgstr "" + +#: ../../../LICENSE.rst:24 +msgid "Modifying Tabbycat for payment, or using a version of Tabbycat that has been modified for payment, is strictly prohibited without our express permission." +msgstr "" + +#: ../../../LICENSE.rst:26 +msgid "If you use a version of Tabbycat that has been modified by you or a third party to run a for-profit or fundraising tournament, the abovementioned donation of A$1 per team is still required." +msgstr "" + +#: ../../../LICENSE.rst:29 +msgid "Disclaimer of warranty and liability" +msgstr "" + +#: ../../../LICENSE.rst:31 +msgid "We work on this software in our spare time and make it available for not-for-profit use in the hope that it will benefit the debating community. **It is provided \"as is\", without any warranty of any kind, express or implied, including without limitation any warranties of merchantability and fitness for a particular purpose, and we disclaim all legal liability. By using Tabbycat, you agree that none of its contributors will be held liable for any loss or claim arising directly or indirectly from using the software, or for any loss or claim otherwise in connection with the software.**" +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/about/support.po b/docs/locale/cs/LC_MESSAGES/about/support.po new file mode 100644 index 00000000000..73f527e60e4 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/about/support.po @@ -0,0 +1,56 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:57\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/support.po\n" +"X-Crowdin-File-ID: 1267\n" +"Language: cs_CZ\n" + +#: ../../about/support.rst:3 +msgid "Support" +msgstr "" + +#: ../../about/support.rst:5 +msgid "There are a number of ways to report bugs, ask for help, or submit feedback." +msgstr "" + +#: ../../about/support.rst:8 +msgid "Facebook" +msgstr "" + +#: ../../about/support.rst:10 +msgid "`Our Facebook group `_ is a good place to ask for help. It's also a good place to keep up with new releases and participate in more general discussions of features and ideas." +msgstr "" + +#: ../../about/support.rst:13 +msgid "GitHub" +msgstr "" + +#: ../../about/support.rst:15 +msgid "Adding an issue to our `GitHub repository `_ is a great way to let us know about bugs or writeup suggestions for how to improve Tabbycat. Pull requests are also encouraged!" +msgstr "" + +#: ../../about/support.rst:17 +msgid "When submitting bugs or reporting errors please let us know your site address (if installed online) or operating system (if local) along with a complete description of the problem along with any error messages." +msgstr "" + +#: ../../about/support.rst:20 +msgid "Email" +msgstr "" + +#: ../../about/support.rst:22 +msgid "Feel free to :ref:`contact the maintainers directly ` if you are not able to access Facebook or GitHub." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/about/tournament-history.po b/docs/locale/cs/LC_MESSAGES/about/tournament-history.po new file mode 100644 index 00000000000..4a7d24908f6 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/about/tournament-history.po @@ -0,0 +1,248 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:57\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/tournament-history.po\n" +"X-Crowdin-File-ID: 1335\n" +"Language: cs_CZ\n" + +#: ../../about/tournament-history.rst:3 +msgid "Tournament History" +msgstr "" + +#: ../../about/tournament-history.rst:5 +msgid "A partial list of major national and international tournaments (that we know of) which have used Tabbycat." +msgstr "" + +#: ../../about/tournament-history.rst:8 +msgid "2017" +msgstr "" + +#: ../../about/tournament-history.rst:10 +msgid "`APU Philosophy CHallenge `_" +msgstr "" + +#: ../../about/tournament-history.rst:11 +msgid "`ANU Spring IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:12 +msgid "`Australian British Parliamentary Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:13 +msgid "`Australasian Wom*ns Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:14 +msgid "Asia World Schools Debating Championship" +msgstr "" + +#: ../../about/tournament-history.rst:15 +msgid "`Asia British Parliamentary Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:16 +msgid "`Borneo British Parliamentary Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:17 +msgid "`Canadian British Parliamentary Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:18 +msgid "`Cambridge Asian Schools BP Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:19 +msgid "Cambodia United Asian Debating Championship" +msgstr "" + +#: ../../about/tournament-history.rst:20 +msgid "`China British Parliamentary Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:21 +msgid "`Japan British Parliamentary Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:22 +msgid "`Kings College London IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:23 +msgid "`Kuala Lumpur Open Challenge `_" +msgstr "" + +#: ../../about/tournament-history.rst:24 +msgid "`KPU Pro Ams `_" +msgstr "" + +#: ../../about/tournament-history.rst:25 +msgid "`Malaysian National Intervarsity Debating Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:26 +msgid "`Melbourne Mini `_" +msgstr "" + +#: ../../about/tournament-history.rst:27 +msgid "`New Zealand Easters 2017 `_" +msgstr "" + +#: ../../about/tournament-history.rst:28 +msgid "`New Zealand British Parliamentary Debating Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:29 +msgid "`North East Asia Open `_" +msgstr "" + +#: ../../about/tournament-history.rst:30 +msgid "`Swords Mini-Gong `_" +msgstr "" + +#: ../../about/tournament-history.rst:31 +msgid "`Shanghai Asian Schools British Parliamentary Debate Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:32 +msgid "`UCD Law Society IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:33 +msgid "`UCD Vice President's Cup `_" +msgstr "" + +#: ../../about/tournament-history.rst:34 +msgid "`UQ Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:35 +msgid "`UT MARA Open `_" +msgstr "" + +#: ../../about/tournament-history.rst:36 +msgid "`Victoria Cup IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:37 +msgid "`Western Sydney BP Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:38 +msgid "`Wollongong Easters `_" +msgstr "" + +#: ../../about/tournament-history.rst:39 +msgid "`Yale IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:42 +msgid "2016" +msgstr "" + +#: ../../about/tournament-history.rst:44 +msgid "`Sydney Easters `_" +msgstr "" + +#: ../../about/tournament-history.rst:45 +msgid "`Joynt Scroll 2016 `_" +msgstr "" + +#: ../../about/tournament-history.rst:46 +msgid "`Malaysia Debate Open 2016 `_" +msgstr "" + +#: ../../about/tournament-history.rst:47 +msgid "`New Zealand Easters 2016 `_" +msgstr "" + +#: ../../about/tournament-history.rst:48 +msgid "`Perth Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:49 +msgid "`Thailand United Asian Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:50 ../../about/tournament-history.rst:61 +msgid "The National Law School Debate" +msgstr "" + +#: ../../about/tournament-history.rst:51 +msgid "The Khazak National Schools Debating Championship" +msgstr "" + +#: ../../about/tournament-history.rst:54 +msgid "2015" +msgstr "" + +#: ../../about/tournament-history.rst:56 +msgid "`Bali United Asian Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:57 +msgid "`Daejeon Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:58 +msgid "`Joynt Scroll `_" +msgstr "" + +#: ../../about/tournament-history.rst:59 +msgid "`Malaysia Debate Open 2015 `_" +msgstr "" + +#: ../../about/tournament-history.rst:60 +msgid "`New Zealand Easters 2015 `_" +msgstr "" + +#: ../../about/tournament-history.rst:62 +msgid "`UNSW/UTS Easters `_" +msgstr "" + +#: ../../about/tournament-history.rst:65 +msgid "2014" +msgstr "" + +#: ../../about/tournament-history.rst:67 +msgid "`Joynt Scroll 2014 `_" +msgstr "" + +#: ../../about/tournament-history.rst:68 +msgid "NTU United Asian Debating Championships" +msgstr "" + +#: ../../about/tournament-history.rst:69 +msgid "`Otago Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:72 +msgid "2012" +msgstr "" + +#: ../../about/tournament-history.rst:74 +msgid "Wellington Australs" +msgstr "" + +#: ../../about/tournament-history.rst:77 +msgid "2010" +msgstr "" + +#: ../../about/tournament-history.rst:79 +msgid "Auckland Australs" +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/features/adjudicator-allocation.po b/docs/locale/cs/LC_MESSAGES/features/adjudicator-allocation.po new file mode 100644 index 00000000000..54f568da4b8 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/features/adjudicator-allocation.po @@ -0,0 +1,160 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:57\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-allocation.po\n" +"X-Crowdin-File-ID: 1271\n" +"Language: cs_CZ\n" + +#: ../../features/adjudicator-allocation.rst:5 +msgid "Adjudicator Allocation" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:7 +msgid "The adjudicator allocation screen offers the ability to automatically generate an allocation and/or allow you to create or edit an allocation manually. This interface is somewhat complex as it attempts to provide all of the information needed to inform allocation while also providing a number of automatic and manual tools for the allocation process itself." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:10 +msgid "Assigning Debate Priority" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:12 +msgid "For tournaments with more than a few debates you generally want to begin the allocation process by applying a priority value to your debates. A debate's priority value is used by the automatic adjudicator allocator (or the preformed panel indicator) to match the strongest panels to the debates that need them most." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:16 +msgid "The prioritise button in the top-left allows you to assign a priority value automatically based on a debate's bracket or its 'liveness'. Remember that in early rounds there are usually not enough results for the liveness of each debate to be distinct and that Tabbycat measures liveness based on the sum of all live break categories — a debate can have more liveness points than it has teams if there are teams that are live in multiple categories." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:18 +msgid "The automatic prioritiser never uses the 'highest' priority value so that you can easily use this to highlight the debates that need the strongest panels without needing to redistribute the priority of other debates." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:20 +msgid "Regardless of whether you automatically assign priority, there are sliders to the left of each team that can be used to manually specify priority. These are usually used to override the automatic priority of a debate if that matchup needs and especially strong/weak/mediocre panel for reasons that are not reflected in its bracket/liveness." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:24 +msgid "If each debate's priority is the same, the automatic adjudicator will fall-back on using the debate's bracket as a substitute for priority. Thus, you can skip the prioritisation process (or only prioritise the most/least important debates) if you want a relatively even spread of panellists (e.g. during Round 1)." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:27 +msgid "Automatic Adjudicator Allocation" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:29 +msgid "Once you are happy with your priorities you can begin assigning adjudicators. This also has an (optional) automatic process that will create panels for you. In creating these panels automatically, the allocator will:" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:31 +msgid "Avoid creating 'hard' conflicts (i.e. personal or institutional clashes) between adjudicators and teams while also trying to avoid 'soft' conflicts (i.e. avoiding an adjudicator seeing the same team again)." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:32 +msgid "Form panels whose relative average voting score matches the relative priority you assigned to each debate." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:33 +msgid "Allocate trainees (unless disabled or none are under the threshold) to panels (allocated first to the highest-strength panels)." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:34 +msgid "Violate the above intents in cases where there are inescapable constraints — e.g. if there are too many soft or hard conflicts to avoid creating panels that do not trigger them." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:36 +msgid "Remember that Tabbycat will only automatically allocate adjudicators that have been marked as available for this round." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:38 +msgid "To begin this process, click the *Allocate* button in the top-left. If you have :ref:`formed preformed panels ` for this round, the modal will first ask whether you want to assign adjudicators using those panels; otherwise the modal will contain a number of options that can be used to control the allocation. In general, the *minimum feedback score* value is the most important setting to consider as it determines the threshold needed for adjudicators to not be allocated as trainees." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:42 +msgid "Once you click *Auto-Allocate* the modal should disappear and your panels should appear. At large tournaments, and in the later rounds, it is not unheard of for this process to take a minute or longer." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:44 +msgid "You can re-run the automatic allocation process on top of an existing allocation. Thus it is worth tweaking your priorities or allocation settings if the allocation does not seem optimal to you. Also note that the allocation process is not deterministic — if you rerun it the panels will be different." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:46 +msgid "Once your adjudicators have been allocated you can drag and drop them on to different panels. You can also drag and drop them to the 'unused area' (the gray bar at the bottom of the page) if you wish to store them temporarily or remove them from the draw. Dropping an adjudicator into the chair position will 'swap' that adjudicator into the previous position of the new chair." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:49 +msgid "Saving, Live Updates, and Sharing" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:51 +msgid "Changes to your panels save automatically and you can exit the allocation page whenever you wish." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:53 +msgid "In addition, the allocation pages maintain a 'live' connection to the server that shows updates made by other users who are viewing/using the same page. That is to say, if two people on two computers are both viewing the allocation page they should see each other's changes in real-time. This allows you to 'distribute' the task of allocation across individual people (rather than sharing a screen/projector) if desired." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:55 +msgid "It is possible to have users 'undo' or 'overwrite' each others changes despite this live system, e.g. if both users drag and adjudicator somewhere at the same time." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:57 +msgid "If you are dividing the task of allocation across multiple people, the *Sharding* system can help by allowing individuals to limit their view of the draw. The use case here is usually to divide the draw up into mutually-exclusive subsets so that individuals (or groups) of the adjudication core can focus on creating panels across the draw in parallel." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:61 +msgid "To activate sharding, click the small icon to the right of the \"Allocate\" button. This then presents a number of options for how the draw is divide up into distinct sets. If you want to ensure that each person opens a completely distinct set of the draw, you will need to coordinate the options that each user selects here. They will need to set the **same** options for *Shard Mix*, *Shard Split* and *Shard Sort* but select a **different** *Open* option (i.e. opt-in to viewing a different shard from the other users). The ability to exit a sharded view is available in the same dialogue." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:64 +msgid "In-Place Highlights" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:66 +msgid "Adjudicators and teams may have borders of varying colors. These borders indicate that there is a clash — soft or hard — within a debate and highlights the teams/adjudicators that have triggered this. There is a key for these colors available at the top of the page — e.g. orange means *institutional conflict* while blue means *this adjudicator has seen this adjudicator/team before*." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:70 +msgid "In general, you want to be on the lookout for red borders ('hard conflicts') and for teams with orange borders (institutional conflicts). Blue borders on teams/adjudicators and orange borders between adjudicators are usually of lesser concern." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:72 +msgid "There are two 'special' types of highlight — a gray background in the chair position (no chair) or in the panellist position (the panel is not an odd-size). Adjudicators may also have a black background if they have not been marked as available." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:75 +msgid "Hover Highlights" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:77 +msgid "When you hover over an adjudicator or team, they will take on a purple background and other adjudicators or teams may suddenly have different colored backgrounds. These indicate the conflicts that this team/adjudicator has with those other teams/adjudicators. By showing this information you can avoid swapping that adjudicator into a new debate which they have a conflict with." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:81 +msgid "When you hover over an adjudicator or team the top-most area of the screen will show additional information about them, such as all of their previous institutions, their conflicts, their break category, their team members, their region, and who they saw in the last few rounds." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:84 +msgid "Toggle Highlights" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:86 +msgid "In the top-right of the interface are a number of toggles that changes the color of adjudicators and teams to more easily check specific types of information. For example, selecting the gender toggle will color-code teams and adjudicators with the gender that has been recorded in Tabbycat. Note that when a toggle is active, the color key will update to show the meaning of these new colors." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:90 +msgid "When finalising an adjudication you may want to ensure you have turned off any toggle highlights — often they make it more difficult to see the border colors that indicate conflicts." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/features/adjudicator-feedback.po b/docs/locale/cs/LC_MESSAGES/features/adjudicator-feedback.po new file mode 100644 index 00000000000..c1c9ed72f0e --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/features/adjudicator-feedback.po @@ -0,0 +1,258 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:57\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-feedback.po\n" +"X-Crowdin-File-ID: 1273\n" +"Language: cs_CZ\n" + +#: ../../features/adjudicator-feedback.rst:5 +msgid "Adjudicator Feedback" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:7 +msgid "You can set the questions that are used on adjudicator feedback forms. The only field that is permanently there is the ``score`` field, which is an overall score assessing the adjudicator. All other questions (including a generic comments section) must be defined if you want them to be on the form." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:9 +msgid "Currently, there are two methods of setting questions:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:11 +msgid "Through the :ref:`edit database area `. Go to **Setup** > **Edit Database**, then click **Change** next to *Adjudicator feedback questions*. You can add questions here." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:14 +msgid "Using the :ref:`importtournament command `." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:16 +msgid "Most of what you need to know is explained in help text in the edit database area. (Even if you're using ``importtournament``, you might find the field descriptions in the edit database area helpful.) Some more details are here." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:20 +msgid "Answer types and options" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:23 +msgid "Type" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:23 +msgid "Relevant options" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:23 +msgid "Appearance" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:25 +msgid "**checkbox**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:25 +#: ../../features/adjudicator-feedback.rst:27 +#: ../../features/adjudicator-feedback.rst:35 +#: ../../features/adjudicator-feedback.rst:37 +msgid "\\-" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:27 +msgid "**yes/no (dropdown)**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:29 +msgid "**integer (textbox)**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:29 +#: ../../features/adjudicator-feedback.rst:31 +#: ../../features/adjudicator-feedback.rst:33 +msgid "min_value, max_value" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:31 +msgid "**integer scale**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:33 +msgid "**float**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:35 +msgid "**text**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:37 +msgid "**long text**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:39 +msgid "**select one**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:39 +#: ../../features/adjudicator-feedback.rst:41 +msgid "choices" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:41 +msgid "**select multiple**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:44 +msgid "Options:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:46 +msgid "**min_value** and **max_value** specify the minimum and maximum allowable values in the field. Mandatory for \"integer scale\" types and optional for \"integer (textbox)\" and \"float\" types." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:47 +msgid "**choices** is used with \"select one\" and \"select multiple\" types, and is a ``//``-delimited list of possible answers, *e.g.* ``biased//clear//concise//rambly//attentive//inattentive``" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:48 +msgid "**required** specifies whether users must fill out the field before clicking \"submit\". This requirement is only enforced on public submission forms. It is not enforced on forms entered by tab room assistants." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:50 +msgid "The exception to this is the \"checkbox\" type. For checkboxes, \"required\" means that the user cannot submit the form unless the box is checked. Think of it like an \"I agree to the terms\" checkbox. This isn't a deliberate design decision—it's just a quirk of how checkboxes work on web forms." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:53 +msgid "Want another answer type?" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:55 +msgid "We don't really intend to add any further complexity to the built-in feedback system. If the above answer types don't cover your needs, we suggest using a third-party feedback system. You might be able to adapt `SurveyMonkey `_, `Google Forms `_ or `Qualtrics `_ to your needs." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:60 +msgid "We may be persuaded to make an exception if the new question type you have in mind is easy to add: that is, if it is straightforward to implement using standard web page elements and fits into the existing questionnaire framework (see :ref:`feedback-questionnaires` below). If you think there is such a case, please contact us using the contact details in the :ref:`authors` section." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:69 +msgid "Different questionnaires" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:71 +msgid "Tabbycat allows you to specify two questionnaires: one for feedback submitted by teams, and one for feedback submitted by adjudicators. You must specify in each question whether to include the question in each questionnaire." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:75 +msgid "**from_team**, if checked, includes the question in feedback submitted by teams" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:77 +msgid "**from_adj**, if checked, includes the question in feedback submitted by adjudicators" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:81 +msgid "Who gives feedback on whom?" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:82 +msgid "Tabbycat allows for three choices for which adjudicators give feedback on which other adjudicators:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:85 +msgid "Chairs give feedback on panellists and trainees" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:86 +msgid "Chairs give feedback on panellists and trainees, and panellists give feedback on chairs" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:88 +msgid "All adjudicators, including trainees, give feedback on all other adjudicators they have adjudicated with" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:91 +msgid "You can set this in the **feedback paths** option under *Setup* > *Configuration* > *Feedback*. Your choice affects each of the following:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:94 +msgid "The options presented to adjudicators in the online feedback form" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:95 +msgid "The printable feedback forms" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:96 +msgid "The submissions expected when calculating feedback progress and highlighting missing feedback" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:99 +msgid "The feedback paths option only affects feedback from adjudicators. Teams are always assumed to give feedback on the orallist, and they are encouraged to do so through hints on the online and printable feedback forms, but there is nothing technically preventing them from submitting feedback from any adjudicator on their panel." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:105 +msgid "Advanced users" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:108 +msgid "If you need a different setting, you need to edit the source code. Specifically, you should edit the function ``expected_feedback_targets`` in tabbycat/adjfeedback/utils.py." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:112 +msgid "Unless we can be convinced that they are very common, we don't intend to add any further choices to the feedback paths option. If your needs are specific enough that you need to differ from the available settings, they are probably also beyond what is sensible for a built-in feedback system, and we recommend using a third-party feedback system instead." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:119 +msgid "How is an adjudicator's score determined?" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:121 +msgid "For the purpose of the automated allocation, an adjudicator's overall score is a function of their base score, the current round's feedback weight, and their average feedback score. This number is calculated according to the following formula:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:126 +msgid "\\textrm{score} = (1-w)\\times\\textrm{base score} + w\\times\\textrm{average feedback score}" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:130 +msgid "where :math:`w` is the feedback weight for the round. Note that because the feedback score is averaged across all pieces of feedback (rather than on a per-round total) rounds in which a person receives feedback from many sources (say from all teams and all panellists) could impact their average score much more than a round in which they only receive feedback from one or two sources." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:132 +msgid "Under this formula, each round's feedback weight can be used to determine the relative influence of the base score vs feedback in determining the overall score. As an example, say that an adjudicator received 5.0 as their base score, but their average feedback rating has thus far been 2.0. If the current rounds' feedback weight is set to 0.75, then their overall score would be 2.75. If the current round's feedback weight is set to 0.5 their score would be 3.5. If the weight was 0, their score will always be their base score; if the weight was 1 it will always be their average feedback value." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:141 +msgid "To change the weight of a round you will need to go to the Edit Database area, open the round in question, and change its *Feedback weight* value. It is common to set rounds with a low feedback weight value early on in the tournament (when feedback is scant) and to increase the feedback weight as the tournament progresses." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:143 +msgid "A participant's base score can, in conjunction with feedback weight, also be used as a manual override for an adjudicator's overall ranking. At several tournaments, adjudication cores have set every round's feedback weight to 0, and manually adjusted an adjudicator's base score in response to feedback they have received and reviewed. In this way complete control over every adjudicator's overall score can be exerted." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:145 +msgid "If feedback from trainee adjudicators is enabled, any scores that they submit in their feedback are not counted towards that adjudicator's overall score." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:148 +msgid "Ignoring/Discarding feedback" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:150 +msgid "There are some cases where feedback should be discarded or ignored, but there are some differences between the two. Discarded feedback is mostly due to having another piece of feedback that supersedes the discarded ones. Ignored feedback is different as it still counts the affected feedback as submitted, just inconsequential, ignored in the adjudicator's score calculation." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:152 +msgid "Feedback can be marked as discarded in the database view, under the ``confirmed`` field. It can also be marked as ignored in the same view. Controls to reverse these designations are also available there. To mark feedback as ignored, an option is available in the administrator's and assistant's feedback adding form, as well in the form of a toggle link at the bottom of each card." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/features/backups.po b/docs/locale/cs/LC_MESSAGES/features/backups.po new file mode 100644 index 00000000000..b782d550f0c --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/features/backups.po @@ -0,0 +1,120 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:57\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/backups.po\n" +"X-Crowdin-File-ID: 1275\n" +"Language: cs_CZ\n" + +#: ../../features/backups.rst:5 +msgid "Backups" +msgstr "" + +#: ../../features/backups.rst:7 +msgid "Tabbycat doesn't provide an in-built backup system; instead you should create copies of your database directly. Heroku provides a very good backup utility for all sites hosted on Heroku which makes this easy, and for Heroku-based Tabbycat sites, we strongly recommend it." +msgstr "" + +#: ../../features/backups.rst:12 +msgid "You should **always** back up the database before deleting *any* data while in the Edit Database area, because deleting data cannot be undone. It is also a good idea to back up the database before doing anything in the Edit Database area, unless you're very familiar and confident with editing the Tabbycat database directly." +msgstr "" + +#: ../../features/backups.rst:18 +msgid "You may, as a matter of standard practice at large tournaments, wish to back up the database twice per round: Once just after you've generated the draw and allocated adjudicators, and once just after you've finished entering results." +msgstr "" + +#: ../../features/backups.rst:22 +msgid "If you're using an online version of Tabbycat, it's a good idea to download the backups. While it's extremely rare to lose internet access or have an outage in a critical web service (*i.e.*, Heroku), having a local copy of your backups allows you to :ref:`restore your tab to a local installation ` if this ever happens." +msgstr "" + +#: ../../features/backups.rst:29 +msgid "Installations on Heroku" +msgstr "" + +#: ../../features/backups.rst:31 +msgid "Heroku provides a utility to easily back up and restore the entire site database." +msgstr "" + +#: ../../features/backups.rst:35 +msgid "If you don't have the Heroku CLI" +msgstr "" + +#: ../../features/backups.rst:36 +msgid "You can capture backups from the Heroku Dashboard:" +msgstr "" + +#: ../../features/backups.rst:38 +msgid "Go to the `Heroku Dashboard `_ and click on your app." +msgstr "" + +#: ../../features/backups.rst:40 +msgid "Under *Installed add-ons*, go to **Heroku Postgres**." +msgstr "" + +#: ../../features/backups.rst:41 +msgid "Scroll down, and click on the **Capture Backup** button." +msgstr "" + +#: ../../features/backups.rst:42 +msgid "Once the capture has finished, a **Download** button will be available." +msgstr "" + +#: ../../features/backups.rst:44 +msgid "You can't restore a backup without the Heroku Command Line Interface (CLI), so if you end up needing your backup, you'll need to install the `Heroku CLI `_, and then follow the instructions below." +msgstr "" + +#: ../../features/backups.rst:50 +msgid "If you have the Heroku CLI" +msgstr "" + +#: ../../features/backups.rst:52 +msgid "The best guide to backing up databases is the `Heroku Dev Center's PGBackups guide `_." +msgstr "" + +#: ../../features/backups.rst:55 +msgid "To capture a backup::" +msgstr "" + +#: ../../features/backups.rst:59 +msgid "To download the most recently captured backup::" +msgstr "" + +#: ../../features/backups.rst:63 +msgid "To restore a backup::" +msgstr "" + +#: ../../features/backups.rst:67 +msgid "If you have multiple Tabbycat sites, you'll need to specify which one by adding ``--app mytournamentname`` to the end of the command." +msgstr "" + +#: ../../features/backups.rst:71 +msgid "Local installations" +msgstr "" + +#: ../../features/backups.rst:73 +msgid "There are lots of ways to back up local PostgreSQL databases, but we'd suggest using the `pg_dump `_ and `pg_restore `_ commands." +msgstr "" + +#: ../../features/backups.rst:83 +msgid "Restoring a Heroku backup to a local installation" +msgstr "" + +#: ../../features/backups.rst:85 +msgid "As detailed in the `Heroku Dev Center `_, you can restore a downloaded Heroku backup to a local installation. This might be useful if, say, your internet connection breaks irrecoverably in the middle of a tournament and you need to run offline. Of course, for this to work, you need to have downloaded your backup before your internet connection broke---a good reason to download a copy of your backups as soon as you make them." +msgstr "" + +#: ../../features/backups.rst:92 +msgid "Assuming your download is called ``latest.dump`` (this is the default name), your PostgreSQL username is ``tabbycat``, and you wish to call your local database ``fromheroku`` (if not, replace arguments as appropriate)::" +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/features/breaks.po b/docs/locale/cs/LC_MESSAGES/features/breaks.po new file mode 100644 index 00000000000..7faea087cea --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/features/breaks.po @@ -0,0 +1,212 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:56\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/breaks.po\n" +"X-Crowdin-File-ID: 1277\n" +"Language: cs_CZ\n" + +#: ../../features/breaks.rst:5 +msgid "Breaks and Break Rounds" +msgstr "" + +#: ../../features/breaks.rst:7 +msgid "In Tabbycat, elimination rounds (sometimes called *outrounds* or the *final series*) are called \"break rounds\", and the qualification of teams to compete in the elimination phase of a tournament is called the \"break\"." +msgstr "" + +#: ../../features/breaks.rst:12 +msgid "About break categories" +msgstr "" + +#: ../../features/breaks.rst:14 +msgid "Tabbycat supports multiple and arbitrarily-named break categories. Most tournaments will have just one category, typically called \"Open\", leading to the grand final. Some tournaments also have restricted-eligibility break categories, for example, for novice teams or teams for whom English is a second language." +msgstr "" + +#: ../../features/breaks.rst:19 +msgid "Having multiple break categories is intended for tournaments where multiple *parallel* elimination phases derive from the *same* preliminary rounds (inrounds). It's not for parallel but distinct competitions---for those, you should create distinct tournaments." +msgstr "" + +#: ../../features/breaks.rst:27 +msgid "Break qualification rules" +msgstr "" + +#: ../../features/breaks.rst:29 +msgid "Tabbycat supports several break qualification rules, and each break category must be configured to use one of them. Most tournaments will use \"Standard\", which is the default." +msgstr "" + +#: ../../features/breaks.rst:38 +msgid "Rule name (string to use in ``importtournament`` CSV files)" +msgstr "" + +#: ../../features/breaks.rst:39 +msgid "Descrption" +msgstr "" + +#: ../../features/breaks.rst:41 +msgid "Standard (``standard``)" +msgstr "" + +#: ../../features/breaks.rst:42 +msgid "The top *n* teams break. This is the default, and most tournaments use this rule." +msgstr "" + +#: ../../features/breaks.rst:45 +msgid "AIDA 1996 (``aida-1996``)" +msgstr "" + +#: ../../features/breaks.rst:46 +msgid "The top *n* teams that are also in the top three teams from their institution break." +msgstr "" + +#: ../../features/breaks.rst:49 +msgid "AIDA 2016 (Australs) (``aida-2016-australs``)" +msgstr "" + +#: ../../features/breaks.rst:50 +msgid "The top *n* teams that fulfil either of these criteria break:" +msgstr "" + +#: ../../features/breaks.rst:53 +msgid "They are in the top *n* teams overall, and in the top three teams from their institution." +msgstr "" + +#: ../../features/breaks.rst:55 +msgid "They have at least as many wins as the *n*\\ th-ranked team, and they are the top team from their institution." +msgstr "" + +#: ../../features/breaks.rst:58 +msgid "If fewer than *n* teams fulfil either criterion, then the best teams not fulfilling the criteria are added to make *n* teams." +msgstr "" + +#: ../../features/breaks.rst:62 +msgid "AIDA 2016 (Easters) (``aida-2016-easters``)" +msgstr "" + +#: ../../features/breaks.rst:63 +msgid "As for AIDA 2016 (Australs), except that if fewer than *n* teams fulfil either criterion, then only the best teams who are in the top three teams from their institution are added to make *n* teams." +msgstr "" + +#: ../../features/breaks.rst:68 +msgid "The break generators are somewhat more complex than described in the above table: among other things, they also handle cases where there is a tie for the last place in the break, and for those break categories marked \"general\", they will show where ineligible teams would have broken, had they been eligible." +msgstr "" + +#: ../../features/breaks.rst:75 +msgid "Setting up break categories and rounds" +msgstr "" + +#: ../../features/breaks.rst:77 +msgid "For each break category in your tournament, you need to do two things:" +msgstr "" + +#: ../../features/breaks.rst:79 +msgid "Create (and name) a break category" +msgstr "" + +#: ../../features/breaks.rst:80 +msgid "Create break rounds for the category" +msgstr "" + +#: ../../features/breaks.rst:81 +msgid "Set the eligibility of teams to compete in the category" +msgstr "" + +#: ../../features/breaks.rst:83 +msgid "If you only have one break category (open) and you create your tournament using the \"Create New Tournament\" page, simply enter the number of teams in the break (*e.g.*, 8 if you're breaking to quarterfinals). Tabbycat will create the break category and break rounds for you. For any further break categories, you'll need to go to the **Breaks** item in the left-hand menu for a particular tournament and then click **Break Categories**. Fill out the forms for the number of new break categories and save. Rounds will be created automatically. You'll still need to set the eligibility of teams though, as in (3) below." +msgstr "" + +#: ../../features/breaks.rst:92 +msgid "If you create your tournament using the `importtournament` command or in **Edit Database**, you'll need to do all three steps above yourself. You may also want to edit the break rounds (2) to change their names." +msgstr "" + +#: ../../features/breaks.rst:97 +msgid "1. Creating break categories" +msgstr "" + +#: ../../features/breaks.rst:99 +msgid "If using the `importtournament` command, there is an example file, *break_categories.csv*, that you can copy and adjust. If using **Edit Database**, add categories under **Break Qualification > Break categories**." +msgstr "" + +#: ../../features/breaks.rst:103 +msgid "Most of the fields are self-explanatory or described on the Edit Database form, except for one: \"rule\", which sets the break qualification rule. Permissible values are described in :ref:`breakqual-rules` above. If using `importtournament`, be sure to use the correct string (in brackets in the table). The rule defaults to \"Standard\" (``standard``)." +msgstr "" + +#: ../../features/breaks.rst:109 +msgid "The \"institution cap\" field was removed in Tabbycat 1.0. All Australs break qualification rules are now hard-coded to a cap of three teams per institution." +msgstr "" + +#: ../../features/breaks.rst:114 +msgid "2. Creating break rounds" +msgstr "" + +#: ../../features/breaks.rst:116 +msgid "You should create a round for every break round you intend to hold, including it in *rounds.csv* if using `importtournament`, or adding them under **Tournaments > Rounds** if using **Edit Database**. Be careful to set the following fields correctly:" +msgstr "" + +#: ../../features/breaks.rst:121 +msgid "*Break category* must be set to the relevant break category." +msgstr "" + +#: ../../features/breaks.rst:122 +msgid "*Stage* and *draw type* must both be set to \"Elimination\"." +msgstr "" + +#: ../../features/breaks.rst:125 +msgid "3. Setting break eligibility" +msgstr "" + +#: ../../features/breaks.rst:127 +msgid "Once a break category has been created it will not have any teams eligible for it, even if it was marked as \"Is general\". To edit the eligibility of teams for any break round go to the **Breaks** item in the left-hand menu for a particular tournament and then click **Team Eligiblity**." +msgstr "" + +#: ../../features/breaks.rst:132 +msgid "Here you can select \"all\" or \"none\" to toggle all team eligiblities or edit them using the tick boxes. Once you **save** it should return you to the main break page which will display the number of teams marked eligible." +msgstr "" + +#: ../../features/breaks.rst:136 +msgid "Adjudicators can be marked as \"breaking\" on the **Feedback** page; clicking **Adjudicators** on the breaks page will take you straight there." +msgstr "" + +#: ../../features/breaks.rst:140 +msgid "Generating the break" +msgstr "" + +#: ../../features/breaks.rst:142 +msgid "Unlike team or speaker standings, each category's break (and the break ranks of teams) are not determined automatically and updated continuously. Instead each can be generated (and regenerated) as desired." +msgstr "" + +#: ../../features/breaks.rst:146 +msgid "To do so go to the **Breaks** item in the left-hand menu and then click the white button that corresponds to the break category you'd like to determine the rankings for. When prompted, select **Generate the break for all categories** to display the list of breaking teams." +msgstr "" + +#: ../../features/breaks.rst:151 +msgid "From this page you can update the breaking teams list for this break category (or all categories) as well as view and edit 'remarks' that account for cases in which a team may not break (such as being capped or losing a coin toss)." +msgstr "" + +#: ../../features/breaks.rst:155 +msgid "Please double-check the generated break before announcing or releasing it. Although the break generation code is designed to handle edge cases, we don't test the code for such cases." +msgstr "" + +#: ../../features/breaks.rst:160 +msgid "Creating draws for break rounds" +msgstr "" + +#: ../../features/breaks.rst:162 +msgid "Creating a draw for a break round proceeds as normal, except that the team availability process is skipped. Instead, when you visit the availability page for that round it will have automatically determined which teams should be debating based upon the determined break for that category. Once a draw has been generated it will then use the relevant break ranks to create the matchups (ie 1st-breaking vs 16th-breaking, 2nd vs 15th, *etc.*). Subsequent break rounds will then also automatically determine matchups based on the previous round's results and room ranks." +msgstr "" + +#: ../../features/breaks.rst:171 +msgid "If the \"break size\" of a break category is not a power of 2, it will treat the first break round as a partial-elimination draw and only create a draw for the teams not skipping the partial-elimination round. Subsequent break rounds will then process as described above." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/features/check-ins.po b/docs/locale/cs/LC_MESSAGES/features/check-ins.po new file mode 100644 index 00000000000..e942e2fa898 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/features/check-ins.po @@ -0,0 +1,136 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:56\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/check-ins.po\n" +"X-Crowdin-File-ID: 1279\n" +"Language: cs_CZ\n" + +#: ../../features/check-ins.rst:5 +msgid "Check-Ins" +msgstr "" + +#: ../../features/check-ins.rst:7 +msgid "A 'Check-in' is a record of a speaker, adjudicator, venue, or ballot's status at a particular point in time. Typically these are used at large tournaments to reliably track who is or is not present for the first round of each day." +msgstr "" + +#: ../../features/check-ins.rst:9 +msgid "Check-ins serve a similar purpose to the :ref:`availability ` system. However availabilities are tied to a particular round rather than to a particular time — they are generally used to record instances where you know ahead of time whether a person should or should not be included in a draw. In contrast, check-ins are useful for when you *don't* know ahead of time whether a person will be able to be put into the draw and so want to be able to confirm their presence with a high degree of confidence. That said the two systems interact — the standard availability pages allow you to easily set all adjudicators or teams who have checked-in as available for a given round." +msgstr "" + +#: ../../features/check-ins.rst:12 +msgid "Check-In Identifiers" +msgstr "" + +#: ../../features/check-ins.rst:14 +msgid "Check-ins are associated with a 'identifier' — a number that is unique to each speaker and adjudicator. To generate these numbers go to the *Identifiers* section under the Check-Ins menu. From here you generate identifiers for Speakers, Adjudicators, and Venues as needed. Note also that Identifiers can be manually added or edited in the *Edit Database* area if necessary." +msgstr "" + +#: ../../features/check-ins.rst:18 +msgid "Once this number has been generated it can be transformed into a barcode so that it can be easily included on tournament badges or otherwise printed and disbursed. On the same *Identifiers* page you can use the *View barcodes* option to open up a page that lists all the barcodes for the speakers, adjudicators, or venues." +msgstr "" + +#: ../../features/check-ins.rst:22 +msgid "The identifiers for ballots are automatically generated when printing ballots." +msgstr "" + +#: ../../features/check-ins.rst:25 +msgid "Recording Check-Ins" +msgstr "" + +#: ../../features/check-ins.rst:27 +msgid "On the *Scanning* section of Check-ins you can record a particular check-in. This can be done in a few different ways:" +msgstr "" + +#: ../../features/check-ins.rst:29 +msgid "You can type in the Identifier number into the box. Once five numbers have been identified it will automatically issue the check-in and clear the input field for the next number." +msgstr "" + +#: ../../features/check-ins.rst:31 +msgid "If you have purchased barcode scanners and configured them as USB keyboards they should then be compatible with this page: upon page load the cursor should be positioned in the input field, and any scanned barcodes should populate it with the specified number, issue the check-in, and then clear the box for the next scan." +msgstr "" + +#: ../../features/check-ins.rst:33 +msgid "Barcode scanners are probably cheaper than you think. A perfectly serviceable model should be around $20 USD or less although a cursory Google search might at first turn up models that are many times that amount. If you are a curious tab director, or are involved in a tournament with a little spare money, having just one or two around for critical tasks can be highly valuable." +msgstr "" + +#: ../../features/check-ins.rst:35 +msgid "If your device has a (web)cam you can use the Scan Using Camera button. Any barcodes put in front of the camera's video stream will be scanned into the form. A sound will play when a barcode has been identified — so be aware that turning sound on or using headphones can help identify when a scan has been made." +msgstr "" + +#: ../../features/check-ins.rst:39 +msgid "Camera scanning works on most modern browsers although it will only work with Safari 11 or higher (iOS 11+ and macOS 10.13+). Camera scanning may also not work when using a local-installation of Tabbycat in all browsers, *except* Firefox where it seems to. Depending on the quality of your camera barcodes that are less than 4cm wide may not be recognised — ideally barcodes should be at least 5cm if using this method as your main way of checking-in things." +msgstr "" + +#: ../../features/check-ins.rst:41 +msgid "The Check-in status page (described below) allows assistants and administrators to manually check-in particular people or entire institutions without needing to know their identifiers." +msgstr "" + +#: ../../features/check-ins.rst:44 +msgid "The Check-In 'Window'" +msgstr "" + +#: ../../features/check-ins.rst:46 +msgid "Because Check-In events are not explicitly linked to rounds there is essentially a 'window' or time period in which a check-in is still considered valid. The time of this 'window' in hours can be set in *Setup* > *Configuration* > *Data Entry*." +msgstr "" + +#: ../../features/check-ins.rst:48 +msgid "At tournaments the run check-ins during the start of each day the check-in 'window' (i.e. the time before check-ins expire) you can leave this window setting at the default time (12 hours) which should give enough time to distinguish between the first check-ins of that day as compared to the last check-ins of the previous day. At tournaments where you want to run a check-in process at the start of every round you may want to set the time to around 2 hours or something much shorter." +msgstr "" + +#: ../../features/check-ins.rst:51 +msgid "Viewing Check-Ins" +msgstr "" + +#: ../../features/check-ins.rst:53 +msgid "On the *People Statuses* section of Check-ins you can view who has or has not been checked-in. This page will live-update with the latest check-ins so you should be able to leave it open to monitor income attendances." +msgstr "" + +#: ../../features/check-ins.rst:57 +msgid "The blue \"tick\" boxes allow you to manually check-in people and/or entire institutions (for *People*) or venues and/or venue groups (for *Venues*) , without the need to scan their identifiers. This style of check-in is designed for use an auditorium roll-call type situation where you might be running through a list of people to the room or identifying absences on a per-institution basis." +msgstr "" + +#: ../../features/check-ins.rst:59 +msgid "A public version of this check-in status page can be enabled under *Setup* > *Configuration* > *Public Features* which can be useful for allowing people to self-police check-ins and/or validate their check-in worked." +msgstr "" + +#: ../../features/check-ins.rst:62 +msgid "Check-Ins for Ballots" +msgstr "" + +#: ../../features/check-ins.rst:64 +msgid "Ballots can be checked-in to quickly validate which ballots are physically present in the tab room. This can help more quickly identify ballots that are missing. Which ballots have or have not been checked-in will show up on the Results page. Ballots can be scanned using the standard 'Scan Identifiers' page." +msgstr "" + +#: ../../features/check-ins.rst:66 +msgid "Barcodes are automatically assigned and included to ballots when they are printed. Barcodes have no check-in window — any relevant check-in event counts regardless of how long ago it was." +msgstr "" + +#: ../../features/check-ins.rst:69 +msgid "Check-Ins for Venues" +msgstr "" + +#: ../../features/check-ins.rst:71 +msgid "Venues can be checked-in, but what a 'venue check-in' means is a bit more flexible. It might be used to validate which rooms are debate-ready at the start of a day (i.e. unlocked; has a desk) or it could be used during the rounds to record which rooms have returned their ballots." +msgstr "" + +#: ../../features/check-ins.rst:73 +msgid "Venues have a separate check-in window setting to that of people." +msgstr "" + +#: ../../features/check-ins.rst:75 +msgid "Venues have their own Status page (like people) and can be checked-in there manually. Like speakers and adjudicators their barcodes can also be printed off." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/features/data-entry.po b/docs/locale/cs/LC_MESSAGES/features/data-entry.po new file mode 100644 index 00000000000..e00b2203446 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/features/data-entry.po @@ -0,0 +1,168 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-entry.po\n" +"X-Crowdin-File-ID: 1281\n" +"Language: cs_CZ\n" + +#: ../../features/data-entry.rst:5 +msgid "Entering Ballots and Feedback" +msgstr "" + +#: ../../features/data-entry.rst:8 +msgid "Ballot check-in" +msgstr "" + +#: ../../features/data-entry.rst:10 +msgid "For tournaments that require it, there is a \"ballot check-in\" page that can be used to record the arrival of ballots to the tab room. When there's a missing ballot, it can help establish whether the ballot never made it to the tab room, or whether it's probably floating around in the room forgotten. Also, it can help enforce early checks that panels return the correct number of ballots to the room." +msgstr "" + +#: ../../features/data-entry.rst:12 +msgid "To get to the ballot check-in, click the relevant round in the menu of the admin area, and then click \"Results\" and then \"Ballot Check-In\". This requires superuser privileges." +msgstr "" + +#: ../../features/data-entry.rst:14 +msgid "There's no adverse effect from not using the ballot check-in. Data enterers will still be able to enter and confirmed ballots, even if not checked in." +msgstr "" + +#: ../../features/data-entry.rst:18 +msgid "Since the ballot check-in tends to require a dedicated computer or two, it can be worth creating a separate superuser account for ballot check-in, so that it doesn't appear on the action logs as being by a particular person." +msgstr "" + +#: ../../features/data-entry.rst:19 +msgid "Don't forget to provision a computer or two for this if you're planning to use it." +msgstr "" + +#: ../../features/data-entry.rst:20 +msgid "Ballot check-ins can be a bottleneck, so you might decide they're not worth using. Alternatively, you might have multiple computers for this purpose, or you might dedicate a tab room helper to driving the process (since this is probably faster than runners doing the typing in turn)." +msgstr "" + +#: ../../features/data-entry.rst:23 +msgid "Ballot entry" +msgstr "" + +#: ../../features/data-entry.rst:27 +msgid "Most tab rooms run some sort of check system to ensure data is entered accurately. In Tabbycat, this is built into the system, which also helps speed it up." +msgstr "" + +#: ../../features/data-entry.rst:29 +msgid "As a general principle, Tabbycat requires all ballots to be looked at by two people. The first person enters the data from the ballot, and the second person checks it. The second person isn't allowed to modify the data—they either confirm it or reject it, and if they reject it, then the whole process starts again. This is by design: to be confirmed, the *same* data must have been seen by at least two people." +msgstr "" + +#: ../../features/data-entry.rst:31 +msgid "The administrator area does **not** work like this. It's designed to be flexible, so allows you to edit, confirm or unconfirm any ballot at any time. For this reason, you should use the **assistant** area to enter ballots, even if you have a superuser account." +msgstr "" + +#: ../../features/data-entry.rst:35 +msgid "Don't forget to check the totals against the ballot—they're a useful integrity check too." +msgstr "" + +#: ../../features/data-entry.rst:36 +msgid "Don't forget to check the winner against the ballot! If the adjudicator gets it wrong, it's worth asking to clarify." +msgstr "" + +#: ../../features/data-entry.rst:37 +msgid "It can be helpful to think about the room layout to maximize efficiency." +msgstr "" + +#: ../../features/data-entry.rst:38 +msgid "Some tab rooms like to assign some to data entry and some to verification. This isn't really necessary, since Tabbycat doesn't let the same person enter and verify the same ballot. (This is one of many reasons why every person should have their own account.)" +msgstr "" + +#: ../../features/data-entry.rst:39 +msgid "Emails can be configured to be sent to adjudicators as a receipt of their ballot once confirmed." +msgstr "" + +#: ../../features/data-entry.rst:42 +msgid "Duplicate/Swing Speeches" +msgstr "" + +#: ../../features/data-entry.rst:46 +msgid "When entering the ballots there is a toggle label *'Iron' speeches*. When set to \"yes\" this allows you to have the same speaker deliver multiple speeches provided their extra speeches are labelled on the form as 'duplicates'. Typically, most tournaments require that lesser 'iron man' speech is discarded from the tab, which would mean that you would mark the lower speaker of the two scores as the duplicate (note that this may require you to check each score's average across a panel)." +msgstr "" + +#: ../../features/data-entry.rst:48 +msgid "Speeches marked as duplicates are not included in the speaker tab. This means that they can also be used to exclude swing speakers from the tab as needed; even if they do not actually speak twice. To do so, change the name of the swing speaker to be that of an existing team member and ensure that that speech is marked as a duplicate." +msgstr "" + +#: ../../features/data-entry.rst:50 +msgid "There is also an option under **Standings** in the **Configuration** section that specifies the number of debates a speaker can miss before you will not show on the tab. By default there is no limit, but if need be this can be set to hide swing speakers from the final speaker tab." +msgstr "" + +#: ../../features/data-entry.rst:53 +msgid "Feedback entry" +msgstr "" + +#: ../../features/data-entry.rst:57 +msgid "Feedback doesn't have the same verification process as ballots. Feedback that is entered by the tab room is assumed to be confirmed. If feedback is entered multiple times, all copies are retained but only the last one \"counts\" (is considered confirmed)." +msgstr "" + +#: ../../features/data-entry.rst:60 +msgid "Online entry" +msgstr "" + +#: ../../features/data-entry.rst:62 +msgid "There are two methods of allowing ballots and feedback to be submitted online. Both are set in the **Data Entry** page of each tournament's **Configuration** section and can be set independently; both in whether each can be submitted online at all and in which method of online submission are available." +msgstr "" + +#: ../../features/data-entry.rst:68 +msgid "Private URLs" +msgstr "" + +#: ../../features/data-entry.rst:70 +msgid "The first method of data entry is using 'private URLs'. When this setting is enabled you can create a special URL that is unique to a participant. This link contains a number of random characters and is not displayed publicly; it is in effect a secret that only that a specific participant should know. Presuming people do not share these links to others, this provides a means to (relatively) securely identify who is submitting what information. Because Tabbycat knows which participant has which URL it will only allow them to submit feedback/ballots for debates that they were speakers/adjudicators in." +msgstr "" + +#: ../../features/data-entry.rst:72 +msgid "Private URLs should provide more than adequate security for almost all tournaments' purposes, but they aren't foolproof. Anyone with access to the URL for a participant can submit feedback or ballots on their behalf, so it's important that participants not share their URLs. This also means participants need to be careful when submitting from devices they do not own, because the URL will be logged in that device's browser history." +msgstr "" + +#: ../../features/data-entry.rst:74 +msgid "These links must be generated within Tabbycat after the preference is enabled. To do so go to the **Feedback** section and then the **Private URLs** area. Once there you will be prompted to generate those URLs for all participants, which — once generated — will be presented in separate tables (one for teams; one for adjudicators)." +msgstr "" + +#: ../../features/data-entry.rst:78 +msgid "These URLs can then be distributed to each person in a number of ways. There are pages within Tabbycat for printing them out (one URL per page labelled by recipient) or emailing them out (providing participants have been assigned email addresses). In the past tournaments have also used data from this table to send out SMSs by bulk, or distributed them to institutional representatives to disburse." +msgstr "" + +#: ../../features/data-entry.rst:82 +msgid "You can assign email address to participants using the :ref:`importtournament command ` when importing your registration data, or by going to the *Edit Data* area and looking up each Speaker/Adjudicator." +msgstr "" + +#: ../../features/data-entry.rst:83 +msgid "If, after generating the private URLs, you add additional Teams or Adjudicators you can go to the *Edit Database* area , look up each Speaker/Adjudicator, and type in a bunch of random characters as their *Url key* to assign them a private URL." +msgstr "" + +#: ../../features/data-entry.rst:84 +msgid "You can delete the current set of URLs by running this command in a shell on your server (replacing TOURNAMENT_SLUG with the appropriate value): ``python manage.py privateurls delete --tournament TOURNAMENT_SLUG``" +msgstr "" + +#: ../../features/data-entry.rst:89 +msgid "Public URLs" +msgstr "" + +#: ../../features/data-entry.rst:91 +msgid "The second method of data entry is using 'normal URLs'. This essentially means that any users visiting the public version of the site is able to submit a ballot or feedback (as specified by their respective settings). They do so by self-selecting which Team or Adjudicator they are then entering in a form as normal." +msgstr "" + +#: ../../features/data-entry.rst:93 +msgid "This is, rather obviously, not a particularly secure method of data entry — nothing is stopping anyone on the site from entering data as someone else. The data can be checked, verified, and edited as normal by admins however. As such, this method is only recommended for small tournaments where you can trust those present to enter accurate information (or where accuracy is not crucial)." +msgstr "" + +#: ../../features/data-entry.rst:95 +msgid "There is an additional setting to set a 'tournament password' that needs to be submitted to enable the form. It is imagined, that if enabled, this password would only be distributed to tournament participants. However this only helps (at best) prevent non-participants from entering information; the fundamental problem of not verifying who is submitting what information is still present." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/features/data-importers.po b/docs/locale/cs/LC_MESSAGES/features/data-importers.po new file mode 100644 index 00000000000..fddf67c1e69 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/features/data-importers.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:56\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-importers.po\n" +"X-Crowdin-File-ID: 1283\n" +"Language: cs_CZ\n" + +#: ../../features/data-importers.rst:5 +msgid "Tournament Data Importers" +msgstr "" + +#: ../../features/data-importers.rst:7 +msgid "This page describes how to write your own tournament data importer. It is aimed at an audience that is familiar with programming in Python, and may be willing to get their head around the Django model if necessary." +msgstr "" + +#: ../../features/data-importers.rst:9 +msgid "The **tournament data importer** is the class that imports data from one or more files (usually CSV files) into the database. A base class ``BaseTournamentDataImporter`` is in `importer/base.py `_. An example of a data importer is in `importer/anorak.py `_." +msgstr "" + +#: ../../features/data-importers.rst:11 +msgid "Todo" +msgstr "" + +#: ../../features/data-importers.rst:11 +msgid "This page is incomplete. If you're finding this information insufficient, please contact Chuan-Zheng using the contact details in the :ref:`authors` section." +msgstr "" + +#: ../../features/data-importers.rst:14 +msgid "Why write your own?" +msgstr "" + +#: ../../features/data-importers.rst:16 +msgid "While Tabbycat has standard import formats, you might find that none of them fit the data that you need to import." +msgstr "" + +#: ../../features/data-importers.rst:18 +msgid "It's not possible to devise a single, universally-convenient import file format. Tabbycat supports way too many permutations of configurations for this to be workable. Instead, we provide the ones that have been useful before and are therefore likely to be useful again—but if your tournament has different needs, you might decide that it's easier to write an importer to conform to you, rather than conform to the importer." +msgstr "" + +#: ../../features/data-importers.rst:20 +msgid "A base importer class abstracts away most of the nitty-gritty of parsing files, allowing new importers to focus on their interpretation with as little code as possible." +msgstr "" + +#: ../../features/data-importers.rst:22 +msgid "To allow new importers to be written with as little code as possible, most of the work is abstracted to the base class. The flipside of this abstraction is that it induces a learning curve." +msgstr "" + +#: ../../features/data-importers.rst:25 +msgid "Basic workflow" +msgstr "" + +#: ../../features/data-importers.rst:27 +msgid "Choose a name. We name importers after items of clothing in alphabetical order (starting at 'Anorak')." +msgstr "" + +#: ../../features/data-importers.rst:28 +msgid "Write a subclass of ``BaseTournamentDataImporter``." +msgstr "" + +#: ../../features/data-importers.rst:29 +msgid "Write the front-end interface. This will probably be a `Django management command `_." +msgstr "" + +#: ../../features/data-importers.rst:32 +msgid "A basic example" +msgstr "" + +#: ../../features/data-importers.rst:34 +msgid "It's easiest to start with an example. Here's a basic importer with just one import method, which imports adjudicators." +msgstr "" + +#: ../../features/data-importers.rst:60 +msgid "Let's break this down. The method ``import_adjudicators()`` takes a single argument, a file object representing the CSV file. Most of the work is passed off to ``self._import()``. This helper method is defined in ``BaseTournamentDataImporter`` and is where most of the intelligence lies." +msgstr "" + +#: ../../features/data-importers.rst:65 +msgid "When called, ``self._import(f, model, interpreter)`` does the following:" +msgstr "" + +#: ../../features/data-importers.rst:67 +msgid "It reads the CSV file using a `csv.DictReader `_. A ``DictReader`` iterates through the CSV file, yielding a dict for each line, whose keys are given by the column header names in the first row of the file." +msgstr "" + +#: ../../features/data-importers.rst:72 +msgid "On each line:" +msgstr "" + +#: ../../features/data-importers.rst:74 +msgid "It passes the dict given by the ``DictReader`` to ``interpreter``. The interpreter modifies the dict (or creates a new one) to prepare it for the model constructor, and returns it." +msgstr "" + +#: ../../features/data-importers.rst:78 +msgid "The dict returned by ``interpreter`` is then passed as keyword arguments to the ``model`` constructor." +msgstr "" + +#: ../../features/data-importers.rst:81 +msgid "So in very simplified form, ``self._import(f, model, interpreter)`` does this:" +msgstr "" + +#: ../../features/data-importers.rst:92 +msgid "(There's a lot more to it than that, but that's the basic idea.)" +msgstr "" + +#: ../../features/data-importers.rst:94 +msgid "A consequence of relying on column headers to identify fields is that the header names in CSV files must match model field names exactly, unless they are deleted by the interpreter using the ``DELETE`` keyword (see below)." +msgstr "" + +#: ../../features/data-importers.rst:100 +msgid "Interpreters" +msgstr "" + +#: ../../features/data-importers.rst:101 +msgid "The main task of an importer, then, is to provide interpreters so that ``self._import`` knows how to interpret the data in a CSV file. An interpreter takes a dict and returns a dict. For example:" +msgstr "" + +#: ../../features/data-importers.rst:113 +msgid "This interpreter does the following:" +msgstr "" + +#: ../../features/data-importers.rst:115 +msgid "Replaces ``line['institution']`` with an Institution object, by looking up the original value by name." +msgstr "" + +#: ../../features/data-importers.rst:117 +msgid "Replaces ``line['gender']`` with a ``Person.GENDER_*`` constant. We'll come back to how this works later." +msgstr "" + +#: ../../features/data-importers.rst:119 +msgid "Adds a new ``line['tournament']`` entry to the dict, being the Tournament object represented by ``self.tournament``, the tournament that was passed to the importer's constructor." +msgstr "" + +#: ../../features/data-importers.rst:122 +msgid "Leaves all other entries in the dict unchanged." +msgstr "" + +#: ../../features/data-importers.rst:124 +msgid "This looks simple enough, but it's very robust. What if a cell in the CSV file is blank, or what if the file omits a column? (For example, some tournaments might not collect information about participant gender, so Tabbycat doesn't require it.) We could deal with these scenarios on a case-by-case basis, but that's cumbersome." +msgstr "" + +#: ../../features/data-importers.rst:130 +msgid "Instead, we provide a ``make_interpreter`` method that returns an interpreter method which, in turn, takes care of all these details. This way, all you have to do is provide the functions that transform fields. So the following is equivalent to the above, but better:" +msgstr "" + +#: ../../features/data-importers.rst:143 +msgid "Notice that we provided a callable in two of these keyword arguments, and a (non-callable) Tournament object to the third. ``make_interpreter`` is smart enough to tell the difference, and treat them differently. What it does with each field depends on (a) whether a value exists in the CSV file and (b) what transformation function was provided, as summarised in the following table:" +msgstr "" + +#: ../../features/data-importers.rst:150 +msgid "Value in CSV file" +msgstr "" + +#: ../../features/data-importers.rst:150 +msgid "Transformation" +msgstr "" + +#: ../../features/data-importers.rst:150 +msgid "Action" +msgstr "" + +#: ../../features/data-importers.rst:152 +msgid "provided and not callable" +msgstr "" + +#: ../../features/data-importers.rst:152 +msgid "populate model field with interpreter value" +msgstr "" + +#: ../../features/data-importers.rst:155 +msgid "does not exist or blank" +msgstr "" + +#: ../../features/data-importers.rst:155 +msgid "callable or not provided" +msgstr "" + +#: ../../features/data-importers.rst:155 +msgid "do not pass to model constructor" +msgstr "" + +#: ../../features/data-importers.rst:158 ../../features/data-importers.rst:161 +msgid "exists and not blank" +msgstr "" + +#: ../../features/data-importers.rst:158 +msgid "callable" +msgstr "" + +#: ../../features/data-importers.rst:158 +msgid "call interpreter on column value, pass result to model constructor" +msgstr "" + +#: ../../features/data-importers.rst:161 +msgid "not provided" +msgstr "" + +#: ../../features/data-importers.rst:161 +msgid "pass column value directly to model constructor" +msgstr "" + +#: ../../features/data-importers.rst:169 +msgid "If a transformation isn't an existing method, you might find `lambda functions `_ useful. For example: ``lambda x: Speaker.objects.get(name=x)``." +msgstr "" + +#: ../../features/data-importers.rst:173 +msgid "You shouldn't check for mandatory fields. If a mandatory field is omitted, the model constructor will throw an error, and ``self._import()`` will catch the error and pass a useful message on to the caller. On the other hand, if it's an optional field in the model, it should optional in the importer, too. Similarly, interpreters generally shouldn't specify defaults; these should be left to model definitions." +msgstr "" + +#: ../../features/data-importers.rst:180 +msgid "You don't need to include interpreter transformations for things like converting strings to integers, floats or booleans. Django converts strings to appropriate values when it instantiates models. So, for example, adding ``test_score=float`` to the above interpreter would be redundant." +msgstr "" + +#: ../../features/data-importers.rst:186 +msgid "More complicated interpreters" +msgstr "" + +#: ../../features/data-importers.rst:188 +msgid "If you have a column in the CSV file that shouldn't be passed to the model constructor, you can tell the interpreter to remove it by using the special ``DELETE`` argument:" +msgstr "" + +#: ../../features/data-importers.rst:199 +msgid "The ``make_interpreter`` can only deal with modifications where each field is modified separately of the others (or not at all). If you want to combine information from multiple fields, you need to write your interpreter the long way (perhaps calling a function returned by ``make_interpreter`` to do some of the work)." +msgstr "" + +#: ../../features/data-importers.rst:205 +msgid "On the other hand, if you don't need to do any transformations involving some sort of object or constant lookup, then you can just omit the ``interpreter`` argument of ``self._lookup()``, and it'll just leave the fields as-is." +msgstr "" + +#: ../../features/data-importers.rst:210 +msgid "Lookup functions" +msgstr "" + +#: ../../features/data-importers.rst:211 +msgid "In the above example, we used a function ``self.lookup_gender`` to convert from the text in the CSV file to a ``Person.GENDER_*`` constant. To make this easier, the importer provides a convenience function to define such lookup functions. Let's look at the relevant lines again:" +msgstr "" + +#: ../../features/data-importers.rst:224 +msgid "This should be a member of your subclass, in our case, ``ExampleTournamentDataImporter``. It generates a function that looks something like:" +msgstr "" + +#: ../../features/data-importers.rst:241 +msgid "The ``make_lookup`` function takes two arguments. The first is a text description of what it's looking up; this is used for the error message if the value in the CSV file isn't recognised. The second is a dict mapping tuples of valid strings to constants." +msgstr "" + +#: ../../features/data-importers.rst:247 +msgid "Debugging output" +msgstr "" + +#: ../../features/data-importers.rst:249 +msgid "The ``BaseTournamentDataImporter`` constructor accepts a ``loglevel`` argument:" +msgstr "" + +#: ../../features/data-importers.rst:255 +msgid "If ``loglevel`` is set to ``logging.DEBUG``, the importer will print information about every instance it creates." +msgstr "" + +#: ../../features/data-importers.rst:258 +msgid "You can also pass in a logger for it to use (instead of the default one) with the ``logger`` argument." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/features/draw-generation-bp.po b/docs/locale/cs/LC_MESSAGES/features/draw-generation-bp.po new file mode 100644 index 00000000000..be1fd18b344 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/features/draw-generation-bp.po @@ -0,0 +1,598 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation-bp.po\n" +"X-Crowdin-File-ID: 1285\n" +"Language: cs_CZ\n" + +#: ../../features/draw-generation-bp.rst:5 +msgid "Draw Generation (BP)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:7 +msgid "The draw generator for British Parliamentary tournaments tries to rotate teams through positions by assigning them positions they've been in less often before the current round." +msgstr "" + +#: ../../features/draw-generation-bp.rst:10 +msgid "Summary of options" +msgstr "" + +#: ../../features/draw-generation-bp.rst:12 +msgid "Options are set in the **Configuration** page as described in :ref:`starting a tournament `. Options in `italics` with an asterisk are not WUDC-compliant. The recommended options are shown in **bold**." +msgstr "" + +#: ../../features/draw-generation-bp.rst:19 +msgid "Option" +msgstr "" + +#: ../../features/draw-generation-bp.rst:20 +msgid "Description" +msgstr "" + +#: ../../features/draw-generation-bp.rst:21 +msgid "Allowable values" +msgstr "" + +#: ../../features/draw-generation-bp.rst:22 +msgid ":ref:`Pullup distribution `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:23 +msgid "Where pullup teams get placed" +msgstr "" + +#: ../../features/draw-generation-bp.rst:24 +msgid "**Anywhere in bracket**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:25 +msgid "*All in the same room*\\*" +msgstr "" + +#: ../../features/draw-generation-bp.rst:26 +msgid ":ref:`Position cost `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:27 +msgid "Which cost function to use to indicate which position profiles are preferred" +msgstr "" + +#: ../../features/draw-generation-bp.rst:28 +#: ../../features/draw-generation-bp.rst:179 +msgid "Simple" +msgstr "" + +#: ../../features/draw-generation-bp.rst:29 +msgid "**Rényi entropy**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:30 +#: ../../features/draw-generation-bp.rst:254 +msgid "Population variance" +msgstr "" + +#: ../../features/draw-generation-bp.rst:31 +msgid ":ref:`Rényi order `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:32 +msgid "Order of Rényi entropy" +msgstr "" + +#: ../../features/draw-generation-bp.rst:33 +msgid "Any non-negative number (default: **1**, *i.e.* Shannon entropy)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:34 +msgid ":ref:`Position cost exponent `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:35 +msgid "Degree to which large position imbalances should be prioritised" +msgstr "" + +#: ../../features/draw-generation-bp.rst:36 +msgid "Any non-negative number (default: **4**)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:37 +msgid ":ref:`Assignment method `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:38 +msgid "Algorithm used to assign positions" +msgstr "" + +#: ../../features/draw-generation-bp.rst:39 +msgid "*Hungarian*\\*" +msgstr "" + +#: ../../features/draw-generation-bp.rst:40 +msgid "**Hungarian with preshuffling**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:45 +msgid "The big picture" +msgstr "" + +#: ../../features/draw-generation-bp.rst:47 +msgid "To try to achieve position balance, Tabbycat treats the allocation of teams to debates as an `assignment problem `_. That is, it computes the \"cost\" of assigning each team to each position in each debate, and finds an assignment of all teams to a position in a debate that minimises the total cost (the sum over all teams)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:50 +msgid "A simple example" +msgstr "" + +#: ../../features/draw-generation-bp.rst:52 +msgid "Here's a small example, to illustrate the idea. Say you have a tournament with 16 teams, and you're about to draw round 4. There are sixteen \"places\" in the draw: four positions in each of four rooms. Tabbycat calculates the \"cost\" of putting each team in each place, and puts them in a matrix, like this:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Room" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Top" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Second" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Third" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Bottom" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "Position" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "OG" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "OO" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "CG" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "CO" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +msgid "**A (8)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +#: ../../features/draw-generation-bp.rst:67 +#: ../../features/draw-generation-bp.rst:69 +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:77 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:81 +#: ../../features/draw-generation-bp.rst:83 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:93 +#: ../../features/draw-generation-bp.rst:95 +msgid "16" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +#: ../../features/draw-generation-bp.rst:67 +#: ../../features/draw-generation-bp.rst:69 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:77 +#: ../../features/draw-generation-bp.rst:81 +#: ../../features/draw-generation-bp.rst:83 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:93 +msgid ":q:`0`" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +#: ../../features/draw-generation-bp.rst:67 +#: ../../features/draw-generation-bp.rst:69 +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:77 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:81 +#: ../../features/draw-generation-bp.rst:83 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:93 +#: ../../features/draw-generation-bp.rst:95 +msgid "∞" +msgstr "" + +#: ../../features/draw-generation-bp.rst:67 +msgid "**B (7)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:69 +msgid "**C (7)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:71 +msgid "**D (6)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:95 +msgid "0" +msgstr "" + +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:95 +msgid ":q:`16`" +msgstr "" + +#: ../../features/draw-generation-bp.rst:73 +msgid "**E (6)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:75 +msgid "**F (6)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:77 +msgid "**G (5)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:79 +msgid "**H (5)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:81 +msgid "**I (4)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:83 +msgid "**J (4)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:85 +msgid "**K (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:87 +msgid "**L (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:89 +msgid "**M (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:91 +msgid "**N (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:93 +msgid "**O (1)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:95 +msgid "**P (1)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:98 +msgid "Each \"16\" is the cost of putting a team in a position it's seen once; each \"0\" is the cost of putting a team in the position it hasn't. (Details of how this is calculated are :ref:`below `.) For example, team A (on 8 points) has been in every position except CO. The ∞'s indicate places where the team isn't allowed to go, because the room isn't in their bracket. For example, the three teams on 6 points (D, E, F) can go in either the top or second room, because any of them can be the pullup team." +msgstr "" + +#: ../../features/draw-generation-bp.rst:100 +msgid "The algorithm then chooses entries so that one is selected from each row and one is selected from each column, in a way that minimises the sum of the selected entries. In this case, the selected entries are highlighted in blue. For example, the top room comprises teams E (OG), B (OO), C (CG) and A (CO)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:102 +msgid "Sometimes, particularly in round 4, it simply isn't possible to \"satisfy\" everyone. For example, among the top eight teams, five haven't been in OO, but only two can be accommodated within those brackets. In this case, teams B and G got lucky; there are also many other draws that would have incurred the same total cost." +msgstr "" + +#: ../../features/draw-generation-bp.rst:104 +msgid "More generally, in most cases, there will be many optimal solutions. To randomise the selection among them, Tabbycat (under default settings) randomly permutes the rows and columns of the matrix before starting the assignment algorithm." +msgstr "" + +#: ../../features/draw-generation-bp.rst:107 +msgid "Explanations of options" +msgstr "" + +#: ../../features/draw-generation-bp.rst:112 +msgid "Pullup distribution" +msgstr "" + +#: ../../features/draw-generation-bp.rst:114 +msgid "If the number of teams in a bracket is not a multiple of four, it pulls up teams from the next bracket down. The pullup distribution then governs how those teams are paired into the upper bracket." +msgstr "" + +#: ../../features/draw-generation-bp.rst:116 +msgid "The available options are as follows:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:120 +msgid "**Anywhere in bracket:** The pullup teams are treated as if they were any other team in their new bracket. For example, if there are 17 teams in a 10-point bracket, then the three 9-point teams that get pulled up may be paired anywhere in the 10-point bracket, independently of each other. Chance might put them in the same room, but more likely, they will not all be in the same room, so there will be multiple pullup rooms in the 10-point bracket." +msgstr "" + +#: ../../features/draw-generation-bp.rst:122 +msgid "**All in the same room:** All of the pullup teams will be paired into the same room. This means that there will be at most one pullup room per bracket, effectively creating an \"intermediate bracket\"." +msgstr "" + +#: ../../features/draw-generation-bp.rst:124 +msgid "While it can be argued that the `All in the same room` setting is fairer, it is prohibited by the WUDC constitution. If your tournament follows WUDC rules, you cannot use this setting." +msgstr "" + +#: ../../features/draw-generation-bp.rst:126 +msgid "The teams that get pulled up aren't specifically chosen---they're just assigned as part of the algorithm described :ref:`above `, which optimises for position balance. Tabbycat doesn't support taking anything else into account when choosing pullup teams. (WUDC rules wouldn't allow it, either.)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:131 +msgid "Position cost options" +msgstr "" + +#: ../../features/draw-generation-bp.rst:133 +msgid "The `position cost function` is a function that indicates how \"bad\" it would be if a team were to be allocated a certain position (OG, OO, CG, CO) in a debate. When generating a draw, Tabbycat chooses from among the draws that minimise the sum of the position costs for each team." +msgstr "" + +#: ../../features/draw-generation-bp.rst:135 +msgid "More formally:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:139 +msgid "A `position history` or just `history` :math:`\\mathbf{h}` is a 4-tuple where each element is the number of times a team has already been in the corresponding position. For example, :math:`\\mathbf{h} = (0, 2, 1, 1)` means that a team has been in OO twice, CG and CO once each, and hasn't been in OG." +msgstr "" + +#: ../../features/draw-generation-bp.rst:140 +msgid "A cost function :math:`C(\\mathbf{h},s)` is a function specifying how \"bad\" it would be if a team with position history :math:`\\mathbf{h}` were assigned the position :math:`s` in the next round." +msgstr "" + +#: ../../features/draw-generation-bp.rst:142 +msgid "Tabbycat allows you to choose from a number of different **position cost functions**, as well as a **position cost exponent** :math:`\\beta`. Then, when allocating teams to debates, Tabbycat allocates teams to positions :math:`(s_t, t \\in\\mathcal{T})` to minimise" +msgstr "" + +#: ../../features/draw-generation-bp.rst:144 +msgid "\\sum_{t \\in \\mathcal{T}} [C(\\mathbf{h}_t,s_t)]^\\beta" +msgstr "" + +#: ../../features/draw-generation-bp.rst:148 +msgid "where :math:`\\mathcal{T}` is the set of all teams, :math:`\\mathbf{h}_t` is the position history of team :math:`t` and :math:`s_t` is the position to which team :math:`t` would be allocated." +msgstr "" + +#: ../../features/draw-generation-bp.rst:153 +msgid "Position cost exponent" +msgstr "" + +#: ../../features/draw-generation-bp.rst:155 +msgid "The **position cost exponent** :math:`\\beta` controls how different teams trade off with each other." +msgstr "" + +#: ../../features/draw-generation-bp.rst:159 +msgid "The **larger** :math:`\\beta` is, the more concerned it is with preventing *very* bad situations. That is, it will give more teams some slight unevenness in order to prevent one team from getting a `very` uneven history." +msgstr "" + +#: ../../features/draw-generation-bp.rst:161 +msgid "The **smaller** :math:`\\beta` is, the more concerned it is with preventing *any* unevenness. That is, it will try to keep more teams from being uneven *at all*, at the cost of possibly letting just one team get a very uneven history." +msgstr "" + +#: ../../features/draw-generation-bp.rst:163 +msgid "At the large extreme, as :math:`\\beta\\rightarrow\\infty`, it will do everything it can to minimise the plight of the *worst-off* team, and it won't care for *any* team other than the worst-off." +msgstr "" + +#: ../../features/draw-generation-bp.rst:165 +msgid "At the small extreme, as :math:`\\beta\\rightarrow 0`, it will do everything it can to minimise the number of teams with a non-optimal profile---but if it's impossible to protect a team from sub-optimality, it won't care *how* uneven the unlucky team gets." +msgstr "" + +#: ../../features/draw-generation-bp.rst:167 +msgid "The \"balanced\" approach would be :math:`\\beta = 1`, which just takes the cost function as-is. This doesn't mean that this is the best idea, however---you'd typically want to bias towards preventing very uneven histories a bit more. Most tournaments will probably want :math:`\\beta` to be somewhere between 2 and 5. (Note that :math:`\\beta` need not be an integer.)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:172 +msgid "Position cost functions" +msgstr "" + +#: ../../features/draw-generation-bp.rst:174 +msgid "Tabbycat allows you to choose between three position cost functions :math:`C(\\mathbf{h},s)`: **Simple**, **Rényi entropy** and **Population variance**." +msgstr "" + +#: ../../features/draw-generation-bp.rst:176 +msgid "In the descriptions that follow, :math:`\\mathcal{S} = \\{\\texttt{OG}, \\texttt{OO}, \\texttt{CG}, \\texttt{CO}\\}`, the set of all BP positions." +msgstr "" + +#: ../../features/draw-generation-bp.rst:181 +msgid "The simple cost function :math:`C_\\textrm{simple}(\\mathbf{h},s)` returns the number of times the team has already been in position :math:`s`, less the number of times the team has been in its least frequent position. That is," +msgstr "" + +#: ../../features/draw-generation-bp.rst:183 +msgid "C_\\mathrm{simple}(\\mathbf{h},s) = \\mathbf{h}[s] - \\min_{s' \\in\\mathcal{S}} \\mathbf{h}[s']" +msgstr "" + +#: ../../features/draw-generation-bp.rst:187 +msgid "where :math:`\\mathbf{h}[s]` is the element of :math:`\\mathbf{h}` corresponding to position :math:`s`." +msgstr "" + +#: ../../features/draw-generation-bp.rst:190 +msgid "Rényi entropy" +msgstr "" + +#: ../../features/draw-generation-bp.rst:192 +msgid "Informally speaking, the `Rényi entropy `_ is a measure of the diversity of the positions in a team's history. A history consisting only of one position has *low* entropy, while a history that is perfectly evenly distributed has *high* entropy. The **Rényi entropy cost function** reverses this intuition, so that an even hypothetical history has low cost, while an uneven hypothetical history has high cost." +msgstr "" + +#: ../../features/draw-generation-bp.rst:194 +msgid "The Rényi entropy takes one parameter, known as its *order*, :math:`\\alpha`, which will be further discussed below." +msgstr "" + +#: ../../features/draw-generation-bp.rst:196 +msgid "More formally, the Rényi entropy cost function :math:`C_\\textrm{R\\'enyi}(\\mathbf{h},s)` is defined as" +msgstr "" + +#: ../../features/draw-generation-bp.rst:198 +msgid "C_\\textrm{R\\'enyi}(\\mathbf{h},s) = n_\\mathbf{h} [2 - H_\\alpha(\\hat{p}_{\\mathbf{h},s})]" +msgstr "" + +#: ../../features/draw-generation-bp.rst:202 +msgid "where" +msgstr "" + +#: ../../features/draw-generation-bp.rst:206 +msgid ":math:`n_\\mathbf{h} = \\sum_{s'} \\mathbf{h}[s']` is the number of rounds the team has competed in so far." +msgstr "" + +#: ../../features/draw-generation-bp.rst:207 +msgid ":math:`\\hat{p}_{\\mathbf{h},s}` is the *normalised hypothetical* position history that would arise if a team with history :math:`\\mathbf{h}` were to be allocated position :math:`s` in the next round; that is," +msgstr "" + +#: ../../features/draw-generation-bp.rst:209 +msgid "\\hat{p}_{\\mathbf{h},s}[s'] = \\begin{cases} \\frac{1}{n_\\mathbf{h} + 1} (\\mathbf{h}[s'] + 1), &\\text{ if } s = s', \\\\ \\frac{1}{n_\\mathbf{h} + 1} \\mathbf{h}[s'], &\\text{ if } s \\ne s'. \\end{cases}" +msgstr "" + +#: ../../features/draw-generation-bp.rst:216 +msgid "Note that :math:`\\hat{p}_{\\mathbf{h},s}` is a probability distribution (that is, its elements sum to 1)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:218 +msgid ":math:`H_\\alpha(\\cdot)` is the `Rényi entropy `_ of order :math:`\\alpha` of a probability distribution, defined as" +msgstr "" + +#: ../../features/draw-generation-bp.rst:220 +msgid "H_\\alpha(p) = \\frac{1}{1-\\alpha} \\log_2 \\left( \\sum_{s\\in\\mathcal{S}} (p[s])^\\alpha \\right), \\qquad \\alpha \\ne 1." +msgstr "" + +#: ../../features/draw-generation-bp.rst:224 +msgid "In the special (limiting) case where :math:`\\alpha=1`, it reduces to the `Shannon entropy `_," +msgstr "" + +#: ../../features/draw-generation-bp.rst:226 +msgid "H_1(p) =-\\sum_{s\\in\\mathcal{S}} p[s] \\log_2 p[s]." +msgstr "" + +#: ../../features/draw-generation-bp.rst:230 +msgid "Note that for all :math:`\\alpha`, :math:`0 \\le H_\\alpha(p) \\le \\log_2(4) = 2` (since there are four positions in BP)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:234 +msgid "The **Rényi order** is the parameter :math:`\\alpha` above, and it controls *what it means to be \"even among positions\"* for a team. Note that \"evenness\" is not easily defined. After round 8, which position history is more even: (0, 2, 3, 3) or (1, 1, 1, 5)? The Rényi order allows us to tune this definition." +msgstr "" + +#: ../../features/draw-generation-bp.rst:238 +msgid "The **smaller** :math:`\\alpha` is, the more it cares that teams compete in every position *at least* once, favouring (1, 1, 1, 5) over (0, 2, 3, 3): it's worse to have never OGed, than it is to have COed five times." +msgstr "" + +#: ../../features/draw-generation-bp.rst:240 +msgid "The **larger** :math:`\\alpha` is, the more it cares that teams do not compete in *any* (one) position too many times, favouring (0, 2, 3, 3) over (1, 1, 1, 5): it's worse to have COed five times, than it is to have never OGed." +msgstr "" + +#: ../../features/draw-generation-bp.rst:242 +msgid "At the small extreme, as :math:`\\alpha\\rightarrow0`, it *only* counts how many positions a team has seen at least once, and doesn't care about the distribution among them so long as a team has been in each position once." +msgstr "" + +#: ../../features/draw-generation-bp.rst:244 +msgid "At the large extreme, as :math:`\\alpha\\rightarrow\\infty`, it *only* looks at how many times each team has seen its *most frequent* position, and tries to keep this number even among all teams." +msgstr "" + +#: ../../features/draw-generation-bp.rst:246 +msgid "The \"balanced\" approach would be :math:`\\alpha=1` (the `Shannon entropy `_), though of course it's arguable what \"balanced\" means. Tabbycat defaults to this value." +msgstr "" + +#: ../../features/draw-generation-bp.rst:248 +msgid "To give some intuition for the useful range: In round 9, a strict ordering by number of positions seen at least once occurs for approximately :math:`\\alpha < 0.742`. A strict ordering by number of times in the most frequent position occurs for :math:`\\alpha>3`. Changing :math:`\\alpha` outside the range :math:`[0.742, 3]` will still affect the relative (cardinal) weighting *between teams*, but will not affect the *ordinal* ranking of possible histories." +msgstr "" + +#: ../../features/draw-generation-bp.rst:250 +msgid "The purpose of weighting costs by :math:`n_\\mathbf{h}` is to prioritise those teams who have competed in every round over those who have competed in fewer rounds." +msgstr "" + +#: ../../features/draw-generation-bp.rst:256 +msgid "The **population variance** cost function is just the population variance of the history 4-tuple," +msgstr "" + +#: ../../features/draw-generation-bp.rst:258 +msgid "C_\\textrm{popvar}(\\mathbf{h},s) = \\frac14 \\sum_{s'\\in\\mathcal{S}} \\left(\\mathbf{\\hat{h}}_s[s'] - \\mu_{\\mathbf{\\hat{h}}_s} \\right)^2," +msgstr "" + +#: ../../features/draw-generation-bp.rst:262 +msgid "where :math:`\\mathbf{\\hat{h}}_s` is the *hypothetical* position history that would arise if a team with history :math:`\\mathbf{h}` were to be allocated position :math:`s` in the next round; that is," +msgstr "" + +#: ../../features/draw-generation-bp.rst:264 +msgid "\\mathbf{\\hat{h}}_s[s'] = \\begin{cases} \\mathbf{h}[s'] + 1, &\\text{ if } s = s', \\\\ \\mathbf{h}[s'], &\\text{ if } s \\ne s'. \\end{cases}" +msgstr "" + +#: ../../features/draw-generation-bp.rst:271 +msgid "and where :math:`\\mu_{\\mathbf{\\hat{h}}_s}` is the mean of :math:`\\mathbf{\\hat{h}}_s`," +msgstr "" + +#: ../../features/draw-generation-bp.rst:273 +msgid "\\mu_{\\mathbf{\\hat{h}}_s} = \\frac14 \\sum_{s'\\in\\mathcal{S}} \\mathbf{\\hat{h}}_s[s']." +msgstr "" + +#: ../../features/draw-generation-bp.rst:277 +msgid "At the extremes, a team that has seen all positions evenly will have a population variance of zero, while a team that has seen just one position :math:`n` times will have a population variance of :math:`\\frac{3n^2}{16}`." +msgstr "" + +#: ../../features/draw-generation-bp.rst:282 +msgid "Assignment method" +msgstr "" + +#: ../../features/draw-generation-bp.rst:284 +msgid "Tabbycat uses the `Hungarian algorithm `_ to solve the `assignment problem `_ of assigning teams to positions in debates. This can be run with or without preshuffling:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:288 +msgid "**Hungarian algorithm** just runs the Hungarian algorithm as-is, with no randomness. This probably isn't what you want." +msgstr "" + +#: ../../features/draw-generation-bp.rst:290 +msgid "**Hungarian algorithm with preshuffling** also runs the Hungarian algorithm on the position cost matrix, but shuffles the input so that the draw is randomised, subject to having optimal position allocations." +msgstr "" + +#: ../../features/draw-generation-bp.rst:292 +msgid "Preshuffling doesn't compromise the optimality of position allocations: It simply shuffles the order in which teams and debates appear in the input to the algorithm, by randomly permuting the rows and columns of the position cost matrix. The Hungarian algorithm still guarantees an optimal position assignment, according to the chosen position cost function." +msgstr "" + +#: ../../features/draw-generation-bp.rst:294 +msgid "Running the Hungarian algorithm *without* preshuffling has the side effect of grouping teams with similar speaker scores in to the same room, and is therefore prohibited by WUDC rules. Its inclusion as an option is mainly academic; most tournaments will not want to use it in practice." +msgstr "" + +#: ../../features/draw-generation-bp.rst:296 +msgid "No other assignment methods are currently supported. For example, Tabbycat can't run fold (high-low) or adjacent (high-high) pairing *within* brackets." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/features/draw-generation.po b/docs/locale/cs/LC_MESSAGES/features/draw-generation.po new file mode 100644 index 00000000000..64f2596a59c --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/features/draw-generation.po @@ -0,0 +1,436 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation.po\n" +"X-Crowdin-File-ID: 1287\n" +"Language: cs_CZ\n" + +#: ../../features/draw-generation.rst:5 +msgid "Draw Generation" +msgstr "" + +#: ../../features/draw-generation.rst:7 +msgid "The draw generator is quite flexible. You can specify a number of settings to suit different tournaments' rules." +msgstr "" + +#: ../../features/draw-generation.rst:10 +msgid "Summary of options" +msgstr "" + +#: ../../features/draw-generation.rst:11 +msgid "Options are set in the **Configuration** page as described in :ref:`starting a tournament `." +msgstr "" + +#: ../../features/draw-generation.rst:18 +msgid "Option" +msgstr "" + +#: ../../features/draw-generation.rst:19 +msgid "Description" +msgstr "" + +#: ../../features/draw-generation.rst:20 +msgid "Allowable values" +msgstr "" + +#: ../../features/draw-generation.rst:22 +msgid ":ref:`Odd bracket resolution method `" +msgstr "" + +#: ../../features/draw-generation.rst:23 +msgid "How to resolve odd brackets" +msgstr "" + +#: ../../features/draw-generation.rst:24 +msgid "Pull up from top" +msgstr "" + +#: ../../features/draw-generation.rst:25 +msgid "Pull up from bottom" +msgstr "" + +#: ../../features/draw-generation.rst:26 +msgid "Pull up from middle" +msgstr "" + +#: ../../features/draw-generation.rst:27 +msgid "Pull up at random" +msgstr "" + +#: ../../features/draw-generation.rst:29 +msgid "If sides are `Random` or `Balance`:" +msgstr "" + +#: ../../features/draw-generation.rst:31 +msgid "Intermediate" +msgstr "" + +#: ../../features/draw-generation.rst:32 +msgid "Intermediate with bubble-up-bubble-down" +msgstr "" + +#: ../../features/draw-generation.rst:34 +msgid "If sides are `Pre-allocated`:" +msgstr "" + +#: ../../features/draw-generation.rst:36 +msgid "Intermediate 1" +msgstr "" + +#: ../../features/draw-generation.rst:37 +msgid "Intermediate 2" +msgstr "" + +#: ../../features/draw-generation.rst:39 +msgid ":ref:`Side allocations method `" +msgstr "" + +#: ../../features/draw-generation.rst:40 +msgid "How to allocate aff/neg" +msgstr "" + +#: ../../features/draw-generation.rst:41 ../../features/draw-generation.rst:51 +msgid "Random" +msgstr "" + +#: ../../features/draw-generation.rst:42 +msgid "Balance" +msgstr "" + +#: ../../features/draw-generation.rst:43 +msgid "Pre-allocated" +msgstr "" + +#: ../../features/draw-generation.rst:44 +msgid "Manual ballot" +msgstr "" + +#: ../../features/draw-generation.rst:46 +msgid ":ref:`Pairing method `" +msgstr "" + +#: ../../features/draw-generation.rst:47 +msgid "How to pair teams within brackets" +msgstr "" + +#: ../../features/draw-generation.rst:48 +msgid "Slide" +msgstr "" + +#: ../../features/draw-generation.rst:49 +msgid "Fold" +msgstr "" + +#: ../../features/draw-generation.rst:50 +msgid "Adjacent" +msgstr "" + +#: ../../features/draw-generation.rst:53 +msgid ":ref:`Conflict avoidance method `" +msgstr "" + +#: ../../features/draw-generation.rst:54 +msgid "How to avoid history/institution conflicts" +msgstr "" + +#: ../../features/draw-generation.rst:55 +msgid "Off" +msgstr "" + +#: ../../features/draw-generation.rst:56 +msgid "One-up-one-down" +msgstr "" + +#: ../../features/draw-generation.rst:58 +msgid ":ref:`Pullup restriction `" +msgstr "" + +#: ../../features/draw-generation.rst:59 +msgid "Whether and how to restrict pullups" +msgstr "" + +#: ../../features/draw-generation.rst:60 +msgid "No restriction" +msgstr "" + +#: ../../features/draw-generation.rst:61 +msgid "Choose from teams who have been pulled up the fewest times so far" +msgstr "" + +#: ../../features/draw-generation.rst:62 +msgid "Choose from teams with the lowest draw strength by speaks so far" +msgstr "" + +#: ../../features/draw-generation.rst:64 +msgid "The valid options for intermediate brackets change depending on whether sides are pre-allocated, but these are **not** checked for validity. If you choose an invalid combination, Tabbycat will just crash. This won't corrupt the database, but it might be momentarily annoying." +msgstr "" + +#: ../../features/draw-generation.rst:67 +msgid "The big picture" +msgstr "" + +#: ../../features/draw-generation.rst:68 +msgid "When generating a power-paired draw, Tabbycat goes through five steps:" +msgstr "" + +#: ../../features/draw-generation.rst:70 +msgid "First, it divides teams into \"raw brackets\", grouping them by the number of wins." +msgstr "" + +#: ../../features/draw-generation.rst:71 +msgid "Second, it resolves odd brackets, applying the odd brackets rule to make sure there is an even number of teams in each bracket. This is often called \"pulling up\" teams." +msgstr "" + +#: ../../features/draw-generation.rst:72 +msgid "Third, within each bracket, it pairs teams into debates using the pairing method." +msgstr "" + +#: ../../features/draw-generation.rst:73 +msgid "Fourth, if enabled, it adjusts pairings to avoid history or institution conflicts." +msgstr "" + +#: ../../features/draw-generation.rst:74 +msgid "Finally, it assigns sides to teams in each debate." +msgstr "" + +#: ../../features/draw-generation.rst:76 +msgid "For each of these steps except the first, Tabbycat allows you to choose between a number of different methods." +msgstr "" + +#: ../../features/draw-generation.rst:80 +msgid "Explanations of options" +msgstr "" + +#: ../../features/draw-generation.rst:85 +msgid "Odd bracket resolution" +msgstr "" + +#: ../../features/draw-generation.rst:86 +msgid "The **draw odd brackets** option specifies what you do when a bracket has an odd number of teams. (Obviously you have to do something, otherwise you can't pair off teams within the bracket.) There are two groups of methods: pull-up and intermediate brackets." +msgstr "" + +#: ../../features/draw-generation.rst:90 +msgid "**Pull-up methods** take one or more teams from the next bracket down, and move them into the odd bracket to fill the bracket." +msgstr "" + +#: ../../features/draw-generation.rst:92 +msgid "**Intermediate brackets** take the excess teams from the odd bracket and move them down into a new bracket, which sits between the odd bracket and the next one down (the \"intermediate bracket\"). It then takes teams from the next bracket down and moves them up to fill the new intermediate bracket." +msgstr "" + +#: ../../features/draw-generation.rst:94 +msgid "The exact mechanics depend on whether or not sides are pre-allocated." +msgstr "" + +#: ../../features/draw-generation.rst:97 +msgid "When sides are not pre-allocated" +msgstr "" + +#: ../../features/draw-generation.rst:101 +msgid "**Pull-up methods:** Take a team from the next bracket down, and add them to the odd bracket to form an even bracket. You can choose to pull up the top team from the next bracket, or the bottom team, or the middle team, or a randomly chosen team. (If you pull up the middle team, and the bracket has an even number of teams, then it will choose randomly from the two middle teams.)" +msgstr "" + +#: ../../features/draw-generation.rst:103 +msgid "**Intermediate brackets:** Take the bottom team from the odd bracket and match them against the top team from the next bracket. An intermediate bracket always has two teams." +msgstr "" + +#: ../../features/draw-generation.rst:105 +msgid "If you're using conflict avoidance and intermediate brackets, you will probably want to use **Intermediate with bubble-up-bubble-down** instead. This uses the \"bubble-up-bubble-down\" rule to swap teams out of an intermediate bracket if there is a history or institution conflict. This is defined in the Australs constitution and is analogous to the \"one-up-one-down\" rule." +msgstr "" + +#: ../../features/draw-generation.rst:107 +msgid "Using `Intermediate` with `One-up-one-down` does **not** imply `Intermediate with bubble-up-bubble-down`. You must enable `Intermediate with bubble-up-bubble-down` specifically." +msgstr "" + +#: ../../features/draw-generation.rst:110 +msgid "When sides are pre-allocated" +msgstr "" + +#: ../../features/draw-generation.rst:111 +msgid "When sides are pre-allocated, an \"odd bracket\" is one that has an uneven number of affirmative and negative teams. (So odd brackets can have an even number of teams, *e.g.* 4 affs and 2 negs.)" +msgstr "" + +#: ../../features/draw-generation.rst:115 +msgid "**Pull-up methods:** Take as many teams from the next bracket down as necessary to fill the bracket. If there aren't enough teams in the next bracket down, take teams from the bracket after that, and so on, until the (original) odd bracket is filled. Higher brackets are always filled first. You can choose to pull up the top teams from the next bracket, the bottom teams, or a random selection of teams." +msgstr "" + +#: ../../features/draw-generation.rst:117 +msgid "**Intermediate brackets:** Take the unpaired teams in a bracket, and move them down to a new intermediate bracket. Then, take the number of teams necessary from the opposite side, from the next bracket down, to fill the next bracket." +msgstr "" + +#: ../../features/draw-generation.rst:119 +msgid "**Intermediate 1** and **Intermediate 2** differ only in what happens if there aren't enough teams in the next bracket to fill the intermediate bracket. In **Intermediate 1**, it will just take teams from the bracket after that, and so on, until the intermediate bracket is filled. In **Intermediate 2**, it will split the intermediate bracket: the teams that can be paired with the next bracket form the first intermediate bracket, and then the teams that aren't form a new (unfilled) intermediate bracket, to be filled from teams from the bracket after that. This keeps going, splitting into as many intermediate brackets as necessary, until all excess teams from the original odd bracket are paired." +msgstr "" + +#: ../../features/draw-generation.rst:124 +msgid "Side allocations" +msgstr "" + +#: ../../features/draw-generation.rst:125 +msgid "There are four methods:" +msgstr "" + +#: ../../features/draw-generation.rst:129 +msgid "**Random** allocates randomly. Some tournaments might like this, but most will probably want to use Balance, because Random doesn't guarantee that a team won't be (say) affirming the entire tournament." +msgstr "" + +#: ../../features/draw-generation.rst:130 +msgid "**Balance** assigns the team that has affirmed less so far the affirmative side (and, therefore, the team that has negated less the negative side). If both teams have affirmed the same number of times, it assigns sides randomly." +msgstr "" + +#: ../../features/draw-generation.rst:131 +msgid "**Preallocated** is used for pre-allocated sides. If used, you must enter data for pre-allocated sides into the database, as specified below." +msgstr "" + +#: ../../features/draw-generation.rst:132 +msgid "**Manually enter from ballot** is used for tournaments where the sides of the teams involved are not assigned in advance, but are instead determined by the teams themselves" +msgstr "" + +#: ../../features/draw-generation.rst:135 +msgid "Pre-allocated sides" +msgstr "" + +#: ../../features/draw-generation.rst:136 +msgid "There isn't currently any way to edit side allocations from the front end. To do so from the back end, you need to create one ``TeamPositionAllocation`` entry for each team in each round. All teams must have an allocation for every round. There are a few ways to do this, take your pick:" +msgstr "" + +#: ../../features/draw-generation.rst:140 +msgid "If you're using the :ref:`importtournament command `, it reads sides from the file sides.csv." +msgstr "" + +#: ../../features/draw-generation.rst:141 +msgid "You can do this from the Django admin interface (under Setup > Edit Database) by going to the relevant team and adding a **team position allocation** entry. That is:" +msgstr "" + +#: ../../features/draw-generation.rst:143 +msgid "Click **Admin** on the bottom right of any page after logging into an account with :ref:`superuser access `." +msgstr "" + +#: ../../features/draw-generation.rst:144 +msgid "Next to **Teams**, click **Change**." +msgstr "" + +#: ../../features/draw-generation.rst:145 +msgid "Click on the name of the team you want to edit side allocations for." +msgstr "" + +#: ../../features/draw-generation.rst:146 +msgid "Add or edit the entry or entries in the **Team position allocations** table at the bottom." +msgstr "" + +#: ../../features/draw-generation.rst:148 +msgid "You can also do this by writing a script that creates ``TeamPositionAllocation`` objects and saves them. Have a look at `draw/management/commands/generatesideallocations.py `_ for an example." +msgstr "" + +#: ../../features/draw-generation.rst:153 +msgid "Pairing method" +msgstr "" + +#: ../../features/draw-generation.rst:154 +msgid "It's easiest to describe these by example, using a ten-team bracket:" +msgstr "" + +#: ../../features/draw-generation.rst:156 +msgid "**Fold**: 1 vs 10, 2 vs 9, 3 vs 8, 4 vs 7, 5 vs 6. (Also known as high-low pairing.)" +msgstr "" + +#: ../../features/draw-generation.rst:157 +msgid "**Slide**: 1 vs 6, 2 vs 7, 3 vs 8, 4 vs 9, 5 vs 10." +msgstr "" + +#: ../../features/draw-generation.rst:158 +msgid "**Adjacent**: 1 vs 2, 3 vs 4, 5 vs 6, 7 vs 8, 9 vs 10. (Also known as high-high pairing.)" +msgstr "" + +#: ../../features/draw-generation.rst:159 +msgid "**Random**: paired at random within bracket." +msgstr "" + +#: ../../features/draw-generation.rst:161 +msgid "Teams are always paired within their brackets, after resolving odd brackets." +msgstr "" + +#: ../../features/draw-generation.rst:166 +msgid "Conflict avoidance method" +msgstr "" + +#: ../../features/draw-generation.rst:167 +msgid "A **conflict** is when two teams would face each other that have seen each other before, or are from the same institutions. Some tournaments have a preference against allowing this if it's avoidable within certain limits. The **draw avoid conflicts** option allows you to specify how." +msgstr "" + +#: ../../features/draw-generation.rst:169 +msgid "You can turn this off by using **Off**. Other than this, there is currently one conflict avoidance method implemented." +msgstr "" + +#: ../../features/draw-generation.rst:171 +msgid "**One-up-one-down** is the method specified in the Australs constitution. Broadly speaking, if there is a debate with a conflict:" +msgstr "" + +#: ../../features/draw-generation.rst:173 +msgid "It tries to swap teams with the debate \"one up\" from it in the draw." +msgstr "" + +#: ../../features/draw-generation.rst:174 +msgid "If that doesn't work, it tries to swap teams with the debate \"one down\" from it in the draw." +msgstr "" + +#: ../../features/draw-generation.rst:175 +msgid "If neither of those works, it accepts the original conflicted debate." +msgstr "" + +#: ../../features/draw-generation.rst:177 +msgid "It's a bit more complicated than that, for two reasons:" +msgstr "" + +#: ../../features/draw-generation.rst:181 +msgid "History conflicts are prioritised over (*i.e.*, \"worse than\") institution conflicts. So it's fine to resolve a history conflict by creating an institution conflict, but not the vice versa." +msgstr "" + +#: ../../features/draw-generation.rst:182 +msgid "Each swap obviously affects the debates around it, so it's not legal to have two adjacent swaps. (Otherwise, in theory, a team could \"one down\" all the way to the bottom of the draw!) So there is an optimization algorithm that finds the best combination of swaps, *i.e.* the one that minimises conflict, and if there are two profiles that have the same least conflict, then it chooses the one with fewer swaps." +msgstr "" + +#: ../../features/draw-generation.rst:187 +msgid "Pullup restriction" +msgstr "" + +#: ../../features/draw-generation.rst:188 +msgid "You can restrict which teams can be pulled up by configuring the draw generator to choose a pullup team from among only those teams who are the \"best off\" according to a given metric. If several teams are equally \"best off\" within the lower bracket, the draw generator chooses among them using the same **pull-up method** already specified (*e.g.*, \"pull up from top\")" +msgstr "" + +#: ../../features/draw-generation.rst:192 +msgid "You can **choose from teams who have been pulled up the fewest times so far**, that is, in rounds before the current round. Most of the time, this is equivalent to saying that a team cannot be pulled up more than once. But if *all* teams in a bracket have been pulled up at least once, it then chooses from among teams who have been pulled up *only* once (if any), and so on." +msgstr "" + +#: ../../features/draw-generation.rst:194 +msgid "You can **choose from teams with the lowest draw strength so far**, by **wins** or **speaks**." +msgstr "" + +#: ../../features/draw-generation.rst:196 +msgid "If you choose speaks, it's unlikely that two teams will have the same draw strength by speaks, so most of the time this will just choose the team in the lower bracket that's had the easiest draw so far (as measured by their opponents' speaker scores)." +msgstr "" + +#: ../../features/draw-generation.rst:198 +msgid "Pullup restrictions only apply when the :ref:`odd bracket resolution method ` is a pullup method. They have no effect on intermediate brackets." +msgstr "" + +#: ../../features/draw-generation.rst:201 +msgid "What do I do if the draw looks wrong?" +msgstr "" + +#: ../../features/draw-generation.rst:203 +msgid "You can edit match-ups directly from the draw page. Functionally, you can do anything you want. Of course, operationally, you should only edit the draw when you *know* that the draw algorithm got something wrong. If you need to do this, even just once, please file a bug report by creating a new issue on `our issues page on GitHub `_." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/features/notifications.po b/docs/locale/cs/LC_MESSAGES/features/notifications.po new file mode 100644 index 00000000000..6dfea09c2dc --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/features/notifications.po @@ -0,0 +1,257 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/notifications.po\n" +"X-Crowdin-File-ID: 1289\n" +"Language: cs_CZ\n" + +#: ../../features/notifications.rst:3 +msgid "Sending Notifications" +msgstr "" + +#: ../../features/notifications.rst:5 +msgid "Tabbycat offers integrations with email delivery services to send notifications to participants on certain enumerated events. For sending these emails, `SendGrid `_ is readily available as an add-on in Heroku. It may be necessary to install the `SendGrid add-on `_ manually. Other integrations may also be used in its place by changing the relevant environment variables." +msgstr "" + +#: ../../features/notifications.rst:8 +msgid "Events" +msgstr "" + +#: ../../features/notifications.rst:10 +msgid "Tabbycat includes a number of templated notifications that can be sent in various times. Variables which are included between curly brackets which are substituted for personalized information passed by email. Links to email will redirect to a page where the message can be changed and the participants selected." +msgstr "" + +#: ../../features/notifications.rst:12 +msgid "All emails have the ``{{ USER }}`` and ``{{ TOURN }}`` variables to indicate who the email is sent to, and the tournament it relates to. The \"From\" in the emails will also be the tournament's name." +msgstr "" + +#: ../../features/notifications.rst:17 +msgid "Email content and description" +msgstr "" + +#: ../../features/notifications.rst:18 +msgid "Variables" +msgstr "" + +#: ../../features/notifications.rst:20 +msgid "**Adjudicator draw notification**" +msgstr "" + +#: ../../features/notifications.rst:22 +msgid "Email to adjudicators indicating their room assignment." +msgstr "" + +#: ../../features/notifications.rst:24 ../../features/notifications.rst:36 +#: ../../features/notifications.rst:74 +msgid "Available through the admin draw page." +msgstr "" + +#: ../../features/notifications.rst:25 ../../features/notifications.rst:37 +msgid "``{{ ROUND }}``: The round name" +msgstr "" + +#: ../../features/notifications.rst:26 ../../features/notifications.rst:38 +msgid "``{{ VENUE }}``: The venue of the assigned debate" +msgstr "" + +#: ../../features/notifications.rst:27 ../../features/notifications.rst:39 +msgid "``{{ PANEL }}``: A list of all the adjudicators assigned to the venue (with positions)" +msgstr "" + +#: ../../features/notifications.rst:28 ../../features/notifications.rst:40 +msgid "``{{ DRAW }}``: A list of the team matchup with their roles" +msgstr "" + +#: ../../features/notifications.rst:29 +msgid "``{{ POSITION }}``: The target adjudicator's position in the panel" +msgstr "" + +#: ../../features/notifications.rst:30 +msgid "``{{ URL }}``: A link to the adjudicator's private URL page" +msgstr "" + +#: ../../features/notifications.rst:32 +msgid "**Team draw notification**" +msgstr "" + +#: ../../features/notifications.rst:34 +msgid "Email to teams indicating their pairing." +msgstr "" + +#: ../../features/notifications.rst:41 +msgid "``{{ TEAM }}``: The team's code or short name" +msgstr "" + +#: ../../features/notifications.rst:42 +msgid "``{{ SIDE }}``: The team's side" +msgstr "" + +#: ../../features/notifications.rst:44 +msgid "**Private URL distribution**" +msgstr "" + +#: ../../features/notifications.rst:46 +msgid "Email to participants giving them their private URL for electronic forms." +msgstr "" + +#: ../../features/notifications.rst:48 +msgid "Available through the private URLs page." +msgstr "" + +#: ../../features/notifications.rst:49 +msgid "``{{ URL }}``: The personalized URL" +msgstr "" + +#: ../../features/notifications.rst:50 +msgid "``{{ KEY }}``: The private code in the URL" +msgstr "" + +#: ../../features/notifications.rst:52 +msgid "**Ballot submission receipt**" +msgstr "" + +#: ../../features/notifications.rst:54 +msgid "Email to adjudicators of their ballot after tabroom confirmation." +msgstr "" + +#: ../../features/notifications.rst:56 +msgid "Sent automatically when their ballot's result status becomes confirmed, if enabled in the \"Notifications\" section of the tournament options." +msgstr "" + +#: ../../features/notifications.rst:58 +msgid "``{{ DEBATE }}``: The name (with round & venue) of the relevent debate" +msgstr "" + +#: ../../features/notifications.rst:59 +msgid "``{{ SCORES }}``: The submitted ballot with speaker scores ands team names" +msgstr "" + +#: ../../features/notifications.rst:61 +msgid "**Current team standings**" +msgstr "" + +#: ../../features/notifications.rst:63 +msgid "Email to speakers with their point total." +msgstr "" + +#: ../../features/notifications.rst:65 +msgid "Available through the \"Confirm Round Completion\" page." +msgstr "" + +#: ../../features/notifications.rst:66 +msgid "``{{ URL }}``: The URL of the team standings page (if public)" +msgstr "" + +#: ../../features/notifications.rst:67 +msgid "``{{ TEAM }}``: The team's name" +msgstr "" + +#: ../../features/notifications.rst:68 +msgid "``{{ POINTS }}``: The team's number of points" +msgstr "" + +#: ../../features/notifications.rst:70 +msgid "**Motion release**" +msgstr "" + +#: ../../features/notifications.rst:72 +msgid "Email to speakers with the motion(s) of the current round." +msgstr "" + +#: ../../features/notifications.rst:75 +msgid "``{{ ROUND }}``: The name of the round" +msgstr "" + +#: ../../features/notifications.rst:76 +msgid "``{{ MOTIONS }}``: A list of the motions released" +msgstr "" + +#: ../../features/notifications.rst:78 +msgid "**Team information**" +msgstr "" + +#: ../../features/notifications.rst:80 +msgid "Email to speakers with information pertaining to their team, such as eligibility and codes." +msgstr "" + +#: ../../features/notifications.rst:82 +msgid "Available through the Participants page." +msgstr "" + +#: ../../features/notifications.rst:83 +msgid "``{{ SHORT }}``: The team's short name" +msgstr "" + +#: ../../features/notifications.rst:84 +msgid "``{{ LONG }}``: The team's long name" +msgstr "" + +#: ../../features/notifications.rst:85 +msgid "``{{ CODE }}``: The team's code name" +msgstr "" + +#: ../../features/notifications.rst:86 +msgid "``{{ EMOJI }}``: The team's assigned emoji" +msgstr "" + +#: ../../features/notifications.rst:87 +msgid "``{{ DIVISION }}``: The team's division if applicable" +msgstr "" + +#: ../../features/notifications.rst:88 +msgid "``{{ BREAK }}``: Break categories which the team is a member" +msgstr "" + +#: ../../features/notifications.rst:89 +msgid "``{{ SPEAKERS }}``: A list of the speakers in the team" +msgstr "" + +#: ../../features/notifications.rst:90 +msgid "``{{ INSTITUTION }}``: The team's affiliation" +msgstr "" + +#: ../../features/notifications.rst:93 +msgid "Event Webhook" +msgstr "" + +#: ../../features/notifications.rst:95 +msgid "With SendGrid, the status of sent emails can be sent to Tabbycat to be displayed, giving an indication of failures and whether participants have opened the messages. To activate this feature, setup must be done both in your SendGrid account and in Tabbycat." +msgstr "" + +#: ../../features/notifications.rst:97 +msgid "Set a secret key in the Email section of the tournament's preferences. This key must be alphanumeric without any spaces." +msgstr "" + +#: ../../features/notifications.rst:98 +msgid "Copy the \"web-hook\" link presented in a box at the top of the \"email participants\" page." +msgstr "" + +#: ../../features/notifications.rst:99 +msgid "Go to https://app.sendgrid.com/settings/mail_settings and select \"Event Notifications\"" +msgstr "" + +#: ../../features/notifications.rst:100 +msgid "Enable the feature and paste the Tabbycat URL under \"HTTP POST URL\"." +msgstr "" + +#: ../../features/notifications.rst:101 +msgid "Select the notifications to keep track (or all of them)." +msgstr "" + +#: ../../features/notifications.rst:103 +msgid "Each email and change in status sent to Tabbycat will add a row to the database. If the number of rows is limited, as is for free Heroku apps, enabling the webhook may use up a significant number of rows. Be selective in the events to keep track." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/features/preformed-panels.po b/docs/locale/cs/LC_MESSAGES/features/preformed-panels.po new file mode 100644 index 00000000000..95aaa1e240a --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/features/preformed-panels.po @@ -0,0 +1,176 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/preformed-panels.po\n" +"X-Crowdin-File-ID: 1291\n" +"Language: cs_CZ\n" + +#: ../../features/preformed-panels.rst:5 +msgid "Preformed Panels" +msgstr "" + +#: ../../features/preformed-panels.rst:7 +msgid "Preformed panels, also known as a 'shadow draw', allow adjudicator panels to be created *before* a round has been drawn and then applied once its draw is ready. This means that panel formation can be done during periods outside the normal time pressure of finalising a draw for release. This can save a lot of time at large tournaments, or at tournaments where the adjudication core wants to carefully control the specific combination of adjudicators within panels." +msgstr "" + +#: ../../features/preformed-panels.rst:9 +msgid "Tabbycat's implementation of preformed panels is more powerful, but less simple, than many others. The chief difference is that our workflow does not simply transpose a linear set of preformed panels atop a draw. Instead we employ Tabbycat's existing allocation tools, primarily the notion of a debate's *priority*, to allow for a non-linear matching of preformed panels that avoids adjudicator conflicts and better adapts to a given draw — particularly when the most important debates do not strictly follow the highest debate brackets." +msgstr "" + +#: ../../features/preformed-panels.rst:11 +msgid "The central concept is that each preformed panel has a priority value. When applying preformed panels to a draw, the allocator ties to best match the priority value of each preformed panel to the priority of each actual debate. This is similar to how Tabbycat's normal auto-allocator matches the strength of each panel (as measured by adjudicators' ratings) to the priority of each debate." +msgstr "" + +#: ../../features/preformed-panels.rst:14 +msgid "Step 1: Create preformed panels" +msgstr "" + +#: ../../features/preformed-panels.rst:16 +msgid "You can find the preformed panels section either" +msgstr "" + +#: ../../features/preformed-panels.rst:18 +msgid "under the **Setup** menu (for all rounds), or" +msgstr "" + +#: ../../features/preformed-panels.rst:19 +msgid "on the **Draw** page (for the current and next round)." +msgstr "" + +#: ../../features/preformed-panels.rst:21 +msgid "Initially, the preformed panels page will have no panels. Click the **Create Panels** button in the top left to make some. The panels it creates are based upon a projection of that round's general results using the results of the previous round. As a result, each preformed panel will have a *bracket range*, the lowest and highest brackets that debate might be in, and a *liveness range*, the maximum number of teams that could be live in that room." +msgstr "" + +#: ../../features/preformed-panels.rst:25 +msgid "Like the normal adjudicator allocation interface, the preformed panel interfaces will indicate when an adjudicator has not been marked as available. If using preformed panels, you may want to set adjudicator availability earlier than you would otherwise." +msgstr "" + +#: ../../features/preformed-panels.rst:27 +msgid "Liveness in the anticipated draw only pertains to the open category (the first break category that is marked as a \"general\" category). It's not possible to meaningfully predict where teams open-dead but live in other categories will end up." +msgstr "" + +#: ../../features/preformed-panels.rst:30 +msgid "Step 2: Assign priorities to preformed panels" +msgstr "" + +#: ../../features/preformed-panels.rst:32 +msgid "By default the priority slider for all preformed panels is in the neutral position. You can use the \"Prioritise\" button in the top left to assign priority values automatically, based upon their brackets or liveness. Before or after this step you can alter the priorities as usual — even after you have allocated adjudicators." +msgstr "" + +#: ../../features/preformed-panels.rst:34 +msgid "It's important to remember to assign a range of priorities to the panels. Without distinct priority values, the application of your preformed panels to the actual draw will be essentially random. If allocating priorities manually, it is a good idea to keep a relatively even distribution of priorities — use the range!" +msgstr "" + +#: ../../features/preformed-panels.rst:36 +msgid "In Round 1, each debate has a liveness and bracket of 0. If you are using preformed panels in this instance you may need to manually-differentiate their priorities." +msgstr "" + +#: ../../features/preformed-panels.rst:39 +msgid "Step 3: Allocate adjudicators to preformed panels" +msgstr "" + +#: ../../features/preformed-panels.rst:43 +msgid "Now that your panels have a priority, you can begin allocating adjudicators. You can do this manually, but do note that the normal auto-allocator for adjudicators also works in this context (the \"Allocate\" button). Even if you want to tweak your panels extensively, the auto-allocator can provide a good first-pass collection of panels, because it will give stronger adjudicators to the panels that you have marked as important." +msgstr "" + +#: ../../features/preformed-panels.rst:45 +msgid "The created panels all auto-save, so you can leave the page and return to pick up where you left. Like the main allocation interface, changes should appear 'live' across different computers and the sharding system is available to divide up each person's view of the draw." +msgstr "" + +#: ../../features/preformed-panels.rst:48 +msgid "Step 4: Generate the draw" +msgstr "" + +#: ../../features/preformed-panels.rst:50 +msgid "Proceed with the creation of the draw as usual. Open up the normal adjudicator allocation page for that round." +msgstr "" + +#: ../../features/preformed-panels.rst:53 +msgid "Step 5: Assign priorities to debates" +msgstr "" + +#: ../../features/preformed-panels.rst:55 +msgid "When allocating preformed panels, the priority levels are what connects the preformed panels to the actual debates. It is thus crucial that you assign priorities to the debates in the actual draw using automatic prioritisation or the manual sliders. Because the automatic prioritiser does not employ the highest priority value, it is worth having a look at the draw and seeing if any debates justify this before proceeding." +msgstr "" + +#: ../../features/preformed-panels.rst:58 +msgid "Step 6: Allocate preformed panels to debates" +msgstr "" + +#: ../../features/preformed-panels.rst:60 +msgid "To allocate preformed panels to your debates, click the normal \"Allocate\" button and then select the *Preformed Panels* option." +msgstr "" + +#: ../../features/preformed-panels.rst:64 +msgid "This will then allocate the preformed panels to debates." +msgstr "" + +#: ../../features/preformed-panels.rst:68 +msgid "You can the edit the allocation as normal. If needed, you can redo the allocation of the preformed panels at any point." +msgstr "" + +#: ../../features/preformed-panels.rst:71 +msgid "How does the allocator work?" +msgstr "" + +#: ../../features/preformed-panels.rst:73 +msgid "Roughly speaking, the allocator tries to match panel priorities to debate priorities, while avoiding conflicts. It'll mostly try to swap panels within priority levels in order to avoid conflicts. If there aren't exactly as many panels at each priority level as there are debates, it'll do its best to match what it can." +msgstr "" + +#: ../../features/preformed-panels.rst:75 +msgid "More formally, it treats the allocation of preformed panels to debates as an `assignment problem `_, with a cost of assigning each panel :math:`p` to each debate :math:`d` given by" +msgstr "" + +#: ../../features/preformed-panels.rst:77 +msgid "C(p,d) = w_\\mathrm{mism} [\\mathrm{importance}(p) - \\mathrm{importance(d)}]^2 + w_\\mathrm{conf} \\, \\mathrm{conflicts}(p,d) + w_\\mathrm{hist} \\, \\mathrm{history}(p,d)" +msgstr "" + +#: ../../features/preformed-panels.rst:81 +msgid "where" +msgstr "" + +#: ../../features/preformed-panels.rst:83 +msgid ":math:`w_\\mathrm{mism}` is the \"Importance mismatch penalty\" in the \"Draw rules\" settings," +msgstr "" + +#: ../../features/preformed-panels.rst:84 +msgid ":math:`w_\\mathrm{hist}` is the \"Adjudicator conflict penalty\" in the \"Draw rules\" settings," +msgstr "" + +#: ../../features/preformed-panels.rst:85 +msgid ":math:`w_\\mathrm{conf}` is the \"Adjudicator history penalty\" in the \"Draw rules\" settings," +msgstr "" + +#: ../../features/preformed-panels.rst:86 +msgid ":math:`\\mathrm{importance}(p)` is the importance of panel :math:`p`," +msgstr "" + +#: ../../features/preformed-panels.rst:87 +msgid ":math:`\\mathrm{importance}(d)` is the importance of debate :math:`d`," +msgstr "" + +#: ../../features/preformed-panels.rst:88 +msgid ":math:`\\mathrm{conflicts}(p,d)` is the number of adjudicator-team conflicts between panel :math:`p` and debate :math:`d`, and" +msgstr "" + +#: ../../features/preformed-panels.rst:89 +msgid ":math:`\\mathrm{history}(p,d)` is the number of adjudicators and teams who have seen each other between panel :math:`p` and debate :math:`d`." +msgstr "" + +#: ../../features/preformed-panels.rst:91 +msgid "It then uses the `Hungarian algorithm `_ to find the assignment of panels to debates that minimizes the total cost of the pairings." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/features/printing.po b/docs/locale/cs/LC_MESSAGES/features/printing.po new file mode 100644 index 00000000000..cc386225f2a --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/features/printing.po @@ -0,0 +1,68 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/printing.po\n" +"X-Crowdin-File-ID: 1293\n" +"Language: cs_CZ\n" + +#: ../../features/printing.rst:3 +msgid "Printing Ballots and Feedback" +msgstr "" + +#: ../../features/printing.rst:5 +msgid "Tabbycat offers the ability to print scoresheets and feedback sheets on a per-round basis. This means that each scoresheet is customised to match the draw, and so will display:" +msgstr "" + +#: ../../features/printing.rst:7 +msgid "The motion or possible motions that could have been chosen from" +msgstr "" + +#: ../../features/printing.rst:8 +msgid "The teams, and a list of speakers for each team" +msgstr "" + +#: ../../features/printing.rst:9 +msgid "The room number, and name of the adjudicators present" +msgstr "" + +#: ../../features/printing.rst:11 +msgid "Feedback sheets will also be customised in this manner; displaying:" +msgstr "" + +#: ../../features/printing.rst:13 +msgid "A 'from' source. Sheet will be printed for each possible piece of feedback in that room: ie adjudicators will each get a sheet for their panellists and trainees while teams and panellists will get sheets for the chair." +msgstr "" + +#: ../../features/printing.rst:14 +msgid "The specific questions you established when configuring the :ref:`adjudicator feedback questions `" +msgstr "" + +#: ../../features/printing.rst:15 +msgid "The room number" +msgstr "" + +#: ../../features/printing.rst:17 +msgid "To print the ballots for each round, you would go to the **Display** page for that round, the click one of the two relevant print links. This opens a new window. In each window, you then use your browser's print function (CTRL-P). In the resulting print interface (from your browser) you'll want to turn background graphics on, header/footers off, and set the layout to portrait (feedback sheets) or landscape (score sheets)." +msgstr "" + +#: ../../features/printing.rst:19 +msgid "Typically you'd save these to PDF for printing, although you should be able to print straight from this dialogue box." +msgstr "" + +#: ../../features/printing.rst:21 +msgid "Printing works best in Safari and Firefox; use those if possible." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/features/standings-rules.po b/docs/locale/cs/LC_MESSAGES/features/standings-rules.po new file mode 100644 index 00000000000..51f464fff36 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/features/standings-rules.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 21:01\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/standings-rules.po\n" +"X-Crowdin-File-ID: 1295\n" +"Language: cs_CZ\n" + +#: ../../features/standings-rules.rst:5 +msgid "Standings Rules" +msgstr "" + +#: ../../features/standings-rules.rst:8 +msgid "Team standings rules" +msgstr "" + +#: ../../features/standings-rules.rst:10 +msgid "In Tabbycat, you can choose how teams are ranked in the team standings. For example, at Australs, teams are ranked first on the number of wins, and second on their total speaker score. The setting that specifies how teams are ranked is called the **team standings precedence**. The team standings precedence is used:" +msgstr "" + +#: ../../features/standings-rules.rst:15 +msgid "When displaying the team tab," +msgstr "" + +#: ../../features/standings-rules.rst:16 +msgid "Whenever a power-paired draw is generated, and" +msgstr "" + +#: ../../features/standings-rules.rst:17 +msgid "When computing which teams are in the break." +msgstr "" + +#: ../../features/standings-rules.rst:19 +msgid "When you choose the team standings precedence, you choose from a list of *metrics*. Then, in the standings, teams will be sorted first by the first metric, then by the second metric, and so on. You must choose at least one metric, and you can choose up to eight. Teams tied on all metrics will have the same rank." +msgstr "" + +#: ../../features/standings-rules.rst:25 +msgid "If you like, you can also choose **team standings extra metrics**, which are metrics that will be shown in the team standings, but not used to rank teams." +msgstr "" + +#: ../../features/standings-rules.rst:33 ../../features/standings-rules.rst:132 +msgid "Metric" +msgstr "" + +#: ../../features/standings-rules.rst:34 ../../features/standings-rules.rst:133 +msgid "Description" +msgstr "" + +#: ../../features/standings-rules.rst:36 +msgid "Wins" +msgstr "Výhry" + +#: ../../features/standings-rules.rst:37 +msgid "How many debates the team has won." +msgstr "" + +#: ../../features/standings-rules.rst:39 +msgid "Points" +msgstr "Body" + +#: ../../features/standings-rules.rst:40 +msgid "How many points the team has. For two-team formats, this is just a synonym for wins, and differs only in column labelling. For BP, this is 3 points for a first, 2 for a second, 1 for a third and 0 for a fourth." +msgstr "" + +#: ../../features/standings-rules.rst:44 +msgid "Total speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:45 +msgid "The sum of all speaker scores attained in all debates." +msgstr "" + +#: ../../features/standings-rules.rst:47 +msgid "Average total speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:48 ../../features/standings-rules.rst:157 +msgid "The average total speaker score over all debates the team has had, not counting debates where they or their opponents forfeited." +msgstr "" + +#: ../../features/standings-rules.rst:51 +msgid "Average individual speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:52 +msgid "The total substantive speaker score, over all debates the team has had and the number of speakers. Provides an equivalent metric to average total speaker score in no-reply formats, but within the substantive speech scoring range." +msgstr "" + +#: ../../features/standings-rules.rst:57 +msgid "Speaker score standard deviation" +msgstr "" + +#: ../../features/standings-rules.rst:58 +msgid "The standard deviation of total speaker scores over all debates the team has had, not counting debates where they or their opponents forfeited. This metric is ranked in ascending order (smaller standard deviations ranked higher)." +msgstr "" + +#: ../../features/standings-rules.rst:63 +msgid "Sum of margins" +msgstr "" + +#: ../../features/standings-rules.rst:64 +msgid "The sum of all margins. Wins are positive, losses are negative." +msgstr "" + +#: ../../features/standings-rules.rst:66 +msgid "Average margin" +msgstr "" + +#: ../../features/standings-rules.rst:67 +msgid "The average margin over all debates the team has had, not counting debates where they or their opponents forfeited." +msgstr "" + +#: ../../features/standings-rules.rst:70 +msgid "Draw strength by wins" +msgstr "" + +#: ../../features/standings-rules.rst:71 +msgid "The sum of the number of wins of every team this team has faced so far." +msgstr "" + +#: ../../features/standings-rules.rst:73 +msgid "This is also known in some circuits as *win points*, *opponent wins* or *opponent strength*." +msgstr "" + +#: ../../features/standings-rules.rst:76 +msgid "Draw strength by speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:77 +msgid "The sum of speaker scores of every team this team has faced so far." +msgstr "" + +#: ../../features/standings-rules.rst:79 +msgid "Votes/ballots carried" +msgstr "" + +#: ../../features/standings-rules.rst:80 +msgid "The number of adjudicators that gave this team a win across all of their debates. Also known as the number of *ballots* or *judges* a team has." +msgstr "" + +#: ../../features/standings-rules.rst:83 +msgid "In cases where the panel is smaller or larger than 3, this number is normalised to be out of 3. For example, if a panel of five splits 3--2, then the winning team is recorded as gaining 1.8 votes, and the losing team is recorded as gaining 1.2. This also means that solo adjudicators are always worth three votes." +msgstr "" + +#: ../../features/standings-rules.rst:89 +msgid "Number of firsts" +msgstr "" + +#: ../../features/standings-rules.rst:90 +msgid "The number of debates in which the team came first. Only makes sense for British Parliamentary." +msgstr "" + +#: ../../features/standings-rules.rst:93 +msgid "Number of seconds" +msgstr "" + +#: ../../features/standings-rules.rst:94 +msgid "The number of debates in which the team came second. Only makes sense for British Parliamentary." +msgstr "" + +#: ../../features/standings-rules.rst:97 +msgid "Number of pullups before this round" +msgstr "" + +#: ../../features/standings-rules.rst:98 +msgid "The number of times the team has been pulled up as part of :ref:`draw generation `. You probably wouldn't use this as a metric to rank teams, but you may wish to display it as an \"extra metric\" in the team standings for transparency." +msgstr "" + +#: ../../features/standings-rules.rst:103 +msgid "Who-beat-whom" +msgstr "" + +#: ../../features/standings-rules.rst:104 +msgid "If there are exactly two teams tied on all metrics earlier in the precedence than this one, then check if the teams have faced each other. If they have, the team that won their encounter is ranked higher. If they have seen each other more than once, the team that has won more of their encounters is ranked higher." +msgstr "" + +#: ../../features/standings-rules.rst:110 +msgid "If there are more than two teams tied, this metric is not applied." +msgstr "" + +#: ../../features/standings-rules.rst:112 +msgid "This metric can be specified multiple times. Each time who-beat-whom occurs, it applies to all the metrics earlier in the precedence than the occurrence in question." +msgstr "" + +#: ../../features/standings-rules.rst:118 +msgid "Speaker standings rules" +msgstr "" + +#: ../../features/standings-rules.rst:120 +msgid "The speaker standings precedence is only used in speaker standings (*i.e.*, it doesn't affect the operation of the tournament). As for team standings, the **speaker standings precedence** specifies which metrics are used to rank speakers, with the second metric tie-breaking the first, the third tie-breaking the second, and so on. The **speaker standings extra metrics** are metrics that will be shown in the speaker standings, but won't be used to rank speakers." +msgstr "" + +#: ../../features/standings-rules.rst:135 +msgid "Total" +msgstr "" + +#: ../../features/standings-rules.rst:136 +msgid "The sum of all speaker scores attained by the speaker. Note that if a speaker misses a round, they'll typically be relegated to the bottom of the speaker standings by this metric." +msgstr "" + +#: ../../features/standings-rules.rst:140 +msgid "Average" +msgstr "" + +#: ../../features/standings-rules.rst:141 +msgid "The average of all speaker scores attained by the speaker." +msgstr "" + +#: ../../features/standings-rules.rst:143 +msgid "Trimmed mean" +msgstr "" + +#: ../../features/standings-rules.rst:144 +msgid "The average speaker score after excluding their highest and lowest speaker scores. Also known as the *high-low drop*, *truncated mean* or *Olympic average*." +msgstr "" + +#: ../../features/standings-rules.rst:148 +msgid "If the speaker has only one or two scores, this metric just returns the average of those scores, without excluding any." +msgstr "" + +#: ../../features/standings-rules.rst:151 +msgid "Standard deviation" +msgstr "" + +#: ../../features/standings-rules.rst:152 +msgid "The standard deviation of all speaker scores attained by the speaker. This metric is ranked in ascending order (smaller standard deviations ranked higher)." +msgstr "" + +#: ../../features/standings-rules.rst:156 +msgid "Average speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:160 +msgid "Number of speeches given" +msgstr "" + +#: ../../features/standings-rules.rst:161 +msgid "The number of speaker scores associated with the speaker. (In tournaments where teams can rotate speakers, this may not be all rounds.) This metric is normally used as an \"extra\" (unranked) metric, because it'd be weird to rank by number of speeches given, but you can if you want to." +msgstr "" + +#: ../../features/standings-rules.rst:168 +msgid "Motion balance" +msgstr "" + +#: ../../features/standings-rules.rst:170 +msgid "The motion balance page applies a statistical test to estimate the degree to which a motion is imbalanced. This is calculated by first making an underlying assumption that a motion is generally fair. This will be our null hypothesis: that, for a given motion, affirmative teams won the same number of times as negative teams." +msgstr "" + +#: ../../features/standings-rules.rst:172 +msgid "Our chi-squared test will then be centred around disproving this hypothesis. If we disprove the hypothesis, we say that, in the context of this tournament and this draw, the motion ended up being unbalanced. However (technically speaking) if we fail to reject the null hypothesis, we would conclude that there is insufficient evidence to suggest that the motion was unbalanced in the context of this tournament." +msgstr "" + +#: ../../features/standings-rules.rst:174 +msgid "The test proceeds by `calculating the chi-squared stat, then running a series of tests `_. The tests are where we go a little off-book with respect to statistical methodology. Normally we would test at a single \"level of significance\" (ie. with a certain degree of certainty), but that's insufficient in telling us how bad a motion ended up being. So, instead, we conduct a range of tests with a range of levels of significance, and calculate the minimum level of significance that causes our null hypothesis to be rejected. Using the minimum level of significance that rejects our null hypothesis, we can then grade the fairness of the motion on a scale. Motions whose tests fall below a certain threshold will be considered fair, while others will be graded based on the minimum." +msgstr "" + +#: ../../features/standings-rules.rst:176 +msgid "For formats with topic selection, the same test is applied using the number of affirmative and negative vetoes in place of wins. The assumption here is that, during the time allotted for motion selection, teams estimate how appealing a motion is from their position, and then veto the topic that they feel is least favourable. Thus, the null hypothesis is that a motion that is perceived of as fair would be vetoed by affirmative and negative teams to an equal degree." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/features/team-code-names.po b/docs/locale/cs/LC_MESSAGES/features/team-code-names.po new file mode 100644 index 00000000000..99984463bff --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/features/team-code-names.po @@ -0,0 +1,104 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/team-code-names.po\n" +"X-Crowdin-File-ID: 1297\n" +"Language: cs_CZ\n" + +#: ../../features/team-code-names.rst:5 +msgid "Team Code Names" +msgstr "" + +#: ../../features/team-code-names.rst:7 +msgid "Some tournaments use \"code names\" to obscure the institutional affiliations of teams. For example, rather than calling a team \"Harvard DK\", they would be presented in the draw as \"Butterfly\". A natural way to do this would be just to change the name of every team, but then the team's \"real name\" would be hidden from tournament staff, too." +msgstr "" + +#: ../../features/team-code-names.rst:13 +msgid "Instead, Tabbycat allows you to assign code names to teams, alongside their real names. This way, you can have code names show to participants, while real team names show in administrative views (*e.g.* allocating adjudicators). It also allows you to \"decode\" team names for elimination rounds or final tab release easily, without having to actually change every team's name." +msgstr "" + +#: ../../features/team-code-names.rst:19 +msgid "While the most frequently-used public views have been checked to ensure that they show only code names, not all views have been checked thoroughly. Please check views using demonstration data on a test site, configured in the same way that you would use it at your tournament, before using code names at a real tournament." +msgstr "" + +#: ../../features/team-code-names.rst:26 +msgid "Assigning code names" +msgstr "" + +#: ../../features/team-code-names.rst:28 +msgid "Most methods of importing teams, including the simple importer and the ``importtournament`` command, automatically assign code names to teams. The code name is the name of the emoji that is automatically assigned at the same time. For example, the team assigned 🦋 will be code-named \"Butterfly\"." +msgstr "" + +#: ../../features/team-code-names.rst:33 +msgid "If you wish to use your own code names, you need to set the \"code name\" field of each team. Here are two ways to do this:" +msgstr "" + +#: ../../features/team-code-names.rst:36 +msgid "**Edit Database area:** Enter the Edit Database area, and under **Participants > Teams**, click **Change**. Modify each team one by one, entering a new code name then saving." +msgstr "" + +#: ../../features/team-code-names.rst:39 +msgid "``importtournament`` **command:** If you imported a tournament from CSV files, you can just add a ``code_name`` column to your teams CSV file." +msgstr "" + +#: ../../features/team-code-names.rst:43 +msgid "Displaying code names" +msgstr "" + +#: ../../features/team-code-names.rst:45 +msgid "Code names are disabled by default; to enable then, go to **Setup > Configuration > Public Options**, and change the **Team code names** option. You can choose between the following options:" +msgstr "" + +#: ../../features/team-code-names.rst:49 +msgid "Do not use code names" +msgstr "" + +#: ../../features/team-code-names.rst:50 +msgid "Use real names everywhere, and show code names in tooltips" +msgstr "" + +#: ../../features/team-code-names.rst:51 +msgid "Use code names for public; real names with code names in tooltips for admins" +msgstr "" + +#: ../../features/team-code-names.rst:52 +msgid "Use code names for public; code names with real names in tooltips for admins" +msgstr "" + +#: ../../features/team-code-names.rst:53 +msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" +msgstr "" + +#: ../../features/team-code-names.rst:55 +msgid "\"Code names in tooltips\" means that the code name will display in the details box that appears when you roll over a team's name, and similarly for real names." +msgstr "" + +#: ../../features/team-code-names.rst:58 +msgid "One typical use is as follows:" +msgstr "" + +#: ../../features/team-code-names.rst:60 +msgid "Before the tournament, set the team code names setting to *Use code names for public; real names with code names in tooltips for admins*. This hides real names from anything participants would see, but continues to refer to teams in administrative views by real names." +msgstr "" + +#: ../../features/team-code-names.rst:64 +msgid "After the break is announced, set it to *Use real names everywhere, and show code names in tooltips*. This basically decodes all team names, while still allowing people to look up the (now former) code name of a team." +msgstr "" + +#: ../../features/team-code-names.rst:68 +msgid "If you're enabling team codes, you probably want to disable the **Show team institutions** option too." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/features/user-accounts.po b/docs/locale/cs/LC_MESSAGES/features/user-accounts.po new file mode 100644 index 00000000000..75b6991e584 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/features/user-accounts.po @@ -0,0 +1,196 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/user-accounts.po\n" +"X-Crowdin-File-ID: 1299\n" +"Language: cs_CZ\n" + +#: ../../features/user-accounts.rst:5 +msgid "User Accounts" +msgstr "" + +#: ../../features/user-accounts.rst:7 +msgid "For obvious reasons, user logins are required to data entry and administrative functions. Conceptually, there are four levels of access:" +msgstr "" + +#: ../../features/user-accounts.rst:14 +msgid "Access" +msgstr "" + +#: ../../features/user-accounts.rst:15 +msgid "Should be used by" +msgstr "" + +#: ../../features/user-accounts.rst:16 +msgid "Grants access to" +msgstr "" + +#: ../../features/user-accounts.rst:17 +msgid "Is capable of" +msgstr "" + +#: ../../features/user-accounts.rst:19 +msgid "Public" +msgstr "" + +#: ../../features/user-accounts.rst:20 +msgid "The public" +msgstr "" + +#: ../../features/user-accounts.rst:21 +msgid "Publicly available information." +msgstr "" + +#: ../../features/user-accounts.rst:22 +msgid "Viewing things, and submitting new ballots/feedback if electronic submission is permitted by the tournament." +msgstr "" + +#: ../../features/user-accounts.rst:24 +msgid "Assistant" +msgstr "" + +#: ../../features/user-accounts.rst:25 +msgid "Data entry helpers" +msgstr "" + +#: ../../features/user-accounts.rst:26 +msgid "The assistant area" +msgstr "" + +#: ../../features/user-accounts.rst:27 +msgid "Entering, confirming and printing ballots and feedback, checking in ballots and people, and displaying the draw." +msgstr "" + +#: ../../features/user-accounts.rst:29 +msgid "Superuser" +msgstr "" + +#: ../../features/user-accounts.rst:30 +msgid "Chief adjudicators" +msgstr "" + +#: ../../features/user-accounts.rst:31 +msgid "The administrator and assistant areas" +msgstr "" + +#: ../../features/user-accounts.rst:32 +msgid "Generating draws, allocating adjudicators and venues, and editing ballots, feedback and adjudicator scores." +msgstr "" + +#: ../../features/user-accounts.rst:34 +msgid "Staff and superuser" +msgstr "" + +#: ../../features/user-accounts.rst:35 +msgid "Tab director" +msgstr "" + +#: ../../features/user-accounts.rst:36 +msgid "The administrator, assistant and Edit Database areas" +msgstr "" + +#: ../../features/user-accounts.rst:37 +msgid "Editing the database directly." +msgstr "" + +#: ../../features/user-accounts.rst:39 +msgid "If a user account on the tab system belongs to someone who is also a participant in the tournament (*e.g.*, a chief adjudicator), these two capacities are completely separate. User accounts are only used to regulate access to administrative functions. Tabbycat doesn't know about any relationship between user accounts, and who is participating in the tournament." +msgstr "" + +#: ../../features/user-accounts.rst:42 +msgid "Account roles" +msgstr "" + +#: ../../features/user-accounts.rst:44 +msgid "You should create an account for each person who needs to access the tab system. When you create an account in the Edit Database area, there are checkboxes for **Superuser status** and **Staff access**. Superusers have access to the administrator area, and staff have access to the Edit Database area. You should grant permissions as follows:" +msgstr "" + +#: ../../features/user-accounts.rst:46 +msgid "Tab directors should get both superuser and staff status." +msgstr "" + +#: ../../features/user-accounts.rst:47 +msgid "Chief adjudicators and their deputies should get superuser status, but not staff status." +msgstr "" + +#: ../../features/user-accounts.rst:48 +msgid "Tab assistants (helping only with data entry) should get neither superuser nor staff status." +msgstr "" + +#: ../../features/user-accounts.rst:50 +msgid "Tournament participants (other than tab staff) do not need an account. Everything they need to know can be accessed without an account. If you're using electronic ballots or electronic feedback, they access these using a URL that only they know (see :ref:`private-urls`)." +msgstr "" + +#: ../../features/user-accounts.rst:52 +msgid "When doing data entry, users with superuser status should use the **assistant area**. The administrator area is intended for managing the tournament, and doesn't include someand should **not** in general be used for data entry. Specifically, the administrator area lacks checks that are important for data integrity assurance. It should be used only to override the normal :ref:`data entry ` procedure, for example, to unconfirm or modify a ballot." +msgstr "" + +#: ../../features/user-accounts.rst:54 +msgid "The **Edit Database** interface should not be used except where it is actually necessary. There are a few functions which require this, but as a principle, it shouldn't be used as a matter of course." +msgstr "" + +#: ../../features/user-accounts.rst:56 +msgid "In theory, you could grant an account staff status but not superuser status. But then they'd be allowed to edit the database, but not run the tournament, which would be weird." +msgstr "" + +#: ../../features/user-accounts.rst:59 +msgid "Adding accounts" +msgstr "" + +#: ../../features/user-accounts.rst:61 +msgid "To add an account:" +msgstr "" + +#: ../../features/user-accounts.rst:63 +msgid "Go to the Edit Database area of the site." +msgstr "" + +#: ../../features/user-accounts.rst:65 +msgid "Under **Authentication and Authorization**, click the **Add** link next to **Users**." +msgstr "" + +#: ../../features/user-accounts.rst:67 +msgid "Ask the user to enter a username, password and possibly email address." +msgstr "" + +#: ../../features/user-accounts.rst:69 +msgid "Only they should know what the password is." +msgstr "" + +#: ../../features/user-accounts.rst:70 +msgid "If you're hosting on the internet, all passwords should be at least moderately strong!" +msgstr "" + +#: ../../features/user-accounts.rst:71 +msgid "Passwords are not stored as raw passwords, so you can't figure out what their password is." +msgstr "" + +#: ../../features/user-accounts.rst:72 +msgid "The email address is optional." +msgstr "" + +#: ../../features/user-accounts.rst:73 +msgid "This email address is only used to reset their password if they forget it, and has nothing to do with the email address that Tabbycat uses to send emails to tournament participants (*e.g.* private URL links)." +msgstr "" + +#: ../../features/user-accounts.rst:75 +msgid "If they are being assigned superuser and/or staff status, check the relevant boxes." +msgstr "" + +#: ../../features/user-accounts.rst:77 +msgid "Click \"Save\" or \"Save and add another\"." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/features/venue-constraints.po b/docs/locale/cs/LC_MESSAGES/features/venue-constraints.po new file mode 100644 index 00000000000..b0278c378cd --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/features/venue-constraints.po @@ -0,0 +1,168 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/venue-constraints.po\n" +"X-Crowdin-File-ID: 1301\n" +"Language: cs_CZ\n" + +#: ../../features/venue-constraints.rst:5 +msgid "Venue Constraints" +msgstr "" + +#: ../../features/venue-constraints.rst:7 +msgid "Tabbycat supports a basic form of venue constraints. A **venue constraint** is a requirement that a particular **team, adjudicator, institution** or **division** be assigned to a venue in a particular **venue category**. Typical uses would include:" +msgstr "" + +#: ../../features/venue-constraints.rst:12 +msgid "Meeting venue accessibility requirements of particular teams (*e.g.* step-free access)" +msgstr "" + +#: ../../features/venue-constraints.rst:14 +msgid "Placing adjudication core and tab team members close to the tab room" +msgstr "" + +#: ../../features/venue-constraints.rst:15 +msgid "Keeping all debates in a division in one location" +msgstr "" + +#: ../../features/venue-constraints.rst:17 +msgid "Constraints apply to **venue categories**, not individual venues. That is, you specify that (say) a team should be given a venue from a particular *list* of venues. Of course, it's permissible for a venue category to have only one venue in it." +msgstr "" + +#: ../../features/venue-constraints.rst:22 +msgid "The algorithm used to satisfy venue constraints is not guaranteed to be optimal. In some rare cases, it may propose an allocation that fails some constraints, even though some other allocation would have satisfied all (or more) constraints. In almost all practical circumstances, however, it should work, and save human effort (and time) in specially allocating rooms." +msgstr "" + +#: ../../features/venue-constraints.rst:29 +msgid "Adding venue categories" +msgstr "" + +#: ../../features/venue-constraints.rst:31 +msgid "Before you add venue constraints, you first need to add venue categories. Each venue category is a list of venues, typically satisfying a particular need. For example, you might have a category for each of the following:" +msgstr "" + +#: ../../features/venue-constraints.rst:35 +msgid "Venues with step-free access" +msgstr "" + +#: ../../features/venue-constraints.rst:36 +msgid "Venues that are close to general assembly (the briefing room)" +msgstr "" + +#: ../../features/venue-constraints.rst:37 +msgid "Venues that are close to the tab room" +msgstr "" + +#: ../../features/venue-constraints.rst:38 +msgid "Venues that are, or venues that are not, being live-streamed" +msgstr "" + +#: ../../features/venue-constraints.rst:40 +msgid "Each venue can be in as many categories as you like (or none at all)." +msgstr "" + +#: ../../features/venue-constraints.rst:44 +msgid "To add or edit venue categories, go to the **Import Data** area (under Setup) then select **Add/Edit Venue Categories**. Note that this page will show all existing Venue Categories first before showing the blank forms that allow you to create new categories. Give your category a name (like \"Step-free access\"), assign it some venues, then click the \"Save Venue Categories\" button at the bottom of the page." +msgstr "" + +#: ../../features/venue-constraints.rst:47 +msgid "Alternately you can add or edit a venue category by going to the **Edit Database** area (under Setup), scroll down to \"Venues\" and click \"Venue categories\". Then click the **+ Add venue category** button in the top-right of the page or click an existing item." +msgstr "" + +#: ../../features/venue-constraints.rst:50 +msgid "Adding venue constraints" +msgstr "" + +#: ../../features/venue-constraints.rst:52 +msgid "To add or edit venue constraints, go to the **Import Data** area (under Setup) then select **Add/Edit Venue Constraints**. Note that this page will show all existing Venue Constraints first before showing the blank forms that allow you to create new categories. Note that the \"Constrainee ID\" field should let you select from a dropdown or type in the name of an adjudicator, institution, or team (rather than having to lookup the exact ID)." +msgstr "" + +#: ../../features/venue-constraints.rst:57 +msgid "Alternately you can add or edit a venue category by going to the **Edit Database** area (under Setup), scroll down to \"Venues\" and click \"Venue constraints\". Then click the **+ Add venue category** button in the top-right of the page or click an existing item." +msgstr "" + +#: ../../features/venue-constraints.rst:59 +msgid "For each constraint, you need to specify four things:" +msgstr "" + +#: ../../features/venue-constraints.rst:62 +msgid "**Category**" +msgstr "" + +#: ../../features/venue-constraints.rst:62 +msgid "The venue category to which the subject of this constraint should be locked." +msgstr "" + +#: ../../features/venue-constraints.rst:65 +msgid "**Priority**" +msgstr "" + +#: ../../features/venue-constraints.rst:65 +msgid "This is a number used to resolve conflicts between constraints. Constraints with higher priority (greater number) take precedence over those with lower priority. If none of your constraints will ever conflict, then the priority is arbitrary (but it must still be specified)." +msgstr "" + +#: ../../features/venue-constraints.rst:72 +msgid "**Subject content** **type**" +msgstr "" + +#: ../../features/venue-constraints.rst:72 +msgid "The type of subject to which this constraint relates: adjudicator, team, institution or division." +msgstr "" + +#: ../../features/venue-constraints.rst:75 +msgid "**Subject ID**" +msgstr "" + +#: ../../features/venue-constraints.rst:75 +msgid "Which adjudicator, team, institution or division the constraint relates to. The textbox takes a number (the ID of the object in the database), but you can search for the subject by clicking on the search icon next to it. This will bring up a table of objects of the type specified in \"subject content type\" for you to choose from. (You need to select the subject content type first.)" +msgstr "" + +#: ../../features/venue-constraints.rst:86 +msgid "Applying venue constraints" +msgstr "" + +#: ../../features/venue-constraints.rst:88 +msgid "If you don't have any venue constraints for adjudicators, venue constraints are applied automatically when the draw is generated." +msgstr "" + +#: ../../features/venue-constraints.rst:91 +msgid "However, if you have one or more venue constraints for adjudicators, it's not possible to take adjudicator venue constraints into account during draw generation, because the adjudicator allocation isn't known then. You'll need to run the venue allocation yourself after you've allocated adjudicators." +msgstr "" + +#: ../../features/venue-constraints.rst:96 +msgid "To run venue allocation, go to **Edit Venues** (while looking at the draw), then in the screen where you can edit venues, click the **Auto Allocate** button. You can also do this at any other point (say, after adding a new venue constraint) if, for whatever reason, you would like to re-run the venue allocation algorithm." +msgstr "" + +#: ../../features/venue-constraints.rst:102 +msgid "If a venue constraint couldn't be met, a message will show in the \"conflicts/flags\" column of the draw. A constraint might not be met for a number of reasons:" +msgstr "" + +#: ../../features/venue-constraints.rst:106 +msgid "It could be that constraints of different parties (say, one team and one adjudicator) conflicted, so only one could be fulfilled." +msgstr "" + +#: ../../features/venue-constraints.rst:108 +msgid "It could be that all available rooms in the relevant category were already taken by other, higher-priority constraints." +msgstr "" + +#: ../../features/venue-constraints.rst:110 +msgid "It could just be one of those edge cases that's too hard for the naïve algorithm to handle." +msgstr "" + +#: ../../features/venue-constraints.rst:113 +msgid "Currently, Tabbycat doesn't tell you which of these happened, so if the venue allocation fails to meet all your constraints, it's on you to figure out why. In most scenarios, we imagine you'll have few enough constraints that this will be obvious; for example, if the chief adjudicator is judging a team with accessibility requirements, it might be obvious that the latter's constraint took priority. We might in future add support for more useful guidance on conflicting constraints, but we currently consider this to be of low priority." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/guide/comparisons.po b/docs/locale/cs/LC_MESSAGES/guide/comparisons.po new file mode 100644 index 00000000000..fb4f4c2b82b --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/guide/comparisons.po @@ -0,0 +1,338 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/comparisons.po\n" +"X-Crowdin-File-ID: 1303\n" +"Language: cs_CZ\n" + +#: ../../guide/comparisons.rst:5 +msgid "Tab Software Comparisons" +msgstr "" + +#: ../../guide/comparisons.rst:7 +msgid "If you're reading this, you're probably interested in using Tabbycat, and wondering how it compares to other options. Perhaps you're a long-time user of another tab system, and wondering what Tabbycat can do better. This page is our effort to help answer this. Tabbycat's been around since 2010, but since BP support is a recent addition (2017), we thought it would be useful to outline the differences between Tabbycat and other BP software." +msgstr "" + +#: ../../guide/comparisons.rst:9 +msgid "Obviously, this page is written by the developers of Tabbycat, and naturally, we have our biases. But rarely is there a single best option for everyone and every situation: different tab programs imagine the tabbing process in a different ways and have made unique trade-offs in their development process and design decisions. So we've tried to be as fair and accurate as we can, and we've consulted experienced tab directors (other than us!) and chief adjudicators to help provide a balanced overview." +msgstr "" + +#: ../../guide/comparisons.rst:11 +msgid "At present, this guide just focuses on the major options available for the British Parliamentary format, although we'd like to expand this to incorporate the other formats that Tabbycat supports at some point in the future. As with all of our documentation, the source for this page `is on GitHub `_, and we welcome feedback and contributions." +msgstr "" + +#: ../../guide/comparisons.rst:14 +msgid "On feature lists" +msgstr "" + +#: ../../guide/comparisons.rst:16 +msgid "In the first draft of this document, we had a table that listed every feature we could think of, along with which software does and doesn't support it. This ended up not being a great idea, for a couple of reasons." +msgstr "" + +#: ../../guide/comparisons.rst:18 +msgid "Firstly, the largest feature disparities are for relatively niche features. All of the software discussed can do the basics necessary to run a tournament: generate draws, allocate adjudicators, enter results, etc. As a result, we will — like a good whip speech — be comparative and note key feature disparities when discussing each alternative software directly." +msgstr "" + +#: ../../guide/comparisons.rst:20 +msgid "Secondly, we felt that the 'checklist' approach to comparing tab software would do a disservice to the reasons you would actually choose one software over another. Except where a niche capability is essential, raw technical specifications rarely define the experience of using a product such as a phone, a car, or indeed, tabbing software. With Tabbycat, we've spent eight years continuously refining the tabbing workflow and smoothing out rough edges, and we believe you'll find the result extremely user-friendly and robust. As always, the best way to check this out is by :ref:`setting up a demo site and taking it for a spin `!" +msgstr "" + +#: ../../guide/comparisons.rst:23 +msgid "Comparison with Tabbie2" +msgstr "" + +#: ../../guide/comparisons.rst:26 +msgid "Centralised site vs individual sites" +msgstr "" + +#: ../../guide/comparisons.rst:28 +msgid "Tabbie2 and Tabbycat are both internet-based systems. Tabbie2 hosts all tournaments on a single site. However, when using Tabbycat, each tournament or organisation sets up its own site. Each model has its advantages and disadvantages in different areas:" +msgstr "" + +#: ../../guide/comparisons.rst:30 +msgid "**User identification**. Tabbie2's centralised model allows for site-wide user accounts for all tournament participants. This means that they can use the same login information for all tournaments, and perform tasks such as submitting ballots and feedback through that unified account. If you're in an established circuit, most of your participants probably already have user accounts which are identified and collected (via e-mail addresses) during registration. If you're in a newer circuit, or one where Tabbie2 is rarely used, most of your participants will probably need to create an account — a process which Tabbie2 handles by e-mailing them a request to do so when that person is added to your tournament." +msgstr "" + +#: ../../guide/comparisons.rst:32 +msgid "In Tabbycat's decentralised model, there is no persistent 'account' for tournament participants on each tab site or across different tab sites. Indeed, the only people who can log in to the site are those who have been given accounts by the tab director, such as tab staff and members of the adjudication core." +msgstr "" + +#: ../../guide/comparisons.rst:34 +msgid "For secure e-ballot and e-feedback submissions, Tabbycat assigns a \"private URL\" to each adjudicator or team. This is essentially a password that allows a participant to only submit data that they should have access to in that specific tournament. This means participants don't need user accounts and you don't need to collect user account information; however if your tournament uses e-ballots or e-feedback you will need to distribute those private URLs to participants. Tabbycat can e-mail these to participants for you, or print them to give them to participants, or you could distribute the URLs using your own means." +msgstr "" + +#: ../../guide/comparisons.rst:36 +msgid "**Control over data**. Some participant information in Tabbie2 is shared between tournaments, like their names and conflicts (discussed below). This means participants can manage it directly through their user accounts, without needing to go through you. On the other hand, this requires your participants to co-operate in keeping their accounts up to date, and to provide the correct e-mail address during registration (you'd be surprised how many don't). Furthermore, participants may look to you for assistance, and your ability to help is limited to directing them through Tabbie2 channels—easy enough if they forget their password, but not so much if they forget their account's e-mail address." +msgstr "" + +#: ../../guide/comparisons.rst:38 +msgid "Because each Tabbycat site is its own, you'll need to collect and import all participant details yourself. This might seem like more to do, but it also means there's no need to match your data to existing accounts, which can be time-consuming and prone to participant error. It also means you can freely change data, for example, to correct a participant's name or institution, or to add data like conflicts on an ad-hoc basis." +msgstr "" + +#: ../../guide/comparisons.rst:40 +msgid "**Data privacy**. Conflicts are typically entered into the tab, and are sensitive information. Tabbie2's centralisation allows for conflicts to be self-nominated by users and stored in their user accounts. This, in theory, saves the need for users to report conflicts to tab directors and other tournament staff. In practice, however, only special \"super\" users on Tabbie2 have access to the stored conflicts of users (otherwise anyone could access a user's conflicts by creating a new tournament and adding that user as a participant), so many tournaments need to collect this information from participants anyway." +msgstr "" + +#: ../../guide/comparisons.rst:42 +msgid "Tabbycat's decentralised model means that no-one will have access to conflict information except for the tab staff of each individual instance of Tabbycat. Unlike Tabbie2, Tabbycat's developers do not have any access to your tournament's data — conflicts or otherwise. However, to help us continually improve the software, Tabbycat does send error reports to its developers if there is a serious bug or crash in the code, which could potentially contain confidential information depending on which page triggered the report. As a result of Tabbycat's decentralised data storage, each tournament does need to collect and enter conflicts as part of their registration process." +msgstr "" + +#: ../../guide/comparisons.rst:44 +msgid "**When things go wrong**. In our view, this is probably the most important factor. Obviously, we all hope you never have to fix things. But no software is perfect, and software developed by volunteers in their spare time (as both Tabbie2 and Tabbycat are) is especially imperfect. On occasion, glitches or edge cases occur, and fixing them requires you to directly edit the offending data in the database. Being able to do this without assistance can be the difference between a delay of minutes and a delay of hours." +msgstr "" + +#: ../../guide/comparisons.rst:46 +msgid "In Tabbycat, because it's your site, you have full control of the database, and can edit it through Tabbycat's \"Edit Database\" area. This allows you to fix things (or break things, if you're not careful!). Tabbie2's centralisation prevents this—for obvious reasons, only Tabbie2's developers have direct database access, which makes their intervention necessary if direct database access is required to resolve a problem." +msgstr "" + +#: ../../guide/comparisons.rst:49 ../../guide/comparisons.rst:138 +msgid "Running your tournament" +msgstr "" + +#: ../../guide/comparisons.rst:51 +msgid "Tabbie2 and Tabbycat have broadly similar workflows for running rounds; at least on paper. Key differences are discussed below:" +msgstr "" + +#: ../../guide/comparisons.rst:53 +msgid "**Data import**. Tabbie2 takes CSV files for import. Tabbycat has a CSV file importer, but it's (for now) only accessible through a command-line interface and is only expected to be used for large tournaments by experienced tab directors. As a more user-friendly alternative, Tabbycat also has an import wizard that's designed to make it easy to copy and paste CSV data. This works well for small and medium scale tournaments, but is cumbersome for large ones." +msgstr "" + +#: ../../guide/comparisons.rst:55 +msgid "**Public interface**. Tabbycat can optionally publish the entire draw, as well as current team point standings and results of previous rounds, online. Tabbie2 shows to a logged-in user information about the debate that user is in for that round, but doesn't allow people to check up on people who are not themselves." +msgstr "" + +#: ../../guide/comparisons.rst:57 +msgid "**Position rotation**. Tabbie2 uses an algorithm known as the \"Silver Line algorithm\", which keeps swapping pairs of teams until no further improvement is found. Because it stops at any 'local optimum', this method isn't guaranteed to be the best possible distribution of positions, and for large tournaments it often isn't. Tabbycat instead uses the `Hungarian algorithm `_, an well-known algorithm that finds the (globally) optimal allocation of positions. (One might describe this algorithm, in technical terms, as 'powerful'.) Tabbycat also produces a position balance report, so that in every round you can see which teams have unbalanced position histories." +msgstr "" + +#: ../../guide/comparisons.rst:59 +msgid "**Venue allocations**. Both Tabbie2 and Tabbycat allow for debate venues to be automatically assigned and manually edited. Tabbycat also allows you to specify 'venue constraints' that can automatically match particular participants with their accessibility requirements, or alternatively allow for tournament staff, such as a convenor or chief adjudicator, to be allocated rooms close to the briefing hall or tab room." +msgstr "" + +#: ../../guide/comparisons.rst:61 +msgid "**Ballot entry**. Both Tabbie2 and Tabbycat support entering ballots online ('e-ballots') and entering ballots from paper from the tab room. Tabbie2 was built with e-ballots in mind, while Tabbycat was originally built for tab room staff, and the ballot entry paradigms reflect that. Both are flexible, just a little different—the best way to understand the difference is to try a demo of each. Also, Tabbycat takes note of the order in which speakers in a team spoke (i.e. who was PM and who was DPM), whereas Tabbie2 just records scores." +msgstr "" + +#: ../../guide/comparisons.rst:63 +msgid "As discussed earlier in *User identification*; Tabbie2's e-ballots are tied to unified user accounts, whereas Tabbycat's e-ballots are tied to per-tournament and per-adjudicator 'private URLs'." +msgstr "" + +#: ../../guide/comparisons.rst:65 +msgid "**Break and speaker categories**. Tabbie2 has ESL, EFL and novice markers, which you can enable in a tournament's settings. Tabbycat supports user-defined break and speaker categories, so if your tournament has ESL, EFL, novice or any other form of category, you can define and customise those categories as needed." +msgstr "" + +#: ../../guide/comparisons.rst:67 +msgid "**Adjudicator allocation algorithm**. Both Tabbie2 and Tabbycat use an algorithm to recommend an initial allocation of adjudicators to debates. In principle, they both work by assigning \"costs\" to allocations, and trying to find the minimum-cost assignment. Some notable differences:" +msgstr "" + +#: ../../guide/comparisons.rst:69 +msgid "Tabbie2 uses simulated annealing, which is not guaranteed to be optimal and technically needs to be tuned to be effective (which you're probably not doing). Tabbycat uses the Hungarian algorithm, which guarantees an optimal solution." +msgstr "" + +#: ../../guide/comparisons.rst:70 +msgid "On the other hand, the Hungarian algorithm can't account for relationships between adjudicators on a panel, so adjudicator-adjudicator conflicts aren't considered by Tabbycat's algorithm (though they are highlighted in the interface)." +msgstr "" + +#: ../../guide/comparisons.rst:71 +msgid "Tabbycat's cost function is simpler and more naive. On the other hand, Tabbie2's is more complicated and can be rather opaque (even if you read its source code)." +msgstr "" + +#: ../../guide/comparisons.rst:72 +msgid "Tabbie2 allows for single-gender panels to be charged an additional cost. Tabbycat's algorithm doesn't, but the interface does provide a way to easily check for this visually." +msgstr "" + +#: ../../guide/comparisons.rst:73 +msgid "Tabbie2 automatically calculates the importance of a room based on its bracket (team points). In Tabbycat, debate importance can be assigned for all debates automatically based on on a room's bracket or the quantity of live break categories inside it. Instead of — or subsequent to — automatic classification any importance value can be manually tweaked as desired. These options mean there is a greater flexibility in determining which debates the allocation algorithm should prioritise." +msgstr "" + +#: ../../guide/comparisons.rst:75 +msgid "**Adjudicator allocation interface**. While both interfaces use drag and drop interactions, and allow for color highlights to help identify adjudicators by gender, region, and feedback rating, Tabbycat's allocation interface was designed to be usable on both small screens and projectors, and has a number of extra features that can help inform allocations. These features include:" +msgstr "" + +#: ../../guide/comparisons.rst:77 +msgid "Clashes are shown directly in the interface when they apply, but dragging an adjudicator will also show you the potential conflicts that would occur if they were relocated in a new panel. This can make it much easier to avoid creating new clashes when shifting adjudicators around the draw." +msgstr "" + +#: ../../guide/comparisons.rst:78 +msgid "An inline display of an estimate of whether a team is 'live' for each of their break categories — i.e. whether they are 'safe' (have enough points to break); 'dead' (cannot gain enough points to break); or 'live' (still in contention)." +msgstr "" + +#: ../../guide/comparisons.rst:79 +msgid "'History' conflicts (where an adjudicator has seen a team before, or previously was on a panel with another judge) are displayed so they can be avoided." +msgstr "" + +#: ../../guide/comparisons.rst:80 +msgid "Each adjudicator is present as occupying a particular position (chair, panellist, trainee) rather than having those positions calculated automatically." +msgstr "" + +#: ../../guide/comparisons.rst:81 +msgid "Chairs can be 'swapped' by dragging adjudicators on top of each other, and an 'unallocated' area can be used to view and store adjudicators that have not been allocated." +msgstr "" + +#: ../../guide/comparisons.rst:83 +msgid "**Adjudicator feedback customisation**. Both Tabbie2 and Tabbycat have built-in adjudicator feedback forms, and allow you to specify the questions on the feedback form. Notable differences:" +msgstr "" + +#: ../../guide/comparisons.rst:85 +msgid "Setting up questions is painless on neither system. Tabbycat requires you to use the Edit Database area; Tabbie2 makes you click through a slightly more opaque maze of pages and forms." +msgstr "" + +#: ../../guide/comparisons.rst:86 +msgid "Tabbycat allows for a richer range of types of questions than Tabbie2 does." +msgstr "" + +#: ../../guide/comparisons.rst:87 +msgid "Tabbie2 allows you to specify different questionnaires for team-on-chair, chair-on-panellist and panellist-on-chair. Tabbycat only differentiates between team-on-adjudicator and adjudicator-on-adjudicator." +msgstr "" + +#: ../../guide/comparisons.rst:88 +msgid "Tabbycat gives you more control over who is expected to submit feedback on whom; e.g. whether teams submit on panellists, and whether panellists submit on each other. In Tabbie2, you can effect this with blank questionnaires, but only for the three options listed above." +msgstr "" + +#: ../../guide/comparisons.rst:89 +msgid "Tabbycat can, optionally, automatically incorporate feedback into adjudicator scores using a naive weighted average with the adjudicator base score. This can be disabled by simply setting feedback weight to zero, as some adjudication cores prefer. Tabbie2 has no ability to automatically incorporate feedback." +msgstr "" + +#: ../../guide/comparisons.rst:90 +msgid "Tabbycat produces a \"shame list\" of unsubmitted feedback, which you can optionally publish on the public-facing site to try to incentivise submission." +msgstr "" + +#: ../../guide/comparisons.rst:92 +msgid "(How participants access adjudicator feedback submission is discussed in *User identification* above.)" +msgstr "" + +#: ../../guide/comparisons.rst:95 ../../guide/comparisons.rst:149 +msgid "Other considerations" +msgstr "" + +#: ../../guide/comparisons.rst:97 +msgid "**Offline availability**. If you like, you can also install Tabbycat on your own computer, rather than host it as website on a server. This means that you can use it offline. However installing Tabbycat in this manner will require the (at least brief) use of a command line interface." +msgstr "" + +#: ../../guide/comparisons.rst:99 +msgid "**Cost**. Tabbie2 is free to use. Tabbycat is free to use for not-for-profit, not-for-fundraising tournaments; tournaments for profit or fundraising must make a donation of A$1 per team. In addition, larger tournaments that run on Tabbycat's recommended web host (Heroku) may need to purchase an upgraded database service (the free tier has storage limits) which will cost around ~US$3 to use for the duration of a week-long tournament." +msgstr "" + +#: ../../guide/comparisons.rst:101 +msgid "**Documentation**. Tabbycat has `relatively extensive documentation `_ that can be useful for learning how to use a particular feature or understanding what is happening at a technical level." +msgstr "" + +#: ../../guide/comparisons.rst:103 +#, python-format +msgid "**Hosting location**. Tabbycat recommends using Heroku, an established cloud platform service for deploying web applications. Heroku is in turn hosted on Amazon Web Services (AWS). Both Heroku and AWS are highly reliable and widely used; downtime for both has historically been (at worst) less than 0.05% over an annual period. Tabbie2 is hosted on `Uberspace `_; a pay-what-you-want web hosting service. To the best of our knowledge, uptime statistics are not available." +msgstr "" + +#: ../../guide/comparisons.rst:105 +msgid "**Multi-format support**. If you are interested in tabbing both four- and two- team formats there may be some value in using and learning Tabbycat as it will let you use the same software in both settings." +msgstr "" + +#: ../../guide/comparisons.rst:108 +msgid "Comparison with Tournaman" +msgstr "" + +#: ../../guide/comparisons.rst:111 +msgid "Native app vs web app" +msgstr "" + +#: ../../guide/comparisons.rst:113 +msgid "The crucial strength — and limitation — of Tournaman is that it is a Windows desktop application. Naturally, being a desktop app limits the features it can offer, relative to web apps like Tabbycat or Tabbie2, since it can't offer any online access. On the other hand, working with a desktop app can often be simpler than a web app." +msgstr "" + +#: ../../guide/comparisons.rst:115 +msgid "**Installation**. You'll need to run (or emulate) a Windows machine to run Tournaman. Assuming you're using Windows, Tournaman's installation process is easy and familiar." +msgstr "" + +#: ../../guide/comparisons.rst:117 +#, python-format +msgid "Tabbycat has a simple one-click installation process if you're deploying online (:ref:`to Heroku `). However, if you want to run Tabbycat on your own computer rather than a website, this is substantially more complicated. Local installations of Tabbycat work by having your computer emulate a web server, and while we've tried to make this as accessible as possible, a technical background is definitely helpful for this. Using our :ref:`Docker-based method ` should be simple, but it's not 100% reliable, and if it fails it can be difficult to figure out why. If internet access is available, we recommend running Tabbycat on Heroku." +msgstr "" + +#: ../../guide/comparisons.rst:119 +msgid "**Online features**. Because Tournaman runs fully offline, it naturally can't support many internet-based features: electronic ballots, online publication of draws and live team standings, and integrated tab release. Typically, if you wanted to publish anything online from Tournaman, you'd do so by publishing the files that Tournaman generates locally. In Tabbycat, all of these are built in, so there's a single website for all tab information." +msgstr "" + +#: ../../guide/comparisons.rst:121 +msgid "**Multi-user access**. Tournaman can be configured to allow networked ballot entry, but in order to set it up, you need to be comfortable with basic computer networking. This works best on small isolated networks that you control directly, e.g. a dedicated router set up in the tab room. It's not a great idea to set this up on computers connected to a university-wide network: many IT departments won't permit it, and even if they do, it's insecure, since anyone on the network can access it." +msgstr "" + +#: ../../guide/comparisons.rst:123 +msgid "Tournaman's multi-user access is designed primarily to allow tab assistants to enter data. Key administrative tasks, such as draw generation and adjudicator allocation, must still be done on the computer on which Tournaman is installed. In contrast, web-based systems like Tabbycat and Tabbie2 allow users to login from any internet-connected device to access the functionality permitted by their account. This is often extremely useful if, say, you want to log in to a lectern computer, or have tab assistants work on mobile devices that they have with them." +msgstr "" + +#: ../../guide/comparisons.rst:125 +msgid "If you choose to install Tabbycat offline (rather than on Heroku), it's also possible to have the computer on which the local installation resides serve the website to other computers on the same network. This then permits anyone on the same network to access the \"local\" installation as if it were hosted on the internet. However, like Tournaman, such a configuration requires at least basic networking experience, and for security reasons is only advisable on small isolated networks that you control." +msgstr "" + +#: ../../guide/comparisons.rst:127 +msgid "**Backups and portability**. Both Tournaman and Tabbycat (unlike Tabbie2) store data in a way that is completely accessible to you. Tournaman does this by saving files on your computer's hard drive, while Tabbycat stores data in a SQL database that belongs to you." +msgstr "" + +#: ../../guide/comparisons.rst:129 +msgid "It should be emphasized that in both Tournaman and Tabbycat, actually needing to revert to a backup is extremely rare. Almost always, any glitch or error that breaks the tab can be resolved by editing data directly, without needing to \"roll back\" to a previous state. In Tournaman, this is done by editing the files that it writes to your hard drive (they're just XML files). In Tabbycat, this is done through the \"Edit Database\" area." +msgstr "" + +#: ../../guide/comparisons.rst:131 +msgid "Tournaman's storage of data as XML files makes backups easy, although effort should be made to have backups stored on other computers or the cloud (e.g. on Dropbox) in case the tab computer breaks or is lost. Restoring data from those backups (or transferring the tab to a different computer) is typically a simple process of copying the files back to the original location." +msgstr "" + +#: ../../guide/comparisons.rst:133 +msgid "As for Tabbycat, in online installations, backups can be taken easily using Heroku's `database backup capability `_. However, restoring backups requires you to have the Heroku command line interface installed. In offline installations, PostgreSQL's \"dump\" and \"restore\" commands are recommended, and may require some perseverance to get going reliability, particularly if you don't have prior SQL experience." +msgstr "" + +#: ../../guide/comparisons.rst:135 +msgid "Generally there is no need for data portability when working with an online copy of Tabbycat — the website can be accessed anywhere. However if working with an offline/local copy, a tab can be transferred between machines by creating a backup of the database and restoring it to the other machine's database (doing so requires technical knowledge)." +msgstr "" + +#: ../../guide/comparisons.rst:140 +msgid "**Adjudicator feedback**. Tournaman lets you assign judges rankings, however it does not directly manage or assist the process of collecting judge feedback. As such tab directors generally need to run a parallel feedback system, and then manually copy over changes to an adjudicator's ranking into Tournaman itself. In contrast, Tabbycat has integrated methods for collecting judge feedback that allow it to be more easily issued, collected, viewed, and automatically translated into modifications to an adjudicator's rank." +msgstr "" + +#: ../../guide/comparisons.rst:142 +msgid "**Adjudicator allocation**. Tournaman has a fixed judge ranking scale and (from what we understand) has a relatively fixed procedure for allocating panels according to their absolute ranks. We are unsure about the exact mechanics of how this works, but broad details are `available here `_." +msgstr "" + +#: ../../guide/comparisons.rst:144 +msgid "As with the discussion of allocation interfaces vis-à-vis Tabbie2, there are a number of features in the Tabbycat allocation interface that mean it is more easily used in a collaborative setting and can display additional information to inform draws." +msgstr "" + +#: ../../guide/comparisons.rst:146 +msgid "**Flexibility in draw rules**. As we've said, all major tab systems are WUDC-compliant. But if you want to deviate from WUDC rules, Tournaman has a few more options. Whereas Tabbycat allows you to use intermediate brackets (rather than pull-ups), Tournaman allows you to sacrifice power-pairing integrity for position balance (though this generally isn't necessary to achieve position balance), fold within brackets and avoid teams hitting their own institution. On the other hand, Tabbycat allows you to tune how position balance trades off between teams (which the WUDC constitution doesn't precisely specify)." +msgstr "" + +#: ../../guide/comparisons.rst:151 +msgid "**Stability and development**. Tournaman has been in use for over a decade and is generally considered to be stable and reliable. However, new features are relatively rarely added, and its being a native app means that it doesn't boast as many features as Tabbycat or Tabbie2." +msgstr "" + +#: ../../guide/comparisons.rst:153 +msgid "**Cost**. Tournaman is free to use. Tabbycat is free to use for not-for-profit, not-for-fundraising tournaments; tournaments for profit or fundraising must make a donation of A$1 per team. In addition, larger tournaments that run on Tabbycat's recommended web host (Heroku) may need to purchase an upgraded database service (the free tier has storage limits) which will cost around ~US$3 to use for the duration of a week-long tournament." +msgstr "" + +#: ../../guide/comparisons.rst:155 +msgid "**Availability of source code**. Tournaman's code is closed-source, meaning it is not publicly available. If you do not have any coding experience this is probably not relevant to you, but if you do, having access to the source of Tabbycat can help you understand how the program works and customise it as needed." +msgstr "" + +#: ../../guide/comparisons.rst:158 +msgid "Comparison with hand tabbing" +msgstr "" + +#: ../../guide/comparisons.rst:160 +msgid "Hand tabbing is easy, until it isn't. Traditionally, using a spreadsheet has been the go-to option for smallish tournaments because, hey, you're pretty handy with Excel, right? Making draws in spreadsheets (or on paper) seems like a pretty approachable task; ultimately it's all cells and formulae and numbers unlike the more arcane underpinnings of actual tab software." +msgstr "" + +#: ../../guide/comparisons.rst:162 +msgid "However, hand tabbing does require you to have a good working knowledge of how your format's rules work and how your spreadsheet software of choice can be made to work them. That process might be easy for you, or it might not be. But, either way, we'd like to think that Tabbycat offers a better alternative to hand-tabbing; regardless of how well you can actually hand-tab. The setup costs of creating a copy of Tabbycat are pretty low and you can speed through the process of draw creation, adjudicator allocation, and result entry at a pace. It's still not going to be as fast a spreadsheet for a small tournament, but we think it's getting pretty close. And in exchange for a little speed you get a much stronger guarantee of your draws being correct, options for online data entry, a more comprehensive and shareable final tab, and much more. Give it a shot!" +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/guide/scaling.po b/docs/locale/cs/LC_MESSAGES/guide/scaling.po new file mode 100644 index 00000000000..23369eb7699 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/guide/scaling.po @@ -0,0 +1,252 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/scaling.po\n" +"X-Crowdin-File-ID: 1305\n" +"Language: cs_CZ\n" + +#: ../../guide/scaling.rst:5 +msgid "Scaling & Performance on Heroku" +msgstr "" + +#: ../../guide/scaling.rst:7 +msgid "If you expect your Tabbycat site to gain lots of traffic — either because it has lots of participants or will be followed by lots of people online — there are a number of strategies to ensure that it will remain fast despite this attention. This is typically only necessary for very large tournaments that will display information on the public-facing version of your Tabbycat site; and even then only minor amounts of 'scaling' are needed at particular moments. However, if your site does become slow you want to know what to do and how to do it ahead of time in order to prevent disruptions." +msgstr "" + +#: ../../guide/scaling.rst:9 +msgid "By default, a Tabbycat installation runs on Heroku's free tier. This is a resource-constrained environment and improving performance will typically require paying for higher levels of Heroku services. These services are billed on a per-minute (not monthly) basis, meaning that if you make use of any upgrades mentioned below, you will only be billed for the actual duration used — i.e. if an upgrade is listed at $100/month, but you only use it for 4 hours, the final bill will be around $0.50. As such you can make use of high-performing resources just when they are needed, without needing to pay the full monthly price to maintain the resource indefinitely." +msgstr "" + +#: ../../guide/scaling.rst:13 +msgid "This page was largely written before a number of improvements in the ``2.2`` release of Tabbycat that have significantly increased traffic capacity. Its recommendations may be overly cautious given these improvements." +msgstr "" + +#: ../../guide/scaling.rst:17 +msgid "Scaling for performance reasons is a separate issue to that of `upgrading the database capacity `_ of your tab which just provides the ability to store data. That said, typically only tournaments that are large enough to need an upgraded database will be the ones that ever need to consider scaling for performance anyway." +msgstr "" + +#: ../../guide/scaling.rst:20 +msgid "Introduction to Scaling" +msgstr "" + +#: ../../guide/scaling.rst:22 +msgid "Heroku's primary resource is that of a 'dyno'. Each dyno can be thought of as running a copy of Tabbycat. Following the 'many hands make light work' principle, running a greater number of dynos will generally improve the ability of your site to serve lots of pages simultaneously because traffic is divided up amongst all of the available dynos. In normal circumstances most Tabbycat pages on the public site are served by Heroku in under a second; however they can take noticeably longer than that when the quantity of incoming traffic exceeds the capacity of the existing dyno(s) to serve it. In such cases the delay accrues because the excess page loads need to first wait for an available dyno in addition to the standard wait for a page to be processed and transferred to the user." +msgstr "" + +#: ../../guide/scaling.rst:24 +msgid "Thus scaling is almost always a process of increasing *throughput* in order to decrease the chance that any page load needs to wait in order to be served by a dyno. On the flip side, having extra dynos or upgraded dynos won't make Tabbycat itself run any faster in general — they are essentially wasted unless there is sufficient large amounts of traffic that a single dyno cannot serve all of it without creating a queue." +msgstr "" + +#: ../../guide/scaling.rst:26 +msgid "Dynos can be scaled by adding more dynos ('horizontally') or by adding upgraded dynos ('vertically'). In general, horizontal scaling should be the first and most effective strategy — the problem traffic causes is due to *concurrency* or lots of people loading lots of pages all at once. The traffic on Tabbycat sites typically fluctuates a lot, with moments of high intensity clustering around draw releases, round advances, and the final tab release. As such you generally only need to scale your dynos for very short periods of time." +msgstr "" + +#: ../../guide/scaling.rst:28 +msgid "In order to increase the number of dynos you first need to be using at least the **Standard 1X** level of dyno. Once set the Heroku Dashboard will show you a slider that can be used to increase the dyno count. While dynos higher than the **Standard 1X** level may help serve pages a tiny bit faster, having *more* dynos is far more effective than having *upgraded* dynos. Upgrading beyond **Standard 1X** is generally only required if you need additional memory (as described below) or want to use auto-scaling (also described below)." +msgstr "" + +#: ../../guide/scaling.rst:32 +msgid "There should be no need to increase the number of 'worker' dynos. While 'web' dynos are responsible for serving traffic, the worker only handles a few rare tasks such as serving email and creating allocations." +msgstr "" + +#: ../../guide/scaling.rst:34 +msgid "At large tournaments you should always upgrade your existing '**Free**' dyno to a '**Hobby**'-level dyno. This upgrade is crucial as it will enable a \"Metrics\" tab on your Heroku dashboard that provides statistics which are crucial to understanding how your site is performing and how to improve said performance. If you are at all unsure about how your site will perform it is a good idea to do this pre-emptively and keep an eye on these metrics over the course of the tournament." +msgstr "" + +#: ../../guide/scaling.rst:38 +msgid "If pages are not loading it could be due to two things: your site being overloaded with traffic, or a bug in Tabbycat itself. Generally, if you see a generic or Heroku-branded 'application error' page that means it is the former problem, whereas a Tabbycat-branded page indicates the latter." +msgstr "" + +#: ../../guide/scaling.rst:41 +msgid "Scaling Dynos" +msgstr "" + +#: ../../guide/scaling.rst:43 +msgid "Once you have upgraded your dyno to the **Hobby** level, the metrics tab provides a number of graphs that can be used to help identify how your site is performing. The first graph, **Events** provides an overview of any problems that are occurring:" +msgstr "" + +#: ../../guide/scaling.rst:47 +msgid "Red marks, or those labelled *Critical* typically indicate some sort of problem. H13 errors are a good measure of the amount of pages failing to load during heavy traffic, however they can be triggered under normal conditions — you want to check how many are occurring within a given time period and ensure its more than a handful." +msgstr "" + +#: ../../guide/scaling.rst:50 +msgid "Response Time & Throughput" +msgstr "" + +#: ../../guide/scaling.rst:54 +msgid "The response time is the amount of time it takes a dyno to load a page and serve it to your users. Smaller response times are thus good, and long response times (over fifteen seconds) indicate that a site is struggling to serve its content due to a large amount of queueing." +msgstr "" + +#: ../../guide/scaling.rst:56 +msgid "Heroku dynos have a maximum response time of 30 seconds, at which point they will stop serving the request. To users this appears as an error page or as a page that never loads. Thus if you see the graph is at or approaching 30 seconds at any point you need to try and diagnose what is causing this and add more resources to reduce the response time." +msgstr "" + +#: ../../guide/scaling.rst:60 +msgid "You can toggle the percentiles in this graph. Problems are much more severe if it affects the 50th percentile which represents a site that is probably not loading for the majority of its users. There are also a couple of Tabbycat functions (like automatic adjudicator allocation) that naturally take 10-20 seconds which means that the maximum or 99th percentile metrics are not very reflective of general traffic." +msgstr "" + +#: ../../guide/scaling.rst:62 +msgid "Closely related to this is the **Throughput** graph (further down) which shows how many pages your site is serving per second. Normally this is not particularly interesting, however note that the red part of the bar graph shows the amount of failed page requests. Like the **Response Time** graph, this can indicate issues with the site — normally this red portion should be well below 1rps (and ideally 0rps). If it is above 0.5 it represents a site that is producing a significant number of failed page loads." +msgstr "" + +#: ../../guide/scaling.rst:64 +msgid "You can verify if pages are not being served to users by checking the **Events** graph and looking for H12 errors, although occasionally they are not reported properly. A large amount of H13 errors can also be a cause for concern." +msgstr "" + +#: ../../guide/scaling.rst:67 +msgid "Dyno Load" +msgstr "" + +#: ../../guide/scaling.rst:71 +msgid "This graph shows how well your dynos are being utilised. It is scaled relative to the total number of dynos you are running (or have run previously). So if you have 10 dynos and the bar graph is near the '10' this shows that each dyno is being utilised 100% (either on average over a 1-minute period or as the maximum use over a 1-minute period)." +msgstr "" + +#: ../../guide/scaling.rst:73 +msgid "If this bar graph is hitting the top it will usually mean that a site that is slow or failing to load pages — if each dyno is busy it can't serve a new page until it is finished. This issue can often compound, with more traffic coming in than it is possible to serve and clear." +msgstr "" + +#: ../../guide/scaling.rst:75 +msgid "If your average, rather than maximum, dyno load is approaching the upper limit of however many dynos you are running now (remember the y-axis will often exceed however many dynos you are currently running) that is a very good sign that you should increase the quantity of dynos being run. Continue adding dynos and evaluate how this effects load so that the bar is not hitting its limit." +msgstr "" + +#: ../../guide/scaling.rst:77 +msgid "If you are consistently needing to scale things (or having previously had issues and are expecting a very heavy burst of traffic) it may be worth upgrading to the **Performance-M** dyno type, which will then allow you to enable the *Auto-scaling* feature. This will automatically add dynos as needed to cope with traffic, and remove them when they become unnecessary. This is very effective; however, note that this dyno-type is $250/month per dyno and will self-add dynos (within an upper limit you can specify). While this is not a huge price on a per hour/minute basis (even running 10 for an hour is only $4) you definitely want to ensure you keep a close eye on it and turn it off when it is not necessary. Note that it also tends to be quite aggressive in how many dynos it 'thinks' you need — you may want to increase the default response time threshold to prevent it scaling so quickly." +msgstr "" + +#: ../../guide/scaling.rst:80 +msgid "Memory Usage" +msgstr "" + +#: ../../guide/scaling.rst:84 +msgid "It is very rare that Tabbycat sites will hit the memory limits of the Free or Hobby level dynos — its almost always hovering around 256MB of the (standard dyno) limit of 512MB. However, if the graph is approaching the dashed line you may want to first restart the dynos (in the *More* dropdown in the upper-right) and see if that resolves it." +msgstr "" + +#: ../../guide/scaling.rst:86 +msgid "You can also confirm that memory limits are causing the app to fail by checking for the presence of R14 errors in the Events chart. If your site continues to come very close to that memory limit you will want to upgrade your dynos to the higher level dynos which have increased memory." +msgstr "" + +#: ../../guide/scaling.rst:89 +msgid "Alerts" +msgstr "" + +#: ../../guide/scaling.rst:91 +msgid "If the site is really struggling to perform its usually relatively obvious. However, if you want to be pre-warned of this, or just ensure things are as fast as possible, you can use the \"Configure Alerts\" feature on the Metrics page to receive emails when things are getting slow. We would recommend creating a Response Time Threshold warning of ``15000ms`` and a Response Requests Percentage Threshold of ``5%``." +msgstr "" + +#: ../../guide/scaling.rst:94 +msgid "Understanding Caching" +msgstr "" + +#: ../../guide/scaling.rst:96 +msgid "When a page is 'cached' it means that Tabbycat has stored a copy of the final output of the page. It can then send that copy directly to a user who is loading that page without needing to go through the normal process of fetching the data from the database, running any calculations, and formatting the results. Pages that are cached will serve quickly — if a page is taking more than a few seconds to load it usually means that page has not been cached (or your site is having too much traffic to serve pages quickly in general). The downside is that changes to the underlying data won't update until the cache has 'expired' and is regenerated. So, for example, a cached copy of the draw will not immediately reflect change to panels and a newly-release motion or tab page will not show up in the menu immediately." +msgstr "" + +#: ../../guide/scaling.rst:98 +msgid "By default Tabbycat caches public pages according to three levels: a 1-minute timeout, a 3.5-minute timeout, and a 2-hour timeout. The only pages on the 2-hour timeout are those that come with a full tab release — such as speaker standings, the motions tab, etc. Public pages that need to update quickly, such as the draw and homepage, are on the 1-minute timeout to ensure data is up to date. Public pages that update less frequently such as Standings, Results, Participants, and Breaks are on the 3.5-minute timeout." +msgstr "" + +#: ../../guide/scaling.rst:100 +msgid "Caching means that a Tabbycat site should actually perform *faster* when it is being viewed by many people at once, as the caches are constantly up-to-date and can be used to serve the majority of requests. When there is less traffic the caches are more likely to be regenerated each time someone goes to a page resulting in slower page loads. Most often performance problems come when a popular page, such as a newly-released draw gains a large amount of traffic suddenly (such as by people constantly refreshing the draw). If the page hasn't finished caching it has to do a full page calculation for each of those new loads, which will spike the amount of resource use until the page load queue is cleared." +msgstr "" + +#: ../../guide/scaling.rst:102 +msgid "One way to help mitigate this is to try and load those pages first yourself to ensuring the cache is populated before other people access it. To do so you would generally open a new private browsing tab, and navigate to the specific page(s) immediately after you have enabled them. This may require going to the URL directly rather than relying on the homepage or menu (which may not have been updated to show the new information). In the case of draw releases, this can also be mitigated by not release online draws until they have been first shown on a projector (so that people aren't trying to get draw information ahead of time)." +msgstr "" + +#: ../../guide/scaling.rst:104 +msgid "You can also increase the 1-minute timeout for the pages that are popular during the in-rounds, by going to the **Settings** section of your Heroku dashboard, clicking *Reveal Config Vars*, and creating a new key/value of ``PUBLIC_FAST_CACHE_TIMEOUT`` and ``180`` (to set the timeout to be 3 minutes i.e. 180 seconds). This should only be necessary as a last resort. Turning off public pages is also an option." +msgstr "" + +#: ../../guide/scaling.rst:106 +msgid "If you ever need to clear the cache (say to force the site to quickly show an update to the speaker tab) you can install `Heroku's Command Line Interface `_ and run the following command, replacing ``YOUR_APP`` with your site's name in the Heroku dashboard::" +msgstr "" + +#: ../../guide/scaling.rst:111 +msgid "Postgres Limits" +msgstr "" + +#: ../../guide/scaling.rst:113 +msgid "The free tier of the Postgres database services has a limit of 20 'connections'. As with Redis, it is rare that a Tabbycat site will exceed this limit; most Australs-sized tournaments will see a maximum of 12 connections at any point in time." +msgstr "" + +#: ../../guide/scaling.rst:117 +msgid "You can monitor this in your Heroku Dashboard by going to the **Resources** tab and clicking on the purple Postgres link. The **Connections** graph here will show you how close you are to the limit. The first tier up from the 'free' Hobby tiers (i.e. ``Standard-0``) has a connection limit of 120 which can be used to overcome these limits if you do encounter them." +msgstr "" + +#: ../../guide/scaling.rst:120 +msgid "Mirror Admin Sites" +msgstr "" + +#: ../../guide/scaling.rst:122 +msgid "If you *really* want to be safe, or are unable to resolve traffic issues and unable to quickly complete tasks on the admin site, it is possible to create a 'mirror' of the tab site just for admin use. This site can be configured to share the same database as the primary site — meaning it is in effect always identical — but because it is at a separate URL it won't have to respond to public traffic and so can't be swamped with a large page load queue." +msgstr "" + +#: ../../guide/scaling.rst:124 +msgid "This requires some technical knowledge to setup and hasn't been rigorously tested. It works fine in our experience but we haven't tested it extensively. If using this make sure you backup (and now how to restore backups) before setting one up." +msgstr "" + +#: ../../guide/scaling.rst:126 +msgid "To do so you would deploy a new copy of Tabbycat on Heroku as you normally would. Once the site has been setup, go to it in the Heroku Dashboard, click through to the **Resources** tab and remove the Postgres and Redis Add-ons. Using the `Heroku Command Line Interface `_ run this command, substituting ``YOUR_APP`` with your *primary* tab site's name (i.e. the app that you had initially setup before this)::" +msgstr "" + +#: ../../guide/scaling.rst:130 +msgid "Here, make a copy of the ``DATABASE_URL`` and ``REDIS_URL`` values. They should look like ``postgres://`` or ``redis://`` followed by a long set of numbers and characters. Once you have those, go to the *Settings* tab of the Heroku dashboard for your *mirror* tab site. Click **Reveal Config Vars**. There should be no set ``DATABASE_URL`` or ``REDIS_URL`` values here — if there are check you are on the right app and that the add-ons were removed as instructed earlier. If they are not set, then add in those values, with ``DATABASE_URL`` on the left, and that Postgres URL from earlier on the right. Do the same for ``REDIS_URL`` and the Redis URL. Then restart the app using the link under **More** in the top right." +msgstr "" + +#: ../../guide/scaling.rst:132 +msgid "Once you visit the mirror site it should be setup just like the original one, with changes made to one site also affecting the other as if they were just a single site." +msgstr "" + +#: ../../guide/scaling.rst:135 +msgid "Estimated Costs" +msgstr "" + +#: ../../guide/scaling.rst:137 +msgid "As a quick and rough benchmark, here is a list of typical prices you would encounter if scaling to meet the performance needs of a high-team-count high-traffic tournament at the approximate scale of an Australs (~100 teams) or above. This is a probably an overly-conservative estimate in that it is based on tournaments run on the ``2.1`` version of Tabbycat. Versions ``2.2`` and above should perform dramatically better and thus have less need to scale using Standard and Performance dynos." +msgstr "" + +#: ../../guide/scaling.rst:139 +msgid "1x ``Hobby Basic Postgres Plan`` ($9/month) run all day for 14 days = ~$4" +msgstr "" + +#: ../../guide/scaling.rst:140 +msgid "A tournament of this size will require an upgraded database tier for the time when you are adding new data; i.e. during registration and rounds. Once the tab is released (and no further data changes needed) however you can downgrade it back to the ``Hobby Dev`` tier." +msgstr "" + +#: ../../guide/scaling.rst:141 +msgid "1x ``Hobby Dyno`` ($7/month each) run all day for 7 days = ~$2" +msgstr "" + +#: ../../guide/scaling.rst:142 +msgid "As recommended, 1 hobby dyno should be run as a baseline in order to see the metrics dashboard; but this can be downgraded a day or so after the tab has been released and traffic is sparse." +msgstr "" + +#: ../../guide/scaling.rst:143 +msgid "3x ``Standard 1X Dyno`` ($25/month each) run 10 hours a day for 4 days = ~$4" +msgstr "" + +#: ../../guide/scaling.rst:144 +msgid "This higher quantity of dynos should only be necessary during traffic spikes (i.e. draw releases, immediately after round advances, and tab release) but unless you want to be constantly turning things on/off its usually easier just to upgrade them at the start of each day of in-rounds (or when the tab is published) and downgrade them at the end of each day. As mentioned earlier, you should occasionally check the *Dyno Load* in the Metrics area and adjust the number of dynos as needed." +msgstr "" + +#: ../../:1 +msgid "``Autoscaled Performance M Dynos`` ($250/month each) average of 5 run for 1 hour = ~$2" +msgstr "" + +#: ../../guide/scaling.rst:146 +msgid "For just round 1 it is a good idea to upgrade to the ``Performance M`` tier so you can enable auto-scaling and thus have the site automatically adjust the number of dynos to the amount of traffic it's getting (rather than having to guess the number of dynos needed ahead of time). Doing so ensures that the first round runs smoothly and means that you can then review the Metrics graphs to see what your 'peak' load looks like and resume using whatever quantity of ``Standard 1X Dyno`` will accommodate this peak load in future rounds." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/guide/tournament-logistics.po b/docs/locale/cs/LC_MESSAGES/guide/tournament-logistics.po new file mode 100644 index 00000000000..742ba0921fb --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/guide/tournament-logistics.po @@ -0,0 +1,1394 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/tournament-logistics.po\n" +"X-Crowdin-File-ID: 1307\n" +"Language: cs_CZ\n" + +#: ../../guide/tournament-logistics.rst:5 +msgid "Tournament Logistics" +msgstr "" + +#: ../../guide/tournament-logistics.rst:7 +msgid "Unlike the rest of our documentation, this section does not deal with particular features or technical concerns with Tabbycat itself. Instead it is an attempt to outline the logistics of tab direction and aims to be of general relevance for people running major tournaments. At present, it is organised by the various ‘stages' of tabbing a tournament, and most of the content takes the form of check-lists or comments designed to highlight and provide guidance on common issues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:9 +msgid "Whilst it aims for general relevance, we should note that this guide is relatively opinionated and mostly written from the perspective of people whose primary experience is tabbing at Australasian tournaments using Tabbycat. That said, we welcome feedback and additions that can account for different format and regional considerations. In the future, if the guide becomes more general and more extensive, it could be spun off into a separate project." +msgstr "" + +#: ../../guide/tournament-logistics.rst:11 +msgid "As with the rest of our documentation, this page is source-available and we welcome :ref:`feedback and contributions `. Note also that we've formatted this guide a single page to reduce clutter, but the sub-sections in the sidebar can be used to help navigate across sections." +msgstr "" + +#: ../../guide/tournament-logistics.rst:14 +msgid "Planning and Preparation" +msgstr "" + +#: ../../guide/tournament-logistics.rst:16 +msgid "This section aims to outline concerns that occur in the months before the tournament: after you have agreed to help with tabbing and while the organising committee and adjudication core are deciding how they want to run key processes such as registration and feedback. It is organised in terms of who you should coordinate with in order to plan for a well-tabbed tournament." +msgstr "" + +#: ../../guide/tournament-logistics.rst:19 +msgid "General Notes" +msgstr "" + +#: ../../guide/tournament-logistics.rst:21 +msgid "You should avoid being the sole person responsible for that tab unless it is a small tournament. There are many cases where you want to be in several places at once and the easiest way to accommodate that is by having co-directors or trusted assistants. Few tab decisions require a single source of authority; it is far better to have multiple people available to share responsibilities around." +msgstr "" + +#: ../../guide/tournament-logistics.rst:23 +msgid "In a similar manner, it is worth considering how you can use the tournament to help train other people. Typically, knowledge of tabbing is concentrated in relatively few people and gained mostly through on-the-ground experience; meaning that every tournament should be approached as rare opportunity to help spread knowledge about tabbing more widely in a circuit. Consider reaching out to institutions or the tournament as a whole to see if they have anyone who would be interested in helping out." +msgstr "" + +#: ../../guide/tournament-logistics.rst:26 +msgid "Convenors" +msgstr "" + +#: ../../guide/tournament-logistics.rst:28 +msgid "It might sound obvious but it will pay to have a very thorough conversation about the tab process (more or less the contents of this document) with the convenors a few months out from the tournament. Do this even if you know the convenors to be knowledgeable or experienced debaters. Key concerns are:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:32 +msgid "Whether internet access will be available and whether participants can be presumed to have smart phones. This has an obvious impact on how online feedback, ballots, and draw release is done. Note that Eduroam is not necessarily a reliable guarantee of access; many participants will come from universities who don't have access to it or will need to follow a setup process that is onerous or requires them to be at their home institution." +msgstr "" + +#: ../../guide/tournament-logistics.rst:33 +msgid "What kind of room is the tab room going to be? Is it possible to optimize its placement when the bookings for rooms are made? Key details include: How large is it? Does it have a sufficient amount of desk space (for data entry)? Does it have a good projector (for allocations)?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:34 +msgid "If they have the resources, having an adjacent room available for just the adjudication core to use can also be useful. While you want to work closely with the adjudication core, they may want to discuss sensitive information (motions, equity) in a space without volunteers present; or they might at times get in the way of things, such as by eating lunch in the middle of a frenetic ballot entry process." +msgstr "" + +#: ../../guide/tournament-logistics.rst:35 +msgid "Ensure that plans are made for food to be brought to tab room. Otherwise you will starve and the adjudication core will swan off to lunch. Having regular access to caffeine can also be similarly essential to some adjudication and tab teams." +msgstr "" + +#: ../../guide/tournament-logistics.rst:36 +msgid "What kind of printers will be available? Can the tournament buy/borrow one? This is obviously a key consideration for pre-printed ballots. Also try and ensure there are back-up printing options if possible. Clearly stipulate your need for ink and paper; and try and opt for a black/white laserjet, over an inkjet, if possible." +msgstr "" + +#: ../../guide/tournament-logistics.rst:37 +msgid "What kind of volunteers will be available? How many, and what is their experience level? As a very broad recommendation, you probably want around 1 volunteer for every 10 rooms, assuming volunteers are performing a dual role as data-enterers and ballot-collectors." +msgstr "" + +#: ../../guide/tournament-logistics.rst:38 +msgid "Will the tournament make a donation to whoever maintains the tabbing software you are using? Depending on the license of your tabbing software and the nature of your tournament (for profit vs not for profit) this may be required. Also, if your tab is self-hosted or independently hosted (such as how Tabbycat is generally deployed on Heroku) accounting officers should also be aware that there will be some costs associated with hosting the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:39 +msgid "You should also ensure that people helping with the tab are fairly compensated for their flights, registration, etc and that any volunteers are invited along to socials and/or given some other recompense." +msgstr "" + +#: ../../guide/tournament-logistics.rst:40 +msgid "Will Swing teams be available? You should plan to have at least one more than you need. For example, with 39 teams, you should have both an 40th swing team to fill in the draw, and the option to easily assemble an 41st swing team in case a team goes missing. At very large tournaments (say over 150 teams) you should plan for even more swing team capacity — it's not unheard of for say three teams to vanish all in a single round. In these cases, you should try and ensure that the swing teams are always ready to go — i.e. that that they are pre-formed, you have a clear communication channel with them, and that they distributed/waiting near the debating rooms so they can fill in at a moment's notice (often you will only find out that teams are missing right as debates are scheduled to start)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:41 +msgid "How will critical information be communicated to participants? Consider that in general, Facebook announcements do not reach many people, although paying to boost the posts is often a very cheap way of dramatically raising their effectiveness. In particular also ensure or check how you manage to get in touch with teams or adjudicators who go missing: will they have reliable phone numbers? Can you get a list of institutional reps who can be reliably called? You want to have processes in place for chasing up adjudicators who do things such as make scoring mistakes as soon as possible in order to minimise delays." +msgstr "" + +#: ../../guide/tournament-logistics.rst:42 +msgid "How will critical information be shared between the tab team, adjudication core, and logistics/convening teams? For smaller/medium sized tournaments a group chat augmented by phone calls (assuming everyone knows everyone else's number) can be sufficient, but even then, you need to ensure that any critical information conveyed privately (i.e. in a call or in person) is conveyed back to the group channel. At very large tournaments (or if you have the resources) walkie-talkies are an excellent way to manage communication — just make sure you have (ahead of time) reserve the different channels to a distinct and known purpose (i.e. general discussion; just the tab team & adjudication core; just convenors)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:43 +msgid "As part of this it is ideal if the organising committees can procure local SIM cards for members of the tab team and adjudication core who are not local. These should be relatively generous in their plans — you don't want to worry about running out of minutes or data if on a critical call or using a hotspot to make critical allocation adjustments." +msgstr "" + +#: ../../guide/tournament-logistics.rst:44 +msgid "At major tournaments you want to arrive at least a day before check-in; and ideally whenever it is that the adjudication core is arriving for their own preparation." +msgstr "" + +#: ../../guide/tournament-logistics.rst:47 +msgid "Registration" +msgstr "" + +#: ../../guide/tournament-logistics.rst:49 +msgid "Having effective registration systems and processes is one of the most important aspects of preparing to tab a large tournament. Bad registration data *will* make setting up a tab extremely painful and introduces the chance for mistakes or inconsistencies in tab data that will only come to light in the first round. As such:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:53 +msgid "You should check in with the registration team and see what they plan to do as soon as possible after being brought on-board. As part of this you should make it clear that you should be consulted on any decisions they make about what data to collect, when to collect it, and how to collect it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:54 +msgid "Registration data should be collected into a shared and live-updating source, such as a Google Sheet. There should be as few canonical sources (ideally one) of data as possible; i.e. there should be a single sheet for individual details, a single sheet for team details, etc; and these should be maintained all the way through to check-in. For both you, and the registration team, having multiple conflicting or outdated copies of data will lead to errors. However, for the registration team these errors can usually be easily sorted out in person (at check-in) but for you that information always needs to be reliable and up to date otherwise what is imported into the tab cannot be trusted." +msgstr "" + +#: ../../guide/tournament-logistics.rst:56 +msgid "At this point our recommendation is to, in most cases, not use specialised registration systems as they are somewhat less intuitive and less flexible than setting up good Google Forms/Sheets." +msgstr "" + +#: ../../guide/tournament-logistics.rst:58 +msgid "If, for whatever reason, the registration team are not able to give you 'live' access to the data they have on hand, make sure they send you copies of it (even if it is incomplete) well before you need it to setup the tab itself. You want to be able to verify what data is actually being collected and how it is formatted well in advance." +msgstr "" + +#: ../../guide/tournament-logistics.rst:60 +msgid "You should have access to *all* of the data collected; often registration teams will make (false) assumptions about what you do or do not need. It is better to have everything and then selectively filter out what is not relevant to the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:61 +msgid "It is critical that the registration team should check in with you before setting up forms asking for information. Every additional time that registration asks for data there will be less and less participation in the process, so you should aim to gather all that you need at the first opportunity; typically during the canonical individual registration phase. Particular information that should not be overlooked for tab purposes:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:63 +msgid "Individual registration should ask whether a participant is a speaker or an adjudicator." +msgstr "" + +#: ../../guide/tournament-logistics.rst:64 +msgid "If that person is a speaker it should ask for their team name/number (reconciling these later is painful)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:65 +msgid "Individual registration should ask for any accessibility requirements of both adjudicators and speakers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:66 +msgid "Individual registration should ask for the previous institutions of both adjudicators and speakers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:67 +msgid "Individual registration should ask for the email addresses of all participants." +msgstr "" + +#: ../../guide/tournament-logistics.rst:68 +msgid "Individual registration should ask for the phone numbers of adjudicators." +msgstr "" + +#: ../../guide/tournament-logistics.rst:69 +msgid "Individual registration should ask for the gender identity of both adjudicators and speakers. Even if you are not *planning* on using this to inform processes, such as adjudicator allocations, you want it on hand in case plans change." +msgstr "" + +#: ../../guide/tournament-logistics.rst:71 +msgid "Independent adjudicators and the adjudication core should follow normal registration procedures. Having them not go through the normal process makes it easy to overlook their data or not get a complete picture of it. For example, adjudication core members might forget to nominate conflicts, or neglect to provide their previous institutions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:72 +msgid "You should confirm how the registration team plans to manage how people check-in to the accommodation in particular. Check-in is when issues with registration data come to light and it is vital that these changes are noted and recorded. Some form of validation of registration data *must* occur at check-in — in particular all adjudicators should be (individually) verified as present and all members of a team should confirm their presence along with their team's name/number and speakers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:73 +msgid "After check-in you need to have a definitive list of who is physically present at the tournament so you can run a first-round draw with confidence. Registration must know this and have processes in place for recording people individually as they arrive, and for that data to filter back to you." +msgstr "" + +#: ../../guide/tournament-logistics.rst:75 +msgid "If you are using Tabbycat's secret links for feedback or ballots these are best distributed at check-in. The registration team should know about this, prepare for it, and be provided with the pdfs to print and distribute." +msgstr "" + +#: ../../guide/tournament-logistics.rst:78 +msgid "Adjudication cores" +msgstr "" + +#: ../../guide/tournament-logistics.rst:80 +msgid "If there is a group chat for the adjudication core you probably want to be part of it; even if you don't contribute much. There are lots of small things that end up being discussed without consideration of how they will affect tab issues and it is also a chance to get to know — ahead of time — the people you will be working with closely over the tournament." +msgstr "" + +#: ../../guide/tournament-logistics.rst:82 +msgid "Members of the adjudication core will often leave tab-relevant decisions until the days prior to the first round or whenever it is that they can first meet with the tab team in person. This often wastes critical time and forces rushed decisions. Many considerations can instead be raised and discussed prior to the tournament. These could include:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:86 +msgid "How to manage the feedback process. This typically benefits from foresight and pre-planning, rather than being decided on the ground. Key considerations are:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:90 +msgid "Who submits feedback on whom? Do trainees do so on their chairs? Do panellists do so on each other? (Presuming your tab software supports these options)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:91 +msgid "Is feedback mandatory? If so, how will this be enforced exactly?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:92 +msgid "How much weight does each adjudicator's test or CV score have over the course of the tournament? By Round 3, or by Round 8, what proportion of an adjudicator's score is derived from their test and what proportion is derived from their feedback?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:93 +msgid "Will the adjudication core tweak an adjudicator's score to 'artificially' increase or decrease it to where they think it should be. For example, this could be done by adjusting a test/CV score upwards in order to compensate for bad feedback that (for whatever reason) they did not think was reliable or fair? Depending on your adjudication core's preferences and your tab software's allowances it is not unheard of for them to maintain full manual control over scores by reading/processing feedback results but only ever manually adjusting scores as a result (rather than having it automatically adjust due to the ratings in the feedback)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:94 +msgid "What is the score scale going to be? What do each of those numbers represent? How will this be communicated to participants so they can score accurately and consistently?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:95 +msgid "What kind of questions will feedback forms ask? If using :ref:`customisable printed or online forms ` consider how these questions be used tactically to identify key issues (say discriminatory scoring) or more easily identify people who should be promoted/demoted. While managing feedback is often a messy and subjective task, it can often be improved by being more targeted in what data it collects." +msgstr "" + +#: ../../guide/tournament-logistics.rst:96 +msgid "How will feedback be monitored, and how will this information feed back into the scores and allocations? At large tournaments it is not unusual for an adjudication core member to sit off each round to review and process feedback — there isn't really a good stretch of available time to do so otherwise. However even if doing this note that there are communication issues to manage here, as each adjudication core member will each end up with a relatively incomplete overview of the total volume of feedback." +msgstr "" + +#: ../../guide/tournament-logistics.rst:98 +msgid "If possible it's nice to plan in advance for when the tab will be released (i.e. on the last night; the day after; etc.) as this often gets left to the last minute to be decided. Also the possibility of whether people can redact themselves from tabs should be raised, as that might be useful to inform participants of during online registration or tournament briefings. In a similar fashion, some adjudication cores might also want to limit speaker tabs to only a certain number of places, particularly at novice-centric tournaments." +msgstr "" + +#: ../../guide/tournament-logistics.rst:99 +msgid "How to handle conflict collection; see the following section." +msgstr "" + +#: ../../guide/tournament-logistics.rst:100 +msgid "How to handle the submission of scoresheets and feedback, primarily in terms of which parts of the process should be done online and offline. Some adjudication cores will have strong thoughts here; others will happily follow whatever you recommend. Key considerations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:104 +msgid "Paper-based feedback is much more taxing to enter than paper-based scoresheets — typically there is much more of it; it asks for a greater variety of data; and it is submitted at inconsistent times. The one advantage is that it is easier to make feedback mandatory with paper, as you can ensure all teams and adjudicators have done so prior to leaving the room. Thus, in most cases, a good online feedback system is much more preferable than paper. If using paper be aware that you will need a lot of volunteers to ensure the feedback is collected promptly. If internet or smartphone access is limited at your tournament it is probably best to accommodate both paper-based and online methods." +msgstr "" + +#: ../../guide/tournament-logistics.rst:105 +msgid "The consequences of having incorrect or missing ballots are much more severe than for feedback. As such major tournaments use paper ballots in some form as the final stage in a checking process to ensure that the results of a debate are definitely correct — adjudicators will always make mistakes and while digital ballots can catch/prevent some types of error (i.e. a low point win) they can't catch others (assigning the wrong scores to the wrong speaker, nominating the wrong winning team, etc.). Assuming your software supports both options, the choice is thus whether to use a hybrid approach (online submission followed by paper verification) or to rely entirely on paper. A fully-paper based approach will be simpler for both yourself and adjudicators, and can be almost as efficient if you have a sufficient number of volunteers. In contrast, a hybrid approach will be potentially much faster if you are short of volunteers and if you expect that almost all adjudicators will have access to the internet, a smartphone, and are capable of following instructions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:107 +msgid "In some circuits, and when using some particular tab software, tournaments might run a 'dual tab' where there is a second, independent, version of the tab software and database into which all data is *also* entered. From what we understand this performs a dual role, as both a backup system that can take over from the main one (say if internet access drops) and as a way of verifying ballot data (by comparing draws or databases between software rather than having a two-step entry process operating for a single tab). This practice seems obsolete when working with modern web-based tab software that is capable of backing up and restoring to an offline system, but we would like to hear your feedback if you think that is not the case." +msgstr "" + +#: ../../guide/tournament-logistics.rst:110 +msgid "Conflicts/Clashes (registration/equity/adjudication core)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:114 +msgid "There should always be a *single* means of collecting conflicts (i.e. a single Google Sheet/Form) and all conflicts should go through it. Because the nature of this data is sensitive and evolving, there must be a single location where it can be easily captured and verified as having been entered into the tab. Conflicts data should never be spread across a loose collection of emails/personal messages/spreadsheets; otherwise keeping track and knowing which ones have been entered into the system will be painful and error prone. Get in touch in with equity and registration in advance and make it clear that they should not make their own conflicts form; or if they've already made one, make sure you adopt it and have access/control of it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:115 +msgid "Conflicts should, ideally, *only be collected after a participants list has been published* and requests for people to nominate conflicts should also be sent out as few times as possible. Most people will only fill this form in once, so it is vital that when asked to nominate conflicts they have as much information as they need to do so comprehensively. Without a public and reasonably-complete participants list people will either nominate conflicts that are not present (wasting your time in cross-referencing data) or not realise someone is present and raise the conflict at a latter, less opportune time." +msgstr "" + +#: ../../guide/tournament-logistics.rst:116 +msgid "In some circuits only adjudicators are allowed to nominate conflicts because of the risk of teams using conflicts 'tactically' to block adjudicators that they think are terrible judges. However, having teams nominate conflicts can be useful: adjudicators may overlook a conflict or there may be equity-based reasons that a conflict is non-symmetrical. This trade-off can be handled in two ways:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:120 +msgid "Not allow teams to nominate conflicts during registration; but allow them to approach equity teams before, or during, the tournament to identify the conflict. Equity can then raise the issue with the tab team and adjudication core and it can be added to the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:121 +msgid "Allow teams to nominate conflicts during registration; but have the adjudication core review the data for 'tactical' conflicts. These are usually relatively easily identified, although can be overlooked if the adjudication core does not know the participants or their region/circuit well. The adjudication core can then override the conflict, discuss it with the teams, or raise it with equity. However, if going down this route, the tab team should discuss with the adjudication core how to manage this process well-ahead of the tournament, and ensure they actually do review the conflicts prior to the first round — otherwise it will likely surface during an allocation and become a major distraction during a critical time period." +msgstr "" + +#: ../../guide/tournament-logistics.rst:123 +msgid "As mentioned in the previous section, the adjudication core (possibly with equity) should provide some degree of guidance about what kinds of debating-related conflicts should be provided. People should be able to self-define what constitutes a conflict, but there are circumstances where they are overly cautious and can be reassured that it is not necessary. The opposite problem may occur also, where many people may have a very high bar for what defines a conflict which could lead to perceptions of bias from other participants." +msgstr "" + +#: ../../guide/tournament-logistics.rst:124 +msgid "Generally, it is preferable that each form nominates a single conflict, and people are asked to re-submit for each conflict they are adding." +msgstr "" + +#: ../../guide/tournament-logistics.rst:126 +msgid "To save you some hassle the conflict form should make this very clear (i.e. that one conflict = one submission; ensure the field labels reinforce this)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:127 +msgid "The conflict form should also make clear that you shouldn't use the form if you don't have any conflicts (i.e. people will submit 'None', 'None' etc)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:128 +msgid "The conflicts form should also make clear that adjudicator's don't need to submit a conflict for their current institution and that team's don't need to submit conflicts for adjudicators from their current institution." +msgstr "" + +#: ../../guide/tournament-logistics.rst:130 +msgid "In poorly-structured conflict forms, identifying exactly who is doing the conflicting and who is being conflicted is a nightmare. You want to structure the questions to minimise this ambiguity. A form should definitely ask:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:132 +msgid "Who are you (the conflict-specifier)?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:133 +msgid "Are you a team or an adjudicator?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:134 +msgid "Which institution are you from?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:135 +msgid "If part of a team, which team are you in?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:136 +msgid "Who are you conflicting?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:137 +msgid "Are they a team or an adjudicator?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:138 +msgid "Which institution are they from?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:139 +msgid "If they are in a team, which team is it?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:140 +msgid "Have previously attended any other institutions; or have other reasons to conflict entire institutions? If so, specify those institutions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:142 +msgid "Note that this last question can be tricky to deal with; good tab software will let you conflict an adjudicator from an institution other than their own, but it is harder to mark an individual team as having members previously attending another institution. These circumstances are rare and typically very 'soft' conflicts but are probably best handled by creating individual conflicts between that team and adjudicators from the previous institution in question." +msgstr "" + +#: ../../guide/tournament-logistics.rst:143 +msgid "Adjudication core members will often not nominate their own conflicts; presuming that they will notice and correct them during allocations. They often forget or overlook this. Their conflicts should be entered as per normal." +msgstr "" + +#: ../../guide/tournament-logistics.rst:146 +msgid "Scheduling (convenors / venue organisers)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:148 +msgid "One of the easiest ways to have things run late is to set an unrealistic schedule. As much as possible the timing allocated to rounds (inclusive of events such as lunch or committee forums) should conform to an even distribution of how long it takes to process results and create a draw/allocation — you don't want to be in a position where particular rounds have too much time and others too little time to spend on allocations and other crucial tasks. This is something that should definitely be working on in conjunction with convenors and other critical parties before they lock down timing details with food suppliers or the operators of the debating venues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:150 +msgid "Note also that in most circumstances it is preferable to create a draw and allocation for the first day of the next round at the night before. This time should be built in to the schedule of the previous day, and raised with the adjudication core so they don't expect to be able to immediately depart after the day's rounds are done." +msgstr "" + +#: ../../guide/tournament-logistics.rst:152 +msgid "Below is the time taken within each round at Australs 2017. For context, this was neither a particular efficiently or inefficiently tabbed tournament. Notable details:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:156 +msgid "The tournament was ~40 rooms each round and had access to 3-6 runners and data enterers. Paper ballots were pre-printed and distributed by runners to rooms prior to the debates starting, then collected sometime after the 15 minute deliberation period. Feedback was submitted online. At Australs all adjudicators (excluding trainees) submit their own ballots." +msgstr "" + +#: ../../guide/tournament-logistics.rst:157 +msgid "The adjudication core were neither particular slow nor fast in allocating adjudicators compared to other adjudication cores. At Australs most adjudication cores will create allocations by using first running an automatic allocation then extensively tweak the results." +msgstr "" + +#: ../../guide/tournament-logistics.rst:158 +msgid "There were no serious issues that delayed the tabbing of any particular round beyond the routine and expected issues of last-minute draw changes, adjudicators producing incomprehensible ballots, etc." +msgstr "" + +#: ../../guide/tournament-logistics.rst:159 +msgid "Whilst the tab ran relatively quickly, there were minor delays because of mismatches between the planned schedule and the optimal schedule from a tab perspective." +msgstr "" + +#: ../../guide/tournament-logistics.rst:160 +msgid "A round at Australs takes around 2 hours from a debater's perspective: 30m of prep, ~60m for a debate, ~15m for deliberation, and ~15m for the oral adjudication and feedback." +msgstr "" + +#: ../../guide/tournament-logistics.rst:161 +msgid "We didn't note the timing of data-entry in Round 8 as there was no time pressure. After data entry was finished, finalising and double-checking the breaks took through to ~7-8pm." +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "Day" +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "One" +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "Two" +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "Three" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "Round" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "1" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "2" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "3" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "4" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "5" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "6" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "7" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "8" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "Draw generated" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +#: ../../guide/tournament-logistics.rst:169 +msgid "*Night prior**" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "12:43" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "16:12" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "19:17*" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "12:05" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "15:46" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "19:10*" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "12:07" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "Allocation finished" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "13:17 ``+34m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "16:36 ``+24m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "20:28* ``+71m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "12:58 ``+53m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "16:24 ``+38m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "21:30* ``+140m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "13:25 ``+78m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "Motions released" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "09:28" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "13:50 ``+33m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "16:47 ``+11m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "09:22" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "13:14 ``+16m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "16:40 ``+16m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "9:30" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "14:18 ``+53m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "First ballot received" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "11:51 ``+143m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "15:46 ``+116m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "18:52 ``+125m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "11:18 ``+116m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "15:13 ``+119m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "18:40 ``+120m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "11:35 ``+125m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +#: ../../guide/tournament-logistics.rst:172 +msgid "?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "Last ballot confirmed" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "12:38 ``+47m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "16:07 ``+21m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "19:15 ``+23m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "12:05 ``+47m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "15:44 ``+31m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "19:09 ``+29m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "12:06 ``+31m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:176 +msgid "Tab Setup" +msgstr "" + +#: ../../guide/tournament-logistics.rst:178 +msgid "Setting up a tab site is the most technically challenging (or at least annoying) part of tabbing. It is where you need to reconcile large amounts of data and configure a variety of settings to ensure everything will run without issues during rounds. While this is often done a day or two before the tournament, ideally you should look to do as much as possible in the week or two beforehand where there is much less time pressure." +msgstr "" + +#: ../../guide/tournament-logistics.rst:181 +msgid "Importing data: workflow" +msgstr "" + +#: ../../guide/tournament-logistics.rst:185 +msgid "First check with registration people if their data is complete, and if not who is missing. If it's only a few people it's viable (for tab purposes) to use place-holders for them, as long as you remember to follow up and edit their data manually later." +msgstr "" + +#: ../../guide/tournament-logistics.rst:186 +msgid "Familiarise yourself with the different methods for importing data into your tabbing program. Typically, these include options for bulk-importing spreadsheets, for adding information piece-by-piece through a graphical interface, or a hybrid systems. Depending on your tabbing software it may be easiest to first setup your tournament on a local copy of the tab (where it will be faster to rectify mistakes) and transfer the data to the live site when everything is mostly complete." +msgstr "" + +#: ../../guide/tournament-logistics.rst:188 +msgid "If you are using Tabbycat our spreadsheet importer is definitely easiest to use on a local copy; however using the visual importer is perfectly viable for larger tournaments if you are not comfortable with the command line. When using the spreadsheet importer note that it will likely take several iterations to get the data to import cleanly as there will typically be small mismatches in speaker/institution names and the like." +msgstr "" + +#: ../../guide/tournament-logistics.rst:190 +msgid "If the tournament (or the host society) has their own domain name and your tab software is self-hosted consider whether you want to setup the tab site on their domain so that the URL is nicer and/or easier to type." +msgstr "" + +#: ../../guide/tournament-logistics.rst:192 +msgid "If you are using Tabbycat, and deploying to Heroku, be sure to read our documentation about the size of Postgres database your tournament will require. Setting up the correct size of database from the start is the best way to go, as transferring information at a later stage is a hassle and could delay the tab at inopportune times." +msgstr "" + +#: ../../guide/tournament-logistics.rst:195 +msgid "Importing data: regions/societies" +msgstr "" + +#: ../../guide/tournament-logistics.rst:199 +msgid "Societies will often have special names that they like to use in draws (that are not the same as their institution's name or acronym). These can be gathered from institutional reps or from prior tabs. When in doubt err on the colloquial / most recognisable name; particularly for formats where teams need to find each other prior to the debate." +msgstr "" + +#: ../../guide/tournament-logistics.rst:200 +msgid "If your tabbing software has methods for assigning region information to teams and adjudicators (for diversity purposes) determine with the adjudication core the types of regions that will be used." +msgstr "" + +#: ../../guide/tournament-logistics.rst:203 +msgid "Importing data: participants" +msgstr "" + +#: ../../guide/tournament-logistics.rst:207 +msgid "Check you have emails/phone numbers included in your data that will be imported (presuming your tabbing software supports this) there are useful to have on hand later for either emailing out information or quickly following up errant adjudicators." +msgstr "" + +#: ../../guide/tournament-logistics.rst:208 +msgid "Often, the easiest way to prepare registration data for tab imports is to create new tabs in the registration spreadsheet, and use referencing to automatically order and arrange their data into the format your tab software wants. If the registration data changes significantly this will also make it easier to re-import things." +msgstr "" + +#: ../../guide/tournament-logistics.rst:209 +msgid "Often some adjudicators, typically local independents, may not be available for all rounds. Try and find out who this affects and when; once data has been imported you can :ref:`pre-check these adjudicators in and out of rounds ` (if your tab software supports this; otherwise note it for later)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:210 +msgid "Remember that the swing team(s) probably also need to be imported into the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:213 +msgid "Data import: rooms" +msgstr "" + +#: ../../guide/tournament-logistics.rst:217 +msgid "Ideally you want not just a list of rooms, but also of their types and categories — i.e. what building a room is in and/or it will be coded so that participants can find it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:218 +msgid "You want to know if access to some rooms is conditional; i.e. if some rooms are only available for some rounds. Again, if your tab software supports it you can :ref:`record this availability information into the system ` (once data is imported) otherwise you can note it for later." +msgstr "" + +#: ../../guide/tournament-logistics.rst:219 +msgid "Registration should have collected information about accessibility requirements; they should be imported into your tab software (if it :ref:`supports automatically matching accessibility requirements `) or note for later. In general you will also want to use a similar process to ensure that members of the adjudication core are assigned rooms that are close to the tab room." +msgstr "" + +#: ../../guide/tournament-logistics.rst:220 +msgid "You also want some idea of priority; that is to say if some rooms are inconvenient (and you have more rooms than you need) they should be marked as a low priority so they will be allocated only if needed. Again, this might be automatically done by your tab software or something you will need to note and manually change after each draw is made." +msgstr "" + +#: ../../guide/tournament-logistics.rst:223 +msgid "Data import: adjudicator test/CV scores" +msgstr "" + +#: ../../guide/tournament-logistics.rst:225 +msgid "Ideally the adjudication core should do this themselves as they are marking the test or scoring CVs. If they won't, or you don't trust them with full tab access, be prepared to do so yourself." +msgstr "" + +#: ../../guide/tournament-logistics.rst:228 +msgid "Data import: tab access" +msgstr "" + +#: ../../guide/tournament-logistics.rst:230 +msgid "Set up user accounts for the adjudication core with dummy passwords (they can change them later)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:231 +msgid "Set up user accounts for runners/assistants with dummy passwords (they can change them later)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:233 +msgid "If using Tabbycat and using online ballots or feedback with the private URLs method, participants should be emailed out their private URLs before they start travelling to arrive at the tournament (i.e. when they have a reasonable chance of checking their email). This can be done using the inbuilt pages on Tabbycat, or by importing participants data into a service such as Mailchimp." +msgstr "" + +#: ../../guide/tournament-logistics.rst:236 +msgid "Pre-Rounds Setup" +msgstr "" + +#: ../../guide/tournament-logistics.rst:239 +msgid "Setting up the tab room" +msgstr "" + +#: ../../guide/tournament-logistics.rst:241 +msgid "This is typically the first order of business, as all future pre-round setup tasks (i.e. training the adjudication core, testing printing, etc.) are better for being done in the same space that will be used throughout the rounds. Once you're in the space there are a couple of small checks to run through before the larger question of how to arrange and use the space should be tackled:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:245 +msgid "Check with convenors whether things can be left in the tab room overnight. If they can't you'll need to make plans for how to move any big items (printers; ballot stacks) to and from the tab room each day." +msgstr "" + +#: ../../guide/tournament-logistics.rst:246 +msgid "Check that the internet access in the tab room is reliable." +msgstr "" + +#: ../../guide/tournament-logistics.rst:247 +msgid "Check that the projector system works, both with whatever wired-in computer is in the room and when connected to your laptop." +msgstr "" + +#: ../../guide/tournament-logistics.rst:248 +msgid "Check what items either yourself, or the organisers, have at hand and check if anything needs to be acquired before the next day. Critical items for tab rooms are typically:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:252 +msgid "An extension cord with multi box; ideally a pair of each." +msgstr "" + +#: ../../guide/tournament-logistics.rst:253 +msgid "Whiteboard markers (assuming there is a whiteboard) otherwise permanent markers and large sheets of paper (i.e. A2) can suffice." +msgstr "" + +#: ../../guide/tournament-logistics.rst:254 +msgid "Boxes. Lots of boxes. Loose ballots are a source of confusion and error, so you want some way of temporarily storing ballots as they proceed through the entering and checking process. You probably want at least three large boxes (for ballots to-enter, ballots to-check, and finished ballots) but more will be useful." +msgstr "" + +#: ../../guide/tournament-logistics.rst:255 +msgid "Spare printing ink/toner, and paper for the printer. Ideally your paper would be multi-coloured, with each colour being used for a different round. Pastel colours are ideal, and you ideally want at least three different colours so that you don't have to repeat a colour within the same day. Be sure to calculate how many sheets you will need per round and ensure you have a generous number of spares." +msgstr "" + +#: ../../guide/tournament-logistics.rst:256 +msgid "If tabbing a format that can produce multiple ballots per-debate, staplers are essential to keep those ballots organised. Buy at least two sturdy ones." +msgstr "" + +#: ../../guide/tournament-logistics.rst:258 +msgid "Non-essential, but often useful to have items:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:262 +msgid "Whatever dongles/adapters you need to connect your laptop to the projectors, both in the tab room and in the briefing room." +msgstr "" + +#: ../../guide/tournament-logistics.rst:263 +msgid "An Ethernet cable (or two) as a backup option if WiFi drops or is overloaded." +msgstr "" + +#: ../../guide/tournament-logistics.rst:264 +msgid "Post-it notes are a great way to temporarily mark ballots with information; typically used to indicate ballots that need correcting." +msgstr "" + +#: ../../guide/tournament-logistics.rst:265 +msgid "You'll often need to make impromptu signs; sticky tape and/or blu-tack are good here" +msgstr "" + +#: ../../guide/tournament-logistics.rst:266 +msgid "Spare pens for the people doing data entry to use" +msgstr "" + +#: ../../guide/tournament-logistics.rst:267 +msgid "Trash bags for collecting rubbish as it accumulates" +msgstr "" + +#: ../../guide/tournament-logistics.rst:268 +msgid "A Chrome Cast can occasionally be very useful if a projector or screen doesn't have accessible input cables or so that you can use a projector without having your laptop tethered to a particular podium and desk." +msgstr "" + +#: ../../guide/tournament-logistics.rst:270 +msgid "If you haven't already it's a good idea to check your printing setup by printing off a bunch of generic ballots and feedback forms to have on hand if the need arises (i.e. a ballot is missing and needs to go out ASAP; or if someone can't do feedback online and needs to do so on paper). At worst, the blank ballots you print can be used for the out-rounds. While printing these off, time how long it takes the printer to print say 25 ballots and extrapolate from that to figure out how long it will take to print the entire round's worth of ballots. Note that if printing off a round's ballots is relatively quick it can be useful to delay it in order to better accommodate any last-minute changes to the draw that happen post-announcement. It's also worth thinking about how you (or at least who will) group up the printed ballots in order to distribute them to runners." +msgstr "" + +#: ../../guide/tournament-logistics.rst:272 +msgid "At this point you should also setup whatever process you need for managing runners and the ballot collection process. At a minimum, this should probably be a spreadsheet or a list on a whiteboard outlining the different groups of rooms with spaces to mark in which runners are delivering/collecting ballots for each location. Who is running where might change from day to day and should be kept updated. It should also have some method for contacting each runner (i.e. a cell phone number)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:274 +msgid "The question of how to arrange the actual room is one with many answers, and is obviously shaped by the peculiarities of the space itself. However there needs to be some system behind it so that people know exactly where to go and what to do when there is time pressure." +msgstr "" + +#: ../../guide/tournament-logistics.rst:276 +msgid "The key consideration behind this system is typically the 'flow' of ballots: what happens after they are brought back from runners, but before they are completely entered into the system. Think through how you want this process to operate and how the space can be arranged to make each step as smooth as possible. Considerations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:280 +msgid "When runners initially return a big stack of ballots, what happens? They could be transferred directly to the data-enterers to start on, but it is often useful to have preliminary checks here in order to keep the job of the data-enterers as simple as possible. These checks could include:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:284 +msgid "For formats with multiple ballots per-debate, you typically want to identify and staple together all the ballots from a given panel." +msgstr "" + +#: ../../guide/tournament-logistics.rst:285 +msgid "For tournaments where ballots are liable to go missing (or for when you have plenty of data-enterers and want peace of mind) it is worth using the :ref:`ballot 'check-in' system of your tab software ` (if it has one) to mark off ballots as physically present in the tab room. This allows you to quickly identify which ballots are missing and begin tracking them down earlier than you would do otherwise if just waiting for the 'to enter' pile to be exhausted." +msgstr "" + +#: ../../guide/tournament-logistics.rst:286 +msgid "Depending on your preferences and resources, ballots could at this stage be checked for errors. This could include a basic sweep for missing information (i.e. totals) or a comprehensive sweep that includes checking math errors, ambiguous handwriting, low-point wins, etc.). While this will delay the time between ballots arriving and being entered, it will mean that you can start correcting ballots sooner, and lessens the burden on (potentially inexperienced) data-enterers to check and catch these. If you have many runners, and they are familiar with how debating scoring works, this is recommended." +msgstr "" + +#: ../../guide/tournament-logistics.rst:288 +msgid "Once this preliminary step has occurred the next task is actually entering the ballots. The number of steps here is dependent on your tab software and tab settings; you might have had the 'draft' ballot be submitted online by chairs or you might have the whole two-step process of a 'draft' ballot entry and the 'confirmed' ballot entry taking place within the tab room. Considerations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:292 +msgid "Regardless of whether you are working with a one-step or a two-step process, you want to arrange the tables where data-enterers are sitting such that their need to move is minimised. That might mean either have a central inbox of ballots to enter in the centre of the tables (such that everyone can reach it) or having multiple 'clusters' of enterers around boxes." +msgstr "" + +#: ../../guide/tournament-logistics.rst:293 +msgid "If work with a two-step process you want those two steps to be an active part of the spatial arrangement. That is to say, typically there will be a grouping of enterers who are working on the initial ballot entry (clustered around a box or boxes) and then a separate 'downstream' grouping of enterers that work on confirming/validating those entries. Depending on the size of tournament and quantity of runners, you either want it so that individuals from the first group can easily pass their ballots to the box of the second group; i.e. by reaching across the table or walking a short distance. At huge tournaments, you might want a dedicated person to transfer ballots between boxes to prevent enterers having to get up." +msgstr "" + +#: ../../guide/tournament-logistics.rst:294 +msgid "In a two-step process people may need to transfer roles, as generally you want to prioritise entry and then validation. Often this isn't necessarily much more efficient, but if 'rebalancing' the roles make sure that the spaces assigned to each role can accommodate extra people, and that people physically move to occupy each role." +msgstr "" + +#: ../../guide/tournament-logistics.rst:295 +msgid "In general, you want to minimise the number of ballots that each enterer feels the need to 'hoard' to work through to keep the work evenly distributed. If people are taking a large number of ballots to process, at the final stages of entering some people will have a bunch to work through while others will be finished. Making it easy to collect and pass on ballots in the space itself helps cut down on this while keeping entry efficient." +msgstr "" + +#: ../../guide/tournament-logistics.rst:296 +msgid "While the exact spatial arrangement depends on your numbers and what furniture is available, a long rectangle is a good starting point as the ballot process is in general linear (check, enter, validate, finish). Typically, this might look like a series of tables in a row with enterers sitting on either side and with the various ballot boxes in the middle." +msgstr "" + +#: ../../guide/tournament-logistics.rst:297 +msgid "When ballots have finished being enter/validated there definitely should be some sort of final 'done' box. Take care how ballots are put here, a common source of error is people putting ballots there before they are fully finished." +msgstr "" + +#: ../../guide/tournament-logistics.rst:298 +msgid "When ballots need to be corrected you generally want to 'extract' them from this process and hand them off to a tab-director or assistant to chase up and collect. There should be a forethought process for managing this; and ideally a dedicated space for it to prevent ballots being lost and to make it easy to identify ongoing issues. This might look like a process of sticking a post-it note (outlining the error) to the ballot, and then pulling it from entry/validation and placing it on a desk. Ideally you also want one of the tab directors always *not* doing data entry so that they are immediately available to manage this process." +msgstr "" + +#: ../../guide/tournament-logistics.rst:301 +msgid "Training volunteers" +msgstr "" + +#: ../../guide/tournament-logistics.rst:303 +msgid "If at all feasible you want to train that volunteers acting as runners and/or data enterers the day *before* the tournament starts otherwise the first round will be rough. It's generally a good idea for this training session to generally mirror the process of running a round. It's also generally a good idea that — even if you have enough people for dedicated runner and data-enterer roles — to train all volunteers so that they are familiar with each role and can fill in if needed. This has a couple of stages:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:307 +msgid "Introductions and details" +msgstr "" + +#: ../../guide/tournament-logistics.rst:311 +msgid "Volunteering is typically thankless and often stressful. It's also quite a dull and mechanical process: deliver paper; collect paper; enter numbers; check numbers. Given the rather unglamorous nature of their role you want your volunteers to feel welcome and a crucial part of a wider team. When meeting everyone for the first time try and run the introductions in a non-perfunctory manner and get to know people's background/interests and outline how valuable they are to the tournament." +msgstr "" + +#: ../../guide/tournament-logistics.rst:312 +msgid "As part of this process you should, note their cell phone numbers or whatever means you will use to coordinate communication between the team." +msgstr "" + +#: ../../guide/tournament-logistics.rst:313 +msgid "Figure out what will be happening during downtime and how you can make it more enjoyable. Would volunteers like to watch debates, work in the tab room, etc. Is there anything they would like during those down times (music, snacks, coffee, etc.)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:315 +msgid "Rooms and Running" +msgstr "" + +#: ../../guide/tournament-logistics.rst:319 +msgid "If runners are unfamiliar with debating in general, outline the basics of what draws are, what ballots are actually for, and what this process looks like from a debater's perspective." +msgstr "" + +#: ../../guide/tournament-logistics.rst:320 +msgid "Outline how/when the printing process occurs and who will sort/assign the ballots. Now is a good time to assign different runners to the different groups/rooms that they will be working with." +msgstr "" + +#: ../../guide/tournament-logistics.rst:321 +msgid "It is critical that, as a group, you actually go to everyone one of the venue groups and identify all of the venue rooms that are listed so that everyone knows exactly where to go. This may take some time. But it is a good chance to both check those rooms actually exist and pre-identify any problems that might occur with runners and debaters finding them." +msgstr "" + +#: ../../guide/tournament-logistics.rst:322 +msgid "Outline in general what happens during ballot collecting: when to do it, how to approach chairs, what do to if they are slow or delaying. You should raise the chance of chairs being belligerent and outline how they (and you) should deal with this." +msgstr "" + +#: ../../guide/tournament-logistics.rst:323 +msgid "If you are having runners pre-check ballots it's a good idea to fill out a few 'bad' ballots to demonstrate the kinds of checking required. If you are using any communication systems (i.e. having runners mark of buildings as 'done' in an online system) go through that now also." +msgstr "" + +#: ../../guide/tournament-logistics.rst:325 +msgid "Data entry and checking" +msgstr "" + +#: ../../guide/tournament-logistics.rst:329 +msgid "Before starting, setup logins for everyone and show them how to login. Also get an idea of what devices they will be using, or can bring, for data entry purposes. Check/ensure that they will have internet access on those devices." +msgstr "" + +#: ../../guide/tournament-logistics.rst:330 +msgid "Run through this in the actual tab room; illustrating examples with actual ballots and going through the roles in the actual spots which they will occur." +msgstr "" + +#: ../../guide/tournament-logistics.rst:331 +msgid "Run through how the seating/table/box arrangement works and the types of roles at different positions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:332 +msgid "Emphasise that in general, any ambiguities should be raised with the tab directors/assistants; i.e. that you should never guess about ballots but instead always delegate resolving issues to someone else." +msgstr "" + +#: ../../guide/tournament-logistics.rst:333 +msgid "Run through the different edge cases and things to check during entry. For example Iron Person speeches, mismatched totals, entering the wrong ballot for the wrong panellist, etc (see section below). Be sure to also go through what happens when the validation step fails; i.e. when a ballot needs to be re-entered." +msgstr "" + +#: ../../guide/tournament-logistics.rst:336 +msgid "Training the adjudication core" +msgstr "" + +#: ../../guide/tournament-logistics.rst:338 +msgid "Typically making the first-round's draw and allocation is the best time to really run through how your tab software and processes work in a 'real' environment as well as the expectations surrounding their and your role. Generous amounts of time should be budgeted for this; it's not uncommon for it to take up most of an evening. It's also worth having an older tab, or a tab full of fake data handy in order to show them how, say, the feedback or allocation interfaces look like when full of data." +msgstr "" + +#: ../../guide/tournament-logistics.rst:340 +msgid "To kick off you should probably setup tab logins for the adjudication core as necessary, outline what kinds of access they have, and (particularly if they haven't used your tab software before) outline broadly what pages they should and shouldn't access. In particular, show them how to find and parse feedback as that is often the interface where they will be spending most of their time individually. As part of this tour outline (if you haven't already) how feedback will work, as well as the means by which the adjudication core can use the tab software to keep track of feedback as it comes in. Ideally some sort of general strategy should be formed for this, so that particular people sit out rounds, or are delegated the task of catching up on feedback at other points." +msgstr "" + +#: ../../guide/tournament-logistics.rst:342 +msgid "Depending on how many runners you have it may be necessary, or beneficial, if the adjudication core helps out with data entry. However, if you go down this route the adjudication core need to be highly trained; they are often much more likely than volunteers (who are less self-confident and have more experience) to make errors. Whether you do or don't do this, ensure that adjudication core members know to come to the tab room ASAP after they have finished adjudications rather than swanning around socialising or going to lunch. Draws will often be held up just by the fact that not enough adjudication core members are present to start or finish an allocation." +msgstr "" + +#: ../../guide/tournament-logistics.rst:344 +msgid "The first-round allocation is the last thing you want to cover. It is typically your only change to slowly and comprehensively walk the adjudication core through the allocation interface and the allocation system." +msgstr "" + +#: ../../guide/tournament-logistics.rst:346 +msgid "Allocation interfaces, while often complex, should be stepped through so that the adjudication core knows precisely how to operate it themselves (if needed). They should know what it can (and can't do) and how the different features can be used and activated. For example, diversity highlights might be an optional toggle (in which case you explain how to active it, when to do so, and what it represents) or there might be parts of the interface that detail information such as a room's liveness, energy, or bracket which should be highlighted and explained (i.e. how 'liveness' is determined)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:348 +msgid "Secondly, and most importantly, is outlining how the automated process of adjudicator allocation operates, and how this can be made to match the adjudication core's preferences. Typically, you want to rely on automatic adjudicator allocations as much as possible in order to decrease the time taken to do an allocation; however every adjudication core has a different philosophy on what their perfect allocation looks like, and it is your job to try and align that ideal with what the automated system produces as much as is possible. The precursor to this is yourself knowing how your tab system allocation works: what is the relationship between a debate's bracket (or assigned priority/energy) and the numeric ranking of the automatically generated panel? Does the software optimise panel strength for a voting majority, or across all panellists? When does the software allocate solo chairs over panels? How does it avoid conflicts? Does it have (and enforce) particular expectations for a given adjudicator's score; or does it rely on a more relative comparison? The answers to the questions will often be dramatically different between different programs and you should know them in advance." +msgstr "" + +#: ../../guide/tournament-logistics.rst:350 +msgid "Most tab software will have at least some options for you to configure those automated processes — either by changing the automatic allocation's parameters directly or by controlling the ranking and feedback systems that feed into it. The first round is the prime opportunity to configure these options so that they align as close as possible with what the priorities of the adjudication core. If your feedback ranking system is mismatched with how you expect the automatic allocation to place adjudicators, or if the distribution of adjudicators across the draw is not what you expect, the adjudication core will end up wasting significant amounts of time adjusting allocations. Even if things work well using the default settings, ensure you experiment and demonstrate the consequences of changing the settings just to show that it can be done, what the general effects are, and to see if there are even-better configurations." +msgstr "" + +#: ../../guide/tournament-logistics.rst:352 +msgid "This process of tweaking the automatic allocation settings is one you should also revisit as the rounds progress." +msgstr "" + +#: ../../guide/tournament-logistics.rst:354 +msgid "How to approach diversity (typically in terms of region and gender) across an allocation in particular is something that some members of an adjudication core will not have had to consider in the context of a large tournament with time pressure or in terms of having to make explicit trade-offs. Again, you should make it clear how the software can accommodate this, and get the adjudication core to plan for how (in general) they want to approach this. Often it will form the final phase of the allocation process, and so can easily be forgotten or skipped over; or people will have different philosophies of how to approach this which are only raised at critical points." +msgstr "" + +#: ../../guide/tournament-logistics.rst:356 +msgid "Outline that there will usually be a trade-off between the quality of each allocations and the speed at which the tournament runs. When time is not a factor, many adjudication cores will often take an hour or more in order to create a perfect allocation; but they should know though that aiming for perfect during many rounds will break the schedule. You should try and get them to set some sort of time goal for allocations, and (during the rounds) ensure that they are aware of when they are going too fast or too slow. Depending on your personal preferences and the norms surrounding tab direction in your circuit you may want to actual enforce these time limits." +msgstr "" + +#: ../../guide/tournament-logistics.rst:358 +msgid "Finally, outline how you will all communicate. Again, there should be a single medium for this so that everyone knows what is going on; and this is ideally something that has been planned out beforehand with them and the organising committee. But at this point the tab team may have expanded, or there may be better options than what was being used previously. It's also worth outlining which parts of the tab team will generally be doing what roles and where — i.e. who will be rolling the draw, who will be chasing up people, etc." +msgstr "" + +#: ../../guide/tournament-logistics.rst:361 +msgid "Preparing a briefing" +msgstr "" + +#: ../../guide/tournament-logistics.rst:365 +msgid "At large tournaments there should be some form of briefing covering ballots and feedback process, even if it is just quick one. Usually you will want to be the person to design and deliver this; other people less-familiar with the system may miss details." +msgstr "" + +#: ../../guide/tournament-logistics.rst:366 +msgid "Liaise with convenors and the other people doing briefings to ensure (a) they know you're doing one; and (b) you are not overlapping in terms of content." +msgstr "" + +#: ../../guide/tournament-logistics.rst:367 +msgid "See the last section of this document for notes on what can be useful to include here" +msgstr "" + +#: ../../guide/tournament-logistics.rst:370 +msgid "Final checks" +msgstr "" + +#: ../../guide/tournament-logistics.rst:374 +msgid "Check if the convenors have made a map that clearly outlines where the rooms are. Ensure it's clear and post it to either the tab site (ideally) or somewhere like Facebook." +msgstr "" + +#: ../../guide/tournament-logistics.rst:375 +msgid "Check that convenors have some sort of way-finding system in place, i.e. chalked directions or colour-coded signs. Check these colour codes match the names of your venues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:376 +msgid "Check that the draw types are correct for each round in the tab system." +msgstr "" + +#: ../../guide/tournament-logistics.rst:377 +msgid "Check with adjudication core if/when there are secret rounds and that these are correct in the edit data base area." +msgstr "" + +#: ../../guide/tournament-logistics.rst:378 +msgid "Check how the draw will be displayed and managed. Is the projector good; how big does the text size need to be? How fast is the scroll?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:379 +msgid "If you will pre-print ballots check that you've set the \"return ballots to\" configuration setting; even if it just says \"to runners\"." +msgstr "" + +#: ../../guide/tournament-logistics.rst:382 +msgid "Managing Rounds" +msgstr "" + +#: ../../guide/tournament-logistics.rst:384 +msgid "Once everything has been setup and everyone knows what they should do, the actual process of running each round should go smoothly. It probably won't though. The earlier sections should have laid out what the ideal process for managing data entry and allocations, so this section will instead focus on what can go wrong and what to keep an eye out for." +msgstr "" + +#: ../../guide/tournament-logistics.rst:387 +msgid "Disaster scenarios" +msgstr "" + +#: ../../guide/tournament-logistics.rst:389 +msgid "There are two broad classes of disaster scenario here. The first, and more rare case is when either internet access at the venue goes out or if a web service that your tab software depends on has an outage (for example, both Tabbie 2 and Heroku-deployed Tabbycat instances depend on Amazon Web Services). The first can at least be solved temporarily if tethering is available, but if that is not possible (or the latter case occurs) you may need to switch to using an offline copy of that tab by restoring from a backup if the outage is non-transient." +msgstr "" + +#: ../../guide/tournament-logistics.rst:391 +msgid "Obviously, for this to work, you should be taking regular backups using whatever mechanism your tab software allows. Key times to do so are critical events such as finishing entering a round's data or finalising an adjudication allocation as these are especially difficult to recreate. Importantly, these backups are only useful to you if you have a downloaded copy of them; ideally download to a Dropbox or some other cloud service that will spread them across multiple computers and an online service." +msgstr "" + +#: ../../guide/tournament-logistics.rst:393 +msgid "Having an outage of internet access or a key web service go down to the point of having to switch to an offline tab is an exceedingly rare event, but one worth planning for at large tournaments. That is to say you should have ideally have an offline copy of your tabbing software setup on your local machine, and know how to restore a backup to it if necessary." +msgstr "" + +#: ../../guide/tournament-logistics.rst:395 +msgid "Backups are also useful as guards against a much more common source of error: data loss caused by user error. It is not unheard of for even experienced tab directors (or inexperienced adjudication core members) to accidentally delete an entire allocation, delete a round, or some other form of destructive action that would require a lot of work to redo. Taking backups at key points, and knowing how to restore them (to the online copy of the tab) is a useful — and occasionally essential — skill." +msgstr "" + +#: ../../guide/tournament-logistics.rst:397 +msgid "The much more common source of a major tab disruption is a major user-error or a bug within your tab software itself. Fixing these will be highly-context dependent and the best way you can prepare for them is to know your tab software well enough to understand what might have caused it or be able to contact someone else who does. That said, having backups on hand can also allow you to restore your database to before the bug or user-error occurred and try to proceed without re-triggering it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:400 +msgid "Expected problems" +msgstr "" + +#: ../../guide/tournament-logistics.rst:402 +msgid "Incorrect ballots are an inevitable tragedy. Many more optimistic tab directors will imagine that these can be prevented through sufficiently detailed briefings, recurring public shamings, or fool-proof ballot designs. While these might help in cutting down the number of errors, eliminating them entirely seems to be an unachievable goal. Note that this is particularly true at international tournaments and/or at tournaments that draw participants from circuits which have more than one predominant format." +msgstr "" + +#: ../../guide/tournament-logistics.rst:404 +msgid "While debaters as a whole display astonishing levels of innovation in discovering new ways to incorrectly fill in a ballot, there are a couple of broad cases that you should look out for an prepare people to deal with:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:408 +msgid "Not adding up score correctly. Pretty much everyone who does this will note that this is the first time that it has ever happened to them." +msgstr "" + +#: ../../guide/tournament-logistics.rst:409 +msgid "Omitting some information. Most common are not filling in total scores, the nominating winner, or the margin. Having omitted an entire team's scores or speaker names is not uncommon." +msgstr "" + +#: ../../guide/tournament-logistics.rst:410 +msgid "Scores that are outside the range." +msgstr "" + +#: ../../guide/tournament-logistics.rst:411 +msgid "Low-point wins, or tied-point wins. Typically occurs in conjunction with (1)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:412 +msgid "Poor handwriting rendering numbers illegible. While one could 'guess' whether a number is in fact a 6 or a 5 based on a team's total score, doing so is dangerous as it assumes that the person hasn't also done (1)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:413 +msgid "'Correcting' information in an ambiguous way. For example, using arrows to swap a speaker's order (which is typically circular/ambiguous) or drawing numbers over other numbers in a way that makes it unclear which is the original and which is the replacement." +msgstr "" + +#: ../../guide/tournament-logistics.rst:414 +msgid "Ballots just going entirely missing because either a runner missed the room, the chair forgot to return it, or the chair just left it in the room." +msgstr "" + +#: ../../guide/tournament-logistics.rst:416 +msgid "Ballots aside, there are a number of other common occurrences that will necessitate changes to the drawn and allocations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:420 +msgid "Teams will not turn up to debates, or turn up to debates extremely late. In both cases they will often not notifying anyone. Aside from needing to swap in a swing team in their place in the draw, it's worth keeping in mind that the necessity of a swing team might not be known until right when debates are about to start (which can lead to issues if you assume trainees or runners will be filling up the 'spare' swing team)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:421 +msgid "Adjudicators will also go missing. As with teams this can usually be caught during roll call; but might also not be known up until debates start. If the adjudication core is available they can make adjustments, but often you will need to make a call as to whether to form an even-sized panel or to redistribute adjudicators from elsewhere." +msgstr "" + +#: ../../guide/tournament-logistics.rst:422 +msgid "When a draw is released there will often be conflicts that were unknown to the tab system, and will necessitate making changes to the draw post-release. It's important that when making these changes you keep a clear record of what needs to change (if there are multiple swaps needed it can get tricky to keep track of) and ensure that all parties involved know about where they are being swapped to." +msgstr "" + +#: ../../guide/tournament-logistics.rst:425 +msgid "Ongoing checks" +msgstr "" + +#: ../../guide/tournament-logistics.rst:427 +msgid "You will have a decent amount of downtime during rounds when debates are happening. A couple of things its worth keeping an eye on during that time:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:431 +msgid "Ensuring your backups have been taken and downloaded." +msgstr "" + +#: ../../guide/tournament-logistics.rst:432 +msgid "Ensuring the tab room isn't devolving into mess." +msgstr "" + +#: ../../guide/tournament-logistics.rst:433 +msgid "If you can be bothered (and if no adjudication core member is doing so) reviewing feedback for critical issues (i.e. comments highlighting severe issues, or chairs getting very low scores) is a good way to be useful. If using paper-based feedback this can look like physically separating out these feedback forms for the attention of the adjudication core; while if using online feedback systems you may want to keep a collection of browser tabs to show." +msgstr "" + +#: ../../guide/tournament-logistics.rst:434 +msgid "Chasing up the language committee (if one exists for this tournament) to confirm which teams are in which category and what their break preferences are (if multiple breaks are not allowed). You want to have this information confirmed as soon as possible as it becomes of critical value to allocations once the draw starts segmenting into live/dead rooms." +msgstr "" + +#: ../../guide/tournament-logistics.rst:435 +msgid "Reviewing how efficiently things are running and whether there are any bottlenecks that can be better addressed in the next round. It's generally a good idea to (on a whiteboard or a spreadsheet) keep track of how long each stage of a round is taking (running, data-entry, allocation) and what (if anything) is causing delays." +msgstr "" + +#: ../../guide/tournament-logistics.rst:437 +msgid "If hosting Tabbycat on Heroku keep an eye on the metrics section of the dashboard area, noting if there are 'timeout errors' and what the average response times are. Adding more dynos should help with both." +msgstr "" + +#: ../../guide/tournament-logistics.rst:440 +msgid "Breaks and Break Rounds" +msgstr "" + +#: ../../guide/tournament-logistics.rst:443 +msgid "Generating the adjudicator's break" +msgstr "" + +#: ../../guide/tournament-logistics.rst:445 +msgid "Determining the adjudicator break generally involves a complex set of considerations rather than strictly ranking based on feedback. As such most adjudication cores will use whiteboards or Google docs to draft and discuss the possible options. One thing to note here is that breaking adjudicators will need to be marked as such in the tab at some point (both so they can be on future draws, and for publication) so you want to be careful that the tab is the final source of authority here — it is easy for information to get out of sync between what the adjudication core is using to draft the break and the system." +msgstr "" + +#: ../../guide/tournament-logistics.rst:447 +msgid "When the adjudication core is determining the break ensure that they have an idea of the *quantity* of adjudicators needed (breaking too few or too many will cause issues) and whether there are any special considerations (such as having conflicts with large portions of the draw, or leaving at a given point) that involve a specific adjudicator being considered." +msgstr "" + +#: ../../guide/tournament-logistics.rst:450 +msgid "Generating the team break" +msgstr "" + +#: ../../guide/tournament-logistics.rst:452 +msgid "Before doing so in an automated fashion, first check in your tab software whether all teams are assigned to the right break categories. Depending on whether your software supports multiple formats you probably also want to check that each break category is using the right 'rule' specified by the tournament (i.e. a WUDC- or Australs- compliant break ranking). Also double check the break size itself is correct in the software." +msgstr "" + +#: ../../guide/tournament-logistics.rst:454 +msgid "Hopefully the automated system will generate a correct break, but this should always be checked against what you'd expect the results to be from standings. Note also that there are cases, such as when a team has to leave, or when teams are or are not double-breaking, that mean the automated break results need to be overridden (typically in Tabbycat you would add a marker or note to include their ranking, but exclude them from having a break rank)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:457 +msgid "Announcing the break" +msgstr "" + +#: ../../guide/tournament-logistics.rst:459 +msgid "Mistakes are made surprisingly often during results announcements. Again, this is often a problem with incomplete or out of sync data, where print-outs, slides, or the tab site itself might not reflect (for example) last minute changes about breaks or have potentially mixed up teams or adjudicators with similar names. Things that can help:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:463 +msgid "Have a single source for what is being read out — i.e. a printed list (recommended) or the tab site itself — but don't mix and match. If making slides (often a good idea for large/crowded venues) copy the data from the canonical source being announced." +msgstr "" + +#: ../../guide/tournament-logistics.rst:464 +msgid "Double check what is being read out against the tab site, and/or whatever draft lists were used to determine the adjudicator's break. Verify with the adjudication core that everyone who should be there is, and that nobody is missing." +msgstr "" + +#: ../../guide/tournament-logistics.rst:465 +msgid "Clarify what information should be on the print-outs and the general order in which things are read. For example, it might be easy to omit breaking adjudicator's institutions, to use ambiguous abbreviations over full institution names, or to have an inconsistent approach to how the information is read (i.e. whether it is read as *wins* then *team points* then *team name*)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:466 +msgid "Without revealing any details try and get at least some guidance on how to pronounce names that people are not familiar with pronounce." +msgstr "" + +#: ../../guide/tournament-logistics.rst:467 +msgid "Have backup copies of whatever is being read from and clarify who is reading off what portions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:468 +msgid "Try to publish the break list on the tab website (or via some other online method) shortly after it is announced in order to minimise the chance of misinformation spreading." +msgstr "" + +#: ../../guide/tournament-logistics.rst:471 +msgid "Managing the out-rounds" +msgstr "" + +#: ../../guide/tournament-logistics.rst:473 +msgid "Out-rounds are generally under less time pressure and can be managed by just one or two members of the tab team. However, they tend to be run in a more haphazard fashion, so there are a couple of things to keep on top of:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:477 +msgid "You should keep track of which adjudicators have or have not been used throughout the finals allocations. It is easy for adjudication cores to forget to allocate someone and have to either drop them or promote them beyond what they had originally intended." +msgstr "" + +#: ../../guide/tournament-logistics.rst:478 +msgid "It is very easy for ballots to get lost in break rounds as chairs have less defined roles and processes in what they do with their ballots. While having correct speaker scores correctly entered for break rounds isn't a strict necessity, it is nice to have and the alternative (using fake speaks just to record the winner) can cause confusion. Closely manage distributing ballots to the chairs and collecting them as soon as possible afterwards; especially if there is any time pressure. Generally it is not worth printing off per-debate ballots; just print a stack of generic ballots at the start of the out-rounds and distribute as needed." +msgstr "" + +#: ../../guide/tournament-logistics.rst:479 +msgid "You should know, in addition to when the break rounds are, when the results announcements are. Often these announcements are saved (for suspense or logistics reasons) until particular points of time (i.e. until the evening social; or until other out-rounds are finished). Obviously it's important not to accidentally release results; but often convenors and the adjudication core will often have different ideas about when results are meant to be released." +msgstr "" + +#: ../../guide/tournament-logistics.rst:481 +msgid "If using Tabbycat to manage out-rounds with multiple break categories, note that the round progression is no longer strictly linear. So be careful with when/if results are released online and note that often you can't rely on online interface to release draws publicly." +msgstr "" + +#: ../../guide/tournament-logistics.rst:484 +msgid "Preparing for tab release" +msgstr "" + +#: ../../guide/tournament-logistics.rst:486 +msgid "At some point, if you haven't already, have a discussion with the adjudication core about when the tab itself will be released and what data will be released. Well before the tab is due to be released you want to check that anonymisations and any speaker flags (i.e. Novice, ESL) are up to date in your tab software." +msgstr "" + +#: ../../guide/tournament-logistics.rst:489 +msgid "Managing the tab release" +msgstr "" + +#: ../../guide/tournament-logistics.rst:491 +msgid "Almost there!" +msgstr "" + +#: ../../guide/tournament-logistics.rst:493 +msgid "If hosting Tabbycat on Heroku it's worth increasing the resources available to the server for the ~12 hour period following tab release; it's by far the most concentrated burst of traffic the site will receive. Because Heroku bills by the hour, even going to a relatively expensive option, such as performance dynos with auto-scaling, will be very cheap if run just for this period. That said the site should be relatively resilient even in the face of large amounts of traffic; even running with the most basic resources allocated, at worst pages will be temporarily slow or not load." +msgstr "" + +#: ../../guide/tournament-logistics.rst:495 +msgid "To get an idea of how the site is performing in the Heroku dashboard keep an eye on the average request time number and adjust the number of dynos to try and keep it under say two seconds; ideally just one. When you first turn on the tab release settings, make sure you go through and load every page before announcing it to the public, doing so will trigger the caching mechanism that means potentially complex pages (say the speaker tab) don't need to be calculated from scratch each time someone loads the page." +msgstr "" + +#: ../../guide/tournament-logistics.rst:498 +msgid "Post-tournament" +msgstr "" + +#: ../../guide/tournament-logistics.rst:500 +msgid "Once you have sufficiently recovered, consider writing up and sharing a post-script about how things went; noting things that did or didn't go well. Next year's tab directors would certainly appreciate it, and it would be great to see this kind of knowledge spread more widely. The developers of your tab software would also appreciate hearing your feedback; particularly if there were issues that could have been prevented or ameliorated by the software itself." +msgstr "" + +#: ../../guide/tournament-logistics.rst:503 +msgid "Appendix: Briefing Notes" +msgstr "" + +#: ../../guide/tournament-logistics.rst:505 +msgid "This is a very loose, but not exhaustive, collection of things that are useful to communicate to speakers and adjudicators in a tab briefing. While briefing fatigue is real, having clear expectations about how things like ballots and feedback work are highly valuable uses of the tournament's time if they can at all help cut down the kinds of problems that delay the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:508 +msgid "How feedback works" +msgstr "" + +#: ../../guide/tournament-logistics.rst:510 +msgid "Is it online, or offline? If online did people receive links? What do they do if they have lost it?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:511 +msgid "Is feedback mandatory? What accountability mechanisms are there? Will you publish the shame list online or raise it in between rounds?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:512 +msgid "Who will be submitting feedback on who? Do trainees do so?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:513 +msgid "Remind teams that only one of their feedbacks count; they should coordinate who is doing it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:514 +msgid "What is the feedback scale? What does it correspond to? Common sources of confusion:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:516 +msgid "Feedback scales are not like Uber. You do not get five stars for being adequate and generic." +msgstr "" + +#: ../../guide/tournament-logistics.rst:517 +msgid "Feedback scales are not relative to position; it is an absolute scale. That is to say, if your trainee was good, they probably do not deserve the highest rating; they get whatever rating indicates they should be a panellist or low-chair." +msgstr "" + +#: ../../guide/tournament-logistics.rst:518 +msgid "Consider accompanying the score/scale with a statement characterising how these numbers correspond to positions - e.g. a 4.0 means 'should continue on good panels, should chair low rooms'" +msgstr "" + +#: ../../guide/tournament-logistics.rst:520 +msgid "If using online submission options, what should people without phones or internet access do?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:523 +msgid "How ballots work" +msgstr "" + +#: ../../guide/tournament-logistics.rst:525 +msgid "This part of the presentation will be condescending. It is also necessary. The two causes of delays in the draw running late, and thus the tournament running late are (1) people not filling out ballots correctly or (2) people's ballots going missing. Emphasise that this should be taken seriously; minutes spent chasing bad ballots are often minutes that delay every single person at the tournament from doing what they are actually here to do. You should highlight, ideally with illustrated examples:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:529 +msgid "Which parts of the ballot *must* be filled in; people will often overlook margins, or special fields such as motion vetoes." +msgstr "" + +#: ../../guide/tournament-logistics.rst:530 +msgid "That people must specify the full names of speakers; not nicknames or just-first names. Often names will be written poorly or have ambiguities (i.e. two speakers on a team called James) and having the full name is the only way to resolve it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:531 +msgid "That people should **not draw arrows to swap the order of speakers** as these are impossible to decipher. Here, and in other areas, always *cross-out* information clearly and write it again rather than using arrows or drawing over what is there." +msgstr "" + +#: ../../guide/tournament-logistics.rst:532 +msgid "That people should try and write numbers in a manner that makes them crystal clear. Put cross-bars in 7s; bases on 1's. Make 8's actually look like two circles. If people know they have poor handwriting maybe consider writing the literal words — *seventy-one* below the numbers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:533 +msgid "That for styles that do not have a single ballot for a panel, reiterate that everyone fills in their own ballots. At Australs, if this isn't made absolutely clear someone will average their panels ballots in order to try and 'help' you." +msgstr "" + +#: ../../guide/tournament-logistics.rst:534 +msgid "That runners do not fill out ballots. In BP, remind them that only chairs should fill out ballots (i.e. it cannot be deputised to a wing). In formats with individual ballots, remind chairs to make sure their wings have actually filled out a ballot, and get them to check for errors or ambiguities." +msgstr "" + +#: ../../guide/tournament-logistics.rst:535 +msgid "That everyone is bad at math. People who think they are good at math just haven't messed up their ballot *yet*. Emphasize that people should always use their phone's calculators to check totals. At typical tournaments using exclusively paper ballots math errors happen multiple times a round, almost every round." +msgstr "" + +#: ../../guide/tournament-logistics.rst:536 +msgid "How long people have to fill out their ballots. Suggest that chairs actually keep track of this time during a stopwatch, and start moving towards critical steps (i.e. scoring) well *before* the time is up, not *once* it is up." +msgstr "" + +#: ../../guide/tournament-logistics.rst:537 +msgid "Outline what chairs should do to return ballots. If ballots are being run by runners, outline what they should do if a runner doesn't appear. If they are not being run by runners remind people that returning ballots should be there number one priority, over say giving a lengthy adjudication or team feedback. Or getting lunch." +msgstr "" + +#: ../../guide/tournament-logistics.rst:538 +msgid "Remind people to *be nice to runners* and that being mean to runners will have serious consequences." +msgstr "" + +#: ../../guide/tournament-logistics.rst:539 +msgid "Remind people that the tab team and adjudication core will not, except for absolutely exceptional circumstances, accept photos or messaged descriptions of ballots; that all results must be on paper and handled in the same manner. The adjudication core should also be reminded of this." +msgstr "" + +#: ../../guide/tournament-logistics.rst:542 +msgid "How to locate the tab room" +msgstr "" + +#: ../../guide/tournament-logistics.rst:544 +msgid "People should know how to get to the tab room, either to raise issues with the adjudication core or to correct ballot errors. Make it crystal clear where it is and how to get there. Also ensure people know not to barge in; that they should knock and wait." +msgstr "" + +#: ../../guide/tournament-logistics.rst:546 +msgid "Clearly communicate the contact details of the tab directors and get people to take them down. In most cases you do not want people going through convenors or the adjudication core for any tab-related issues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:549 +msgid "Misc" +msgstr "" + +#: ../../guide/tournament-logistics.rst:551 +msgid "Now is a good time to encourage people to consider getting involved with tabbing and tab-development. Emphasize that both do not necessarily require technical skills and that tabbers are (or should be) open to feedback and ideas from the wider community. Tell people to come find you and chat if they are interested and put up a link to the `Facebook tabbing group `_." +msgstr "" + +#: ../../guide/tournament-logistics.rst:553 +msgid "If you appreciated this guide we'd appreciate a slide promoting `Timekept `_ and `Debatekeeper `_. This would also be a good point to remind people that their timekeeping apps shouldn't be making noise *unless* they have been explicitly assigned to keep time by the chair." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/guide/upgrading.po b/docs/locale/cs/LC_MESSAGES/guide/upgrading.po new file mode 100644 index 00000000000..63279af4a31 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/guide/upgrading.po @@ -0,0 +1,60 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/upgrading.po\n" +"X-Crowdin-File-ID: 1309\n" +"Language: cs_CZ\n" + +#: ../../guide/upgrading.rst:5 +msgid "Upgrading Tabbycat" +msgstr "" + +#: ../../guide/upgrading.rst:7 +msgid "Generally only want to upgrade copies of tab sites that are used on an ongoing basis for multiple tournaments, or if there is a bugfix release between when you setup your site and when the tournament is running." +msgstr "" + +#: ../../guide/upgrading.rst:11 +msgid "Going from any version of Tabbycat 1 to any version of Tabbycat 2 won't work with the below instructions — check out the CHANGELOG for the 2.0 version for details of how to perform this upgrade." +msgstr "" + +#: ../../guide/upgrading.rst:14 +msgid "Upgrading a Local Copy" +msgstr "" + +#: ../../guide/upgrading.rst:16 +msgid "Assuming you haven't made any changes to the Tabbycat code, upgrading a locally installed copy should just be a matter of `downloading the latest source code `_ and replacing the existing files with the new ones. If you used git to download these files initially you can just pull down the latest copy of the master branch to do this." +msgstr "" + +#: ../../guide/upgrading.rst:18 +msgid "You would then repeat the \"Install Tabbycat\" instructions for your original installation method." +msgstr "" + +#: ../../guide/upgrading.rst:21 +msgid "Upgrading on Heroku" +msgstr "" + +#: ../../guide/upgrading.rst:23 +msgid "The easiest way to upgrade a Heroku site is to create an account on Github and then to `'fork' `_ the `Tabbycat repository `_." +msgstr "" + +#: ../../guide/upgrading.rst:25 +msgid "Once you have done this you can login to your Heroku Dashboard, go to your app, and then navigate to the Deploy tab. In this tab, adjacent to *Deployment method* select the GitHub option. This will bring up a new 'Connect to GitHub' section where you can search for 'Tabbycat' to find the copy of the repository you made earlier and connect it." +msgstr "" + +#: ../../guide/upgrading.rst:29 +msgid "Once connected a new *Manual deploy* section will appear. Make sure you select the *master* branch (not develop) and then click *Deploy Branch*. This will then show the app deploying and notify you when it has finished; which may take several minutes." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/index.po b/docs/locale/cs/LC_MESSAGES/index.po new file mode 100644 index 00000000000..b31b9668d53 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/index.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/index.po\n" +"X-Crowdin-File-ID: 1311\n" +"Language: cs_CZ\n" + +#: ../../index.rst:18 +msgid "Installation" +msgstr "" + +#: ../../index.rst:32 +msgid "Using Tabbycat" +msgstr "" + +#: ../../index.rst:41 +msgid "Tabbing Guide" +msgstr "" + +#: ../../index.rst:52 +msgid "Feature notes" +msgstr "" + +#: ../../index.rst:75 +msgid "About" +msgstr "" + +#: ../../index.rst:8 +msgid "Tabbycat User Guide" +msgstr "" + +#: ../../index.rst:10 +msgid "Tabbycat is a draw tabulation system for parliamentary debate tournaments. It supports two-team formats such as Australs, World Schools, Asians, Australian Easters and all New Zealand formats, as well as British Parliamentary (WUDC). It is also highly configurable, supporting many custom variations of the above formats too. If you're looking for a general overview of the software, check out our `README on Github `_." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/install/docker.po b/docs/locale/cs/LC_MESSAGES/install/docker.po new file mode 100644 index 00000000000..dd4a9328319 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/install/docker.po @@ -0,0 +1,173 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/docker.po\n" +"X-Crowdin-File-ID: 1313\n" +"Language: cs_CZ\n" + +#: ../../install/docker.rst:5 +msgid "Installing Locally using Docker" +msgstr "" + +#: ../../install/docker.rst:7 +msgid "Is this the best install method for you?" +msgstr "" + +#: ../../install/docker.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/docker.rst:12 +#, python-format +msgid "If you need an offline copy of Tabbycat, installing using Docker should be simpler and quicker than using the \"Install Locally on…\" instructions for your operating system. However if a Docker installation doesn't work as outlined below, it's harder to address what isn't working. If you encounter any problems with Docker, we recommend using the \"Install Locally on…\" option as a fallback, but if you need to do so, `please also report the issue you're having on GitHub `_ or :ref:`contact the developers `." +msgstr "" + +#: ../../install/docker.rst:14 +msgid "Docker is an application that makes it very easy to load and run a specific collection of software. It allows us to bundle everything necessary to run Tabbycat into a single package rather than have users install everything needed step-by-step. Once set up, Docker will allow you to start and stop a webserver (that in turn runs Tabbycat) on your computer whenever you want and without the need for internet access." +msgstr "" + +#: ../../install/docker.rst:18 +msgid "1. Download Tabbycat" +msgstr "" + +#: ../../install/docker.rst:20 +msgid "`Go to the page for our latest release `_." +msgstr "" + +#: ../../install/docker.rst:22 +msgid "Download the zip or tar.gz file." +msgstr "" + +#: ../../install/docker.rst:24 +msgid "Extract all files in it to a folder of your choice." +msgstr "" + +#: ../../install/docker.rst:28 +msgid "2. Install Docker" +msgstr "" + +#: ../../install/docker.rst:31 +msgid "If using macOS or Linux" +msgstr "" + +#: ../../install/docker.rst:33 +msgid "Install the **Docker Community Edition (stable)** from the `Docker store page `_." +msgstr "" + +#: ../../install/docker.rst:36 +msgid "If using Windows 10 Pro, Enterprise, or Education Edition" +msgstr "" + +#: ../../install/docker.rst:40 +msgid "Install the ****Docker Community Edition (stable)*** from the `Docker store page `_." +msgstr "" + +#: ../../install/docker.rst:41 +msgid "Before or shortly after installing it, Docker may ask you to enable hypervisor and restart your PC. If it asks you this follow the prompts and restart as asked." +msgstr "" + +#: ../../install/docker.rst:42 +msgid "Once Docker has finished installing, open up the newly-installed Docker application, then right-click the app's icon (the whale) in the Taskbar." +msgstr "" + +#: ../../install/docker.rst:43 +msgid "From there, hit *Settings* in the menu and *Shared Drives* in the sidebar. Tick the checkbox next to your hardrive and then click *Apply*. After that has applied exit and reopen the docker app (ie right-click the taskbar icon and hit exit) and verify that the checkbox is still there." +msgstr "" + +#: ../../install/docker.rst:49 +msgid "If using Windows 7, Windows 8, or Windows 10 Home Edition" +msgstr "" + +#: ../../install/docker.rst:51 +msgid "Install the **Docker Toolbox** from the `Docker Toolbox downloads page `_." +msgstr "" + +#: ../../install/docker.rst:53 +msgid "Not sure which edition of Windows you have? Click Start, search for \"System\", and open the Control Panel item \"System\"." +msgstr "" + +#: ../../install/docker.rst:57 +msgid "3. Run Tabbycat in Docker" +msgstr "" + +#: ../../install/docker.rst:60 +msgid "If using the Docker App" +msgstr "" + +#: ../../install/docker.rst:62 +msgid "*These instructions apply if you installed the Docker App, i.e., if you are using macOS, Linux or Windows Pro/Enterprise/Education.*" +msgstr "" + +#: ../../install/docker.rst:66 +msgid "Ensure that Docker application is open (there should be a whale icon in your menu/task bar) and that it says that Docker is running." +msgstr "" + +#: ../../install/docker.rst:68 +msgid "Browse to the location where you extracted Tabbycat to. Open up the **bin** folder there. Within that folder:" +msgstr "" + +#: ../../install/docker.rst:70 +msgid "If you're on macOS, press the Control key, click the icon for **osx_docker_start.command**, then choose Open from the shortcut menu." +msgstr "" + +#: ../../install/docker.rst:71 +msgid "If you're on Windows, open **windows_docker_start.bat**." +msgstr "" + +#: ../../install/docker.rst:72 +msgid "If you're on Linux, open up a terminal in the Tabbycat folder (*i.e.* the folder containing ``README.md``) and run ``docker-compose up``." +msgstr "" + +#: ../../install/docker.rst:74 +msgid "A terminal window should popup and bunch of text scroll by. If this is your first time running Docker it may take a while (30 minutes or more) to download the virtual machine. When the text has stopped scrolling by you should see a `Finished building Tabbycat!` message." +msgstr "" + +#: ../../install/docker.rst:76 +msgid "Open up http://localhost:8000/ (Windows) or http://0.0.0.0:8000 (OSX/Linux) in a browser of your choice!" +msgstr "" + +#: ../../install/docker.rst:78 ../../install/docker.rst:100 +msgid "If you want to reopen Tabbycat at a later time (say after restarting) repeat steps 1 through 4 here." +msgstr "" + +#: ../../install/docker.rst:81 +msgid "If using the Docker Toolbox" +msgstr "" + +#: ../../install/docker.rst:83 +msgid "*These instructions apply if you installed the Docker Toolbox, i.e., if you are using Windows 7, Windows 8 or Windows 10 Home.*" +msgstr "" + +#: ../../install/docker.rst:87 +msgid "Start the **Docker Quickstart Terminal**." +msgstr "" + +#: ../../install/docker.rst:89 +msgid "Run the command ``docker-machine ip``. Take note of the IP address it shows, for example::" +msgstr "" + +#: ../../install/docker.rst:94 +msgid "Navigate to the Tabbycat folder (*i.e.* the folder containing ``README.md``) and run ``docker-compose up``." +msgstr "" + +#: ../../install/docker.rst:96 +msgid "Open a browser and go to http://192.168.99.100:8000/, replacing \"192.168.99.100\" with whatever IP address was shown in step 2." +msgstr "" + +#: ../../install/docker.rst:98 +msgid "Once you're done and want to stop the Tabbycat server, press Ctrl+C, wait until the next prompt appears, and then run ``docker-machine stop``." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/install/heroku.po b/docs/locale/cs/LC_MESSAGES/install/heroku.po new file mode 100644 index 00000000000..5a1ba19848e --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/install/heroku.po @@ -0,0 +1,445 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/heroku.po\n" +"X-Crowdin-File-ID: 1315\n" +"Language: cs_CZ\n" + +#: ../../install/heroku.rst:5 +msgid "Installing on Heroku" +msgstr "" + +#: ../../install/heroku.rst:7 +msgid "When running Tabbycat on the internet, we set it up on `Heroku `_. The project is set up to be good to go on Heroku, and it works well for us, so if you'd like to run it online, we recommend that you do the same. Naturally, this requires you to have a Heroku account." +msgstr "" + +#: ../../install/heroku.rst:9 +msgid "There are two ways to do this: a **short way** and a **long way**. Most people should use the short way. The long way requires some familiarity with command-line interfaces and Git, and requires a :ref:`local installation ` as a prerequisite, but makes it easier to :ref:`upgrade versions ` later on and (unlike the short way) allows you to import data from CSV files." +msgstr "" + +#: ../../install/heroku.rst:12 +msgid "The short way" +msgstr "" + +#: ../../install/heroku.rst:13 +msgid "Click this button:" +msgstr "" + +#: ../../install/heroku.rst:18 +msgid "This is the easiest way to deploy an instance of Tabbycat online. It requires no technical background." +msgstr "" + +#: ../../install/heroku.rst:20 +msgid "If you don't already have a Heroku account, it'll prompt you to create one. Once you're logged in to Heroku, choose a name for your installation, then scroll down and click **Deploy**. Once it's finished, click **View** and follow the prompts. Once finished, open the site and from there you can easily set up a demo data set (if you just want to learn Tabbycat) or use the data importer to set up a real tournament." +msgstr "" + +#: ../../install/heroku.rst:22 +msgid "During the setup process, Heroku will ask you to verify your account by adding a credit card. A standard Tabbycat site *will not charge* your card — charges only accrue if you deliberately add a paid service in the Heroku dashboard." +msgstr "" + +#: ../../install/heroku.rst:24 +msgid "If you can't access a credit card, you can instead install a limited version, which we call \"Tabbykitten\". However, Tabbykitten cannot send any e-mails or handle as much public traffic. We therefore strongly recommend it only as a last resort, and even then only for small tournaments. `Use this link to set up a Tabbykitten site `_." +msgstr "" + +#: ../../install/heroku.rst:27 +msgid "The long way" +msgstr "" + +#: ../../install/heroku.rst:28 +msgid "The long way sets you up with more control over your environment. Because you'll clone `our GitHub repository`_, it'll be easier for you to :ref:`upgrade your app ` when a new version is released. You'll also have the flexibility to make and contribute updates to the source code. We recommend it if you have experience with Git. It's also easier with this method to import CSV files using the command-line importer, so if you have a very large tournament, this might make importing initial data easier." +msgstr "" + +#: ../../install/heroku.rst:30 +msgid "We've tested these instructions successfully on Windows, Linux and macOS." +msgstr "" + +#: ../../install/heroku.rst:33 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/heroku.rst:35 +msgid "You need to have at least a passing familiarity with command-line interfaces to get through the longer traditional method. We'll talk you through the rest." +msgstr "" + +#: ../../install/heroku.rst:37 +msgid "When we say \"command shell\", on Windows we mean **Command Prompt**, and on Linux and macOS we mean **Terminal** (or your favourite command shell)." +msgstr "" + +#: ../../install/heroku.rst:39 ../../install/heroku.rst:100 +msgid "Advanced users" +msgstr "" + +#: ../../install/heroku.rst:42 +msgid "Tabbycat is a `Django `_ project. As such, it can be installed on any web platform that supports Django, using any SQL system that Django supports. Just be aware that we haven't tried any other platform." +msgstr "" + +#: ../../install/heroku.rst:45 +msgid "Short version of the long way" +msgstr "" + +#: ../../install/heroku.rst:47 +msgid "We provide a \"short version\" for experienced users. Don't just copy and paste these commands before you understand what they do! If things aren't set up perfectly they can fail, so it's important to supervise them the first time you do them. If this is all new to you, read the long version of the instructions below." +msgstr "" + +#: ../../install/heroku.rst:56 +msgid "If you want to :ref:`import tournament data ` from CSV files, :ref:`install Tabbycat locally `, put your CSV files in ``data/yourtournamentname``, then::" +msgstr "" + +#: ../../install/heroku.rst:68 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/heroku.rst:70 +msgid "Install the `Heroku Command Line Interface (CLI) `_, then log in with the command ``heroku login``." +msgstr "" + +#: ../../install/heroku.rst:72 +msgid "If you don't already have **Git**, follow the `instructions on the GitHub website `_ to set up Git." +msgstr "" + +#: ../../install/heroku.rst:75 +msgid "2. Set up a local installation" +msgstr "" + +#: ../../install/heroku.rst:77 +msgid "If you don't already have a local installation, follow the instructions on the page for your operating system, listed below, to set up a local installation." +msgstr "" + +#: ../../install/heroku.rst:79 +msgid "When downloading the source code, you **must** take the option involving cloning the GitHub repository using Git. In the macOS and Windows instructions, this means the option described in the \"Advanced users\" box. To do so, use these commands:" +msgstr "" + +#: ../../install/heroku.rst:86 +msgid "Do not download the .tar.gz or .zip file and extract it." +msgstr "" + +#: ../../install/heroku.rst:88 +msgid ":ref:`install-linux`" +msgstr "" + +#: ../../install/heroku.rst:89 +msgid ":ref:`install-osx`" +msgstr "" + +#: ../../install/heroku.rst:90 +msgid ":ref:`install-wsl`" +msgstr "" + +#: ../../install/heroku.rst:91 +msgid ":ref:`install-windows`" +msgstr "" + +#: ../../install/heroku.rst:93 +msgid "If you do already have a local installation, update to the latest version using:" +msgstr "" + +#: ../../install/heroku.rst:103 +msgid "It's not *strictly* necessary to have a fully functional local installation if you don't want to import data from CSV files. But it certainly helps." +msgstr "" + +#: ../../install/heroku.rst:106 +msgid "3. Deploy to Heroku" +msgstr "" + +#: ../../install/heroku.rst:110 +msgid "Navigate to your Tabbycat directory::" +msgstr "" + +#: ../../install/heroku.rst:114 +msgid "Run the script to deploy the app to Heroku. Replace ``yourappname`` with your preferred URL. Your website will be at ``yourappname.herokuapp.com``." +msgstr "" + +#: ../../install/heroku.rst:120 +msgid "This script has other options that you might find useful. Run ``python deploy_heroku.py --help`` for details." +msgstr "" + +#: ../../install/heroku.rst:122 +msgid "When this script finishes, it will open the app in your browser. It should look something like this:" +msgstr "" + +#: ../../install/heroku.rst:127 +msgid "4. Import tournament data locally" +msgstr "" + +#: ../../install/heroku.rst:129 +msgid "Steps 4 and 5 are optional; there are other methods of :ref:`importing data `. However the following method is most useful for large tournaments where manual entry would be tedious." +msgstr "" + +#: ../../install/heroku.rst:131 +msgid "Step 4 is the same as the process described in :ref:`importtournament-command`." +msgstr "" + +#: ../../install/heroku.rst:135 +msgid "Place your CSV files in ``data/yourtournamentname``, as described in :ref:`importing-initial-data`." +msgstr "" + +#: ../../install/heroku.rst:137 +msgid "Create a new, blank local database::" +msgstr "" + +#: ../../install/heroku.rst:141 +msgid "It's normally easiest to name your local database after your app name, so that if you have multiple sites, you know which one relates to which." +msgstr "" + +#: ../../install/heroku.rst:143 +msgid "Reconfigure ``DATABASES`` in your settings_local.py file to point to this new database." +msgstr "" + +#: ../../install/heroku.rst:145 +msgid "Activate your virtual environment::" +msgstr "" + +#: ../../install/heroku.rst:149 +msgid "Run initial migrations on your blank local database::" +msgstr "" + +#: ../../install/heroku.rst:154 +msgid "Import your tournament data into your blank local database::" +msgstr "" + +#: ../../install/heroku.rst:158 +msgid "If your data's not clean, it might take a few attempts to get this right. We recommend either destroying and recreating the database (``dropdb``, ``createdb``), or wiping it using ``dj flush``, before retrying." +msgstr "" + +#: ../../install/heroku.rst:160 +msgid "Check it looks like how you expect it to look, by starting your local installation::" +msgstr "" + +#: ../../install/heroku.rst:165 +msgid "5. Push the local database to Heroku" +msgstr "" + +#: ../../install/heroku.rst:167 +msgid "Once you're happy with how your local import went, you can push the local database to Heroku." +msgstr "" + +#: ../../install/heroku.rst:169 +msgid "This step wipes the Heroku database clean, and replaces it with the contents of your local database. If you have any data on the Heroku site that isn't also in your local database, **that data will be lost** and will not be recoverable." +msgstr "" + +#: ../../install/heroku.rst:171 +msgid "If you have multiple Heroku sites, you may find that the ``heroku`` commands refuse to run, prompting you to specify an app. If so, add ``--app yourappname`` to each ``heroku`` command." +msgstr "" + +#: ../../install/heroku.rst:173 +msgid "Enable maintenance mode. This takes the site offline, to ensure that no-one can possibly create or change any data on the site while you're pushing a new database up::" +msgstr "" + +#: ../../install/heroku.rst:177 +msgid "Reset the database. (Caution: This permanently deletes all information on your Heroku database!)" +msgstr "" + +#: ../../install/heroku.rst:183 +msgid "Push your local database to Heroku::" +msgstr "" + +#: ../../install/heroku.rst:187 +msgid "You might need to specify your local PostgreSQL credentials by adding ``PGUSER=yourusername PGPASSWORD=******** PGHOST=localhost`` to the *beginning* of that command. (This sets environment variables to those values for the duration of that one command.)" +msgstr "" + +#: ../../install/heroku.rst:189 +msgid "Disable maintenance mode::" +msgstr "" + +#: ../../install/heroku.rst:195 +msgid "Heroku options you may want to change" +msgstr "" + +#: ../../install/heroku.rst:197 +msgid "If you have a large tournament, you may want to customize your Heroku app. This section provides some guidance on upgrades and settings you may wish to consider. Some of these configurations require you to have the `Heroku Command Line Interface (CLI) `_ installed." +msgstr "" + +#: ../../install/heroku.rst:202 +msgid "Upgrading your database size" +msgstr "" + +#: ../../install/heroku.rst:204 +msgid "The free plan of `Heroku Postgres `_, \"Hobby Dev\", should work for most small tournaments. For large tournaments, however, you may find that you exceed the 10,000-row limit of this plan. It's difficult to give general guidance on how many rows you're likely to use, because it depends on which features of Tabbycat you use (*e.g.*, if you use adjudicator feedback). But to give some idea:" +msgstr "" + +#: ../../install/heroku.rst:206 +msgid "Australs 2016, which had 74 teams, 8 preliminary rounds and heavily used adjudicator feedback, ended up at around 30,000 rows." +msgstr "" + +#: ../../install/heroku.rst:207 +#, python-format +msgid "The Asia BP championships 2017 had 100 teams, 6 preliminary rounds, and mandatory feedback (i.e. 100% return rates) used 15,000 rows." +msgstr "" + +#: ../../install/heroku.rst:208 +msgid "A 3 vs 3 tournament with 54 teams, 5 preliminary rounds, and which only lightly used adjudicator feedback ended up using around 4,500 rows" +msgstr "" + +#: ../../install/heroku.rst:210 +msgid "If you need more than 10,000 rows, you'll need to upgrade to a paid Heroku Postgres Plan. The 10,000,000 rows allowed in the lowest paid plan, \"Hobby Basic\", should certainly be more than sufficient." +msgstr "" + +#: ../../install/heroku.rst:212 +msgid "If you're not sure, you can always start at Hobby Dev—just be prepared to `upgrade `_ during the tournament if you run close to capacity." +msgstr "" + +#: ../../install/heroku.rst:215 +msgid "Custom domain names" +msgstr "" + +#: ../../install/heroku.rst:217 +msgid "Your Heroku app will be available at ``yourappname.herokuapp.com``. You may want it to be a subdomain of your tournament's website, like ``tab.australasians2015.org``. If so, you'll need to configure your custom domain and SSL. Instructions for both are in the Heroku Dev Center:" +msgstr "" + +#: ../../install/heroku.rst:219 +msgid "`Custom Domain Names for Apps `_" +msgstr "" + +#: ../../install/heroku.rst:220 +msgid "`Heroku SSL `_" +msgstr "" + +#: ../../install/heroku.rst:222 +msgid "The custom domain name basically requires two things: a DNS ``CNAME`` entry on your website targeting ``yourappname.herokuapp.com``, and the custom domain configured on Heroku using ``heroku domains:add tab.yourwebsite.com``. You'll also need to provide an SSL certificate for your custom domain and add it using the ``heroku certs:add`` command." +msgstr "" + +#: ../../install/heroku.rst:225 +msgid "HTTPS" +msgstr "" + +#: ../../install/heroku.rst:227 +msgid "All Tabbycat sites deployed to Heroku redirect all traffic to HTTPS by default." +msgstr "" + +#: ../../install/heroku.rst:229 +msgid "For a myriad of reasons, we strongly advise against disabling this. But if for some reason you need to run on plain HTTP, you can do this by setting the ``DISABLE_HTTPS_REDIRECTS`` config variable in Heroku to ``disable`` (see `Heroku documentation on config vars `_). The value of the config var must be ``disable``; if it's anything else, HTTPS redirects will remain in place." +msgstr "" + +#: ../../install/heroku.rst:231 +msgid "Most modern browsers, after having been redirected by a site to HTTPS once, remember that that site requires HTTPS and go there for all subsequent visits even if the user typed in a plain http\\:// address. It may do this because it cached the HTTP 301 permanent redirect, stored an HSTS entry and/or tagged its session cookie to require HTTPS. If, after disabling HTTPS on your Tabbycat site, you find that you're still being redirected to HTTPS, first try a browser or computer that *hasn't* visited the site before. If that works, then remove the relevant entry from your (original) browser's cache, HSTS set and cookies, and try again." +msgstr "" + +#: ../../install/heroku.rst:234 +msgid "Time zone" +msgstr "" + +#: ../../install/heroku.rst:236 +msgid "If you want to change the time zone you nominated during deployment, you can do so by going to the `Heroku Dashboard `_, clicking on your app, going to the **Settings** tab, clicking **Reveal Config Vars** and changing the value of the ``TIME_ZONE`` variable. This value must be one of the names in the IANA tz database, *e.g.* ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``. You can find a `list of these on Wikipedia `_ in the 'TZ\\*' column." +msgstr "" + +#: ../../install/heroku.rst:239 +msgid "SendGrid account details" +msgstr "" + +#: ../../install/heroku.rst:241 +msgid "By default, Heroku will automatically create a SendGrid account for you. For small tournaments, this should work fine. For larger ones, though, SendGrid typically doesn't allow new accounts to send so many emails without additional vetting. This vetting is separate to the verification you did for your Heroku account, and as far as we're aware, it can't be done until you send your first email, by which time it's probably too late." +msgstr "" + +#: ../../install/heroku.rst:243 +msgid "If you're running a large tournament, you may wish to use your own SendGrid account instead. The free tier probably won't suffice after the trial period, but the Essentials tier should be more than adequate. If you're a student and have the `GitHub Education Pack `_, you might find the SendGrid plan here useful." +msgstr "" + +#: ../../install/heroku.rst:245 +msgid "If you set up and use your own SendGrid account, you can remove the SendGrid add-on from your Heroku app. The SendGrid add-on is only necessary if you wish to use Heroku's auto-created SendGrid account." +msgstr "" + +#: ../../install/heroku.rst:247 +msgid "To set up your app to use your own SendGrid account:" +msgstr "" + +#: ../../install/heroku.rst:251 +msgid "`Sign up for a SendGrid account `_, if you don't already have one." +msgstr "" + +#: ../../install/heroku.rst:253 +msgid "`Create an API key `_ in your SendGrid account." +msgstr "" + +#: ../../install/heroku.rst:255 +msgid "There are `instructions for how to do this in the SendGrid documentation `_. The only permission that is needed is the \"Mail Send\" permission, so you can turn off all others if you want to be safe." +msgstr "" + +#: ../../install/heroku.rst:257 +msgid "Set the following config vars in Heroku Dashboard (or using the Heroku CLI, if you have it):" +msgstr "" + +#: ../../install/heroku.rst:259 +msgid "``SENDGRID_USERNAME`` should be set to ``apikey`` (not your username)." +msgstr "" + +#: ../../install/heroku.rst:260 +msgid "``SENDGRID_PASSWORD`` should be set to your API key, which will start with ``SG*******``." +msgstr "" + +#: ../../install/heroku.rst:262 +msgid "The `Heroku SendGrid instructions `_ to do something with ``SENDGRID_API_KEY`` are **incorrect**. We figured this out by contacting SendGrid support staff. Use the above config vars instead." +msgstr "" + +#: ../../install/heroku.rst:268 +msgid "Upgrading an existing Heroku app" +msgstr "" + +#: ../../install/heroku.rst:270 +msgid "For most users, we recommend starting a new site for every tournament, when you set up the tab for that tournament. There's generally not a pressing need to upgrade Tabbycat after a tournament is concluded, and every time you deploy a new site, you'll be using the latest version at the time of deployment." +msgstr "" + +#: ../../install/heroku.rst:272 +msgid "To upgrade an existing Heroku-based Tabbycat app to the latest version, you need to *deploy* the current version of Tabbycat to your Heroku app. There are several ways to do this. We list one below, primarily targeted at users with some background in Git." +msgstr "" + +#: ../../install/heroku.rst:274 +msgid "The essence of it is that you need to `create a Git remote `_ for your Heroku app (if you don't already have one), then `push to it `_." +msgstr "" + +#: ../../install/heroku.rst:276 +msgid "You should **always** :ref:`back up your database ` before upgrading Tabbycat." +msgstr "" + +#: ../../install/heroku.rst:278 +msgid "You'll need both Git and the Heroku CLI, and you'll need to be logged in to the Heroku CLI already." +msgstr "" + +#: ../../install/heroku.rst:280 +msgid "Take a backup of your database::" +msgstr "" + +#: ../../install/heroku.rst:284 +msgid "If you haven't already, clone our Git repository and check out the master branch::" +msgstr "" + +#: ../../install/heroku.rst:289 +msgid "If you've already cloned our Git repository, don't forget to pull so you're up to date::" +msgstr "" + +#: ../../install/heroku.rst:294 +msgid "Check to see if you have a Git remote already in place::" +msgstr "" + +#: ../../install/heroku.rst:300 +msgid "If you do, the name of the remote will be on the left (``heroku`` in the above example), and the URL of your Git repository will be on the right. In the example above, our Tabbycat site URL would be ``mytournament2018.herokuapp.com``; the Git remote URL is then ``https://git.heroku.com/mytournament2018.git``." +msgstr "" + +#: ../../install/heroku.rst:302 +msgid "If a Git remote URL for your Tabbycat site *doesn't* appear, then create one::" +msgstr "" + +#: ../../install/heroku.rst:307 +msgid "If you tab many tournaments, it'll probably be helpful to use a name other than ``heroku`` (say, ``mytournament2018``), so that you can manage multiple tournaments." +msgstr "" + +#: ../../install/heroku.rst:309 +msgid "Push to Heroku::" +msgstr "" + +#: ../../install/heroku.rst:313 +msgid "This will take a while to complete." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/install/linux.po b/docs/locale/cs/LC_MESSAGES/install/linux.po new file mode 100644 index 00000000000..1533402c904 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/install/linux.po @@ -0,0 +1,249 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/linux.po\n" +"X-Crowdin-File-ID: 1317\n" +"Language: cs_CZ\n" + +#: ../../install/linux.rst:5 +msgid "Installing Locally on Linux" +msgstr "" + +#: ../../install/linux.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/linux.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/linux.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on Linux, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/linux.rst:14 +msgid "The instructions apply to both Linux, and :ref:`Linux on Windows `." +msgstr "" + +#: ../../install/linux.rst:17 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/linux.rst:19 +msgid "You need to be familiar with command-line interfaces to get through this comfortably. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest." +msgstr "" + +#: ../../install/linux.rst:21 ../../install/linux.rst:56 +#: ../../install/linux.rst:130 +msgid "Advanced users" +msgstr "" + +#: ../../install/linux.rst:24 +msgid "If you wish to use an SQL engine other that PostgreSQL, most of Tabbycat should work, but a few features rely on SQL functions that aren't supported by all engines. To configure Tabbycat to use a different engine, set the ``DATABASES`` `Django setting `_ accordingly." +msgstr "" + +#: ../../install/linux.rst:27 +msgid "Short version" +msgstr "" + +#: ../../install/linux.rst:38 +msgid "Then create **settings/local.py** as described :ref:`below `, then::" +msgstr "" + +#: ../../install/linux.rst:53 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/linux.rst:54 +msgid "First, you need to install all of the software on which Tabbycat depends, if you don't already have it installed." +msgstr "" + +#: ../../install/linux.rst:59 +msgid "These instructions are for Ubuntu, and are targeted at Ubuntu 18.04. If you have another distribution of Linux, we trust you'll know how to navigate the package manager for your distribution to install the dependencies." +msgstr "" + +#: ../../install/linux.rst:64 +msgid "1(a). Python" +msgstr "" + +#: ../../install/linux.rst:65 +msgid "Tabbycat requires Python 3.6 or later. You probably already have Python 3.6, but you'll also need the development package in order to install Psycopg2 later. The ``venv`` module will come in handy too. Install::" +msgstr "" + +#: ../../install/linux.rst:69 +msgid "Check the version::" +msgstr "" + +#: ../../install/linux.rst:74 +msgid "Tabbycat does not support Python 2. You must use Python 3.6 or later." +msgstr "" + +#: ../../install/linux.rst:77 +msgid "1(b). PostgreSQL" +msgstr "" + +#: ../../install/linux.rst:78 +msgid "*PostgreSQL is a database management system.*" +msgstr "" + +#: ../../install/linux.rst:80 +msgid "Install PostgreSQL using the `PostgreSQL installation instructions here `_." +msgstr "" + +#: ../../install/linux.rst:82 +msgid "Normally, installing the latest stable version should be best, but if you're having issues, install the same version as the current `default version on Heroku `_, as that will be what is currently most commonly used with Tabbycat. If you're planning on pushing data between your local installation and a Heroku site, it's best to match the Heroku's current default version." +msgstr "" + +#: ../../install/linux.rst:84 +msgid "You'll also need the ``libpq-dev`` package in order to install Psycopg2 later::" +msgstr "" + +#: ../../install/linux.rst:91 +msgid "1(c). Node.js/NPM" +msgstr "" + +#: ../../install/linux.rst:92 +msgid "*Node.js is a JavaScript runtime.*" +msgstr "" + +#: ../../install/linux.rst:94 +msgid "Tabbycat requires Node and its package manager to compile front-end dependencies. Install using:" +msgstr "" + +#: ../../install/linux.rst:104 +msgid "1(d). Other development tools" +msgstr "" + +#: ../../install/linux.rst:105 +msgid "Some of the Python packages require GCC, G++ and Make in order to install::" +msgstr "" + +#: ../../install/linux.rst:112 +msgid "2. Get the source code" +msgstr "" + +#: ../../install/linux.rst:114 +msgid "Choose either of the following two methods." +msgstr "" + +#: ../../install/linux.rst:117 +msgid "Method 1 (Git clone)" +msgstr "" + +#: ../../install/linux.rst:119 +msgid "If you have Git, life will be easier if you clone `our GitHub repository`_:" +msgstr "" + +#: ../../install/linux.rst:126 +msgid "(You can find out if you have Git using ``git --version``. If you don't, you can install it using ``sudo apt install git``.)" +msgstr "" + +#: ../../install/linux.rst:128 +msgid "The default branch is ``develop``, so you need to explicitly change the branch to ``master``, which is what the ``git checkout master`` line does." +msgstr "" + +#: ../../install/linux.rst:133 +msgid "You might like to fork the repository first, to give yourself a little more freedom to make code changes on the fly (and potentially :ref:`contribute ` them to the project)." +msgstr "" + +#: ../../install/linux.rst:136 +msgid "Method 2 (tarball)" +msgstr "" + +#: ../../install/linux.rst:138 +msgid "If you don't want to use Git, simply download and extract:" +msgstr "" + +#: ../../install/linux.rst:147 +msgid "3. Set up a new database" +msgstr "" + +#: ../../install/linux.rst:149 +msgid "You can skip step 1 if this is not your first installation. Every Tabbycat installation requires its own database, but they can use the same login role if you like." +msgstr "" + +#: ../../install/linux.rst:151 +msgid "Create a new user account with a password, replacing ``myusername`` with whatever name you prefer. If you don't know what username to pick, use ``tabbycat``. Grant this user the ability to create databases, since this'll make it easier to spin up new instances of Tabbycat in the future." +msgstr "" + +#: ../../install/linux.rst:157 +msgid "If you'll be running multiple instances of Tabbycat, developing, or diving into the database yourself, you might find it convenient to set up client authentication so that you don't need to do all manual operations from ``sudo -u postgres``. See the `PostgreSQL documentation on client authentication `_ for more information. For example, you could add a ``local all myusername md5`` line to the *pg_hba.conf* file, or you could define a mapping in *pg_ident.conf* and append the ``map=`` option to the ``local all all peer`` line in *pg_hba.conf*." +msgstr "" + +#: ../../install/linux.rst:159 +msgid "Create a new database, replacing ``mydatabasename`` with whatever name you prefer, probably the name of the tournament you're running::" +msgstr "" + +#: ../../install/linux.rst:167 +msgid "4. Install Tabbycat" +msgstr "" + +#: ../../install/linux.rst:168 +msgid "Almost there!" +msgstr "" + +#: ../../install/linux.rst:170 +msgid "Navigate to your Tabbycat directory::" +msgstr "" + +#: ../../install/linux.rst:176 +msgid "Start a new virtual environment. We suggest the name ``venv``, though it can be any name you like:" +msgstr "" + +#: ../../install/linux.rst:182 +msgid "Run the ``activate`` script. This puts you \"into\" the virtual environment::" +msgstr "" + +#: ../../install/linux.rst:186 +msgid "Install Tabbycat's requirements into your virtual environment::" +msgstr "" + +#: ../../install/linux.rst:192 +msgid "Navigate to the **tabbycat/settings** sub folder and copy **local.example** to **local.py**. Find this part in your new **local.py**, and fill in the blanks as indicated:" +msgstr "" + +#: ../../install/linux.rst:207 +msgid "Optionally, replace the value in this line in the same file with your own time zone, as defined in the `IANA time zone database `_ (*e.g.*, ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``)::" +msgstr "" + +#: ../../install/linux.rst:211 +msgid "Navigate to the **tabbycat** sub-directory, initialize the database, compile the assets, and create a user account for yourself::" +msgstr "" + +#: ../../install/linux.rst:219 +msgid "Start Tabbycat!" +msgstr "" + +#: ../../install/linux.rst:225 +msgid "It should show something like this::" +msgstr "" + +#: ../../install/linux.rst:229 +msgid "Open your browser and go to the URL printed above. (In the above example, it's http://127.0.0.1:8000.) It should look something like the screenshot below. If it does, great! You've successfully installed Tabbycat." +msgstr "" + +#: ../../install/linux.rst:234 +msgid "Naturally, your database is currently empty, so proceed to :ref:`importing initial data `." +msgstr "" + +#: ../../install/linux.rst:237 +msgid "Starting up an existing Tabbycat instance" +msgstr "" + +#: ../../install/linux.rst:238 +msgid "To start your Tabbycat instance up again next time you use your computer::" +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/install/local.po b/docs/locale/cs/LC_MESSAGES/install/local.po new file mode 100644 index 00000000000..e8ce52aa432 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/install/local.po @@ -0,0 +1,156 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:55\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/local.po\n" +"X-Crowdin-File-ID: 1319\n" +"Language: cs_CZ\n" + +#: ../../install/local.rst:5 +msgid "Local Installations" +msgstr "" + +#: ../../install/local.rst:8 +msgid "What is a local installation?" +msgstr "" + +#: ../../install/local.rst:10 +msgid "Tabbycat is a web-based system: it's designed to run as a web site. However, instead of installing it on a web server, you can install it on your computer, serving web pages to yourself. This is called a local installation." +msgstr "" + +#: ../../install/local.rst:12 +msgid "Then, when you open your browser, you can use Tabbycat like any other web site. The only difference is that this one is on **your** computer, not some computer in a data centre in a far-away land. In effect, you are getting your computer to behave like a web server." +msgstr "" + +#: ../../install/local.rst:17 +msgid "Should I use a local installation?" +msgstr "" + +#: ../../install/local.rst:19 +msgid "In most cases, you should make an online Tabbycat installation by :ref:`setting up an instance on Heroku `. This has a number of major advantages:" +msgstr "" + +#: ../../install/local.rst:21 +msgid "The installation process is easier." +msgstr "" + +#: ../../install/local.rst:22 +msgid "You can enter ballots and manage your tournament from multiple computers." +msgstr "" + +#: ../../install/local.rst:23 +msgid "Participants can access the draw, motions, results and more online." +msgstr "" + +#: ../../install/local.rst:24 +msgid "Heroku's data centers are less likely to fail than your computer is." +msgstr "" + +#: ../../install/local.rst:25 +msgid "Heroku e-mails Tabbycat's developers error reports to help us fix bugs." +msgstr "" + +#: ../../install/local.rst:27 +msgid "In some cases, you might have a good reason to use a local installation. We can think of just one such reason: If you won't have access to the internet at your tournament, or if internet access will be flaky, then you should use a local installation." +msgstr "" + +#: ../../install/local.rst:32 +msgid "You'll need internet access to download dependencies during the local installation process. So if you're not expecting to have reliable internet access at your tournament, be sure to have Tabbycat installed *before* you get there!" +msgstr "" + +#: ../../install/local.rst:37 +msgid "Advanced users" +msgstr "" + +#: ../../install/local.rst:40 +msgid "Tabbycat is a `Django `_ project, so if you have your own preferred method of running Django projects, you can also do that. Just be aware that we haven't tried it." +msgstr "" + +#: ../../install/local.rst:45 +msgid "Okay, so how do I do it?" +msgstr "" + +#: ../../install/local.rst:47 +msgid "The easiest option is to :ref:`install Tabbycat using Docker `. This method should work across all operating systems and is by far the easiest way to get a local copy running." +msgstr "" + +#: ../../install/local.rst:49 +msgid "If installing using Docker does not work, or if you want to be able to modify Tabbycat's code we also have a number of instructions for manually setting up a copy of Tabbycat. There instructions are here:" +msgstr "" + +#: ../../install/local.rst:51 +msgid ":ref:`install-linux`" +msgstr "" + +#: ../../install/local.rst:52 +msgid ":ref:`install-osx`" +msgstr "" + +#: ../../install/local.rst:53 +msgid ":ref:`install-wsl`" +msgstr "" + +#: ../../install/local.rst:54 +msgid ":ref:`install-windows`" +msgstr "" + +#: ../../install/local.rst:57 +msgid "Advanced uses" +msgstr "" + +#: ../../install/local.rst:60 +msgid "Can others access my local install?" +msgstr "" + +#: ../../install/local.rst:62 +msgid "Local installations can also take advantage of multiple-computer site access, including data entry---it's just takes more work than a Heroku installation to set up." +msgstr "" + +#: ../../install/local.rst:64 +msgid "Since a local installation is just having your computer run a web server, it can serve other computers too. You can make this work even if you don't have internet access: all you need is a router that you can use to connect a few computers together. Then other computers on your local network can access the Tabbycat site hosted on your computer. We did this at Victoria Australs 2012." +msgstr "" + +#: ../../install/local.rst:66 +msgid "We don't provide detailed instructions for this; we leave it for advanced users to set up themselves. As a rough guide:" +msgstr "" + +#: ../../install/local.rst:68 +msgid "You need to pass in your computer's IP address and port to the `runserver` command, for example, if your computer (the one acting as a server) is 196.168.0.2 and you want to run it on port 8000: ``dj runserver 192.168.0.2:8000``" +msgstr "" + +#: ../../install/local.rst:69 +msgid "You need to configure your firewall settings to allow incoming connections on the IP address and port you specified in that command." +msgstr "" + +#: ../../install/local.rst:70 +msgid "Be aware that local installs use the Django development server, whose **security is not tested**. Therefore, it's a good idea to make sure your firewall **only lets in computers on your local network** (or, if you're really paranoid, isolate the network from the internet completely)." +msgstr "" + +#: ../../install/local.rst:73 +msgid "Can I run an internet-accessible website from a local installation?" +msgstr "" + +#: ../../install/local.rst:75 +msgid "Probably not. Even if you disable your firewall, chances are your home router (or university router) will block any connections from the outside world to you. Even if you can though, **you really shouldn't**. The local installation uses the *Django development server*, which is a lightweight server designed for developers. Specifically, Django **does not test the security of its development server** in the way that proper web servers do. That is: It's a security risk to run a local installation as an internet-accessible site. Don't do it. `Install Tabbycat on Heroku `_ instead." +msgstr "" + +#: ../../install/local.rst:77 +msgid "Alternatively, if you have a background in web development, you might choose to install Tabbycat on your own production server. It's a Django project, so any means of supporting Django projects should work fine." +msgstr "" + +#: ../../install/local.rst:79 +msgid "It's safe to run on a small, isolated network (see above) with your firewall correctly configured because you presumably trust everyone you let on the network!" +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/install/osx.po b/docs/locale/cs/LC_MESSAGES/install/osx.po new file mode 100644 index 00000000000..0f77ae8eeec --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/install/osx.po @@ -0,0 +1,216 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:56\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/osx.po\n" +"X-Crowdin-File-ID: 1321\n" +"Language: cs_CZ\n" + +#: ../../install/osx.rst:5 +msgid "Installing Locally on macOS" +msgstr "" + +#: ../../install/osx.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/osx.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/osx.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on macOS, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/osx.rst:15 +msgid "Requisite technical knowledge" +msgstr "" + +#: ../../install/osx.rst:17 +msgid "You need to be familiar with command-line interfaces to get through this comfortably. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest. You just need to be prepared to bear with us. It'll take a while the first time, but it gets easier after that." +msgstr "" + +#: ../../install/osx.rst:19 +msgid "Every line in the instructions that begins with ``$`` is a command that you need to run in a **Terminal**, but without the ``$``: that sign is a convention used in instructions to make it clear that it is a command you need to run." +msgstr "" + +#: ../../install/osx.rst:21 ../../install/osx.rst:42 ../../install/osx.rst:68 +msgid "Advanced users" +msgstr "" + +#: ../../install/osx.rst:24 +msgid "If you wish to use an SQL engine other that PostgreSQL, most of Tabbycat should work, but a few features rely on SQL functions that aren't supported by all engines. To configure Tabbycat to use a different engine, set the ``DATABASES`` `Django setting `_ accordingly." +msgstr "" + +#: ../../install/osx.rst:27 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/osx.rst:29 +msgid "First, you need to install all of the software on which Tabbycat depends, if you don't already have it installed." +msgstr "" + +#: ../../install/osx.rst:32 +msgid "1(a). Python" +msgstr "" + +#: ../../install/osx.rst:33 +msgid "Tabbycat requires Python 3.6 or later. macOS only comes with Python 2.7, so you'll need to install this. You can download the latest version from the `Python website `_." +msgstr "" + +#: ../../install/osx.rst:35 +msgid "The executable will probably be called ``python3``, rather than ``python``. Check::" +msgstr "" + +#: ../../install/osx.rst:40 +msgid "Tabbycat does not support Python 2. You must use Python 3.6 or later." +msgstr "" + +#: ../../install/osx.rst:45 +msgid "These instructions will use the ``venv`` module. If you prefer, you can use `Virtualenv `_ instead." +msgstr "" + +#: ../../install/osx.rst:48 +msgid "1(b). Postgres.app" +msgstr "" + +#: ../../install/osx.rst:50 +msgid "Download `Postgres.app `_, move it to your Applications folder, and open it. This should place an icon in your menu bar, showing that the postgres database is running. Whenever you are running Tabbycat you'll need to have this app running." +msgstr "" + +#: ../../install/osx.rst:52 +msgid "You'll need to use the PostgreSQL command-line tools, so run the command that the Postgres.app suggests in its `installation instructions `_ for adding them to your ``$PATH``. As of February 2018, it was::" +msgstr "" + +#: ../../install/osx.rst:57 +msgid "1(c). Node.js/NPM" +msgstr "" + +#: ../../install/osx.rst:59 +msgid "Download and run the `node.js 8 macOS Installer (.pkg) `_" +msgstr "" + +#: ../../install/osx.rst:62 +msgid "2. Get the source code" +msgstr "" + +#: ../../install/osx.rst:64 +msgid "`Go to the page for our latest release `_." +msgstr "" + +#: ../../install/osx.rst:65 +msgid "Download the zip or tar.gz file." +msgstr "" + +#: ../../install/osx.rst:66 +msgid "Extract all files in it to a folder of your choice." +msgstr "" + +#: ../../install/osx.rst:71 +msgid "If you've used Git before, you might prefer to clone `our GitHub repository`_ instead. Don't forget to check out the |vrelease| tag or the master branch." +msgstr "" + +#: ../../install/osx.rst:73 +msgid "Even better, you might like to fork the repository first, to give yourself a little more freedom to make code changes on the fly (and potentially :ref:`contribute ` them to the project)." +msgstr "" + +#: ../../install/osx.rst:76 +msgid "3. Set up a new database" +msgstr "" + +#: ../../install/osx.rst:78 +msgid "You can skip steps 1--3 if this is not your first installation. Every Tabbycat installation requires its own database, but they can use the same login role if you like." +msgstr "" + +#: ../../install/osx.rst:80 +msgid "Open up a copy of the Terminal app, then copy/paste or type in::" +msgstr "" + +#: ../../install/osx.rst:84 +msgid "Hit enter then quit and reopen the Terminal app." +msgstr "" + +#: ../../install/osx.rst:86 +msgid "Create a new user account with a password, replacing ``myusername`` with whatever name you prefer. If you don't know what username to pick, use ``tabbycat``." +msgstr "" + +#: ../../install/osx.rst:92 +msgid "Create a new database, replacing ``mydatabasename`` with whatever name you prefer, probably the name of the tournament you're running::" +msgstr "" + +#: ../../install/osx.rst:96 +msgid "In terminal type in::" +msgstr "" + +#: ../../install/osx.rst:101 +msgid "4. Install Tabbycat" +msgstr "" + +#: ../../install/osx.rst:102 +msgid "Almost there!" +msgstr "" + +#: ../../install/osx.rst:104 +msgid "Navigate to your Tabbycat directory::" +msgstr "" + +#: ../../install/osx.rst:108 +msgid "Copy **settings/local.example** to **settings/local.py**. Find this part in your new **local.py**, and fill in the blanks as indicated:" +msgstr "" + +#: ../../install/osx.rst:123 +msgid "Optionally, replace the value in this line in the same file with your own time zone, as defined in the `IANA time zone database `_ (*e.g.*, ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``)::" +msgstr "" + +#: ../../install/osx.rst:127 +msgid "Ensure you are in the main Tabbycat directory (not the config folder where **settings_local.py** is and start a new virtual environment. We suggest the name ``venv``, though it can be any name you like::" +msgstr "" + +#: ../../install/osx.rst:131 +msgid "Run the ``activate`` script. This puts you \"into\" the virtual environment::" +msgstr "" + +#: ../../install/osx.rst:135 +msgid "Install Tabbycat's requirements into your virtual environment::" +msgstr "" + +#: ../../install/osx.rst:141 +msgid "Navigate to the **tabbycat** sub folder, initialize the database, compile the assets, and create a user account for yourself::" +msgstr "" + +#: ../../install/osx.rst:149 +msgid "Start Tabbycat!" +msgstr "" + +#: ../../install/osx.rst:155 +msgid "It should show something like this::" +msgstr "" + +#: ../../install/osx.rst:159 +msgid "Open your browser and go to the URL printed above. (In the above example, it's http://127.0.0.1:8000.) It should look something like the screenshot below. If it does, great! You've successfully installed Tabbycat." +msgstr "" + +#: ../../install/osx.rst:164 +msgid "Naturally, your database is currently empty, so proceed to :ref:`importing initial data `." +msgstr "" + +#: ../../install/osx.rst:167 +msgid "Starting up an existing Tabbycat instance" +msgstr "" + +#: ../../install/osx.rst:168 +msgid "To start your Tabbycat instance up again next time you use your computer::" +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/install/windows.po b/docs/locale/cs/LC_MESSAGES/install/windows.po new file mode 100644 index 00000000000..94ddc1a8efe --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/install/windows.po @@ -0,0 +1,317 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:56\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/windows.po\n" +"X-Crowdin-File-ID: 1323\n" +"Language: cs_CZ\n" + +#: ../../install/windows.rst:5 +msgid "Installing Locally on Windows" +msgstr "" + +#: ../../install/windows.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/windows.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/windows.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on Windows, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/windows.rst:14 +msgid "If you have Windows 10 and any experience with Linux, we recommend installing it on :ref:`Linux on Windows (WSL) ` instead, which is much easier than the process below." +msgstr "" + +#: ../../install/windows.rst:17 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/windows.rst:19 +msgid "You need to be familiar with command-line interfaces to get through this comfortably. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest. You just need to be prepared to bear with us. It'll take a while the first time, but it gets easier after that." +msgstr "" + +#: ../../install/windows.rst:21 +msgid "In these instructions, we'll use **Windows PowerShell**, a command-line interface that comes with every installation of Windows (since XP). The easiest way to find it (on Windows 7 and later) is to search for it in your Start Menu. Every line in the instructions that begins with ``>`` is a command that you need to run in PowerShell, but without the ``>``: that sign is a convention used in instructions to make it clear that it is a command you need to run." +msgstr "" + +#: ../../install/windows.rst:23 ../../install/windows.rst:81 +#: ../../install/windows.rst:104 +msgid "Advanced users" +msgstr "" + +#: ../../install/windows.rst:26 +msgid "If you wish to use an SQL engine other that PostgreSQL, most of Tabbycat should work, but a few features rely on SQL functions that aren't supported by all engines. To configure Tabbycat to use a different engine, set the ``DATABASES`` `Django setting `_ accordingly." +msgstr "" + +#: ../../install/windows.rst:29 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/windows.rst:31 +msgid "First, you need to install all of the software on which Tabbycat depends, if you don't already have it installed." +msgstr "" + +#: ../../install/windows.rst:36 +msgid "1(a). Python" +msgstr "" + +#: ../../install/windows.rst:37 +msgid "*Python is a popular programming language, and the language in which the core of Tabbycat is coded.*" +msgstr "" + +#: ../../install/windows.rst:39 +msgid "Download and install the latest version of Python 3.6 from the `Python website `_. In the installer, check the box to add Python to your PATH (see box below)." +msgstr "" + +#: ../../install/windows.rst:42 +msgid "Which file should I download?" +msgstr "" + +#: ../../install/windows.rst:44 +msgid "Regardless of if you have 64-bit or 32-bit Windows, choose the \"Windows x86 executable installer\"." +msgstr "" + +#: ../../install/windows.rst:46 +msgid "**Please take note:** Just after you open the installer, **check the \"Add Python 3.6 to PATH\" box**:" +msgstr "" + +#: ../../install/windows.rst:51 +msgid "To check that Python is installed correctly, open Windows PowerShell, type ``python`` and press Enter. It should look something like this. If you installed the 32-bit version, it will say ``32 bit`` instead of ``64 bit``." +msgstr "" + +#: ../../install/windows.rst:55 +msgid "(To exit Python, type ``exit()`` then press Enter.)" +msgstr "" + +#: ../../install/windows.rst:57 +msgid "**If you already have Python**, great! Some things to double-check:" +msgstr "" + +#: ../../install/windows.rst:59 +msgid "You must have at least Python 3.6 (Python 2 is not supported.)" +msgstr "" + +#: ../../install/windows.rst:60 +msgid "Your installation path must not have any spaces in it." +msgstr "" + +#: ../../install/windows.rst:61 +msgid "If that doesn't work, note that the following must be part of your ``PATH`` environment variable: ``C:\\Python36;C:\\Python36\\Scripts`` (or as appropriate for your installation directory). Follow `the instructions here `_ to add this to your path." +msgstr "" + +#: ../../install/windows.rst:66 +msgid "1(b). PostgreSQL" +msgstr "" + +#: ../../install/windows.rst:67 +msgid "*PostgreSQL is a database management system.*" +msgstr "" + +#: ../../install/windows.rst:69 +msgid "Go to the `PostgreSQL downloads page `_, then follow the link through to EnterpriseDB to download and install the latest version of PostgreSQL." +msgstr "" + +#: ../../install/windows.rst:71 +msgid "Once PostgreSQL is installed, the PostgreSQL service will run on your computer whenever you are using it. You might prefer to configure it so that it only runs when you want to run Tabbycat. To do this, open \"Services\" in your Control Panel on Windows, find the PostgreSQL service, and change its startup type to \"Manual\". This will tell it not to start whenever you log in. Then, if you want to run the server (so you can use Tabbycat), you can do so from \"Services\" by selecting the PostgreSQL service and clicking \"Start the service\"." +msgstr "" + +#: ../../install/windows.rst:74 +msgid "1(c). Git" +msgstr "" + +#: ../../install/windows.rst:75 +msgid "*Git is a version control system.*" +msgstr "" + +#: ../../install/windows.rst:77 +msgid "We won't use Git directly, but Node.js (which we install in the next step) requires Git to work. So, install the latest version for Windows from the `Git website `_." +msgstr "" + +#: ../../install/windows.rst:84 +msgid "If you already have `GitHub Desktop `_ installed, you might think that this would be good enough. Unfortunately, it's not---GitHub Desktop installs a portable version of Git. Node.js, on the other hand, requires the ``git`` to be in the ``PATH``, so it can call it directly. The easiest (but not only) way to do this is just to install Git from the link above." +msgstr "" + +#: ../../install/windows.rst:92 +msgid "1(d). Node.js/NPM" +msgstr "" + +#: ../../install/windows.rst:93 +msgid "*Node.js is a JavaScript runtime.*" +msgstr "" + +#: ../../install/windows.rst:95 +msgid "Download and run the node.js 8 Installer (.msi) for either `x64 versions `_ of Windows or `x86 versions `_." +msgstr "" + +#: ../../install/windows.rst:98 +msgid "2. Get the source code" +msgstr "" + +#: ../../install/windows.rst:100 +msgid "`Go to the page for our latest release `_." +msgstr "" + +#: ../../install/windows.rst:101 +msgid "Download the zip file." +msgstr "" + +#: ../../install/windows.rst:102 +msgid "Extract all files in it to a folder of your choice." +msgstr "" + +#: ../../install/windows.rst:107 +msgid "If you've used Git before, you might prefer to clone `our GitHub repository`_ instead. Don't forget to check out the |vrelease| tag or the master branch." +msgstr "" + +#: ../../install/windows.rst:109 +msgid "Even better, you might like to fork the repository first, to give yourself a little more freedom to make code changes on the fly (and potentially :ref:`contribute ` them to the project)." +msgstr "" + +#: ../../install/windows.rst:114 +msgid "3. Set up a new database" +msgstr "" + +#: ../../install/windows.rst:116 +msgid "You can skip steps 2 and 3 if this is not your first installation. Every Tabbycat installation requires its own database, but they can use the same login role if you like." +msgstr "" + +#: ../../install/windows.rst:118 +msgid "Open the **pgAdmin** tool, which you installed as part of installing PostgreSQL. In the object browser on the left, double-click the server marked \"(localhost:5432)\". Log in using the password you set during installation." +msgstr "" + +#: ../../install/windows.rst:120 +msgid "Right-click Login Roles, and click \"New Login Role…\"" +msgstr "" + +#: ../../install/windows.rst:124 +msgid "Fill in the New Login Role box as follows (everything not listed below can be left as-is):" +msgstr "" + +#: ../../install/windows.rst:126 +msgid "In the **Properties** tab, in **Role Name**, choose a user account name. (If you don't know what to pick, we suggest \"tabbycat\".)" +msgstr "" + +#: ../../install/windows.rst:127 +msgid "In the **Definition** tab, choose a **Password** and type it in **Password (again)**." +msgstr "" + +#: ../../install/windows.rst:129 +msgid "Then click OK. (Remember this user name and password, you'll need it later.)" +msgstr "" + +#: ../../install/windows.rst:131 +msgid "Right-click Databases, and click \"New Database…\"" +msgstr "" + +#: ../../install/windows.rst:135 +msgid "Fill in the New Database box as follows (everything not listed below can be left as-is):" +msgstr "" + +#: ../../install/windows.rst:137 +msgid "In the **Properties** tab, in **Name**, choose a database name (with no spaces in it)." +msgstr "" + +#: ../../install/windows.rst:138 +msgid "In the **Properties** tab, in **Owner**, type the name of the login role you just created." +msgstr "" + +#: ../../install/windows.rst:140 +msgid "Then click OK. (Remember the database name, you'll need it later.)" +msgstr "" + +#: ../../install/windows.rst:143 +msgid "4. Install Tabbycat" +msgstr "" + +#: ../../install/windows.rst:145 +msgid "Almost there!" +msgstr "" + +#: ../../install/windows.rst:147 +msgid "Open a Windows PowerShell. Navigate to the folder where you cloned/extracted Tabbycat. For example, if you installed it in ``C:\\Users\\myusername\\Documents\\GitHub\\tabbycat``, then run::" +msgstr "" + +#: ../../install/windows.rst:151 +msgid "Make a copy of **settings\\\\local.example** and rename it to **settings\\\\local.py**. Open your new **local.py** file. Find this part, and fill in the blanks (the empty quotation marks) as indicated:" +msgstr "" + +#: ../../install/windows.rst:166 +msgid "Optionally, replace the value in this line in the same file with your own time zone, as defined in the `IANA time zone database `_ (*e.g.*, ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``)::" +msgstr "" + +#: ../../install/windows.rst:170 +msgid "Start a new virtual environment. We suggest the name `venv`, though it can be any name you like::" +msgstr "" + +#: ../../install/windows.rst:174 +msgid "Run the `Activate.ps1` script. This puts you \"into\" the virtual environment::" +msgstr "" + +#: ../../install/windows.rst:178 +msgid "If you get an error message saying that the script isn't digitally signed, open a PowerShell with administrator privileges by right-clicking PowerShell in the Start meny and clicking \"Run as administrator\". Then run this command::" +msgstr "" + +#: ../../install/windows.rst:182 +msgid "Read the warning message, then type ``y`` to confirm. By default, the execution policy on Windows is ``Restricted``, which does not permit scripts like ``activate`` to be run. Changing it to ``RemoteSigned`` relaxes it to allow local scripts to be run without checking the signature." +msgstr "" + +#: ../../install/windows.rst:184 +msgid "Install Tabbycat's requirements." +msgstr "" + +#: ../../install/windows.rst:186 +msgid "If you installed **32-bit Python**::" +msgstr "" + +#: ../../install/windows.rst:192 +msgid "You might be wondering: I thought I already installed the requirements. Why am I installing more? And the answer is: Before, you were installing the requirements to create a Python virtual environment for Tabbycat to live in. Now, you're *in* the virtual environment, and you're installing everything required for *Tabbycat* to operate." +msgstr "" + +#: ../../install/windows.rst:194 +msgid "Initialize the database and create a user account for yourself::" +msgstr "" + +#: ../../install/windows.rst:202 +msgid "Start Tabbycat!" +msgstr "" + +#: ../../install/windows.rst:208 +msgid "It should show something like this::" +msgstr "" + +#: ../../install/windows.rst:212 +msgid "Open your browser and go to the URL printed above. (In the above example, it's http://127.0.0.1:8000/). It should look something like this:" +msgstr "" + +#: ../../install/windows.rst:216 +msgid "If it does, great! You've successfully installed Tabbycat." +msgstr "" + +#: ../../install/windows.rst:218 +msgid "Naturally, your database is currently empty, so proceed to :ref:`importing initial data `." +msgstr "" + +#: ../../install/windows.rst:221 +msgid "Starting up an existing Tabbycat instance" +msgstr "" + +#: ../../install/windows.rst:223 +msgid "To start your Tabbycat instance up again next time you use your computer, open a PowerShell and::" +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/install/wsl.po b/docs/locale/cs/LC_MESSAGES/install/wsl.po new file mode 100644 index 00000000000..8c8135158a3 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/install/wsl.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:56\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/wsl.po\n" +"X-Crowdin-File-ID: 1325\n" +"Language: cs_CZ\n" + +#: ../../install/wsl.rst:5 +msgid "Installing Locally on Linux on Windows (WSL)" +msgstr "" + +#: ../../install/wsl.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/wsl.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/wsl.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on Windows, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/wsl.rst:14 +msgid "Windows Subsystem for Linux is only available on Windows 10. If you have an older version of Windows, :ref:`install Tabbycat locally on Windows ` instead." +msgstr "" + +#: ../../install/wsl.rst:18 +msgid "Windows Subsystem for Linux (WSL) was taken out of beta in the `Windows 10 Fall Creators Update `_, which was released in October 2017. On Windows 10 computers, we now recommend this local installation method over :ref:`installing it directly on Windows `." +msgstr "" + +#: ../../install/wsl.rst:21 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/wsl.rst:23 +msgid "It will help a lot if you have some experience with Linux, but mainly you need to be familiar with command-line interfaces, and you should be willing to install and work with the `Windows Subsystem for Linux `_. You might need to be prepared to familiarise yourself with aspects of WSL not covered in these instructions. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest." +msgstr "" + +#: ../../install/wsl.rst:27 +msgid "A. Install Ubuntu on Windows" +msgstr "" + +#: ../../install/wsl.rst:29 +msgid "*If you already have a Linux distribution installed on your PC, skip to* :ref:`part B `." +msgstr "" + +#: ../../install/wsl.rst:31 +msgid "First, `check that you have the Fall Creators Update (build 1709) `_. If you don't, update Windows." +msgstr "" + +#: ../../install/wsl.rst:33 +msgid "Then, install the Windows Subsystem for Linux. For most people, this involves the following:" +msgstr "" + +#: ../../install/wsl.rst:35 +msgid "Enable the Windows Subsystem for Linux feature, by finding **Turn Windows features on or off** on the Start Menu, then checking the box for **Windows Subsystem for Linux** and clicking **OK**. You'll be prompted to restart your computer to make the changes take effect." +msgstr "" + +#: ../../install/wsl.rst:39 +msgid "Install Ubuntu by finding it on the Microsoft Store. For your convenience, `here's a direct link to Ubuntu on the Microsoft Store `_." +msgstr "" + +#: ../../install/wsl.rst:41 +msgid "Launch Ubuntu and follow the instructions. You'll be prompted to create a user account for your Ubuntu system." +msgstr "" + +#: ../../install/wsl.rst:43 +msgid "Some more detailed instructions, including some troubleshooting, are `available on Microsoft's website `_." +msgstr "" + +#: ../../install/wsl.rst:45 +msgid "Advanced users" +msgstr "" + +#: ../../install/wsl.rst:48 +msgid "You can, of course, use any Linux distribution that Windows supports. We just suggest Ubuntu because it's the most well-known (and the one that we use)." +msgstr "" + +#: ../../install/wsl.rst:53 +msgid "B. Install Tabbycat" +msgstr "" + +#: ../../install/wsl.rst:55 +msgid "You now have a Linux subsystem running on your computer, so head over to the :ref:`instructions to install Tabbycat locally on Linux ` and follow those (in full)." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/use/finishing-a-tournament.po b/docs/locale/cs/LC_MESSAGES/use/finishing-a-tournament.po new file mode 100644 index 00000000000..d6ddc438316 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/use/finishing-a-tournament.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:56\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/finishing-a-tournament.po\n" +"X-Crowdin-File-ID: 1327\n" +"Language: cs_CZ\n" + +#: ../../use/finishing-a-tournament.rst:5 +msgid "Finishing a Tournament" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:7 +msgid "This page outlines some final steps to take after the conclusion of outrounds." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:10 +msgid "Tab Release" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:12 +msgid "Tabs can be released using the *Tab released* option under **Setup** > **Configuration**. Tabbycat offers the following system tabs:" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:14 +msgid "Team Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:15 +msgid "Speakers Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:16 +msgid "Replies Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:17 +msgid "Motions Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:19 +msgid "You can configure the team, speakers and replies tab to display only a certain number of speakers, *e.g.*, to show only a \"Top 10 Speakers\" tab." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:21 +msgid "If you defined any speaker categories (for example, Novice, ESL or EFL), a tab for each category marked \"public\" can also be released using the **Release speaker category tabs to public**. You can similarly limit each of these tabs to display just the top few speakers, in the definition of the speaker categories. The speaker categories not marked public are *not* released by this option." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:23 +msgid "You can also redact individual speaker's identifying details (name, team, and institution) from the public individual tabs. You can do so by going into the **Edit Database** area, going to *Participants > Speakers*, finding the speaker and clicking the **Anonymous** box (and saving)." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:25 +msgid "Public tab pages are cached for performance reasons. This means that any changes that affect a tab page (say redacting a speaker or changing a speaker score) may not show up on the public site for up to an hour." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:28 +msgid "Wrapping Up" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:30 +msgid "You probably want to turn off the *Public ballots*, *Public feedback*, *Feedback progress*, and *Public draw* features under **Configuration** at this stage as they no longer have any use." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:32 +msgid "You also want to go into the **Edit Database** area, find the tournament and hit \"release all\" so that the results for the final round can be released." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/use/importing-data.po b/docs/locale/cs/LC_MESSAGES/use/importing-data.po new file mode 100644 index 00000000000..f135c1aec8c --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/use/importing-data.po @@ -0,0 +1,236 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:56\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/importing-data.po\n" +"X-Crowdin-File-ID: 1329\n" +"Language: cs_CZ\n" + +#: ../../use/importing-data.rst:5 +msgid "Importing Initial Data" +msgstr "" + +#: ../../use/importing-data.rst:7 +msgid "Once you've got Tabbycat installed, the next step is to import data for the tournament: that is, import details of teams, speakers, adjudicators and rounds. There are a few ways to do this, each with their advantages and disadvantages." +msgstr "" + +#: ../../use/importing-data.rst:9 +msgid "To help you decide which to choose, here's a summary:" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Method" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Best for" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Drawcard" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Drawback" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "**Demonstration data**" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "Trying out Tabbycat" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "Loads sample data in one click" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "Not for use with real tournaments" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "**Simple importer**" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "Small and medium-sized tournaments" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "Easy to use" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "Only deals with basic data" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "**Edit database**" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "Adding data not handled by the simple importer or editing existing data" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "Can handle all types of information" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "Adding large amounts of data is time consuming" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "``importtournament`` **command**" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "Large tournaments" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "Easier to repeat, can handle most formats of information" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "Requires basic knowledge of how to use a command line interface" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "**Developing your own importer**" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "Large tournaments with custom needs" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "Easier to repeat, will take information in whatever format it is already in" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "Requires background in Python and and learning about the importer classes" +msgstr "" + +#: ../../use/importing-data.rst:41 +msgid "Demonstration data" +msgstr "" + +#: ../../use/importing-data.rst:42 +msgid "If you're just learning or experimenting with Tabbycat, there are two demonstration datasets available, each with a sample set of teams, adjudicators, *etc.*, so that you can immediately start running rounds. Just be aware that these probably won't relate to anyone at your real-life tournament." +msgstr "" + +#: ../../use/importing-data.rst:44 +msgid "To load a demonstration dataset, click **New Tournament** link on the home page (once logged in as admin). You'll see a page titled \"Create New Tournament\". Scroll to the bottom of this page and click on one of the links at the bottom." +msgstr "" + +#: ../../use/importing-data.rst:47 +msgid "Simple importer" +msgstr "" + +#: ../../use/importing-data.rst:48 +msgid "The simple importer is the easiest way to get a tournament going, and we recommend it for small- and medium-sized tournaments. It allows you to add institutions, teams, adjudicators, venues, venue categories and venue constraints. (If you need to add anything else, use the :ref:`Edit Database area ` instead.)" +msgstr "" + +#: ../../use/importing-data.rst:50 +msgid "To get started, create a new tournament using the **New Tournament** link on the home page (once logged in as admin). It'll ask you for a few basic pieces of information." +msgstr "" + +#: ../../use/importing-data.rst:54 +msgid "Then, once you're in your tournament, click **Setup** in the left-hand menu, then **Import Data**, to open the simple importer." +msgstr "" + +#: ../../use/importing-data.rst:58 +msgid "You first need to add institutions. Once institutions are added, you can then add teams and adjudicators in the relevant sections. Each of these is a two-step process:" +msgstr "" + +#: ../../use/importing-data.rst:60 +msgid "For **institutions** and **venues**, it will first ask you to copy-paste a list of names and properties in a comma-separated table format. The second step is to confirm individual fiels." +msgstr "" + +#: ../../use/importing-data.rst:61 +msgid "For **teams** and **adjudicators**, it will first ask you how many teams/adjudicators to add for each institution (or who lack an institutional affiliation). The second step is to fill in their details, for example, names." +msgstr "" + +#: ../../use/importing-data.rst:69 +msgid "Finally, if you would like to use venue categories and/or :ref:`venue constraints `, you can do so using the two last sections of the simple importer." +msgstr "" + +#: ../../use/importing-data.rst:71 +msgid "If copying and pasting from a spreadsheet, an easy way to make a comma-separated table is to save a spreadsheet with the relevant information as a \\*.csv file, then open this file in a plain text editor (such as Notepad or TextEdit), and copying it from there." +msgstr "" + +#: ../../use/importing-data.rst:76 +msgid "Editing the database" +msgstr "" + +#: ../../use/importing-data.rst:77 +msgid "Sometimes, the simple importer just isn't enough---whether because you need more customization than the simple importer handles (*e.g.* adjudicator feedback questions), or because some participants changed their details after you imported the inital data. In this case, the easiest thing to do is to edit the database via the Django administrative interface (under Setup > Edit Database)." +msgstr "" + +#: ../../use/importing-data.rst:79 +msgid "The general pattern goes like this: Go to **Setup > Edit Database**, find the type of object you wish to add/change, and click \"Add\" or \"Change\". Then, fill in what you need to and save the object." +msgstr "" + +#: ../../use/importing-data.rst:81 +msgid "The Edit Database area is very powerful, and naturally if you mess things up, you can insert potentially catastrophic inconsistencies into the database. For participant information this is hard to do, but it's worth keeping in mind." +msgstr "" + +#: ../../use/importing-data.rst:86 +msgid "The ``importtournament`` command on local installations" +msgstr "" + +#: ../../use/importing-data.rst:88 +msgid "We've written a management command called ``importtournament`` to help automate the tournament set-up. The script, however, is neither foolproof nor comprehensive, so you might find you need to modify things slightly if your tournament structure is different from ours. Be prepared to try this a few times to get it to work. Nonetheless, this is probably the fastest way to set up a tournament." +msgstr "" + +#: ../../use/importing-data.rst:90 +msgid "Copy and rename the ``data/demo`` folder" +msgstr "" + +#: ../../use/importing-data.rst:91 +msgid "See the CSV files in the new folder, and add/replace the data as per your tournament. Note that the institutions (*i.e.* first column) in the ``speakers.csv`` and ``adjudicators.csv`` files must match the institutions in the second column of the ``institutions.csv`` file. And that all CSV files must end with a blank line." +msgstr "" + +#: ../../use/importing-data.rst:92 +msgid "Use this command, replacing ``YOUR_DATA_DIR`` with your new folder's name. (Square brackets indicate optional arguments; if you use them, omit the square brackets. All of them relate to the name of your tournament.)" +msgstr "" + +#: ../../use/importing-data.rst:98 +msgid "This script has a number of options. They're worth taking a look at before you run the script. For details, see::" +msgstr "" + +#: ../../use/importing-data.rst:102 +msgid "Assuming the command completes successfully without errors, you should double check the data in the Django interface, as described above in :ref:`import-edit-database`. In particular you should check that the *Rounds* have the correct draw types and that silent rounds have been marked correctly." +msgstr "" + +#: ../../use/importing-data.rst:105 +msgid "``importtournament`` on Heroku installs" +msgstr "" + +#: ../../use/importing-data.rst:107 +msgid "Instructions for using the ``importtournament`` command on Heroku installations are in steps 4 and 5 of :ref:`install-heroku`. The recommended procedure is first to import the tournament into a local installation, :ref:`as described above `, and then to push the local database to Heroku using the ``heroku pg:push`` command." +msgstr "" + +#: ../../use/importing-data.rst:110 +msgid "Developing your own importer" +msgstr "" + +#: ../../use/importing-data.rst:112 +msgid "If our suggested file formats cause you headaches, it might be easier to write your own importer. We have a generic importer framework that should make this easier, so for some tournaments it might (very conceivably) be faster to write your own importer to conform to your data, than it is to make your data conform to our importer. You need a background in Python in order to do this. For more details, see :ref:`tournament-data-importers`." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/use/running-a-tournament.po b/docs/locale/cs/LC_MESSAGES/use/running-a-tournament.po new file mode 100644 index 00000000000..e1b5e9d1701 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/use/running-a-tournament.po @@ -0,0 +1,196 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:56\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/running-a-tournament.po\n" +"X-Crowdin-File-ID: 1331\n" +"Language: cs_CZ\n" + +#: ../../use/running-a-tournament.rst:5 +msgid "Running a Tournament" +msgstr "" + +#: ../../use/running-a-tournament.rst:7 +msgid "Once you've finished the steps in :ref:`starting-a-tournament`, you're ready to go! This page outlines what you would do for each round during the tournament. After the tournament, proceed to :ref:`finishing-a-tournament`." +msgstr "" + +#: ../../use/running-a-tournament.rst:9 +msgid "This is all done from the admin area (*i.e.*, by the tab director or adjudication core member). In the admin area, tournament-wide pages (feedback, standings, and break) are at the top of the left-hand menu, while round-specific pages (availability, draw, display, motions, and results) are in dropdown's organised by each round's abbreviation." +msgstr "" + +#: ../../use/running-a-tournament.rst:11 +msgid "The basic workflow for each round is:" +msgstr "" + +#: ../../use/running-a-tournament.rst:13 +msgid ":ref:`Mark the teams, adjudicators, and venues present as available `" +msgstr "" + +#: ../../use/running-a-tournament.rst:14 +msgid ":ref:`Generate the draw ` and allocate the adjudicators" +msgstr "" + +#: ../../use/running-a-tournament.rst:15 +msgid ":ref:`Show/release the draw `" +msgstr "" + +#: ../../use/running-a-tournament.rst:16 +msgid ":ref:`Release/enter ` the motions" +msgstr "" + +#: ../../use/running-a-tournament.rst:17 +msgid "Have the debates" +msgstr "" + +#: ../../use/running-a-tournament.rst:18 +msgid ":ref:`Enter results `" +msgstr "" + +#: ../../use/running-a-tournament.rst:19 +msgid ":ref:`Advance to the next round `" +msgstr "" + +#: ../../use/running-a-tournament.rst:24 +msgid "Availability" +msgstr "" + +#: ../../use/running-a-tournament.rst:26 +msgid "**Set availability.** For each round, you need to set the venue, team and adjudicator availability. If any of those are not marked as available they will not be used within the draw; so this feature is mostly useful for when adjudicators or venues are only available for certain rounds." +msgstr "" + +#: ../../use/running-a-tournament.rst:28 +msgid "To do this, click the round in the menu, then click **Check-Ins**. Here you can then go to the availability pages for venue, teams, and adjudicators, or check in everything at once. When you've set everything appropriately use the **Generate Draw** button in the top right to advance." +msgstr "" + +#: ../../use/running-a-tournament.rst:34 +msgid "You can set availabilities in advance of the current round — ie if you know the venue/adjudicator schedules their availabilities can be set ahead of time." +msgstr "" + +#: ../../use/running-a-tournament.rst:37 +msgid "Generating the draw" +msgstr "" + +#: ../../use/running-a-tournament.rst:39 +msgid "**Confirm the draft draw**. After advancing from availability section you will first be shown a draft draw that details how the draw was formulated, pointing out pull-ups and conflict swaps and the like." +msgstr "" + +#: ../../use/running-a-tournament.rst:43 +msgid "The draft draw is for you to double-check. While there are some basic tests on the draw algorithm, it never hurts to sanity-check it again." +msgstr "" + +#: ../../use/running-a-tournament.rst:45 +msgid "If you *do* find something wrong with a draft draw, you can edit the match-ups, but please also let us know what the problem was! You can find our contact details in the :ref:`authors` section." +msgstr "" + +#: ../../use/running-a-tournament.rst:47 +msgid "Once on the confirmed draw page you can click **Edit Adjudicators**." +msgstr "" + +#: ../../use/running-a-tournament.rst:51 +msgid "**Allocate the adjudicators**. Changes here will auto-save; feel free to return to the **Draw** when needed. See :ref:`adjudicator allocation ` for more details about the allocation process." +msgstr "" + +#: ../../use/running-a-tournament.rst:55 +msgid "If you are using venue constraints the **Draw** page may prompt you to Auto Allocate the venues used to satisfy those constraints; see :ref:`venue-constraints ` for more details. Regardless of whether you are using venue constraints or not you can change the Venues per-debate in the **Edit Venues** area." +msgstr "" + +#: ../../use/running-a-tournament.rst:60 +msgid "Releasing the draw" +msgstr "" + +#: ../../use/running-a-tournament.rst:62 +msgid "Once you're happy with your adjudicator allocation, you're ready to start the round." +msgstr "" + +#: ../../use/running-a-tournament.rst:64 +msgid "**Release to general assembly.** From the *Display* page for that round, go to **Show by Venue** or **Show by Team** (whichever you prefer). Then put it up on the projector. There are automatic scroll buttons and buttons for changing text sizing." +msgstr "" + +#: ../../use/running-a-tournament.rst:68 +msgid "**Release to public.** If you're using the public draw function (where the draw is posted publicly to your Tabbycat website) use the **Release to Public** button to allow the page to display." +msgstr "" + +#: ../../use/running-a-tournament.rst:72 +msgid "To avoid the site from being overloaded by anxious refreshers, we recommend that large tournaments not release the draw to the public until after it's been seen by general assembly. That said, note that due to caching there can be a delay of up to 1 minute between when a draw is released and when it first shows up on the public site." +msgstr "" + +#: ../../use/running-a-tournament.rst:73 +msgid "Tabbycat can be set to send emails once the draw is released to adjudicators informing them of their assignments for convenience." +msgstr "" + +#: ../../use/running-a-tournament.rst:78 +msgid "Entering and Releasing Motions" +msgstr "" + +#: ../../use/running-a-tournament.rst:80 +msgid "Tabbycat is agnostic as to whether you enter motions into Tabbycat before or after they are shown publicly. However, they must be entered *at some point* before ballots are entered." +msgstr "" + +#: ../../use/running-a-tournament.rst:82 +msgid "**Enter the motion text.** Either before or after their public release motions can be entered in the **Motions** section for that round." +msgstr "" + +#: ../../use/running-a-tournament.rst:84 +msgid "**Release to general assembly.** If you are entering motions *before* they are publicly revealed note that there is a *Display Motions* button in the **Display** area that allows you to do a Power Point style motion release." +msgstr "" + +#: ../../use/running-a-tournament.rst:86 +msgid "**Release to public.** As with draws, if you have the *enable public view of motions* setting configured your Tabbycat website will display a running list of motions from the tournament. When this is on, using the **Release Motions to Public** button on the **Motions** page will mark the current set of motions as able to be displayed on this page." +msgstr "" + +#: ../../use/running-a-tournament.rst:91 +msgid "Entering Results" +msgstr "" + +#: ../../use/running-a-tournament.rst:93 +msgid "Enter debate results and feedback as they come in (and/or allow online entry of results and feedback)." +msgstr "" + +#: ../../use/running-a-tournament.rst:95 +msgid "Both results and feedback entered in the tab room or online need to be confirmed before the results are counted. To confirm a debate ballot and the debate as a whole, the confirmed checkbox under *Ballot Status* should be ticket in addition to the *Debate Status* being set to Confirmed." +msgstr "" + +#: ../../use/running-a-tournament.rst:97 +msgid "Note that you can track data entry progress from the **Overview** page for the tournament." +msgstr "" + +#: ../../use/running-a-tournament.rst:99 +msgid "See :ref:`data-entry` for more details about the data entry process." +msgstr "" + +#: ../../use/running-a-tournament.rst:101 +msgid "We strongly recommend entering all data using the assistant area, not the admin area. This is because the admin area (intentionally) does not enforce the data confirmation procedure." +msgstr "" + +#: ../../use/running-a-tournament.rst:106 +msgid "Advancing to the next round" +msgstr "" + +#: ../../use/running-a-tournament.rst:108 +msgid "Once you've got all the results entered and confirmed, you're ready to progress to the next round. This can be done by going to the **Results** area, and then using the **Advance to Next Round** button." +msgstr "" + +#: ../../use/running-a-tournament.rst:112 +msgid "When you advance to the next round, if you've enabled public results, the results for the current round (which is now the previous round) will be released to the public **unless** the round is marked as \"silent\" in the database. So if you're careful about when results should be released, don't change the current round until you're ready to release those results." +msgstr "" + +#: ../../use/running-a-tournament.rst:114 +msgid "There is a design assumption that you will always want to release results for non-silent rounds before you start working on the draw for the next round. If this isn't true for you, please get in touch with us so that we know. The workaround is to make all rounds silent, then unsilent them when you're ready to release results." +msgstr "" + +#: ../../use/running-a-tournament.rst:116 +msgid "Emails can be sent to speakers informing them of their team's win/loss/points record before advancing rounds. This is independent from whether the whole round's results are released to the public." +msgstr "" + diff --git a/docs/locale/cs/LC_MESSAGES/use/starting-a-tournament.po b/docs/locale/cs/LC_MESSAGES/use/starting-a-tournament.po new file mode 100644 index 00000000000..4b37069dea7 --- /dev/null +++ b/docs/locale/cs/LC_MESSAGES/use/starting-a-tournament.po @@ -0,0 +1,196 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2021-01-17 20:56\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/starting-a-tournament.po\n" +"X-Crowdin-File-ID: 1333\n" +"Language: cs_CZ\n" + +#: ../../use/starting-a-tournament.rst:5 +msgid "Starting a Tournament" +msgstr "" + +#: ../../use/starting-a-tournament.rst:7 +msgid "This page outlines a few things you should do at the start of a tournament, after you've :ref:`imported the initial data `. Once you've done these, proceed to :ref:`running a tournament `." +msgstr "" + +#: ../../use/starting-a-tournament.rst:9 +msgid "Tabbycat is developed for — and tested on — modern web browsers. If you are using **Internet Explorer versions 8, 7, or 6** the interface may look odd or not function properly. Switch to a newer browser if possible." +msgstr "" + +#: ../../use/starting-a-tournament.rst:13 +msgid "Tournament configuration" +msgstr "" + +#: ../../use/starting-a-tournament.rst:15 +msgid "After importing all your data you can log into the site as an administrator by loading up the homepage and then using the **Login** button in the lower-right. From there you should go to the administration section of your tournament, and then go to the tournament configuration page by clicking **Setup** then **Configuration** in the menu." +msgstr "" + +#: ../../use/starting-a-tournament.rst:17 +msgid "Here you can adjust the debate rules and interface options to your liking then hit **Save** when finished. We also offer a number of presets that apply particular rule sets (such as the Australs rules) or feature sets (such as displaying information normally released during briefs on the website)." +msgstr "" + +#: ../../use/starting-a-tournament.rst:20 +msgid "Special data types and options" +msgstr "" + +#: ../../use/starting-a-tournament.rst:22 +msgid "There are a few optional fields that are not covered in the initial data templates, in the visual importer, or that may only be relevant in particular scenarios. It's worth going over these quickly to see if they are needed for your tournament. You can view and edit these fields in the **Edit Database** area (link is in the menu under **Setup**)." +msgstr "" + +#: ../../use/starting-a-tournament.rst:25 +msgid "Adjudicator Feedback > Adj Feedback Questions" +msgstr "" + +#: ../../use/starting-a-tournament.rst:25 +msgid "As described in :ref:`adjudicator-feedback`, the types of questions that can be posed for adjudicator feedback are able to be heavily customised. If you are customising your feedback form it should be done here, and before the tournament starts." +msgstr "" + +#: ../../use/starting-a-tournament.rst:30 +msgid "Authentication and Authorisation > Users" +msgstr "" + +#: ../../use/starting-a-tournament.rst:28 +msgid "Here you can add new admin users (those with full access) as well as new assistant users those (who can only do common data-entry tasks but not edit or view the full tab interface). See :ref:`user-accounts` for information on how to do this." +msgstr "" + +#: ../../use/starting-a-tournament.rst:30 +msgid "The people you're adding accounts for should be physically present when you do this, so that they can enter their password." +msgstr "" + +#: ../../use/starting-a-tournament.rst:33 +msgid "Participants > Regions" +msgstr "" + +#: ../../use/starting-a-tournament.rst:33 +msgid "Optionally, each institution may belong to a *Region*. An institution's region is used within the adjudicator allocation process to visually identify teams and adjudicators for the purposes of highlighting diversity issues. These have traditionally been used for geographic regions (such as Oceania), although could be repurposed as arbitrary markers of information — for example they could be used to denote teams from a particular State, institutional size, or circuit." +msgstr "" + +#: ../../use/starting-a-tournament.rst:41 +msgid "Participants > Adjudicators" +msgstr "" + +#: ../../use/starting-a-tournament.rst:36 +msgid "An adjudicators *Base Score* represents their relative ability to judge important rooms, where adjudicators with higher numbers will, relative to the other adjudicators, be placed in better roles (ie as Chairs) and in the rooms you deem most important in each round. If you are running a small tournament, and plan to do your allocations manually, you can set everyone's number to the same amount." +msgstr "" + +#: ../../use/starting-a-tournament.rst:37 +msgid "For larger tournaments, particularly those that collect feedback, see the :ref:`adjudicator-feedback` section for more information on how base scores and other variables influence the automated allocation process." +msgstr "" + +#: ../../use/starting-a-tournament.rst:38 +msgid "Regardless of how you score the adjs, if you have changed the minimimum chairing score in settings, you'll want to make sure there are enough adjudicators that meet this minimum threshold or the automated allocator may not function effectively." +msgstr "" + +#: ../../use/starting-a-tournament.rst:39 +msgid "All types of conflicts are assigned to the relevant adjudicator. Adjudicator's can be conflicted against particular teams, particular institutions, and other adjudicators. Each of these is a located in a tab at the top of the page." +msgstr "" + +#: ../../use/starting-a-tournament.rst:40 +msgid "Each adjudicator's gender is optional and is not displayed publicly; it is only shown in the adjudicator allocation interface" +msgstr "" + +#: ../../use/starting-a-tournament.rst:41 +msgid "Each adjudicator's pronoun is optional, and is only displayed if you use tabbycat to print the ballots and feedback sheets for each round." +msgstr "" + +#: ../../use/starting-a-tournament.rst:48 +msgid "Participants > Teams" +msgstr "" + +#: ../../use/starting-a-tournament.rst:44 +msgid "Note the distinction here between full name and short name. The latter is used on pages where space is tight, such as the draw displays or the adjudicator allocation interface." +msgstr "" + +#: ../../use/starting-a-tournament.rst:45 +msgid "Note that \"Uses institutional prefix\" option. With this option on, a team from the 'MUDS' insttution named '1' or 'Gold' would be displayed as 'MUDS 1' or 'MUDS Gold'." +msgstr "" + +#: ../../use/starting-a-tournament.rst:46 +msgid "At present, setting a team's type to Bye, Swing, or Composite only affects very particular circumstances, and should be considered unnecessary." +msgstr "" + +#: ../../use/starting-a-tournament.rst:47 +msgid "If you do have composite teams, and wish to have them be conflicted by adjudicators from each respective instutution, you'll need to add a new team conflict to each adjudicator from each institution." +msgstr "" + +#: ../../use/starting-a-tournament.rst:48 +msgid "If you do have swing teams, or teams that are otherwise ineligible for breaking, this is typically handled through the breaks interface in the main site" +msgstr "" + +#: ../../use/starting-a-tournament.rst:52 +msgid "Participants > Speakers" +msgstr "" + +#: ../../use/starting-a-tournament.rst:51 +msgid "Each speaker's gender is optional and is not displayed publicly; it is only shown in the adjudicator allocation interface" +msgstr "" + +#: ../../use/starting-a-tournament.rst:52 +msgid "Each speaker's pronoun is optional, and is only displayed if you use tabbycat to print the ballots and feedback sheets for each round." +msgstr "" + +#: ../../use/starting-a-tournament.rst:55 +msgid "Tournaments > Divisions" +msgstr "" + +#: ../../use/starting-a-tournament.rst:55 +msgid "At the moment divisions are only useful for running tournaments that use round-robin style draws. Here, each division represents a draw pool within a round. Division support here is under development and not tested in many scenarios." +msgstr "" + +#: ../../use/starting-a-tournament.rst:58 +msgid "Tournaments > Tournaments" +msgstr "" + +#: ../../use/starting-a-tournament.rst:58 +msgid "Note that tournaments can have a welcome message (useful for displaying maps and other information on the homepage)." +msgstr "" + +#: ../../use/starting-a-tournament.rst:61 +msgid "Venues > Venues" +msgstr "" + +#: ../../use/starting-a-tournament.rst:61 +msgid "A venue's priority determines its priority in being allocated. If there are 20 debates, and 30 rooms, the 20 rooms with the highest priorities will be chosen. Furthermore, if particular debates are marked as important during the draw process, those debates will receive the rooms with the highest priorities. In this way you can give close rooms to members of the adj core, or give larger rooms to debates that will draw a large audience." +msgstr "" + +#: ../../use/starting-a-tournament.rst:64 +msgid "Venues > Venue Categories" +msgstr "" + +#: ../../use/starting-a-tournament.rst:64 +msgid "Venue categories are not needed for most kinds of tournaments. Their purpose is to classify particular venues, such as venues all within one building or venues that are accessible. Once assigned these categories can display in the venue's name — ie \"Red 01.01\" or be used to assign Venue Constraints that match particular teams, institutions, or adjudicators to particular types of venues." +msgstr "" + +#: ../../use/starting-a-tournament.rst:67 +msgid "Information for the briefing" +msgstr "" + +#: ../../use/starting-a-tournament.rst:69 +msgid "If you're using the online submissions feature, some things you should probably mention in the briefing:" +msgstr "" + +#: ../../use/starting-a-tournament.rst:71 +msgid "Adjudicators must fill out ballots completely, including motions and venues—they are entered into the system." +msgstr "" + +#: ../../use/starting-a-tournament.rst:72 +msgid "There is a static URL for each person's ballots and feedback forms. It can be bookmarked, or the page can refreshed after each round." +msgstr "" + +#: ../../use/starting-a-tournament.rst:73 +msgid "If people submit a result or feedback online, they should indicate that they have done so on the paper copy of their ballot." +msgstr "" + diff --git a/tabbycat/actionlog/locale/cs/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..61217abc9a7 --- /dev/null +++ b/tabbycat/actionlog/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,323 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 920\n" + +#: actionlog/apps.py +msgid "Action Log" +msgstr "" + +#: actionlog/models.py +msgid "Discarded ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Checked in ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Created ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Edited ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Confirmed ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Submitted ballot set from the public form" +msgstr "" + +#: actionlog/models.py +msgid "Submitted feedback from the public form" +msgstr "" + +#: actionlog/models.py +msgid "Saved feedback" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator base score" +msgstr "" + +#: actionlog/models.py +msgid "Set adjudicator note" +msgstr "" + +#: actionlog/models.py +msgid "Saved adjudicator allocation" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated adjudicators" +msgstr "" + +#: actionlog/models.py +msgid "Saved a room manual edit" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated rooms" +msgstr "" + +#: actionlog/models.py +msgid "Edited room categories" +msgstr "" + +#: actionlog/models.py +msgid "Edited room constraints" +msgstr "" + +#: actionlog/models.py +msgid "Created draw" +msgstr "" + +#: actionlog/models.py +msgid "Confirmed draw" +msgstr "" + +#: actionlog/models.py +msgid "Regenerated draw" +msgstr "" + +#: actionlog/models.py +msgid "Released draw" +msgstr "" + +#: actionlog/models.py +msgid "Unreleased draw" +msgstr "" + +#: actionlog/models.py +msgid "Saved a matchup manual edit" +msgstr "" + +#: actionlog/models.py +msgid "Saved the sides status of a matchup" +msgstr "" + +#: actionlog/models.py +msgid "Saved divisions" +msgstr "" + +#: actionlog/models.py +msgid "Added/edited motion" +msgstr "" + +#: actionlog/models.py +msgid "Released motions" +msgstr "" + +#: actionlog/models.py +msgid "Unreleased motions" +msgstr "" + +#: actionlog/models.py +msgid "Auto-prioritized debate importance" +msgstr "" + +#: actionlog/models.py +msgid "Edited debate importance" +msgstr "" + +#: actionlog/models.py +msgid "Changed adjudicator breaking status" +msgstr "" + +#: actionlog/models.py +msgid "Edited break eligibility" +msgstr "" + +#: actionlog/models.py +msgid "Edited break categories" +msgstr "" + +#: actionlog/models.py +msgid "Generated the team break for all categories" +msgstr "" + +#: actionlog/models.py +msgid "Edited breaking team remarks and updated all team breaks" +msgstr "" + +#: actionlog/models.py +msgid "Edited breaking team remarks and updated this team break" +msgstr "" + +#: actionlog/models.py +msgid "Edited breaking team remarks" +msgstr "" + +#: actionlog/models.py +msgid "Set start time" +msgstr "" + +#: actionlog/models.py +msgid "Advanced the current round to" +msgstr "" + +#: actionlog/models.py +msgid "Marked round as completed" +msgstr "" + +#: actionlog/models.py +msgid "Edited teams availability" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicators availability" +msgstr "" + +#: actionlog/models.py +msgid "Edited room availability" +msgstr "" + +#: actionlog/models.py +msgid "Edited tournament options" +msgstr "" + +#: actionlog/models.py +msgid "Edited speaker category eligibility" +msgstr "" + +#: actionlog/models.py +msgid "Edited speaker categories" +msgstr "" + +#: actionlog/models.py +msgid "Imported institutions using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Imported rooms using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Imported teams using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Imported adjudicators using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Updated adjudicator scores in bulk" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator-team conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator-adjudicator conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator-institution conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Edited team-institution conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Generated check in identifiers for speakers" +msgstr "" + +#: actionlog/models.py +msgid "Generated check in identifiers for adjudicators" +msgstr "" + +#: actionlog/models.py +msgid "Generated check in identifiers for rooms" +msgstr "" + +#: actionlog/models.py +msgid "Created preformed panels" +msgstr "" + +#: actionlog/models.py +msgid "Auto-prioritized preformed panels" +msgstr "" + +#: actionlog/models.py +msgid "Edited preformed panel importance" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated adjudicators to preformed panels" +msgstr "" + +#: actionlog/models.py +msgid "Edited preformed panel adjudicator" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated preformed panels to debates" +msgstr "" + +#: actionlog/models.py +msgid "type" +msgstr "" + +#: actionlog/models.py +msgid "timestamp" +msgstr "" + +#: actionlog/models.py +msgid "user" +msgstr "" + +#: actionlog/models.py +msgid "IP address" +msgstr "" + +#: actionlog/models.py +msgid "tournament" +msgstr "turnaje" + +#: actionlog/models.py +msgid "round" +msgstr "" + +#: actionlog/models.py +msgid "content type" +msgstr "" + +#: actionlog/models.py +msgid "object ID" +msgstr "" + +#: actionlog/models.py +msgid "action log" +msgstr "" + +#: actionlog/models.py +msgid "action log entries" +msgstr "" + +#: actionlog/models.py +msgid "All log entries require at least one of a user and an IP address." +msgstr "" + +#: actionlog/models.py +msgid "anonymous" +msgstr "" + diff --git a/tabbycat/adjallocation/locale/cs/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..4b78d291436 --- /dev/null +++ b/tabbycat/adjallocation/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,475 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 922\n" + +#: adjallocation/allocators/base.py +msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." +msgstr "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." +msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." +msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjallocation/allocators/hungarian.py +msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." +msgstr "" + +#: adjallocation/allocators/hungarian.py +msgid "There are no debates for this round. Maybe you haven't created a draw yet?" +msgstr "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." +msgstr "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." +msgstr "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." +msgstr "" + +#: adjallocation/apps.py +msgid "Adjudicator Allocation" +msgstr "" + +#: adjallocation/consumers.py +msgid "Draw is already released, unrelease draw to redo auto-allocations." +msgstr "" + +#: adjallocation/consumers.py +msgid "Draw is not confirmed, confirm draw to run auto-allocations." +msgstr "" + +#: adjallocation/consumers.py +msgid "There are no preformed panels available to allocate." +msgstr "" + +#: adjallocation/consumers.py +msgid "Successfully auto-allocated preformed panels to debates." +msgstr "" + +#: adjallocation/consumers.py +#, python-format +msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" +msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjallocation/consumers.py +msgid "Successfully auto-allocated adjudicators to debates." +msgstr "" + +#: adjallocation/consumers.py +msgid "There aren't any panels to fill. Create panels first." +msgstr "" + +#: adjallocation/consumers.py +#, python-format +msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" +msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjallocation/consumers.py +msgid "Successfully auto-allocated adjudicators to preformed panels." +msgstr "" + +#: adjallocation/consumers.py +msgid "You have no break category set as 'is general' so debate importances can't be calculated." +msgstr "" + +#: adjallocation/consumers.py +msgid "Succesfully auto-prioritised debates." +msgstr "" + +#: adjallocation/consumers.py +msgid "You have no break category set as 'is general' so panel importances can't be calculated." +msgstr "" + +#: adjallocation/consumers.py +msgid "Succesfully auto-prioritised preformed panels." +msgstr "" + +#: adjallocation/consumers.py +msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." +msgstr "" + +#: adjallocation/consumers.py +msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." +msgstr "" + +#: adjallocation/consumers.py +msgid "Succesfully created new preformed panels for this round." +msgstr "" + +#: adjallocation/models.py +msgid "chair" +msgstr "" + +#: adjallocation/models.py +msgid "panellist" +msgstr "" + +#: adjallocation/models.py +msgid "trainee" +msgstr "" + +#: adjallocation/models.py +msgid "debate" +msgstr "debata" + +#: adjallocation/models.py +msgid "adjudicator" +msgstr "rozhodčí" + +#: adjallocation/models.py +msgid "type" +msgstr "" + +#: adjallocation/models.py +msgid "available?" +msgstr "" + +#: adjallocation/models.py +msgid "debate adjudicator" +msgstr "" + +#: adjallocation/models.py +msgid "debate adjudicators" +msgstr "" + +#: adjallocation/models.py +msgid "team" +msgstr "tým" + +#: adjallocation/models.py +msgid "adjudicator-team conflict" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator-team conflicts" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator 1" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator 2" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator-adjudicator conflict" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator-adjudicator conflicts" +msgstr "" + +#: adjallocation/models.py +msgid "institution" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator-institution conflict" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator-institution conflicts" +msgstr "" + +#: adjallocation/models.py +msgid "team-institution conflict" +msgstr "" + +#: adjallocation/models.py +msgid "team-institution conflicts" +msgstr "" + +#: adjallocation/models.py +msgid "round" +msgstr "" + +#: adjallocation/models.py +msgid "importance" +msgstr "" + +#: adjallocation/models.py +msgid "minimum bracket" +msgstr "" + +#: adjallocation/models.py +msgid "Estimate of the lowest bracket for which this panel might be" +msgstr "" + +#: adjallocation/models.py +msgid "maximum bracket" +msgstr "" + +#: adjallocation/models.py +msgid "Estimate of the highest bracket for which this panel might be" +msgstr "" + +#: adjallocation/models.py +msgid "room rank" +msgstr "" + +#: adjallocation/models.py +msgid "Sequential number of panel, not used in any algorithms" +msgstr "" + +#: adjallocation/models.py +msgid "liveness" +msgstr "" + +#: adjallocation/models.py +msgid "Number of categories this room is expected to be live for" +msgstr "" + +#: adjallocation/models.py +msgid "preformed panel" +msgstr "" + +#: adjallocation/models.py +msgid "preformed panels" +msgstr "" + +#: adjallocation/models.py +msgid "panel" +msgstr "" + +#: adjallocation/models.py +msgid "preformed panel adjudicator" +msgstr "" + +#: adjallocation/models.py +msgid "preformed panel adjudicators" +msgstr "" + +#: adjallocation/preformed/base.py +msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." +msgstr "" + +#: adjallocation/templates/preformed_index.html adjallocation/views.py +msgid "Preformed Panels" +msgstr "" + +#: adjallocation/templates/preformed_index.html +msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." +msgstr "" + +#: adjallocation/templates/preformed_index.html +msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." +msgstr "" + +#: adjallocation/templates/preformed_index.html +#, python-format +msgid "Edit Preformed Panels for %(round)s" +msgstr "" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator)s & %(team)s (personal)" +msgstr "" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" +msgstr "" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" +msgstr "" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" +msgstr "" + +#: adjallocation/views.py +msgid "Male" +msgstr "" + +#: adjallocation/views.py +msgid "Female" +msgstr "" + +#: adjallocation/views.py +msgid "Other" +msgstr "" + +#: adjallocation/views.py +msgid "Unknown" +msgstr "" + +#: adjallocation/views.py +msgid "Edit Allocation" +msgstr "" + +#: adjallocation/views.py +msgid "Edit Panels" +msgstr "" + +#: adjallocation/views.py +msgid "Return to Panels Overview" +msgstr "" + +#: adjallocation/views.py +msgid "Adjudicator-Team Conflicts" +msgstr "" + +#: adjallocation/views.py +msgid "Save Adjudicator-Team Conflicts" +msgstr "" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d adjudicator-team conflict." +msgid_plural "Saved %(count)d adjudicator-team conflicts." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d adjudicator-team conflict." +msgid_plural "Deleted %(count)d adjudicator-team conflicts." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjallocation/views.py +msgid "No changes were made to adjudicator-team conflicts." +msgstr "" + +#: adjallocation/views.py +msgid "Adjudicator-Adjudicator Conflicts" +msgstr "" + +#: adjallocation/views.py +msgid "Save Adjudicator-Adjudicator Conflicts" +msgstr "" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d adjudicator-adjudicator conflict." +msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d adjudicator-adjudicator conflict." +msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjallocation/views.py +msgid "No changes were made to adjudicator-adjudicator conflicts." +msgstr "" + +#: adjallocation/views.py +msgid "Adjudicator-Institution Conflicts" +msgstr "" + +#: adjallocation/views.py +msgid "Save Adjudicator-Institution Conflicts" +msgstr "" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d adjudicator-institution conflict." +msgid_plural "Saved %(count)d adjudicator-institution conflicts." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d adjudicator-institution conflict." +msgid_plural "Deleted %(count)d adjudicator-institution conflicts." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjallocation/views.py +msgid "No changes were made to adjudicator-institution conflicts." +msgstr "" + +#: adjallocation/views.py +msgid "Team-Institution Conflicts" +msgstr "" + +#: adjallocation/views.py +msgid "Save Team-Institution Conflicts" +msgstr "" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d team-institution conflict." +msgid_plural "Saved %(count)d team-institution conflicts." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d team-institution conflict." +msgid_plural "Deleted %(count)d team-institution conflicts." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjallocation/views.py +msgid "No changes were made to team-institution conflicts." +msgstr "" + diff --git a/tabbycat/adjfeedback/locale/cs/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..fdcafbf3ff5 --- /dev/null +++ b/tabbycat/adjfeedback/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,998 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 924\n" + +#: adjfeedback/admin.py +msgid "Integer scales must have a minimum and maximum" +msgstr "" + +#: adjfeedback/admin.py +msgid "target" +msgstr "" + +#: adjfeedback/admin.py adjfeedback/models.py +msgid "source adjudicator" +msgstr "" + +#: adjfeedback/admin.py adjfeedback/models.py +msgid "source team" +msgstr "" + +#: adjfeedback/admin.py +msgid "Target" +msgstr "" + +#: adjfeedback/admin.py +msgid "Source" +msgstr "" + +#: adjfeedback/admin.py +msgid "Feedback timestamp and version" +msgstr "" + +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." +msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." +msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission was marked as unconfirmed." +msgid_plural "%(count)d feedback submissions were marked as unconfirmed." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission is now ignored." +msgid_plural "%(count)d feedback submissions are now ignored." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission is now recognized." +msgid_plural "%(count)d feedback submissions are now recognized." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjfeedback/apps.py +msgid "Adjudicator Feedback" +msgstr "" + +#: adjfeedback/forms.py +msgid "chair" +msgstr "" + +#: adjfeedback/forms.py +msgid "solo" +msgstr "" + +#: adjfeedback/forms.py +msgid "panellist" +msgstr "" + +#: adjfeedback/forms.py +msgid "trainee" +msgstr "" + +#. Translators: Please leave this blank, it should be left for the base Django translations. +#: adjfeedback/forms.py +msgid "Yes" +msgstr "" + +#. Translators: Please leave this blank, it should be left for the base Django translations. +#: adjfeedback/forms.py +msgid "No" +msgstr "" + +#. Translators: Please leave this blank, it should be left for the base Django translations. +#: adjfeedback/forms.py +msgid "This field is required." +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "Overall score (%(min)d=worst; %(max)d=best)*" +msgstr "" + +#: adjfeedback/forms.py +msgid "Ignored" +msgstr "" + +#. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" +#: adjfeedback/forms.py +msgid "Submitted - " +msgstr "" + +#. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s (%(adjpos)s)" +msgstr "" + +#: adjfeedback/forms.py +msgid "-- Adjudicators --" +msgstr "" + +#: adjfeedback/forms.py +msgid "Adjudicator this feedback is about" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s (chair gave oral)" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s (panellist gave oral as chair rolled)" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "This line (for %(adjudicator)s) didn't have a score" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "This line (for %(adjudicator)s) had too many columns" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" +msgstr "" + +#: adjfeedback/forms.py +msgid "There were no scores to import." +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator" +msgstr "rozhodčí" + +#: adjfeedback/models.py +msgid "round" +msgstr "" + +#: adjfeedback/models.py +msgid "score" +msgstr "" + +#: adjfeedback/models.py +msgid "timestamp" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator base score history" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator base score histories" +msgstr "" + +#: adjfeedback/models.py +msgid "question" +msgstr "" + +#: adjfeedback/models.py +msgid "feedback" +msgstr "" + +#: adjfeedback/models.py +msgid "answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback boolean answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback boolean answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback integer answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback integer answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback float answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback float answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback string answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback string answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answers" +msgstr "" + +#: adjfeedback/models.py +msgid "checkbox" +msgstr "" + +#: adjfeedback/models.py +msgid "yes/no (dropdown)" +msgstr "ano/ne (dolů)" + +#: adjfeedback/models.py +msgid "integer (textbox)" +msgstr "" + +#: adjfeedback/models.py +msgid "integer scale" +msgstr "" + +#: adjfeedback/models.py +msgid "float" +msgstr "" + +#: adjfeedback/models.py +msgid "text" +msgstr "" + +#: adjfeedback/models.py +msgid "long text" +msgstr "" + +#: adjfeedback/models.py +msgid "select one" +msgstr "" + +#: adjfeedback/models.py +msgid "select multiple" +msgstr "" + +#: adjfeedback/models.py +msgid "tournament" +msgstr "turnaje" + +#: adjfeedback/models.py +msgid "sequence number" +msgstr "" + +#: adjfeedback/models.py +msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" +msgstr "" + +#: adjfeedback/models.py +msgid "name" +msgstr "" + +#: adjfeedback/models.py +msgid "A short name for the question, e.g., \"Agree with decision\"" +msgstr "" + +#: adjfeedback/models.py +msgid "reference" +msgstr "" + +#: adjfeedback/models.py +msgid "Code-compatible reference, e.g., \"agree_with_decision\"" +msgstr "" + +#: adjfeedback/models.py +msgid "from adjudicator" +msgstr "" + +#: adjfeedback/models.py +msgid "Adjudicators should be asked this question (about other adjudicators)" +msgstr "" + +#: adjfeedback/models.py +msgid "from team" +msgstr "" + +#: adjfeedback/models.py +msgid "Teams should be asked this question" +msgstr "" + +#: adjfeedback/models.py +msgid "answer type" +msgstr "" + +#: adjfeedback/models.py +msgid "required" +msgstr "" + +#: adjfeedback/models.py +msgid "Whether participants are required to fill out this field" +msgstr "" + +#: adjfeedback/models.py +msgid "minimum value" +msgstr "" + +#: adjfeedback/models.py +msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" +msgstr "" + +#: adjfeedback/models.py +msgid "maximum value" +msgstr "" + +#: adjfeedback/models.py +msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" +msgstr "" + +#: adjfeedback/models.py +msgid "choices" +msgstr "" + +#: adjfeedback/models.py +msgid "Permissible choices for select one/multiple fields (ignored for other fields)" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback question" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback questions" +msgstr "" + +#: adjfeedback/models.py adjfeedback/views.py +msgid "ignored" +msgstr "" + +#: adjfeedback/models.py +msgid "Whether the feedback should affect the adjudicator's score" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedbacks" +msgstr "" + +#: adjfeedback/models.py +msgid "Either the source adjudicator or source team wasn't specified." +msgstr "" + +#: adjfeedback/models.py +msgid "There was both a source adjudicator and a source team." +msgstr "" + +#: adjfeedback/models.py +msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" +msgstr "" + +#: adjfeedback/models.py +msgid "Adjudicator did not see this debate." +msgstr "" + +#: adjfeedback/tables.py +msgid "Whether the adj is marked as breaking (click to mark)" +msgstr "" + +#: adjfeedback/tables.py +msgid "N/A" +msgstr "" + +#: adjfeedback/tables.py +msgid "Current weighted score" +msgstr "" + +#: adjfeedback/tables.py +msgid "This adjudicator's current rating." +msgstr "" + +#: adjfeedback/tables.py +msgid "Base score result" +msgstr "" + +#: adjfeedback/tables.py +msgid "Click to edit base score" +msgstr "" + +#: adjfeedback/tables.py +msgid "Assigned base score" +msgstr "" + +#: adjfeedback/tables.py +msgid "The current difference between an adjudicator's base score and current score" +msgstr "" + +#: adjfeedback/tables.py +msgid "The difference between this adjudicator's base score and current score" +msgstr "" + +#: adjfeedback/tables.py +msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." +msgstr "" + +#: adjfeedback/tables.py +msgid "The standard deviation of this adjudicator's current scores" +msgstr "" + +#: adjfeedback/tables.py +msgid "Feedback Per Round" +msgstr "" + +#: adjfeedback/tables.py +msgid "Hover over the data points to show the average score received in that round" +msgstr "" + +#: adjfeedback/tables.py +#, python-format +msgid "View %(count)s
    feedback" +msgid_plural "View %(count)s
    feedbacks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjfeedback/tables.py +msgid "Unsubmitted feedback ballots" +msgstr "" + +#: adjfeedback/tables.py +msgid "View Missing Feedback" +msgstr "" + +#: adjfeedback/templates/add_feedback.html +msgid "Who is the feedback from?" +msgstr "" + +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html +msgid "Enter Feedback" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html +#, python-format +msgid "Add Feedback from %(name)s" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html +msgid "Add Feedback" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "There are some problems with this feedback submission. Please review and correct them." +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "When submitting this form your IP address will be stored for logging purposes." +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Overview" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Latest" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Unsubmitted" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Important" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Comments" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "By Source" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "By Target" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Bulk Update Scores" +msgstr "" + +#: adjfeedback/templates/feedback_by_source.html +#, python-format +msgid "Feedback %(source_type)s %(source_name)s" +msgstr "" + +#: adjfeedback/templates/feedback_by_source.html +#, python-format +msgid "%(source_name)s hasn't submitted any feedback yet." +msgstr "" + +#: adjfeedback/templates/feedback_by_source.html +#, python-format +msgid "%(source_name)s hasn't received any feedback yet." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Unconfirmed; will not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Ignored; will not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "The score given in this piece of feedback." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "%(round)s %(score)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "On %(adjudicator)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "Received as %(as_type)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "Base %(base)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "From %(source)s (their %(relationship)s)" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "From %(source)s (%(relationship)s from %(side)s)" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "From unknown" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "%(time)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Un-confirm" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Confirm" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Un-ignore" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Ignore" +msgstr "" + +#: adjfeedback/templates/feedback_cards_list.html +msgid "No feedback has been submitted yet" +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "%(c_breaking)s marked as breaking" +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." +msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." +msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "Base" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "Feedback" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "Score Ratio" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." +msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." +msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(c_chairs)s chair" +msgid_plural "%(c_chairs)s chairs" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(c_panellists)s panellist" +msgid_plural "%(c_panellists)s panellists" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(c_trainees)s trainee" +msgid_plural "%(c_trainees)s trainees" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" +msgstr "" + +#: adjfeedback/templates/overview_modals.html +msgid "Change Base Score" +msgstr "" + +#: adjfeedback/templates/overview_modals.html +#, python-format +msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." +msgstr "" + +#: adjfeedback/templates/overview_modals.html +#, python-format +msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." +msgstr "" + +#: adjfeedback/templates/overview_modals.html +msgid "Base score" +msgstr "" + +#: adjfeedback/templates/overview_modals.html +msgid "Save Base Score" +msgstr "" + +#: adjfeedback/templates/public_add_feedback.html +msgid "Who are you?" +msgstr "" + +#: adjfeedback/templates/public_add_feedback.html +msgid "click your name or your team on this list" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgctxt "page title" +msgid "Update Adjudicator Scores" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +#, python-format +msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "The adjudicators' names must match their names in the tab system exactly." +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "There are some problems with the data on this form:" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "Submit" +msgstr "" + +#: adjfeedback/views.py +msgid "Feedback Overview" +msgstr "" + +#: adjfeedback/views.py +msgid "Find Feedback on Adjudicator" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "%(count)d feedback" +msgid_plural "%(count)d feedbacks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjfeedback/views.py +msgid "Feedbacks" +msgstr "" + +#: adjfeedback/views.py +msgid "Find Feedback" +msgstr "" + +#: adjfeedback/views.py +msgid "From Teams" +msgstr "" + +#: adjfeedback/views.py +msgid "From Adjudicators" +msgstr "" + +#: adjfeedback/views.py +msgid "Latest Feedback" +msgstr "" + +#: adjfeedback/views.py +msgid "(30 most recent)" +msgstr "" + +#: adjfeedback/views.py +msgid "Only Comments" +msgstr "" + +#: adjfeedback/views.py +msgid "(250 most recent)" +msgstr "" + +#: adjfeedback/views.py +msgid "Important Feedback" +msgstr "" + +#: adjfeedback/views.py +msgid "(rating was much higher/lower than expected)" +msgstr "" + +#: adjfeedback/views.py +msgid "A Team" +msgstr "" + +#: adjfeedback/views.py +msgid "Team" +msgstr "Tým" + +#: adjfeedback/views.py +msgid "Institution" +msgstr "" + +#: adjfeedback/views.py +msgid "An Adjudicator" +msgstr "" + +#: adjfeedback/views.py +msgid "Adjudicator" +msgstr "Rozhodčí" + +#: adjfeedback/views.py +#, python-format +msgid "Feedback from %(source)s on %(target)s added." +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" +msgstr "" + +#: adjfeedback/views.py +msgid "Whoops! The value isn't a valid base score." +msgstr "" + +#: adjfeedback/views.py +msgid "Feedback Progress" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" +msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: adjfeedback/views.py +#, python-format +msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." +msgstr "" + +#: adjfeedback/views.py +msgid "confirmed" +msgstr "" + +#: adjfeedback/views.py +msgid "un-confirmed" +msgstr "" + +#: adjfeedback/views.py +msgid "un-ignored" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Updated base score for %(count)d adjudicator." +msgid_plural "Updated base scores for %(count)d adjudicators." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + diff --git a/tabbycat/availability/locale/cs/LC_MESSAGES/django.po b/tabbycat/availability/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..04bdbacf0db --- /dev/null +++ b/tabbycat/availability/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,426 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 926\n" + +#: availability/apps.py availability/views.py +msgid "Availability" +msgstr "" + +#: availability/models.py +msgid "content type" +msgstr "" + +#: availability/models.py +msgid "object id" +msgstr "" + +#: availability/models.py +msgid "round" +msgstr "" + +#: availability/models.py +msgid "round availability" +msgstr "" + +#: availability/models.py +msgid "round availabilities" +msgstr "" + +#: availability/templates/availability_index.html +msgid "Mark All Breaking Adjs as Available" +msgstr "" + +#: availability/templates/availability_index.html +msgid "Mark Everything as Available" +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "Copy Availability from %(prev_round)s" +msgstr "" + +#: availability/templates/availability_index.html +msgid "View Draw" +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" +msgstr "" + +#: availability/templates/availability_index.html +msgid "Generate Draw" +msgstr "" + +#: availability/templates/availability_index.html +msgid "The draw cannot be generated until some teams have been marked as available." +msgstr "" + +#: availability/templates/availability_index.html +msgid "The draw cannot be generated until some adjudicators have been marked as available." +msgstr "" + +#: availability/templates/availability_index.html +msgid "The draw cannot be generated until some rooms have been marked as available." +msgstr "" + +#: availability/templates/availability_index.html +msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." +msgstr "" + +#: availability/templates/availability_index.html +msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." +msgstr "" + +#: availability/templates/availability_index.html +msgid "There is an uneven number of teams marked as available — the draw may not generate properly." +msgstr "" + +#: availability/templates/availability_index.html +msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " +msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." +msgstr "" + +#: availability/templates/base_availability.html +msgid "Select All" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Select None" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Check-Ins" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Check In All Breaking" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Copy from Previous" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Save Selected" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Teams" +msgstr "Týmy" + +#: availability/templates/checkin_progress.html +msgid "Adjudicators" +msgstr "Rozhodčí" + +#: availability/templates/checkin_progress.html +msgid "Rooms" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Mark teams as available" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "No need to set team availability" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "There is an uneven number of teams marked as available for this round." +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "The number of teams marked as available for this round is not a multiple of 4." +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Edit team availability" +msgstr "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." +msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s adjudicator who was not available last round, is available this round." +msgid_plural "%(count)s adjudicators who were not available last round, are available this round." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" +msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s adjudicator who was available last round, is not available this round." +msgid_plural "%(count)s adjudicators who were available last round, are not available this round." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" +msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: availability/templates/checkin_progress.html +msgid "Mark adjudicators as available" +msgstr "" + +#. Translators: required_count is a word for a number (e.g. "two", "three", etc.) +#: availability/templates/checkin_progress.html +#, python-format +msgid "There needs to be at least one adjudicator marked as available, given the number of debates." +msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: availability/templates/checkin_progress.html +msgid "Edit adjudicator availability" +msgstr "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s room that was not available last round, is available this round." +msgid_plural "%(count)s rooms that were not available last round, are available this round." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" +msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s room that was available last round, is not available this round." +msgid_plural "%(count)s rooms that were available last round, are not available this round." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" +msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." +msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: availability/templates/checkin_progress.html +msgid "Mark rooms as available" +msgstr "" + +#. Translators: required_count is a word for a number (e.g. "two", "three", etc.) +#: availability/templates/checkin_progress.html +#, python-format +msgid "There needs to be at least one room marked as available, given the number of debates." +msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: availability/templates/checkin_progress.html +msgid "Edit room availability" +msgstr "" + +#: availability/views.py +msgid "no teams are debating" +msgstr "" + +#. Translators: nteams in this string can only be 0 or 1 +#: availability/views.py +#, python-format +msgid "%(nteams)d breaking team — no debates can happen" +msgid_plural "%(nteams)d breaking teams — no debates can happen" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. Translators: ndebating in this string is always at least 2 +#: availability/views.py +#, python-format +msgid "%(ndebating)d breaking team is debating this round" +msgid_plural "%(ndebating)d breaking teams are debating this round" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. Translators: This gets appended to the previous string (the one with +#. ndebating in it) if (and only if) nbypassing is greater than 0. +#. "It" refers to this round. +#: availability/views.py +#, python-format +msgid "; %(nbypassing)d team is bypassing it" +msgid_plural "; %(nbypassing)d teams are bypassing it" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. Translators: nadvancing in this string is always at least 2 +#: availability/views.py +#, python-format +msgid "%(nadvancing)s advancing team is debating this round" +msgid_plural "%(nadvancing)s advancing teams are debating this round" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: availability/views.py +msgid "Active Now" +msgstr "" + +#: availability/views.py +#, python-format +msgid "Active in %(prev_round)s" +msgstr "" + +#: availability/views.py +msgid "Checked-In" +msgstr "" + +#: availability/views.py +msgid "Team Availability" +msgstr "" + +#: availability/views.py +msgid "Adjudicator Availability" +msgstr "" + +#: availability/views.py +msgid "Room Availability" +msgstr "" + +#: availability/views.py +msgid "Room" +msgstr "" + +#: availability/views.py +msgid "Display Name (for the draw)" +msgstr "" + +#: availability/views.py +msgid "Categories" +msgstr "" + +#: availability/views.py +msgid "Priority" +msgstr "" + +#: availability/views.py +msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." +msgstr "" + +#: availability/views.py +msgid "Checked in all teams, adjudicators and rooms." +msgstr "" + +#: availability/views.py +msgid "Checked in all breaking adjudicators." +msgstr "" + +#: availability/views.py +msgid "Checked in all teams, adjudicators and rooms from previous round." +msgstr "" + diff --git a/tabbycat/breakqual/locale/cs/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..928cbbe3748 --- /dev/null +++ b/tabbycat/breakqual/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,529 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 928\n" + +#: breakqual/apps.py +msgid "Break Qualification" +msgstr "" + +#: breakqual/base.py +#, python-format +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: breakqual/models.py +msgid "tournament" +msgstr "turnaje" + +#: breakqual/models.py +msgid "name" +msgstr "" + +#: breakqual/models.py +msgid "Name to be displayed, e.g., \"ESL\"" +msgstr "" + +#: breakqual/models.py +msgid "slug" +msgstr "" + +#: breakqual/models.py +msgid "Slug for URLs, e.g., \"esl\"" +msgstr "" + +#: breakqual/models.py +msgid "sequence number" +msgstr "" + +#: breakqual/models.py +msgid "The order in which the categories are displayed" +msgstr "" + +#: breakqual/models.py +msgid "break size" +msgstr "" + +#: breakqual/models.py +msgid "Number of breaking teams in this category" +msgstr "" + +#: breakqual/models.py +msgid "is general" +msgstr "" + +#: breakqual/models.py +msgid "True if most teams eligible for this category, e.g. Open, False otherwise" +msgstr "" + +#: breakqual/models.py +msgid "priority" +msgstr "" + +#: breakqual/models.py +msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" +msgstr "" + +#: breakqual/models.py +msgid "limit" +msgstr "" + +#: breakqual/models.py +msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" +msgstr "" + +#: breakqual/models.py +msgid "Standard" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 1996" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 2016 (Easters)" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 2016 (Australs)" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 2019 (Australs, Dynamic Cap)" +msgstr "" + +#: breakqual/models.py +msgid "rule" +msgstr "" + +#: breakqual/models.py +msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" +msgstr "" + +#: breakqual/models.py +msgid "breaking teams" +msgstr "" + +#: breakqual/models.py +msgid "break category" +msgstr "" + +#: breakqual/models.py +msgid "break categories" +msgstr "" + +#: breakqual/models.py +msgid "team" +msgstr "tým" + +#: breakqual/models.py +msgid "rank" +msgstr "" + +#: breakqual/models.py +msgid "break rank" +msgstr "" + +#: breakqual/models.py +msgid "Capped" +msgstr "" + +#: breakqual/models.py +msgid "Ineligible" +msgstr "" + +#: breakqual/models.py +msgid "Different break" +msgstr "" + +#: breakqual/models.py +msgid "Disqualified" +msgstr "" + +#: breakqual/models.py +msgid "Lost coin toss" +msgstr "" + +#: breakqual/models.py +msgid "Withdrawn" +msgstr "" + +#: breakqual/models.py +msgid "remark" +msgstr "" + +#: breakqual/models.py +msgid "Used to explain why an otherwise-qualified team didn't break" +msgstr "" + +#: breakqual/models.py +msgid "breaking team" +msgstr "" + +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html +msgid "Break Categories" +msgstr "" + +#: breakqual/templates/break_categories_edit.html +#, python-format +msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." +msgstr "" + +#: breakqual/templates/break_categories_edit.html +#, python-format +msgid "If you want to delete break categories, use the Edit Database area." +msgstr "" + +#: breakqual/templates/break_categories_edit.html +msgid "Save Break Categories" +msgstr "" + +#: breakqual/templates/breaking_adjs.html +#, python-format +msgid "Adjudicators can be marked as breaking in the Feedback Overview section." +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Breaks" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Team Eligibility" +msgstr "" + +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py +#, python-format +msgid "%(category)s Break" +msgstr "" + +#: breakqual/templates/breaking_index.html +#, python-format +msgid " %(size)s Spots " +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Teams Eligible" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Breaking" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Excluded" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Eligible" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Mark teams as eligible" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Generate this break" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "View this break" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "publicly visible" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "not publicly visible" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Delete and Regenerate All Breaks" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Generate the Break for All Categories" +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Save Remarks and Update All Breaks" +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "Save Remarks and Update the %(category)s Break" +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" +msgstr "" + +#: breakqual/templates/breakqual_subnav.html +msgid "Overview" +msgstr "" + +#: breakqual/templates/breakqual_subnav.html +msgid "Adjudicators' Break" +msgstr "" + +#: breakqual/templates/edit_break_eligibility.html +#, python-format +msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." +msgstr "" + +#: breakqual/templates/public_break_index.html breakqual/views.py +msgid "Break" +msgstr "" + +#: breakqual/templates/public_break_index.html +msgid "Adjudicators" +msgstr "Rozhodčí" + +#. Translators: abbreviation for "grand final" +#: breakqual/utils.py +msgid "Grand Final" +msgstr "" + +#: breakqual/utils.py +msgid "GF" +msgstr "" + +#. Translators: abbreviation for "semifinals" +#: breakqual/utils.py +msgid "Semifinals" +msgstr "" + +#: breakqual/utils.py +msgid "SF" +msgstr "" + +#. Translators: abbreviation for "quarterfinals" +#: breakqual/utils.py +msgid "Quarterfinals" +msgstr "" + +#: breakqual/utils.py +msgid "QF" +msgstr "" + +#. Translators: abbreviation for "octofinals" +#: breakqual/utils.py +msgid "Octofinals" +msgstr "" + +#: breakqual/utils.py +msgid "OF" +msgstr "" + +#. Translators: abbreviation for "double-octofinals" +#: breakqual/utils.py +msgid "Double-Octofinals" +msgstr "" + +#: breakqual/utils.py +msgid "DOF" +msgstr "" + +#. Translators: abbreviation for "triple-octofinals" +#: breakqual/utils.py +msgid "Triple-Octofinals" +msgstr "" + +#: breakqual/utils.py +msgid "TOF" +msgstr "" + +#. Translators: abbreviation for "finals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Finals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sF" +msgstr "" + +#. Translators: abbreviation for "semifinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Semifinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sSF" +msgstr "" + +#. Translators: abbreviation for "quarterfinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Quarterfinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sQF" +msgstr "" + +#. Translators: abbreviation for "octofinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Octofinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sOF" +msgstr "" + +#. Translators: abbreviation for "double-octofinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Double-Octofinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sDOF" +msgstr "" + +#. Translators: abbreviation for "triple-octofinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Triple-Octofinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sTOF" +msgstr "" + +#. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) +#: breakqual/utils.py +#, python-format +msgid "Unknown %s break round" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "U%sBR" +msgstr "" + +#: breakqual/utils.py +msgid "Unknown break round" +msgstr "" + +#: breakqual/utils.py +msgid "UBR" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "There was an error generating the break for category %(category)s: %(message)s" +msgstr "" + +#: breakqual/views.py +msgid "Eligible for" +msgstr "" + +#: breakqual/views.py +msgid "Edit Remark" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." +msgstr "" + +#: breakqual/views.py +msgid "Changes to breaking team remarks saved." +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Teams break generated for the following break categories: %(categories)s." +msgstr "" + +#: breakqual/views.py +msgid "Breaking Adjudicators" +msgstr "" + +#: breakqual/views.py +msgid "Break Eligibility" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "%s Speakers" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" +msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + diff --git a/tabbycat/draw/locale/cs/LC_MESSAGES/django.po b/tabbycat/draw/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..761f5f573ca --- /dev/null +++ b/tabbycat/draw/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,1169 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:27\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 930\n" + +#: draw/admin.py +#, python-format +msgid "%(count)d debate was marked as having its sides confirmed." +msgid_plural "%(count)d debates were marked as having their sides confirmed." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py +#, python-format +msgid "%(count)d debate was marked as having its sides not confirmed." +msgid_plural "%(count)d debates were marked as having their sides not confirmed." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/apps.py draw/views.py +msgid "Draw" +msgstr "" + +#: draw/generator/__init__.py +msgid "Too many swaps" +msgstr "" + +#: draw/generator/__init__.py +msgid "One-up-one-down (history)" +msgstr "" + +#: draw/generator/__init__.py +msgid "One-up-one-down (institution)" +msgstr "" + +#: draw/generator/__init__.py +msgid "One-up-one-down (to accommodate)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble up (history)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble down (history)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble up (institution)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble down (institution)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble up (to accommodate)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble down (to accommodate)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Can't bubble up/down" +msgstr "" + +#: draw/generator/__init__.py +msgid "Pull-up team" +msgstr "" + +#: draw/generator/bpelimination.py draw/generator/elimination.py +#, python-format +msgid "%d debates in the previous round don't have a result." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "%d debates in the previous round don't have exactly two teams advancing." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "The number of debates (%d) in the last round is not a power of two." +msgstr "" + +#: draw/generator/bphungarian.py +#, python-format +msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." +msgstr "" + +#: draw/generator/common.py +#, python-format +msgid "The number of teams presented for the draw was not a multiple of %(num)d." +msgstr "" + +#: draw/generator/common.py +msgid "There were no teams for the draw." +msgstr "" + +#: draw/generator/elimination.py +#, python-format +msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." +msgstr "" + +#: draw/generator/elimination.py +#, python-format +msgid "The number of teams (%d) in this round is not a power of two." +msgstr "" + +#: draw/generator/powerpair.py +#, python-format +msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." +msgstr "" + +#: draw/generator/random.py +#, python-format +msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." +msgstr "" + +#: draw/generator/random.py +msgid "One or more teams had an allocated side that wasn't affirmative or negative." +msgstr "" + +#: draw/manager.py +#, python-format +msgid "The draw type %(type)s can't be used with two-team formats." +msgstr "" + +#: draw/manager.py +#, python-format +msgid "The draw type %(type)s can't be used with British Parliamentary." +msgstr "" + +#: draw/manager.py +#, python-format +msgid "Unrecognised \"teams in debate\" option: %(option)s" +msgstr "" + +#: draw/manager.py +#, python-format +msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." +msgstr "" + +#: draw/models.py +msgid "none" +msgstr "" + +#: draw/models.py +msgid "postponed" +msgstr "" + +#: draw/models.py +msgid "draft" +msgstr "" + +#: draw/models.py +msgid "confirmed" +msgstr "" + +#: draw/models.py +msgid "round" +msgstr "" + +#: draw/models.py +msgid "room" +msgstr "" + +#: draw/models.py +msgid "bracket" +msgstr "" + +#: draw/models.py +msgid "room rank" +msgstr "" + +#: draw/models.py +msgid "importance" +msgstr "" + +#: draw/models.py +msgid "result status" +msgstr "" + +#: draw/models.py +msgid "sides confirmed" +msgstr "" + +#: draw/models.py +msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." +msgstr "" + +#: draw/models.py +msgid "debate" +msgstr "debata" + +#: draw/models.py +msgid "debates" +msgstr "debat" + +#. Translators: This is appended to a list of teams, e.g. "Auckland +#. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading +#. space. +#: draw/models.py +msgid " (sides not confirmed)" +msgstr "" + +#. Translators: This goes between teams in a debate, e.g. "Auckland 1 +#. vs Vic Wellington 1". Mind the leading and trailing spaces. +#: draw/models.py +msgid " vs " +msgstr "" + +#: draw/models.py +msgid "affirmative" +msgstr "afirmace" + +#: draw/models.py +msgid "negative" +msgstr "negace" + +#: draw/models.py +msgid "opening government" +msgstr "" + +#: draw/models.py +msgid "opening opposition" +msgstr "" + +#: draw/models.py +msgid "closing government" +msgstr "" + +#: draw/models.py +msgid "closing opposition" +msgstr "" + +#: draw/models.py +msgid "team" +msgstr "tým" + +#: draw/models.py +msgid "side" +msgstr "" + +#: draw/models.py +msgid "debate team" +msgstr "" + +#: draw/models.py +msgid "debate teams" +msgstr "" + +#: draw/models.py +#, python-format +msgid "placed %(place)s" +msgstr "" + +#: draw/models.py +msgid "result unknown" +msgstr "" + +#: draw/models.py +msgid "won" +msgstr "" + +#: draw/models.py +msgid "lost" +msgstr "" + +#: draw/models.py +msgid "team side allocation" +msgstr "" + +#: draw/models.py +msgid "team side allocations" +msgstr "" + +#. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", +#. "Opening government: Total speaker score", "Closing opposition: Number of firsts" +#: draw/tables.py +#, python-format +msgid "%(side)s: %(metric)s" +msgstr "" + +#: draw/tables.py +#, python-format +msgid "Team %(num)d" +msgstr "" + +#: draw/tables.py +msgid "Room rank of this debate" +msgstr "" + +#: draw/tables.py +msgid "Bracket of this debate" +msgstr "" + +#: draw/tables.py +msgid "side history
    \n" +"(number of times the team has been on each side before this round)" +msgstr "" + +#. Translators: Abbreviation for "side history" +#: draw/tables.py +msgid "SH" +msgstr "" + +#: draw/tables.py +msgid "Went from balanced to imbalanced" +msgstr "" + +#: draw/tables.py +msgid "Went from imbalanced to balanced" +msgstr "" + +#: draw/tables.py +msgid "Best improvement possible, still imbalanced" +msgstr "" + +#: draw/tables.py +msgid "Was imbalanced and still imbalanced" +msgstr "" + +#: draw/tables.py +msgid "No metrics in the team standings precedence" +msgstr "" + +#: draw/tables.py +msgid "Side" +msgstr "" + +#: draw/tables.py +msgid "Position this round" +msgstr "" + +#: draw/tables.py +msgid "Before" +msgstr "" + +#: draw/tables.py +msgid "Side history before this round" +msgstr "" + +#: draw/tables.py +msgid "After" +msgstr "" + +#: draw/tables.py +msgid "Side history after this round" +msgstr "" + +#: draw/tables.py +msgid "Cost" +msgstr "" + +#: draw/tables.py +msgid "Position cost" +msgstr "" + +#: draw/tables.py +msgid "Status" +msgstr "" + +#: draw/tables.py +msgid "Teams with this many points are permitted in this debate
    \n" +"(bracket in bold)" +msgstr "" + +#: draw/tables.py +#, python-format +msgid "%(team)s: %(metric)s" +msgstr "" + +#: draw/tables.py +msgid "side history before this round" +msgstr "" + +#: draw/tables.py +msgid "Sides" +msgstr "" + +#: draw/tables.py +msgid "position cost" +msgstr "" + +#: draw/templates/admin/draw/debateteam/delete_warning.html +msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" +msgstr "" + +#: draw/templates/admin/draw/debateteam/delete_warning.html +msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." +msgstr "" + +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html +msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." +msgstr "" + +#: draw/templates/admin/draw/debateteam/edit_warning.html +msgid "WARNING!!! If you are editing debate teams, read this first!" +msgstr "" + +#: draw/templates/admin/draw/debateteam/edit_warning.html +msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." +msgstr "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 debate does not have a chair." +msgid_plural "%(ndebates)s debates do not have a chair." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "%(adjudicators)s is adjudicating multiple debates." +msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 debate has a panel with an even number of adjudicators." +msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 debate has an adjudicator conflict." +msgid_plural "%(ndebates)s debates have adjudicator conflicts." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." +msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 adjudicator is available but not assigned to a debate." +msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_alerts_teams.html +#, python-format +msgid "%(teams)s is competing in multiple debates." +msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_alerts_venues.html +#, python-format +msgid "1 debate does not have a room." +msgid_plural "%(ndebates)s debates do not have a room." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_alerts_venues.html +#, python-format +msgid "There are multiple debates in %(rooms)s." +msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_alerts_venues.html +#, python-format +msgid "1 debate has a room constraint violation." +msgid_plural "%(ndebates)s debates have room constraint violations." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_base.html +msgid "Availability" +msgstr "" + +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html +msgid "Edit Sides/Matchups" +msgstr "" + +#: draw/templates/draw_base.html +msgid "Redo Draw" +msgstr "" + +#: draw/templates/draw_base.html +msgid "Draw Details" +msgstr "" + +#: draw/templates/draw_base.html +msgid "Position Balance" +msgstr "" + +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draw" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +msgid "Confirm draw regeneration" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html +msgid "Back to Draw" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#, python-format +msgid "Confirm Draw Deletion for %(round)s" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#, python-format +msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#, python-format +msgid "Yes, I want to delete the current draw for %(round)s" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "View Draw" +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "Debates start at %(start_time)s" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Add Start Time" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Enter Results" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Motion Details" +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "%(motions_count)s motion has been entered." +msgid_plural "%(motions_count)s motions have been entered." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_display_admin.html +msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Enter a motion" +msgid_plural "Enter motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_display_admin.html +msgid "Release Draw" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "You have not generated a draw for this round yet. There is nothing to release." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Unrelease draw to public" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "The draw has been released publicly." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "View public draw page" +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Release draw to public" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_display_admin.html +msgid "Release Motion" +msgid_plural "Release Motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_display_admin.html +msgid "The motion has been released publicly." +msgid_plural "Motions have been released publicly." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_display_admin.html +msgid "View public motions page" +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "(for the briefing room)" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draw ordered by Room" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draw ordered by Team" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draws for All Current Rounds ordered by Room" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draws for All Current Rounds ordered by Team" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +#, python-format +msgid "Display Draw for %(round)s ordered by Room" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +#, python-format +msgid "Display Draw for %(round)s ordered by Team" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Motions" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Email Motions" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Email Motion" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Start at" +msgstr "" + +#: draw/templates/draw_display_assistant.html +msgid "(for printing)" +msgstr "" + +#: draw/templates/draw_display_assistant.html +msgid "View Ballot Forms" +msgstr "" + +#: draw/templates/draw_display_assistant.html +msgid "View Feedback Forms" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Scroll Speed" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Fast" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Medium" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Slow" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Extra Slow" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Hide Adjudicators" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Show Adjudicators" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Text Size" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Tiny" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Small" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Large" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Huge" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Stop Scroll" +msgstr "" + +#: draw/templates/draw_not_released.html +#, python-format +msgid "The draw for %(round)s has yet to be released." +msgstr "" + +#: draw/templates/draw_not_released.html +msgid "The draw for the next round has yet to be released." +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Adjudicator Allocations" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "There are currently fewer adjudicators checked in than there are rooms." +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Allocate adjudicators" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Edit adjudicator allocation" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Room Allocations" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Allocate rooms" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Edit room allocation" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Preformed Panels" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +#, python-format +msgid "There is %(npanels)s preformed panel available for this round." +msgid_plural "There are %(npanels)s preformed panels available for this round." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_status_confirmed.html +msgid "There are no preformed panels available for this round" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +#, python-format +msgid "Edit preformed panels for %(round)s" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Side Allocations" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +#, python-format +msgid "1 debate does not have its sides confirmed." +msgid_plural "%(ndebates)s debates do not have their sides confirmed." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_status_draft.html +msgid "Delete Draw" +msgstr "" + +#: draw/templates/draw_status_draft.html +msgid "Confirm Draw" +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." +msgstr "" + +#: draw/templates/draw_status_draft.html +msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." +msgstr "" + +#: draw/templates/draw_status_draft.html +msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " +msgstr "" + +#: draw/templates/draw_status_none.html +#, python-format +msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." +msgstr "" + +#: draw/templates/position_balance.html +msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." +msgstr "" + +#: draw/templates/position_balance.html +#, python-format +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgstr "" + +#: draw/templates/position_balance_break.html +msgid "Position balance reports aren't computed for elimination rounds." +msgstr "" + +#: draw/templates/position_balance_nonbp.html +msgid "Position balance reports are only available for British Parliamentary tournaments." +msgstr "" + +#: draw/templates/position_balance_round1.html +msgid "Position balance reports aren't computed for the first round of a tournament." +msgstr "" + +#: draw/views.py +msgid "No debates in this round" +msgstr "" + +#: draw/views.py +#, python-format +msgid "Draw for %(round)s" +msgstr "" + +#: draw/views.py +msgid "Draws for Current Rounds" +msgstr "" + +#: draw/views.py +#, python-format +msgid "debates start at %(time)s (in %(time_zone)s)" +msgstr "" + +#: draw/views.py +#, python-format +msgid "start times in time zone: %(time_zone)s" +msgstr "" + +#: draw/views.py +#, python-format +msgid "debate starts at %(time)s" +msgid_plural "debates start at %(time)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/views.py +msgid "The draw for this round hasn't been released." +msgstr "" + +#: draw/views.py +#, python-format +msgid "All Debates for All Rounds of %(tournament)s" +msgstr "" + +#: draw/views.py +msgid "Adjudicator Assignments" +msgstr "" + +#: draw/views.py +msgid "Position" +msgstr "" + +#: draw/views.py +msgid "Team Pairings" +msgstr "" + +#: draw/views.py +msgid "No Draw" +msgstr "" + +#: draw/views.py +msgid "Draft Draw" +msgstr "" + +#. Translators: e.g. "Affirmative: Break rank" +#: draw/views.py +#, python-format +msgid "%(side)s: Break rank" +msgstr "" + +#. Translators: "BR" stands for "Break rank" +#: draw/views.py +msgid "BR" +msgstr "" + +#: draw/views.py +msgid "Draw with Details" +msgstr "" + +#: draw/views.py +msgid "Position Balance Report" +msgstr "" + +#: draw/views.py +#, python-format +msgid "Rényi entropy of order %(order)s" +msgstr "" + +#. Translators: This is appended to the string "Rényi entropy of order 1.0" +#: draw/views.py +msgid " (i.e., Shannon entropy)" +msgstr "" + +#: draw/views.py +msgid "Teams with position imbalances" +msgstr "" + +#: draw/views.py +msgid "No teams with position imbalances! Hooray!" +msgstr "" + +#: draw/views.py +msgid "Annotated draw" +msgstr "" + +#: draw/views.py +#, python-format +msgid "Could not create draw for %(round)s, there was already a draw!" +msgstr "" + +#: draw/views.py +#, python-format +msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" +"

    Please fix this issue before attempting to create the draw.

    " +msgstr "" + +#: draw/views.py +#, python-format +msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" +"

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " +msgstr "" + +#: draw/views.py +#, python-format +msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" +"

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " +msgstr "" + +#: draw/views.py +msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." +msgstr "" + +#: draw/views.py +msgid "Deleted the draw. You can now recreate it as normal." +msgstr "" + +#: draw/views.py +msgid "Released the draw." +msgstr "" + +#: draw/views.py +msgid "Unreleased the draw." +msgstr "" + +#: draw/views.py +#, python-format +msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." +msgstr "" + +#: draw/views.py +msgid "Side Pre-Allocations" +msgstr "" + +#: draw/views.py +msgid "Edit Matchups" +msgstr "" + diff --git a/tabbycat/importer/locale/cs/LC_MESSAGES/django.po b/tabbycat/importer/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..4552bb4053e --- /dev/null +++ b/tabbycat/importer/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,437 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 932\n" + +#: importer/forms.py +#, python-format +msgid "line %(lineno)d: %(message)s" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "This line (for %(institution)s) didn't have a code" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "This line (for %(institution)s) had too many columns" +msgstr "" + +#: importer/forms.py +msgid "There were no institutions to import." +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: importer/forms.py +msgid "There were no rooms to import." +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: importer/forms.py +msgid "Speakers' names" +msgstr "" + +#: importer/forms.py +msgid "Speakers' email addresses" +msgstr "" + +#: importer/forms.py +msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" +msgstr "" + +#: importer/forms.py +msgid "Name (excluding institution name)" +msgstr "" + +#: importer/forms.py +msgid "Prefix team name with institution name?" +msgstr "" + +#: importer/forms.py +msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" +msgstr "" + +#: importer/forms.py +msgid "(Not applicable to unaffiliated teams)" +msgstr "" + +#: importer/forms.py +msgid "One speaker's name per line" +msgstr "" + +#: importer/forms.py +msgid "Can be separated by newlines, tabs or commas" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Speaker %d" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "speaker%d@example.edu" +msgstr "" + +#: importer/forms.py +msgid "There must be at least one speaker." +msgstr "" + +#: importer/forms.py +#, python-format +msgid "%(email)s is not a valid email address." +msgstr "" + +#: importer/forms.py +msgid "There are more email addresses than speakers." +msgstr "" + +#: importer/forms.py +msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." +msgstr "" + +#: importer/forms.py +msgid "Rating" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "This value must be between %(min)d and %(max)d." +msgstr "" + +#: importer/forms.py +msgid "Unaffiliated (no institution)" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "%(name)s (%(code)s)" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: importer/forms.py +msgid "XML" +msgstr "" + +#: importer/forms.py +msgid "The Debate XML archive to parse" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export Tournament Archive" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Tournaments can be exported in an XML format for use outside Tabbycat." +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export all data" +msgstr "" + +#: importer/templates/archive_importer.html +msgctxt "page title" +msgid "Import Tournament Archive" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "This form will create a tournament with the data provided as a Debate XML format." +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Import" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Go back to the site home page" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +msgctxt "page title" +msgid "Add Adjudicators" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html +#, python-format +msgid "(Step %(step)s of %(count)s)" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html +msgid "Previous Step" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#, python-format +msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#, python-format +msgid "Adjudicators for %(institution)s" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +msgid "Unaffiliated Adjudicators" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +msgid "Save All Adjudicators" +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +#, python-format +msgid "You need to add institutions before adding adjudicators." +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html +msgctxt "button" +msgid "Next Step" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Simple Importer" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Institutions" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Teams" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Adjudicators" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Rooms" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Room Categories" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Room Constraints" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Adjudicator-Team Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Adjudicator-Adjudicator Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Adjudicator-Institution Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Team-Institution Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Break Categories" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Speaker Categories" +msgstr "" + +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +msgctxt "page title" +msgid "Add Institutions" +msgstr "" + +#: importer/templates/simple_import_institutions_details.html +msgid "Save All Institutions" +msgstr "" + +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html +msgid "There are some problems with the data on this form:" +msgstr "" + +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html +msgid "Next Step" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +msgctxt "page title" +msgid "Add Teams" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +#, python-format +msgid "Teams for %(institution)s" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +msgid "Unaffiliated Teams" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +msgid "Save All Teams" +msgstr "" + +#: importer/templates/simple_import_teams_numbers.html +#, python-format +msgid "You need to add institutions before adding teams." +msgstr "" + +#: importer/templates/simple_import_teams_numbers.html +msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." +msgstr "" + +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" +msgstr "" + +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html +msgctxt "page title" +msgid "Add Rooms" +msgstr "" + +#: importer/templates/simple_import_venues_details.html +msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." +msgstr "" + +#: importer/templates/simple_import_venues_details.html +msgid "Save All Rooms" +msgstr "" + +#: importer/templates/simple_import_venues_raw.html +msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" +msgstr "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d institution." +msgid_plural "Added %(count)d institutions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d room." +msgid_plural "Added %(count)d rooms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d team." +msgid_plural "Added %(count)d teams." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: importer/views.py +#, python-format +msgid "Adjudicator %(number)d" +msgstr "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d adjudicator." +msgid_plural "Added %(count)d adjudicators." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: importer/views.py +msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " +msgstr "" + +#: importer/views.py +msgid "Created new demo tournament. You can now configure it below." +msgstr "" + +#: importer/views.py +msgid "Tournament archive has been imported." +msgstr "" + diff --git a/tabbycat/locale/cs/LC_MESSAGES/django.po b/tabbycat/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..7c70d25a455 --- /dev/null +++ b/tabbycat/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,959 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 934\n" + +#: api/apps.py +msgid "Application Programming Interface" +msgstr "" + +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html +msgid "Check-Ins" +msgstr "" + +#: checkins/consumers.py +msgid "Sent checkin identifier doesn't exist" +msgstr "" + +#: checkins/consumers.py +msgid "Checkins" +msgstr "" + +#: checkins/consumers.py +msgid "No checkin identifiers exist for sent barcodes" +msgstr "" + +#: checkins/models.py +msgid "The barcode must contain exactly six digits." +msgstr "" + +#: checkins/models.py +msgid "barcode" +msgstr "" + +#: checkins/models.py +msgid "" +msgstr "" + +#: checkins/models.py +#, python-format +msgid "%(classname)s %(barcode)s" +msgstr "" + +#: checkins/models.py +msgid "person" +msgstr "" + +#: checkins/models.py +msgid "person identifier" +msgstr "" + +#: checkins/models.py +msgid "person identifiers" +msgstr "" + +#: checkins/models.py +msgid "debate" +msgstr "debata" + +#: checkins/models.py +msgid "debate identifier" +msgstr "" + +#: checkins/models.py +msgid "debate identifiers" +msgstr "" + +#: checkins/models.py +msgid "room identifier" +msgstr "" + +#: checkins/models.py +msgid "room identifiers" +msgstr "" + +#: checkins/models.py +msgid "identifier" +msgstr "" + +#: checkins/models.py +msgid "check-in time" +msgstr "" + +#: checkins/models.py +msgid "tournament" +msgstr "turnaje" + +#: checkins/models.py +msgid "check-in event" +msgstr "" + +#: checkins/models.py +msgid "check-in events" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "With identifiers" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "View as barcodes" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "Generate missing identifiers" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "Generate all identifiers" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "There are no identifiers available to view. An admin will need to generate them." +msgstr "" + +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +msgstr "" + +#: checkins/templates/checkin_printables.html +msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." +msgstr "" + +#: checkins/templates/checkin_scan.html +msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "Not checked in (barcode %(barcode)s)" +msgstr "" + +#: checkins/utils.py +msgid "Not checked in; no barcode assigned" +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "checked in at %(time)s" +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "%(speaker)s checked in at %(time)s." +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "%(speaker)s is missing." +msgstr "" + +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html +msgid "Scan Identifiers" +msgstr "" + +#: checkins/views.py +msgid "People's Check-In Statuses" +msgstr "" + +#: checkins/views.py +msgid "Rooms' Check-In Statuses" +msgstr "" + +#: checkins/views.py templates/nav/admin_nav.html +msgid "Make Identifiers" +msgstr "" + +#: checkins/views.py templates/nav/admin_nav.html +msgid "Speakers" +msgstr "" + +#: checkins/views.py templates/nav/public_nav.html +msgid "Adjudicators" +msgstr "Rozhodčí" + +#: checkins/views.py +msgid "Rooms" +msgstr "" + +#: checkins/views.py +#, python-format +msgid "Generated identifiers for %s" +msgstr "" + +#: checkins/views.py +msgid "Identifiers" +msgstr "" + +#: checkins/views.py +msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." +msgstr "" + +#: checkins/views.py +msgid "You have revoked your check-in." +msgstr "" + +#: checkins/views.py +msgid "Whoops! Looks like your check-in was already revoked." +msgstr "" + +#: checkins/views.py +msgid "Whoops! Looks like you're already checked in." +msgstr "" + +#: checkins/views.py +msgid "You are now checked in." +msgstr "" + +#: settings/core.py +msgid "Arabic" +msgstr "" + +#: settings/core.py +msgid "Bengali" +msgstr "" + +#: settings/core.py +msgid "English" +msgstr "" + +#: settings/core.py +msgid "Spanish" +msgstr "" + +#: settings/core.py +msgid "French" +msgstr "" + +#: settings/core.py +msgid "Indonesian" +msgstr "" + +#: settings/core.py +msgid "Japanese" +msgstr "" + +#: settings/core.py +msgid "Malay" +msgstr "" + +#: settings/core.py +msgid "Portuguese" +msgstr "" + +#: settings/core.py +msgid "Russian" +msgstr "" + +#: settings/core.py +msgid "Simplified Chinese" +msgstr "" + +#: settings/core.py +msgid "Translation" +msgstr "" + +#: templates/admin/delete_protected_message.html +msgid "You need to delete the above objects first." +msgstr "" + +#: templates/admin/style_guide.html +msgid "This style of info card announces critical information. Link." +msgstr "" + +#: templates/admin/style_guide.html +msgid "This style of info card announces general information." +msgstr "" + +#: templates/admin/style_guide.html +msgctxt "page title" +msgid "Form Title" +msgstr "" + +#: templates/admin/style_guide.html +msgid "Sub Title Title" +msgstr "" + +#: templates/admin/style_guide.html templates/registration/login.html +msgctxt "button" +msgid "Log In" +msgstr "" + +#: templates/admin/style_guide.html templates/registration/login.html +msgctxt "button" +msgid "I forgot my password" +msgstr "" + +#: templates/base.html +msgid "Tabbycat" +msgstr "" + +#: templates/base.html +#, python-format +msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" +msgstr "" + +#: templates/base.html +msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" +msgstr "" + +#: templates/components/form-errors.html +msgid "Whoops! There was an error with one or more fields." +msgstr "" + +#: templates/components/formset.html +msgid "Save and Add More" +msgstr "" + +#: templates/errors/assistant_403.html templates/errors/public_403.html +msgid "Permission Denied (403)" +msgstr "" + +#: templates/errors/assistant_403.html +#, python-format +msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." +msgstr "" + +#: templates/errors/database_limit_warning.html +#, python-format +msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." +msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: templates/errors/legacy_sendgrid_warning.html +msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." +msgstr "" + +#: templates/errors/public_403.html +#, python-format +msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." +msgstr "" + +#: templates/errors/public_403.html +#, python-format +msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." +msgstr "" + +#: templates/footer.html +#, python-format +msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" +msgstr "" + +#: templates/footer.html +#, python-format +msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" +msgstr "" + +#: templates/footer.html +msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." +msgstr "" + +#: templates/footer.html +#, python-format +msgid "For a tournament of this size, we suggest a donation of $%(amount)s." +msgstr "" + +#: templates/footer.html +msgid "Learn more about donating." +msgstr "" + +#: templates/footer.html +msgid "Donations to Tabbycat from individuals or organisations are much appreciated." +msgstr "" + +#: templates/footer.html +msgid "Still timing debates with the stopwatch app?" +msgstr "" + +#: templates/footer.html +#, python-format +msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." +msgstr "" + +#: templates/footer.html +msgid "Our Organisation" +msgstr "" + +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +msgstr "" + +#: templates/footer.html +msgid "Language" +msgstr "Jazyk" + +#: templates/footer.html +msgid "GitHub" +msgstr "" + +#: templates/footer.html +msgid "Documentation" +msgstr "" + +#: templates/footer.html +msgid "Support" +msgstr "" + +#: templates/footer.html +msgid "Facebook" +msgstr "" + +#: templates/footer.html +msgid "Set Up A Copy" +msgstr "" + +#: templates/footer.html +msgid "Change Language" +msgstr "" + +#: templates/footer.html +msgid "Use this language" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Tabbycat Logo" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Site Home" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "New Tournament" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Edit Database" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Admin Area" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Assistant Area" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Public Area" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Overview" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Setup" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Configuration" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Import Data" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html +msgid "Participants" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Private URLs" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Emails" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Preformed Panels" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Export XML" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Sides" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +msgid "People's Status" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Rooms' Status" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Feedback" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Latest" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Important" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Comments" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Find by Source" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Find by Target" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Unsubmitted" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Add Feedback" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Bulk Update" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Standings" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "All Teams" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Teams" +msgstr "Týmy" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +#, python-format +msgid "%(category)s Teams" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "All Speakers" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +#, python-format +msgid "%(category)s Speakers" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Replies" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Motions" +msgstr "Teze" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Diversity" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Breaks" +msgstr "" + +#: templates/nav/admin_nav.html +#, python-format +msgid "%(category)s" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Adjudicators'" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Edit Categories" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Edit Eligibility" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Log Out" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Enter Results" +msgstr "" + +#: templates/nav/assistant_nav.html templates/nav/public_nav.html +msgid "Enter Feedback" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Participants List" +msgstr "" + +#: templates/nav/assistant_nav.html templates/nav/public_nav.html +msgid "Institutions" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Code Names" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "View Identifiers" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Room's Status" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Display/Print Draw" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Team Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Speaker Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Replies Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Adjudicator Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Motions Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "By round" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Globally" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Draws" +msgstr "" + +#: templates/nav/public_nav.html +msgid "No Draws Available" +msgstr "" + +#: templates/nav/public_nav.html +#, python-format +msgid "Draw for %(round)s" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Current Draws" +msgstr "" + +#: templates/nav/public_nav.html templates/nav/round_panel.html +msgid "Results" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Break" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Feedback Progress" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Enter Ballot" +msgstr "" + +#: templates/nav/round_panel.html +msgid "Availability" +msgstr "" + +#: templates/nav/round_panel.html +msgid "Draw" +msgstr "" + +#: templates/nav/round_panel.html +msgid "Display" +msgstr "" + +#: templates/nav/top_nav_base.html +#, python-format +msgid "Administrator area for %(tournament)s" +msgstr "" + +#: templates/nav/top_nav_base.html +#, python-format +msgid "Assistant area for %(tournament)s" +msgstr "" + +#: templates/nav/top_nav_base.html +#, python-format +msgid "Public area for %(tournament)s" +msgstr "" + +#: templates/nav/top_nav_base.html +msgid "Login" +msgstr "" + +#: templates/registration/logged_out.html +msgid "Goodbye" +msgstr "" + +#: templates/registration/logged_out.html +#, python-format +msgid "You have been logged out. Log in again?" +msgstr "" + +#: templates/registration/login.html +msgctxt "page title" +msgid "Login" +msgstr "" + +#: templates/registration/login.html +msgctxt "page title" +msgid "Log in to Tabbycat" +msgstr "" + +#: templates/registration/login.html +msgid "Your username and password didn't match." +msgstr "" + +#: templates/registration/login.html +msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." +msgstr "" + +#: templates/registration/login.html +msgid "Please log in to see this page." +msgstr "" + +#: templates/registration/password_change_done.html +msgctxt "page title" +msgid "Password changed" +msgstr "" + +#: templates/registration/password_change_done.html +msgid "Your password has been changed." +msgstr "" + +#: templates/registration/password_change_done.html +msgid "Go to the home page" +msgstr "" + +#: templates/registration/password_change_form.html +msgctxt "page title" +msgid "Password Change" +msgstr "" + +#: templates/registration/password_change_form.html +#, python-format +msgid "API Token: %(api_token)s" +msgstr "" + +#: templates/registration/password_change_form.html +msgid "The API token will allow you to authorize external applications to access the site as staff." +msgstr "" + +#: templates/registration/password_change_form.html +msgid "Please enter your old password, then enter a new one." +msgstr "" + +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html +msgctxt "button" +msgid "Change my password" +msgstr "" + +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html +msgid "Cancel and go back to the site home page" +msgstr "" + +#: templates/registration/password_reset_complete.html +msgctxt "page title" +msgid "Password reset complete" +msgstr "" + +#: templates/registration/password_reset_complete.html +msgid "Your password has been reset." +msgstr "" + +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html +msgid "Go to the login page" +msgstr "" + +#: templates/registration/password_reset_confirm.html +msgctxt "page title" +msgid "Password Reset Confirmation" +msgstr "" + +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html +msgctxt "page title" +msgid "Password Reset" +msgstr "" + +#: templates/registration/password_reset_confirm.html +msgid "Please enter a new password (twice):" +msgstr "" + +#: templates/registration/password_reset_confirm.html +msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." +msgstr "" + +#: templates/registration/password_reset_done.html +msgctxt "page title" +msgid "Password reset email sent" +msgstr "" + +#: templates/registration/password_reset_done.html +msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." +msgstr "" + +#: templates/registration/password_reset_done.html +msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." +msgstr "" + +#: templates/registration/password_reset_email.html +#, python-format +msgid "Hi, %(user)s!" +msgstr "" + +#: templates/registration/password_reset_email.html +#, python-format +msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." +msgstr "" + +#: templates/registration/password_reset_email.html +msgid "If this was you, follow the link below to reset your password:" +msgstr "" + +#: templates/registration/password_reset_email.html +#, python-format +msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." +msgstr "" + +#: templates/registration/password_reset_form.html +msgid "Enter your email address below, and we'll email you a password reset link." +msgstr "" + +#: templates/registration/password_reset_form.html +msgid "Please enter a valid email address." +msgstr "" + +#: templates/registration/password_reset_form.html users/forms.py +msgid "Email address" +msgstr "" + +#: templates/registration/password_reset_form.html +msgctxt "button" +msgid "Reset my password" +msgstr "" + +#: templates/registration/password_reset_form.html +msgid "Back to the login page" +msgstr "" + +#: templates/registration/password_reset_subject.txt +#, python-format +msgid "Password reset on Tabbycat site at %(domain)s" +msgstr "" + +#: urls.py +#, python-format +msgid "Hi, %(user)s — you just logged in!" +msgstr "" + +#: urls.py +msgid "Welcome! You just logged in!" +msgstr "" + +#: users/admin.py +msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." +msgstr "" + +#: users/admin.py +msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." +msgstr "" + +#: users/templates/admin/auth/delete_user_warning.html +msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." +msgstr "" + +#: users/templates/signup.html +msgid "Sign-Up" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Administrator Account" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Assistant Account" +msgstr "" + +#: users/templates/signup.html +msgid "Create Account" +msgstr "" + +#: users/views.py +msgid "You have successfully created a new administrator account." +msgstr "" + +#: users/views.py +msgid "You have successfully created a new assistant account." +msgstr "" + +#: users/views.py +msgid "Whoops! It looks like someone's already created the first user account. Please log in." +msgstr "" + +#: users/views.py +#, python-format +msgid "Welcome! You've created an account for %s." +msgstr "" + diff --git a/tabbycat/locale/cs/LC_MESSAGES/djangojs.po b/tabbycat/locale/cs/LC_MESSAGES/djangojs.po new file mode 100644 index 00000000000..95eefe6906c --- /dev/null +++ b/tabbycat/locale/cs/LC_MESSAGES/djangojs.po @@ -0,0 +1,554 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-14 04:50+1100\n" +"PO-Revision-Date: 2021-01-17 21:16\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/djangojs.po\n" +"X-Crowdin-File-ID: 962\n" + +#: checkins/templates/CheckInScanContainer.vue: +msgid "Scan Using Camera" +msgstr "" + +#: checkins/templates/CheckInScanContainer.vue: +msgid "Stop Camera Scan" +msgstr "" + +#: checkins/templates/CheckInScanContainer.vue: +msgid "Turn On Sounds" +msgstr "" + +#. Translators: %1: Time of checkin, %2: Barcode number, %3: Name of "owner" +#: checkins/templates/CheckInScanContainer.vue: +msgid "%1 checked in %2: %3" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "All" +msgstr "" + +#. Translators: %1: Option name +#: checkins/templates/CheckInStatusContainer.vue: +msgid "By %1" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "No matching rooms found." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "No matching people found." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "This page will live-update with new check-ins as they occur although the initial list may be up to a minute old." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid " All" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid " All" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "Click to check-in manually" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "saving..." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "This person does not have a check-in identifier so they can't be checked in" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "If you want to view this page without the sidebar (i.e. for displaying to an auditorium) you can use the assistant version." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "Open the assistant version." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "Click to undo a check-in" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 of no institutional affiliation with identifier of %3" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 of no institutional affiliation with no assigned identifier" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 from %3 with identifier of %4" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 from %3 with no assigned identifier" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1 (Present; id=%2)" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1 (Absent; id=%2)" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a team with speakers %2" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "Anonymous (due to team codes)" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "Anon" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "Independent" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (%2) with identifier of %3" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (no category) with identifier of %2" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (%2) with no assigned identifier" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (no category) with no assigned identifier" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "Uncategorised" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "No Category" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "Priority %1" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 %4" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 on %4 (Chair)" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 on %4 (Panellist)" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 on %4 (Trainee)" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "ID %1," +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "Room:" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "Chair for Panel of %1" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: +msgid "Solo Chair" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: +msgid "Panellist" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: +msgid "Trainee" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "Team" +msgstr "Tým" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Mark speeches %1 to %2; %3." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Mark replies %1 to %2; %3." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Return ballots to %1." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "The motion is %1" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Debated" +msgstr "Debatováno" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Circle %1" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "%1: %2" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Aff Veto" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Neg Veto" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: printing/templates/PrintableTeamScores.vue: +msgid "%1:" +msgstr "%1:" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "tab entry" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "tab check" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: checkins/templates/PeopleStatusMixin.vue: +msgid "Unaffiliated" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "no ½ marks" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "½ marks are allowed" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "decimal marks are allowed" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "%1 (%2, %3)" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Adjudicating with %1." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "; " +msgstr "" + +#: printing/templates/PrintableFeedback.vue: +msgid "Did %1 deliver the adjudication?" +msgstr "" + +#: printing/templates/PrintableFeedback.vue: printing/templates/PrintableFeedbackQuestion.vue: +msgid "Yes" +msgstr "Ano" + +#: printing/templates/PrintableFeedback.vue: +msgid "No, I am submitting feedback on:" +msgstr "" + +#: printing/templates/PrintableFeedbackQuestion.vue: +msgid "Unsure" +msgstr "" + +#: printing/templates/PrintableFeedbackQuestion.vue: +msgid "No" +msgstr "Ne" + +#: printing/templates/PrintableScoresheet.vue: +msgid "Which team won the debate:" +msgstr "" + +#: printing/templates/PrintableScoresheet.vue: +msgid "By how many points did they win:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "%1, %2" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "IMPORTANT: Check and explicitly note if a speaker gives multiple speeches" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Score:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Circle the last digit of the %1's score:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Circle Rank:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Total:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Circle the last digit of the team's total:" +msgstr "" + +#: templates/tables/TablesContainer.vue:8 +msgid "Find in Table" +msgstr "" + +#: templates/tables/CheckboxTables.vue:30 +msgid "Set All Breaking as Available" +msgstr "" + +#: templates/tables/CheckboxTables.vue:36 +msgid "Set all the availabilities to exactly match what they were in the previous round." +msgstr "" + +#: templates/tables/CheckboxTables.vue:37 +msgid "Match" +msgstr "" + +#: templates/tables/CheckboxTables.vue:41 +msgid "Set all availabilities to exactly match check-ins." +msgstr "" + +#: templates/tables/CheckboxTables.vue:44 +msgid "Match Check-Ins" +msgstr "" + +#: templates/tables/CheckboxTables.vue: +msgid "Set people as available only if they have a check-in and are currently unavailable — i.e. it will not overwrite any existing availabilities." +msgstr "" + +#: templates/tables/CheckboxTables.vue:47 +msgid "Copy From Check-Ins" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "Ballots Status" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "Latest Actions" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "No Actions Yet" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "Latest Results" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "No Confirmed Results Yet" +msgstr "" + +#: participants/templates/DiversityContainer.vue:6 +msgid "Speaker Demographics" +msgstr "" + +#: participants/templates/DiversityContainer.vue:11 +msgid "No Gender Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:18 +msgid "No Speaker Categories Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:33 +msgid "Speaker Results" +msgstr "" + +#: participants/templates/DiversityContainer.vue:36 +msgid "speakers with gender data" +msgstr "" + +#: participants/templates/DiversityContainer.vue:38 +msgid "speaker scores total" +msgstr "" + +#: participants/templates/DiversityContainer.vue:49 +msgid "No Region Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:56 +msgid "Adjudicator Demographics" +msgstr "" + +#: participants/templates/DiversityContainer.vue:68 +msgid "No Position Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:83 +msgid "Adjudicator Results" +msgstr "" + +#: participants/templates/DiversityContainer.vue:86 +msgid "adjudicators with gender data" +msgstr "" + +#: participants/templates/DiversityContainer.vue:88 +msgid "feedback scores total" +msgstr "" + +#: participants/templates/DiversityContainer.vue:94 +msgid "No Adjudicator Ratings Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:99 +msgid "No Adjudicator-Adjudicator Feedback Information" +msgstr "" + +#: results/templates/ResultsStats.vue:10 +msgid "Checked-In" +msgstr "" + +#: results/templates/ResultsStats.vue:15 +msgid "Not Checked-In" +msgstr "" + +#: results/templates/ResultsStats.vue:19 +msgid "Ballot Check-Ins" +msgstr "" + +#: results/templates/ResultsStats.vue:26 +msgid "Unknown" +msgstr "" + +#: results/templates/ResultsStats.vue:31 +msgid "Unconfirmed" +msgstr "" + +#: results/templates/ResultsStats.vue:36 +msgid "Confirmed" +msgstr "" + +#: results/templates/ResultsStats.vue:40 +msgid "Ballot Statuses" +msgstr "" + +#: results/templates/BallotsCell.vue:18 +msgid "You cannot confirm this ballot because you entered it" +msgstr "" + +#: results/templates/BallotsCell.vue:34 +msgid "Add Ballot" +msgstr "" + +#: results/templates/BallotsCell.vue:79 +msgid "Re-Edit" +msgstr "" + +#: results/templates/BallotsCell.vue:81 +msgid "Review" +msgstr "" + +#: utils/templates/AutoSaveCounter.vue:4 +msgid "No changes" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:8 +msgid "Return to Draw" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:15 +msgid "Auto-Prioritise" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:17 +msgid "Auto-Allocate" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Break" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Gender" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Rank" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Region" +msgstr "" + +#. Translators: Short for "Venue Category" +#: utils/templates/DragAndDropActions.vue:65 +msgid "Category" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:5 +msgid "The debate's bracket" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:9 +msgid "The bracket range of the hypothetical debate" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:20 +msgid "The total number of live break categories across all teams" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:26 +msgid "The estimated total number of live break categories across all teams of the hypothetical debate" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:33 +msgid "This debate's priority" +msgstr "" + +#: draw/templates/InlineTeam.vue:41 +msgid "No code name set" +msgstr "" + diff --git a/tabbycat/motions/locale/cs/LC_MESSAGES/django.po b/tabbycat/motions/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..11a67318830 --- /dev/null +++ b/tabbycat/motions/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,433 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 936\n" + +#: motions/apps.py motions/templates/public_motions.html +msgid "Motions" +msgstr "Teze" + +#: motions/models.py +msgid "text" +msgstr "" + +#: motions/models.py +msgid "The full motion e.g., \"This House would straighten all bananas\"" +msgstr "" + +#: motions/models.py +msgid "reference" +msgstr "" + +#: motions/models.py +msgid "Shortcode for the motion, e.g., \"Bananas\"" +msgstr "" + +#: motions/models.py +msgid "info slide" +msgstr "" + +#: motions/models.py +msgid "The information slide for this topic; if it has one" +msgstr "" + +#: motions/models.py +msgid "tournament" +msgstr "turnaje" + +#: motions/models.py +msgid "rounds" +msgstr "" + +#: motions/models.py +msgid "motion" +msgstr "teze" + +#: motions/models.py +msgid "motions" +msgstr "teze" + +#: motions/models.py +msgid "debate team" +msgstr "" + +#: motions/models.py +msgid "preferences" +msgstr "" + +#: motions/models.py +msgid "ballot submission" +msgstr "" + +#: motions/models.py +msgid "debate team motion preference" +msgstr "" + +#: motions/models.py +msgid "debate team motion preferences" +msgstr "" + +#: motions/models.py +msgid "round" +msgstr "" + +#: motions/models.py +msgid "sequence number" +msgstr "" + +#: motions/models.py +msgid "The order in which motions are displayed" +msgstr "" + +#: motions/models.py +msgid "round motion" +msgstr "" + +#: motions/models.py +msgid "round motions" +msgstr "" + +#: motions/statistics.py +msgid "extremely strong evidence" +msgstr "" + +#: motions/statistics.py +msgid "strong evidence" +msgstr "" + +#: motions/statistics.py +msgid "moderate evidence" +msgstr "" + +#: motions/statistics.py +msgid "weak evidence" +msgstr "" + +#: motions/statistics.py +msgid "very weak evidence" +msgstr "" + +#: motions/statistics.py +msgid "extremely weak evidence" +msgstr "" + +#: motions/statistics.py +msgid "balance inconclusive" +msgstr "" + +#: motions/statistics.py +msgid "too few debates to get a meaningful statistic" +msgstr "" + +#: motions/statistics.py +#, python-format +msgid "imbalanced at %(level)s level" +msgstr "" + +#: motions/statistics.py +#, python-format +msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." +msgstr "" + +#: motions/statistics.py +msgid "probably balanced" +msgstr "" + +#: motions/statistics.py +#, python-format +msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." +msgstr "" + +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html +msgid "View Info Slide" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "results from %(ndebates)s debate" +msgid_plural "results from %(ndebates)s debates" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" +msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" +msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/templates/motion_statistics_bp_elim.html +msgid "advanced" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +msgctxt "abbreviation for 'advanced', used when not enough space" +msgid "adv." +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +msgid "eliminated" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +msgctxt "abbreviation for 'eliminated', used when not enough space" +msgid "elim." +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "%(side)s results distribution" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html +msgid "No results for this motion" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Government" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Opposition" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Average Points per bench" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Opening" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Closing" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Average Points per half" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +#, python-format +msgid "average points per position (%(ndebates)s debate)" +msgid_plural "average points per position (%(ndebates)s debates)" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/templates/motion_statistics_bp_prelim.html +#, python-format +msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" +msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/templates/motion_statistics_bp_prelim.html +#, python-format +msgid "%(side)s results" +msgstr "" + +#: motions/templates/motion_statistics_twoteam.html +#, python-format +msgid "%(count)s %(side)s win" +msgid_plural "%(count)s %(side)s wins" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/templates/motion_statistics_twoteam.html +msgid "No teams debated this motion" +msgstr "" + +#: motions/templates/motion_statistics_twoteam.html +#, python-format +msgid "%(count)s %(side)s veto" +msgid_plural "%(count)s %(side)s vetoes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/templates/motion_statistics_twoteam.html +msgid "No teams vetoed this motion" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Edit Motion" +msgid_plural "Edit Motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/templates/motions_edit.html +msgid "Display Draw" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Reuse Motions from Last Round" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Use Existing Motions" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/templates/motions_edit.html +msgid "Save Motion" +msgid_plural "Save Motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/templates/motions_info.html +msgid "Info Slide" +msgstr "" + +#: motions/templates/public_motions.html +msgid "There are no motions available for this round." +msgstr "" + +#: motions/templates/public_motions.html +msgid "The motions for this round have not been released." +msgstr "" + +#: motions/templates/public_motions.html +msgid "The motion for this round has not been released." +msgstr "" + +#: motions/templates/show.html +#, python-format +msgid "Reveal Info Slide for %(round)s" +msgid_plural "Reveal Info Slides for %(round)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/templates/show.html +#, python-format +msgid "Reveal Motion for %(round)s" +msgid_plural "Reveal Motions for %(round)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/templates/show.html +msgid "There are no motions for this round entered into Tabbycat." +msgstr "" + +#: motions/utils.py +msgid "Not all latest ballots list the same motion, so could not be merged." +msgstr "" + +#: motions/utils.py +msgid "Motion vetos are inconsistent, so could not be merged." +msgstr "" + +#: motions/views.py +msgid "The motion has been saved." +msgstr "" + +#: motions/views.py +#, python-format +msgid "%(count)d motion has been saved." +msgid_plural "%(count)d motions have been saved." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/views.py +#, python-format +msgid "%(count)d motion has been deleted." +msgid_plural "%(count)d motions have been deleted." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "" + +#: motions/views.py +#, python-format +msgid "Reused the motion from the previous round." +msgid_plural "Reused the %(count)d motions from the previous round." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/views.py +msgid "Round Motions" +msgstr "" + +#: motions/views.py +msgid "Motion Statistics" +msgstr "" + diff --git a/tabbycat/notifications/locale/cs/LC_MESSAGES/django.po b/tabbycat/notifications/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..47d455bbf16 --- /dev/null +++ b/tabbycat/notifications/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,418 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" +"Last-Translator: philip_tc\n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/notifications/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 938\n" + +#: notifications/apps.py +msgid "Notifications" +msgstr "" + +#: notifications/forms.py +msgid "Recipient email address" +msgstr "" + +#: notifications/forms.py +#, python-format +msgid "Test email from %(host)s" +msgstr "" + +#: notifications/forms.py +#, python-format +msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" +msgstr "" + +#: notifications/forms.py +msgid "Subject" +msgstr "" + +#: notifications/forms.py +msgid "Message" +msgstr "" + +#: notifications/models.py +msgid "email" +msgstr "" + +#: notifications/models.py +msgid "SMS" +msgstr "" + +#: notifications/models.py +msgid "recipient" +msgstr "" + +#: notifications/models.py +msgid "method" +msgstr "" + +#: notifications/models.py +msgid "context" +msgstr "" + +#: notifications/models.py +msgid "notification" +msgstr "" + +#: notifications/models.py +msgid "timestamp" +msgstr "" + +#: notifications/models.py +msgid "sent message" +msgstr "" + +#: notifications/models.py +msgid "sent messages" +msgstr "" + +#: notifications/models.py +msgid "team points" +msgstr "" + +#: notifications/models.py +msgid "ballot confirmed" +msgstr "" + +#: notifications/models.py +msgid "feedback URL" +msgstr "" + +#: notifications/models.py +msgid "ballot URL" +msgstr "" + +#: notifications/models.py +msgid "landing page URL" +msgstr "" + +#: notifications/models.py +msgid "adjudicator draw released" +msgstr "" + +#: notifications/models.py +msgid "team registration" +msgstr "" + +#: notifications/models.py +msgid "adjudicator registration" +msgstr "" + +#: notifications/models.py +msgid "motion(s) released" +msgstr "" + +#: notifications/models.py +msgid "team draw released" +msgstr "" + +#: notifications/models.py +msgid "custom message" +msgstr "" + +#: notifications/models.py +msgid "event" +msgstr "" + +#: notifications/models.py +msgid "tournament" +msgstr "turnaje" + +#: notifications/models.py +msgid "round" +msgstr "" + +#: notifications/models.py +msgid "subject template" +msgstr "" + +#: notifications/models.py +msgid "body template" +msgstr "" + +#: notifications/models.py +msgid "bulk notification" +msgstr "" + +#: notifications/models.py +msgid "bulk notifications" +msgstr "" + +#: notifications/models.py +msgid "Processed" +msgstr "" + +#: notifications/models.py +msgid "Dropped" +msgstr "" + +#: notifications/models.py +msgid "Deferred" +msgstr "" + +#: notifications/models.py +msgid "Delivered" +msgstr "" + +#: notifications/models.py +msgid "Bounced" +msgstr "" + +#: notifications/models.py +msgid "Opened" +msgstr "" + +#: notifications/models.py +msgid "Clicked" +msgstr "" + +#: notifications/models.py +msgid "Unsubscribed" +msgstr "" + +#: notifications/models.py +msgid "Marked as spam" +msgstr "" + +#: notifications/models.py +msgid "Unsubscribed from group" +msgstr "" + +#: notifications/models.py +msgid "Resubscribed to group" +msgstr "" + +#: notifications/models.py +msgid "email message" +msgstr "" + +#: notifications/models.py +msgid "email status" +msgstr "" + +#: notifications/models.py +msgid "email statuses" +msgstr "" + +#: notifications/templates/email_participants.html +#, python-format +msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." +msgstr "" + +#: notifications/templates/email_participants.html +#, python-format +msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." +msgstr "" + +#: notifications/templates/email_participants.html +msgid "Send Message(s)" +msgstr "" + +#: notifications/templates/email_statuses.html +msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." +msgstr "" + +#: notifications/templates/notifications_nav.html notifications/views.py +msgid "Email Statuses" +msgstr "" + +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html +msgid "Send Test Email" +msgstr "" + +#: notifications/templates/notifications_nav.html +msgid "Send Custom Email" +msgstr "" + +#: notifications/templates/test_email.html +msgctxt "page title" +msgid "Send Test Email" +msgstr "" + +#: notifications/templates/test_email.html +msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." +msgstr "" + +#: notifications/templates/test_email.html +#, python-format +msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." +msgstr "" + +#: notifications/templates/test_email.html +msgid "Go back to the site home page" +msgstr "" + +#: notifications/utils.py +msgid "the chair" +msgstr "" + +#: notifications/utils.py +msgid "the only" +msgstr "" + +#: notifications/utils.py +msgid "a panellist" +msgstr "" + +#: notifications/utils.py +msgid "a trainee" +msgstr "" + +#: notifications/utils.py +msgid "TBA" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "%(tournament)s %(round)s @ %(room)s" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" +msgstr "" + +#: notifications/utils.py +msgid "Win" +msgstr "" + +#: notifications/utils.py +msgid "Loss" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(text)s (%(ref)s)
  • " +msgstr "" + +#: notifications/utils.py +msgid ", " +msgstr "" + +#: notifications/views.py +#, python-format +msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" +msgstr "" + +#: notifications/views.py +msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." +msgstr "" + +#: notifications/views.py +#, python-format +msgid "There was an error sending the test email: %(error)s" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "A test email has been sent to %(recipient)s." +msgstr "" + +#: notifications/views.py +msgid "N/A" +msgstr "" + +#: notifications/views.py +msgid "Not known" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "%(status)s @ %(time)s" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "@ %s" +msgstr "" + +#: notifications/views.py +msgid "Timeline" +msgstr "" + +#: notifications/views.py +msgid "Participant" +msgstr "" + +#: notifications/views.py +msgid "Email address" +msgstr "" + +#: notifications/views.py +msgid "Status" +msgstr "" + +#: notifications/views.py +msgid "Time" +msgstr "" + +#: notifications/views.py +msgid "Email Participants" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "%(email_count)s email has been queued for sending." +msgid_plural "%(email_count)s emails have been queued for sending." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: notifications/views.py +msgid "No emails were sent — likely because no recipients were selected." +msgstr "" + +#: notifications/views.py +msgid "Send Email" +msgstr "" + +#: notifications/views.py +msgid "Not Provided" +msgstr "" + +#: notifications/views.py +msgid "Role" +msgstr "" + +#: notifications/views.py +msgid "Adjudicator" +msgstr "Rozhodčí" + +#: notifications/views.py +msgid "Speaker" +msgstr "" + +#: notifications/views.py +msgid "Speakers" +msgstr "" + +#: notifications/views.py +msgid "Adjudicators" +msgstr "Rozhodčí" + diff --git a/tabbycat/options/locale/cs/LC_MESSAGES/django.po b/tabbycat/options/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..180c491c1f5 --- /dev/null +++ b/tabbycat/options/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,1618 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" +"Last-Translator: philip_tc\n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/options/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 940\n" + +#: options/apps.py +msgid "Tournament Options" +msgstr "" + +#: options/models.py +msgid "instance" +msgstr "" + +#: options/models.py +msgid "tournament preference" +msgstr "" + +#: options/models.py +msgid "tournament preferences" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Score Rules" +msgstr "" + +#: options/preferences.py +msgid "Minimum allowed score for substantive speeches" +msgstr "" + +#: options/preferences.py +msgid "Minimum speaker score" +msgstr "" + +#: options/preferences.py +msgid "Maximum speaker score" +msgstr "" + +#: options/preferences.py +msgid "Maximum allowed score for substantive speeches" +msgstr "" + +#: options/preferences.py +msgid "Speaker score step" +msgstr "" + +#: options/preferences.py +msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" +msgstr "" + +#: options/preferences.py +msgid "The largest amount by which one team can beat another (0 means no limit)" +msgstr "" + +#: options/preferences.py +msgid "Maximum margin" +msgstr "" + +#: options/preferences.py +msgid "Minimum allowed score for reply speeches" +msgstr "" + +#: options/preferences.py +msgid "Minimum reply score" +msgstr "" + +#: options/preferences.py +msgid "Maximum allowed score for reply speeches" +msgstr "" + +#: options/preferences.py +msgid "Maximum reply score" +msgstr "" + +#: options/preferences.py +msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" +msgstr "" + +#: options/preferences.py +msgid "Reply score step" +msgstr "" + +#: options/preferences.py +msgid "If checked, a team's winning margin includes dissenting adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Margin includes dissenters" +msgstr "" + +#: options/preferences.py +msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" +msgstr "" + +#: options/preferences.py +msgid "Team score includes ghosts" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Draw Rules" +msgstr "" + +#: options/preferences.py +msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" +msgstr "" + +#: options/preferences.py +msgid "Minimum adjudicator score to vote" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by adjudicator auto-allocator for conflicts" +msgstr "" + +#: options/preferences.py +msgid "Adjudicator conflict penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by adjudicator auto-allocator for history" +msgstr "" + +#: options/preferences.py +msgid "Adjudicator history penalty" +msgstr "" + +#: options/preferences.py +msgid "Penality applied by preformed panel auto-allocator for priority mismatch" +msgstr "" + +#: options/preferences.py +msgid "Importance mismatch penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" +msgstr "" + +#: options/preferences.py +msgid "Team institution penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" +msgstr "" + +#: options/preferences.py +msgid "Team history penalty" +msgstr "" + +#: options/preferences.py +msgid "If checked, the draw will try to avoid pairing teams against their own institution" +msgstr "" + +#: options/preferences.py +msgid "Avoid same institution" +msgstr "" + +#: options/preferences.py +msgid "If checked, the draw will try to avoid having teams see each other twice" +msgstr "" + +#: options/preferences.py +msgid "Avoid team history" +msgstr "" + +#: options/preferences.py +msgid "How odd brackets are resolved (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Odd bracket resolution method" +msgstr "" + +#: options/preferences.py +msgid "Pull up from top" +msgstr "" + +#: options/preferences.py +msgid "Pull up from bottom" +msgstr "" + +#: options/preferences.py +msgid "Pull up from middle" +msgstr "" + +#: options/preferences.py +msgid "Pull up at random" +msgstr "" + +#: options/preferences.py +msgid "Intermediate brackets" +msgstr "" + +#: options/preferences.py +msgid "Intermediate brackets with bubble-up-bubble-down" +msgstr "" + +#: options/preferences.py +msgid "Intermediate 1 (pre-allocated sides)" +msgstr "" + +#: options/preferences.py +msgid "Intermediate 2 (pre-allocated sides)" +msgstr "" + +#: options/preferences.py +msgid "How affirmative/negative positions are assigned (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Side allocations method" +msgstr "" + +#: options/preferences.py +msgid "Random" +msgstr "" + +#: options/preferences.py +msgid "Balance" +msgstr "" + +#: options/preferences.py +msgid "Pre-allocated" +msgstr "" + +#: options/preferences.py +msgid "Manually enter from ballot" +msgstr "" + +#: options/preferences.py +msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." +msgstr "" + +#: options/preferences.py +msgid "Pairing method" +msgstr "" + +#: options/preferences.py +msgid "Slide" +msgstr "" + +#: options/preferences.py +msgid "Fold" +msgstr "" + +#: options/preferences.py +msgid "Adjacent" +msgstr "" + +#: options/preferences.py +msgid "Fold top, adjacent rest" +msgstr "" + +#: options/preferences.py +msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Conflict avoidance method" +msgstr "" + +#: options/preferences.py +msgid "Off" +msgstr "" + +#: options/preferences.py +msgid "One-up-one-down" +msgstr "" + +#: options/preferences.py +msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." +msgstr "" + +#: options/preferences.py +msgid "Pullup restriction" +msgstr "" + +#: options/preferences.py +msgid "No restriction" +msgstr "" + +#: options/preferences.py +msgid "Choose from teams who have been pulled up the fewest times so far" +msgstr "" + +#: options/preferences.py +msgid "Choose from teams with the lowest draw strength by wins so far" +msgstr "" + +#: options/preferences.py +msgid "Choose from teams with the lowest draw strength by speaks so far" +msgstr "" + +#: options/preferences.py +msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." +msgstr "" + +#: options/preferences.py +msgid "BP pullup distribution" +msgstr "" + +#: options/preferences.py +msgid "Anywhere in bracket" +msgstr "" + +#: options/preferences.py +msgid "All in the same room (not WUDC-compliant)" +msgstr "" + +#: options/preferences.py +msgid "In BP, which position cost function to use (see documentation for details)" +msgstr "" + +#: options/preferences.py +msgid "BP position cost" +msgstr "" + +#: options/preferences.py +msgid "Simple" +msgstr "" + +#: options/preferences.py +msgid "Rényi entropy" +msgstr "" + +#: options/preferences.py +msgid "Population variance" +msgstr "" + +#: options/preferences.py +msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." +msgstr "" + +#: options/preferences.py +msgid "Rényi order (BP)" +msgstr "" + +#: options/preferences.py +msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." +msgstr "" + +#: options/preferences.py +msgid "BP position cost exponent" +msgstr "" + +#: options/preferences.py +msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." +msgstr "" + +#: options/preferences.py +msgid "BP assignment method" +msgstr "" + +#: options/preferences.py +msgid "Hungarian algorithm (not WUDC-compliant)" +msgstr "" + +#: options/preferences.py +msgid "Hungarian algorithm with preshuffling" +msgstr "" + +#: options/preferences.py +msgid "Automatically make all adjudicators available for all rounds" +msgstr "" + +#: options/preferences.py +msgid "Skip adjudicator check-ins" +msgstr "" + +#: options/preferences.py +msgid "Hide panellist positions in the UI (and don't allocate them)" +msgstr "" + +#: options/preferences.py +msgid "No panellist adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Hide trainee positions in the UI (and don't allocate them)" +msgstr "" + +#: options/preferences.py +msgid "No trainee adjudicators" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Feedback" +msgstr "" + +#: options/preferences.py +msgid "Minimum possible adjudicator score that can be given" +msgstr "" + +#: options/preferences.py +msgid "Minimum adjudicator score" +msgstr "" + +#: options/preferences.py +msgid "Maximum possible adjudicator score that can be given" +msgstr "" + +#: options/preferences.py +msgid "Maximum adjudicator score" +msgstr "" + +#: options/preferences.py +msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" +msgstr "" + +#: options/preferences.py +msgid "Allow and expect feedback to be submitted by" +msgstr "" + +#: options/preferences.py +msgid "Chairs on panellists and trainees" +msgstr "" + +#: options/preferences.py +msgid "Panellists on chairs, chairs on panellists and trainees" +msgstr "" + +#: options/preferences.py +msgid "Panellists and trainees on chairs, vice-versa" +msgstr "" + +#: options/preferences.py +msgid "All adjudicators (including trainees) on each other" +msgstr "" + +#: options/preferences.py +msgid "Expect feedback to be submitted by teams on" +msgstr "" + +#: options/preferences.py +msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" +msgstr "" + +#: options/preferences.py +msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" +msgstr "" + +#: options/preferences.py +msgid "All adjudicators in their panels (including trainees)" +msgstr "" + +#: options/preferences.py +msgid "Show unexpected feedback submissions in participants pages" +msgstr "" + +#: options/preferences.py +msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" +msgstr "" + +#: options/preferences.py +msgid "Show if an adjudicator is a trainee (unaccredited)" +msgstr "" + +#: options/preferences.py +msgid "Show unaccredited" +msgstr "" + +#: options/preferences.py +msgid "Any explanatory text needed to introduce the feedback form" +msgstr "" + +#: options/preferences.py +msgid "Feedback introduction/explanation" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Debate Rules" +msgstr "" + +#: options/preferences.py +msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" +msgstr "" + +#: options/preferences.py +msgid "Teams in debate" +msgstr "" + +#: options/preferences.py +msgid "Two-team format" +msgstr "" + +#: options/preferences.py +msgid "British Parliamentary (four teams)" +msgstr "" + +#: options/preferences.py +msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." +msgstr "" + +#: options/preferences.py +msgid "Ballots per debate, preliminary rounds" +msgstr "" + +#: options/preferences.py +msgid "One ballot per voting adjudicator" +msgstr "" + +#: options/preferences.py +msgid "Consensus ballot (one ballot per debate)" +msgstr "" + +#: options/preferences.py +msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." +msgstr "" + +#: options/preferences.py +msgid "Ballots per debate, elimination rounds" +msgstr "" + +#: options/preferences.py +msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." +msgstr "" + +#: options/preferences.py +msgid "Winner Declaration in ballot(s)" +msgstr "" + +#: options/preferences.py +msgid "Do not require separate winner selection" +msgstr "" + +#: options/preferences.py +msgid "Require separate winner selection as a check on correct scores" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection to break tied-point debates" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection, overriding scores" +msgstr "" + +#: options/preferences.py +msgid "When ballots should ask for speaker scores." +msgstr "" + +#: options/preferences.py +msgid "Require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Always require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Only require speaker scores in preliminary rounds" +msgstr "" + +#: options/preferences.py +msgid "Never require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "How many substantive speakers on a team" +msgstr "" + +#: options/preferences.py +msgid "Substantive speakers" +msgstr "" + +#: options/preferences.py +msgid "What to call the teams" +msgstr "" + +#: options/preferences.py +msgid "Side names" +msgstr "" + +#: options/preferences.py +msgid "Whether this style features scored reply speeches" +msgstr "" + +#: options/preferences.py +msgid "Reply scores" +msgstr "" + +#: options/preferences.py +msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" +msgstr "" + +#: options/preferences.py +msgid "Require reply speaker to have given a substantive speech" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Standings" +msgstr "" + +#: options/preferences.py +msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" +msgstr "" + +#: options/preferences.py +msgid "Speeches missable for standings eligibility" +msgstr "" + +#: options/preferences.py +msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" +msgstr "" + +#: options/preferences.py +msgid "Replies missable for standings eligibility" +msgstr "" + +#: options/preferences.py +msgid "Metrics to use to rank teams (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Team standings precedence" +msgstr "" + +#: options/preferences.py +#, python-format +msgid "The following metrics can't be listed twice: %(duplicates)s" +msgstr "" + +#: options/preferences.py +msgid "Metrics to calculate, but not used to rank teams" +msgstr "" + +#: options/preferences.py +msgid "Team standings extra metrics" +msgstr "" + +#: options/preferences.py +msgid "Metrics to use to rank speakers (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Speaker standings precedence" +msgstr "" + +#: options/preferences.py +msgid "Metrics to calculate, but not used to rank speakers" +msgstr "" + +#: options/preferences.py +msgid "Speaker standings extra metrics" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Tab Release" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the team tab. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release team tab to public" +msgstr "" + +#: options/preferences.py +msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." +msgstr "" + +#: options/preferences.py +msgid "Top teams cutoff" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the speaker tab. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release speaker tab to public" +msgstr "" + +#: options/preferences.py +msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." +msgstr "" + +#: options/preferences.py +msgid "Top speakers cutoff" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the replies tab. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release replies tab to public" +msgstr "" + +#: options/preferences.py +msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." +msgstr "" + +#: options/preferences.py +msgid "Top replies cutoff" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release motions tab to public" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the feedback scores of all adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Release adjudicator tab to public" +msgstr "" + +#: options/preferences.py +msgid "What (if released) the adjudicator tab shows" +msgstr "" + +#: options/preferences.py +msgid "Adjudicator tab displays" +msgstr "" + +#: options/preferences.py +msgid "Only shows base score" +msgstr "" + +#: options/preferences.py +msgid "Only shows final score" +msgstr "" + +#: options/preferences.py +msgid "Shows base, final, and per-round scores" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release ballots to public" +msgstr "" + +#: options/preferences.py +msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" +msgstr "" + +#: options/preferences.py +msgid "Release all round results to public" +msgstr "" + +#: options/preferences.py +msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release ballots through private URLs" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Data Entry" +msgstr "" + +#: options/preferences.py +msgid "Whether adjudicators can submit ballots themselves, and how they do so" +msgstr "" + +#: options/preferences.py +msgid "Ballot submissions from adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Disabled (tab staff only)" +msgstr "" + +#: options/preferences.py +msgid "Use private URLs" +msgstr "" + +#: options/preferences.py +msgid "Use publicly accessible form" +msgstr "" + +#: options/preferences.py +msgid "Whether participants can submit feedback themselves, and how they do so" +msgstr "" + +#: options/preferences.py +msgid "Feedback submissions from participants" +msgstr "" + +#: options/preferences.py +msgid "If checked, users must enter a password when submitting public feedback and ballots" +msgstr "" + +#: options/preferences.py +msgid "Require password for submission" +msgstr "" + +#: options/preferences.py +msgid "Value of the password required for public submissions, if passwords are required" +msgstr "" + +#: options/preferences.py +msgid "Password for public submission" +msgstr "" + +#: options/preferences.py +msgid "Bypasses double checking by setting ballots to be automatically confirmed" +msgstr "" + +#: options/preferences.py +msgid "Bypass double checking" +msgstr "" + +#: options/preferences.py +msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." +msgstr "" + +#: options/preferences.py +msgid "Enforce blind confirmations" +msgstr "" + +#: options/preferences.py +msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." +msgstr "" + +#: options/preferences.py +msgid "Assistant user access" +msgstr "" + +#: options/preferences.py +msgid "All areas (results entry, draw display, and motions)" +msgstr "" + +#: options/preferences.py +msgid "Just results entry and draw display" +msgstr "" + +#: options/preferences.py +msgid "Only results entry" +msgstr "" + +#: options/preferences.py +msgid "Whether participants can check themselves in/out through their private URL." +msgstr "" + +#: options/preferences.py +msgid "Participant self-checkin" +msgstr "" + +#: options/preferences.py +msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" +msgstr "" + +#: options/preferences.py +msgid "Check-In Window (People)" +msgstr "" + +#: options/preferences.py +msgid "The amount of time (in hours) before a room's check-in event expires" +msgstr "" + +#: options/preferences.py +msgid "Check-In Window (Rooms)" +msgstr "" + +#: options/preferences.py +msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" +msgstr "" + +#: options/preferences.py +msgid "Ballot Digit Checks" +msgstr "" + +#: options/preferences.py +msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." +msgstr "" + +#: options/preferences.py +msgid "Score return location" +msgstr "" + +#: options/preferences.py +msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." +msgstr "" + +#: options/preferences.py +msgid "Feedback return location" +msgstr "" + +#: options/preferences.py +msgid "Lets debates have their status as postponed, as to not block draw generation." +msgstr "" + +#: options/preferences.py +msgid "Enable postponements" +msgstr "" + +#: options/preferences.py +msgid "Have each voting adjudicator submit a separate ballot." +msgstr "" + +#: options/preferences.py +msgid "Individual voting ballots" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Public Features" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing all participants in the tournament" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of participants list" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing all institutions in the tournament" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of institutions list" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing diversity statistics" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of diversity info" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." +msgstr "" + +#: options/preferences.py +msgid "Enable public view of the checkin statuses" +msgstr "" + +#: options/preferences.py +msgid "If the participants list is enabled, displays break category eligibility on that page" +msgstr "" + +#: options/preferences.py +msgid "Show break categories on participants page" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing pre-allocated sides" +msgstr "" + +#: options/preferences.py +msgid "Show pre-allocated sides to public" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing released draws" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of draw" +msgstr "" + +#: options/preferences.py +msgid "Disabled" +msgstr "" + +#: options/preferences.py +msgid "Show a single page for the current round's draw" +msgstr "" + +#: options/preferences.py +msgid "Show individual pages for all released draws" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing results of non-silent rounds" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of results" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing motions that have been explicitly released to the public" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of motions" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of team standings" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page for each team and adjudicator showing their records" +msgstr "" + +#: options/preferences.py +msgid "Enable public record pages" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." +msgstr "" + +#: options/preferences.py +msgid "Release team breaks to public" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." +msgstr "" + +#: options/preferences.py +msgid "Release adjudicators break to public" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page detailing who has unsubmitted feedback" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of unsubmitted feedback" +msgstr "" + +#: options/preferences.py +msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." +msgstr "" + +#: options/preferences.py +msgid "Tournament staff" +msgstr "" + +#: options/preferences.py +msgid "Message to be displayed on the tournament home page" +msgstr "" + +#: options/preferences.py +msgid "Welcome message" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "UI Options" +msgstr "" + +#: options/preferences.py +msgid "If showing results to public, show splitting adjudicators in them" +msgstr "" + +#: options/preferences.py +msgid "Show splitting adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Whether and how to use code names for teams" +msgstr "" + +#: options/preferences.py +msgid "Team code names" +msgstr "" + +#: options/preferences.py +msgid "Do not use code names" +msgstr "" + +#: options/preferences.py +msgid "Use real names everywhere, and show code names in tooltips" +msgstr "" + +#: options/preferences.py +msgid "Use code names for public; real names with code names in tooltips for admins" +msgstr "" + +#: options/preferences.py +msgid "Use code names for public; code names with real names in tooltips for admins" +msgstr "" + +#: options/preferences.py +msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" +msgstr "" + +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py +msgid "Display team emoji in the public and admin interfaces" +msgstr "" + +#: options/preferences.py +msgid "Show emoji" +msgstr "" + +#: options/preferences.py +msgid "In tables listing teams, adds a column showing their institutions" +msgstr "" + +#: options/preferences.py +msgid "Show team institutions" +msgstr "" + +#: options/preferences.py +msgid "Hide the institutions of adjudicators on public pages and on printed ballots" +msgstr "" + +#: options/preferences.py +msgid "Show adjudicator institutions" +msgstr "" + +#: options/preferences.py +msgid "Enables a hover element on every team's name showing that team's speakers" +msgstr "" + +#: options/preferences.py +msgid "Show speakers in draw" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Notifications" +msgstr "" + +#: options/preferences.py +msgid "The name of the organizer tasked with managing emails (in case of replies)" +msgstr "" + +#: options/preferences.py +msgid "Reply-to name" +msgstr "" + +#: options/preferences.py +msgid "The email address for handling replies" +msgstr "" + +#: options/preferences.py +msgid "Reply-to address" +msgstr "" + +#: options/preferences.py +msgid "A secret key to accept email status events" +msgstr "" + +#: options/preferences.py +msgid "Email status secret key" +msgstr "" + +#: options/preferences.py +msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" +msgstr "" + +#: options/preferences.py +msgid "Ballot receipts" +msgstr "" + +#: options/preferences.py +msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" +msgstr "" + +#: options/preferences.py +msgid "Ballot receipt subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to adjudicators with their submitted ballot." +msgstr "" + +#: options/preferences.py +msgid "Ballot receipt message" +msgstr "" + +#: options/preferences.py +msgid "The subject line for emails sent to speakers with their team points." +msgstr "" + +#: options/preferences.py +msgid "Team points subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to speakers with their team points." +msgstr "" + +#: options/preferences.py +msgid "Team points message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to adjudicators with their assignments." +msgstr "" + +#: options/preferences.py +msgid "Adjudicator draw subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to adjudicators with their assignments." +msgstr "" + +#: options/preferences.py +msgid "Adjudicator draw message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to teams with their draw." +msgstr "" + +#: options/preferences.py +msgid "Team draw subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to participants with their private URLs." +msgstr "" + +#: options/preferences.py +msgid "Private URL notification message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to participants with their private URLs." +msgstr "" + +#: options/preferences.py +msgid "Private URL notification subject line" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to participants on motion release." +msgstr "" + +#: options/preferences.py +msgid "Motion release notification subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to participants on motion release." +msgstr "" + +#: options/preferences.py +msgid "Motion release notification message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to participants informing them of their team registration." +msgstr "" + +#: options/preferences.py +msgid "Team registration notification subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to participants informing them of their team registration." +msgstr "" + +#: options/preferences.py +msgid "Team registration notification message" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Motions" +msgstr "Teze" + +#: options/preferences.py +msgid "If checked, ballots require a motion to be entered" +msgstr "" + +#: options/preferences.py +msgid "Enable motions" +msgstr "" + +#: options/preferences.py +msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" +msgstr "" + +#: options/preferences.py +msgid "Ballot Hide Motions" +msgstr "" + +#: options/preferences.py +msgid "Enables the motion veto field on ballots, to track veto statistics" +msgstr "" + +#: options/preferences.py +msgid "Motion vetoes" +msgstr "" + +#: options/preferences.py +msgid "If showing results to public, show which motions were selected in the record" +msgstr "" + +#: options/preferences.py +msgid "Show motions in results" +msgstr "" + +#: options/preferences.py +msgid "Order in which are listed by round in the public view" +msgstr "" + +#: options/preferences.py +msgid "Order to display motions" +msgstr "" + +#: options/preferences.py +msgid "Earliest round first" +msgstr "" + +#: options/preferences.py +msgid "Latest round first" +msgstr "" + +#: options/preferences.py +msgid "Whether motions can be reused from one round to another." +msgstr "" + +#: options/preferences.py +msgid "Allow motion reuse" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Global Settings" +msgstr "" + +#: options/preferences.py +msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." +msgstr "" + +#: options/preferences.py +msgid "Enable API access" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Assistant account creation key" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Administrator account creation key" +msgstr "" + +#: options/presets.py +msgid "Public Information Options" +msgstr "" + +#: options/presets.py +msgid "Enable Public Information" +msgstr "" + +#: options/presets.py +msgid "Disable Public Information" +msgstr "" + +#: options/presets.py +msgid "Australs Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." +msgstr "" + +#: options/presets.py +msgid "British Parliamentary Rules" +msgstr "" + +#: options/presets.py +msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." +msgstr "" + +#: options/presets.py +msgid "Canadian Parliamentary Rules" +msgstr "" + +#: options/presets.py +msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." +msgstr "" + +#: options/presets.py +msgid "Australian Easters Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." +msgstr "" + +#: options/presets.py +msgid "2 vs 2 Impromptu" +msgstr "" + +#: options/presets.py +msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." +msgstr "" + +#: options/presets.py +msgid "3 vs 3 Prepared" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." +msgstr "" + +#: options/presets.py +msgid "UADC Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." +msgstr "" + +#: options/presets.py +msgid "WSDC Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." +msgstr "" + +#: options/presets.py +msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." +msgstr "" + +#: options/presets.py +msgid "Tab Release Options" +msgstr "" + +#: options/presets.py +msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" +msgstr "" + +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html +msgid "Configuration" +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." +msgstr "" + +#: options/templates/preferences_index.html +msgid "The range of scores that can awarded to speeches, replies, and teams" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How teams are paired in the draw and how adjudicators are auto-allocated" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How teams and speakers are ranked in the released tabs" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How adjudicators are ranked and who can submit feedback" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How and where are motions used" +msgstr "" + +#: options/templates/preferences_index.html +msgid "When to release a public tab is made visible and what data it shows" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How ballots, feedback, and check-ins are entered, including online submission options" +msgstr "" + +#: options/templates/preferences_index.html +msgid "What information the site displays on the publicly accessible pages" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Small tweaks in what information is presented by the interface" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Settings which can affect all tournaments on the site" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Manually Set Current Round" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." +msgstr "" + +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Rounds can be weighted so that certain rounds are worth more team points." +msgstr "" + +#: options/templates/preferences_index.html +msgid "Presets" +msgstr "" + +#: options/templates/preferences_index.html +msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "Apply %(preset)s" +msgstr "" + +#: options/templates/preferences_presets_complete.html +#, python-format +msgid "Presets Applied: %(preset_title)s" +msgstr "" + +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html +msgid "Back to Configuration" +msgstr "" + +#: options/templates/preferences_presets_complete.html +msgid "Preferences that were changed" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +#, python-format +msgid "Confirm Presets: %(preset_title)s" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +msgid "Preferences that will not change" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +msgid "Preferences that will change" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +#, python-format +msgid "Apply Presets: %(preset_title)s" +msgstr "" + +#: options/templates/preferences_section_set.html +#, python-format +msgid "Configuration: %(section)s" +msgstr "" + +#: options/templates/preferences_section_set.html +#, python-format +msgid "Edit Configuration: %(section)s" +msgstr "" + +#: options/views.py +#, python-format +msgid "Tournament options (%(section)s) saved." +msgstr "" + +#: options/views.py +#, python-format +msgid "Tournament options saved according to preset %(name)s." +msgstr "" + diff --git a/tabbycat/participants/locale/cs/LC_MESSAGES/django.po b/tabbycat/participants/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..5121f7de5b7 --- /dev/null +++ b/tabbycat/participants/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,978 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" +"Last-Translator: philip_tc\n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/participants/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 942\n" + +#: participants/admin.py +#, python-format +msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" +msgstr "" + +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d speaker had their URL key removed." +msgid_plural "%(count)d speakers had their URL keys removed." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: participants/admin.py +msgid "Reset emoji" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d team had their emoji reset." +msgid_plural "%(count)d teams had their emojis reset." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: participants/admin.py +msgid "Reset code name" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d team had their code name reset." +msgid_plural "%(count)d teams had their code names reset." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: participants/admin.py +#, python-format +msgid "%(count)d adjudicator had their URL key removed." +msgid_plural "%(count)d adjudicators had their URL keys removed." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: participants/apps.py participants/views.py +msgid "Participants" +msgstr "" + +#: participants/models.py +msgid "name" +msgstr "" + +#: participants/models.py +msgid "region" +msgstr "" + +#: participants/models.py +msgid "regions" +msgstr "" + +#. Translators: Change the examples to institutions native to your language; keep consistent between strings +#: participants/models.py +msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" +msgstr "" + +#: participants/models.py +msgid "code" +msgstr "" + +#. Translators: Change the examples to institutions native to your language; keep consistent between strings +#: participants/models.py +msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" +msgstr "" + +#: participants/models.py +msgid "institution" +msgstr "" + +#: participants/models.py +msgid "institutions" +msgstr "" + +#: participants/models.py +msgid "tournament" +msgstr "turnaje" + +#. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" +#: participants/models.py +msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" +msgstr "" + +#: participants/models.py +msgid "slug" +msgstr "" + +#. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" +#: participants/models.py +msgid "Slug for URLs, e.g., \"novice\", \"esl\"" +msgstr "" + +#: participants/models.py +msgid "sequence number" +msgstr "" + +#: participants/models.py +msgid "The order in which the categories are displayed" +msgstr "" + +#: participants/models.py +msgid "limit" +msgstr "" + +#: participants/models.py +msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" +msgstr "" + +#: participants/models.py +msgid "public" +msgstr "" + +#: participants/models.py +msgid "If checked, this category will be included in the speaker category tabs shown to the public" +msgstr "" + +#: participants/models.py +msgid "speaker category" +msgstr "" + +#: participants/models.py +msgid "speaker categories" +msgstr "" + +#: participants/models.py +msgid "email address" +msgstr "" + +#: participants/models.py +msgid "phone" +msgstr "" + +#: participants/models.py +msgid "anonymous" +msgstr "" + +#: participants/models.py +msgid "Anonymous persons will have their name and team redacted on public tab releases" +msgstr "" + +#: participants/models.py +msgid "code name" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py +msgid "URL key" +msgstr "" + +#: participants/models.py +msgid "male" +msgstr "" + +#: participants/models.py +msgid "female" +msgstr "" + +#: participants/models.py +msgid "other" +msgstr "" + +#: participants/models.py +msgid "gender" +msgstr "" + +#: participants/models.py +msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" +msgstr "" + +#: participants/models.py +msgid "pronoun" +msgstr "" + +#: participants/models.py +msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" +msgstr "" + +#: participants/models.py +msgid "person" +msgstr "" + +#: participants/models.py +msgid "persons" +msgstr "rozhodčí" + +#: participants/models.py +msgid "full name/suffix" +msgstr "" + +#: participants/models.py +msgid "Do not include institution name (see \"uses institutional prefix\" below)" +msgstr "" + +#: participants/models.py +msgid "short name/suffix" +msgstr "" + +#: participants/models.py +msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure institutional identity on public-facing pages" +msgstr "" + +#: participants/models.py +msgid "short name" +msgstr "" + +#: participants/models.py +msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" +msgstr "" + +#: participants/models.py +msgid "long name" +msgstr "" + +#: participants/models.py +msgid "The full name of the team, including institution name. (This is autogenerated.)" +msgstr "" + +#: participants/models.py +msgid "Uses institutional prefix" +msgstr "" + +#: participants/models.py +msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" +msgstr "" + +#: participants/models.py +msgid "break categories" +msgstr "" + +#: participants/models.py +msgid "institution conflicts" +msgstr "" + +#: participants/models.py +msgid "none" +msgstr "" + +#: participants/models.py +msgid "swing" +msgstr "" + +#: participants/models.py +msgid "composite" +msgstr "" + +#: participants/models.py +msgid "bye" +msgstr "" + +#: participants/models.py +msgid "type" +msgstr "" + +#: participants/models.py +msgid "emoji" +msgstr "" + +#: participants/models.py +msgid "team" +msgstr "tým" + +#: participants/models.py +msgid "teams" +msgstr "týmy" + +#: participants/models.py +msgid "Teams must have an institution if they are using the institutional prefix." +msgstr "" + +#: participants/models.py +msgid "Teams must have a full name if they don't use the institutional prefix." +msgstr "" + +#: participants/models.py +msgid "Teams must have a short name if they don't use the institutional prefix." +msgstr "" + +#: participants/models.py +msgid "speaker" +msgstr "" + +#: participants/models.py +msgid "speakers" +msgstr "" + +#: participants/models.py +msgid "Adjudicators not assigned to any tournament can be shared between tournaments" +msgstr "" + +#: participants/models.py +msgid "base score" +msgstr "" + +#: participants/models.py +msgid "team conflicts" +msgstr "" + +#: participants/models.py +msgid "adjudicator conflicts" +msgstr "" + +#: participants/models.py +msgid "always trainee" +msgstr "" + +#: participants/models.py +msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" +msgstr "" + +#: participants/models.py +msgid "breaking" +msgstr "" + +#: participants/models.py +msgid "independent" +msgstr "" + +#: participants/models.py +msgid "adjudication core" +msgstr "" + +#: participants/models.py +msgid "adjudicator" +msgstr "rozhodčí" + +#: participants/models.py +msgid "adjudicators" +msgstr "rozhodčí" + +#: participants/tables.py +msgid "Points after this debate" +msgstr "" + +#: participants/tables.py +msgid "Wins after this debate" +msgstr "" + +#: participants/tables.py +msgid "Speaker scores
    (in speaking order)" +msgstr "" + +#: participants/tables.py +msgid "Speaks" +msgstr "" + +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html +#, python-format +msgid "About %(name)s" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +msgid "Independent adjudicator" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +msgid "Member of the adjudication core" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Institution:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Unaffiliated" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Region:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +msgid "The institutional affiliations of adjudicators are not public at this tournament." +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Institutional Conflicts:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "; " +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "None" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +msgid "Team Conflicts:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid ", " +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Adjudicator Conflicts:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Room Constraints:" +msgstr "" + +#: participants/templates/admin/participants/adjudicator/change_form.html +msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." +msgstr "" + +#. Translators: This follows the above sentence in the same paragraph. +#: participants/templates/admin/participants/delete_debateteam_warning.html +msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +msgid "Note that deleting an institution also deletes all teams from that institution." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." +msgstr "" + +#: participants/templates/admin/participants/team/change_form.html +msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." +msgstr "" + +#: participants/templates/current_round/common.html +#, python-format +msgid "The round begins at %(start_time)s" +msgstr "" + +#: participants/templates/current_round/common.html +msgid "Teams:" +msgstr "Týmy:" + +#: participants/templates/current_round/common.html +msgid "Adjudicator:" +msgid_plural "Adjudicators:" +msgstr[0] "Rozhodčí:" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: participants/templates/current_round/common.html +msgctxt "chair icon" +msgid "Ⓒ" +msgstr "" + +#: participants/templates/current_round/common.html +msgctxt "trainee icon" +msgid "Ⓣ" +msgstr "" + +#: participants/templates/current_round/common.html +msgid "There are no panellists or trainees assigned to this debate." +msgstr "" + +#: participants/templates/current_round/common.html +msgid "Motions are not released to public." +msgstr "" + +#: participants/templates/current_round/common.html +msgid "Motion:" +msgstr "Teze:" + +#: participants/templates/current_round/common.html +#, python-format +msgid "Motion %(seq)s:" +msgstr "" + +#: participants/templates/current_round/common.html +msgid "The motion(s) for this round haven't yet been released." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating as the %(side)s team." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating as the %(side)s team." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s's debate is in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s's debate is in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "Your debate is in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "Your debate is in %(room)s." +msgstr "" + +#: participants/templates/edit_speaker_eligibility.html +#, python-format +msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." +msgstr "" + +#: participants/templates/feedback_progress_panel.html +msgid "Feedback Returns" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Has submitted feedback for %(adjudicator)s" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Has not submitted feedback for %(adjudicator)s" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +msgid "More feedback submissions than expected for this debate:" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Unexpected feedback submission for %(adjudicator)s" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "%(name)s doesn't have any feedback to submit." +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "In This Round (%(round)s)" +msgstr "" + +#: participants/templates/in_this_round.html +msgid "In This Round" +msgstr "" + +#: participants/templates/in_this_round.html +msgid "(Not Released to Public)" +msgstr "" + +#: participants/templates/in_this_round.html +msgid "Room TBA" +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "%(adjudicator)s is not adjudicating this round." +msgstr "" + +#: participants/templates/in_this_round.html +msgid "You are not adjudicating this round." +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." +msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: participants/templates/in_this_round.html +msgid "If this is an error, please contact a tab director immediately." +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "%(team)s does not have a debate this round." +msgstr "" + +#: participants/templates/in_this_round.html +msgid "You do not have a debate this round." +msgstr "" + +#: participants/templates/in_this_round.html +msgid "The draw for this round hasn't yet been released." +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Participants List" +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Institutions List" +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Emails have already been sent." +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Email Team Registrations" +msgstr "" + +#: participants/templates/participants_subnav.html participants/views.py +msgid "Code Names" +msgstr "" + +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html +msgid "Speaker Categories" +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Speaker Eligibility" +msgstr "" + +#: participants/templates/speaker_categories_edit.html +msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." +msgstr "" + +#: participants/templates/speaker_categories_edit.html +#, python-format +msgid "If you want to delete speaker categories, use the Edit Database area." +msgstr "" + +#: participants/templates/speaker_categories_edit.html +msgid "Save Speaker Categories" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Team name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Full team name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Short team name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Code name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "No code name assigned" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Emoji:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "No emoji assigned" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Speakers:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Eligible for break categories:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Speaker categories:" +msgstr "" + +#: participants/templatetags/team_name_for_data_entry.py +#, python-format +msgid "%(code_name)s (%(real_name)s)" +msgstr "" + +#: participants/views.py +msgid "Adjudicators" +msgstr "Rozhodčí" + +#: participants/views.py +msgid "Speakers" +msgstr "" + +#: participants/views.py +msgid "Institutions" +msgstr "" + +#: participants/views.py +msgid "Code" +msgstr "" + +#: participants/views.py +msgid "Full name" +msgstr "" + +#: participants/views.py +msgid "Region" +msgstr "" + +#: participants/views.py +msgid "Teams" +msgstr "Týmy" + +#: participants/views.py +msgid "Number of teams" +msgstr "" + +#: participants/views.py +msgid "Adjs" +msgstr "" + +#: participants/views.py +msgid "Number of adjudicators, excluding independents" +msgstr "" + +#: participants/views.py +msgid "IAs" +msgstr "" + +#: participants/views.py +msgid "Number of independent adjudicators" +msgstr "" + +#: participants/views.py +msgid "Code name" +msgstr "" + +#: participants/views.py +msgid "Team Registration" +msgstr "" + +#: participants/views.py +msgid "Results" +msgstr "" + +#: participants/views.py +#, python-format +msgid "Record for %(name)s" +msgstr "" + +#: participants/views.py +msgid "Previous Rounds" +msgstr "" + +#: participants/views.py +#, python-format +msgid "Saved category: %(list)s" +msgid_plural "Saved categories: %(list)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: participants/views.py +msgid "No changes were made to the categories." +msgstr "" + +#: participants/views.py +msgid "Speaker Category Eligibility" +msgstr "" + diff --git a/tabbycat/printing/locale/cs/LC_MESSAGES/django.po b/tabbycat/printing/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..599390409c0 --- /dev/null +++ b/tabbycat/printing/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" +"Last-Translator: philip_tc\n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/printing/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 944\n" + +#: printing/templates/feedback_list.html +msgid "Feedback Forms" +msgstr "" + +#: printing/templates/feedback_list.html +#, python-format +msgid "Printable Feedback Forms for %(round)s" +msgstr "" + +#: printing/templates/feedback_list.html +msgid "No feedback questions have been added for either teams or adjudicators to answer." +msgstr "" + +#: printing/templates/feedback_list.html +msgid "No feedback questions have been added for teams to answer." +msgstr "" + +#: printing/templates/feedback_list.html +msgid "No feedback questions have been added for adjudicators to answer." +msgstr "" + +#: printing/templates/feedback_list.html +#, python-format +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgstr "" + +#: printing/templates/feedback_list.html +msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" +msgstr "" + +#: printing/templates/printables_list.html +msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." +msgstr "" + +#: printing/templates/randomised_url_sheets.html +#, python-format +msgid "Printable %(sheet)s URLs" +msgstr "" + +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +msgstr "" + +#: printing/templates/randomised_url_sheets.html +#, python-format +msgid "Private URL for %(name)s (%(group)s)" +msgstr "" + +#: printing/templates/randomised_url_sheets.html +msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Printable Scoresheets" +msgstr "" + +#: printing/templates/scoresheet_list.html +#, python-format +msgid "for %(round)s" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Edit Motion(s)" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "There are no scoresheets available — perhaps the round has not been drawn?" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Edit Ballot Motions" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "×" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Motion" +msgstr "Teze" + +#: printing/templates/scoresheet_list.html +msgid "Changes to motions will update in the displayed ballots automatically" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." +msgstr "" + +#: printing/views.py +msgid "Overall Score" +msgstr "" + +#: printing/views.py +msgid "Unaffiliated" +msgstr "" + +#: printing/views.py +msgid "Team" +msgstr "Tým" + diff --git a/tabbycat/privateurls/locale/cs/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..3a7fd36da96 --- /dev/null +++ b/tabbycat/privateurls/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,183 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" +"Last-Translator: philip_tc\n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/privateurls/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 946\n" + +#: privateurls/apps.py +msgid "Private URL Management" +msgstr "" + +#: privateurls/templates/private_urls.html privateurls/views.py +msgid "Private URLs" +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "The private URLs for ballot and/or feedback submission from participants are given below." +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +msgstr "" + +#: privateurls/templates/private_urls.html +#, python-format +msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "There are no private URLs assigned." +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "Generate Private URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "View URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "Print Teams' URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "Print Adjudicators' URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "All reachable participants have already been sent their private URLs." +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "Email URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "This button only generates private URLs for participants who do not already have one." +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "Generate URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "All participants already have private URLs." +msgstr "" + +#: privateurls/templates/public_url_landing.html +msgid "Private URL" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "for %(name)s" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "(%(team)s)" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Revoke check-in from %(check_time)s" +msgstr "" + +#: privateurls/templates/public_url_landing.html +msgid "Check in" +msgstr "" + +#. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "You have been checked in at %(check_time)s" +msgstr "" + +#: privateurls/templates/public_url_landing.html +msgid "You are not currently checked in." +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Submit Ballot for %(round)s" +msgstr "" + +#: privateurls/templates/public_url_landing.html +msgid "Submit Feedback" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Registration (%(name)s)" +msgstr "" + +#: privateurls/views.py +msgid "no URL" +msgstr "" + +#: privateurls/views.py +msgid "URL" +msgstr "" + +#: privateurls/views.py +msgid "Speakers" +msgstr "" + +#: privateurls/views.py +msgid "Adjudicators" +msgstr "Rozhodčí" + +#: privateurls/views.py +msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." +msgstr "" + +#: privateurls/views.py +#, python-format +msgid "A private URL was generated for %(nblank_people)d person." +msgid_plural "Private URLs were generated for all %(nblank_people)d people." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: privateurls/views.py +#, python-format +msgid "The already-existing private URL for %(nexisting_people)d person was left intact." +msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: privateurls/views.py +msgid "URL Key" +msgstr "" + +#: privateurls/views.py +msgid "Debates" +msgstr "Debat" + diff --git a/tabbycat/results/locale/cs/LC_MESSAGES/django.po b/tabbycat/results/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..7561b5976eb --- /dev/null +++ b/tabbycat/results/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,1113 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:14\n" +"Last-Translator: philip_tc\n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/results/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 948\n" + +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py +#, python-format +msgid "Resaved results for %(count)d ballot submission." +msgid_plural "Resaved results for %(count)d ballot submissions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: results/apps.py results/templates/public_results_index.html results/views.py +msgid "Results" +msgstr "" + +#: results/forms.py +msgid "Tournament password" +msgstr "" + +#: results/forms.py +msgid "That password isn't correct." +msgstr "" + +#: results/forms.py +msgid "Please enter a whole number." +msgstr "" + +#: results/forms.py +#, python-format +msgid "Please enter a multiple of %s." +msgstr "" + +#: results/forms.py +msgid "The ballot set can't be both discarded and confirmed." +msgstr "" + +#: results/forms.py +msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." +msgstr "" + +#: results/forms.py +msgid "---------" +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(aff_team)s affirmed, %(neg_team)s negated" +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(side)s's motion veto" +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(team)s (%(side)s)" +msgstr "" + +#: results/forms.py +msgid "Winner" +msgstr "" + +#: results/forms.py +msgid "Mark as a duplicate speech" +msgstr "" + +#: results/forms.py +#, python-format +msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(speaker)s appears to have given %(count)d substantive speech." +msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: results/forms.py +msgid "The last substantive speaker and reply speaker can't be the same." +msgstr "" + +#: results/forms.py +msgid "The reply speaker for this team did not give a substantive speech." +msgstr "" + +#: results/forms.py +msgid "The total scores for the teams are the same (i.e. a draw)." +msgstr "" + +#: results/forms.py +msgid "The declared winner does not correspond to the team with the highest score." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The total scores for the following teams are the same: %(teams)s" +msgstr "" + +#: results/forms.py +#, python-format +msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." +msgstr "" + +#: results/forms.py +msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." +msgstr "" + +#: results/forms.py +#, python-format +msgid "There must be exactly %(n)d team advancing." +msgid_plural "There must be exactly %(n)d teams advancing." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: results/forms.py +msgid "There must be exactly 1 team advancing." +msgstr "" + +#: results/models.py +msgid "Tab room" +msgstr "" + +#: results/models.py +msgid "Public" +msgstr "" + +#: results/models.py +msgid "timestamp" +msgstr "" + +#: results/models.py +msgid "version" +msgstr "" + +#: results/models.py +msgid "submitter type" +msgstr "" + +#: results/models.py +msgid "confirmed" +msgstr "" + +#: results/models.py +msgid "from private URL" +msgstr "" + +#: results/models.py +msgid "from participant" +msgstr "" + +#: results/models.py +msgid "submitter" +msgstr "" + +#: results/models.py +msgid "confirmer" +msgstr "" + +#: results/models.py +msgid "confirm timestamp" +msgstr "" + +#: results/models.py +msgid "IP address" +msgstr "" + +#: results/models.py +msgid "A tab room ballot must have a user associated." +msgstr "" + +#: results/models.py +msgid "debate" +msgstr "debata" + +#: results/models.py +msgid "motion" +msgstr "teze" + +#: results/models.py +msgid "discarded" +msgstr "" + +#: results/models.py +msgid "single adjudicator" +msgstr "" + +#: results/models.py +msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." +msgstr "" + +#: results/models.py +msgid "ballot submission" +msgstr "" + +#: results/models.py +msgid "ballot submissions" +msgstr "" + +#: results/models.py +#, python-format +msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" +msgstr "" + +#: results/models.py +msgid "A ballot can't be both confirmed and discarded!" +msgstr "" + +#: results/models.py +msgid "debate adjudicator" +msgstr "" + +#: results/models.py +msgid "debate team" +msgstr "" + +#: results/models.py +msgid "win" +msgstr "" + +#: results/models.py +msgid "margin" +msgstr "" + +#: results/models.py +msgid "score" +msgstr "" + +#: results/models.py +msgid "team score by adjudicator" +msgstr "" + +#: results/models.py +msgid "team scores by adjudicator" +msgstr "" + +#: results/models.py +msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." +msgstr "" + +#: results/models.py +msgid "position" +msgstr "" + +#: results/models.py +msgid "speaker score by adjudicator" +msgstr "" + +#: results/models.py +msgid "speaker scores by adjudicator" +msgstr "" + +#: results/models.py +msgid "points" +msgstr "body" + +#: results/models.py +msgid "votes given" +msgstr "" + +#: results/models.py +msgid "votes possible" +msgstr "" + +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py +msgid "team score" +msgstr "" + +#: results/models.py +msgid "team scores" +msgstr "" + +#: results/models.py +msgid "speaker" +msgstr "" + +#: results/models.py +msgid "ghost" +msgstr "" + +#: results/models.py +msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." +msgstr "" + +#: results/models.py +msgid "speaker score" +msgstr "" + +#: results/models.py +msgid "speaker scores" +msgstr "" + +#: results/models.py +msgid "The debate team and speaker must be from the same team." +msgstr "" + +#: results/models.py +msgid "The ballot submission and debate team must relate to the same debate." +msgstr "" + +#: results/tables.py +msgid "Whether this debate's ballot has been checked in" +msgstr "" + +#: results/tables.py +msgid "Status of this debate's ballot" +msgstr "" + +#: results/templates/admin_results.html +msgid "Display Draw" +msgstr "" + +#: results/templates/admin_results.html +msgid "Check-In Ballots" +msgstr "" + +#: results/templates/admin_results.html +msgid "Recent 'Iron-Persons'" +msgstr "" + +#: results/templates/admin_results.html +msgid "Teams who have recently missed a speaker" +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "A speaker from %(team)s gave multiple speeches in the previous round" +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "A speaker from %(team)s gave multiple speeches in the current round" +msgstr "" + +#: results/templates/admin_results.html +msgid "No known cases in the current or previous round" +msgstr "" + +#: results/templates/admin_results.html +msgid "Complete Round" +msgstr "" + +#: results/templates/admin_results.html +msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." +msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: results/templates/admin_results.html +#, python-format +msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." +msgstr "" + +#: results/templates/admin_results.html +msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." +msgstr "" + +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html +msgid "Back to All Results" +msgstr "" + +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html +msgid "Create a new ballot set for this debate" +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because you entered it." +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "Confirm results" +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "Results are incorrect" +msgstr "" + +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html +msgid "Emails will be sent to adjudicators when the ballot is confirmed." +msgstr "" + +#: results/templates/assistant_results.html results/views.py +msgid "Enter Results" +msgstr "" + +#: results/templates/assistant_results.html +msgid "This page automatically updates with the new ballot entries and checkins as they occur." +msgstr "" + +#: results/templates/assistant_results.html +msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." +msgstr "" + +#: results/templates/assistant_results.html +msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." +msgstr "" + +#: results/templates/assistant_results.html +#, python-format +msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." +msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: results/templates/assistant_results.html +#, python-format +msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." +msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: results/templates/ballot/ballot_debate_info.html +msgid "Debate Information" +msgstr "" + +#: results/templates/ballot/ballot_debate_info.html +msgid "No speakers spoke twice (no 'iron-person' speeches)" +msgstr "" + +#: results/templates/ballot/ballot_debate_info.html +msgid "A speaker spoke twice (an 'iron-person' speech)" +msgstr "" + +#: results/templates/ballot/ballot_scoresheet.html +msgid "Result" +msgstr "Výsledek" + +#: results/templates/ballot/ballot_scoresheet.html +msgid "Rank" +msgstr "" + +#: results/templates/ballot/ballot_scoresheet.html +msgid "Margin" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "There are some problems with this scoresheet. Please review and correct them." +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s (%(institution)s)" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html +msgid "Scoresheet" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Solo Chair" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Chair" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Panellist" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Trainee" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Assign sides before entering scores" +msgstr "" + +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "There is %(number)s existing ballot set for this debate." +msgid_plural "There are %(number)s existing ballot sets for this debate." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: results/templates/ballot/other_ballots_list.html +msgid "This ballot set is confirmed." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "This ballot set is discarded." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "CURRENTLY VIEWING" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "MERGING" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "Version %(version)s," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "entered by %(submitter)s," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "submitted from %(adjudicator)s's private URL," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "submitted from the public form on %(ip_address)s," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "%(timestamp)s (%(timeago)s ago)," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "unknown" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "confirmed by %(confirmer)s" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "unconfirmed" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "(discarded)" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "(identical to version %(others)s)" +msgid_plural "(identical to versions %(others)s)" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: results/templates/ballot_entry.html +#, python-format +msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." +msgstr "" + +#: results/templates/ballot_entry_base.html +msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." +msgstr "" + +#: results/templates/ballot_entry_base.html +#, python-format +msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Scoresheet from chair %(chair)s" +msgstr "" + +#: results/templates/ballot_entry_form.html +msgid "Scoresheet, no chair set" +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Error with %(pos)s's speaker field: %(error)s" +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Error with %(pos)s's duplicate speaker field: %(error)s" +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Error with %(pos)s's score field: %(error)s" +msgstr "" + +#: results/templates/debate_postponement_form.html +msgid "Postponed" +msgstr "" + +#: results/templates/debate_postponement_form.html +msgid "Postpone" +msgstr "" + +#: results/templates/enter_results.html +msgid "Ballot Status" +msgstr "" + +#: results/templates/enter_results.html +msgid "only the confirmed ballot set will affect this debate's result" +msgstr "" + +#: results/templates/enter_results.html +msgid "Debate Status" +msgstr "" + +#: results/templates/enter_results.html +msgid "all debates must be confirmed to complete the round" +msgstr "" + +#: results/templates/enter_results.html +msgid "Save Ballot" +msgstr "" + +#: results/templates/enter_results.html +msgid "Cancel Entry" +msgstr "" + +#: results/templates/includes/public_enter_results_info.html +#, python-format +msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." +msgstr "" + +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html +#, python-format +msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." +msgstr "" + +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html +msgid "Ballot Not Available" +msgstr "" + +#: results/templates/privateurl_ballot_set_error.html +#, python-format +msgid "Back to your private landing page." +msgstr "" + +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html +msgid "Enter Ballot" +msgstr "" + +#: results/templates/public_add_ballot.html +msgid "Who are you?" +msgstr "" + +#: results/templates/public_add_ballot.html +msgid "(click your name on this list)" +msgstr "" + +#: results/templates/public_add_ballot_unreleased.html +#, python-format +msgid "The draw and/or motions for %(round)s have yet to be released." +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "Ballot for %(matchup)s" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "%(round)s @ %(room)s" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Return to landing page" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "Return to Results for %(round)s" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Motion" +msgstr "Teze" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "From %(name)s (%(institution)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "Total for %(name)s (%(side)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "%(name)s (%(side)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Won" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Lost" +msgstr "" + +#: results/templates/public_ballot_set_error.html +#, python-format +msgid "Back to the tournament home page." +msgstr "" + +#: results/templates/public_enter_results.html +#, python-format +msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" +msgstr "" + +#: results/templates/public_enter_results.html +msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." +msgstr "" + +#: results/templates/public_enter_results.html +#, python-format +msgid "This form has already been submitted once. Please contact a tab official after submitting your form." +msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: results/templates/public_enter_results.html +msgid "When submitting this form your IP address will be stored for logging purposes." +msgstr "" + +#: results/templates/public_enter_results_error.html +#, python-format +msgid "No Result to Enter (%(adjudicator)s)" +msgstr "" + +#: results/templates/public_enter_results_error.html +msgid "No Result to Enter" +msgstr "" + +#: results/templates/public_results_for_round.html +msgid "View by Team" +msgstr "" + +#: results/templates/public_results_for_round.html +msgid "View by Debate" +msgstr "" + +#: results/templates/public_results_index.html +#, python-format +msgid "Results for %(round)s" +msgstr "" + +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html +msgid "Results Not Available" +msgstr "" + +#: results/templates/public_results_not_available.html +#, python-format +msgid "The results for %(round)s aren't yet available." +msgstr "" + +#: results/templates/public_results_silent.html +#, python-format +msgid "%(round)s is a silent round." +msgstr "" + +#: results/utils.py +msgid "No Ballot" +msgstr "" + +#: results/utils.py +msgid "Debate was Postponed" +msgstr "" + +#: results/utils.py +msgid "Ballot is Unconfirmed" +msgstr "" + +#: results/utils.py +msgid "Ballot is Confirmed" +msgstr "" + +#. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" +#: results/utils.py +#, python-format +msgid "%(team)s as %(side)s" +msgstr "" + +#: results/utils.py +#, python-format +msgid "%(team)s (%(side)s) won" +msgstr "" + +#. Translators: The team here is the losing team +#: results/utils.py +#, python-format +msgid "vs %(team)s (%(side)s)" +msgstr "" + +#: results/utils.py +#, python-format +msgid "Advancing: %(advancing_list)s
    " +msgstr "" + +#: results/utils.py +#, python-format +msgid "Eliminated: %(eliminated_list)s" +msgstr "" + +#: results/utils.py +#, python-format +msgid "1st: %(first_team)s
    " +msgstr "" + +#: results/utils.py +#, python-format +msgid "2nd: %(second_team)s
    \n" +"3rd: %(third_team)s
    \n" +"4th: %(fourth_team)s" +msgstr "" + +#: results/utils.py +#, python-format +msgid "Error with result for %(debate)s" +msgstr "" + +#. Translators: Abbreviation for Prime Minister +#: results/utils.py +msgid "PM" +msgstr "" + +#. Translators: Abbreviation for Deputy Prime Minister +#: results/utils.py +msgid "DPM" +msgstr "" + +#. Translators: Abbreviation for Leader of the Opposition +#: results/utils.py +msgid "LO" +msgstr "" + +#. Translators: Abbreviation for Deputy Leader of the Opposition +#: results/utils.py +msgid "DLO" +msgstr "" + +#. Translators: Abbreviation for Member for the Government +#: results/utils.py +msgid "MG" +msgstr "" + +#. Translators: Abbreviation for Government Whip +#: results/utils.py +msgid "GW" +msgstr "" + +#. Translators: Abbreviation for Member for the Opposition +#: results/utils.py +msgid "MO" +msgstr "" + +#. Translators: Abbreviation for Opposition Whip +#: results/utils.py +msgid "OW" +msgstr "" + +#: results/utils.py +msgid "Reply" +msgstr "" + +#: results/views.py +msgid " vs " +msgstr "" + +#: results/views.py +#, python-format +msgid "%(matchup)s: %(round)s @ %(room)s" +msgstr "" + +#: results/views.py +msgid "N/A" +msgstr "" + +#: results/views.py +msgid "New Ballot Set" +msgstr "" + +#: results/views.py +#, python-format +msgid "Ballot set for %(debate)s added." +msgstr "" + +#: results/views.py +msgid " Email receipts queued to be sent." +msgstr "" + +#: results/views.py +#, python-format +msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." +msgstr "" + +#: results/views.py +#, python-format +msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." +msgstr "" + +#: results/views.py +msgid "Edit Ballot Set" +msgstr "" + +#: results/views.py +#, python-format +msgid "Ballot set for %(matchup)s discarded." +msgstr "" + +#: results/views.py +#, python-format +msgid "Ballot set for %(matchup)s confirmed." +msgstr "" + +#: results/views.py +#, python-format +msgid "Edits to ballot set for %(matchup)s saved." +msgstr "" + +#: results/views.py +#, python-format +msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." +msgstr "" + +#: results/views.py +msgid "The draw for this round hasn't been released yet." +msgstr "" + +#: results/views.py +msgid "The motions for this round haven't been released yet." +msgstr "" + +#: results/views.py +msgid "It looks like you don't have a debate this round." +msgstr "" + +#: results/views.py +msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." +msgstr "" + +#: results/views.py +msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." +msgstr "" + +#: results/views.py +msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." +msgstr "" + +#: results/views.py +msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." +msgstr "" + +#: results/views.py +#, python-format +msgid "This debate is in %s, which is a silent round." +msgstr "" + +#: results/views.py +#, python-format +msgid "This debate is in %s, the results for which aren't available yet." +msgstr "" + +#: results/views.py +#, python-format +msgid "The result for debate %s is not confirmed." +msgstr "" + +#: results/views.py +#, python-format +msgid "The debate %s does not have a confirmed ballot." +msgstr "" + +#: results/views.py +#, python-format +msgid "There is no result yet for debate %s." +msgstr "" + +#: results/views.py +#, python-format +msgid "Add result from %(adjudicator)s" +msgstr "" + +#: results/views.py +msgid "Adjudicator" +msgstr "Rozhodčí" + +#: results/views.py +msgid "Merge Ballots" +msgstr "" + +#: results/views.py +msgid "The speaking order in the ballots is inconsistent, so could not be merged." +msgstr "" + +#: results/views.py +msgid "Duplicate speeches are marked inconsistently, so could not be merged." +msgstr "" + +#: results/views.py +#, python-format +msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." +msgstr "" + diff --git a/tabbycat/standings/locale/cs/LC_MESSAGES/django.po b/tabbycat/standings/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..3fcff2c3eb9 --- /dev/null +++ b/tabbycat/standings/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,612 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:01\n" +"Last-Translator: philip_tc\n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/standings/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 950\n" + +#: standings/base.py +msgid "The same metric would be added twice:" +msgstr "" + +#: standings/base.py +msgid "The same ranking would be added twice:" +msgstr "" + +#: standings/base.py +#, python-format +msgid "Unrecognized metric code: \"%(code)s\"" +msgstr "" + +#: standings/diversity.py +msgid "All" +msgstr "" + +#: standings/diversity.py +msgid "Breaking" +msgstr "" + +#: standings/diversity.py +#, python-format +msgid "Not %(category)s" +msgstr "" + +#: standings/diversity.py +msgid "All Speakers" +msgstr "" + +#: standings/diversity.py +msgid "IAs" +msgstr "" + +#: standings/diversity.py +msgid "Chairs" +msgstr "" + +#: standings/diversity.py +msgid "Panellists" +msgstr "" + +#: standings/diversity.py +msgid "Trainees" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating" +msgstr "" + +#: standings/diversity.py +msgid "Median Rating" +msgstr "" + +#: standings/diversity.py +msgid "Upper Quartile Rating" +msgstr "" + +#: standings/diversity.py +msgid "Lower Quartile Rating" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Teams" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Chairs" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Panellists" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Trainees" +msgstr "" + +#: standings/diversity.py +msgid "Average Score" +msgstr "" + +#: standings/diversity.py +msgid "Median Score" +msgstr "" + +#: standings/diversity.py +msgid "Upper Quartile Score" +msgstr "" + +#: standings/diversity.py +msgid "Lower Quartile Score" +msgstr "" + +#: standings/diversity.py +msgid "Reply Speaker Average" +msgstr "" + +#: standings/diversity.py +#, python-format +msgid "Speaker %(num)d Average" +msgstr "" + +#: standings/diversity.py +msgid "Average Finals Score" +msgstr "" + +#: standings/speakers.py +msgid "total" +msgstr "" + +#: standings/speakers.py +msgid "Total" +msgstr "" + +#: standings/speakers.py +msgid "average" +msgstr "" + +#: standings/speakers.py +msgid "Avg" +msgstr "" + +#: standings/speakers.py +msgid "team points" +msgstr "" + +#: standings/speakers.py +msgid "Team" +msgstr "Tým" + +#: standings/speakers.py +msgid "standard deviation" +msgstr "" + +#: standings/speakers.py +msgid "Stdev" +msgstr "" + +#: standings/speakers.py +msgid "number of speeches given" +msgstr "" + +#: standings/speakers.py +msgid "Num" +msgstr "" + +#: standings/speakers.py +msgid "replies given" +msgstr "" + +#: standings/speakers.py +msgid "trimmed mean (high-low drop)" +msgstr "" + +#: standings/speakers.py +msgid "Trim" +msgstr "" + +#: standings/teams.py +msgid "points" +msgstr "body" + +#: standings/teams.py +msgid "Pts" +msgstr "Body" + +#: standings/teams.py +msgid "wins" +msgstr "výhry" + +#: standings/teams.py standings/views.py +msgid "Wins" +msgstr "Výhry" + +#: standings/teams.py +msgid "total speaker score" +msgstr "" + +#: standings/teams.py +msgid "Spk" +msgstr "" + +#: standings/teams.py +msgid "average total speaker score" +msgstr "" + +#: standings/teams.py +msgid "ATSS" +msgstr "" + +#: standings/teams.py +msgid "speaker score standard deviation" +msgstr "" + +#: standings/teams.py +msgid "SSD" +msgstr "" + +#: standings/teams.py +msgid "sum of margins" +msgstr "" + +#: standings/teams.py +msgid "Marg" +msgstr "" + +#: standings/teams.py +msgid "average margin" +msgstr "" + +#: standings/teams.py +msgid "AWM" +msgstr "" + +#: standings/teams.py +msgid "average individual speaker score" +msgstr "" + +#: standings/teams.py +msgid "AISS" +msgstr "" + +#: standings/teams.py +msgid "draw strength by wins" +msgstr "" + +#: standings/teams.py +msgid "DS" +msgstr "" + +#: standings/teams.py +msgid "draw strength by total speaker score" +msgstr "" + +#: standings/teams.py +msgid "DSS" +msgstr "" + +#: standings/teams.py +msgid "number of pullups before this round" +msgstr "" + +#: standings/teams.py +msgid "PU" +msgstr "" + +#: standings/teams.py +msgid "number of adjudicators who voted for this team" +msgstr "" + +#: standings/teams.py +msgid "Ballots" +msgstr "Balloty" + +#: standings/teams.py +msgid "votes/ballots carried" +msgstr "" + +#: standings/teams.py +msgid "number of firsts" +msgstr "" + +#: standings/teams.py +msgid "1sts" +msgstr "" + +#: standings/teams.py +msgid "number of seconds" +msgstr "" + +#: standings/teams.py +msgid "2nds" +msgstr "" + +#: standings/teams.py +msgid "number of thirds" +msgstr "" + +#: standings/teams.py +msgid "3rds" +msgstr "" + +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py +msgid "Who-beat-whom" +msgstr "" + +#: standings/teams.py +msgid "WBW" +msgstr "" + +#: standings/teams.py +msgid "who-beat-whom" +msgstr "" + +#: standings/templates/current_standings.html +msgid "It also excludes results from silent rounds (if any) and from the current round." +msgstr "" + +#: standings/templates/current_standings.html +#, python-format +msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" +msgstr "" + +#: standings/templates/current_standings.html +#, python-format +msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" +msgstr "" + +#: standings/templates/current_standings_no_round.html +msgid "There aren't any rounds for which results are available." +msgstr "" + +#: standings/templates/reply_standings.html +msgid "Reply speakers are ranked by their average reply score." +msgstr "" + +#: standings/templates/reply_standings.html +#, python-format +msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." +msgstr "" + +#: standings/templates/reply_standings.html +msgid "All reply speakers appear in these standings, no matter how many replies they've missed." +msgstr "" + +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html +#, python-format +msgid "These settings can be changed in the Standings section of this tournament's configuration." +msgstr "" + +#: standings/templates/speaker_standings.html +#, python-format +msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." +msgstr "" + +#: standings/templates/speaker_standings.html +msgid "Speakers are ranked by their average score." +msgstr "" + +#: standings/templates/speaker_standings.html +msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." +msgstr "" + +#: standings/templates/speaker_standings.html +#, python-format +msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." +msgstr "" + +#: standings/templates/speaker_standings.html +msgid "All speakers appear in these standings, no matter how many debates they've missed." +msgstr "" + +#: standings/templates/speaker_standings.html +#, python-format +msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Diversity Overview" +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Non-cis male identifying" +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Cis-male identifying" +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Unspecified/unrecorded" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Standings" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Top Speaks" +msgstr "" + +#: standings/templates/standings_index.html +#, python-format +msgid "%(speaker)s in %(round)s" +msgstr "" + +#: standings/templates/standings_index.html +msgid "No data yet" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Bottom Speaks" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Largest Margins" +msgstr "" + +#: standings/templates/standings_index.html +#, python-format +msgid "%(team)s vs %(opp)s in %(round)s" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Closest Margins" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Top Team Scores" +msgstr "" + +#: standings/templates/standings_index.html +#, python-format +msgid "%(team)s in %(round)s" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Bottom Team Scores" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Most/Least Popular Motions" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Average Speaks" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Overview" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Teams" +msgstr "Týmy" + +#: standings/templates/standings_menu.html +msgctxt "All [Teams]" +msgid "All" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Speakers" +msgstr "" + +#: standings/templates/standings_menu.html +msgctxt "Substantive speeches" +msgid "Substantives" +msgstr "" + +#: standings/templates/standings_menu.html +msgctxt "All [Speakers]" +msgid "All" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Speakers " +msgstr "" + +#: standings/templates/standings_menu.html +#, python-format +msgid "%(category)s" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Replies" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Motions" +msgstr "Teze" + +#: standings/templates/standings_menu.html +msgid "By Round" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Diversity" +msgstr "" + +#: standings/templates/team_standings.html +#, python-format +msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." +msgstr "" + +#: standings/views.py +#, python-format +msgid "

    There was an error generating the standings: %(message)s

    " +msgstr "" + +#: standings/views.py +#, python-format +msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " +msgstr "" + +#: standings/views.py +msgid "

    The tab director will need to resolve this issue.

    " +msgstr "" + +#: standings/views.py +#, python-format +msgid "as of %(round)s" +msgstr "" + +#. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix +#: standings/views.py +#, python-format +msgid "%(title)s (Top %(limit)d Only)" +msgstr "" + +#: standings/views.py +msgid "The tab can't be displayed because all rounds so far in this tournament are silent." +msgstr "" + +#: standings/views.py +msgid "Speaker Standings" +msgstr "" + +#: standings/views.py +msgid "Speaker Tab" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Speaker Standings" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Speaker Tab" +msgstr "" + +#: standings/views.py +msgid "Reply Speaker Standings" +msgstr "" + +#: standings/views.py +msgid "Reply speeches aren't enabled in this tournament." +msgstr "" + +#: standings/views.py +msgid "Reply Speaker Tab" +msgstr "" + +#: standings/views.py +msgid "Team Standings" +msgstr "" + +#: standings/views.py +msgid "Team Tab" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Team Standings" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Team Tab" +msgstr "" + +#: standings/views.py +msgid "Current Team Standings" +msgstr "" + +#: standings/views.py +msgid "Points" +msgstr "Body" + +#: standings/views.py +msgid "Feedback Overview" +msgstr "" + +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +msgstr "" + diff --git a/tabbycat/tournaments/locale/cs/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..e225c9e1fc2 --- /dev/null +++ b/tabbycat/tournaments/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,1037 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" +"Last-Translator: philip_tc\n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/tournaments/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 952\n" + +#: tournaments/apps.py +msgid "Tournaments" +msgstr "" + +#: tournaments/forms.py +msgid "Number of preliminary rounds" +msgstr "" + +#: tournaments/forms.py +msgid "Number of teams in the open break" +msgstr "" + +#: tournaments/forms.py +msgid "Leave blank if there are no break rounds." +msgstr "" + +#: tournaments/forms.py +msgid "Did you agree with their decision?" +msgstr "" + +#: tournaments/forms.py +msgid "Agree?" +msgstr "" + +#: tournaments/forms.py +msgid "Comments" +msgstr "" + +#. Translators: This is the name given to the 'Open Break'. +#: tournaments/forms.py +msgid "Open" +msgstr "" + +#: tournaments/forms.py +msgid "Format Configuration" +msgstr "" + +#: tournaments/forms.py +msgid "Apply a standard set of settings to match a common debate format" +msgstr "" + +#: tournaments/forms.py +msgid "Public Configuration" +msgstr "" + +#: tournaments/forms.py +msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" +msgstr "" + +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +msgstr "" + +#: tournaments/forms.py +msgid "Current preliminary round" +msgstr "" + +#: tournaments/forms.py +msgid "All preliminary rounds have been completed" +msgstr "" + +#: tournaments/forms.py +#, python-format +msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" +msgstr "" + +#: tournaments/forms.py +#, python-format +msgid "All elimination rounds in %(category)s have been completed" +msgstr "" + +#: tournaments/forms.py +msgid "If the current round is a preliminary round, this field must be blank." +msgstr "" + +#: tournaments/forms.py +msgid "If all preliminary rounds have been completed, this field is required." +msgstr "" + +#: tournaments/forms.py +#, python-format +msgid "%(name)s (%(abbreviation)s)" +msgstr "" + +#: tournaments/mixins.py +#, python-format +msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." +msgstr "" + +#: tournaments/mixins.py +#, python-format +msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." +msgstr "" + +#: tournaments/mixins.py +msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." +msgstr "" + +#: tournaments/mixins.py +msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." +msgstr "" + +#: tournaments/mixins.py tournaments/templates/round_complete_check.html +#, python-format +msgid "for %(round)s" +msgstr "" + +#: tournaments/mixins.py +msgid "Return to Draw" +msgstr "" + +#: tournaments/models.py +msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." +msgstr "" + +#: tournaments/models.py +msgid "name" +msgstr "" + +#: tournaments/models.py +msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" +msgstr "" + +#: tournaments/models.py +msgid "short name" +msgstr "" + +#: tournaments/models.py +msgid "The name used in the menu, e.g. \"Australs 2016\"" +msgstr "" + +#: tournaments/models.py +msgid "sequence number" +msgstr "" + +#: tournaments/models.py +msgid "A number that determines the relative order in which tournaments are displayed on the homepage." +msgstr "" + +#: tournaments/models.py +msgid "slug" +msgstr "" + +#: tournaments/models.py +msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" +msgstr "" + +#: tournaments/models.py +msgid "active" +msgstr "" + +#: tournaments/models.py +msgid "tournament" +msgstr "turnaje" + +#: tournaments/models.py +msgid "tournaments" +msgstr "" + +#: tournaments/models.py +msgid "Random" +msgstr "" + +#: tournaments/models.py +msgid "Manual" +msgstr "" + +#: tournaments/models.py +msgid "Round-robin" +msgstr "" + +#: tournaments/models.py +msgid "Power-paired" +msgstr "" + +#: tournaments/models.py +msgid "Elimination" +msgstr "" + +#: tournaments/models.py +msgid "Preliminary" +msgstr "" + +#: tournaments/models.py +msgid "None" +msgstr "" + +#: tournaments/models.py +msgid "Draft" +msgstr "" + +#: tournaments/models.py +msgid "Confirmed" +msgstr "" + +#: tournaments/models.py +msgid "Released" +msgstr "" + +#: tournaments/models.py +msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" +msgstr "" + +#: tournaments/models.py +msgid "completed" +msgstr "" + +#: tournaments/models.py +msgid "True if the round is over, which normally means all results have been entered and confirmed" +msgstr "" + +#: tournaments/models.py +msgid "e.g. \"Round 1\"" +msgstr "" + +#: tournaments/models.py +msgid "abbreviation" +msgstr "" + +#: tournaments/models.py +msgid "e.g. \"R1\"" +msgstr "" + +#: tournaments/models.py +msgid "stage" +msgstr "" + +#: tournaments/models.py +msgid "Preliminary = inrounds, elimination = outrounds" +msgstr "" + +#: tournaments/models.py +msgid "draw type" +msgstr "" + +#: tournaments/models.py +msgid "Which draw method to use" +msgstr "" + +#: tournaments/models.py +msgid "break category" +msgstr "" + +#: tournaments/models.py +msgid "If elimination round, which break category" +msgstr "" + +#: tournaments/models.py +msgid "draw status" +msgstr "" + +#: tournaments/models.py +msgid "The status of this round's draw" +msgstr "" + +#: tournaments/models.py +msgid "feedback weight" +msgstr "" + +#: tournaments/models.py +#, no-python-format +msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." +msgstr "" + +#. Translators: A silent round is a round for which results are not disclosed once the round is over. +#: tournaments/models.py +msgid "silent" +msgstr "" + +#: tournaments/models.py +msgid "If marked silent, information about this round (such as its results) will not be shown publicly." +msgstr "" + +#: tournaments/models.py +msgid "motions released" +msgstr "" + +#: tournaments/models.py +msgid "Whether motions will appear on the public website, assuming that feature is turned on" +msgstr "" + +#: tournaments/models.py +msgid "starts at" +msgstr "" + +#: tournaments/models.py +msgid "weight" +msgstr "" + +#: tournaments/models.py +msgid "A factor for the points received in the round. For example, if 2, all points are doubled." +msgstr "" + +#: tournaments/models.py +msgid "round" +msgstr "" + +#: tournaments/models.py +msgid "rounds" +msgstr "" + +#: tournaments/models.py +msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." +msgstr "" + +#: tournaments/models.py +msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." +msgstr "" + +#: tournaments/models.py +msgid "Elimination rounds must have a break category." +msgstr "" + +#: tournaments/templates/assistant_tournament_index.html +msgid "Dashboard" +msgstr "" + +#: tournaments/templates/assistant_tournament_index.html +msgid "Overview" +msgstr "" + +#: tournaments/templates/assistant_tournament_index.html +#, python-format +msgid "current round: %(round)s, status: %(status)s" +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "Welcome to Tabbycat!" +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "Create Account" +msgstr "" + +#: tournaments/templates/configure_tournament.html +#, python-format +msgid "Configure Tournament %(tournament)s" +msgstr "" + +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html +msgid "Tabbycat" +msgstr "" + +#: tournaments/templates/configure_tournament.html +msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." +msgstr "" + +#: tournaments/templates/configure_tournament.html +msgid "Configure Tournament" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Create New Tournament" +msgstr "" + +#: tournaments/templates/create_tournament.html +#, python-format +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Just trying out Tabbycat?" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." +msgstr "" + +#: tournaments/templates/create_tournament.html +#, python-format +msgid "Load %(demo)s" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Create Tournament" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Cancel and go back to the site home page" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Debate Team Missing" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Click the Fix this debate button for that debate." +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Ensure that no side appears more than once in the debate." +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Save the changes." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +#, python-format +msgid "You can also see all the debates in the Debates section of the Edit Database Area." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Debate ID" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +#, python-format +msgid "Teams on %(side)s" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Link to fix this debate" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "No teams" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Multiple teams" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgctxt "button label" +msgid "Fix this debate" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "It looks like all debates are in good shape!" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Welcome to %(tournament)s" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "There is currently no public information available for this tournament." +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Team Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(category)s Team Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Speaker Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(category)s Speaker Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Replies Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Adjudicator Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Motions Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Sides" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Draw for %(round)s" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Draws for Current Rounds" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(round)s's draw has yet to be released" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "The draw for the next round has yet to be released" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Check-Ins" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Results" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Motions" +msgstr "Teze" + +#: tournaments/templates/public_tournament_index.html +msgid "Team Standings" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(category)s Break" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Breaking Adjudicators" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Diversity" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Participants" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Institutions" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Feedback Progress" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Enter Ballot for %(round)s" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Enter Feedback" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Tournament Staff" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Confirm Round Completion" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Enter Results" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Emails have already been sent." +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Email Team Wins/Losses" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Email Team Points" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "Mark %(round)s as Completed" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "Mark %(round)s as Completed Anyway" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "Go to %(round)s" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "%(round)s has already been marked as completed!" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." +msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "All ballots from %(round)s are confirmed. You should be good to go!" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." +msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " +msgstr "" + +#: tournaments/templates/set_current_round.html +msgid "Set Current Round" +msgstr "" + +#: tournaments/templates/set_current_round.html +msgid "Back to Configuration" +msgstr "" + +#: tournaments/templates/set_current_round.html +#, python-format +msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." +msgstr "" + +#: tournaments/templates/set_current_round.html +#, python-format +msgid "On this page, you can set the current round of the tournament %(tournament)s." +msgstr "" + +#: tournaments/templates/set_current_round.html +#, python-format +msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgctxt "page title" +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgctxt "button" +msgid "Set weights" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Welcome!" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "There are currently no active tournaments set up on this site." +msgstr "" + +#: tournaments/templates/site_index.html +msgid "There are currently no tournaments set up on this site." +msgstr "" + +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "New Tournament" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Edit Database Area" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Send a Test Email" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Import DebateXML" +msgstr "" + +#: tournaments/templates/site_index.html +#, python-format +msgid "Get API Token / Change Password (%(user)s)" +msgstr "" + +#: tournaments/templates/site_index.html +#, python-format +msgid "Log Out (%(user)s)" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Log In as Admin" +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "Welcome to your new tournament!" +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." +msgstr "" + +#. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. +#: tournaments/templates/tournament_index.html +#, python-format +msgid "For more information, please consult our documentation on importing initial data." +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "Use the simple importer to add your initial data." +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "Mark participants as available to prepare a draw for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "Go to the draw area to allocate adjudicators for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "Go to the results area to enter ballots for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." +msgstr "" + +#: tournaments/templates/tournament_index_links.html +#, python-format +msgid "Administrator area for %(tn)s" +msgstr "" + +#: tournaments/templates/tournament_index_links.html +#, python-format +msgid "Assistant area for %(tn)s" +msgstr "" + +#: tournaments/templates/tournament_index_links.html +#, python-format +msgid "Public area for %(tn)s" +msgstr "" + +#: tournaments/utils.py +msgid "affirmative" +msgstr "afirmace" + +#: tournaments/utils.py +msgid "negative" +msgstr "negace" + +#: tournaments/utils.py +msgid "affirmative team" +msgstr "" + +#: tournaments/utils.py +msgid "negative team" +msgstr "" + +#: tournaments/utils.py +msgid "Aff" +msgstr "Aff" + +#: tournaments/utils.py +msgid "Neg" +msgstr "Neg" + +#: tournaments/utils.py +msgid "government" +msgstr "" + +#: tournaments/utils.py +msgid "opposition" +msgstr "" + +#: tournaments/utils.py +msgid "government team" +msgstr "" + +#: tournaments/utils.py +msgid "opposition team" +msgstr "" + +#: tournaments/utils.py +msgid "Gov" +msgstr "" + +#: tournaments/utils.py +msgid "Opp" +msgstr "" + +#: tournaments/utils.py +msgid "proposition" +msgstr "" + +#: tournaments/utils.py +msgid "proposition team" +msgstr "" + +#: tournaments/utils.py +msgid "Prop" +msgstr "" + +#: tournaments/utils.py +msgid "pro" +msgstr "" + +#: tournaments/utils.py +msgid "con" +msgstr "" + +#: tournaments/utils.py +msgid "pro team" +msgstr "" + +#: tournaments/utils.py +msgid "con team" +msgstr "" + +#: tournaments/utils.py +msgid "Pro" +msgstr "" + +#: tournaments/utils.py +msgid "Con" +msgstr "" + +#: tournaments/utils.py +msgid "appellant" +msgstr "" + +#: tournaments/utils.py +msgid "respondent" +msgstr "" + +#: tournaments/utils.py +msgid "appellant team" +msgstr "" + +#: tournaments/utils.py +msgid "respondent team" +msgstr "" + +#: tournaments/utils.py +msgid "App" +msgstr "" + +#: tournaments/utils.py +msgid "Res" +msgstr "" + +#: tournaments/utils.py +msgid "opening government" +msgstr "" + +#: tournaments/utils.py +msgid "opening opposition" +msgstr "" + +#: tournaments/utils.py +msgid "closing government" +msgstr "" + +#: tournaments/utils.py +msgid "closing opposition" +msgstr "" + +#: tournaments/utils.py +msgid "opening government team" +msgstr "" + +#: tournaments/utils.py +msgid "opening opposition team" +msgstr "" + +#: tournaments/utils.py +msgid "closing government team" +msgstr "" + +#: tournaments/utils.py +msgid "closing opposition team" +msgstr "" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "OG" +msgstr "" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "OO" +msgstr "" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "CG" +msgstr "" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "CO" +msgstr "" + +#: tournaments/utils.py +#, python-format +msgid "Round %(number)d" +msgstr "" + +#. Translators: This stands for "Round %(number)d". +#: tournaments/utils.py +#, python-format +msgid "R%(number)d" +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" +msgstr "" + +#: tournaments/views.py +msgid "8-team generic dataset" +msgstr "" + +#: tournaments/views.py +msgid "24-team Australs dataset" +msgstr "" + +#: tournaments/views.py +msgid "88-team BP dataset" +msgstr "" + +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." +msgstr "" + diff --git a/tabbycat/utils/locale/cs/LC_MESSAGES/django.po b/tabbycat/utils/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..126c4021a39 --- /dev/null +++ b/tabbycat/utils/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,330 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" +"Last-Translator: philip_tc\n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/utils/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 954\n" + +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "Tým" + +#: utils/admin.py +msgid "Speaker" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "Turnaje" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "Teze" + +#: utils/admin.py +msgid "Confirmed" +msgstr "" + +#: utils/admin.py +msgid "Adjudicator" +msgstr "Rozhodčí" + +#: utils/tables.py +msgid "No Data Available" +msgstr "" + +#: utils/tables.py +msgid "Ⓒ" +msgstr "" + +#: utils/tables.py +msgid "Ⓣ" +msgstr "" + +#: utils/tables.py +msgid "chair" +msgstr "" + +#: utils/tables.py +msgid "panellist" +msgstr "" + +#: utils/tables.py +msgid "trainee" +msgstr "" + +#: utils/tables.py +msgid "—" +msgstr "" + +#: utils/tables.py +msgid "Redacted" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "View %(a)s's %(d)s Record" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "View %(team)s's Record" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Code name: %(name)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Real name: %(name)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s won" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s lost" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s—no result" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s placed %(place)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s is advancing" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s was eliminated" +msgstr "" + +#: utils/tables.py +msgid "View/edit debate ballot" +msgstr "" + +#: utils/tables.py +msgid "View debate ballot" +msgstr "" + +#: utils/tables.py +#, python-format +msgid " vs %(opposition)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Won against %(team)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Lost to %(team)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "No result for debate against %(team)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Total speaker score: %s" +msgstr "" + +#: utils/tables.py +msgid "Teams in debate:" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s (%(side)s)" +msgstr "" + +#: utils/tables.py +msgid "??" +msgstr "" + +#: utils/tables.py +msgid "advancing" +msgstr "" + +#: utils/tables.py +msgid "Advancing" +msgstr "" + +#: utils/tables.py +msgid "eliminated" +msgstr "" + +#: utils/tables.py +msgid "Eliminated" +msgstr "" + +#: utils/tables.py +msgid "No result for debate" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Placed %(place)s" +msgstr "" + +#: utils/tables.py +msgid "Name" +msgstr "" + +#: utils/tables.py +msgid "Institution" +msgstr "" + +#: utils/tables.py +msgid "Member of the Adjudication Core" +msgstr "" + +#: utils/tables.py +msgid "Independent Adjudicator" +msgstr "" + +#: utils/tables.py +msgid "Always Trainee" +msgstr "" + +#: utils/tables.py +msgid "in minority" +msgstr "" + +#: utils/tables.py +msgid "Debate Adjudicators" +msgstr "" + +#: utils/tables.py +msgid "Categories" +msgstr "" + +#: utils/tables.py +msgid "Category" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "This room %(predicate)s." +msgstr "" + +#: utils/tables.py +#, python-format +msgid "This room %(predicates)s, and %(last_predicate)s." +msgstr "" + +#: utils/tables.py +msgid "Room" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Teams have met once" +msgid_plural "Teams have met %(count)d times" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: utils/tables.py +msgid "Teams are from the same institution" +msgstr "" + +#: utils/tables.py +msgid "Conflicts/Flags" +msgstr "" + +#: utils/tables.py +msgid "The confirmed ballot" +msgstr "" + +#: utils/tables.py +msgid "No ballot" +msgstr "" + +#: utils/tables.py +msgid "No scores" +msgstr "" + +#: utils/tables.py +msgid "View Ballot" +msgstr "" + +#: utils/tables.py +msgid "The ballot you submitted" +msgstr "" + +#: utils/tables.py +msgid "View/Edit Ballot" +msgstr "" + +#: utils/tables.py +msgid "Result" +msgstr "Výsledek" + +#. Translators: "TBC" stands for "to be confirmed". +#: utils/tables.py +msgid "TBC" +msgstr "" + +#: utils/tables.py +msgid "Team iron-personed this round and the last." +msgstr "" + +#: utils/tables.py +msgid "Team iron-personed this round." +msgstr "" + +#: utils/tables.py +msgid "Team iron-personed last round." +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Team %(num)d" +msgstr "" + +#: utils/tables.py +msgid "Postpone" +msgstr "" + +#: utils/views.py +msgid "Whoops! You're not meant to type that URL into your browser." +msgstr "" + diff --git a/tabbycat/venues/locale/cs/LC_MESSAGES/django.po b/tabbycat/venues/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000000..8d3ab5bcf0c --- /dev/null +++ b/tabbycat/venues/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,226 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" +"Last-Translator: philip_tc\n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /develop/tabbycat/venues/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 956\n" + +#: venues/apps.py +msgid "Rooms" +msgstr "" + +#: venues/consumers.py +msgid "Draw is already released, unrelease draw to assign rooms." +msgstr "" + +#: venues/consumers.py +msgid "Draw is not confirmed, confirm draw to assign rooms." +msgstr "" + +#: venues/consumers.py +msgid "Successfully auto-allocated rooms to debates." +msgstr "" + +#: venues/models.py +msgid "name" +msgstr "" + +#: venues/models.py +msgid "priority" +msgstr "" + +#: venues/models.py +msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" +msgstr "" + +#: venues/models.py +msgid "tournament" +msgstr "turnaje" + +#: venues/models.py +msgid "URL" +msgstr "" + +#: venues/models.py +msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" +msgstr "" + +#: venues/models.py +msgid "room" +msgstr "" + +#: venues/models.py +msgid "rooms" +msgstr "" + +#: venues/models.py +msgid "Don't display in room name" +msgstr "" + +#: venues/models.py +msgid "Display as prefix" +msgstr "" + +#: venues/models.py +msgid "Display as suffix" +msgstr "" + +#: venues/models.py +msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." +msgstr "" + +#: venues/models.py +msgid "description" +msgstr "" + +#: venues/models.py +msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." +msgstr "" + +#: venues/models.py +msgid "display in room name" +msgstr "" + +#: venues/models.py +msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" +msgstr "" + +#: venues/models.py +msgid "display in public tooltip" +msgstr "" + +#: venues/models.py +msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." +msgstr "" + +#: venues/models.py +msgid "room category" +msgstr "" + +#: venues/models.py +msgid "room categories" +msgstr "" + +#: venues/models.py +msgid "category" +msgstr "" + +#: venues/models.py +msgid "subject content type" +msgstr "" + +#: venues/models.py +msgid "subject ID" +msgstr "" + +#: venues/models.py +msgid "room constraint" +msgstr "" + +#: venues/models.py +msgid "room constraints" +msgstr "" + +#: venues/templates/venue_categories_edit.html +msgid "Room Categories" +msgstr "" + +#: venues/templates/venue_categories_edit.html +msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." +msgstr "" + +#: venues/templates/venue_categories_edit.html +#, python-format +msgid "If you want to delete room categories, use the Edit Database area." +msgstr "" + +#: venues/templates/venue_categories_edit.html +msgid "Save Room Categories" +msgstr "" + +#: venues/templates/venue_constraints_edit.html +msgid "Room Constraints" +msgstr "" + +#: venues/templates/venue_constraints_edit.html +msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." +msgstr "" + +#: venues/templates/venue_constraints_edit.html +msgid "Save Room Constraints" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room constraint of %(name)s met (%(category)s)" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room does not meet any constraint of %(name)s" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" +msgstr "" + +#: venues/views.py +msgid "Edit Rooms" +msgstr "" + +#: venues/views.py +#, python-format +msgid "Saved room category: %(list)s" +msgid_plural "Saved venue categories: %(list)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: venues/views.py +msgid "No changes were made to the room categories." +msgstr "" + +#: venues/views.py +#, python-format +msgid "%s (Adjudicator)" +msgstr "" + +#: venues/views.py +#, python-format +msgid "%s (Team)" +msgstr "%s (Tým)" + +#: venues/views.py +#, python-format +msgid "%s (Institution)" +msgstr "" + +#: venues/views.py +#, python-format +msgid "Saved %(count)d room constraint." +msgid_plural "Saved %(count)d room constraints." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + From c583cdd2f1cf6b012d0ebceeeaecbdbf9093bb94 Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Mon, 30 Jan 2023 10:20:48 +1100 Subject: [PATCH 208/255] New translations django.po (French) --- .../actionlog/locale/fr/LC_MESSAGES/django.po | 156 ++-- .../locale/fr/LC_MESSAGES/django.po | 199 +++-- .../locale/fr/LC_MESSAGES/django.po | 452 +++++----- .../locale/fr/LC_MESSAGES/django.po | 164 ++-- .../breakqual/locale/fr/LC_MESSAGES/django.po | 252 +++--- tabbycat/draw/locale/fr/LC_MESSAGES/django.po | 610 +++++++------ .../importer/locale/fr/LC_MESSAGES/django.po | 223 +++-- tabbycat/locale/fr/LC_MESSAGES/django.po | 478 +++++----- .../motions/locale/fr/LC_MESSAGES/django.po | 193 +++-- .../locale/fr/LC_MESSAGES/django.po | 196 +++-- .../options/locale/fr/LC_MESSAGES/django.po | 813 +++++++++--------- .../locale/fr/LC_MESSAGES/django.po | 499 ++++++----- .../printing/locale/fr/LC_MESSAGES/django.po | 63 +- .../locale/fr/LC_MESSAGES/django.po | 87 +- .../results/locale/fr/LC_MESSAGES/django.po | 552 ++++++------ .../standings/locale/fr/LC_MESSAGES/django.po | 313 ++++--- .../locale/fr/LC_MESSAGES/django.po | 520 ++++++----- .../utils/locale/fr/LC_MESSAGES/django.po | 191 ++-- .../venues/locale/fr/LC_MESSAGES/django.po | 100 ++- 19 files changed, 2998 insertions(+), 3063 deletions(-) diff --git a/tabbycat/actionlog/locale/fr/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/fr/LC_MESSAGES/django.po index 1d4b0ec3f47..4ac30d4821f 100644 --- a/tabbycat/actionlog/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:08\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -17,307 +17,307 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" msgstr "Journal des actions" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" msgstr "Rejeté un ensemble de feuilles de jugement" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" msgstr "Enregistré la présence d'un ensemble de feuilles de jugement" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" msgstr "Créé un ensemble de feuilles de jugement" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" msgstr "Modifié un ensemble de feuilles de jugement" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" msgstr "Confirmé un ensemble de feuilles de jugement" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" msgstr "Saisi un ensemble de feuilles de jugement du formulaire publique" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" msgstr "Saisi un évaluation du formulaire publique" -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" msgstr "Sauvegardé un évaluation" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" msgstr "Modifié la note de base pour un juge" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" msgstr "Fixé la note pour un juge" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" msgstr "Enregistré l'attribution des juges" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" msgstr "Attribué automatiquement les juges" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" msgstr "Enregistré une modification manuelle d'une salle" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" msgstr "Attribué automatiquement les salles" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" msgstr "Modifié les catégories de salles" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" msgstr "Modifié les contraintes de salle" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" msgstr "Créé un tirage" -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" msgstr "Confirmé un tirage" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" msgstr "Régénéré un tirage" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" msgstr "Publié un tirage" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" msgstr "Rétracté un tirage" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" msgstr "Enregistré une modification manuelle d'un appariement" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" msgstr "Enregistré le statut des côtés d'un appariement" -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "Enregistré les divisions" -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" msgstr "Ajouté/Modifié une motion" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" msgstr "Publié les motions" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" msgstr "Rétracté les motions" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" msgstr "Priorisé automatiquement l’importance d'un débat" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" msgstr "Modifié l'importance d'un débat" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" msgstr "Changé le statut de qualification d'un(e) juge" -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" msgstr "Modifié l’admissibilité pour la qualification" -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" msgstr "Modifié les catégories de qualification" -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" msgstr "Généré la qualification des équipes pour toutes les catégories" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" msgstr "Modifié les remarques d'une équipe qualifiant et mit à jour toutes les qualifications des équipes" -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" msgstr "Modifié les remarques d'une équipe qualifiant et mit à jour cette qualification des équipes" -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" msgstr "Modifié les remarques d'une équipe qualifiant" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" msgstr "Fixé l’heure de début" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" msgstr "Avancé la joute actuelle à" -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" msgstr "Marqué la joute comme achevée" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" msgstr "Modifié la disponibilité des équipes" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" msgstr "Modifié la disponibilité des juges" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" msgstr "Modifié la disponibilité des salles" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" msgstr "Modifié les options du tournoi" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" msgstr "Modifié l’admissibilité pour les catégories d'orateur" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" msgstr "Modifié les catégories d'orateur" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" msgstr "Importé les institutions avec l’importateur simple" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" msgstr "Importé les salles avec l’importateur simple" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" msgstr "Importé les équipes avec l’importateur simple" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" msgstr "Importé les juges avec l’importateur simple" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" msgstr "Mis à jour les notes de juge en masse" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" msgstr "Modifié les conflits juge-équipe" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" msgstr "Modifié les conflits juge-juge" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" msgstr "Modifié des conflits juge-institution" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" msgstr "Modifié des conflits équipe-institution" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" msgstr "Généré des identifiants d’enregistrement pour les orateurs" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" msgstr "Généré des identifiants d’enregistrement pour les juges" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" msgstr "Généré des identifiants d’enregistrement pour les salles" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" msgstr "Créé des jurys préformés" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" msgstr "Classé automatiquement les jurys préformés" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" msgstr "Modifié l'importance d'un jury préformé" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" msgstr "Attribué automatiquement les juges aux jurys préformés" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" msgstr "Modifié un juge de jury préformé" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" msgstr "Attribué automatiquement des jurys préformés aux débats" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" msgstr "type" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" msgstr "horodatage" -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "utilisateur" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "adresse IP" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "tournoi" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "joute" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" msgstr "type de contenu" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" msgstr "identifiant d'objet" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" msgstr "journal des actions" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" msgstr "entrées du journal des actions" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." msgstr "Toutes les entrées de journal nécessitent au moins un utilisateur ou une adresse IP." -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" msgstr "anonyme" diff --git a/tabbycat/adjallocation/locale/fr/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/fr/LC_MESSAGES/django.po index a2b7ae55d63..9915fc8702b 100644 --- a/tabbycat/adjallocation/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:08\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -17,436 +17,435 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." msgstr "Aucun juge n’est disponible. Assurez-vous qu’il y a des juges marqués comme disponibles pour cette joute avant de commencer l’allocation automatisée." -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." msgstr[0] "%(count)s note est supérieure à la note maximale (%(score).1f)." msgstr[1] "%(count)s notes sont supérieures à la note maximale (%(score).1f)." -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." msgstr[0] "%(count)s note est inférieure à la note minimale (%(score).1f)." msgstr[1] "%(count)s notes sont inférieures à la note minimale (%(score).1f)." -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." msgstr "Il n'y a pas de juge éligible pour être ni président ni panelliste. Veuillez réduire la valeur du paramètre « Score minimum pour être président ou panelliste » pour être moins que les scores actuels et réessayez." -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" msgstr "Il n’y a aucun débat dans cette joute. N’aurez-vous pas encore fait un tirage ?" -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." msgstr "Il y a %(debate_count)s débats mais juste %(adj_count)s juges votants." -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." msgstr "Il y a %(panel_debates)s débats avec jury mais seulement %(panellists)s panellistes disponibles (moins que %(needed)s)." -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." msgstr "Il y a %(debates_count)s débats mais seulement %(voting_count)s juges votants." -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" msgstr "Allocation des juges" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." msgstr "Le tirage est déjà publié; il faut le retirer pour pouvoir refaire la répartition automatique." -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." msgstr "Le tirage n'est pas encore confirmé; il faut le confirmer pour pouvoir faire la répartition automatique." -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." msgstr "Il n'y a pas de jury préformé disponible à allouer." -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." msgstr "Les jurys préformés ont été attribués aux débats avec succès." -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" msgstr[0] "Les jurys préformés ont été attribués aux débats avec succès. Par contre, il y avait un avertissement :" msgstr[1] "Les jurys préformés ont été attribués aux débats avec succès. Par contre, il y avait %(count)d avertissements :" -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." msgstr "Les juges ont été repartis aux débats avec succès." -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." msgstr "Il n'y a pas de jury à remplir. En créez avant." -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" msgstr[0] "Les juges ont été repartis aux débats avec succès. Par contre, il y avait un avertissement :" msgstr[1] "Les juges ont été repartis aux débats avec succès. Par contre, il y avait %(count)d avertissements :" -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." msgstr "Les juges ont été repartis aux jurys préformés avec succès." -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." msgstr "Vous n'avez aucun qualification marqué comme « général » donc les importances des débats ne peuvent pas être calculées." -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." msgstr "Débats priorisés automatiquement avec succès." -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." msgstr "Vous n'avez aucun qualification marqué comme « général » donc les importances des jurys ne peuvent pas être calculées." -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." msgstr "Jurys préformés priorisés automatiquement avec succès." -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." msgstr "Puisque c'est la première joute, les jurys préformés ne sont pas annotés avec les tranches ni vivacité." -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." msgstr "Le tirage de la dernière joute n'existe pas, donc les jurys préformés ne peuvent pas être annoté avec les tranches et vivacité." -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." msgstr "Jurys préformés pour cette joute créés avec succès." -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" msgstr "président" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" msgstr "panelliste" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" msgstr "stagiaire" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "débat" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "juge" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" msgstr "type" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" msgstr "disponible ?" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" msgstr "débat-adjudicateur" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" msgstr "débat-adjudicateurs" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "équipe" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" msgstr "conflit entre juge et équipe" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" msgstr "conflits entre juge et équipe" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "juge 1" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "juge 2" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" msgstr "conflit entre juge et juge" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" msgstr "conflits entre juge et juge" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" msgstr "institution " -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" msgstr "conflit entre juge et institution" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" msgstr "conflits entre juge et institution" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" msgstr "conflit entre équipe et institution" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" msgstr "conflits entre équipe et institution" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "joute" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" msgstr "importance" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" msgstr "tranche minimale" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" msgstr "Estimé de la tranche la plus basse que ce jury pourrait être" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" msgstr "tranche maximale" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" msgstr "Estimé de la tranche la plus haute que ce jury pourrait être" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" msgstr "rang de salle" -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" msgstr "Nombre séquentielle de jury, pas utilisé dans les algorithmes" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" msgstr "vivacité" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" msgstr "Nombre de catégories pour laquelle cette salle est attendu d’être vive" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" msgstr "jury préformé" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" msgstr "jurys préformés" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" msgstr "jury" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" msgstr "juge de jury préformé" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" msgstr "juges de jurys préformés" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." msgstr "Il n’y a pas de jurys préformés à utiliser. Avez-vous alloué des jurys préformés pour cette joute ? Si non, essayez de les attribuer automatiquement à la place." -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" msgstr "Jurys préformés" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." msgstr "Un jury préformé est une groupe défini de juges spécifié pour une joute avant sont tirage a été généré. Vous pouvez ensuite les repartir manuellement ou automatiquement durant la répartition ordinaire. Ceci peut rendre les attributions plus rapides ou permettre d'y considerer plus les jurys créés." -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." msgstr "Notez que seulement les juges marqués comme disponibles pour la joute peuvent être alloués pour cette joute, donc vous pourriez devoir fixer leur disponibilité en avance." -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" msgstr "Modifier jurys préformés pour %(round)s" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" msgstr "Conflit: %(adjudicator)s & %(team)s (personnelle)" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" msgstr "Conflict: %(adjudicator)s & %(team)s par institution %(institution)s" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" msgstr "Conflit: %(adjudicator1)s & %(adjudicator2)s (personnelle)" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" msgstr "Conflict: %(adjudicator1)s & %(adjudicator2)s par institution %(institution)s" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "Homme" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" msgstr "Femme" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "Autre" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" msgstr "Inconnu" -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" msgstr "Modifier Allocation" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" msgstr "Modifier Jurys" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" msgstr "Retour au vue d’ensemble des jurys" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" msgstr "Conflits juge-équipe" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" msgstr "Enregistrer conflits juge-équipe" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." msgstr[0] "Enregistré %(count)d conflit juge-équipe." msgstr[1] "Enregistré %(count)d conflits juge-équipe." -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." msgstr[0] "Supprimé %(count)d conflit juge-équipe." msgstr[1] "Supprimé %(count)d conflits juge-équipe." -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." msgstr "Aucun changement n’a été fait aux conflits juge-équipe." -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" msgstr "Conflits juge-juge" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" msgstr "Enregistrer les conflits juge-juge" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." msgstr[0] "Enregistré %(count)d conflit juge-juge." msgstr[1] "Enregistré %(count)d conflits juge-juge." -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." msgstr[0] "Supprimé %(count)d conflit juge-juge." msgstr[1] "Supprimé %(count)d conflits juge-juge." -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." msgstr "Aucun changement n’a été fait aux conflits juge-juge." -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" msgstr "Conflits juge-institution" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" msgstr "Enregistrer les conflits juge-institution" -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." msgstr[0] "Enregistré %(count)d conflit juge-institution." msgstr[1] "Enregistré %(count)d conflits juge-institution." -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." msgstr[0] "Supprimé %(count)d conflit juge-institution." msgstr[1] "Supprimé %(count)d conflits juge-institution." -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." msgstr "Aucun changement n’a été fait aux conflits juge-institution." -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" msgstr "Conflits équipe-institution" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" msgstr "Enregistrer les conflits équipe-institution" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." msgstr[0] "Enregistré %(count)d conflit équipe-institution." msgstr[1] "Enregistré %(count)d conflits équipe-institution." -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." msgstr[0] "Supprimé %(count)d conflit équipe-institution." msgstr[1] "Supprimé %(count)d conflits équipe-institution." -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." msgstr "Aucun changement n’a été fait aux conflits équipe-institution." diff --git a/tabbycat/adjfeedback/locale/fr/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/fr/LC_MESSAGES/django.po index a37c79108fc..452f48ff031 100644 --- a/tabbycat/adjfeedback/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 05:45\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 03:05\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -17,952 +17,948 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:44 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" msgstr "Les échelles de nombre entiers doivent avoir un minimum et maximum" -#: adjfeedback/admin.py:73 adjfeedback/admin.py:139 +#: adjfeedback/admin.py msgid "target" msgstr "cible" -#: adjfeedback/admin.py:74 adjfeedback/admin.py:140 adjfeedback/models.py:236 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" msgstr "juge source" -#: adjfeedback/admin.py:75 adjfeedback/admin.py:141 adjfeedback/models.py:238 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" msgstr "équipe source" -#: adjfeedback/admin.py:91 -#, python-format -msgid "%(timestamp)s (version %(version)s)" -msgstr "%(timestamp)s (version %(version)s)" - -#: adjfeedback/admin.py:96 +#: adjfeedback/admin.py msgid "Target" msgstr "Cible" -#: adjfeedback/admin.py:97 adjfeedback/admin.py:162 +#: adjfeedback/admin.py msgid "Source" msgstr "Source" -#: adjfeedback/admin.py:98 +#: adjfeedback/admin.py msgid "Feedback timestamp and version" msgstr "Horodatage et version des commentaires" -#: adjfeedback/admin.py:180 +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "%(timestamp)s (version %(version)s)" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgstr[0] "1 évaluation a été marqué comme confirmé. Notez que cette action peut avoir marqué autre évaluations comme non confirmés." msgstr[1] "%(count)d évaluations ont été marqués comme confirmé. Notez que cette action peut avoir marqué autre évaluations comme non confirmés." -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." msgstr[0] "1 évaluation n’a pas été marqué comme confirmé, probablement parce qu’autres évaluations qui sont incompatibles l’ont été." msgstr[1] "%(count)d évaluations n’ont pas été marqués comme confirmé, probablement parce qu’autres évaluations qui sont incompatibles l’ont été." -#: adjfeedback/admin.py:205 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." msgstr[0] "1 évaluation a été marqué comme non confirmé." msgstr[1] "%(count)d évaluations ont été marqué comme non confirmés." -#: adjfeedback/admin.py:215 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." msgstr[0] "1 évaluation n’est plus tenu en compte." msgstr[1] "%(count)d évaluations ne sont plus tenus en compte." -#: adjfeedback/admin.py:225 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." msgstr[0] "1 évaluation est désormais tenu en compte." msgstr[1] "%(count)d évaluations sont désormais tenus en compte." -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" msgstr "Évaluations de juges" -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "chair" msgstr "président" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "solo" msgstr "seul" -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "panellist" msgstr "panelliste" -#: adjfeedback/forms.py:29 +#: adjfeedback/forms.py msgid "trainee" msgstr "stagiaire" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:57 +#: adjfeedback/forms.py msgid "Yes" msgstr "Oui" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:59 +#: adjfeedback/forms.py msgid "No" msgstr "Non" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:74 adjfeedback/forms.py:83 +#: adjfeedback/forms.py msgid "This field is required." msgstr "Ce champ est obligatoire." -#: adjfeedback/forms.py:164 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" msgstr "Note globale (%(min)d=le pire; %(max)d=le meilleur)*" -#: adjfeedback/forms.py:176 +#: adjfeedback/forms.py msgid "Ignored" msgstr "Pas tenu en compte" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:228 adjfeedback/forms.py:291 +#: adjfeedback/forms.py msgid "Submitted - " msgstr "Envoyé - " #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:229 adjfeedback/forms.py:296 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" msgstr "%(name)s (%(adjpos)s)" -#: adjfeedback/forms.py:252 adjfeedback/forms.py:326 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "-- Juges --" -#: adjfeedback/forms.py:269 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" msgstr "Juge dont l’évaluation concerne" -#: adjfeedback/forms.py:293 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "" -#: adjfeedback/forms.py:299 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" msgstr "%(name)s (le(a) président(e) a rendu les commentaires)" -#: adjfeedback/forms.py:301 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" msgstr "%(name)s (panelliste a donné la rétroaction à la place du président)" -#: adjfeedback/forms.py:392 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" msgstr "La ligne (pour %(adjudicator)s) n’avait pas de note" -#: adjfeedback/forms.py:397 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" msgstr "La ligne (pour %(adjudicator)s) avait trop de colonnes" -#: adjfeedback/forms.py:410 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." msgstr "Il y a plusieurs juges appelés « %(adjudicator)s » donc vous ne pouvez pas utiliser l’outil d’import d’ensemble pour mettre leurs notes à jour. Veuillez le faire sur la page de vue d’ensemble d’évaluations à la place." -#: adjfeedback/forms.py:416 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" msgstr "Il n’y a pas de juge dans ce tournoi avec le nom « %(adjudicator)s »" -#: adjfeedback/forms.py:424 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" msgstr "La note pour %(adjudicator)s, « %(score)s », n’est pas un nombre" -#: adjfeedback/forms.py:439 +#: adjfeedback/forms.py msgid "There were no scores to import." msgstr "Il n’y a aucun note à importer." -#: adjfeedback/models.py:13 adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator" msgstr "juge" -#: adjfeedback/models.py:16 +#: adjfeedback/models.py msgid "round" msgstr "joute" -#: adjfeedback/models.py:17 adjfeedback/models.py:232 +#: adjfeedback/models.py msgid "score" msgstr "note" -#: adjfeedback/models.py:18 +#: adjfeedback/models.py msgid "timestamp" msgstr "horodatage" -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score history" msgstr "histoire de note de base de juge" -#: adjfeedback/models.py:22 +#: adjfeedback/models.py msgid "adjudicator base score histories" msgstr "histoires de note de base de juge" -#: adjfeedback/models.py:30 +#: adjfeedback/models.py msgid "question" msgstr "question" -#: adjfeedback/models.py:32 +#: adjfeedback/models.py msgid "feedback" msgstr "évaluation" -#: adjfeedback/models.py:45 adjfeedback/models.py:55 adjfeedback/models.py:65 -#: adjfeedback/models.py:74 +#: adjfeedback/models.py msgid "answer" msgstr "réponse" -#: adjfeedback/models.py:48 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" msgstr "réponse booléenne d'un évaluation de juge" -#: adjfeedback/models.py:49 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" msgstr "réponses booléennes d'un évaluation de juge" -#: adjfeedback/models.py:58 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" msgstr "réponse au nombre entier d'un évaluation de juge" -#: adjfeedback/models.py:59 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" msgstr "réponses au nombre entier d'un évaluation de juge" -#: adjfeedback/models.py:68 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" msgstr "réponse en virgule flottante d’un évaluation de juge" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" msgstr "réponses en virgule flottante d’un évaluation de juge" -#: adjfeedback/models.py:77 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" msgstr "réponse en chaine de caractères d’un évaluation de juge" -#: adjfeedback/models.py:78 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" msgstr "réponses en chaine de caractères d’un évaluation de juge" -#: adjfeedback/models.py:86 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answer" msgstr "réponse multiple au choix multiple d'évaluation de juge" -#: adjfeedback/models.py:87 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answers" msgstr "réponses multiples au choix multiple d'évaluation de juge" -#: adjfeedback/models.py:106 +#: adjfeedback/models.py msgid "checkbox" msgstr "case à cocher" -#: adjfeedback/models.py:107 +#: adjfeedback/models.py msgid "yes/no (dropdown)" msgstr "oui/non (liste déroulante)" -#: adjfeedback/models.py:108 +#: adjfeedback/models.py msgid "integer (textbox)" msgstr "nombre entier (champ de saisie)" -#: adjfeedback/models.py:109 +#: adjfeedback/models.py msgid "integer scale" msgstr "échelle de nombres entier" -#: adjfeedback/models.py:110 +#: adjfeedback/models.py msgid "float" msgstr "virgule flottante" -#: adjfeedback/models.py:111 adjfeedback/models.py:145 +#: adjfeedback/models.py msgid "text" msgstr "texte" -#: adjfeedback/models.py:112 +#: adjfeedback/models.py msgid "long text" msgstr "texte long" -#: adjfeedback/models.py:113 +#: adjfeedback/models.py msgid "select one" msgstr "choisissez un" -#: adjfeedback/models.py:114 +#: adjfeedback/models.py msgid "select multiple" msgstr "choisissez plusieurs" -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "tournament" msgstr "tournoi" -#: adjfeedback/models.py:143 +#: adjfeedback/models.py msgid "sequence number" msgstr "nombre de séquence" -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" msgstr "La question présentée aux participants, par exemple, « Êtes-vous d'accord avec la décision ? »" -#: adjfeedback/models.py:148 +#: adjfeedback/models.py msgid "name" msgstr "nom" -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" msgstr "Un nom court pour la question, tel « D'accord »" -#: adjfeedback/models.py:151 +#: adjfeedback/models.py msgid "reference" msgstr "référence" -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" msgstr "Référence compatible aux codes, e.g., « accord_avec_decision »" -#: adjfeedback/models.py:155 +#: adjfeedback/models.py msgid "from adjudicator" msgstr "pour les juges" -#: adjfeedback/models.py:156 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" msgstr "Cette question devrait être posée aux juges (à propos d’autres juges)" -#: adjfeedback/models.py:158 +#: adjfeedback/models.py msgid "from team" msgstr "pour les équipes" -#: adjfeedback/models.py:159 +#: adjfeedback/models.py msgid "Teams should be asked this question" msgstr "Cette question devrait être posée aux équipes" -#: adjfeedback/models.py:162 +#: adjfeedback/models.py msgid "answer type" msgstr "type de réponse" -#: adjfeedback/models.py:164 +#: adjfeedback/models.py msgid "required" msgstr "obligatoire" -#: adjfeedback/models.py:165 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" msgstr "Si les participants doivent remplir ce champ" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "minimum value" msgstr "valeur minimale" -#: adjfeedback/models.py:168 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "Valeur minimale pour champs numériques (ignoré pour les champs texte ou vrai/faux)" -#: adjfeedback/models.py:170 +#: adjfeedback/models.py msgid "maximum value" msgstr "valeur maximale" -#: adjfeedback/models.py:171 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "Valeur maximale pour champs numériques (ignoré pour les champs texte ou vrai/faux)" -#: adjfeedback/models.py:176 +#: adjfeedback/models.py msgid "choices" msgstr "choix" -#: adjfeedback/models.py:177 +#: adjfeedback/models.py msgid "Permissible choices for select one/multiple fields (ignored for other fields)" msgstr "Les choix acceptables pour les champs de selection unique/multiple (ignoré pour les autres types de champ)" -#: adjfeedback/models.py:182 +#: adjfeedback/models.py msgid "adjudicator feedback question" msgstr "question d’un évaluation de juge" -#: adjfeedback/models.py:183 +#: adjfeedback/models.py msgid "adjudicator feedback questions" msgstr "questions d’un évaluation de juge" -#: adjfeedback/models.py:241 adjfeedback/views.py:768 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" msgstr "pas tenu en compte" -#: adjfeedback/models.py:242 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" msgstr "Si l’évaluation devrait influencer la note du (de la) juge" -#: adjfeedback/models.py:246 +#: adjfeedback/models.py msgid "adjudicator feedback" msgstr "évaluation de juge" -#: adjfeedback/models.py:247 +#: adjfeedback/models.py msgid "adjudicator feedbacks" msgstr "évaluations de juge" -#: adjfeedback/models.py:307 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." msgstr "Soit le juge ou équipe source n'a pas été spécifié." -#: adjfeedback/models.py:310 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." msgstr "Il y avait à la fois un juge et équipe source." -#: adjfeedback/models.py:312 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" msgstr "Il n'y a pas de juge comme cible pour cette évaluation. Aurait-il été supprimé ?" -#: adjfeedback/models.py:314 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." msgstr "Juge n'a pas vu ce débat." -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" msgstr "Si le juge est qualifiant (cliquer pour marquer)" -#: adjfeedback/tables.py:35 +#: adjfeedback/tables.py msgid "N/A" msgstr "S/O" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py msgid "Current weighted score" msgstr "Score pondéré actuel" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." msgstr "L'évaluation actuelle de ce juge." -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" msgstr "Résultat du note de base" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" msgstr "Cliquer pour modifier la note de base" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" msgstr "Note de base assigné" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" msgstr "La différence actuelle entre la note de base et note actuelle d'un juge" -#: adjfeedback/tables.py:84 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" msgstr "La différence actuelle entre la note de base et note actuelle de ce juge" -#: adjfeedback/tables.py:93 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." msgstr "L'écart-type des notes actuels de ce juge ; avec plus grands nombres représentant des notes d'évaluation moins consistants." -#: adjfeedback/tables.py:97 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" msgstr "L'écart-type des notes actuelles de ce juge" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Feedback Per Round" msgstr "Évaluations par joute" -#: adjfeedback/tables.py:107 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" msgstr "Passez sur les points pour montrer la note moyenne reçu dans la joute" -#: adjfeedback/tables.py:125 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" msgstr[0] "Voir %(count)s
    évaluation" msgstr[1] "Voir %(count)s
    évaluations" -#: adjfeedback/tables.py:148 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" msgstr "Feuilles d'évaluation non-soumises" -#: adjfeedback/tables.py:172 +#: adjfeedback/tables.py msgid "View Missing Feedback" msgstr "Voir évaluations manquantes" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" msgstr "Par qui vient cette évaluation ?" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" msgstr "Saisir Évaluation" -#: adjfeedback/templates/enter_feedback.html:9 -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format msgid "Add Feedback from %(name)s" msgstr "Ajouter Évaluation par %(name)s" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" msgstr "Ajouter Évaluation" -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" msgstr "Il n'y a pas d'options d'évaluation parce qu'aucun joute n'a encore été publié. Revenez quand il y en aura !" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." msgstr "Ce tournoi attend que vous soumettez des évaluations seulement sur le juge qui a rendu la décision. Ne donnez pas d'évaluation sur les autres juges." -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." msgstr "Ce tournoi attend que vous soumettez des évaluations sur tous les juges du jury (incluant les stagiaires)." -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." msgstr "Ce formulaire d’évaluation a des problèmes. Veuillez les examiner et les corriger." -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "En soumettant ce formulaire, votre adresse IP sera stocké pour des usages d’historique." -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" msgstr "Vue d’ensemble" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" msgstr "Récentes" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" msgstr "Non soumis" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" msgstr "Important" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" msgstr "Commentaires" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" msgstr "Par Source" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" msgstr "Par Cible" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" msgstr "Modifier Notes en Masse" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" msgstr "Évaluation %(source_type)s %(source_name)s" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." msgstr "%(source_name)s n'a pas encore soumis aucun évaluation." -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." msgstr "%(source_name)s n’a pas encore reçu d’évaluation." -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." msgstr "Ceci est probablement parce que l'équipe ou le juge qui a soumise cette évaluation l'avait soumise plusieurs fois ; ou parce qu'une équipe a soumis des évaluations sur plusieurs panellistes (et non juste le rendeur)." -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." msgstr "Non confirmé ; n'affectera pas la note du juge." -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." msgstr "L'évaluation est compté pour le juge mais n'est pas prise en compte en calculant les scores." -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." msgstr "Ignoré ; n'affectera pas la note de ce juge." -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." msgstr "Cette évaluation est soumise pour un juge mais qui depuis s'est fait enlevé du débat. Vous devriez probablement aller dans la zone de la base de données et supprimer l'évaluation." -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." msgstr "La note donnée dans cette évaluation." -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" msgstr "%(round)s %(score)s" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "On %(adjudicator)s" msgstr "Pour %(adjudicator)s" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" -msgstr "Reçu comme %(as)s" +msgid "Received as %(as_type)s" +msgstr "Reçu comme %(as_type)s" -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" msgstr "Base %(base)s" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" msgstr "Par %(source)s (leur %(relationship)s)" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" msgstr "Par %(source)s (%(relationship)s de %(side)s)" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" msgstr "Par inconnu" -#: adjfeedback/templates/feedback_card.html:88 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "%(time)s" -#: adjfeedback/templates/feedback_card.html:93 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." msgstr "Les évaluations non-confirmés ne sont pas comptés comme soumises et n'affecteront pas la note de ce juge." -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" msgstr "Dé-confirmer" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" msgstr "Confirmer" -#: adjfeedback/templates/feedback_card.html:103 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." msgstr "Les évaluations ignorées sont comptés comme soumises, mais n'affectent pas la note de ce juge." -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" msgstr "Tenir en compte" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" msgstr "Plus tenir en compte" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" msgstr "Aucun évaluation n’a encore été envoyé" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" msgstr "%(c_breaking)s marqué comme qualifiant" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." msgstr "La configuration des évaluations actuelle permet et attend seulement les présidents à soumettre des évaluations (sur les panellistes et stagiaires)." -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." msgstr "La configuration des évaluations actuelle permet et attend les présidents et panellistes à soumettre des évaluations sur l'un l'autre et aussi les présidents pour les stagiaires." -#: adjfeedback/templates/feedback_overview.html:18 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." msgstr "La configuration des évaluations actuelle permet et attend que les panellistes et stagiaires soumettent des évaluations sur le président, et les présidents à évaluer tout autre membre du jury (incluant les stagiaires)." -#: adjfeedback/templates/feedback_overview.html:22 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." msgstr "La configuration des évaluations actuelle permet et attend tout les juges (incluant les stagiaires) à soumettre des évaluations sur tout les autres membres du jury (incluant les stagiaires)." -#: adjfeedback/templates/feedback_overview.html:30 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgstr[0] "Il y a %(nadjs_outside_range)s juge avec une note hors de l'étendue permise de notes de juge, ce qui est réglée de %(min_score)s à %(max_score)s. Ceci peut causer la repartition automatique de juge à se comporter étrangement. Si vous voulez utiliser une étendue plus large, vous pouvez le régler dans la configuration des évaluations." msgstr[1] "Il y a %(nadjs_outside_range)s juges avec une note hors de l'étendue permise de notes de juge, ce qui est réglée de %(min_score)s à %(max_score)s. Ceci peut causer la repartition automatique de juge à se comporter étrangement. Si vous voulez utiliser une étendue plus large, vous pouvez le régler dans la configuration des évaluations." -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgstr[0] "%(count)s juge a une note égale ou plus grande que %(min)s et en dessous de %(max)s. Cela fait %(percent)s%% des juges." msgstr[1] "%(count)s juges ont une note égale ou plus grande que %(min)s et en dessous de %(max)s. Cela fait %(percent)s%% des juges." -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" msgstr "Distributions des Notes (étendue de %(min_score)s–%(max_score)s)" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" msgstr "Base" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" msgstr "Évaluation" -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." msgstr "La proportion d'une note de juge déterminé par les évaluations contre la base est réglée par joute. Cliquez ce lien et modifiez le champ 'Poids d'évaluation' pour modifier ce ratio pour %(round)s." -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" msgstr "Ratio de Note" -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." msgstr[0] "Il y a %(c_chairs)s débat par joute, donc il doit avoir %(c_chairs)s président." msgstr[1] "Il y a %(c_chairs)s débats par joute, donc il doit avoir %(c_chairs)s présidents." -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." msgstr[0] "Il y a %(c_debates)s débat par joute, mais seulement %(c_chairs)s au dessus de la note minimale pour voter." msgstr[1] "Il y a %(c_debates)s débats par joute, mais seulement %(c_chairs)s au dessus de la note minimale pour voter." -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" msgstr[0] "%(c_chairs)s président" msgstr[1] "%(c_chairs)s présidents" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." msgstr "Tous les juges avec un score assez haute pour voter, mais qui ne sont pas marqués comme présidents, seront marqués comme panellistes par la repartition automatique." -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" msgstr[0] "%(c_panellists)s panelliste" msgstr[1] "%(c_panellists)s panellistes" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." msgstr "Les juges sont marqués comme stagiaires par la repartition automatique si leur note est moins que la 'note minimale pour voter' (actuellement %(min_voting)s) réglé dans la configuration des règles de tirage de ce tournoi." -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" msgstr[0] "%(c_trainees)s stagiaire" msgstr[1] "%(c_trainees)s stagiaires" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" msgstr "Repartir Distributions Automatiquement (%(min_voting_score)s pour voter)" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" msgstr "Changer la note de base" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." msgstr "L'étendue des notes pour les juges est entre %(pref.adj_min_score)s et %(pref.adj_max_score)s. Les notes décimales sont permises. Ceci peut être configuré dans la configuration des évaluations." -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." msgstr "La note minimale obligatoire pour être marqué comme panelliste ou président (automatiquement) est %(min_voting_score)s. Ceci peut être configuré dans les règles de tirage." -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" msgstr "Note de base" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" msgstr "Enregistrer la note de base" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" msgstr "Qui êtes-vous ?" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" msgstr "sélectionnez votre nom ou celui de ton équipe dans cette liste" -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" msgstr "Mettre à jour les notes de juge" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." msgstr "Il n'y a pas de juges dans ce tournoi, donc vous ne pouvez pas mettre à jour des notes. Vous voulez peut-être importer des juges avant." -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" msgstr "Collez une liste des noms des juges et leurs nouvelles notes, dans le format :\n" "juge,note. Comme exemple :" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." msgstr "Les noms des juges doivent être exactement identiques à leurs noms dans le système." -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" msgstr "Cet envoi de formulaire a des problèmes :" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" msgstr "Envoyer" -#: adjfeedback/views.py:118 +#: adjfeedback/views.py msgid "Feedback Overview" msgstr "Vue d’ensemble des évaluations" -#: adjfeedback/views.py:142 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" msgstr "Trouver évaluations d’un juge" -#: adjfeedback/views.py:153 adjfeedback/views.py:177 adjfeedback/views.py:192 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" msgstr[0] "%(count)d évaluation" msgstr[1] "%(count)d évaluations" -#: adjfeedback/views.py:156 adjfeedback/views.py:182 adjfeedback/views.py:197 +#: adjfeedback/views.py msgid "Feedbacks" msgstr "Évaluations" -#: adjfeedback/views.py:163 +#: adjfeedback/views.py msgid "Find Feedback" msgstr "Trouver Évaluation" -#: adjfeedback/views.py:171 adjfeedback/views.py:710 +#: adjfeedback/views.py msgid "From Teams" msgstr "Par les équipes" -#: adjfeedback/views.py:186 adjfeedback/views.py:704 +#: adjfeedback/views.py msgid "From Adjudicators" msgstr "Par les juges" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "Latest Feedback" msgstr "Évaluations Récents" -#: adjfeedback/views.py:272 +#: adjfeedback/views.py msgid "(30 most recent)" msgstr "(30 plus récents)" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "Only Comments" msgstr "Commentaires Uniquement" -#: adjfeedback/views.py:283 +#: adjfeedback/views.py msgid "(250 most recent)" msgstr "(250 plus récents)" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "Important Feedback" msgstr "Évaluations Importantes" -#: adjfeedback/views.py:295 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" msgstr "(la note était beaucoup plus élevée ou basse que prévu)" -#: adjfeedback/views.py:362 +#: adjfeedback/views.py msgid "A Team" msgstr "Une équipe" -#: adjfeedback/views.py:367 +#: adjfeedback/views.py msgid "Team" msgstr "Équipe" -#: adjfeedback/views.py:374 adjfeedback/views.py:391 +#: adjfeedback/views.py msgid "Institution" msgstr "Institution" -#: adjfeedback/views.py:377 +#: adjfeedback/views.py msgid "An Adjudicator" msgstr "Un(e) juge" -#: adjfeedback/views.py:384 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "Juge" -#: adjfeedback/views.py:511 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." msgstr "L’évaluation de %(target)s par %(source)s est ajouté." -#: adjfeedback/views.py:541 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." msgstr "Merci, %(source)s ! Votre évaluation de %(target)s a été enregistrée." -#: adjfeedback/views.py:625 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" msgstr "Oups ! Je n’ai pas reconnu ce juge : %(adjudicator)s" -#: adjfeedback/views.py:648 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." msgstr "Oups ! Cette valeur n’est pas une note de base valide." -#: adjfeedback/views.py:675 +#: adjfeedback/views.py msgid "Feedback Progress" msgstr "L’avance des évaluations" -#: adjfeedback/views.py:696 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" msgstr[0] "%(nmissing)d évaluation manquant (%(fulfilled).1f%% reçu)" msgstr[1] "%(nmissing)d évaluations manquants (%(fulfilled).1f%% reçu)" -#: adjfeedback/views.py:741 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." msgstr "Évaluation de %(adjudicator)s par %(source)s est désormais %(result)s." -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "confirmed" msgstr "confirmé" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "un-confirmed" msgstr "dé-confirmé" -#: adjfeedback/views.py:768 +#: adjfeedback/views.py msgid "un-ignored" msgstr "tenu en compte" -#: adjfeedback/views.py:804 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." diff --git a/tabbycat/availability/locale/fr/LC_MESSAGES/django.po b/tabbycat/availability/locale/fr/LC_MESSAGES/django.po index cef42951aca..259cfdaa06d 100644 --- a/tabbycat/availability/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:07\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -17,298 +17,290 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" msgstr "Disponibilité" -#: availability/models.py:15 +#: availability/models.py msgid "content type" msgstr "type de contenu" -#: availability/models.py:16 +#: availability/models.py msgid "object id" msgstr "identifiant d'objet" -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "joute" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" msgstr "disponibilité dans une joute" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" msgstr "disponibilités dans une joute" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" msgstr "Marquer tous les juges qualifiant comme disponibles" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" msgstr "Tout marquer comme disponible" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" msgstr "Copier disponibilité de %(prev_round)s" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" msgstr "Voir le tirage" -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" msgstr "%(previous_unconfirmed)s débats de %(round)s n’ont pas de feuille complété — cela peut causer un tirage qui échoue ou qui est incorrect" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" msgstr "Générer le tirage" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." msgstr "La génération du tirage n'est pas possible avant que des équipes aient été marquées comme disponibles." -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." msgstr "La génération du tirage n'est pas possible avant que des juges aient été marqués comme disponibles." -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." msgstr "La génération du tirage n'est pas possible avant que des salles aient été marquées comme disponibles." -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." msgstr "Il n'y a pas assez de salles marquées comme disponibles pour le nombre de débats — le tirage ne se générera peut-être pas correctement." -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." msgstr "Il n'y a pas assez de juges marqués comme disponibles pour le nombre de débats — le tirage ne se générera peut-être pas correctement." -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." msgstr "Il y a un nombre impair d'équipes marquées comme disponibles — le tirage ne se générera peut-être pas correctement." -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." msgstr "Le nombre d’équipes marquées comme disponibles n’est pas un multiple de 4 — le tirage ne se générera peut-être pas correctement." -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgstr[0] "Un débat de %(prev_round)s n'a pas de feuille complète. Ce manque peut engendrer un tirage qui échoue ou qui est incorrect, en fonction de vos règles du tirage. Entrez les résultats de %(prev_round)s. " msgstr[1] "%(previous_unconfirmed)s débats de %(prev_round)s n'ont pas de feuille complète. Ce manque peut engendrer un tirage qui échoue ou qui est incorrect, en fonction de vos règles du tirage. Entrez les résultats de %(prev_round)s." -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " msgstr "Ceci est une page pour %(round)s, cependant la joute précédente n’est pas achevée. Avez-vous oublié de marquer %(prev_round)s comme achevée ?" -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." msgstr "Cette joute est la première, mais son type de tirage est %(draw_type)s. Souhaitiez-vous pour qu’il soit plutôt aléatoire ? Vous pouvez modifier le type de tirage de cette joute dans la zone pour modifier la base de données." -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." msgstr "Il s’agit d’une joute éliminatoire, mais la joute n'a pas de catégorie de qualification. Il faut que tous les joutes éliminatoires soient associés à une catégorie de qualification. Veuillez définir la catégorie de qualification de cette joute dans la zone pour modifier la base de données." -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." msgstr "Il s’agit d’une joute éliminatoire, mais son type de tirage est %(draw_type)s. Le type de tirage de toute joute éliminatoire doivent être « Élimination ». Veuillez modifier le type de tirage de cette joute dans la zone pour modifier la base de données." -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" msgstr "Il semble qu'il n'y ait aucune équipe qualifiante dans la catégorie %(break_category)s. Avez-vous générer la qualification pour la catégorie %(break_category)s?" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." msgstr "Il n'y a qu'une équipe qualifiante dans la catégorie %(break_category)s. Vous ne pouvez pas générer le tirage pour une joute éliminatoire avec seulement une équipe. Vous voudriez peut-être réexaminer la qualification pour la catégorie %(break_category)s." -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." msgstr "La préséance de classement d'équipes est vide. Cela signifie que les équipes ne sont pas classés par aucun métrique, donc tous les équipes seront dans une seule tranche avec tout le monde. Si vous n'attendiez pas à ça, créez une préséance de classement d'équipes dans la section de classement des options du tournoi avant de créer le tirage. Dans la plupart des tournois, la première métrique devrait être le pointage ou victoires." -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" msgstr "Sélectionner tout" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" msgstr "Sélectionner aucun" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" msgstr "Enregistrements" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" msgstr "Enregistrer tous les juges qualifiant" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" msgstr "Copier de la joute précédente" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" msgstr "Enregistrer les sélectionnés" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "Équipes" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "Juges" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" msgstr "Salles" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" msgstr "Marquer équipes comme disponible" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" msgstr "Pas de besoin à marquer la disponibilité d'équipes" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." msgstr "Il y a un nombre impair d'équipes marquées comme disponibles pour cette joute." -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." msgstr "Le nombre d'équipes marquées comme disponibles pour cette joute n'est pas un multiple de 4." -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" msgstr "Modifier disponibilité d'équipes" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "Un juge n'a pas de tournoi associé. Réglez leur tournoi dans la zone de la base de données pour pouvoir le marquer comme disponible." msgstr[1] "%(count)s juges n'ont pas de tournoi associé. Réglez leur tournoi dans la zone de la base de données pour pouvoir les marquer comme disponibles." -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." msgstr[0] "Le %(count)s juge, qui n'était pas disponible la dernière joute, l'est désormais." msgstr[1] "Les %(count)s juges, qui n'étaient pas disponibles la dernière joute, le sont désormais." -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" msgstr[0] "Les %(count)s juges suivants, qui n'étaient pas disponibles la dernière joute, le sont désormais : %(adjs_list)s" msgstr[1] "Les %(count)s juges suivants, qui n'étaient pas disponibles la dernière joute, le sont désormais : %(adjs_list)s" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." msgstr[0] "%(count)s juge, qui était disponible la dernière joute, ne l'est plus." msgstr[1] "%(count)s juges, qui étaient disponibles la dernière joute, ne le sont plus." -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" msgstr[0] "Le %(count)s juge suivant, qui était disponible la dernière joute, ne l'est plus : %(adjs_list)s" msgstr[1] "Les %(count)s juges suivants, qui étaient disponible la dernière joute, ne le sont plus : %(adjs_list)s" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" msgstr "Marquer juges comme disponibles" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." msgstr[0] "Il faut au moins un juge marqué comme disponible pour le nombre de débats." msgstr[1] "Il faut au moins %(required_count)s juges enregistrés pour le nombre de débats." -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" msgstr "Modifier disponibilité de juges" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." msgstr[0] "%(count)s salle, qui n'était pas disponible la dernière joute, l'est désormais." msgstr[1] "%(count)s salles, qui n'étaient pas disponibles la dernière joute, le sont désormais." -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" msgstr[0] "La %(count)s salle suivante, qui n'était pas disponible la dernière joute, l'est désormais : %(rooms_list)s" msgstr[1] "Les %(count)s salles suivantes, qui n'étaient pas disponibles la dernière joute, le sont désormais : %(rooms_list)s" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." msgstr[0] "%(count)s salle qui était disponible la dernière joute ne l'est plus." msgstr[1] "%(count)s salles qui étaient disponibles la dernière joute ne le sont plus." -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" msgstr[0] "La %(count)s salle suivante, qui était disponible la dernière joute, ne l'est plus : %(rooms_list)s" msgstr[1] "Les %(count)s salles suivantes, qui étaient disponibles la dernière joute, ne le sont plus : %(rooms_list)s" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "Une salle n'a pas de tournoi associé. Ajoutez-le dans la zone de la base de données si vous voulez le marquer comme disponible." msgstr[1] "%(count)s salles n'ont pas de tournoi associé. Ajoutez-les dans la zone de la base de données si vous voulez les marquer comme disponibles." -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" msgstr "Marquer salles comme disponible" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." msgstr[0] "Il faut au moins une salle marquée comme disponible pour le nombre de débats." msgstr[1] "Il faut au moins %(required_count)s salles marquées comme disponibles pour satisfier le nombre de débats." -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" msgstr "Modifier la disponibilité des salles" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" msgstr "aucune équipe ne débat" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" @@ -316,7 +308,7 @@ msgstr[0] "%(nteams)d équipe qualifiante — aucun débat ne peut avoir lieu" msgstr[1] "%(nteams)d équipes qualifiantes — aucun débat ne peut avoir lieu" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" @@ -326,7 +318,7 @@ msgstr[1] "%(ndebating)d équipes qualifiantes débattent dans cette joute" #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" @@ -334,67 +326,67 @@ msgstr[0] "; %(nbypassing)d équipe le dépasse" msgstr[1] "; %(nbypassing)d équipes le dépassent" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" msgstr[0] "%(nadvancing)s équipe avançante débat dans cette joute" msgstr[1] "%(nadvancing)s équipes avançantes débattent dans cette joute" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" msgstr "Actif actuellement" -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" msgstr "Actif dans %(prev_round)s" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" msgstr "Arrivée" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" msgstr "Disponibilité d'équipes" -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" msgstr "Disponibilité de juges" -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" msgstr "Disponibilité des salles" -#: availability/views.py:260 +#: availability/views.py msgid "Room" msgstr "Salle" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" msgstr "Nom d'affichage (pour le tirage)" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" msgstr "Catégories" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" msgstr "Priorité" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." msgstr "La mise à jour de disponibilités a échoué suite à une faute d’intégrité des données. Vous devriez re-essayer ou faire des mises-à-jour individuelles." -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." msgstr "Toutes les équipes, tous les juges et toutes les salles ont été enregistrés." -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." msgstr "Tous les juges qualifiants ont été enregistrés." -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." msgstr "Toutes les équipes, tous les juges et toutes les salles de la joute précédente ont été enregistrés." diff --git a/tabbycat/breakqual/locale/fr/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/fr/LC_MESSAGES/django.po index e41b4106d8a..fb164d8f61b 100644 --- a/tabbycat/breakqual/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:07\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 14:54\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -17,508 +17,506 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" msgstr "Qualification" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "La règle de qualification %(rule)s exige que les mesures suivantes soient dans la précédence de classement des équipes pour qu'elle puisse se faire marcher : %(required)s; et elle manque de ce qui suit : %(missing)s." +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" +msgstr[1] "La règle de qualification %(rule)s manque les métriques requises suivantes dans la préséance de classement d'équipes : %(missing)s" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "tournoi" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "nom" -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" msgstr "Nom à afficher, par exemple, « ESL »" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" msgstr "slug" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" msgstr "Slug pour les URL, par exemple, « esl »" -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" msgstr "numéro de séquence" -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" msgstr "L’ordre dans lequel les catégories sont affichées" -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" msgstr "taille de la qualification" -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" msgstr "Nombre d’équipes qualifiantes dans cette catégorie" -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" msgstr "est général" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" msgstr "Vrai si la plupart des équipes sont admissibles pour cette catégorie, par exemple Open, sinon faux" -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" msgstr "priorité" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" msgstr "Si une équipe se qualifie en plusieurs catégories, les nombres plus élevés ont priorité ; équipes peuvent diviser en plusieurs catégories, si et seulement si elles ont toutes la même priorité" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" msgstr "limite" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" msgstr "Au plus, ce montant d’équipes seront montrées sur le classement public de cette catégorie, ou 0 pour aucune limite" -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" msgstr "Standard" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "AIDA 1996" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "AIDA 2016 (Easters)" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "AIDA 2016 (Australs)" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "AIDA 2019 (Australs, limite dynamique)" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" msgstr "règle" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" msgstr "Règle pour le calcul de la qualification (la plupart des tournois devraient utiliser « Standard »)" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" msgstr "qualification des équipes" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" msgstr "catégorie de break" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" msgstr "catégories de break" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "équipe" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "rang" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" msgstr "rang dans la qualification" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" msgstr "Exclue à cause de la limite" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" msgstr "Non admissible" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" msgstr "Qualification différente" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" msgstr "Disqualifiée" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" msgstr "Perdu le tirage au sort" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" msgstr "Retirée" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" msgstr "remarque" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" msgstr "Utilisé pour expliquer pourquoi une équipe qui qualifierait autrement n’a pas qualifié" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" msgstr "équipe qualifiante" -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" msgstr "Catégories de qualification" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." msgstr "Les catégories de qualification permettent la génération de joutes éliminatoires, e.g., pour les catégories de novices ou FLS. Sur cette page, vous pouvez les définir. Après les avoir faits, vous pouvez fixer l’éligibilité des équipes sur la page d'éligibilité." -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." msgstr "Si vous voulez supprimer des catégories de qualification, utilisez l’aire de modification de la base de données." -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" msgstr "Enregistrer les catégories de qualification" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." msgstr "Les juges peuvent être marqués comme qualifiants dans la section Vue d'ensemble des évaluations." -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" msgstr "Qualifications" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " -msgstr "Ce tournoi n’a aucune catégorie de qualification définie. Vous pouvez découvrir comment créer des qualifications dans notre documentation." +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +msgstr "Ce tournoi n’a aucune catégorie de qualification définie. Vous pouvez découvrir comment créer des qualifications dans notre documentation." -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" msgstr "Éligibilité d'équipe" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" msgstr "Qualification %(category)s" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " msgstr " %(size)s Places " -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" msgstr "Équipes admissibles" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" msgstr "Qualifiant" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" msgstr "Exclu" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" msgstr "Éligible" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" msgstr "Marquer équipes comme qualifiantes" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" msgstr "Générer cette qualification" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" msgstr "Voir cette qualification" -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" msgstr "visible publiquement" -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" msgstr "pas visible publiquement" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" msgstr "Supprimer et régénérer toutes les qualifications" -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" msgstr "Générer la qualification pour toutes les catégories" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." msgstr "Il y a 0 équipe marquée comme admissible pour cette catégorie. Vous devez ajouter des équipes admissibles pour que cette qualification puisse être générée correctement." -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." msgstr "Cette qualification utilise la règle %(category)s — si vous avez l’intention d’utiliser une règle différente, vous devriez modifier la règle pour cette catégorie de qualification dans la zone pour modifier la base de données, puis supprimez et régénérer tous les qualifications. Veuillez vérifier la qualification avant de l'annoncer au public ou de le publier. Le code qui génère la qualification n’est pas testée robustement pour les cas extrêmes." -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." msgstr "Pour modifier la qualification, utilisez les remarques dans la colonne à droite. N'importe équipe avec une remarque sera exclu de la qualification (des remarques pourraient être ajoutés automatiquement). Après, cliquer les boutons Sauvegarder Remarques et Mettre à Jour appropriés ci-dessous. Si vous avez des règles de qualification compliqués (par exemple si les équipes peuvent décider eux-mêmes leur catégorie préféré), vous aurez parfois besoin de faire des modifications manuelles pour avoir la bonne qualification. Comme dernier ressort, vous pouvez modifier la liste des équipes directement dans l'interface de la base de données." -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." msgstr "Le réglage équipes qualifiants public est activé. Aussi tôt que vous cliquer le bouton, la liste des équipes qualifiants sera visible publiquement, avant que vous auriez l'opportunité à le vérifier ! C'est fortement conseillé que vous désactivez ce réglage dans la page des réglages de tournoi avant de générer la qualification d'équipe." -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." msgstr "La qualification n'a pas encore été générée. Souhaitez-vous générer la qualification pour toutes les catégories ? Il est sûr de générer la qualification avant que toutes les joutes préliminaires sont terminés, si vous êtes curieux : vous pouvez toujours le régénérer plus tard." -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." msgstr "Attention ! Le réglage Équipes qualifiants public est activé, donc la qualification est public. Si vous modifiez la(es) qualification(s), les changements seront visibles immédiatement, sans chance pour les réviser." -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" msgstr "Enregistrer les remarques et mettre à jour tous les qualifications" -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" msgstr "Enregistrer les remarques et mettre à jour la qualification %(category)s" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" msgstr "Il y a %(count)s équipes éligibles pour cette catégorie. Voulez-vous en ajouter plus ?" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" msgstr "Vue d’ensemble" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" msgstr "Qualification des juges" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." msgstr "Il semble qu'il n'y a aucun catégorie de qualification. Si vous voulez en ajouter, vous devriez d'abord les ajouter dans l'interface de la base de données, puis retourner à cette page pour marquer les équipes comme éligible." -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" msgstr "Qualification" -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "Juges" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" msgstr "Grande finale" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" msgstr "GF" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "Demi-finales" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "DF" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "Quarts de finale" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "QF" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "Huitièmes de finale" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "HF" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" msgstr "Seizièmes de finale" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" msgstr "16F" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" msgstr "Trente-deuxièmes de finale" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" msgstr "32F" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" msgstr "Finales %s" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" msgstr "%sF" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" msgstr "Demi-finales %s" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" msgstr "%sSF" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" msgstr "Quarts de finale %s" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" msgstr "%sQF" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" msgstr "Huitièmes de finale %s" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" msgstr "%sHF" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" msgstr "Seizièmes de finale %s" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" msgstr "%sDHF" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" msgstr "Trente-deuxièmes de finale %s" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" msgstr "%sTHF" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" msgstr "Joute éliminatoire %s inconnue" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" msgstr "JQ%sU" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" msgstr "Joute éliminatoire inconnue" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" msgstr "JÉI" -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" msgstr "Une erreur s'est produite lors de la génération de la qualification pour la catégorie %(category)s : %(message)s" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" msgstr "Éligible pour" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" msgstr "Modifier Remarque" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." msgstr "Les changements aux remarques pour les équipes qualifiantes ont été enregistrés, et la qualification des équipes a été mise à jour, pour les catégories de qualification suivantes : %(categories)s." -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." msgstr "Les changements aux remarques pour les équipes qualifiantes ont été enregistrés, et la qualification des équipes a été mise à jour, pour la catégorie de qualification %(category)s." -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." msgstr "Modifications aux remarques des équipes qualifiants sauvegardés." -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." msgstr "La qualification des équipes s'est générée pour les catégories de qualification suivantes : %(categories)s." -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" msgstr "Juges Qualifiants" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" msgstr "Admissibilité pour la qualification" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "%s Orateurs" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" diff --git a/tabbycat/draw/locale/fr/LC_MESSAGES/django.po b/tabbycat/draw/locale/fr/LC_MESSAGES/django.po index 5babb9f39b3..597822cc0c1 100644 --- a/tabbycat/draw/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 15:51\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -17,1128 +17,1108 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "%(count)d débat a son statut mis à %(status)s." -msgstr[1] "%(count)d débats ont leurs statuts mis à %(status)s." - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "Mettre statut des résultats à %(status)s" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." msgstr[0] "%(count)d débat a été marqué comme ayant ses côtés confirmés." msgstr[1] "%(count)d débats ont été marqués comme ayant ses côtés confirmés." -#: draw/admin.py:93 +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "Marquer côtés comme non confirmés" + +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." msgstr[0] "%(count)d débat a été marqué comme ayant ses côtés pas confirmés." msgstr[1] "%(count)d débats ont été marqués comme ayant ses côtés pas confirmés." -#: draw/apps.py:7 draw/views.py:452 draw/views.py:455 +#: draw/apps.py draw/views.py msgid "Draw" msgstr "Tirage" -#: draw/generator/__init__.py:14 +#: draw/generator/__init__.py msgid "Too many swaps" msgstr "Trop d'échanges" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" msgstr "Un-monte-un-descend (historique)" -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" msgstr "Un-monte-un-descend (institution)" -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" msgstr "Un-monte-un-descend (pour accommoder)" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "Bubble up (history)" msgstr "Nager (histoire)" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble down (history)" msgstr "Couler (histoire)" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble up (institution)" msgstr "Nager (institution)" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble down (institution)" msgstr "Couler (institution)" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" msgstr "Nager (pour accommoder)" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" msgstr "Couler (pour accommoder)" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Can't bubble up/down" msgstr "Ne peut pas nager/couler" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Pull-up team" msgstr "Promouvoir équipe" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." msgstr "%d débats à la joute précédente n'ont pas un résultat." -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." msgstr "%d débats à la joute précédente n'ont pas exactement deux équipes avançantes." -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." msgstr "Les rangs des salles de la joute d'élimination partielle indique qu'un nombre impair d'équipes (%(nbypassing)d) l'ont contourné." -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." -msgstr "Les rangs des salles de la joute d'élimination partielle indique que %(nbypassing)d équipes l'ont contourné, mais que %(advancing)d équipes y ont avancé." +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." +msgstr "Les rangs des salles de la joute d'élimination partielle indique que %(nbypassing)d équipes l'ont contourné, mais que %(nadvancing)d équipes l'ont avancé." -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." msgstr "Le nombre d’équipes (%d) dans la joute précédente n’est pas une puissance de deux." -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." msgstr "L'ordre de Rényi ne peut pas être négative mais il est actuellement %(alpha)f." -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." msgstr "Le nombre d’équipes présenté pour le tirage n'est pas un multiple de %(num)d." -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." msgstr "Il n’y a pas d’équipes pour le tirage." -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." msgstr "Il n'y a que %d équipes « breaking » dans cette catégorie ; il faut au moins deux pour générer un tirage pour une joute éliminatoire." -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." msgstr "Le nombre d’équipes (%d) dans cette joute n’est pas une puissance de deux." -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." msgstr "%(noninteger)d sur %(total)d équipes ont une première métrique de classement non-entier. Les tranches intermédiaires obligent celui ci d'être entier (typiquement le pointage ou nombre de victoires)." -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." msgstr "Il y avait %(aff_count)d équipes affirmatives mais %(neg_count)d équipes négatives." -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." msgstr "Un équipe ou plus avait des côtés alloués qui n'étaient pas affirmatif ni négatif." -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." msgstr "Le type de tirage %(type)s ne peut pas être utilisé avec des formats de deux équipes." -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." msgstr "Le type de tirage %(type)s ne peut pas être utilisé avec le format de Parlementaire Britannique." -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" msgstr "Réglage d'« équipes au débat » inconnu : %(option)s" -#: draw/manager.py:276 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." msgstr "La taille de la qualification (%(size)d) pour cette catégorie est invalide. Il doit être soit six ou quatre fois une puissance de deux." -#: draw/models.py:29 draw/models.py:35 +#: draw/models.py msgid "none" msgstr "aucun" -#: draw/models.py:30 +#: draw/models.py msgid "postponed" msgstr "repoussé" -#: draw/models.py:31 draw/models.py:36 +#: draw/models.py msgid "draft" msgstr "brouillon" -#: draw/models.py:32 draw/models.py:37 +#: draw/models.py msgid "confirmed" msgstr "confirmé" -#: draw/models.py:43 draw/models.py:375 +#: draw/models.py msgid "round" msgstr "tour" -#: draw/models.py:45 +#: draw/models.py msgid "room" msgstr "salle" -#: draw/models.py:48 +#: draw/models.py msgid "bracket" msgstr "tranche" -#: draw/models.py:50 +#: draw/models.py msgid "room rank" msgstr "rang de salle" -#: draw/models.py:56 +#: draw/models.py msgid "importance" msgstr "importance" -#: draw/models.py:58 +#: draw/models.py msgid "result status" msgstr "état de résultat" -#: draw/models.py:60 +#: draw/models.py msgid "sides confirmed" msgstr "côtés confirmés" -#: draw/models.py:61 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." msgstr "Si non coché, les côtés assignés aux équipes à ce débat sont génériques." -#: draw/models.py:64 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "débat" -#: draw/models.py:65 +#: draw/models.py msgid "debates" msgstr "débats" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:84 draw/models.py:109 +#: draw/models.py msgid " (sides not confirmed)" msgstr " (côtés non-confirmés)" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:96 draw/models.py:113 +#: draw/models.py msgid " vs " msgstr " vs " -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" msgstr "affirmatif" -#: draw/models.py:263 +#: draw/models.py msgid "negative" msgstr "négatif" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" msgstr "premier gouvernement" -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" msgstr "première opposition" -#: draw/models.py:266 +#: draw/models.py msgid "closing government" msgstr "second gouvernement" -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" msgstr "seconde opposition" -#: draw/models.py:274 draw/models.py:377 +#: draw/models.py msgid "team" msgstr "équipe" -#: draw/models.py:276 draw/models.py:379 +#: draw/models.py msgid "side" msgstr "côté" -#: draw/models.py:281 +#: draw/models.py msgid "debate team" msgstr "débat-équipe" -#: draw/models.py:282 +#: draw/models.py msgid "debate teams" msgstr "débat-équipes" -#: draw/models.py:303 +#: draw/models.py #, python-format msgid "placed %(place)s" msgstr "placé %(place)s" -#: draw/models.py:305 draw/models.py:312 +#: draw/models.py msgid "result unknown" msgstr "résultat inconnu" -#: draw/models.py:308 +#: draw/models.py msgid "won" msgstr "gagné" -#: draw/models.py:310 +#: draw/models.py msgid "lost" msgstr "perdu" -#: draw/models.py:383 +#: draw/models.py msgid "team side allocation" msgstr "répartition des côté aux équipes" -#: draw/models.py:384 +#: draw/models.py msgid "team side allocations" msgstr "répartitions des côtés aux équipes" #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" msgstr "%(side)s: %(metric)s" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" msgstr "Équipe %(num)d" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" msgstr "Rang de salle de ce débat" -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" msgstr "Tranche de ce débat" -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" msgstr "historique des côtés
    \n" "(nombre de fois que l'équipe a été sur chaque côté avant ce tour)" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" msgstr "HC" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" msgstr "D'équilibré à déséquilibré" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" msgstr "De déséquilibré à équilibré" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" msgstr "Meilleur amélioration possible, encore déséquilibré" -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" msgstr "Était déséquilibré et est encore déséquilibré" -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" msgstr "Aucune métrique dans la préséance de classement d'équipe" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" msgstr "Côté" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" msgstr "Position dans ce tour" -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" msgstr "Avant" -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" msgstr "Historique de côté avant ce tour" -#: draw/tables.py:292 +#: draw/tables.py msgid "After" msgstr "Après" -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" msgstr "Historique de côté après ce tour" -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" msgstr "Coût" -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" msgstr "Coût de position" -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" msgstr "État" -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" msgstr "Les équipes qui ont ce nombre de points sont permises dans ce débat
    \n" "(tranche en caractères gras)" -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "%(team)s : %(metric)s" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" msgstr "historique de côté avant ce tour" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" msgstr "Côtés" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" msgstr "coût de position" -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" msgstr "ARRÊTEZ !!! D’abord lisez ceci ! La suppression des équipes-débat dans la base de données peut faire planter Tabbycat !" -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." msgstr "Tabbycat exige que tous les débats aient exactement une débat-équipe pour chaque côté, et aucune autre débat-équipe, à tout moment. Si vous supprimez n’importe quelle débat-équipe, vous devez alors remplacer chacune d’elles avec une nouvelle débat-équipe dans le même débat, ou supprimer les objets associés de débat. Si vous ne le faites pas correctement, nombreux pages planteront certainement." -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." msgstr "Il s’agit d’une source commune d’erreurs. Si cela vous arrive, vérifiez les débats (sous la section de Tirage dans cette zone pour modifier la base de données) pour s'assurer que chacune a exactement une équipe affirmative et une équipe négative." -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" msgstr "AVERTISSEMENT !!! Si vous modifiez des équipes-débat, d’abord lisez ceci !" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." msgstr "Tabbycat exige qu'il y ait exactement une équipe-débat pour chaque côté, et aucune autre équipe-débat, à chaque débat. Si vous modifiez les débat-équipes dans la base de données, vous devez vous assurer que cela reste le cas. Si vous ne le faites pas correctement, nombreux pages vont certainement se planter." -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." msgstr[0] "1 débat n'a pas de président." msgstr[1] "%(ndebates)s débats n'ont pas de président." -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" msgstr[0] "%(adjudicators)s juge plusieurs débats." msgstr[1] "Les %(nadjs)s juges suivant(e)s jugent plusieurs débats : %(adjudicators)s" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." msgstr[0] "1 débat a un panel qui a un nombre pair de juges." msgstr[1] "%(ndebates)s débats ont un panel qui a un nombre pair de juges." -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." msgstr[0] "1 débat a un conflit de juge." msgstr[1] "%(ndebates)s débats ont des conflits de juge." -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" msgstr[0] "%(adjudicators)s n'est pas disponible cette joute, mais est alloué à un débat." msgstr[1] "Les %(nadjs)s juges suivants ne sont pas disponible cette joute, mais sont alloués aux débats : %(adjudicators)s" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." msgstr[0] "Un juge est disponible mais pas alloué à un débat." msgstr[1] "%(ndebates)s juges sont disponibles mais ne sont pas alloué à des débats." -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" msgstr[0] "%(teams)s se figure dans plusieurs débats." msgstr[1] "Les %(nteams)s équipes suivantes se figurent dans plusieurs débats : %(teams)s" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." msgstr[0] "1 débat n'a pas de salle." msgstr[1] "%(ndebates)s débats n'ont pas de salle." -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" msgstr[0] "Il y a plusieurs débats dans %(rooms)s." msgstr[1] "Les %(ndebates)s salles suivantes ont plusieurs débats : %(rooms)s" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." msgstr[0] "Un débat viole une contrainte de salle." msgstr[1] "%(ndebates)s débats violent des contraintes de salle." -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" msgstr "Disponibilité" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" msgstr "Modifier les côtés/appariements" -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" msgstr "Refaire le tirage" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" msgstr "Détails du Tirage" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" msgstr "Équilibre des positions" -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" msgstr "Affichage du tirage" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" msgstr "Confirmer régénération de tirage" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" msgstr "Retour au tirage" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" msgstr "Confirmer la suppression du tirage pour %(round)s" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" msgstr "Voulez-vous vraiment régénérer le tirage pour %(round)s ? Cela supprimera tous les débats dans le tirage actuel y compris leurs feuilles de jugement et les attributions de juge, ce qui ne peut pas être annulé. Vous ne voulez probablement pas le faire si des résultats ont été saisis !" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" msgstr "Oui, je veux supprimer le tirage actuelle pour %(round)s" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" msgstr "Voir le tirage" -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" msgstr "Les débats commenceront à %(start_time)s" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" msgstr "Définir l'heure de début" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" msgstr "Saisie des résultats" -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" msgstr "Détails des motions" -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." msgstr[0] "%(motions_count)s motion a été enregistrée." msgstr[1] "%(motions_count)s motions ont été enregistrées." -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "Modifier les motions" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" +msgstr[1] "Modifier motions" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" msgstr "Votre configuration/format nécessite la spécification des motions dans le cadre de la saisie des feuilles. Assurez-vous que vous les ajoutiez avant que les résultats arrivent !" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" -msgstr "Saisir les motions" - -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." -msgstr "La motion a été enregistrée." - -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "Modifier la motion" +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." +msgstr "Une motion devrait être ajoutée si vous voulez l'afficher lors des annonces, l'imprimer sur vos feuilles de jugement ou pour l'afficher (plus tard) sur les pages de motions/statistiques publiques." -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." -msgstr "Vous devriez enregistrer une motion si vous voulez l'afficher dans l'auditorium, l'imprimer sur vos feuilles (en utilisant les liens ci-dessous), ou l'afficher (plus tard) sur la page publique pour les motions." - -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "Saisir une motion" +msgid_plural "Enter motions" +msgstr[0] "" +msgstr[1] "Saisir motions" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" msgstr "Publication du tirage" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." msgstr "Vous n'avez pas encore générer un tirage pour cette joute. Il n'y a rien à publier." -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." msgstr "Le tirage de cette joute est encore un brouillon. Confirmez-le avant de le publier." -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" msgstr "Retirer le tirage du public" -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." msgstr "Le tirage a été publié." -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" msgstr "Voir page de tirage publique" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "Puisque vous avez publié le tirage, il est possible d'utiliser les formulaires publics afin de soumettre les feuilles ou les évaluations (si ces formulaires sont activés). Cependant, le tirage ne s'affichera pas à moins que le paramètre « affichage public du tirage » soit activé dans la configuration de ce tournoi." -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "Vous avez publié le tirage, mais il ne s'affichera pas à moins que la paramètre « affichage public du tirage » soit activée dans la configuration de ce tournoi." -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" msgstr "Publier le tirage" -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "Votre tournoi permet aux juges de soumettre en ligne les feuilles et les évaluations. Avant qu'ils puissent le faire, il faut que le tirage soit publié." -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "Votre tournoi permet aux juges de soumettre en ligne les feuilles. Avant qu'ils puissent le faire, il faut que le tirage soit publié." -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." msgstr "Votre tournoi permet aux juges de soumettre en ligne les évaluations. Avant qu'ils puissent le faire, il faut que le tirage soit publié." -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." msgstr "Votre tournoi est configuré pour afficher publiquement le tirage. La publication du tirage lui permettra de s'afficher sur la page publique." -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." msgstr "Votre configuration n'a ni de page publique pour le tirage ni les soumissions des feuilles et/ou évaluations. Il n'y a aucune raison de publier le tirage." -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "Publication des motions" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "Publier les motions" +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" +msgstr[1] "Publier les motions" -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "Retirer les motions du public" +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" +msgstr[1] "Retirer les motions" -#: draw/templates/draw_display_admin.html:200 +#: draw/templates/draw_display_admin.html msgid "Release Motion" -msgstr "Publication de la motion" +msgid_plural "Release Motions" +msgstr[0] "" +msgstr[1] "Publier motions" -#: draw/templates/draw_display_admin.html:201 -msgid "Release motion to public" -msgstr "Publier la motion" - -#: draw/templates/draw_display_admin.html:202 -msgid "Unrelease motion to public" -msgstr "Retirer la motion du public" +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" +msgstr[1] "Aucunes motions ne sont définies pour cette joute." -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." msgstr "Selon la configuration de votre tournoi, les motions peuvent être sélectionnées dans les feuilles, que soumettent les juges. Assurez-vous que vous publiez les motions avant que les débats terminent, sinon les feuilles ne pourront pas être soumisses." -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." msgstr "Selon la configuration de votre tournoi, les équipes peuvent opposer leur veto aux motions, et les juges soumettent les feuilles. Assurez-vous que vous publiez les motions avant que les débats terminent, sinon les feuilles ne pourront pas être soumisses." -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "Votre tournoi est configuré pour afficher la/les motion(s) de chaque joute sur la page publique. Pour que la/les motion(s) s'y affiche(nt), vous devez la/les publier." - -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "Votre tournoi n'est pas configuré pour afficher la/les motion(s) de chaque tour sur la page publique. Vous n'avez pas besoin de la/les publier." +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" +msgstr[1] "Votre tournoi est configuré pour afficher les motions de chaque joute sur la page publique. Pour que les motions s'y affiche, vous devez les publier." -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "Les motions ont été publiées." +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" +msgstr[1] "Votre tournoi n'est pas configuré pour afficher les motions de chaque joute sur la page publique. Vous n'avez pas besoin de les publier." -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "La motion a été publiée." +msgid_plural "Motions have been released publicly." +msgstr[0] "" +msgstr[1] "Les motions ont été publiées." -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" msgstr "Voir page de motions publique" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." msgstr "Vous avez publié les motions, mais elles ne s'afficheront pas à moins que la paramètre « affichage public des motions » soit activée dans la configuration de ce tournoi." -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" msgstr "(pour la salle d'instructions)" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" msgstr "Afficher le Tirage rangé par Salle" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" msgstr "Afficher le Tirage rangé par Équipe" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" msgstr "Afficher tirages pour Tout les joutes actuelles ordonné par salle" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" msgstr "Afficher tirages pour tout les joutes actuelles ordonné par équipe" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" msgstr "Afficher tirage pour %(round)s ordonné par salle" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" msgstr "Afficher tirage pour %(round)s ordonné par équipe" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" msgstr "Afficher les Motions" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" msgstr "Envoyer Motions" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" msgstr "Envoyer Motion" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" msgstr "Commence à" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" msgstr "(pour l'impression)" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" msgstr "Voir Formulaires de Jugement" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" msgstr "Voir Formulaires d'Évaluation" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" msgstr "Vitesse de défilé" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" msgstr "Vite" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" msgstr "Moyen" -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" msgstr "Lent" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" msgstr "Très Lent" -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" msgstr "Cacher Juges" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" msgstr "Montrer Juges" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" msgstr "Taille de Texte" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" msgstr "Minuscule" -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" msgstr "Petit" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" msgstr "Grand" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" msgstr "Énorme" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" msgstr "Arrête le Défilé" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." msgstr "Le tirage de %(round)s n'a pas encore été publié." -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." msgstr "Le tirage pour la prochaine joute n'est pas encore publié." -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" msgstr "Attributions de juges" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." msgstr "Il y a actuellement moins de juges enregistrés que de salles." -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" msgstr "Attribuer les juges" -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" msgstr "Modifier les attributions de juges" -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" msgstr "Attribution de salles" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" msgstr "Repartir les salles" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" msgstr "Modifier attribution de salles" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" msgstr "Jurys préformés" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." msgstr[0] "Il y a %(npanels)s jury préformé disponible pour cette joute." msgstr[1] "Il y a %(npanels)s jurys préformés disponibles pour cette joute." -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" msgstr "Il n'y a pas de jury préformé disponible pour cette joute" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" msgstr "Modifier jurys préformés pour %(round)s" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" msgstr "Répartition des côtés" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." msgstr[0] "Un débat n'a pas ses côtés confirmés." msgstr[1] "%(ndebates)s débats n'ont pas ses côtés confirmés." -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" msgstr "Supprimer le tirage" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" msgstr "Confirmer le Tirage" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." msgstr "La préséance de classement d'équipes est vide. Cela signifie que les équipes ne sont pas classés par aucun métrique, donc tous les équipes seront dans une seule tranche avec tout le monde. Si vous n'attendiez pas à ça, créez une préséance de classement d'équipes dans la section de classement des options du tournoi, et après supprimer et refaire le tirage. Dans la plupart des tournois, la première métrique devrait être le pointage ou victoires." -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." msgstr "Les tranches sont formées en utilisant le premier métrique dans la préséance de classement d'équipe, ce qui est actuellement %(metric)s, et non le pointage d'équipe, ce qui est plus usuelle. Si ce n'est pas désiré, vous pouvezmodifier la préséance de classement d'équipe dans la page de configuration des préséances." -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." msgstr "Le type de tirage pour cette joute est manuelle, donc Tabbycat a créé un tirage vide. Dirigez-vous vers Modifier Côtés/Appariements pour le remplir." -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." msgstr "L'étendue des notes d'évaluation des juges est 0, donc les scores d'évaluation seront ignorés lors de la repartition. Vous pouvez modifier l'étendue des évaluations de juge dans la page de configuration des évaluations." -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." msgstr "Tabbycat désigne les côtés dans les joutes éliminatoires aléatoirement. Cependant, parce que plusieurs tournois les désignent en face du public, les côtés seront marqués comme « non-confirmés, » pour que ça n'aura pas l'air comme si les côtés ont été désignés en avance. Après avoir confirmé le tirage, vous aurez besoin de confirmer les côtés dans la page « Modifier Côtés/Appariements », même si vous acceptez l'attribution aléatoire de Tabbycat." -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " msgstr "Les cellules soulignés concerne des changements dans l'équilibre des positions comme ceci :
    • Les cellules rouges indiquent que l'équipe ne pouvait pas être désigné une position qui maintient l'équilibre.
    • Les cellules jaunes indiquent que l'équipe était déséquilibré et qui a maintenant la meilleur position possible dans le tirage, mais qui reste en déséquilibre.
    • Les cellules vertes indiquent que le déséquilibre antérieur de l'équipe est résolu avec ce tirage.
    " -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." msgstr "Un tirage pour %(round)s n'a pas encore été généré. Pour en générer, allez à la section des disponibilités." -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." msgstr "Il semble que les côtés ne sont pas confirmés pour quelques débats dans cette joute. Ce rapport de l'équilibre des positions est généré avec les « côtés non-confirmés » dans la base de données. Comme conséquence, il se peut qu'il ne fasse pas tant de sens. C'est mieux de confirmer les côtés dans tous les débats avant de regarder ce rapport." -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." -msgstr "Votre fonction de coût de position actuelle est %(cost_func)s, à la puissance %(exponent)s. Lisez d'avantage sur comment les fonctions de coût de position fonctionnent dans la documentation." +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgstr "Votre fonction de coût de position actuelle est %(cost_func)s, à la puissance %(exponent)s. Lisez d'avantage sur comment les fonctions de coût de position fonctionnent dans notre documentation." -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." msgstr "Les rapports sur l'équilibre des positions ne se produisent pas pour les tours éliminatoires." -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." msgstr "Les rapports sur l'équilibre des positions ne sont disponible que pour les tournois de parlementaire britannique." -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." msgstr "Un rapport sur l'équilibre des positions ne se produit pas pour le premier tour d'un tournoi." -#: draw/views.py:68 draw/views.py:483 +#: draw/views.py msgid "No debates in this round" msgstr "Aucun débat dans cette joute" -#: draw/views.py:76 +#: draw/views.py #, python-format msgid "Draw for %(round)s" msgstr "Tirage de %(round)s" -#: draw/views.py:78 +#: draw/views.py msgid "Draws for Current Rounds" msgstr "Tirages pour Joutes Actuelles" -#: draw/views.py:82 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" msgstr "les débats commencent à %(time)s (%(time_zone)s)" -#: draw/views.py:86 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" msgstr "heures de début dans le fuseau horaire : %(time_zone)s" -#: draw/views.py:124 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" msgstr[0] "débat commence à %(time)s" msgstr[1] "débats commencent à %(time)s" -#: draw/views.py:171 +#: draw/views.py msgid "The draw for this round hasn't been released." msgstr "Le tirage pour cette joute n'a pas été publié." -#: draw/views.py:224 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" msgstr "Tous les débats pour toutes les joutes de %(tournament)s" -#: draw/views.py:382 +#: draw/views.py msgid "Adjudicator Assignments" msgstr "Repartitions de Juge" -#: draw/views.py:404 +#: draw/views.py msgid "Position" msgstr "Position" -#: draw/views.py:424 +#: draw/views.py msgid "Team Pairings" msgstr "Appariements d'équipe" -#: draw/views.py:447 +#: draw/views.py msgid "No Draw" msgstr "Aucun tirage" -#: draw/views.py:449 +#: draw/views.py msgid "Draft Draw" msgstr "Tirage brouillon" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:541 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" msgstr "%(side)s: Rang de qualification" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:546 +#: draw/views.py msgid "BR" msgstr "RQ" -#: draw/views.py:571 +#: draw/views.py msgid "Draw with Details" msgstr "Tirage avec Détails" -#: draw/views.py:579 +#: draw/views.py msgid "Position Balance Report" msgstr "Rapport sur l'équilibre des positions" -#: draw/views.py:590 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" msgstr "Entropie de Rényi de l'ordre %(order)s" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:593 +#: draw/views.py msgid " (i.e., Shannon entropy)" msgstr " (i.e., Entropie de Shannon)" -#: draw/views.py:623 +#: draw/views.py msgid "Teams with position imbalances" msgstr "Équipes avec déséquilibre de position" -#: draw/views.py:624 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" msgstr "Aucun équipe avec un déséquilibre de position ! Youpi !" -#: draw/views.py:627 +#: draw/views.py msgid "Annotated draw" msgstr "Tirage Annoté" -#: draw/views.py:658 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" msgstr "Ne pouvait pas créer un tirage pour %(round)s, il y avait déjà un tirage !" -#: draw/views.py:666 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " msgstr "

    Le tirage ne pouvait pas être créé pour la raison suivante : %(message)s

    \n" "

    Veuillez réparer ce problème avant de tenter de créer le tirage.

    " -#: draw/views.py:674 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " msgstr "

    Le tirage ne pouvait pas être créé à cause de cette erreur :%(message)s

    \n" "

    Si le problème persiste et vous ne savez pas le résoudre, contactez les développeurs.

    " -#: draw/views.py:683 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " msgstr "

    Le classement d'équipe ne pouvait pas être généré parce que l'erreur suivante s'est produite : %(message)s

    \n" "

    Parce que la génération de tirage utilise le classement d'équipe actuel, ceci empêche le tirage d'être généré.

    " -#: draw/views.py:699 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "Les salles n'ont pas été automatiquement attribués car il y a des juges avec des contraintes de salle. Vous devriez allouer les salles après d'avoir assigné les juges." -#: draw/views.py:726 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "Supprimé le tirage. Vous pouvez maintenant le récréer comme normal." -#: draw/views.py:746 +#: draw/views.py msgid "Released the draw." msgstr "Publié le tirage." -#: draw/views.py:761 +#: draw/views.py msgid "Unreleased the draw." msgstr "Retiré le tirage." -#: draw/views.py:774 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." msgstr "Désolé, « %(input)s » n'est pas un temps valide. Il doit être en format 24-heure avec deux points, pour exemple : « 13:57 »." -#: draw/views.py:793 +#: draw/views.py msgid "Side Pre-Allocations" msgstr "Pré-Répartition des côtés aux équipes" -#: draw/views.py:826 +#: draw/views.py msgid "Edit Matchups" msgstr "Modifier Appariements" diff --git a/tabbycat/importer/locale/fr/LC_MESSAGES/django.po b/tabbycat/importer/locale/fr/LC_MESSAGES/django.po index c172f6b3e35..c7eb1677441 100644 --- a/tabbycat/importer/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 05:45\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 03:05\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -17,416 +17,405 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" msgstr "ligne %(lineno)d: %(message)s" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" msgstr "Cette ligne (pour %(institution)s) n’a pas eu un code" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" msgstr "Cette ligne (pour %(institution)s) a eu trop de colonnes" -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." msgstr "Il n’y avait pas d’institutions à importer." -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "Désolé, vous ne pouvez qu'importer %(max_allowed)d institution au maximum à la fois (vous en avez mis %(given)d.) Essayez de diviser l'importation en plus petits." msgstr[1] "Désolé, vous ne pouvez qu'importer %(max_allowed)d institutions au maximum à la fois (vous en avez mis %(given)d.) Essayez de diviser l'importation en plus petits." -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." msgstr "Il n’y avait pas de salles à importer." -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "Désolé, vous ne pouvez qu'importer %(max_allowed)d salle au maximum à la fois (vous en avez mis %(given)d.) Essayez de diviser l'importation en plus petits." msgstr[1] "Désolé, vous ne pouvez qu'importer %(max_allowed)d salles au maximum à la fois (vous en avez mis %(given)d.) Essayez de diviser l'importation en plus petits." -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" msgstr "Noms des orateurs" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" msgstr "Adresses courriel des orateurs" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" msgstr "Optionnel, utile à inclure pour la distribution d'URL privées, placez-les dans le même ordre que les noms des orateurs" -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" msgstr "Nom (sans nom d'institution)" -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" msgstr "Préfixer le nom de l'équipe avec le nom de l'institution ?" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" msgstr "Ne pas inclure le nom de l'institution (cochez la case « Préfixer le nom de l'équipe avec le nom de l'institution ? » au lieu)" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" msgstr "(Non applicable aux équipes non-affiliées)" -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" msgstr "Nom de l’un orateur par ligne" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" msgstr "Peuvent être séparées avec de nouvelles lignes, tabulations, ou virgules" -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "Orateur %d" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" msgstr "orateur%d@example.edu" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." msgstr "Il faut au moins un orateur." -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." msgstr "%(email)s n'est pas une adresse courriel valide." -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." msgstr "Il y a plus d'adresses courriel que d'orateurs." -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." msgstr "Chaque équipe d'un tournoi de la même institution doivent avoir un nom different. Veuillez corriger les données en double." -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" msgstr "Évaluation" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." msgstr "La valeur doit être entre %(min)d et %(max)d." -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" msgstr "Non affilié (aucune institution)" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "%(name)s (%(code)s)" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "Désolé, vous ne pouvez qu'importer %(max_allowed)d équipe au maximum à la fois (vous en avez mis %(given)d.) Essayez de diviser l'importation en plus petits." msgstr[1] "Désolé, vous ne pouvez qu'importer %(max_allowed)d équipes au maximum à la fois (vous en avez mis %(given)d.) Essayez de diviser l'importation en plus petits." -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "Désolé, vous ne pouvez qu'importer %(max_allowed)d juge au maximum à la fois (vous en avez mis %(given)d.) Essayez de diviser l'importation en plus petits." msgstr[1] "Désolé, vous ne pouvez qu'importer %(max_allowed)d juges au maximum à la fois (vous en avez mis %(given)d.) Essayez de diviser l'importation en plus petits." -#: importer/forms.py:396 +#: importer/forms.py msgid "XML" msgstr "" -#: importer/forms.py:397 +#: importer/forms.py msgid "The Debate XML archive to parse" msgstr "L'archive XML à analyser" -#: importer/templates/archive_export_index.html:4 -#: importer/templates/archive_export_index.html:5 +#: importer/templates/archive_export_index.html msgid "Export Tournament Archive" msgstr "Exporter archive du tournoi" -#: importer/templates/archive_export_index.html:9 +#: importer/templates/archive_export_index.html msgid "Tournaments can be exported in an XML format for use outside Tabbycat." msgstr "Les tournois peuvent être exportés dans un format XML pour utilisation hors de Tabbycat." -#: importer/templates/archive_export_index.html:17 +#: importer/templates/archive_export_index.html msgid "Export all data" msgstr "Exporter toutes les données" -#: importer/templates/archive_importer.html:6 -#: importer/templates/archive_importer.html:18 +#: importer/templates/archive_importer.html msgctxt "page title" msgid "Import Tournament Archive" msgstr "Importer archive du tournoi" -#: importer/templates/archive_importer.html:19 +#: importer/templates/archive_importer.html msgid "This form will create a tournament with the data provided as a Debate XML format." msgstr "Ce formulaire créera un tournoi avec les données fournis dans l'XML du tournoi." -#: importer/templates/archive_importer.html:24 +#: importer/templates/archive_importer.html msgid "Import" msgstr "Importer" -#: importer/templates/archive_importer.html:25 +#: importer/templates/archive_importer.html msgid "Go back to the site home page" msgstr "Retour à la page d’accueil" -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html msgctxt "page title" msgid "Add Adjudicators" msgstr "Addition de juges" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" msgstr "(Étape %(step)s de %(count)s)" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" msgstr "Étape précédente" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." msgstr "Par la configuration du tournoi, la note d'un juge doit être entre %(min)s et %(max)s. Fournissant des adresses courriel est facultatif mais peut être utile pour utiliser des URLs privées pour les feuilles ou évaluations." -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" msgstr "Juges de %(institution)s" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" msgstr "Juges non affiliés" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" msgstr "Enregistrer tous les juges" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." msgstr "Vous devez ajouter des institutions avant d’ajouter des juges." -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." msgstr "Spécifiez le nombre de nouveaux juges à ajouter par institution. Dans l’étape suivante, vous pouvez spécifier leurs noms et leurs évaluations." -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" msgstr "Vous pouvez ajouter jusqu'à 198 juges à la fois. Si vous en avez plus, divisez-les en morceaux. (N'en importez pas plus que 198 à la fois ; le système va planter et vous perdriez les données.)" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" msgstr "Prochaine étape" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" msgstr "Importateur simple" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." msgstr "Il y a plusieurs manières d’importer des données dans Tabbycat. Lequel est le meilleur dépend de la taille de votre tournoi et votre formation technique. Cet importateur simple est le plus facile à utiliser et marche bien pour les tournois petits et pour les tournois de taille moyenne." -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" msgstr "Ajouter institutions" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" msgstr "Ajouter équipes" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" msgstr "Ajouter juges" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" msgstr "Ajouter Salles" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" msgstr "Ajouter/Modifier catégories de salle" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" msgstr "Ajouter/Modifier contraintes de salle" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" msgstr "Ajouter/Modifier conflits juge-équipe" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" msgstr "Ajouter/Modifier Conflits Juge-Juge" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" msgstr "Ajouter/Modifier Conflits Juge-Institution" -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" msgstr "Ajouter/Modifier Conflits Équipe-Institution" -#: importer/templates/simple_import_index.html:66 +#: importer/templates/simple_import_index.html msgid "Add/Edit Break Categories" msgstr "Ajouter/Modifier catégories de qualification" -#: importer/templates/simple_import_index.html:70 +#: importer/templates/simple_import_index.html msgid "Add/Edit Speaker Categories" msgstr "Ajouter/Modifier catégories d'orateur" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" msgstr "Addition d'institutions" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" msgstr "Enregistrer toutes les Institutions" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" msgstr "Des problèmes en lien avec les données sur ce formulaire sont apparus :" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" msgstr "Étape suivante" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" msgstr "Addition d'équipes" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" msgstr "Équipes de %(institution)s" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" msgstr "Équipes non affiliées" -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" msgstr "Enregistrer toutes les équipes" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." msgstr "Vous devez ajouter des institutions avant d'ajouter des équipes." -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." msgstr "Spécifiez le nombre de nouvelles équipes à ajouter par institution. Dans l’étape suivante, vous pouvez spécifier leurs noms et les noms des orateurs." -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" msgstr "Vous pouvez ajouter jusqu'à 141 équipes à la fois. Si vous en avez plus, divisez-les en morceaux. (N'en importez pas plus que 141 à la fois ; le système va planter et vous perdriez les données.)" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" msgstr "Ajouter Salles" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." msgstr "Les priorités indiquent l'ordre de préférence pour utiliser la salle. Les nombres plus grands indiquent une plus haute priorité. Si vous avez plus de salles que de débats, les salles avec les priorités les plus bas ne seront pas utilisées." -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" msgstr "Enregistrer toutes les Salles" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" msgstr "Collez une liste de salles avec une salle par ligne, suivant le formatnom,priorité. Par exemple :" -#: importer/views.py:108 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." msgstr[0] "Ajouté %(count)d institution." msgstr[1] "Ajouté %(count)d institutions." -#: importer/views.py:129 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." msgstr[0] "Ajouté %(count)d salle." msgstr[1] "Ajouté %(count)d salles." -#: importer/views.py:188 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." msgstr[0] "Ajouté %(count)d équipe." msgstr[1] "Ajouté %(count)d équipes." -#: importer/views.py:209 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "Juge %(number)d" -#: importer/views.py:214 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." msgstr[0] "Ajouté %(count)d juge." msgstr[1] "Ajouté %(count)d juges." -#: importer/views.py:230 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " msgstr "

    Il y avait un ou plusieurs erreurs en créant le tournoi démo. Avant d'y re-essayer, veuillez supprimer le tournoi démo qui existe et les institutions dans la base de données.

    Information technique : Les fautes sont 

    " -#: importer/views.py:238 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." msgstr "Créé nouveau tournoi démo. Vous pouvez le configurer ci-dessous." -#: importer/views.py:256 +#: importer/views.py msgid "Tournament archive has been imported." msgstr "L'archive du tournoi est importé." diff --git a/tabbycat/locale/fr/LC_MESSAGES/django.po b/tabbycat/locale/fr/LC_MESSAGES/django.po index e61656a5a6b..d54dde8bbb0 100644 --- a/tabbycat/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2022-08-08 18:05\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 03:05\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -17,940 +17,940 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" msgstr "Interface de programmation" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:105 +#: checkins/admin.py +msgid "Type" +msgstr "Type" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "Heure d’arrivée" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" msgstr "Enregistrements" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" msgstr "L'identifiant d'enregistrement envoyé n'existe pas" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" msgstr "Enregistrements" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" msgstr "Aucun identifiant d'enregistrement n'existe pour les codes-barres envoyés" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." msgstr "Le code-barres doit contenir exactement six chiffres." -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" msgstr "code-barres" -#: checkins/models.py:37 +#: checkins/models.py msgid "" msgstr "" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "%(classname)s %(barcode)s" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" msgstr "personne" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" msgstr "identifiant de personne" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" msgstr "identifiants de personnes" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "débat" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" msgstr "identifiant de débat" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" msgstr "identifiants de débats" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" msgstr "identifiant de salle" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" msgstr "identifiants de salle" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" msgstr "identifiant" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" msgstr "heure d’arrivée" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "tournoi" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" msgstr "événement d'arrivée" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" msgstr "événements d'arrivée" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" msgstr "Avec identifiants" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" msgstr "Afficher en code-barres" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" msgstr "Générer les identifiants manquants" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" msgstr "Générer tous les identifiants" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." msgstr "Il n’y a aucun identifiant disponible à afficher. Un administrateur va devoir les générer." -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." msgstr "Chacun des codes-barres suivants est un image qui peut être téléchargé individuellement. Si vous voulez les télécharger tous à la fois, essayez un extension de navigateur, tel celui ci (pour Chrome). Pour les télécharger en liste vous pouvez aller à la section d’enregistrement du zone de modifications de la base de données et les copier-coller dans la table." -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "Vous pouvez utiliser Ctrl-P pour imprimer ou sauvegarder les codes-barres en PDF. Assurez-vous d’avoir réglé la bonne orientation de page, avoir désactivé les en-têtes et les pieds de page et d’avoir activé les graphiques d’arrière-plan. Meilleurs résultats avec Chrome." -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." msgstr "Pour numériser un identifiant, saisissez le nombre ci-contre (il s’enregistrera automatiquement). Vous pouvez aussi utiliser un lecteur de code-barres (équivalent à un clavier) ou un appareil photo (webcam ou portable) avec le bouton ci-contre." -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" msgstr "Pas enregistré (code-barres %(barcode)s)" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" msgstr "Pas enregistré ; aucun code-barres" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" msgstr "enregistré à %(time)s" -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." msgstr "%(speaker)s s'est enregistré à %(time)s." -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." msgstr "%(speaker)s est manquant(e)." -#: checkins/views.py:30 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" msgstr "Numériser les identifiants" -#: checkins/views.py:63 +#: checkins/views.py msgid "People's Check-In Statuses" msgstr "Statuts d’enregistrement des personnes" -#: checkins/views.py:120 +#: checkins/views.py msgid "Rooms' Check-In Statuses" msgstr "Statuts d’enregistrement des salles" -#: checkins/views.py:169 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" msgstr "Créer les identifiants" -#: checkins/views.py:176 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" msgstr "Orateurs" -#: checkins/views.py:181 templates/nav/public_nav.html:145 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "Juges" -#: checkins/views.py:186 +#: checkins/views.py msgid "Rooms" msgstr "Salles" -#: checkins/views.py:227 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" msgstr "Identifiants générés฀pour %s" -#: checkins/views.py:234 +#: checkins/views.py msgid "Identifiers" msgstr "Identifiants" -#: checkins/views.py:272 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." msgstr "N’a pas pu vous enregistrer parce que vous n’avez pas d’identifiant — le rapporteur pourrait devoir vous en créer." -#: checkins/views.py:280 +#: checkins/views.py msgid "You have revoked your check-in." msgstr "Vous vous êtes dé-enregistré." -#: checkins/views.py:282 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." msgstr "Oups ! Vous étiez déjà désinscrit." -#: checkins/views.py:286 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." msgstr "Oups ! Vous étiez déjà enregistré." -#: checkins/views.py:293 +#: checkins/views.py msgid "You are now checked in." msgstr "Vous êtes désormais enregistré." -#: settings/core.py:67 +#: settings/core.py msgid "Arabic" msgstr "arabe" -#: settings/core.py:68 +#: settings/core.py msgid "Bengali" msgstr "bengali" -#: settings/core.py:69 +#: settings/core.py msgid "English" msgstr "anglais" -#: settings/core.py:70 +#: settings/core.py msgid "Spanish" msgstr "espagnol" -#: settings/core.py:71 +#: settings/core.py msgid "French" msgstr "français" -#: settings/core.py:72 +#: settings/core.py msgid "Indonesian" msgstr "Indonésien" -#: settings/core.py:73 +#: settings/core.py msgid "Japanese" msgstr "japonais" -#: settings/core.py:74 +#: settings/core.py msgid "Malay" msgstr "malay" -#: settings/core.py:75 +#: settings/core.py msgid "Portuguese" msgstr "portugais" -#: settings/core.py:76 +#: settings/core.py msgid "Russian" msgstr "russe" -#: settings/core.py:77 +#: settings/core.py msgid "Simplified Chinese" msgstr "chinois simplifié" -#: settings/core.py:78 +#: settings/core.py msgid "Translation" msgstr "Traduction" -#: templates/admin/delete_protected_message.html:4 +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." msgstr "Vous devez d’abord supprimer les objets ci-dessus." -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." msgstr "Cette style de carte d'information annonce de l'information critique. Lien." -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." msgstr "Cette style de carte d'information annonce de l'information générale." -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" msgstr "Titre de forme" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" msgstr "Sous-titre titre" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" msgstr "Connexion" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" msgstr "J'ai oublié mon mot de passe" -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "Tabbycat" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "Le site pour %(tournament)s fonctionne sur Tabbycat, un système de jumelage libre pour une variété de formats de débat parlementaire" -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "Ce site fonctionne sur Tabbycat, un système de jumelage libre pour une variété de formats de débat parlementaire" -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." msgstr "Oups ! Il y a une erreur dans un ou plusieurs champs." -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" msgstr "Enregistrer et en ajouter davantage" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" msgstr "Accès refusé (403)" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." msgstr "Cette page n'est pas activée pour les assistants de ce tournoi. Retourner à la page d'accueil pour les assistants." -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgstr[0] "Vous utilisez actuellement %(nrows)s rangée dans votre base de données. Si vous n’avez pas encore mis à niveau votre compte Heroku à un tier payant, le nombre de rangées est limité à 10 000 rangées. Comme vous approchez cette limite, vous ne devriez pas créer de nouveaux tournois sur ce site et jusqu’à temps que vous avez mis à niveau votre base de données à un tier payant." msgstr[1] "Vous utilisez actuellement %(nrows)s rangées dans votre base de données. Si vous n’avez pas encore mis à niveau votre compte Heroku à un tier payant, le nombre de rangées est limité à 10 000 rangées. Comme vous approchez cette limite, vous ne devriez pas créer de nouveaux tournois sur ce site et jusqu’à temps que vous avez mis à niveau votre base de données à un tier payant." -#: templates/errors/legacy_sendgrid_warning.html:11 +#: templates/errors/legacy_sendgrid_warning.html msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." msgstr "Il semble que vous utilisez les vieux variables d'environnement d'Heroku, SENDGRID_USERNAME et SENDGRID_PASSWORD. Ceux-ci sont désormais désuets (depuis la version 2.6) et cesseront de fonctionner dans une version future de Tabbycat. Veuillez changer vos variables d'environnement afin d'utiliser SENDGRID_API_KEY. Pour plus d'information, lisez notre documentation au sujet." -#: templates/errors/public_403.html:14 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." msgstr "Oups ! Cette page n'est pas activée pour ce tournoi. Retourner à la page d'accueil du tournoi." -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." msgstr "Oups ! Cette page n'est pas activée pour ce tournoi. Retourner à la page d'accueil." -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "%(tournament)s fonctionne sur Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "Ce site fonctionne sur Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." msgstr "Tabbycat est un projet libre, développé par des bénévoles. Vous pouvez l'utiliser gratuitement pour jumeler les tournois non lucratif et pas pour des levés de fonds." -#: templates/footer.html:24 +#: templates/footer.html #, python-format msgid "For a tournament of this size, we suggest a donation of $%(amount)s." msgstr "Pour un tournoi de cette taille, nous suggérons un don de %(amount)s$." -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." msgstr "En savoir plus à propos des donations." -#: templates/footer.html:31 +#: templates/footer.html msgid "Donations to Tabbycat from individuals or organisations are much appreciated." msgstr "Les dons à Tabbycat de personnes ou d'organisations sont très appréciés." -#: templates/footer.html:39 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" msgstr "Chronométrez-vous encore avec l'application chronomètre ?" -#: templates/footer.html:41 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." msgstr "Utiliser un application conçu pour le débat rend parler et juger plus facile ! Découvrez Timekept (iPhone/iPad) ou Debatekeeper (Android)." -#: templates/footer.html:50 +#: templates/footer.html msgid "Our Organisation" msgstr "Notre organisation" -#: templates/footer.html:52 -msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." -msgstr "Tabbycat est soutenu par l'Association de débat Tabbycat, un organisme à but non-lucratif pour la technologie de débat libre." +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +msgstr "Tabbycat est soutenu par l'Association de débat Tabbycat, un organisme à but non-lucratif pour la technologie de débat libre." -#: templates/footer.html:65 +#: templates/footer.html msgid "Language" msgstr "Langue" -#: templates/footer.html:72 +#: templates/footer.html msgid "GitHub" msgstr "GitHub" -#: templates/footer.html:78 +#: templates/footer.html msgid "Documentation" msgstr "Documentation" -#: templates/footer.html:84 +#: templates/footer.html msgid "Support" msgstr "Aide" -#: templates/footer.html:90 +#: templates/footer.html msgid "Facebook" msgstr "Facebook" -#: templates/footer.html:96 +#: templates/footer.html msgid "Set Up A Copy" msgstr "Installer une copie" -#: templates/footer.html:110 +#: templates/footer.html msgid "Change Language" msgstr "Changer la langue" -#: templates/footer.html:127 +#: templates/footer.html msgid "Use this language" msgstr "Utiliser cette langue" -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" msgstr "Logo de Tabbycat" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" msgstr "Accueil du site" -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" msgstr "Créer un nouveau tournoi" -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" msgstr "Modification de la base de données" -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" msgstr "Zone administrative" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" msgstr "Zone d'assistants" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" msgstr "Zone publique" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" msgstr "Vue d’ensemble" -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" msgstr "Configuration" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" msgstr "Paramètres" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" msgstr "Importer des données" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:175 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" msgstr "Participants" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" msgstr "URLs privées" -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" msgstr "Courriels" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" msgstr "Jurys préformés" -#: templates/nav/admin_nav.html:97 +#: templates/nav/admin_nav.html msgid "Export XML" msgstr "Exporter XML" -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:160 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" msgstr "Côtés" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" msgstr "Statuts des Personnes" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" msgstr "Statuts des Salles" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" msgstr "Évaluations" -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" msgstr "Récents" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" msgstr "Important" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" msgstr "Commentaires" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" msgstr "Trouver par source" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" msgstr "Trouver par cible" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" msgstr "Non soumis" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" msgstr "Saisir des Évaluations" -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" msgstr "Mise à jour par lots" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:165 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" msgstr "Classement" -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" msgstr "Toutes les équipes" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "Équipes" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" msgstr "Équipes %(category)s" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" msgstr "Tous les orateurs" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" msgstr "Orateurs %(category)s" -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" msgstr "Répliques" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:155 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "Motions" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:170 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" msgstr "Diversité" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" msgstr "Qualifications" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" msgstr "Juges" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" msgstr "Modifier les catégories" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" msgstr "Modifier Éligibilité" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" msgstr "Déconnexion" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" msgstr "Saisie des résultats" -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:211 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" msgstr "Saisie d'une évaluation" -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" msgstr "Liste de participants" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:180 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" msgstr "Institutions" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" msgstr "Noms de code" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" msgstr "Voir les identifiants" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "Statuts des Salles" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" msgstr "Affichage et imprimerie du tirage" -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" msgstr "Tab des équipes" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" msgstr "Tab des orateurs" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" msgstr "Tab des discours de réponse" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" msgstr "Tab des juges" -#: templates/nav/public_nav.html:53 templates/nav/public_nav.html:62 +#: templates/nav/public_nav.html msgid "Motions Tab" msgstr "Tab des motions" -#: templates/nav/public_nav.html:56 +#: templates/nav/public_nav.html msgid "By round" msgstr "Par joute" -#: templates/nav/public_nav.html:57 +#: templates/nav/public_nav.html msgid "Globally" msgstr "Globalement" -#: templates/nav/public_nav.html:72 +#: templates/nav/public_nav.html msgid "Draws" msgstr "Tirages" -#: templates/nav/public_nav.html:83 +#: templates/nav/public_nav.html msgid "No Draws Available" msgstr "Aucun tirage disponible" -#: templates/nav/public_nav.html:91 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" msgstr "Tirage de %(round)s" -#: templates/nav/public_nav.html:95 +#: templates/nav/public_nav.html msgid "Current Draws" msgstr "Tirages actuelles" -#: templates/nav/public_nav.html:115 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" msgstr "Résultats" -#: templates/nav/public_nav.html:133 +#: templates/nav/public_nav.html msgid "Break" msgstr "Qualification" -#: templates/nav/public_nav.html:185 +#: templates/nav/public_nav.html msgid "Feedback Progress" msgstr "Progrès des Évaluations" -#: templates/nav/public_nav.html:191 templates/nav/public_nav.html:197 +#: templates/nav/public_nav.html msgid "Enter Ballot" msgstr "Saisie d'une feuille" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" msgstr "Disponibilité" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" msgstr "Tirage" -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" msgstr "Affichage" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" msgstr "Zone administrative de %(tournament)s" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" msgstr "Zone pour les assistants de %(tournament)s" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" msgstr "Zone publique de %(tournament)s" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" msgstr "Connexion" -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" msgstr "Au revoir" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" msgstr "Vous avez été déconnecté. Se connecter à nouveau ?" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" msgstr "Connexion" -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" msgstr "Connexion à Tabbycat" -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." msgstr "Votre nom d'utilisateur et votre mot de passe n'ont pas correspondu." -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." msgstr "Votre compte ne vous permet pas d'accéder cette page. Pour continuer, veuillez vous connecter." -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." msgstr "Veuillez vous connecter afin de voir ce page." -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" msgstr "Mot de passe modifié avec succès" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." msgstr "Votre mot de passe a bien été modifié." -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" msgstr "Aller sur la page d’accueil" -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:27 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" msgstr "Modification du mot de passe" -#: templates/registration/password_change_form.html:16 +#: templates/registration/password_change_form.html #, python-format msgid "API Token: %(api_token)s" msgstr "Jeton IPA : %(api_token)s" -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgid "The API token will allow you to authorize external applications to access the site as staff." msgstr "Le jeton d'IPA vous permet d'autoriser des applications externes à accéder le site comme administrateur." -#: templates/registration/password_change_form.html:28 +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." msgstr "Veuillez saisir votre ancien mot de passe, puis saisissez un nouveau." -#: templates/registration/password_change_form.html:33 -#: templates/registration/password_reset_confirm.html:25 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" msgstr "Modifier mon mot de passe" -#: templates/registration/password_change_form.html:34 -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" msgstr "Annuler et revenir à la page d’accueil du site" -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "Réinitialisation du mot de passe effectuée" -#: templates/registration/password_reset_complete.html:11 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." msgstr "Votre mot de passe a été réinitialisé." -#: templates/registration/password_reset_complete.html:14 -#: templates/registration/password_reset_done.html:15 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" msgstr "Aller à la page de connexion" -#: templates/registration/password_reset_confirm.html:4 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" msgstr "Confirmation de réinitialisation de mot de passe" -#: templates/registration/password_reset_confirm.html:16 -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html msgctxt "page title" msgid "Password Reset" msgstr "Réinitialisation de mot de passe" -#: templates/registration/password_reset_confirm.html:18 +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" msgstr "Veuillez saisir un nouveau mot de passe (deux fois) :" -#: templates/registration/password_reset_confirm.html:33 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." msgstr "Le lien de réinitialisation de mot de passe était invalide, peut-être parce qu'il a déjà été utilisé. Veuillez demander une nouvelle réinitialisation de mot de passe." -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" msgid "Password reset email sent" msgstr "Courriel de réinitialisation de mot de passe envoyé" -#: templates/registration/password_reset_done.html:11 +#: templates/registration/password_reset_done.html msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." msgstr "Un courriel contenant des instructions sur la manière de réinitialiser votre mot de passe a été envoyé à l'adresse électronique que vous avez fournie. Vous devriez le recevoir rapidement." -#: templates/registration/password_reset_done.html:12 +#: templates/registration/password_reset_done.html msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." msgstr "Si vous ne recevez pas de courriel, assurez-vous d'avoir saisi la même adresse avec laquelle vous vous êtes inscrit et vérifiez votre dossier de courriers indésirables / pourriel." -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" msgstr "Bonjour, %(user)s !" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "Quelqu'un a demandé une réinitialisation de mot de passe pour l'adresse courriel %(email)s sur le site Tabbycat à %(protocol)s://%(domain)s." -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" msgstr "Si c’était vous, suivez le lien ci-dessous afin de réinitialiser votre mot de passe :" -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "Si ce n’était pas vous, cela signifie probablement que quelqu'un d’autre a saisi votre adresse courriel dans le formulaire de réinitialisation de mot de passe sur le site Tabbycat à %(protocol)s://%(domain)s." -#: templates/registration/password_reset_form.html:27 +#: templates/registration/password_reset_form.html msgid "Enter your email address below, and we'll email you a password reset link." msgstr "Saisissez votre adresse courriel ci-dessous, et nous vous enverrons un lien de réinitialisation de mot de passe." -#: templates/registration/password_reset_form.html:34 +#: templates/registration/password_reset_form.html msgid "Please enter a valid email address." msgstr "Veuillez saisir une adresse courriel valide." -#: templates/registration/password_reset_form.html:39 users/forms.py:10 -#: users/forms.py:25 +#: templates/registration/password_reset_form.html users/forms.py msgid "Email address" msgstr "" -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" msgstr "Réinitialiser mon mot de passe" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" msgstr "Retour à la page de connexion" -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" msgstr "Réinitialisation de mot de passe sur le site Tabbycat à %(domain)s" -#: urls.py:102 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" msgstr "Bonjour, %(user)s , vous venez de vous connecter !" -#: urls.py:105 +#: urls.py msgid "Welcome! You just logged in!" msgstr "Bienvenue ! Vous venez de vous connecter !" -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." msgstr "Les utilisateurs ayant le status équipe peuvent voir et modifier la zone pour modifier la base de données. Ces droits sont potentiellement dangereux et devront être réservés aux rapporteurs." -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." msgstr "Les utilisateurs ayant le statut super-utilisateur ont l'accès plein à tous les zones de Tabbycat dont ils ont besoin pour diriger un tournoi. Ceux qui ne sont pas super-utilisateurs peuvent néanmoins accomplir des tâches, telles que l'ajout des résultats et des évaluations, mais ils ne peuvent pas accéder les zones confidentielles, par examples les sections de la qualification et pour voir les évaluations. Les membres de l'équipe d'adjudications reçoivent en général ce status s'ils savent ce qu'ils font." -#: users/templates/admin/auth/delete_user_warning.html:6 +#: users/templates/admin/auth/delete_user_warning.html msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." msgstr "Attention : Vous ne devriez pas supprimer des utilisateurs de la base de données après qu'ils aient fait des actions, parce que la base de données enregistre les actions des utilisateurs, donc en supprimant des utilisateurs, le journal des actions de l'utilisateur serait aussi supprimé. Pour désactiver un utilisateur, retournez à l'utilisateur sous l'onglet « Permissions » et décochez « Actif », puis sauvegarder." -#: users/templates/signup.html:4 users/templates/signup.html:5 +#: users/templates/signup.html msgid "Sign-Up" msgstr "Inscription" -#: users/templates/signup.html:16 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Administrator Account" msgstr "Créer un nouveau compte administrateur" -#: users/templates/signup.html:18 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Assistant Account" msgstr "Créer un nouveau compte assistant" -#: users/templates/signup.html:25 +#: users/templates/signup.html msgid "Create Account" msgstr "Créer compte" -#: users/views.py:54 +#: users/views.py msgid "You have successfully created a new administrator account." msgstr "Vous avez créé un nouveau compte administateur avec succès." -#: users/views.py:56 +#: users/views.py msgid "You have successfully created a new assistant account." msgstr "Vous avez créé un nouveau compte assistant avec succès." -#: users/views.py:84 +#: users/views.py msgid "Whoops! It looks like someone's already created the first user account. Please log in." msgstr "Oups ! Il semble que quelqu'un a déjà créé le premier utilisateur. Veuillez vous connecter." -#: users/views.py:92 +#: users/views.py #, python-format msgid "Welcome! You've created an account for %s." msgstr "Bienvenue ! Vous avez créé un compte pour %s." diff --git a/tabbycat/motions/locale/fr/LC_MESSAGES/django.po b/tabbycat/motions/locale/fr/LC_MESSAGES/django.po index 89c7e46c49c..3147ae339c8 100644 --- a/tabbycat/motions/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -17,372 +17,383 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "Motions" -#: motions/models.py:9 +#: motions/models.py msgid "text" msgstr "texte" -#: motions/models.py:10 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" msgstr "La motion au complet, tel « Qu’il soit résolu que cette chambre redressera tous les bananes »" -#: motions/models.py:12 +#: motions/models.py msgid "reference" msgstr "référence" -#: motions/models.py:13 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" msgstr "Forme courte de la motion, telle « Bananes »" -#: motions/models.py:15 +#: motions/models.py msgid "info slide" msgstr "diapositive d’information" -#: motions/models.py:16 +#: motions/models.py msgid "The information slide for this topic; if it has one" msgstr "La diapositive d’information pour cette motion, si elle en a" -#: motions/models.py:19 +#: motions/models.py msgid "tournament" msgstr "tournoi" -#: motions/models.py:21 +#: motions/models.py msgid "rounds" msgstr "joutes" -#: motions/models.py:24 motions/models.py:37 motions/models.py:62 +#: motions/models.py msgid "motion" msgstr "motion" -#: motions/models.py:25 +#: motions/models.py msgid "motions" msgstr "motions" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" msgstr "débat-équipe" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" msgstr "préférences" -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" msgstr "soumission de feuille" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" msgstr "préférence de motion d'un débat-équipe" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" msgstr "préférences de motion d'un débat-équipe" -#: motions/models.py:64 +#: motions/models.py msgid "round" msgstr "tour" -#: motions/models.py:67 +#: motions/models.py msgid "sequence number" msgstr "numéro de séquence" -#: motions/models.py:68 +#: motions/models.py msgid "The order in which motions are displayed" msgstr "L’ordre dans lequel les motions sont affichées" -#: motions/models.py:73 +#: motions/models.py msgid "round motion" msgstr "motion de joute" -#: motions/models.py:74 +#: motions/models.py msgid "round motions" msgstr "motions de joute" -#: motions/statistics.py:86 +#: motions/statistics.py msgid "extremely strong evidence" msgstr "évidence très forte" -#: motions/statistics.py:87 +#: motions/statistics.py msgid "strong evidence" msgstr "évidence forte" -#: motions/statistics.py:88 +#: motions/statistics.py msgid "moderate evidence" msgstr "évidence modérément forte" -#: motions/statistics.py:89 +#: motions/statistics.py msgid "weak evidence" msgstr "évidence faible" -#: motions/statistics.py:90 +#: motions/statistics.py msgid "very weak evidence" msgstr "évidence très faible" -#: motions/statistics.py:91 +#: motions/statistics.py msgid "extremely weak evidence" msgstr "évidence extrêmement faible" -#: motions/statistics.py:114 +#: motions/statistics.py msgid "balance inconclusive" msgstr "équilibre non concluant" -#: motions/statistics.py:115 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" msgstr "trop peu de débats pour obtenir une statistique significative" -#: motions/statistics.py:123 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" msgstr "Non-équilibré avec un risque de %(level)s" -#: motions/statistics.py:124 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." msgstr "La valeur de χ² est %(chisq).3f, donnant de l’%(evidence)s que cette motion n’était pas équilibré à un niveau de %(level)s de signification." -#: motions/statistics.py:129 +#: motions/statistics.py msgid "probably balanced" msgstr "probablement équilibré" -#: motions/statistics.py:130 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." msgstr "La valeur de χ² est %(chisq).3f, ne donnant pas assez d’évidence pour suggérer que cette motion n’était équilibré à n’importe niveau de signification." -#: motions/templates/motion_global_statistics.html:22 -#: motions/templates/motion_round_statistics.html:31 -#: motions/templates/public_motions.html:32 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" msgstr "Voir la diapositive d'information" -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" msgstr[0] "résultats de %(ndebates)s débat" msgstr[1] "résultats de %(ndebates)s débats" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" msgstr[0] "%(advancing)s de %(ndebates)s équipe du côté %(side)s (%(percentage)s%%) a avancé" msgstr[1] "%(advancing)s de %(ndebates)s équipes du côté %(side)s (%(percentage)s%%) ont avancé" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" msgstr[0] "%(eliminated)s de %(ndebates)s équipe du côté %(side)s (%(percentage)s%%) a été éliminé" msgstr[1] "%(eliminated)s de %(ndebates)s équipes du côté %(side)s (%(percentage)s%%) ont été éliminés" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" msgstr "avançant" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." msgstr "avan." -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" msgstr "éliminé" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." msgstr "élim." -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" msgstr "Distribution des résultats pour %(side)s" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" msgstr "Aucun résultat pour cette motion" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" msgstr "Gouvernement" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" msgstr "Opposition" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" msgstr "Pointage moyenne par banc" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" msgstr "Avant" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" msgstr "Arrière" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" msgstr "Pointage moyenne par rang" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" msgstr[0] "points en moyenne par position (%(ndebates)s débat)" msgstr[1] "pointage moyenne par position (%(ndebates)s débats)" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" msgstr[0] "%(count)s résultat pour %(side)s (%(percentage)s%%) avait %(points)s points" msgstr[1] "%(count)s résultats pour %(side)s (%(percentage)s%%) avaient %(points)s points" -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" msgstr "résultats de %(side)s" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" msgstr[0] "%(count)s victoire %(side)s" msgstr[1] "%(count)s victoires %(side)s" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" msgstr "Aucun équipe n’a débattu cette motion" -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" msgstr[0] "%(count)s véto %(side)s" msgstr[1] "%(count)s vétos %(side)s" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" msgstr "Aucun équipe n’a veto cette motion" -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" msgstr[0] "Modifier la motion" msgstr[1] "Modifier les motions" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" msgstr "Afficher le tirage" -#: motions/templates/motions_edit.html:28 +#: motions/templates/motions_edit.html msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." msgstr "Ceci remplacera toutes les motions pour cette joute. Les motions elle-mêmes seront encore dans la base de données." -#: motions/templates/motions_edit.html:30 +#: motions/templates/motions_edit.html msgid "Reuse Motions from Last Round" msgstr "Réutiliser les motions de la dernière joute" -#: motions/templates/motions_edit.html:35 +#: motions/templates/motions_edit.html msgid "Use Existing Motions" msgstr "Utiliser des motions existantes" -#: motions/templates/motions_edit.html:74 +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" msgstr[0] "Enregistrer la motion" msgstr[1] "Enregistrer les motions" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "Diapositive d'information" -#: motions/templates/public_motions.html:41 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." msgstr "Il n'y a aucune motion disponible dans cette joute." -#: motions/templates/public_motions.html:47 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." msgstr "Les motions de cette joute n'ont pas encore été publiées." -#: motions/templates/public_motions.html:52 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." msgstr "La motion de cette joute n'a pas encore été publiée." -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" msgstr[0] "Révéler la diapositive d'information de %(round)s" msgstr[1] "Révéler les diapositives d'information de %(round)s" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" msgstr[0] "Révéler la motion de %(round)s" msgstr[1] "Révéler les motions de %(round)s" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." msgstr "Aucune motion pour cette joute a été enregistrée dans Tabbycat." -#: motions/utils.py:11 +#: motions/utils.py msgid "Not all latest ballots list the same motion, so could not be merged." msgstr "" -#: motions/utils.py:29 +#: motions/utils.py msgid "Motion vetos are inconsistent, so could not be merged." msgstr "" -#: motions/views.py:91 +#: motions/views.py msgid "The motion has been saved." msgstr "La motion a été enregistrée." -#: motions/views.py:93 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." msgstr[0] "%(count)d motions a été enregistrée." msgstr[1] "%(count)d motions ont été enregistrées." -#: motions/views.py:97 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." msgstr[0] "%(count)d motions a été supprimée." msgstr[1] "%(count)d motions ont été supprimées." -#: motions/views.py:140 +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "" + +#: motions/views.py #, python-format msgid "Reused the motion from the previous round." msgid_plural "Reused the %(count)d motions from the previous round." msgstr[0] "Réutilisé la motion depuis la dernière joute." msgstr[1] "Réutilisé les %(count)d motions depuis la dernière joute." -#: motions/views.py:164 -msgid "Released the motion(s)." -msgstr "Vous avez publié la ou les motions." +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" +msgstr[1] "Vous avez publié les motions." -#: motions/views.py:171 -msgid "Unreleased the motion(s)." -msgstr "Vous avez retiré la ou les motion(s)." +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" +msgstr[1] "Vous avez retiré les motions." -#: motions/views.py:195 +#: motions/views.py msgid "Round Motions" msgstr "Motions de Joute" -#: motions/views.py:209 +#: motions/views.py msgid "Motion Statistics" msgstr "Statistiques des Motions" diff --git a/tabbycat/notifications/locale/fr/LC_MESSAGES/django.po b/tabbycat/notifications/locale/fr/LC_MESSAGES/django.po index 8d9188c2443..176bb15f67f 100644 --- a/tabbycat/notifications/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2022-08-08 18:05\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: French\n" "Language: fr_FR\n" @@ -18,401 +18,399 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" msgstr "Notifications" -#: notifications/forms.py:12 +#: notifications/forms.py msgid "Recipient email address" msgstr "Adresse courriel du destinateur" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" msgstr "Courriel test par %(host)s" -#: notifications/forms.py:17 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" msgstr "Félicitations ! Si vous lisez ce message, le système de courriel sur %(host)s fonctionne bien !" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Subject" msgstr "Objet" -#: notifications/forms.py:31 +#: notifications/forms.py msgid "Message" msgstr "Message" -#: notifications/models.py:11 notifications/models.py:26 +#: notifications/models.py msgid "email" msgstr "courriel" -#: notifications/models.py:12 +#: notifications/models.py msgid "SMS" msgstr "SMS" -#: notifications/models.py:21 +#: notifications/models.py msgid "recipient" msgstr "destinataire" -#: notifications/models.py:23 +#: notifications/models.py msgid "method" msgstr "méthode" -#: notifications/models.py:28 notifications/models.py:134 +#: notifications/models.py msgid "context" msgstr "contexte" -#: notifications/models.py:31 +#: notifications/models.py msgid "notification" msgstr "notification" -#: notifications/models.py:33 notifications/models.py:74 -#: notifications/models.py:130 +#: notifications/models.py msgid "timestamp" msgstr "horodatage" -#: notifications/models.py:36 +#: notifications/models.py msgid "sent message" msgstr "message envoyé" -#: notifications/models.py:37 +#: notifications/models.py msgid "sent messages" msgstr "messages envoyés" -#: notifications/models.py:58 +#: notifications/models.py msgid "team points" msgstr "note d’équipe" -#: notifications/models.py:59 +#: notifications/models.py msgid "ballot confirmed" msgstr "feuille confirmé" -#: notifications/models.py:60 +#: notifications/models.py msgid "feedback URL" msgstr "URL de formulaire d’évaluation" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot URL" msgstr "URL de formulaire de feuille" -#: notifications/models.py:62 +#: notifications/models.py msgid "landing page URL" msgstr "URL du page de renvoi" -#: notifications/models.py:63 +#: notifications/models.py msgid "adjudicator draw released" msgstr "attribution des juges publié" -#: notifications/models.py:64 +#: notifications/models.py msgid "team registration" msgstr "enregistrement d’équipe" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator registration" msgstr "enregistrement de juge" -#: notifications/models.py:66 +#: notifications/models.py msgid "motion(s) released" msgstr "motion(s) publiée(s)" -#: notifications/models.py:67 +#: notifications/models.py msgid "team draw released" msgstr "tirage d'équipe publié" -#: notifications/models.py:68 +#: notifications/models.py msgid "custom message" msgstr "message personnalisé" -#: notifications/models.py:72 notifications/models.py:132 +#: notifications/models.py msgid "event" msgstr "évènement" -#: notifications/models.py:77 +#: notifications/models.py msgid "tournament" msgstr "tournoi" -#: notifications/models.py:79 +#: notifications/models.py msgid "round" msgstr "tour" -#: notifications/models.py:82 +#: notifications/models.py msgid "subject template" msgstr "gabarit du sujet" -#: notifications/models.py:84 +#: notifications/models.py msgid "body template" msgstr "gabarit du corps" -#: notifications/models.py:87 +#: notifications/models.py msgid "bulk notification" msgstr "notification en masse" -#: notifications/models.py:88 +#: notifications/models.py msgid "bulk notifications" msgstr "notifications en masse" -#: notifications/models.py:114 +#: notifications/models.py msgid "Processed" msgstr "Traité" -#: notifications/models.py:115 +#: notifications/models.py msgid "Dropped" msgstr "Tombé" -#: notifications/models.py:116 +#: notifications/models.py msgid "Deferred" msgstr "Reporté" -#: notifications/models.py:117 +#: notifications/models.py msgid "Delivered" msgstr "Livré" -#: notifications/models.py:118 +#: notifications/models.py msgid "Bounced" msgstr "Non délivré" -#: notifications/models.py:119 +#: notifications/models.py msgid "Opened" msgstr "Ouvert" -#: notifications/models.py:120 +#: notifications/models.py msgid "Clicked" msgstr "Cliqué" -#: notifications/models.py:121 +#: notifications/models.py msgid "Unsubscribed" msgstr "Désabonné" -#: notifications/models.py:122 +#: notifications/models.py msgid "Marked as spam" msgstr "Signalé comme indésirable" -#: notifications/models.py:123 +#: notifications/models.py msgid "Unsubscribed from group" msgstr "Désabonné du groupe" -#: notifications/models.py:124 +#: notifications/models.py msgid "Resubscribed to group" msgstr "Réabonné au groupe" -#: notifications/models.py:128 +#: notifications/models.py msgid "email message" msgstr "message courriel" -#: notifications/models.py:137 +#: notifications/models.py msgid "email status" msgstr "état du courriel" -#: notifications/models.py:138 +#: notifications/models.py msgid "email statuses" msgstr "états des courriels" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." msgstr "Vous n’avez pas spécifié d’adresse de réplique. Cela signifie que les participants ne peuvent pas directement répondre aux messages s’ils ont des questions. Veuillez en fixer dans la section des notifications des options du tournoi." -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." msgstr "Le URL de rappel pour SendGrid est %(notifications_webhook_url)s. Veuillez pointer l'URL de POST HTTP dans SendGrid à cela." -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" msgstr "Envoyer le(s) message(s)" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." msgstr "Les courriels peuvent être envoyés par Tabbycat à divers fins. Les courriels sont envoyés quand certains préférences sont activés (tel les reçus de feuille) ou avec des actions sur des pages spécifiques (tel la page du tirage ou liste des participants). Cette page montre l'état des messages envoyés précédemment." -#: notifications/templates/notifications_nav.html:5 notifications/views.py:75 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" msgstr "États des Courriels" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:29 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" msgstr "Envoyer courriel test" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" msgstr "Envoyer courriel sur mesure" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" msgstr "Envoyer courriel test" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." msgstr "Vous pouvez utiliser cette formulaire pour envoyer un courriel d’essaie, vérifier que les réglages sont en ordre, avant d’en envoyer aux participants." -#: notifications/templates/test_email.html:20 +#: notifications/templates/test_email.html #, python-format msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." msgstr "" -#: notifications/templates/test_email.html:30 +#: notifications/templates/test_email.html msgid "Go back to the site home page" msgstr "Retour à la page d’accueil" -#: notifications/utils.py:26 +#: notifications/utils.py msgid "the chair" msgstr "le président" -#: notifications/utils.py:27 +#: notifications/utils.py msgid "the only" msgstr "le(a) seul(e)" -#: notifications/utils.py:28 +#: notifications/utils.py msgid "a panellist" msgstr "un(e) membre" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "a trainee" msgstr "un(e) stagiaire" -#: notifications/utils.py:59 +#: notifications/utils.py msgid "TBA" msgstr "ÀA" -#: notifications/utils.py:88 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "%(tournament)s %(round)s @ %(room)s" -#: notifications/utils.py:99 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" msgstr "
  • %(side)s: %(team)s (%(points)d points avec %(speaks)s points d'orateur)" -#: notifications/utils.py:102 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" msgstr "
  • %(side)s: %(team)s (%(points)s - %(speaks)s points d'orateur)" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Win" msgstr "Victoire" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Loss" msgstr "Perte" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " msgstr "
  • %(pos)s: %(speaker)s (%(score)s)
  • " -#: notifications/utils.py:183 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " msgstr "
  • %(text)s (%(ref)s)
  • " -#: notifications/utils.py:206 notifications/utils.py:207 +#: notifications/utils.py msgid ", " msgstr ", " -#: notifications/views.py:47 +#: notifications/views.py #, python-format msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" msgstr "Le serveur de courriel (SMTP) a renvoyé une erreur en envoyant le courriel test : [code SMTP %(code)d] %(error)s" -#: notifications/views.py:51 +#: notifications/views.py msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." msgstr "" -#: notifications/views.py:60 +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" msgstr "Un erreur s’est parvenu en envoyant le courriel d’essaie : %(error)s" -#: notifications/views.py:65 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." msgstr "Un courriel test a été envoyé à %(recipient)s." -#: notifications/views.py:81 +#: notifications/views.py msgid "N/A" msgstr "S/O" -#: notifications/views.py:82 +#: notifications/views.py msgid "Not known" msgstr "Inconnu" -#: notifications/views.py:87 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" msgstr "%(status)s @ %(time)s" -#: notifications/views.py:133 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "@ %s" -#: notifications/views.py:152 +#: notifications/views.py msgid "Timeline" msgstr "Ligne de temps" -#: notifications/views.py:162 notifications/views.py:260 +#: notifications/views.py msgid "Participant" msgstr "Participant" -#: notifications/views.py:163 notifications/views.py:265 +#: notifications/views.py msgid "Email address" msgstr "" -#: notifications/views.py:164 +#: notifications/views.py msgid "Status" msgstr "État" -#: notifications/views.py:165 +#: notifications/views.py msgid "Time" msgstr "Heure" -#: notifications/views.py:204 +#: notifications/views.py msgid "Email Participants" msgstr "Envoyer des courriels aux participants" -#: notifications/views.py:233 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." msgstr[0] "%(email_count)s courriel a été ajouté au fil d'attente pour l'envoi." msgstr[1] "%(email_count)s courriels ont été ajoutés au fil d'attente pour l'envoi." -#: notifications/views.py:239 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." msgstr "Aucun courriel n'a été envoyé, probablement parce qu'aucun destinateur n'a été sélectionné." -#: notifications/views.py:250 +#: notifications/views.py msgid "Send Email" msgstr "Envoyer des courriels" -#: notifications/views.py:266 +#: notifications/views.py msgid "Not Provided" msgstr "Pas fourni" -#: notifications/views.py:279 +#: notifications/views.py msgid "Role" msgstr "Rôle" -#: notifications/views.py:280 +#: notifications/views.py msgid "Adjudicator" msgstr "Juge" -#: notifications/views.py:280 +#: notifications/views.py msgid "Speaker" msgstr "Orateur" -#: notifications/views.py:288 +#: notifications/views.py msgid "Speakers" msgstr "Orateurs" -#: notifications/views.py:289 +#: notifications/views.py msgid "Adjudicators" msgstr "Juges" diff --git a/tabbycat/options/locale/fr/LC_MESSAGES/django.po b/tabbycat/options/locale/fr/LC_MESSAGES/django.po index b764d059cf8..a08f8793471 100644 --- a/tabbycat/options/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-12 15:51\n" "Last-Translator: philip_tc\n" "Language-Team: French\n" "Language: fr_FR\n" @@ -18,1589 +18,1602 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" msgstr "Options de Tournoi" -#: options/models.py:13 +#: options/models.py msgid "instance" msgstr "instance" -#: options/models.py:18 +#: options/models.py msgid "tournament preference" msgstr "réglage du tournoi" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" msgstr "réglages du tournoi" -#: options/preferences.py:19 options/templates/preferences_index.html:53 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" msgstr "Règles des scores" -#: options/preferences.py:25 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" msgstr "Score minimum admissible pour les discours substantifs" -#: options/preferences.py:28 +#: options/preferences.py msgid "Minimum speaker score" msgstr "Score minimum de discours" -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum speaker score" msgstr "Score maximum de discours" -#: options/preferences.py:35 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" msgstr "Score maximum admissible pour les discours substantifs" -#: options/preferences.py:43 +#: options/preferences.py msgid "Speaker score step" msgstr "Taille de l’incrément pour les scores d’orateur" -#: options/preferences.py:44 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" msgstr "Taille de l’incrément permise pour les discours principales, e.g. points entier (1) ou demi-points (0,5)" -#: options/preferences.py:52 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" msgstr "La plus grande différence pour laquelle une équipe peut battre une autre. (0 représente aucune limite)" -#: options/preferences.py:53 +#: options/preferences.py msgid "Maximum margin" msgstr "Marge maximum" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" msgstr "Score minimum admissible pour les discours de réplique" -#: options/preferences.py:63 +#: options/preferences.py msgid "Minimum reply score" msgstr "Score minimum de réplique" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" msgstr "Score maximum admissible pour les discours de réplique" -#: options/preferences.py:72 +#: options/preferences.py msgid "Maximum reply score" msgstr "Score maximum de réplique" -#: options/preferences.py:80 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" msgstr "Taille de l’incrément permise pour les discours de réplique, e.g. points entier (1) ou demi-points (0,5)" -#: options/preferences.py:81 +#: options/preferences.py msgid "Reply score step" msgstr "Taille de l’incrément pour les discours de réplique" -#: options/preferences.py:89 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" msgstr "Si coché, la marge de victoire des équipes incluront les juges divergentes" -#: options/preferences.py:90 +#: options/preferences.py msgid "Margin includes dissenters" msgstr "Marge inclut divergents" -#: options/preferences.py:98 +#: options/preferences.py msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" msgstr "" -#: options/preferences.py:99 +#: options/preferences.py msgid "Team score includes ghosts" msgstr "" -#: options/preferences.py:106 options/templates/preferences_index.html:58 +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" msgstr "Règles du tirage" -#: options/preferences.py:112 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" msgstr "L’allocation automatisée prendra seulement les juges à ce score (ou plus) comme membres votants" -#: options/preferences.py:113 +#: options/preferences.py msgid "Minimum adjudicator score to vote" msgstr "Score minimum de juge pour le droit de vote" -#: options/preferences.py:121 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" msgstr "Pénalité appliqué par l’allocation automatisée de juges pour les conflits" -#: options/preferences.py:122 +#: options/preferences.py msgid "Adjudicator conflict penalty" msgstr "Pénalité de conflit de juge" -#: options/preferences.py:130 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" msgstr "Pénalité appliqué par l’allocation automatisée pour les débats précédents" -#: options/preferences.py:131 +#: options/preferences.py msgid "Adjudicator history penalty" msgstr "Pénalité d’histoire de juge" -#: options/preferences.py:139 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" msgstr "Pénalité au jury préformé par la répartition automatisé pour un intrus de priorité" -#: options/preferences.py:140 +#: options/preferences.py msgid "Importance mismatch penalty" msgstr "Pénalité d’intrus d’importance" -#: options/preferences.py:148 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" msgstr "Pénalité appliqué par les méthodes pour éviter les conflits des équipes appariés à leurs institutions" -#: options/preferences.py:149 +#: options/preferences.py msgid "Team institution penalty" msgstr "Pénalité équipe-institution" -#: options/preferences.py:157 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" msgstr "Pénalité appliqué par les méthodes pour éviter les conflits entre les équipes qui se revoit" -#: options/preferences.py:158 +#: options/preferences.py msgid "Team history penalty" msgstr "Pénalité d’histoire d’équipe" -#: options/preferences.py:166 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" msgstr "Si coché, le tirage essayera d’éviter d’apparier les équipes contre leurs institutions" -#: options/preferences.py:167 +#: options/preferences.py msgid "Avoid same institution" msgstr "Éviter même institution" -#: options/preferences.py:175 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" msgstr "Si coché, le tirage essayera d’éviter d’apparier les mêmes équipes ensemble" -#: options/preferences.py:176 +#: options/preferences.py msgid "Avoid team history" msgstr "Éviter histoire d’équipe" -#: options/preferences.py:184 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "Comment les tranches impair sont résolus (voir documentation pour plus de détails)" -#: options/preferences.py:185 +#: options/preferences.py msgid "Odd bracket resolution method" msgstr "Méthode de résolution de tranche impair" -#: options/preferences.py:189 +#: options/preferences.py msgid "Pull up from top" msgstr "Promotion du haut" -#: options/preferences.py:190 +#: options/preferences.py msgid "Pull up from bottom" msgstr "Promotion du bas" -#: options/preferences.py:191 +#: options/preferences.py msgid "Pull up from middle" msgstr "Promotion du milieu" -#: options/preferences.py:192 +#: options/preferences.py msgid "Pull up at random" msgstr "Promotion aléatoire" -#: options/preferences.py:193 +#: options/preferences.py msgid "Intermediate brackets" msgstr "Tranches intermédiaires" -#: options/preferences.py:194 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" msgstr "Tranches intermédiaires avec percoler-tamiser" -#: options/preferences.py:195 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" msgstr "Intermédiaire 1 (côtés pré-répartis)" -#: options/preferences.py:196 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" msgstr "Intermédiaire 2 (côtés pré-répartis)" -#: options/preferences.py:203 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" msgstr "Comment les côtés affirmative/négative sont repartit (voir documentation pour plus de détails)" -#: options/preferences.py:204 +#: options/preferences.py msgid "Side allocations method" msgstr "Méthode de répartition des côtés" -#: options/preferences.py:208 options/preferences.py:225 +#: options/preferences.py msgid "Random" msgstr "Aléatoire" -#: options/preferences.py:209 +#: options/preferences.py msgid "Balance" msgstr "Équilibré" -#: options/preferences.py:210 +#: options/preferences.py msgid "Pre-allocated" msgstr "Pré-attribué" -#: options/preferences.py:211 +#: options/preferences.py msgid "Manually enter from ballot" msgstr "Saisir manuellement de la feuille" -#: options/preferences.py:218 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." msgstr "Glisser : 1 vs 6, 2 vs 7, …. Plier : 1 vs 10, 2 vs 9, …. Adjacent : 1 vs 2, 3 vs 4, …." -#: options/preferences.py:219 +#: options/preferences.py msgid "Pairing method" msgstr "Méthode d’appariement" -#: options/preferences.py:223 +#: options/preferences.py msgid "Slide" msgstr "Glisser" -#: options/preferences.py:224 +#: options/preferences.py msgid "Fold" msgstr "Plier" -#: options/preferences.py:226 +#: options/preferences.py msgid "Adjacent" msgstr "Adjacent" -#: options/preferences.py:227 +#: options/preferences.py msgid "Fold top, adjacent rest" msgstr "Glisser haut, adjacent reste" -#: options/preferences.py:234 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" msgstr "Méthode utilisé pour essayer d’éviter les équipes d’être appariées contre des équipes qu’elles ont déjà débattu ou de la même institution (voir documentation pour plus de détails)" -#: options/preferences.py:236 +#: options/preferences.py msgid "Conflict avoidance method" msgstr "Méthode d’éviter les conflits" -#: options/preferences.py:240 +#: options/preferences.py msgid "Off" msgstr "Désactivé" -#: options/preferences.py:241 +#: options/preferences.py msgid "One-up-one-down" msgstr "Un-promu-un-dégradé" -#: options/preferences.py:248 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "Si utilisant les promotions, restreindre quelles équipes peuvent être promu. Formats à deux équipes seulement. Aucun effet sur PB ou les tranches intermédiaires." -#: options/preferences.py:250 +#: options/preferences.py msgid "Pullup restriction" msgstr "Restriction de promotion" -#: options/preferences.py:254 +#: options/preferences.py msgid "No restriction" msgstr "Aucune restriction" -#: options/preferences.py:255 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" msgstr "Choisir parmi les équipes qui se sont fait le moins promu à présent" -#: options/preferences.py:256 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" msgstr "Choisir entre équipes avec la puissance des paires par victoires le plus bas jusqu'à présent" -#: options/preferences.py:257 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" msgstr "Choisir entre équipes avec la puissance des paires par scores d'orateur le plus bas jusqu'à présent" -#: options/preferences.py:264 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." msgstr "En PB, comment les promotions sont distribués. Seulement « Partout » est conforme à WUDC." -#: options/preferences.py:265 +#: options/preferences.py msgid "BP pullup distribution" msgstr "Distribution de promotion en PB" -#: options/preferences.py:269 +#: options/preferences.py msgid "Anywhere in bracket" msgstr "N’importe où dans la tranche" -#: options/preferences.py:270 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" msgstr "Tout dans la même salle (non-conforme au WUDC)" -#: options/preferences.py:277 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" msgstr "En PB, quelle fonction de coût de position à utiliser (voir documentation pour plus de détails)" -#: options/preferences.py:278 +#: options/preferences.py msgid "BP position cost" msgstr "Coût de position PB" -#: options/preferences.py:282 +#: options/preferences.py msgid "Simple" msgstr "Simple" -#: options/preferences.py:283 +#: options/preferences.py msgid "Rényi entropy" msgstr "Entropie de Rényi" -#: options/preferences.py:284 +#: options/preferences.py msgid "Population variance" msgstr "Variance d’une population" -#: options/preferences.py:291 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." msgstr "Ordre de Rényi α, si le coût de position utilise l’entropie de Rényi. Shannon est α = 1, Hartley est α = 0, collision est α = 2. Voir documentation pour plus de détails." -#: options/preferences.py:294 +#: options/preferences.py msgid "Rényi order (BP)" msgstr "Ordre de Rényi (PB)" -#: options/preferences.py:303 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." msgstr "Le coût de position PB est monté à cette puissance ; les puissances plus grandes fassent un biais." -#: options/preferences.py:306 +#: options/preferences.py msgid "BP position cost exponent" msgstr "Puissance de coût de position PB" -#: options/preferences.py:315 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." msgstr "En PB, quel méthode utiliser pour répartir les positions. Seulement l’algorithme hongroise avec battement est conforme à WUDC." -#: options/preferences.py:317 +#: options/preferences.py msgid "BP assignment method" msgstr "Méthode de répartition PB" -#: options/preferences.py:321 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" msgstr "Algorithme hongrois (non-conforme au WUDC)" -#: options/preferences.py:322 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" msgstr "Algorithme hongrois avec battement" -#: options/preferences.py:329 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" msgstr "Rendre tous les juges disponible pour toutes les joutes" -#: options/preferences.py:330 +#: options/preferences.py msgid "Skip adjudicator check-ins" msgstr "Sauter l’enregistrement des juges" -#: options/preferences.py:338 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" msgstr "Cacher les positions de membre dans l’interface (et le pas les allouer)" -#: options/preferences.py:339 +#: options/preferences.py msgid "No panellist adjudicators" msgstr "Aucun juge membre" -#: options/preferences.py:347 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" msgstr "Cacher les positions de stage dans l’interface (et le pas les allouer)" -#: options/preferences.py:348 +#: options/preferences.py msgid "No trainee adjudicators" msgstr "Aucun juge en stage" -#: options/preferences.py:355 options/templates/preferences_index.html:73 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" msgstr "Évaluations" -#: options/preferences.py:361 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" msgstr "Note minimale qui peut être donnée à un juge" -#: options/preferences.py:362 +#: options/preferences.py msgid "Minimum adjudicator score" msgstr "Note de juge minimale" -#: options/preferences.py:370 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" msgstr "Note maximale qui peut être donnée à un juge" -#: options/preferences.py:371 +#: options/preferences.py msgid "Maximum adjudicator score" msgstr "Note de juge maximale" -#: options/preferences.py:379 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" msgstr "Utilisé pour informer les choix disponibles dans les formulaires d’évaluation pour les juges (en ligne et imprimé) et le progrès des évaluations" -#: options/preferences.py:380 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" msgstr "Permettre et attendre évaluations d’être présenté par" -#: options/preferences.py:384 +#: options/preferences.py msgid "Chairs on panellists and trainees" msgstr "Présidents sur les membres et stagiaires" -#: options/preferences.py:385 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" msgstr "Les membres aux présidents, les présidents aux membres et stagiaires" -#: options/preferences.py:386 +#: options/preferences.py msgid "Panellists and trainees on chairs, vice-versa" msgstr "Panellistes et stagiaires aux présidents et vice-versa" -#: options/preferences.py:387 +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" msgstr "Tous les juges (avec les stagiaires) aux autres" -#: options/preferences.py:394 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "Attendez évaluations d’être présenté par les équipes pour" -#: options/preferences.py:395 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" msgstr "Utilisé pour informer les choix disponibles dans les formulaires d'évaluation pour les équipes (en ligne et imprimés) et le progrès des évaluations : cette option est utilisée par, e.g., UADC" -#: options/preferences.py:399 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" msgstr "Rendeur seulement (panellistes votants permis, avec instructions à sélectionner rendeur)" -#: options/preferences.py:400 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" msgstr "Tous les juges dans leurs jurys (incluant stagiaires)" -#: options/preferences.py:407 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" msgstr "Montrer soumissions d'évaluations inattendus dans les pages des participants" -#: options/preferences.py:408 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" msgstr "Affiche les évaluations inattendues avec un point d'interrogation ; seulement pertinent si les participants publics et progrès d'évaluations sont les deux activés" -#: options/preferences.py:416 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" msgstr "Montrer si un juge est un stagiaire (sans accréditation)" -#: options/preferences.py:417 +#: options/preferences.py msgid "Show unaccredited" msgstr "Afficher non-accrédité" -#: options/preferences.py:425 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" msgstr "N’importe texte explicative nécessaire pour introduire le formulaire d’évaluation" -#: options/preferences.py:426 +#: options/preferences.py msgid "Feedback introduction/explanation" msgstr "Introduction / Explication des Évaluations" -#: options/preferences.py:435 options/templates/preferences_index.html:63 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" msgstr "Règles de débat" -#: options/preferences.py:441 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" msgstr "Format à deux équipes (par ex. Australs, WUDC) ou Parlementaire britannique" -#: options/preferences.py:442 +#: options/preferences.py msgid "Teams in debate" msgstr "Équipes dans le débat" -#: options/preferences.py:446 +#: options/preferences.py msgid "Two-team format" msgstr "Format à deux équipes" -#: options/preferences.py:447 +#: options/preferences.py msgid "British Parliamentary (four teams)" msgstr "Parlementaire britannique (quatre équipes)" -#: options/preferences.py:454 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." msgstr "Si les jurys soumettent une feuille chaque ou une feuille par débat lors des joutes préliminaires.\n" "Note: BP doit en utiliser un par débat." -#: options/preferences.py:455 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" msgstr "Feuilles par débat, joutes préliminaires" -#: options/preferences.py:459 options/preferences.py:472 +#: options/preferences.py msgid "One ballot per voting adjudicator" msgstr "une feuille par juge votant" -#: options/preferences.py:460 options/preferences.py:473 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" msgstr "feuille par consensus (une feuille par débat)" -#: options/preferences.py:467 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." msgstr "Si les jurys soumettent une feuille chaque ou une feuille par débat lors des joutes éliminatoires.\n" "Note: BP doit en utiliser un par débat." -#: options/preferences.py:468 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" msgstr "Feuilles par débat, joutes éliminatoires" -#: options/preferences.py:480 +#: options/preferences.py msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." msgstr "Si le(s) juge(s) doivent sélectionner l'équipe gagnante dans leur feuille et comment ce serait traité. Note : Pas pris en charge pour le PB." -#: options/preferences.py:481 +#: options/preferences.py msgid "Winner Declaration in ballot(s)" msgstr "Déclaration du gagnant dans le(s) feuille(s)" -#: options/preferences.py:485 +#: options/preferences.py msgid "Do not require separate winner selection" msgstr "Ne pas demander la déclaration du gagnant à part" -#: options/preferences.py:486 +#: options/preferences.py msgid "Require separate winner selection as a check on correct scores" msgstr "Obliger la déclaration du gagnant pour vérifier les scores" -#: options/preferences.py:487 +#: options/preferences.py msgid "Require winner selection to break tied-point debates" msgstr "Obliger la déclaration du gagnant pour casser les égalités" -#: options/preferences.py:488 +#: options/preferences.py msgid "Require winner selection, overriding scores" msgstr "Obliger la déclaration du gagnant, ignorant les notes" -#: options/preferences.py:495 +#: options/preferences.py msgid "When ballots should ask for speaker scores." msgstr "Quand les feuilles demanderont les notes d'orateur." -#: options/preferences.py:496 +#: options/preferences.py msgid "Require speaker scores" msgstr "Obliger les notes d'orateur" -#: options/preferences.py:500 +#: options/preferences.py msgid "Always require speaker scores" msgstr "Toujours obliger les notes d'orateur" -#: options/preferences.py:501 +#: options/preferences.py msgid "Only require speaker scores in preliminary rounds" msgstr "Obliger les notes d'orateur seulement lors de joutes préliminaires" -#: options/preferences.py:502 +#: options/preferences.py msgid "Never require speaker scores" msgstr "Ne jamais obliger les notes d'orateur" -#: options/preferences.py:509 +#: options/preferences.py msgid "How many substantive speakers on a team" msgstr "Combien d'orateurs principaux dans un équipe" -#: options/preferences.py:510 +#: options/preferences.py msgid "Substantive speakers" msgstr "Orateurs principaux" -#: options/preferences.py:518 +#: options/preferences.py msgid "What to call the teams" msgstr "Quoi appeler les équipes" -#: options/preferences.py:519 +#: options/preferences.py msgid "Side names" msgstr "Noms des côtés" -#: options/preferences.py:528 +#: options/preferences.py msgid "Whether this style features scored reply speeches" msgstr "Si ce style contient des discours de réplique marqués" -#: options/preferences.py:529 +#: options/preferences.py msgid "Reply scores" msgstr "Scores de réplique" -#: options/preferences.py:537 +#: options/preferences.py msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" msgstr "Limiter les discours de réplique aux orateurs qui ont donné un discours principal au débat" -#: options/preferences.py:538 +#: options/preferences.py msgid "Require reply speaker to have given a substantive speech" msgstr "Obliger l'orateur du réplique d'avoir donné un discours principal" -#: options/preferences.py:545 options/templates/preferences_index.html:68 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "Classements" -#: options/preferences.py:551 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" msgstr "Le nombre de discours principales un orateur peut manquer mais encore être dans le classement des orateurs (-1 signifie aucune limite)" -#: options/preferences.py:552 +#: options/preferences.py msgid "Speeches missable for standings eligibility" msgstr "Discours perdables pour éligibilité aux classements" -#: options/preferences.py:560 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" msgstr "Le nombre de discours de réplique un orateur peut manquer et encore être dans le classement des orateurs de réplique (-1 signifie aucune limite)" -#: options/preferences.py:561 +#: options/preferences.py msgid "Replies missable for standings eligibility" msgstr "Discours de répliques manquantes pour l'éligibilité aux classements" -#: options/preferences.py:569 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" msgstr "Métriques à utiliser pour classer les équipes (voir documentation pour plus de détails)" -#: options/preferences.py:570 +#: options/preferences.py msgid "Team standings precedence" msgstr "Préséance de classement d'équipe" -#: options/preferences.py:586 options/preferences.py:621 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" msgstr "Les métriques suivantes ne peuvent pas être ajoutés deux fois : %(duplicates)s" -#: options/preferences.py:592 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" msgstr "Métriques à calculer, mais pas pour classer les équipes" -#: options/preferences.py:593 +#: options/preferences.py msgid "Team standings extra metrics" msgstr "Métriques supplémentaires pour le classement des équipes" -#: options/preferences.py:604 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" msgstr "Métriques à utiliser pour classer les orateur (voir documentation pour plus de détails)" -#: options/preferences.py:605 +#: options/preferences.py msgid "Speaker standings precedence" msgstr "Préséance de classement des orateurs" -#: options/preferences.py:627 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" msgstr "Métriques à calculer, mais pas pour classer les orateurs" -#: options/preferences.py:628 +#: options/preferences.py msgid "Speaker standings extra metrics" msgstr "Métriques supplémentaires pour le classement des orateurs" -#: options/preferences.py:638 options/templates/preferences_index.html:89 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" msgstr "Publication du tab" -#: options/preferences.py:644 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." msgstr "Active l'affichage du rendement des équipes. Pour usage après le tournoi." -#: options/preferences.py:645 +#: options/preferences.py msgid "Release team tab to public" msgstr "Publier le rendement d'équipe" -#: options/preferences.py:653 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." msgstr "Seulement montrer les scores pour les meilleurs X équipes du rendement public (mettez à 0 pour montrer toutes les équipes)." -#: options/preferences.py:654 +#: options/preferences.py msgid "Top teams cutoff" msgstr "Seuil des équipes" -#: options/preferences.py:662 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." msgstr "Active l'affichage du rendement des orateurs. Pour usage après le tournoi." -#: options/preferences.py:663 +#: options/preferences.py msgid "Release speaker tab to public" msgstr "Publier le rendement des orateurs" -#: options/preferences.py:671 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." msgstr "Seulement montrer les scores pour les meilleurs X orateurs du rendement public (mettez à 0 pour montrer tous les orateurs)." -#: options/preferences.py:672 +#: options/preferences.py msgid "Top speakers cutoff" msgstr "Seuil des orateurs" -#: options/preferences.py:680 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." msgstr "Active l'affichage du rendement des répliques. Pour usage après le tournoi." -#: options/preferences.py:681 +#: options/preferences.py msgid "Release replies tab to public" msgstr "Publier le rendement des répliques" -#: options/preferences.py:689 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." msgstr "Seulement montrer les scores pour les meilleurs X répliques du rendement public (mettez à 0 pour montrer tous les répliques)." -#: options/preferences.py:690 +#: options/preferences.py msgid "Top replies cutoff" msgstr "Seuil des répliques" -#: options/preferences.py:716 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." msgstr "Active l'affichage de tous les motions et information de réussite/sélection. Ceci inclut tous les motions—publiés ou non. Pour usage après le tournoi." -#: options/preferences.py:719 +#: options/preferences.py msgid "Release motions tab to public" msgstr "Publier rendement des motions" -#: options/preferences.py:727 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" msgstr "Active l'affichage des notes d'évaluation de tous les juges" -#: options/preferences.py:728 +#: options/preferences.py msgid "Release adjudicator tab to public" msgstr "Publier le rendement des juges" -#: options/preferences.py:736 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" msgstr "Qu'affiche (si publié) le rendement des juges" -#: options/preferences.py:737 +#: options/preferences.py msgid "Adjudicator tab displays" msgstr "Représentations du rendement des juges" -#: options/preferences.py:741 +#: options/preferences.py msgid "Only shows base score" msgstr "Montre seulement la note de base" -#: options/preferences.py:742 +#: options/preferences.py msgid "Only shows final score" msgstr "Montre seulement la note finale" -#: options/preferences.py:743 +#: options/preferences.py msgid "Shows base, final, and per-round scores" msgstr "Montre notes de base, finale et par-joute" -#: options/preferences.py:750 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." msgstr "Active l'affichage public de chaque feuille de jugement par chaque juge. Pour usage après le tournoi." -#: options/preferences.py:751 +#: options/preferences.py msgid "Release ballots to public" msgstr "Publier feuilles au public" -#: options/preferences.py:759 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" msgstr "Ceci publie tous les résultats pour toutes les joutes (incluant les joutes silencieuses et de qualification). Faites ceci seulement après le tournoi !" -#: options/preferences.py:760 +#: options/preferences.py msgid "Release all round results to public" msgstr "Publier tous les résultats des joutes au public" -#: options/preferences.py:768 +#: options/preferences.py msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." msgstr "Permet l'affichage des feuilles confirmées à partir des URLs privés. Pour usage après le tournoi." -#: options/preferences.py:769 +#: options/preferences.py msgid "Release ballots through private URLs" msgstr "Publier feuilles par URLs privés" -#: options/preferences.py:776 options/templates/preferences_index.html:94 +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" msgstr "Saisie de données" -#: options/preferences.py:782 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" msgstr "Si les juges peuvent soumettre les feuilles eux-même et comment" -#: options/preferences.py:783 +#: options/preferences.py msgid "Ballot submissions from adjudicators" msgstr "Soumissions de feuille par les juges" -#: options/preferences.py:787 options/preferences.py:801 +#: options/preferences.py msgid "Disabled (tab staff only)" msgstr "Désactivé (officiels uniquement)" -#: options/preferences.py:788 options/preferences.py:802 +#: options/preferences.py msgid "Use private URLs" msgstr "Utiliser des URL privées" -#: options/preferences.py:789 options/preferences.py:803 +#: options/preferences.py msgid "Use publicly accessible form" msgstr "Utiliser le formulaire public" -#: options/preferences.py:796 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" msgstr "Si les participants peuvent soumettre les évaluations eux-même et comment" -#: options/preferences.py:797 +#: options/preferences.py msgid "Feedback submissions from participants" msgstr "Soumissions d'évaluation par les participants" -#: options/preferences.py:810 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" msgstr "Si coché, les utilisateurs doivent entrer un mot de passe quand soumettant des évaluations et feuilles" -#: options/preferences.py:811 +#: options/preferences.py msgid "Require password for submission" msgstr "Obliger mot de passe pour soumission" -#: options/preferences.py:819 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" msgstr "Valeur du mot de passe pour les soumissions, si requis" -#: options/preferences.py:820 +#: options/preferences.py msgid "Password for public submission" msgstr "Mot de passe pour soumissions" -#: options/preferences.py:828 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" msgstr "Contourne la double vérification en confirmant les feuilles automatiquement" -#: options/preferences.py:829 +#: options/preferences.py msgid "Bypass double checking" msgstr "Contourner vérification double" -#: options/preferences.py:837 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." msgstr "Requiert que les scores de feuille brouillon soient re-saisies comme étape de la confirmation (pour une vérification plus stricte). S'applique seulement aux formats PB." -#: options/preferences.py:838 +#: options/preferences.py msgid "Enforce blind confirmations" msgstr "Activer confirmations à l'aveugle" -#: options/preferences.py:846 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." msgstr "Si les assistants peuvent accéder aux pages qui peuvent dévoiler les appariements et motions avant la publication (ces pages sont utiles pour afficher les tirages/motions au public et pour imprimer des feuilles)." -#: options/preferences.py:849 +#: options/preferences.py msgid "Assistant user access" msgstr "Accès utilisateur assistant" -#: options/preferences.py:854 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" msgstr "Toutes les zones (saisie des résultats, affichage des tirages et motions)" -#: options/preferences.py:855 +#: options/preferences.py msgid "Just results entry and draw display" msgstr "Juste la saisie des résultats et affichage de tirage" -#: options/preferences.py:856 +#: options/preferences.py msgid "Only results entry" msgstr "Seulement saisie des résultats" -#: options/preferences.py:862 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." msgstr "Si les participants peuvent se (dés)enregistrer à partir de leur URL privée." -#: options/preferences.py:863 +#: options/preferences.py msgid "Participant self-checkin" msgstr "Auto-enregistrement des participants" -#: options/preferences.py:871 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" msgstr "Le montant de temps (en heures) avant l'enregistrement un participant périme" -#: options/preferences.py:874 +#: options/preferences.py msgid "Check-In Window (People)" msgstr "Fenêtre d'enregistrement (Personnes)" -#: options/preferences.py:880 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" msgstr "Le montant de temps (en heures) avant l'enregistrement une salle périme" -#: options/preferences.py:883 +#: options/preferences.py msgid "Check-In Window (Rooms)" msgstr "Fenêtre d'enregistrement (Salles)" -#: options/preferences.py:889 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" msgstr "Si les feuilles de jugement devraient montrer les sections 'encercler chiffres' pour vérifier la mauvaise écriture à la main" -#: options/preferences.py:890 +#: options/preferences.py msgid "Ballot Digit Checks" msgstr "Vérification des chiffres de feuille" -#: options/preferences.py:898 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." msgstr "Le lieu où retourner les bulletins de note, imprimés sur des feuilles de jugement. Réglez à 'TBA' pour le cacher." -#: options/preferences.py:899 +#: options/preferences.py msgid "Score return location" msgstr "Lieu de retour des notes" -#: options/preferences.py:907 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." msgstr "Le lieu où retourner les évaluations, imprimés sur des formulaires d'évaluation. Réglez à 'TBA' pour le cacher." -#: options/preferences.py:908 +#: options/preferences.py msgid "Feedback return location" msgstr "Lieu de retour des évaluations" -#: options/preferences.py:916 +#: options/preferences.py msgid "Lets debates have their status as postponed, as to not block draw generation." msgstr "Permets les débats d'avoir un statut « reporté » afin de ne pas empêcher la génération de tirage." -#: options/preferences.py:917 +#: options/preferences.py msgid "Enable postponements" msgstr "Activer les reports de débat" -#: options/preferences.py:925 +#: options/preferences.py msgid "Have each voting adjudicator submit a separate ballot." msgstr "" -#: options/preferences.py:926 +#: options/preferences.py msgid "Individual voting ballots" msgstr "" -#: options/preferences.py:933 options/templates/preferences_index.html:99 +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" msgstr "Fonctionnalités Publiques" -#: options/preferences.py:939 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" msgstr "Active la page qui liste tous les participants au tournoi" -#: options/preferences.py:940 +#: options/preferences.py msgid "Enable public view of participants list" msgstr "Active la vue publique de la liste des participants" -#: options/preferences.py:948 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" msgstr "Active la vue publique qui liste tous les institutions au tournoi" -#: options/preferences.py:949 +#: options/preferences.py msgid "Enable public view of institutions list" msgstr "Active vue publique de la liste des institutions" -#: options/preferences.py:957 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" msgstr "Active la page publique qui liste les statistiques de la diversité des participants" -#: options/preferences.py:958 +#: options/preferences.py msgid "Enable public view of diversity info" msgstr "Active vue publique d'information de diversité" -#: options/preferences.py:966 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." msgstr "Active la page public qui monte les statuts d'enregistrement pour les individus, institutions et équipes. Notez que cette page peut être lente dans de grands tournois." -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of the checkin statuses" msgstr "Active le visionnement public des statuts d'enregistrement" -#: options/preferences.py:977 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" msgstr "Si la liste des participants est activé, montre l'éligibilité de qualification sur cette page" -#: options/preferences.py:978 +#: options/preferences.py msgid "Show break categories on participants page" msgstr "Montrer catégories de qualification sur la page des participants" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" msgstr "Active la page public qui montre les côtés pré-alloués" -#: options/preferences.py:987 +#: options/preferences.py msgid "Show pre-allocated sides to public" msgstr "Montrer côtés pré-alloués au public" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing released draws" msgstr "Active la page qui montre les tirages publiés" -#: options/preferences.py:996 +#: options/preferences.py msgid "Enable public view of draw" msgstr "Active visionnement public du tirage" -#: options/preferences.py:1000 +#: options/preferences.py msgid "Disabled" msgstr "Désactivé" -#: options/preferences.py:1001 +#: options/preferences.py msgid "Show a single page for the current round's draw" msgstr "Affiche une page seule pour le tirage pour la joute actuelle" -#: options/preferences.py:1002 +#: options/preferences.py msgid "Show individual pages for all released draws" msgstr "Affiche page individuelle pour tous les tirages publiés" -#: options/preferences.py:1009 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" msgstr "Active la page qui montre les résultats de joutes non-silencieuses" -#: options/preferences.py:1010 +#: options/preferences.py msgid "Enable public view of results" msgstr "Active visionnement des résultats" -#: options/preferences.py:1018 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" msgstr "Active la page publique qui montre les motions qui ont été publié" -#: options/preferences.py:1019 +#: options/preferences.py msgid "Enable public view of motions" msgstr "Active visionnement des motions" -#: options/preferences.py:1027 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" msgstr "Active la page publique qui montre le classement des équipes, montrant seulement les victoires (pas les scores ni rang)" -#: options/preferences.py:1028 +#: options/preferences.py msgid "Enable public view of team standings" msgstr "Activer visionnement du classement d'équipe" -#: options/preferences.py:1036 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" msgstr "Active la page public pour chaque équipe et juge qui montre leur activité" -#: options/preferences.py:1037 +#: options/preferences.py msgid "Enable public record pages" msgstr "Activer pages d'activité" -#: options/preferences.py:1045 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." msgstr "Active la page publique qui montre les équipes qualifiants. Pour usage après l'annonce de qualification." -#: options/preferences.py:1046 +#: options/preferences.py msgid "Release team breaks to public" msgstr "Publier les qualifications d'équipes au public" -#: options/preferences.py:1054 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." msgstr "Active la page publique qui montre les juges qualifiants. Pour usage après l'annonce de qualification." -#: options/preferences.py:1055 +#: options/preferences.py msgid "Release adjudicators break to public" msgstr "Publier la qualification des juges au public" -#: options/preferences.py:1063 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" msgstr "Active la page publique montrant qui doivent soumettre des évaluations" -#: options/preferences.py:1064 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" msgstr "Active la vue publique d'évaluations non-rendus" -#: options/preferences.py:1072 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." msgstr "Liste des officiels du tournoi, à être affiché sur la page d'accueil du tournoi. Gardez vide ou avec le texte défaut pour ne pas afficher." -#: options/preferences.py:1073 +#: options/preferences.py msgid "Tournament staff" msgstr "Officiels du tournoi" -#: options/preferences.py:1083 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" msgstr "Message à afficher sur la page d'accueil du tournoi" -#: options/preferences.py:1084 +#: options/preferences.py msgid "Welcome message" msgstr "Message d'accueil" -#: options/preferences.py:1093 options/templates/preferences_index.html:104 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" msgstr "Options d'interface" -#: options/preferences.py:1099 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" msgstr "Si montrant les résultats au public, montrer les juges dissidents" -#: options/preferences.py:1100 +#: options/preferences.py msgid "Show splitting adjudicators" msgstr "Montrer juges dissidents" -#: options/preferences.py:1108 +#: options/preferences.py msgid "Whether and how to use code names for teams" msgstr "Si et comment utiliser des noms code pour les équipes" -#: options/preferences.py:1109 +#: options/preferences.py msgid "Team code names" msgstr "Noms-code d’équipe" -#: options/preferences.py:1114 +#: options/preferences.py msgid "Do not use code names" msgstr "Ne pas utiliser les noms-code" -#: options/preferences.py:1115 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" msgstr "Utiliser des vrais noms partout et montrer noms code dans les infobulles" -#: options/preferences.py:1116 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" msgstr "Utiliser noms code pour le public ; vrais noms avec noms codes dans les infobulles pour administrateurs" -#: options/preferences.py:1118 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" msgstr "Utiliser noms code pour le public ; noms code avec vrais noms dans les infobulles pour administrateurs" -#: options/preferences.py:1120 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" msgstr "Utiliser noms code partout ; n'utilise pas d'infobulle (vrais noms apparaissent dans quelques pages administrateur)" -#: options/preferences.py:1126 +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" msgstr "Afficher emoji d'équipe dans les interfaces publiques et administrateur" -#: options/preferences.py:1127 +#: options/preferences.py msgid "Show emoji" msgstr "Montrer emoji" -#: options/preferences.py:1135 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" msgstr "Dans les tables avec équipes, ajoute une colonne pour leurs institutions" -#: options/preferences.py:1136 +#: options/preferences.py msgid "Show team institutions" msgstr "Montrer institutions des équipes" -#: options/preferences.py:1144 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" msgstr "Cacher les institutions des juges sur les pages publics et sur les feuilles imprimés" -#: options/preferences.py:1145 +#: options/preferences.py msgid "Show adjudicator institutions" msgstr "Montrer institutions des juges" -#: options/preferences.py:1153 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" msgstr "Active un élément de survol sur chaque nom d'équipe qui montre leurs orateurs" -#: options/preferences.py:1154 +#: options/preferences.py msgid "Show speakers in draw" msgstr "Montrer orateurs dans les tirages" -#: options/preferences.py:1161 options/templates/preferences_index.html:109 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" msgstr "Notifications" -#: options/preferences.py:1167 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "Le nom du responsable pour le traitement des courriels (au cas de réplique)" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Reply-to name" msgstr "Nom de réplique" -#: options/preferences.py:1176 +#: options/preferences.py msgid "The email address for handling replies" msgstr "L’adresse courriel pour gérer les répliques" -#: options/preferences.py:1177 +#: options/preferences.py msgid "Reply-to address" msgstr "Adresse courriel de réplique" -#: options/preferences.py:1185 +#: options/preferences.py msgid "A secret key to accept email status events" msgstr "Une clé secrète pour accepter des évènements de message" -#: options/preferences.py:1186 +#: options/preferences.py msgid "Email status secret key" msgstr "Clé secrète de statut de courriel" -#: options/preferences.py:1196 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "Fait qu'une copie du feuille de jugement des juges soit envoyé lorsqu'ils seront saisis dans Tabbycat (pour la confirmation ou vérification)" -#: options/preferences.py:1197 +#: options/preferences.py msgid "Ballot receipts" msgstr "Reçus de feuille" -#: options/preferences.py:1205 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "L'objet pour les courriels envoyés aux juges avec leurs feuilles de jugement. Utilise '{{ DEBATE }}' comme substitut au débat" -#: options/preferences.py:1207 +#: options/preferences.py msgid "Ballot receipt subject line" msgstr "Objet des courriels de reçu de feuille" -#: options/preferences.py:1215 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "Le corps des courriels envoyés aux juges avec leurs feuilles de jugement." -#: options/preferences.py:1216 +#: options/preferences.py msgid "Ballot receipt message" msgstr "Message de reçu de feuille" -#: options/preferences.py:1232 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." msgstr "Le sujet pour les courriels envoyés aux orateurs avec leur pointage d'équipe." -#: options/preferences.py:1233 +#: options/preferences.py msgid "Team points subject line" msgstr "Objet des courriels des notes d’équipe" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." msgstr "Le corps des courriels envoyés aux orateurs avec leur pointage d'équipe." -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team points message" msgstr "Message des courriels des notes d’équipe" -#: options/preferences.py:1250 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." msgstr "Le sujet pour les courriels envoyés aux juges avec leurs allocations." -#: options/preferences.py:1251 +#: options/preferences.py msgid "Adjudicator draw subject line" msgstr "Sujet de message de tirage de juge" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." msgstr "Le corps pour les courriels envoyés aux juges avec leurs affectations." -#: options/preferences.py:1259 +#: options/preferences.py msgid "Adjudicator draw message" msgstr "Message de tirage des juges" -#: options/preferences.py:1268 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." msgstr "Le sujet pour les courriels envoyés aux équipes avec leur tirage." -#: options/preferences.py:1269 +#: options/preferences.py msgid "Team draw subject line" msgstr "Sujet de courriel de tirage d'équipe" -#: options/preferences.py:1276 options/preferences.py:1294 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." msgstr "Le corps des courriels envoyés aux participants avec leurs URLs privées." -#: options/preferences.py:1277 options/preferences.py:1295 +#: options/preferences.py msgid "Private URL notification message" msgstr "Message de notification d'URL privée" -#: options/preferences.py:1286 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." msgstr "Le sujet pour les courriels envoyés aux participants avec leurs URL privées." -#: options/preferences.py:1287 +#: options/preferences.py msgid "Private URL notification subject line" msgstr "Sujet de notification d'URL privée" -#: options/preferences.py:1308 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." msgstr "Le sujet pour les courriels envoyés aux participants au publication de motion." -#: options/preferences.py:1309 +#: options/preferences.py msgid "Motion release notification subject line" msgstr "Sujet de notification de publication de motion" -#: options/preferences.py:1316 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." msgstr "Le corps pour les courriels envoyés aux participants au publication de motion." -#: options/preferences.py:1317 +#: options/preferences.py msgid "Motion release notification message" msgstr "Message de notification de publication de motion" -#: options/preferences.py:1325 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." msgstr "Le sujet pour les courriels envoyés aux participants pour leur enregistrement d'équipe." -#: options/preferences.py:1326 +#: options/preferences.py msgid "Team registration notification subject line" msgstr "Objet des courriels de note d’équipe" -#: options/preferences.py:1333 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." msgstr "Le corps pour les courriels envoyés aux participants pour leur enregistrement d'équipe." -#: options/preferences.py:1334 +#: options/preferences.py msgid "Team registration notification message" msgstr "Message de notification d'enregistrement d'équipe" -#: options/preferences.py:1343 options/templates/preferences_index.html:78 +#: options/preferences.py options/templates/preferences_index.html msgid "Motions" msgstr "Motions" -#: options/preferences.py:1349 +#: options/preferences.py msgid "If checked, ballots require a motion to be entered" msgstr "Si coché, les feuilles nécessitent la saisie d'une motion" -#: options/preferences.py:1350 +#: options/preferences.py msgid "Enable motions" msgstr "Activer les motions" -#: options/preferences.py:1358 +#: options/preferences.py msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" msgstr "Si les feuilles de jugement imprimés devraient cacher le texte des motions (même si entré et publié)" -#: options/preferences.py:1359 +#: options/preferences.py msgid "Ballot Hide Motions" msgstr "Feuille Cacher Motions" -#: options/preferences.py:1367 +#: options/preferences.py msgid "Enables the motion veto field on ballots, to track veto statistics" msgstr "Active le champ des vétos de motion sur les feuilles, pour les suivre" -#: options/preferences.py:1368 +#: options/preferences.py msgid "Motion vetoes" msgstr "Vétos de motion" -#: options/preferences.py:1376 +#: options/preferences.py msgid "If showing results to public, show which motions were selected in the record" msgstr "Si montrant les résultats au public, montrer laquelle des motions a été choisi" -#: options/preferences.py:1377 +#: options/preferences.py msgid "Show motions in results" msgstr "Montrer motions dans les résultats" -#: options/preferences.py:1385 +#: options/preferences.py msgid "Order in which are listed by round in the public view" msgstr "Ordre dans laquelle les joutes sont affichés publiquement" -#: options/preferences.py:1386 +#: options/preferences.py msgid "Order to display motions" msgstr "Ordre pour afficher les motions" -#: options/preferences.py:1390 +#: options/preferences.py msgid "Earliest round first" msgstr "Joute la plus ancienne en premier" -#: options/preferences.py:1391 +#: options/preferences.py msgid "Latest round first" msgstr "Joute la plus récente en premier" -#: options/preferences.py:1398 +#: options/preferences.py msgid "Whether motions can be reused from one round to another." msgstr "Si les motions peuvent être réutilisés entre joutes." -#: options/preferences.py:1399 +#: options/preferences.py msgid "Allow motion reuse" msgstr "Autoriser la réutilisation de motion" -#: options/preferences.py:1406 options/templates/preferences_index.html:114 +#: options/preferences.py options/templates/preferences_index.html msgid "Global Settings" msgstr "Paramètres globaux" -#: options/preferences.py:1412 +#: options/preferences.py msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." msgstr "Permet aux applications externes d'accéder au site avec une interface dédiée, sujette aux paramètres d'information publics." -#: options/preferences.py:1413 +#: options/preferences.py msgid "Enable API access" msgstr "Activer accès IPA" -#: options/preferences.py:1421 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1422 +#: options/preferences.py msgid "Assistant account creation key" msgstr "" -#: options/preferences.py:1431 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1433 +#: options/preferences.py msgid "Administrator account creation key" msgstr "" -#: options/presets.py:32 options/presets.py:324 +#: options/presets.py msgid "Public Information Options" msgstr "Options d'information Publique" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" msgstr "Activer l'information publique" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" msgstr "Désactiver l'information publique" -#: options/presets.py:74 +#: options/presets.py msgid "Australs Rules" msgstr "Règles d'Australs" -#: options/presets.py:75 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." msgstr "3 contre 3 avec répliques, motions choisis, tranches intermédiaires, un-monte-un-descend. Conforme aux règles d'AIDA." -#: options/presets.py:114 +#: options/presets.py msgid "British Parliamentary Rules" msgstr "Règles de Parlementaire Britannique" -#: options/presets.py:115 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." msgstr "2 contre 2 contre 2 contre 2. Conforme aux règles du WUDC." -#: options/presets.py:157 +#: options/presets.py msgid "Canadian Parliamentary Rules" msgstr "Règles de Parlementaire Canadien" -#: options/presets.py:159 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." msgstr "2 contre 2 avec répliques (sans score) et POIs. Pourrait avoir besoin de configuration supplémentaire pour variations régionales." -#: options/presets.py:182 +#: options/presets.py msgid "Australian Easters Rules" msgstr "Règles d'Easters Australien" -#: options/presets.py:184 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." msgstr "3 contre 3 sans répliques, motions déterminés, bulles intermédiaires, un-monte-un-descend. Conforme aux règles d'AIDA." -#: options/presets.py:202 +#: options/presets.py msgid "2 vs 2 Impromptu" msgstr "2 contre 2 Impromptu" -#: options/presets.py:204 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." msgstr "2 contre 2 avec répliques, motions choisis, côtés choisis et statut de novice." -#: options/presets.py:229 +#: options/presets.py msgid "3 vs 3 Prepared" msgstr "3 contre 3 Préparé" -#: options/presets.py:231 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." msgstr "3 contre 3 avec côtés pré-alloués, côtés et motions affichés publiquement et statut novice." -#: options/presets.py:258 +#: options/presets.py msgid "UADC Rules" msgstr "Règles UADC" -#: options/presets.py:260 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." msgstr "3 contre 3 avec répliques, motions choisis et tous les juges peuvent recevoir des évaluations des équipes." -#: options/presets.py:296 +#: options/presets.py msgid "WSDC Rules" msgstr "Règles WSDC" -#: options/presets.py:298 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "3 contre 3 avec répliques, motions choisis, étiquettes de côtés prop/opp et tous les juges peuvent recevoir des évaluations des équipes." -#: options/presets.py:326 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "Pour les tournois hébergés en ligne : ceci configure le site pour permettre au monde d'accéder au tirage et autre information pertinente par le site." -#: options/presets.py:338 +#: options/presets.py msgid "Tab Release Options" msgstr "Options de Publication" -#: options/presets.py:340 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" msgstr "Pour quand le rendement est prêt à être publié. Ceci va afficher publiquement les résultats de toutes les joutes, le rendement des équipes, orateurs, etc" -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "Utiliser URL privées" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html msgid "Configuration" msgstr "Paramètres" -#: options/templates/preferences_index.html:11 +#: options/templates/preferences_index.html #, python-format msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." msgstr "Vos règles de tirage spécifie quatre équipes par débat mais les règles de jugement dit que chaque juge soumet une feuille. Ces réglages ne sont pas compatibles et vont planter la saisie des résultats. Vous devez retourner à la section Règles de Débat et changer les réglages pour utiliser des feuilles de consensus." -#: options/templates/preferences_index.html:24 +#: options/templates/preferences_index.html #, python-format msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." msgstr "Vous n'utilisez pas la répartition de côtés pré-allouée mais la méthode de résolution des tranches impairs en utilisent. Ceci va causer la génération de tirage à échouer. Vous devez modifier la méthode utilisé, n'utilisant ni Intermédiaire 1 ni Intermédiaire 2 dans la section des Règles du tirage." -#: options/templates/preferences_index.html:35 +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." msgstr "Vous avez à la fois les noms code activés et les institutions des équipes affichés sur les pages publiques. Si votre but avec les noms code est pour cacher les affiliations, cela annule le point des noms code. Vous pouvez modifier ces réglages dans la section de l'interface." -#: options/templates/preferences_index.html:54 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" msgstr "L'étendue des scores qui peuvent être attribués aux discours, répliques et équipes" -#: options/templates/preferences_index.html:59 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" msgstr "Comme les équipes sont jumelées au tirage et comment les juges sont répartis automatiquement" -#: options/templates/preferences_index.html:64 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" msgstr "Combien de discours dans un débat, comment les motions sont décidés et si les répliques sont utilisés" -#: options/templates/preferences_index.html:69 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" msgstr "Comment les équipes et les orateurs sont classés dans les résultats" -#: options/templates/preferences_index.html:74 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" msgstr "Comment les juges sont classés et qui peut les évaluer" -#: options/templates/preferences_index.html:79 +#: options/templates/preferences_index.html msgid "How and where are motions used" msgstr "Où et comment les motions sont utilisées" -#: options/templates/preferences_index.html:90 +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" msgstr "Quand publier les résultats et que montrer" -#: options/templates/preferences_index.html:95 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" msgstr "Comment les feuilles, évaluations et enregistrements sont entrées, incluant les options de saisie en ligne" -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" msgstr "Quelles informations affiche le site sur les pages publiques" -#: options/templates/preferences_index.html:105 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" msgstr "Petites modifications dans quelles informations sont présentées par l'interface" -#: options/templates/preferences_index.html:110 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" msgstr "Configure le traitement des messages de notification, tels la soumission de feuille ou le pointage d'équipe" -#: options/templates/preferences_index.html:115 +#: options/templates/preferences_index.html msgid "Settings which can affect all tournaments on the site" msgstr "Paramètres qui peuvent affecter tous les tournois sur le site" -#: options/templates/preferences_index.html:127 +#: options/templates/preferences_index.html msgid "Manually Set Current Round" msgstr "Changer manuellement la joute actuelle" -#: options/templates/preferences_index.html:128 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." msgstr "Tabbycat va vous avertir d’achever la joute actuelle sur la page de résultats de chaque joute. Par contre, s’il y a des circonstances spéciales et il faut l’outrepasser, utilisez cette page." -#: options/templates/preferences_index.html:132 -msgid "Set Round Weights" +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: options/templates/preferences_index.html:133 +#: options/templates/preferences_index.html msgid "Rounds can be weighted so that certain rounds are worth more team points." msgstr "" -#: options/templates/preferences_index.html:140 +#: options/templates/preferences_index.html msgid "Presets" msgstr "Préconfigurations" -#: options/templates/preferences_index.html:141 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." msgstr "Ceux-ci modifie des réglages communes pour les règles de base ; vérifiez notre documentation pour s’assurer qu’ils appliquent à votre tournoi. Chaque lien va afficher les réglages qui seront modifiés avant l’application." -#: options/templates/preferences_index.html:152 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" msgstr "Appliquer %(preset)s" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" msgstr "Préconfigurations appliqués : %(preset_title)s" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" msgstr "Retour au Configuration" -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" msgstr "Préférences qui ont été modifiées" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" msgstr "Confirmer préconfiguration : %(preset_title)s" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" msgstr "Préférences qui ne changeront pas" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" msgstr "Préférences qui vont changer" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" msgstr "Appliquer préconfiguration : %(preset_title)s" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" msgstr "Configuration : %(section)s" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" msgstr "Modifier la Configuration : %(section)s" -#: options/views.py:65 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." msgstr "Options de tournoi (%(section)s) sauvegardées." -#: options/views.py:111 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." msgstr "Options de tournoi sauvegardés en accordance à la préconfiguration %(name)s." diff --git a/tabbycat/participants/locale/fr/LC_MESSAGES/django.po b/tabbycat/participants/locale/fr/LC_MESSAGES/django.po index 9a65795b0e5..0693616eb3a 100644 --- a/tabbycat/participants/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2022-08-08 17:01\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-12 15:51\n" "Last-Translator: philip_tc\n" "Language-Team: French\n" "Language: fr_FR\n" @@ -18,960 +18,947 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 942\n" -#: participants/admin.py:96 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" msgstr "L’équipe ne peut pas être dans la catégorie de qualification d’un autre tournoi. Veuillez enlever : %(category)s" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Emoji & Code" +msgstr "Émoji & Code" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "Supprimer clé d’URL" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." msgstr[0] "%(count)d orateur a eu leur clé d’URL supprimé." msgstr[1] "%(count)d orateurs ont eu leurs clés d’URL supprimés." -#: participants/admin.py:152 participants/admin.py:233 -msgid "Delete URL key" -msgstr "Supprimer clé d’URL" +#: participants/admin.py +msgid "Reset emoji" +msgstr "Réinitialiser émoji" -#: participants/admin.py:160 +#: participants/admin.py #, python-format msgid "%(count)d team had their emoji reset." msgid_plural "%(count)d teams had their emojis reset." msgstr[0] "%(count)d équipe a fait réinitialiser leur émoji." msgstr[1] "%(count)d équipes ont eu leurs émoji réinitialisés." -#: participants/admin.py:164 -msgid "Reset emoji" -msgstr "Réinitialiser émoji" +#: participants/admin.py +msgid "Reset code name" +msgstr "Réinitialiser nom code" -#: participants/admin.py:170 +#: participants/admin.py #, python-format msgid "%(count)d team had their code name reset." msgid_plural "%(count)d teams had their code names reset." msgstr[0] "%(count)d équipe a fait réinitialiser leur nom code." msgstr[1] "%(count)d équipes ont eu leurs noms code réinitialisés." -#: participants/admin.py:174 -msgid "Reset code name" -msgstr "Réinitialiser nom code" - -#: participants/admin.py:228 +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." msgstr[0] "%(count)d juge a eu leur clé d’URL supprimé." msgstr[1] "%(count)d juges ont eu leurs clés d’URL supprimés." -#: participants/apps.py:7 participants/views.py:41 +#: participants/apps.py participants/views.py msgid "Participants" msgstr "Participants" -#: participants/models.py:21 participants/models.py:37 -#: participants/models.py:66 participants/models.py:96 +#: participants/models.py msgid "name" msgstr "nom" -#: participants/models.py:24 participants/models.py:45 +#: participants/models.py msgid "region" msgstr "région" -#: participants/models.py:25 +#: participants/models.py msgid "regions" msgstr "régions" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:39 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" msgstr "Le nom complet d'institution, par ex., « Université de Montréal », « Institut d'études politiques de Paris »" -#: participants/models.py:41 +#: participants/models.py msgid "code" msgstr "code" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:43 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" msgstr "Ce que s'appelle l'institution typiquement, par ex., « Montréal », « Sciences Po »" -#: participants/models.py:55 participants/models.py:155 -#: participants/models.py:353 +#: participants/models.py msgid "institution" msgstr "institution " -#: participants/models.py:56 +#: participants/models.py msgid "institutions" msgstr "institutions" -#: participants/models.py:64 participants/models.py:157 -#: participants/models.py:356 +#: participants/models.py msgid "tournament" msgstr "tournoi" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:68 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" msgstr "Nom à être affiché, e.g. « Novice », « FLS »" -#: participants/models.py:70 +#: participants/models.py msgid "slug" msgstr "slug" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:72 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" msgstr "Slug pour les URLs, e.g., « novice », « fls »" -#: participants/models.py:74 +#: participants/models.py msgid "sequence number" msgstr "numéro de séquence" -#: participants/models.py:75 +#: participants/models.py msgid "The order in which the categories are displayed" msgstr "L’ordre dans laquelle les catégories sont affichées" -#: participants/models.py:77 +#: participants/models.py msgid "limit" msgstr "limite" -#: participants/models.py:78 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" msgstr "Au plus, ce montant d’orateurs sera montré sur le classement public de cette catégorie, ou 0 pour aucune limite" -#: participants/models.py:80 +#: participants/models.py msgid "public" msgstr "publique" -#: participants/models.py:81 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" msgstr "Si coché, cette catégorie sera inclus dans les onglets des catégories d’orateur montré au public" -#: participants/models.py:87 +#: participants/models.py msgid "speaker category" msgstr "catégorie d'orateurs" -#: participants/models.py:88 participants/models.py:330 +#: participants/models.py msgid "speaker categories" msgstr "catégories d'orateurs" -#: participants/models.py:98 +#: participants/models.py msgid "email address" msgstr "" -#: participants/models.py:100 +#: participants/models.py msgid "phone" msgstr "téléphone" -#: participants/models.py:102 +#: participants/models.py msgid "anonymous" msgstr "anonyme" -#: participants/models.py:103 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" msgstr "Les noms et les équipes des personnes anonymes sera caviardé sur les tabs publics" -#: participants/models.py:106 +#: participants/models.py +msgid "code name" +msgstr "nom de code" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py msgid "URL key" msgstr "clé d'URL" -#: participants/models.py:111 +#: participants/models.py msgid "male" msgstr "homme" -#: participants/models.py:112 +#: participants/models.py msgid "female" msgstr "femme" -#: participants/models.py:113 +#: participants/models.py msgid "other" msgstr "autre" -#: participants/models.py:115 +#: participants/models.py msgid "gender" msgstr "genre" -#: participants/models.py:116 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" msgstr "Le genre est affiché dans l’interface d’attribution de juges" -#: participants/models.py:118 +#: participants/models.py msgid "pronoun" msgstr "pronom" -#: participants/models.py:119 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" msgstr "Si vous imprimez les feuilles avec Tabbycat, il y a un option à pré-imprimer les pronoms" -#: participants/models.py:122 +#: participants/models.py msgid "person" msgstr "personne" -#: participants/models.py:123 +#: participants/models.py msgid "persons" msgstr "personnes" -#: participants/models.py:138 +#: participants/models.py msgid "full name/suffix" msgstr "nom/suffixe complet" -#: participants/models.py:139 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" msgstr "N'incluez pas le nom d'institution (voyez « utilise le préfixe institutionnel » ci-dessous)" -#: participants/models.py:141 +#: participants/models.py msgid "short name/suffix" msgstr "nom/suffixe court" -#: participants/models.py:142 +#: participants/models.py msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" msgstr "Le nom décodé qui est affiché dans le tirage, n'incluant pas le nom d'institution (voyez « utilise le préfixe institutionnel » ci-dessous)" -#: participants/models.py:144 -msgid "code name" -msgstr "nom de code" - -#: participants/models.py:145 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" msgstr "Un nom pour masquer l'identité institutionnelle sur les pages publiques" -#: participants/models.py:148 +#: participants/models.py msgid "short name" msgstr "nom court" -#: participants/models.py:149 +#: participants/models.py msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" msgstr "Le nom décodé montré dans le tirage, y compris le nom de l’institution. (Généré automatiquement.)" -#: participants/models.py:151 +#: participants/models.py msgid "long name" msgstr "nom long" -#: participants/models.py:152 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" msgstr "Le nom complet d'équipe, y compris le nom d'institution. (Généré automatiquement.)" -#: participants/models.py:159 +#: participants/models.py msgid "Uses institutional prefix" msgstr "Utilise le préfixe institutionnel" -#: participants/models.py:160 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" msgstr "Si cochée, une équipe appelée « 1 » de Victoria sera indiquée par « Victoria 1 »" -#: participants/models.py:162 +#: participants/models.py msgid "break categories" msgstr "catégories de qualification" -#: participants/models.py:167 participants/models.py:364 +#: participants/models.py msgid "institution conflicts" msgstr "conflits avec institutions" -#: participants/models.py:178 +#: participants/models.py msgid "none" msgstr "aucun" -#: participants/models.py:179 +#: participants/models.py msgid "swing" msgstr "substitut" -#: participants/models.py:180 +#: participants/models.py msgid "composite" msgstr "composée" -#: participants/models.py:181 +#: participants/models.py msgid "bye" msgstr "sans adversaire" -#: participants/models.py:184 +#: participants/models.py msgid "type" msgstr "type" -#: participants/models.py:188 +#: participants/models.py msgid "emoji" msgstr "emoji" -#: participants/models.py:202 participants/models.py:328 +#: participants/models.py msgid "team" msgstr "équipe" -#: participants/models.py:203 +#: participants/models.py msgid "teams" msgstr "équipes" -#: participants/models.py:311 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." msgstr "Si une équipe utilise le préfixe institutionnel, il faut qu'elle ait une institution." -#: participants/models.py:313 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." msgstr "Si une équipe n'utilise pas le préfixe institutionnel, il faut qu'elle ait un nom complet." -#: participants/models.py:315 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." msgstr "Si une équipe n'utilise pas le préfixe institutionnel, il faut qu'elle ait un nom court." -#: participants/models.py:333 +#: participants/models.py msgid "speaker" msgstr "orateur" -#: participants/models.py:334 +#: participants/models.py msgid "speakers" msgstr "orateurs" -#: participants/models.py:357 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" msgstr "Les juges qui ne sont attribués à aucun tournoi peuvent être partagé entre les tournois" -#: participants/models.py:359 +#: participants/models.py msgid "base score" msgstr "note de base" -#: participants/models.py:368 +#: participants/models.py msgid "team conflicts" msgstr "conflits avec équipes" -#: participants/models.py:372 +#: participants/models.py msgid "adjudicator conflicts" msgstr "conflits de juge" -#: participants/models.py:375 +#: participants/models.py msgid "always trainee" msgstr "toujours stagiaire" -#: participants/models.py:376 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" msgstr "Si coché, ce juge ne sera jamais placé automatiquement dans un rôle votante, n’importe leur score" -#: participants/models.py:378 +#: participants/models.py msgid "breaking" msgstr "qualifiant" -#: participants/models.py:380 +#: participants/models.py msgid "independent" msgstr "indépendant" -#: participants/models.py:382 +#: participants/models.py msgid "adjudication core" msgstr "sein des juges" -#: participants/models.py:391 +#: participants/models.py msgid "adjudicator" msgstr "juge" -#: participants/models.py:392 +#: participants/models.py msgid "adjudicators" msgstr "juges" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" msgstr "Points après ce débat" -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" msgstr "Victoires après ce débat" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" msgstr "Scores d'orateurs
    (dans l'ordre d'intervention)" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" msgstr "Scores" -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" msgstr "À propos de %(name)s" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" msgstr "Juge indépendant" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" msgstr "Membre du sein des juges" -#: participants/templates/adjudicator_registration_card.html:27 -#: participants/templates/team_registration_card.html:89 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" msgstr "Institution :" -#: participants/templates/adjudicator_registration_card.html:31 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" msgstr "Non-affilié" -#: participants/templates/adjudicator_registration_card.html:36 -#: participants/templates/team_registration_card.html:98 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "Région :" -#: participants/templates/adjudicator_registration_card.html:43 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." msgstr "Les affiliations institutionnels des juges ne sont pas publics dans ce tournoi." -#: participants/templates/adjudicator_registration_card.html:50 -#: participants/templates/team_registration_card.html:109 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" msgstr "Conflits avec institutions :" -#: participants/templates/adjudicator_registration_card.html:52 -#: participants/templates/team_registration_card.html:111 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr " ; " -#: participants/templates/adjudicator_registration_card.html:54 -#: participants/templates/adjudicator_registration_card.html:62 -#: participants/templates/adjudicator_registration_card.html:74 -#: participants/templates/adjudicator_registration_card.html:84 -#: participants/templates/team_registration_card.html:58 -#: participants/templates/team_registration_card.html:70 -#: participants/templates/team_registration_card.html:79 -#: participants/templates/team_registration_card.html:113 -#: participants/templates/team_registration_card.html:122 -#: participants/templates/team_registration_card.html:133 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" msgstr "Aucun" -#: participants/templates/adjudicator_registration_card.html:58 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" msgstr "Conflits avec équipes :" -#: participants/templates/adjudicator_registration_card.html:60 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:71 -#: participants/templates/adjudicator_registration_card.html:82 -#: participants/templates/team_registration_card.html:56 -#: participants/templates/team_registration_card.html:68 -#: participants/templates/team_registration_card.html:77 -#: participants/templates/team_registration_card.html:120 -#: participants/templates/team_registration_card.html:131 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr ", " -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/team_registration_card.html:118 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" msgstr "Conflits avec juges :" -#: participants/templates/adjudicator_registration_card.html:80 -#: participants/templates/team_registration_card.html:129 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" msgstr "Contraintes de salle:" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "N’oubliez pas : Si ce juge devrait être en conflit avec son propre institution, vous devriez ajouter cette contrainte maintenant dans l’onglet des conflits entre juge et institution parce que cette contrainte n’est pas automatiquement créée en utilisant cette formulaire." -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." msgstr "Avertissement : S’il y a des objets « débat-équipe » dans la liste ci-dessus, vous ne devrait pas probablement supprimer ce %(object_name)s." -#: participants/templates/admin/participants/delete_debateteam_warning.html:14 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." msgstr "Avertissement : S’il y a des objets « débat-équipe » dans la liste ci-dessus, vous ne devrait pas probablement supprimer ces %(objects_name)s." #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:21 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." msgstr "C’est particulièrement le cas si une équipe qui aurait été supprimé a déjà participé à un débat. Si une équipe a déjà un résultat, la suppression de cette équipe supprimera aussi ces résultats, et cette dernière suppression casse normalement les classements, même si vous pensez que vous n’avez plus besoin de ces résultats. Si une équipe a débattu et se retire du tournoi, vous ne devriez pas le supprimer. Marquez simplement l’équipe inactive dans la section « Enregistrement », dans la zone d’administration de Tabbycat." -#: participants/templates/admin/participants/delete_debateteam_warning.html:33 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." msgstr "Notez que la suppression d’une institution supprimera également toutes les équipes de cette institution." -#: participants/templates/admin/participants/delete_debateteam_warning.html:41 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "Si vous êtes très sûr(e) que vous voulez supprimer ce %(object_name)s, veuillez supprimer tout d’abord les objets ci-dessus et n’oubliez pas de tenir compte de l’avertissement que vous verrez sur la page d’objets « débat-équipe » avant de procéder." -#: participants/templates/admin/participants/delete_debateteam_warning.html:47 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "Si vous êtes très sûr(e) que vous voulez supprimer ces %(objects_name)s, veuillez supprimer tout d’abord les objets ci-dessus et n’oubliez pas de tenir compte de l’avertissement que vous verrez sur la page d’objets « débat-équipe » avant de procéder." -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "N’oubliez pas : Si cette équipe devrait être en conflit avec son propre institution, vous devriez ajouter cette contrainte maintenant dans l’onglet des conflits entre équipe et institution parce que cette contrainte n’est pas automatiquement créée en utilisant cette formulaire." -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" msgstr "La joute commence à %(start_time)s" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "Équipes :" -#: participants/templates/current_round/common.html:28 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "Juge :" msgstr[1] "Juges :" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" msgstr "Ⓟ" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" msgstr "Ⓢ" -#: participants/templates/current_round/common.html:44 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." msgstr "Il n'y a pas de panellistes ou de stagiaires attribués à ce débat." -#: participants/templates/current_round/common.html:54 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." msgstr "Les motions ne sont pas publiées." -#: participants/templates/current_round/common.html:57 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "Motion :" -#: participants/templates/current_round/common.html:61 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "Motion %(seq)s :" -#: participants/templates/current_round/common.html:69 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." msgstr "La motion/les motions de cette joute n'est (ne sont) pas encore publiée(s)." -#: participants/templates/current_round/round_adj.html:14 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s est le/la président(e) du jury du débat entre %(aff)s et %(neg)s à %(room)s." -#: participants/templates/current_round/round_adj.html:18 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s est le/la président(e) du jury du débat entre %(aff)s et %(neg)s à %(room)s." -#: participants/templates/current_round/round_adj.html:24 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Vous êtes le/la président(e) du jury du débat entre %(aff)s et %(neg)s à %(room)s." -#: participants/templates/current_round/round_adj.html:28 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Vous êtes le/la président(e) du jury du débat entre %(aff)s et %(neg)s à %(room)s." -#: participants/templates/current_round/round_adj.html:36 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s est un(e) %(type)s dans le jury du débat entre %(aff)s et %(neg)s à %(room)s." -#: participants/templates/current_round/round_adj.html:40 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s est un(e) %(type)s dans le jury du débat entre %(aff)s et %(neg)s à %(room)s." -#: participants/templates/current_round/round_adj.html:46 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Vous êtes un(e) %(type)s dans le jury du débat entre %(aff)s et %(neg)s à %(room)s." -#: participants/templates/current_round/round_adj.html:50 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Vous êtes un(e) %(type)s dans le jury du débat entre %(aff)s et %(neg)s à %(room)s." -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s juge le débat entre %(aff)s et %(neg)s à %(room)s." -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s juge le débat entre %(aff)s et %(neg)s à %(room)s." -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Vous jugez le débat entre %(aff)s et %(neg)s à %(room)s." -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Vous jugez le débat entre %(aff)s et %(neg)s à %(room)s." -#: participants/templates/current_round/round_adj.html:85 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "%(adjudicator)s est le/la président(e) du jury à %(room)s." -#: participants/templates/current_round/round_adj.html:89 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "%(adjudicator)s est le/la président(e) du jury à %(room)s." -#: participants/templates/current_round/round_adj.html:95 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "Vous êtes le/la président(e) du jury à %(room)s." -#: participants/templates/current_round/round_adj.html:99 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "Vous êtes le/la président(e) du jury à %(room)s." -#: participants/templates/current_round/round_adj.html:107 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "%(adjudicator)s est un(e) %(type)s dans le jury à %(room)s." -#: participants/templates/current_round/round_adj.html:111 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "%(adjudicator)s est un(e) %(type)s dans le jury à %(room)s." -#: participants/templates/current_round/round_adj.html:117 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "Vous êtes un(e) %(type)s dans le jury à %(room)s." -#: participants/templates/current_round/round_adj.html:121 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "Vous êtes un(e) %(type)s dans le jury à %(room)s." -#: participants/templates/current_round/round_adj.html:129 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "%(adjudicator)s juge le débat à %(room)s." -#: participants/templates/current_round/round_adj.html:133 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "%(adjudicator)s juge le débat à %(room)s." -#: participants/templates/current_round/round_adj.html:139 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "Vous jugez à %(room)s." -#: participants/templates/current_round/round_adj.html:143 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "Vous jugez à %(room)s." -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team against %(opponent)s." msgstr "%(team)s débat comme équipe %(side)s contre %(opponent)s." -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team against %(opponent)s." msgstr "Vous débattez comme équipe %(side)s contre %(opponent)s." -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating against %(opponent)s." msgstr "%(team)s débat contre %(opponent)s." -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating against %(opponent)s." msgstr "Vous débattez contre %(opponent)s." -#: participants/templates/current_round/round_team.html:39 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team." msgstr "%(team)s débat comme équipe %(side)s." -#: participants/templates/current_round/round_team.html:43 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team." msgstr "Vous débattez comme équipe %(side)s." -#: participants/templates/current_round/round_team.html:56 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "%(team)s débat à %(room)s." -#: participants/templates/current_round/round_team.html:60 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "%(team)s débat à %(room)s." -#: participants/templates/current_round/round_team.html:66 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "Votre débattez à %(room)s." -#: participants/templates/current_round/round_team.html:70 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "Vous débattez à %(room)s." -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." msgstr "Ça a l’air qu’il n’y a aucun catégorie d’orateur de défini. Si vous voulez générer des classements basées sur les catégories, tels pour les novices ou FLS, utilisez la page de Catégories d’orateur pour en définir, puis retournez à cette page pour en fixer." -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" msgstr "Retours d’évaluations" -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" msgstr "A présenté une évaluation de %(adjudicator)s" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" msgstr "N’a pas présenté d’évaluation pour un d’entre eux : %(adjudicators)s (celui qui a rendu la décision)" -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" msgstr "N’a pas présenté d’evaluation pour %(adjudicator)s" -#: participants/templates/feedback_progress_panel.html:38 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" msgstr "Plus d’évaluations que prévu pour ce débat :" -#: participants/templates/feedback_progress_panel.html:46 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" msgstr "Évaluation inattendue pour %(adjudicator)s" -#: participants/templates/feedback_progress_panel.html:53 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." msgstr "%(name)s n’a pas d’évaluations à présenter." -#: participants/templates/in_this_round.html:9 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" msgstr "Dans cette Joute (%(round)s)" -#: participants/templates/in_this_round.html:13 +#: participants/templates/in_this_round.html msgid "In This Round" msgstr "Dans cette joute" -#: participants/templates/in_this_round.html:16 +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" msgstr "(Non publié)" -#: participants/templates/in_this_round.html:23 +#: participants/templates/in_this_round.html msgid "Room TBA" msgstr "Salle ÀD" -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." msgstr "%(adjudicator)s ne juge pas cette joute." -#: participants/templates/in_this_round.html:39 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." msgstr "Vous ne jugez pas cette joute." -#: participants/templates/in_this_round.html:54 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." msgstr[0] "Ça parait que %(team)s est dans %(ndebates)s débat cette joute." msgstr[1] "Ça parait que %(team)s est dans %(ndebates)s débats cette joute." -#: participants/templates/in_this_round.html:60 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." msgstr "Si c’est une erreur, veuillez contacter un rapporteur immédiatement." -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." msgstr "%(team)s n'a pas de débat cette joute." -#: participants/templates/in_this_round.html:79 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." msgstr "Vous n'avez pas de débat cette joute." -#: participants/templates/in_this_round.html:91 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." msgstr "Le tirage de cette joute n'est pas encore publié." -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" msgstr "Liste de participants" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" msgstr "Liste d’institutions" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." msgstr "Les courriels ont déjà été envoyés." -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" msgstr "Envoyer enregistrement d’équipe" -#: participants/templates/participants_subnav.html:26 participants/views.py:135 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" msgstr "Noms de code" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" msgstr "Enregistrer les catégories d'orateurs" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" msgstr "Éligibilité d’orateur" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." msgstr "Les catégories d’orateur permet la génération de classements basées sur des catégories, e.g., pour les catégories de novices ou FLS. Sur cette page, vous pouvez les définir. Après les avoir faits, vous pouvez fixer l’éligibilité des orateurs sur la page du même nom." -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." msgstr "Si vous voulez supprimer des catégories d’orateur, utilisez l’aire de modification de la base de données." -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" msgstr "Catégories d'orateurs" -#: participants/templates/team_registration_card.html:16 +#: participants/templates/team_registration_card.html msgid "Team name:" msgstr "Nom d’équipe :" -#: participants/templates/team_registration_card.html:21 +#: participants/templates/team_registration_card.html msgid "Full team name:" msgstr "Nom complet de l'équipe :" -#: participants/templates/team_registration_card.html:25 +#: participants/templates/team_registration_card.html msgid "Short team name:" msgstr "Nom court de l'équipe :" -#: participants/templates/team_registration_card.html:32 +#: participants/templates/team_registration_card.html msgid "Code name:" msgstr "Nom de code :" -#: participants/templates/team_registration_card.html:36 +#: participants/templates/team_registration_card.html msgid "No code name assigned" msgstr "" -#: participants/templates/team_registration_card.html:42 +#: participants/templates/team_registration_card.html msgid "Emoji:" msgstr "Émoji :" -#: participants/templates/team_registration_card.html:46 +#: participants/templates/team_registration_card.html msgid "No emoji assigned" -msgstr "" +msgstr "Aucun émoji attribué" -#: participants/templates/team_registration_card.html:54 +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "Orateurs :" -#: participants/templates/team_registration_card.html:66 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" msgstr "Admissible aux catégories de qualification :" -#: participants/templates/team_registration_card.html:75 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" msgstr "Catégories d'orateurs :" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" msgstr "%(code_name)s (%(real_name)s)" -#: participants/views.py:46 +#: participants/views.py msgid "Adjudicators" msgstr "Juges" -#: participants/views.py:55 +#: participants/views.py msgid "Speakers" msgstr "Orateurs" -#: participants/views.py:86 +#: participants/views.py msgid "Institutions" msgstr "Institutions" -#: participants/views.py:102 +#: participants/views.py msgid "Code" msgstr "Code" -#: participants/views.py:103 +#: participants/views.py msgid "Full name" msgstr "Nom complet" -#: participants/views.py:105 +#: participants/views.py msgid "Region" msgstr "Région" -#: participants/views.py:107 +#: participants/views.py msgid "Teams" msgstr "Équipes" -#: participants/views.py:107 +#: participants/views.py msgid "Number of teams" msgstr "Nombre d’équipes" -#: participants/views.py:109 +#: participants/views.py msgid "Adjs" msgstr "Juges" -#: participants/views.py:110 +#: participants/views.py msgid "Number of adjudicators, excluding independents" msgstr "Nombre de juges moins ceux indépendants" -#: participants/views.py:112 +#: participants/views.py msgid "IAs" msgstr "JIs" -#: participants/views.py:113 +#: participants/views.py msgid "Number of independent adjudicators" msgstr "Nombre de juges indépendants" -#: participants/views.py:143 +#: participants/views.py msgid "Code name" msgstr "Nom de code" -#: participants/views.py:163 +#: participants/views.py msgid "Team Registration" msgstr "Enregistrement d’équipe" -#: participants/views.py:231 +#: participants/views.py msgid "Results" msgstr "Résultats" -#: participants/views.py:239 participants/views.py:264 +#: participants/views.py #, python-format msgid "Record for %(name)s" msgstr "Résumé pour %(name)s" -#: participants/views.py:261 +#: participants/views.py msgid "Previous Rounds" msgstr "Tours précédents" -#: participants/views.py:352 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" msgstr[0] "Sauvegardé catégorie : %(list)s" msgstr[1] "Sauvegardé catégories : %(list)s" -#: participants/views.py:358 +#: participants/views.py msgid "No changes were made to the categories." msgstr "Aucun modification n’a été faite aux catégories." -#: participants/views.py:371 +#: participants/views.py msgid "Speaker Category Eligibility" msgstr "Éligibilité dans les catégories d’orateur" diff --git a/tabbycat/printing/locale/fr/LC_MESSAGES/django.po b/tabbycat/printing/locale/fr/LC_MESSAGES/django.po index 9855621f65c..8b6b9862333 100644 --- a/tabbycat/printing/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 23:29\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-12 15:51\n" "Last-Translator: philip_tc\n" "Language-Team: French\n" "Language: fr_FR\n" @@ -18,109 +18,108 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" msgstr "Formulaires d'évaluation" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" msgstr "Formulaires d'évaluation imprimables pour %(round)s" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." msgstr "Aucune question n’a été ajoutée pour ni les équipes ni les juges à répondre." -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." msgstr "Aucune question n’a été ajoutée pour les équipes à répondre." -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." msgstr "Aucune question n’a été ajoutée pour les juges à répondre." -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." -msgstr "%(first_sentence)s Vérifiez la documentation pour des renseignements à comment en ajouter (autrement les formulaires seront plutôt vides)" +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgstr "%(first_sentence)s Vérifiez la documentation pour des renseignements à comment en ajouter (autrement ces formulaires seront plutôt vides)." -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" msgstr "Aucun page d'évaluation n’est disponible — les juges n’ont-ils pas été encore alloués ?" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "Utilisez Ctrl-P pour imprimer ou sauvegarder en PDF. Assurez-vous d’avoir mis l’orientation de page appropriée, d’avoir désactivé les en-têtes/pieds de page et d’avoir activé les graphiques de fond. Ça fonctionne le mieux dans Chrome." -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" msgstr "URLs de %(sheet)s imprimables" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." -msgstr "Cette page est conçu pour être imprimé comme feuilles A4 recto-verso, avec un côté qui montre le nom du participant et l’autre son URL. Utilisez Ctrl-P pour imprimer ; pour les meilleurs résultats utilisez Chrome." +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +msgstr "Cette page est conçue pour être imprimée comme des feuilles A4 recto verso, avec un côté qui montre le nom du participant et l’autre son URL. Utilisez Ctrl-P pour imprimer ; pour les meilleurs résultats, utilisez Chrome." -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" msgstr "URL privée pour %(name)s (%(group)s)" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" msgstr "Ajoutez cette page à vos favoris, vous l’utiliseriez pour saisir des formulaires au fur du tournoi :" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" msgstr "Bulletins Imprimables" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" msgstr "pour %(round)s" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" msgstr "Modifier Motion(s)" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" msgstr "Il n’y a aucune feuilles de note disponible — la joute n’a-t-elle pas encore de tirage ?" -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" msgstr "Modifier motions de la feuille" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "×" -#: printing/templates/scoresheet_list.html:47 +#: printing/templates/scoresheet_list.html msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." msgstr "Les motions ajoutés ici ne sont pas permanent, ils vont seulement mettre à jour le texte utilisé dans les feuilles imprimés si-dessous. C'est utile si vous utilisez des motions substituts (pour la confidentialité), mais vous voulez imprimer les feuilles avec les motions correctes." -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "Motion" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" msgstr "Les changements aux motions seront mises à jour automatiquement dans les feuilles affichés" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." msgstr "Les discours sont de x minutes, l'étendu des scores d'orateur est de x à x. Vous avez x minutes pour le jugement." -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" msgstr "Note globale" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" msgstr "Non-affilié" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "Équipe" diff --git a/tabbycat/privateurls/locale/fr/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/fr/LC_MESSAGES/django.po index 754f57b7b2b..b7e4d79a66a 100644 --- a/tabbycat/privateurls/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 05:45\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-12 15:51\n" "Last-Translator: philip_tc\n" "Language-Team: French\n" "Language: fr_FR\n" @@ -18,169 +18,162 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" msgstr "Gestion des URLs privées" -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:145 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" msgstr "URLs Privées" -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." msgstr "Les URLs privées pour la saisie de feuilles ou d'évaluation des participants sont données en dessous." -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" msgstr "Les URLs privées sont utilisées pour permettre aux participants de saisir les feuilles ou les évaluations en ligne. Vous devriez les utiliser si vous avez des moyens à distribuer ces URLs fous aux participants tout en étant concerné de fraude si les pages étaient accessible publiquement où qui que ce soit peut saisir n’importe formulaire. Les URLs auront l’air comme :" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." -msgstr "N’importe qui avec l’URL peut accéder à la page de saisie de données pertinente. L’idée est qu’il est dur de deviner une autre clé (le texte ayant l’air aléatoire), donc vous devriez vous assurer que les URLs soient accessibles seulement au participant en question. Lisez davantage à propos des URLs privées." +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +msgstr "N’importe qui avec l’URL peut accéder à la page de saisie de données pertinentes. L’idée est qu’il est dur de deviner une autre clé (le texte ayant l’air aléatoire), donc vous devriez vous assurer que les URLs soient accessibles seulement au participant en question. Lisez davantage à propos des URLs privées." -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." msgstr "Ni la saisie des feuilles, ni des évaluations, ni l’enregistrement ne sont configurés à être saisis par des URLs privées. Les URLs générés n’auront aucun valeur tant que ces options ne sont pas mis accordement dans la page de configuration du tournoi." -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." msgstr "Il n'y a aucune URL privée." -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" msgstr "Générer les URLs privées" -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" msgstr "Voir les URLs" -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" msgstr "Imprimer les URL des équipes" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" msgstr "Imprimer les URL des juges" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." msgstr "Tous les participants ont déjà été envoyés leurs URLs privées." -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" msgstr "Envoyer les URLs" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." msgstr "Ce bouton ne générera les URLs privées que pour les participants qui n'en ont pas déjà un." -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" msgstr "Générer URLs" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." msgstr "Tous les participants ont déjà leurs URLs privées." -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" msgstr "URL privée" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" msgstr "pour %(name)s" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "(%(team)s)" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "Cette URL est personnalisée pour vous, %(name)s. Ne le partagez pas avec qui que se soit ; n’importe qui connait cette URL peut saisir des feuilles et des évaluations de débats en votre nom. Vous pouvez ajouter cette page à vos favoris et y retourner après chaque débat pour les options disponibles." -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" msgstr "Révoquer l’enregistrement de %(check_time)s" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" msgstr "Enregistrer" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" msgstr "Vous vous êtes enregistré à %(check_time)s" -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." msgstr "Vous n’êtes pas actuellement enregistré." -#: privateurls/templates/public_url_landing.html:62 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Submit Ballot for %(round)s" msgstr "Saisir feuille pour %(round)s" -#: privateurls/templates/public_url_landing.html:65 -msgid "There are no current rounds" -msgstr "Il n'y a pas de joute actuelle" - -#: privateurls/templates/public_url_landing.html:71 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" msgstr "Saisir Évaluations" -#: privateurls/templates/public_url_landing.html:84 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" msgstr "Enregistrement (%(name)s)" -#: privateurls/views.py:63 privateurls/views.py:164 +#: privateurls/views.py msgid "no URL" msgstr "pas de URL" -#: privateurls/views.py:76 +#: privateurls/views.py msgid "URL" msgstr "URL" -#: privateurls/views.py:87 +#: privateurls/views.py msgid "Speakers" msgstr "Orateurs" -#: privateurls/views.py:97 +#: privateurls/views.py msgid "Adjudicators" msgstr "Juges" -#: privateurls/views.py:119 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." msgstr "Tous les participants ont déjà leurs URLs privées. Si vous voulez les imprimer, utilisez la zone de modifications de la base de données." -#: privateurls/views.py:126 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." msgstr[0] "Une URL privée à été généré pour %(nblank_people)d personne." msgstr[1] "Des URLs privées ont été générés pour %(nblank_people)d personnes." -#: privateurls/views.py:131 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." msgstr[0] "L’URL privée n’est pas modifiée pour %(nexisting_people)d personne." msgstr[1] "Les URLs privées ne sont pas modifiées pour %(nexisting_people)d personnes." -#: privateurls/views.py:172 +#: privateurls/views.py msgid "URL Key" msgstr "Clé d'URL" -#: privateurls/views.py:181 +#: privateurls/views.py msgid "Debates" msgstr "Débats" diff --git a/tabbycat/results/locale/fr/LC_MESSAGES/django.po b/tabbycat/results/locale/fr/LC_MESSAGES/django.po index ec7e9ddb3e4..88ef5f16bad 100644 --- a/tabbycat/results/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2022-08-08 17:01\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 15:51\n" "Last-Translator: philip_tc\n" "Language-Team: French\n" "Language: fr_FR\n" @@ -18,891 +18,885 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 948\n" -#: results/admin.py:44 +#: results/admin.py +msgid "Resave results" +msgstr "Re-sauvegarder résultats" + +#: results/admin.py #, python-format msgid "Resaved results for %(count)d ballot submission." msgid_plural "Resaved results for %(count)d ballot submissions." msgstr[0] "Re-sauvegardé les résultats pour %(count)d soumission de feuille." msgstr[1] "Re-sauvegardé les résultats pour %(count)d soumissions de feuille." -#: results/admin.py:47 -msgid "Resave results" -msgstr "Re-sauvegarder résultats" - -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:158 +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" msgstr "Résultats" -#: results/forms.py:39 +#: results/forms.py msgid "Tournament password" msgstr "Mot de passe du tournoi" -#: results/forms.py:45 +#: results/forms.py msgid "That password isn't correct." msgstr "Ce n'est pas le bon mot de passe." -#: results/forms.py:77 +#: results/forms.py msgid "Please enter a whole number." msgstr "Veuillez saisir un nombre entier." -#: results/forms.py:79 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." msgstr "Veuillez saisir un multiple de %s." -#: results/forms.py:166 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." msgstr "L'ensemble de feuilles ne peut pas être rejeté et confirmé." -#: results/forms.py:173 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." msgstr "Le statut du débat ne peut pas être confirmé sauf qu'une des ensembles de feuilles est confirmé." -#: results/forms.py:302 results/forms.py:336 +#: results/forms.py msgid "---------" msgstr "---------" -#: results/forms.py:304 results/forms.py:306 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" msgstr "%(aff_team)s était l'affirmatif, %(neg_team)s était le négatif" -#: results/forms.py:323 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" msgstr "Veto de motion de %(side)s" -#: results/forms.py:332 results/forms.py:901 +#: results/forms.py #, python-format msgid "%(team)s (%(side)s)" msgstr "%(team)s (%(side)s)" -#: results/forms.py:335 +#: results/forms.py msgid "Winner" msgstr "Gagnant" -#: results/forms.py:489 +#: results/forms.py msgid "Mark as a duplicate speech" msgstr "Marquer comme discours en double" -#: results/forms.py:549 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." msgstr "Il semble que l'orateur %(speaker)s ne fasse pas partie de l'équipe %(team)s." -#: results/forms.py:563 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." msgstr[0] "Il semble que %(speaker)s ait prononcé %(count)d discours substantif." msgstr[1] "Il semble que %(speaker)s ait prononcé %(count)d discours substantifs." -#: results/forms.py:580 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." msgstr "Le dernier orateur et l'orateur de réplique ne peuvent pas être la même personne." -#: results/forms.py:587 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." msgstr "L'orateur de réplique pour cette équipe n'a pas prononcé un discours substantif." -#: results/forms.py:719 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." msgstr "Les scores total pour les deux équipes sont les mêmes (c'est-à-dire, un nul)." -#: results/forms.py:724 +#: results/forms.py msgid "The declared winner does not correspond to the team with the highest score." msgstr "Le gagnant déclaré ne correspond pas avec celui avec la plus haute note." -#: results/forms.py:733 +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" msgstr "Les scores total pour ces équipes sont les mêmes : %(teams)s" -#: results/forms.py:743 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "La marge (%(margin).1f) excède la marge maximale admissible (%(max_margin).1f)." -#: results/forms.py:846 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." msgstr "Les scores totals pour les équipes sont les mêmes (c'est-a-dire, un nul) pour le/la juge %(adjudicator)s." -#: results/forms.py:851 +#: results/forms.py #, python-format msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." msgstr "Le gagnant déclaré ne correspond pas avec celui avec la plus haute note pour le juge %(adjudicator)s." -#: results/forms.py:859 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "La marge (%(margin).1f) dans la feuille du/de la juge %(adjudicator)s excède la marge maximale admissible (%(max_margin).1f)." -#: results/forms.py:921 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." msgstr "Les côtés de ce débat ne sont pas confirmés. Vous ne pouvez pas enregistrer un résultat pour ce débat jusqu'à ce que les côtés aient été confirmées dans le tirage." -#: results/forms.py:964 +#: results/forms.py #, python-format msgid "There must be exactly %(n)d team advancing." msgid_plural "There must be exactly %(n)d teams advancing." msgstr[0] "Il faut qu'il y ait exactement %(n)d équipe avançante." msgstr[1] "Il faut qu'il y ait exactement %(n)d équipes avançantes." -#: results/forms.py:1007 +#: results/forms.py msgid "There must be exactly 1 team advancing." msgstr "Il faut qu'il y ait exactement une équipe avançante." -#: results/models.py:33 +#: results/models.py msgid "Tab room" msgstr "Salle de tabulation" -#: results/models.py:34 +#: results/models.py msgid "Public" msgstr "Publique" -#: results/models.py:38 +#: results/models.py msgid "timestamp" msgstr "horodatage" -#: results/models.py:40 +#: results/models.py msgid "version" msgstr "version" -#: results/models.py:42 +#: results/models.py msgid "submitter type" msgstr "type d'auteur" -#: results/models.py:44 +#: results/models.py msgid "confirmed" msgstr "vérifié" -#: results/models.py:48 +#: results/models.py msgid "from private URL" -msgstr "" +msgstr "à partir d'URL privée" -#: results/models.py:51 +#: results/models.py msgid "from participant" msgstr "du participant" -#: results/models.py:56 +#: results/models.py msgid "submitter" msgstr "auteur" -#: results/models.py:59 +#: results/models.py msgid "confirmer" msgstr "vérifieur" -#: results/models.py:61 +#: results/models.py msgid "confirm timestamp" msgstr "horodatage de confirmation" -#: results/models.py:63 +#: results/models.py msgid "IP address" msgstr "adresse IP" -#: results/models.py:103 +#: results/models.py msgid "A tab room ballot must have a user associated." msgstr "Une feuille de la salle de tab doit avoir un utilisateur associé." -#: results/models.py:111 +#: results/models.py msgid "debate" msgstr "débat" -#: results/models.py:113 +#: results/models.py msgid "motion" msgstr "motion" -#: results/models.py:115 +#: results/models.py msgid "discarded" msgstr "rejeté" -#: results/models.py:117 +#: results/models.py msgid "single adjudicator" -msgstr "" +msgstr "juge seul" -#: results/models.py:118 +#: results/models.py msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." msgstr "" -#: results/models.py:123 results/models.py:228 results/models.py:267 -#: results/models.py:305 results/models.py:347 +#: results/models.py msgid "ballot submission" msgstr "soumission de feuille" -#: results/models.py:124 +#: results/models.py msgid "ballot submissions" msgstr "soumissions de feuille" -#: results/models.py:143 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" msgstr "Le débat est dans la joute %(round)d mais la motion (%(motion)s) vient de la joute %(motion_round)d" -#: results/models.py:150 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" msgstr "une feuille ne peut pas être rejeté et confirmé !" -#: results/models.py:230 results/models.py:269 +#: results/models.py msgid "debate adjudicator" msgstr "débat-adjudicateur" -#: results/models.py:232 results/models.py:271 results/models.py:307 -#: results/models.py:349 +#: results/models.py msgid "debate team" msgstr "débat-équipe" -#: results/models.py:235 results/models.py:312 +#: results/models.py msgid "win" msgstr "victoire" -#: results/models.py:237 results/models.py:314 +#: results/models.py msgid "margin" msgstr "marge" -#: results/models.py:239 results/models.py:272 results/models.py:316 -#: results/models.py:352 +#: results/models.py msgid "score" msgstr "note" -#: results/models.py:244 +#: results/models.py msgid "team score by adjudicator" msgstr "note d'équipe par juge" -#: results/models.py:245 +#: results/models.py msgid "team scores by adjudicator" msgstr "notes d'équipe par juge" -#: results/models.py:260 results/models.py:294 +#: results/models.py msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." msgstr "La débat-équipe, le débat-adjudicateur et la soumission de feuille doivent tous concerner le même débat." -#: results/models.py:273 results/models.py:353 +#: results/models.py msgid "position" msgstr "position" -#: results/models.py:279 +#: results/models.py msgid "speaker score by adjudicator" msgstr "score de discours par adjudicateur" -#: results/models.py:280 +#: results/models.py msgid "speaker scores by adjudicator" msgstr "scores de discours par adjudicateur" -#: results/models.py:310 +#: results/models.py msgid "points" msgstr "points" -#: results/models.py:318 +#: results/models.py msgid "votes given" msgstr "voix reçues" -#: results/models.py:320 +#: results/models.py msgid "votes possible" msgstr "voix possibles" -#: results/models.py:324 +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py msgid "team score" msgstr "score d'équipe" -#: results/models.py:325 +#: results/models.py msgid "team scores" msgstr "scores d'équipe" -#: results/models.py:351 +#: results/models.py msgid "speaker" msgstr "orateur" -#: results/models.py:355 +#: results/models.py msgid "ghost" msgstr "fantôme" -#: results/models.py:356 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." msgstr "Si c'est coché, cette score ne comptera pas pour le tab d'orateurs. Ce champ est typiquement coché pour les discours où un orateur a parlé plus d'une fois afin de compenser le discours d'un coéquipier absent (parfois appelé un discours « iron-person » ou « iron-man »)." -#: results/models.py:365 +#: results/models.py msgid "speaker score" msgstr "score de discours" -#: results/models.py:366 +#: results/models.py msgid "speaker scores" msgstr "scores de discours" -#: results/models.py:375 +#: results/models.py msgid "The debate team and speaker must be from the same team." msgstr "La débat-équipe et l'orateur doivent être de la même équipe." -#: results/models.py:378 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." msgstr "La soumission de feuille et la débat-équipe doivent concerner le même débat." -#: results/tables.py:15 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" msgstr "Si la feuille pour ce débat à été enregistré" -#: results/tables.py:36 +#: results/tables.py msgid "Status of this debate's ballot" msgstr "Statut de la feuille de ce débat" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" msgstr "Affichage du tirage" -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" msgstr "Enregistrer des feuilles" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" msgstr "Orateurs-seuls récents" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" msgstr "Équipes qui ont récemment manqué un orateur" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" msgstr "Un orateur de %(team)s a fait plusieurs discours dans la joute précédente" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the current round" msgstr "Un orateur de %(team)s a fait plusieurs discours dans la joute actuelle" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" msgstr "Aucun cas connu dans la joute actuelle ou précédente" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" msgstr "Achever la Joute" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." msgstr "Cette page se met à jour à fur et à mesure qu’ils arrivent. Vous devriez, par contre, rafraichir la page lorsque toutes les feuilles soit confirmés pour achever la joute." -#: results/templates/admin_results.html:88 +#: results/templates/admin_results.html #, python-format msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." msgstr[0] "Le débat suivant semble avoir des bulletins de note par des stagiaires : %(debates_list)s." msgstr[1] "Les %(ndebates)s débats suivants semble avoir des bulletins de note par des stagiaires : %(debates_list)s." -#: results/templates/admin_results.html:94 +#: results/templates/admin_results.html #, python-format msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." msgstr "Ceci peut se produire si vous dégradez un panelliste à stagiaire après qu'un résultat a été saisie pour le débat. Ça indique donc qu'il pourrait avoir une incohérence dans les données des résultats, qui peut produire des problèmes inattendus ou faire planter. Allez modifier la base de données pour supprimer les objets scores d'orateur par juge problématiques, puis de re-enregistrer le résultat du débat ici." -#: results/templates/admin_results.html:113 +#: results/templates/admin_results.html msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." msgstr "" -#: results/templates/admin_results.html:127 +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." msgstr "La configuration de ce tournoi spécifie Parlementaire britannique avec une feuille par juge votant . Cette combinaison n'est pas possible: les tournois BP doivent utiliser les feuilles par consensus. Les résultats ne peuvent pas être saisis tant que cette configuration est en place. Veuillez réviser la configuration de ce tournoi avant d'essayer de saisir les résultats." -#: results/templates/admin_results.html:135 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." msgstr "Aucune motion n'est actuellement entrée pour ce tour, donc les résultats ne peuvent pas être saisis. Ajouter des motions." -#: results/templates/admin_results.html:144 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." msgstr "La configuration du tournoi permet aux feuilles d’être saisis par les juges. Le tirage doit être publié avant qu’ils puissent le faire pour cette joute." -#: results/templates/admin_results.html:151 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." msgstr "La configuration du tournoi permet aux évaluations d’être saisis par les juges. Le tirage doit être publié avant qu’ils puissent le faire pour cette joute." -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:12 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" msgstr "Retourner à tous les résultats" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:17 -#: results/templates/ballot_entry_base.html:21 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" msgstr "Créer un nouveau ensemble de feuilles pour ce débat" -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." msgstr "Vous ne pouvez pas confirmer cet ensemble de feuilles, parce que vous l'avez saisi." -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html msgid "Confirm results" msgstr "Confirmer résultat" -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" msgstr "Résultat est incorrect" -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:68 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." msgstr "Des courriels seront envoyés quand la feuille soit confirmé." -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 results/views.py:513 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" msgstr "Saisie des résultats" -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "Cette page est mis à jour automatiquement avec les nouveaux feuilles et enregistrements au fur et à mesure qu’ils viennent." -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." msgstr "La configuration de ce tournoi spécifie Parlementaire britannique avec une feuille par juge votant . Cette combinaison n'est pas possible: les tournois BP doivent utiliser les feuilles par consensus. Les résultats ne peuvent pas être saisis tant que cette configuration est en place. Veuillez demander à un administrateur de changer cette configuration." -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "Aucune motion n'est actuellement entrée pour ce tour, donc les résultats ne peuvent pas être saisis. Veuillez demander à un administrateur d'ajouter des motions." -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." msgstr[0] "Un débat n’a pas confirmé les côtés. Les résultats pour ce débat ne peuvent être saisis jusqu’à temps que la répartition soit confirmé." msgstr[1] "%(ndebates)s débats n’ont pas confirmé les côtés. Les résultats pour ces débats ne peuvent être saisis jusqu’à temps que les répartitions soit confirmés." -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr[0] "Un débat a un jury avec un nombre pair de juges votants. Si le jury a une impasse, la victoire sera décidé par le président." msgstr[1] "%(num_even_panel)s débats ont des jurys avec un nombre pair de juges votants. Si les jurys ont une impasse, les victoires seront décidés par les présidents." -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" msgstr "Informations concernant le débat" -#: results/templates/ballot/ballot_debate_info.html:42 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" msgstr "Aucun orateur n’a fait plusieurs discours" -#: results/templates/ballot/ballot_debate_info.html:45 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" msgstr "Un orateur a fait plusieurs discours" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" msgstr "Résultat" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "Classement" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" msgstr "Marge" -#: results/templates/ballot/ballot_set.html:6 +#: results/templates/ballot/ballot_set.html msgid "There are some problems with this scoresheet. Please review and correct them." msgstr "Cette feuille de jugement a des problèmes. Veuillez les examiner et les corriger." -#: results/templates/ballot/ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s (%(institution)s)" msgstr "Feuille de %(name)s (%(institution)s)" -#: results/templates/ballot/ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s" msgstr "Feuille de %(name)s" -#: results/templates/ballot/ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html msgid "Scoresheet" msgstr "Feuille de jugement" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Solo Chair" msgstr "Président Seul" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Chair" msgstr "Président" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Panellist" msgstr "Membre" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Trainee" msgstr "Stagiaire" -#: results/templates/ballot/ballot_set.html:44 +#: results/templates/ballot/ballot_set.html msgid "Assign sides before entering scores" msgstr "Attribuez les côtés avant de saisir les scores" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." -msgstr "Les discours en double n'apparaissent pas dans le tab des orateurs. Si un orateur fait un « iron-man », en général vous ne marqueriez que le moindre de leurs scores comme doublon." +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." +msgstr "" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "There is %(number)s existing ballot set for this debate." msgid_plural "There are %(number)s existing ballot sets for this debate." msgstr[0] "Il y a %(number)s ensemble de feuilles existant pour ce débat." msgstr[1] "Il y a %(number)s ensembles de feuilles existants pour ce débat." -#: results/templates/ballot/other_ballots_list.html:21 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." msgstr "Cet ensemble de feuilles est confirmé." -#: results/templates/ballot/other_ballots_list.html:26 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." msgstr "Ce feuille est rejeté." -#: results/templates/ballot/other_ballots_list.html:41 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" msgstr "VOUS LE CONSULTEZ ACTUELLEMENT" -#: results/templates/ballot/other_ballots_list.html:45 +#: results/templates/ballot/other_ballots_list.html msgid "MERGING" msgstr "EN FUSION" -#: results/templates/ballot/other_ballots_list.html:48 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," msgstr "Version %(version)s," -#: results/templates/ballot/other_ballots_list.html:53 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," msgstr "saisi par %(submitter)s," -#: results/templates/ballot/other_ballots_list.html:58 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from %(adjudicator)s's private URL," msgstr "soumis depuis l'URL privée de %(adjudicator)s," -#: results/templates/ballot/other_ballots_list.html:62 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," msgstr "soumis de la formulaire publique de %(ip_address)s," -#: results/templates/ballot/other_ballots_list.html:68 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," msgstr "%(timestamp)s (il y a %(timeago)s)," -#: results/templates/ballot/other_ballots_list.html:73 +#: results/templates/ballot/other_ballots_list.html msgid "unknown" msgstr "inconnu" -#: results/templates/ballot/other_ballots_list.html:74 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "confirmed by %(confirmer)s" msgstr "confirmé par %(confirmer)s" -#: results/templates/ballot/other_ballots_list.html:78 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" msgstr "non confirmé" -#: results/templates/ballot/other_ballots_list.html:82 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" msgstr "(rejeté)" -#: results/templates/ballot/other_ballots_list.html:86 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" msgstr[0] "(identique à version %(others)s)" msgstr[1] "(identique à versions %(others)s)" -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." msgstr "Cet interface de saisie de feuille de jugement est encore en bêta, s'il y a des problèmes la version plus vielle est disponible ici." -#: results/templates/ballot_entry_base.html:30 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr "Ce débat a un jury avec un nombre pair de juges avec droit de vote. Si les juges sont divisés de manière égale entre les équipes, la victoire sera attribuée à l'équipe pour laquelle le/la président(e) a voté." -#: results/templates/ballot_entry_base.html:41 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." msgstr "%(team)s avait des orateurs qui ont fait plusieurs discours lors de la dernière joute. SVP vérifiez minutieusement la feuille pour s’assurer que c’est encore le cas. Si ce l’est encore, assurez-vous que la feuille le reflète." -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" msgstr "Feuille par le président %(chair)s" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" msgstr "Feuille, aucun président" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" msgstr "Faute avec le champ d’orateur du %(pos)s : %(error)s" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" msgstr "Faute avec le champ d’orateur dupliqué du %(pos)s : %(error)s" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" msgstr "Faute avec le champ de note du %(pos)s : %(error)s" -#: results/templates/debate_postponement_form.html:3 +#: results/templates/debate_postponement_form.html msgid "Postponed" msgstr "Reporté" -#: results/templates/debate_postponement_form.html:8 +#: results/templates/debate_postponement_form.html msgid "Postpone" msgstr "Reporter" -#: results/templates/enter_results.html:15 +#: results/templates/enter_results.html msgid "Ballot Status" msgstr "État de feuille" -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" msgstr "seulement l’ensemble de feuilles confirmé affectera le résultat de ce débat" -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" msgstr "Statut de débat" -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" msgstr "tous les débats doivent être confirmés pour achever la joute" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" msgstr "Enregistrer feuille" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" msgstr "Annuler" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "Cette URL est personnalisée pour vous, %(name)s. Ne le partagez pas avec qui que se soit ; n’importe qui connait cette URL peut saisir des feuilles et des évaluations de débats en votre nom. Vous pouvez ajouter cette page à vos favoris et y retourner après chaque débat pour les options disponibles." -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." msgstr "Cette page est fourni pour vous permettre, %(name)s, pour vérifier votre bulletin de note. Vous ne devez pas partager cette page avec qui que se soit. Partager cette URL permettra autres d'accéder à tous les actions de votre page privée." -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" msgstr "Feuille non-disponible" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." msgstr "Retour vers votre page privée." -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" msgstr "Saisir feuille" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" msgstr "Qui êtes-vous ?" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" msgstr "(cliquez sur votre nom sur cette liste)" -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." msgstr "Le tirage et/ou les motions de %(round)s ne sont pas encore publiées." -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" msgstr "Feuille pour %(matchup)s" -#: results/templates/public_ballot_set.html:28 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" msgstr "%(round)s @ %(room)s" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" msgstr "Retour à la page d'accueil" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" msgstr "Retour aux résultats de %(round)s" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "Motion" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" msgstr "De %(name)s (%(institution)s)" -#: results/templates/public_ballot_set.html:92 -#: results/templates/public_ballot_set.html:96 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" msgstr "Total pour %(name)s (%(side)s)" -#: results/templates/public_ballot_set.html:105 -#: results/templates/public_ballot_set.html:109 +#: results/templates/public_ballot_set.html #, python-format msgid "%(name)s (%(side)s)" msgstr "%(name)s (%(side)s)" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Won" msgstr "Gagné" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Lost" msgstr "Perdu" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set_error.html #, python-format msgid "Back to the tournament home page." msgstr "Retour à la page d’accueil du tournoi." -#: results/templates/public_enter_results.html:9 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" msgstr "%(adjudicator)s, notez que vous devez saisir tous les feuilles de votre jury, non seulement votre propre feuille !" -#: results/templates/public_enter_results.html:16 +#: results/templates/public_enter_results.html msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." msgstr "" -#: results/templates/public_enter_results.html:24 +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." msgstr[0] "Cette formulaire a été déjà soumise une fois. Veuillez contacter un officiel de tab après avoir soumis votre formulaire." msgstr[1] "Cette formulaire a déjà été soumise %(nsubmissions)s fois. Veuillez contacter un officiel de tab après avoir soumis votre formulaire." -#: results/templates/public_enter_results.html:63 -msgid "Submit Ballot(s)" -msgstr "Soumettre Feuille(s)" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" +msgstr[1] "" -#: results/templates/public_enter_results.html:65 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "En envoyant cette formulaire votre adresse IP sera stocké pour le journal d’évènements." -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" msgstr "Aucun résultat à saisir (%(adjudicator)s)" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" msgstr "Aucun résultat à saisir" -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" msgstr "Voir par équipe" -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" msgstr "Voir par débat" -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" msgstr "Résultats de %(round)s" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" msgstr "Résultats non-disponibles" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." msgstr "Les résultats pour %(round)s ne sont pas encore disponibles." -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." msgstr "%(round)s est une joute silencieuse." -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" msgstr "Aucune feuille" -#: results/utils.py:19 +#: results/utils.py msgid "Debate was Postponed" msgstr "Débat Reporté" -#: results/utils.py:20 +#: results/utils.py msgid "Ballot is Unconfirmed" msgstr "Feuille n'est pas confirmé" -#: results/utils.py:21 +#: results/utils.py msgid "Ballot is Confirmed" msgstr "Feuille est Confirmé" #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:36 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" msgstr "%(team)s comme %(side)s" -#: results/utils.py:43 +#: results/utils.py #, python-format msgid "%(team)s (%(side)s) won" msgstr "%(team)s (%(side)s) a gagné" #. Translators: The team here is the losing team -#: results/utils.py:45 +#: results/utils.py #, python-format msgid "vs %(team)s (%(side)s)" msgstr "contre %(team)s (%(side)s)" -#: results/utils.py:47 +#: results/utils.py #, python-format msgid "Advancing: %(advancing_list)s
    " msgstr "Avançants: %(advancing_list)s
    " -#: results/utils.py:50 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" msgstr "Éliminés: %(eliminated_list)s" -#: results/utils.py:58 +#: results/utils.py #, python-format msgid "1st: %(first_team)s
    " msgstr "1er: %(first_team)s
    " -#: results/utils.py:59 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" @@ -911,190 +905,190 @@ msgstr "2ème : %(second_team)s
    \n" "3ème : %(third_team)s
    \n" "4ème : %(fourth_team)s" -#: results/utils.py:74 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" msgstr "Erreur dans résultat de %(debate)s" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:134 +#: results/utils.py msgid "PM" msgstr "PM" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:136 +#: results/utils.py msgid "DPM" msgstr "VPM" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:138 +#: results/utils.py msgid "LO" msgstr "CO" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:140 +#: results/utils.py msgid "DLO" msgstr "VCO" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:142 +#: results/utils.py msgid "MG" msgstr "MG" #. Translators: Abbreviation for Government Whip -#: results/utils.py:144 +#: results/utils.py msgid "GW" msgstr "WG" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:146 +#: results/utils.py msgid "MO" msgstr "MO" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:148 +#: results/utils.py msgid "OW" msgstr "WO" -#: results/utils.py:168 +#: results/utils.py msgid "Reply" msgstr "Sommaire" -#: results/views.py:270 results/views.py:272 +#: results/views.py msgid " vs " msgstr " vs " -#: results/views.py:273 +#: results/views.py #, python-format msgid "%(matchup)s: %(round)s @ %(room)s" -msgstr "" +msgstr "%(matchup)s : %(round)s @ %(room)s" -#: results/views.py:275 +#: results/views.py msgid "N/A" msgstr "S/O" -#: results/views.py:408 +#: results/views.py msgid "New Ballot Set" -msgstr "" +msgstr "Nouvel ensemble de feuilles" -#: results/views.py:411 +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." msgstr "Un ensemble de feuilles pour %(debate)s a été ajouté." -#: results/views.py:413 results/views.py:480 +#: results/views.py msgid " Email receipts queued to be sent." msgstr " Reçus en courriel de feuilles en file pour être envoyés." -#: results/views.py:427 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." msgstr "Oups ! Le débat %(debate)s n'a pas de président, donc vous ne pouvez pas saisir un résultat pour cela." -#: results/views.py:433 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." msgstr "Oups ! Les côtés dans le débat %(debate)s ne sont pas confirmés, donc vous ne pouvez pas saisir un résultat pour cela." -#: results/views.py:459 +#: results/views.py msgid "Edit Ballot Set" -msgstr "" +msgstr "Modifier ensemble de feuilles" -#: results/views.py:473 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." msgstr "L'ensemble de feuilles pour %(matchup)s est rejeté." -#: results/views.py:475 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." msgstr "L'ensemble de feuilles pour %(matchup)s est confirmé." -#: results/views.py:477 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." msgstr "Les modifications à l'ensemble de feuilles de %(matchup)s a été enregistrées." -#: results/views.py:528 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." msgstr "Merci, %(user)s! Votre feuille pour %(debate)s a été enregistrée." -#: results/views.py:535 +#: results/views.py msgid "The draw for this round hasn't been released yet." msgstr "Le tirage de cette joute n'est pas encore publié." -#: results/views.py:539 +#: results/views.py msgid "The motions for this round haven't been released yet." msgstr "Les motions de cette joute ne sont pas encore publiées." -#: results/views.py:544 +#: results/views.py msgid "It looks like you don't have a debate this round." msgstr "Il semble que vous n'ayez pas de débat cette joute." -#: results/views.py:546 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." msgstr "Il semble que vous soyez attribué à plusieurs débats cette joute. Veuillez contacter un rapporteur." -#: results/views.py:573 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." msgstr "Votre débat n'a pas de président, donc il n'est pas possible de saisir son résultat. Veuillez contacter un rapporteur." -#: results/views.py:578 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." msgstr "Il semble que les côtés de ce débat ne soient pas encore confirmés, donc il n'est pas encore possible de saisir son résultat. Veuillez contacter un rapporteur." -#: results/views.py:689 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." msgstr "Il semble que vous soyez assigné à deux débats ou plus. Veuillez contacter un officiel." -#: results/views.py:707 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." msgstr "Le débat est dans %s, ce qui est une joute silencieuse." -#: results/views.py:710 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." msgstr "Le débat est dans %s, les résultats pour lequel n’est pas encore disponible." -#: results/views.py:714 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." msgstr "Le résultat pour le débat %s n’est pas confirmé." -#: results/views.py:717 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." msgstr "Le débat %s n’a pas de feuille confirmé." -#: results/views.py:739 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." msgstr "Il n'y a pas encore de résultat pour le débat %s." -#: results/views.py:805 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" msgstr "Ajouter résultat par %(adjudicator)s" -#: results/views.py:809 +#: results/views.py msgid "Adjudicator" msgstr "Juge" -#: results/views.py:846 +#: results/views.py msgid "Merge Ballots" -msgstr "" +msgstr "Fusionner feuilles" -#: results/views.py:877 +#: results/views.py msgid "The speaking order in the ballots is inconsistent, so could not be merged." msgstr "" -#: results/views.py:879 +#: results/views.py msgid "Duplicate speeches are marked inconsistently, so could not be merged." msgstr "" -#: results/views.py:880 +#: results/views.py #, python-format msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." msgstr "" diff --git a/tabbycat/standings/locale/fr/LC_MESSAGES/django.po b/tabbycat/standings/locale/fr/LC_MESSAGES/django.po index b48b56bb9eb..118d5633080 100644 --- a/tabbycat/standings/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-29 23:49-0400\n" -"PO-Revision-Date: 2020-12-30 04:37\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-12 15:51\n" "Last-Translator: philip_tc\n" "Language-Team: French\n" "Language: fr_FR\n" @@ -18,604 +18,595 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 950\n" -#: standings/base.py:297 +#: standings/base.py msgid "The same metric would be added twice:" msgstr "La même métrique aurait été ajoutée une deuxième fois :" -#: standings/base.py:298 +#: standings/base.py msgid "The same ranking would be added twice:" msgstr "Le même classement aurait été ajouté un deuxième fois :" -#: standings/base.py:414 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" msgstr "Code de métrique non-reconnu : « %(code)s »" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" msgstr "Tout" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" msgstr "Qualifiant" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" msgstr "Pas %(category)s" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" msgstr "Tout les orateurs" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" msgstr "JIs" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "Présidents" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" msgstr "Membres" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" msgstr "Stagiaires" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" msgstr "Note Moyenne" -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" msgstr "Note Médiane" -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" msgstr "Note de 3e Quartile" -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" msgstr "Note de 1er Quartile" -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" msgstr "Note Moyenne par les Équipes" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" msgstr "Note Moyenne par les Présidents" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" msgstr "Note Moyenne par les Membres" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" msgstr "Note Moyenne par les Stagiaires" -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" msgstr "Score Moyenne" -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" msgstr "Score Médiane" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" msgstr "Score de 3e Quartile" -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" msgstr "Score de 1er Quartile" -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" msgstr "Moyenne d’orateur de réplique" -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" msgstr "Moyenne de l’orateur %(num)d" -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" msgstr "Score des Finaux Moyenne" -#: standings/speakers.py:50 standings/speakers.py:106 +#: standings/speakers.py msgid "total" msgstr "total" -#: standings/speakers.py:51 standings/speakers.py:107 +#: standings/speakers.py msgid "Total" msgstr "Total" -#: standings/speakers.py:58 standings/speakers.py:116 +#: standings/speakers.py msgid "average" msgstr "moyenne" -#: standings/speakers.py:59 standings/speakers.py:117 +#: standings/speakers.py msgid "Avg" msgstr "Moy" -#: standings/speakers.py:66 +#: standings/speakers.py msgid "team points" msgstr "points d’équipe" -#: standings/speakers.py:67 +#: standings/speakers.py msgid "Team" msgstr "Équipe" -#: standings/speakers.py:89 standings/speakers.py:126 +#: standings/speakers.py msgid "standard deviation" msgstr "écart-type" -#: standings/speakers.py:90 standings/speakers.py:127 +#: standings/speakers.py msgid "Stdev" msgstr "Écart" -#: standings/speakers.py:98 +#: standings/speakers.py msgid "number of speeches given" msgstr "nombre de discours donnés" -#: standings/speakers.py:99 standings/speakers.py:138 +#: standings/speakers.py msgid "Num" msgstr "DD" -#: standings/speakers.py:137 +#: standings/speakers.py msgid "replies given" msgstr "nombre de discours de réplique donnés" -#: standings/speakers.py:147 +#: standings/speakers.py msgid "trimmed mean (high-low drop)" msgstr "moyenne tronquée (haut et bas)" -#: standings/speakers.py:148 +#: standings/speakers.py msgid "Trim" msgstr "Tronq" -#: standings/teams.py:62 +#: standings/teams.py msgid "points" msgstr "points" -#: standings/teams.py:63 +#: standings/teams.py msgid "Pts" msgstr "Pts" -#: standings/teams.py:76 +#: standings/teams.py msgid "wins" msgstr "victoires" -#: standings/teams.py:77 standings/views.py:592 +#: standings/teams.py standings/views.py msgid "Wins" msgstr "Victoires" -#: standings/teams.py:87 +#: standings/teams.py msgid "total speaker score" msgstr "note d’orateur totale" -#: standings/teams.py:88 +#: standings/teams.py msgid "Spk" msgstr "Ora" -#: standings/teams.py:97 +#: standings/teams.py msgid "average total speaker score" msgstr "note moyenne totale d’orateur" -#: standings/teams.py:98 +#: standings/teams.py msgid "ATSS" msgstr "NMTO" -#: standings/teams.py:107 +#: standings/teams.py msgid "speaker score standard deviation" msgstr "écart-type des notes d’orateur" -#: standings/teams.py:108 +#: standings/teams.py msgid "SSD" msgstr "ÉTNO" -#: standings/teams.py:118 +#: standings/teams.py msgid "sum of margins" msgstr "somme des marges" -#: standings/teams.py:119 +#: standings/teams.py msgid "Marg" msgstr "Marg" -#: standings/teams.py:128 +#: standings/teams.py msgid "average margin" msgstr "marge en moyenne" -#: standings/teams.py:129 +#: standings/teams.py msgid "AWM" msgstr "MM" -#: standings/teams.py:138 +#: standings/teams.py msgid "average individual speaker score" msgstr "note moyenne individuelle d’orateur" -#: standings/teams.py:139 +#: standings/teams.py msgid "AISS" msgstr "NMIO" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by wins" msgstr "puissance des paires par victoires" -#: standings/teams.py:212 +#: standings/teams.py msgid "DS" msgstr "PO" -#: standings/teams.py:219 +#: standings/teams.py msgid "draw strength by total speaker score" msgstr "puissance des paires par score d'orateur total" -#: standings/teams.py:220 +#: standings/teams.py msgid "DSS" msgstr "PPO" -#: standings/teams.py:231 +#: standings/teams.py msgid "number of pullups before this round" msgstr "nombre de promotions avant cette joute" -#: standings/teams.py:232 +#: standings/teams.py msgid "PU" msgstr "PROM" -#: standings/teams.py:254 +#: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "nombre de juges qui ont voté pour cette équipe" -#: standings/teams.py:255 +#: standings/teams.py msgid "Ballots" msgstr "Feuilles" -#: standings/teams.py:256 +#: standings/teams.py msgid "votes/ballots carried" msgstr "nombre de votes" -#: standings/teams.py:280 +#: standings/teams.py msgid "number of firsts" msgstr "nombre de premières" -#: standings/teams.py:281 +#: standings/teams.py msgid "1sts" msgstr "1ères" -#: standings/teams.py:290 +#: standings/teams.py msgid "number of seconds" msgstr "nombre de deuxièmes" -#: standings/teams.py:291 +#: standings/teams.py msgid "2nds" msgstr "2èmes" -#: standings/teams.py:300 +#: standings/teams.py msgid "number of thirds" msgstr "nombre de troisièmes" -#: standings/teams.py:301 +#: standings/teams.py msgid "3rds" msgstr "3èmes" -#: standings/teams.py:313 +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "Seuls" + +#: standings/teams.py msgid "Who-beat-whom" msgstr "Qui-a-battu-qui" -#: standings/teams.py:314 +#: standings/teams.py msgid "WBW" msgstr "QABQ" -#: standings/teams.py:315 +#: standings/teams.py msgid "who-beat-whom" msgstr "qui-a-battu-qui" -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." msgstr "Elle exclut aussi les joutes silencieuses (le cas échéant) et de la joute actuelle." -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "Cette liste est triée par points d'équipe, et ensuite par ordre alphabétique suivant le nom d'équipe. Elle n'indique pas le rang de chaque équipe parmi les équipes ayant le même nombre de points d'équipe. %(silent_round_sentence)s" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "Cette liste est triée par nombre de victoires, et ensuite par ordre alphabétique suivant le nom d'équipe. Elle n'indique pas le rang de chaque équipe parmi les équipes ayant le même nombre de victoires. %(silent_round_sentence)s" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." msgstr "Il n'y a aucune joute dont les résultats sont disponibles." -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." msgstr "Les orateurs de réplique sont classés par leurs note de réplique moyenne." -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." msgstr "Les orateurs peuvent manquer jusqu’à %(count)s discours de réplique avant qu’ils soient omis du classement des répliques." -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." msgstr "Tous les orateurs de réplique apparaissent dans ces classements, peu importe le nombre de répliques qu’ils ont manqués." -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." msgstr "Ces réglages peuvent être changés dans la section des classements dans les options du tournoi." -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." msgstr "La préséance de classement des orateurs est vide. Cela signifie que les orateurs ne sont pas classés par aucun métrique. Si vous n'attendiez pas à ça, créez une préséance de classement des orateurs dans la section de classement des options du tournoi avant de créer le tirage. Dans la plupart des tournois, la première métrique devrait être le score moyenne ou total." -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." msgstr "Les orateurs sont classés par leur note moyenne." -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." msgstr "Les orateurs sont classés par leur score total. Les orateurs qui manquent un débat serait sévèrement désavantagé dans ces classements." -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." msgstr "Les orateurs peuvent manquer jusqu’à %(count)s débats avant qu’ils soit omis du classement des orateurs." -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." msgstr "Tous les orateurs apparaissent dans ces classements, peu importe le nombre de débats qu’ils ont manqués." -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." msgstr "Enforcer la limite des débats manquées requiert la métrique « nombre de discours données » d’être inclus dans les calculs du classement des orateurs, donc elle s’est fait ajoutée automatiquement. Pour enlever ce message d’avertissement, veuillez ajouter la métrique de nombre de discours données au métriques supplémentaires de classement d’orateurs dans la section de classement dans la configuration de ce tournoi." -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" msgstr "Vue d’ensemble de la diversité" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." msgstr "Les données des résultats des orateurs et juges sont présentées sans tests pour la signification statistique. Les corrélations ne devraient pas être considérées comme fiables ; surtout lors de petits tournois. Les « régions » sont une catégorisation du tournoi assigné aux institutions, compté avec le nombre de participants de tels institutions." -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" msgstr "Pas identifiant comme un homme cisgenre" -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" msgstr "Identifiant comme un homme cisgenre" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" msgstr "Non-spécifié/enregistré" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" msgstr "Classements" -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" msgstr "Plus hautes notes" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" msgstr "%(speaker)s dans %(round)s" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:152 -#: standings/templates/standings_index.html:167 -#: standings/templates/standings_index.html:186 +#: standings/templates/standings_index.html msgid "No data yet" msgstr "Aucune donnée" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" msgstr "Plus basses notes" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" msgstr "Plus grands marges" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" msgstr "%(team)s contre %(opp)s dans %(round)s" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" msgstr "Marges les plus proches" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" msgstr "Scores d’équipes les plus fortes" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" msgstr "%(team)s dans %(round)s" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" msgstr "Scores des équipes les plus faibles" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" msgstr "Motions les Plus/Moins Populaires" -#: standings/templates/standings_index.html:177 +#: standings/templates/standings_index.html msgid "Average Speaks" msgstr "Note moyenne d’orateur" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" msgstr "Vue d’ensemble" -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "Équipes" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" msgstr "Toutes" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" msgstr "Orateurs" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" msgstr "Discours principaux" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" msgstr "Tous" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "Orateurs " -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" msgstr "Répliques" -#: standings/templates/standings_menu.html:63 -#: standings/templates/standings_menu.html:76 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "Motions" -#: standings/templates/standings_menu.html:66 +#: standings/templates/standings_menu.html msgid "By Round" msgstr "Par Joute" -#: standings/templates/standings_menu.html:81 +#: standings/templates/standings_menu.html msgid "Diversity" msgstr "Diversité" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." msgstr "La préséance de classement d'équipes est vide. Cela signifie que les équipes ne sont pas classés par aucun métrique, donc tous les équipes seront égaux en premier. Si vous n'attendiez pas à ça, créez une préséance de classement d'équipes dans la section de classement des options du tournoi avant de créer le tirage. Dans la plupart des tournois, la première métrique devrait être le pointage ou victoires." -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " msgstr "

    Une faute s’est produite en générant les classements : %(message)s

    " -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " msgstr "

    Vous devriez vérifier les options de classement dans la section d’installation. Si le problème persiste et vous n’êtes pas sure comment le réparer, veuillez contacter les développeurs.

    " -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " msgstr "

    Le rapporteur va devoir résoudre cette problème.

    " -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" msgstr "à compter de %(round)s" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" msgstr "%(title)s (seulement les %(limit)d en tête)" -#: standings/views.py:208 standings/views.py:428 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." msgstr "Le classement ne peut pas être affiché parce que toutes les joutes dans ce tournoi jusqu'ici sont silencieuses." -#: standings/views.py:290 +#: standings/views.py msgid "Speaker Standings" msgstr "Classement des orateurs" -#: standings/views.py:326 +#: standings/views.py msgid "Speaker Tab" msgstr "Tab des orateurs" -#: standings/views.py:341 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" msgstr "Classement des orateurs de la catégorie %(category)s" -#: standings/views.py:359 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" msgstr "Tab des orateurs de la catégorie %(category)s" -#: standings/views.py:372 +#: standings/views.py msgid "Reply Speaker Standings" msgstr "Classement des orateurs aux discours de réplique" -#: standings/views.py:380 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." msgstr "Les discours de réplique ne sont pas activés dans ce tournoi." -#: standings/views.py:408 +#: standings/views.py msgid "Reply Speaker Tab" msgstr "Tab des orateurs de réplique de la catégorie %(category_name)s" -#: standings/views.py:420 standings/views.py:669 +#: standings/views.py msgid "Team Standings" msgstr "Classement des équipes" -#: standings/views.py:499 +#: standings/views.py msgid "Team Tab" msgstr "Tab des équipes" -#: standings/views.py:518 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" msgstr "Classement des équipes de la catégorie %(category)s" -#: standings/views.py:545 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" msgstr "Tab des équipes de la catégorie %(category)s" -#: standings/views.py:556 +#: standings/views.py msgid "Current Team Standings" msgstr "Classement actuel des équipes" -#: standings/views.py:592 +#: standings/views.py msgid "Points" msgstr "Points" -#: standings/views.py:638 +#: standings/views.py msgid "Feedback Overview" msgstr "Vue d’ensemble des évaluations" -#: standings/views.py:655 -msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." -msgstr "Les notes de juge sont calculées en pondérant leur note de base et d'évaluations. La pondération actuelle est montré comme « Composantes de score » si-dessous. Les notes d'évaluations sont calculées avec la moyenne de toute évaluation sur toutes les joutes. Lisez davantage." +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +msgstr "Les notes de juge sont calculées en pondérant leur note de base et d'évaluations. La pondération actuelle est montré comme « Composantes de score » ci-dessous. Les notes d'évaluations sont calculées avec la moyenne de toute évaluation sur toutes les joutes. Lisez davantage." diff --git a/tabbycat/tournaments/locale/fr/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/fr/LC_MESSAGES/django.po index 641566a0aad..a2948a5667e 100644 --- a/tabbycat/tournaments/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 15:51\n" "Last-Translator: philip_tc\n" "Language-Team: French\n" "Language: fr_FR\n" @@ -18,1026 +18,1016 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "Tournois" -#: tournaments/forms.py:29 +#: tournaments/forms.py msgid "Number of preliminary rounds" msgstr "Nombre de joutes préliminaires" -#: tournaments/forms.py:34 +#: tournaments/forms.py msgid "Number of teams in the open break" msgstr "Nombre d'équipes dans la qualification ouverte" -#: tournaments/forms.py:35 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." msgstr "Laissez vide s'il n'y a pas de joutes éliminatoires." -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Did you agree with their decision?" msgstr "Êtes-vous d’accord avec cette décision ?" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Agree?" msgstr "D’accord ?" -#: tournaments/forms.py:47 +#: tournaments/forms.py msgid "Comments" msgstr "Commentaires" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:61 +#: tournaments/forms.py msgid "Open" msgstr "Ouvert" -#: tournaments/forms.py:86 +#: tournaments/forms.py msgid "Format Configuration" msgstr "Configuration de format" -#: tournaments/forms.py:87 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" msgstr "Appliquer un ensemble standard de paramètres correspondant à un format de débat qui est commun" -#: tournaments/forms.py:91 +#: tournaments/forms.py msgid "Public Configuration" msgstr "Configuration d'accès du public" -#: tournaments/forms.py:92 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" msgstr "Afficher des informations non sensibles sur les pages accessibles au public, par ex., les tirages publiés et les motions des joutes antérieurs" -#: tournaments/forms.py:99 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" -msgstr "Tabulation : [équipe de tabulation]
    Organisation : [comité d’organisation]
    Juges : [juges en chef]" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +msgstr "Tabulation : [équipe de tabulation]
    Équité : [équipe d'équité]
    Organisation : [comité d’organisation]
    Juges : [juges en chef]" -#: tournaments/forms.py:195 +#: tournaments/forms.py msgid "Current preliminary round" msgstr "Joute préliminaire actuelle" -#: tournaments/forms.py:196 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" msgstr "Toutes les joutes préliminaires ont été achevés" -#: tournaments/forms.py:208 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" msgstr "Joute d’élimination actuelle en %(category)s (seulement si toutes les joutes préliminaires ont été achevées)" -#: tournaments/forms.py:214 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" msgstr "Toutes les joutes éliminatoires dans %(category)s ont été achevées" -#: tournaments/forms.py:226 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." msgstr "Si la joute actuelle est préliminaire, cette plage doit être vide." -#: tournaments/forms.py:232 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." msgstr "Si toutes les joutes préliminaires ont été achevées, cette plage est obligatoire." -#: tournaments/forms.py:267 +#: tournaments/forms.py #, python-format msgid "%(name)s (%(abbreviation)s)" -msgstr "" +msgstr "%(name)s (%(abbreviation)s)" -#: tournaments/mixins.py:109 +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." msgstr "Vous avez été redirigé vers cette page car le tournoi %(tournament)s n'a aucun joute. Veuillez en créer avant de revenir au site d'administration." -#: tournaments/mixins.py:117 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." msgstr "Il y a un problème avec les données du tournoi %(tournament)s. Veuillez contacter un responsable du jumelage pour mener une enquête." -#: tournaments/mixins.py:130 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." msgstr "Vous avez été redirigé(e) vers cette page en raison d’un problème avec l'attribution des équipes aux côtés dans un débat." -#: tournaments/mixins.py:137 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." msgstr "Il y a un problème avec comment les équipes sont assignées les côtés du débat. Les rapporteurs va devoir résoudre ce problème." -#: tournaments/mixins.py:236 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" msgstr "pour %(round)s" -#: tournaments/mixins.py:437 +#: tournaments/mixins.py msgid "Return to Draw" msgstr "Retour au Tirage" -#: tournaments/models.py:26 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." msgstr "Il est impossible d'utiliser cela comme un slug d'un tournoi, car c'est réservé pour une URL du système Tabbycat. Veuillez essayer un autre." -#: tournaments/models.py:33 tournaments/models.py:320 +#: tournaments/models.py msgid "name" msgstr "nom" -#: tournaments/models.py:34 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" msgstr "Le nom complet, p. ex. \"Championnat Australasien de débat 2016\"" -#: tournaments/models.py:36 +#: tournaments/models.py msgid "short name" msgstr "nom court" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" msgstr "Le nom qui est utilisé sur le menu, p. ex. \"Australs 2016\"" -#: tournaments/models.py:39 tournaments/models.py:314 +#: tournaments/models.py msgid "sequence number" msgstr "numéro de séquence" -#: tournaments/models.py:40 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." msgstr "Un numéro qui déterminer l'ordre relatif dont les tournois sont affichés sur le page d'accueil." -#: tournaments/models.py:42 +#: tournaments/models.py msgid "slug" msgstr "slug" -#: tournaments/models.py:43 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" msgstr "Le sous-URL du tournoi, p. ex. \"australs2016\". Un slug ne peut pas contenir des espaces." -#: tournaments/models.py:44 +#: tournaments/models.py msgid "active" msgstr "actif" -#: tournaments/models.py:47 tournaments/models.py:313 +#: tournaments/models.py msgid "tournament" msgstr "tournoi" -#: tournaments/models.py:48 +#: tournaments/models.py msgid "tournaments" msgstr "tournois" -#: tournaments/models.py:285 +#: tournaments/models.py msgid "Random" msgstr "Aléatoire" -#: tournaments/models.py:286 +#: tournaments/models.py msgid "Manual" msgstr "Manuel" -#: tournaments/models.py:287 +#: tournaments/models.py msgid "Round-robin" msgstr "Toutes rondes" -#: tournaments/models.py:288 +#: tournaments/models.py msgid "Power-paired" msgstr "Jumelé par rang" -#: tournaments/models.py:289 tournaments/models.py:296 +#: tournaments/models.py msgid "Elimination" msgstr "Élimination" -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Preliminary" msgstr "Préliminaire" -#: tournaments/models.py:305 +#: tournaments/models.py msgid "None" msgstr "Aucun" -#: tournaments/models.py:306 +#: tournaments/models.py msgid "Draft" msgstr "Brouillon" -#: tournaments/models.py:307 +#: tournaments/models.py msgid "Confirmed" msgstr "Confirmé" -#: tournaments/models.py:308 +#: tournaments/models.py msgid "Released" msgstr "Distribué" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" msgstr "Un numéro qui détermine l'ordre de la joute, qui devrait dénombrer de façon consécutif de 1 pour la première joute" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "completed" msgstr "complété" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" msgstr "Vrai si la joute est achevée, ce qui signifie normalement que tout les résultats ont été entrés et confirmés" -#: tournaments/models.py:320 +#: tournaments/models.py msgid "e.g. \"Round 1\"" msgstr "p. ex. « Joute 1 »" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "abbreviation" msgstr "abréviation" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "e.g. \"R1\"" msgstr "p. ex. « J1 »" -#: tournaments/models.py:323 +#: tournaments/models.py msgid "stage" msgstr "étape" -#: tournaments/models.py:324 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" msgstr "Préliminaire = « inrounds », élimination = « outrounds »" -#: tournaments/models.py:326 +#: tournaments/models.py msgid "draw type" msgstr "type de tirage" -#: tournaments/models.py:327 +#: tournaments/models.py msgid "Which draw method to use" msgstr "Quelle méthode de faire le tirage à utiliser" -#: tournaments/models.py:330 +#: tournaments/models.py msgid "break category" msgstr "catégorie de break" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "If elimination round, which break category" msgstr "Si cette joute est éliminatoire, quelle catégorie de qualification" -#: tournaments/models.py:334 +#: tournaments/models.py msgid "draw status" msgstr "statut de tirage" -#: tournaments/models.py:335 +#: tournaments/models.py msgid "The status of this round's draw" msgstr "Le statut du tirage de cette joute" -#: tournaments/models.py:338 +#: tournaments/models.py msgid "feedback weight" msgstr "importance des remarques" -#: tournaments/models.py:340 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." msgstr "L'étendue à laquelle la note de chaque juge dépend des évaluations, au lieu de sa note de base. Quand l'importance est 0, chaque note dépend complètement de sa score de base ; si c'est 1, la note dépend complètement des évaluations du juge." #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:343 +#: tournaments/models.py msgid "silent" msgstr "silencieux" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." msgstr "Si cette joute est marquée comme silencieuse, les informations de la joute (p. ex. les résultats) ne seront pas affichés au public." -#: tournaments/models.py:346 +#: tournaments/models.py msgid "motions released" msgstr "motions distribués" -#: tournaments/models.py:347 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" msgstr "Si les motions seront affichées sur le site public, en supposant que la fonctionnalité soit activée" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "starts at" msgstr "commencera à" -#: tournaments/models.py:351 +#: tournaments/models.py msgid "weight" msgstr "poids" -#: tournaments/models.py:352 +#: tournaments/models.py msgid "A factor for the points received in the round. For example, if 2, all points are doubled." msgstr "Un facteur pour les points reçus dans une joute. Par exemple, avec 2, tous les points seront doublés." -#: tournaments/models.py:355 +#: tournaments/models.py msgid "round" msgstr "joute" -#: tournaments/models.py:356 +#: tournaments/models.py msgid "rounds" msgstr "joutes" -#: tournaments/models.py:369 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." msgstr "Il faut que le type du tirage d'une joute de l'étape éliminatoire soit « Éliminatoire »." -#: tournaments/models.py:372 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." msgstr "Il ne faut pas que le type du tirage d'une joute de l'étape préliminaire soit « Éliminatoire »." -#: tournaments/models.py:377 +#: tournaments/models.py msgid "Elimination rounds must have a break category." msgstr "Il faut que les joutes à élimination aient un catégorie de break." -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" msgstr "Tableau de bord" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" msgstr "Aperçu" -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" msgstr "joute actuelle: %(round)s, statut: %(status)s" -#: tournaments/templates/blank_site_start.html:7 -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" msgstr "Bienvenue à Tabbycat !" -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." msgstr "Pour commencer, vous devrez créer le premier compte d'utilisateur. Ce compte est un compte « super-utilisateur » : il pourra modifier tout sur le site. Donc, vous devrez utiliser un mot de passe robuste." -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." msgstr "Vous ne pourriez créer ce compte qu'une fois, mais si vous voulez, vous pourrez changer le nom d'utilisateur et le mot de passe après avoir le créer, et vous pourrez aussi ajouter des nouveaux super-utilisateurs." -#: tournaments/templates/blank_site_start.html:32 +#: tournaments/templates/blank_site_start.html msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." msgstr "Cette adresse de courriel est utilisée pour les réinitialisations de mot de passe. Vous n'êtes pas obligé d'en fournir une, mais sinon, vous ne pourrez pas réinitialiser votre mot de passe si vous l'oubliez." -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" msgstr "Créer compte" -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" msgstr "Configuration du tournoi %(tournament)s" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "Tabbycat" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." msgstr "Afin de finir de créer votre tournoi, sélectionnez une configuration de base. Notez que les paramètres peuvent toujours être changées plus tard (et à plus de la precision) si vous en avez besoin." -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" msgstr "Configuration du tournoi" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" msgstr "Créer nouveau tournoi" -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." -msgstr "Tabbycat est gratuit à utiliser pour les tournois à but non lucratif et qui ne sont pas pour la collecte des fonds (toutefois, les dons sont encouragés). Si votre tournoi est à but lucratif ou pour la collecte des fonds, veuillez noter qu'il existe un paiement obligatoire. Pour plus de détails, lisez l'accord de licence de Tabbycat." +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgstr "Tabbycat est gratuit à utiliser pour les tournois à but non lucratif et qui ne sont pas pour la collecte des fonds (toutefois, les dons sont encouragés). Si votre tournoi est à but lucratif ou pour la collecte des fonds, veuillez noter qu'il existe un paiement obligatoire. Pour plus de détails, lisez l'accord de licence de Tabbycat." -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" msgstr "Vous essayez simplement Tabbycat ?" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." msgstr "Si vous apprenez ou jouez avec Tabbycat, il est plus facile de créer un tournoi démonstratif qui est prérempli d'un ensemble faux (mais typique) d'équipes, de juges, de salles et autres. Vous pouvez ensuite supprimer ce tournoi démonstratif, ou vous pouvez déployer une instance nouvelle pour votre tournoi réel." -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" msgstr "Charger %(demo)s" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." msgstr "Vous avez déjà un tournoi utilisant cette ensemble de données. Recharger les données va tout supprimer de ce tournoi." -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" msgstr "Créer tournoi" -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" msgstr "Annuler et revenir à la page d’accueil du site" -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" msgstr "Équipe de Joute Manquante" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." msgstr "Tabbycat exige toujours que, dans chaque débat, une et une seule équipe soit attribuée à chaque côté. Quand ce n’est pas le cas, cette erreur se produit. Typiquement, cela est le résultat de la modification manuelle des débats." -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" msgstr "Une liste des débats problématiques est présentée ci-dessous. Pour les corriger, vous devrez effectuer les opérations suivantes :" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." msgstr "Cliquer sur le bouton Corriger ce débat pour ce débat-là." #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." msgstr "Vous assurer que chaque côté qui doit être présente dans le débat soit présente et qu'une équipe y soit attribuée. S’il manque une équipe, trouver une ligne vide et utiliser la loupe pour sélectionner une équipe. Ensuite préciser en conséquence la côté de cette nouvelle équipe." #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." msgstr "Vous assurer qu'aucun côté apparaisse plus qu'une fois dans le débat." #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." msgstr "Enregistrer les modifications." -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." msgstr "Après avoir corrigé tous les débat, vous pourrez ensuite retourner la page auquel vous étiez initialement, sans que l'erreur se reproduise." -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." msgstr "Vous pouvez aussi voir tous les débats dans la sections des débats de la zone pour modifier le base de données." -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" msgstr "Identifiant de débat" -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" -msgstr "Le(s) équipe(s) de %(side)s" +msgid "Teams on %(side)s" +msgstr "Équipes de %(side)s" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" msgstr "Lien pour corriger ce débat" -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" msgstr "Aucune équipe" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" msgstr "Plusieurs équipes" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" msgstr "Corriger ce débat" -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" msgstr "Il semble que tous les débats soient corrects !" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." msgstr "Si vous continuez d'être redirigé(e) à cette page et vous ne savez pas pourquoi, veuillez contacter les développeurs de Tabbycat." -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" msgstr "Bienvenue à %(tournament)s" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." msgstr "Il n’y a actuellement aucune information publique disponible sur ce tournoi." -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" msgstr "Classement des équipes" -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" msgstr "Tab des équipes de la catégorie %(category)s" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" msgstr "Classement des orateurs" -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" msgstr "Tab des orateurs de la catégorie %(category)s" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" msgstr "Classement des discours de réplique" -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" msgstr "Classement des juges" -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" msgstr "Classement des motions" -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" msgstr "Côtés" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:203 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" msgstr "Tirage de %(round)s" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" msgstr "Tirages pour les joutes actuelles" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" msgstr "Le tirage de %(round)s n’est pas encore distribué" -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" msgstr "Le tirage pour la prochaine joute n’est pas encore distribué" -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" msgstr "Enregistrements" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" msgstr "Résultats" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "Motions" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" msgstr "Classement des équipes" -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" msgstr "Qualification %(category)s" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" msgstr "Qualification des juges" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" msgstr "Diversité" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" msgstr "Participants" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" msgstr "Institutions" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" msgstr "Progrès des évaluations" -#: tournaments/templates/public_tournament_index.html:188 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Enter Ballot for %(round)s" msgstr "Saisir feuille pour %(round)s" -#: tournaments/templates/public_tournament_index.html:195 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" msgstr "Saisie d'une évaluation" -#: tournaments/templates/public_tournament_index.html:217 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" msgstr "Personnel du tournoi" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" msgstr "Confirmer la complétion de la joute" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" msgstr "Saisir Résultats" -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." msgstr "Les courriels ont déjà été envoyés." -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" msgstr "Envoyer les victoires d’équipes par courriel" -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" msgstr "Envoyer la note des équipes par courriel" -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" msgstr "Marquer %(round)s comme Achevée" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" msgstr "Marquer %(round)s comme Achevée toutefois" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" msgstr "Aller à %(round)s" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" msgstr "%(round)s a déjà été marquée comme achevée !" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." msgstr[0] "La joute précédente n’est pas achevée : %(prior_rounds_not_completed)s. Vous devriez l’achever avant de la marquer comme telle." msgstr[1] "Les joutes précédentes ne sont pas achevées : %(prior_rounds_not_completed)s. Vous devriez les achever avant de les marquer comme telle." -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" msgstr "Tout les feuilles de %(round)s sont confirmées. Tout est prêt !" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." msgstr[0] "Il y a encore %(num_unconfirmed)s feuille qui est pas confirmée. Vous ne devriez pas avancer à la prochaine joute." msgstr[1] "Il y a encore %(num_unconfirmed)s feuilles qui ne sont pas confirmées. Vous ne devriez pas avancer à la prochaine joute." -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " msgstr "

    Cette joute est silencieuse.

    Même si le visionnement public des résultats est activé, les résultats pour cette joute seront encore cachés du public après ayant fini cette joute.

    Vous pouvez changer quelles joutes sont silencieuses dans la zone de la base de données.

    " -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "

    Les résultats pour %(round)s seront publiés en-ligne lorsque vous marquez cette joute comme achevée !

    Cette joute n'est pas silencieuse et les résultats sont public.

    Si vous voulez garder les résultats cachés juste pour cette joute, vous pouvez marquer la joute comme silencieuse dans la zone de la base de données.

    Si vous voulez désactiver la vue publique des résultats, vous pouvez dans les options du tournoi.

    " -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" msgstr "Modifier la joute actuelle" -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" msgstr "Retour au Configuration" -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." msgstr "Aucune joute n’est actuellement défini. Pour que Tabbycat fonctionne, veuillez régler la joute actuelle du tournoi %(tournament)s." -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." msgstr "Sur cette page, vous pouvez mettre la joute actuelle du tournoi %(tournament)s." -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "Le tournoi %(tournament)s n’a aucune joute. Vous aurez besoin d’en ajouter et de les associer avec ce tournoi avant que vous puissiez régler la joute actuelle." -#: tournaments/templates/set_round_weights.html:4 -#: tournaments/templates/set_round_weights.html:5 +#: tournaments/templates/set_round_weights.html msgctxt "page title" -msgid "Set Round Weights" +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: tournaments/templates/set_round_weights.html:8 +#: tournaments/templates/set_round_weights.html msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." msgstr "" -#: tournaments/templates/set_round_weights.html:41 +#: tournaments/templates/set_round_weights.html msgctxt "button" msgid "Set weights" -msgstr "" +msgstr "Définir les poids" -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:47 -msgid "Inactive Tournaments" -msgstr "Tournois archivés" - -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/site_index.html msgid "Welcome!" msgstr "Bienvenue !" -#: tournaments/templates/site_index.html:21 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" msgstr "Il semble qu'il n'y ait aucun tournoi sur ce site. Voulez-vous en créer un ?" -#: tournaments/templates/site_index.html:30 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." msgstr "Il n'y a pas actuellement de tournois actifs sur ce site." -#: tournaments/templates/site_index.html:34 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." msgstr "Il n'y a pas actuellement de tournois sur ce site." -#: tournaments/templates/site_index.html:55 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "(inactif)" + +#: tournaments/templates/site_index.html msgid "New Tournament" msgstr "Créer un nouveau tournoi" -#: tournaments/templates/site_index.html:58 +#: tournaments/templates/site_index.html msgid "Edit Database Area" msgstr "Zone pour modifier la base de données" -#: tournaments/templates/site_index.html:61 +#: tournaments/templates/site_index.html msgid "Send a Test Email" msgstr "Envoyer un Courriel Test" -#: tournaments/templates/site_index.html:64 +#: tournaments/templates/site_index.html msgid "Import DebateXML" msgstr "Importer DebateXML" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Get API Token / Change Password (%(user)s)" msgstr "Obtenir jeton IPA / Changer mot de passe (%(user)s)" -#: tournaments/templates/site_index.html:77 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" msgstr "Déconnexion (%(user)s)" -#: tournaments/templates/site_index.html:83 +#: tournaments/templates/site_index.html msgid "Log In as Admin" msgstr "Se connecter comme administrateur" -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." msgstr "Nous espérons que vous avez aimé utiliser Tabbycat pour votre tournoi. Nous apprécierions que vous fassiez une donation au projet afin de soutenir son développement et entretien continu. D'un tournoi de cette taille, nous suggérons une donation de %(amount)s $. Notez que si votre tournoi est à but lucratif, ou est pour lever des fonds, ce paiement est une condition obligatoire de la licence de logiciel de Tabbycat. Savoir plus des donations." -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" msgstr "Bienvenue à votre nouveau tournoi !" -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." msgstr "L’étape suivante consiste à importer les données initiales de votre tournoi : les institutions, les équipes, les juges et les salles qui font partie de votre tournoi. Il y a quelques façons de le faire. Pour les tournois de taille petit ou moyen, l’importateur simple est la meilleure option." #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." msgstr "Pour trouver plus de renseignements, veuillez consulter notre documentation sur importer les données initiales (en anglais)." -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." msgstr "Utiliser l’importateur simple afin d'ajouter vos données initiales." -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" -msgstr "Allez à la zone d'enregistrements afin de créer un tirage pour %(round)s" +msgid "Mark participants as available to prepare a draw for %(round)s" +msgstr "Marquez des participants disponibles afin de préparer un tirage pour %(round)s" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" msgstr "Allez à la zone de tirage afin d'attribuer les juges aux débats de %(round)s" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" +msgid "Go to the results area to enter ballots for %(round)s" msgstr "Allez à la zone de résultats afin de saisir les feuilles pour %(round)s" -#: tournaments/templates/tournament_index.html:74 +#: tournaments/templates/tournament_index.html msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." msgstr "" -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" msgstr "Zone d'administrateur de %(tn)s" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" msgstr "Zone des assistants de %(tn)s" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" msgstr "Zone publique de %(tn)s" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" msgstr "affirmatif" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" msgstr "négatif" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" msgstr "équipe affirmatif" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" msgstr "équipe négatif" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" msgstr "Aff" -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" msgstr "Nég" -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" msgstr "gouvernement" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" msgstr "opposition" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" msgstr "équipe du gouvernement" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" msgstr "équipe de l'opposition" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" msgstr "Gouv" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" msgstr "Opp" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" msgstr "proposition" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" msgstr "équipe de la proposition" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" msgstr "Prop" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" msgstr "pour" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" msgstr "contre" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" msgstr "équipe pour" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" msgstr "équipe contre" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" msgstr "Pour" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" msgstr "Contre" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" msgstr "appelant(e)" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" msgstr "répondeur(se)" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" msgstr "équipe appelante" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" msgstr "équipe répondeuse" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" msgstr "App" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" msgstr "Rép" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "premier gouvernement" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "première opposition" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "second gouvernement" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "seconde opposition" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" msgstr "équipe du premier gouvernement" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" msgstr "équipe de la première opposition" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" msgstr "équipe du second gouvernement" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" msgstr "équipe de la seconde opposition" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "1G" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "1O" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "2G" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "2O" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "Joute %(number)d" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" msgstr "J%(number)d" -#: tournaments/views.py:151 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" msgstr "%(round)s a été marquée comme achevée. Maintenant que toutes les joutes le sont, vous avez terminé le tournoi ! Félicitations !" -#: tournaments/views.py:157 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." msgstr "%(round)s a été marquée comme achevée. C’est la dernière joute dans sa séquence. Retournant à la première joute qui n’a pas été marquée comme achevée." -#: tournaments/views.py:170 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." msgstr "La joute actuelle a été avancé à %(round)s. Vous êtes arrivé(e) au bout des joutes préliminaires ! Félicitations ! L'étape suivante consiste à générer les équipes qualifiant aux joutes éliminatoires." -#: tournaments/views.py:176 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." msgstr "%(round)s a été marquée comme achevée. C’était la dernière joute préliminaire, mais une ou plusieurs joutes ne sont pas encore achevée(s). Retournant à la dernière joute préliminaire inachevée." -#: tournaments/views.py:184 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" msgstr "%(this_round)s est désormais marqué comme achevé. Continuant à %(next_round)s ! Woohoo ! Continuez !" -#: tournaments/views.py:201 +#: tournaments/views.py msgid "8-team generic dataset" msgstr "données génériques à 8 équipes" -#: tournaments/views.py:202 +#: tournaments/views.py msgid "24-team Australs dataset" msgstr "données à 24 équipes d'Australs" -#: tournaments/views.py:203 +#: tournaments/views.py msgid "88-team BP dataset" msgstr "données à 88 équipes de PB" -#: tournaments/views.py:288 -msgid "Successfully set round weights." +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." msgstr "" diff --git a/tabbycat/utils/locale/fr/LC_MESSAGES/django.po b/tabbycat/utils/locale/fr/LC_MESSAGES/django.po index a21abab686a..fba6277d694 100644 --- a/tabbycat/utils/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 05:15\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 15:51\n" "Last-Translator: philip_tc\n" "Language-Team: French\n" "Language: fr_FR\n" @@ -18,304 +18,311 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "Email address" -msgstr "" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "Tour" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "Équipe" + +#: utils/admin.py +msgid "Speaker" +msgstr "Orateur" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "Tournoi" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "Côté" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "Motion" + +#: utils/admin.py +msgid "Confirmed" +msgstr "Confirmé" -#: utils/tables.py:47 +#: utils/admin.py +msgid "Adjudicator" +msgstr "Juge" + +#: utils/tables.py msgid "No Data Available" msgstr "Aucune donnée disponible" -#: utils/tables.py:155 utils/tables.py:156 +#: utils/tables.py msgid "Ⓒ" msgstr "Ⓟ" -#: utils/tables.py:157 +#: utils/tables.py msgid "Ⓣ" msgstr "Ⓢ" -#: utils/tables.py:161 +#: utils/tables.py msgid "chair" msgstr "président" -#: utils/tables.py:162 +#: utils/tables.py msgid "panellist" msgstr "panelliste" -#: utils/tables.py:163 +#: utils/tables.py msgid "trainee" msgstr "stagiaire" -#: utils/tables.py:166 +#: utils/tables.py msgid "—" msgstr "—" -#: utils/tables.py:167 +#: utils/tables.py msgid "Redacted" msgstr "Caviardé" -#: utils/tables.py:231 utils/tables.py:237 +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" msgstr "Voir le dossier %(d)s de %(a)s" -#: utils/tables.py:247 utils/tables.py:252 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" msgstr "Voir le dossier d'équipe de %(team)s" -#: utils/tables.py:274 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" msgstr "Nom de code : %(name)s" -#: utils/tables.py:276 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" msgstr "Vrai nom : %(name)s" -#: utils/tables.py:296 +#: utils/tables.py #, python-format msgid "%(team)s won" msgstr "%(team)s a gagné" -#: utils/tables.py:301 +#: utils/tables.py #, python-format msgid "%(team)s lost" msgstr "%(team)s a perdu" -#: utils/tables.py:306 utils/tables.py:318 utils/tables.py:342 +#: utils/tables.py #, python-format msgid "%(team)s—no result" msgstr "%(team)s—aucun résultat" -#: utils/tables.py:323 +#: utils/tables.py #, python-format msgid "%(team)s placed %(place)s" msgstr "%(team)s a placé %(place)s" -#: utils/tables.py:332 +#: utils/tables.py #, python-format msgid "%(team)s is advancing" msgstr "%(team)s avance" -#: utils/tables.py:337 +#: utils/tables.py #, python-format msgid "%(team)s was eliminated" msgstr "%(team)s a été éliminé" -#: utils/tables.py:350 +#: utils/tables.py msgid "View/edit debate ballot" msgstr "Afficher/modifier feuille de jugement" -#: utils/tables.py:356 +#: utils/tables.py msgid "View debate ballot" msgstr "Afficher feuille de jugement" -#: utils/tables.py:369 +#: utils/tables.py #, python-format msgid " vs %(opposition)s" msgstr " vs. %(opposition)s" -#: utils/tables.py:376 +#: utils/tables.py #, python-format msgid "Won against %(team)s" msgstr "Gagné contre %(team)s" -#: utils/tables.py:378 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" msgstr "Perdu contre %(team)s" -#: utils/tables.py:380 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" msgstr "Aucun résultat pour débat contre %(team)s" -#: utils/tables.py:405 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" msgstr "Score d’orateur total : %s" -#: utils/tables.py:412 +#: utils/tables.py msgid "Teams in debate:" msgstr "Équipes au débat :" -#: utils/tables.py:415 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "%(team)s (%(side)s)" -#: utils/tables.py:416 utils/tables.py:420 utils/tables.py:446 -#: utils/tables.py:618 +#: utils/tables.py msgid "??" msgstr "??" -#: utils/tables.py:434 +#: utils/tables.py msgid "advancing" msgstr "avançant" -#: utils/tables.py:435 +#: utils/tables.py msgid "Advancing" msgstr "Avançant" -#: utils/tables.py:437 +#: utils/tables.py msgid "eliminated" msgstr "éliminé" -#: utils/tables.py:438 +#: utils/tables.py msgid "Eliminated" msgstr "Éliminé" -#: utils/tables.py:441 utils/tables.py:451 +#: utils/tables.py msgid "No result for debate" msgstr "Aucun résultat au débat" -#: utils/tables.py:448 +#: utils/tables.py #, python-format msgid "Placed %(place)s" msgstr "Placée %(place)s" -#: utils/tables.py:463 -msgid "Tournament" -msgstr "Tournoi" - -#: utils/tables.py:472 -msgid "Round" -msgstr "Tour" - -#: utils/tables.py:495 utils/tables.py:672 +#: utils/tables.py msgid "Name" msgstr "Nom" -#: utils/tables.py:501 utils/tables.py:650 +#: utils/tables.py msgid "Institution" msgstr "Institution" -#: utils/tables.py:507 +#: utils/tables.py msgid "Member of the Adjudication Core" msgstr "Membre du sein des juges" -#: utils/tables.py:514 +#: utils/tables.py msgid "Independent Adjudicator" msgstr "Juge indépendant" -#: utils/tables.py:522 +#: utils/tables.py msgid "Always Trainee" msgstr "Toujours Stagiaire" -#: utils/tables.py:557 +#: utils/tables.py msgid "in minority" msgstr "en minorité" -#: utils/tables.py:590 +#: utils/tables.py msgid "Debate Adjudicators" msgstr "Juges du débat" -#: utils/tables.py:621 -msgid "Motion" -msgstr "Motion" - -#: utils/tables.py:636 -msgid "Team" -msgstr "Équipe" - -#: utils/tables.py:641 utils/tables.py:694 +#: utils/tables.py msgid "Categories" msgstr "Catégories" -#: utils/tables.py:692 +#: utils/tables.py msgid "Category" msgstr "Catégorie" -#: utils/tables.py:719 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." msgstr "Cette salle %(predicate)s." -#: utils/tables.py:721 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." msgstr "Cette salle %(predicates)s, et %(last_predicate)s." -#: utils/tables.py:736 +#: utils/tables.py msgid "Room" msgstr "Salle" -#: utils/tables.py:754 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" msgstr[0] "Équipes se sont rencontrées une fois" msgstr[1] "Équipes se sont rencontrées %(count)d fois" -#: utils/tables.py:760 +#: utils/tables.py msgid "Teams are from the same institution" msgstr "Les équipes sont de la même institution" -#: utils/tables.py:766 +#: utils/tables.py msgid "Conflicts/Flags" msgstr "Conflits/signalements" -#: utils/tables.py:819 +#: utils/tables.py msgid "The confirmed ballot" msgstr "La feuille confirmée" -#: utils/tables.py:824 utils/tables.py:849 +#: utils/tables.py msgid "No ballot" msgstr "Aucune feuille" -#: utils/tables.py:826 utils/tables.py:851 +#: utils/tables.py msgid "No scores" msgstr "Pas de notes" -#: utils/tables.py:829 utils/tables.py:854 utils/tables.py:866 +#: utils/tables.py msgid "View Ballot" msgstr "Afficher feuille" -#: utils/tables.py:836 +#: utils/tables.py msgid "The ballot you submitted" msgstr "La feuille de jugement que vous avez soumis" -#: utils/tables.py:840 +#: utils/tables.py msgid "View/Edit Ballot" msgstr "Afficher/Modifier feuille" -#: utils/tables.py:874 +#: utils/tables.py msgid "Result" msgstr "Résultat" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:880 +#: utils/tables.py msgid "TBC" msgstr "ÀC" -#: utils/tables.py:881 -msgid "Side" -msgstr "Côté" - -#: utils/tables.py:919 -msgid "Team iron-manned this round and the last." +#: utils/tables.py +msgid "Team iron-personed this round and the last." msgstr "Équipe avait un orateur-seul pendant les joutes actuelle et précédente." -#: utils/tables.py:922 -msgid "Team iron-manned this round." +#: utils/tables.py +msgid "Team iron-personed this round." msgstr "Équipe avait un orateur-seul pendant la joute actuelle." -#: utils/tables.py:925 -msgid "Team iron-manned last round." +#: utils/tables.py +msgid "Team iron-personed last round." msgstr "Équipe avait un orateur-seul pendant la joute précédente." -#: utils/tables.py:942 utils/tables.py:943 +#: utils/tables.py #, python-format msgid "Team %(num)d" msgstr "Équipe %(num)d" -#: utils/tables.py:950 +#: utils/tables.py msgid "Postpone" msgstr "Reporter" -#: utils/views.py:38 +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." msgstr "Oups ! Vous n’étiez pas sensé taper cet URL dans votre navigateur." diff --git a/tabbycat/venues/locale/fr/LC_MESSAGES/django.po b/tabbycat/venues/locale/fr/LC_MESSAGES/django.po index 74bcc5ad50a..70b2aab8a1e 100644 --- a/tabbycat/venues/locale/fr/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-05 15:26-0300\n" -"PO-Revision-Date: 2020-07-10 16:27\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" "Last-Translator: philip_tc\n" "Language-Team: French\n" "Language: fr_FR\n" @@ -18,204 +18,202 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 +#: venues/apps.py msgid "Rooms" msgstr "Salles" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." msgstr "Le tirage est déjà publié, retire-le pour attribuer les salles." -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." msgstr "Le tirage n'est pas confirmé, confirme-le pour attribuer les salles." -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." msgstr "Les salles ont été attribués automatiquement aux débats avec succès." -#: venues/models.py:9 venues/models.py:66 +#: venues/models.py msgid "name" msgstr "nom" -#: venues/models.py:11 venues/models.py:120 +#: venues/models.py msgid "priority" msgstr "priorité" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" msgstr "Les salles ayant un nombre plus élevé de priorité seront privilégiées lors de l’attribution de salles de débats" -#: venues/models.py:15 venues/models.py:78 +#: venues/models.py msgid "tournament" msgstr "tournoi" -#: venues/models.py:16 +#: venues/models.py msgid "URL" msgstr "URL" -#: venues/models.py:17 +#: venues/models.py msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" msgstr "Un URL qui donne plus d'information sur la salle, comme une carte ou lien de rencontre (pour tournois en ligne)" -#: venues/models.py:24 +#: venues/models.py msgid "room" msgstr "salle" -#: venues/models.py:25 venues/models.py:76 +#: venues/models.py msgid "rooms" msgstr "salles" -#: venues/models.py:61 +#: venues/models.py msgid "Don't display in room name" msgstr "Ne pas afficher dans le nom de la salle" -#: venues/models.py:62 +#: venues/models.py msgid "Display as prefix" msgstr "Afficher sous forme de préfixe" -#: venues/models.py:63 +#: venues/models.py msgid "Display as suffix" msgstr "Afficher sous forme de suffixe" -#: venues/models.py:67 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." msgstr "Nom de la catégorie, par exemple, « Violet », « sans marches », « près de la salle de tab ». Ce nom est affiché lorsque la catégorie est le préfixe ou suffixe d’un nom de salle dans le tirage, par exemple, « Violet – G05 »." -#: venues/models.py:71 +#: venues/models.py msgid "description" msgstr "description" -#: venues/models.py:72 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." msgstr "Description, comme le prédicat d’une phrase, par exemple « a accès sans étape », « est à proximité de la salle de réunion d’information ». Cette description fait suite à « Cette salle » lorsque affiché dans les info-bulles, par exemple, « cette salle est à proximité de la salle de réunion d’information. »." -#: venues/models.py:82 +#: venues/models.py msgid "display in room name" msgstr "afficher dans le nom de la salle" -#: venues/models.py:83 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" msgstr "Préfixe : « Violet – G05 », suffixe : « G05 – Violet »" -#: venues/models.py:85 +#: venues/models.py msgid "display in public tooltip" msgstr "afficher dans l’info-bulle public" -#: venues/models.py:86 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." msgstr "Montre la description dans l’info-bulle décrivant la salle sur les pages publiques. La description, si non vide, s'affiche toujours sur les pages administratives." -#: venues/models.py:90 +#: venues/models.py msgid "room category" msgstr "catégorie de salle" -#: venues/models.py:91 +#: venues/models.py msgid "room categories" msgstr "catégories de salle" -#: venues/models.py:119 +#: venues/models.py msgid "category" msgstr "catégorie" -#: venues/models.py:123 +#: venues/models.py msgid "subject content type" msgstr "type de contenu du sujet" -#: venues/models.py:126 +#: venues/models.py msgid "subject ID" msgstr "identifiant de sujet" -#: venues/models.py:132 +#: venues/models.py msgid "room constraint" msgstr "contrainte de salle" -#: venues/models.py:133 +#: venues/models.py msgid "room constraints" msgstr "contraintes de salle" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" msgstr "Catégories de salle" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." msgstr "En utilisant les catégories de salles, vous pouvez grouper les salles dans les « zones » pour les afficher dans le tirage et pour rendre la navigation plus facile pour les participants, et/ou spécifier les contraintes sur l'attribution des salles, pour que les équipes, juges ou institutions doivent être attribué une salle qui est dans une catégorie particulière." -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." msgstr "Si vous souhaitez supprimer des catégories de salles, utilisez la zone pour modifier la base de données." -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" msgstr "Enregistrer les catégories de salles" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" msgstr "Contraintes de salle" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." msgstr "En spécifier des contraintes de salle, vous pouvez demander à l'allocateur des salles d'essayer de mettre l'équipe indiquée ou le juge indiqué, ou tous les équipes (mais pas les juges) de l'institution indiquée, dans une salle de la catégorie indiquée. Le champ « priorité » résout les contraintes contradictoires : le nombre plus élevé a la priorité. Vous pouvez aussi utiliser le champ de priorité pour spécifier des contraintes « d'ordre inférieur », qui sont prises si aucune contrainte de priorité plus élevé ne pouvais été satisfaite." -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" msgstr "Enregistrer les contraintes de salle" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" msgstr "Contrainte de salle de %(name)s est satisfaite (%(category)s)" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" msgstr "Cette salle ne satisfait aucune contrainte de %(name)s" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" msgstr "Contrainte de salle de %(team)s est satisfaite (%(category)s, via institution %(institution)s)" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" msgstr "Cette salle ne satisfait aucune contrainte de l'institution %(institution)s (%(team)s)" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" msgstr "Modifier Salles" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" msgstr[0] "Sauvegardé catégorie de salle : %(list)s" msgstr[1] "Sauvegardé catégories de salle : %(list)s" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." msgstr "Aucune catégorie de salle a été modifiée." -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "%s (Juge)" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" msgstr "%s (Équipe)" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" msgstr "%s (Institution)" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." From 6b332b71b4260ce416e0ccbd8fd61f49b3c547dc Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Mon, 6 Jul 2020 03:03:45 +1000 Subject: [PATCH 209/255] New translations django.po (German) --- docs/locale/de/LC_MESSAGES/about/authors.po | 6 +- docs/locale/de/LC_MESSAGES/about/changelog.po | 6 +- .../de/LC_MESSAGES/about/contributing.po | 6 +- docs/locale/de/LC_MESSAGES/about/licence.po | 6 +- docs/locale/de/LC_MESSAGES/about/support.po | 6 +- .../LC_MESSAGES/about/tournament-history.po | 6 +- .../features/adjudicator-allocation.po | 6 +- .../features/adjudicator-feedback.po | 8 +- .../locale/de/LC_MESSAGES/features/backups.po | 6 +- docs/locale/de/LC_MESSAGES/features/breaks.po | 6 +- .../de/LC_MESSAGES/features/check-ins.po | 6 +- .../de/LC_MESSAGES/features/data-entry.po | 6 +- .../de/LC_MESSAGES/features/data-importers.po | 6 +- .../features/draw-generation-bp.po | 6 +- .../LC_MESSAGES/features/draw-generation.po | 6 +- .../de/LC_MESSAGES/features/notifications.po | 6 +- .../LC_MESSAGES/features/preformed-panels.po | 6 +- .../de/LC_MESSAGES/features/printing.po | 6 +- .../LC_MESSAGES/features/standings-rules.po | 6 +- .../LC_MESSAGES/features/team-code-names.po | 6 +- .../de/LC_MESSAGES/features/user-accounts.po | 6 +- .../LC_MESSAGES/features/venue-constraints.po | 6 +- .../de/LC_MESSAGES/guide/comparisons.po | 6 +- docs/locale/de/LC_MESSAGES/guide/scaling.po | 6 +- .../LC_MESSAGES/guide/tournament-logistics.po | 8 +- docs/locale/de/LC_MESSAGES/guide/upgrading.po | 6 +- docs/locale/de/LC_MESSAGES/index.po | 6 +- docs/locale/de/LC_MESSAGES/install/docker.po | 6 +- docs/locale/de/LC_MESSAGES/install/heroku.po | 6 +- docs/locale/de/LC_MESSAGES/install/linux.po | 6 +- docs/locale/de/LC_MESSAGES/install/local.po | 6 +- docs/locale/de/LC_MESSAGES/install/osx.po | 6 +- docs/locale/de/LC_MESSAGES/install/windows.po | 6 +- docs/locale/de/LC_MESSAGES/install/wsl.po | 6 +- .../LC_MESSAGES/use/finishing-a-tournament.po | 6 +- .../de/LC_MESSAGES/use/importing-data.po | 6 +- .../LC_MESSAGES/use/running-a-tournament.po | 6 +- .../LC_MESSAGES/use/starting-a-tournament.po | 6 +- .../actionlog/locale/de/LC_MESSAGES/django.po | 160 +-- .../locale/de/LC_MESSAGES/django.po | 207 ++-- .../locale/de/LC_MESSAGES/django.po | 496 ++++----- .../locale/de/LC_MESSAGES/django.po | 168 ++- .../breakqual/locale/de/LC_MESSAGES/django.po | 260 ++--- tabbycat/draw/locale/de/LC_MESSAGES/django.po | 629 ++++++------ .../importer/locale/de/LC_MESSAGES/django.po | 250 +++-- tabbycat/locale/de/LC_MESSAGES/django.po | 576 ++++++----- tabbycat/locale/de/LC_MESSAGES/djangojs.po | 16 +- .../motions/locale/de/LC_MESSAGES/django.po | 248 +++-- .../locale/de/LC_MESSAGES/django.po | 236 +++-- .../options/locale/de/LC_MESSAGES/django.po | 959 ++++++++++-------- .../locale/de/LC_MESSAGES/django.po | 591 ++++++----- .../printing/locale/de/LC_MESSAGES/django.po | 70 +- .../locale/de/LC_MESSAGES/django.po | 91 +- .../results/locale/de/LC_MESSAGES/django.po | 742 ++++++++------ .../standings/locale/de/LC_MESSAGES/django.po | 348 +++---- .../locale/de/LC_MESSAGES/django.po | 710 +++++++------ .../utils/locale/de/LC_MESSAGES/django.po | 345 ++++--- .../venues/locale/de/LC_MESSAGES/django.po | 108 +- 58 files changed, 4035 insertions(+), 3407 deletions(-) diff --git a/docs/locale/de/LC_MESSAGES/about/authors.po b/docs/locale/de/LC_MESSAGES/about/authors.po index ea37af572cb..a6fbf77cd95 100644 --- a/docs/locale/de/LC_MESSAGES/about/authors.po +++ b/docs/locale/de/LC_MESSAGES/about/authors.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:27\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:21\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/authors.po\n" +"X-Crowdin-File-ID: 1259\n" "Language: de_DE\n" #: ../../../AUTHORS.rst:3 diff --git a/docs/locale/de/LC_MESSAGES/about/changelog.po b/docs/locale/de/LC_MESSAGES/about/changelog.po index c353b85c4ba..0803f4e7b5f 100644 --- a/docs/locale/de/LC_MESSAGES/about/changelog.po +++ b/docs/locale/de/LC_MESSAGES/about/changelog.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:38\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:22\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/changelog.po\n" +"X-Crowdin-File-ID: 1261\n" "Language: de_DE\n" #: ../../../CHANGELOG.rst:3 diff --git a/docs/locale/de/LC_MESSAGES/about/contributing.po b/docs/locale/de/LC_MESSAGES/about/contributing.po index e277a549b52..f2cd080988c 100644 --- a/docs/locale/de/LC_MESSAGES/about/contributing.po +++ b/docs/locale/de/LC_MESSAGES/about/contributing.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:27\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:21\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/contributing.po\n" +"X-Crowdin-File-ID: 1263\n" "Language: de_DE\n" #: ../../../CONTRIBUTING.rst:3 diff --git a/docs/locale/de/LC_MESSAGES/about/licence.po b/docs/locale/de/LC_MESSAGES/about/licence.po index 2f9df93a54c..09dca099c21 100644 --- a/docs/locale/de/LC_MESSAGES/about/licence.po +++ b/docs/locale/de/LC_MESSAGES/about/licence.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:27\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:18\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/licence.po\n" +"X-Crowdin-File-ID: 1265\n" "Language: de_DE\n" #: ../../../LICENSE.rst:3 diff --git a/docs/locale/de/LC_MESSAGES/about/support.po b/docs/locale/de/LC_MESSAGES/about/support.po index 2339210e0bf..7e4f1c3ac7d 100644 --- a/docs/locale/de/LC_MESSAGES/about/support.po +++ b/docs/locale/de/LC_MESSAGES/about/support.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:27\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:18\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/support.po\n" +"X-Crowdin-File-ID: 1267\n" "Language: de_DE\n" #: ../../about/support.rst:3 diff --git a/docs/locale/de/LC_MESSAGES/about/tournament-history.po b/docs/locale/de/LC_MESSAGES/about/tournament-history.po index a26269d0393..446b3393c24 100644 --- a/docs/locale/de/LC_MESSAGES/about/tournament-history.po +++ b/docs/locale/de/LC_MESSAGES/about/tournament-history.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:27\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:20\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/tournament-history.po\n" +"X-Crowdin-File-ID: 1335\n" "Language: de_DE\n" #: ../../about/tournament-history.rst:3 diff --git a/docs/locale/de/LC_MESSAGES/features/adjudicator-allocation.po b/docs/locale/de/LC_MESSAGES/features/adjudicator-allocation.po index bdd7dc00850..f87d9f1dc13 100644 --- a/docs/locale/de/LC_MESSAGES/features/adjudicator-allocation.po +++ b/docs/locale/de/LC_MESSAGES/features/adjudicator-allocation.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:27\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:19\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-allocation.po\n" +"X-Crowdin-File-ID: 1271\n" "Language: de_DE\n" #: ../../features/adjudicator-allocation.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/features/adjudicator-feedback.po b/docs/locale/de/LC_MESSAGES/features/adjudicator-feedback.po index 15ea72ce6cb..688f199c4f8 100644 --- a/docs/locale/de/LC_MESSAGES/features/adjudicator-feedback.po +++ b/docs/locale/de/LC_MESSAGES/features/adjudicator-feedback.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:56\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2021-11-29 02:03\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,13 +12,15 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-feedback.po\n" +"X-Crowdin-File-ID: 1273\n" "Language: de_DE\n" #: ../../features/adjudicator-feedback.rst:5 msgid "Adjudicator Feedback" -msgstr "JurorIn-Feedback" +msgstr "Jurorenfeedback" #: ../../features/adjudicator-feedback.rst:7 msgid "You can set the questions that are used on adjudicator feedback forms. The only field that is permanently there is the ``score`` field, which is an overall score assessing the adjudicator. All other questions (including a generic comments section) must be defined if you want them to be on the form." diff --git a/docs/locale/de/LC_MESSAGES/features/backups.po b/docs/locale/de/LC_MESSAGES/features/backups.po index 591d269dba7..fd19367ae88 100644 --- a/docs/locale/de/LC_MESSAGES/features/backups.po +++ b/docs/locale/de/LC_MESSAGES/features/backups.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:27\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:24\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/backups.po\n" +"X-Crowdin-File-ID: 1275\n" "Language: de_DE\n" #: ../../features/backups.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/features/breaks.po b/docs/locale/de/LC_MESSAGES/features/breaks.po index f5492bec753..681d71df214 100644 --- a/docs/locale/de/LC_MESSAGES/features/breaks.po +++ b/docs/locale/de/LC_MESSAGES/features/breaks.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:27\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:26\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/breaks.po\n" +"X-Crowdin-File-ID: 1277\n" "Language: de_DE\n" #: ../../features/breaks.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/features/check-ins.po b/docs/locale/de/LC_MESSAGES/features/check-ins.po index 3d1accac147..25ac5574ed6 100644 --- a/docs/locale/de/LC_MESSAGES/features/check-ins.po +++ b/docs/locale/de/LC_MESSAGES/features/check-ins.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:27\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:25\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/check-ins.po\n" +"X-Crowdin-File-ID: 1279\n" "Language: de_DE\n" #: ../../features/check-ins.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/features/data-entry.po b/docs/locale/de/LC_MESSAGES/features/data-entry.po index 5484a856d34..faf2a5d9ef4 100644 --- a/docs/locale/de/LC_MESSAGES/features/data-entry.po +++ b/docs/locale/de/LC_MESSAGES/features/data-entry.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:27\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:23\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-entry.po\n" +"X-Crowdin-File-ID: 1281\n" "Language: de_DE\n" #: ../../features/data-entry.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/features/data-importers.po b/docs/locale/de/LC_MESSAGES/features/data-importers.po index de73a179782..6ffc1be211f 100644 --- a/docs/locale/de/LC_MESSAGES/features/data-importers.po +++ b/docs/locale/de/LC_MESSAGES/features/data-importers.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:28\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:22\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-importers.po\n" +"X-Crowdin-File-ID: 1283\n" "Language: de_DE\n" #: ../../features/data-importers.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/features/draw-generation-bp.po b/docs/locale/de/LC_MESSAGES/features/draw-generation-bp.po index d05d04dcca5..246b2c2c7e6 100644 --- a/docs/locale/de/LC_MESSAGES/features/draw-generation-bp.po +++ b/docs/locale/de/LC_MESSAGES/features/draw-generation-bp.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:27\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:24\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation-bp.po\n" +"X-Crowdin-File-ID: 1285\n" "Language: de_DE\n" #: ../../features/draw-generation-bp.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/features/draw-generation.po b/docs/locale/de/LC_MESSAGES/features/draw-generation.po index 76e16b2a718..751143de46b 100644 --- a/docs/locale/de/LC_MESSAGES/features/draw-generation.po +++ b/docs/locale/de/LC_MESSAGES/features/draw-generation.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:28\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:23\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation.po\n" +"X-Crowdin-File-ID: 1287\n" "Language: de_DE\n" #: ../../features/draw-generation.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/features/notifications.po b/docs/locale/de/LC_MESSAGES/features/notifications.po index 88ea4967716..f8e364f8bc4 100644 --- a/docs/locale/de/LC_MESSAGES/features/notifications.po +++ b/docs/locale/de/LC_MESSAGES/features/notifications.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:28\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:13\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/notifications.po\n" +"X-Crowdin-File-ID: 1289\n" "Language: de_DE\n" #: ../../features/notifications.rst:3 diff --git a/docs/locale/de/LC_MESSAGES/features/preformed-panels.po b/docs/locale/de/LC_MESSAGES/features/preformed-panels.po index f90169de109..eacf1d0c0e9 100644 --- a/docs/locale/de/LC_MESSAGES/features/preformed-panels.po +++ b/docs/locale/de/LC_MESSAGES/features/preformed-panels.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:28\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:12\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/preformed-panels.po\n" +"X-Crowdin-File-ID: 1291\n" "Language: de_DE\n" #: ../../features/preformed-panels.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/features/printing.po b/docs/locale/de/LC_MESSAGES/features/printing.po index 8bcc26bf711..23dae55e60a 100644 --- a/docs/locale/de/LC_MESSAGES/features/printing.po +++ b/docs/locale/de/LC_MESSAGES/features/printing.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:28\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:14\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/printing.po\n" +"X-Crowdin-File-ID: 1293\n" "Language: de_DE\n" #: ../../features/printing.rst:3 diff --git a/docs/locale/de/LC_MESSAGES/features/standings-rules.po b/docs/locale/de/LC_MESSAGES/features/standings-rules.po index 6c5895c7518..47819732af9 100644 --- a/docs/locale/de/LC_MESSAGES/features/standings-rules.po +++ b/docs/locale/de/LC_MESSAGES/features/standings-rules.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:55\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:13\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/standings-rules.po\n" +"X-Crowdin-File-ID: 1295\n" "Language: de_DE\n" #: ../../features/standings-rules.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/features/team-code-names.po b/docs/locale/de/LC_MESSAGES/features/team-code-names.po index 8f32fef7cdb..7089880cb52 100644 --- a/docs/locale/de/LC_MESSAGES/features/team-code-names.po +++ b/docs/locale/de/LC_MESSAGES/features/team-code-names.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:28\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:12\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/team-code-names.po\n" +"X-Crowdin-File-ID: 1297\n" "Language: de_DE\n" #: ../../features/team-code-names.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/features/user-accounts.po b/docs/locale/de/LC_MESSAGES/features/user-accounts.po index 456c7144afc..e2153dd76a1 100644 --- a/docs/locale/de/LC_MESSAGES/features/user-accounts.po +++ b/docs/locale/de/LC_MESSAGES/features/user-accounts.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:28\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:11\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/user-accounts.po\n" +"X-Crowdin-File-ID: 1299\n" "Language: de_DE\n" #: ../../features/user-accounts.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/features/venue-constraints.po b/docs/locale/de/LC_MESSAGES/features/venue-constraints.po index f64e59729f3..ac653fb9992 100644 --- a/docs/locale/de/LC_MESSAGES/features/venue-constraints.po +++ b/docs/locale/de/LC_MESSAGES/features/venue-constraints.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:28\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:12\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/venue-constraints.po\n" +"X-Crowdin-File-ID: 1301\n" "Language: de_DE\n" #: ../../features/venue-constraints.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/guide/comparisons.po b/docs/locale/de/LC_MESSAGES/guide/comparisons.po index 60041a31847..97a4335277e 100644 --- a/docs/locale/de/LC_MESSAGES/guide/comparisons.po +++ b/docs/locale/de/LC_MESSAGES/guide/comparisons.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:28\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:11\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/comparisons.po\n" +"X-Crowdin-File-ID: 1303\n" "Language: de_DE\n" #: ../../guide/comparisons.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/guide/scaling.po b/docs/locale/de/LC_MESSAGES/guide/scaling.po index d156d3645d4..fc0c86f5718 100644 --- a/docs/locale/de/LC_MESSAGES/guide/scaling.po +++ b/docs/locale/de/LC_MESSAGES/guide/scaling.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:28\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:14\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/scaling.po\n" +"X-Crowdin-File-ID: 1305\n" "Language: de_DE\n" #: ../../guide/scaling.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/guide/tournament-logistics.po b/docs/locale/de/LC_MESSAGES/guide/tournament-logistics.po index 91dc10bb76f..35c319d238f 100644 --- a/docs/locale/de/LC_MESSAGES/guide/tournament-logistics.po +++ b/docs/locale/de/LC_MESSAGES/guide/tournament-logistics.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:28\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2021-08-25 14:24\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/tournament-logistics.po\n" +"X-Crowdin-File-ID: 1307\n" "Language: de_DE\n" #: ../../guide/tournament-logistics.rst:5 @@ -406,7 +408,7 @@ msgstr "" #: ../../guide/tournament-logistics.rst:166 msgid "Round" -msgstr "" +msgstr "Runde" #: ../../guide/tournament-logistics.rst:166 msgid "1" diff --git a/docs/locale/de/LC_MESSAGES/guide/upgrading.po b/docs/locale/de/LC_MESSAGES/guide/upgrading.po index 0315621116c..fd05c8ae8ee 100644 --- a/docs/locale/de/LC_MESSAGES/guide/upgrading.po +++ b/docs/locale/de/LC_MESSAGES/guide/upgrading.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:28\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:16\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/upgrading.po\n" +"X-Crowdin-File-ID: 1309\n" "Language: de_DE\n" #: ../../guide/upgrading.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/index.po b/docs/locale/de/LC_MESSAGES/index.po index b1a94c78c19..63af9148f5b 100644 --- a/docs/locale/de/LC_MESSAGES/index.po +++ b/docs/locale/de/LC_MESSAGES/index.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:29\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:26\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/index.po\n" +"X-Crowdin-File-ID: 1311\n" "Language: de_DE\n" #: ../../index.rst:18 diff --git a/docs/locale/de/LC_MESSAGES/install/docker.po b/docs/locale/de/LC_MESSAGES/install/docker.po index 6bed4185be8..47d7237f2cc 100644 --- a/docs/locale/de/LC_MESSAGES/install/docker.po +++ b/docs/locale/de/LC_MESSAGES/install/docker.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:28\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:17\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/docker.po\n" +"X-Crowdin-File-ID: 1313\n" "Language: de_DE\n" #: ../../install/docker.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/install/heroku.po b/docs/locale/de/LC_MESSAGES/install/heroku.po index 6ac26d4eeb9..f6a09f5fa41 100644 --- a/docs/locale/de/LC_MESSAGES/install/heroku.po +++ b/docs/locale/de/LC_MESSAGES/install/heroku.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:28\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:17\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/heroku.po\n" +"X-Crowdin-File-ID: 1315\n" "Language: de_DE\n" #: ../../install/heroku.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/install/linux.po b/docs/locale/de/LC_MESSAGES/install/linux.po index 42510ca8bd3..8a387c95cb8 100644 --- a/docs/locale/de/LC_MESSAGES/install/linux.po +++ b/docs/locale/de/LC_MESSAGES/install/linux.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:28\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:14\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/linux.po\n" +"X-Crowdin-File-ID: 1317\n" "Language: de_DE\n" #: ../../install/linux.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/install/local.po b/docs/locale/de/LC_MESSAGES/install/local.po index 1410ccec18e..a6221479f9f 100644 --- a/docs/locale/de/LC_MESSAGES/install/local.po +++ b/docs/locale/de/LC_MESSAGES/install/local.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:29\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:14\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/local.po\n" +"X-Crowdin-File-ID: 1319\n" "Language: de_DE\n" #: ../../install/local.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/install/osx.po b/docs/locale/de/LC_MESSAGES/install/osx.po index a4e6e21eb3f..886f2baa3af 100644 --- a/docs/locale/de/LC_MESSAGES/install/osx.po +++ b/docs/locale/de/LC_MESSAGES/install/osx.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:29\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:16\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/osx.po\n" +"X-Crowdin-File-ID: 1321\n" "Language: de_DE\n" #: ../../install/osx.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/install/windows.po b/docs/locale/de/LC_MESSAGES/install/windows.po index db4ef5214c7..1c9ba806db9 100644 --- a/docs/locale/de/LC_MESSAGES/install/windows.po +++ b/docs/locale/de/LC_MESSAGES/install/windows.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:29\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:15\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/windows.po\n" +"X-Crowdin-File-ID: 1323\n" "Language: de_DE\n" #: ../../install/windows.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/install/wsl.po b/docs/locale/de/LC_MESSAGES/install/wsl.po index 46e1e33f4a3..75961230ba0 100644 --- a/docs/locale/de/LC_MESSAGES/install/wsl.po +++ b/docs/locale/de/LC_MESSAGES/install/wsl.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:29\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:27\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/wsl.po\n" +"X-Crowdin-File-ID: 1325\n" "Language: de_DE\n" #: ../../install/wsl.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/use/finishing-a-tournament.po b/docs/locale/de/LC_MESSAGES/use/finishing-a-tournament.po index fab87d4d3a7..eaf8d231c86 100644 --- a/docs/locale/de/LC_MESSAGES/use/finishing-a-tournament.po +++ b/docs/locale/de/LC_MESSAGES/use/finishing-a-tournament.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:55\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:28\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/finishing-a-tournament.po\n" +"X-Crowdin-File-ID: 1327\n" "Language: de_DE\n" #: ../../use/finishing-a-tournament.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/use/importing-data.po b/docs/locale/de/LC_MESSAGES/use/importing-data.po index ce90f75bf7c..dea01bdec3c 100644 --- a/docs/locale/de/LC_MESSAGES/use/importing-data.po +++ b/docs/locale/de/LC_MESSAGES/use/importing-data.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:29\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:28\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/importing-data.po\n" +"X-Crowdin-File-ID: 1329\n" "Language: de_DE\n" #: ../../use/importing-data.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/use/running-a-tournament.po b/docs/locale/de/LC_MESSAGES/use/running-a-tournament.po index 628f0c930b5..8acbf5fb4fe 100644 --- a/docs/locale/de/LC_MESSAGES/use/running-a-tournament.po +++ b/docs/locale/de/LC_MESSAGES/use/running-a-tournament.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:29\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:26\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/running-a-tournament.po\n" +"X-Crowdin-File-ID: 1331\n" "Language: de_DE\n" #: ../../use/running-a-tournament.rst:5 diff --git a/docs/locale/de/LC_MESSAGES/use/starting-a-tournament.po b/docs/locale/de/LC_MESSAGES/use/starting-a-tournament.po index 03a3c9eea8c..c7d2d7ae317 100644 --- a/docs/locale/de/LC_MESSAGES/use/starting-a-tournament.po +++ b/docs/locale/de/LC_MESSAGES/use/starting-a-tournament.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:29\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:26\n" +"Last-Translator: \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/starting-a-tournament.po\n" +"X-Crowdin-File-ID: 1333\n" "Language: de_DE\n" #: ../../use/starting-a-tournament.rst:5 diff --git a/tabbycat/actionlog/locale/de/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/de/LC_MESSAGES/django.po index 44f04695c2d..467cbfb2e5c 100644 --- a/tabbycat/actionlog/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/de/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:27\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" +"Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" "MIME-Version: 1.0\n" @@ -12,310 +12,312 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" msgstr "" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" msgstr "" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" msgstr "" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" msgstr "" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" msgstr "" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" msgstr "" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" msgstr "" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" msgstr "" -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" msgstr "" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" msgstr "" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" msgstr "" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" msgstr "" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" msgstr "" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" msgstr "" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" msgstr "" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" msgstr "" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" msgstr "" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" msgstr "" -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" msgstr "" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" msgstr "" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" msgstr "" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" msgstr "" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" msgstr "" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" msgstr "" -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "" -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" msgstr "" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" msgstr "" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" msgstr "" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" msgstr "" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" msgstr "" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" msgstr "" -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" msgstr "" -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" msgstr "" -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" msgstr "" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" msgstr "" -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" msgstr "" -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" msgstr "" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" msgstr "" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" msgstr "" -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" msgstr "" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" msgstr "" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" msgstr "" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" msgstr "" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" msgstr "" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" msgstr "" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" msgstr "" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" msgstr "" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" msgstr "" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" msgstr "" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" msgstr "" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" msgstr "" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" msgstr "" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" msgstr "" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" msgstr "" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" msgstr "" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" msgstr "" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" msgstr "" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" msgstr "" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" msgstr "" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" msgstr "" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" msgstr "" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" msgstr "" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" msgstr "" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" msgstr "" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" msgstr "typ" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" msgstr "" -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "Turnier" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "runde" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" msgstr "" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" msgstr "" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" msgstr "" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" msgstr "" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." msgstr "" -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" msgstr "" diff --git a/tabbycat/adjallocation/locale/de/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/de/LC_MESSAGES/django.po index 08b58152713..879c7261b49 100644 --- a/tabbycat/adjallocation/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/de/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:26\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" +"Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" "MIME-Version: 1.0\n" @@ -12,439 +12,440 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." msgstr "" -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." msgstr[0] "" msgstr[1] "" -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." msgstr[0] "" msgstr[1] "" -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." msgstr "" -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" msgstr "" -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." msgstr "" -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." msgstr "" -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." msgstr "" -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" msgstr "" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." msgstr "" -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." msgstr "" -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." msgstr "" -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." msgstr "" -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" msgstr[0] "" msgstr[1] "" -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." msgstr "" -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." msgstr "" -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" msgstr[0] "" msgstr[1] "" -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." msgstr "" -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." msgstr "" -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." msgstr "" -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." msgstr "" -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." msgstr "" -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." msgstr "" -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." msgstr "" -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." msgstr "" -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" -msgstr "HauptjurorIn" +msgstr "Hauptjuror" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" msgstr "" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" -msgstr "Jurierlehrling" +msgstr "Trainee" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "Debatte" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "Juror" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" msgstr "typ" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" msgstr "" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" msgstr "" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" msgstr "" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "Team" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" msgstr "" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" msgstr "" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "Juror 1" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "Juror 2" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" msgstr "" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" msgstr "" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" msgstr "" -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" msgstr "" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" msgstr "" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" msgstr "" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" msgstr "" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "runde" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" msgstr "" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" msgstr "" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" msgstr "" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" msgstr "" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" msgstr "" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" msgstr "" -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" msgstr "" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" msgstr "" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" msgstr "" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" msgstr "" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" msgstr "" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" msgstr "Jury" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" msgstr "" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" msgstr "" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." msgstr "" -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" msgstr "" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." msgstr "" -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." msgstr "" -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" msgstr "" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" msgstr "" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" msgstr "" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" msgstr "" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" msgstr "" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "Männlich" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" msgstr "Weiblich" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "Andere" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" msgstr "" -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" msgstr "" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" msgstr "" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" msgstr "" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" msgstr "" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" msgstr "" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." msgstr "" -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" msgstr "" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" msgstr "" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." msgstr "" -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" msgstr "" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" msgstr "" -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." msgstr "" -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." msgstr "" diff --git a/tabbycat/adjfeedback/locale/de/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/de/LC_MESSAGES/django.po index 996b36f5550..ac03b21c284 100644 --- a/tabbycat/adjfeedback/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/de/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:26\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" +"Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" "MIME-Version: 1.0\n" @@ -12,934 +12,952 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:43 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" msgstr "" -#: adjfeedback/admin.py:68 adjfeedback/admin.py:126 +#: adjfeedback/admin.py msgid "target" msgstr "" -#: adjfeedback/admin.py:69 adjfeedback/admin.py:127 adjfeedback/models.py:220 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" msgstr "" -#: adjfeedback/admin.py:70 adjfeedback/admin.py:128 adjfeedback/models.py:222 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" msgstr "" -#: adjfeedback/admin.py:84 +#: adjfeedback/admin.py msgid "Target" msgstr "" -#: adjfeedback/admin.py:85 adjfeedback/admin.py:149 +#: adjfeedback/admin.py msgid "Source" msgstr "" -#: adjfeedback/admin.py:167 +#: adjfeedback/admin.py +msgid "Feedback timestamp and version" +msgstr "" + +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgstr[0] "" msgstr[1] "" -#: adjfeedback/admin.py:179 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." msgstr[0] "" msgstr[1] "" -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." msgstr[0] "" msgstr[1] "" -#: adjfeedback/admin.py:202 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." msgstr[0] "" msgstr[1] "" -#: adjfeedback/admin.py:212 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." msgstr[0] "" msgstr[1] "" -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" -msgstr "JurorIn-Feedback" +msgstr "Jurorenfeedback" -#: adjfeedback/forms.py:25 +#: adjfeedback/forms.py msgid "chair" msgstr "Hauptjuror" -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "solo" msgstr "" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "panellist" msgstr "" -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "trainee" -msgstr "Jurierlehrling" +msgstr "Trainee" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:56 +#: adjfeedback/forms.py msgid "Yes" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:58 +#: adjfeedback/forms.py msgid "No" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:73 adjfeedback/forms.py:82 +#: adjfeedback/forms.py msgid "This field is required." msgstr "" -#: adjfeedback/forms.py:173 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" msgstr "" -#: adjfeedback/forms.py:185 +#: adjfeedback/forms.py msgid "Ignored" msgstr "" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:244 adjfeedback/forms.py:307 +#: adjfeedback/forms.py msgid "Submitted - " msgstr "" #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:245 adjfeedback/forms.py:312 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" msgstr "" -#: adjfeedback/forms.py:268 adjfeedback/forms.py:342 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "-- Juroren --" -#: adjfeedback/forms.py:285 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" msgstr "" -#: adjfeedback/forms.py:309 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "" -#: adjfeedback/forms.py:315 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" msgstr "" -#: adjfeedback/forms.py:317 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" msgstr "" -#: adjfeedback/forms.py:408 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" msgstr "" -#: adjfeedback/forms.py:413 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" msgstr "" -#: adjfeedback/forms.py:426 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." msgstr "" -#: adjfeedback/forms.py:432 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" msgstr "" -#: adjfeedback/forms.py:440 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" msgstr "" -#: adjfeedback/forms.py:455 +#: adjfeedback/forms.py msgid "There were no scores to import." msgstr "" -#: adjfeedback/models.py:12 adjfeedback/models.py:215 +#: adjfeedback/models.py msgid "adjudicator" msgstr "Juror" -#: adjfeedback/models.py:15 +#: adjfeedback/models.py msgid "round" msgstr "runde" -#: adjfeedback/models.py:16 adjfeedback/models.py:216 +#: adjfeedback/models.py msgid "score" msgstr "" -#: adjfeedback/models.py:17 +#: adjfeedback/models.py msgid "timestamp" msgstr "" -#: adjfeedback/models.py:20 +#: adjfeedback/models.py msgid "adjudicator base score history" msgstr "" -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score histories" msgstr "" -#: adjfeedback/models.py:29 +#: adjfeedback/models.py msgid "question" msgstr "Frage" -#: adjfeedback/models.py:31 +#: adjfeedback/models.py msgid "feedback" msgstr "Feedback" -#: adjfeedback/models.py:42 adjfeedback/models.py:50 adjfeedback/models.py:58 -#: adjfeedback/models.py:66 +#: adjfeedback/models.py msgid "answer" msgstr "Antwort" -#: adjfeedback/models.py:45 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" msgstr "" -#: adjfeedback/models.py:46 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" msgstr "" -#: adjfeedback/models.py:53 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" msgstr "" -#: adjfeedback/models.py:54 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" msgstr "" -#: adjfeedback/models.py:61 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" msgstr "" -#: adjfeedback/models.py:62 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" msgstr "" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" msgstr "" -#: adjfeedback/models.py:70 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" msgstr "" -#: adjfeedback/models.py:89 +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answers" +msgstr "" + +#: adjfeedback/models.py msgid "checkbox" msgstr "" -#: adjfeedback/models.py:90 +#: adjfeedback/models.py msgid "yes/no (dropdown)" msgstr "" -#: adjfeedback/models.py:91 +#: adjfeedback/models.py msgid "integer (textbox)" msgstr "" -#: adjfeedback/models.py:92 +#: adjfeedback/models.py msgid "integer scale" msgstr "" -#: adjfeedback/models.py:93 +#: adjfeedback/models.py msgid "float" msgstr "" -#: adjfeedback/models.py:94 adjfeedback/models.py:127 +#: adjfeedback/models.py msgid "text" msgstr "" -#: adjfeedback/models.py:95 +#: adjfeedback/models.py msgid "long text" msgstr "" -#: adjfeedback/models.py:96 +#: adjfeedback/models.py msgid "select one" msgstr "" -#: adjfeedback/models.py:97 +#: adjfeedback/models.py msgid "select multiple" msgstr "" -#: adjfeedback/models.py:123 +#: adjfeedback/models.py msgid "tournament" msgstr "Turnier" -#: adjfeedback/models.py:125 +#: adjfeedback/models.py msgid "sequence number" msgstr "" -#: adjfeedback/models.py:128 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" msgstr "" -#: adjfeedback/models.py:130 +#: adjfeedback/models.py msgid "name" msgstr "name" -#: adjfeedback/models.py:131 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" msgstr "" -#: adjfeedback/models.py:133 +#: adjfeedback/models.py msgid "reference" msgstr "" -#: adjfeedback/models.py:134 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" msgstr "" -#: adjfeedback/models.py:137 +#: adjfeedback/models.py msgid "from adjudicator" msgstr "" -#: adjfeedback/models.py:138 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" msgstr "" -#: adjfeedback/models.py:140 +#: adjfeedback/models.py msgid "from team" msgstr "" -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "Teams should be asked this question" msgstr "" -#: adjfeedback/models.py:144 +#: adjfeedback/models.py msgid "answer type" msgstr "" -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "required" -msgstr "benötigt" +msgstr "verpflichtend" -#: adjfeedback/models.py:147 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" msgstr "" -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "minimum value" msgstr "" -#: adjfeedback/models.py:150 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "" -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "maximum value" msgstr "" -#: adjfeedback/models.py:153 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "" -#: adjfeedback/models.py:160 +#: adjfeedback/models.py msgid "choices" msgstr "" -#: adjfeedback/models.py:161 -msgid "Permissible choices for select one/multiple fields, separated by '//' (ignored for other fields)" +#: adjfeedback/models.py +msgid "Permissible choices for select one/multiple fields (ignored for other fields)" msgstr "" -#: adjfeedback/models.py:166 +#: adjfeedback/models.py msgid "adjudicator feedback question" msgstr "" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "adjudicator feedback questions" msgstr "" -#: adjfeedback/models.py:225 adjfeedback/views.py:761 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" msgstr "" -#: adjfeedback/models.py:226 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" msgstr "" -#: adjfeedback/models.py:230 +#: adjfeedback/models.py msgid "adjudicator feedback" -msgstr "JurorIn-Feedback" +msgstr "jurorenfeedback" -#: adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator feedbacks" -msgstr "JurorIn-Feedbacks" +msgstr "jurorenfeedback" -#: adjfeedback/models.py:278 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." msgstr "" -#: adjfeedback/models.py:281 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." msgstr "" -#: adjfeedback/models.py:283 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" msgstr "" -#: adjfeedback/models.py:285 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." msgstr "" -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" msgstr "" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py +msgid "N/A" +msgstr "" + +#: adjfeedback/tables.py msgid "Current weighted score" msgstr "" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." msgstr "" -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" msgstr "" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" msgstr "" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" msgstr "" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:83 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:92 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." msgstr "" -#: adjfeedback/tables.py:96 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" msgstr "" -#: adjfeedback/tables.py:105 +#: adjfeedback/tables.py msgid "Feedback Per Round" msgstr "" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" msgstr "" -#: adjfeedback/tables.py:124 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" msgstr[0] "" msgstr[1] "" -#: adjfeedback/tables.py:147 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" msgstr "" -#: adjfeedback/tables.py:171 +#: adjfeedback/tables.py msgid "View Missing Feedback" msgstr "" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" msgstr "" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" -msgstr "Feedback übermitteln" +msgstr "Feedback abschicken" -#: adjfeedback/templates/enter_feedback.html:9 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format -msgid "Add Feedback from %(source_name)s" +msgid "Add Feedback from %(name)s" msgstr "" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" msgstr "" -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" msgstr "" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." msgstr "" -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." msgstr "" -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." msgstr "" -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" msgstr "Überblick" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" msgstr "" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" msgstr "" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" msgstr "" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" -msgstr "" +msgstr "Freitextfeld" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" msgstr "" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" msgstr "" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." msgstr "" -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." msgstr "" -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "\n" -" On %(adjudicator)s\n" -" " +msgid "On %(adjudicator)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" +msgid "Received as %(as_type)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" msgstr "" -#: adjfeedback/templates/feedback_card.html:85 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:90 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:95 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:95 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:100 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:105 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" msgstr "" -#: adjfeedback/templates/feedback_card.html:105 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" msgstr "" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" msgstr "" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" msgstr "" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html #, python-format -msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit on trainees." +msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:20 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:31 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" msgstr "Feedback" -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" msgstr[0] "%(c_chairs)s Hauptjuror" msgstr[1] "%(c_chairs)s Hauptjuroren" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" -msgstr[0] "%(c_trainees)s Jurierlehrling" -msgstr[1] "%(c_trainees)s Jurierlehrlingen" +msgstr[0] "%(c_trainees)s Trainee" +msgstr[1] "%(c_trainees)s Trainees" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" msgstr "" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" msgstr "" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" msgstr "" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 -#, python-format -msgid "Add feedback from %(name)s" -msgstr "" - -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" -msgstr "Übermitteln" +msgstr "Abschicken" -#: adjfeedback/views.py:117 +#: adjfeedback/views.py msgid "Feedback Overview" msgstr "" -#: adjfeedback/views.py:141 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" msgstr "" -#: adjfeedback/views.py:152 adjfeedback/views.py:176 adjfeedback/views.py:191 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" msgstr[0] "" msgstr[1] "" -#: adjfeedback/views.py:155 adjfeedback/views.py:181 adjfeedback/views.py:196 +#: adjfeedback/views.py msgid "Feedbacks" -msgstr "Feedbacks" +msgstr "Feedback" -#: adjfeedback/views.py:162 +#: adjfeedback/views.py msgid "Find Feedback" msgstr "" -#: adjfeedback/views.py:170 adjfeedback/views.py:706 +#: adjfeedback/views.py msgid "From Teams" msgstr "" -#: adjfeedback/views.py:185 adjfeedback/views.py:700 +#: adjfeedback/views.py msgid "From Adjudicators" msgstr "" -#: adjfeedback/views.py:270 +#: adjfeedback/views.py msgid "Latest Feedback" msgstr "" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "(30 most recent)" msgstr "" -#: adjfeedback/views.py:281 +#: adjfeedback/views.py msgid "Only Comments" msgstr "" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "(250 most recent)" msgstr "" -#: adjfeedback/views.py:293 +#: adjfeedback/views.py msgid "Important Feedback" msgstr "" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" msgstr "" -#: adjfeedback/views.py:361 +#: adjfeedback/views.py msgid "A Team" msgstr "" -#: adjfeedback/views.py:366 +#: adjfeedback/views.py msgid "Team" msgstr "Team" -#: adjfeedback/views.py:373 adjfeedback/views.py:392 +#: adjfeedback/views.py msgid "Institution" msgstr "" -#: adjfeedback/views.py:378 +#: adjfeedback/views.py msgid "An Adjudicator" msgstr "" -#: adjfeedback/views.py:385 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "Juror" -#: adjfeedback/views.py:512 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." msgstr "" -#: adjfeedback/views.py:542 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." msgstr "" -#: adjfeedback/views.py:621 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" msgstr "" -#: adjfeedback/views.py:644 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." msgstr "" -#: adjfeedback/views.py:671 +#: adjfeedback/views.py msgid "Feedback Progress" msgstr "" -#: adjfeedback/views.py:692 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" msgstr[0] "" msgstr[1] "" -#: adjfeedback/views.py:737 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." msgstr "" -#: adjfeedback/views.py:751 +#: adjfeedback/views.py msgid "confirmed" msgstr "" -#: adjfeedback/views.py:751 +#: adjfeedback/views.py msgid "un-confirmed" msgstr "" -#: adjfeedback/views.py:761 +#: adjfeedback/views.py msgid "un-ignored" msgstr "" -#: adjfeedback/views.py:797 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." diff --git a/tabbycat/availability/locale/de/LC_MESSAGES/django.po b/tabbycat/availability/locale/de/LC_MESSAGES/django.po index 5cc3664c69d..6003fd86fb4 100644 --- a/tabbycat/availability/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/de/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 08:55\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" +"Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" "MIME-Version: 1.0\n" @@ -12,301 +12,295 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" msgstr "" -#: availability/models.py:15 +#: availability/models.py msgid "content type" msgstr "" -#: availability/models.py:16 +#: availability/models.py msgid "object id" msgstr "" -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "runde" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" msgstr "" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" msgstr "" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" msgstr "" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" msgstr "" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" msgstr "" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" msgstr "" -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" msgstr "" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" msgstr "" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." msgstr "" -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." msgstr "" -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." msgstr "" -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgstr[0] "" msgstr[1] "" -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " msgstr "" -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" msgstr "" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." msgstr "" -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" msgstr "" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" msgstr "" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" msgstr "" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" msgstr "" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" msgstr "" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" msgstr "" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "Teams" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "Juroren" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" msgstr "Räume" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" msgstr "" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" msgstr "" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." msgstr "" -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." msgstr "" -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" msgstr "" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" msgstr "" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" msgstr "" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" msgstr "" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" @@ -314,7 +308,7 @@ msgstr[0] "" msgstr[1] "" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" @@ -324,7 +318,7 @@ msgstr[1] "" #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" @@ -332,67 +326,67 @@ msgstr[0] "" msgstr[1] "" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" msgstr[0] "" msgstr[1] "" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" msgstr "" -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" msgstr "" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" msgstr "" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" msgstr "" -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" msgstr "" -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" msgstr "" -#: availability/views.py:260 +#: availability/views.py msgid "Room" msgstr "Raum" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" msgstr "" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" msgstr "" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" msgstr "" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." msgstr "" -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." msgstr "" -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." msgstr "" -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." msgstr "" diff --git a/tabbycat/breakqual/locale/de/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/de/LC_MESSAGES/django.po index 112d6106fb4..c63f2c0c1ef 100644 --- a/tabbycat/breakqual/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/de/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 09:17\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" +"Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" "MIME-Version: 1.0\n" @@ -12,511 +12,511 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" msgstr "" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "" +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" +msgstr[1] "" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "Turnier" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "name" -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" msgstr "" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" msgstr "URL-Kürzel" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" msgstr "" -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" msgstr "" -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" msgstr "" -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" msgstr "" -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" msgstr "" -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" msgstr "" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" msgstr "" -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" msgstr "" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" msgstr "" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" msgstr "" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" msgstr "" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" msgstr "" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" msgstr "" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" msgstr "" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" msgstr "" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" msgstr "" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "Team" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "Rang" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" msgstr "" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" msgstr "" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" msgstr "" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" msgstr "" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" msgstr "" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" msgstr "" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" msgstr "" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" msgstr "" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" msgstr "" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" msgstr "" -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" msgstr "" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." msgstr "" -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." msgstr "" -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" msgstr "" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." msgstr "" -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" msgstr "Breaks" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " msgstr "" -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" msgstr "" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" msgstr "%(category)s Break" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " msgstr "" -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" msgstr "Breakend" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" msgstr "" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" msgstr "" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" msgstr "" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" msgstr "" -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" msgstr "" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." msgstr "" -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." msgstr "" -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." msgstr "" -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." msgstr "" -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." msgstr "" -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." msgstr "" -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" msgstr "" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" msgstr "" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" msgstr "Überblick" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" -msgstr "JurorInnen Break" +msgstr "Jurorenbreak" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." msgstr "" -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" msgstr "Break" -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "Juroren" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" msgstr "Finale" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" -msgstr "GF" +msgstr "F" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "Halbfinale" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "HF" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "Viertelfinale" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "VF" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "Achtelfinale" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "AF" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" msgstr "" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" msgstr "" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" msgstr "" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" msgstr "%s Finale" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" msgstr "%sF" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" msgstr "%s Halbfinale" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" msgstr "%sHF" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" msgstr "%s Viertelfinale" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" msgstr "" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" msgstr "%s Achtelfinale" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" msgstr "" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" msgstr "" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" msgstr "" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" msgstr "" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" msgstr "" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" msgstr "" -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" msgstr "" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" msgstr "" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" msgstr "" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." msgstr "" -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." msgstr "" -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" -msgstr "Breakende JurorInnen" +msgstr "Breakende Juroren" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" msgstr "" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" diff --git a/tabbycat/draw/locale/de/LC_MESSAGES/django.po b/tabbycat/draw/locale/de/LC_MESSAGES/django.po index f4e519c0e58..ff78af4baad 100644 --- a/tabbycat/draw/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/de/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:27\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:27\n" +"Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" "MIME-Version: 1.0\n" @@ -12,1133 +12,1108 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "" -msgstr[1] "" - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." msgstr[0] "" msgstr[1] "" -#: draw/admin.py:93 +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." msgstr[0] "" msgstr[1] "" -#: draw/apps.py:7 draw/views.py:429 draw/views.py:432 +#: draw/apps.py draw/views.py msgid "Draw" msgstr "" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "Too many swaps" msgstr "" -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" msgstr "" -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" msgstr "" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble up (history)" msgstr "" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble down (history)" msgstr "" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble up (institution)" msgstr "" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble down (institution)" msgstr "" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" msgstr "" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Can't bubble up/down" msgstr "" -#: draw/generator/__init__.py:26 +#: draw/generator/__init__.py msgid "Pull-up team" msgstr "" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." msgstr "" -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." msgstr "" -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." msgstr "" -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." msgstr "" -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." msgstr "" -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." msgstr "" -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." msgstr "" -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." msgstr "" -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." msgstr "" -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." msgstr "" -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." msgstr "" -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." msgstr "" -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." msgstr "" -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." msgstr "" -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." msgstr "" -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" msgstr "" -#: draw/manager.py:269 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." msgstr "" -#: draw/models.py:27 +#: draw/models.py msgid "none" msgstr "" -#: draw/models.py:28 +#: draw/models.py msgid "postponed" msgstr "" -#: draw/models.py:29 +#: draw/models.py msgid "draft" msgstr "" -#: draw/models.py:30 +#: draw/models.py msgid "confirmed" msgstr "" -#: draw/models.py:36 draw/models.py:389 +#: draw/models.py msgid "round" msgstr "runde" -#: draw/models.py:38 -msgid "venue" -msgstr "Raum" +#: draw/models.py +msgid "room" +msgstr "" -#: draw/models.py:41 +#: draw/models.py msgid "bracket" msgstr "" -#: draw/models.py:43 +#: draw/models.py msgid "room rank" msgstr "" -#: draw/models.py:49 +#: draw/models.py msgid "importance" msgstr "" -#: draw/models.py:51 +#: draw/models.py msgid "result status" msgstr "" -#: draw/models.py:53 +#: draw/models.py msgid "sides confirmed" msgstr "" -#: draw/models.py:54 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." msgstr "" -#: draw/models.py:57 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "Debatte" -#: draw/models.py:58 +#: draw/models.py msgid "debates" msgstr "Debatten" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:77 draw/models.py:102 +#: draw/models.py msgid " (sides not confirmed)" msgstr "" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:89 draw/models.py:106 +#: draw/models.py msgid " vs " msgstr "" -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" msgstr "" -#: draw/models.py:263 +#: draw/models.py msgid "negative" msgstr "" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" msgstr "eröffnende Regierung" -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" msgstr "eröffnende Opposition" -#: draw/models.py:266 +#: draw/models.py msgid "closing government" msgstr "schließende Regierung" -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" msgstr "schließende Opposition" -#: draw/models.py:274 draw/models.py:391 +#: draw/models.py msgid "team" msgstr "Team" -#: draw/models.py:276 draw/models.py:393 +#: draw/models.py msgid "side" msgstr "" -#: draw/models.py:282 +#: draw/models.py msgid "debate team" msgstr "" -#: draw/models.py:283 +#: draw/models.py msgid "debate teams" msgstr "" -#: draw/models.py:311 -msgid "placed 1st" -msgstr "" - -#: draw/models.py:313 -msgid "placed 2nd" -msgstr "" - -#: draw/models.py:315 -msgid "placed 3rd" -msgstr "" - -#: draw/models.py:317 -msgid "placed 4th" +#: draw/models.py +#, python-format +msgid "placed %(place)s" msgstr "" -#: draw/models.py:319 draw/models.py:326 +#: draw/models.py msgid "result unknown" msgstr "" -#: draw/models.py:322 +#: draw/models.py msgid "won" msgstr "" -#: draw/models.py:324 +#: draw/models.py msgid "lost" msgstr "" -#: draw/models.py:397 +#: draw/models.py msgid "team side allocation" msgstr "" -#: draw/models.py:398 +#: draw/models.py msgid "team side allocations" msgstr "" #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" msgstr "" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" msgstr "Team %(num)d" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" msgstr "" -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" msgstr "" -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" msgstr "" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" msgstr "" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" msgstr "" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" msgstr "" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" msgstr "" -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" msgstr "" -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" msgstr "" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" msgstr "" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" msgstr "" -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" msgstr "" -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" msgstr "" -#: draw/tables.py:292 +#: draw/tables.py msgid "After" msgstr "" -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" msgstr "" -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" msgstr "" -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" msgstr "" -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" msgstr "Status" -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" msgstr "" -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "%(team)s: %(metric)s" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" msgstr "" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" msgstr "" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" msgstr "" -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" msgstr "" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" msgstr "" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" msgstr "" -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" msgstr "" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" msgstr "" -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" msgstr "" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" msgstr "" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" msgstr "" -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" msgstr "" -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" msgstr "" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." -msgstr "" - -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." msgstr "" -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "" +msgid_plural "Enter motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" msgstr "" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." msgstr "" -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." msgstr "" -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." msgstr "" -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" msgstr "" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." msgstr "" -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." msgstr "" -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:200 +#: draw/templates/draw_display_admin.html msgid "Release Motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:201 -msgid "Release motion to public" -msgstr "" +msgid_plural "Release Motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:202 -msgid "Unrelease motion to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." msgstr "" -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." msgstr "" -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "" - -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "" +msgid_plural "Motions have been released publicly." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" msgstr "" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" msgstr "" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" msgstr "" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" msgstr "" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" msgstr "" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" msgstr "" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" msgstr "" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" msgstr "" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" msgstr "" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" msgstr "" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" msgstr "" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" msgstr "" -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" msgstr "" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" msgstr "" -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" msgstr "" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" msgstr "" -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" msgstr "" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" msgstr "" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" msgstr "" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" msgstr "" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." msgstr "" -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." msgstr "" -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." msgstr "" -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" msgstr "" -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" msgstr "" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" msgstr "" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" msgstr "" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" msgstr "" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" msgstr "" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" msgstr "" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." msgstr "" -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." msgstr "" -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " msgstr "" -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." msgstr "" -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." msgstr "" -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." msgstr "" -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." msgstr "" -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." msgstr "" -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." msgstr "" -#: draw/views.py:66 draw/views.py:460 +#: draw/views.py msgid "No debates in this round" msgstr "" -#: draw/views.py:74 +#: draw/views.py #, python-format msgid "Draw for %(round)s" msgstr "" -#: draw/views.py:76 +#: draw/views.py msgid "Draws for Current Rounds" msgstr "" -#: draw/views.py:80 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" msgstr "" -#: draw/views.py:84 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" msgstr "" -#: draw/views.py:122 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" msgstr[0] "" msgstr[1] "" -#: draw/views.py:169 +#: draw/views.py msgid "The draw for this round hasn't been released." msgstr "" -#: draw/views.py:222 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" msgstr "" -#: draw/views.py:380 +#: draw/views.py msgid "Adjudicator Assignments" msgstr "" -#: draw/views.py:400 +#: draw/views.py +msgid "Position" +msgstr "" + +#: draw/views.py msgid "Team Pairings" msgstr "" -#: draw/views.py:424 +#: draw/views.py msgid "No Draw" msgstr "" -#: draw/views.py:426 +#: draw/views.py msgid "Draft Draw" msgstr "" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:518 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" msgstr "" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:523 +#: draw/views.py msgid "BR" msgstr "" -#: draw/views.py:548 +#: draw/views.py msgid "Draw with Details" msgstr "" -#: draw/views.py:556 +#: draw/views.py msgid "Position Balance Report" msgstr "" -#: draw/views.py:567 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" msgstr "" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:570 +#: draw/views.py msgid " (i.e., Shannon entropy)" msgstr "" -#: draw/views.py:600 +#: draw/views.py msgid "Teams with position imbalances" msgstr "" -#: draw/views.py:601 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" msgstr "" -#: draw/views.py:604 +#: draw/views.py msgid "Annotated draw" msgstr "" -#: draw/views.py:635 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" msgstr "" -#: draw/views.py:643 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " msgstr "" -#: draw/views.py:651 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " msgstr "" -#: draw/views.py:660 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " msgstr "" -#: draw/views.py:676 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "" -#: draw/views.py:703 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "" -#: draw/views.py:723 +#: draw/views.py msgid "Released the draw." msgstr "" -#: draw/views.py:738 +#: draw/views.py msgid "Unreleased the draw." msgstr "" -#: draw/views.py:751 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." msgstr "" -#: draw/views.py:770 +#: draw/views.py msgid "Side Pre-Allocations" msgstr "" -#: draw/views.py:803 +#: draw/views.py msgid "Edit Matchups" msgstr "" diff --git a/tabbycat/importer/locale/de/LC_MESSAGES/django.po b/tabbycat/importer/locale/de/LC_MESSAGES/django.po index 9eca62749d3..71ca533d37c 100644 --- a/tabbycat/importer/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/de/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:29\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" +"Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" "MIME-Version: 1.0\n" @@ -12,368 +12,410 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" msgstr "" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" msgstr "" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" msgstr "" -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." msgstr "" -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." msgstr "" -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" msgstr "" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" msgstr "" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" msgstr "" -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" msgstr "" -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" msgstr "" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" msgstr "" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" msgstr "" -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" msgstr "" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" msgstr "" -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" msgstr "" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." msgstr "" -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." msgstr "" -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." msgstr "" -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." msgstr "" -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" msgstr "" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." msgstr "" -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" msgstr "" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "%(name)s (%(code)s)" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 +#: importer/forms.py +msgid "XML" +msgstr "" + +#: importer/forms.py +msgid "The Debate XML archive to parse" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export Tournament Archive" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Tournaments can be exported in an XML format for use outside Tabbycat." +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export all data" +msgstr "" + +#: importer/templates/archive_importer.html +msgctxt "page title" +msgid "Import Tournament Archive" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "This form will create a tournament with the data provided as a Debate XML format." +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Import" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Go back to the site home page" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html msgctxt "page title" msgid "Add Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" msgstr "Nächster Schritt" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" msgstr "" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." msgstr "" -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" msgstr "" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" msgstr "" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" msgstr "" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" msgstr "" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" msgstr "" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" msgstr "" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_index.html +msgid "Add/Edit Break Categories" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Speaker Categories" +msgstr "" + +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" msgstr "" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" msgstr "Nächster Schritt" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" msgstr "" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" msgstr "" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" msgstr "" -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" msgstr "" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" msgstr "" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." msgstr "" -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" msgstr "" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" msgstr "" -#: importer/views.py:102 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." msgstr[0] "" msgstr[1] "" -#: importer/views.py:123 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." msgstr[0] "" msgstr[1] "" -#: importer/views.py:182 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." msgstr[0] "" msgstr[1] "" -#: importer/views.py:203 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "Juror %(number)d" -#: importer/views.py:208 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." msgstr[0] "" msgstr[1] "" -#: importer/views.py:224 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " msgstr "" -#: importer/views.py:232 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." msgstr "" +#: importer/views.py +msgid "Tournament archive has been imported." +msgstr "" + diff --git a/tabbycat/locale/de/LC_MESSAGES/django.po b/tabbycat/locale/de/LC_MESSAGES/django.po index a0847af689d..b420932d9ae 100644 --- a/tabbycat/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/locale/de/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 08:55\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" +"Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" "MIME-Version: 1.0\n" @@ -12,872 +12,946 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" msgstr "" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:92 +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" msgstr "" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" msgstr "" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" msgstr "" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" msgstr "" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." msgstr "" -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" msgstr "" -#: checkins/models.py:37 +#: checkins/models.py msgid "" msgstr "" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "%(classname)s %(barcode)s" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" msgstr "" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" msgstr "" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" msgstr "" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "Debatte" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" msgstr "" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" msgstr "" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" msgstr "" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" msgstr "" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" msgstr "" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" msgstr "" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "Turnier" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" msgstr "" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" msgstr "" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" msgstr "" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." msgstr "" -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." msgstr "" -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." msgstr "" -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" msgstr "" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" msgstr "" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" msgstr "" -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." msgstr "" -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." msgstr "" -#: checkins/views.py:29 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" msgstr "" -#: checkins/views.py:62 +#: checkins/views.py msgid "People's Check-In Statuses" msgstr "" -#: checkins/views.py:119 +#: checkins/views.py msgid "Rooms' Check-In Statuses" msgstr "" -#: checkins/views.py:168 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" msgstr "" -#: checkins/views.py:175 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" -msgstr "RednerInnen" +msgstr "Redner" -#: checkins/views.py:180 templates/nav/public_nav.html:132 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "Juroren" -#: checkins/views.py:185 +#: checkins/views.py msgid "Rooms" msgstr "Räume" -#: checkins/views.py:226 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" msgstr "" -#: checkins/views.py:233 +#: checkins/views.py msgid "Identifiers" msgstr "" -#: checkins/views.py:269 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." msgstr "" -#: checkins/views.py:276 +#: checkins/views.py msgid "You have revoked your check-in." msgstr "" -#: checkins/views.py:278 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." msgstr "" -#: checkins/views.py:281 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." msgstr "" -#: checkins/views.py:283 +#: checkins/views.py msgid "You are now checked in." msgstr "" -#: settings/core.py:45 +#: settings/core.py msgid "Arabic" msgstr "" -#: settings/core.py:46 +#: settings/core.py +msgid "Bengali" +msgstr "" + +#: settings/core.py msgid "English" msgstr "" -#: settings/core.py:47 +#: settings/core.py msgid "Spanish" msgstr "" -#: settings/core.py:48 +#: settings/core.py msgid "French" msgstr "" -#: settings/core.py:49 +#: settings/core.py +msgid "Indonesian" +msgstr "" + +#: settings/core.py msgid "Japanese" msgstr "" -#: settings/core.py:50 +#: settings/core.py +msgid "Malay" +msgstr "" + +#: settings/core.py msgid "Portuguese" msgstr "" -#: settings/core.py:51 +#: settings/core.py msgid "Russian" msgstr "" -#: templates/admin/delete_protected_message.html:4 +#: settings/core.py +msgid "Simplified Chinese" +msgstr "" + +#: settings/core.py +msgid "Translation" +msgstr "" + +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." msgstr "" -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." msgstr "" -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." msgstr "" -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" msgstr "" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" msgstr "" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" msgstr "" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" msgstr "" -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." msgstr "" -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" msgstr "" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" msgstr "" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." msgstr "" -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgstr[0] "" msgstr[1] "" -#: templates/errors/public_403.html:14 +#: templates/errors/legacy_sendgrid_warning.html +msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." +msgstr "" + +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." msgstr "" -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." msgstr "" -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." msgstr "" -#: templates/footer.html:24 +#: templates/footer.html #, python-format -msgid "For a tournament of this size, we suggest a donation of $%(amount)s." +msgid "For a tournament of this size, we suggest a donation of $%(amount)s." msgstr "" -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." msgstr "" -#: templates/footer.html:32 -#, python-format -msgid "Donations to Tabbycat from individuals or organisations are much appreciated." +#: templates/footer.html +msgid "Donations to Tabbycat from individuals or organisations are much appreciated." msgstr "" -#: templates/footer.html:40 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" msgstr "" -#: templates/footer.html:42 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." msgstr "" -#: templates/footer.html:51 -msgid "Need ballots?" +#: templates/footer.html +msgid "Our Organisation" msgstr "" -#: templates/footer.html:53 -msgid "You can customise and print great ballots from your browser." +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." msgstr "" -#: templates/footer.html:66 +#: templates/footer.html msgid "Language" msgstr "" -#: templates/footer.html:73 +#: templates/footer.html msgid "GitHub" msgstr "" -#: templates/footer.html:79 +#: templates/footer.html msgid "Documentation" msgstr "" -#: templates/footer.html:85 +#: templates/footer.html msgid "Support" msgstr "" -#: templates/footer.html:91 +#: templates/footer.html msgid "Facebook" msgstr "" -#: templates/footer.html:97 +#: templates/footer.html msgid "Set Up A Copy" msgstr "" -#: templates/footer.html:111 +#: templates/footer.html msgid "Change Language" msgstr "" -#: templates/footer.html:128 +#: templates/footer.html msgid "Use this language" msgstr "" -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" msgstr "" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" msgstr "" -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" msgstr "" -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" msgstr "" -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" msgstr "" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" msgstr "" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" msgstr "" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" msgstr "Überblick" -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" msgstr "" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" msgstr "" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" msgstr "" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:162 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" msgstr "" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" msgstr "" -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" -msgstr "Emails" +msgstr "E-Mails" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" msgstr "" -#: templates/nav/admin_nav.html:96 -msgid "It\\" -msgstr "" - -#: templates/nav/admin_nav.html:97 -msgid "Where's Edit Database?" +#: templates/nav/admin_nav.html +msgid "Export XML" msgstr "" -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:147 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" msgstr "" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" msgstr "" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" msgstr "" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" msgstr "Feedback" -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" msgstr "" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" msgstr "" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" -msgstr "" +msgstr "Freitextfeld" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" msgstr "" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" msgstr "" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" msgstr "" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" msgstr "" -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" msgstr "" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:152 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" msgstr "" -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" msgstr "" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "Teams" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" msgstr "" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" msgstr "" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" msgstr "" -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" msgstr "" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:142 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "Themen" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:157 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" msgstr "" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" msgstr "Breaks" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" msgstr "" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" msgstr "" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" msgstr "" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" msgstr "" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" msgstr "" -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:182 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" -msgstr "Feedback übermitteln" +msgstr "Feedback abschicken" -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" msgstr "" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:167 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" msgstr "" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" msgstr "" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" msgstr "" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" msgstr "" -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" msgstr "Teamtab" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" -msgstr "RednerInnentab" +msgstr "Einzelrednertab" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" msgstr "" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" msgstr "Jurortab" -#: templates/nav/public_nav.html:50 +#: templates/nav/public_nav.html msgid "Motions Tab" msgstr "" -#: templates/nav/public_nav.html:59 +#: templates/nav/public_nav.html +msgid "By round" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Globally" +msgstr "" + +#: templates/nav/public_nav.html msgid "Draws" msgstr "" -#: templates/nav/public_nav.html:70 +#: templates/nav/public_nav.html msgid "No Draws Available" msgstr "" -#: templates/nav/public_nav.html:78 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: templates/nav/public_nav.html:82 +#: templates/nav/public_nav.html msgid "Current Draws" msgstr "" -#: templates/nav/public_nav.html:102 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" msgstr "Ergebnisse" -#: templates/nav/public_nav.html:120 +#: templates/nav/public_nav.html msgid "Break" msgstr "Break" -#: templates/nav/public_nav.html:172 +#: templates/nav/public_nav.html msgid "Feedback Progress" msgstr "" -#: templates/nav/public_nav.html:177 +#: templates/nav/public_nav.html msgid "Enter Ballot" msgstr "" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" msgstr "" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" msgstr "" -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" msgstr "" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" -msgstr "Einloggen" +msgstr "Anmelden" -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" msgstr "" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" msgstr "" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" -msgstr "Einloggen" +msgstr "Anmelden" -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" msgstr "" -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." msgstr "" -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." msgstr "" -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." msgstr "" -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" msgstr "" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." msgstr "" -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" msgstr "" -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" msgstr "" -#: templates/registration/password_change_form.html:20 +#: templates/registration/password_change_form.html +#, python-format +msgid "API Token: %(api_token)s" +msgstr "" + +#: templates/registration/password_change_form.html +msgid "The API token will allow you to authorize external applications to access the site as staff." +msgstr "" + +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." msgstr "" -#: templates/registration/password_change_form.html:25 -#: templates/registration/password_reset_confirm.html:38 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" msgstr "" -#: templates/registration/password_change_form.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" msgstr "" -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "" -#: templates/registration/password_reset_complete.html:16 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." msgstr "" -#. Translators: This text appears on a button that takes the user to the login page after a password reset. -#: templates/registration/password_reset_complete.html:23 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" msgstr "" -#: templates/registration/password_reset_confirm.html:4 -#: templates/registration/password_reset_confirm.html:14 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" msgstr "" -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html +msgctxt "page title" +msgid "Password Reset" +msgstr "" + +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" msgstr "" -#: templates/registration/password_reset_confirm.html:44 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." msgstr "" -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" -msgid "Password reset e-mail sent" -msgstr "" - -#: templates/registration/password_reset_done.html:16 -msgid "We've e-mailed you instructions for setting your password, if an account exists with the e-mail address you entered. You should receive them shortly." +msgid "Password reset email sent" msgstr "" -#: templates/registration/password_reset_done.html:19 -msgid "If you don't receive an e-mail, please make sure you've entered the address you registered with, and check your spam folder." +#: templates/registration/password_reset_done.html +msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." msgstr "" -#. Translators: This text appears on a button that takes the user back to the login page from the password reset page. -#: templates/registration/password_reset_done.html:26 -msgid "Return to the login page" +#: templates/registration/password_reset_done.html +msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." msgstr "" -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" msgstr "" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format -msgid "Someone asked for a password reset for the e-mail address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." +msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" msgstr "" -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format -msgid "If this wasn't you, that probably means someone else typed your e-mail address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." +msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 -msgctxt "page title" -msgid "Password Reset" +#: templates/registration/password_reset_form.html +msgid "Enter your email address below, and we'll email you a password reset link." msgstr "" -#: templates/registration/password_reset_form.html:27 -msgid "Enter your e-mail address below, and we'll e-mail you a password reset link." +#: templates/registration/password_reset_form.html +msgid "Please enter a valid email address." msgstr "" -#: templates/registration/password_reset_form.html:34 -msgid "Please enter a valid e-mail address." +#: templates/registration/password_reset_form.html users/forms.py +msgid "Email address" msgstr "" -#: templates/registration/password_reset_form.html:39 -msgid "E-mail address" -msgstr "" - -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" msgstr "" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" msgstr "" -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" msgstr "" -#: urls.py:101 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" msgstr "" -#: urls.py:104 +#: urls.py msgid "Welcome! You just logged in!" msgstr "" -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." msgstr "" -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." msgstr "" +#: users/templates/admin/auth/delete_user_warning.html +msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." +msgstr "" + +#: users/templates/signup.html +msgid "Sign-Up" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Administrator Account" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Assistant Account" +msgstr "" + +#: users/templates/signup.html +msgid "Create Account" +msgstr "" + +#: users/views.py +msgid "You have successfully created a new administrator account." +msgstr "" + +#: users/views.py +msgid "You have successfully created a new assistant account." +msgstr "" + +#: users/views.py +msgid "Whoops! It looks like someone's already created the first user account. Please log in." +msgstr "" + +#: users/views.py +#, python-format +msgid "Welcome! You've created an account for %s." +msgstr "" + diff --git a/tabbycat/locale/de/LC_MESSAGES/djangojs.po b/tabbycat/locale/de/LC_MESSAGES/djangojs.po index 7bdaaa53585..32f84a7f137 100644 --- a/tabbycat/locale/de/LC_MESSAGES/djangojs.po +++ b/tabbycat/locale/de/LC_MESSAGES/djangojs.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-01-14 04:50+1100\n" -"PO-Revision-Date: 2020-03-08 17:04\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2021-11-29 01:59\n" +"Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" "MIME-Version: 1.0\n" @@ -12,8 +12,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/djangojs.po\n" +"X-Crowdin-File-ID: 962\n" #: checkins/templates/CheckInScanContainer.vue: msgid "Scan Using Camera" @@ -42,7 +44,7 @@ msgid "By %1" msgstr "" #: checkins/templates/CheckInStatusContainer.vue: -msgid "No matching venues found." +msgid "No matching rooms found." msgstr "" #: checkins/templates/CheckInStatusContainer.vue: @@ -182,8 +184,8 @@ msgid "ID %1," msgstr "" #: printing/templates/PrintableBallotHeader.vue: -msgid "Venue:" -msgstr "Raum:" +msgid "Room:" +msgstr "" #: printing/templates/PrintableBallotHeader.vue: msgid "Chair for Panel of %1" @@ -199,7 +201,7 @@ msgstr "" #: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: msgid "Trainee" -msgstr "Jurierlehrling" +msgstr "Trainee" #: printing/templates/PrintableBallotHeader.vue: msgid "Team" @@ -467,7 +469,7 @@ msgstr "" #: results/templates/ResultsStats.vue:36 msgid "Confirmed" -msgstr "" +msgstr "Bestätigt" #: results/templates/ResultsStats.vue:40 msgid "Ballot Statuses" diff --git a/tabbycat/motions/locale/de/LC_MESSAGES/django.po b/tabbycat/motions/locale/de/LC_MESSAGES/django.po index 53c4a924dbb..a9b9cde72b9 100644 --- a/tabbycat/motions/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/de/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:32\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" +"Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" "MIME-Version: 1.0\n" @@ -12,336 +12,388 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "Themen" -#: motions/models.py:9 -msgid "sequence number" -msgstr "" - -#: motions/models.py:10 -msgid "The order in which motions are displayed" -msgstr "" - -#: motions/models.py:12 +#: motions/models.py msgid "text" msgstr "" -#: motions/models.py:13 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" msgstr "" -#: motions/models.py:15 +#: motions/models.py msgid "reference" msgstr "" -#: motions/models.py:16 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" msgstr "" -#: motions/models.py:18 +#: motions/models.py msgid "info slide" msgstr "Infotext" -#: motions/models.py:19 +#: motions/models.py msgid "The information slide for this topic; if it has one" msgstr "" -#: motions/models.py:21 -msgid "round" -msgstr "runde" +#: motions/models.py +msgid "tournament" +msgstr "Turnier" + +#: motions/models.py +msgid "rounds" +msgstr "runden" -#: motions/models.py:25 motions/models.py:37 +#: motions/models.py msgid "motion" -msgstr "thema" +msgstr "Thema" -#: motions/models.py:26 +#: motions/models.py msgid "motions" -msgstr "themen" +msgstr "Themen" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" msgstr "" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" msgstr "" -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" msgstr "" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" msgstr "" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" msgstr "" -#: motions/statistics.py:88 +#: motions/models.py +msgid "round" +msgstr "runde" + +#: motions/models.py +msgid "sequence number" +msgstr "" + +#: motions/models.py +msgid "The order in which motions are displayed" +msgstr "" + +#: motions/models.py +msgid "round motion" +msgstr "" + +#: motions/models.py +msgid "round motions" +msgstr "" + +#: motions/statistics.py msgid "extremely strong evidence" msgstr "" -#: motions/statistics.py:89 +#: motions/statistics.py msgid "strong evidence" msgstr "" -#: motions/statistics.py:90 +#: motions/statistics.py msgid "moderate evidence" msgstr "" -#: motions/statistics.py:91 +#: motions/statistics.py msgid "weak evidence" msgstr "" -#: motions/statistics.py:92 +#: motions/statistics.py msgid "very weak evidence" msgstr "" -#: motions/statistics.py:93 +#: motions/statistics.py msgid "extremely weak evidence" msgstr "" -#: motions/statistics.py:116 +#: motions/statistics.py msgid "balance inconclusive" msgstr "" -#: motions/statistics.py:117 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" msgstr "" -#: motions/statistics.py:125 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" msgstr "" -#: motions/statistics.py:126 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." msgstr "" -#: motions/statistics.py:131 +#: motions/statistics.py msgid "probably balanced" msgstr "" -#: motions/statistics.py:132 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." msgstr "" -#: motions/templates/motion_statistics.html:4 -#: motions/templates/motion_statistics.html:5 motions/views.py:165 -msgid "Motion Statistics" -msgstr "" - -#: motions/templates/motion_statistics.html:12 -msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments and during elimination rounds." -msgstr "" - -#: motions/templates/motion_statistics.html:39 -#: motions/templates/public_motions.html:31 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" msgstr "Zeige Infotext" -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" msgstr "Eröffnende" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" msgstr "Schließende" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" msgstr "" -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" msgstr[0] "" msgstr[1] "" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" msgstr "" -#: motions/templates/motions_edit.html:55 +#: motions/templates/motions_edit.html +msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Reuse Motions from Last Round" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Use Existing Motions" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" msgstr[0] "" msgstr[1] "" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "Infotext" -#: motions/templates/public_motions.html:39 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." msgstr "" -#: motions/templates/public_motions.html:45 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." msgstr "" -#: motions/templates/public_motions.html:50 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." msgstr "" -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" msgstr[0] "" msgstr[1] "" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" msgstr[0] "" msgstr[1] "" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." msgstr "" -#: motions/views.py:87 +#: motions/utils.py +msgid "Not all latest ballots list the same motion, so could not be merged." +msgstr "" + +#: motions/utils.py +msgid "Motion vetos are inconsistent, so could not be merged." +msgstr "" + +#: motions/views.py msgid "The motion has been saved." msgstr "" -#: motions/views.py:89 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." msgstr[0] "" msgstr[1] "" -#: motions/views.py:94 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." msgstr[0] "" msgstr[1] "" -#: motions/views.py:118 -msgid "Released the motion(s)." +#: motions/views.py +msgid "Motions cannot be copied to the first round." msgstr "" -#: motions/views.py:125 -msgid "Unreleased the motion(s)." -msgstr "" +#: motions/views.py +#, python-format +msgid "Reused the motion from the previous round." +msgid_plural "Reused the %(count)d motions from the previous round." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" +msgstr[1] "" -#: motions/views.py:149 +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py msgid "Round Motions" msgstr "" +#: motions/views.py +msgid "Motion Statistics" +msgstr "" + diff --git a/tabbycat/notifications/locale/de/LC_MESSAGES/django.po b/tabbycat/notifications/locale/de/LC_MESSAGES/django.po index af3f379ab07..b37f4e235dd 100644 --- a/tabbycat/notifications/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:33\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: German\n" "Language: de_DE\n" @@ -15,388 +15,402 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/notifications/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" msgstr "" -#: notifications/consumers.py:37 -msgid "Failed to send e-mails." -msgstr "" - -#: notifications/consumers.py:40 -msgid "Connection error sending e-mails." -msgstr "" - -#: notifications/forms.py:11 +#: notifications/forms.py msgid "Recipient email address" msgstr "" -#: notifications/forms.py:15 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" msgstr "" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" msgstr "" -#: notifications/forms.py:29 +#: notifications/forms.py msgid "Subject" msgstr "" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Message" msgstr "Nachricht" -#: notifications/models.py:12 notifications/models.py:27 +#: notifications/models.py msgid "email" -msgstr "Email" +msgstr "E-Mail" -#: notifications/models.py:13 +#: notifications/models.py msgid "SMS" msgstr "" -#: notifications/models.py:22 +#: notifications/models.py msgid "recipient" msgstr "" -#: notifications/models.py:24 +#: notifications/models.py msgid "method" msgstr "" -#: notifications/models.py:29 notifications/models.py:130 +#: notifications/models.py msgid "context" msgstr "" -#: notifications/models.py:31 -msgid "message" -msgstr "Nachricht" - -#: notifications/models.py:34 +#: notifications/models.py msgid "notification" msgstr "" -#: notifications/models.py:36 notifications/models.py:75 -#: notifications/models.py:126 +#: notifications/models.py msgid "timestamp" msgstr "" -#: notifications/models.py:39 +#: notifications/models.py msgid "sent message" msgstr "" -#: notifications/models.py:40 +#: notifications/models.py msgid "sent messages" msgstr "" -#: notifications/models.py:60 +#: notifications/models.py msgid "team points" msgstr "Teampunkte" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot confirmed" msgstr "" -#: notifications/models.py:62 +#: notifications/models.py msgid "feedback URL" msgstr "" -#: notifications/models.py:63 +#: notifications/models.py msgid "ballot URL" msgstr "" -#: notifications/models.py:64 +#: notifications/models.py msgid "landing page URL" msgstr "" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator draw released" msgstr "" -#: notifications/models.py:66 +#: notifications/models.py msgid "team registration" msgstr "" -#: notifications/models.py:67 +#: notifications/models.py msgid "adjudicator registration" msgstr "" -#: notifications/models.py:68 +#: notifications/models.py msgid "motion(s) released" msgstr "" -#: notifications/models.py:69 +#: notifications/models.py msgid "team draw released" msgstr "" -#: notifications/models.py:73 notifications/models.py:128 +#: notifications/models.py +msgid "custom message" +msgstr "" + +#: notifications/models.py msgid "event" msgstr "" -#: notifications/models.py:78 +#: notifications/models.py msgid "tournament" msgstr "Turnier" -#: notifications/models.py:80 +#: notifications/models.py msgid "round" msgstr "runde" -#: notifications/models.py:83 +#: notifications/models.py +msgid "subject template" +msgstr "" + +#: notifications/models.py +msgid "body template" +msgstr "" + +#: notifications/models.py msgid "bulk notification" msgstr "" -#: notifications/models.py:84 +#: notifications/models.py msgid "bulk notifications" msgstr "" -#: notifications/models.py:110 +#: notifications/models.py msgid "Processed" msgstr "" -#: notifications/models.py:111 +#: notifications/models.py msgid "Dropped" msgstr "" -#: notifications/models.py:112 +#: notifications/models.py msgid "Deferred" msgstr "" -#: notifications/models.py:113 +#: notifications/models.py msgid "Delivered" msgstr "" -#: notifications/models.py:114 +#: notifications/models.py msgid "Bounced" msgstr "" -#: notifications/models.py:115 +#: notifications/models.py msgid "Opened" msgstr "" -#: notifications/models.py:116 +#: notifications/models.py msgid "Clicked" msgstr "" -#: notifications/models.py:117 +#: notifications/models.py msgid "Unsubscribed" msgstr "" -#: notifications/models.py:118 +#: notifications/models.py msgid "Marked as spam" msgstr "" -#: notifications/models.py:119 +#: notifications/models.py msgid "Unsubscribed from group" msgstr "" -#: notifications/models.py:120 +#: notifications/models.py msgid "Resubscribed to group" msgstr "" -#: notifications/models.py:124 +#: notifications/models.py msgid "email message" msgstr "" -#: notifications/models.py:133 +#: notifications/models.py msgid "email status" msgstr "" -#: notifications/models.py:134 +#: notifications/models.py msgid "email statuses" msgstr "" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." msgstr "" -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." msgstr "" -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" msgstr "" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." msgstr "" -#: notifications/templates/notifications_nav.html:5 notifications/views.py:47 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" msgstr "" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:24 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" msgstr "" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" msgstr "" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" msgstr "" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." msgstr "" -#: notifications/templates/test_email.html:25 +#: notifications/templates/test_email.html +#, python-format +msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." +msgstr "" + +#: notifications/templates/test_email.html msgid "Go back to the site home page" msgstr "" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "the chair" msgstr "der Hauptjuror" -#: notifications/utils.py:30 +#: notifications/utils.py msgid "the only" msgstr "" -#: notifications/utils.py:31 +#: notifications/utils.py msgid "a panellist" msgstr "" -#: notifications/utils.py:32 +#: notifications/utils.py msgid "a trainee" msgstr "" -#: notifications/utils.py:55 +#: notifications/utils.py msgid "TBA" msgstr "" -#: notifications/utils.py:101 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "" -#: notifications/utils.py:112 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:116 +#: notifications/utils.py msgid "Win" msgstr "" -#: notifications/utils.py:116 +#: notifications/utils.py msgid "Loss" msgstr "" -#: notifications/utils.py:128 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " msgstr "" -#: notifications/utils.py:202 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " msgstr "" -#: notifications/utils.py:237 notifications/utils.py:238 +#: notifications/utils.py msgid ", " msgstr "" -#: notifications/views.py:39 +#: notifications/views.py +#, python-format +msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" +msgstr "" + +#: notifications/views.py +msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." +msgstr "" + +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" msgstr "" -#: notifications/views.py:42 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." msgstr "" -#: notifications/views.py:53 +#: notifications/views.py msgid "N/A" msgstr "" -#: notifications/views.py:54 +#: notifications/views.py msgid "Not known" msgstr "" -#: notifications/views.py:59 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" msgstr "" -#: notifications/views.py:102 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "" -#: notifications/views.py:119 +#: notifications/views.py msgid "Timeline" msgstr "" -#: notifications/views.py:129 notifications/views.py:220 +#: notifications/views.py msgid "Participant" msgstr "" -#: notifications/views.py:130 +#: notifications/views.py +msgid "Email address" +msgstr "" + +#: notifications/views.py msgid "Status" msgstr "Status" -#: notifications/views.py:131 +#: notifications/views.py msgid "Time" msgstr "Zeit" -#: notifications/views.py:170 +#: notifications/views.py msgid "Email Participants" msgstr "" -#: notifications/views.py:196 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." msgstr[0] "" msgstr[1] "" -#: notifications/views.py:202 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." msgstr "" -#: notifications/views.py:210 +#: notifications/views.py msgid "Send Email" msgstr "" -#: notifications/views.py:225 -msgid "Email Address" -msgstr "" - -#: notifications/views.py:226 +#: notifications/views.py msgid "Not Provided" msgstr "" -#: notifications/views.py:239 +#: notifications/views.py msgid "Role" msgstr "" -#: notifications/views.py:240 +#: notifications/views.py msgid "Adjudicator" msgstr "Juror" -#: notifications/views.py:240 +#: notifications/views.py msgid "Speaker" -msgstr "RednerIn" +msgstr "Redner" -#: notifications/views.py:248 +#: notifications/views.py msgid "Speakers" -msgstr "RednerInnen" +msgstr "Redner" -#: notifications/views.py:249 +#: notifications/views.py msgid "Adjudicators" msgstr "Juroren" diff --git a/tabbycat/options/locale/de/LC_MESSAGES/django.po b/tabbycat/options/locale/de/LC_MESSAGES/django.po index 48142e1d474..2425cda44d4 100644 --- a/tabbycat/options/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:32\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: German\n" "Language: de_DE\n" @@ -15,1438 +15,1603 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/options/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" msgstr "" -#: options/models.py:13 +#: options/models.py msgid "instance" msgstr "" -#: options/models.py:18 +#: options/models.py msgid "tournament preference" msgstr "" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" msgstr "" -#: options/preferences.py:18 options/templates/preferences_index.html:28 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" msgstr "" -#: options/preferences.py:24 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:27 +#: options/preferences.py msgid "Minimum speaker score" msgstr "" -#: options/preferences.py:33 +#: options/preferences.py msgid "Maximum speaker score" msgstr "" -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:42 +#: options/preferences.py msgid "Speaker score step" msgstr "" -#: options/preferences.py:43 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:51 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" msgstr "" -#: options/preferences.py:52 +#: options/preferences.py msgid "Maximum margin" msgstr "" -#: options/preferences.py:61 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" msgstr "" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum reply score" msgstr "" -#: options/preferences.py:70 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" msgstr "" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum reply score" msgstr "" -#: options/preferences.py:79 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:80 +#: options/preferences.py msgid "Reply score step" msgstr "" -#: options/preferences.py:88 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" msgstr "" -#: options/preferences.py:89 +#: options/preferences.py msgid "Margin includes dissenters" msgstr "" -#: options/preferences.py:96 options/templates/preferences_index.html:33 +#: options/preferences.py +msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" +msgstr "" + +#: options/preferences.py +msgid "Team score includes ghosts" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" msgstr "" -#: options/preferences.py:102 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" msgstr "" -#: options/preferences.py:103 +#: options/preferences.py msgid "Minimum adjudicator score to vote" msgstr "" -#: options/preferences.py:111 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" msgstr "" -#: options/preferences.py:112 +#: options/preferences.py msgid "Adjudicator conflict penalty" msgstr "" -#: options/preferences.py:120 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" msgstr "" -#: options/preferences.py:121 +#: options/preferences.py msgid "Adjudicator history penalty" msgstr "" -#: options/preferences.py:129 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" msgstr "" -#: options/preferences.py:130 +#: options/preferences.py msgid "Importance mismatch penalty" msgstr "" -#: options/preferences.py:138 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" msgstr "" -#: options/preferences.py:139 +#: options/preferences.py msgid "Team institution penalty" msgstr "" -#: options/preferences.py:147 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" msgstr "" -#: options/preferences.py:148 +#: options/preferences.py msgid "Team history penalty" msgstr "" -#: options/preferences.py:156 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" msgstr "" -#: options/preferences.py:157 +#: options/preferences.py msgid "Avoid same institution" msgstr "" -#: options/preferences.py:165 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" msgstr "" -#: options/preferences.py:166 +#: options/preferences.py msgid "Avoid team history" msgstr "" -#: options/preferences.py:174 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "" -#: options/preferences.py:175 +#: options/preferences.py msgid "Odd bracket resolution method" msgstr "" -#: options/preferences.py:179 +#: options/preferences.py msgid "Pull up from top" msgstr "" -#: options/preferences.py:180 +#: options/preferences.py msgid "Pull up from bottom" msgstr "" -#: options/preferences.py:181 +#: options/preferences.py msgid "Pull up from middle" msgstr "" -#: options/preferences.py:182 +#: options/preferences.py msgid "Pull up at random" msgstr "" -#: options/preferences.py:183 +#: options/preferences.py msgid "Intermediate brackets" msgstr "" -#: options/preferences.py:184 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" msgstr "" -#: options/preferences.py:185 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" msgstr "" -#: options/preferences.py:186 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" msgstr "" -#: options/preferences.py:193 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" msgstr "" -#: options/preferences.py:194 +#: options/preferences.py msgid "Side allocations method" msgstr "" -#: options/preferences.py:198 options/preferences.py:215 +#: options/preferences.py msgid "Random" msgstr "" -#: options/preferences.py:199 +#: options/preferences.py msgid "Balance" msgstr "" -#: options/preferences.py:200 +#: options/preferences.py msgid "Pre-allocated" msgstr "" -#: options/preferences.py:201 +#: options/preferences.py msgid "Manually enter from ballot" msgstr "" -#: options/preferences.py:208 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." msgstr "" -#: options/preferences.py:209 +#: options/preferences.py msgid "Pairing method" msgstr "" -#: options/preferences.py:213 +#: options/preferences.py msgid "Slide" msgstr "" -#: options/preferences.py:214 +#: options/preferences.py msgid "Fold" msgstr "" -#: options/preferences.py:216 +#: options/preferences.py msgid "Adjacent" msgstr "" -#: options/preferences.py:217 +#: options/preferences.py msgid "Fold top, adjacent rest" msgstr "" -#: options/preferences.py:224 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" msgstr "" -#: options/preferences.py:226 +#: options/preferences.py msgid "Conflict avoidance method" msgstr "" -#: options/preferences.py:230 +#: options/preferences.py msgid "Off" msgstr "" -#: options/preferences.py:231 +#: options/preferences.py msgid "One-up-one-down" msgstr "" -#: options/preferences.py:238 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "" -#: options/preferences.py:240 +#: options/preferences.py msgid "Pullup restriction" msgstr "" -#: options/preferences.py:244 +#: options/preferences.py msgid "No restriction" msgstr "" -#: options/preferences.py:245 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" msgstr "" -#: options/preferences.py:246 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" msgstr "" -#: options/preferences.py:247 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" msgstr "" -#: options/preferences.py:254 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." msgstr "" -#: options/preferences.py:255 +#: options/preferences.py msgid "BP pullup distribution" msgstr "" -#: options/preferences.py:259 +#: options/preferences.py msgid "Anywhere in bracket" msgstr "" -#: options/preferences.py:260 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" msgstr "" -#: options/preferences.py:267 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" msgstr "" -#: options/preferences.py:268 +#: options/preferences.py msgid "BP position cost" msgstr "" -#: options/preferences.py:272 +#: options/preferences.py msgid "Simple" msgstr "" -#: options/preferences.py:273 +#: options/preferences.py msgid "Rényi entropy" msgstr "" -#: options/preferences.py:274 +#: options/preferences.py msgid "Population variance" msgstr "" -#: options/preferences.py:281 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." msgstr "" -#: options/preferences.py:284 +#: options/preferences.py msgid "Rényi order (BP)" msgstr "" -#: options/preferences.py:293 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." msgstr "" -#: options/preferences.py:296 +#: options/preferences.py msgid "BP position cost exponent" msgstr "" -#: options/preferences.py:305 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." msgstr "" -#: options/preferences.py:307 +#: options/preferences.py msgid "BP assignment method" msgstr "" -#: options/preferences.py:311 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" msgstr "" -#: options/preferences.py:312 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" msgstr "" -#: options/preferences.py:319 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" msgstr "" -#: options/preferences.py:320 +#: options/preferences.py msgid "Skip adjudicator check-ins" msgstr "" -#: options/preferences.py:328 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:329 +#: options/preferences.py msgid "No panellist adjudicators" msgstr "" -#: options/preferences.py:337 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:338 +#: options/preferences.py msgid "No trainee adjudicators" msgstr "" -#: options/preferences.py:345 options/templates/preferences_index.html:48 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" msgstr "Feedback" -#: options/preferences.py:351 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:352 +#: options/preferences.py msgid "Minimum adjudicator score" msgstr "" -#: options/preferences.py:360 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:361 +#: options/preferences.py msgid "Maximum adjudicator score" msgstr "" -#: options/preferences.py:369 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" msgstr "" -#: options/preferences.py:370 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" msgstr "" -#: options/preferences.py:374 +#: options/preferences.py msgid "Chairs on panellists and trainees" msgstr "" -#: options/preferences.py:375 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" msgstr "" -#: options/preferences.py:376 +#: options/preferences.py +msgid "Panellists and trainees on chairs, vice-versa" +msgstr "" + +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" msgstr "" -#: options/preferences.py:383 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "" -#: options/preferences.py:384 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" msgstr "" -#: options/preferences.py:388 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" msgstr "" -#: options/preferences.py:389 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" msgstr "" -#: options/preferences.py:396 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" msgstr "" -#: options/preferences.py:397 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" msgstr "" -#: options/preferences.py:405 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" msgstr "" -#: options/preferences.py:406 +#: options/preferences.py msgid "Show unaccredited" msgstr "" -#: options/preferences.py:414 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" msgstr "" -#: options/preferences.py:415 +#: options/preferences.py msgid "Feedback introduction/explanation" msgstr "" -#: options/preferences.py:423 options/templates/preferences_index.html:38 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" msgstr "" -#: options/preferences.py:429 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" msgstr "" -#: options/preferences.py:430 +#: options/preferences.py msgid "Teams in debate" msgstr "" -#: options/preferences.py:434 +#: options/preferences.py msgid "Two-team format" msgstr "" -#: options/preferences.py:435 +#: options/preferences.py msgid "British Parliamentary (four teams)" msgstr "" -#: options/preferences.py:442 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:443 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" msgstr "" -#: options/preferences.py:447 options/preferences.py:460 +#: options/preferences.py msgid "One ballot per voting adjudicator" msgstr "" -#: options/preferences.py:448 options/preferences.py:461 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" msgstr "" -#: options/preferences.py:455 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:456 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" msgstr "" -#: options/preferences.py:468 +#: options/preferences.py +msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." +msgstr "" + +#: options/preferences.py +msgid "Winner Declaration in ballot(s)" +msgstr "" + +#: options/preferences.py +msgid "Do not require separate winner selection" +msgstr "" + +#: options/preferences.py +msgid "Require separate winner selection as a check on correct scores" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection to break tied-point debates" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection, overriding scores" +msgstr "" + +#: options/preferences.py +msgid "When ballots should ask for speaker scores." +msgstr "" + +#: options/preferences.py +msgid "Require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Always require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Only require speaker scores in preliminary rounds" +msgstr "" + +#: options/preferences.py +msgid "Never require speaker scores" +msgstr "" + +#: options/preferences.py msgid "How many substantive speakers on a team" msgstr "" -#: options/preferences.py:469 +#: options/preferences.py msgid "Substantive speakers" msgstr "" -#: options/preferences.py:477 +#: options/preferences.py msgid "What to call the teams" msgstr "" -#: options/preferences.py:478 +#: options/preferences.py msgid "Side names" msgstr "" -#: options/preferences.py:487 +#: options/preferences.py msgid "Whether this style features scored reply speeches" msgstr "" -#: options/preferences.py:488 +#: options/preferences.py msgid "Reply scores" msgstr "" -#: options/preferences.py:496 -msgid "Enables the motion veto field on ballots, to track veto statistics" +#: options/preferences.py +msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" msgstr "" -#: options/preferences.py:497 -msgid "Motion vetoes" +#: options/preferences.py +msgid "Require reply speaker to have given a substantive speech" msgstr "" -#: options/preferences.py:504 options/templates/preferences_index.html:43 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "" -#: options/preferences.py:510 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" msgstr "" -#: options/preferences.py:511 +#: options/preferences.py msgid "Speeches missable for standings eligibility" msgstr "" -#: options/preferences.py:519 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" msgstr "" -#: options/preferences.py:520 +#: options/preferences.py msgid "Replies missable for standings eligibility" msgstr "" -#: options/preferences.py:528 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" msgstr "" -#: options/preferences.py:529 +#: options/preferences.py msgid "Team standings precedence" msgstr "" -#: options/preferences.py:545 options/preferences.py:580 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" msgstr "" -#: options/preferences.py:551 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" msgstr "" -#: options/preferences.py:552 +#: options/preferences.py msgid "Team standings extra metrics" msgstr "" -#: options/preferences.py:563 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" msgstr "" -#: options/preferences.py:564 +#: options/preferences.py msgid "Speaker standings precedence" msgstr "" -#: options/preferences.py:586 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" msgstr "" -#: options/preferences.py:587 +#: options/preferences.py msgid "Speaker standings extra metrics" msgstr "" -#: options/preferences.py:597 options/templates/preferences_index.html:59 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" msgstr "" -#: options/preferences.py:603 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:604 +#: options/preferences.py msgid "Release team tab to public" msgstr "" -#: options/preferences.py:612 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." msgstr "" -#: options/preferences.py:613 +#: options/preferences.py msgid "Top teams cutoff" msgstr "" -#: options/preferences.py:621 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:622 +#: options/preferences.py msgid "Release speaker tab to public" msgstr "" -#: options/preferences.py:630 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." msgstr "" -#: options/preferences.py:631 +#: options/preferences.py msgid "Top speakers cutoff" msgstr "" -#: options/preferences.py:639 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:640 +#: options/preferences.py msgid "Release replies tab to public" msgstr "" -#: options/preferences.py:648 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." msgstr "" -#: options/preferences.py:649 +#: options/preferences.py msgid "Top replies cutoff" msgstr "" -#: options/preferences.py:675 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." msgstr "" -#: options/preferences.py:678 +#: options/preferences.py msgid "Release motions tab to public" msgstr "" -#: options/preferences.py:686 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" msgstr "" -#: options/preferences.py:687 +#: options/preferences.py msgid "Release adjudicator tab to public" msgstr "" -#: options/preferences.py:695 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" msgstr "" -#: options/preferences.py:696 +#: options/preferences.py msgid "Adjudicator tab displays" msgstr "" -#: options/preferences.py:700 +#: options/preferences.py msgid "Only shows base score" msgstr "" -#: options/preferences.py:701 +#: options/preferences.py msgid "Only shows final score" msgstr "" -#: options/preferences.py:702 +#: options/preferences.py msgid "Shows base, final, and per-round scores" msgstr "" -#: options/preferences.py:709 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." msgstr "" -#: options/preferences.py:710 +#: options/preferences.py msgid "Release ballots to public" msgstr "" -#: options/preferences.py:718 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" msgstr "" -#: options/preferences.py:719 +#: options/preferences.py msgid "Release all round results to public" msgstr "" -#: options/preferences.py:726 options/templates/preferences_index.html:64 +#: options/preferences.py +msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release ballots through private URLs" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" msgstr "" -#: options/preferences.py:732 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" msgstr "" -#: options/preferences.py:733 +#: options/preferences.py msgid "Ballot submissions from adjudicators" msgstr "" -#: options/preferences.py:737 options/preferences.py:751 +#: options/preferences.py msgid "Disabled (tab staff only)" msgstr "" -#: options/preferences.py:738 options/preferences.py:752 +#: options/preferences.py msgid "Use private URLs" msgstr "" -#: options/preferences.py:739 options/preferences.py:753 +#: options/preferences.py msgid "Use publicly accessible form" msgstr "" -#: options/preferences.py:746 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" msgstr "" -#: options/preferences.py:747 +#: options/preferences.py msgid "Feedback submissions from participants" msgstr "" -#: options/preferences.py:760 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" msgstr "" -#: options/preferences.py:761 +#: options/preferences.py msgid "Require password for submission" msgstr "" -#: options/preferences.py:769 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" msgstr "" -#: options/preferences.py:770 +#: options/preferences.py msgid "Password for public submission" msgstr "" -#: options/preferences.py:778 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" msgstr "" -#: options/preferences.py:779 +#: options/preferences.py msgid "Bypass double checking" msgstr "" -#: options/preferences.py:787 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." msgstr "" -#: options/preferences.py:788 +#: options/preferences.py msgid "Enforce blind confirmations" msgstr "" -#: options/preferences.py:796 -msgid "If checked, ballots require a motion to be selected from a list of options. " -msgstr "" - -#: options/preferences.py:797 -msgid "Enable motion selection" -msgstr "" - -#: options/preferences.py:805 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." msgstr "" -#: options/preferences.py:808 +#: options/preferences.py msgid "Assistant user access" msgstr "" -#: options/preferences.py:813 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" msgstr "" -#: options/preferences.py:814 +#: options/preferences.py msgid "Just results entry and draw display" msgstr "" -#: options/preferences.py:815 +#: options/preferences.py msgid "Only results entry" msgstr "" -#: options/preferences.py:821 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." msgstr "" -#: options/preferences.py:822 +#: options/preferences.py msgid "Participant self-checkin" msgstr "" -#: options/preferences.py:830 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" msgstr "" -#: options/preferences.py:833 +#: options/preferences.py msgid "Check-In Window (People)" msgstr "" -#: options/preferences.py:839 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" msgstr "" -#: options/preferences.py:842 +#: options/preferences.py msgid "Check-In Window (Rooms)" msgstr "" -#: options/preferences.py:848 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" msgstr "" -#: options/preferences.py:849 +#: options/preferences.py msgid "Ballot Digit Checks" msgstr "" -#: options/preferences.py:857 -msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" -msgstr "" - -#: options/preferences.py:858 -msgid "Ballot Hide Motions" -msgstr "" - -#: options/preferences.py:866 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:867 +#: options/preferences.py msgid "Score return location" msgstr "" -#: options/preferences.py:875 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:876 +#: options/preferences.py msgid "Feedback return location" msgstr "" -#: options/preferences.py:883 options/templates/preferences_index.html:69 +#: options/preferences.py +msgid "Lets debates have their status as postponed, as to not block draw generation." +msgstr "" + +#: options/preferences.py +msgid "Enable postponements" +msgstr "" + +#: options/preferences.py +msgid "Have each voting adjudicator submit a separate ballot." +msgstr "" + +#: options/preferences.py +msgid "Individual voting ballots" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" msgstr "" -#: options/preferences.py:889 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" msgstr "" -#: options/preferences.py:890 +#: options/preferences.py msgid "Enable public view of participants list" msgstr "" -#: options/preferences.py:898 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" msgstr "" -#: options/preferences.py:899 +#: options/preferences.py msgid "Enable public view of institutions list" msgstr "" -#: options/preferences.py:907 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" msgstr "" -#: options/preferences.py:908 +#: options/preferences.py msgid "Enable public view of diversity info" msgstr "" -#: options/preferences.py:916 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." msgstr "" -#: options/preferences.py:919 +#: options/preferences.py msgid "Enable public view of the checkin statuses" msgstr "" -#: options/preferences.py:927 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" msgstr "" -#: options/preferences.py:928 +#: options/preferences.py msgid "Show break categories on participants page" msgstr "" -#: options/preferences.py:936 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" msgstr "" -#: options/preferences.py:937 +#: options/preferences.py msgid "Show pre-allocated sides to public" msgstr "" -#: options/preferences.py:945 +#: options/preferences.py msgid "Enables the public page showing released draws" msgstr "" -#: options/preferences.py:946 +#: options/preferences.py msgid "Enable public view of draw" msgstr "" -#: options/preferences.py:950 +#: options/preferences.py msgid "Disabled" msgstr "" -#: options/preferences.py:951 +#: options/preferences.py msgid "Show a single page for the current round's draw" msgstr "" -#: options/preferences.py:952 +#: options/preferences.py msgid "Show individual pages for all released draws" msgstr "" -#: options/preferences.py:959 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" msgstr "" -#: options/preferences.py:960 +#: options/preferences.py msgid "Enable public view of results" msgstr "" -#: options/preferences.py:968 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" msgstr "" -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of motions" msgstr "" -#: options/preferences.py:977 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" msgstr "" -#: options/preferences.py:978 +#: options/preferences.py msgid "Enable public view of team standings" msgstr "" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" msgstr "" -#: options/preferences.py:987 +#: options/preferences.py msgid "Enable public record pages" msgstr "" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:996 +#: options/preferences.py msgid "Release team breaks to public" msgstr "" -#: options/preferences.py:1004 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1005 +#: options/preferences.py msgid "Release adjudicators break to public" msgstr "" -#: options/preferences.py:1013 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" msgstr "" -#: options/preferences.py:1014 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" msgstr "" -#: options/preferences.py:1022 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." msgstr "" -#: options/preferences.py:1023 +#: options/preferences.py msgid "Tournament staff" msgstr "" -#: options/preferences.py:1033 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" msgstr "" -#: options/preferences.py:1034 +#: options/preferences.py msgid "Welcome message" msgstr "" -#: options/preferences.py:1043 options/templates/preferences_index.html:74 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" msgstr "" -#: options/preferences.py:1049 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" msgstr "" -#: options/preferences.py:1050 +#: options/preferences.py msgid "Show splitting adjudicators" msgstr "" -#: options/preferences.py:1058 -msgid "If showing results to public, show which motions were selected in the record" -msgstr "" - -#: options/preferences.py:1059 -msgid "Show motions in results" -msgstr "" - -#: options/preferences.py:1067 +#: options/preferences.py msgid "Whether and how to use code names for teams" msgstr "" -#: options/preferences.py:1068 +#: options/preferences.py msgid "Team code names" msgstr "" -#: options/preferences.py:1073 +#: options/preferences.py msgid "Do not use code names" msgstr "" -#: options/preferences.py:1074 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" msgstr "" -#: options/preferences.py:1075 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" msgstr "" -#: options/preferences.py:1077 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" msgstr "" -#: options/preferences.py:1079 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" msgstr "" -#: options/preferences.py:1085 +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" msgstr "" -#: options/preferences.py:1086 +#: options/preferences.py msgid "Show emoji" msgstr "" -#: options/preferences.py:1094 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" msgstr "" -#: options/preferences.py:1095 +#: options/preferences.py msgid "Show team institutions" msgstr "" -#: options/preferences.py:1103 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" msgstr "" -#: options/preferences.py:1104 +#: options/preferences.py msgid "Show adjudicator institutions" msgstr "" -#: options/preferences.py:1112 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" msgstr "" -#: options/preferences.py:1113 +#: options/preferences.py msgid "Show speakers in draw" msgstr "" -#: options/preferences.py:1121 -msgid "Order in which are listed by round in the public view" -msgstr "" - -#: options/preferences.py:1122 -msgid "Order to display motions" -msgstr "" - -#: options/preferences.py:1126 -msgid "Earliest round first" -msgstr "" - -#: options/preferences.py:1127 -msgid "Latest round first" -msgstr "" - -#: options/preferences.py:1133 options/templates/preferences_index.html:79 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" msgstr "" -#: options/preferences.py:1139 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "" -#: options/preferences.py:1140 +#: options/preferences.py msgid "Reply-to name" msgstr "" -#: options/preferences.py:1148 +#: options/preferences.py msgid "The email address for handling replies" msgstr "" -#: options/preferences.py:1149 +#: options/preferences.py msgid "Reply-to address" msgstr "" -#: options/preferences.py:1157 +#: options/preferences.py msgid "A secret key to accept email status events" msgstr "" -#: options/preferences.py:1158 +#: options/preferences.py msgid "Email status secret key" msgstr "" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "" -#: options/preferences.py:1169 +#: options/preferences.py msgid "Ballot receipts" msgstr "" -#: options/preferences.py:1177 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "" -#: options/preferences.py:1179 +#: options/preferences.py msgid "Ballot receipt subject line" msgstr "" -#: options/preferences.py:1187 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "" -#: options/preferences.py:1188 +#: options/preferences.py msgid "Ballot receipt message" msgstr "" -#: options/preferences.py:1204 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1205 +#: options/preferences.py msgid "Team points subject line" msgstr "" -#: options/preferences.py:1212 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1213 +#: options/preferences.py msgid "Team points message" msgstr "" -#: options/preferences.py:1222 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1223 +#: options/preferences.py msgid "Adjudicator draw subject line" msgstr "" -#: options/preferences.py:1230 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1231 +#: options/preferences.py msgid "Adjudicator draw message" msgstr "" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." msgstr "" -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team draw subject line" msgstr "" -#: options/preferences.py:1248 options/preferences.py:1266 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1249 options/preferences.py:1267 +#: options/preferences.py msgid "Private URL notification message" msgstr "" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1259 +#: options/preferences.py msgid "Private URL notification subject line" msgstr "" -#: options/preferences.py:1280 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1281 +#: options/preferences.py msgid "Motion release notification subject line" msgstr "" -#: options/preferences.py:1288 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1289 +#: options/preferences.py msgid "Motion release notification message" msgstr "" -#: options/preferences.py:1297 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1298 +#: options/preferences.py msgid "Team registration notification subject line" msgstr "" -#: options/preferences.py:1305 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1306 +#: options/preferences.py msgid "Team registration notification message" msgstr "" -#: options/presets.py:32 options/presets.py:351 +#: options/preferences.py options/templates/preferences_index.html +msgid "Motions" +msgstr "Themen" + +#: options/preferences.py +msgid "If checked, ballots require a motion to be entered" +msgstr "" + +#: options/preferences.py +msgid "Enable motions" +msgstr "" + +#: options/preferences.py +msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" +msgstr "" + +#: options/preferences.py +msgid "Ballot Hide Motions" +msgstr "" + +#: options/preferences.py +msgid "Enables the motion veto field on ballots, to track veto statistics" +msgstr "" + +#: options/preferences.py +msgid "Motion vetoes" +msgstr "" + +#: options/preferences.py +msgid "If showing results to public, show which motions were selected in the record" +msgstr "" + +#: options/preferences.py +msgid "Show motions in results" +msgstr "" + +#: options/preferences.py +msgid "Order in which are listed by round in the public view" +msgstr "" + +#: options/preferences.py +msgid "Order to display motions" +msgstr "" + +#: options/preferences.py +msgid "Earliest round first" +msgstr "" + +#: options/preferences.py +msgid "Latest round first" +msgstr "" + +#: options/preferences.py +msgid "Whether motions can be reused from one round to another." +msgstr "" + +#: options/preferences.py +msgid "Allow motion reuse" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Global Settings" +msgstr "" + +#: options/preferences.py +msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." +msgstr "" + +#: options/preferences.py +msgid "Enable API access" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Assistant account creation key" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Administrator account creation key" +msgstr "" + +#: options/presets.py msgid "Public Information Options" msgstr "" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" msgstr "" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" msgstr "" -#: options/presets.py:67 +#: options/presets.py msgid "Australs Rules" msgstr "" -#: options/presets.py:68 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:107 +#: options/presets.py msgid "British Parliamentary Rules" msgstr "" -#: options/presets.py:108 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." msgstr "" -#: options/presets.py:148 +#: options/presets.py msgid "Canadian Parliamentary Rules" msgstr "" -#: options/presets.py:150 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." msgstr "" -#: options/presets.py:173 +#: options/presets.py msgid "Australian Easters Rules" msgstr "" -#: options/presets.py:175 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:193 +#: options/presets.py msgid "2 vs 2 Impromptu" msgstr "" -#: options/presets.py:195 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." msgstr "" -#: options/presets.py:220 +#: options/presets.py msgid "3 vs 3 Prepared" msgstr "" -#: options/presets.py:222 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." msgstr "" -#: options/presets.py:249 +#: options/presets.py msgid "UADC Rules" msgstr "" -#: options/presets.py:251 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:287 +#: options/presets.py msgid "WSDC Rules" msgstr "" -#: options/presets.py:289 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:353 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "" -#: options/presets.py:365 +#: options/presets.py msgid "Tab Release Options" msgstr "" -#: options/presets.py:367 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" msgstr "" -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html msgid "Configuration" msgstr "" -#: options/templates/preferences_index.html:10 +#: options/templates/preferences_index.html +#, python-format +msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." +msgstr "" + +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." msgstr "" -#: options/templates/preferences_index.html:29 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" msgstr "" -#: options/templates/preferences_index.html:34 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" msgstr "" -#: options/templates/preferences_index.html:39 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" msgstr "" -#: options/templates/preferences_index.html:44 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" msgstr "" -#: options/templates/preferences_index.html:49 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" msgstr "" -#: options/templates/preferences_index.html:60 +#: options/templates/preferences_index.html +msgid "How and where are motions used" +msgstr "" + +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" msgstr "" -#: options/templates/preferences_index.html:65 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" msgstr "" -#: options/templates/preferences_index.html:70 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" msgstr "" -#: options/templates/preferences_index.html:75 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" msgstr "" -#: options/templates/preferences_index.html:80 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" msgstr "" -#: options/templates/preferences_index.html:92 +#: options/templates/preferences_index.html +msgid "Settings which can affect all tournaments on the site" +msgstr "" + +#: options/templates/preferences_index.html msgid "Manually Set Current Round" msgstr "" -#: options/templates/preferences_index.html:93 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." msgstr "" -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Rounds can be weighted so that certain rounds are worth more team points." +msgstr "" + +#: options/templates/preferences_index.html msgid "Presets" msgstr "" -#: options/templates/preferences_index.html:101 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." msgstr "" -#: options/templates/preferences_index.html:112 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" msgstr "" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" msgstr "" -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" msgstr "" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" msgstr "" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" msgstr "" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" msgstr "" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" msgstr "" -#: options/views.py:43 -msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules settings and change your configuration to use consensus ballots." -msgstr "" - -#: options/views.py:63 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." msgstr "" -#: options/views.py:113 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." msgstr "" diff --git a/tabbycat/participants/locale/de/LC_MESSAGES/django.po b/tabbycat/participants/locale/de/LC_MESSAGES/django.po index a46e316f57a..ef3de6b19af 100644 --- a/tabbycat/participants/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:33\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: German\n" "Language: de_DE\n" @@ -15,845 +15,950 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/participants/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 942\n" -#: participants/admin.py:94 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" msgstr "" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." msgstr[0] "" msgstr[1] "" -#: participants/admin.py:152 participants/admin.py:211 -msgid "Delete URL key" +#: participants/admin.py +msgid "Reset emoji" msgstr "" -#: participants/admin.py:206 +#: participants/admin.py +#, python-format +msgid "%(count)d team had their emoji reset." +msgid_plural "%(count)d teams had their emojis reset." +msgstr[0] "" +msgstr[1] "" + +#: participants/admin.py +msgid "Reset code name" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d team had their code name reset." +msgid_plural "%(count)d teams had their code names reset." +msgstr[0] "" +msgstr[1] "" + +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." msgstr[0] "" msgstr[1] "" -#: participants/apps.py:7 participants/views.py:40 +#: participants/apps.py participants/views.py msgid "Participants" msgstr "" -#: participants/models.py:20 participants/models.py:36 -#: participants/models.py:65 participants/models.py:95 +#: participants/models.py msgid "name" msgstr "name" -#: participants/models.py:23 participants/models.py:44 +#: participants/models.py msgid "region" msgstr "Region" -#: participants/models.py:24 +#: participants/models.py msgid "regions" msgstr "Regionen" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:38 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" msgstr "" -#: participants/models.py:40 +#: participants/models.py msgid "code" msgstr "" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:42 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" msgstr "" -#: participants/models.py:54 participants/models.py:154 -#: participants/models.py:340 +#: participants/models.py msgid "institution" msgstr "" -#: participants/models.py:55 +#: participants/models.py msgid "institutions" msgstr "" -#: participants/models.py:63 participants/models.py:156 -#: participants/models.py:343 +#: participants/models.py msgid "tournament" msgstr "Turnier" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:67 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" msgstr "" -#: participants/models.py:69 +#: participants/models.py msgid "slug" msgstr "URL-Kürzel" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:71 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" msgstr "" -#: participants/models.py:73 +#: participants/models.py msgid "sequence number" msgstr "" -#: participants/models.py:74 +#: participants/models.py msgid "The order in which the categories are displayed" msgstr "" -#: participants/models.py:76 +#: participants/models.py msgid "limit" msgstr "" -#: participants/models.py:77 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: participants/models.py:79 +#: participants/models.py msgid "public" msgstr "" -#: participants/models.py:80 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" msgstr "" -#: participants/models.py:86 +#: participants/models.py msgid "speaker category" msgstr "" -#: participants/models.py:87 participants/models.py:321 +#: participants/models.py msgid "speaker categories" msgstr "" -#: participants/models.py:97 -msgid "e-mail address" +#: participants/models.py +msgid "email address" msgstr "" -#: participants/models.py:99 +#: participants/models.py msgid "phone" msgstr "" -#: participants/models.py:101 +#: participants/models.py msgid "anonymous" msgstr "" -#: participants/models.py:102 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" msgstr "" -#: participants/models.py:105 +#: participants/models.py +msgid "code name" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py msgid "URL key" msgstr "" -#: participants/models.py:110 +#: participants/models.py msgid "male" msgstr "männlich" -#: participants/models.py:111 +#: participants/models.py msgid "female" msgstr "weiblich" -#: participants/models.py:112 +#: participants/models.py msgid "other" msgstr "andere" -#: participants/models.py:114 +#: participants/models.py msgid "gender" msgstr "Geschlecht" -#: participants/models.py:115 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" msgstr "" -#: participants/models.py:117 +#: participants/models.py msgid "pronoun" msgstr "" -#: participants/models.py:118 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" msgstr "" -#: participants/models.py:121 +#: participants/models.py msgid "person" msgstr "" -#: participants/models.py:122 +#: participants/models.py msgid "persons" msgstr "" -#: participants/models.py:137 +#: participants/models.py msgid "full name/suffix" msgstr "" -#: participants/models.py:138 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:140 +#: participants/models.py msgid "short name/suffix" msgstr "" -#: participants/models.py:141 -msgid "The name shown in the draw. Do not include institution name (see \"uses institutional prefix\" below)" +#: participants/models.py +msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:143 -msgid "code name" -msgstr "" - -#: participants/models.py:144 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" msgstr "" -#: participants/models.py:147 +#: participants/models.py msgid "short name" msgstr "" -#: participants/models.py:148 -msgid "The name shown in the draw, including institution name. (This is autogenerated.)" +#: participants/models.py +msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:150 +#: participants/models.py msgid "long name" msgstr "" -#: participants/models.py:151 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:158 +#: participants/models.py msgid "Uses institutional prefix" msgstr "" -#: participants/models.py:159 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" msgstr "" -#: participants/models.py:161 +#: participants/models.py msgid "break categories" msgstr "" -#: participants/models.py:172 +#: participants/models.py +msgid "institution conflicts" +msgstr "" + +#: participants/models.py msgid "none" msgstr "" -#: participants/models.py:173 +#: participants/models.py msgid "swing" msgstr "" -#: participants/models.py:174 +#: participants/models.py msgid "composite" msgstr "" -#: participants/models.py:175 +#: participants/models.py msgid "bye" msgstr "" -#: participants/models.py:178 +#: participants/models.py msgid "type" msgstr "typ" -#: participants/models.py:182 +#: participants/models.py msgid "emoji" msgstr "" -#: participants/models.py:196 participants/models.py:319 +#: participants/models.py msgid "team" msgstr "Team" -#: participants/models.py:197 +#: participants/models.py msgid "teams" msgstr "Teams" -#: participants/models.py:302 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." msgstr "" -#: participants/models.py:304 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:306 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:324 +#: participants/models.py msgid "speaker" msgstr "" -#: participants/models.py:325 +#: participants/models.py msgid "speakers" msgstr "" -#: participants/models.py:344 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" msgstr "" -#: participants/models.py:346 +#: participants/models.py msgid "base score" msgstr "" -#: participants/models.py:352 -msgid "institution conflicts" +#: participants/models.py +msgid "team conflicts" msgstr "" -#: participants/models.py:356 -msgid "team conflicts" +#: participants/models.py +msgid "adjudicator conflicts" msgstr "" -#: participants/models.py:359 +#: participants/models.py msgid "always trainee" msgstr "" -#: participants/models.py:360 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" msgstr "" -#: participants/models.py:362 +#: participants/models.py msgid "breaking" msgstr "Breakend" -#: participants/models.py:364 +#: participants/models.py msgid "independent" msgstr "" -#: participants/models.py:366 +#: participants/models.py msgid "adjudication core" msgstr "" -#: participants/models.py:375 +#: participants/models.py msgid "adjudicator" msgstr "Juror" -#: participants/models.py:376 +#: participants/models.py msgid "adjudicators" msgstr "Juroren" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" msgstr "" -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" -msgstr "RednerInnenpunkte" +msgstr "Einzelrednerpunkte" -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" msgstr "Über %(name)s" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" msgstr "" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" msgstr "" -#: participants/templates/adjudicator_registration_card.html:26 -#: participants/templates/team_registration_card.html:57 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:30 -#: participants/templates/team_registration_card.html:61 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" msgstr "" -#: participants/templates/adjudicator_registration_card.html:34 -#: participants/templates/team_registration_card.html:65 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "Region:" -#: participants/templates/adjudicator_registration_card.html:40 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." msgstr "" -#: participants/templates/adjudicator_registration_card.html:47 -#: participants/templates/team_registration_card.html:74 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:49 -#: participants/templates/team_registration_card.html:76 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr "" -#: participants/templates/adjudicator_registration_card.html:51 -#: participants/templates/adjudicator_registration_card.html:58 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:79 -#: participants/templates/team_registration_card.html:30 -#: participants/templates/team_registration_card.html:41 -#: participants/templates/team_registration_card.html:49 -#: participants/templates/team_registration_card.html:78 -#: participants/templates/team_registration_card.html:85 -#: participants/templates/team_registration_card.html:95 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" -msgstr "" +msgstr "Leer" -#: participants/templates/adjudicator_registration_card.html:54 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:56 -#: participants/templates/adjudicator_registration_card.html:64 -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/adjudicator_registration_card.html:77 -#: participants/templates/team_registration_card.html:28 -#: participants/templates/team_registration_card.html:39 -#: participants/templates/team_registration_card.html:47 -#: participants/templates/team_registration_card.html:83 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr "" -#: participants/templates/adjudicator_registration_card.html:61 -#: participants/templates/team_registration_card.html:81 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:75 -#: participants/templates/team_registration_card.html:91 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" msgstr "" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:13 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format -msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete these %(objects_name)s." +msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." msgstr "" #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:20 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:32 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:40 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:46 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" msgstr "" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "Teams:" -#: participants/templates/current_round/common.html:30 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "Juror:" msgstr[1] "Juroren:" -#: participants/templates/current_round/common.html:39 -#: participants/templates/current_round/common.html:41 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" msgstr "" -#: participants/templates/current_round/common.html:39 -#: participants/templates/current_round/common.html:41 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" msgstr "" -#: participants/templates/current_round/common.html:46 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." msgstr "" -#: participants/templates/current_round/common.html:56 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." msgstr "" -#: participants/templates/current_round/common.html:59 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "Thema:" -#: participants/templates/current_round/common.html:63 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "Thema %(seq)s:" -#: participants/templates/current_round/common.html:71 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." msgstr "" -#: participants/templates/current_round/round_adj.html:13 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:17 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:23 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:27 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:33 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:37 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:48 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:52 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating as the %(side)s team against %(opponent)s in %(room)s." +msgid "%(team)s is debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating as the %(side)s team against %(opponent)s in %(room)s." +msgid "You are debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating against %(opponent)s in %(room)s." +msgid "%(team)s is debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating against %(opponent)s in %(room)s." +msgid "You are debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:37 +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating as the %(side)s team in %(room)s." +msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:41 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating as the %(side)s team in %(room)s." +msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:47 +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating in %(room)s." +msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:51 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating in %(room)s." +msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." msgstr "" -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" msgstr "" -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" msgstr "" -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:39 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" msgstr "" -#: participants/templates/feedback_progress_panel.html:48 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:55 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." msgstr "" -#: participants/templates/in_this_round.html:8 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" msgstr "" -#: participants/templates/in_this_round.html:12 +#: participants/templates/in_this_round.html +msgid "In This Round" +msgstr "" + +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" msgstr "" -#: participants/templates/in_this_round.html:19 +#: participants/templates/in_this_round.html msgid "Room TBA" msgstr "" -#: participants/templates/in_this_round.html:31 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:50 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." msgstr[0] "" msgstr[1] "" -#: participants/templates/in_this_round.html:56 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." msgstr "" -#: participants/templates/in_this_round.html:71 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:87 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." msgstr "" -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" msgstr "" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" msgstr "" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." msgstr "" -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" msgstr "" -#: participants/templates/participants_subnav.html:26 participants/views.py:134 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" msgstr "" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" msgstr "" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" msgstr "" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." msgstr "" -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." msgstr "" -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" msgstr "" -#: participants/templates/team_registration_card.html:14 +#: participants/templates/team_registration_card.html msgid "Team name:" msgstr "" -#: participants/templates/team_registration_card.html:14 -msgid "Full name:" +#: participants/templates/team_registration_card.html +msgid "Full team name:" msgstr "" -#: participants/templates/team_registration_card.html:18 +#: participants/templates/team_registration_card.html +msgid "Short team name:" +msgstr "" + +#: participants/templates/team_registration_card.html msgid "Code name:" msgstr "" -#: participants/templates/team_registration_card.html:26 +#: participants/templates/team_registration_card.html +msgid "No code name assigned" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Emoji:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "No emoji assigned" +msgstr "" + +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "" -#: participants/templates/team_registration_card.html:37 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" msgstr "" -#: participants/templates/team_registration_card.html:45 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" msgstr "" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" msgstr "" -#: participants/views.py:45 +#: participants/views.py msgid "Adjudicators" msgstr "Juroren" -#: participants/views.py:54 +#: participants/views.py msgid "Speakers" -msgstr "RednerInnen" +msgstr "Redner" -#: participants/views.py:85 +#: participants/views.py msgid "Institutions" msgstr "" -#: participants/views.py:101 +#: participants/views.py msgid "Code" msgstr "" -#: participants/views.py:102 +#: participants/views.py msgid "Full name" msgstr "" -#: participants/views.py:104 +#: participants/views.py msgid "Region" msgstr "Region" -#: participants/views.py:106 +#: participants/views.py msgid "Teams" msgstr "Teams" -#: participants/views.py:106 +#: participants/views.py msgid "Number of teams" msgstr "" -#: participants/views.py:108 +#: participants/views.py msgid "Adjs" msgstr "" -#: participants/views.py:109 +#: participants/views.py msgid "Number of adjudicators, excluding independents" msgstr "" -#: participants/views.py:111 +#: participants/views.py msgid "IAs" msgstr "" -#: participants/views.py:112 +#: participants/views.py msgid "Number of independent adjudicators" msgstr "" -#: participants/views.py:142 +#: participants/views.py msgid "Code name" msgstr "" -#: participants/views.py:162 +#: participants/views.py msgid "Team Registration" msgstr "" -#: participants/views.py:208 +#: participants/views.py msgid "Results" msgstr "Ergebnisse" -#: participants/views.py:213 participants/views.py:247 +#: participants/views.py #, python-format msgid "Record for %(name)s" msgstr "" -#: participants/views.py:244 +#: participants/views.py msgid "Previous Rounds" msgstr "" -#: participants/views.py:333 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" msgstr[0] "" msgstr[1] "" -#: participants/views.py:339 +#: participants/views.py msgid "No changes were made to the categories." msgstr "" -#: participants/views.py:352 +#: participants/views.py msgid "Speaker Category Eligibility" msgstr "" diff --git a/tabbycat/printing/locale/de/LC_MESSAGES/django.po b/tabbycat/printing/locale/de/LC_MESSAGES/django.po index d9c56e7674c..6a38cc747c2 100644 --- a/tabbycat/printing/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:36\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: German\n" "Language: de_DE\n" @@ -15,115 +15,111 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/printing/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" msgstr "" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" msgstr "" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." msgstr "" -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." msgstr "" -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" msgstr "" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" msgstr "" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" msgstr "" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" msgstr "" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" msgstr "" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" -msgstr "" +msgstr "für %(round)s" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" msgstr "" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" msgstr "" -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" msgstr "" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "×" -#: printing/templates/scoresheet_list.html:47 -msgid "\n" -" Editing motions here will not save them permanently — it will only\n" -" update the text used in the printed ballots below. This can be useful if using\n" -" placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print\n" -" ballots with correct motions.\n" -" " +#: printing/templates/scoresheet_list.html +msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." msgstr "" -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "Thema" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" msgstr "" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." msgstr "" -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" msgstr "" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" msgstr "" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "Team" diff --git a/tabbycat/privateurls/locale/de/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/de/LC_MESSAGES/django.po index 7bfbb7faa8e..582927690bb 100644 --- a/tabbycat/privateurls/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:36\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: German\n" "Language: de_DE\n" @@ -15,166 +15,165 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/privateurls/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" msgstr "" -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:144 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" msgstr "" -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." msgstr "" -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" msgstr "" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." msgstr "" -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." msgstr "" -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." msgstr "" -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." msgstr "" -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." msgstr "" -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." msgstr "" -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" msgstr "" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" msgstr "" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "(%(team)s)" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" msgstr "" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." msgstr "" -#: privateurls/templates/public_url_landing.html:61 -msgid "Submit Ballot" +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Submit Ballot for %(round)s" msgstr "" -#: privateurls/templates/public_url_landing.html:67 -#: privateurls/templates/public_url_landing.html:73 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" -msgstr "Übermittle Feedback" +msgstr "Feedback abgeben" -#: privateurls/templates/public_url_landing.html:82 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" msgstr "" -#: privateurls/views.py:62 +#: privateurls/views.py msgid "no URL" msgstr "" -#: privateurls/views.py:75 +#: privateurls/views.py msgid "URL" msgstr "" -#: privateurls/views.py:86 +#: privateurls/views.py msgid "Speakers" -msgstr "RednerInnen" +msgstr "Redner" -#: privateurls/views.py:96 +#: privateurls/views.py msgid "Adjudicators" msgstr "Juroren" -#: privateurls/views.py:118 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." msgstr "" -#: privateurls/views.py:125 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." msgstr[0] "" msgstr[1] "" -#: privateurls/views.py:130 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." msgstr[0] "" msgstr[1] "" -#: privateurls/views.py:161 +#: privateurls/views.py msgid "URL Key" msgstr "" -#: privateurls/views.py:174 +#: privateurls/views.py msgid "Debates" msgstr "Debatten" diff --git a/tabbycat/results/locale/de/LC_MESSAGES/django.po b/tabbycat/results/locale/de/LC_MESSAGES/django.po index c56e05a6d40..8d4d6b335e8 100644 --- a/tabbycat/results/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:37\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:14\n" "Last-Translator: philip_tc\n" "Language-Team: German\n" "Language: de_DE\n" @@ -15,971 +15,1079 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/results/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 948\n" -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:112 +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py +#, python-format +msgid "Resaved results for %(count)d ballot submission." +msgid_plural "Resaved results for %(count)d ballot submissions." +msgstr[0] "" +msgstr[1] "" + +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" msgstr "Ergebnisse" -#: results/forms.py:44 +#: results/forms.py +msgid "Tournament password" +msgstr "" + +#: results/forms.py msgid "That password isn't correct." msgstr "" -#: results/forms.py:76 +#: results/forms.py msgid "Please enter a whole number." msgstr "" -#: results/forms.py:78 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." msgstr "" -#: results/forms.py:157 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." msgstr "" -#: results/forms.py:163 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." msgstr "" -#: results/forms.py:299 +#: results/forms.py msgid "---------" msgstr "" -#: results/forms.py:301 results/forms.py:303 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" msgstr "" -#: results/forms.py:320 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" msgstr "" -#: results/forms.py:337 +#: results/forms.py +#, python-format +msgid "%(team)s (%(side)s)" +msgstr "%(team)s (%(side)s)" + +#: results/forms.py +msgid "Winner" +msgstr "" + +#: results/forms.py msgid "Mark as a duplicate speech" msgstr "" -#: results/forms.py:472 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." msgstr "" -#: results/forms.py:486 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." msgstr[0] "" msgstr[1] "" -#: results/forms.py:503 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." msgstr "" -#: results/forms.py:510 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." msgstr "" -#: results/forms.py:663 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." msgstr "" -#: results/forms.py:672 +#: results/forms.py +msgid "The declared winner does not correspond to the team with the highest score." +msgstr "" + +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" msgstr "" -#: results/forms.py:682 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:759 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:767 +#: results/forms.py #, python-format -msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." +msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:799 +#: results/forms.py #, python-format -msgid "%(team)s (%(side)s)" -msgstr "%(team)s (%(side)s)" +msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." +msgstr "" -#: results/forms.py:813 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." msgstr "" -#: results/forms.py:820 -msgid "There must be exactly two teams advancing." +#: results/forms.py +#, python-format +msgid "There must be exactly %(n)d team advancing." +msgid_plural "There must be exactly %(n)d teams advancing." +msgstr[0] "" +msgstr[1] "" + +#: results/forms.py +msgid "There must be exactly 1 team advancing." msgstr "" -#: results/models.py:32 +#: results/models.py msgid "Tab room" msgstr "" -#: results/models.py:33 +#: results/models.py msgid "Public" msgstr "" -#: results/models.py:37 +#: results/models.py msgid "timestamp" msgstr "" -#: results/models.py:39 +#: results/models.py msgid "version" msgstr "" -#: results/models.py:41 +#: results/models.py msgid "submitter type" msgstr "" -#: results/models.py:43 +#: results/models.py msgid "confirmed" msgstr "" -#: results/models.py:48 +#: results/models.py +msgid "from private URL" +msgstr "" + +#: results/models.py +msgid "from participant" +msgstr "" + +#: results/models.py msgid "submitter" msgstr "" -#: results/models.py:51 +#: results/models.py msgid "confirmer" msgstr "" -#: results/models.py:53 +#: results/models.py msgid "confirm timestamp" msgstr "" -#: results/models.py:55 +#: results/models.py msgid "IP address" msgstr "" -#: results/models.py:92 +#: results/models.py msgid "A tab room ballot must have a user associated." msgstr "" -#: results/models.py:100 +#: results/models.py msgid "debate" msgstr "Debatte" -#: results/models.py:102 +#: results/models.py msgid "motion" -msgstr "thema" +msgstr "Thema" -#: results/models.py:104 +#: results/models.py msgid "discarded" msgstr "" -#: results/models.py:108 results/models.py:188 results/models.py:226 -#: results/models.py:268 +#: results/models.py +msgid "single adjudicator" +msgstr "" + +#: results/models.py +msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." +msgstr "" + +#: results/models.py msgid "ballot submission" msgstr "" -#: results/models.py:109 +#: results/models.py msgid "ballot submissions" msgstr "" -#: results/models.py:128 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" msgstr "" -#: results/models.py:135 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" msgstr "" -#: results/models.py:190 +#: results/models.py msgid "debate adjudicator" msgstr "" -#: results/models.py:192 results/models.py:228 results/models.py:270 +#: results/models.py msgid "debate team" msgstr "" -#: results/models.py:193 results/models.py:237 results/models.py:273 -msgid "score" +#: results/models.py +msgid "win" msgstr "" -#: results/models.py:194 results/models.py:274 -msgid "position" +#: results/models.py +msgid "margin" msgstr "" -#: results/models.py:200 -msgid "speaker score by adjudicator" +#: results/models.py +msgid "score" msgstr "" -#: results/models.py:201 -msgid "speaker scores by adjudicator" +#: results/models.py +msgid "team score by adjudicator" msgstr "" -#: results/models.py:215 +#: results/models.py +msgid "team scores by adjudicator" +msgstr "" + +#: results/models.py msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." msgstr "" -#: results/models.py:231 -msgid "points" -msgstr "Punkte" +#: results/models.py +msgid "position" +msgstr "" -#: results/models.py:233 -msgid "win" +#: results/models.py +msgid "speaker score by adjudicator" msgstr "" -#: results/models.py:235 -msgid "margin" +#: results/models.py +msgid "speaker scores by adjudicator" msgstr "" -#: results/models.py:239 +#: results/models.py +msgid "points" +msgstr "Punkte" + +#: results/models.py msgid "votes given" msgstr "" -#: results/models.py:241 +#: results/models.py msgid "votes possible" msgstr "" -#: results/models.py:245 +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py msgid "team score" msgstr "" -#: results/models.py:246 +#: results/models.py msgid "team scores" msgstr "" -#: results/models.py:272 +#: results/models.py msgid "speaker" msgstr "" -#: results/models.py:276 +#: results/models.py msgid "ghost" msgstr "" -#: results/models.py:277 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." msgstr "" -#: results/models.py:286 +#: results/models.py msgid "speaker score" msgstr "" -#: results/models.py:287 +#: results/models.py msgid "speaker scores" msgstr "" -#: results/models.py:296 +#: results/models.py msgid "The debate team and speaker must be from the same team." msgstr "" -#: results/models.py:299 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." msgstr "" -#: results/tables.py:17 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" msgstr "" -#: results/tables.py:38 +#: results/tables.py msgid "Status of this debate's ballot" msgstr "" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" msgstr "" -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" msgstr "" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" msgstr "" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" msgstr "" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" msgstr "" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format -msgid "\n" -" A speaker from %(team)s gave multiple speeches in the current round\n" -" " +msgid "A speaker from %(team)s gave multiple speeches in the current round" msgstr "" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" msgstr "" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" msgstr "" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." msgstr "" -#: results/templates/admin_results.html:81 +#: results/templates/admin_results.html +#, python-format +msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." +msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/admin_results.html +#, python-format +msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." +msgstr "" + +#: results/templates/admin_results.html +msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." +msgstr "" + +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." msgstr "" -#: results/templates/admin_results.html:89 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." msgstr "" -#: results/templates/admin_results.html:98 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/admin_results.html:105 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:30 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" msgstr "" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:35 -#: results/templates/ballot_entry_base.html:39 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" msgstr "" -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." msgstr "" -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html msgid "Confirm results" msgstr "" -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" msgstr "" -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:74 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." msgstr "" -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" msgstr "" -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "" -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." msgstr "" -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "" -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." msgstr[0] "" msgstr[1] "" -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr[0] "" msgstr[1] "" -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:41 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:44 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "Rang" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" msgstr "" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." +#: results/templates/ballot/ballot_set.html +msgid "There are some problems with this scoresheet. Please review and correct them." msgstr "" -#: results/templates/ballot/bp_elimination_ballot.html:6 -#: results/templates/ballot/standard_ballot_set.html:6 -msgid "There are some problems with this scoresheet. Please review and correct them." +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s (%(institution)s)" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html +msgid "Scoresheet" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Solo Chair" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Chair" +msgstr "Hauptjuror" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Panellist" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Trainee" +msgstr "Trainee" + +#: results/templates/ballot/ballot_set.html +msgid "Assign sides before entering scores" msgstr "" -#: results/templates/ballot/bp_elimination_ballot.html:12 -msgid "Advancing Teams" +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." msgstr "" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "There is %(number)s existing ballot set for this debate." msgid_plural "There are %(number)s existing ballot sets for this debate." msgstr[0] "" msgstr[1] "" -#: results/templates/ballot/other_ballots_list.html:19 -#, python-format -msgid "There are %(number)s ballot sets for this debate." -msgstr "" - -#: results/templates/ballot/other_ballots_list.html:29 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." msgstr "" -#: results/templates/ballot/other_ballots_list.html:34 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." msgstr "" -#: results/templates/ballot/other_ballots_list.html:49 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:52 +#: results/templates/ballot/other_ballots_list.html +msgid "MERGING" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:57 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:61 +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "submitted from %(adjudicator)s's private URL," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:66 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," msgstr "" -#: results/templates/ballot/other_ballots_list.html:71 -#, python-format -msgid "confirmed by %(confirmer)s" +#: results/templates/ballot/other_ballots_list.html +msgid "unknown" msgstr "" -#: results/templates/ballot/other_ballots_list.html:75 -msgid "confirmed by unknown confirmer" +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "confirmed by %(confirmer)s" msgstr "" -#: results/templates/ballot/other_ballots_list.html:77 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" msgstr "" -#: results/templates/ballot/other_ballots_list.html:81 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" msgstr "" -#: results/templates/ballot/other_ballots_list.html:85 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" msgstr[0] "" msgstr[1] "" -#: results/templates/ballot/standard_ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 -#, python-format -msgid "Ballot from %(name)s (%(institution)s)" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 -#, python-format -msgid "Ballot from %(name)s" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 -msgid "Scoresheet" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -msgid "Solo Chair" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 -msgid "Chair" -msgstr "Hauptjuror" - -#: results/templates/ballot/standard_ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 -msgid "Panellist" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -msgid "Trainee" -msgstr "Jurierlehrling" - -#: results/templates/ballot/standard_ballot_set.html:44 -msgid "Assign sides before entering scores" -msgstr "" - -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." msgstr "" -#: results/templates/ballot_entry_base.html:8 -#, python-format -msgid "New Ballot Set for %(debate)s" -msgstr "" - -#: results/templates/ballot_entry_base.html:12 -#, python-format -msgid "Edit Ballot Set for %(debate)s" -msgstr "" - -#: results/templates/ballot_entry_base.html:19 -#, python-format -msgid "%(room)s: %(debate)s" -msgstr "" - -#: results/templates/ballot_entry_base.html:48 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr "" -#: results/templates/ballot_entry_base.html:58 -#, python-format -msgid "In the grand-final rounds of a British Parliamentary format this form will not let you nominate a single winner. To work around this, you need to first nominate a second 'fake' winner in this ballot and save/complete the ballot as normal. To then correct this result, you go to the Team Scores page of the Edit Database area, click the Team Score of the 'fake' winner of this debate, set the Win field to No, and then Save the change." -msgstr "" - -#: results/templates/ballot_entry_base.html:72 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." msgstr "" -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" msgstr "" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" msgstr "" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" msgstr "" -#: results/templates/enter_results.html:15 +#: results/templates/debate_postponement_form.html +msgid "Postponed" +msgstr "" + +#: results/templates/debate_postponement_form.html +msgid "Postpone" +msgstr "" + +#: results/templates/enter_results.html msgid "Ballot Status" msgstr "" -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" msgstr "" -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" msgstr "" -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" msgstr "" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" msgstr "" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" msgstr "" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format -msgid "The URL of this page is personalised to you, %(adjudicator)s. Do not share it with anyone: anyone who knows this URL can submit results for your debates. If you bookmark this page and return here after each debate, it will always show the debate that you just adjudicated." +msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." msgstr "" -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" msgstr "" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." msgstr "" -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" msgstr "" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" msgstr "" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" msgstr "" -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." msgstr "" -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" msgstr "" -#: results/templates/public_ballot_set.html:28 -#: results/templates/public_enter_results.html:14 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" msgstr "" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" msgstr "" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" msgstr "" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "Thema" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" msgstr "" -#: results/templates/public_ballot_set.html:91 -#: results/templates/public_ballot_set.html:95 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set.html #, python-format -msgid "Back to the tournament home page." +msgid "%(name)s (%(side)s)" msgstr "" -#: results/templates/public_enter_results.html:5 -#: results/templates/public_enter_results.html:8 +#: results/templates/public_ballot_set.html +msgid "Won" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Lost" +msgstr "" + +#: results/templates/public_ballot_set_error.html #, python-format -msgid "Enter Results for %(debate)s" +msgid "Back to the tournament home page." msgstr "" -#: results/templates/public_enter_results.html:22 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" msgstr "" -#: results/templates/public_enter_results.html:30 +#: results/templates/public_enter_results.html +msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." +msgstr "" + +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." msgstr[0] "" msgstr[1] "" -#: results/templates/public_enter_results.html:69 -msgid "Submit Ballot(s)" -msgstr "" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" +msgstr[1] "" -#: results/templates/public_enter_results.html:71 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" msgstr "" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" msgstr "" -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" msgstr "" -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" msgstr "" -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" msgstr "" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" msgstr "" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." msgstr "" -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." msgstr "" -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" msgstr "" -#: results/utils.py:20 +#: results/utils.py +msgid "Debate was Postponed" +msgstr "" + +#: results/utils.py msgid "Ballot is Unconfirmed" msgstr "" -#: results/utils.py:22 +#: results/utils.py msgid "Ballot is Confirmed" msgstr "" #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:32 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" msgstr "" -#: results/utils.py:51 +#: results/utils.py #, python-format -msgid "%(winner)s (%(winner_side)s) won" +msgid "%(team)s (%(side)s) won" msgstr "" -#: results/utils.py:56 +#. Translators: The team here is the losing team +#: results/utils.py #, python-format -msgid "vs %(loser)s (%(loser_side)s)" +msgid "vs %(team)s (%(side)s)" msgstr "" -#: results/utils.py:71 +#: results/utils.py #, python-format -msgid "Advancing: %(advancing_list)s
    \n" +msgid "Advancing: %(advancing_list)s
    " msgstr "" -#: results/utils.py:75 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" msgstr "" -#: results/utils.py:85 +#: results/utils.py #, python-format -msgid "1st: %(first_team)s
    \n" +msgid "1st: %(first_team)s
    " msgstr "" -#: results/utils.py:87 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" "4th: %(fourth_team)s" msgstr "" -#: results/utils.py:102 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" msgstr "" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:162 +#: results/utils.py msgid "PM" msgstr "" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:164 +#: results/utils.py msgid "DPM" msgstr "" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:166 +#: results/utils.py msgid "LO" msgstr "" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:168 +#: results/utils.py msgid "DLO" msgstr "" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:170 +#: results/utils.py msgid "MG" msgstr "" #. Translators: Abbreviation for Government Whip -#: results/utils.py:172 +#: results/utils.py msgid "GW" msgstr "" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:174 +#: results/utils.py msgid "MO" msgstr "" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:176 +#: results/utils.py msgid "OW" msgstr "" -#: results/utils.py:196 +#: results/utils.py msgid "Reply" msgstr "" -#: results/views.py:224 results/views.py:226 +#: results/views.py msgid " vs " msgstr "" -#: results/views.py:359 +#: results/views.py +#, python-format +msgid "%(matchup)s: %(round)s @ %(room)s" +msgstr "" + +#: results/views.py +msgid "N/A" +msgstr "" + +#: results/views.py +msgid "New Ballot Set" +msgstr "" + +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." msgstr "" -#: results/views.py:361 results/views.py:428 +#: results/views.py msgid " Email receipts queued to be sent." msgstr "" -#: results/views.py:375 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." msgstr "" -#: results/views.py:381 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." msgstr "" -#: results/views.py:421 +#: results/views.py +msgid "Edit Ballot Set" +msgstr "" + +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." msgstr "" -#: results/views.py:423 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." msgstr "" -#: results/views.py:425 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." msgstr "" -#: results/views.py:469 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." msgstr "" -#: results/views.py:477 +#: results/views.py msgid "The draw for this round hasn't been released yet." msgstr "" -#: results/views.py:481 +#: results/views.py msgid "The motions for this round haven't been released yet." msgstr "" -#: results/views.py:486 +#: results/views.py msgid "It looks like you don't have a debate this round." msgstr "" -#: results/views.py:488 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." msgstr "" -#: results/views.py:496 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:501 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:588 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." msgstr "" -#: results/views.py:606 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." msgstr "" -#: results/views.py:609 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." msgstr "" -#: results/views.py:613 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." msgstr "" -#: results/views.py:616 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." msgstr "" -#: results/views.py:638 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." msgstr "" -#: results/views.py:694 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" msgstr "" -#: results/views.py:698 +#: results/views.py msgid "Adjudicator" msgstr "Juror" +#: results/views.py +msgid "Merge Ballots" +msgstr "" + +#: results/views.py +msgid "The speaking order in the ballots is inconsistent, so could not be merged." +msgstr "" + +#: results/views.py +msgid "Duplicate speeches are marked inconsistently, so could not be merged." +msgstr "" + +#: results/views.py +#, python-format +msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." +msgstr "" + diff --git a/tabbycat/standings/locale/de/LC_MESSAGES/django.po b/tabbycat/standings/locale/de/LC_MESSAGES/django.po index 2bfcd0fb981..7767ff83df2 100644 --- a/tabbycat/standings/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:37\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:01\n" "Last-Translator: philip_tc\n" "Language-Team: German\n" "Language: de_DE\n" @@ -15,590 +15,598 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/standings/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 950\n" -#: standings/base.py:283 +#: standings/base.py msgid "The same metric would be added twice:" msgstr "" -#: standings/base.py:284 +#: standings/base.py msgid "The same ranking would be added twice:" msgstr "" -#: standings/base.py:358 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" msgstr "" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" msgstr "" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" msgstr "Breakend" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" msgstr "" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" msgstr "" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "Hauptjuroren" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" -msgstr "Jurierlehrlingen" +msgstr "Trainees" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" msgstr "" -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" msgstr "" -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" msgstr "" -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" msgstr "" -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" msgstr "" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" msgstr "" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" msgstr "" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" msgstr "" -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" msgstr "" -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" msgstr "" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" msgstr "" -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" msgstr "" -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" msgstr "" -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" msgstr "" -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" msgstr "" -#: standings/speakers.py:50 standings/speakers.py:136 +#: standings/speakers.py msgid "total" msgstr "Gesamt" -#: standings/speakers.py:51 standings/speakers.py:137 +#: standings/speakers.py msgid "Total" msgstr "Gesamt" -#: standings/speakers.py:58 standings/speakers.py:146 +#: standings/speakers.py msgid "average" msgstr "" -#: standings/speakers.py:59 standings/speakers.py:147 +#: standings/speakers.py msgid "Avg" -msgstr "Avg" +msgstr "⌀" -#: standings/speakers.py:66 -msgid "trimmed mean (high-low drop)" -msgstr "" - -#: standings/speakers.py:67 -msgid "Trim" -msgstr "" - -#: standings/speakers.py:99 +#: standings/speakers.py msgid "team points" msgstr "Teampunkte" -#: standings/speakers.py:100 +#: standings/speakers.py msgid "Team" msgstr "Team" -#: standings/speakers.py:119 standings/speakers.py:156 +#: standings/speakers.py msgid "standard deviation" msgstr "" -#: standings/speakers.py:120 standings/speakers.py:157 +#: standings/speakers.py msgid "Stdev" msgstr "" -#: standings/speakers.py:128 +#: standings/speakers.py msgid "number of speeches given" msgstr "" -#: standings/speakers.py:129 standings/speakers.py:168 +#: standings/speakers.py msgid "Num" msgstr "" -#: standings/speakers.py:167 +#: standings/speakers.py msgid "replies given" msgstr "" -#: standings/teams.py:64 +#: standings/speakers.py +msgid "trimmed mean (high-low drop)" +msgstr "" + +#: standings/speakers.py +msgid "Trim" +msgstr "" + +#: standings/teams.py msgid "points" msgstr "Punkte" -#: standings/teams.py:65 +#: standings/teams.py msgid "Pts" msgstr "" -#: standings/teams.py:74 +#: standings/teams.py msgid "wins" msgstr "" -#: standings/teams.py:75 standings/views.py:596 +#: standings/teams.py standings/views.py msgid "Wins" msgstr "" -#: standings/teams.py:85 +#: standings/teams.py msgid "total speaker score" msgstr "" -#: standings/teams.py:86 +#: standings/teams.py msgid "Spk" msgstr "" -#: standings/teams.py:95 +#: standings/teams.py msgid "average total speaker score" msgstr "" -#: standings/teams.py:96 +#: standings/teams.py msgid "ATSS" msgstr "" -#: standings/teams.py:105 +#: standings/teams.py msgid "speaker score standard deviation" msgstr "" -#: standings/teams.py:106 +#: standings/teams.py msgid "SSD" msgstr "" -#: standings/teams.py:116 +#: standings/teams.py msgid "sum of margins" msgstr "" -#: standings/teams.py:117 +#: standings/teams.py msgid "Marg" msgstr "" -#: standings/teams.py:126 +#: standings/teams.py msgid "average margin" msgstr "" -#: standings/teams.py:127 +#: standings/teams.py msgid "AWM" msgstr "" -#: standings/teams.py:136 +#: standings/teams.py msgid "average individual speaker score" msgstr "" -#: standings/teams.py:137 +#: standings/teams.py msgid "AISS" msgstr "" -#: standings/teams.py:203 +#: standings/teams.py msgid "draw strength by wins" msgstr "" -#: standings/teams.py:204 +#: standings/teams.py msgid "DS" msgstr "" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by total speaker score" msgstr "" -#: standings/teams.py:212 +#: standings/teams.py msgid "DSS" msgstr "" -#: standings/teams.py:223 +#: standings/teams.py msgid "number of pullups before this round" msgstr "" -#: standings/teams.py:224 +#: standings/teams.py msgid "PU" msgstr "" -#: standings/teams.py:246 +#: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "" -#: standings/teams.py:247 +#: standings/teams.py msgid "Ballots" msgstr "" -#: standings/teams.py:248 +#: standings/teams.py msgid "votes/ballots carried" msgstr "" -#: standings/teams.py:273 +#: standings/teams.py msgid "number of firsts" msgstr "" -#: standings/teams.py:274 +#: standings/teams.py msgid "1sts" msgstr "" -#: standings/teams.py:283 +#: standings/teams.py msgid "number of seconds" msgstr "" -#: standings/teams.py:284 +#: standings/teams.py msgid "2nds" msgstr "" -#: standings/teams.py:296 +#: standings/teams.py +msgid "number of thirds" +msgstr "" + +#: standings/teams.py +msgid "3rds" +msgstr "" + +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py msgid "Who-beat-whom" msgstr "" -#: standings/teams.py:297 +#: standings/teams.py msgid "WBW" msgstr "" -#: standings/teams.py:298 +#: standings/teams.py msgid "who-beat-whom" msgstr "" -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." msgstr "" -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." msgstr "" -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." msgstr "" -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." msgstr "" -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." msgstr "" -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." msgstr "" -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." msgstr "" -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." msgstr "" -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." msgstr "" -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." msgstr "" -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" msgstr "" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." msgstr "" -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" msgstr "" -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" msgstr "" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" msgstr "" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" msgstr "" -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" msgstr "" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:150 -#: standings/templates/standings_index.html:163 -#: standings/templates/standings_index.html:182 +#: standings/templates/standings_index.html msgid "No data yet" msgstr "" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" msgstr "" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" msgstr "" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" msgstr "" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" msgstr "" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" msgstr "" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" msgstr "" -#: standings/templates/standings_index.html:144 -#: standings/templates/standings_index.html:157 -#, python-format -msgid "%(reference)s in %(abbreviation)s" -msgstr "" - -#: standings/templates/standings_index.html:173 +#: standings/templates/standings_index.html msgid "Average Speaks" msgstr "" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" msgstr "Überblick" -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "Teams" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" msgstr "" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" -msgstr "RednerInnen" +msgstr "Redner" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" msgstr "" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" msgstr "" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "" -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" msgstr "" -#: standings/templates/standings_menu.html:64 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "Themen" -#: standings/templates/standings_menu.html:68 +#: standings/templates/standings_menu.html +msgid "By Round" +msgstr "" + +#: standings/templates/standings_menu.html msgid "Diversity" msgstr "" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." msgstr "" -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " msgstr "" -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " msgstr "" -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " msgstr "" -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" msgstr "" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" msgstr "" -#: standings/views.py:206 standings/views.py:432 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." msgstr "" -#: standings/views.py:282 +#: standings/views.py msgid "Speaker Standings" msgstr "" -#: standings/views.py:324 +#: standings/views.py msgid "Speaker Tab" -msgstr "RednerInnentab" +msgstr "Einzelrednertab" -#: standings/views.py:339 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" msgstr "" -#: standings/views.py:357 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" -msgstr "%(category)s RednerInnentab" +msgstr "%(category)s Rednertab" -#: standings/views.py:370 +#: standings/views.py msgid "Reply Speaker Standings" msgstr "" -#: standings/views.py:375 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." msgstr "" -#: standings/views.py:412 +#: standings/views.py msgid "Reply Speaker Tab" msgstr "" -#: standings/views.py:424 standings/views.py:673 +#: standings/views.py msgid "Team Standings" msgstr "" -#: standings/views.py:503 +#: standings/views.py msgid "Team Tab" msgstr "Teamtab" -#: standings/views.py:522 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" msgstr "" -#: standings/views.py:549 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" msgstr "%(category)s Teamtab" -#: standings/views.py:560 +#: standings/views.py msgid "Current Team Standings" msgstr "" -#: standings/views.py:596 +#: standings/views.py msgid "Points" msgstr "Punkte" +#: standings/views.py +msgid "Feedback Overview" +msgstr "" + +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +msgstr "" + diff --git a/tabbycat/tournaments/locale/de/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/de/LC_MESSAGES/django.po index e7a9f6379f6..45c6b8bfabe 100644 --- a/tabbycat/tournaments/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:37\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: German\n" "Language: de_DE\n" @@ -15,1025 +15,1019 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/tournaments/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "Turniere" -#: tournaments/forms.py:27 +#: tournaments/forms.py msgid "Number of preliminary rounds" -msgstr "" +msgstr "Vorrundenanzahl" -#: tournaments/forms.py:32 +#: tournaments/forms.py msgid "Number of teams in the open break" -msgstr "" +msgstr "Anzahl der Teams im offenen Break" -#: tournaments/forms.py:33 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." -msgstr "" +msgstr "Freilassen falls keine K.-o.-Run­den geplant sind." -#: tournaments/forms.py:39 +#: tournaments/forms.py msgid "Did you agree with their decision?" -msgstr "" +msgstr "Stimmst du dem Ergebnis zu?" -#: tournaments/forms.py:39 +#: tournaments/forms.py msgid "Agree?" -msgstr "" +msgstr "Zustimmung?" -#: tournaments/forms.py:45 +#: tournaments/forms.py msgid "Comments" -msgstr "" +msgstr "Freitextfeld" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:59 +#: tournaments/forms.py msgid "Open" -msgstr "" +msgstr "Offen" -#: tournaments/forms.py:84 +#: tournaments/forms.py msgid "Format Configuration" -msgstr "" +msgstr "Formatkonfiguration" -#: tournaments/forms.py:85 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" -msgstr "" +msgstr "Wähle ein Format für die Standardeinstellungen" -#: tournaments/forms.py:89 +#: tournaments/forms.py msgid "Public Configuration" -msgstr "" +msgstr "Voreinstellungen für öffentliche Informationen" -#: tournaments/forms.py:90 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" -msgstr "" +msgstr "Sollen im öffentlichen Teil der Seite Informationen wie Themen und Setzungen (jeweils nach Veröffentlichung) angezeigt werden?" -#: tournaments/forms.py:96 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" msgstr "" -#: tournaments/forms.py:186 +#: tournaments/forms.py msgid "Current preliminary round" -msgstr "" +msgstr "Aktuelle Vorrunde" -#: tournaments/forms.py:187 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" -msgstr "" +msgstr "Alle Vorrunden sind abgeschlossen" -#: tournaments/forms.py:199 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" -msgstr "" +msgstr "Aktuelle K.-o.-Run­de der %(category)s-Kategorie (nur wenn alle Vorrunden abgeschlossen sind)" -#: tournaments/forms.py:205 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" -msgstr "" +msgstr "Alle K.-o.-Run­den in der %(category)s-Kategorie sind abgeschossen" -#: tournaments/forms.py:217 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." -msgstr "" +msgstr "Falls die aktuelle Runde eine Vorrunde ist, muss dieses Feld leer sein." -#: tournaments/forms.py:223 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." +msgstr "Falls alle Vorrunden abgeschlossen sind, muss dieses Feld ausgefüllt werden." + +#: tournaments/forms.py +#, python-format +msgid "%(name)s (%(abbreviation)s)" msgstr "" -#: tournaments/mixins.py:108 +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." -msgstr "" +msgstr "Du wurdest hierher weitergeleitet, weil das %(tournament)s-Turnier keine Runden hat. Bitte erstelle Runden, bevor du in den Administrationsbereich zurückkehrst." -#: tournaments/mixins.py:116 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." -msgstr "" +msgstr "Es gibt ein Problem mit den Daten des %(tournament)s-Turniers. Bitte wende dich an das Tab-Team." -#: tournaments/mixins.py:129 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." -msgstr "" +msgstr "Du wurdest hierher weitergeleitet, weil es ein Problem mit der Positionszuordnung in einer Debatte gibt." -#: tournaments/mixins.py:136 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." -msgstr "" +msgstr "Es gibt ein Problem mit der Positionszuordnung in einer Debatte. Bitte wende dich an das Tab-Team." -#: tournaments/mixins.py:231 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" -msgstr "" +msgstr "für %(round)s" -#: tournaments/mixins.py:431 +#: tournaments/mixins.py msgid "Return to Draw" -msgstr "" +msgstr "Zurück zur Setzung" -#: tournaments/models.py:27 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." -msgstr "" +msgstr "Du kannst dies nicht als Turnier-URL verwenden, da es ich um eine geschützte Systemadresse handelt. Bitte wähle etwas anderes." -#: tournaments/models.py:34 tournaments/models.py:330 +#: tournaments/models.py msgid "name" msgstr "name" -#: tournaments/models.py:35 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" -msgstr "" +msgstr "Der vollständige Turniername (beispielsweise \"Deutschsprachige Debattiermeisterschaft 2021\")" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "short name" -msgstr "" +msgstr "Kurzbezeichnung" -#: tournaments/models.py:38 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" -msgstr "" +msgstr "Der in Menüs verwendete Name (beispielsweise \"DDM 2021\")" -#: tournaments/models.py:40 tournaments/models.py:324 +#: tournaments/models.py msgid "sequence number" -msgstr "" +msgstr "Folgenummer" -#: tournaments/models.py:41 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." -msgstr "" +msgstr "Bestimmt in welcher Reihenfolge Turniere auf der Website angezeigt werden." -#: tournaments/models.py:43 +#: tournaments/models.py msgid "slug" msgstr "URL-Kürzel" -#: tournaments/models.py:44 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" -msgstr "" +msgstr "Die Sub-URL des Turniers. Darf keine Leerzeichen enthalten (beispielsweise \"ddm2021\")" -#: tournaments/models.py:45 +#: tournaments/models.py msgid "active" msgstr "aktiv" -#: tournaments/models.py:48 tournaments/models.py:323 +#: tournaments/models.py msgid "tournament" msgstr "Turnier" -#: tournaments/models.py:49 +#: tournaments/models.py msgid "tournaments" msgstr "Turniere" -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Random" -msgstr "" +msgstr "Zufällig" -#: tournaments/models.py:296 +#: tournaments/models.py msgid "Manual" -msgstr "" +msgstr "Manuell" -#: tournaments/models.py:297 +#: tournaments/models.py msgid "Round-robin" -msgstr "" +msgstr "Jeder-gegen-jeden" -#: tournaments/models.py:298 +#: tournaments/models.py msgid "Power-paired" -msgstr "" +msgstr "Power-paired" -#: tournaments/models.py:299 tournaments/models.py:306 +#: tournaments/models.py msgid "Elimination" -msgstr "" +msgstr "K.-o.-Runde" -#: tournaments/models.py:305 +#: tournaments/models.py msgid "Preliminary" -msgstr "" +msgstr "Vorrunde" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "None" -msgstr "" +msgstr "Leer" -#: tournaments/models.py:316 +#: tournaments/models.py msgid "Draft" -msgstr "" +msgstr "Entwurf" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "Confirmed" -msgstr "" +msgstr "Bestätigt" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "Released" -msgstr "" +msgstr "Veröffentlicht" -#: tournaments/models.py:325 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" -msgstr "" +msgstr "Diese Zahl bestimmt die Reihenfolge der Runden. Sie sollte bei der ersten Runde mit 1 beginnen und von dort hochzählen" -#: tournaments/models.py:327 +#: tournaments/models.py msgid "completed" -msgstr "" +msgstr "Abgeschlossen" -#: tournaments/models.py:328 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" -msgstr "" +msgstr "Wahr wenn die Runde abgeschlossen ist. Dies bedeutet normalerweise, dass alle Ergebnisse eingetragen und bestätigt sind" -#: tournaments/models.py:330 +#: tournaments/models.py msgid "e.g. \"Round 1\"" -msgstr "" +msgstr "z. B. \"Runde 1\"" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "abbreviation" msgstr "abkürzung" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "e.g. \"R1\"" -msgstr "" +msgstr "z. B. \"R1\"" -#: tournaments/models.py:333 +#: tournaments/models.py msgid "stage" -msgstr "" +msgstr "Phase" -#: tournaments/models.py:334 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" -msgstr "" +msgstr "Vorrunde = pre-Break, K.-o.-Runde = post-Break" -#: tournaments/models.py:336 +#: tournaments/models.py msgid "draw type" -msgstr "" +msgstr "Setzungsmetrik" -#: tournaments/models.py:337 +#: tournaments/models.py msgid "Which draw method to use" -msgstr "" +msgstr "Welche Setzungsmetrik verwendet werden sollte" -#: tournaments/models.py:340 +#: tournaments/models.py msgid "break category" -msgstr "" +msgstr "Break-Kategorie" -#: tournaments/models.py:341 +#: tournaments/models.py msgid "If elimination round, which break category" -msgstr "" +msgstr "Zu welcher Break-Kategorie diese Runde gehört(nur für K.o.-Runden)" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "draw status" -msgstr "" +msgstr "Setzungsstatus" -#: tournaments/models.py:345 +#: tournaments/models.py msgid "The status of this round's draw" -msgstr "" +msgstr "Der Zustand der Setzung" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "feedback weight" -msgstr "" +msgstr "Feedbackgewichtung" -#: tournaments/models.py:350 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." -msgstr "" +msgstr "Dieser Wert bestimmt, wie die Bewertung der Juroren aus ihrem Basiswert und dem Feedbackwert zusammengesetzt wird. Bei 0 zählt ausschließlich der Basiswert, bei 1 ausschließlich das Feedback." #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:353 +#: tournaments/models.py msgid "silent" -msgstr "" +msgstr "Geschlossen" -#: tournaments/models.py:354 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." -msgstr "" +msgstr "Wahr, wenn die Runde geschlossen ist. Ergebnisse geschlossener Runden werden nicht veröffentlicht." -#: tournaments/models.py:356 +#: tournaments/models.py msgid "motions released" -msgstr "" +msgstr "Themen veröffentlicht" -#: tournaments/models.py:357 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" -msgstr "" +msgstr "Wahr, wenn die Themen dieser Runde öffentlich zugänglich sind (vorausgesetzt die Veröffentlichung von Themen ist aktiviert)" -#: tournaments/models.py:358 +#: tournaments/models.py msgid "starts at" -msgstr "" +msgstr "Debattenbeginn" + +#: tournaments/models.py +msgid "weight" +msgstr "Rundengewichtung" + +#: tournaments/models.py +msgid "A factor for the points received in the round. For example, if 2, all points are doubled." +msgstr "Ein Faktor, welcher auf die Ergebnisse dieser Runde angewendet wird. (Beispielsweise würden bei einer 2 die Ergebnisse verdoppelt werden)" -#: tournaments/models.py:361 +#: tournaments/models.py msgid "round" msgstr "runde" -#: tournaments/models.py:362 +#: tournaments/models.py msgid "rounds" msgstr "runden" -#: tournaments/models.py:375 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." -msgstr "" +msgstr "Eine Runde der K.o.-Phase muss diesen Wert auf \"K.o.-Runde\" haben." -#: tournaments/models.py:378 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." -msgstr "" +msgstr "Eine Vorrunde kann diesen Wert nicht auf \"K.o.-Runde\" haben." -#: tournaments/models.py:383 +#: tournaments/models.py msgid "Elimination rounds must have a break category." -msgstr "" +msgstr "Eine K.o.-Runde muss eine Break-Kategorie haben." -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" msgstr "" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" msgstr "Überblick" -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" msgstr "" -#: tournaments/templates/blank_site_start.html:7 -msgid "Welcome to Tabbycat" -msgstr "" - -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" msgstr "" -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." msgstr "" -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." msgstr "" -#: tournaments/templates/blank_site_start.html:32 -msgid "The e-mail address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." +#: tournaments/templates/blank_site_start.html +msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." msgstr "" -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" msgstr "" -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" msgstr "" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "Tabbycat" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." msgstr "" -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." msgstr "" -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" msgstr "" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." msgstr "" -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" msgstr "" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." msgstr "" -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" -msgstr "Erstelle Turnier" +msgstr "Turnier erstellen" -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" msgstr "" -#: tournaments/templates/donations.html:4 -#: tournaments/templates/donations.html:5 -msgctxt "title" -msgid "Donate to Tabbycat" -msgstr "" - -#: tournaments/templates/donations.html:11 -msgid "Tabbycat is a volunteer effort. Since 2012, its maintainers have spent thousands of hours working on it." -msgstr "" - -#: tournaments/templates/donations.html:17 -msgid "Donating to Tabbycat helps the maintainers to meet recurring costs and justify our ongoing contributions in responding to support enquiries, keeping the software up to date, fixing bugs, and developing new features." -msgstr "" - -#: tournaments/templates/donations.html:24 -msgid "We suggest that tournaments budget for a donation of A$1 (Australian dollar) per team. For tournaments run for fundraising or for profit, whether partly or solely, this payment is required and your licence to use Tabbycat is conditional upon it. General donations from individuals or organisations are of course also much appreciated." -msgstr "" - -#: tournaments/templates/donations.html:34 -#, python-format -msgid "Our suggested donation from %(tournament)s, based on its size, is A$%(nteams)s. The easiest way to donate is via Paypal, but please don’t hesitate to email us if other methods would work better for you. Also, feel free to get in touch if you require an invoice or receipt for the payment." -msgstr "" - -#: tournaments/templates/donations.html:46 -msgid "The easiest way to donate is via Paypal. Please contact us if you require other options." -msgstr "" - -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" msgstr "" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." msgstr "" -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." msgstr "" -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." msgstr "" -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." msgstr "" -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" msgstr "Debatten-ID" -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" +msgid "Teams on %(side)s" msgstr "" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" msgstr "" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." msgstr "" -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." msgstr "" -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" msgstr "Teamtab" -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" msgstr "%(category)s Teamtab" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" -msgstr "RednerInnentab" +msgstr "Einzelrednertab" -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" -msgstr "%(category)s RednerInnentab" +msgstr "%(category)s Rednertab" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" msgstr "Jurortab" -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" msgstr "" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:201 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" msgstr "" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" msgstr "" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" msgstr "Ergebnisse" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "Themen" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" msgstr "" -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" msgstr "%(category)s Break" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" -msgstr "Breakende JurorInnen" +msgstr "Breakende Juroren" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" msgstr "" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" msgstr "" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" msgstr "" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" msgstr "" -#: tournaments/templates/public_tournament_index.html:187 -msgid "Enter Ballot" +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Enter Ballot for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:193 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" -msgstr "Feedback übermitteln" +msgstr "Feedback abschicken" -#: tournaments/templates/public_tournament_index.html:215 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" msgstr "" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" msgstr "" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" msgstr "" -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." msgstr "" -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" msgstr "" -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" msgstr "" -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" msgstr "" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" msgstr "" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" msgstr "" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" msgstr "" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." msgstr[0] "" msgstr[1] "" -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" msgstr "" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." msgstr[0] "" msgstr[1] "" -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " msgstr "" -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "" -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" msgstr "" -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" msgstr "" -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "" -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:46 -msgid "Inactive Tournaments" +#: tournaments/templates/set_round_weights.html +msgctxt "page title" +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." msgstr "" -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/set_round_weights.html +msgctxt "button" +msgid "Set weights" +msgstr "" + +#: tournaments/templates/site_index.html msgid "Welcome!" msgstr "" -#: tournaments/templates/site_index.html:20 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" msgstr "" -#: tournaments/templates/site_index.html:29 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:33 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:54 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html msgid "New Tournament" msgstr "" -#: tournaments/templates/site_index.html:57 +#: tournaments/templates/site_index.html msgid "Edit Database Area" msgstr "" -#: tournaments/templates/site_index.html:60 +#: tournaments/templates/site_index.html msgid "Send a Test Email" msgstr "" -#: tournaments/templates/site_index.html:69 +#: tournaments/templates/site_index.html +msgid "Import DebateXML" +msgstr "" + +#: tournaments/templates/site_index.html #, python-format -msgid "Change Password (%(user)s)" +msgid "Get API Token / Change Password (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:79 +#: tournaments/templates/site_index.html msgid "Log In as Admin" msgstr "" -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." msgstr "" -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" msgstr "" -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." msgstr "" #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." msgstr "" -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." msgstr "" -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" +msgid "Mark participants as available to prepare a draw for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" +msgid "Go to the results area to enter ballots for %(round)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index.html +msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." +msgstr "" + +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" msgstr "" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" msgstr "" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" msgstr "" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" msgstr "" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" msgstr "" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" msgstr "" -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" msgstr "" -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" msgstr "" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" msgstr "" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" msgstr "" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" msgstr "" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" msgstr "" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" msgstr "" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" msgstr "" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" msgstr "" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" msgstr "" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" msgstr "" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" msgstr "" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" msgstr "" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" msgstr "" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" msgstr "" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" msgstr "" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" msgstr "" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" msgstr "" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" msgstr "" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" msgstr "" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" msgstr "" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" msgstr "" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "eröffnende Regierung" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "eröffnende Opposition" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "schließende Regierung" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "schließende Opposition" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" -msgstr "eröffnende Regierung team" +msgstr "Team der eröffnenden Regierung" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" -msgstr "eröffnende Opposition team" +msgstr "Team der eröffnenden Opposition" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" -msgstr "schließende Regierung team" +msgstr "Team der schließenden Regierung" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" -msgstr "schließende Opposition team" +msgstr "Team der schließenden Opposition" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "ER" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "EO" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "SR" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "SO" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "Runde %(number)d" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" msgstr "" -#: tournaments/views.py:154 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" msgstr "" -#: tournaments/views.py:160 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." msgstr "" -#: tournaments/views.py:173 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." msgstr "" -#: tournaments/views.py:179 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." msgstr "" -#: tournaments/views.py:187 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" msgstr "" -#: tournaments/views.py:216 -msgid "Whoops! It looks like someone's already created the first user account. Please log in." -msgstr "" - -#: tournaments/views.py:224 -#, python-format -msgid "Welcome! You've created an account for %s." -msgstr "" - -#: tournaments/views.py:239 +#: tournaments/views.py msgid "8-team generic dataset" msgstr "" -#: tournaments/views.py:240 +#: tournaments/views.py msgid "24-team Australs dataset" msgstr "" -#: tournaments/views.py:241 +#: tournaments/views.py msgid "88-team BP dataset" msgstr "" +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." +msgstr "" + diff --git a/tabbycat/utils/locale/de/LC_MESSAGES/django.po b/tabbycat/utils/locale/de/LC_MESSAGES/django.po index d21242bd138..010656d6fca 100644 --- a/tabbycat/utils/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 08:55\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: German\n" "Language: de_DE\n" @@ -15,319 +15,314 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/utils/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "E-mail address" -msgstr "" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "Runde" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "Team" + +#: utils/admin.py +msgid "Speaker" +msgstr "Redner" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "Turnier" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "Position" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "Thema" + +#: utils/admin.py +msgid "Confirmed" +msgstr "Bestätigt" -#: utils/tables.py:43 +#: utils/admin.py +msgid "Adjudicator" +msgstr "Juror" + +#: utils/tables.py msgid "No Data Available" -msgstr "" +msgstr "Keine Daten verfügbar" -#: utils/tables.py:151 utils/tables.py:152 +#: utils/tables.py msgid "Ⓒ" -msgstr "" +msgstr "Ⓒ" -#: utils/tables.py:153 +#: utils/tables.py msgid "Ⓣ" -msgstr "" +msgstr "Ⓣ" -#: utils/tables.py:157 +#: utils/tables.py msgid "chair" msgstr "Hauptjuror" -#: utils/tables.py:158 +#: utils/tables.py msgid "panellist" -msgstr "" +msgstr "Nebenjuror" -#: utils/tables.py:159 +#: utils/tables.py msgid "trainee" -msgstr "Jurierlehrling" +msgstr "Trainee" -#: utils/tables.py:162 +#: utils/tables.py msgid "—" msgstr "" -#: utils/tables.py:226 utils/tables.py:232 +#: utils/tables.py +msgid "Redacted" +msgstr "entfernt" + +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" -msgstr "" +msgstr "%(a)s %(d)s Ergebnis ansehen" -#: utils/tables.py:242 utils/tables.py:247 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" -msgstr "" +msgstr "%(team)s Ergebnisse ansehen" -#: utils/tables.py:269 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" -msgstr "" +msgstr "Deckname: %(name)s" -#: utils/tables.py:271 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" -msgstr "" +msgstr "Echter Name: %(name)s" -#: utils/tables.py:283 +#: utils/tables.py #, python-format msgid "%(team)s won" -msgstr "" +msgstr "%(team)s hat gewonnen" -#: utils/tables.py:288 +#: utils/tables.py #, python-format msgid "%(team)s lost" -msgstr "" +msgstr "%(team)s hat verloren" -#: utils/tables.py:293 utils/tables.py:321 utils/tables.py:339 +#: utils/tables.py #, python-format msgid "%(team)s—no result" -msgstr "" +msgstr "%(team)s - kein Ergebnis" -#: utils/tables.py:301 +#: utils/tables.py #, python-format -msgid "%(team)s took 1st" -msgstr "" - -#: utils/tables.py:306 -#, python-format -msgid "%(team)s took 2nd" -msgstr "" - -#: utils/tables.py:311 -#, python-format -msgid "%(team)s took 3rd" -msgstr "" +msgid "%(team)s placed %(place)s" +msgstr "%(team)s ist %(place)s geworden" -#: utils/tables.py:316 -#, python-format -msgid "%(team)s took 4th" -msgstr "" - -#: utils/tables.py:329 +#: utils/tables.py #, python-format msgid "%(team)s is advancing" -msgstr "" +msgstr "%(team)s kommt weiter" -#: utils/tables.py:334 +#: utils/tables.py #, python-format msgid "%(team)s was eliminated" -msgstr "" +msgstr "%(team)s scheidet aus" + +#: utils/tables.py +msgid "View/edit debate ballot" +msgstr "Ballot ansehen/bearbeiten" -#: utils/tables.py:352 +#: utils/tables.py +msgid "View debate ballot" +msgstr "Ballot ansehen" + +#: utils/tables.py #, python-format msgid " vs %(opposition)s" -msgstr "" +msgstr " vs %(opposition)s" -#: utils/tables.py:359 +#: utils/tables.py #, python-format msgid "Won against %(team)s" -msgstr "" +msgstr "Gewann gegen %(team)s" -#: utils/tables.py:361 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" -msgstr "" +msgstr "Verlor gegen %(team)s" -#: utils/tables.py:363 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" -msgstr "" +msgstr "Kein Ergebnis für die Debatte gegen %(team)s" -#: utils/tables.py:371 utils/tables.py:450 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" -msgstr "" +msgstr "Gesamtzahl der Einzelrednerpunkte: %s" -#: utils/tables.py:376 utils/tables.py:455 -msgid "View/edit debate ballot" -msgstr "" - -#: utils/tables.py:382 utils/tables.py:461 -msgid "View debate ballot" -msgstr "" - -#: utils/tables.py:403 +#: utils/tables.py msgid "Teams in debate:" -msgstr "" +msgstr "Teams:" -#: utils/tables.py:406 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "%(team)s (%(side)s)" -#: utils/tables.py:407 utils/tables.py:411 utils/tables.py:437 +#: utils/tables.py msgid "??" -msgstr "" +msgstr "??" -#: utils/tables.py:425 +#: utils/tables.py msgid "advancing" -msgstr "" +msgstr "weiterkommend" -#: utils/tables.py:426 +#: utils/tables.py msgid "Advancing" -msgstr "" +msgstr "weiterkommend" -#: utils/tables.py:428 +#: utils/tables.py msgid "eliminated" -msgstr "" +msgstr "aus­ge­schie­den" -#: utils/tables.py:429 +#: utils/tables.py msgid "Eliminated" -msgstr "" +msgstr "Aus­ge­schie­den" -#: utils/tables.py:432 utils/tables.py:442 +#: utils/tables.py msgid "No result for debate" -msgstr "" +msgstr "Kein Ergebnis" -#: utils/tables.py:439 +#: utils/tables.py #, python-format msgid "Placed %(place)s" -msgstr "" +msgstr "Als %(place)s platziert" -#: utils/tables.py:470 -msgid "Tournament" -msgstr "" - -#: utils/tables.py:479 -msgid "Round" -msgstr "" - -#: utils/tables.py:497 utils/tables.py:683 +#: utils/tables.py msgid "Name" msgstr "Name" -#: utils/tables.py:503 utils/tables.py:665 +#: utils/tables.py msgid "Institution" -msgstr "" +msgstr "Institution" -#: utils/tables.py:509 +#: utils/tables.py msgid "Member of the Adjudication Core" -msgstr "" +msgstr "Mitglied der Chefjury" -#: utils/tables.py:516 +#: utils/tables.py msgid "Independent Adjudicator" -msgstr "" +msgstr "Unabhängiger Juror" -#: utils/tables.py:524 +#: utils/tables.py msgid "Always Trainee" -msgstr "" +msgstr "Immer Trainee" -#: utils/tables.py:562 +#: utils/tables.py msgid "in minority" -msgstr "" +msgstr "in der Minderheit" -#: utils/tables.py:595 +#: utils/tables.py msgid "Debate Adjudicators" -msgstr "" - -#: utils/tables.py:626 -msgid "Order as listed" -msgstr "" - -#: utils/tables.py:633 -msgid "?" -msgstr "" - -#: utils/tables.py:636 -msgid "Motion" -msgstr "Thema" - -#: utils/tables.py:651 -msgid "Team" -msgstr "Team" +msgstr "Juroren der Debatte" -#: utils/tables.py:656 utils/tables.py:705 +#: utils/tables.py msgid "Categories" -msgstr "" +msgstr "Kategorien" -#: utils/tables.py:676 -msgid "Redacted" -msgstr "" - -#: utils/tables.py:703 +#: utils/tables.py msgid "Category" msgstr "Kategorie" -#: utils/tables.py:730 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." -msgstr "" +msgstr "Dieser Raum %(predicate)s." -#: utils/tables.py:732 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." -msgstr "" +msgstr "Dieser Raum %(predicates)s und %(last_predicate)s." -#: utils/tables.py:747 +#: utils/tables.py msgid "Room" msgstr "Raum" -#: utils/tables.py:763 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Teams sind bereits einmal auf­ei­n­an­dergetroffen" +msgstr[1] "Teams sind bereits %(count)d mal auf­ei­n­an­dergetroffen" -#: utils/tables.py:769 +#: utils/tables.py msgid "Teams are from the same institution" -msgstr "" +msgstr "Teams kommen von der gleichen Institution" -#: utils/tables.py:775 +#: utils/tables.py msgid "Conflicts/Flags" -msgstr "" +msgstr "Konflikte/Flags" -#: utils/tables.py:829 -msgid "The ballot you submitted" -msgstr "" - -#: utils/tables.py:833 -msgid "View/Edit Ballot" -msgstr "" +#: utils/tables.py +msgid "The confirmed ballot" +msgstr "Das bestätigte Ballot" -#: utils/tables.py:842 +#: utils/tables.py msgid "No ballot" -msgstr "" +msgstr "Kein Ballot" -#: utils/tables.py:844 -msgid "Elimination" -msgstr "" +#: utils/tables.py +msgid "No scores" +msgstr "Keine Punkte" -#: utils/tables.py:847 utils/tables.py:859 +#: utils/tables.py msgid "View Ballot" -msgstr "" +msgstr "Ballot ansehen" + +#: utils/tables.py +msgid "The ballot you submitted" +msgstr "Das von dir eingerechte Ballot" + +#: utils/tables.py +msgid "View/Edit Ballot" +msgstr "Ballot ansehen/bearbeiten" -#: utils/tables.py:867 +#: utils/tables.py msgid "Result" -msgstr "" +msgstr "Ergebnis" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:873 +#: utils/tables.py msgid "TBC" -msgstr "" +msgstr "Bestätigung ausstehend" -#: utils/tables.py:874 -msgid "Side" +#: utils/tables.py +msgid "Team iron-personed this round and the last." msgstr "" -#: utils/tables.py:912 -msgid "Team iron-manned this round and the last." +#: utils/tables.py +msgid "Team iron-personed this round." msgstr "" -#: utils/tables.py:915 -msgid "Team iron-manned this round." +#: utils/tables.py +msgid "Team iron-personed last round." msgstr "" -#: utils/tables.py:918 -msgid "Team iron-manned last round." -msgstr "" - -#: utils/tables.py:935 utils/tables.py:936 +#: utils/tables.py #, python-format msgid "Team %(num)d" msgstr "Team %(num)d" -#: utils/views.py:38 +#: utils/tables.py +msgid "Postpone" +msgstr "Vertagen" + +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." -msgstr "" +msgstr "Ups! Du solltest diese URL nicht verwenden." diff --git a/tabbycat/venues/locale/de/LC_MESSAGES/django.po b/tabbycat/venues/locale/de/LC_MESSAGES/django.po index 93667610d78..83f69a4e2cc 100644 --- a/tabbycat/venues/locale/de/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 08:56\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" "Last-Translator: philip_tc\n" "Language-Team: German\n" "Language: de_DE\n" @@ -15,197 +15,205 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /develop/tabbycat/venues/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 -msgid "Venues" +#: venues/apps.py +msgid "Rooms" msgstr "Räume" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." msgstr "" -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." msgstr "" -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." msgstr "" -#: venues/models.py:9 venues/models.py:64 +#: venues/models.py msgid "name" msgstr "name" -#: venues/models.py:11 venues/models.py:118 +#: venues/models.py msgid "priority" msgstr "" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" msgstr "" -#: venues/models.py:15 venues/models.py:76 +#: venues/models.py msgid "tournament" msgstr "Turnier" -#: venues/models.py:22 +#: venues/models.py +msgid "URL" +msgstr "" + +#: venues/models.py +msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" +msgstr "" + +#: venues/models.py msgid "room" msgstr "raum" -#: venues/models.py:23 venues/models.py:74 +#: venues/models.py msgid "rooms" msgstr "räume" -#: venues/models.py:59 +#: venues/models.py msgid "Don't display in room name" msgstr "" -#: venues/models.py:60 +#: venues/models.py msgid "Display as prefix" msgstr "" -#: venues/models.py:61 +#: venues/models.py msgid "Display as suffix" msgstr "" -#: venues/models.py:65 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." msgstr "" -#: venues/models.py:69 +#: venues/models.py msgid "description" msgstr "" -#: venues/models.py:70 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." msgstr "" -#: venues/models.py:80 +#: venues/models.py msgid "display in room name" msgstr "" -#: venues/models.py:81 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" msgstr "" -#: venues/models.py:83 +#: venues/models.py msgid "display in public tooltip" msgstr "" -#: venues/models.py:84 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." msgstr "" -#: venues/models.py:88 +#: venues/models.py msgid "room category" msgstr "" -#: venues/models.py:89 +#: venues/models.py msgid "room categories" msgstr "" -#: venues/models.py:117 +#: venues/models.py msgid "category" msgstr "Kategorie" -#: venues/models.py:121 +#: venues/models.py msgid "subject content type" msgstr "" -#: venues/models.py:124 +#: venues/models.py msgid "subject ID" msgstr "" -#: venues/models.py:130 +#: venues/models.py msgid "room constraint" msgstr "" -#: venues/models.py:131 +#: venues/models.py msgid "room constraints" msgstr "" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" msgstr "" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." msgstr "" -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." msgstr "" -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" msgstr "" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" msgstr "" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." msgstr "" -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" msgstr "" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" msgstr "" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" msgstr "" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" msgstr "" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" msgstr "" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" msgstr "" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" msgstr[0] "" msgstr[1] "" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." msgstr "" -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "%s (Juror)" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" msgstr "%s (Team)" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" msgstr "" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." From d599e1e5534e80e9ecd8fbc49b023a20f98e38c7 Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Mon, 6 Jul 2020 03:03:46 +1000 Subject: [PATCH 210/255] New translations django.po (Hebrew) --- docs/locale/he/LC_MESSAGES/about/authors.po | 6 +- docs/locale/he/LC_MESSAGES/about/changelog.po | 6 +- .../he/LC_MESSAGES/about/contributing.po | 6 +- docs/locale/he/LC_MESSAGES/about/licence.po | 6 +- docs/locale/he/LC_MESSAGES/about/support.po | 6 +- .../LC_MESSAGES/about/tournament-history.po | 6 +- .../features/adjudicator-allocation.po | 6 +- .../features/adjudicator-feedback.po | 6 +- .../locale/he/LC_MESSAGES/features/backups.po | 6 +- docs/locale/he/LC_MESSAGES/features/breaks.po | 6 +- .../he/LC_MESSAGES/features/check-ins.po | 6 +- .../he/LC_MESSAGES/features/data-entry.po | 6 +- .../he/LC_MESSAGES/features/data-importers.po | 6 +- .../features/draw-generation-bp.po | 6 +- .../LC_MESSAGES/features/draw-generation.po | 6 +- .../he/LC_MESSAGES/features/notifications.po | 6 +- .../LC_MESSAGES/features/preformed-panels.po | 6 +- .../he/LC_MESSAGES/features/printing.po | 6 +- .../LC_MESSAGES/features/standings-rules.po | 6 +- .../LC_MESSAGES/features/team-code-names.po | 6 +- .../he/LC_MESSAGES/features/user-accounts.po | 6 +- .../LC_MESSAGES/features/venue-constraints.po | 6 +- .../he/LC_MESSAGES/guide/comparisons.po | 6 +- docs/locale/he/LC_MESSAGES/guide/scaling.po | 6 +- .../LC_MESSAGES/guide/tournament-logistics.po | 6 +- docs/locale/he/LC_MESSAGES/guide/upgrading.po | 6 +- docs/locale/he/LC_MESSAGES/index.po | 6 +- docs/locale/he/LC_MESSAGES/install/docker.po | 6 +- docs/locale/he/LC_MESSAGES/install/heroku.po | 6 +- docs/locale/he/LC_MESSAGES/install/linux.po | 6 +- docs/locale/he/LC_MESSAGES/install/local.po | 6 +- docs/locale/he/LC_MESSAGES/install/osx.po | 6 +- docs/locale/he/LC_MESSAGES/install/windows.po | 6 +- docs/locale/he/LC_MESSAGES/install/wsl.po | 6 +- .../LC_MESSAGES/use/finishing-a-tournament.po | 6 +- .../he/LC_MESSAGES/use/importing-data.po | 6 +- .../LC_MESSAGES/use/running-a-tournament.po | 6 +- .../LC_MESSAGES/use/starting-a-tournament.po | 6 +- .../actionlog/locale/he/LC_MESSAGES/django.po | 160 +-- .../locale/he/LC_MESSAGES/django.po | 213 ++-- .../locale/he/LC_MESSAGES/django.po | 476 ++++----- .../locale/he/LC_MESSAGES/django.po | 168 ++- .../breakqual/locale/he/LC_MESSAGES/django.po | 256 ++--- tabbycat/draw/locale/he/LC_MESSAGES/django.po | 647 ++++++------ .../importer/locale/he/LC_MESSAGES/django.po | 250 +++-- tabbycat/locale/he/LC_MESSAGES/django.po | 562 +++++----- tabbycat/locale/he/LC_MESSAGES/djangojs.po | 10 +- .../motions/locale/he/LC_MESSAGES/django.po | 252 +++-- .../locale/he/LC_MESSAGES/django.po | 230 +++-- .../options/locale/he/LC_MESSAGES/django.po | 959 ++++++++++-------- .../locale/he/LC_MESSAGES/django.po | 591 ++++++----- .../printing/locale/he/LC_MESSAGES/django.po | 68 +- .../locale/he/LC_MESSAGES/django.po | 87 +- .../results/locale/he/LC_MESSAGES/django.po | 746 ++++++++------ .../standings/locale/he/LC_MESSAGES/django.po | 338 +++--- .../locale/he/LC_MESSAGES/django.po | 568 +++++------ .../utils/locale/he/LC_MESSAGES/django.po | 243 +++-- .../venues/locale/he/LC_MESSAGES/django.po | 108 +- 58 files changed, 3913 insertions(+), 3247 deletions(-) diff --git a/docs/locale/he/LC_MESSAGES/about/authors.po b/docs/locale/he/LC_MESSAGES/about/authors.po index 336d6424c86..69e20ccce17 100644 --- a/docs/locale/he/LC_MESSAGES/about/authors.po +++ b/docs/locale/he/LC_MESSAGES/about/authors.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:20\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/authors.po\n" +"X-Crowdin-File-ID: 1259\n" "Language: he_IL\n" #: ../../../AUTHORS.rst:3 diff --git a/docs/locale/he/LC_MESSAGES/about/changelog.po b/docs/locale/he/LC_MESSAGES/about/changelog.po index 52e9a5d732d..a1dea49c77e 100644 --- a/docs/locale/he/LC_MESSAGES/about/changelog.po +++ b/docs/locale/he/LC_MESSAGES/about/changelog.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:22\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/changelog.po\n" +"X-Crowdin-File-ID: 1261\n" "Language: he_IL\n" #: ../../../CHANGELOG.rst:3 diff --git a/docs/locale/he/LC_MESSAGES/about/contributing.po b/docs/locale/he/LC_MESSAGES/about/contributing.po index 2974aba553f..0740ac9b164 100644 --- a/docs/locale/he/LC_MESSAGES/about/contributing.po +++ b/docs/locale/he/LC_MESSAGES/about/contributing.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:21\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/contributing.po\n" +"X-Crowdin-File-ID: 1263\n" "Language: he_IL\n" #: ../../../CONTRIBUTING.rst:3 diff --git a/docs/locale/he/LC_MESSAGES/about/licence.po b/docs/locale/he/LC_MESSAGES/about/licence.po index 2c4310f5f43..18e34e67847 100644 --- a/docs/locale/he/LC_MESSAGES/about/licence.po +++ b/docs/locale/he/LC_MESSAGES/about/licence.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:18\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/licence.po\n" +"X-Crowdin-File-ID: 1265\n" "Language: he_IL\n" #: ../../../LICENSE.rst:3 diff --git a/docs/locale/he/LC_MESSAGES/about/support.po b/docs/locale/he/LC_MESSAGES/about/support.po index e72bd528663..52846ebd3a5 100644 --- a/docs/locale/he/LC_MESSAGES/about/support.po +++ b/docs/locale/he/LC_MESSAGES/about/support.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:18\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/support.po\n" +"X-Crowdin-File-ID: 1267\n" "Language: he_IL\n" #: ../../about/support.rst:3 diff --git a/docs/locale/he/LC_MESSAGES/about/tournament-history.po b/docs/locale/he/LC_MESSAGES/about/tournament-history.po index 24c80c0de1d..c15fd230e4a 100644 --- a/docs/locale/he/LC_MESSAGES/about/tournament-history.po +++ b/docs/locale/he/LC_MESSAGES/about/tournament-history.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:19\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/tournament-history.po\n" +"X-Crowdin-File-ID: 1335\n" "Language: he_IL\n" #: ../../about/tournament-history.rst:3 diff --git a/docs/locale/he/LC_MESSAGES/features/adjudicator-allocation.po b/docs/locale/he/LC_MESSAGES/features/adjudicator-allocation.po index 02f17ef0a1a..6928195c39f 100644 --- a/docs/locale/he/LC_MESSAGES/features/adjudicator-allocation.po +++ b/docs/locale/he/LC_MESSAGES/features/adjudicator-allocation.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:19\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-allocation.po\n" +"X-Crowdin-File-ID: 1271\n" "Language: he_IL\n" #: ../../features/adjudicator-allocation.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/features/adjudicator-feedback.po b/docs/locale/he/LC_MESSAGES/features/adjudicator-feedback.po index c53424ed57b..5971f3e6dc9 100644 --- a/docs/locale/he/LC_MESSAGES/features/adjudicator-feedback.po +++ b/docs/locale/he/LC_MESSAGES/features/adjudicator-feedback.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:25\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-feedback.po\n" +"X-Crowdin-File-ID: 1273\n" "Language: he_IL\n" #: ../../features/adjudicator-feedback.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/features/backups.po b/docs/locale/he/LC_MESSAGES/features/backups.po index a90d8f55ca1..d4067ac0669 100644 --- a/docs/locale/he/LC_MESSAGES/features/backups.po +++ b/docs/locale/he/LC_MESSAGES/features/backups.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:24\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/backups.po\n" +"X-Crowdin-File-ID: 1275\n" "Language: he_IL\n" #: ../../features/backups.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/features/breaks.po b/docs/locale/he/LC_MESSAGES/features/breaks.po index 0b911d2d439..7451c742d40 100644 --- a/docs/locale/he/LC_MESSAGES/features/breaks.po +++ b/docs/locale/he/LC_MESSAGES/features/breaks.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:26\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/breaks.po\n" +"X-Crowdin-File-ID: 1277\n" "Language: he_IL\n" #: ../../features/breaks.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/features/check-ins.po b/docs/locale/he/LC_MESSAGES/features/check-ins.po index 5cc1719a853..25992cfb19d 100644 --- a/docs/locale/he/LC_MESSAGES/features/check-ins.po +++ b/docs/locale/he/LC_MESSAGES/features/check-ins.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:25\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/check-ins.po\n" +"X-Crowdin-File-ID: 1279\n" "Language: he_IL\n" #: ../../features/check-ins.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/features/data-entry.po b/docs/locale/he/LC_MESSAGES/features/data-entry.po index 37d2612a3e7..987ab1ae085 100644 --- a/docs/locale/he/LC_MESSAGES/features/data-entry.po +++ b/docs/locale/he/LC_MESSAGES/features/data-entry.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:23\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-entry.po\n" +"X-Crowdin-File-ID: 1281\n" "Language: he_IL\n" #: ../../features/data-entry.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/features/data-importers.po b/docs/locale/he/LC_MESSAGES/features/data-importers.po index 8a8359cdc75..7ab3becd187 100644 --- a/docs/locale/he/LC_MESSAGES/features/data-importers.po +++ b/docs/locale/he/LC_MESSAGES/features/data-importers.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:22\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-importers.po\n" +"X-Crowdin-File-ID: 1283\n" "Language: he_IL\n" #: ../../features/data-importers.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/features/draw-generation-bp.po b/docs/locale/he/LC_MESSAGES/features/draw-generation-bp.po index 813185f3448..f87f7e6d460 100644 --- a/docs/locale/he/LC_MESSAGES/features/draw-generation-bp.po +++ b/docs/locale/he/LC_MESSAGES/features/draw-generation-bp.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-05-14 21:35\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:24\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation-bp.po\n" +"X-Crowdin-File-ID: 1285\n" "Language: he_IL\n" #: ../../features/draw-generation-bp.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/features/draw-generation.po b/docs/locale/he/LC_MESSAGES/features/draw-generation.po index 73f648f765f..9565d91c2fd 100644 --- a/docs/locale/he/LC_MESSAGES/features/draw-generation.po +++ b/docs/locale/he/LC_MESSAGES/features/draw-generation.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:23\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation.po\n" +"X-Crowdin-File-ID: 1287\n" "Language: he_IL\n" #: ../../features/draw-generation.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/features/notifications.po b/docs/locale/he/LC_MESSAGES/features/notifications.po index 800da8417cc..6f05011d17d 100644 --- a/docs/locale/he/LC_MESSAGES/features/notifications.po +++ b/docs/locale/he/LC_MESSAGES/features/notifications.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:13\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/notifications.po\n" +"X-Crowdin-File-ID: 1289\n" "Language: he_IL\n" #: ../../features/notifications.rst:3 diff --git a/docs/locale/he/LC_MESSAGES/features/preformed-panels.po b/docs/locale/he/LC_MESSAGES/features/preformed-panels.po index d07abac401c..20edb8c8e5c 100644 --- a/docs/locale/he/LC_MESSAGES/features/preformed-panels.po +++ b/docs/locale/he/LC_MESSAGES/features/preformed-panels.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:12\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/preformed-panels.po\n" +"X-Crowdin-File-ID: 1291\n" "Language: he_IL\n" #: ../../features/preformed-panels.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/features/printing.po b/docs/locale/he/LC_MESSAGES/features/printing.po index aae373f65dc..f6f11ff805d 100644 --- a/docs/locale/he/LC_MESSAGES/features/printing.po +++ b/docs/locale/he/LC_MESSAGES/features/printing.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:14\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/printing.po\n" +"X-Crowdin-File-ID: 1293\n" "Language: he_IL\n" #: ../../features/printing.rst:3 diff --git a/docs/locale/he/LC_MESSAGES/features/standings-rules.po b/docs/locale/he/LC_MESSAGES/features/standings-rules.po index 7d499b0cb50..292388e5924 100644 --- a/docs/locale/he/LC_MESSAGES/features/standings-rules.po +++ b/docs/locale/he/LC_MESSAGES/features/standings-rules.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-05-14 21:17\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:13\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/standings-rules.po\n" +"X-Crowdin-File-ID: 1295\n" "Language: he_IL\n" #: ../../features/standings-rules.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/features/team-code-names.po b/docs/locale/he/LC_MESSAGES/features/team-code-names.po index d948217146a..96be38ec687 100644 --- a/docs/locale/he/LC_MESSAGES/features/team-code-names.po +++ b/docs/locale/he/LC_MESSAGES/features/team-code-names.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:07\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:11\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/team-code-names.po\n" +"X-Crowdin-File-ID: 1297\n" "Language: he_IL\n" #: ../../features/team-code-names.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/features/user-accounts.po b/docs/locale/he/LC_MESSAGES/features/user-accounts.po index d0d38286d3f..0c277d4d6ec 100644 --- a/docs/locale/he/LC_MESSAGES/features/user-accounts.po +++ b/docs/locale/he/LC_MESSAGES/features/user-accounts.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:07\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:11\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/user-accounts.po\n" +"X-Crowdin-File-ID: 1299\n" "Language: he_IL\n" #: ../../features/user-accounts.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/features/venue-constraints.po b/docs/locale/he/LC_MESSAGES/features/venue-constraints.po index b9486f16c9e..2f0e8767659 100644 --- a/docs/locale/he/LC_MESSAGES/features/venue-constraints.po +++ b/docs/locale/he/LC_MESSAGES/features/venue-constraints.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:07\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:12\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/venue-constraints.po\n" +"X-Crowdin-File-ID: 1301\n" "Language: he_IL\n" #: ../../features/venue-constraints.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/guide/comparisons.po b/docs/locale/he/LC_MESSAGES/guide/comparisons.po index 1151ae443b3..2f3094b1a58 100644 --- a/docs/locale/he/LC_MESSAGES/guide/comparisons.po +++ b/docs/locale/he/LC_MESSAGES/guide/comparisons.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:07\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:11\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/comparisons.po\n" +"X-Crowdin-File-ID: 1303\n" "Language: he_IL\n" #: ../../guide/comparisons.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/guide/scaling.po b/docs/locale/he/LC_MESSAGES/guide/scaling.po index 43514a30bd5..474ac0f3021 100644 --- a/docs/locale/he/LC_MESSAGES/guide/scaling.po +++ b/docs/locale/he/LC_MESSAGES/guide/scaling.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:07\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:16\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/scaling.po\n" +"X-Crowdin-File-ID: 1305\n" "Language: he_IL\n" #: ../../guide/scaling.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/guide/tournament-logistics.po b/docs/locale/he/LC_MESSAGES/guide/tournament-logistics.po index 9854a28c545..b4e854a94ae 100644 --- a/docs/locale/he/LC_MESSAGES/guide/tournament-logistics.po +++ b/docs/locale/he/LC_MESSAGES/guide/tournament-logistics.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-05-14 20:17\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:16\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/tournament-logistics.po\n" +"X-Crowdin-File-ID: 1307\n" "Language: he_IL\n" #: ../../guide/tournament-logistics.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/guide/upgrading.po b/docs/locale/he/LC_MESSAGES/guide/upgrading.po index 85df543a1b5..df9fc7657b2 100644 --- a/docs/locale/he/LC_MESSAGES/guide/upgrading.po +++ b/docs/locale/he/LC_MESSAGES/guide/upgrading.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:07\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:17\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/upgrading.po\n" +"X-Crowdin-File-ID: 1309\n" "Language: he_IL\n" #: ../../guide/upgrading.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/index.po b/docs/locale/he/LC_MESSAGES/index.po index 61f37b5c2ea..18a49a6d275 100644 --- a/docs/locale/he/LC_MESSAGES/index.po +++ b/docs/locale/he/LC_MESSAGES/index.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:09\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:27\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/index.po\n" +"X-Crowdin-File-ID: 1311\n" "Language: he_IL\n" #: ../../index.rst:18 diff --git a/docs/locale/he/LC_MESSAGES/install/docker.po b/docs/locale/he/LC_MESSAGES/install/docker.po index 35a3c2aa4fa..70938ba4ac0 100644 --- a/docs/locale/he/LC_MESSAGES/install/docker.po +++ b/docs/locale/he/LC_MESSAGES/install/docker.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:07\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:17\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/docker.po\n" +"X-Crowdin-File-ID: 1313\n" "Language: he_IL\n" #: ../../install/docker.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/install/heroku.po b/docs/locale/he/LC_MESSAGES/install/heroku.po index c36ce6c77b2..fd9a1596818 100644 --- a/docs/locale/he/LC_MESSAGES/install/heroku.po +++ b/docs/locale/he/LC_MESSAGES/install/heroku.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:07\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:17\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/heroku.po\n" +"X-Crowdin-File-ID: 1315\n" "Language: he_IL\n" #: ../../install/heroku.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/install/linux.po b/docs/locale/he/LC_MESSAGES/install/linux.po index fb9ff7f6801..c4913a9a523 100644 --- a/docs/locale/he/LC_MESSAGES/install/linux.po +++ b/docs/locale/he/LC_MESSAGES/install/linux.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:14\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/linux.po\n" +"X-Crowdin-File-ID: 1317\n" "Language: he_IL\n" #: ../../install/linux.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/install/local.po b/docs/locale/he/LC_MESSAGES/install/local.po index bce64153ef3..6f445829109 100644 --- a/docs/locale/he/LC_MESSAGES/install/local.po +++ b/docs/locale/he/LC_MESSAGES/install/local.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:07\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:14\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/local.po\n" +"X-Crowdin-File-ID: 1319\n" "Language: he_IL\n" #: ../../install/local.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/install/osx.po b/docs/locale/he/LC_MESSAGES/install/osx.po index 2baf39ba39b..515b567bf69 100644 --- a/docs/locale/he/LC_MESSAGES/install/osx.po +++ b/docs/locale/he/LC_MESSAGES/install/osx.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:07\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:15\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/osx.po\n" +"X-Crowdin-File-ID: 1321\n" "Language: he_IL\n" #: ../../install/osx.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/install/windows.po b/docs/locale/he/LC_MESSAGES/install/windows.po index b13f78ca828..ef53ddb2cd4 100644 --- a/docs/locale/he/LC_MESSAGES/install/windows.po +++ b/docs/locale/he/LC_MESSAGES/install/windows.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:07\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:15\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/windows.po\n" +"X-Crowdin-File-ID: 1323\n" "Language: he_IL\n" #: ../../install/windows.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/install/wsl.po b/docs/locale/he/LC_MESSAGES/install/wsl.po index 512ad87d59f..7dc3f4c6404 100644 --- a/docs/locale/he/LC_MESSAGES/install/wsl.po +++ b/docs/locale/he/LC_MESSAGES/install/wsl.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:27\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/wsl.po\n" +"X-Crowdin-File-ID: 1325\n" "Language: he_IL\n" #: ../../install/wsl.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/use/finishing-a-tournament.po b/docs/locale/he/LC_MESSAGES/use/finishing-a-tournament.po index 88a3381b3f9..e85b88f457d 100644 --- a/docs/locale/he/LC_MESSAGES/use/finishing-a-tournament.po +++ b/docs/locale/he/LC_MESSAGES/use/finishing-a-tournament.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:28\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/finishing-a-tournament.po\n" +"X-Crowdin-File-ID: 1327\n" "Language: he_IL\n" #: ../../use/finishing-a-tournament.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/use/importing-data.po b/docs/locale/he/LC_MESSAGES/use/importing-data.po index d106fc4af7d..65f194a6e24 100644 --- a/docs/locale/he/LC_MESSAGES/use/importing-data.po +++ b/docs/locale/he/LC_MESSAGES/use/importing-data.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:28\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/importing-data.po\n" +"X-Crowdin-File-ID: 1329\n" "Language: he_IL\n" #: ../../use/importing-data.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/use/running-a-tournament.po b/docs/locale/he/LC_MESSAGES/use/running-a-tournament.po index e4818c15389..768a4a6a55f 100644 --- a/docs/locale/he/LC_MESSAGES/use/running-a-tournament.po +++ b/docs/locale/he/LC_MESSAGES/use/running-a-tournament.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:26\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/running-a-tournament.po\n" +"X-Crowdin-File-ID: 1331\n" "Language: he_IL\n" #: ../../use/running-a-tournament.rst:5 diff --git a/docs/locale/he/LC_MESSAGES/use/starting-a-tournament.po b/docs/locale/he/LC_MESSAGES/use/starting-a-tournament.po index 73d0a4a6643..8299ee644c2 100644 --- a/docs/locale/he/LC_MESSAGES/use/starting-a-tournament.po +++ b/docs/locale/he/LC_MESSAGES/use/starting-a-tournament.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-11 21:06\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:26\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/starting-a-tournament.po\n" +"X-Crowdin-File-ID: 1333\n" "Language: he_IL\n" #: ../../use/starting-a-tournament.rst:5 diff --git a/tabbycat/actionlog/locale/he/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/he/LC_MESSAGES/django.po index e5594fb488d..896393ab03d 100644 --- a/tabbycat/actionlog/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/he/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:26\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" "MIME-Version: 1.0\n" @@ -12,310 +12,312 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" msgstr "" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" msgstr "" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" msgstr "" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" msgstr "" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" msgstr "" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" msgstr "" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" msgstr "" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" msgstr "" -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" msgstr "" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" msgstr "" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" msgstr "" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" msgstr "" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" msgstr "" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" msgstr "" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" msgstr "" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" msgstr "" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" msgstr "" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" msgstr "" -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" msgstr "" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" msgstr "" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" msgstr "" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" msgstr "" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" msgstr "" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" msgstr "" -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "" -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" msgstr "" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" msgstr "" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" msgstr "" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" msgstr "" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" msgstr "" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" msgstr "" -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" msgstr "" -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" msgstr "" -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" msgstr "" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" msgstr "" -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" msgstr "" -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" msgstr "" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" msgstr "" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" msgstr "" -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" msgstr "" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" msgstr "" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" msgstr "" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" msgstr "" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" msgstr "" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" msgstr "" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" msgstr "" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" msgstr "" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" msgstr "" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" msgstr "" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" msgstr "" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" msgstr "" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" msgstr "" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" msgstr "" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" msgstr "" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" msgstr "" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" msgstr "" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" msgstr "" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" msgstr "" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" msgstr "" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" msgstr "" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" msgstr "" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" msgstr "" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" msgstr "" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" msgstr "" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" msgstr "" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" msgstr "" -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "טורניר" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "סיבוב" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" msgstr "" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" msgstr "" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" msgstr "" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" msgstr "" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." msgstr "" -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" msgstr "" diff --git a/tabbycat/adjallocation/locale/he/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/he/LC_MESSAGES/django.po index 6d2da5ea204..cbec08be8d9 100644 --- a/tabbycat/adjallocation/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/he/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:26\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" "MIME-Version: 1.0\n" @@ -12,75 +12,77 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." -msgstr "" +msgstr "אין שופטים זמינים. וודאו כי סימנתם שופטים כ\"זמינים\" עבור סיבוב זה לפני הפעלת שיבוץ אוטומטי." -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." -msgstr[0] "" +msgstr[0] "הניקוד %(count)s גבוה יותר מניקוד השופט המירבי שהותר (%(score).1f)." msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." -msgstr[0] "" +msgstr[0] "%(count)s הניקוד נמוך מניקוד השופט המזערי שהותר (%(score).1f)." msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." -msgstr "" +msgstr "אין שופטים המתאימים להיות יו\"ר או חבר ועד. נסו לשנות את השדה \"ניקוד משוב מינימלי נדרש לשיבוץ כיו\"ר או חבר ועד\" לערך נמוך יותר מכמה שופטים, ונסו שנית." -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" -msgstr "" +msgstr "אין דיבייטים בסיבוב זה. האם יצרת כבר שיבוץ?" -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." msgstr "" -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." msgstr "" -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." msgstr "" -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" msgstr "" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." msgstr "" -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." msgstr "" -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." msgstr "" -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." msgstr "" -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" @@ -89,15 +91,15 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." msgstr "" -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." msgstr "" -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" @@ -106,261 +108,260 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." msgstr "" -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." msgstr "" -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." msgstr "" -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." msgstr "" -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." msgstr "" -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." msgstr "" -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." msgstr "" -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." msgstr "" -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" msgstr "" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" msgstr "" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" msgstr "" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" msgstr "" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" msgstr "" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" msgstr "" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" msgstr "" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "קבוצה" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" msgstr "" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" msgstr "" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" msgstr "" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" msgstr "" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" msgstr "" -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" msgstr "" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" msgstr "" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" msgstr "" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" msgstr "" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "סיבוב" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" msgstr "" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" msgstr "" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" msgstr "" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" msgstr "" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" msgstr "" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" msgstr "" -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" msgstr "" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" msgstr "" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" msgstr "" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" msgstr "" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" msgstr "" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" msgstr "" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" msgstr "" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" msgstr "" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." msgstr "" -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" msgstr "" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." msgstr "" -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." msgstr "" -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" msgstr "" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" msgstr "" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" msgstr "" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" msgstr "" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" msgstr "" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" msgstr "" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" msgstr "" -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" msgstr "" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" msgstr "" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" msgstr "" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" msgstr "" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" msgstr "" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." @@ -369,7 +370,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." @@ -378,19 +379,19 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." msgstr "" -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" msgstr "" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" msgstr "" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." @@ -399,7 +400,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." @@ -408,19 +409,19 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." msgstr "" -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" msgstr "" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" msgstr "" -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." @@ -429,7 +430,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." @@ -438,19 +439,19 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." msgstr "" -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." @@ -459,7 +460,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." @@ -468,7 +469,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." msgstr "" diff --git a/tabbycat/adjfeedback/locale/he/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/he/LC_MESSAGES/django.po index 8ddbd19c12c..aa55ef4118f 100644 --- a/tabbycat/adjfeedback/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/he/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:29\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" "MIME-Version: 1.0\n" @@ -12,34 +12,45 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:43 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" msgstr "" -#: adjfeedback/admin.py:68 adjfeedback/admin.py:126 +#: adjfeedback/admin.py msgid "target" msgstr "" -#: adjfeedback/admin.py:69 adjfeedback/admin.py:127 adjfeedback/models.py:220 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" msgstr "" -#: adjfeedback/admin.py:70 adjfeedback/admin.py:128 adjfeedback/models.py:222 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" msgstr "" -#: adjfeedback/admin.py:84 +#: adjfeedback/admin.py msgid "Target" msgstr "" -#: adjfeedback/admin.py:85 adjfeedback/admin.py:149 +#: adjfeedback/admin.py msgid "Source" msgstr "" -#: adjfeedback/admin.py:167 +#: adjfeedback/admin.py +msgid "Feedback timestamp and version" +msgstr "" + +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." @@ -48,7 +59,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjfeedback/admin.py:179 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." @@ -57,7 +68,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." @@ -66,7 +77,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjfeedback/admin.py:202 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." @@ -75,7 +86,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjfeedback/admin.py:212 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." @@ -84,387 +95,398 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" msgstr "" -#: adjfeedback/forms.py:25 +#: adjfeedback/forms.py msgid "chair" msgstr "" -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "solo" msgstr "" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "panellist" msgstr "" -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "trainee" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:56 +#: adjfeedback/forms.py msgid "Yes" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:58 +#: adjfeedback/forms.py msgid "No" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:73 adjfeedback/forms.py:82 +#: adjfeedback/forms.py msgid "This field is required." msgstr "" -#: adjfeedback/forms.py:173 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" msgstr "" -#: adjfeedback/forms.py:185 +#: adjfeedback/forms.py msgid "Ignored" msgstr "" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:244 adjfeedback/forms.py:307 +#: adjfeedback/forms.py msgid "Submitted - " msgstr "" #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:245 adjfeedback/forms.py:312 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" msgstr "" -#: adjfeedback/forms.py:268 adjfeedback/forms.py:342 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "" -#: adjfeedback/forms.py:285 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" msgstr "" -#: adjfeedback/forms.py:309 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "" -#: adjfeedback/forms.py:315 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" msgstr "" -#: adjfeedback/forms.py:317 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" msgstr "" -#: adjfeedback/forms.py:408 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" msgstr "" -#: adjfeedback/forms.py:413 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" msgstr "" -#: adjfeedback/forms.py:426 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." msgstr "" -#: adjfeedback/forms.py:432 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" msgstr "" -#: adjfeedback/forms.py:440 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" msgstr "" -#: adjfeedback/forms.py:455 +#: adjfeedback/forms.py msgid "There were no scores to import." msgstr "" -#: adjfeedback/models.py:12 adjfeedback/models.py:215 +#: adjfeedback/models.py msgid "adjudicator" msgstr "" -#: adjfeedback/models.py:15 +#: adjfeedback/models.py msgid "round" msgstr "סיבוב" -#: adjfeedback/models.py:16 adjfeedback/models.py:216 +#: adjfeedback/models.py msgid "score" msgstr "" -#: adjfeedback/models.py:17 +#: adjfeedback/models.py msgid "timestamp" msgstr "" -#: adjfeedback/models.py:20 +#: adjfeedback/models.py msgid "adjudicator base score history" msgstr "" -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score histories" msgstr "" -#: adjfeedback/models.py:29 +#: adjfeedback/models.py msgid "question" msgstr "" -#: adjfeedback/models.py:31 +#: adjfeedback/models.py msgid "feedback" msgstr "" -#: adjfeedback/models.py:42 adjfeedback/models.py:50 adjfeedback/models.py:58 -#: adjfeedback/models.py:66 +#: adjfeedback/models.py msgid "answer" msgstr "" -#: adjfeedback/models.py:45 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" msgstr "" -#: adjfeedback/models.py:46 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" msgstr "" -#: adjfeedback/models.py:53 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" msgstr "" -#: adjfeedback/models.py:54 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" msgstr "" -#: adjfeedback/models.py:61 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" msgstr "" -#: adjfeedback/models.py:62 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" msgstr "" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" msgstr "" -#: adjfeedback/models.py:70 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" msgstr "" -#: adjfeedback/models.py:89 +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answers" +msgstr "" + +#: adjfeedback/models.py msgid "checkbox" msgstr "" -#: adjfeedback/models.py:90 +#: adjfeedback/models.py msgid "yes/no (dropdown)" msgstr "" -#: adjfeedback/models.py:91 +#: adjfeedback/models.py msgid "integer (textbox)" msgstr "" -#: adjfeedback/models.py:92 +#: adjfeedback/models.py msgid "integer scale" msgstr "" -#: adjfeedback/models.py:93 +#: adjfeedback/models.py msgid "float" msgstr "" -#: adjfeedback/models.py:94 adjfeedback/models.py:127 +#: adjfeedback/models.py msgid "text" msgstr "" -#: adjfeedback/models.py:95 +#: adjfeedback/models.py msgid "long text" msgstr "" -#: adjfeedback/models.py:96 +#: adjfeedback/models.py msgid "select one" msgstr "" -#: adjfeedback/models.py:97 +#: adjfeedback/models.py msgid "select multiple" msgstr "" -#: adjfeedback/models.py:123 +#: adjfeedback/models.py msgid "tournament" msgstr "טורניר" -#: adjfeedback/models.py:125 +#: adjfeedback/models.py msgid "sequence number" msgstr "" -#: adjfeedback/models.py:128 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" msgstr "" -#: adjfeedback/models.py:130 +#: adjfeedback/models.py msgid "name" msgstr "" -#: adjfeedback/models.py:131 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" msgstr "" -#: adjfeedback/models.py:133 +#: adjfeedback/models.py msgid "reference" msgstr "" -#: adjfeedback/models.py:134 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" msgstr "" -#: adjfeedback/models.py:137 +#: adjfeedback/models.py msgid "from adjudicator" msgstr "" -#: adjfeedback/models.py:138 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" msgstr "" -#: adjfeedback/models.py:140 +#: adjfeedback/models.py msgid "from team" msgstr "" -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "Teams should be asked this question" msgstr "" -#: adjfeedback/models.py:144 +#: adjfeedback/models.py msgid "answer type" msgstr "" -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "required" msgstr "" -#: adjfeedback/models.py:147 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" msgstr "" -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "minimum value" msgstr "" -#: adjfeedback/models.py:150 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "" -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "maximum value" msgstr "" -#: adjfeedback/models.py:153 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "" -#: adjfeedback/models.py:160 +#: adjfeedback/models.py msgid "choices" msgstr "" -#: adjfeedback/models.py:161 -msgid "Permissible choices for select one/multiple fields, separated by '//' (ignored for other fields)" +#: adjfeedback/models.py +msgid "Permissible choices for select one/multiple fields (ignored for other fields)" msgstr "" -#: adjfeedback/models.py:166 +#: adjfeedback/models.py msgid "adjudicator feedback question" msgstr "" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "adjudicator feedback questions" msgstr "" -#: adjfeedback/models.py:225 adjfeedback/views.py:761 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" msgstr "" -#: adjfeedback/models.py:226 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" msgstr "" -#: adjfeedback/models.py:230 +#: adjfeedback/models.py msgid "adjudicator feedback" msgstr "" -#: adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator feedbacks" msgstr "" -#: adjfeedback/models.py:278 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." msgstr "" -#: adjfeedback/models.py:281 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." msgstr "" -#: adjfeedback/models.py:283 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" msgstr "" -#: adjfeedback/models.py:285 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." msgstr "" -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" msgstr "" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py +msgid "N/A" +msgstr "" + +#: adjfeedback/tables.py msgid "Current weighted score" msgstr "" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." msgstr "" -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" msgstr "" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" msgstr "" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" msgstr "" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:83 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:92 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." msgstr "" -#: adjfeedback/tables.py:96 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" msgstr "" -#: adjfeedback/tables.py:105 +#: adjfeedback/tables.py msgid "Feedback Per Round" msgstr "" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" msgstr "" -#: adjfeedback/tables.py:124 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" @@ -473,215 +495,218 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjfeedback/tables.py:147 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" msgstr "" -#: adjfeedback/tables.py:171 +#: adjfeedback/tables.py msgid "View Missing Feedback" msgstr "" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" msgstr "" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" msgstr "" -#: adjfeedback/templates/enter_feedback.html:9 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format -msgid "Add Feedback from %(source_name)s" +msgid "Add Feedback from %(name)s" msgstr "" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" msgstr "" -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" msgstr "" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." msgstr "" -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." msgstr "" -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." msgstr "" -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" msgstr "" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" msgstr "" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" msgstr "" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" msgstr "" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" msgstr "" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" msgstr "" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" msgstr "" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." msgstr "" -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." msgstr "" -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "\n" -" On %(adjudicator)s\n" -" " +msgid "On %(adjudicator)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" +msgid "Received as %(as_type)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" msgstr "" -#: adjfeedback/templates/feedback_card.html:85 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:90 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:95 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:95 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:100 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:105 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" msgstr "" -#: adjfeedback/templates/feedback_card.html:105 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" msgstr "" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" msgstr "" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" msgstr "" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html #, python-format -msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit on trainees." +msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:20 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:31 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." @@ -690,7 +715,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." @@ -699,29 +724,29 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" -msgstr "" +msgstr "בסיס" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." @@ -730,7 +755,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." @@ -739,7 +764,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" @@ -748,11 +773,11 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" @@ -761,12 +786,12 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" @@ -775,83 +800,76 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" msgstr "" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" msgstr "" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" msgstr "" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 -#, python-format -msgid "Add feedback from %(name)s" -msgstr "" - -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" msgstr "" -#: adjfeedback/views.py:117 +#: adjfeedback/views.py msgid "Feedback Overview" msgstr "" -#: adjfeedback/views.py:141 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" msgstr "" -#: adjfeedback/views.py:152 adjfeedback/views.py:176 adjfeedback/views.py:191 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" @@ -860,90 +878,90 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjfeedback/views.py:155 adjfeedback/views.py:181 adjfeedback/views.py:196 +#: adjfeedback/views.py msgid "Feedbacks" msgstr "" -#: adjfeedback/views.py:162 +#: adjfeedback/views.py msgid "Find Feedback" msgstr "" -#: adjfeedback/views.py:170 adjfeedback/views.py:706 +#: adjfeedback/views.py msgid "From Teams" msgstr "" -#: adjfeedback/views.py:185 adjfeedback/views.py:700 +#: adjfeedback/views.py msgid "From Adjudicators" msgstr "" -#: adjfeedback/views.py:270 +#: adjfeedback/views.py msgid "Latest Feedback" msgstr "" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "(30 most recent)" msgstr "" -#: adjfeedback/views.py:281 +#: adjfeedback/views.py msgid "Only Comments" msgstr "" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "(250 most recent)" msgstr "" -#: adjfeedback/views.py:293 +#: adjfeedback/views.py msgid "Important Feedback" msgstr "" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" msgstr "" -#: adjfeedback/views.py:361 +#: adjfeedback/views.py msgid "A Team" msgstr "" -#: adjfeedback/views.py:366 +#: adjfeedback/views.py msgid "Team" msgstr "קבוצה" -#: adjfeedback/views.py:373 adjfeedback/views.py:392 +#: adjfeedback/views.py msgid "Institution" msgstr "" -#: adjfeedback/views.py:378 +#: adjfeedback/views.py msgid "An Adjudicator" msgstr "" -#: adjfeedback/views.py:385 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "" -#: adjfeedback/views.py:512 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." msgstr "" -#: adjfeedback/views.py:542 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." msgstr "" -#: adjfeedback/views.py:621 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" msgstr "" -#: adjfeedback/views.py:644 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." msgstr "" -#: adjfeedback/views.py:671 +#: adjfeedback/views.py msgid "Feedback Progress" msgstr "" -#: adjfeedback/views.py:692 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" @@ -952,24 +970,24 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: adjfeedback/views.py:737 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." msgstr "" -#: adjfeedback/views.py:751 +#: adjfeedback/views.py msgid "confirmed" msgstr "" -#: adjfeedback/views.py:751 +#: adjfeedback/views.py msgid "un-confirmed" msgstr "" -#: adjfeedback/views.py:761 +#: adjfeedback/views.py msgid "un-ignored" msgstr "" -#: adjfeedback/views.py:797 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." diff --git a/tabbycat/availability/locale/he/LC_MESSAGES/django.po b/tabbycat/availability/locale/he/LC_MESSAGES/django.po index 2f670ffe514..13332b4c290 100644 --- a/tabbycat/availability/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/he/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:29\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" "MIME-Version: 1.0\n" @@ -12,96 +12,90 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" msgstr "" -#: availability/models.py:15 +#: availability/models.py msgid "content type" msgstr "" -#: availability/models.py:16 +#: availability/models.py msgid "object id" msgstr "" -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "סיבוב" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" msgstr "" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" msgstr "" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" msgstr "" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" msgstr "" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" msgstr "" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" msgstr "" -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" msgstr "" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" msgstr "" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." msgstr "" -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." msgstr "" -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." msgstr "" -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " @@ -110,98 +104,98 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " msgstr "" -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" msgstr "" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." msgstr "" -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" msgstr "" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" msgstr "" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" msgstr "" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" msgstr "" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" msgstr "" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" msgstr "" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "קבוצות" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" msgstr "" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" msgstr "" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" msgstr "" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." msgstr "" -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." msgstr "" -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" msgstr "" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." @@ -210,7 +204,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." @@ -219,7 +213,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" @@ -228,7 +222,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." @@ -237,7 +231,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" @@ -246,12 +240,12 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." @@ -260,11 +254,11 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" msgstr "" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." @@ -273,7 +267,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" @@ -282,7 +276,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." @@ -291,7 +285,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" @@ -300,7 +294,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." @@ -309,12 +303,12 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." @@ -323,16 +317,16 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" msgstr "" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" msgstr "" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" @@ -342,7 +336,7 @@ msgstr[2] "" msgstr[3] "" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" @@ -354,7 +348,7 @@ msgstr[3] "" #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" @@ -364,7 +358,7 @@ msgstr[2] "" msgstr[3] "" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" @@ -373,60 +367,60 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" msgstr "" -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" msgstr "" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" msgstr "" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" msgstr "" -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" msgstr "" -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" msgstr "" -#: availability/views.py:260 +#: availability/views.py msgid "Room" msgstr "" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" msgstr "" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" msgstr "" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" msgstr "" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." msgstr "" -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." msgstr "" -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." msgstr "" -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." msgstr "" diff --git a/tabbycat/breakqual/locale/he/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/he/LC_MESSAGES/django.po index 4bd2bbe7324..e2eecd65283 100644 --- a/tabbycat/breakqual/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/he/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:28\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" "MIME-Version: 1.0\n" @@ -12,511 +12,513 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" msgstr "" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "" +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "טורניר" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "" -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" msgstr "" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" msgstr "" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" msgstr "" -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" msgstr "" -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" msgstr "" -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" msgstr "" -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" msgstr "" -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" msgstr "" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" msgstr "" -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" msgstr "" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" msgstr "" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" msgstr "" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" msgstr "" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" msgstr "" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" msgstr "" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" msgstr "" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" msgstr "" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" msgstr "" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "קבוצה" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" msgstr "" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" msgstr "" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" msgstr "" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" msgstr "" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" msgstr "" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" msgstr "" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" msgstr "" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" msgstr "" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" msgstr "" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" msgstr "" -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" msgstr "" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." msgstr "" -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." msgstr "" -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" msgstr "" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." msgstr "" -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" msgstr "" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " msgstr "" -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" msgstr "" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" msgstr "" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " msgstr "" -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" msgstr "" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" msgstr "" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" msgstr "" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" msgstr "" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" msgstr "" -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" msgstr "" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." msgstr "" -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." msgstr "" -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." msgstr "" -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." msgstr "" -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." msgstr "" -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." msgstr "" -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" msgstr "" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" msgstr "" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" msgstr "" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" msgstr "" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." msgstr "" -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" msgstr "" -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" msgstr "" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" msgstr "" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" msgstr "" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" msgstr "" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" msgstr "" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" msgstr "" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" msgstr "" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" msgstr "" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" msgstr "" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" msgstr "" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" msgstr "" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" msgstr "" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" msgstr "" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" msgstr "" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" msgstr "" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" msgstr "" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" msgstr "" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" msgstr "" -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" msgstr "" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" msgstr "" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" msgstr "" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." msgstr "" -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." msgstr "" -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" msgstr "" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" msgstr "" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "%s דובר/תים" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" diff --git a/tabbycat/draw/locale/he/LC_MESSAGES/django.po b/tabbycat/draw/locale/he/LC_MESSAGES/django.po index 0914f6ce084..ae4df115b02 100644 --- a/tabbycat/draw/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/he/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:29\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:27\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" "MIME-Version: 1.0\n" @@ -12,24 +12,12 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." @@ -38,7 +26,11 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: draw/admin.py:93 +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." @@ -47,416 +39,405 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: draw/apps.py:7 draw/views.py:429 draw/views.py:432 +#: draw/apps.py draw/views.py msgid "Draw" msgstr "" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "Too many swaps" msgstr "" -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" msgstr "" -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" msgstr "" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble up (history)" msgstr "" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble down (history)" msgstr "" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble up (institution)" msgstr "" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble down (institution)" msgstr "" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" msgstr "" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Can't bubble up/down" msgstr "" -#: draw/generator/__init__.py:26 +#: draw/generator/__init__.py msgid "Pull-up team" msgstr "" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." msgstr "" -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." msgstr "" -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." msgstr "" -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." msgstr "" -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." msgstr "" -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." msgstr "" -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." msgstr "" -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." msgstr "" -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." msgstr "" -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." msgstr "" -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." msgstr "" -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." msgstr "" -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." msgstr "" -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." msgstr "" -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." msgstr "" -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" msgstr "" -#: draw/manager.py:269 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." msgstr "" -#: draw/models.py:27 +#: draw/models.py msgid "none" msgstr "" -#: draw/models.py:28 +#: draw/models.py msgid "postponed" msgstr "" -#: draw/models.py:29 +#: draw/models.py msgid "draft" msgstr "" -#: draw/models.py:30 +#: draw/models.py msgid "confirmed" msgstr "" -#: draw/models.py:36 draw/models.py:389 +#: draw/models.py msgid "round" msgstr "סיבוב" -#: draw/models.py:38 -msgid "venue" +#: draw/models.py +msgid "room" msgstr "" -#: draw/models.py:41 +#: draw/models.py msgid "bracket" msgstr "" -#: draw/models.py:43 +#: draw/models.py msgid "room rank" msgstr "" -#: draw/models.py:49 +#: draw/models.py msgid "importance" msgstr "" -#: draw/models.py:51 +#: draw/models.py msgid "result status" msgstr "" -#: draw/models.py:53 +#: draw/models.py msgid "sides confirmed" msgstr "" -#: draw/models.py:54 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." msgstr "" -#: draw/models.py:57 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "" -#: draw/models.py:58 +#: draw/models.py msgid "debates" msgstr "" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:77 draw/models.py:102 +#: draw/models.py msgid " (sides not confirmed)" msgstr "" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:89 draw/models.py:106 +#: draw/models.py msgid " vs " msgstr "" -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" msgstr "" -#: draw/models.py:263 +#: draw/models.py msgid "negative" msgstr "" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" msgstr "ממשלה 1" -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" msgstr "אופוזיציה 1" -#: draw/models.py:266 +#: draw/models.py msgid "closing government" msgstr "ממשלה 2" -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" msgstr "אופוזיציה 2" -#: draw/models.py:274 draw/models.py:391 +#: draw/models.py msgid "team" msgstr "קבוצה" -#: draw/models.py:276 draw/models.py:393 +#: draw/models.py msgid "side" msgstr "" -#: draw/models.py:282 +#: draw/models.py msgid "debate team" msgstr "" -#: draw/models.py:283 +#: draw/models.py msgid "debate teams" msgstr "" -#: draw/models.py:311 -msgid "placed 1st" -msgstr "" - -#: draw/models.py:313 -msgid "placed 2nd" -msgstr "" - -#: draw/models.py:315 -msgid "placed 3rd" -msgstr "" - -#: draw/models.py:317 -msgid "placed 4th" +#: draw/models.py +#, python-format +msgid "placed %(place)s" msgstr "" -#: draw/models.py:319 draw/models.py:326 +#: draw/models.py msgid "result unknown" msgstr "" -#: draw/models.py:322 +#: draw/models.py msgid "won" msgstr "" -#: draw/models.py:324 +#: draw/models.py msgid "lost" msgstr "" -#: draw/models.py:397 +#: draw/models.py msgid "team side allocation" msgstr "" -#: draw/models.py:398 +#: draw/models.py msgid "team side allocations" msgstr "" #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" msgstr "" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" msgstr "" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" msgstr "" -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" msgstr "" -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" msgstr "" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" msgstr "" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" msgstr "" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" msgstr "" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" msgstr "" -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" msgstr "" -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" msgstr "" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" msgstr "" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" msgstr "" -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" msgstr "" -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" msgstr "" -#: draw/tables.py:292 +#: draw/tables.py msgid "After" msgstr "" -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" msgstr "" -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" msgstr "" -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" msgstr "" -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" msgstr "" -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" msgstr "" -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" msgstr "" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." @@ -465,7 +446,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" @@ -474,7 +455,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." @@ -483,7 +464,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." @@ -492,7 +473,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" @@ -501,7 +482,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." @@ -510,7 +491,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" @@ -519,7 +500,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." @@ -528,7 +509,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" @@ -537,7 +518,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." @@ -546,81 +527,77 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" msgstr "" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" msgstr "" -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" msgstr "" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" msgstr "" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" msgstr "" -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" msgstr "" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" msgstr "" -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" msgstr "" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" msgstr "" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" msgstr "" -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" msgstr "" -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." @@ -629,310 +606,321 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" msgstr "" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." msgstr "" -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." -msgstr "" - -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." -msgstr "" - -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "" +msgid_plural "Enter motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" msgstr "" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." msgstr "" -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." msgstr "" -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." msgstr "" -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" msgstr "" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." msgstr "" -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." msgstr "" -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: draw/templates/draw_display_admin.html:200 +#: draw/templates/draw_display_admin.html msgid "Release Motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:201 -msgid "Release motion to public" -msgstr "" +msgid_plural "Release Motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: draw/templates/draw_display_admin.html:202 -msgid "Unrelease motion to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." msgstr "" -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." msgstr "" -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "" - -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "" +msgid_plural "Motions have been released publicly." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" msgstr "" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" msgstr "" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" msgstr "" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" msgstr "" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" msgstr "" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" msgstr "" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" msgstr "" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" msgstr "" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" msgstr "" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" msgstr "" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" msgstr "" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" msgstr "" -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" msgstr "" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" msgstr "" -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" msgstr "" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" msgstr "" -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" msgstr "" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" msgstr "" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" msgstr "" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" msgstr "" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." msgstr "" -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." msgstr "" -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." msgstr "" -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" msgstr "" -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" msgstr "" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" msgstr "" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." @@ -941,21 +929,20 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" msgstr "" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" msgstr "" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." @@ -964,92 +951,92 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" msgstr "" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" msgstr "" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." msgstr "" -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." msgstr "" -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " msgstr "" -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." msgstr "" -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." msgstr "" -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." msgstr "" -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." msgstr "" -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." msgstr "" -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." msgstr "" -#: draw/views.py:66 draw/views.py:460 +#: draw/views.py msgid "No debates in this round" msgstr "" -#: draw/views.py:74 +#: draw/views.py #, python-format msgid "Draw for %(round)s" msgstr "" -#: draw/views.py:76 +#: draw/views.py msgid "Draws for Current Rounds" msgstr "" -#: draw/views.py:80 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" msgstr "" -#: draw/views.py:84 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" msgstr "" -#: draw/views.py:122 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" @@ -1058,121 +1045,125 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: draw/views.py:169 +#: draw/views.py msgid "The draw for this round hasn't been released." msgstr "" -#: draw/views.py:222 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" msgstr "" -#: draw/views.py:380 +#: draw/views.py msgid "Adjudicator Assignments" msgstr "" -#: draw/views.py:400 +#: draw/views.py +msgid "Position" +msgstr "" + +#: draw/views.py msgid "Team Pairings" msgstr "" -#: draw/views.py:424 +#: draw/views.py msgid "No Draw" msgstr "" -#: draw/views.py:426 +#: draw/views.py msgid "Draft Draw" msgstr "" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:518 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" msgstr "" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:523 +#: draw/views.py msgid "BR" msgstr "" -#: draw/views.py:548 +#: draw/views.py msgid "Draw with Details" msgstr "" -#: draw/views.py:556 +#: draw/views.py msgid "Position Balance Report" msgstr "" -#: draw/views.py:567 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" msgstr "" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:570 +#: draw/views.py msgid " (i.e., Shannon entropy)" msgstr "" -#: draw/views.py:600 +#: draw/views.py msgid "Teams with position imbalances" msgstr "" -#: draw/views.py:601 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" msgstr "" -#: draw/views.py:604 +#: draw/views.py msgid "Annotated draw" msgstr "" -#: draw/views.py:635 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" msgstr "" -#: draw/views.py:643 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " msgstr "" -#: draw/views.py:651 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " msgstr "" -#: draw/views.py:660 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " msgstr "" -#: draw/views.py:676 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "" -#: draw/views.py:703 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "" -#: draw/views.py:723 +#: draw/views.py msgid "Released the draw." msgstr "" -#: draw/views.py:738 +#: draw/views.py msgid "Unreleased the draw." msgstr "" -#: draw/views.py:751 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." msgstr "" -#: draw/views.py:770 +#: draw/views.py msgid "Side Pre-Allocations" msgstr "" -#: draw/views.py:803 +#: draw/views.py msgid "Edit Matchups" msgstr "" diff --git a/tabbycat/importer/locale/he/LC_MESSAGES/django.po b/tabbycat/importer/locale/he/LC_MESSAGES/django.po index 0d880780114..85e9cd8ac32 100644 --- a/tabbycat/importer/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/he/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:29\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" "MIME-Version: 1.0\n" @@ -12,29 +12,31 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" msgstr "" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" msgstr "" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" msgstr "" -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." msgstr "" -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." @@ -43,11 +45,11 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." msgstr "" -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." @@ -56,88 +58,88 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" msgstr "" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" msgstr "" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" msgstr "" -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" msgstr "" -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" msgstr "" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" msgstr "" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" msgstr "" -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" msgstr "" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" msgstr "" -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "דובר/ת %d" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" msgstr "" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." msgstr "" -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." msgstr "" -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." msgstr "" -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." msgstr "" -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" msgstr "" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." msgstr "" -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" msgstr "" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." @@ -146,7 +148,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." @@ -155,196 +157,232 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 +#: importer/forms.py +msgid "XML" +msgstr "" + +#: importer/forms.py +msgid "The Debate XML archive to parse" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export Tournament Archive" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Tournaments can be exported in an XML format for use outside Tabbycat." +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export all data" +msgstr "" + +#: importer/templates/archive_importer.html +msgctxt "page title" +msgid "Import Tournament Archive" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "This form will create a tournament with the data provided as a Debate XML format." +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Import" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Go back to the site home page" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html msgctxt "page title" msgid "Add Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" msgstr "" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" msgstr "" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." msgstr "" -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" msgstr "" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" msgstr "" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" msgstr "" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" msgstr "" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" msgstr "" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" msgstr "" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_index.html +msgid "Add/Edit Break Categories" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Speaker Categories" +msgstr "" + +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" msgstr "" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" msgstr "" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" msgstr "" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" msgstr "" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" msgstr "" -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" msgstr "" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" msgstr "" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." msgstr "" -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" msgstr "" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" msgstr "" -#: importer/views.py:102 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." @@ -353,7 +391,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: importer/views.py:123 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." @@ -362,7 +400,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: importer/views.py:182 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." @@ -371,12 +409,12 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: importer/views.py:203 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "" -#: importer/views.py:208 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." @@ -385,11 +423,15 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: importer/views.py:224 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " msgstr "" -#: importer/views.py:232 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." msgstr "" +#: importer/views.py +msgid "Tournament archive has been imported." +msgstr "" + diff --git a/tabbycat/locale/he/LC_MESSAGES/django.po b/tabbycat/locale/he/LC_MESSAGES/django.po index b83c894b6e3..c8f318013e8 100644 --- a/tabbycat/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/locale/he/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:34\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" "MIME-Version: 1.0\n" @@ -12,304 +12,333 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" msgstr "" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:92 +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" msgstr "" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" msgstr "" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" msgstr "" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" msgstr "" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." msgstr "" -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" msgstr "" -#: checkins/models.py:37 +#: checkins/models.py msgid "" msgstr "" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" msgstr "" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" msgstr "" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" msgstr "" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" msgstr "" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" msgstr "" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" msgstr "" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" msgstr "" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" msgstr "" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" msgstr "" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "טורניר" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" msgstr "" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" msgstr "" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" msgstr "" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." msgstr "" -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." msgstr "" -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." msgstr "" -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" msgstr "" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" msgstr "" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" msgstr "" -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." msgstr "" -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." msgstr "" -#: checkins/views.py:29 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" msgstr "" -#: checkins/views.py:62 +#: checkins/views.py msgid "People's Check-In Statuses" msgstr "" -#: checkins/views.py:119 +#: checkins/views.py msgid "Rooms' Check-In Statuses" msgstr "" -#: checkins/views.py:168 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" msgstr "" -#: checkins/views.py:175 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" msgstr "דובר/תים" -#: checkins/views.py:180 templates/nav/public_nav.html:132 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "" -#: checkins/views.py:185 +#: checkins/views.py msgid "Rooms" msgstr "" -#: checkins/views.py:226 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" msgstr "" -#: checkins/views.py:233 +#: checkins/views.py msgid "Identifiers" msgstr "" -#: checkins/views.py:269 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." msgstr "" -#: checkins/views.py:276 +#: checkins/views.py msgid "You have revoked your check-in." msgstr "" -#: checkins/views.py:278 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." msgstr "" -#: checkins/views.py:281 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." msgstr "" -#: checkins/views.py:283 +#: checkins/views.py msgid "You are now checked in." msgstr "" -#: settings/core.py:45 +#: settings/core.py msgid "Arabic" msgstr "" -#: settings/core.py:46 +#: settings/core.py +msgid "Bengali" +msgstr "" + +#: settings/core.py msgid "English" msgstr "" -#: settings/core.py:47 +#: settings/core.py msgid "Spanish" msgstr "" -#: settings/core.py:48 +#: settings/core.py msgid "French" msgstr "" -#: settings/core.py:49 +#: settings/core.py +msgid "Indonesian" +msgstr "" + +#: settings/core.py msgid "Japanese" msgstr "" -#: settings/core.py:50 +#: settings/core.py +msgid "Malay" +msgstr "" + +#: settings/core.py msgid "Portuguese" msgstr "" -#: settings/core.py:51 +#: settings/core.py msgid "Russian" msgstr "" -#: templates/admin/delete_protected_message.html:4 +#: settings/core.py +msgid "Simplified Chinese" +msgstr "" + +#: settings/core.py +msgid "Translation" +msgstr "" + +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." msgstr "" -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." msgstr "" -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." msgstr "" -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" msgstr "" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" msgstr "" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" msgstr "" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" msgstr "" -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." msgstr "" -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" msgstr "" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" msgstr "" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." msgstr "" -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." @@ -318,568 +347,613 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: templates/errors/public_403.html:14 +#: templates/errors/legacy_sendgrid_warning.html +msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." +msgstr "" + +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." msgstr "" -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." msgstr "" -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." msgstr "" -#: templates/footer.html:24 +#: templates/footer.html #, python-format -msgid "For a tournament of this size, we suggest a donation of $%(amount)s." +msgid "For a tournament of this size, we suggest a donation of $%(amount)s." msgstr "" -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." msgstr "" -#: templates/footer.html:32 -#, python-format -msgid "Donations to Tabbycat from individuals or organisations are much appreciated." +#: templates/footer.html +msgid "Donations to Tabbycat from individuals or organisations are much appreciated." msgstr "" -#: templates/footer.html:40 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" msgstr "" -#: templates/footer.html:42 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." msgstr "" -#: templates/footer.html:51 -msgid "Need ballots?" +#: templates/footer.html +msgid "Our Organisation" msgstr "" -#: templates/footer.html:53 -msgid "You can customise and print great ballots from your browser." +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." msgstr "" -#: templates/footer.html:66 +#: templates/footer.html msgid "Language" msgstr "" -#: templates/footer.html:73 +#: templates/footer.html msgid "GitHub" msgstr "" -#: templates/footer.html:79 +#: templates/footer.html msgid "Documentation" msgstr "" -#: templates/footer.html:85 +#: templates/footer.html msgid "Support" msgstr "" -#: templates/footer.html:91 +#: templates/footer.html msgid "Facebook" msgstr "" -#: templates/footer.html:97 +#: templates/footer.html msgid "Set Up A Copy" msgstr "" -#: templates/footer.html:111 +#: templates/footer.html msgid "Change Language" msgstr "" -#: templates/footer.html:128 +#: templates/footer.html msgid "Use this language" msgstr "" -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" msgstr "" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" msgstr "דף הבית" -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" msgstr "" -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" msgstr "" -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" msgstr "" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" msgstr "" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" msgstr "" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" msgstr "" -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" msgstr "" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" msgstr "" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" msgstr "" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:162 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" msgstr "" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" msgstr "" -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" msgstr "" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" msgstr "" -#: templates/nav/admin_nav.html:96 -msgid "It\\" -msgstr "" - -#: templates/nav/admin_nav.html:97 -msgid "Where's Edit Database?" +#: templates/nav/admin_nav.html +msgid "Export XML" msgstr "" -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:147 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" msgstr "" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" msgstr "" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" msgstr "" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" msgstr "" -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" msgstr "" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" msgstr "" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" msgstr "" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" msgstr "" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" msgstr "" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" msgstr "" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" msgstr "" -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" msgstr "" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:152 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" msgstr "" -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" msgstr "" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "קבוצות" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" msgstr "" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" msgstr "" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" msgstr "" -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" msgstr "" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:142 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:157 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" msgstr "" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" msgstr "" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" msgstr "" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" msgstr "" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" msgstr "" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" msgstr "" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" msgstr "" -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:182 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" msgstr "" -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" msgstr "" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:167 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" msgstr "" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" msgstr "" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" msgstr "" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" msgstr "" -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" msgstr "" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" msgstr "" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" msgstr "" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" msgstr "" -#: templates/nav/public_nav.html:50 +#: templates/nav/public_nav.html msgid "Motions Tab" msgstr "" -#: templates/nav/public_nav.html:59 +#: templates/nav/public_nav.html +msgid "By round" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Globally" +msgstr "" + +#: templates/nav/public_nav.html msgid "Draws" msgstr "" -#: templates/nav/public_nav.html:70 +#: templates/nav/public_nav.html msgid "No Draws Available" msgstr "" -#: templates/nav/public_nav.html:78 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: templates/nav/public_nav.html:82 +#: templates/nav/public_nav.html msgid "Current Draws" msgstr "" -#: templates/nav/public_nav.html:102 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" msgstr "" -#: templates/nav/public_nav.html:120 +#: templates/nav/public_nav.html msgid "Break" msgstr "" -#: templates/nav/public_nav.html:172 +#: templates/nav/public_nav.html msgid "Feedback Progress" msgstr "" -#: templates/nav/public_nav.html:177 +#: templates/nav/public_nav.html msgid "Enter Ballot" msgstr "" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" msgstr "" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" msgstr "" -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" msgstr "" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" msgstr "" -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" msgstr "" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" msgstr "" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" msgstr "" -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" msgstr "" -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." msgstr "" -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." msgstr "" -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." msgstr "" -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" msgstr "" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." msgstr "" -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" msgstr "" -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" msgstr "" -#: templates/registration/password_change_form.html:20 +#: templates/registration/password_change_form.html +#, python-format +msgid "API Token: %(api_token)s" +msgstr "" + +#: templates/registration/password_change_form.html +msgid "The API token will allow you to authorize external applications to access the site as staff." +msgstr "" + +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." msgstr "" -#: templates/registration/password_change_form.html:25 -#: templates/registration/password_reset_confirm.html:38 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" msgstr "" -#: templates/registration/password_change_form.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" msgstr "" -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "" -#: templates/registration/password_reset_complete.html:16 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." msgstr "" -#. Translators: This text appears on a button that takes the user to the login page after a password reset. -#: templates/registration/password_reset_complete.html:23 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" msgstr "" -#: templates/registration/password_reset_confirm.html:4 -#: templates/registration/password_reset_confirm.html:14 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" msgstr "" -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html +msgctxt "page title" +msgid "Password Reset" +msgstr "" + +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" msgstr "" -#: templates/registration/password_reset_confirm.html:44 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." msgstr "" -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" -msgid "Password reset e-mail sent" -msgstr "" - -#: templates/registration/password_reset_done.html:16 -msgid "We've e-mailed you instructions for setting your password, if an account exists with the e-mail address you entered. You should receive them shortly." +msgid "Password reset email sent" msgstr "" -#: templates/registration/password_reset_done.html:19 -msgid "If you don't receive an e-mail, please make sure you've entered the address you registered with, and check your spam folder." +#: templates/registration/password_reset_done.html +msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." msgstr "" -#. Translators: This text appears on a button that takes the user back to the login page from the password reset page. -#: templates/registration/password_reset_done.html:26 -msgid "Return to the login page" +#: templates/registration/password_reset_done.html +msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." msgstr "" -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" msgstr "" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format -msgid "Someone asked for a password reset for the e-mail address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." +msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" msgstr "" -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format -msgid "If this wasn't you, that probably means someone else typed your e-mail address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." -msgstr "" - -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 -msgctxt "page title" -msgid "Password Reset" +msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_form.html:27 -msgid "Enter your e-mail address below, and we'll e-mail you a password reset link." +#: templates/registration/password_reset_form.html +msgid "Enter your email address below, and we'll email you a password reset link." msgstr "" -#: templates/registration/password_reset_form.html:34 -msgid "Please enter a valid e-mail address." +#: templates/registration/password_reset_form.html +msgid "Please enter a valid email address." msgstr "" -#: templates/registration/password_reset_form.html:39 -msgid "E-mail address" +#: templates/registration/password_reset_form.html users/forms.py +msgid "Email address" msgstr "" -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" msgstr "" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" msgstr "" -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" msgstr "" -#: urls.py:101 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" msgstr "" -#: urls.py:104 +#: urls.py msgid "Welcome! You just logged in!" msgstr "" -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." msgstr "" -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." msgstr "" +#: users/templates/admin/auth/delete_user_warning.html +msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." +msgstr "" + +#: users/templates/signup.html +msgid "Sign-Up" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Administrator Account" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Assistant Account" +msgstr "" + +#: users/templates/signup.html +msgid "Create Account" +msgstr "" + +#: users/views.py +msgid "You have successfully created a new administrator account." +msgstr "" + +#: users/views.py +msgid "You have successfully created a new assistant account." +msgstr "" + +#: users/views.py +msgid "Whoops! It looks like someone's already created the first user account. Please log in." +msgstr "" + +#: users/views.py +#, python-format +msgid "Welcome! You've created an account for %s." +msgstr "" + diff --git a/tabbycat/locale/he/LC_MESSAGES/djangojs.po b/tabbycat/locale/he/LC_MESSAGES/djangojs.po index 1ca0fd2f0df..4a646bfc292 100644 --- a/tabbycat/locale/he/LC_MESSAGES/djangojs.po +++ b/tabbycat/locale/he/LC_MESSAGES/djangojs.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-01-14 04:50+1100\n" -"PO-Revision-Date: 2020-05-14 20:27\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-10 07:06\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" "MIME-Version: 1.0\n" @@ -12,8 +12,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/djangojs.po\n" +"X-Crowdin-File-ID: 962\n" #: checkins/templates/CheckInScanContainer.vue: msgid "Scan Using Camera" @@ -42,7 +44,7 @@ msgid "By %1" msgstr "" #: checkins/templates/CheckInStatusContainer.vue: -msgid "No matching venues found." +msgid "No matching rooms found." msgstr "" #: checkins/templates/CheckInStatusContainer.vue: @@ -182,7 +184,7 @@ msgid "ID %1," msgstr "" #: printing/templates/PrintableBallotHeader.vue: -msgid "Venue:" +msgid "Room:" msgstr "" #: printing/templates/PrintableBallotHeader.vue: diff --git a/tabbycat/motions/locale/he/LC_MESSAGES/django.po b/tabbycat/motions/locale/he/LC_MESSAGES/django.po index d835442805f..42268f8c488 100644 --- a/tabbycat/motions/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/he/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:34\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" +"Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" "MIME-Version: 1.0\n" @@ -12,144 +12,153 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "" -#: motions/models.py:9 -msgid "sequence number" -msgstr "" - -#: motions/models.py:10 -msgid "The order in which motions are displayed" -msgstr "" - -#: motions/models.py:12 +#: motions/models.py msgid "text" msgstr "" -#: motions/models.py:13 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" msgstr "" -#: motions/models.py:15 +#: motions/models.py msgid "reference" msgstr "" -#: motions/models.py:16 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" msgstr "" -#: motions/models.py:18 +#: motions/models.py msgid "info slide" msgstr "" -#: motions/models.py:19 +#: motions/models.py msgid "The information slide for this topic; if it has one" msgstr "" -#: motions/models.py:21 -msgid "round" -msgstr "סיבוב" +#: motions/models.py +msgid "tournament" +msgstr "טורניר" -#: motions/models.py:25 motions/models.py:37 +#: motions/models.py +msgid "rounds" +msgstr "סיבובים" + +#: motions/models.py msgid "motion" msgstr "" -#: motions/models.py:26 +#: motions/models.py msgid "motions" msgstr "" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" msgstr "" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" msgstr "" -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" msgstr "" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" msgstr "" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" msgstr "" -#: motions/statistics.py:88 +#: motions/models.py +msgid "round" +msgstr "סיבוב" + +#: motions/models.py +msgid "sequence number" +msgstr "" + +#: motions/models.py +msgid "The order in which motions are displayed" +msgstr "" + +#: motions/models.py +msgid "round motion" +msgstr "" + +#: motions/models.py +msgid "round motions" +msgstr "" + +#: motions/statistics.py msgid "extremely strong evidence" msgstr "" -#: motions/statistics.py:89 +#: motions/statistics.py msgid "strong evidence" msgstr "" -#: motions/statistics.py:90 +#: motions/statistics.py msgid "moderate evidence" msgstr "" -#: motions/statistics.py:91 +#: motions/statistics.py msgid "weak evidence" msgstr "" -#: motions/statistics.py:92 +#: motions/statistics.py msgid "very weak evidence" msgstr "" -#: motions/statistics.py:93 +#: motions/statistics.py msgid "extremely weak evidence" msgstr "" -#: motions/statistics.py:116 +#: motions/statistics.py msgid "balance inconclusive" msgstr "" -#: motions/statistics.py:117 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" msgstr "" -#: motions/statistics.py:125 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" msgstr "" -#: motions/statistics.py:126 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." msgstr "" -#: motions/statistics.py:131 +#: motions/statistics.py msgid "probably balanced" msgstr "" -#: motions/statistics.py:132 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." msgstr "" -#: motions/templates/motion_statistics.html:4 -#: motions/templates/motion_statistics.html:5 motions/views.py:165 -msgid "Motion Statistics" -msgstr "" - -#: motions/templates/motion_statistics.html:12 -msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments and during elimination rounds." -msgstr "" - -#: motions/templates/motion_statistics.html:39 -#: motions/templates/public_motions.html:31 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" @@ -158,7 +167,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" @@ -167,7 +176,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" @@ -176,59 +185,59 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" msgstr "ממשלה" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" msgstr "אופוזיציה" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" @@ -237,7 +246,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" @@ -246,13 +255,12 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" @@ -261,12 +269,11 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" @@ -275,11 +282,11 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" msgstr "" -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" msgstr[0] "" @@ -287,11 +294,31 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" msgstr "" -#: motions/templates/motions_edit.html:55 +#: motions/templates/motions_edit.html +msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Reuse Motions from Last Round" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Use Existing Motions" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" msgstr[0] "" @@ -299,23 +326,23 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "" -#: motions/templates/public_motions.html:39 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." msgstr "" -#: motions/templates/public_motions.html:45 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." msgstr "" -#: motions/templates/public_motions.html:50 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." msgstr "" -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" @@ -324,7 +351,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" @@ -333,15 +360,23 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." msgstr "" -#: motions/views.py:87 +#: motions/utils.py +msgid "Not all latest ballots list the same motion, so could not be merged." +msgstr "" + +#: motions/utils.py +msgid "Motion vetos are inconsistent, so could not be merged." +msgstr "" + +#: motions/views.py msgid "The motion has been saved." msgstr "" -#: motions/views.py:89 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." @@ -350,7 +385,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: motions/views.py:94 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." @@ -359,15 +394,40 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: motions/views.py:118 -msgid "Released the motion(s)." +#: motions/views.py +msgid "Motions cannot be copied to the first round." msgstr "" -#: motions/views.py:125 -msgid "Unreleased the motion(s)." -msgstr "" +#: motions/views.py +#, python-format +msgid "Reused the motion from the previous round." +msgid_plural "Reused the %(count)d motions from the previous round." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: motions/views.py:149 +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/views.py msgid "Round Motions" msgstr "" +#: motions/views.py +msgid "Motion Statistics" +msgstr "" + diff --git a/tabbycat/notifications/locale/he/LC_MESSAGES/django.po b/tabbycat/notifications/locale/he/LC_MESSAGES/django.po index 2bea923ab3c..66a58f4c8d3 100644 --- a/tabbycat/notifications/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:35\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -15,349 +15,367 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/notifications/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" msgstr "" -#: notifications/consumers.py:37 -msgid "Failed to send e-mails." -msgstr "" - -#: notifications/consumers.py:40 -msgid "Connection error sending e-mails." -msgstr "" - -#: notifications/forms.py:11 +#: notifications/forms.py msgid "Recipient email address" msgstr "" -#: notifications/forms.py:15 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" msgstr "" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" msgstr "" -#: notifications/forms.py:29 +#: notifications/forms.py msgid "Subject" msgstr "" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Message" msgstr "" -#: notifications/models.py:12 notifications/models.py:27 +#: notifications/models.py msgid "email" msgstr "" -#: notifications/models.py:13 +#: notifications/models.py msgid "SMS" msgstr "" -#: notifications/models.py:22 +#: notifications/models.py msgid "recipient" msgstr "" -#: notifications/models.py:24 +#: notifications/models.py msgid "method" msgstr "" -#: notifications/models.py:29 notifications/models.py:130 +#: notifications/models.py msgid "context" msgstr "" -#: notifications/models.py:31 -msgid "message" -msgstr "" - -#: notifications/models.py:34 +#: notifications/models.py msgid "notification" msgstr "" -#: notifications/models.py:36 notifications/models.py:75 -#: notifications/models.py:126 +#: notifications/models.py msgid "timestamp" msgstr "" -#: notifications/models.py:39 +#: notifications/models.py msgid "sent message" msgstr "" -#: notifications/models.py:40 +#: notifications/models.py msgid "sent messages" msgstr "" -#: notifications/models.py:60 +#: notifications/models.py msgid "team points" msgstr "" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot confirmed" msgstr "" -#: notifications/models.py:62 +#: notifications/models.py msgid "feedback URL" msgstr "" -#: notifications/models.py:63 +#: notifications/models.py msgid "ballot URL" msgstr "" -#: notifications/models.py:64 +#: notifications/models.py msgid "landing page URL" msgstr "" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator draw released" msgstr "" -#: notifications/models.py:66 +#: notifications/models.py msgid "team registration" msgstr "" -#: notifications/models.py:67 +#: notifications/models.py msgid "adjudicator registration" msgstr "" -#: notifications/models.py:68 +#: notifications/models.py msgid "motion(s) released" msgstr "" -#: notifications/models.py:69 +#: notifications/models.py msgid "team draw released" msgstr "" -#: notifications/models.py:73 notifications/models.py:128 +#: notifications/models.py +msgid "custom message" +msgstr "" + +#: notifications/models.py msgid "event" msgstr "" -#: notifications/models.py:78 +#: notifications/models.py msgid "tournament" msgstr "טורניר" -#: notifications/models.py:80 +#: notifications/models.py msgid "round" msgstr "סיבוב" -#: notifications/models.py:83 +#: notifications/models.py +msgid "subject template" +msgstr "" + +#: notifications/models.py +msgid "body template" +msgstr "" + +#: notifications/models.py msgid "bulk notification" msgstr "" -#: notifications/models.py:84 +#: notifications/models.py msgid "bulk notifications" msgstr "" -#: notifications/models.py:110 +#: notifications/models.py msgid "Processed" msgstr "" -#: notifications/models.py:111 +#: notifications/models.py msgid "Dropped" msgstr "" -#: notifications/models.py:112 +#: notifications/models.py msgid "Deferred" msgstr "" -#: notifications/models.py:113 +#: notifications/models.py msgid "Delivered" msgstr "" -#: notifications/models.py:114 +#: notifications/models.py msgid "Bounced" msgstr "" -#: notifications/models.py:115 +#: notifications/models.py msgid "Opened" msgstr "" -#: notifications/models.py:116 +#: notifications/models.py msgid "Clicked" msgstr "" -#: notifications/models.py:117 +#: notifications/models.py msgid "Unsubscribed" msgstr "" -#: notifications/models.py:118 +#: notifications/models.py msgid "Marked as spam" msgstr "" -#: notifications/models.py:119 +#: notifications/models.py msgid "Unsubscribed from group" msgstr "" -#: notifications/models.py:120 +#: notifications/models.py msgid "Resubscribed to group" msgstr "" -#: notifications/models.py:124 +#: notifications/models.py msgid "email message" msgstr "" -#: notifications/models.py:133 +#: notifications/models.py msgid "email status" msgstr "" -#: notifications/models.py:134 +#: notifications/models.py msgid "email statuses" msgstr "" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." msgstr "" -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." msgstr "" -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" msgstr "" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." msgstr "" -#: notifications/templates/notifications_nav.html:5 notifications/views.py:47 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" msgstr "" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:24 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" msgstr "" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" msgstr "" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" msgstr "" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." msgstr "" -#: notifications/templates/test_email.html:25 +#: notifications/templates/test_email.html +#, python-format +msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." +msgstr "" + +#: notifications/templates/test_email.html msgid "Go back to the site home page" msgstr "" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "the chair" msgstr "" -#: notifications/utils.py:30 +#: notifications/utils.py msgid "the only" msgstr "" -#: notifications/utils.py:31 +#: notifications/utils.py msgid "a panellist" msgstr "" -#: notifications/utils.py:32 +#: notifications/utils.py msgid "a trainee" msgstr "" -#: notifications/utils.py:55 +#: notifications/utils.py msgid "TBA" msgstr "" -#: notifications/utils.py:101 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "" -#: notifications/utils.py:112 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:116 +#: notifications/utils.py msgid "Win" msgstr "" -#: notifications/utils.py:116 +#: notifications/utils.py msgid "Loss" msgstr "" -#: notifications/utils.py:128 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " msgstr "" -#: notifications/utils.py:202 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " msgstr "" -#: notifications/utils.py:237 notifications/utils.py:238 +#: notifications/utils.py msgid ", " msgstr "" -#: notifications/views.py:39 +#: notifications/views.py +#, python-format +msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" +msgstr "" + +#: notifications/views.py +msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." +msgstr "" + +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" msgstr "" -#: notifications/views.py:42 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." msgstr "" -#: notifications/views.py:53 +#: notifications/views.py msgid "N/A" msgstr "" -#: notifications/views.py:54 +#: notifications/views.py msgid "Not known" msgstr "" -#: notifications/views.py:59 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" msgstr "" -#: notifications/views.py:102 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "" -#: notifications/views.py:119 +#: notifications/views.py msgid "Timeline" msgstr "" -#: notifications/views.py:129 notifications/views.py:220 +#: notifications/views.py msgid "Participant" msgstr "" -#: notifications/views.py:130 +#: notifications/views.py +msgid "Email address" +msgstr "" + +#: notifications/views.py msgid "Status" msgstr "" -#: notifications/views.py:131 +#: notifications/views.py msgid "Time" msgstr "" -#: notifications/views.py:170 +#: notifications/views.py msgid "Email Participants" msgstr "" -#: notifications/views.py:196 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." @@ -366,39 +384,35 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: notifications/views.py:202 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." msgstr "" -#: notifications/views.py:210 +#: notifications/views.py msgid "Send Email" msgstr "" -#: notifications/views.py:225 -msgid "Email Address" -msgstr "" - -#: notifications/views.py:226 +#: notifications/views.py msgid "Not Provided" msgstr "" -#: notifications/views.py:239 +#: notifications/views.py msgid "Role" msgstr "" -#: notifications/views.py:240 +#: notifications/views.py msgid "Adjudicator" msgstr "" -#: notifications/views.py:240 +#: notifications/views.py msgid "Speaker" msgstr "דובר/ת" -#: notifications/views.py:248 +#: notifications/views.py msgid "Speakers" msgstr "דובר/תים" -#: notifications/views.py:249 +#: notifications/views.py msgid "Adjudicators" msgstr "" diff --git a/tabbycat/options/locale/he/LC_MESSAGES/django.po b/tabbycat/options/locale/he/LC_MESSAGES/django.po index 0a7a7d87ba8..49b16f903af 100644 --- a/tabbycat/options/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:32\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -15,1438 +15,1603 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/options/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" msgstr "" -#: options/models.py:13 +#: options/models.py msgid "instance" msgstr "" -#: options/models.py:18 +#: options/models.py msgid "tournament preference" msgstr "" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" msgstr "" -#: options/preferences.py:18 options/templates/preferences_index.html:28 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" msgstr "" -#: options/preferences.py:24 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:27 +#: options/preferences.py msgid "Minimum speaker score" msgstr "" -#: options/preferences.py:33 +#: options/preferences.py msgid "Maximum speaker score" msgstr "" -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:42 +#: options/preferences.py msgid "Speaker score step" msgstr "" -#: options/preferences.py:43 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:51 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" msgstr "" -#: options/preferences.py:52 +#: options/preferences.py msgid "Maximum margin" msgstr "" -#: options/preferences.py:61 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" msgstr "" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum reply score" msgstr "" -#: options/preferences.py:70 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" msgstr "" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum reply score" msgstr "" -#: options/preferences.py:79 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:80 +#: options/preferences.py msgid "Reply score step" msgstr "" -#: options/preferences.py:88 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" msgstr "" -#: options/preferences.py:89 +#: options/preferences.py msgid "Margin includes dissenters" msgstr "" -#: options/preferences.py:96 options/templates/preferences_index.html:33 +#: options/preferences.py +msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" +msgstr "" + +#: options/preferences.py +msgid "Team score includes ghosts" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" msgstr "" -#: options/preferences.py:102 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" msgstr "" -#: options/preferences.py:103 +#: options/preferences.py msgid "Minimum adjudicator score to vote" msgstr "" -#: options/preferences.py:111 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" msgstr "" -#: options/preferences.py:112 +#: options/preferences.py msgid "Adjudicator conflict penalty" msgstr "" -#: options/preferences.py:120 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" msgstr "" -#: options/preferences.py:121 +#: options/preferences.py msgid "Adjudicator history penalty" msgstr "" -#: options/preferences.py:129 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" msgstr "" -#: options/preferences.py:130 +#: options/preferences.py msgid "Importance mismatch penalty" msgstr "" -#: options/preferences.py:138 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" msgstr "" -#: options/preferences.py:139 +#: options/preferences.py msgid "Team institution penalty" msgstr "" -#: options/preferences.py:147 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" msgstr "" -#: options/preferences.py:148 +#: options/preferences.py msgid "Team history penalty" msgstr "" -#: options/preferences.py:156 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" msgstr "" -#: options/preferences.py:157 +#: options/preferences.py msgid "Avoid same institution" msgstr "" -#: options/preferences.py:165 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" msgstr "" -#: options/preferences.py:166 +#: options/preferences.py msgid "Avoid team history" msgstr "" -#: options/preferences.py:174 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "" -#: options/preferences.py:175 +#: options/preferences.py msgid "Odd bracket resolution method" msgstr "" -#: options/preferences.py:179 +#: options/preferences.py msgid "Pull up from top" msgstr "" -#: options/preferences.py:180 +#: options/preferences.py msgid "Pull up from bottom" msgstr "" -#: options/preferences.py:181 +#: options/preferences.py msgid "Pull up from middle" msgstr "" -#: options/preferences.py:182 +#: options/preferences.py msgid "Pull up at random" msgstr "" -#: options/preferences.py:183 +#: options/preferences.py msgid "Intermediate brackets" msgstr "" -#: options/preferences.py:184 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" msgstr "" -#: options/preferences.py:185 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" msgstr "" -#: options/preferences.py:186 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" msgstr "" -#: options/preferences.py:193 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" msgstr "" -#: options/preferences.py:194 +#: options/preferences.py msgid "Side allocations method" msgstr "" -#: options/preferences.py:198 options/preferences.py:215 +#: options/preferences.py msgid "Random" msgstr "" -#: options/preferences.py:199 +#: options/preferences.py msgid "Balance" msgstr "" -#: options/preferences.py:200 +#: options/preferences.py msgid "Pre-allocated" msgstr "" -#: options/preferences.py:201 +#: options/preferences.py msgid "Manually enter from ballot" msgstr "" -#: options/preferences.py:208 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." msgstr "" -#: options/preferences.py:209 +#: options/preferences.py msgid "Pairing method" msgstr "" -#: options/preferences.py:213 +#: options/preferences.py msgid "Slide" msgstr "" -#: options/preferences.py:214 +#: options/preferences.py msgid "Fold" msgstr "" -#: options/preferences.py:216 +#: options/preferences.py msgid "Adjacent" msgstr "" -#: options/preferences.py:217 +#: options/preferences.py msgid "Fold top, adjacent rest" msgstr "" -#: options/preferences.py:224 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" msgstr "" -#: options/preferences.py:226 +#: options/preferences.py msgid "Conflict avoidance method" msgstr "" -#: options/preferences.py:230 +#: options/preferences.py msgid "Off" msgstr "" -#: options/preferences.py:231 +#: options/preferences.py msgid "One-up-one-down" msgstr "" -#: options/preferences.py:238 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "" -#: options/preferences.py:240 +#: options/preferences.py msgid "Pullup restriction" msgstr "" -#: options/preferences.py:244 +#: options/preferences.py msgid "No restriction" msgstr "" -#: options/preferences.py:245 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" msgstr "" -#: options/preferences.py:246 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" msgstr "" -#: options/preferences.py:247 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" msgstr "" -#: options/preferences.py:254 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." msgstr "" -#: options/preferences.py:255 +#: options/preferences.py msgid "BP pullup distribution" msgstr "" -#: options/preferences.py:259 +#: options/preferences.py msgid "Anywhere in bracket" msgstr "" -#: options/preferences.py:260 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" msgstr "" -#: options/preferences.py:267 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" msgstr "" -#: options/preferences.py:268 +#: options/preferences.py msgid "BP position cost" msgstr "" -#: options/preferences.py:272 +#: options/preferences.py msgid "Simple" msgstr "" -#: options/preferences.py:273 +#: options/preferences.py msgid "Rényi entropy" msgstr "" -#: options/preferences.py:274 +#: options/preferences.py msgid "Population variance" msgstr "" -#: options/preferences.py:281 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." msgstr "" -#: options/preferences.py:284 +#: options/preferences.py msgid "Rényi order (BP)" msgstr "" -#: options/preferences.py:293 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." msgstr "" -#: options/preferences.py:296 +#: options/preferences.py msgid "BP position cost exponent" msgstr "" -#: options/preferences.py:305 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." msgstr "" -#: options/preferences.py:307 +#: options/preferences.py msgid "BP assignment method" msgstr "" -#: options/preferences.py:311 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" msgstr "" -#: options/preferences.py:312 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" msgstr "" -#: options/preferences.py:319 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" msgstr "" -#: options/preferences.py:320 +#: options/preferences.py msgid "Skip adjudicator check-ins" msgstr "" -#: options/preferences.py:328 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:329 +#: options/preferences.py msgid "No panellist adjudicators" msgstr "" -#: options/preferences.py:337 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:338 +#: options/preferences.py msgid "No trainee adjudicators" msgstr "" -#: options/preferences.py:345 options/templates/preferences_index.html:48 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" msgstr "" -#: options/preferences.py:351 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:352 +#: options/preferences.py msgid "Minimum adjudicator score" msgstr "" -#: options/preferences.py:360 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:361 +#: options/preferences.py msgid "Maximum adjudicator score" msgstr "" -#: options/preferences.py:369 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" msgstr "" -#: options/preferences.py:370 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" msgstr "" -#: options/preferences.py:374 +#: options/preferences.py msgid "Chairs on panellists and trainees" msgstr "" -#: options/preferences.py:375 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" msgstr "" -#: options/preferences.py:376 +#: options/preferences.py +msgid "Panellists and trainees on chairs, vice-versa" +msgstr "" + +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" msgstr "" -#: options/preferences.py:383 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "" -#: options/preferences.py:384 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" msgstr "" -#: options/preferences.py:388 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" msgstr "" -#: options/preferences.py:389 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" msgstr "" -#: options/preferences.py:396 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" msgstr "" -#: options/preferences.py:397 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" msgstr "" -#: options/preferences.py:405 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" msgstr "" -#: options/preferences.py:406 +#: options/preferences.py msgid "Show unaccredited" msgstr "" -#: options/preferences.py:414 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" msgstr "" -#: options/preferences.py:415 +#: options/preferences.py msgid "Feedback introduction/explanation" msgstr "" -#: options/preferences.py:423 options/templates/preferences_index.html:38 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" msgstr "" -#: options/preferences.py:429 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" msgstr "" -#: options/preferences.py:430 +#: options/preferences.py msgid "Teams in debate" msgstr "" -#: options/preferences.py:434 +#: options/preferences.py msgid "Two-team format" msgstr "" -#: options/preferences.py:435 +#: options/preferences.py msgid "British Parliamentary (four teams)" msgstr "" -#: options/preferences.py:442 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:443 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" msgstr "" -#: options/preferences.py:447 options/preferences.py:460 +#: options/preferences.py msgid "One ballot per voting adjudicator" msgstr "" -#: options/preferences.py:448 options/preferences.py:461 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" msgstr "" -#: options/preferences.py:455 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:456 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" msgstr "" -#: options/preferences.py:468 +#: options/preferences.py +msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." +msgstr "" + +#: options/preferences.py +msgid "Winner Declaration in ballot(s)" +msgstr "" + +#: options/preferences.py +msgid "Do not require separate winner selection" +msgstr "" + +#: options/preferences.py +msgid "Require separate winner selection as a check on correct scores" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection to break tied-point debates" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection, overriding scores" +msgstr "" + +#: options/preferences.py +msgid "When ballots should ask for speaker scores." +msgstr "" + +#: options/preferences.py +msgid "Require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Always require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Only require speaker scores in preliminary rounds" +msgstr "" + +#: options/preferences.py +msgid "Never require speaker scores" +msgstr "" + +#: options/preferences.py msgid "How many substantive speakers on a team" msgstr "" -#: options/preferences.py:469 +#: options/preferences.py msgid "Substantive speakers" msgstr "" -#: options/preferences.py:477 +#: options/preferences.py msgid "What to call the teams" msgstr "" -#: options/preferences.py:478 +#: options/preferences.py msgid "Side names" msgstr "" -#: options/preferences.py:487 +#: options/preferences.py msgid "Whether this style features scored reply speeches" msgstr "" -#: options/preferences.py:488 +#: options/preferences.py msgid "Reply scores" msgstr "" -#: options/preferences.py:496 -msgid "Enables the motion veto field on ballots, to track veto statistics" +#: options/preferences.py +msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" msgstr "" -#: options/preferences.py:497 -msgid "Motion vetoes" +#: options/preferences.py +msgid "Require reply speaker to have given a substantive speech" msgstr "" -#: options/preferences.py:504 options/templates/preferences_index.html:43 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "" -#: options/preferences.py:510 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" msgstr "" -#: options/preferences.py:511 +#: options/preferences.py msgid "Speeches missable for standings eligibility" msgstr "" -#: options/preferences.py:519 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" msgstr "" -#: options/preferences.py:520 +#: options/preferences.py msgid "Replies missable for standings eligibility" msgstr "" -#: options/preferences.py:528 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" msgstr "" -#: options/preferences.py:529 +#: options/preferences.py msgid "Team standings precedence" msgstr "" -#: options/preferences.py:545 options/preferences.py:580 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" msgstr "" -#: options/preferences.py:551 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" msgstr "" -#: options/preferences.py:552 +#: options/preferences.py msgid "Team standings extra metrics" msgstr "" -#: options/preferences.py:563 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" msgstr "" -#: options/preferences.py:564 +#: options/preferences.py msgid "Speaker standings precedence" msgstr "" -#: options/preferences.py:586 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" msgstr "" -#: options/preferences.py:587 +#: options/preferences.py msgid "Speaker standings extra metrics" msgstr "" -#: options/preferences.py:597 options/templates/preferences_index.html:59 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" msgstr "" -#: options/preferences.py:603 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:604 +#: options/preferences.py msgid "Release team tab to public" msgstr "" -#: options/preferences.py:612 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." msgstr "" -#: options/preferences.py:613 +#: options/preferences.py msgid "Top teams cutoff" msgstr "" -#: options/preferences.py:621 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:622 +#: options/preferences.py msgid "Release speaker tab to public" msgstr "" -#: options/preferences.py:630 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." msgstr "" -#: options/preferences.py:631 +#: options/preferences.py msgid "Top speakers cutoff" msgstr "" -#: options/preferences.py:639 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:640 +#: options/preferences.py msgid "Release replies tab to public" msgstr "" -#: options/preferences.py:648 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." msgstr "" -#: options/preferences.py:649 +#: options/preferences.py msgid "Top replies cutoff" msgstr "" -#: options/preferences.py:675 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." msgstr "" -#: options/preferences.py:678 +#: options/preferences.py msgid "Release motions tab to public" msgstr "" -#: options/preferences.py:686 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" msgstr "" -#: options/preferences.py:687 +#: options/preferences.py msgid "Release adjudicator tab to public" msgstr "" -#: options/preferences.py:695 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" msgstr "" -#: options/preferences.py:696 +#: options/preferences.py msgid "Adjudicator tab displays" msgstr "" -#: options/preferences.py:700 +#: options/preferences.py msgid "Only shows base score" msgstr "" -#: options/preferences.py:701 +#: options/preferences.py msgid "Only shows final score" msgstr "" -#: options/preferences.py:702 +#: options/preferences.py msgid "Shows base, final, and per-round scores" msgstr "" -#: options/preferences.py:709 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." msgstr "" -#: options/preferences.py:710 +#: options/preferences.py msgid "Release ballots to public" msgstr "" -#: options/preferences.py:718 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" msgstr "" -#: options/preferences.py:719 +#: options/preferences.py msgid "Release all round results to public" msgstr "" -#: options/preferences.py:726 options/templates/preferences_index.html:64 +#: options/preferences.py +msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release ballots through private URLs" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" msgstr "" -#: options/preferences.py:732 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" msgstr "" -#: options/preferences.py:733 +#: options/preferences.py msgid "Ballot submissions from adjudicators" msgstr "" -#: options/preferences.py:737 options/preferences.py:751 +#: options/preferences.py msgid "Disabled (tab staff only)" msgstr "" -#: options/preferences.py:738 options/preferences.py:752 +#: options/preferences.py msgid "Use private URLs" msgstr "" -#: options/preferences.py:739 options/preferences.py:753 +#: options/preferences.py msgid "Use publicly accessible form" msgstr "" -#: options/preferences.py:746 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" msgstr "" -#: options/preferences.py:747 +#: options/preferences.py msgid "Feedback submissions from participants" msgstr "" -#: options/preferences.py:760 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" msgstr "" -#: options/preferences.py:761 +#: options/preferences.py msgid "Require password for submission" msgstr "" -#: options/preferences.py:769 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" msgstr "" -#: options/preferences.py:770 +#: options/preferences.py msgid "Password for public submission" msgstr "" -#: options/preferences.py:778 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" msgstr "" -#: options/preferences.py:779 +#: options/preferences.py msgid "Bypass double checking" msgstr "" -#: options/preferences.py:787 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." msgstr "" -#: options/preferences.py:788 +#: options/preferences.py msgid "Enforce blind confirmations" msgstr "" -#: options/preferences.py:796 -msgid "If checked, ballots require a motion to be selected from a list of options. " -msgstr "" - -#: options/preferences.py:797 -msgid "Enable motion selection" -msgstr "" - -#: options/preferences.py:805 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." msgstr "" -#: options/preferences.py:808 +#: options/preferences.py msgid "Assistant user access" msgstr "" -#: options/preferences.py:813 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" msgstr "" -#: options/preferences.py:814 +#: options/preferences.py msgid "Just results entry and draw display" msgstr "" -#: options/preferences.py:815 +#: options/preferences.py msgid "Only results entry" msgstr "" -#: options/preferences.py:821 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." msgstr "" -#: options/preferences.py:822 +#: options/preferences.py msgid "Participant self-checkin" msgstr "" -#: options/preferences.py:830 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" msgstr "" -#: options/preferences.py:833 +#: options/preferences.py msgid "Check-In Window (People)" msgstr "" -#: options/preferences.py:839 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" msgstr "" -#: options/preferences.py:842 +#: options/preferences.py msgid "Check-In Window (Rooms)" msgstr "" -#: options/preferences.py:848 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" msgstr "" -#: options/preferences.py:849 +#: options/preferences.py msgid "Ballot Digit Checks" msgstr "" -#: options/preferences.py:857 -msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" -msgstr "" - -#: options/preferences.py:858 -msgid "Ballot Hide Motions" -msgstr "" - -#: options/preferences.py:866 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:867 +#: options/preferences.py msgid "Score return location" msgstr "" -#: options/preferences.py:875 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:876 +#: options/preferences.py msgid "Feedback return location" msgstr "" -#: options/preferences.py:883 options/templates/preferences_index.html:69 +#: options/preferences.py +msgid "Lets debates have their status as postponed, as to not block draw generation." +msgstr "" + +#: options/preferences.py +msgid "Enable postponements" +msgstr "" + +#: options/preferences.py +msgid "Have each voting adjudicator submit a separate ballot." +msgstr "" + +#: options/preferences.py +msgid "Individual voting ballots" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" msgstr "" -#: options/preferences.py:889 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" msgstr "" -#: options/preferences.py:890 +#: options/preferences.py msgid "Enable public view of participants list" msgstr "" -#: options/preferences.py:898 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" msgstr "" -#: options/preferences.py:899 +#: options/preferences.py msgid "Enable public view of institutions list" msgstr "" -#: options/preferences.py:907 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" msgstr "" -#: options/preferences.py:908 +#: options/preferences.py msgid "Enable public view of diversity info" msgstr "" -#: options/preferences.py:916 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." msgstr "" -#: options/preferences.py:919 +#: options/preferences.py msgid "Enable public view of the checkin statuses" msgstr "" -#: options/preferences.py:927 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" msgstr "" -#: options/preferences.py:928 +#: options/preferences.py msgid "Show break categories on participants page" msgstr "" -#: options/preferences.py:936 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" msgstr "" -#: options/preferences.py:937 +#: options/preferences.py msgid "Show pre-allocated sides to public" msgstr "" -#: options/preferences.py:945 +#: options/preferences.py msgid "Enables the public page showing released draws" msgstr "" -#: options/preferences.py:946 +#: options/preferences.py msgid "Enable public view of draw" msgstr "" -#: options/preferences.py:950 +#: options/preferences.py msgid "Disabled" msgstr "" -#: options/preferences.py:951 +#: options/preferences.py msgid "Show a single page for the current round's draw" msgstr "" -#: options/preferences.py:952 +#: options/preferences.py msgid "Show individual pages for all released draws" msgstr "" -#: options/preferences.py:959 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" msgstr "" -#: options/preferences.py:960 +#: options/preferences.py msgid "Enable public view of results" msgstr "" -#: options/preferences.py:968 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" msgstr "" -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of motions" msgstr "" -#: options/preferences.py:977 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" msgstr "" -#: options/preferences.py:978 +#: options/preferences.py msgid "Enable public view of team standings" msgstr "" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" msgstr "" -#: options/preferences.py:987 +#: options/preferences.py msgid "Enable public record pages" msgstr "" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:996 +#: options/preferences.py msgid "Release team breaks to public" msgstr "" -#: options/preferences.py:1004 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1005 +#: options/preferences.py msgid "Release adjudicators break to public" msgstr "" -#: options/preferences.py:1013 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" msgstr "" -#: options/preferences.py:1014 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" msgstr "" -#: options/preferences.py:1022 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." msgstr "" -#: options/preferences.py:1023 +#: options/preferences.py msgid "Tournament staff" msgstr "" -#: options/preferences.py:1033 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" msgstr "" -#: options/preferences.py:1034 +#: options/preferences.py msgid "Welcome message" msgstr "" -#: options/preferences.py:1043 options/templates/preferences_index.html:74 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" msgstr "" -#: options/preferences.py:1049 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" msgstr "" -#: options/preferences.py:1050 +#: options/preferences.py msgid "Show splitting adjudicators" msgstr "" -#: options/preferences.py:1058 -msgid "If showing results to public, show which motions were selected in the record" -msgstr "" - -#: options/preferences.py:1059 -msgid "Show motions in results" -msgstr "" - -#: options/preferences.py:1067 +#: options/preferences.py msgid "Whether and how to use code names for teams" msgstr "" -#: options/preferences.py:1068 +#: options/preferences.py msgid "Team code names" msgstr "" -#: options/preferences.py:1073 +#: options/preferences.py msgid "Do not use code names" msgstr "" -#: options/preferences.py:1074 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" msgstr "" -#: options/preferences.py:1075 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" msgstr "" -#: options/preferences.py:1077 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" msgstr "" -#: options/preferences.py:1079 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" msgstr "" -#: options/preferences.py:1085 +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" msgstr "" -#: options/preferences.py:1086 +#: options/preferences.py msgid "Show emoji" msgstr "" -#: options/preferences.py:1094 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" msgstr "" -#: options/preferences.py:1095 +#: options/preferences.py msgid "Show team institutions" msgstr "" -#: options/preferences.py:1103 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" msgstr "" -#: options/preferences.py:1104 +#: options/preferences.py msgid "Show adjudicator institutions" msgstr "" -#: options/preferences.py:1112 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" msgstr "" -#: options/preferences.py:1113 +#: options/preferences.py msgid "Show speakers in draw" msgstr "" -#: options/preferences.py:1121 -msgid "Order in which are listed by round in the public view" -msgstr "" - -#: options/preferences.py:1122 -msgid "Order to display motions" -msgstr "" - -#: options/preferences.py:1126 -msgid "Earliest round first" -msgstr "" - -#: options/preferences.py:1127 -msgid "Latest round first" -msgstr "" - -#: options/preferences.py:1133 options/templates/preferences_index.html:79 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" msgstr "" -#: options/preferences.py:1139 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "" -#: options/preferences.py:1140 +#: options/preferences.py msgid "Reply-to name" msgstr "" -#: options/preferences.py:1148 +#: options/preferences.py msgid "The email address for handling replies" msgstr "" -#: options/preferences.py:1149 +#: options/preferences.py msgid "Reply-to address" msgstr "" -#: options/preferences.py:1157 +#: options/preferences.py msgid "A secret key to accept email status events" msgstr "" -#: options/preferences.py:1158 +#: options/preferences.py msgid "Email status secret key" msgstr "" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "" -#: options/preferences.py:1169 +#: options/preferences.py msgid "Ballot receipts" msgstr "" -#: options/preferences.py:1177 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "" -#: options/preferences.py:1179 +#: options/preferences.py msgid "Ballot receipt subject line" msgstr "" -#: options/preferences.py:1187 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "" -#: options/preferences.py:1188 +#: options/preferences.py msgid "Ballot receipt message" msgstr "" -#: options/preferences.py:1204 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1205 +#: options/preferences.py msgid "Team points subject line" msgstr "" -#: options/preferences.py:1212 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1213 +#: options/preferences.py msgid "Team points message" msgstr "" -#: options/preferences.py:1222 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1223 +#: options/preferences.py msgid "Adjudicator draw subject line" msgstr "" -#: options/preferences.py:1230 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1231 +#: options/preferences.py msgid "Adjudicator draw message" msgstr "" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." msgstr "" -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team draw subject line" msgstr "" -#: options/preferences.py:1248 options/preferences.py:1266 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1249 options/preferences.py:1267 +#: options/preferences.py msgid "Private URL notification message" msgstr "" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1259 +#: options/preferences.py msgid "Private URL notification subject line" msgstr "" -#: options/preferences.py:1280 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1281 +#: options/preferences.py msgid "Motion release notification subject line" msgstr "" -#: options/preferences.py:1288 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1289 +#: options/preferences.py msgid "Motion release notification message" msgstr "" -#: options/preferences.py:1297 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1298 +#: options/preferences.py msgid "Team registration notification subject line" msgstr "" -#: options/preferences.py:1305 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1306 +#: options/preferences.py msgid "Team registration notification message" msgstr "" -#: options/presets.py:32 options/presets.py:351 +#: options/preferences.py options/templates/preferences_index.html +msgid "Motions" +msgstr "" + +#: options/preferences.py +msgid "If checked, ballots require a motion to be entered" +msgstr "" + +#: options/preferences.py +msgid "Enable motions" +msgstr "" + +#: options/preferences.py +msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" +msgstr "" + +#: options/preferences.py +msgid "Ballot Hide Motions" +msgstr "" + +#: options/preferences.py +msgid "Enables the motion veto field on ballots, to track veto statistics" +msgstr "" + +#: options/preferences.py +msgid "Motion vetoes" +msgstr "" + +#: options/preferences.py +msgid "If showing results to public, show which motions were selected in the record" +msgstr "" + +#: options/preferences.py +msgid "Show motions in results" +msgstr "" + +#: options/preferences.py +msgid "Order in which are listed by round in the public view" +msgstr "" + +#: options/preferences.py +msgid "Order to display motions" +msgstr "" + +#: options/preferences.py +msgid "Earliest round first" +msgstr "" + +#: options/preferences.py +msgid "Latest round first" +msgstr "" + +#: options/preferences.py +msgid "Whether motions can be reused from one round to another." +msgstr "" + +#: options/preferences.py +msgid "Allow motion reuse" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Global Settings" +msgstr "" + +#: options/preferences.py +msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." +msgstr "" + +#: options/preferences.py +msgid "Enable API access" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Assistant account creation key" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Administrator account creation key" +msgstr "" + +#: options/presets.py msgid "Public Information Options" msgstr "" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" msgstr "" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" msgstr "" -#: options/presets.py:67 +#: options/presets.py msgid "Australs Rules" msgstr "" -#: options/presets.py:68 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:107 +#: options/presets.py msgid "British Parliamentary Rules" msgstr "" -#: options/presets.py:108 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." msgstr "" -#: options/presets.py:148 +#: options/presets.py msgid "Canadian Parliamentary Rules" msgstr "" -#: options/presets.py:150 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." msgstr "" -#: options/presets.py:173 +#: options/presets.py msgid "Australian Easters Rules" msgstr "" -#: options/presets.py:175 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:193 +#: options/presets.py msgid "2 vs 2 Impromptu" msgstr "" -#: options/presets.py:195 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." msgstr "" -#: options/presets.py:220 +#: options/presets.py msgid "3 vs 3 Prepared" msgstr "" -#: options/presets.py:222 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." msgstr "" -#: options/presets.py:249 +#: options/presets.py msgid "UADC Rules" msgstr "" -#: options/presets.py:251 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:287 +#: options/presets.py msgid "WSDC Rules" msgstr "" -#: options/presets.py:289 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:353 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "" -#: options/presets.py:365 +#: options/presets.py msgid "Tab Release Options" msgstr "" -#: options/presets.py:367 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" msgstr "" -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html msgid "Configuration" msgstr "" -#: options/templates/preferences_index.html:10 +#: options/templates/preferences_index.html +#, python-format +msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." +msgstr "" + +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." msgstr "" -#: options/templates/preferences_index.html:29 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" msgstr "" -#: options/templates/preferences_index.html:34 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" msgstr "" -#: options/templates/preferences_index.html:39 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" msgstr "" -#: options/templates/preferences_index.html:44 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" msgstr "" -#: options/templates/preferences_index.html:49 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" msgstr "" -#: options/templates/preferences_index.html:60 +#: options/templates/preferences_index.html +msgid "How and where are motions used" +msgstr "" + +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" msgstr "" -#: options/templates/preferences_index.html:65 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" msgstr "" -#: options/templates/preferences_index.html:70 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" msgstr "" -#: options/templates/preferences_index.html:75 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" msgstr "" -#: options/templates/preferences_index.html:80 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" msgstr "" -#: options/templates/preferences_index.html:92 +#: options/templates/preferences_index.html +msgid "Settings which can affect all tournaments on the site" +msgstr "" + +#: options/templates/preferences_index.html msgid "Manually Set Current Round" msgstr "" -#: options/templates/preferences_index.html:93 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." msgstr "" -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Rounds can be weighted so that certain rounds are worth more team points." +msgstr "" + +#: options/templates/preferences_index.html msgid "Presets" msgstr "" -#: options/templates/preferences_index.html:101 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." msgstr "" -#: options/templates/preferences_index.html:112 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" msgstr "" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" msgstr "" -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" msgstr "" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" msgstr "" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" msgstr "" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" msgstr "" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" msgstr "" -#: options/views.py:43 -msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules settings and change your configuration to use consensus ballots." -msgstr "" - -#: options/views.py:63 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." msgstr "" -#: options/views.py:113 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." msgstr "" diff --git a/tabbycat/participants/locale/he/LC_MESSAGES/django.po b/tabbycat/participants/locale/he/LC_MESSAGES/django.po index 11bc31ce9e5..97cbf53e6f2 100644 --- a/tabbycat/participants/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:34\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -15,13 +15,23 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/participants/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 942\n" -#: participants/admin.py:94 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" msgstr "" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." @@ -30,11 +40,33 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: participants/admin.py:152 participants/admin.py:211 -msgid "Delete URL key" +#: participants/admin.py +msgid "Reset emoji" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d team had their emoji reset." +msgid_plural "%(count)d teams had their emojis reset." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: participants/admin.py +msgid "Reset code name" msgstr "" -#: participants/admin.py:206 +#: participants/admin.py +#, python-format +msgid "%(count)d team had their code name reset." +msgid_plural "%(count)d teams had their code names reset." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." @@ -43,446 +75,436 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: participants/apps.py:7 participants/views.py:40 +#: participants/apps.py participants/views.py msgid "Participants" msgstr "" -#: participants/models.py:20 participants/models.py:36 -#: participants/models.py:65 participants/models.py:95 +#: participants/models.py msgid "name" msgstr "" -#: participants/models.py:23 participants/models.py:44 +#: participants/models.py msgid "region" msgstr "" -#: participants/models.py:24 +#: participants/models.py msgid "regions" msgstr "" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:38 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" msgstr "" -#: participants/models.py:40 +#: participants/models.py msgid "code" msgstr "" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:42 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" msgstr "" -#: participants/models.py:54 participants/models.py:154 -#: participants/models.py:340 +#: participants/models.py msgid "institution" msgstr "" -#: participants/models.py:55 +#: participants/models.py msgid "institutions" msgstr "" -#: participants/models.py:63 participants/models.py:156 -#: participants/models.py:343 +#: participants/models.py msgid "tournament" msgstr "טורניר" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:67 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" msgstr "" -#: participants/models.py:69 +#: participants/models.py msgid "slug" msgstr "" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:71 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" msgstr "" -#: participants/models.py:73 +#: participants/models.py msgid "sequence number" msgstr "" -#: participants/models.py:74 +#: participants/models.py msgid "The order in which the categories are displayed" msgstr "" -#: participants/models.py:76 +#: participants/models.py msgid "limit" msgstr "" -#: participants/models.py:77 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: participants/models.py:79 +#: participants/models.py msgid "public" msgstr "" -#: participants/models.py:80 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" msgstr "" -#: participants/models.py:86 +#: participants/models.py msgid "speaker category" msgstr "" -#: participants/models.py:87 participants/models.py:321 +#: participants/models.py msgid "speaker categories" msgstr "" -#: participants/models.py:97 -msgid "e-mail address" +#: participants/models.py +msgid "email address" msgstr "" -#: participants/models.py:99 +#: participants/models.py msgid "phone" msgstr "" -#: participants/models.py:101 +#: participants/models.py msgid "anonymous" msgstr "" -#: participants/models.py:102 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" msgstr "" -#: participants/models.py:105 +#: participants/models.py +msgid "code name" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py msgid "URL key" msgstr "" -#: participants/models.py:110 +#: participants/models.py msgid "male" msgstr "" -#: participants/models.py:111 +#: participants/models.py msgid "female" msgstr "" -#: participants/models.py:112 +#: participants/models.py msgid "other" msgstr "" -#: participants/models.py:114 +#: participants/models.py msgid "gender" msgstr "" -#: participants/models.py:115 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" msgstr "" -#: participants/models.py:117 +#: participants/models.py msgid "pronoun" msgstr "" -#: participants/models.py:118 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" msgstr "" -#: participants/models.py:121 +#: participants/models.py msgid "person" msgstr "" -#: participants/models.py:122 +#: participants/models.py msgid "persons" msgstr "" -#: participants/models.py:137 +#: participants/models.py msgid "full name/suffix" msgstr "" -#: participants/models.py:138 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:140 +#: participants/models.py msgid "short name/suffix" msgstr "" -#: participants/models.py:141 -msgid "The name shown in the draw. Do not include institution name (see \"uses institutional prefix\" below)" -msgstr "" - -#: participants/models.py:143 -msgid "code name" +#: participants/models.py +msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:144 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" msgstr "" -#: participants/models.py:147 +#: participants/models.py msgid "short name" msgstr "" -#: participants/models.py:148 -msgid "The name shown in the draw, including institution name. (This is autogenerated.)" +#: participants/models.py +msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:150 +#: participants/models.py msgid "long name" msgstr "" -#: participants/models.py:151 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:158 +#: participants/models.py msgid "Uses institutional prefix" msgstr "" -#: participants/models.py:159 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" msgstr "" -#: participants/models.py:161 +#: participants/models.py msgid "break categories" msgstr "" -#: participants/models.py:172 +#: participants/models.py +msgid "institution conflicts" +msgstr "" + +#: participants/models.py msgid "none" msgstr "" -#: participants/models.py:173 +#: participants/models.py msgid "swing" msgstr "" -#: participants/models.py:174 +#: participants/models.py msgid "composite" msgstr "" -#: participants/models.py:175 +#: participants/models.py msgid "bye" msgstr "" -#: participants/models.py:178 +#: participants/models.py msgid "type" msgstr "" -#: participants/models.py:182 +#: participants/models.py msgid "emoji" msgstr "" -#: participants/models.py:196 participants/models.py:319 +#: participants/models.py msgid "team" msgstr "קבוצה" -#: participants/models.py:197 +#: participants/models.py msgid "teams" msgstr "קבוצות" -#: participants/models.py:302 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." msgstr "" -#: participants/models.py:304 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:306 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:324 +#: participants/models.py msgid "speaker" msgstr "דובר/ת" -#: participants/models.py:325 +#: participants/models.py msgid "speakers" msgstr "דובר/תים" -#: participants/models.py:344 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" msgstr "" -#: participants/models.py:346 +#: participants/models.py msgid "base score" -msgstr "" +msgstr "ניקוד בסיסי" -#: participants/models.py:352 -msgid "institution conflicts" +#: participants/models.py +msgid "team conflicts" msgstr "" -#: participants/models.py:356 -msgid "team conflicts" +#: participants/models.py +msgid "adjudicator conflicts" msgstr "" -#: participants/models.py:359 +#: participants/models.py msgid "always trainee" msgstr "" -#: participants/models.py:360 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" msgstr "" -#: participants/models.py:362 +#: participants/models.py msgid "breaking" msgstr "" -#: participants/models.py:364 +#: participants/models.py msgid "independent" msgstr "" -#: participants/models.py:366 +#: participants/models.py msgid "adjudication core" msgstr "" -#: participants/models.py:375 +#: participants/models.py msgid "adjudicator" msgstr "" -#: participants/models.py:376 +#: participants/models.py msgid "adjudicators" msgstr "" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" msgstr "" -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" msgstr "" -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" msgstr "" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" msgstr "" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" msgstr "" -#: participants/templates/adjudicator_registration_card.html:26 -#: participants/templates/team_registration_card.html:57 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:30 -#: participants/templates/team_registration_card.html:61 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" msgstr "" -#: participants/templates/adjudicator_registration_card.html:34 -#: participants/templates/team_registration_card.html:65 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:40 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." msgstr "" -#: participants/templates/adjudicator_registration_card.html:47 -#: participants/templates/team_registration_card.html:74 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:49 -#: participants/templates/team_registration_card.html:76 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr "" -#: participants/templates/adjudicator_registration_card.html:51 -#: participants/templates/adjudicator_registration_card.html:58 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:79 -#: participants/templates/team_registration_card.html:30 -#: participants/templates/team_registration_card.html:41 -#: participants/templates/team_registration_card.html:49 -#: participants/templates/team_registration_card.html:78 -#: participants/templates/team_registration_card.html:85 -#: participants/templates/team_registration_card.html:95 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" msgstr "" -#: participants/templates/adjudicator_registration_card.html:54 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:56 -#: participants/templates/adjudicator_registration_card.html:64 -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/adjudicator_registration_card.html:77 -#: participants/templates/team_registration_card.html:28 -#: participants/templates/team_registration_card.html:39 -#: participants/templates/team_registration_card.html:47 -#: participants/templates/team_registration_card.html:83 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr "" -#: participants/templates/adjudicator_registration_card.html:61 -#: participants/templates/team_registration_card.html:81 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:75 -#: participants/templates/team_registration_card.html:91 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" msgstr "" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:13 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format -msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete these %(objects_name)s." +msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." msgstr "" #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:20 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:32 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:40 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:46 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" msgstr "" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "קבוצות:" -#: participants/templates/current_round/common.html:30 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "" @@ -490,200 +512,272 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: participants/templates/current_round/common.html:39 -#: participants/templates/current_round/common.html:41 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" msgstr "" -#: participants/templates/current_round/common.html:39 -#: participants/templates/current_round/common.html:41 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" msgstr "" -#: participants/templates/current_round/common.html:46 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." msgstr "" -#: participants/templates/current_round/common.html:56 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." msgstr "" -#: participants/templates/current_round/common.html:59 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "" -#: participants/templates/current_round/common.html:63 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "" -#: participants/templates/current_round/common.html:71 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." msgstr "" -#: participants/templates/current_round/round_adj.html:13 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:17 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:23 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:27 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:33 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:37 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:48 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:52 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating as the %(side)s team against %(opponent)s in %(room)s." +msgid "%(team)s is debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating as the %(side)s team against %(opponent)s in %(room)s." +msgid "You are debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating against %(opponent)s in %(room)s." +msgid "%(team)s is debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating against %(opponent)s in %(room)s." +msgid "You are debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:37 +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating as the %(side)s team in %(room)s." +msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:41 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating as the %(side)s team in %(room)s." +msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:47 +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating in %(room)s." +msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:51 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating in %(room)s." +msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." msgstr "" -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" msgstr "" -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" msgstr "" -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:39 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" msgstr "" -#: participants/templates/feedback_progress_panel.html:48 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:55 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." msgstr "" -#: participants/templates/in_this_round.html:8 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" msgstr "" -#: participants/templates/in_this_round.html:12 +#: participants/templates/in_this_round.html +msgid "In This Round" +msgstr "" + +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" msgstr "" -#: participants/templates/in_this_round.html:19 +#: participants/templates/in_this_round.html msgid "Room TBA" msgstr "" -#: participants/templates/in_this_round.html:31 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:50 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." @@ -692,165 +786,180 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: participants/templates/in_this_round.html:56 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." msgstr "" -#: participants/templates/in_this_round.html:71 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:87 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." msgstr "" -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" msgstr "" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" msgstr "" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." msgstr "" -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" msgstr "" -#: participants/templates/participants_subnav.html:26 participants/views.py:134 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" msgstr "" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" msgstr "" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" msgstr "" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." msgstr "" -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." msgstr "" -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" msgstr "" -#: participants/templates/team_registration_card.html:14 +#: participants/templates/team_registration_card.html msgid "Team name:" msgstr "" -#: participants/templates/team_registration_card.html:14 -msgid "Full name:" +#: participants/templates/team_registration_card.html +msgid "Full team name:" msgstr "" -#: participants/templates/team_registration_card.html:18 +#: participants/templates/team_registration_card.html +msgid "Short team name:" +msgstr "" + +#: participants/templates/team_registration_card.html msgid "Code name:" msgstr "" -#: participants/templates/team_registration_card.html:26 +#: participants/templates/team_registration_card.html +msgid "No code name assigned" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Emoji:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "No emoji assigned" +msgstr "" + +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "דובר/תים:" -#: participants/templates/team_registration_card.html:37 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" msgstr "" -#: participants/templates/team_registration_card.html:45 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" msgstr "" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" msgstr "" -#: participants/views.py:45 +#: participants/views.py msgid "Adjudicators" msgstr "" -#: participants/views.py:54 +#: participants/views.py msgid "Speakers" msgstr "דובר/תים" -#: participants/views.py:85 +#: participants/views.py msgid "Institutions" msgstr "" -#: participants/views.py:101 +#: participants/views.py msgid "Code" msgstr "" -#: participants/views.py:102 +#: participants/views.py msgid "Full name" msgstr "" -#: participants/views.py:104 +#: participants/views.py msgid "Region" msgstr "" -#: participants/views.py:106 +#: participants/views.py msgid "Teams" msgstr "קבוצות" -#: participants/views.py:106 +#: participants/views.py msgid "Number of teams" msgstr "" -#: participants/views.py:108 +#: participants/views.py msgid "Adjs" msgstr "" -#: participants/views.py:109 +#: participants/views.py msgid "Number of adjudicators, excluding independents" msgstr "" -#: participants/views.py:111 +#: participants/views.py msgid "IAs" msgstr "" -#: participants/views.py:112 +#: participants/views.py msgid "Number of independent adjudicators" msgstr "" -#: participants/views.py:142 +#: participants/views.py msgid "Code name" msgstr "" -#: participants/views.py:162 +#: participants/views.py msgid "Team Registration" msgstr "" -#: participants/views.py:208 +#: participants/views.py msgid "Results" msgstr "" -#: participants/views.py:213 participants/views.py:247 +#: participants/views.py #, python-format msgid "Record for %(name)s" msgstr "" -#: participants/views.py:244 +#: participants/views.py msgid "Previous Rounds" msgstr "" -#: participants/views.py:333 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" @@ -859,11 +968,11 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: participants/views.py:339 +#: participants/views.py msgid "No changes were made to the categories." msgstr "" -#: participants/views.py:352 +#: participants/views.py msgid "Speaker Category Eligibility" msgstr "" diff --git a/tabbycat/printing/locale/he/LC_MESSAGES/django.po b/tabbycat/printing/locale/he/LC_MESSAGES/django.po index e096e11646d..c248c3e3a32 100644 --- a/tabbycat/printing/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:34\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -15,115 +15,111 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/printing/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" msgstr "" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" msgstr "" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." msgstr "" -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." msgstr "" -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" msgstr "" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" msgstr "" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" msgstr "" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" msgstr "" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" msgstr "" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" msgstr "" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" msgstr "" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" msgstr "" -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" msgstr "" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "" -#: printing/templates/scoresheet_list.html:47 -msgid "\n" -" Editing motions here will not save them permanently — it will only\n" -" update the text used in the printed ballots below. This can be useful if using\n" -" placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print\n" -" ballots with correct motions.\n" -" " +#: printing/templates/scoresheet_list.html +msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." msgstr "" -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" msgstr "" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." msgstr "" -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" msgstr "" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" msgstr "" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "קבוצה" diff --git a/tabbycat/privateurls/locale/he/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/he/LC_MESSAGES/django.po index 24f8c45f260..f5eaa3e0860 100644 --- a/tabbycat/privateurls/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:34\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -15,148 +15,147 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/privateurls/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" msgstr "" -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:144 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" msgstr "" -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." msgstr "" -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" msgstr "" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." msgstr "" -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." msgstr "" -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." msgstr "" -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." msgstr "" -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." msgstr "" -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." msgstr "" -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" msgstr "" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" msgstr "" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "(%(team)s)" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" msgstr "" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." msgstr "" -#: privateurls/templates/public_url_landing.html:61 -msgid "Submit Ballot" +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Submit Ballot for %(round)s" msgstr "" -#: privateurls/templates/public_url_landing.html:67 -#: privateurls/templates/public_url_landing.html:73 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" msgstr "" -#: privateurls/templates/public_url_landing.html:82 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" msgstr "" -#: privateurls/views.py:62 +#: privateurls/views.py msgid "no URL" msgstr "" -#: privateurls/views.py:75 +#: privateurls/views.py msgid "URL" msgstr "" -#: privateurls/views.py:86 +#: privateurls/views.py msgid "Speakers" msgstr "דובר/תים" -#: privateurls/views.py:96 +#: privateurls/views.py msgid "Adjudicators" msgstr "" -#: privateurls/views.py:118 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." msgstr "" -#: privateurls/views.py:125 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." @@ -165,7 +164,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: privateurls/views.py:130 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." @@ -174,11 +173,11 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: privateurls/views.py:161 +#: privateurls/views.py msgid "URL Key" msgstr "" -#: privateurls/views.py:174 +#: privateurls/views.py msgid "Debates" msgstr "" diff --git a/tabbycat/results/locale/he/LC_MESSAGES/django.po b/tabbycat/results/locale/he/LC_MESSAGES/django.po index 3cc7c0b8088..319688b6755 100644 --- a/tabbycat/results/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:34\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:14\n" "Last-Translator: philip_tc\n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -15,57 +15,84 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/results/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 948\n" -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:112 +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py +#, python-format +msgid "Resaved results for %(count)d ballot submission." +msgid_plural "Resaved results for %(count)d ballot submissions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" msgstr "" -#: results/forms.py:44 +#: results/forms.py +msgid "Tournament password" +msgstr "" + +#: results/forms.py msgid "That password isn't correct." msgstr "" -#: results/forms.py:76 +#: results/forms.py msgid "Please enter a whole number." msgstr "" -#: results/forms.py:78 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." msgstr "" -#: results/forms.py:157 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." msgstr "" -#: results/forms.py:163 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." msgstr "" -#: results/forms.py:299 +#: results/forms.py msgid "---------" msgstr "" -#: results/forms.py:301 results/forms.py:303 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" msgstr "" -#: results/forms.py:320 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" msgstr "" -#: results/forms.py:337 +#: results/forms.py +#, python-format +msgid "%(team)s (%(side)s)" +msgstr "" + +#: results/forms.py +msgid "Winner" +msgstr "" + +#: results/forms.py msgid "Mark as a duplicate speech" msgstr "" -#: results/forms.py:472 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." msgstr "" -#: results/forms.py:486 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." @@ -74,324 +101,382 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: results/forms.py:503 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." msgstr "" -#: results/forms.py:510 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." msgstr "" -#: results/forms.py:663 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." msgstr "" -#: results/forms.py:672 +#: results/forms.py +msgid "The declared winner does not correspond to the team with the highest score." +msgstr "" + +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" msgstr "" -#: results/forms.py:682 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:759 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:767 +#: results/forms.py #, python-format -msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." +msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:799 +#: results/forms.py #, python-format -msgid "%(team)s (%(side)s)" +msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:813 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." msgstr "" -#: results/forms.py:820 -msgid "There must be exactly two teams advancing." +#: results/forms.py +#, python-format +msgid "There must be exactly %(n)d team advancing." +msgid_plural "There must be exactly %(n)d teams advancing." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: results/forms.py +msgid "There must be exactly 1 team advancing." msgstr "" -#: results/models.py:32 +#: results/models.py msgid "Tab room" msgstr "" -#: results/models.py:33 +#: results/models.py msgid "Public" msgstr "" -#: results/models.py:37 +#: results/models.py msgid "timestamp" msgstr "" -#: results/models.py:39 +#: results/models.py msgid "version" msgstr "" -#: results/models.py:41 +#: results/models.py msgid "submitter type" msgstr "" -#: results/models.py:43 +#: results/models.py msgid "confirmed" msgstr "" -#: results/models.py:48 +#: results/models.py +msgid "from private URL" +msgstr "" + +#: results/models.py +msgid "from participant" +msgstr "" + +#: results/models.py msgid "submitter" msgstr "" -#: results/models.py:51 +#: results/models.py msgid "confirmer" msgstr "" -#: results/models.py:53 +#: results/models.py msgid "confirm timestamp" msgstr "" -#: results/models.py:55 +#: results/models.py msgid "IP address" msgstr "" -#: results/models.py:92 +#: results/models.py msgid "A tab room ballot must have a user associated." msgstr "" -#: results/models.py:100 +#: results/models.py msgid "debate" msgstr "" -#: results/models.py:102 +#: results/models.py msgid "motion" msgstr "" -#: results/models.py:104 +#: results/models.py msgid "discarded" msgstr "" -#: results/models.py:108 results/models.py:188 results/models.py:226 -#: results/models.py:268 +#: results/models.py +msgid "single adjudicator" +msgstr "" + +#: results/models.py +msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." +msgstr "" + +#: results/models.py msgid "ballot submission" msgstr "" -#: results/models.py:109 +#: results/models.py msgid "ballot submissions" msgstr "" -#: results/models.py:128 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" msgstr "" -#: results/models.py:135 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" msgstr "" -#: results/models.py:190 +#: results/models.py msgid "debate adjudicator" msgstr "" -#: results/models.py:192 results/models.py:228 results/models.py:270 +#: results/models.py msgid "debate team" msgstr "" -#: results/models.py:193 results/models.py:237 results/models.py:273 -msgid "score" +#: results/models.py +msgid "win" msgstr "" -#: results/models.py:194 results/models.py:274 -msgid "position" +#: results/models.py +msgid "margin" msgstr "" -#: results/models.py:200 -msgid "speaker score by adjudicator" +#: results/models.py +msgid "score" msgstr "" -#: results/models.py:201 -msgid "speaker scores by adjudicator" +#: results/models.py +msgid "team score by adjudicator" +msgstr "" + +#: results/models.py +msgid "team scores by adjudicator" msgstr "" -#: results/models.py:215 +#: results/models.py msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." msgstr "" -#: results/models.py:231 -msgid "points" -msgstr "נקודות" +#: results/models.py +msgid "position" +msgstr "" -#: results/models.py:233 -msgid "win" +#: results/models.py +msgid "speaker score by adjudicator" msgstr "" -#: results/models.py:235 -msgid "margin" +#: results/models.py +msgid "speaker scores by adjudicator" msgstr "" -#: results/models.py:239 +#: results/models.py +msgid "points" +msgstr "נקודות" + +#: results/models.py msgid "votes given" msgstr "" -#: results/models.py:241 +#: results/models.py msgid "votes possible" msgstr "" -#: results/models.py:245 +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py msgid "team score" msgstr "" -#: results/models.py:246 +#: results/models.py msgid "team scores" msgstr "" -#: results/models.py:272 +#: results/models.py msgid "speaker" msgstr "דובר/ת" -#: results/models.py:276 +#: results/models.py msgid "ghost" msgstr "" -#: results/models.py:277 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." msgstr "" -#: results/models.py:286 +#: results/models.py msgid "speaker score" msgstr "" -#: results/models.py:287 +#: results/models.py msgid "speaker scores" msgstr "" -#: results/models.py:296 +#: results/models.py msgid "The debate team and speaker must be from the same team." msgstr "" -#: results/models.py:299 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." msgstr "" -#: results/tables.py:17 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" msgstr "" -#: results/tables.py:38 +#: results/tables.py msgid "Status of this debate's ballot" msgstr "" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" msgstr "" -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" msgstr "" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" msgstr "" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" msgstr "" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" msgstr "" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format -msgid "\n" -" A speaker from %(team)s gave multiple speeches in the current round\n" -" " +msgid "A speaker from %(team)s gave multiple speeches in the current round" msgstr "" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" msgstr "" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" msgstr "" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." msgstr "" -#: results/templates/admin_results.html:81 +#: results/templates/admin_results.html +#, python-format +msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." +msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: results/templates/admin_results.html +#, python-format +msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." +msgstr "" + +#: results/templates/admin_results.html +msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." +msgstr "" + +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." msgstr "" -#: results/templates/admin_results.html:89 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." msgstr "" -#: results/templates/admin_results.html:98 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/admin_results.html:105 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:30 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" msgstr "" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:35 -#: results/templates/ballot_entry_base.html:39 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" msgstr "" -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." msgstr "" -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html msgid "Confirm results" msgstr "" -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" msgstr "" -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:74 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." msgstr "" -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" msgstr "" -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "" -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." msgstr "" -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "" -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." @@ -400,7 +485,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." @@ -409,44 +494,78 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:41 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:44 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" msgstr "" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." +#: results/templates/ballot/ballot_set.html +msgid "There are some problems with this scoresheet. Please review and correct them." msgstr "" -#: results/templates/ballot/bp_elimination_ballot.html:6 -#: results/templates/ballot/standard_ballot_set.html:6 -msgid "There are some problems with this scoresheet. Please review and correct them." +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s (%(institution)s)" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s" msgstr "" -#: results/templates/ballot/bp_elimination_ballot.html:12 -msgid "Advancing Teams" +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html +msgid "Scoresheet" msgstr "" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/ballot_set.html +msgid "Solo Chair" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Chair" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Panellist" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Trainee" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Assign sides before entering scores" +msgstr "" + +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "There is %(number)s existing ballot set for this debate." msgid_plural "There are %(number)s existing ballot sets for this debate." @@ -455,61 +574,65 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: results/templates/ballot/other_ballots_list.html:19 -#, python-format -msgid "There are %(number)s ballot sets for this debate." -msgstr "" - -#: results/templates/ballot/other_ballots_list.html:29 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." msgstr "" -#: results/templates/ballot/other_ballots_list.html:34 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." msgstr "" -#: results/templates/ballot/other_ballots_list.html:49 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:52 +#: results/templates/ballot/other_ballots_list.html +msgid "MERGING" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:57 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:61 +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "submitted from %(adjudicator)s's private URL," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:66 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," msgstr "" -#: results/templates/ballot/other_ballots_list.html:71 -#, python-format -msgid "confirmed by %(confirmer)s" +#: results/templates/ballot/other_ballots_list.html +msgid "unknown" msgstr "" -#: results/templates/ballot/other_ballots_list.html:75 -msgid "confirmed by unknown confirmer" +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "confirmed by %(confirmer)s" msgstr "" -#: results/templates/ballot/other_ballots_list.html:77 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" msgstr "" -#: results/templates/ballot/other_ballots_list.html:81 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" msgstr "" -#: results/templates/ballot/other_ballots_list.html:85 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" @@ -518,224 +641,176 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: results/templates/ballot/standard_ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 -#, python-format -msgid "Ballot from %(name)s (%(institution)s)" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 -#, python-format -msgid "Ballot from %(name)s" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 -msgid "Scoresheet" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -msgid "Solo Chair" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 -msgid "Chair" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 -msgid "Panellist" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -msgid "Trainee" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:44 -msgid "Assign sides before entering scores" -msgstr "" - -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." msgstr "" -#: results/templates/ballot_entry_base.html:8 -#, python-format -msgid "New Ballot Set for %(debate)s" -msgstr "" - -#: results/templates/ballot_entry_base.html:12 -#, python-format -msgid "Edit Ballot Set for %(debate)s" -msgstr "" - -#: results/templates/ballot_entry_base.html:19 -#, python-format -msgid "%(room)s: %(debate)s" -msgstr "" - -#: results/templates/ballot_entry_base.html:48 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr "" -#: results/templates/ballot_entry_base.html:58 -#, python-format -msgid "In the grand-final rounds of a British Parliamentary format this form will not let you nominate a single winner. To work around this, you need to first nominate a second 'fake' winner in this ballot and save/complete the ballot as normal. To then correct this result, you go to the Team Scores page of the Edit Database area, click the Team Score of the 'fake' winner of this debate, set the Win field to No, and then Save the change." -msgstr "" - -#: results/templates/ballot_entry_base.html:72 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." msgstr "" -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" msgstr "" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" msgstr "" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" msgstr "" -#: results/templates/enter_results.html:15 +#: results/templates/debate_postponement_form.html +msgid "Postponed" +msgstr "" + +#: results/templates/debate_postponement_form.html +msgid "Postpone" +msgstr "" + +#: results/templates/enter_results.html msgid "Ballot Status" msgstr "" -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" msgstr "" -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" msgstr "" -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" msgstr "" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" msgstr "" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" msgstr "" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format -msgid "The URL of this page is personalised to you, %(adjudicator)s. Do not share it with anyone: anyone who knows this URL can submit results for your debates. If you bookmark this page and return here after each debate, it will always show the debate that you just adjudicated." +msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." msgstr "" -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" msgstr "" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." msgstr "" -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" msgstr "" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" msgstr "" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" msgstr "" -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." msgstr "" -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" msgstr "" -#: results/templates/public_ballot_set.html:28 -#: results/templates/public_enter_results.html:14 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" msgstr "" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" msgstr "" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" msgstr "" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" msgstr "" -#: results/templates/public_ballot_set.html:91 -#: results/templates/public_ballot_set.html:95 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set.html #, python-format -msgid "Back to the tournament home page." +msgid "%(name)s (%(side)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Won" msgstr "" -#: results/templates/public_enter_results.html:5 -#: results/templates/public_enter_results.html:8 +#: results/templates/public_ballot_set.html +msgid "Lost" +msgstr "" + +#: results/templates/public_ballot_set_error.html #, python-format -msgid "Enter Results for %(debate)s" +msgid "Back to the tournament home page." msgstr "" -#: results/templates/public_enter_results.html:22 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" msgstr "" -#: results/templates/public_enter_results.html:30 +#: results/templates/public_enter_results.html +msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." +msgstr "" + +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." @@ -744,254 +819,295 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: results/templates/public_enter_results.html:69 -msgid "Submit Ballot(s)" -msgstr "" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: results/templates/public_enter_results.html:71 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" msgstr "" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" msgstr "" -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" msgstr "" -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" msgstr "" -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" msgstr "" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" msgstr "" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." msgstr "" -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." msgstr "" -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" msgstr "" -#: results/utils.py:20 +#: results/utils.py +msgid "Debate was Postponed" +msgstr "" + +#: results/utils.py msgid "Ballot is Unconfirmed" msgstr "" -#: results/utils.py:22 +#: results/utils.py msgid "Ballot is Confirmed" msgstr "" #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:32 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" msgstr "" -#: results/utils.py:51 +#: results/utils.py #, python-format -msgid "%(winner)s (%(winner_side)s) won" +msgid "%(team)s (%(side)s) won" msgstr "" -#: results/utils.py:56 +#. Translators: The team here is the losing team +#: results/utils.py #, python-format -msgid "vs %(loser)s (%(loser_side)s)" +msgid "vs %(team)s (%(side)s)" msgstr "" -#: results/utils.py:71 +#: results/utils.py #, python-format -msgid "Advancing: %(advancing_list)s
    \n" +msgid "Advancing: %(advancing_list)s
    " msgstr "" -#: results/utils.py:75 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" msgstr "" -#: results/utils.py:85 +#: results/utils.py #, python-format -msgid "1st: %(first_team)s
    \n" +msgid "1st: %(first_team)s
    " msgstr "" -#: results/utils.py:87 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" "4th: %(fourth_team)s" msgstr "" -#: results/utils.py:102 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" msgstr "" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:162 +#: results/utils.py msgid "PM" msgstr "" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:164 +#: results/utils.py msgid "DPM" msgstr "" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:166 +#: results/utils.py msgid "LO" msgstr "" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:168 +#: results/utils.py msgid "DLO" msgstr "" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:170 +#: results/utils.py msgid "MG" msgstr "" #. Translators: Abbreviation for Government Whip -#: results/utils.py:172 +#: results/utils.py msgid "GW" msgstr "" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:174 +#: results/utils.py msgid "MO" msgstr "" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:176 +#: results/utils.py msgid "OW" msgstr "" -#: results/utils.py:196 +#: results/utils.py msgid "Reply" msgstr "" -#: results/views.py:224 results/views.py:226 +#: results/views.py msgid " vs " msgstr "" -#: results/views.py:359 +#: results/views.py +#, python-format +msgid "%(matchup)s: %(round)s @ %(room)s" +msgstr "" + +#: results/views.py +msgid "N/A" +msgstr "" + +#: results/views.py +msgid "New Ballot Set" +msgstr "" + +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." msgstr "" -#: results/views.py:361 results/views.py:428 +#: results/views.py msgid " Email receipts queued to be sent." msgstr "" -#: results/views.py:375 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." msgstr "" -#: results/views.py:381 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." msgstr "" -#: results/views.py:421 +#: results/views.py +msgid "Edit Ballot Set" +msgstr "" + +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." msgstr "" -#: results/views.py:423 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." msgstr "" -#: results/views.py:425 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." msgstr "" -#: results/views.py:469 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." msgstr "" -#: results/views.py:477 +#: results/views.py msgid "The draw for this round hasn't been released yet." msgstr "" -#: results/views.py:481 +#: results/views.py msgid "The motions for this round haven't been released yet." msgstr "" -#: results/views.py:486 +#: results/views.py msgid "It looks like you don't have a debate this round." msgstr "" -#: results/views.py:488 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." msgstr "" -#: results/views.py:496 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:501 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:588 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." msgstr "" -#: results/views.py:606 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." msgstr "" -#: results/views.py:609 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." msgstr "" -#: results/views.py:613 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." msgstr "" -#: results/views.py:616 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." msgstr "" -#: results/views.py:638 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." msgstr "" -#: results/views.py:694 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" msgstr "" -#: results/views.py:698 +#: results/views.py msgid "Adjudicator" msgstr "" +#: results/views.py +msgid "Merge Ballots" +msgstr "" + +#: results/views.py +msgid "The speaking order in the ballots is inconsistent, so could not be merged." +msgstr "" + +#: results/views.py +msgid "Duplicate speeches are marked inconsistently, so could not be merged." +msgstr "" + +#: results/views.py +#, python-format +msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." +msgstr "" + diff --git a/tabbycat/standings/locale/he/LC_MESSAGES/django.po b/tabbycat/standings/locale/he/LC_MESSAGES/django.po index 8683f82d19f..f9d1bd7e10f 100644 --- a/tabbycat/standings/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:34\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:01\n" "Last-Translator: philip_tc\n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -15,590 +15,598 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/standings/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 950\n" -#: standings/base.py:283 +#: standings/base.py msgid "The same metric would be added twice:" msgstr "" -#: standings/base.py:284 +#: standings/base.py msgid "The same ranking would be added twice:" msgstr "" -#: standings/base.py:358 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" msgstr "" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" msgstr "" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" msgstr "" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" msgstr "" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" msgstr "" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" msgstr "" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" msgstr "" -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" msgstr "" -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" msgstr "" -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" msgstr "" -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" msgstr "" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" msgstr "" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" msgstr "" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" msgstr "" -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" msgstr "" -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" msgstr "" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" msgstr "" -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" msgstr "" -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" msgstr "" -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" msgstr "" -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" msgstr "" -#: standings/speakers.py:50 standings/speakers.py:136 +#: standings/speakers.py msgid "total" msgstr "" -#: standings/speakers.py:51 standings/speakers.py:137 +#: standings/speakers.py msgid "Total" msgstr "" -#: standings/speakers.py:58 standings/speakers.py:146 +#: standings/speakers.py msgid "average" msgstr "ממוצע" -#: standings/speakers.py:59 standings/speakers.py:147 +#: standings/speakers.py msgid "Avg" msgstr "" -#: standings/speakers.py:66 -msgid "trimmed mean (high-low drop)" -msgstr "" - -#: standings/speakers.py:67 -msgid "Trim" -msgstr "" - -#: standings/speakers.py:99 +#: standings/speakers.py msgid "team points" msgstr "" -#: standings/speakers.py:100 +#: standings/speakers.py msgid "Team" msgstr "קבוצה" -#: standings/speakers.py:119 standings/speakers.py:156 +#: standings/speakers.py msgid "standard deviation" msgstr "" -#: standings/speakers.py:120 standings/speakers.py:157 +#: standings/speakers.py msgid "Stdev" msgstr "" -#: standings/speakers.py:128 +#: standings/speakers.py msgid "number of speeches given" msgstr "" -#: standings/speakers.py:129 standings/speakers.py:168 +#: standings/speakers.py msgid "Num" msgstr "" -#: standings/speakers.py:167 +#: standings/speakers.py msgid "replies given" msgstr "" -#: standings/teams.py:64 +#: standings/speakers.py +msgid "trimmed mean (high-low drop)" +msgstr "" + +#: standings/speakers.py +msgid "Trim" +msgstr "" + +#: standings/teams.py msgid "points" msgstr "נקודות" -#: standings/teams.py:65 +#: standings/teams.py msgid "Pts" msgstr "" -#: standings/teams.py:74 +#: standings/teams.py msgid "wins" msgstr "" -#: standings/teams.py:75 standings/views.py:596 +#: standings/teams.py standings/views.py msgid "Wins" msgstr "" -#: standings/teams.py:85 +#: standings/teams.py msgid "total speaker score" msgstr "" -#: standings/teams.py:86 +#: standings/teams.py msgid "Spk" msgstr "" -#: standings/teams.py:95 +#: standings/teams.py msgid "average total speaker score" msgstr "" -#: standings/teams.py:96 +#: standings/teams.py msgid "ATSS" msgstr "" -#: standings/teams.py:105 +#: standings/teams.py msgid "speaker score standard deviation" msgstr "" -#: standings/teams.py:106 +#: standings/teams.py msgid "SSD" msgstr "" -#: standings/teams.py:116 +#: standings/teams.py msgid "sum of margins" msgstr "" -#: standings/teams.py:117 +#: standings/teams.py msgid "Marg" msgstr "" -#: standings/teams.py:126 +#: standings/teams.py msgid "average margin" msgstr "" -#: standings/teams.py:127 +#: standings/teams.py msgid "AWM" msgstr "" -#: standings/teams.py:136 +#: standings/teams.py msgid "average individual speaker score" msgstr "" -#: standings/teams.py:137 +#: standings/teams.py msgid "AISS" msgstr "" -#: standings/teams.py:203 +#: standings/teams.py msgid "draw strength by wins" msgstr "" -#: standings/teams.py:204 +#: standings/teams.py msgid "DS" msgstr "" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by total speaker score" msgstr "" -#: standings/teams.py:212 +#: standings/teams.py msgid "DSS" msgstr "" -#: standings/teams.py:223 +#: standings/teams.py msgid "number of pullups before this round" msgstr "" -#: standings/teams.py:224 +#: standings/teams.py msgid "PU" msgstr "" -#: standings/teams.py:246 +#: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "" -#: standings/teams.py:247 +#: standings/teams.py msgid "Ballots" msgstr "" -#: standings/teams.py:248 +#: standings/teams.py msgid "votes/ballots carried" msgstr "" -#: standings/teams.py:273 +#: standings/teams.py msgid "number of firsts" msgstr "" -#: standings/teams.py:274 +#: standings/teams.py msgid "1sts" msgstr "" -#: standings/teams.py:283 +#: standings/teams.py msgid "number of seconds" msgstr "" -#: standings/teams.py:284 +#: standings/teams.py msgid "2nds" msgstr "" -#: standings/teams.py:296 +#: standings/teams.py +msgid "number of thirds" +msgstr "" + +#: standings/teams.py +msgid "3rds" +msgstr "" + +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py msgid "Who-beat-whom" msgstr "" -#: standings/teams.py:297 +#: standings/teams.py msgid "WBW" msgstr "" -#: standings/teams.py:298 +#: standings/teams.py msgid "who-beat-whom" msgstr "" -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." msgstr "" -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." msgstr "" -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." msgstr "" -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." msgstr "" -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." msgstr "" -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." msgstr "" -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." msgstr "" -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." msgstr "" -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." msgstr "" -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." msgstr "" -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" msgstr "" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." msgstr "" -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" msgstr "" -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" msgstr "" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" msgstr "" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" msgstr "" -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" msgstr "" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:150 -#: standings/templates/standings_index.html:163 -#: standings/templates/standings_index.html:182 +#: standings/templates/standings_index.html msgid "No data yet" msgstr "" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" msgstr "" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" msgstr "" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" msgstr "" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" msgstr "" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" msgstr "" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" msgstr "" -#: standings/templates/standings_index.html:144 -#: standings/templates/standings_index.html:157 -#, python-format -msgid "%(reference)s in %(abbreviation)s" -msgstr "" - -#: standings/templates/standings_index.html:173 +#: standings/templates/standings_index.html msgid "Average Speaks" msgstr "" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" msgstr "" -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "קבוצות" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" msgstr "" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" msgstr "דובר/תים" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" msgstr "" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" msgstr "" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "דובר/תים " -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" msgstr "" -#: standings/templates/standings_menu.html:64 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "" -#: standings/templates/standings_menu.html:68 +#: standings/templates/standings_menu.html +msgid "By Round" +msgstr "" + +#: standings/templates/standings_menu.html msgid "Diversity" msgstr "" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." msgstr "" -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " msgstr "" -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " msgstr "" -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " msgstr "" -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" msgstr "" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" msgstr "" -#: standings/views.py:206 standings/views.py:432 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." msgstr "" -#: standings/views.py:282 +#: standings/views.py msgid "Speaker Standings" msgstr "" -#: standings/views.py:324 +#: standings/views.py msgid "Speaker Tab" msgstr "" -#: standings/views.py:339 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" msgstr "" -#: standings/views.py:357 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" msgstr "" -#: standings/views.py:370 +#: standings/views.py msgid "Reply Speaker Standings" msgstr "" -#: standings/views.py:375 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." msgstr "" -#: standings/views.py:412 +#: standings/views.py msgid "Reply Speaker Tab" msgstr "" -#: standings/views.py:424 standings/views.py:673 +#: standings/views.py msgid "Team Standings" msgstr "" -#: standings/views.py:503 +#: standings/views.py msgid "Team Tab" msgstr "" -#: standings/views.py:522 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" msgstr "" -#: standings/views.py:549 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" msgstr "" -#: standings/views.py:560 +#: standings/views.py msgid "Current Team Standings" msgstr "" -#: standings/views.py:596 +#: standings/views.py msgid "Points" msgstr "נקודות" +#: standings/views.py +msgid "Feedback Overview" +msgstr "" + +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +msgstr "" + diff --git a/tabbycat/tournaments/locale/he/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/he/LC_MESSAGES/django.po index 6468148e334..950242f6117 100644 --- a/tabbycat/tournaments/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:34\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -15,657 +15,638 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/tournaments/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "טורנירים" -#: tournaments/forms.py:27 +#: tournaments/forms.py msgid "Number of preliminary rounds" msgstr "" -#: tournaments/forms.py:32 +#: tournaments/forms.py msgid "Number of teams in the open break" msgstr "" -#: tournaments/forms.py:33 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." msgstr "" -#: tournaments/forms.py:39 +#: tournaments/forms.py msgid "Did you agree with their decision?" msgstr "" -#: tournaments/forms.py:39 +#: tournaments/forms.py msgid "Agree?" msgstr "" -#: tournaments/forms.py:45 +#: tournaments/forms.py msgid "Comments" msgstr "" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:59 +#: tournaments/forms.py msgid "Open" msgstr "" -#: tournaments/forms.py:84 +#: tournaments/forms.py msgid "Format Configuration" msgstr "" -#: tournaments/forms.py:85 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" msgstr "" -#: tournaments/forms.py:89 +#: tournaments/forms.py msgid "Public Configuration" msgstr "" -#: tournaments/forms.py:90 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" msgstr "" -#: tournaments/forms.py:96 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" msgstr "" -#: tournaments/forms.py:186 +#: tournaments/forms.py msgid "Current preliminary round" msgstr "" -#: tournaments/forms.py:187 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" msgstr "" -#: tournaments/forms.py:199 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" msgstr "" -#: tournaments/forms.py:205 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" msgstr "" -#: tournaments/forms.py:217 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." msgstr "" -#: tournaments/forms.py:223 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." msgstr "" -#: tournaments/mixins.py:108 +#: tournaments/forms.py +#, python-format +msgid "%(name)s (%(abbreviation)s)" +msgstr "" + +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." msgstr "" -#: tournaments/mixins.py:116 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." msgstr "" -#: tournaments/mixins.py:129 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." msgstr "" -#: tournaments/mixins.py:136 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." msgstr "" -#: tournaments/mixins.py:231 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" msgstr "" -#: tournaments/mixins.py:431 +#: tournaments/mixins.py msgid "Return to Draw" msgstr "" -#: tournaments/models.py:27 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." msgstr "" -#: tournaments/models.py:34 tournaments/models.py:330 +#: tournaments/models.py msgid "name" msgstr "" -#: tournaments/models.py:35 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" msgstr "" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "short name" msgstr "" -#: tournaments/models.py:38 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" msgstr "" -#: tournaments/models.py:40 tournaments/models.py:324 +#: tournaments/models.py msgid "sequence number" msgstr "" -#: tournaments/models.py:41 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." msgstr "" -#: tournaments/models.py:43 +#: tournaments/models.py msgid "slug" msgstr "" -#: tournaments/models.py:44 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" msgstr "" -#: tournaments/models.py:45 +#: tournaments/models.py msgid "active" msgstr "" -#: tournaments/models.py:48 tournaments/models.py:323 +#: tournaments/models.py msgid "tournament" msgstr "טורניר" -#: tournaments/models.py:49 +#: tournaments/models.py msgid "tournaments" msgstr "טורנירים" -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Random" msgstr "" -#: tournaments/models.py:296 +#: tournaments/models.py msgid "Manual" msgstr "" -#: tournaments/models.py:297 +#: tournaments/models.py msgid "Round-robin" msgstr "" -#: tournaments/models.py:298 +#: tournaments/models.py msgid "Power-paired" msgstr "" -#: tournaments/models.py:299 tournaments/models.py:306 +#: tournaments/models.py msgid "Elimination" msgstr "" -#: tournaments/models.py:305 +#: tournaments/models.py msgid "Preliminary" msgstr "" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "None" msgstr "" -#: tournaments/models.py:316 +#: tournaments/models.py msgid "Draft" msgstr "" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "Confirmed" msgstr "" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "Released" msgstr "" -#: tournaments/models.py:325 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" msgstr "" -#: tournaments/models.py:327 +#: tournaments/models.py msgid "completed" msgstr "" -#: tournaments/models.py:328 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" msgstr "" -#: tournaments/models.py:330 +#: tournaments/models.py msgid "e.g. \"Round 1\"" msgstr "" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "abbreviation" msgstr "" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "e.g. \"R1\"" msgstr "" -#: tournaments/models.py:333 +#: tournaments/models.py msgid "stage" msgstr "" -#: tournaments/models.py:334 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" msgstr "" -#: tournaments/models.py:336 +#: tournaments/models.py msgid "draw type" msgstr "" -#: tournaments/models.py:337 +#: tournaments/models.py msgid "Which draw method to use" msgstr "" -#: tournaments/models.py:340 +#: tournaments/models.py msgid "break category" msgstr "" -#: tournaments/models.py:341 +#: tournaments/models.py msgid "If elimination round, which break category" msgstr "" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "draw status" msgstr "" -#: tournaments/models.py:345 +#: tournaments/models.py msgid "The status of this round's draw" msgstr "" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "feedback weight" msgstr "" -#: tournaments/models.py:350 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." msgstr "" #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:353 +#: tournaments/models.py msgid "silent" msgstr "" -#: tournaments/models.py:354 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." msgstr "" -#: tournaments/models.py:356 +#: tournaments/models.py msgid "motions released" msgstr "" -#: tournaments/models.py:357 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" msgstr "" -#: tournaments/models.py:358 +#: tournaments/models.py msgid "starts at" msgstr "" -#: tournaments/models.py:361 +#: tournaments/models.py +msgid "weight" +msgstr "" + +#: tournaments/models.py +msgid "A factor for the points received in the round. For example, if 2, all points are doubled." +msgstr "" + +#: tournaments/models.py msgid "round" msgstr "סיבוב" -#: tournaments/models.py:362 +#: tournaments/models.py msgid "rounds" msgstr "סיבובים" -#: tournaments/models.py:375 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:378 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:383 +#: tournaments/models.py msgid "Elimination rounds must have a break category." msgstr "" -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" msgstr "" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" msgstr "" -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" msgstr "" -#: tournaments/templates/blank_site_start.html:7 -msgid "Welcome to Tabbycat" -msgstr "" - -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" msgstr "" -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." msgstr "" -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." msgstr "" -#: tournaments/templates/blank_site_start.html:32 -msgid "The e-mail address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." +#: tournaments/templates/blank_site_start.html +msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." msgstr "" -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" msgstr "" -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" msgstr "" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." msgstr "" -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." msgstr "" -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" msgstr "" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." msgstr "" -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" msgstr "" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." msgstr "" -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" msgstr "" -#: tournaments/templates/donations.html:4 -#: tournaments/templates/donations.html:5 -msgctxt "title" -msgid "Donate to Tabbycat" -msgstr "" - -#: tournaments/templates/donations.html:11 -msgid "Tabbycat is a volunteer effort. Since 2012, its maintainers have spent thousands of hours working on it." -msgstr "" - -#: tournaments/templates/donations.html:17 -msgid "Donating to Tabbycat helps the maintainers to meet recurring costs and justify our ongoing contributions in responding to support enquiries, keeping the software up to date, fixing bugs, and developing new features." -msgstr "" - -#: tournaments/templates/donations.html:24 -msgid "We suggest that tournaments budget for a donation of A$1 (Australian dollar) per team. For tournaments run for fundraising or for profit, whether partly or solely, this payment is required and your licence to use Tabbycat is conditional upon it. General donations from individuals or organisations are of course also much appreciated." -msgstr "" - -#: tournaments/templates/donations.html:34 -#, python-format -msgid "Our suggested donation from %(tournament)s, based on its size, is A$%(nteams)s. The easiest way to donate is via Paypal, but please don’t hesitate to email us if other methods would work better for you. Also, feel free to get in touch if you require an invoice or receipt for the payment." -msgstr "" - -#: tournaments/templates/donations.html:46 -msgid "The easiest way to donate is via Paypal. Please contact us if you require other options." -msgstr "" - -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" msgstr "" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." msgstr "" -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." msgstr "" -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." msgstr "" -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." msgstr "" -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" msgstr "" -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" +msgid "Teams on %(side)s" msgstr "" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" msgstr "" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." msgstr "" -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." msgstr "" -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" msgstr "" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:201 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" msgstr "" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" msgstr "" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" msgstr "" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" msgstr "" -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" msgstr "" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" msgstr "" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" msgstr "" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" msgstr "" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" msgstr "" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" msgstr "" -#: tournaments/templates/public_tournament_index.html:187 -msgid "Enter Ballot" +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Enter Ballot for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:193 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" msgstr "" -#: tournaments/templates/public_tournament_index.html:215 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" msgstr "" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" msgstr "" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" msgstr "" -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." msgstr "" -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" msgstr "" -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" msgstr "" -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" msgstr "" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" msgstr "" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" msgstr "" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" msgstr "" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." @@ -674,12 +655,12 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" msgstr "" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." @@ -688,356 +669,369 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " msgstr "" -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "" -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" msgstr "" -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" msgstr "" -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "" -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:46 -msgid "Inactive Tournaments" +#: tournaments/templates/set_round_weights.html +msgctxt "page title" +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." msgstr "" -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/set_round_weights.html +msgctxt "button" +msgid "Set weights" +msgstr "" + +#: tournaments/templates/site_index.html msgid "Welcome!" msgstr "" -#: tournaments/templates/site_index.html:20 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" msgstr "" -#: tournaments/templates/site_index.html:29 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:33 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:54 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html msgid "New Tournament" msgstr "" -#: tournaments/templates/site_index.html:57 +#: tournaments/templates/site_index.html msgid "Edit Database Area" msgstr "" -#: tournaments/templates/site_index.html:60 +#: tournaments/templates/site_index.html msgid "Send a Test Email" msgstr "" -#: tournaments/templates/site_index.html:69 +#: tournaments/templates/site_index.html +msgid "Import DebateXML" +msgstr "" + +#: tournaments/templates/site_index.html #, python-format -msgid "Change Password (%(user)s)" +msgid "Get API Token / Change Password (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:79 +#: tournaments/templates/site_index.html msgid "Log In as Admin" msgstr "" -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." msgstr "" -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" msgstr "" -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." msgstr "" #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." msgstr "" -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." msgstr "" -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" +msgid "Mark participants as available to prepare a draw for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" +msgid "Go to the results area to enter ballots for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." msgstr "" -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" msgstr "" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" msgstr "" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" msgstr "" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" msgstr "" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" msgstr "" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" msgstr "" -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" msgstr "" -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" msgstr "ממשלה" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" msgstr "אופוזיציה" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" msgstr "" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" msgstr "" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" msgstr "" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" msgstr "" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" msgstr "" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" msgstr "" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" msgstr "" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" msgstr "" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" msgstr "" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" msgstr "" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" msgstr "" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" msgstr "" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" msgstr "" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" msgstr "" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" msgstr "" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" msgstr "" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" msgstr "" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" msgstr "" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" msgstr "" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "ממשלה 1" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "אופוזיציה 1" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "ממשלה 2" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "אופוזיציה 2" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" msgstr "" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" msgstr "" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" msgstr "" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" msgstr "" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "מ1" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "א1" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "מ2" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "א2" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "סיבובים %(number)d" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" msgstr "" -#: tournaments/views.py:154 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" msgstr "" -#: tournaments/views.py:160 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." msgstr "" -#: tournaments/views.py:173 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." msgstr "" -#: tournaments/views.py:179 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." msgstr "" -#: tournaments/views.py:187 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" msgstr "" -#: tournaments/views.py:216 -msgid "Whoops! It looks like someone's already created the first user account. Please log in." -msgstr "" - -#: tournaments/views.py:224 -#, python-format -msgid "Welcome! You've created an account for %s." -msgstr "" - -#: tournaments/views.py:239 +#: tournaments/views.py msgid "8-team generic dataset" msgstr "" -#: tournaments/views.py:240 +#: tournaments/views.py msgid "24-team Australs dataset" msgstr "" -#: tournaments/views.py:241 +#: tournaments/views.py msgid "88-team BP dataset" msgstr "" +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." +msgstr "" + diff --git a/tabbycat/utils/locale/he/LC_MESSAGES/django.po b/tabbycat/utils/locale/he/LC_MESSAGES/django.po index bda54c79a06..ca523c45d0a 100644 --- a/tabbycat/utils/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:34\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -15,254 +15,245 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/utils/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "E-mail address" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "סיבוב" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "קבוצה" + +#: utils/admin.py +msgid "Speaker" +msgstr "דובר/ת" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "טורניר" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "" + +#: utils/admin.py +msgid "Confirmed" +msgstr "" + +#: utils/admin.py +msgid "Adjudicator" msgstr "" -#: utils/tables.py:43 +#: utils/tables.py msgid "No Data Available" msgstr "" -#: utils/tables.py:151 utils/tables.py:152 +#: utils/tables.py msgid "Ⓒ" msgstr "" -#: utils/tables.py:153 +#: utils/tables.py msgid "Ⓣ" msgstr "" -#: utils/tables.py:157 +#: utils/tables.py msgid "chair" msgstr "" -#: utils/tables.py:158 +#: utils/tables.py msgid "panellist" msgstr "" -#: utils/tables.py:159 +#: utils/tables.py msgid "trainee" msgstr "" -#: utils/tables.py:162 +#: utils/tables.py msgid "—" msgstr "" -#: utils/tables.py:226 utils/tables.py:232 +#: utils/tables.py +msgid "Redacted" +msgstr "" + +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" msgstr "" -#: utils/tables.py:242 utils/tables.py:247 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" msgstr "" -#: utils/tables.py:269 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" msgstr "" -#: utils/tables.py:271 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" msgstr "" -#: utils/tables.py:283 +#: utils/tables.py #, python-format msgid "%(team)s won" msgstr "" -#: utils/tables.py:288 +#: utils/tables.py #, python-format msgid "%(team)s lost" msgstr "" -#: utils/tables.py:293 utils/tables.py:321 utils/tables.py:339 +#: utils/tables.py #, python-format msgid "%(team)s—no result" msgstr "" -#: utils/tables.py:301 +#: utils/tables.py #, python-format -msgid "%(team)s took 1st" +msgid "%(team)s placed %(place)s" msgstr "" -#: utils/tables.py:306 +#: utils/tables.py #, python-format -msgid "%(team)s took 2nd" -msgstr "" - -#: utils/tables.py:311 -#, python-format -msgid "%(team)s took 3rd" +msgid "%(team)s is advancing" msgstr "" -#: utils/tables.py:316 +#: utils/tables.py #, python-format -msgid "%(team)s took 4th" +msgid "%(team)s was eliminated" msgstr "" -#: utils/tables.py:329 -#, python-format -msgid "%(team)s is advancing" +#: utils/tables.py +msgid "View/edit debate ballot" msgstr "" -#: utils/tables.py:334 -#, python-format -msgid "%(team)s was eliminated" +#: utils/tables.py +msgid "View debate ballot" msgstr "" -#: utils/tables.py:352 +#: utils/tables.py #, python-format msgid " vs %(opposition)s" msgstr "" -#: utils/tables.py:359 +#: utils/tables.py #, python-format msgid "Won against %(team)s" msgstr "" -#: utils/tables.py:361 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" msgstr "" -#: utils/tables.py:363 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" msgstr "" -#: utils/tables.py:371 utils/tables.py:450 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" msgstr "" -#: utils/tables.py:376 utils/tables.py:455 -msgid "View/edit debate ballot" -msgstr "" - -#: utils/tables.py:382 utils/tables.py:461 -msgid "View debate ballot" -msgstr "" - -#: utils/tables.py:403 +#: utils/tables.py msgid "Teams in debate:" msgstr "" -#: utils/tables.py:406 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "" -#: utils/tables.py:407 utils/tables.py:411 utils/tables.py:437 +#: utils/tables.py msgid "??" msgstr "" -#: utils/tables.py:425 +#: utils/tables.py msgid "advancing" msgstr "" -#: utils/tables.py:426 +#: utils/tables.py msgid "Advancing" msgstr "" -#: utils/tables.py:428 +#: utils/tables.py msgid "eliminated" msgstr "" -#: utils/tables.py:429 +#: utils/tables.py msgid "Eliminated" msgstr "" -#: utils/tables.py:432 utils/tables.py:442 +#: utils/tables.py msgid "No result for debate" msgstr "" -#: utils/tables.py:439 +#: utils/tables.py #, python-format msgid "Placed %(place)s" msgstr "" -#: utils/tables.py:470 -msgid "Tournament" -msgstr "טורניר" - -#: utils/tables.py:479 -msgid "Round" -msgstr "סיבוב" - -#: utils/tables.py:497 utils/tables.py:683 +#: utils/tables.py msgid "Name" msgstr "" -#: utils/tables.py:503 utils/tables.py:665 +#: utils/tables.py msgid "Institution" msgstr "" -#: utils/tables.py:509 +#: utils/tables.py msgid "Member of the Adjudication Core" msgstr "" -#: utils/tables.py:516 +#: utils/tables.py msgid "Independent Adjudicator" msgstr "" -#: utils/tables.py:524 +#: utils/tables.py msgid "Always Trainee" msgstr "" -#: utils/tables.py:562 +#: utils/tables.py msgid "in minority" msgstr "" -#: utils/tables.py:595 +#: utils/tables.py msgid "Debate Adjudicators" msgstr "" -#: utils/tables.py:626 -msgid "Order as listed" -msgstr "" - -#: utils/tables.py:633 -msgid "?" -msgstr "" - -#: utils/tables.py:636 -msgid "Motion" -msgstr "" - -#: utils/tables.py:651 -msgid "Team" -msgstr "קבוצה" - -#: utils/tables.py:656 utils/tables.py:705 +#: utils/tables.py msgid "Categories" msgstr "" -#: utils/tables.py:676 -msgid "Redacted" -msgstr "" - -#: utils/tables.py:703 +#: utils/tables.py msgid "Category" msgstr "" -#: utils/tables.py:730 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." msgstr "" -#: utils/tables.py:732 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." msgstr "" -#: utils/tables.py:747 +#: utils/tables.py msgid "Room" msgstr "" -#: utils/tables.py:763 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" @@ -271,65 +262,69 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: utils/tables.py:769 +#: utils/tables.py msgid "Teams are from the same institution" msgstr "" -#: utils/tables.py:775 +#: utils/tables.py msgid "Conflicts/Flags" msgstr "" -#: utils/tables.py:829 -msgid "The ballot you submitted" +#: utils/tables.py +msgid "The confirmed ballot" msgstr "" -#: utils/tables.py:833 -msgid "View/Edit Ballot" -msgstr "" - -#: utils/tables.py:842 +#: utils/tables.py msgid "No ballot" msgstr "" -#: utils/tables.py:844 -msgid "Elimination" +#: utils/tables.py +msgid "No scores" msgstr "" -#: utils/tables.py:847 utils/tables.py:859 +#: utils/tables.py msgid "View Ballot" msgstr "" -#: utils/tables.py:867 +#: utils/tables.py +msgid "The ballot you submitted" +msgstr "" + +#: utils/tables.py +msgid "View/Edit Ballot" +msgstr "" + +#: utils/tables.py msgid "Result" msgstr "" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:873 +#: utils/tables.py msgid "TBC" msgstr "" -#: utils/tables.py:874 -msgid "Side" +#: utils/tables.py +msgid "Team iron-personed this round and the last." msgstr "" -#: utils/tables.py:912 -msgid "Team iron-manned this round and the last." +#: utils/tables.py +msgid "Team iron-personed this round." msgstr "" -#: utils/tables.py:915 -msgid "Team iron-manned this round." +#: utils/tables.py +msgid "Team iron-personed last round." msgstr "" -#: utils/tables.py:918 -msgid "Team iron-manned last round." -msgstr "" - -#: utils/tables.py:935 utils/tables.py:936 +#: utils/tables.py #, python-format msgid "Team %(num)d" msgstr "קבוצה %(num)d" -#: utils/views.py:38 +#: utils/tables.py +msgid "Postpone" +msgstr "" + +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." msgstr "" diff --git a/tabbycat/venues/locale/he/LC_MESSAGES/django.po b/tabbycat/venues/locale/he/LC_MESSAGES/django.po index 0bf64004ad7..518b2ba37a1 100644 --- a/tabbycat/venues/locale/he/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:34\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" "Last-Translator: philip_tc\n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -15,171 +15,179 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /develop/tabbycat/venues/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 -msgid "Venues" +#: venues/apps.py +msgid "Rooms" msgstr "" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." msgstr "" -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." msgstr "" -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." msgstr "" -#: venues/models.py:9 venues/models.py:64 +#: venues/models.py msgid "name" msgstr "" -#: venues/models.py:11 venues/models.py:118 +#: venues/models.py msgid "priority" msgstr "" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" msgstr "" -#: venues/models.py:15 venues/models.py:76 +#: venues/models.py msgid "tournament" msgstr "טורניר" -#: venues/models.py:22 +#: venues/models.py +msgid "URL" +msgstr "" + +#: venues/models.py +msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" +msgstr "" + +#: venues/models.py msgid "room" msgstr "" -#: venues/models.py:23 venues/models.py:74 +#: venues/models.py msgid "rooms" msgstr "" -#: venues/models.py:59 +#: venues/models.py msgid "Don't display in room name" msgstr "" -#: venues/models.py:60 +#: venues/models.py msgid "Display as prefix" msgstr "" -#: venues/models.py:61 +#: venues/models.py msgid "Display as suffix" msgstr "" -#: venues/models.py:65 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." msgstr "" -#: venues/models.py:69 +#: venues/models.py msgid "description" msgstr "" -#: venues/models.py:70 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." msgstr "" -#: venues/models.py:80 +#: venues/models.py msgid "display in room name" msgstr "" -#: venues/models.py:81 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" msgstr "" -#: venues/models.py:83 +#: venues/models.py msgid "display in public tooltip" msgstr "" -#: venues/models.py:84 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." msgstr "" -#: venues/models.py:88 +#: venues/models.py msgid "room category" msgstr "" -#: venues/models.py:89 +#: venues/models.py msgid "room categories" msgstr "" -#: venues/models.py:117 +#: venues/models.py msgid "category" msgstr "" -#: venues/models.py:121 +#: venues/models.py msgid "subject content type" msgstr "" -#: venues/models.py:124 +#: venues/models.py msgid "subject ID" msgstr "" -#: venues/models.py:130 +#: venues/models.py msgid "room constraint" msgstr "" -#: venues/models.py:131 +#: venues/models.py msgid "room constraints" msgstr "" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" msgstr "" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." msgstr "" -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." msgstr "" -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" msgstr "" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" msgstr "" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." msgstr "" -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" msgstr "" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" msgstr "" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" msgstr "" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" msgstr "" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" msgstr "" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" msgstr "" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" @@ -188,26 +196,26 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." msgstr "" -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" msgstr "%s (קבוצות)" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" msgstr "" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." From b696107cd58654034f83112d686f5d9a5c164c8d Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Mon, 6 Jul 2020 03:03:34 +1000 Subject: [PATCH 211/255] New translations django.po (Hindi) --- docs/locale/hi/LC_MESSAGES/about/authors.po | 6 +- docs/locale/hi/LC_MESSAGES/about/changelog.po | 6 +- .../hi/LC_MESSAGES/about/contributing.po | 6 +- docs/locale/hi/LC_MESSAGES/about/licence.po | 6 +- docs/locale/hi/LC_MESSAGES/about/support.po | 6 +- .../LC_MESSAGES/about/tournament-history.po | 6 +- .../features/adjudicator-allocation.po | 6 +- .../features/adjudicator-feedback.po | 6 +- .../locale/hi/LC_MESSAGES/features/backups.po | 6 +- docs/locale/hi/LC_MESSAGES/features/breaks.po | 6 +- .../hi/LC_MESSAGES/features/check-ins.po | 6 +- .../hi/LC_MESSAGES/features/data-entry.po | 6 +- .../hi/LC_MESSAGES/features/data-importers.po | 6 +- .../features/draw-generation-bp.po | 6 +- .../LC_MESSAGES/features/draw-generation.po | 6 +- .../hi/LC_MESSAGES/features/notifications.po | 6 +- .../LC_MESSAGES/features/preformed-panels.po | 6 +- .../hi/LC_MESSAGES/features/printing.po | 6 +- .../LC_MESSAGES/features/standings-rules.po | 6 +- .../LC_MESSAGES/features/team-code-names.po | 6 +- .../hi/LC_MESSAGES/features/user-accounts.po | 6 +- .../LC_MESSAGES/features/venue-constraints.po | 6 +- .../hi/LC_MESSAGES/guide/comparisons.po | 6 +- docs/locale/hi/LC_MESSAGES/guide/scaling.po | 6 +- .../LC_MESSAGES/guide/tournament-logistics.po | 6 +- docs/locale/hi/LC_MESSAGES/guide/upgrading.po | 6 +- docs/locale/hi/LC_MESSAGES/index.po | 6 +- docs/locale/hi/LC_MESSAGES/install/docker.po | 6 +- docs/locale/hi/LC_MESSAGES/install/heroku.po | 6 +- docs/locale/hi/LC_MESSAGES/install/linux.po | 6 +- docs/locale/hi/LC_MESSAGES/install/local.po | 6 +- docs/locale/hi/LC_MESSAGES/install/osx.po | 6 +- docs/locale/hi/LC_MESSAGES/install/windows.po | 6 +- docs/locale/hi/LC_MESSAGES/install/wsl.po | 6 +- .../LC_MESSAGES/use/finishing-a-tournament.po | 6 +- .../hi/LC_MESSAGES/use/importing-data.po | 6 +- .../LC_MESSAGES/use/running-a-tournament.po | 6 +- .../LC_MESSAGES/use/starting-a-tournament.po | 6 +- .../actionlog/locale/hi/LC_MESSAGES/django.po | 160 +-- .../locale/hi/LC_MESSAGES/django.po | 203 ++-- .../locale/hi/LC_MESSAGES/django.po | 474 ++++----- .../locale/hi/LC_MESSAGES/django.po | 168 ++- .../breakqual/locale/hi/LC_MESSAGES/django.po | 254 ++--- tabbycat/draw/locale/hi/LC_MESSAGES/django.po | 627 ++++++------ .../importer/locale/hi/LC_MESSAGES/django.po | 250 +++-- tabbycat/locale/hi/LC_MESSAGES/django.po | 562 +++++----- tabbycat/locale/hi/LC_MESSAGES/djangojs.po | 10 +- .../motions/locale/hi/LC_MESSAGES/django.po | 242 +++-- .../locale/hi/LC_MESSAGES/django.po | 230 +++-- .../options/locale/hi/LC_MESSAGES/django.po | 959 ++++++++++-------- .../locale/hi/LC_MESSAGES/django.po | 585 ++++++----- .../printing/locale/hi/LC_MESSAGES/django.po | 68 +- .../locale/hi/LC_MESSAGES/django.po | 87 +- .../results/locale/hi/LC_MESSAGES/django.po | 736 ++++++++------ .../standings/locale/hi/LC_MESSAGES/django.po | 338 +++--- .../locale/hi/LC_MESSAGES/django.po | 568 +++++------ .../utils/locale/hi/LC_MESSAGES/django.po | 243 +++-- .../venues/locale/hi/LC_MESSAGES/django.po | 108 +- 58 files changed, 3864 insertions(+), 3236 deletions(-) diff --git a/docs/locale/hi/LC_MESSAGES/about/authors.po b/docs/locale/hi/LC_MESSAGES/about/authors.po index 6d5d288458e..ff74069554b 100644 --- a/docs/locale/hi/LC_MESSAGES/about/authors.po +++ b/docs/locale/hi/LC_MESSAGES/about/authors.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:46\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:22\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/authors.po\n" +"X-Crowdin-File-ID: 1259\n" "Language: hi_IN\n" #: ../../../AUTHORS.rst:3 diff --git a/docs/locale/hi/LC_MESSAGES/about/changelog.po b/docs/locale/hi/LC_MESSAGES/about/changelog.po index 1e020b88eac..31e0e713dd0 100644 --- a/docs/locale/hi/LC_MESSAGES/about/changelog.po +++ b/docs/locale/hi/LC_MESSAGES/about/changelog.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:46\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:21\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/changelog.po\n" +"X-Crowdin-File-ID: 1261\n" "Language: hi_IN\n" #: ../../../CHANGELOG.rst:3 diff --git a/docs/locale/hi/LC_MESSAGES/about/contributing.po b/docs/locale/hi/LC_MESSAGES/about/contributing.po index dc444c55ef8..5d6d5c0d666 100644 --- a/docs/locale/hi/LC_MESSAGES/about/contributing.po +++ b/docs/locale/hi/LC_MESSAGES/about/contributing.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:46\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:19\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/contributing.po\n" +"X-Crowdin-File-ID: 1263\n" "Language: hi_IN\n" #: ../../../CONTRIBUTING.rst:3 diff --git a/docs/locale/hi/LC_MESSAGES/about/licence.po b/docs/locale/hi/LC_MESSAGES/about/licence.po index a721b56c1b2..9030d36e359 100644 --- a/docs/locale/hi/LC_MESSAGES/about/licence.po +++ b/docs/locale/hi/LC_MESSAGES/about/licence.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:45\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:18\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/licence.po\n" +"X-Crowdin-File-ID: 1265\n" "Language: hi_IN\n" #: ../../../LICENSE.rst:3 diff --git a/docs/locale/hi/LC_MESSAGES/about/support.po b/docs/locale/hi/LC_MESSAGES/about/support.po index 796ea97947c..30eb42a1aa5 100644 --- a/docs/locale/hi/LC_MESSAGES/about/support.po +++ b/docs/locale/hi/LC_MESSAGES/about/support.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:45\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:20\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/support.po\n" +"X-Crowdin-File-ID: 1267\n" "Language: hi_IN\n" #: ../../about/support.rst:3 diff --git a/docs/locale/hi/LC_MESSAGES/about/tournament-history.po b/docs/locale/hi/LC_MESSAGES/about/tournament-history.po index 0885c1d56b6..a2a9e1dea61 100644 --- a/docs/locale/hi/LC_MESSAGES/about/tournament-history.po +++ b/docs/locale/hi/LC_MESSAGES/about/tournament-history.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:45\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:19\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/tournament-history.po\n" +"X-Crowdin-File-ID: 1335\n" "Language: hi_IN\n" #: ../../about/tournament-history.rst:3 diff --git a/docs/locale/hi/LC_MESSAGES/features/adjudicator-allocation.po b/docs/locale/hi/LC_MESSAGES/features/adjudicator-allocation.po index ca639677343..a2e2a9947de 100644 --- a/docs/locale/hi/LC_MESSAGES/features/adjudicator-allocation.po +++ b/docs/locale/hi/LC_MESSAGES/features/adjudicator-allocation.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:45\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:25\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-allocation.po\n" +"X-Crowdin-File-ID: 1271\n" "Language: hi_IN\n" #: ../../features/adjudicator-allocation.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/features/adjudicator-feedback.po b/docs/locale/hi/LC_MESSAGES/features/adjudicator-feedback.po index 11564553e95..367d0eaad64 100644 --- a/docs/locale/hi/LC_MESSAGES/features/adjudicator-feedback.po +++ b/docs/locale/hi/LC_MESSAGES/features/adjudicator-feedback.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:45\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:25\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-feedback.po\n" +"X-Crowdin-File-ID: 1273\n" "Language: hi_IN\n" #: ../../features/adjudicator-feedback.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/features/backups.po b/docs/locale/hi/LC_MESSAGES/features/backups.po index 6aec2032ec8..dbabccf9326 100644 --- a/docs/locale/hi/LC_MESSAGES/features/backups.po +++ b/docs/locale/hi/LC_MESSAGES/features/backups.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:44\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:26\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/backups.po\n" +"X-Crowdin-File-ID: 1275\n" "Language: hi_IN\n" #: ../../features/backups.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/features/breaks.po b/docs/locale/hi/LC_MESSAGES/features/breaks.po index 1cd08d8170d..1af9731f576 100644 --- a/docs/locale/hi/LC_MESSAGES/features/breaks.po +++ b/docs/locale/hi/LC_MESSAGES/features/breaks.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:45\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:25\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/breaks.po\n" +"X-Crowdin-File-ID: 1277\n" "Language: hi_IN\n" #: ../../features/breaks.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/features/check-ins.po b/docs/locale/hi/LC_MESSAGES/features/check-ins.po index 97b349c46f8..93ae17b5243 100644 --- a/docs/locale/hi/LC_MESSAGES/features/check-ins.po +++ b/docs/locale/hi/LC_MESSAGES/features/check-ins.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:45\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:24\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/check-ins.po\n" +"X-Crowdin-File-ID: 1279\n" "Language: hi_IN\n" #: ../../features/check-ins.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/features/data-entry.po b/docs/locale/hi/LC_MESSAGES/features/data-entry.po index 281b139727e..07ee0a30469 100644 --- a/docs/locale/hi/LC_MESSAGES/features/data-entry.po +++ b/docs/locale/hi/LC_MESSAGES/features/data-entry.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:45\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:23\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-entry.po\n" +"X-Crowdin-File-ID: 1281\n" "Language: hi_IN\n" #: ../../features/data-entry.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/features/data-importers.po b/docs/locale/hi/LC_MESSAGES/features/data-importers.po index 05255f615b0..d330bc3ce23 100644 --- a/docs/locale/hi/LC_MESSAGES/features/data-importers.po +++ b/docs/locale/hi/LC_MESSAGES/features/data-importers.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:45\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:23\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-importers.po\n" +"X-Crowdin-File-ID: 1283\n" "Language: hi_IN\n" #: ../../features/data-importers.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/features/draw-generation-bp.po b/docs/locale/hi/LC_MESSAGES/features/draw-generation-bp.po index f0d279188a7..6abc7410cab 100644 --- a/docs/locale/hi/LC_MESSAGES/features/draw-generation-bp.po +++ b/docs/locale/hi/LC_MESSAGES/features/draw-generation-bp.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:45\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:24\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation-bp.po\n" +"X-Crowdin-File-ID: 1285\n" "Language: hi_IN\n" #: ../../features/draw-generation-bp.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/features/draw-generation.po b/docs/locale/hi/LC_MESSAGES/features/draw-generation.po index 5509e1bb23a..ad0ab64f60b 100644 --- a/docs/locale/hi/LC_MESSAGES/features/draw-generation.po +++ b/docs/locale/hi/LC_MESSAGES/features/draw-generation.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:45\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:23\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation.po\n" +"X-Crowdin-File-ID: 1287\n" "Language: hi_IN\n" #: ../../features/draw-generation.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/features/notifications.po b/docs/locale/hi/LC_MESSAGES/features/notifications.po index 6e1f61f352a..b8e3fe88da8 100644 --- a/docs/locale/hi/LC_MESSAGES/features/notifications.po +++ b/docs/locale/hi/LC_MESSAGES/features/notifications.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:45\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:13\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/notifications.po\n" +"X-Crowdin-File-ID: 1289\n" "Language: hi_IN\n" #: ../../features/notifications.rst:3 diff --git a/docs/locale/hi/LC_MESSAGES/features/preformed-panels.po b/docs/locale/hi/LC_MESSAGES/features/preformed-panels.po index 9f19607a4ce..7af10717a93 100644 --- a/docs/locale/hi/LC_MESSAGES/features/preformed-panels.po +++ b/docs/locale/hi/LC_MESSAGES/features/preformed-panels.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:46\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:12\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/preformed-panels.po\n" +"X-Crowdin-File-ID: 1291\n" "Language: hi_IN\n" #: ../../features/preformed-panels.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/features/printing.po b/docs/locale/hi/LC_MESSAGES/features/printing.po index 3f7bb2f844f..d7b11d4971e 100644 --- a/docs/locale/hi/LC_MESSAGES/features/printing.po +++ b/docs/locale/hi/LC_MESSAGES/features/printing.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:47\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:14\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/printing.po\n" +"X-Crowdin-File-ID: 1293\n" "Language: hi_IN\n" #: ../../features/printing.rst:3 diff --git a/docs/locale/hi/LC_MESSAGES/features/standings-rules.po b/docs/locale/hi/LC_MESSAGES/features/standings-rules.po index a8d76b4b50e..1dc45771241 100644 --- a/docs/locale/hi/LC_MESSAGES/features/standings-rules.po +++ b/docs/locale/hi/LC_MESSAGES/features/standings-rules.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:47\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:13\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/standings-rules.po\n" +"X-Crowdin-File-ID: 1295\n" "Language: hi_IN\n" #: ../../features/standings-rules.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/features/team-code-names.po b/docs/locale/hi/LC_MESSAGES/features/team-code-names.po index b43afa80d0f..0ff4d77ebd8 100644 --- a/docs/locale/hi/LC_MESSAGES/features/team-code-names.po +++ b/docs/locale/hi/LC_MESSAGES/features/team-code-names.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:47\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:11\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/team-code-names.po\n" +"X-Crowdin-File-ID: 1297\n" "Language: hi_IN\n" #: ../../features/team-code-names.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/features/user-accounts.po b/docs/locale/hi/LC_MESSAGES/features/user-accounts.po index 17030667a95..e6e12d5bc77 100644 --- a/docs/locale/hi/LC_MESSAGES/features/user-accounts.po +++ b/docs/locale/hi/LC_MESSAGES/features/user-accounts.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:47\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:10\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/user-accounts.po\n" +"X-Crowdin-File-ID: 1299\n" "Language: hi_IN\n" #: ../../features/user-accounts.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/features/venue-constraints.po b/docs/locale/hi/LC_MESSAGES/features/venue-constraints.po index 1e923231d3a..83b528d6912 100644 --- a/docs/locale/hi/LC_MESSAGES/features/venue-constraints.po +++ b/docs/locale/hi/LC_MESSAGES/features/venue-constraints.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:47\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:12\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/venue-constraints.po\n" +"X-Crowdin-File-ID: 1301\n" "Language: hi_IN\n" #: ../../features/venue-constraints.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/guide/comparisons.po b/docs/locale/hi/LC_MESSAGES/guide/comparisons.po index 40b1f7fdd73..f9b1982f814 100644 --- a/docs/locale/hi/LC_MESSAGES/guide/comparisons.po +++ b/docs/locale/hi/LC_MESSAGES/guide/comparisons.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:47\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:11\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/comparisons.po\n" +"X-Crowdin-File-ID: 1303\n" "Language: hi_IN\n" #: ../../guide/comparisons.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/guide/scaling.po b/docs/locale/hi/LC_MESSAGES/guide/scaling.po index 338a2d71918..ecb7f92abbc 100644 --- a/docs/locale/hi/LC_MESSAGES/guide/scaling.po +++ b/docs/locale/hi/LC_MESSAGES/guide/scaling.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:47\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:17\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/scaling.po\n" +"X-Crowdin-File-ID: 1305\n" "Language: hi_IN\n" #: ../../guide/scaling.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/guide/tournament-logistics.po b/docs/locale/hi/LC_MESSAGES/guide/tournament-logistics.po index 7952d37e474..b0115c86c0b 100644 --- a/docs/locale/hi/LC_MESSAGES/guide/tournament-logistics.po +++ b/docs/locale/hi/LC_MESSAGES/guide/tournament-logistics.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:47\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:16\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/tournament-logistics.po\n" +"X-Crowdin-File-ID: 1307\n" "Language: hi_IN\n" #: ../../guide/tournament-logistics.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/guide/upgrading.po b/docs/locale/hi/LC_MESSAGES/guide/upgrading.po index eb1c0654817..0f2f8b5b40e 100644 --- a/docs/locale/hi/LC_MESSAGES/guide/upgrading.po +++ b/docs/locale/hi/LC_MESSAGES/guide/upgrading.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:46\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:18\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/upgrading.po\n" +"X-Crowdin-File-ID: 1309\n" "Language: hi_IN\n" #: ../../guide/upgrading.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/index.po b/docs/locale/hi/LC_MESSAGES/index.po index d16f53e9e3d..75942debb53 100644 --- a/docs/locale/hi/LC_MESSAGES/index.po +++ b/docs/locale/hi/LC_MESSAGES/index.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:47\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:27\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/index.po\n" +"X-Crowdin-File-ID: 1311\n" "Language: hi_IN\n" #: ../../index.rst:18 diff --git a/docs/locale/hi/LC_MESSAGES/install/docker.po b/docs/locale/hi/LC_MESSAGES/install/docker.po index 406598b9b63..236eb575931 100644 --- a/docs/locale/hi/LC_MESSAGES/install/docker.po +++ b/docs/locale/hi/LC_MESSAGES/install/docker.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:46\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:17\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/docker.po\n" +"X-Crowdin-File-ID: 1313\n" "Language: hi_IN\n" #: ../../install/docker.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/install/heroku.po b/docs/locale/hi/LC_MESSAGES/install/heroku.po index 09e4d355f31..deef0d0cdf8 100644 --- a/docs/locale/hi/LC_MESSAGES/install/heroku.po +++ b/docs/locale/hi/LC_MESSAGES/install/heroku.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:46\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:14\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/heroku.po\n" +"X-Crowdin-File-ID: 1315\n" "Language: hi_IN\n" #: ../../install/heroku.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/install/linux.po b/docs/locale/hi/LC_MESSAGES/install/linux.po index 05abc018619..bb6bf5271c7 100644 --- a/docs/locale/hi/LC_MESSAGES/install/linux.po +++ b/docs/locale/hi/LC_MESSAGES/install/linux.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:46\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:14\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/linux.po\n" +"X-Crowdin-File-ID: 1317\n" "Language: hi_IN\n" #: ../../install/linux.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/install/local.po b/docs/locale/hi/LC_MESSAGES/install/local.po index e4c3fd825fb..ac3e1e8f999 100644 --- a/docs/locale/hi/LC_MESSAGES/install/local.po +++ b/docs/locale/hi/LC_MESSAGES/install/local.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:46\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:16\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/local.po\n" +"X-Crowdin-File-ID: 1319\n" "Language: hi_IN\n" #: ../../install/local.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/install/osx.po b/docs/locale/hi/LC_MESSAGES/install/osx.po index b5282b9febf..883b9c0495e 100644 --- a/docs/locale/hi/LC_MESSAGES/install/osx.po +++ b/docs/locale/hi/LC_MESSAGES/install/osx.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:46\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:15\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/osx.po\n" +"X-Crowdin-File-ID: 1321\n" "Language: hi_IN\n" #: ../../install/osx.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/install/windows.po b/docs/locale/hi/LC_MESSAGES/install/windows.po index 426c733ffe3..a4a3622d4c7 100644 --- a/docs/locale/hi/LC_MESSAGES/install/windows.po +++ b/docs/locale/hi/LC_MESSAGES/install/windows.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:45\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:27\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/windows.po\n" +"X-Crowdin-File-ID: 1323\n" "Language: hi_IN\n" #: ../../install/windows.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/install/wsl.po b/docs/locale/hi/LC_MESSAGES/install/wsl.po index a095bc6a139..1efdb396802 100644 --- a/docs/locale/hi/LC_MESSAGES/install/wsl.po +++ b/docs/locale/hi/LC_MESSAGES/install/wsl.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:44\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:27\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/wsl.po\n" +"X-Crowdin-File-ID: 1325\n" "Language: hi_IN\n" #: ../../install/wsl.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/use/finishing-a-tournament.po b/docs/locale/hi/LC_MESSAGES/use/finishing-a-tournament.po index c90013afb03..459b19fe46f 100644 --- a/docs/locale/hi/LC_MESSAGES/use/finishing-a-tournament.po +++ b/docs/locale/hi/LC_MESSAGES/use/finishing-a-tournament.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:44\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:28\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/finishing-a-tournament.po\n" +"X-Crowdin-File-ID: 1327\n" "Language: hi_IN\n" #: ../../use/finishing-a-tournament.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/use/importing-data.po b/docs/locale/hi/LC_MESSAGES/use/importing-data.po index 53d58d6b1fb..67cf984272c 100644 --- a/docs/locale/hi/LC_MESSAGES/use/importing-data.po +++ b/docs/locale/hi/LC_MESSAGES/use/importing-data.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:44\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:27\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/importing-data.po\n" +"X-Crowdin-File-ID: 1329\n" "Language: hi_IN\n" #: ../../use/importing-data.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/use/running-a-tournament.po b/docs/locale/hi/LC_MESSAGES/use/running-a-tournament.po index 347264d7c4f..8b36fe7a60e 100644 --- a/docs/locale/hi/LC_MESSAGES/use/running-a-tournament.po +++ b/docs/locale/hi/LC_MESSAGES/use/running-a-tournament.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:45\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:26\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/running-a-tournament.po\n" +"X-Crowdin-File-ID: 1331\n" "Language: hi_IN\n" #: ../../use/running-a-tournament.rst:5 diff --git a/docs/locale/hi/LC_MESSAGES/use/starting-a-tournament.po b/docs/locale/hi/LC_MESSAGES/use/starting-a-tournament.po index b6f53f6a4b9..8e89fb0f4ff 100644 --- a/docs/locale/hi/LC_MESSAGES/use/starting-a-tournament.po +++ b/docs/locale/hi/LC_MESSAGES/use/starting-a-tournament.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-13 03:45\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:27\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/starting-a-tournament.po\n" +"X-Crowdin-File-ID: 1333\n" "Language: hi_IN\n" #: ../../use/starting-a-tournament.rst:5 diff --git a/tabbycat/actionlog/locale/hi/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/hi/LC_MESSAGES/django.po index d3517073e91..cb739d1535d 100644 --- a/tabbycat/actionlog/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/hi/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:27\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" "MIME-Version: 1.0\n" @@ -12,310 +12,312 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" msgstr "" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" msgstr "" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" msgstr "" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" msgstr "" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" msgstr "" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" msgstr "" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" msgstr "" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" msgstr "" -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" msgstr "" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" msgstr "" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" msgstr "" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" msgstr "" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" msgstr "" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" msgstr "" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" msgstr "" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" msgstr "" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" msgstr "" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" msgstr "" -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" msgstr "" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" msgstr "" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" msgstr "" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" msgstr "" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" msgstr "" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" msgstr "" -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "" -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" msgstr "" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" msgstr "" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" msgstr "" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" msgstr "" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" msgstr "" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" msgstr "" -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" msgstr "" -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" msgstr "" -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" msgstr "" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" msgstr "" -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" msgstr "" -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" msgstr "" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" msgstr "" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" msgstr "" -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" msgstr "" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" msgstr "" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" msgstr "" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" msgstr "" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" msgstr "" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" msgstr "" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" msgstr "" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" msgstr "" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" msgstr "" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" msgstr "" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" msgstr "" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" msgstr "" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" msgstr "" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" msgstr "" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" msgstr "" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" msgstr "" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" msgstr "" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" msgstr "" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" msgstr "" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" msgstr "" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" msgstr "" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" msgstr "" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" msgstr "" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" msgstr "" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" msgstr "" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" msgstr "" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" msgstr "" -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" msgstr "" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" msgstr "" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" msgstr "" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" msgstr "" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." msgstr "" -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" msgstr "" diff --git a/tabbycat/adjallocation/locale/hi/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/hi/LC_MESSAGES/django.po index 30e50416792..f1c5f077041 100644 --- a/tabbycat/adjallocation/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/hi/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:26\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" "MIME-Version: 1.0\n" @@ -12,439 +12,440 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." msgstr "" -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." msgstr[0] "" msgstr[1] "" -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." msgstr[0] "" msgstr[1] "" -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." msgstr "" -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" msgstr "" -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." msgstr "" -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." msgstr "" -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." msgstr "" -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" msgstr "" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." msgstr "" -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." msgstr "" -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." msgstr "" -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." msgstr "" -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" msgstr[0] "" msgstr[1] "" -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." msgstr "" -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." msgstr "" -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" msgstr[0] "" msgstr[1] "" -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." msgstr "" -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." msgstr "" -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." msgstr "" -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." msgstr "" -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." msgstr "" -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." msgstr "" -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." msgstr "" -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." msgstr "" -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" msgstr "" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" msgstr "" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" msgstr "" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" msgstr "" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" msgstr "" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" msgstr "" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" msgstr "" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" msgstr "" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" msgstr "" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" msgstr "" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" msgstr "" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" msgstr "" -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" msgstr "" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" msgstr "" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" msgstr "" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" msgstr "" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" msgstr "" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" msgstr "" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" msgstr "" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" msgstr "" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" msgstr "" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" msgstr "" -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" msgstr "" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" msgstr "" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" msgstr "" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" msgstr "" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" msgstr "" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" msgstr "" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" msgstr "" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" msgstr "" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." msgstr "" -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" msgstr "" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." msgstr "" -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." msgstr "" -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" msgstr "" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" msgstr "" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" msgstr "" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" msgstr "" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" msgstr "" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" msgstr "" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" msgstr "" -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" msgstr "" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" msgstr "" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" msgstr "" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" msgstr "" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" msgstr "" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." msgstr "" -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" msgstr "" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" msgstr "" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." msgstr "" -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" msgstr "" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" msgstr "" -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." msgstr "" -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." msgstr "" diff --git a/tabbycat/adjfeedback/locale/hi/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/hi/LC_MESSAGES/django.po index 62153098653..a16d314ab1b 100644 --- a/tabbycat/adjfeedback/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/hi/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:26\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" "MIME-Version: 1.0\n" @@ -12,934 +12,952 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:43 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" msgstr "" -#: adjfeedback/admin.py:68 adjfeedback/admin.py:126 +#: adjfeedback/admin.py msgid "target" msgstr "" -#: adjfeedback/admin.py:69 adjfeedback/admin.py:127 adjfeedback/models.py:220 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" msgstr "" -#: adjfeedback/admin.py:70 adjfeedback/admin.py:128 adjfeedback/models.py:222 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" msgstr "" -#: adjfeedback/admin.py:84 +#: adjfeedback/admin.py msgid "Target" msgstr "" -#: adjfeedback/admin.py:85 adjfeedback/admin.py:149 +#: adjfeedback/admin.py msgid "Source" msgstr "" -#: adjfeedback/admin.py:167 +#: adjfeedback/admin.py +msgid "Feedback timestamp and version" +msgstr "" + +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgstr[0] "" msgstr[1] "" -#: adjfeedback/admin.py:179 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." msgstr[0] "" msgstr[1] "" -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." msgstr[0] "" msgstr[1] "" -#: adjfeedback/admin.py:202 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." msgstr[0] "" msgstr[1] "" -#: adjfeedback/admin.py:212 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." msgstr[0] "" msgstr[1] "" -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" msgstr "" -#: adjfeedback/forms.py:25 +#: adjfeedback/forms.py msgid "chair" msgstr "" -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "solo" msgstr "" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "panellist" msgstr "" -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "trainee" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:56 +#: adjfeedback/forms.py msgid "Yes" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:58 +#: adjfeedback/forms.py msgid "No" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:73 adjfeedback/forms.py:82 +#: adjfeedback/forms.py msgid "This field is required." msgstr "" -#: adjfeedback/forms.py:173 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" msgstr "" -#: adjfeedback/forms.py:185 +#: adjfeedback/forms.py msgid "Ignored" msgstr "" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:244 adjfeedback/forms.py:307 +#: adjfeedback/forms.py msgid "Submitted - " msgstr "" #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:245 adjfeedback/forms.py:312 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" msgstr "" -#: adjfeedback/forms.py:268 adjfeedback/forms.py:342 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "" -#: adjfeedback/forms.py:285 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" msgstr "" -#: adjfeedback/forms.py:309 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "" -#: adjfeedback/forms.py:315 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" msgstr "" -#: adjfeedback/forms.py:317 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" msgstr "" -#: adjfeedback/forms.py:408 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" msgstr "" -#: adjfeedback/forms.py:413 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" msgstr "" -#: adjfeedback/forms.py:426 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." msgstr "" -#: adjfeedback/forms.py:432 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" msgstr "" -#: adjfeedback/forms.py:440 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" msgstr "" -#: adjfeedback/forms.py:455 +#: adjfeedback/forms.py msgid "There were no scores to import." msgstr "" -#: adjfeedback/models.py:12 adjfeedback/models.py:215 +#: adjfeedback/models.py msgid "adjudicator" msgstr "" -#: adjfeedback/models.py:15 +#: adjfeedback/models.py msgid "round" msgstr "" -#: adjfeedback/models.py:16 adjfeedback/models.py:216 +#: adjfeedback/models.py msgid "score" msgstr "" -#: adjfeedback/models.py:17 +#: adjfeedback/models.py msgid "timestamp" msgstr "" -#: adjfeedback/models.py:20 +#: adjfeedback/models.py msgid "adjudicator base score history" msgstr "" -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score histories" msgstr "" -#: adjfeedback/models.py:29 +#: adjfeedback/models.py msgid "question" msgstr "" -#: adjfeedback/models.py:31 +#: adjfeedback/models.py msgid "feedback" msgstr "" -#: adjfeedback/models.py:42 adjfeedback/models.py:50 adjfeedback/models.py:58 -#: adjfeedback/models.py:66 +#: adjfeedback/models.py msgid "answer" msgstr "" -#: adjfeedback/models.py:45 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" msgstr "" -#: adjfeedback/models.py:46 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" msgstr "" -#: adjfeedback/models.py:53 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" msgstr "" -#: adjfeedback/models.py:54 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" msgstr "" -#: adjfeedback/models.py:61 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" msgstr "" -#: adjfeedback/models.py:62 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" msgstr "" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" msgstr "" -#: adjfeedback/models.py:70 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" msgstr "" -#: adjfeedback/models.py:89 +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answers" +msgstr "" + +#: adjfeedback/models.py msgid "checkbox" msgstr "" -#: adjfeedback/models.py:90 +#: adjfeedback/models.py msgid "yes/no (dropdown)" msgstr "" -#: adjfeedback/models.py:91 +#: adjfeedback/models.py msgid "integer (textbox)" msgstr "" -#: adjfeedback/models.py:92 +#: adjfeedback/models.py msgid "integer scale" msgstr "" -#: adjfeedback/models.py:93 +#: adjfeedback/models.py msgid "float" msgstr "" -#: adjfeedback/models.py:94 adjfeedback/models.py:127 +#: adjfeedback/models.py msgid "text" msgstr "" -#: adjfeedback/models.py:95 +#: adjfeedback/models.py msgid "long text" msgstr "" -#: adjfeedback/models.py:96 +#: adjfeedback/models.py msgid "select one" msgstr "" -#: adjfeedback/models.py:97 +#: adjfeedback/models.py msgid "select multiple" msgstr "" -#: adjfeedback/models.py:123 +#: adjfeedback/models.py msgid "tournament" msgstr "" -#: adjfeedback/models.py:125 +#: adjfeedback/models.py msgid "sequence number" msgstr "" -#: adjfeedback/models.py:128 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" msgstr "" -#: adjfeedback/models.py:130 +#: adjfeedback/models.py msgid "name" msgstr "" -#: adjfeedback/models.py:131 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" msgstr "" -#: adjfeedback/models.py:133 +#: adjfeedback/models.py msgid "reference" msgstr "" -#: adjfeedback/models.py:134 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" msgstr "" -#: adjfeedback/models.py:137 +#: adjfeedback/models.py msgid "from adjudicator" msgstr "" -#: adjfeedback/models.py:138 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" msgstr "" -#: adjfeedback/models.py:140 +#: adjfeedback/models.py msgid "from team" msgstr "" -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "Teams should be asked this question" msgstr "" -#: adjfeedback/models.py:144 +#: adjfeedback/models.py msgid "answer type" msgstr "" -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "required" msgstr "" -#: adjfeedback/models.py:147 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" msgstr "" -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "minimum value" msgstr "" -#: adjfeedback/models.py:150 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "" -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "maximum value" msgstr "" -#: adjfeedback/models.py:153 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "" -#: adjfeedback/models.py:160 +#: adjfeedback/models.py msgid "choices" msgstr "" -#: adjfeedback/models.py:161 -msgid "Permissible choices for select one/multiple fields, separated by '//' (ignored for other fields)" +#: adjfeedback/models.py +msgid "Permissible choices for select one/multiple fields (ignored for other fields)" msgstr "" -#: adjfeedback/models.py:166 +#: adjfeedback/models.py msgid "adjudicator feedback question" msgstr "" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "adjudicator feedback questions" msgstr "" -#: adjfeedback/models.py:225 adjfeedback/views.py:761 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" msgstr "" -#: adjfeedback/models.py:226 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" msgstr "" -#: adjfeedback/models.py:230 +#: adjfeedback/models.py msgid "adjudicator feedback" msgstr "" -#: adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator feedbacks" msgstr "" -#: adjfeedback/models.py:278 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." msgstr "" -#: adjfeedback/models.py:281 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." msgstr "" -#: adjfeedback/models.py:283 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" msgstr "" -#: adjfeedback/models.py:285 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." msgstr "" -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" msgstr "" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py +msgid "N/A" +msgstr "" + +#: adjfeedback/tables.py msgid "Current weighted score" msgstr "" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." msgstr "" -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" msgstr "" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" msgstr "" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" msgstr "" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:83 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:92 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." msgstr "" -#: adjfeedback/tables.py:96 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" msgstr "" -#: adjfeedback/tables.py:105 +#: adjfeedback/tables.py msgid "Feedback Per Round" msgstr "" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" msgstr "" -#: adjfeedback/tables.py:124 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" msgstr[0] "" msgstr[1] "" -#: adjfeedback/tables.py:147 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" msgstr "" -#: adjfeedback/tables.py:171 +#: adjfeedback/tables.py msgid "View Missing Feedback" msgstr "" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" msgstr "" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" msgstr "" -#: adjfeedback/templates/enter_feedback.html:9 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format -msgid "Add Feedback from %(source_name)s" +msgid "Add Feedback from %(name)s" msgstr "" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" msgstr "" -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" msgstr "" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." msgstr "" -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." msgstr "" -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." msgstr "" -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" msgstr "" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" msgstr "" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" msgstr "" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" msgstr "" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" msgstr "" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" msgstr "" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" msgstr "" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." msgstr "" -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." msgstr "" -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "\n" -" On %(adjudicator)s\n" -" " +msgid "On %(adjudicator)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" +msgid "Received as %(as_type)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" msgstr "" -#: adjfeedback/templates/feedback_card.html:85 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:90 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:95 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:95 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:100 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:105 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" msgstr "" -#: adjfeedback/templates/feedback_card.html:105 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" msgstr "" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" msgstr "" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" msgstr "" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html #, python-format -msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit on trainees." +msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:20 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:31 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" msgstr "" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" msgstr "" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" msgstr "" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 -#, python-format -msgid "Add feedback from %(name)s" -msgstr "" - -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" msgstr "" -#: adjfeedback/views.py:117 +#: adjfeedback/views.py msgid "Feedback Overview" msgstr "" -#: adjfeedback/views.py:141 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" msgstr "" -#: adjfeedback/views.py:152 adjfeedback/views.py:176 adjfeedback/views.py:191 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" msgstr[0] "" msgstr[1] "" -#: adjfeedback/views.py:155 adjfeedback/views.py:181 adjfeedback/views.py:196 +#: adjfeedback/views.py msgid "Feedbacks" msgstr "" -#: adjfeedback/views.py:162 +#: adjfeedback/views.py msgid "Find Feedback" msgstr "" -#: adjfeedback/views.py:170 adjfeedback/views.py:706 +#: adjfeedback/views.py msgid "From Teams" msgstr "" -#: adjfeedback/views.py:185 adjfeedback/views.py:700 +#: adjfeedback/views.py msgid "From Adjudicators" msgstr "" -#: adjfeedback/views.py:270 +#: adjfeedback/views.py msgid "Latest Feedback" msgstr "" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "(30 most recent)" msgstr "" -#: adjfeedback/views.py:281 +#: adjfeedback/views.py msgid "Only Comments" msgstr "" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "(250 most recent)" msgstr "" -#: adjfeedback/views.py:293 +#: adjfeedback/views.py msgid "Important Feedback" msgstr "" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" msgstr "" -#: adjfeedback/views.py:361 +#: adjfeedback/views.py msgid "A Team" msgstr "" -#: adjfeedback/views.py:366 +#: adjfeedback/views.py msgid "Team" msgstr "" -#: adjfeedback/views.py:373 adjfeedback/views.py:392 +#: adjfeedback/views.py msgid "Institution" msgstr "" -#: adjfeedback/views.py:378 +#: adjfeedback/views.py msgid "An Adjudicator" msgstr "" -#: adjfeedback/views.py:385 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "" -#: adjfeedback/views.py:512 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." msgstr "" -#: adjfeedback/views.py:542 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." msgstr "" -#: adjfeedback/views.py:621 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" msgstr "" -#: adjfeedback/views.py:644 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." msgstr "" -#: adjfeedback/views.py:671 +#: adjfeedback/views.py msgid "Feedback Progress" msgstr "" -#: adjfeedback/views.py:692 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" msgstr[0] "" msgstr[1] "" -#: adjfeedback/views.py:737 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." msgstr "" -#: adjfeedback/views.py:751 +#: adjfeedback/views.py msgid "confirmed" msgstr "" -#: adjfeedback/views.py:751 +#: adjfeedback/views.py msgid "un-confirmed" msgstr "" -#: adjfeedback/views.py:761 +#: adjfeedback/views.py msgid "un-ignored" msgstr "" -#: adjfeedback/views.py:797 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." diff --git a/tabbycat/availability/locale/hi/LC_MESSAGES/django.po b/tabbycat/availability/locale/hi/LC_MESSAGES/django.po index e40495dfddb..8de3d431f26 100644 --- a/tabbycat/availability/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/hi/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:28\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" "MIME-Version: 1.0\n" @@ -12,301 +12,295 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" msgstr "" -#: availability/models.py:15 +#: availability/models.py msgid "content type" msgstr "" -#: availability/models.py:16 +#: availability/models.py msgid "object id" msgstr "" -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" msgstr "" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" msgstr "" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" msgstr "" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" msgstr "" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" msgstr "" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" msgstr "" -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" msgstr "" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" msgstr "" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." msgstr "" -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." msgstr "" -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." msgstr "" -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgstr[0] "" msgstr[1] "" -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " msgstr "" -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" msgstr "" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." msgstr "" -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" msgstr "" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" msgstr "" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" msgstr "" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" msgstr "" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" msgstr "" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" msgstr "" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" msgstr "" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" msgstr "" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" msgstr "" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." msgstr "" -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." msgstr "" -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" msgstr "" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" msgstr "" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" msgstr "" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" msgstr "" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" @@ -314,7 +308,7 @@ msgstr[0] "" msgstr[1] "" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" @@ -324,7 +318,7 @@ msgstr[1] "" #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" @@ -332,67 +326,67 @@ msgstr[0] "" msgstr[1] "" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" msgstr[0] "" msgstr[1] "" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" msgstr "" -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" msgstr "" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" msgstr "" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" msgstr "" -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" msgstr "" -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" msgstr "" -#: availability/views.py:260 +#: availability/views.py msgid "Room" msgstr "" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" msgstr "" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" msgstr "" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" msgstr "" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." msgstr "" -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." msgstr "" -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." msgstr "" -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." msgstr "" diff --git a/tabbycat/breakqual/locale/hi/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/hi/LC_MESSAGES/django.po index 6bdffae47e6..66c25ce84e7 100644 --- a/tabbycat/breakqual/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/hi/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:27\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" "MIME-Version: 1.0\n" @@ -12,511 +12,511 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" msgstr "" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "" +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" +msgstr[1] "" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "" -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" msgstr "" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" msgstr "" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" msgstr "" -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" msgstr "" -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" msgstr "" -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" msgstr "" -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" msgstr "" -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" msgstr "" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" msgstr "" -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" msgstr "" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" msgstr "" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" msgstr "" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" msgstr "" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" msgstr "" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" msgstr "" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" msgstr "" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" msgstr "" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" msgstr "" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" msgstr "" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" msgstr "" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" msgstr "" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" msgstr "" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" msgstr "" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" msgstr "" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" msgstr "" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" msgstr "" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" msgstr "" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" msgstr "" -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" msgstr "" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." msgstr "" -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." msgstr "" -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" msgstr "" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." msgstr "" -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" msgstr "" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " msgstr "" -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" msgstr "" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" msgstr "" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " msgstr "" -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" msgstr "" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" msgstr "" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" msgstr "" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" msgstr "" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" msgstr "" -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" msgstr "" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." msgstr "" -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." msgstr "" -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." msgstr "" -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." msgstr "" -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." msgstr "" -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." msgstr "" -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" msgstr "" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" msgstr "" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" msgstr "" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" msgstr "" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." msgstr "" -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" msgstr "" -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" msgstr "" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" msgstr "" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" msgstr "" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" msgstr "" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" msgstr "" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" msgstr "" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" msgstr "" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" msgstr "" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" msgstr "" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" msgstr "" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" msgstr "" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" msgstr "" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" msgstr "" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" msgstr "" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" msgstr "" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" msgstr "" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" msgstr "" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" msgstr "" -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" msgstr "" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" msgstr "" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" msgstr "" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." msgstr "" -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." msgstr "" -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" msgstr "" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" msgstr "" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" diff --git a/tabbycat/draw/locale/hi/LC_MESSAGES/django.po b/tabbycat/draw/locale/hi/LC_MESSAGES/django.po index 17ff9464416..b4108a54ae4 100644 --- a/tabbycat/draw/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/hi/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:28\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" "MIME-Version: 1.0\n" @@ -12,1133 +12,1108 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "" -msgstr[1] "" - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." msgstr[0] "" msgstr[1] "" -#: draw/admin.py:93 +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." msgstr[0] "" msgstr[1] "" -#: draw/apps.py:7 draw/views.py:429 draw/views.py:432 +#: draw/apps.py draw/views.py msgid "Draw" msgstr "" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "Too many swaps" msgstr "" -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" msgstr "" -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" msgstr "" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble up (history)" msgstr "" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble down (history)" msgstr "" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble up (institution)" msgstr "" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble down (institution)" msgstr "" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" msgstr "" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Can't bubble up/down" msgstr "" -#: draw/generator/__init__.py:26 +#: draw/generator/__init__.py msgid "Pull-up team" msgstr "" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." msgstr "" -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." msgstr "" -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." msgstr "" -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." msgstr "" -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." msgstr "" -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." msgstr "" -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." msgstr "" -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." msgstr "" -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." msgstr "" -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." msgstr "" -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." msgstr "" -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." msgstr "" -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." msgstr "" -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." msgstr "" -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." msgstr "" -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" msgstr "" -#: draw/manager.py:269 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." msgstr "" -#: draw/models.py:27 +#: draw/models.py msgid "none" msgstr "" -#: draw/models.py:28 +#: draw/models.py msgid "postponed" msgstr "" -#: draw/models.py:29 +#: draw/models.py msgid "draft" msgstr "" -#: draw/models.py:30 +#: draw/models.py msgid "confirmed" msgstr "" -#: draw/models.py:36 draw/models.py:389 +#: draw/models.py msgid "round" msgstr "" -#: draw/models.py:38 -msgid "venue" +#: draw/models.py +msgid "room" msgstr "" -#: draw/models.py:41 +#: draw/models.py msgid "bracket" msgstr "" -#: draw/models.py:43 +#: draw/models.py msgid "room rank" msgstr "" -#: draw/models.py:49 +#: draw/models.py msgid "importance" msgstr "" -#: draw/models.py:51 +#: draw/models.py msgid "result status" msgstr "" -#: draw/models.py:53 +#: draw/models.py msgid "sides confirmed" msgstr "" -#: draw/models.py:54 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." msgstr "" -#: draw/models.py:57 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "" -#: draw/models.py:58 +#: draw/models.py msgid "debates" msgstr "" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:77 draw/models.py:102 +#: draw/models.py msgid " (sides not confirmed)" msgstr "" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:89 draw/models.py:106 +#: draw/models.py msgid " vs " msgstr "" -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" msgstr "" -#: draw/models.py:263 +#: draw/models.py msgid "negative" msgstr "" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" msgstr "" -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" msgstr "" -#: draw/models.py:266 +#: draw/models.py msgid "closing government" msgstr "" -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" msgstr "" -#: draw/models.py:274 draw/models.py:391 +#: draw/models.py msgid "team" msgstr "" -#: draw/models.py:276 draw/models.py:393 +#: draw/models.py msgid "side" msgstr "" -#: draw/models.py:282 +#: draw/models.py msgid "debate team" msgstr "" -#: draw/models.py:283 +#: draw/models.py msgid "debate teams" msgstr "" -#: draw/models.py:311 -msgid "placed 1st" -msgstr "" - -#: draw/models.py:313 -msgid "placed 2nd" -msgstr "" - -#: draw/models.py:315 -msgid "placed 3rd" -msgstr "" - -#: draw/models.py:317 -msgid "placed 4th" +#: draw/models.py +#, python-format +msgid "placed %(place)s" msgstr "" -#: draw/models.py:319 draw/models.py:326 +#: draw/models.py msgid "result unknown" msgstr "" -#: draw/models.py:322 +#: draw/models.py msgid "won" msgstr "" -#: draw/models.py:324 +#: draw/models.py msgid "lost" msgstr "" -#: draw/models.py:397 +#: draw/models.py msgid "team side allocation" msgstr "" -#: draw/models.py:398 +#: draw/models.py msgid "team side allocations" msgstr "" #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" msgstr "" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" msgstr "" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" msgstr "" -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" msgstr "" -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" msgstr "" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" msgstr "" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" msgstr "" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" msgstr "" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" msgstr "" -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" msgstr "" -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" msgstr "" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" msgstr "" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" msgstr "" -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" msgstr "" -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" msgstr "" -#: draw/tables.py:292 +#: draw/tables.py msgid "After" msgstr "" -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" msgstr "" -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" msgstr "" -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" msgstr "" -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" msgstr "" -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" msgstr "" -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" msgstr "" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" msgstr "" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" msgstr "" -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" msgstr "" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" msgstr "" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" msgstr "" -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" msgstr "" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" msgstr "" -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" msgstr "" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" msgstr "" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" msgstr "" -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" msgstr "" -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" msgstr "" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." -msgstr "" - -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." msgstr "" -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "" +msgid_plural "Enter motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" msgstr "" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." msgstr "" -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." msgstr "" -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." msgstr "" -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" msgstr "" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." msgstr "" -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." msgstr "" -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:200 +#: draw/templates/draw_display_admin.html msgid "Release Motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:201 -msgid "Release motion to public" -msgstr "" +msgid_plural "Release Motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:202 -msgid "Unrelease motion to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." msgstr "" -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." msgstr "" -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "" - -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "" +msgid_plural "Motions have been released publicly." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" msgstr "" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" msgstr "" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" msgstr "" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" msgstr "" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" msgstr "" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" msgstr "" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" msgstr "" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" msgstr "" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" msgstr "" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" msgstr "" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" msgstr "" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" msgstr "" -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" msgstr "" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" msgstr "" -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" msgstr "" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" msgstr "" -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" msgstr "" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" msgstr "" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" msgstr "" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" msgstr "" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." msgstr "" -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." msgstr "" -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." msgstr "" -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" msgstr "" -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" msgstr "" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" msgstr "" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" msgstr "" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" msgstr "" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" msgstr "" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" msgstr "" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." msgstr "" -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." msgstr "" -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " msgstr "" -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." msgstr "" -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." msgstr "" -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." msgstr "" -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." msgstr "" -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." msgstr "" -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." msgstr "" -#: draw/views.py:66 draw/views.py:460 +#: draw/views.py msgid "No debates in this round" msgstr "" -#: draw/views.py:74 +#: draw/views.py #, python-format msgid "Draw for %(round)s" msgstr "" -#: draw/views.py:76 +#: draw/views.py msgid "Draws for Current Rounds" msgstr "" -#: draw/views.py:80 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" msgstr "" -#: draw/views.py:84 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" msgstr "" -#: draw/views.py:122 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" msgstr[0] "" msgstr[1] "" -#: draw/views.py:169 +#: draw/views.py msgid "The draw for this round hasn't been released." msgstr "" -#: draw/views.py:222 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" msgstr "" -#: draw/views.py:380 +#: draw/views.py msgid "Adjudicator Assignments" msgstr "" -#: draw/views.py:400 +#: draw/views.py +msgid "Position" +msgstr "" + +#: draw/views.py msgid "Team Pairings" msgstr "" -#: draw/views.py:424 +#: draw/views.py msgid "No Draw" msgstr "" -#: draw/views.py:426 +#: draw/views.py msgid "Draft Draw" msgstr "" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:518 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" msgstr "" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:523 +#: draw/views.py msgid "BR" msgstr "" -#: draw/views.py:548 +#: draw/views.py msgid "Draw with Details" msgstr "" -#: draw/views.py:556 +#: draw/views.py msgid "Position Balance Report" msgstr "" -#: draw/views.py:567 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" msgstr "" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:570 +#: draw/views.py msgid " (i.e., Shannon entropy)" msgstr "" -#: draw/views.py:600 +#: draw/views.py msgid "Teams with position imbalances" msgstr "" -#: draw/views.py:601 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" msgstr "" -#: draw/views.py:604 +#: draw/views.py msgid "Annotated draw" msgstr "" -#: draw/views.py:635 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" msgstr "" -#: draw/views.py:643 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " msgstr "" -#: draw/views.py:651 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " msgstr "" -#: draw/views.py:660 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " msgstr "" -#: draw/views.py:676 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "" -#: draw/views.py:703 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "" -#: draw/views.py:723 +#: draw/views.py msgid "Released the draw." msgstr "" -#: draw/views.py:738 +#: draw/views.py msgid "Unreleased the draw." msgstr "" -#: draw/views.py:751 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." msgstr "" -#: draw/views.py:770 +#: draw/views.py msgid "Side Pre-Allocations" msgstr "" -#: draw/views.py:803 +#: draw/views.py msgid "Edit Matchups" msgstr "" diff --git a/tabbycat/importer/locale/hi/LC_MESSAGES/django.po b/tabbycat/importer/locale/hi/LC_MESSAGES/django.po index 7fd8d9cea4e..1fa8a7ea259 100644 --- a/tabbycat/importer/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/hi/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:32\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" "MIME-Version: 1.0\n" @@ -12,368 +12,410 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" msgstr "" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" msgstr "" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" msgstr "" -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." msgstr "" -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." msgstr "" -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" msgstr "" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" msgstr "" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" msgstr "" -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" msgstr "" -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" msgstr "" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" msgstr "" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" msgstr "" -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" msgstr "" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" msgstr "" -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" msgstr "" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." msgstr "" -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." msgstr "" -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." msgstr "" -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." msgstr "" -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" msgstr "" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." msgstr "" -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" msgstr "" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 +#: importer/forms.py +msgid "XML" +msgstr "" + +#: importer/forms.py +msgid "The Debate XML archive to parse" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export Tournament Archive" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Tournaments can be exported in an XML format for use outside Tabbycat." +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export all data" +msgstr "" + +#: importer/templates/archive_importer.html +msgctxt "page title" +msgid "Import Tournament Archive" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "This form will create a tournament with the data provided as a Debate XML format." +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Import" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Go back to the site home page" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html msgctxt "page title" msgid "Add Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" msgstr "" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" msgstr "" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." msgstr "" -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" msgstr "" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" msgstr "" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" msgstr "" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" msgstr "" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" msgstr "" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" msgstr "" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_index.html +msgid "Add/Edit Break Categories" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Speaker Categories" +msgstr "" + +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" msgstr "" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" msgstr "" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" msgstr "" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" msgstr "" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" msgstr "" -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" msgstr "" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" msgstr "" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." msgstr "" -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" msgstr "" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" msgstr "" -#: importer/views.py:102 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." msgstr[0] "" msgstr[1] "" -#: importer/views.py:123 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." msgstr[0] "" msgstr[1] "" -#: importer/views.py:182 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." msgstr[0] "" msgstr[1] "" -#: importer/views.py:203 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "" -#: importer/views.py:208 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." msgstr[0] "" msgstr[1] "" -#: importer/views.py:224 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " msgstr "" -#: importer/views.py:232 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." msgstr "" +#: importer/views.py +msgid "Tournament archive has been imported." +msgstr "" + diff --git a/tabbycat/locale/hi/LC_MESSAGES/django.po b/tabbycat/locale/hi/LC_MESSAGES/django.po index 74a4a3c9311..16e9038d8e3 100644 --- a/tabbycat/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/locale/hi/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:34\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" "MIME-Version: 1.0\n" @@ -12,872 +12,946 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" msgstr "" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:92 +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" msgstr "" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" msgstr "" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" msgstr "" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" msgstr "" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." msgstr "" -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" msgstr "" -#: checkins/models.py:37 +#: checkins/models.py msgid "" msgstr "" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" msgstr "" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" msgstr "" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" msgstr "" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" msgstr "" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" msgstr "" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" msgstr "" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" msgstr "" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" msgstr "" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" msgstr "" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" msgstr "" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" msgstr "" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" msgstr "" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." msgstr "" -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." msgstr "" -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." msgstr "" -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" msgstr "" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" msgstr "" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" msgstr "" -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." msgstr "" -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." msgstr "" -#: checkins/views.py:29 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" msgstr "" -#: checkins/views.py:62 +#: checkins/views.py msgid "People's Check-In Statuses" msgstr "" -#: checkins/views.py:119 +#: checkins/views.py msgid "Rooms' Check-In Statuses" msgstr "" -#: checkins/views.py:168 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" msgstr "" -#: checkins/views.py:175 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" msgstr "" -#: checkins/views.py:180 templates/nav/public_nav.html:132 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "" -#: checkins/views.py:185 +#: checkins/views.py msgid "Rooms" msgstr "" -#: checkins/views.py:226 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" msgstr "" -#: checkins/views.py:233 +#: checkins/views.py msgid "Identifiers" msgstr "" -#: checkins/views.py:269 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." msgstr "" -#: checkins/views.py:276 +#: checkins/views.py msgid "You have revoked your check-in." msgstr "" -#: checkins/views.py:278 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." msgstr "" -#: checkins/views.py:281 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." msgstr "" -#: checkins/views.py:283 +#: checkins/views.py msgid "You are now checked in." msgstr "" -#: settings/core.py:45 +#: settings/core.py msgid "Arabic" msgstr "" -#: settings/core.py:46 +#: settings/core.py +msgid "Bengali" +msgstr "" + +#: settings/core.py msgid "English" msgstr "" -#: settings/core.py:47 +#: settings/core.py msgid "Spanish" msgstr "" -#: settings/core.py:48 +#: settings/core.py msgid "French" msgstr "" -#: settings/core.py:49 +#: settings/core.py +msgid "Indonesian" +msgstr "" + +#: settings/core.py msgid "Japanese" msgstr "" -#: settings/core.py:50 +#: settings/core.py +msgid "Malay" +msgstr "" + +#: settings/core.py msgid "Portuguese" msgstr "" -#: settings/core.py:51 +#: settings/core.py msgid "Russian" msgstr "" -#: templates/admin/delete_protected_message.html:4 +#: settings/core.py +msgid "Simplified Chinese" +msgstr "" + +#: settings/core.py +msgid "Translation" +msgstr "" + +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." msgstr "" -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." msgstr "" -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." msgstr "" -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" msgstr "" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" msgstr "" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" msgstr "" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" msgstr "" -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." msgstr "" -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" msgstr "" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" msgstr "" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." msgstr "" -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgstr[0] "" msgstr[1] "" -#: templates/errors/public_403.html:14 +#: templates/errors/legacy_sendgrid_warning.html +msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." +msgstr "" + +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." msgstr "" -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." msgstr "" -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." msgstr "" -#: templates/footer.html:24 +#: templates/footer.html #, python-format -msgid "For a tournament of this size, we suggest a donation of $%(amount)s." +msgid "For a tournament of this size, we suggest a donation of $%(amount)s." msgstr "" -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." msgstr "" -#: templates/footer.html:32 -#, python-format -msgid "Donations to Tabbycat from individuals or organisations are much appreciated." +#: templates/footer.html +msgid "Donations to Tabbycat from individuals or organisations are much appreciated." msgstr "" -#: templates/footer.html:40 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" msgstr "" -#: templates/footer.html:42 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." msgstr "" -#: templates/footer.html:51 -msgid "Need ballots?" +#: templates/footer.html +msgid "Our Organisation" msgstr "" -#: templates/footer.html:53 -msgid "You can customise and print great ballots from your browser." +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." msgstr "" -#: templates/footer.html:66 +#: templates/footer.html msgid "Language" msgstr "" -#: templates/footer.html:73 +#: templates/footer.html msgid "GitHub" msgstr "" -#: templates/footer.html:79 +#: templates/footer.html msgid "Documentation" msgstr "" -#: templates/footer.html:85 +#: templates/footer.html msgid "Support" msgstr "" -#: templates/footer.html:91 +#: templates/footer.html msgid "Facebook" msgstr "" -#: templates/footer.html:97 +#: templates/footer.html msgid "Set Up A Copy" msgstr "" -#: templates/footer.html:111 +#: templates/footer.html msgid "Change Language" msgstr "" -#: templates/footer.html:128 +#: templates/footer.html msgid "Use this language" msgstr "" -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" msgstr "" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" msgstr "" -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" msgstr "" -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" msgstr "" -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" msgstr "" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" msgstr "" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" msgstr "" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" msgstr "" -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" msgstr "" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" msgstr "" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" msgstr "" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:162 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" msgstr "" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" msgstr "" -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" msgstr "" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" msgstr "" -#: templates/nav/admin_nav.html:96 -msgid "It\\" -msgstr "" - -#: templates/nav/admin_nav.html:97 -msgid "Where's Edit Database?" +#: templates/nav/admin_nav.html +msgid "Export XML" msgstr "" -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:147 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" msgstr "" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" msgstr "" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" msgstr "" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" msgstr "" -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" msgstr "" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" msgstr "" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" msgstr "" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" msgstr "" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" msgstr "" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" msgstr "" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" msgstr "" -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" msgstr "" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:152 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" msgstr "" -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" msgstr "" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" msgstr "" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" msgstr "" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" msgstr "" -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" msgstr "" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:142 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:157 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" msgstr "" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" msgstr "" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" msgstr "" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" msgstr "" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" msgstr "" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" msgstr "" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" msgstr "" -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:182 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" msgstr "" -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" msgstr "" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:167 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" msgstr "" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" msgstr "" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" msgstr "" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" msgstr "" -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" msgstr "" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" msgstr "" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" msgstr "" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" msgstr "" -#: templates/nav/public_nav.html:50 +#: templates/nav/public_nav.html msgid "Motions Tab" msgstr "" -#: templates/nav/public_nav.html:59 +#: templates/nav/public_nav.html +msgid "By round" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Globally" +msgstr "" + +#: templates/nav/public_nav.html msgid "Draws" msgstr "" -#: templates/nav/public_nav.html:70 +#: templates/nav/public_nav.html msgid "No Draws Available" msgstr "" -#: templates/nav/public_nav.html:78 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: templates/nav/public_nav.html:82 +#: templates/nav/public_nav.html msgid "Current Draws" msgstr "" -#: templates/nav/public_nav.html:102 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" msgstr "" -#: templates/nav/public_nav.html:120 +#: templates/nav/public_nav.html msgid "Break" msgstr "" -#: templates/nav/public_nav.html:172 +#: templates/nav/public_nav.html msgid "Feedback Progress" msgstr "" -#: templates/nav/public_nav.html:177 +#: templates/nav/public_nav.html msgid "Enter Ballot" msgstr "" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" msgstr "" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" msgstr "" -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" msgstr "" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" msgstr "" -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" msgstr "" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" msgstr "" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" msgstr "" -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" msgstr "" -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." msgstr "" -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." msgstr "" -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." msgstr "" -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" msgstr "" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." msgstr "" -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" msgstr "" -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" msgstr "" -#: templates/registration/password_change_form.html:20 +#: templates/registration/password_change_form.html +#, python-format +msgid "API Token: %(api_token)s" +msgstr "" + +#: templates/registration/password_change_form.html +msgid "The API token will allow you to authorize external applications to access the site as staff." +msgstr "" + +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." msgstr "" -#: templates/registration/password_change_form.html:25 -#: templates/registration/password_reset_confirm.html:38 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" msgstr "" -#: templates/registration/password_change_form.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" msgstr "" -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "" -#: templates/registration/password_reset_complete.html:16 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." msgstr "" -#. Translators: This text appears on a button that takes the user to the login page after a password reset. -#: templates/registration/password_reset_complete.html:23 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" msgstr "" -#: templates/registration/password_reset_confirm.html:4 -#: templates/registration/password_reset_confirm.html:14 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" msgstr "" -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html +msgctxt "page title" +msgid "Password Reset" +msgstr "" + +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" msgstr "" -#: templates/registration/password_reset_confirm.html:44 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." msgstr "" -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" -msgid "Password reset e-mail sent" -msgstr "" - -#: templates/registration/password_reset_done.html:16 -msgid "We've e-mailed you instructions for setting your password, if an account exists with the e-mail address you entered. You should receive them shortly." +msgid "Password reset email sent" msgstr "" -#: templates/registration/password_reset_done.html:19 -msgid "If you don't receive an e-mail, please make sure you've entered the address you registered with, and check your spam folder." +#: templates/registration/password_reset_done.html +msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." msgstr "" -#. Translators: This text appears on a button that takes the user back to the login page from the password reset page. -#: templates/registration/password_reset_done.html:26 -msgid "Return to the login page" +#: templates/registration/password_reset_done.html +msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." msgstr "" -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" msgstr "" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format -msgid "Someone asked for a password reset for the e-mail address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." +msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" msgstr "" -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format -msgid "If this wasn't you, that probably means someone else typed your e-mail address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." -msgstr "" - -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 -msgctxt "page title" -msgid "Password Reset" +msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_form.html:27 -msgid "Enter your e-mail address below, and we'll e-mail you a password reset link." +#: templates/registration/password_reset_form.html +msgid "Enter your email address below, and we'll email you a password reset link." msgstr "" -#: templates/registration/password_reset_form.html:34 -msgid "Please enter a valid e-mail address." +#: templates/registration/password_reset_form.html +msgid "Please enter a valid email address." msgstr "" -#: templates/registration/password_reset_form.html:39 -msgid "E-mail address" +#: templates/registration/password_reset_form.html users/forms.py +msgid "Email address" msgstr "" -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" msgstr "" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" msgstr "" -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" msgstr "" -#: urls.py:101 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" msgstr "" -#: urls.py:104 +#: urls.py msgid "Welcome! You just logged in!" msgstr "" -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." msgstr "" -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." msgstr "" +#: users/templates/admin/auth/delete_user_warning.html +msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." +msgstr "" + +#: users/templates/signup.html +msgid "Sign-Up" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Administrator Account" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Assistant Account" +msgstr "" + +#: users/templates/signup.html +msgid "Create Account" +msgstr "" + +#: users/views.py +msgid "You have successfully created a new administrator account." +msgstr "" + +#: users/views.py +msgid "You have successfully created a new assistant account." +msgstr "" + +#: users/views.py +msgid "Whoops! It looks like someone's already created the first user account. Please log in." +msgstr "" + +#: users/views.py +#, python-format +msgid "Welcome! You've created an account for %s." +msgstr "" + diff --git a/tabbycat/locale/hi/LC_MESSAGES/djangojs.po b/tabbycat/locale/hi/LC_MESSAGES/djangojs.po index 1cf75f6c90b..997e4d90036 100644 --- a/tabbycat/locale/hi/LC_MESSAGES/djangojs.po +++ b/tabbycat/locale/hi/LC_MESSAGES/djangojs.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-01-14 04:50+1100\n" -"PO-Revision-Date: 2020-03-13 03:46\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-10 07:06\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" "MIME-Version: 1.0\n" @@ -12,8 +12,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/djangojs.po\n" +"X-Crowdin-File-ID: 962\n" #: checkins/templates/CheckInScanContainer.vue: msgid "Scan Using Camera" @@ -42,7 +44,7 @@ msgid "By %1" msgstr "" #: checkins/templates/CheckInStatusContainer.vue: -msgid "No matching venues found." +msgid "No matching rooms found." msgstr "" #: checkins/templates/CheckInStatusContainer.vue: @@ -182,7 +184,7 @@ msgid "ID %1," msgstr "" #: printing/templates/PrintableBallotHeader.vue: -msgid "Venue:" +msgid "Room:" msgstr "" #: printing/templates/PrintableBallotHeader.vue: diff --git a/tabbycat/motions/locale/hi/LC_MESSAGES/django.po b/tabbycat/motions/locale/hi/LC_MESSAGES/django.po index 23f0c59ce6b..3201fb353ac 100644 --- a/tabbycat/motions/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/hi/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:32\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" +"Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" "MIME-Version: 1.0\n" @@ -12,336 +12,388 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "" -#: motions/models.py:9 -msgid "sequence number" -msgstr "" - -#: motions/models.py:10 -msgid "The order in which motions are displayed" -msgstr "" - -#: motions/models.py:12 +#: motions/models.py msgid "text" msgstr "" -#: motions/models.py:13 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" msgstr "" -#: motions/models.py:15 +#: motions/models.py msgid "reference" msgstr "" -#: motions/models.py:16 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" msgstr "" -#: motions/models.py:18 +#: motions/models.py msgid "info slide" msgstr "" -#: motions/models.py:19 +#: motions/models.py msgid "The information slide for this topic; if it has one" msgstr "" -#: motions/models.py:21 -msgid "round" +#: motions/models.py +msgid "tournament" msgstr "" -#: motions/models.py:25 motions/models.py:37 +#: motions/models.py +msgid "rounds" +msgstr "" + +#: motions/models.py msgid "motion" msgstr "" -#: motions/models.py:26 +#: motions/models.py msgid "motions" msgstr "" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" msgstr "" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" msgstr "" -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" msgstr "" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" msgstr "" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" msgstr "" -#: motions/statistics.py:88 +#: motions/models.py +msgid "round" +msgstr "" + +#: motions/models.py +msgid "sequence number" +msgstr "" + +#: motions/models.py +msgid "The order in which motions are displayed" +msgstr "" + +#: motions/models.py +msgid "round motion" +msgstr "" + +#: motions/models.py +msgid "round motions" +msgstr "" + +#: motions/statistics.py msgid "extremely strong evidence" msgstr "" -#: motions/statistics.py:89 +#: motions/statistics.py msgid "strong evidence" msgstr "" -#: motions/statistics.py:90 +#: motions/statistics.py msgid "moderate evidence" msgstr "" -#: motions/statistics.py:91 +#: motions/statistics.py msgid "weak evidence" msgstr "" -#: motions/statistics.py:92 +#: motions/statistics.py msgid "very weak evidence" msgstr "" -#: motions/statistics.py:93 +#: motions/statistics.py msgid "extremely weak evidence" msgstr "" -#: motions/statistics.py:116 +#: motions/statistics.py msgid "balance inconclusive" msgstr "" -#: motions/statistics.py:117 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" msgstr "" -#: motions/statistics.py:125 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" msgstr "" -#: motions/statistics.py:126 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." msgstr "" -#: motions/statistics.py:131 +#: motions/statistics.py msgid "probably balanced" msgstr "" -#: motions/statistics.py:132 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." msgstr "" -#: motions/templates/motion_statistics.html:4 -#: motions/templates/motion_statistics.html:5 motions/views.py:165 -msgid "Motion Statistics" -msgstr "" - -#: motions/templates/motion_statistics.html:12 -msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments and during elimination rounds." -msgstr "" - -#: motions/templates/motion_statistics.html:39 -#: motions/templates/public_motions.html:31 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" msgstr "" -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" msgstr[0] "" msgstr[1] "" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" msgstr "" -#: motions/templates/motions_edit.html:55 +#: motions/templates/motions_edit.html +msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Reuse Motions from Last Round" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Use Existing Motions" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" msgstr[0] "" msgstr[1] "" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "" -#: motions/templates/public_motions.html:39 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." msgstr "" -#: motions/templates/public_motions.html:45 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." msgstr "" -#: motions/templates/public_motions.html:50 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." msgstr "" -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" msgstr[0] "" msgstr[1] "" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" msgstr[0] "" msgstr[1] "" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." msgstr "" -#: motions/views.py:87 +#: motions/utils.py +msgid "Not all latest ballots list the same motion, so could not be merged." +msgstr "" + +#: motions/utils.py +msgid "Motion vetos are inconsistent, so could not be merged." +msgstr "" + +#: motions/views.py msgid "The motion has been saved." msgstr "" -#: motions/views.py:89 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." msgstr[0] "" msgstr[1] "" -#: motions/views.py:94 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." msgstr[0] "" msgstr[1] "" -#: motions/views.py:118 -msgid "Released the motion(s)." +#: motions/views.py +msgid "Motions cannot be copied to the first round." msgstr "" -#: motions/views.py:125 -msgid "Unreleased the motion(s)." -msgstr "" +#: motions/views.py +#, python-format +msgid "Reused the motion from the previous round." +msgid_plural "Reused the %(count)d motions from the previous round." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" +msgstr[1] "" -#: motions/views.py:149 +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py msgid "Round Motions" msgstr "" +#: motions/views.py +msgid "Motion Statistics" +msgstr "" + diff --git a/tabbycat/notifications/locale/hi/LC_MESSAGES/django.po b/tabbycat/notifications/locale/hi/LC_MESSAGES/django.po index c9591f2445d..340673d4b0c 100644 --- a/tabbycat/notifications/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:33\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -15,388 +15,402 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/notifications/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" msgstr "" -#: notifications/consumers.py:37 -msgid "Failed to send e-mails." -msgstr "" - -#: notifications/consumers.py:40 -msgid "Connection error sending e-mails." -msgstr "" - -#: notifications/forms.py:11 +#: notifications/forms.py msgid "Recipient email address" msgstr "" -#: notifications/forms.py:15 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" msgstr "" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" msgstr "" -#: notifications/forms.py:29 +#: notifications/forms.py msgid "Subject" msgstr "" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Message" msgstr "" -#: notifications/models.py:12 notifications/models.py:27 +#: notifications/models.py msgid "email" msgstr "" -#: notifications/models.py:13 +#: notifications/models.py msgid "SMS" msgstr "" -#: notifications/models.py:22 +#: notifications/models.py msgid "recipient" msgstr "" -#: notifications/models.py:24 +#: notifications/models.py msgid "method" msgstr "" -#: notifications/models.py:29 notifications/models.py:130 +#: notifications/models.py msgid "context" msgstr "" -#: notifications/models.py:31 -msgid "message" -msgstr "" - -#: notifications/models.py:34 +#: notifications/models.py msgid "notification" msgstr "" -#: notifications/models.py:36 notifications/models.py:75 -#: notifications/models.py:126 +#: notifications/models.py msgid "timestamp" msgstr "" -#: notifications/models.py:39 +#: notifications/models.py msgid "sent message" msgstr "" -#: notifications/models.py:40 +#: notifications/models.py msgid "sent messages" msgstr "" -#: notifications/models.py:60 +#: notifications/models.py msgid "team points" msgstr "" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot confirmed" msgstr "" -#: notifications/models.py:62 +#: notifications/models.py msgid "feedback URL" msgstr "" -#: notifications/models.py:63 +#: notifications/models.py msgid "ballot URL" msgstr "" -#: notifications/models.py:64 +#: notifications/models.py msgid "landing page URL" msgstr "" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator draw released" msgstr "" -#: notifications/models.py:66 +#: notifications/models.py msgid "team registration" msgstr "" -#: notifications/models.py:67 +#: notifications/models.py msgid "adjudicator registration" msgstr "" -#: notifications/models.py:68 +#: notifications/models.py msgid "motion(s) released" msgstr "" -#: notifications/models.py:69 +#: notifications/models.py msgid "team draw released" msgstr "" -#: notifications/models.py:73 notifications/models.py:128 +#: notifications/models.py +msgid "custom message" +msgstr "" + +#: notifications/models.py msgid "event" msgstr "" -#: notifications/models.py:78 +#: notifications/models.py msgid "tournament" msgstr "" -#: notifications/models.py:80 +#: notifications/models.py msgid "round" msgstr "" -#: notifications/models.py:83 +#: notifications/models.py +msgid "subject template" +msgstr "" + +#: notifications/models.py +msgid "body template" +msgstr "" + +#: notifications/models.py msgid "bulk notification" msgstr "" -#: notifications/models.py:84 +#: notifications/models.py msgid "bulk notifications" msgstr "" -#: notifications/models.py:110 +#: notifications/models.py msgid "Processed" msgstr "" -#: notifications/models.py:111 +#: notifications/models.py msgid "Dropped" msgstr "" -#: notifications/models.py:112 +#: notifications/models.py msgid "Deferred" msgstr "" -#: notifications/models.py:113 +#: notifications/models.py msgid "Delivered" msgstr "" -#: notifications/models.py:114 +#: notifications/models.py msgid "Bounced" msgstr "" -#: notifications/models.py:115 +#: notifications/models.py msgid "Opened" msgstr "" -#: notifications/models.py:116 +#: notifications/models.py msgid "Clicked" msgstr "" -#: notifications/models.py:117 +#: notifications/models.py msgid "Unsubscribed" msgstr "" -#: notifications/models.py:118 +#: notifications/models.py msgid "Marked as spam" msgstr "" -#: notifications/models.py:119 +#: notifications/models.py msgid "Unsubscribed from group" msgstr "" -#: notifications/models.py:120 +#: notifications/models.py msgid "Resubscribed to group" msgstr "" -#: notifications/models.py:124 +#: notifications/models.py msgid "email message" msgstr "" -#: notifications/models.py:133 +#: notifications/models.py msgid "email status" msgstr "" -#: notifications/models.py:134 +#: notifications/models.py msgid "email statuses" msgstr "" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." msgstr "" -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." msgstr "" -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" msgstr "" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." msgstr "" -#: notifications/templates/notifications_nav.html:5 notifications/views.py:47 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" msgstr "" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:24 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" msgstr "" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" msgstr "" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" msgstr "" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." msgstr "" -#: notifications/templates/test_email.html:25 +#: notifications/templates/test_email.html +#, python-format +msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." +msgstr "" + +#: notifications/templates/test_email.html msgid "Go back to the site home page" msgstr "" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "the chair" msgstr "" -#: notifications/utils.py:30 +#: notifications/utils.py msgid "the only" msgstr "" -#: notifications/utils.py:31 +#: notifications/utils.py msgid "a panellist" msgstr "" -#: notifications/utils.py:32 +#: notifications/utils.py msgid "a trainee" msgstr "" -#: notifications/utils.py:55 +#: notifications/utils.py msgid "TBA" msgstr "" -#: notifications/utils.py:101 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "" -#: notifications/utils.py:112 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:116 +#: notifications/utils.py msgid "Win" msgstr "" -#: notifications/utils.py:116 +#: notifications/utils.py msgid "Loss" msgstr "" -#: notifications/utils.py:128 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " msgstr "" -#: notifications/utils.py:202 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " msgstr "" -#: notifications/utils.py:237 notifications/utils.py:238 +#: notifications/utils.py msgid ", " msgstr "" -#: notifications/views.py:39 +#: notifications/views.py +#, python-format +msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" +msgstr "" + +#: notifications/views.py +msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." +msgstr "" + +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" msgstr "" -#: notifications/views.py:42 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." msgstr "" -#: notifications/views.py:53 +#: notifications/views.py msgid "N/A" msgstr "" -#: notifications/views.py:54 +#: notifications/views.py msgid "Not known" msgstr "" -#: notifications/views.py:59 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" msgstr "" -#: notifications/views.py:102 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "" -#: notifications/views.py:119 +#: notifications/views.py msgid "Timeline" msgstr "" -#: notifications/views.py:129 notifications/views.py:220 +#: notifications/views.py msgid "Participant" msgstr "" -#: notifications/views.py:130 +#: notifications/views.py +msgid "Email address" +msgstr "" + +#: notifications/views.py msgid "Status" msgstr "" -#: notifications/views.py:131 +#: notifications/views.py msgid "Time" msgstr "" -#: notifications/views.py:170 +#: notifications/views.py msgid "Email Participants" msgstr "" -#: notifications/views.py:196 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." msgstr[0] "" msgstr[1] "" -#: notifications/views.py:202 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." msgstr "" -#: notifications/views.py:210 +#: notifications/views.py msgid "Send Email" msgstr "" -#: notifications/views.py:225 -msgid "Email Address" -msgstr "" - -#: notifications/views.py:226 +#: notifications/views.py msgid "Not Provided" msgstr "" -#: notifications/views.py:239 +#: notifications/views.py msgid "Role" msgstr "" -#: notifications/views.py:240 +#: notifications/views.py msgid "Adjudicator" msgstr "" -#: notifications/views.py:240 +#: notifications/views.py msgid "Speaker" msgstr "" -#: notifications/views.py:248 +#: notifications/views.py msgid "Speakers" msgstr "" -#: notifications/views.py:249 +#: notifications/views.py msgid "Adjudicators" msgstr "" diff --git a/tabbycat/options/locale/hi/LC_MESSAGES/django.po b/tabbycat/options/locale/hi/LC_MESSAGES/django.po index bdd3737b8aa..f78a95fa6b5 100644 --- a/tabbycat/options/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:32\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -15,1438 +15,1603 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/options/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" msgstr "" -#: options/models.py:13 +#: options/models.py msgid "instance" msgstr "" -#: options/models.py:18 +#: options/models.py msgid "tournament preference" msgstr "" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" msgstr "" -#: options/preferences.py:18 options/templates/preferences_index.html:28 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" msgstr "" -#: options/preferences.py:24 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:27 +#: options/preferences.py msgid "Minimum speaker score" msgstr "" -#: options/preferences.py:33 +#: options/preferences.py msgid "Maximum speaker score" msgstr "" -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:42 +#: options/preferences.py msgid "Speaker score step" msgstr "" -#: options/preferences.py:43 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:51 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" msgstr "" -#: options/preferences.py:52 +#: options/preferences.py msgid "Maximum margin" msgstr "" -#: options/preferences.py:61 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" msgstr "" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum reply score" msgstr "" -#: options/preferences.py:70 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" msgstr "" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum reply score" msgstr "" -#: options/preferences.py:79 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:80 +#: options/preferences.py msgid "Reply score step" msgstr "" -#: options/preferences.py:88 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" msgstr "" -#: options/preferences.py:89 +#: options/preferences.py msgid "Margin includes dissenters" msgstr "" -#: options/preferences.py:96 options/templates/preferences_index.html:33 +#: options/preferences.py +msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" +msgstr "" + +#: options/preferences.py +msgid "Team score includes ghosts" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" msgstr "" -#: options/preferences.py:102 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" msgstr "" -#: options/preferences.py:103 +#: options/preferences.py msgid "Minimum adjudicator score to vote" msgstr "" -#: options/preferences.py:111 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" msgstr "" -#: options/preferences.py:112 +#: options/preferences.py msgid "Adjudicator conflict penalty" msgstr "" -#: options/preferences.py:120 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" msgstr "" -#: options/preferences.py:121 +#: options/preferences.py msgid "Adjudicator history penalty" msgstr "" -#: options/preferences.py:129 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" msgstr "" -#: options/preferences.py:130 +#: options/preferences.py msgid "Importance mismatch penalty" msgstr "" -#: options/preferences.py:138 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" msgstr "" -#: options/preferences.py:139 +#: options/preferences.py msgid "Team institution penalty" msgstr "" -#: options/preferences.py:147 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" msgstr "" -#: options/preferences.py:148 +#: options/preferences.py msgid "Team history penalty" msgstr "" -#: options/preferences.py:156 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" msgstr "" -#: options/preferences.py:157 +#: options/preferences.py msgid "Avoid same institution" msgstr "" -#: options/preferences.py:165 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" msgstr "" -#: options/preferences.py:166 +#: options/preferences.py msgid "Avoid team history" msgstr "" -#: options/preferences.py:174 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "" -#: options/preferences.py:175 +#: options/preferences.py msgid "Odd bracket resolution method" msgstr "" -#: options/preferences.py:179 +#: options/preferences.py msgid "Pull up from top" msgstr "" -#: options/preferences.py:180 +#: options/preferences.py msgid "Pull up from bottom" msgstr "" -#: options/preferences.py:181 +#: options/preferences.py msgid "Pull up from middle" msgstr "" -#: options/preferences.py:182 +#: options/preferences.py msgid "Pull up at random" msgstr "" -#: options/preferences.py:183 +#: options/preferences.py msgid "Intermediate brackets" msgstr "" -#: options/preferences.py:184 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" msgstr "" -#: options/preferences.py:185 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" msgstr "" -#: options/preferences.py:186 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" msgstr "" -#: options/preferences.py:193 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" msgstr "" -#: options/preferences.py:194 +#: options/preferences.py msgid "Side allocations method" msgstr "" -#: options/preferences.py:198 options/preferences.py:215 +#: options/preferences.py msgid "Random" msgstr "" -#: options/preferences.py:199 +#: options/preferences.py msgid "Balance" msgstr "" -#: options/preferences.py:200 +#: options/preferences.py msgid "Pre-allocated" msgstr "" -#: options/preferences.py:201 +#: options/preferences.py msgid "Manually enter from ballot" msgstr "" -#: options/preferences.py:208 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." msgstr "" -#: options/preferences.py:209 +#: options/preferences.py msgid "Pairing method" msgstr "" -#: options/preferences.py:213 +#: options/preferences.py msgid "Slide" msgstr "" -#: options/preferences.py:214 +#: options/preferences.py msgid "Fold" msgstr "" -#: options/preferences.py:216 +#: options/preferences.py msgid "Adjacent" msgstr "" -#: options/preferences.py:217 +#: options/preferences.py msgid "Fold top, adjacent rest" msgstr "" -#: options/preferences.py:224 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" msgstr "" -#: options/preferences.py:226 +#: options/preferences.py msgid "Conflict avoidance method" msgstr "" -#: options/preferences.py:230 +#: options/preferences.py msgid "Off" msgstr "" -#: options/preferences.py:231 +#: options/preferences.py msgid "One-up-one-down" msgstr "" -#: options/preferences.py:238 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "" -#: options/preferences.py:240 +#: options/preferences.py msgid "Pullup restriction" msgstr "" -#: options/preferences.py:244 +#: options/preferences.py msgid "No restriction" msgstr "" -#: options/preferences.py:245 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" msgstr "" -#: options/preferences.py:246 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" msgstr "" -#: options/preferences.py:247 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" msgstr "" -#: options/preferences.py:254 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." msgstr "" -#: options/preferences.py:255 +#: options/preferences.py msgid "BP pullup distribution" msgstr "" -#: options/preferences.py:259 +#: options/preferences.py msgid "Anywhere in bracket" msgstr "" -#: options/preferences.py:260 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" msgstr "" -#: options/preferences.py:267 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" msgstr "" -#: options/preferences.py:268 +#: options/preferences.py msgid "BP position cost" msgstr "" -#: options/preferences.py:272 +#: options/preferences.py msgid "Simple" msgstr "" -#: options/preferences.py:273 +#: options/preferences.py msgid "Rényi entropy" msgstr "" -#: options/preferences.py:274 +#: options/preferences.py msgid "Population variance" msgstr "" -#: options/preferences.py:281 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." msgstr "" -#: options/preferences.py:284 +#: options/preferences.py msgid "Rényi order (BP)" msgstr "" -#: options/preferences.py:293 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." msgstr "" -#: options/preferences.py:296 +#: options/preferences.py msgid "BP position cost exponent" msgstr "" -#: options/preferences.py:305 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." msgstr "" -#: options/preferences.py:307 +#: options/preferences.py msgid "BP assignment method" msgstr "" -#: options/preferences.py:311 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" msgstr "" -#: options/preferences.py:312 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" msgstr "" -#: options/preferences.py:319 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" msgstr "" -#: options/preferences.py:320 +#: options/preferences.py msgid "Skip adjudicator check-ins" msgstr "" -#: options/preferences.py:328 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:329 +#: options/preferences.py msgid "No panellist adjudicators" msgstr "" -#: options/preferences.py:337 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:338 +#: options/preferences.py msgid "No trainee adjudicators" msgstr "" -#: options/preferences.py:345 options/templates/preferences_index.html:48 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" msgstr "" -#: options/preferences.py:351 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:352 +#: options/preferences.py msgid "Minimum adjudicator score" msgstr "" -#: options/preferences.py:360 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:361 +#: options/preferences.py msgid "Maximum adjudicator score" msgstr "" -#: options/preferences.py:369 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" msgstr "" -#: options/preferences.py:370 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" msgstr "" -#: options/preferences.py:374 +#: options/preferences.py msgid "Chairs on panellists and trainees" msgstr "" -#: options/preferences.py:375 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" msgstr "" -#: options/preferences.py:376 +#: options/preferences.py +msgid "Panellists and trainees on chairs, vice-versa" +msgstr "" + +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" msgstr "" -#: options/preferences.py:383 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "" -#: options/preferences.py:384 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" msgstr "" -#: options/preferences.py:388 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" msgstr "" -#: options/preferences.py:389 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" msgstr "" -#: options/preferences.py:396 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" msgstr "" -#: options/preferences.py:397 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" msgstr "" -#: options/preferences.py:405 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" msgstr "" -#: options/preferences.py:406 +#: options/preferences.py msgid "Show unaccredited" msgstr "" -#: options/preferences.py:414 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" msgstr "" -#: options/preferences.py:415 +#: options/preferences.py msgid "Feedback introduction/explanation" msgstr "" -#: options/preferences.py:423 options/templates/preferences_index.html:38 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" msgstr "" -#: options/preferences.py:429 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" msgstr "" -#: options/preferences.py:430 +#: options/preferences.py msgid "Teams in debate" msgstr "" -#: options/preferences.py:434 +#: options/preferences.py msgid "Two-team format" msgstr "" -#: options/preferences.py:435 +#: options/preferences.py msgid "British Parliamentary (four teams)" msgstr "" -#: options/preferences.py:442 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:443 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" msgstr "" -#: options/preferences.py:447 options/preferences.py:460 +#: options/preferences.py msgid "One ballot per voting adjudicator" msgstr "" -#: options/preferences.py:448 options/preferences.py:461 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" msgstr "" -#: options/preferences.py:455 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:456 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" msgstr "" -#: options/preferences.py:468 +#: options/preferences.py +msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." +msgstr "" + +#: options/preferences.py +msgid "Winner Declaration in ballot(s)" +msgstr "" + +#: options/preferences.py +msgid "Do not require separate winner selection" +msgstr "" + +#: options/preferences.py +msgid "Require separate winner selection as a check on correct scores" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection to break tied-point debates" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection, overriding scores" +msgstr "" + +#: options/preferences.py +msgid "When ballots should ask for speaker scores." +msgstr "" + +#: options/preferences.py +msgid "Require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Always require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Only require speaker scores in preliminary rounds" +msgstr "" + +#: options/preferences.py +msgid "Never require speaker scores" +msgstr "" + +#: options/preferences.py msgid "How many substantive speakers on a team" msgstr "" -#: options/preferences.py:469 +#: options/preferences.py msgid "Substantive speakers" msgstr "" -#: options/preferences.py:477 +#: options/preferences.py msgid "What to call the teams" msgstr "" -#: options/preferences.py:478 +#: options/preferences.py msgid "Side names" msgstr "" -#: options/preferences.py:487 +#: options/preferences.py msgid "Whether this style features scored reply speeches" msgstr "" -#: options/preferences.py:488 +#: options/preferences.py msgid "Reply scores" msgstr "" -#: options/preferences.py:496 -msgid "Enables the motion veto field on ballots, to track veto statistics" +#: options/preferences.py +msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" msgstr "" -#: options/preferences.py:497 -msgid "Motion vetoes" +#: options/preferences.py +msgid "Require reply speaker to have given a substantive speech" msgstr "" -#: options/preferences.py:504 options/templates/preferences_index.html:43 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "" -#: options/preferences.py:510 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" msgstr "" -#: options/preferences.py:511 +#: options/preferences.py msgid "Speeches missable for standings eligibility" msgstr "" -#: options/preferences.py:519 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" msgstr "" -#: options/preferences.py:520 +#: options/preferences.py msgid "Replies missable for standings eligibility" msgstr "" -#: options/preferences.py:528 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" msgstr "" -#: options/preferences.py:529 +#: options/preferences.py msgid "Team standings precedence" msgstr "" -#: options/preferences.py:545 options/preferences.py:580 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" msgstr "" -#: options/preferences.py:551 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" msgstr "" -#: options/preferences.py:552 +#: options/preferences.py msgid "Team standings extra metrics" msgstr "" -#: options/preferences.py:563 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" msgstr "" -#: options/preferences.py:564 +#: options/preferences.py msgid "Speaker standings precedence" msgstr "" -#: options/preferences.py:586 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" msgstr "" -#: options/preferences.py:587 +#: options/preferences.py msgid "Speaker standings extra metrics" msgstr "" -#: options/preferences.py:597 options/templates/preferences_index.html:59 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" msgstr "" -#: options/preferences.py:603 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:604 +#: options/preferences.py msgid "Release team tab to public" msgstr "" -#: options/preferences.py:612 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." msgstr "" -#: options/preferences.py:613 +#: options/preferences.py msgid "Top teams cutoff" msgstr "" -#: options/preferences.py:621 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:622 +#: options/preferences.py msgid "Release speaker tab to public" msgstr "" -#: options/preferences.py:630 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." msgstr "" -#: options/preferences.py:631 +#: options/preferences.py msgid "Top speakers cutoff" msgstr "" -#: options/preferences.py:639 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:640 +#: options/preferences.py msgid "Release replies tab to public" msgstr "" -#: options/preferences.py:648 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." msgstr "" -#: options/preferences.py:649 +#: options/preferences.py msgid "Top replies cutoff" msgstr "" -#: options/preferences.py:675 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." msgstr "" -#: options/preferences.py:678 +#: options/preferences.py msgid "Release motions tab to public" msgstr "" -#: options/preferences.py:686 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" msgstr "" -#: options/preferences.py:687 +#: options/preferences.py msgid "Release adjudicator tab to public" msgstr "" -#: options/preferences.py:695 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" msgstr "" -#: options/preferences.py:696 +#: options/preferences.py msgid "Adjudicator tab displays" msgstr "" -#: options/preferences.py:700 +#: options/preferences.py msgid "Only shows base score" msgstr "" -#: options/preferences.py:701 +#: options/preferences.py msgid "Only shows final score" msgstr "" -#: options/preferences.py:702 +#: options/preferences.py msgid "Shows base, final, and per-round scores" msgstr "" -#: options/preferences.py:709 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." msgstr "" -#: options/preferences.py:710 +#: options/preferences.py msgid "Release ballots to public" msgstr "" -#: options/preferences.py:718 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" msgstr "" -#: options/preferences.py:719 +#: options/preferences.py msgid "Release all round results to public" msgstr "" -#: options/preferences.py:726 options/templates/preferences_index.html:64 +#: options/preferences.py +msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release ballots through private URLs" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" msgstr "" -#: options/preferences.py:732 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" msgstr "" -#: options/preferences.py:733 +#: options/preferences.py msgid "Ballot submissions from adjudicators" msgstr "" -#: options/preferences.py:737 options/preferences.py:751 +#: options/preferences.py msgid "Disabled (tab staff only)" msgstr "" -#: options/preferences.py:738 options/preferences.py:752 +#: options/preferences.py msgid "Use private URLs" msgstr "" -#: options/preferences.py:739 options/preferences.py:753 +#: options/preferences.py msgid "Use publicly accessible form" msgstr "" -#: options/preferences.py:746 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" msgstr "" -#: options/preferences.py:747 +#: options/preferences.py msgid "Feedback submissions from participants" msgstr "" -#: options/preferences.py:760 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" msgstr "" -#: options/preferences.py:761 +#: options/preferences.py msgid "Require password for submission" msgstr "" -#: options/preferences.py:769 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" msgstr "" -#: options/preferences.py:770 +#: options/preferences.py msgid "Password for public submission" msgstr "" -#: options/preferences.py:778 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" msgstr "" -#: options/preferences.py:779 +#: options/preferences.py msgid "Bypass double checking" msgstr "" -#: options/preferences.py:787 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." msgstr "" -#: options/preferences.py:788 +#: options/preferences.py msgid "Enforce blind confirmations" msgstr "" -#: options/preferences.py:796 -msgid "If checked, ballots require a motion to be selected from a list of options. " -msgstr "" - -#: options/preferences.py:797 -msgid "Enable motion selection" -msgstr "" - -#: options/preferences.py:805 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." msgstr "" -#: options/preferences.py:808 +#: options/preferences.py msgid "Assistant user access" msgstr "" -#: options/preferences.py:813 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" msgstr "" -#: options/preferences.py:814 +#: options/preferences.py msgid "Just results entry and draw display" msgstr "" -#: options/preferences.py:815 +#: options/preferences.py msgid "Only results entry" msgstr "" -#: options/preferences.py:821 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." msgstr "" -#: options/preferences.py:822 +#: options/preferences.py msgid "Participant self-checkin" msgstr "" -#: options/preferences.py:830 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" msgstr "" -#: options/preferences.py:833 +#: options/preferences.py msgid "Check-In Window (People)" msgstr "" -#: options/preferences.py:839 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" msgstr "" -#: options/preferences.py:842 +#: options/preferences.py msgid "Check-In Window (Rooms)" msgstr "" -#: options/preferences.py:848 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" msgstr "" -#: options/preferences.py:849 +#: options/preferences.py msgid "Ballot Digit Checks" msgstr "" -#: options/preferences.py:857 -msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" -msgstr "" - -#: options/preferences.py:858 -msgid "Ballot Hide Motions" -msgstr "" - -#: options/preferences.py:866 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:867 +#: options/preferences.py msgid "Score return location" msgstr "" -#: options/preferences.py:875 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:876 +#: options/preferences.py msgid "Feedback return location" msgstr "" -#: options/preferences.py:883 options/templates/preferences_index.html:69 +#: options/preferences.py +msgid "Lets debates have their status as postponed, as to not block draw generation." +msgstr "" + +#: options/preferences.py +msgid "Enable postponements" +msgstr "" + +#: options/preferences.py +msgid "Have each voting adjudicator submit a separate ballot." +msgstr "" + +#: options/preferences.py +msgid "Individual voting ballots" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" msgstr "" -#: options/preferences.py:889 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" msgstr "" -#: options/preferences.py:890 +#: options/preferences.py msgid "Enable public view of participants list" msgstr "" -#: options/preferences.py:898 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" msgstr "" -#: options/preferences.py:899 +#: options/preferences.py msgid "Enable public view of institutions list" msgstr "" -#: options/preferences.py:907 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" msgstr "" -#: options/preferences.py:908 +#: options/preferences.py msgid "Enable public view of diversity info" msgstr "" -#: options/preferences.py:916 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." msgstr "" -#: options/preferences.py:919 +#: options/preferences.py msgid "Enable public view of the checkin statuses" msgstr "" -#: options/preferences.py:927 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" msgstr "" -#: options/preferences.py:928 +#: options/preferences.py msgid "Show break categories on participants page" msgstr "" -#: options/preferences.py:936 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" msgstr "" -#: options/preferences.py:937 +#: options/preferences.py msgid "Show pre-allocated sides to public" msgstr "" -#: options/preferences.py:945 +#: options/preferences.py msgid "Enables the public page showing released draws" msgstr "" -#: options/preferences.py:946 +#: options/preferences.py msgid "Enable public view of draw" msgstr "" -#: options/preferences.py:950 +#: options/preferences.py msgid "Disabled" msgstr "" -#: options/preferences.py:951 +#: options/preferences.py msgid "Show a single page for the current round's draw" msgstr "" -#: options/preferences.py:952 +#: options/preferences.py msgid "Show individual pages for all released draws" msgstr "" -#: options/preferences.py:959 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" msgstr "" -#: options/preferences.py:960 +#: options/preferences.py msgid "Enable public view of results" msgstr "" -#: options/preferences.py:968 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" msgstr "" -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of motions" msgstr "" -#: options/preferences.py:977 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" msgstr "" -#: options/preferences.py:978 +#: options/preferences.py msgid "Enable public view of team standings" msgstr "" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" msgstr "" -#: options/preferences.py:987 +#: options/preferences.py msgid "Enable public record pages" msgstr "" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:996 +#: options/preferences.py msgid "Release team breaks to public" msgstr "" -#: options/preferences.py:1004 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1005 +#: options/preferences.py msgid "Release adjudicators break to public" msgstr "" -#: options/preferences.py:1013 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" msgstr "" -#: options/preferences.py:1014 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" msgstr "" -#: options/preferences.py:1022 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." msgstr "" -#: options/preferences.py:1023 +#: options/preferences.py msgid "Tournament staff" msgstr "" -#: options/preferences.py:1033 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" msgstr "" -#: options/preferences.py:1034 +#: options/preferences.py msgid "Welcome message" msgstr "" -#: options/preferences.py:1043 options/templates/preferences_index.html:74 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" msgstr "" -#: options/preferences.py:1049 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" msgstr "" -#: options/preferences.py:1050 +#: options/preferences.py msgid "Show splitting adjudicators" msgstr "" -#: options/preferences.py:1058 -msgid "If showing results to public, show which motions were selected in the record" -msgstr "" - -#: options/preferences.py:1059 -msgid "Show motions in results" -msgstr "" - -#: options/preferences.py:1067 +#: options/preferences.py msgid "Whether and how to use code names for teams" msgstr "" -#: options/preferences.py:1068 +#: options/preferences.py msgid "Team code names" msgstr "" -#: options/preferences.py:1073 +#: options/preferences.py msgid "Do not use code names" msgstr "" -#: options/preferences.py:1074 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" msgstr "" -#: options/preferences.py:1075 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" msgstr "" -#: options/preferences.py:1077 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" msgstr "" -#: options/preferences.py:1079 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" msgstr "" -#: options/preferences.py:1085 +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" msgstr "" -#: options/preferences.py:1086 +#: options/preferences.py msgid "Show emoji" msgstr "" -#: options/preferences.py:1094 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" msgstr "" -#: options/preferences.py:1095 +#: options/preferences.py msgid "Show team institutions" msgstr "" -#: options/preferences.py:1103 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" msgstr "" -#: options/preferences.py:1104 +#: options/preferences.py msgid "Show adjudicator institutions" msgstr "" -#: options/preferences.py:1112 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" msgstr "" -#: options/preferences.py:1113 +#: options/preferences.py msgid "Show speakers in draw" msgstr "" -#: options/preferences.py:1121 -msgid "Order in which are listed by round in the public view" -msgstr "" - -#: options/preferences.py:1122 -msgid "Order to display motions" -msgstr "" - -#: options/preferences.py:1126 -msgid "Earliest round first" -msgstr "" - -#: options/preferences.py:1127 -msgid "Latest round first" -msgstr "" - -#: options/preferences.py:1133 options/templates/preferences_index.html:79 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" msgstr "" -#: options/preferences.py:1139 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "" -#: options/preferences.py:1140 +#: options/preferences.py msgid "Reply-to name" msgstr "" -#: options/preferences.py:1148 +#: options/preferences.py msgid "The email address for handling replies" msgstr "" -#: options/preferences.py:1149 +#: options/preferences.py msgid "Reply-to address" msgstr "" -#: options/preferences.py:1157 +#: options/preferences.py msgid "A secret key to accept email status events" msgstr "" -#: options/preferences.py:1158 +#: options/preferences.py msgid "Email status secret key" msgstr "" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "" -#: options/preferences.py:1169 +#: options/preferences.py msgid "Ballot receipts" msgstr "" -#: options/preferences.py:1177 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "" -#: options/preferences.py:1179 +#: options/preferences.py msgid "Ballot receipt subject line" msgstr "" -#: options/preferences.py:1187 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "" -#: options/preferences.py:1188 +#: options/preferences.py msgid "Ballot receipt message" msgstr "" -#: options/preferences.py:1204 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1205 +#: options/preferences.py msgid "Team points subject line" msgstr "" -#: options/preferences.py:1212 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1213 +#: options/preferences.py msgid "Team points message" msgstr "" -#: options/preferences.py:1222 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1223 +#: options/preferences.py msgid "Adjudicator draw subject line" msgstr "" -#: options/preferences.py:1230 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1231 +#: options/preferences.py msgid "Adjudicator draw message" msgstr "" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." msgstr "" -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team draw subject line" msgstr "" -#: options/preferences.py:1248 options/preferences.py:1266 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1249 options/preferences.py:1267 +#: options/preferences.py msgid "Private URL notification message" msgstr "" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1259 +#: options/preferences.py msgid "Private URL notification subject line" msgstr "" -#: options/preferences.py:1280 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1281 +#: options/preferences.py msgid "Motion release notification subject line" msgstr "" -#: options/preferences.py:1288 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1289 +#: options/preferences.py msgid "Motion release notification message" msgstr "" -#: options/preferences.py:1297 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1298 +#: options/preferences.py msgid "Team registration notification subject line" msgstr "" -#: options/preferences.py:1305 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1306 +#: options/preferences.py msgid "Team registration notification message" msgstr "" -#: options/presets.py:32 options/presets.py:351 +#: options/preferences.py options/templates/preferences_index.html +msgid "Motions" +msgstr "" + +#: options/preferences.py +msgid "If checked, ballots require a motion to be entered" +msgstr "" + +#: options/preferences.py +msgid "Enable motions" +msgstr "" + +#: options/preferences.py +msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" +msgstr "" + +#: options/preferences.py +msgid "Ballot Hide Motions" +msgstr "" + +#: options/preferences.py +msgid "Enables the motion veto field on ballots, to track veto statistics" +msgstr "" + +#: options/preferences.py +msgid "Motion vetoes" +msgstr "" + +#: options/preferences.py +msgid "If showing results to public, show which motions were selected in the record" +msgstr "" + +#: options/preferences.py +msgid "Show motions in results" +msgstr "" + +#: options/preferences.py +msgid "Order in which are listed by round in the public view" +msgstr "" + +#: options/preferences.py +msgid "Order to display motions" +msgstr "" + +#: options/preferences.py +msgid "Earliest round first" +msgstr "" + +#: options/preferences.py +msgid "Latest round first" +msgstr "" + +#: options/preferences.py +msgid "Whether motions can be reused from one round to another." +msgstr "" + +#: options/preferences.py +msgid "Allow motion reuse" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Global Settings" +msgstr "" + +#: options/preferences.py +msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." +msgstr "" + +#: options/preferences.py +msgid "Enable API access" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Assistant account creation key" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Administrator account creation key" +msgstr "" + +#: options/presets.py msgid "Public Information Options" msgstr "" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" msgstr "" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" msgstr "" -#: options/presets.py:67 +#: options/presets.py msgid "Australs Rules" msgstr "" -#: options/presets.py:68 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:107 +#: options/presets.py msgid "British Parliamentary Rules" msgstr "" -#: options/presets.py:108 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." msgstr "" -#: options/presets.py:148 +#: options/presets.py msgid "Canadian Parliamentary Rules" msgstr "" -#: options/presets.py:150 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." msgstr "" -#: options/presets.py:173 +#: options/presets.py msgid "Australian Easters Rules" msgstr "" -#: options/presets.py:175 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:193 +#: options/presets.py msgid "2 vs 2 Impromptu" msgstr "" -#: options/presets.py:195 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." msgstr "" -#: options/presets.py:220 +#: options/presets.py msgid "3 vs 3 Prepared" msgstr "" -#: options/presets.py:222 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." msgstr "" -#: options/presets.py:249 +#: options/presets.py msgid "UADC Rules" msgstr "" -#: options/presets.py:251 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:287 +#: options/presets.py msgid "WSDC Rules" msgstr "" -#: options/presets.py:289 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:353 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "" -#: options/presets.py:365 +#: options/presets.py msgid "Tab Release Options" msgstr "" -#: options/presets.py:367 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" msgstr "" -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html msgid "Configuration" msgstr "" -#: options/templates/preferences_index.html:10 +#: options/templates/preferences_index.html +#, python-format +msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." +msgstr "" + +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." msgstr "" -#: options/templates/preferences_index.html:29 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" msgstr "" -#: options/templates/preferences_index.html:34 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" msgstr "" -#: options/templates/preferences_index.html:39 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" msgstr "" -#: options/templates/preferences_index.html:44 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" msgstr "" -#: options/templates/preferences_index.html:49 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" msgstr "" -#: options/templates/preferences_index.html:60 +#: options/templates/preferences_index.html +msgid "How and where are motions used" +msgstr "" + +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" msgstr "" -#: options/templates/preferences_index.html:65 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" msgstr "" -#: options/templates/preferences_index.html:70 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" msgstr "" -#: options/templates/preferences_index.html:75 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" msgstr "" -#: options/templates/preferences_index.html:80 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" msgstr "" -#: options/templates/preferences_index.html:92 +#: options/templates/preferences_index.html +msgid "Settings which can affect all tournaments on the site" +msgstr "" + +#: options/templates/preferences_index.html msgid "Manually Set Current Round" msgstr "" -#: options/templates/preferences_index.html:93 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." msgstr "" -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Rounds can be weighted so that certain rounds are worth more team points." +msgstr "" + +#: options/templates/preferences_index.html msgid "Presets" msgstr "" -#: options/templates/preferences_index.html:101 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." msgstr "" -#: options/templates/preferences_index.html:112 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" msgstr "" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" msgstr "" -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" msgstr "" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" msgstr "" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" msgstr "" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" msgstr "" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" msgstr "" -#: options/views.py:43 -msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules settings and change your configuration to use consensus ballots." -msgstr "" - -#: options/views.py:63 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." msgstr "" -#: options/views.py:113 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." msgstr "" diff --git a/tabbycat/participants/locale/hi/LC_MESSAGES/django.po b/tabbycat/participants/locale/hi/LC_MESSAGES/django.po index 141811c72f7..8c849bf33b1 100644 --- a/tabbycat/participants/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:36\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -15,845 +15,950 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/participants/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 942\n" -#: participants/admin.py:94 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" msgstr "" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." msgstr[0] "" msgstr[1] "" -#: participants/admin.py:152 participants/admin.py:211 -msgid "Delete URL key" +#: participants/admin.py +msgid "Reset emoji" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d team had their emoji reset." +msgid_plural "%(count)d teams had their emojis reset." +msgstr[0] "" +msgstr[1] "" + +#: participants/admin.py +msgid "Reset code name" msgstr "" -#: participants/admin.py:206 +#: participants/admin.py +#, python-format +msgid "%(count)d team had their code name reset." +msgid_plural "%(count)d teams had their code names reset." +msgstr[0] "" +msgstr[1] "" + +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." msgstr[0] "" msgstr[1] "" -#: participants/apps.py:7 participants/views.py:40 +#: participants/apps.py participants/views.py msgid "Participants" msgstr "" -#: participants/models.py:20 participants/models.py:36 -#: participants/models.py:65 participants/models.py:95 +#: participants/models.py msgid "name" msgstr "" -#: participants/models.py:23 participants/models.py:44 +#: participants/models.py msgid "region" msgstr "" -#: participants/models.py:24 +#: participants/models.py msgid "regions" msgstr "" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:38 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" msgstr "" -#: participants/models.py:40 +#: participants/models.py msgid "code" msgstr "" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:42 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" msgstr "" -#: participants/models.py:54 participants/models.py:154 -#: participants/models.py:340 +#: participants/models.py msgid "institution" msgstr "" -#: participants/models.py:55 +#: participants/models.py msgid "institutions" msgstr "" -#: participants/models.py:63 participants/models.py:156 -#: participants/models.py:343 +#: participants/models.py msgid "tournament" msgstr "" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:67 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" msgstr "" -#: participants/models.py:69 +#: participants/models.py msgid "slug" msgstr "" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:71 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" msgstr "" -#: participants/models.py:73 +#: participants/models.py msgid "sequence number" msgstr "" -#: participants/models.py:74 +#: participants/models.py msgid "The order in which the categories are displayed" msgstr "" -#: participants/models.py:76 +#: participants/models.py msgid "limit" msgstr "" -#: participants/models.py:77 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: participants/models.py:79 +#: participants/models.py msgid "public" msgstr "" -#: participants/models.py:80 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" msgstr "" -#: participants/models.py:86 +#: participants/models.py msgid "speaker category" msgstr "" -#: participants/models.py:87 participants/models.py:321 +#: participants/models.py msgid "speaker categories" msgstr "" -#: participants/models.py:97 -msgid "e-mail address" +#: participants/models.py +msgid "email address" msgstr "" -#: participants/models.py:99 +#: participants/models.py msgid "phone" msgstr "" -#: participants/models.py:101 +#: participants/models.py msgid "anonymous" msgstr "" -#: participants/models.py:102 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" msgstr "" -#: participants/models.py:105 +#: participants/models.py +msgid "code name" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py msgid "URL key" msgstr "" -#: participants/models.py:110 +#: participants/models.py msgid "male" msgstr "" -#: participants/models.py:111 +#: participants/models.py msgid "female" msgstr "" -#: participants/models.py:112 +#: participants/models.py msgid "other" msgstr "" -#: participants/models.py:114 +#: participants/models.py msgid "gender" msgstr "" -#: participants/models.py:115 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" msgstr "" -#: participants/models.py:117 +#: participants/models.py msgid "pronoun" msgstr "" -#: participants/models.py:118 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" msgstr "" -#: participants/models.py:121 +#: participants/models.py msgid "person" msgstr "" -#: participants/models.py:122 +#: participants/models.py msgid "persons" msgstr "" -#: participants/models.py:137 +#: participants/models.py msgid "full name/suffix" msgstr "" -#: participants/models.py:138 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:140 +#: participants/models.py msgid "short name/suffix" msgstr "" -#: participants/models.py:141 -msgid "The name shown in the draw. Do not include institution name (see \"uses institutional prefix\" below)" -msgstr "" - -#: participants/models.py:143 -msgid "code name" +#: participants/models.py +msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:144 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" msgstr "" -#: participants/models.py:147 +#: participants/models.py msgid "short name" msgstr "" -#: participants/models.py:148 -msgid "The name shown in the draw, including institution name. (This is autogenerated.)" +#: participants/models.py +msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:150 +#: participants/models.py msgid "long name" msgstr "" -#: participants/models.py:151 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:158 +#: participants/models.py msgid "Uses institutional prefix" msgstr "" -#: participants/models.py:159 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" msgstr "" -#: participants/models.py:161 +#: participants/models.py msgid "break categories" msgstr "" -#: participants/models.py:172 +#: participants/models.py +msgid "institution conflicts" +msgstr "" + +#: participants/models.py msgid "none" msgstr "" -#: participants/models.py:173 +#: participants/models.py msgid "swing" msgstr "" -#: participants/models.py:174 +#: participants/models.py msgid "composite" msgstr "" -#: participants/models.py:175 +#: participants/models.py msgid "bye" msgstr "" -#: participants/models.py:178 +#: participants/models.py msgid "type" msgstr "" -#: participants/models.py:182 +#: participants/models.py msgid "emoji" msgstr "" -#: participants/models.py:196 participants/models.py:319 +#: participants/models.py msgid "team" msgstr "" -#: participants/models.py:197 +#: participants/models.py msgid "teams" msgstr "" -#: participants/models.py:302 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." msgstr "" -#: participants/models.py:304 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:306 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:324 +#: participants/models.py msgid "speaker" msgstr "" -#: participants/models.py:325 +#: participants/models.py msgid "speakers" msgstr "" -#: participants/models.py:344 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" msgstr "" -#: participants/models.py:346 +#: participants/models.py msgid "base score" msgstr "" -#: participants/models.py:352 -msgid "institution conflicts" +#: participants/models.py +msgid "team conflicts" msgstr "" -#: participants/models.py:356 -msgid "team conflicts" +#: participants/models.py +msgid "adjudicator conflicts" msgstr "" -#: participants/models.py:359 +#: participants/models.py msgid "always trainee" msgstr "" -#: participants/models.py:360 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" msgstr "" -#: participants/models.py:362 +#: participants/models.py msgid "breaking" msgstr "" -#: participants/models.py:364 +#: participants/models.py msgid "independent" msgstr "" -#: participants/models.py:366 +#: participants/models.py msgid "adjudication core" msgstr "" -#: participants/models.py:375 +#: participants/models.py msgid "adjudicator" msgstr "" -#: participants/models.py:376 +#: participants/models.py msgid "adjudicators" msgstr "" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" msgstr "" -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" msgstr "" -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" msgstr "" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" msgstr "" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" msgstr "" -#: participants/templates/adjudicator_registration_card.html:26 -#: participants/templates/team_registration_card.html:57 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:30 -#: participants/templates/team_registration_card.html:61 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" msgstr "" -#: participants/templates/adjudicator_registration_card.html:34 -#: participants/templates/team_registration_card.html:65 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:40 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." msgstr "" -#: participants/templates/adjudicator_registration_card.html:47 -#: participants/templates/team_registration_card.html:74 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:49 -#: participants/templates/team_registration_card.html:76 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr "" -#: participants/templates/adjudicator_registration_card.html:51 -#: participants/templates/adjudicator_registration_card.html:58 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:79 -#: participants/templates/team_registration_card.html:30 -#: participants/templates/team_registration_card.html:41 -#: participants/templates/team_registration_card.html:49 -#: participants/templates/team_registration_card.html:78 -#: participants/templates/team_registration_card.html:85 -#: participants/templates/team_registration_card.html:95 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" msgstr "" -#: participants/templates/adjudicator_registration_card.html:54 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:56 -#: participants/templates/adjudicator_registration_card.html:64 -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/adjudicator_registration_card.html:77 -#: participants/templates/team_registration_card.html:28 -#: participants/templates/team_registration_card.html:39 -#: participants/templates/team_registration_card.html:47 -#: participants/templates/team_registration_card.html:83 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr "" -#: participants/templates/adjudicator_registration_card.html:61 -#: participants/templates/team_registration_card.html:81 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:75 -#: participants/templates/team_registration_card.html:91 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" msgstr "" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:13 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format -msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete these %(objects_name)s." +msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." msgstr "" #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:20 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:32 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:40 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:46 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" msgstr "" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "" -#: participants/templates/current_round/common.html:30 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "" msgstr[1] "" -#: participants/templates/current_round/common.html:39 -#: participants/templates/current_round/common.html:41 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" msgstr "" -#: participants/templates/current_round/common.html:39 -#: participants/templates/current_round/common.html:41 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" msgstr "" -#: participants/templates/current_round/common.html:46 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." msgstr "" -#: participants/templates/current_round/common.html:56 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." msgstr "" -#: participants/templates/current_round/common.html:59 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "" -#: participants/templates/current_round/common.html:63 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "" -#: participants/templates/current_round/common.html:71 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." msgstr "" -#: participants/templates/current_round/round_adj.html:13 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:17 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:23 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:27 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:33 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:37 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:48 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:52 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating as the %(side)s team against %(opponent)s in %(room)s." +msgid "%(team)s is debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating as the %(side)s team against %(opponent)s in %(room)s." +msgid "You are debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating against %(opponent)s in %(room)s." +msgid "%(team)s is debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating against %(opponent)s in %(room)s." +msgid "You are debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:37 +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating as the %(side)s team in %(room)s." +msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:41 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating as the %(side)s team in %(room)s." +msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:47 +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating in %(room)s." +msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:51 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating in %(room)s." +msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." msgstr "" -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" msgstr "" -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" msgstr "" -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:39 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" msgstr "" -#: participants/templates/feedback_progress_panel.html:48 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:55 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." msgstr "" -#: participants/templates/in_this_round.html:8 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" msgstr "" -#: participants/templates/in_this_round.html:12 +#: participants/templates/in_this_round.html +msgid "In This Round" +msgstr "" + +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" msgstr "" -#: participants/templates/in_this_round.html:19 +#: participants/templates/in_this_round.html msgid "Room TBA" msgstr "" -#: participants/templates/in_this_round.html:31 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:50 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." msgstr[0] "" msgstr[1] "" -#: participants/templates/in_this_round.html:56 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." msgstr "" -#: participants/templates/in_this_round.html:71 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:87 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." msgstr "" -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" msgstr "" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" msgstr "" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." msgstr "" -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" msgstr "" -#: participants/templates/participants_subnav.html:26 participants/views.py:134 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" msgstr "" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" msgstr "" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" msgstr "" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." msgstr "" -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." msgstr "" -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" msgstr "" -#: participants/templates/team_registration_card.html:14 +#: participants/templates/team_registration_card.html msgid "Team name:" msgstr "" -#: participants/templates/team_registration_card.html:14 -msgid "Full name:" +#: participants/templates/team_registration_card.html +msgid "Full team name:" msgstr "" -#: participants/templates/team_registration_card.html:18 +#: participants/templates/team_registration_card.html +msgid "Short team name:" +msgstr "" + +#: participants/templates/team_registration_card.html msgid "Code name:" msgstr "" -#: participants/templates/team_registration_card.html:26 +#: participants/templates/team_registration_card.html +msgid "No code name assigned" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Emoji:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "No emoji assigned" +msgstr "" + +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "" -#: participants/templates/team_registration_card.html:37 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" msgstr "" -#: participants/templates/team_registration_card.html:45 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" msgstr "" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" msgstr "" -#: participants/views.py:45 +#: participants/views.py msgid "Adjudicators" msgstr "" -#: participants/views.py:54 +#: participants/views.py msgid "Speakers" msgstr "" -#: participants/views.py:85 +#: participants/views.py msgid "Institutions" msgstr "" -#: participants/views.py:101 +#: participants/views.py msgid "Code" msgstr "" -#: participants/views.py:102 +#: participants/views.py msgid "Full name" msgstr "" -#: participants/views.py:104 +#: participants/views.py msgid "Region" msgstr "" -#: participants/views.py:106 +#: participants/views.py msgid "Teams" msgstr "" -#: participants/views.py:106 +#: participants/views.py msgid "Number of teams" msgstr "" -#: participants/views.py:108 +#: participants/views.py msgid "Adjs" msgstr "" -#: participants/views.py:109 +#: participants/views.py msgid "Number of adjudicators, excluding independents" msgstr "" -#: participants/views.py:111 +#: participants/views.py msgid "IAs" msgstr "" -#: participants/views.py:112 +#: participants/views.py msgid "Number of independent adjudicators" msgstr "" -#: participants/views.py:142 +#: participants/views.py msgid "Code name" msgstr "" -#: participants/views.py:162 +#: participants/views.py msgid "Team Registration" msgstr "" -#: participants/views.py:208 +#: participants/views.py msgid "Results" msgstr "" -#: participants/views.py:213 participants/views.py:247 +#: participants/views.py #, python-format msgid "Record for %(name)s" msgstr "" -#: participants/views.py:244 +#: participants/views.py msgid "Previous Rounds" msgstr "" -#: participants/views.py:333 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" msgstr[0] "" msgstr[1] "" -#: participants/views.py:339 +#: participants/views.py msgid "No changes were made to the categories." msgstr "" -#: participants/views.py:352 +#: participants/views.py msgid "Speaker Category Eligibility" msgstr "" diff --git a/tabbycat/printing/locale/hi/LC_MESSAGES/django.po b/tabbycat/printing/locale/hi/LC_MESSAGES/django.po index d6e067beb69..543b38edadc 100644 --- a/tabbycat/printing/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:36\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -15,115 +15,111 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/printing/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" msgstr "" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" msgstr "" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." msgstr "" -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." msgstr "" -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" msgstr "" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" msgstr "" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" msgstr "" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" msgstr "" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" msgstr "" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" msgstr "" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" msgstr "" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" msgstr "" -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" msgstr "" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "" -#: printing/templates/scoresheet_list.html:47 -msgid "\n" -" Editing motions here will not save them permanently — it will only\n" -" update the text used in the printed ballots below. This can be useful if using\n" -" placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print\n" -" ballots with correct motions.\n" -" " +#: printing/templates/scoresheet_list.html +msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." msgstr "" -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" msgstr "" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." msgstr "" -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" msgstr "" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" msgstr "" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "" diff --git a/tabbycat/privateurls/locale/hi/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/hi/LC_MESSAGES/django.po index 7b2f405c426..6f0fcef36ae 100644 --- a/tabbycat/privateurls/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:37\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -15,166 +15,165 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/privateurls/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" msgstr "" -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:144 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" msgstr "" -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." msgstr "" -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" msgstr "" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." msgstr "" -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." msgstr "" -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." msgstr "" -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." msgstr "" -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." msgstr "" -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." msgstr "" -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" msgstr "" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" msgstr "" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" msgstr "" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." msgstr "" -#: privateurls/templates/public_url_landing.html:61 -msgid "Submit Ballot" +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Submit Ballot for %(round)s" msgstr "" -#: privateurls/templates/public_url_landing.html:67 -#: privateurls/templates/public_url_landing.html:73 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" msgstr "" -#: privateurls/templates/public_url_landing.html:82 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" msgstr "" -#: privateurls/views.py:62 +#: privateurls/views.py msgid "no URL" msgstr "" -#: privateurls/views.py:75 +#: privateurls/views.py msgid "URL" msgstr "" -#: privateurls/views.py:86 +#: privateurls/views.py msgid "Speakers" msgstr "" -#: privateurls/views.py:96 +#: privateurls/views.py msgid "Adjudicators" msgstr "" -#: privateurls/views.py:118 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." msgstr "" -#: privateurls/views.py:125 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." msgstr[0] "" msgstr[1] "" -#: privateurls/views.py:130 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." msgstr[0] "" msgstr[1] "" -#: privateurls/views.py:161 +#: privateurls/views.py msgid "URL Key" msgstr "" -#: privateurls/views.py:174 +#: privateurls/views.py msgid "Debates" msgstr "" diff --git a/tabbycat/results/locale/hi/LC_MESSAGES/django.po b/tabbycat/results/locale/hi/LC_MESSAGES/django.po index 3a6f737087f..817495c4465 100644 --- a/tabbycat/results/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:37\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:14\n" "Last-Translator: philip_tc\n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -15,971 +15,1079 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/results/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 948\n" -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:112 +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py +#, python-format +msgid "Resaved results for %(count)d ballot submission." +msgid_plural "Resaved results for %(count)d ballot submissions." +msgstr[0] "" +msgstr[1] "" + +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" msgstr "" -#: results/forms.py:44 +#: results/forms.py +msgid "Tournament password" +msgstr "" + +#: results/forms.py msgid "That password isn't correct." msgstr "" -#: results/forms.py:76 +#: results/forms.py msgid "Please enter a whole number." msgstr "" -#: results/forms.py:78 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." msgstr "" -#: results/forms.py:157 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." msgstr "" -#: results/forms.py:163 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." msgstr "" -#: results/forms.py:299 +#: results/forms.py msgid "---------" msgstr "" -#: results/forms.py:301 results/forms.py:303 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" msgstr "" -#: results/forms.py:320 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" msgstr "" -#: results/forms.py:337 +#: results/forms.py +#, python-format +msgid "%(team)s (%(side)s)" +msgstr "" + +#: results/forms.py +msgid "Winner" +msgstr "" + +#: results/forms.py msgid "Mark as a duplicate speech" msgstr "" -#: results/forms.py:472 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." msgstr "" -#: results/forms.py:486 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." msgstr[0] "" msgstr[1] "" -#: results/forms.py:503 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." msgstr "" -#: results/forms.py:510 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." msgstr "" -#: results/forms.py:663 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." msgstr "" -#: results/forms.py:672 +#: results/forms.py +msgid "The declared winner does not correspond to the team with the highest score." +msgstr "" + +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" msgstr "" -#: results/forms.py:682 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:759 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:767 +#: results/forms.py #, python-format -msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." +msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:799 +#: results/forms.py #, python-format -msgid "%(team)s (%(side)s)" +msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:813 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." msgstr "" -#: results/forms.py:820 -msgid "There must be exactly two teams advancing." +#: results/forms.py +#, python-format +msgid "There must be exactly %(n)d team advancing." +msgid_plural "There must be exactly %(n)d teams advancing." +msgstr[0] "" +msgstr[1] "" + +#: results/forms.py +msgid "There must be exactly 1 team advancing." msgstr "" -#: results/models.py:32 +#: results/models.py msgid "Tab room" msgstr "" -#: results/models.py:33 +#: results/models.py msgid "Public" msgstr "" -#: results/models.py:37 +#: results/models.py msgid "timestamp" msgstr "" -#: results/models.py:39 +#: results/models.py msgid "version" msgstr "" -#: results/models.py:41 +#: results/models.py msgid "submitter type" msgstr "" -#: results/models.py:43 +#: results/models.py msgid "confirmed" msgstr "" -#: results/models.py:48 +#: results/models.py +msgid "from private URL" +msgstr "" + +#: results/models.py +msgid "from participant" +msgstr "" + +#: results/models.py msgid "submitter" msgstr "" -#: results/models.py:51 +#: results/models.py msgid "confirmer" msgstr "" -#: results/models.py:53 +#: results/models.py msgid "confirm timestamp" msgstr "" -#: results/models.py:55 +#: results/models.py msgid "IP address" msgstr "" -#: results/models.py:92 +#: results/models.py msgid "A tab room ballot must have a user associated." msgstr "" -#: results/models.py:100 +#: results/models.py msgid "debate" msgstr "" -#: results/models.py:102 +#: results/models.py msgid "motion" msgstr "" -#: results/models.py:104 +#: results/models.py msgid "discarded" msgstr "" -#: results/models.py:108 results/models.py:188 results/models.py:226 -#: results/models.py:268 +#: results/models.py +msgid "single adjudicator" +msgstr "" + +#: results/models.py +msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." +msgstr "" + +#: results/models.py msgid "ballot submission" msgstr "" -#: results/models.py:109 +#: results/models.py msgid "ballot submissions" msgstr "" -#: results/models.py:128 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" msgstr "" -#: results/models.py:135 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" msgstr "" -#: results/models.py:190 +#: results/models.py msgid "debate adjudicator" msgstr "" -#: results/models.py:192 results/models.py:228 results/models.py:270 +#: results/models.py msgid "debate team" msgstr "" -#: results/models.py:193 results/models.py:237 results/models.py:273 -msgid "score" +#: results/models.py +msgid "win" msgstr "" -#: results/models.py:194 results/models.py:274 -msgid "position" +#: results/models.py +msgid "margin" msgstr "" -#: results/models.py:200 -msgid "speaker score by adjudicator" +#: results/models.py +msgid "score" msgstr "" -#: results/models.py:201 -msgid "speaker scores by adjudicator" +#: results/models.py +msgid "team score by adjudicator" msgstr "" -#: results/models.py:215 +#: results/models.py +msgid "team scores by adjudicator" +msgstr "" + +#: results/models.py msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." msgstr "" -#: results/models.py:231 -msgid "points" +#: results/models.py +msgid "position" msgstr "" -#: results/models.py:233 -msgid "win" +#: results/models.py +msgid "speaker score by adjudicator" msgstr "" -#: results/models.py:235 -msgid "margin" +#: results/models.py +msgid "speaker scores by adjudicator" +msgstr "" + +#: results/models.py +msgid "points" msgstr "" -#: results/models.py:239 +#: results/models.py msgid "votes given" msgstr "" -#: results/models.py:241 +#: results/models.py msgid "votes possible" msgstr "" -#: results/models.py:245 +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py msgid "team score" msgstr "" -#: results/models.py:246 +#: results/models.py msgid "team scores" msgstr "" -#: results/models.py:272 +#: results/models.py msgid "speaker" msgstr "" -#: results/models.py:276 +#: results/models.py msgid "ghost" msgstr "" -#: results/models.py:277 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." msgstr "" -#: results/models.py:286 +#: results/models.py msgid "speaker score" msgstr "" -#: results/models.py:287 +#: results/models.py msgid "speaker scores" msgstr "" -#: results/models.py:296 +#: results/models.py msgid "The debate team and speaker must be from the same team." msgstr "" -#: results/models.py:299 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." msgstr "" -#: results/tables.py:17 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" msgstr "" -#: results/tables.py:38 +#: results/tables.py msgid "Status of this debate's ballot" msgstr "" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" msgstr "" -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" msgstr "" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" msgstr "" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" msgstr "" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" msgstr "" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format -msgid "\n" -" A speaker from %(team)s gave multiple speeches in the current round\n" -" " +msgid "A speaker from %(team)s gave multiple speeches in the current round" msgstr "" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" msgstr "" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" msgstr "" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." msgstr "" -#: results/templates/admin_results.html:81 +#: results/templates/admin_results.html +#, python-format +msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." +msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/admin_results.html +#, python-format +msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." +msgstr "" + +#: results/templates/admin_results.html +msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." +msgstr "" + +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." msgstr "" -#: results/templates/admin_results.html:89 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." msgstr "" -#: results/templates/admin_results.html:98 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/admin_results.html:105 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:30 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" msgstr "" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:35 -#: results/templates/ballot_entry_base.html:39 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" msgstr "" -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." msgstr "" -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html msgid "Confirm results" msgstr "" -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" msgstr "" -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:74 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." msgstr "" -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" msgstr "" -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "" -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." msgstr "" -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "" -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." msgstr[0] "" msgstr[1] "" -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr[0] "" msgstr[1] "" -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:41 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:44 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" msgstr "" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." +#: results/templates/ballot/ballot_set.html +msgid "There are some problems with this scoresheet. Please review and correct them." msgstr "" -#: results/templates/ballot/bp_elimination_ballot.html:6 -#: results/templates/ballot/standard_ballot_set.html:6 -msgid "There are some problems with this scoresheet. Please review and correct them." +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s (%(institution)s)" msgstr "" -#: results/templates/ballot/bp_elimination_ballot.html:12 -msgid "Advancing Teams" +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html +msgid "Scoresheet" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Solo Chair" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Chair" msgstr "" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Panellist" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Trainee" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Assign sides before entering scores" +msgstr "" + +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "There is %(number)s existing ballot set for this debate." msgid_plural "There are %(number)s existing ballot sets for this debate." msgstr[0] "" msgstr[1] "" -#: results/templates/ballot/other_ballots_list.html:19 -#, python-format -msgid "There are %(number)s ballot sets for this debate." -msgstr "" - -#: results/templates/ballot/other_ballots_list.html:29 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." msgstr "" -#: results/templates/ballot/other_ballots_list.html:34 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." msgstr "" -#: results/templates/ballot/other_ballots_list.html:49 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:52 +#: results/templates/ballot/other_ballots_list.html +msgid "MERGING" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:57 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:61 +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "submitted from %(adjudicator)s's private URL," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:66 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," msgstr "" -#: results/templates/ballot/other_ballots_list.html:71 -#, python-format -msgid "confirmed by %(confirmer)s" +#: results/templates/ballot/other_ballots_list.html +msgid "unknown" msgstr "" -#: results/templates/ballot/other_ballots_list.html:75 -msgid "confirmed by unknown confirmer" +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "confirmed by %(confirmer)s" msgstr "" -#: results/templates/ballot/other_ballots_list.html:77 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" msgstr "" -#: results/templates/ballot/other_ballots_list.html:81 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" msgstr "" -#: results/templates/ballot/other_ballots_list.html:85 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" msgstr[0] "" msgstr[1] "" -#: results/templates/ballot/standard_ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 -#, python-format -msgid "Ballot from %(name)s (%(institution)s)" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 -#, python-format -msgid "Ballot from %(name)s" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 -msgid "Scoresheet" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -msgid "Solo Chair" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 -msgid "Chair" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 -msgid "Panellist" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -msgid "Trainee" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:44 -msgid "Assign sides before entering scores" -msgstr "" - -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." msgstr "" -#: results/templates/ballot_entry_base.html:8 -#, python-format -msgid "New Ballot Set for %(debate)s" -msgstr "" - -#: results/templates/ballot_entry_base.html:12 -#, python-format -msgid "Edit Ballot Set for %(debate)s" -msgstr "" - -#: results/templates/ballot_entry_base.html:19 -#, python-format -msgid "%(room)s: %(debate)s" -msgstr "" - -#: results/templates/ballot_entry_base.html:48 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr "" -#: results/templates/ballot_entry_base.html:58 -#, python-format -msgid "In the grand-final rounds of a British Parliamentary format this form will not let you nominate a single winner. To work around this, you need to first nominate a second 'fake' winner in this ballot and save/complete the ballot as normal. To then correct this result, you go to the Team Scores page of the Edit Database area, click the Team Score of the 'fake' winner of this debate, set the Win field to No, and then Save the change." -msgstr "" - -#: results/templates/ballot_entry_base.html:72 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." msgstr "" -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" msgstr "" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" msgstr "" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" msgstr "" -#: results/templates/enter_results.html:15 +#: results/templates/debate_postponement_form.html +msgid "Postponed" +msgstr "" + +#: results/templates/debate_postponement_form.html +msgid "Postpone" +msgstr "" + +#: results/templates/enter_results.html msgid "Ballot Status" msgstr "" -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" msgstr "" -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" msgstr "" -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" msgstr "" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" msgstr "" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" msgstr "" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format -msgid "The URL of this page is personalised to you, %(adjudicator)s. Do not share it with anyone: anyone who knows this URL can submit results for your debates. If you bookmark this page and return here after each debate, it will always show the debate that you just adjudicated." +msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." msgstr "" -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" msgstr "" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." msgstr "" -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" msgstr "" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" msgstr "" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" msgstr "" -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." msgstr "" -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" msgstr "" -#: results/templates/public_ballot_set.html:28 -#: results/templates/public_enter_results.html:14 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" msgstr "" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" msgstr "" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" msgstr "" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" msgstr "" -#: results/templates/public_ballot_set.html:91 -#: results/templates/public_ballot_set.html:95 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set.html #, python-format -msgid "Back to the tournament home page." +msgid "%(name)s (%(side)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Won" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Lost" msgstr "" -#: results/templates/public_enter_results.html:5 -#: results/templates/public_enter_results.html:8 +#: results/templates/public_ballot_set_error.html #, python-format -msgid "Enter Results for %(debate)s" +msgid "Back to the tournament home page." msgstr "" -#: results/templates/public_enter_results.html:22 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" msgstr "" -#: results/templates/public_enter_results.html:30 +#: results/templates/public_enter_results.html +msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." +msgstr "" + +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." msgstr[0] "" msgstr[1] "" -#: results/templates/public_enter_results.html:69 -msgid "Submit Ballot(s)" -msgstr "" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" +msgstr[1] "" -#: results/templates/public_enter_results.html:71 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" msgstr "" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" msgstr "" -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" msgstr "" -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" msgstr "" -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" msgstr "" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" msgstr "" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." msgstr "" -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." msgstr "" -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" msgstr "" -#: results/utils.py:20 +#: results/utils.py +msgid "Debate was Postponed" +msgstr "" + +#: results/utils.py msgid "Ballot is Unconfirmed" msgstr "" -#: results/utils.py:22 +#: results/utils.py msgid "Ballot is Confirmed" msgstr "" #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:32 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" msgstr "" -#: results/utils.py:51 +#: results/utils.py #, python-format -msgid "%(winner)s (%(winner_side)s) won" +msgid "%(team)s (%(side)s) won" msgstr "" -#: results/utils.py:56 +#. Translators: The team here is the losing team +#: results/utils.py #, python-format -msgid "vs %(loser)s (%(loser_side)s)" +msgid "vs %(team)s (%(side)s)" msgstr "" -#: results/utils.py:71 +#: results/utils.py #, python-format -msgid "Advancing: %(advancing_list)s
    \n" +msgid "Advancing: %(advancing_list)s
    " msgstr "" -#: results/utils.py:75 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" msgstr "" -#: results/utils.py:85 +#: results/utils.py #, python-format -msgid "1st: %(first_team)s
    \n" +msgid "1st: %(first_team)s
    " msgstr "" -#: results/utils.py:87 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" "4th: %(fourth_team)s" msgstr "" -#: results/utils.py:102 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" msgstr "" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:162 +#: results/utils.py msgid "PM" msgstr "" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:164 +#: results/utils.py msgid "DPM" msgstr "" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:166 +#: results/utils.py msgid "LO" msgstr "" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:168 +#: results/utils.py msgid "DLO" msgstr "" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:170 +#: results/utils.py msgid "MG" msgstr "" #. Translators: Abbreviation for Government Whip -#: results/utils.py:172 +#: results/utils.py msgid "GW" msgstr "" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:174 +#: results/utils.py msgid "MO" msgstr "" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:176 +#: results/utils.py msgid "OW" msgstr "" -#: results/utils.py:196 +#: results/utils.py msgid "Reply" msgstr "" -#: results/views.py:224 results/views.py:226 +#: results/views.py msgid " vs " msgstr "" -#: results/views.py:359 +#: results/views.py +#, python-format +msgid "%(matchup)s: %(round)s @ %(room)s" +msgstr "" + +#: results/views.py +msgid "N/A" +msgstr "" + +#: results/views.py +msgid "New Ballot Set" +msgstr "" + +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." msgstr "" -#: results/views.py:361 results/views.py:428 +#: results/views.py msgid " Email receipts queued to be sent." msgstr "" -#: results/views.py:375 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." msgstr "" -#: results/views.py:381 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." msgstr "" -#: results/views.py:421 +#: results/views.py +msgid "Edit Ballot Set" +msgstr "" + +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." msgstr "" -#: results/views.py:423 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." msgstr "" -#: results/views.py:425 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." msgstr "" -#: results/views.py:469 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." msgstr "" -#: results/views.py:477 +#: results/views.py msgid "The draw for this round hasn't been released yet." msgstr "" -#: results/views.py:481 +#: results/views.py msgid "The motions for this round haven't been released yet." msgstr "" -#: results/views.py:486 +#: results/views.py msgid "It looks like you don't have a debate this round." msgstr "" -#: results/views.py:488 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." msgstr "" -#: results/views.py:496 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:501 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:588 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." msgstr "" -#: results/views.py:606 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." msgstr "" -#: results/views.py:609 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." msgstr "" -#: results/views.py:613 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." msgstr "" -#: results/views.py:616 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." msgstr "" -#: results/views.py:638 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." msgstr "" -#: results/views.py:694 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" msgstr "" -#: results/views.py:698 +#: results/views.py msgid "Adjudicator" msgstr "" +#: results/views.py +msgid "Merge Ballots" +msgstr "" + +#: results/views.py +msgid "The speaking order in the ballots is inconsistent, so could not be merged." +msgstr "" + +#: results/views.py +msgid "Duplicate speeches are marked inconsistently, so could not be merged." +msgstr "" + +#: results/views.py +#, python-format +msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." +msgstr "" + diff --git a/tabbycat/standings/locale/hi/LC_MESSAGES/django.po b/tabbycat/standings/locale/hi/LC_MESSAGES/django.po index 021ec0ec9ec..18b7c768429 100644 --- a/tabbycat/standings/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:37\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:01\n" "Last-Translator: philip_tc\n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -15,590 +15,598 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/standings/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 950\n" -#: standings/base.py:283 +#: standings/base.py msgid "The same metric would be added twice:" msgstr "" -#: standings/base.py:284 +#: standings/base.py msgid "The same ranking would be added twice:" msgstr "" -#: standings/base.py:358 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" msgstr "" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" msgstr "" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" msgstr "" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" msgstr "" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" msgstr "" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" msgstr "" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" msgstr "" -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" msgstr "" -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" msgstr "" -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" msgstr "" -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" msgstr "" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" msgstr "" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" msgstr "" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" msgstr "" -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" msgstr "" -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" msgstr "" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" msgstr "" -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" msgstr "" -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" msgstr "" -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" msgstr "" -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" msgstr "" -#: standings/speakers.py:50 standings/speakers.py:136 +#: standings/speakers.py msgid "total" msgstr "" -#: standings/speakers.py:51 standings/speakers.py:137 +#: standings/speakers.py msgid "Total" msgstr "" -#: standings/speakers.py:58 standings/speakers.py:146 +#: standings/speakers.py msgid "average" msgstr "" -#: standings/speakers.py:59 standings/speakers.py:147 +#: standings/speakers.py msgid "Avg" msgstr "" -#: standings/speakers.py:66 -msgid "trimmed mean (high-low drop)" -msgstr "" - -#: standings/speakers.py:67 -msgid "Trim" -msgstr "" - -#: standings/speakers.py:99 +#: standings/speakers.py msgid "team points" msgstr "" -#: standings/speakers.py:100 +#: standings/speakers.py msgid "Team" msgstr "" -#: standings/speakers.py:119 standings/speakers.py:156 +#: standings/speakers.py msgid "standard deviation" msgstr "" -#: standings/speakers.py:120 standings/speakers.py:157 +#: standings/speakers.py msgid "Stdev" msgstr "" -#: standings/speakers.py:128 +#: standings/speakers.py msgid "number of speeches given" msgstr "" -#: standings/speakers.py:129 standings/speakers.py:168 +#: standings/speakers.py msgid "Num" msgstr "" -#: standings/speakers.py:167 +#: standings/speakers.py msgid "replies given" msgstr "" -#: standings/teams.py:64 +#: standings/speakers.py +msgid "trimmed mean (high-low drop)" +msgstr "" + +#: standings/speakers.py +msgid "Trim" +msgstr "" + +#: standings/teams.py msgid "points" msgstr "" -#: standings/teams.py:65 +#: standings/teams.py msgid "Pts" msgstr "" -#: standings/teams.py:74 +#: standings/teams.py msgid "wins" msgstr "" -#: standings/teams.py:75 standings/views.py:596 +#: standings/teams.py standings/views.py msgid "Wins" msgstr "" -#: standings/teams.py:85 +#: standings/teams.py msgid "total speaker score" msgstr "" -#: standings/teams.py:86 +#: standings/teams.py msgid "Spk" msgstr "" -#: standings/teams.py:95 +#: standings/teams.py msgid "average total speaker score" msgstr "" -#: standings/teams.py:96 +#: standings/teams.py msgid "ATSS" msgstr "" -#: standings/teams.py:105 +#: standings/teams.py msgid "speaker score standard deviation" msgstr "" -#: standings/teams.py:106 +#: standings/teams.py msgid "SSD" msgstr "" -#: standings/teams.py:116 +#: standings/teams.py msgid "sum of margins" msgstr "" -#: standings/teams.py:117 +#: standings/teams.py msgid "Marg" msgstr "" -#: standings/teams.py:126 +#: standings/teams.py msgid "average margin" msgstr "" -#: standings/teams.py:127 +#: standings/teams.py msgid "AWM" msgstr "" -#: standings/teams.py:136 +#: standings/teams.py msgid "average individual speaker score" msgstr "" -#: standings/teams.py:137 +#: standings/teams.py msgid "AISS" msgstr "" -#: standings/teams.py:203 +#: standings/teams.py msgid "draw strength by wins" msgstr "" -#: standings/teams.py:204 +#: standings/teams.py msgid "DS" msgstr "" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by total speaker score" msgstr "" -#: standings/teams.py:212 +#: standings/teams.py msgid "DSS" msgstr "" -#: standings/teams.py:223 +#: standings/teams.py msgid "number of pullups before this round" msgstr "" -#: standings/teams.py:224 +#: standings/teams.py msgid "PU" msgstr "" -#: standings/teams.py:246 +#: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "" -#: standings/teams.py:247 +#: standings/teams.py msgid "Ballots" msgstr "" -#: standings/teams.py:248 +#: standings/teams.py msgid "votes/ballots carried" msgstr "" -#: standings/teams.py:273 +#: standings/teams.py msgid "number of firsts" msgstr "" -#: standings/teams.py:274 +#: standings/teams.py msgid "1sts" msgstr "" -#: standings/teams.py:283 +#: standings/teams.py msgid "number of seconds" msgstr "" -#: standings/teams.py:284 +#: standings/teams.py msgid "2nds" msgstr "" -#: standings/teams.py:296 +#: standings/teams.py +msgid "number of thirds" +msgstr "" + +#: standings/teams.py +msgid "3rds" +msgstr "" + +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py msgid "Who-beat-whom" msgstr "" -#: standings/teams.py:297 +#: standings/teams.py msgid "WBW" msgstr "" -#: standings/teams.py:298 +#: standings/teams.py msgid "who-beat-whom" msgstr "" -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." msgstr "" -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." msgstr "" -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." msgstr "" -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." msgstr "" -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." msgstr "" -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." msgstr "" -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." msgstr "" -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." msgstr "" -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." msgstr "" -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." msgstr "" -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" msgstr "" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." msgstr "" -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" msgstr "" -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" msgstr "" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" msgstr "" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" msgstr "" -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" msgstr "" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:150 -#: standings/templates/standings_index.html:163 -#: standings/templates/standings_index.html:182 +#: standings/templates/standings_index.html msgid "No data yet" msgstr "" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" msgstr "" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" msgstr "" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" msgstr "" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" msgstr "" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" msgstr "" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" msgstr "" -#: standings/templates/standings_index.html:144 -#: standings/templates/standings_index.html:157 -#, python-format -msgid "%(reference)s in %(abbreviation)s" -msgstr "" - -#: standings/templates/standings_index.html:173 +#: standings/templates/standings_index.html msgid "Average Speaks" msgstr "" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" msgstr "" -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" msgstr "" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" msgstr "" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" msgstr "" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" msgstr "" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "" -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" msgstr "" -#: standings/templates/standings_menu.html:64 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "" -#: standings/templates/standings_menu.html:68 +#: standings/templates/standings_menu.html +msgid "By Round" +msgstr "" + +#: standings/templates/standings_menu.html msgid "Diversity" msgstr "" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." msgstr "" -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " msgstr "" -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " msgstr "" -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " msgstr "" -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" msgstr "" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" msgstr "" -#: standings/views.py:206 standings/views.py:432 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." msgstr "" -#: standings/views.py:282 +#: standings/views.py msgid "Speaker Standings" msgstr "" -#: standings/views.py:324 +#: standings/views.py msgid "Speaker Tab" msgstr "" -#: standings/views.py:339 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" msgstr "" -#: standings/views.py:357 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" msgstr "" -#: standings/views.py:370 +#: standings/views.py msgid "Reply Speaker Standings" msgstr "" -#: standings/views.py:375 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." msgstr "" -#: standings/views.py:412 +#: standings/views.py msgid "Reply Speaker Tab" msgstr "" -#: standings/views.py:424 standings/views.py:673 +#: standings/views.py msgid "Team Standings" msgstr "" -#: standings/views.py:503 +#: standings/views.py msgid "Team Tab" msgstr "" -#: standings/views.py:522 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" msgstr "" -#: standings/views.py:549 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" msgstr "" -#: standings/views.py:560 +#: standings/views.py msgid "Current Team Standings" msgstr "" -#: standings/views.py:596 +#: standings/views.py msgid "Points" msgstr "" +#: standings/views.py +msgid "Feedback Overview" +msgstr "" + +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +msgstr "" + diff --git a/tabbycat/tournaments/locale/hi/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/hi/LC_MESSAGES/django.po index 882f9ea1ca5..6ebff2ba8e3 100644 --- a/tabbycat/tournaments/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:35\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -15,1025 +15,1019 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/tournaments/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "" -#: tournaments/forms.py:27 +#: tournaments/forms.py msgid "Number of preliminary rounds" msgstr "" -#: tournaments/forms.py:32 +#: tournaments/forms.py msgid "Number of teams in the open break" msgstr "" -#: tournaments/forms.py:33 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." msgstr "" -#: tournaments/forms.py:39 +#: tournaments/forms.py msgid "Did you agree with their decision?" msgstr "" -#: tournaments/forms.py:39 +#: tournaments/forms.py msgid "Agree?" msgstr "" -#: tournaments/forms.py:45 +#: tournaments/forms.py msgid "Comments" msgstr "" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:59 +#: tournaments/forms.py msgid "Open" msgstr "" -#: tournaments/forms.py:84 +#: tournaments/forms.py msgid "Format Configuration" msgstr "" -#: tournaments/forms.py:85 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" msgstr "" -#: tournaments/forms.py:89 +#: tournaments/forms.py msgid "Public Configuration" msgstr "" -#: tournaments/forms.py:90 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" msgstr "" -#: tournaments/forms.py:96 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" msgstr "" -#: tournaments/forms.py:186 +#: tournaments/forms.py msgid "Current preliminary round" msgstr "" -#: tournaments/forms.py:187 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" msgstr "" -#: tournaments/forms.py:199 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" msgstr "" -#: tournaments/forms.py:205 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" msgstr "" -#: tournaments/forms.py:217 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." msgstr "" -#: tournaments/forms.py:223 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." msgstr "" -#: tournaments/mixins.py:108 +#: tournaments/forms.py +#, python-format +msgid "%(name)s (%(abbreviation)s)" +msgstr "" + +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." msgstr "" -#: tournaments/mixins.py:116 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." msgstr "" -#: tournaments/mixins.py:129 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." msgstr "" -#: tournaments/mixins.py:136 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." msgstr "" -#: tournaments/mixins.py:231 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" msgstr "" -#: tournaments/mixins.py:431 +#: tournaments/mixins.py msgid "Return to Draw" msgstr "" -#: tournaments/models.py:27 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." msgstr "" -#: tournaments/models.py:34 tournaments/models.py:330 +#: tournaments/models.py msgid "name" msgstr "" -#: tournaments/models.py:35 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" msgstr "" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "short name" msgstr "" -#: tournaments/models.py:38 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" msgstr "" -#: tournaments/models.py:40 tournaments/models.py:324 +#: tournaments/models.py msgid "sequence number" msgstr "" -#: tournaments/models.py:41 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." msgstr "" -#: tournaments/models.py:43 +#: tournaments/models.py msgid "slug" msgstr "" -#: tournaments/models.py:44 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" msgstr "" -#: tournaments/models.py:45 +#: tournaments/models.py msgid "active" msgstr "" -#: tournaments/models.py:48 tournaments/models.py:323 +#: tournaments/models.py msgid "tournament" msgstr "" -#: tournaments/models.py:49 +#: tournaments/models.py msgid "tournaments" msgstr "" -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Random" msgstr "" -#: tournaments/models.py:296 +#: tournaments/models.py msgid "Manual" msgstr "" -#: tournaments/models.py:297 +#: tournaments/models.py msgid "Round-robin" msgstr "" -#: tournaments/models.py:298 +#: tournaments/models.py msgid "Power-paired" msgstr "" -#: tournaments/models.py:299 tournaments/models.py:306 +#: tournaments/models.py msgid "Elimination" msgstr "" -#: tournaments/models.py:305 +#: tournaments/models.py msgid "Preliminary" msgstr "" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "None" msgstr "" -#: tournaments/models.py:316 +#: tournaments/models.py msgid "Draft" msgstr "" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "Confirmed" msgstr "" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "Released" msgstr "" -#: tournaments/models.py:325 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" msgstr "" -#: tournaments/models.py:327 +#: tournaments/models.py msgid "completed" msgstr "" -#: tournaments/models.py:328 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" msgstr "" -#: tournaments/models.py:330 +#: tournaments/models.py msgid "e.g. \"Round 1\"" msgstr "" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "abbreviation" msgstr "" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "e.g. \"R1\"" msgstr "" -#: tournaments/models.py:333 +#: tournaments/models.py msgid "stage" msgstr "" -#: tournaments/models.py:334 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" msgstr "" -#: tournaments/models.py:336 +#: tournaments/models.py msgid "draw type" msgstr "" -#: tournaments/models.py:337 +#: tournaments/models.py msgid "Which draw method to use" msgstr "" -#: tournaments/models.py:340 +#: tournaments/models.py msgid "break category" msgstr "" -#: tournaments/models.py:341 +#: tournaments/models.py msgid "If elimination round, which break category" msgstr "" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "draw status" msgstr "" -#: tournaments/models.py:345 +#: tournaments/models.py msgid "The status of this round's draw" msgstr "" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "feedback weight" msgstr "" -#: tournaments/models.py:350 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." msgstr "" #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:353 +#: tournaments/models.py msgid "silent" msgstr "" -#: tournaments/models.py:354 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." msgstr "" -#: tournaments/models.py:356 +#: tournaments/models.py msgid "motions released" msgstr "" -#: tournaments/models.py:357 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" msgstr "" -#: tournaments/models.py:358 +#: tournaments/models.py msgid "starts at" msgstr "" -#: tournaments/models.py:361 +#: tournaments/models.py +msgid "weight" +msgstr "" + +#: tournaments/models.py +msgid "A factor for the points received in the round. For example, if 2, all points are doubled." +msgstr "" + +#: tournaments/models.py msgid "round" msgstr "" -#: tournaments/models.py:362 +#: tournaments/models.py msgid "rounds" msgstr "" -#: tournaments/models.py:375 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:378 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:383 +#: tournaments/models.py msgid "Elimination rounds must have a break category." msgstr "" -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" msgstr "" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" msgstr "" -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" msgstr "" -#: tournaments/templates/blank_site_start.html:7 -msgid "Welcome to Tabbycat" -msgstr "" - -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" msgstr "" -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." msgstr "" -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." msgstr "" -#: tournaments/templates/blank_site_start.html:32 -msgid "The e-mail address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." +#: tournaments/templates/blank_site_start.html +msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." msgstr "" -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" msgstr "" -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" msgstr "" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." msgstr "" -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." msgstr "" -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" msgstr "" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." msgstr "" -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" msgstr "" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." msgstr "" -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" msgstr "" -#: tournaments/templates/donations.html:4 -#: tournaments/templates/donations.html:5 -msgctxt "title" -msgid "Donate to Tabbycat" -msgstr "" - -#: tournaments/templates/donations.html:11 -msgid "Tabbycat is a volunteer effort. Since 2012, its maintainers have spent thousands of hours working on it." -msgstr "" - -#: tournaments/templates/donations.html:17 -msgid "Donating to Tabbycat helps the maintainers to meet recurring costs and justify our ongoing contributions in responding to support enquiries, keeping the software up to date, fixing bugs, and developing new features." -msgstr "" - -#: tournaments/templates/donations.html:24 -msgid "We suggest that tournaments budget for a donation of A$1 (Australian dollar) per team. For tournaments run for fundraising or for profit, whether partly or solely, this payment is required and your licence to use Tabbycat is conditional upon it. General donations from individuals or organisations are of course also much appreciated." -msgstr "" - -#: tournaments/templates/donations.html:34 -#, python-format -msgid "Our suggested donation from %(tournament)s, based on its size, is A$%(nteams)s. The easiest way to donate is via Paypal, but please don’t hesitate to email us if other methods would work better for you. Also, feel free to get in touch if you require an invoice or receipt for the payment." -msgstr "" - -#: tournaments/templates/donations.html:46 -msgid "The easiest way to donate is via Paypal. Please contact us if you require other options." -msgstr "" - -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" msgstr "" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." msgstr "" -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." msgstr "" -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." msgstr "" -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." msgstr "" -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" msgstr "" -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" +msgid "Teams on %(side)s" msgstr "" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" msgstr "" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." msgstr "" -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." msgstr "" -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" msgstr "" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:201 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" msgstr "" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" msgstr "" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" msgstr "" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" msgstr "" -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" msgstr "" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" msgstr "" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" msgstr "" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" msgstr "" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" msgstr "" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" msgstr "" -#: tournaments/templates/public_tournament_index.html:187 -msgid "Enter Ballot" +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Enter Ballot for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:193 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" msgstr "" -#: tournaments/templates/public_tournament_index.html:215 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" msgstr "" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" msgstr "" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" msgstr "" -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." msgstr "" -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" msgstr "" -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" msgstr "" -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" msgstr "" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" msgstr "" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" msgstr "" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" msgstr "" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." msgstr[0] "" msgstr[1] "" -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" msgstr "" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." msgstr[0] "" msgstr[1] "" -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " msgstr "" -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "" -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" msgstr "" -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" msgstr "" -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "" -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:46 -msgid "Inactive Tournaments" +#: tournaments/templates/set_round_weights.html +msgctxt "page title" +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." msgstr "" -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/set_round_weights.html +msgctxt "button" +msgid "Set weights" +msgstr "" + +#: tournaments/templates/site_index.html msgid "Welcome!" msgstr "" -#: tournaments/templates/site_index.html:20 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" msgstr "" -#: tournaments/templates/site_index.html:29 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:33 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:54 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html msgid "New Tournament" msgstr "" -#: tournaments/templates/site_index.html:57 +#: tournaments/templates/site_index.html msgid "Edit Database Area" msgstr "" -#: tournaments/templates/site_index.html:60 +#: tournaments/templates/site_index.html msgid "Send a Test Email" msgstr "" -#: tournaments/templates/site_index.html:69 +#: tournaments/templates/site_index.html +msgid "Import DebateXML" +msgstr "" + +#: tournaments/templates/site_index.html #, python-format -msgid "Change Password (%(user)s)" +msgid "Get API Token / Change Password (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:79 +#: tournaments/templates/site_index.html msgid "Log In as Admin" msgstr "" -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." msgstr "" -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" msgstr "" -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." msgstr "" #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." msgstr "" -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." msgstr "" -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" +msgid "Mark participants as available to prepare a draw for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" +msgid "Go to the results area to enter ballots for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." msgstr "" -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" msgstr "" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" msgstr "" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" msgstr "" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" msgstr "" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" msgstr "" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" msgstr "" -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" msgstr "" -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" msgstr "" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" msgstr "" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" msgstr "" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" msgstr "" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" msgstr "" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" msgstr "" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" msgstr "" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" msgstr "" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" msgstr "" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" msgstr "" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" msgstr "" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" msgstr "" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" msgstr "" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" msgstr "" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" msgstr "" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" msgstr "" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" msgstr "" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" msgstr "" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" msgstr "" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" msgstr "" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" msgstr "" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" msgstr "" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" msgstr "" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" msgstr "" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" msgstr "" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" msgstr "" -#: tournaments/views.py:154 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" msgstr "" -#: tournaments/views.py:160 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." msgstr "" -#: tournaments/views.py:173 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." msgstr "" -#: tournaments/views.py:179 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." msgstr "" -#: tournaments/views.py:187 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" msgstr "" -#: tournaments/views.py:216 -msgid "Whoops! It looks like someone's already created the first user account. Please log in." -msgstr "" - -#: tournaments/views.py:224 -#, python-format -msgid "Welcome! You've created an account for %s." -msgstr "" - -#: tournaments/views.py:239 +#: tournaments/views.py msgid "8-team generic dataset" msgstr "" -#: tournaments/views.py:240 +#: tournaments/views.py msgid "24-team Australs dataset" msgstr "" -#: tournaments/views.py:241 +#: tournaments/views.py msgid "88-team BP dataset" msgstr "" +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." +msgstr "" + diff --git a/tabbycat/utils/locale/hi/LC_MESSAGES/django.po b/tabbycat/utils/locale/hi/LC_MESSAGES/django.po index 99b7eeecc5d..92832ab9bc5 100644 --- a/tabbycat/utils/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:35\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -15,319 +15,314 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/utils/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "E-mail address" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "" + +#: utils/admin.py +msgid "Speaker" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "" + +#: utils/admin.py +msgid "Confirmed" +msgstr "" + +#: utils/admin.py +msgid "Adjudicator" msgstr "" -#: utils/tables.py:43 +#: utils/tables.py msgid "No Data Available" msgstr "" -#: utils/tables.py:151 utils/tables.py:152 +#: utils/tables.py msgid "Ⓒ" msgstr "" -#: utils/tables.py:153 +#: utils/tables.py msgid "Ⓣ" msgstr "" -#: utils/tables.py:157 +#: utils/tables.py msgid "chair" msgstr "" -#: utils/tables.py:158 +#: utils/tables.py msgid "panellist" msgstr "" -#: utils/tables.py:159 +#: utils/tables.py msgid "trainee" msgstr "" -#: utils/tables.py:162 +#: utils/tables.py msgid "—" msgstr "" -#: utils/tables.py:226 utils/tables.py:232 +#: utils/tables.py +msgid "Redacted" +msgstr "" + +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" msgstr "" -#: utils/tables.py:242 utils/tables.py:247 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" msgstr "" -#: utils/tables.py:269 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" msgstr "" -#: utils/tables.py:271 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" msgstr "" -#: utils/tables.py:283 +#: utils/tables.py #, python-format msgid "%(team)s won" msgstr "" -#: utils/tables.py:288 +#: utils/tables.py #, python-format msgid "%(team)s lost" msgstr "" -#: utils/tables.py:293 utils/tables.py:321 utils/tables.py:339 +#: utils/tables.py #, python-format msgid "%(team)s—no result" msgstr "" -#: utils/tables.py:301 +#: utils/tables.py #, python-format -msgid "%(team)s took 1st" +msgid "%(team)s placed %(place)s" msgstr "" -#: utils/tables.py:306 +#: utils/tables.py #, python-format -msgid "%(team)s took 2nd" -msgstr "" - -#: utils/tables.py:311 -#, python-format -msgid "%(team)s took 3rd" +msgid "%(team)s is advancing" msgstr "" -#: utils/tables.py:316 +#: utils/tables.py #, python-format -msgid "%(team)s took 4th" +msgid "%(team)s was eliminated" msgstr "" -#: utils/tables.py:329 -#, python-format -msgid "%(team)s is advancing" +#: utils/tables.py +msgid "View/edit debate ballot" msgstr "" -#: utils/tables.py:334 -#, python-format -msgid "%(team)s was eliminated" +#: utils/tables.py +msgid "View debate ballot" msgstr "" -#: utils/tables.py:352 +#: utils/tables.py #, python-format msgid " vs %(opposition)s" msgstr "" -#: utils/tables.py:359 +#: utils/tables.py #, python-format msgid "Won against %(team)s" msgstr "" -#: utils/tables.py:361 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" msgstr "" -#: utils/tables.py:363 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" msgstr "" -#: utils/tables.py:371 utils/tables.py:450 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" msgstr "" -#: utils/tables.py:376 utils/tables.py:455 -msgid "View/edit debate ballot" -msgstr "" - -#: utils/tables.py:382 utils/tables.py:461 -msgid "View debate ballot" -msgstr "" - -#: utils/tables.py:403 +#: utils/tables.py msgid "Teams in debate:" msgstr "" -#: utils/tables.py:406 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "" -#: utils/tables.py:407 utils/tables.py:411 utils/tables.py:437 +#: utils/tables.py msgid "??" msgstr "" -#: utils/tables.py:425 +#: utils/tables.py msgid "advancing" msgstr "" -#: utils/tables.py:426 +#: utils/tables.py msgid "Advancing" msgstr "" -#: utils/tables.py:428 +#: utils/tables.py msgid "eliminated" msgstr "" -#: utils/tables.py:429 +#: utils/tables.py msgid "Eliminated" msgstr "" -#: utils/tables.py:432 utils/tables.py:442 +#: utils/tables.py msgid "No result for debate" msgstr "" -#: utils/tables.py:439 +#: utils/tables.py #, python-format msgid "Placed %(place)s" msgstr "" -#: utils/tables.py:470 -msgid "Tournament" -msgstr "" - -#: utils/tables.py:479 -msgid "Round" -msgstr "" - -#: utils/tables.py:497 utils/tables.py:683 +#: utils/tables.py msgid "Name" msgstr "" -#: utils/tables.py:503 utils/tables.py:665 +#: utils/tables.py msgid "Institution" msgstr "" -#: utils/tables.py:509 +#: utils/tables.py msgid "Member of the Adjudication Core" msgstr "" -#: utils/tables.py:516 +#: utils/tables.py msgid "Independent Adjudicator" msgstr "" -#: utils/tables.py:524 +#: utils/tables.py msgid "Always Trainee" msgstr "" -#: utils/tables.py:562 +#: utils/tables.py msgid "in minority" msgstr "" -#: utils/tables.py:595 +#: utils/tables.py msgid "Debate Adjudicators" msgstr "" -#: utils/tables.py:626 -msgid "Order as listed" -msgstr "" - -#: utils/tables.py:633 -msgid "?" -msgstr "" - -#: utils/tables.py:636 -msgid "Motion" -msgstr "" - -#: utils/tables.py:651 -msgid "Team" -msgstr "" - -#: utils/tables.py:656 utils/tables.py:705 +#: utils/tables.py msgid "Categories" msgstr "" -#: utils/tables.py:676 -msgid "Redacted" -msgstr "" - -#: utils/tables.py:703 +#: utils/tables.py msgid "Category" msgstr "" -#: utils/tables.py:730 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." msgstr "" -#: utils/tables.py:732 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." msgstr "" -#: utils/tables.py:747 +#: utils/tables.py msgid "Room" msgstr "" -#: utils/tables.py:763 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" msgstr[0] "" msgstr[1] "" -#: utils/tables.py:769 +#: utils/tables.py msgid "Teams are from the same institution" msgstr "" -#: utils/tables.py:775 +#: utils/tables.py msgid "Conflicts/Flags" msgstr "" -#: utils/tables.py:829 -msgid "The ballot you submitted" +#: utils/tables.py +msgid "The confirmed ballot" msgstr "" -#: utils/tables.py:833 -msgid "View/Edit Ballot" -msgstr "" - -#: utils/tables.py:842 +#: utils/tables.py msgid "No ballot" msgstr "" -#: utils/tables.py:844 -msgid "Elimination" +#: utils/tables.py +msgid "No scores" msgstr "" -#: utils/tables.py:847 utils/tables.py:859 +#: utils/tables.py msgid "View Ballot" msgstr "" -#: utils/tables.py:867 +#: utils/tables.py +msgid "The ballot you submitted" +msgstr "" + +#: utils/tables.py +msgid "View/Edit Ballot" +msgstr "" + +#: utils/tables.py msgid "Result" msgstr "" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:873 +#: utils/tables.py msgid "TBC" msgstr "" -#: utils/tables.py:874 -msgid "Side" +#: utils/tables.py +msgid "Team iron-personed this round and the last." msgstr "" -#: utils/tables.py:912 -msgid "Team iron-manned this round and the last." +#: utils/tables.py +msgid "Team iron-personed this round." msgstr "" -#: utils/tables.py:915 -msgid "Team iron-manned this round." +#: utils/tables.py +msgid "Team iron-personed last round." msgstr "" -#: utils/tables.py:918 -msgid "Team iron-manned last round." -msgstr "" - -#: utils/tables.py:935 utils/tables.py:936 +#: utils/tables.py #, python-format msgid "Team %(num)d" msgstr "" -#: utils/views.py:38 +#: utils/tables.py +msgid "Postpone" +msgstr "" + +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." msgstr "" diff --git a/tabbycat/venues/locale/hi/LC_MESSAGES/django.po b/tabbycat/venues/locale/hi/LC_MESSAGES/django.po index 93cf9e98643..64d2ff4470b 100644 --- a/tabbycat/venues/locale/hi/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:35\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" "Last-Translator: philip_tc\n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -15,197 +15,205 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /develop/tabbycat/venues/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 -msgid "Venues" +#: venues/apps.py +msgid "Rooms" msgstr "" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." msgstr "" -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." msgstr "" -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." msgstr "" -#: venues/models.py:9 venues/models.py:64 +#: venues/models.py msgid "name" msgstr "" -#: venues/models.py:11 venues/models.py:118 +#: venues/models.py msgid "priority" msgstr "" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" msgstr "" -#: venues/models.py:15 venues/models.py:76 +#: venues/models.py msgid "tournament" msgstr "" -#: venues/models.py:22 +#: venues/models.py +msgid "URL" +msgstr "" + +#: venues/models.py +msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" +msgstr "" + +#: venues/models.py msgid "room" msgstr "" -#: venues/models.py:23 venues/models.py:74 +#: venues/models.py msgid "rooms" msgstr "" -#: venues/models.py:59 +#: venues/models.py msgid "Don't display in room name" msgstr "" -#: venues/models.py:60 +#: venues/models.py msgid "Display as prefix" msgstr "" -#: venues/models.py:61 +#: venues/models.py msgid "Display as suffix" msgstr "" -#: venues/models.py:65 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." msgstr "" -#: venues/models.py:69 +#: venues/models.py msgid "description" msgstr "" -#: venues/models.py:70 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." msgstr "" -#: venues/models.py:80 +#: venues/models.py msgid "display in room name" msgstr "" -#: venues/models.py:81 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" msgstr "" -#: venues/models.py:83 +#: venues/models.py msgid "display in public tooltip" msgstr "" -#: venues/models.py:84 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." msgstr "" -#: venues/models.py:88 +#: venues/models.py msgid "room category" msgstr "" -#: venues/models.py:89 +#: venues/models.py msgid "room categories" msgstr "" -#: venues/models.py:117 +#: venues/models.py msgid "category" msgstr "" -#: venues/models.py:121 +#: venues/models.py msgid "subject content type" msgstr "" -#: venues/models.py:124 +#: venues/models.py msgid "subject ID" msgstr "" -#: venues/models.py:130 +#: venues/models.py msgid "room constraint" msgstr "" -#: venues/models.py:131 +#: venues/models.py msgid "room constraints" msgstr "" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" msgstr "" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." msgstr "" -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." msgstr "" -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" msgstr "" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" msgstr "" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." msgstr "" -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" msgstr "" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" msgstr "" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" msgstr "" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" msgstr "" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" msgstr "" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" msgstr "" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" msgstr[0] "" msgstr[1] "" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." msgstr "" -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" msgstr "" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" msgstr "" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." From beacbd6ff3d4487e7ff06b200f06044024f12f73 Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Sun, 5 Feb 2023 11:56:32 +1100 Subject: [PATCH 212/255] New translations django.po (Indonesian) --- .../actionlog/locale/id/LC_MESSAGES/django.po | 156 ++-- .../locale/id/LC_MESSAGES/django.po | 199 +++-- .../locale/id/LC_MESSAGES/django.po | 452 +++++----- .../locale/id/LC_MESSAGES/django.po | 164 ++-- .../breakqual/locale/id/LC_MESSAGES/django.po | 251 +++--- tabbycat/draw/locale/id/LC_MESSAGES/django.po | 600 ++++++------- .../importer/locale/id/LC_MESSAGES/django.po | 227 +++-- tabbycat/locale/id/LC_MESSAGES/django.po | 480 +++++------ .../motions/locale/id/LC_MESSAGES/django.po | 190 ++-- .../locale/id/LC_MESSAGES/django.po | 196 +++-- .../options/locale/id/LC_MESSAGES/django.po | 813 +++++++++--------- .../locale/id/LC_MESSAGES/django.po | 497 ++++++----- .../printing/locale/id/LC_MESSAGES/django.po | 63 +- .../locale/id/LC_MESSAGES/django.po | 87 +- .../results/locale/id/LC_MESSAGES/django.po | 539 ++++++------ .../standings/locale/id/LC_MESSAGES/django.po | 313 ++++--- .../locale/id/LC_MESSAGES/django.po | 518 ++++++----- .../utils/locale/id/LC_MESSAGES/django.po | 197 +++-- .../venues/locale/id/LC_MESSAGES/django.po | 100 ++- 19 files changed, 2982 insertions(+), 3060 deletions(-) diff --git a/tabbycat/actionlog/locale/id/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/id/LC_MESSAGES/django.po index 9593714a2a8..38b394874f4 100644 --- a/tabbycat/actionlog/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-29 04:55\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -17,307 +17,307 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" msgstr "Catatan Tindakan" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" msgstr "Membuang balot" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" msgstr "Melakukan check-in balot" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" msgstr "Membuat balot" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" msgstr "Menyunting balot" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" msgstr "Mengkonfirmasi balot" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" msgstr "Memasukkan balot melalui form publik" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" msgstr "Memasukkan penilaian juri melalui form publik" -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" msgstr "Menyimpan penilaian juri" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" msgstr "Menyunting nilai awal juri" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" msgstr "Menyimpan catatan juri" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" msgstr "Simpan alokasi juri" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" msgstr "Mengalokasikan juri secara otomatis" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" msgstr "Menyimpan suntingan ruangan secara manual" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" msgstr "Mengalokasikan ruangan secara otomatis" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" msgstr "Menyunting kategori ruangan" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" msgstr "Menyunting pembatasan ruangan" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" msgstr "Menciptakan draw" -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" msgstr "Mengkonfirmasi draw" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" msgstr "Menciptakan ulang draw" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" msgstr "Mempublikasikan draw" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" msgstr "Menarik publikasi draw" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" msgstr "Menyimpan suntingan matchup manual" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" msgstr "Menyimpan status posisi sebuah matchup" -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "" -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" msgstr "Menambahkan/menyunting mosi" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" msgstr "Mempublikasikan mosi" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" msgstr "Menarik publikasi mosi" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" msgstr "Melakukan prioritasiasi tingkat kepentingan debat secara otomatis" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" msgstr "Menyunting prioritasiasi tingkat kepentingan debat" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" msgstr "Mengubah status kelolosan (breaking) juri" -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" msgstr "Menyunting eligibilitas break" -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" msgstr "Menyunting kategori break" -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" msgstr "Membuat team break untuk semua kategori" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" msgstr "Menyunting situasi breaking team dan memperbarui seluruh team break" -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" msgstr "Menyunting situasi breaking team dan memperbarui team break ini saja" -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" msgstr "Menyunting situasi breaking team" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" msgstr "Mengatur waktu mulai" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" msgstr "Melanjutkan ronde ini menuju" -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" msgstr "Menandai ronde telah tuntas" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" msgstr "Menyunting kehadiran tim" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" msgstr "Menyunting kehadiran juri" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" msgstr "Menyunting ketersediaan ruangan" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" msgstr "Menyunting opsi turnamen" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" msgstr "Menyunting eligibilitas kategori pendebat" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" msgstr "Menyunting kategori pembicara" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" msgstr "Mengimpor institusi dengan importir sederhana" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" msgstr "Mengimpor ruangan dengan importir sederhana" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" msgstr "Mengimpor tim dengan importir sederhana" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" msgstr "Mengimpor juri dengan importir sederhana" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" msgstr "Memperbarui nilai juri secara masal" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" msgstr "Menyunting konflik juri dengan tim" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" msgstr "Menyunting konflik juri dengan juri" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" msgstr "Menyunting konflik juri dengan institusi" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" msgstr "Menyunting konflik tim dengan institusi" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" msgstr "Membuat kode check-in unik untuk pendebat" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" msgstr "Membuat kode check-in unik untuk juri" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" msgstr "Membuat kode check-in unik untuk ruangan" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" msgstr "Membuat rancangan panel" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" msgstr "Prioritasisasi rancangan panel secara otomatis" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" msgstr "Menyunting tingkat kepentingan rancangan panel" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" msgstr "Alokasi juri ke rancangan panel secara otomatis" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" msgstr "Menyunting juri dalam rancangan panel" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" msgstr "Mengalokasikan rancangan panel kepada debat secara otomatis" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" msgstr "tipe" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" msgstr "waktu" -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "pengguna" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "turnamen" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "ronde" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" msgstr "tipe konten" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" msgstr "object ID" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" msgstr "catatan tindakan" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" msgstr "entri catatan tindakan" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." msgstr "Seluruh catatan tindakan mengharuskan setidaknya satu pengguna dan sebuah alamat IP." -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" msgstr "anonim" diff --git a/tabbycat/adjallocation/locale/id/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/id/LC_MESSAGES/django.po index f20f5515878..8f9a6adf50d 100644 --- a/tabbycat/adjallocation/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2021-11-04 06:15\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -17,424 +17,423 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." msgstr "Tidak ada juri yang tersedia. Pastikan bahwa ada juri yang telah ditandai kehadirannya untuk menjuri ronde ini sebelum melakukan alokasi otomatis." -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." msgstr[0] "%(count)s nilai yang diberikan melewati batas maksimum skor juri yang diizinkan (%(score).1f)." -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." msgstr[0] "%(count)s nilai yang diberikan lebih kecil dibanding minimum skor juri yang diijinkan (%(score).1f)." -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." msgstr "Tidak ada juri yang memiliki nilai yang cukup untuk dapat menjadi ketua panel atau panelis. Coba ubah \"nilai minimum untuk dialokasikan menjadi ketua panel atau panelis\" menjadi lebih rendah dari skor beberapa juri, dan coba lagi." -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" msgstr "Tidak ada debat untuk ronde ini. Mungkin anda belum membuat draw?" -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." msgstr "Ada %(debate_count)s debat yang terjadi namun hanya %(adj_count)s yang dapat menjadi ketua panel/panelis." -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." msgstr "Ada %(panel_debates)s debat berpanel namun hanya %(panellists)s panelis yang tersedia (kurang dari %(needed)s)." -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." msgstr "Ada %(debates_count)s debat yang terjadi namun hanya %(voting_count)s yang dapat menjadi ketua panel/panelis." -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" msgstr "Alokasi juri" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." msgstr "Draw telah dirilis. Batalkan rilis untuk melakukan alokasi otomatis kembali." -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." msgstr "Draw belum dikonfirmasi. Konfirmasi draw untuk melakukan alokasi otomatis." -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." msgstr "Tidak ada rancangan panel yang tersedia untuk dialokasikan." -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." msgstr "Sukses melakukan alokasi rancangan panel otomatis kepada debat." -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" msgstr[0] "Sukses melakukan alokasi juri secara otomatis. Namun, ada %(count)d peringatan:" -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." msgstr "Sukses melakukan alokasi juri otomatis kepada debat." -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." msgstr "Tidak ada panel untuk mengisi. Buat panel terlebih dahulu." -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" msgstr[0] "Sukses melakukan alokasi juri kepada rancangan panel. Namun, ada %(count)d peringatan:" -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." msgstr "Sukses melakukan alokasi juri otomatis kepada rancangan panel." -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." msgstr "Anda tidak memiliki kategori break yang diset sebagai \"umum\" sehinga tingkat kepentingan debat tidak dapat dikalkulasi" -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." msgstr "Sukses melakukan prioritasisasi debat secara otomatis." -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." msgstr "Anda tidak memiliki kategori break yang diset sebagai \"umum\" sehinga tingkat kepentingan panel tidak dapat dikalkulasi." -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." msgstr "Sukses melakukan prioritasisasi rancangan panel secara otomatis." -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." msgstr "Karena ini ronde pertama, rancangan panel tidak dilabeli dengan bracket dan liveness." -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." msgstr "Draw ronde sebelumnya tidak ada, maka rancangan panel tidak dapat dilabeli dengan bracket dan liveness." -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." msgstr "Sukses membuat rancangan panel baru untuk ronde ini." -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" msgstr "ketua panel" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" msgstr "panelis" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" msgstr "trainee" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "debat" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "juri debat" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" msgstr "tipe" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" msgstr "hadir?" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" msgstr "juri debat" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" msgstr "juri debat" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "tim" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" msgstr "konflik juri dengan tim" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" msgstr "konflik juri dengan tim" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "juri 1" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "juri 2" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" msgstr "konflik juri dengan juri" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" msgstr "konflik juri dengan juri" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" msgstr "institusi" -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" msgstr "konflik juri dengan institusi" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" msgstr "konflik juri dengan institusi" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" msgstr "konflik tim dengan institusi" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" msgstr "konflik tim dengan institusi" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "ronde" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" msgstr "tingkat kepentingan" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" msgstr "bracket minimum" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" msgstr "Estimasi bracket terendah panel ini akan berada" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" msgstr "bracket maksimum" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" msgstr "Estimasi bracket tertinggi panel ini akan berada" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" msgstr "peringkat ruangan" -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" msgstr "Angka terurut panel, tidak digunakan dalam algoritma manapun" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" msgstr "liveness" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" msgstr "Jumlah kategori ruangan ini diperkirakan masih live" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" msgstr "rancangan panel" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" msgstr "rancangan panel" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" msgstr "panel" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" msgstr "juri dalam rancangan panel" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" msgstr "juri dalam rancangan panel" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." msgstr "Tidak ada rancangan panel untuk digunakan. Apakah anda telah menciptakan rancangan panel untuk ronde ini? Apabila belum, coba melakukan alokasi juri otomatis." -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" msgstr "Rancangan Panel" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." msgstr "Rancangan panel adalah sekumpulan juri yang telah dikhususkan untuk sebuah ronde sebelum draw dibuat. Anda dapat secara manual atau otomatis menggunakan kumpulan panel tersebut dalam proses alokasi juri seperti biasa. Ini dapat mempercepat proses alokasi atau menciptakan panel juri dengan pertimbangan tertentu." -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." msgstr "Perhatikan bahwa hanya juri yang telah ditandai sebagai 'hadir' untuk sebuah ronde yang dapat dialokasikan terhadap ronde tersebut, sehingga anda mungkin ingin mencentang kehadiran mereka sebelum ronde." -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" msgstr "Sunting Rancangan Panel untuk %(round)s" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" msgstr "Konflik: %(adjudicator)s & %(team)s (personal)" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" msgstr "Konflik: %(adjudicator)s & %(team)s via institusi %(institution)s" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" msgstr "Konflik: %(adjudicator1)s & %(adjudicator2)s (personal)" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" msgstr "Konflik: %(adjudicator1)s & %(adjudicator2)s via institusi %(institution)s" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "Pria" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" msgstr "Wanita" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "Lainnya" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" msgstr "Tak diketahui" -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" msgstr "Sunting Alokasi" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" msgstr "Sunting Panel" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" msgstr "Kembali ke Tinjauan Panel" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" msgstr "Konflik Juri dengan Tim" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" msgstr "Simpan Konflik Juri dengan Tim" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." msgstr[0] "Menyimpan %(count)d konflik juri dengan tim." -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." msgstr[0] "Menghapus %(count)d konflik juri dengan tim." -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." msgstr "Tidak ada suntingan yang dibuat terhadap konflik juri dengan tim." -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" msgstr "Konflik Juri dengan Juri" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" msgstr "Menyimpan Konflik Juri dengan Juri" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." msgstr[0] "Menyimpan %(count)d konflik juri dengan juri." -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." msgstr[0] "Menghapus %(count)d konflik juri dengan juri." -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." msgstr "Tidak ada suntingan yang dibuat terhadap konflik juri dengan juri." -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" msgstr "Konflik Juri dengan Institusi" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" msgstr "Menyimpan Konflik Juri dengan Institusi" -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." msgstr[0] "Menyimpan %(count)d konflik juri dengan institusi." -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." msgstr[0] "Menghapus %(count)d konflik juri dengan institusi." -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." msgstr "Tidak ada suntingan yang dibuat terhadap konflik juri dengan institusi." -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" msgstr "Konflik Tim dengan Institusi" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" msgstr "Menyimpan Konflik Tim dengan Institusi" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." msgstr[0] "Menyimpan %(count)d konflik tim dengan institusi." -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." msgstr[0] "Menyimpan %(count)d konflik tim dengan institusi." -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." msgstr "Tidak ada suntingan yang dibuat terhadap konflik tim dengan institusi." diff --git a/tabbycat/adjfeedback/locale/id/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/id/LC_MESSAGES/django.po index a2d2c4d2821..66669234435 100644 --- a/tabbycat/adjfeedback/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-05-23 06:54\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -17,936 +17,932 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:44 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" msgstr "Skala bilangan bulat harus memiliki minimum dan maksimum" -#: adjfeedback/admin.py:73 adjfeedback/admin.py:139 +#: adjfeedback/admin.py msgid "target" msgstr "tujuan" -#: adjfeedback/admin.py:74 adjfeedback/admin.py:140 adjfeedback/models.py:236 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" msgstr "juri yang memberi penilaian" -#: adjfeedback/admin.py:75 adjfeedback/admin.py:141 adjfeedback/models.py:238 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" msgstr "tim yang memberi penilaian" -#: adjfeedback/admin.py:91 -#, python-format -msgid "%(timestamp)s (version %(version)s)" -msgstr "%(timestamp)s (versi %(version)s)" - -#: adjfeedback/admin.py:96 +#: adjfeedback/admin.py msgid "Target" msgstr "Tujuan" -#: adjfeedback/admin.py:97 adjfeedback/admin.py:162 +#: adjfeedback/admin.py msgid "Source" msgstr "Sumber" -#: adjfeedback/admin.py:98 +#: adjfeedback/admin.py msgid "Feedback timestamp and version" msgstr "Waktu dan versi penilaian" -#: adjfeedback/admin.py:180 +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "%(timestamp)s (versi %(version)s)" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgstr[0] "%(count)d penilaian juri telah terkonfirmasi. Perhatikan bahwa ini dapat menyebabkan submisi penilaian juri yang lain menjadi tidak terkonfirmasi." -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." msgstr[0] "%(count)d penilaian juri tidak terkonfirmasi, mungkin karena submisi penilaian juri yang lain berhubungan dengan ini ditandai sebagai terkonfirmasi." -#: adjfeedback/admin.py:205 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." msgstr[0] "%(count)d submisi penilaian juri ditandai sebagai tidak terkonfirmasi." -#: adjfeedback/admin.py:215 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." msgstr[0] "%(count)d submisi penilaian juri telah diabaikan." -#: adjfeedback/admin.py:225 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." msgstr[0] "%(count)d submisi penilaian juri telah diakui." -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" msgstr "Penilaian Juri" -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "chair" msgstr "ketua panel" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "solo" msgstr "solo" -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "panellist" msgstr "panelis" -#: adjfeedback/forms.py:29 +#: adjfeedback/forms.py msgid "trainee" msgstr "trainee" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:57 +#: adjfeedback/forms.py msgid "Yes" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:59 +#: adjfeedback/forms.py msgid "No" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:74 adjfeedback/forms.py:83 +#: adjfeedback/forms.py msgid "This field is required." msgstr "" -#: adjfeedback/forms.py:164 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" msgstr "Nilai secara keseluruhan (%(min)d=terrendah; %(max)d=tertinggi)" -#: adjfeedback/forms.py:176 +#: adjfeedback/forms.py msgid "Ignored" msgstr "Diabaikan" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:228 adjfeedback/forms.py:291 +#: adjfeedback/forms.py msgid "Submitted - " msgstr "Dimasukkan " #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:229 adjfeedback/forms.py:296 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" msgstr "%(name)s (%(adjpos)s)" -#: adjfeedback/forms.py:252 adjfeedback/forms.py:326 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "-- Juri debat --" -#: adjfeedback/forms.py:269 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" msgstr "Juri penilaian ini untuk" -#: adjfeedback/forms.py:293 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "" -#: adjfeedback/forms.py:299 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" msgstr "%(name)s (ketua panel memberikan verbal)" -#: adjfeedback/forms.py:301 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" msgstr "%(name)s (panelis memberikan verbal)" -#: adjfeedback/forms.py:392 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" msgstr "Baris ini (untuk %(adjudicator)s) tidak memiliki nilai" -#: adjfeedback/forms.py:397 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" msgstr "Baris ini (untuk %(adjudicator)s) memiliki terlalu banyak kolom" -#: adjfeedback/forms.py:410 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." msgstr "Ada beberapa juri yang bernama \"%(adjudicator)s\", sehingga importir nilai masal tidak dapat digunakan untuk memperbarui nilai mereka. Perbarui nilai mereka di halaman Tinjauan Penilaian." -#: adjfeedback/forms.py:416 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" msgstr "Tidak ada juri di turnamen ini dengan nama \"%(adjudicator)s\"" -#: adjfeedback/forms.py:424 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" msgstr "Nilai untuk %(adjudicator)s, \"%(score)s\", bukan angka" -#: adjfeedback/forms.py:439 +#: adjfeedback/forms.py msgid "There were no scores to import." msgstr "Tidak ada nilai untuk diimpor." -#: adjfeedback/models.py:13 adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator" msgstr "juri debat" -#: adjfeedback/models.py:16 +#: adjfeedback/models.py msgid "round" msgstr "ronde" -#: adjfeedback/models.py:17 adjfeedback/models.py:232 +#: adjfeedback/models.py msgid "score" msgstr "skor" -#: adjfeedback/models.py:18 +#: adjfeedback/models.py msgid "timestamp" msgstr "waktu" -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score history" msgstr "histori nilai awal juri" -#: adjfeedback/models.py:22 +#: adjfeedback/models.py msgid "adjudicator base score histories" msgstr "histori nilai awal juri" -#: adjfeedback/models.py:30 +#: adjfeedback/models.py msgid "question" msgstr "pertanyaan" -#: adjfeedback/models.py:32 +#: adjfeedback/models.py msgid "feedback" msgstr "penilaian" -#: adjfeedback/models.py:45 adjfeedback/models.py:55 adjfeedback/models.py:65 -#: adjfeedback/models.py:74 +#: adjfeedback/models.py msgid "answer" msgstr "jawaban" -#: adjfeedback/models.py:48 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" msgstr "penilaian juri, jawaban boolean / iya-tidak" -#: adjfeedback/models.py:49 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" msgstr "penilaian juri, jawaban boolean / iya-tidak" -#: adjfeedback/models.py:58 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" msgstr "penilaian juri, jawaban numerik" -#: adjfeedback/models.py:59 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" msgstr "penilaian juri, jawaban numerik" -#: adjfeedback/models.py:68 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" msgstr "penilaian juri, jawaban numerik" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" msgstr "penilaian juri, jawaban numerik" -#: adjfeedback/models.py:77 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" msgstr "penilaian juri, jawaban frasa / kalimat singkat" -#: adjfeedback/models.py:78 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" msgstr "penilaian juri, jawaban frasa / kalimat singkat" -#: adjfeedback/models.py:86 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answer" msgstr "jawaban pilihan berganda umpanbalik juri" -#: adjfeedback/models.py:87 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answers" msgstr "jawaban pilihan berganda umpanbalik juri" -#: adjfeedback/models.py:106 +#: adjfeedback/models.py msgid "checkbox" msgstr "kotak centang" -#: adjfeedback/models.py:107 +#: adjfeedback/models.py msgid "yes/no (dropdown)" msgstr "iya / tidak (dropdown)" -#: adjfeedback/models.py:108 +#: adjfeedback/models.py msgid "integer (textbox)" msgstr "numerik (kotak teks)" -#: adjfeedback/models.py:109 +#: adjfeedback/models.py msgid "integer scale" msgstr "skala numerik" -#: adjfeedback/models.py:110 +#: adjfeedback/models.py msgid "float" msgstr "bilangan desimal" -#: adjfeedback/models.py:111 adjfeedback/models.py:145 +#: adjfeedback/models.py msgid "text" msgstr "teks" -#: adjfeedback/models.py:112 +#: adjfeedback/models.py msgid "long text" msgstr "teks panjang" -#: adjfeedback/models.py:113 +#: adjfeedback/models.py msgid "select one" msgstr "pilih satu" -#: adjfeedback/models.py:114 +#: adjfeedback/models.py msgid "select multiple" msgstr "pilih beberapa" -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "tournament" msgstr "turnamen" -#: adjfeedback/models.py:143 +#: adjfeedback/models.py msgid "sequence number" msgstr "nomor urut" -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" msgstr "Pertanyaan yang ditampilkan kepada partisipan, seperti \"Apakah anda setuju dengan keputusan yang diberikan?\"" -#: adjfeedback/models.py:148 +#: adjfeedback/models.py msgid "name" msgstr "nama" -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" msgstr "Nama pendek untuk pertanyaan ini seperti \"Setuju dengan keputusan\"" -#: adjfeedback/models.py:151 +#: adjfeedback/models.py msgid "reference" msgstr "referensi" -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" msgstr "Referensi yang kompatibel dengan kode seperti \"setuju_dengan_keputusan\"" -#: adjfeedback/models.py:155 +#: adjfeedback/models.py msgid "from adjudicator" msgstr "dari juri" -#: adjfeedback/models.py:156 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" msgstr "Juri harus ditanyakan pertanyaan ini (tentang juri lain)" -#: adjfeedback/models.py:158 +#: adjfeedback/models.py msgid "from team" msgstr "dari tim" -#: adjfeedback/models.py:159 +#: adjfeedback/models.py msgid "Teams should be asked this question" msgstr "Tim harus ditanyakan pertanyaan ini" -#: adjfeedback/models.py:162 +#: adjfeedback/models.py msgid "answer type" msgstr "tipe jawaban" -#: adjfeedback/models.py:164 +#: adjfeedback/models.py msgid "required" msgstr "diwajibkan" -#: adjfeedback/models.py:165 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" msgstr "Apakah partisipan diwajibkan untuk mengisi kolom ini" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "minimum value" msgstr "nilai minimum" -#: adjfeedback/models.py:168 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "Nilai minimum yang diijinkan untuk kolom numerik (abaikan untuk kolom teks dan boolean)" -#: adjfeedback/models.py:170 +#: adjfeedback/models.py msgid "maximum value" msgstr "nilai maksimum" -#: adjfeedback/models.py:171 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "Nilai maksimum yang diijinkan untuk kolom numerik (abaikan untuk kolom teks dan boolean)" -#: adjfeedback/models.py:176 +#: adjfeedback/models.py msgid "choices" msgstr "pilihan" -#: adjfeedback/models.py:177 +#: adjfeedback/models.py msgid "Permissible choices for select one/multiple fields (ignored for other fields)" msgstr "Pilihan yang diizinkan untuk memilih satu / beberapa bidang (diabaikan untuk bidang lain)" -#: adjfeedback/models.py:182 +#: adjfeedback/models.py msgid "adjudicator feedback question" msgstr "pertanyaan penilaian juri" -#: adjfeedback/models.py:183 +#: adjfeedback/models.py msgid "adjudicator feedback questions" msgstr "pertanyaan penilaian juri" -#: adjfeedback/models.py:241 adjfeedback/views.py:768 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" msgstr "diabaikan" -#: adjfeedback/models.py:242 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" msgstr "Apakah submisi penilaian juri mempengaruhi nilai juri tersebut" -#: adjfeedback/models.py:246 +#: adjfeedback/models.py msgid "adjudicator feedback" msgstr "penilaian juri" -#: adjfeedback/models.py:247 +#: adjfeedback/models.py msgid "adjudicator feedbacks" msgstr "penilaian Juri" -#: adjfeedback/models.py:307 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." msgstr "Juri atau tim yang memberikan penilaian tidak disebutkan." -#: adjfeedback/models.py:310 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." msgstr "Ada keduanya, juri dan tim yang memberikan penilaian." -#: adjfeedback/models.py:312 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" msgstr "Tidak ada juri yang menjadi target penilaian ini. Apakah mereka telah dihapus?" -#: adjfeedback/models.py:314 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." msgstr "Juri tidak melihat debat ini." -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" msgstr "Apakah juri ditandai sebagai breaking (klik untuk mentandai)" -#: adjfeedback/tables.py:35 +#: adjfeedback/tables.py msgid "N/A" msgstr "N/A" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py msgid "Current weighted score" msgstr "Skor saat ini" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." msgstr "Nilai juri ini sekarang." -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" msgstr "Hasil nilai awal" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" msgstr "Klik untuk menyunting nilai awal" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" msgstr "Nilai awal yang diberikan" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" msgstr "Perbedaan antara nilai awal dan nilai juri saat ini" -#: adjfeedback/tables.py:84 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" msgstr "Perbedaan antara nilai awal dan nilai juri saat ini" -#: adjfeedback/tables.py:93 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." msgstr "Standar deviasi nilai juri; angka yang lebih besar mengindikasikan penilaian juri yang tidak konsisten." -#: adjfeedback/tables.py:97 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" msgstr "Standar deviasi nilai juri ini" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Feedback Per Round" msgstr "Penilaian Juri tiap Ronde" -#: adjfeedback/tables.py:107 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" msgstr "Letakkan mouse di atas titik data untuk melihat skor rata-rata yang diterima tiap ronde" -#: adjfeedback/tables.py:125 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" msgstr[0] "Lihat %(count)s
    penilaian juri" -#: adjfeedback/tables.py:148 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" msgstr "Penilaian juri yang belum diterima" -#: adjfeedback/tables.py:172 +#: adjfeedback/tables.py msgid "View Missing Feedback" msgstr "Lihat Penilaian Juri yang Hilang" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" msgstr "Dari siapakah penilaian ini diberikan?" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" msgstr "Berikan Penilaian" -#: adjfeedback/templates/enter_feedback.html:9 -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format msgid "Add Feedback from %(name)s" msgstr "Tambahkan Penilaian dari %(name)s" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" msgstr "Tambahkan Penilaian" -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" msgstr "Tidak ada opsi penilaian karena belum ada ronde yang dirilis ke publik. Periksa kembali saat ronde telah dirilis!" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." msgstr "Turnamen ini mengharapkan anda untuk memberikan penilaian hanya untuk juri yang memberikan verbal . Jangan memberikan penilaian untuk juri lainnya." -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." msgstr "Turnamen ini mengharapkan anda untuk memberikan penilaian untuk semua juri (termasuk trainee)." -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." msgstr "Ada sedikit masalah dengan penilaian juri ini. Tolong periksa dan perbaiki." -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "Saat melakukan submisi, alamat IP anda akan disimpan untuk pencatatan." -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" msgstr "Tinjauan" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" msgstr "Terbaru" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" msgstr "Belum Diterima" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" msgstr "Penting" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" msgstr "Komentar" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" msgstr "Dengan Sumber" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" msgstr "Dengan Tujuan" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" msgstr "Perbarui nilai secara masal" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" msgstr "Penilaian dari %(source_type)s %(source_name)s" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." msgstr "%(source_name)s belum memberikan penilaian sama sekali." -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." msgstr "%(source_name)s belum menerima penilaian sama sekali." -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." msgstr "Ini mungkin karena tim atau juri yang memberikan penilaian melakukan submisi berkali-kali terhadap orang yang sama; atau karena tim memberikan penilaian untuk beberapa panelis dan bukan hanya yang memberikan verbal." -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." msgstr "Tidak terkonfirmasi; tidak akan berpengaruh pada nilai juri." -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." msgstr "Penilaian ini dihitung untuk juri ini, namun tidak digunakan saat mengkalkulasi skor." -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." msgstr "Diabaikan; tidak akan berpengaruh pada nilai juri." -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." msgstr "Penilaian ini diberikan untuk seorang juri namun juri tersebut telah dihapus dari debat. Dianjurkan untuk ke Sunting Database dan menghapus penilaian ini." -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." msgstr "Skor yang diberikan dalam penilaian ini." -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" msgstr "%(round)s %(score)s" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "On %(adjudicator)s" msgstr "Pada %(adjudicator)s" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" -msgstr "Diterima sebagai %(as)s" +msgid "Received as %(as_type)s" +msgstr "" -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" msgstr "Nilai awal %(base)s" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" msgstr "Dari %(source)s (%(relationship)s mereka)" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" msgstr "Dari %(source)s (%(relationship)s sebagai %(side)s)" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" msgstr "Asal tidak diketahui" -#: adjfeedback/templates/feedback_card.html:88 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:93 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." msgstr "Penilaian yang tidak terkonfirmasi tidak akan dianggap telah diserahkan dan tidak akan mempengaruhi skor juri tersebut." -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" msgstr "Tidak terkonfirmasi" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" msgstr "Konfirmasi" -#: adjfeedback/templates/feedback_card.html:103 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." msgstr "Penilaian yang diabaikan dianggap telah diserahkan namun tidak mempengaruhi skor juri." -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" msgstr "Hiraukan" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" msgstr "Abaikan" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" msgstr "Belum ada penilaian yang masuk" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" msgstr "%(c_breaking)s ditandai sebagai breaking" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." msgstr "Konfigurasi Penilaian saat ini mengijinkan dan mengharuskan hanya ketua panel yang memberikan penilaian terhadap panelis dan trainee mereka." -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." msgstr " Konfigurasi umpan balik saat ini memungkinkan dan mengharapkan baik ketua maupun panelis untuk saling mengirimkan umpan balik, dan juga ketua untuk mengirimkan umpan balik pada peserta pelatihan.umpan balik." -#: adjfeedback/templates/feedback_overview.html:18 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." msgstr " Konfigurasi umpan balik saat ini memungkinkan dan mengharapkan baik panelis maupun peserta pelatihan untuk mengirimkan umpan balik mengenai kursi, dan kursi untuk mengirimkan umpan balik kepada setiap anggota lain dari panel (termasuk peserta pelatihan)." -#: adjfeedback/templates/feedback_overview.html:22 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." msgstr "Konfigurasi Penilaian saat ini mengijinkan dan mengharuskan semua juri (termasuk trainee) untuk memberikan penilaian terhadap satu sama lain." -#: adjfeedback/templates/feedback_overview.html:30 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgstr[0] "Ada %(nadjs_outside_range)s juri dengan skor diluar interval yang diijinkan untuk nilai juri, yang mana diatur mulai dari %(min_score)s hingga %(max_score)s. Ini dapat menyebabkan alokasi otomatis memberikan hasil yang tidak sesuai ekspektasi. Apabila anda ingin menggunakan interval nilai yang lebih luas, anda dapat mengkonfigurasi ini di pengaturan penilaian juri." -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgstr[0] "%(count)s juri kini memiliki nilai sama dengan atau lebih dari %(min)s dan kurang dari %(max)s. Jumlah mereka sebesar %(percent)s%% dari total juri yang ada." -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" msgstr "Distribusi Skor (interval %(min_score)s–%(max_score)s)" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" msgstr "N. Awal" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" msgstr "Penilaian Juri" -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." msgstr "Nilai juri ditentukan berdasarkan penilaian tiap ronde dan nilai awal dan proporsinya diatur berbeda tiap ronde. Klik tautan berikut dan ubah 'Bobot penilaian tiap ronde' untuk mengubah proporsi ini untuk %(round)s." -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" msgstr "Rasio skor" -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." msgstr[0] "Ada %(c_chairs)s debat per ronde, sehingga membutuhkan %(c_chairs)s ketua panel." -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." msgstr[0] "Ada %(c_debates)s debat per ronde, namun hanya %(c_chairs)s yang memiliki skor di atas skor minimum." -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" msgstr[0] "%(c_chairs)s ketua panel" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." msgstr "Seluruh juri dengan nilai cukup tinggi untuk memberikan suara, tetapi tidak diaokasikan sebagai ketua, dialokasikan sebagai panelis oleh auto-allocator." -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" msgstr[0] "%(c_panellists)s panelis" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." msgstr "Juri dialokasikan sebagai trainee oleh auto-allocator jika nilainya kurang dari 'nilai minimal pemungutan suara' (saat ini nilainya %(min_voting)s) yang diatur pada konfigurasi Aturan Undian turnamen." -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" msgstr[0] "%(c_trainees)s trainee" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" msgstr "Alokasi-Otomatis Distribusi (%(min_voting_score)s+ untuk memberi suara)" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" msgstr "Ubah Nilai Basis" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." msgstr "Rentang nilai untuk juri adalah antara %(pref.adj_min_score)s dan %(pref.adj_max_score)s. Desimal diperbolehkan. Nilai ini dapat dikonfigurasi di Pengaturan umpan balik." -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." msgstr "Nilai minimum yang diperlukan untuk dialokasikan sebagai panelis atau ketua (jika menggunakan auto-allocator) adalah %(min_voting_score)s. Nilai ini dapat dikonfigurasikan di Pengaturan pengundian." -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" msgstr "Nilai basis" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" msgstr "Simpan Nilai Basis" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" msgstr "Siapakah Anda?" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" msgstr "klik nama Anda atau tim Anda pada daftar ini" -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" msgstr "Perbarui Nilai Juri" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." msgstr "Tidak ada satupun juri pada turnamen ini, maka Anda tidak dapat mempebarui nilai apapun. Anda mungkin ingin impor beberap juri terlebih dahulu." -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" msgstr "Tempelkan daftar nama juri dan nilai baru mereka, dalam format: juri,nilai. Sebagai contoh:" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." msgstr "Nama-nama juri harus sama persis dengan nama-nama mereka pada sistem tabulasi." -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" msgstr "Ada beberapa masalah terkait data pada formulir ini:" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" msgstr "Kirim" -#: adjfeedback/views.py:118 +#: adjfeedback/views.py msgid "Feedback Overview" msgstr "Gambaran Umpan Balik" -#: adjfeedback/views.py:142 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" msgstr "Temukan Umpan Balik pada Juri" -#: adjfeedback/views.py:153 adjfeedback/views.py:177 adjfeedback/views.py:192 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" msgstr[0] "%(count)d umpan balik" -#: adjfeedback/views.py:156 adjfeedback/views.py:182 adjfeedback/views.py:197 +#: adjfeedback/views.py msgid "Feedbacks" msgstr "Umpan Balik" -#: adjfeedback/views.py:163 +#: adjfeedback/views.py msgid "Find Feedback" msgstr "Temukan Umpan Balik" -#: adjfeedback/views.py:171 adjfeedback/views.py:710 +#: adjfeedback/views.py msgid "From Teams" msgstr "Dari Tim" -#: adjfeedback/views.py:186 adjfeedback/views.py:704 +#: adjfeedback/views.py msgid "From Adjudicators" msgstr "Dari Juri" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "Latest Feedback" msgstr "Umpan Balik Terbaru" -#: adjfeedback/views.py:272 +#: adjfeedback/views.py msgid "(30 most recent)" msgstr "(30 terbaru)" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "Only Comments" msgstr "Hanya Komentar" -#: adjfeedback/views.py:283 +#: adjfeedback/views.py msgid "(250 most recent)" msgstr "(250 terbaru)" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "Important Feedback" msgstr "Umpan Balik Penting" -#: adjfeedback/views.py:295 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" msgstr "(rating jauh lebih besar/kecil dari yang diharapkan)" -#: adjfeedback/views.py:362 +#: adjfeedback/views.py msgid "A Team" msgstr "Sebuah Tim" -#: adjfeedback/views.py:367 +#: adjfeedback/views.py msgid "Team" msgstr "Tim" -#: adjfeedback/views.py:374 adjfeedback/views.py:391 +#: adjfeedback/views.py msgid "Institution" msgstr "Institusi" -#: adjfeedback/views.py:377 +#: adjfeedback/views.py msgid "An Adjudicator" msgstr "Seorang Juri" -#: adjfeedback/views.py:384 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "Juri" -#: adjfeedback/views.py:511 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." msgstr "Umpan balik dari %(source)s pada %(target)s ditambahkan." -#: adjfeedback/views.py:541 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." msgstr "Terima kasih, %(source)s! Umpan balik Anda pada %(target)s telah dicatat." -#: adjfeedback/views.py:625 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" msgstr "Ups! Saya tidak mengenali juri tersebut: %(adjudicator)s" -#: adjfeedback/views.py:648 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." msgstr "Ups! Nilai tersebut bukan nilai basis yang valid." -#: adjfeedback/views.py:675 +#: adjfeedback/views.py msgid "Feedback Progress" msgstr "Progres Umpan Balik" -#: adjfeedback/views.py:696 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" msgstr[0] "%(nmissing)d tidak mengandung kiriman umpan balik (%(fulfilled).1f%% dikembalikan)" -#: adjfeedback/views.py:741 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." msgstr "Umpan balik untuk %(adjudicator)s dari %(source)s sekarang %(result)s." -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "confirmed" msgstr "terkonfirmasi" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "un-confirmed" msgstr "nir-terkonfirmasi" -#: adjfeedback/views.py:768 +#: adjfeedback/views.py msgid "un-ignored" msgstr "nir-terabaikan" -#: adjfeedback/views.py:804 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." diff --git a/tabbycat/availability/locale/id/LC_MESSAGES/django.po b/tabbycat/availability/locale/id/LC_MESSAGES/django.po index 61910ffd334..63da7a3ef4e 100644 --- a/tabbycat/availability/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-10-24 00:45\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -17,292 +17,284 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" msgstr "Ketersediaan" -#: availability/models.py:15 +#: availability/models.py msgid "content type" msgstr "tipe konten" -#: availability/models.py:16 +#: availability/models.py msgid "object id" msgstr "id objek" -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "ronde" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" msgstr "ketersediaan ronde" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" msgstr "ketersediaan ronde" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" msgstr "Tandai Seluruh Juri Breaking sebagai Tersedia" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" msgstr "Tandai Semua sebagai Tersedia" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" msgstr "Salin Ketersediaan dari %(prev_round)s" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" msgstr "Lihat Pengundian" -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" msgstr "%(previous_unconfirmed)s debat dari ronde %(round)s tidak memiliki balot yang lengkap — ini dapat berujung pada draw yang salah" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" msgstr "Bangkitkan Pengundian" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." msgstr "Pengundian tidak dapat dibangkitkan sampai beberapa tim sudah ditandai sebagai tersedia." -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." msgstr "Pengundian tidak dapat dibangkitkan sampai beberapa juri sudah ditandai sebagai tersedia." -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." msgstr "Pengundian tidak dapat dibangkitkan sampai beberapa ruangan ditandai sebagai tersedia." -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." msgstr "Tida ada cukup ruangan yang ditandari tersedia untuk jumlah debat — pengundia mungkin tidak terbangkitkan dengan benar." -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." msgstr "Tidak ada cukup ruangan yang ditandai tersedia untuk jumlah debat — pengundian mungkin tidak terbangkitkan dengan benar." -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." msgstr "Jumlah tim yang ditandai tersedia tidak genap — pengundian mungkin tidak terbangkitkan dengan benar." -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." msgstr "Jumlah tim yang ditandai tersedia bukan kelipatan 4 — pengundian mungkin tidak terbangkitkan dengan benar." -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgstr[0] "%(previous_unconfirmed)s debat dari ronde %(prev_round)s tidak memiliki balot yang lengkap. Ini dapat berujung pada draw yang salah. Masukkan hasil dari ronde %(prev_round)s. " -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " msgstr "Ini adalah halaman untuk %(round)s, tetapi ronde sebelumnya belum ditandai sebagai sudah selesai. Apakah Anda lupa untuk menandai %(prev_round)s sebagai sudah selesai? " -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." msgstr "Ini adalah ronde pertama, tetapi tipe pengundian adalah %(draw_type)s. Apakah maksud Anda adalah Acak? Anda dapat menyunting tipe pengundian ronde ini pada area Sunting Basisdata." -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." msgstr "Ini adalah ronde eliminasi, tetapi tidak memiliki kategori break. Ronde eliminasi harus terasosiasi dengan kategori break. Mohon sunting kategori break ronde ini pada area Sunting Basisdata." -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." msgstr "Ini adalah ronde eliminasi, tetapi tipe pengundiannya adalah %(draw_type)s. Tipe pengundian untuk seluruh ronde eliminasi haruslah \"Eliminasi\". Mohon ubah tipe pengundian ronde ini pada area Sunting Basisdata." -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" msgstr "Sepertinya tidak ada tim breaking di Break %(break_category)s. Sudahkah Anda membangkitkan break untuk Break %(break_category)s Break?" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." msgstr "Sepertinya tidak ada tim yang breaking di Break %(break_category)s. Anda tidak dapat membangkitkan pengundian ronde eliminasi hanya dengan satu tim — Anda mungkin ingin mereview break untuk untuk Break %(break_category)s." -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." msgstr "Presedensi klasemen tim kosong. Ini artinya tim tidak diranking berdasarkan metrik apapun, sehingga semua tim akan berada pada sebuah kelompok berisikan semuanya. Jika ini bukan yang Anda inginkan, atur presedensi klasemen tim pada seksi Klasemen pada konfigurasi turnamen ini sebelum membuat pengundian. Pada sebagian besar turnamen, metrik pertama seharusnya jumlah poin atau jumlah kemenangan." -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" msgstr "Pilih Semua" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" msgstr "Kosongkan Pilihan" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" msgstr "Cek-In" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" msgstr "Cek-In Seluruh Breaking" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" msgstr "Salin dari Sebelumnya" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" msgstr "Simpan yang Terpilih" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "Tim" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "Juri" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" msgstr "Ruangan" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" msgstr "Tandai tim sebagai tersedia" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" msgstr "Tidak perlu mengatur ketersediaan tim" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." msgstr "Tim yang ditandai sebagai tersedia pada ronde ini jumlahnya tidak genap." -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." msgstr "Jumlah tim yang ditandai sebagai tersedia pada ronde ini bukan kelipatan 4." -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" msgstr "Sunting ketersediaan tim" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "%(count)s juri tidak terasosiasi dengan turnamen. Ubah kolom 'Turnamen' milik mereka pada area Sunting Basisdata jika Anda menginginkan mereka ditandai sebagai tersedia." -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." msgstr[0] "%(count)s juri yang tidak tersedia pada ronde sebelumnya, tersedia pada ronde ini." -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" msgstr[0] "%(count)s juri ini, yang tidak tersedia pada ronde sebelumnya, tersedia pada ronde ini: %(adjs_list)s" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." msgstr[0] "%(count)s juri yang tersedia di ronde sebelumnya, tidak tersedia di ronde ini." -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" msgstr[0] "%(count)s juri berikut ini, yang tersedia di ronde sebelumnya, tidak tersedia di ronde ini: %(adjs_list)s" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" msgstr "Tandai juri sebagai tersedia" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." msgstr[0] "Harus ada paling tidak %(required_count)s juri yang ditandai sebagai tersedia, dengan jumlah debat yang ada." -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" msgstr "Sunting ketersediaan juri" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." msgstr[0] "%(count)s ruangan yang tidak tersedia pada ronde sebelumnya, tersedia pada ronde ini." -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" msgstr[0] "%(count)s ruangan ini, yang tidak tersedia pada ronde sebelumnya, tersedia pada ronde ini: %(rooms_list)s" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." msgstr[0] "%(count)s ruangan yang tersedia pada ronde sebelumnya, tidak tersedia pada ronde ini." -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" msgstr[0] "%(count)s ruangan ini, yang tersedia pada ronde sebelumnya, tidak tersedia pada ronde ini: %(rooms_list)s" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "%(count)s ruangan tidak terasosiasi ke turnamen. Lihat kolom 'Turnamen' pada area Sunting Basisdata jika Anda ingin menandai mereka mereka sebagai tersedia." -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" msgstr "Tandai ruangan atas tersedia" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." msgstr[0] "Perlu ada paling tidak %(required_count)s ruangan ditandai sebagai tersedia, dengan jumlah debat yang ada saat ini." -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" msgstr "Sunting ketersediaan ruangan" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" msgstr "tidak ada tim yang sedang berdebat" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" msgstr[0] "%(nteams)d tim breaking — tidak ada debat yang dapat berlangsung" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" @@ -311,73 +303,73 @@ msgstr[0] "%(ndebating)d tim breaking berdebat pada ronde ini" #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" msgstr[0] "; %(nbypassing)d tim melompati ronde ini" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" msgstr[0] "%(nadvancing)s tim yang lolos berdebat pada ronde ini" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" msgstr "Aktif Saat Ini" -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" msgstr "Aktif pada %(prev_round)s" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" msgstr "Sudah Cek-In" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" msgstr "Ketersediaan Tim" -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" msgstr "Ketersediaan Juri" -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" msgstr "Ketersediaan Ruangan" -#: availability/views.py:260 +#: availability/views.py msgid "Room" msgstr "Ruangan" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" msgstr "Nama yang Ditampilkan (untuk pengundian)" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" msgstr "Kategori" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" msgstr "Prioritas" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." msgstr "Gagal untuk memperbarui beberapa atau semua ketersediaan karena kesalahan integritas. Anda sebaiknya mencoba lagi aksi ini atau membuat pembaruan individu." -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." msgstr "Cek-in seluruh tim, juri, dan ruangan." -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." msgstr "Cek-in seluruh juri breaking." -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." msgstr "Cek-in seluruh tim, juri, dan ruangan dari ronde sebelumnya." diff --git a/tabbycat/breakqual/locale/id/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/id/LC_MESSAGES/django.po index eb6e15c950e..935d7599c79 100644 --- a/tabbycat/breakqual/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-11-06 05:05\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -17,508 +17,505 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" msgstr "Kualifikasi Break" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "Aturan kualifikasi break %(rule)s membutuhkan metrik berikut ada di dalam presedensi urutan tim supaya bisa bekerja: %(required)s; dan metrik-metrik ini tidak ada: %(missing)s." +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "turnamen" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "nama" -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" msgstr "Nama untuk ditampilkan, misal, \"ESL\"" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" msgstr "slug" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" msgstr "Slug untuk URL, misal, \"esl\"" -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" msgstr "nomor urut" -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" msgstr "Urutan kategori ditampilkan" -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" msgstr "ukuran break" -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" msgstr "Jumlah tim breaking di kategori ini" -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" msgstr "adalah umum" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" msgstr "True jika sebagian besar tim berhak untuk kategori ini, misal Terbuka, False jika tidak" -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" msgstr "prioritas" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" msgstr "Jika tim break di lebih dari satu kategori, prioritas yang lebih tinggi diutamakan; tim dapat break ke lebih dari satu kategori jika dan hanya jika mereka memiliki prioritas yang sama" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" msgstr "batas" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" msgstr "Maksimal sejumlah tim ini akan muncul pada tab publik untuk kategori ini, atau gunakan 0 untuk tidak dibatasi" -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" msgstr "Standar" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" msgstr "aturan" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" msgstr "Aturan untuk bagaiman break dihitung (sebagian besar turnamen seharusnya menggunakan \"Standard\")" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" msgstr "tim breaking" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" msgstr "kategori break" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" msgstr "kategori break" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "tim" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "peringkat" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" msgstr "peringkat break" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" msgstr "Dibatasi" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" msgstr "Tidak berhak" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" msgstr "Break berbeda" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" msgstr "Terdiskualifikasi" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" msgstr "Kalah pada undian koin" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" msgstr "Mengundurkan diri" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" msgstr "catatan" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" msgstr "Digunakan untuk menjelaskan mengapa tim yang seharusnya terkualifikasi tidak break" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" msgstr "tim breaking" -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" msgstr "Kategori Break" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." msgstr "Kategori break categories membolehkan ronde break spesifik kategori, contoh, untuk kategori pemula atau ESL. Pada halaman ini, Anda dapat mendefinisikan kategori break apa saja yang ada. Setelah Anda mendefinisikan kategori, ronde break akan dibangkitkan otomatis, dan Anda dapat mengisi kelayakan pada halaman Kelayakan page." -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." msgstr "Jika Anda ingin menghapus kategori break, gunakan area Sunting Basisdata." -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" msgstr "Simpan Kategori Break" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." msgstr "Juri dapat ditandai sebagai breaking pada bagian Gambaran Umpanbalik." -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" msgstr "Break" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " -msgstr "Turnamen ini tidak memiliki kategori break yang sudah diatur. Anda dapat membaca bagaimana membuat break pada dokumentasi kami. " +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +msgstr "" -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" msgstr "Kelayakan Tim" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" msgstr "Break %(category)s" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " msgstr " %(size)s Spot " -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" msgstr "Tim yang Berhak" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" msgstr "Breaking" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" msgstr "Tidak Termasuk" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" msgstr "Berhak" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" msgstr "Tandai tim sebagai berhak" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" msgstr "Bangkitkan break ini" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" msgstr "Lihat break ini" -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" msgstr "terlihat secara publik" -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" msgstr "tidak terlihat secara publik" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" msgstr "Hapus dan Bangkitkan Ulang Seluruh Break" -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" msgstr "Bangkitkan Break untuk Semua Kategori" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." msgstr "Ada 0 tim ditandai sebagai berhak untuk kategori ini — Anda perlu menambahkan beberapa tim yang berhak untuk break ini supaya dapat dibangkitkan dengan benar." -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." msgstr "Break ini menggunakan aturan %(category)s — jika Anda bermaksud menggunakan aturan lain, Anda harus menyunting aturan untuk kategori break ini di area Sunting Basisdata, kemudian hapus dan bangkitkan kembali semua break. Mohon cek dua kali hal ini sebelum mengumumkan break atau merilisnya ke publik. Kode yang membangkitkan break tidak diuji secara menyeluruh untuk kasus-kasus yang tidak umum." -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." msgstr "Untuk menyunting break gunakan catatan di kolom kanan. Tim yang memiliki catatan tidak diikutikan dari break ini (pembangkit break terkadang menambahkan catatan sendiri). Kemudian, klik tombol Simpan Catatan dan Perbarui yang sesuai di bawah. Jika Anda merumitkan aturan break (contohnya, jika beberapa tim diperbolehkan untuk memilih kategori yang mereka sukai) maka Anda mungkin harus memperbarui catatan beberapa kali untuk mendapatkan break yang benar. Sebagai langkah terakhir, Anda dapat menyunting daftar tim yang breaking di area Sunting Basisdata." -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." msgstr "Konfigurasi tim breaking publik dalam keadaan menyala. Sesaat setelah Anda klik tombolnya, daftar tim breaking akan terlihat di situs publik, sebelum Anda memiliki kesempatan untuk memeriksanya kembali! Sangat disarankan Anda mematikan opsi ini pada halaman konfigurasi turnamen sebelum membangkitkan break tim." -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." msgstr "Break belum dibangkitkan. Apakah Anda ingin membangkitkan break untuk semua kategori? Aman untuk membangkitkan break sebelum ronde pendahuluan selesai, seandainya Anda penasaran — Anda dapat membangkitkanya kembali nanti." -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." msgstr "Perhatian! Opsi \"tim breaking publik\" dalam keadaan menyala, sehingga break nya terlihat secra publik. Jika Anda memperbarui break, perubahannya akan langsung terlihat, tanpa ada kesempatan bagi anda untuk mereviewnya." -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" msgstr "Simpan Catatan dan Perbarui Semua Break" -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" msgstr "Simpan Catatan dan Perbarui Break %(category)s" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" msgstr "Ada %(count)s tim ditandai sebagai berhak untuk kategori ini. Apakah Anda ingin menambakan tim lain yang berhak?" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" msgstr "Tinjauan" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" msgstr "Break Juri" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." msgstr "Sepertinya tidak ada kategori break yang sudah didefinisikan. Jika Anda ingin membuat kategori break baru Anda perlu terlebih dahulu menambahkannya pada area Sunting Basisdata, kemudian kembali ke halaman ini untuk menetapkan kelayakan tim." -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" msgstr "Break" -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "Juri" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" msgstr "Grand Final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" msgstr "GF" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "Semifinal" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "SF" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "Quarterfinal" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "QF" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "Octofinal" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "OF" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" msgstr "Dobel-Oktofinal" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" msgstr "DOF" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" msgstr "Tripel-Oktofinal" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" msgstr "TOF" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" msgstr "%s Final" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" msgstr "%sF" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" msgstr "%s Semifinal" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" msgstr "%sSF" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" msgstr "%s Quarterfinal" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" msgstr "%sQF" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" msgstr "%s Octofinal" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" msgstr "%sOF" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" msgstr "%s Dobel-Oktofinal" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" msgstr "%sDOF" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" msgstr "%s Tripel-Oktofinal" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" msgstr "%sTOF" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" msgstr "Ronde break %s tidak diketahui" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" msgstr "RB%sTD" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" msgstr "Ronde break tidak diketahui" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" msgstr "RBTD" -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" msgstr "Ada kesalahan saat membangkitkan break untuk kategori %(category)s: %(message)s" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" msgstr "Berhak untuk" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" msgstr "Sunting Catatan" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." msgstr "Perubahan pada catatan tim breaking disimpan dan break tim diperbarui untuk kategori break berikut: %(categories)s." -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." msgstr "Perubahan pada catatan tim breaking tersompan dan tim yang break terbarui untuk kategori break %(category)s." -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." msgstr "Perubahan pada catatan tim breaking tersimpan." -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." msgstr "Break tim terbangkitkan untuk kategori break berikut: %(categories)s." -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" msgstr "Juri Breaking" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" msgstr "Kelayakan Tim" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "%s Pembicara" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" diff --git a/tabbycat/draw/locale/id/LC_MESSAGES/django.po b/tabbycat/draw/locale/id/LC_MESSAGES/django.po index 94b15aaa41b..efeac1d74aa 100644 --- a/tabbycat/draw/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-12-08 00:20\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -17,1111 +17,1083 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "%(count)d debate diubah statusnya menjadi %(status)s." - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "Ubah status hasil ke %(status)s" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." msgstr[0] "%(count)d debat ditandai sebagai sisinya terkonfirmasi." -#: draw/admin.py:93 +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." msgstr[0] "%(count)d debat ditandai sebagai sisinya tidak terkonfirmasi." -#: draw/apps.py:7 draw/views.py:452 draw/views.py:455 +#: draw/apps.py draw/views.py msgid "Draw" msgstr "Undian" -#: draw/generator/__init__.py:14 +#: draw/generator/__init__.py msgid "Too many swaps" msgstr "Terlalu banyak pertukaran" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" msgstr "Satu-atas-satu-bawah (histori)" -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" msgstr "Satu-atas-satu-bawah (institusi)" -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" msgstr "Satu-atas-satu-bawah (untuk diakomodasi)" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "Bubble up (history)" msgstr "Gelembung atas (histori)" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble down (history)" msgstr "Gelembung bawah (histori)" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble up (institution)" msgstr "Gelembung atas (institusi)" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble down (institution)" msgstr "Gelembung bawah (institusi)" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" msgstr "Gelembung atas (untuk diakomodasi)" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" msgstr "Gelembung bawah (untuk diakomodasi)" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Can't bubble up/down" msgstr "Tidak bisa menggelembungkan ke atas/bawah" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Pull-up team" msgstr "Tim pull-up" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." msgstr "%d debat pada ronde sebelumnya tidak memiliki hasil." -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." msgstr "%d debat pada ronde sebelumnya tidak memiliki tepat 2 tim yang lolos." -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." msgstr "Ranking ruangan dari ronde eliminasi parsial mengindikasikan jumlah tim ganjil (%(nbypassing)d) melompatinya." -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." -msgstr "Ranking ruangan dari ronde eliminasi parsial mengindikasikan %(nbypassing)d tim melompatinya, tetapi %(advancing)d tim lolos darinya." +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." +msgstr "" -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." msgstr "Jumlah debat (%d) pada ronde sebelumnya tidak berjumlah dua pangkat n." -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." msgstr "Urutan Rényi tidak bisa negatif, dan saat ini diset ke %(alpha)f." -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." msgstr "Jumlah tim yang dipresentasikan untuk pengundian bukan kelipatan dari %(num)d." -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." msgstr "Tidak ada tim untuk pengundian." -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." msgstr "Hanya ada %d tim breaking pada kategori ini; harus ada paling tidak dua untuk membangkitkan undian ronde eliminasi." -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." msgstr "Jumlah tim (%d) pada ronde ini bukan kelipatan dua." -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." msgstr "%(noninteger)d dari %(total)d tim memiliki metrik pertama berupa bukan bilangan bulat pada urutan tim. Bracket intermediate membutuhkan urutan tim pertama berupa bilangan bulat (biasanya poin atau jumlah kemenangan)." -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." msgstr "Ada %(aff_count)d tim afirmatif tetapi %(neg_count)d tim negatif." -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." msgstr "Satu atau lebih tim memiliki sisi yang dialokasikan bukan berupa afirmatif atau negatif." -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." msgstr "Tipe pengundian %(type)s tidak dapat digunakan pada format dua-tim." -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." msgstr "Tipe pengundian %(type)s tidak dapat digunakan pada British Parliamentary." -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" msgstr "Opsi \"tim dalam debat\" tidak dikenali: %(option)s" -#: draw/manager.py:276 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." msgstr "Ukuran break (%(size)d) untuk kategori break ini tidak valid. Itu harus enam kali atau empat kali dari dua pangkat n." -#: draw/models.py:29 draw/models.py:35 +#: draw/models.py msgid "none" msgstr "tidak ada" -#: draw/models.py:30 +#: draw/models.py msgid "postponed" msgstr "ditunda" -#: draw/models.py:31 draw/models.py:36 +#: draw/models.py msgid "draft" msgstr "draf" -#: draw/models.py:32 draw/models.py:37 +#: draw/models.py msgid "confirmed" msgstr "terkonfirmasi" -#: draw/models.py:43 draw/models.py:375 +#: draw/models.py msgid "round" msgstr "ronde" -#: draw/models.py:45 +#: draw/models.py msgid "room" msgstr "ruangan" -#: draw/models.py:48 +#: draw/models.py msgid "bracket" msgstr "bracket" -#: draw/models.py:50 +#: draw/models.py msgid "room rank" msgstr "ranking ruangan" -#: draw/models.py:56 +#: draw/models.py msgid "importance" msgstr "tingkat kepentingan" -#: draw/models.py:58 +#: draw/models.py msgid "result status" msgstr "status hasil" -#: draw/models.py:60 +#: draw/models.py msgid "sides confirmed" msgstr "sisi terkonfirmasi" -#: draw/models.py:61 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." msgstr "Jika tidak dicek, sisi yang dilekatkan ke tim pada debat ini hanya berupa pengisi ruang." -#: draw/models.py:64 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "debat" -#: draw/models.py:65 +#: draw/models.py msgid "debates" msgstr "debat" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:84 draw/models.py:109 +#: draw/models.py msgid " (sides not confirmed)" msgstr " (sisi tidak terkonfirmasi)" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:96 draw/models.py:113 +#: draw/models.py msgid " vs " msgstr " vs " -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" msgstr "afirmatif" -#: draw/models.py:263 +#: draw/models.py msgid "negative" msgstr "negatif" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" msgstr "pemerintah pembuka" -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" msgstr "oposisi pembuka" -#: draw/models.py:266 +#: draw/models.py msgid "closing government" msgstr "pemerintah penutup" -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" msgstr "oposisi penutup" -#: draw/models.py:274 draw/models.py:377 +#: draw/models.py msgid "team" msgstr "tim" -#: draw/models.py:276 draw/models.py:379 +#: draw/models.py msgid "side" msgstr "sisi" -#: draw/models.py:281 +#: draw/models.py msgid "debate team" msgstr "tim debat" -#: draw/models.py:282 +#: draw/models.py msgid "debate teams" msgstr "tim debat" -#: draw/models.py:303 +#: draw/models.py #, python-format msgid "placed %(place)s" msgstr "pada posisi %(place)s" -#: draw/models.py:305 draw/models.py:312 +#: draw/models.py msgid "result unknown" msgstr "hasil tidak diketahui" -#: draw/models.py:308 +#: draw/models.py msgid "won" msgstr "menang" -#: draw/models.py:310 +#: draw/models.py msgid "lost" msgstr "kalah" -#: draw/models.py:383 +#: draw/models.py msgid "team side allocation" msgstr "alokasi sisi tim" -#: draw/models.py:384 +#: draw/models.py msgid "team side allocations" msgstr "alokasi sisi tim" #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" msgstr "%(side)s: %(metric)s" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" msgstr "Tim %(num)d" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" msgstr "Ranking ruangan pada debat ini" -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" msgstr "Bracket debat ini" -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" msgstr "histori sisi
    \n" "(jumlah berapa kali tim berada pada setiap sisi sebelum ronde ini)" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" msgstr "HS" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" msgstr "Berubah dari seimbang menjadi tidak seimbang" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" msgstr "Berubah dari tidak seimbang menjadi seimbang" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" msgstr "Perbaikan optimal memungkinkan, masih tidak seimbang" -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" msgstr "Sebelumnya tidak seimbang dan masih tidak seimbang" -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" msgstr "Tidak ada metrik pada presedensi urutan tim" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" msgstr "Sisi" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" msgstr "Memposisikan ronde ini" -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" msgstr "Sebelum" -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" msgstr "Histori sisi sebelum ronde ini" -#: draw/tables.py:292 +#: draw/tables.py msgid "After" msgstr "Setelah" -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" msgstr "Histori sisi setelah ronde ini" -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" msgstr "Biaya" -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" msgstr "Biaya Posisi" -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" msgstr "Status" -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" msgstr "Tim dengan poin sebanyak ini diperbolehkan di dalam debat ini
    \n" "(bracket ditebalkan)" -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "%(team)s: %(metric)s" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" msgstr "histori sisi sebelum ronde ini" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" msgstr "Sisi" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" msgstr "biaya posisi" -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" msgstr "BERHENTI!!! Baca ini dahulu! Menghapus tim debat dari basisdata dapat membuat Tabbycat crash!" -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." msgstr "Tabbycat mewajibkan seluruh debat memilik tepat satu tim debat untuk setiap sisi, dan tidak ada tim debat lain, pada setiap saat. Jika Anda menghapus debat tim apapun, maka Anda harus menggantinya masing-masing dengan tim debat baru pada debat yang sama, atau menghapus objek debat tersebut. Jika Anda tidak melakukannya dengan benar, banyak halaman akan crash." -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." msgstr "Ini adalah sumber masalah yang umum. Jika terjadi pada Anda, cek debat-debatnya (seksi Pengundian di dalam area Sunting Basisdata ini) dan pastikan semuanya memiliki tepat satu tim afirmatif dan satu tim negatif." -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" msgstr "PERHATIAN!!! Jika Anda menyunting tim debat, baca ini dahulu!" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." msgstr "Tabbycat mewajibkan seluruh debat memilik tepat satu tim debat untuk setiap sisi, dan tidak ada tim debat lain, pada setiap debat. Jika Anda menyunting tim debat pada basisdata, Anda harus memastikan bahwa ini tetap berlaku. Jika Anda tidak melakukannya dengan benar, banyak halaman akan crash." -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." msgstr[0] "%(ndebates)s debat tidak memiliki ketua." -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" msgstr[0] "%(nadjs)s juri berikut ini menjurikan lebih dari satu debat: %(adjudicators)s" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." msgstr[0] "%(ndebates)s debat memiliki panelis dengan jumlah juri genap." -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." msgstr[0] "%(ndebates)s debat memiliki konfilik juri." -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" msgstr[0] "%(nadjs)s berikut ini tidak tersedia di ronde ini, tetapi ditugaskan pada debat: %(adjudicators)s" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." msgstr[0] "%(ndebates)s juri tersedia tetapi tidak ditugaskan pada sebuah debat." -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" msgstr[0] "%(nteams)s tim berikut ini bertanding pada lebih dari satu debat: %(teams)s" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." msgstr[0] "%(ndebates)s debat tidak memiliki ruangan." -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" msgstr[0] "%(ndebates)s ruangan ini memiliki lebih dari satu debat di dalamnya: %(rooms)s" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." msgstr[0] "%(ndebates)s debat melanggar batasan ruangan." -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" msgstr "Ketersediaan" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" msgstr "Ubah Sisi/Pasangan" -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" msgstr "Lakukan Kembali Pengundian" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" msgstr "Detail Pengundian" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" msgstr "Posisikan Keseimbangan" -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" msgstr "Tampilkan Pengundian" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" msgstr "Konfirmasi pembangkitan ulang undian" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" msgstr "Kembali ke Pengundian" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" msgstr "Konfirmasi Penghapusan Pengundian untuk %(round)s" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" msgstr "Apakah anda benar ingin membuat ulang draw untuk %(round)s? Ini akan menghapus seluruh debat pada ronde tersebut — termasuk balot dan alokasi juri — dan tidak dapat dikembalikan. Anda mungkin tidak ingin melakukan ini apabila sudah ada hasil yang masuk!" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" msgstr "Ya, saya ingin menghapus pengundian saat ini untuk %(round)s" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" msgstr "Lihat Pengundian" -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" msgstr "Debat dimulai pada %(start_time)s" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" msgstr "Tambahkan Waktu Mulai" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" msgstr "Masukkan Hasil" -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" msgstr "Detail Mosi" -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." msgstr[0] "%(motions_count)s mosi sudah dimasukkan." -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "Sunting mosi" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" msgstr "Konfigurasi/format anda mewajibkan mosi untuk ditulis dalam balot. Pastikan mosi telah ditambahkan sebelum hasil masuk!" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" -msgstr "Masukkan mosi" - -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." -msgstr "Mosi telah dimasukkan." - -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "Sunting mosinya" - -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." -msgstr "Mosi harus ditambahkan apabila anda ingin menampilkannya di auditorium atau dicetak pada balot (menggunakan tautan di bawah) atau ditampilkan (nanti) pada laman publik mosi." +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." +msgstr "" -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "Masukkan mosi" +msgid_plural "Enter motions" +msgstr[0] "" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" msgstr "Rilis Pengundian" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." msgstr "Anda belum membangkitkan pengundian untuk ronde ini. Tidak ada yang bisa dirilis." -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." msgstr "Pengundian untuk ronde ini masih dalam keadaan draf. Konfirmasi Pengundian terlebih dahulu sebelum merilisnya." -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" msgstr "Tarik kembali rilis pengundian ke publik" -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." msgstr "Pengundian telah dirilis secara publik." -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" msgstr "Lihat halaman pengundian publik" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "Anda telah merilis pengundian, sehingga kertas suara dan/atau umpan balik dapat dikirimkan dari formulir publik (jika dinyalakan). Meskipun demikian, pengundiannya sendiri tidak akan terlihat ke publik kecuali pengaturan \"tampilan publik dari pengundian\" dinyalakan pada konfigurasi turnamen ini." -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "Anda telah merilis pengundian, tetapi tidak akan muncul ke publik kecuali pengaturan \"tampilkan pengundian ke publik\" dinyalakan di konfigurasi turnamen ini." -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" msgstr "Rilis pengundian ke publik" -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "Turnamen Anda memperbolehkan kertas suara dan umpan balik untuk dikumpulkan secara daring oleh juri. Pengundian harus dirilis sebelum mereka bisa melakukannya." -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "Turnamen Anda memperbolehkan kertas suara dikumpulkan secara daring oleh juri. Pengundian harus dirilis sebelum mereka dapat melakukannya." -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." msgstr "Turnamen Anda memperbolehkan umpan balik untuk dikumpulkan secara daring oleh partisipan. Pengundian harus dirilis sebelum mereka dapat melakukannya." -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." msgstr "Turnamen Anda dikonfigurasi untuk menampilkan pengundian ke publik. Merilis pengundian akan memperbolehkannya untuk menampilkannya ke halaman publik." -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." msgstr "Konfigurasi Anda tidak memiliki halaman pengundian publik atau pengumpulan umpan balik/kertas suara. Tidak ada alasan untuk merilis pengundian." -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "Rilis Mosi" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "Rilis mosi ke publik" +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "Tarik kembali mosi" +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" -#: draw/templates/draw_display_admin.html:200 +#: draw/templates/draw_display_admin.html msgid "Release Motion" -msgstr "Rilis Mosi" +msgid_plural "Release Motions" +msgstr[0] "" -#: draw/templates/draw_display_admin.html:201 -msgid "Release motion to public" -msgstr "Rilis mosi ke publik" - -#: draw/templates/draw_display_admin.html:202 -msgid "Unrelease motion to public" -msgstr "Tarik kembali mosi" +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." msgstr "Turnamen Anda dikonfigurasi untuk membutuhkan mosi dipilih pada kertas suara dan untuk memperbolehkan kertas suara dikumpulkan oleh juri. Pastikan Anda merilis mosi sebelum debat berakhir. Jika tidak kertas suara tidak akan bisa dikumpulkan." -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." msgstr "Turnamen Anda dikonfigurasi untuk memperbolehkan mosi diveto dan memperbolehkan kertas suara dikumpulkan oleh juri. Pastikan Anda merilis mosi sebelum debat berakhir. Jika tidak kertas suara tidak akan bisa menominasi veto." -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "Turnamen Anda dikonfigurasi untuk menunjukkan mosi untuk setiap ronde pada situs publik. Anda perlu terlebih dahulu merilis mosinya untuk ditunjukkan di sini." +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "Turnamen Anda tidak dikonfigurasi untuk menampilkan mosi untuk setiap ronde pada situs publik. Tidak ada kebutuhan untuk merilis mosi." +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "Mosi sudah dirilis secara publik." - -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "Mosi sudah dirilis secara publik." +msgid_plural "Motions have been released publicly." +msgstr[0] "" -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" msgstr "Lihat halaman mosi publik" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." msgstr "Anda telah merilis mosi, tetapi mereka tidak akan muncul ke publik kecuali pengaturan \"tampilan publik mosi\" dinyalakan di konfigurasi turnamen ini." -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" msgstr "(untuk ruangan briefing)" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" msgstr "Tampilkan Undian diurutkan berdasarkan Ruangan" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" msgstr "Tampilkan Pengundian diurutkan berdasarkan Tim" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" msgstr "Tampilkan Pengundian untuk Seluruh Ronde Ini diurutkan berdasarkan Ruangan" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" msgstr "Tampilkan Pengundian untuk Seluruh Ronde Ini diurutkan berdasarkan Tim" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" msgstr "Tampilkan Pengundian untuk %(round)s diurutkan berdasarkan Ruangan" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" msgstr "Tampilkan Pengundian untuk %(round)s diurutkan berdasarkan Tim" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" msgstr "Tampilkan Mosi" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" msgstr "Email Mosi" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" msgstr "Email Mosi" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" msgstr "Dimulai pada" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" msgstr "(untuk dicetak)" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" msgstr "Lihat Form Kerta Suara" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" msgstr "Lihat Form Umpanbalik" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" msgstr "Kecepatan Scroll" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" msgstr "Cepat" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" msgstr "Sedang" -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" msgstr "Lambat" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" msgstr "Sangat Lambat" -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" msgstr "Sembunyikan Juri" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" msgstr "Tampilkan Juri" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" msgstr "Ukuran Teks" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" msgstr "Sangat Kecil" -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" msgstr "Kecil" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" msgstr "Besar" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" msgstr "Sangat Besar" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" msgstr "Hentikan Scroll" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." msgstr "Pengundian untuk %(round)s belum dirilis." -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." msgstr "Pengundian untuk ronde berikutnya belum dirilis." -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" msgstr "Alokasi Juri" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." msgstr "Ada lebih sedikit juri dicek dibanding jumlah ruangan." -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" msgstr "Alokasikan juri" -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" msgstr "Sunting alokasi juri" -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" msgstr "Alokasi Ruangan" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" msgstr "Alokasikan ruangan" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" msgstr "Sunting alokasi ruangan" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" msgstr "Rancangan Panel" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." msgstr[0] "Ada %(npanels)s panel prabentukan tersedia untuk ronde ini." -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" msgstr "Tidak ada panel prabentukan tersedia untuk ronde ini" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" msgstr "Sunting panel prabentukan untuk %(round)s" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" msgstr "Alokasi Sisi" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." msgstr[0] "%(ndebates)s debat tidak memiliki sisi terkonfirmasi." -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" msgstr "Hapus Pengundian" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" msgstr "Konfirmasi Pengundian" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." msgstr "Presedensi urutan tim kosong. Ini berarti bahwa tim tidak di-ranking berdasarkan metrik apapun, maka semua tim berada pada satu bracket yang berisi semuanya. Jika ini tidak seperti yang Anda inginkan, set presedensi urutan tim pada Seksi Urutan pada konfigurasi turnamen ini, lalu hapus dan buat ulang pengundiannya. Pada sebagian besar turnamen, metrik pertama seharusnya jumlah poin atau kemenangan." -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." msgstr "Bracket dibangun menggunakan metrik pertama pada presedensi, yang saat ini diset ke %(metric)s, alih-alih poin tim, yang merupakan konvensi umum. Jika ini bukan yang Anda inginkan, Anda dapat mengubah presedensi urutan tim pada halaman konfigurasi urutan." -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." msgstr "Tipe pengundian untuk ronde ini diset ke manual, sehingga Tabbycat baru saja membuat pengundian kosong. Pindahlah ke Sunting Sisi/Matchup untuk mengisinya." -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." msgstr "Rentang nilai adjudicator adalah 0, maka nilai adjudicator akan diabaikan saat mengalokasikan. Anda dapat mengubah rentang nilai adjudicator pada halaman konfigurasi umpanbalik." -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." msgstr "Tabbycat menentukan sisi pada ronde eliminasi secara acak. Namun begitu, karena di ronde eliminasi banyak turnamen mengundi banyak sisi di depan audiens, sisi-sisi ditandai sebagai \"tidak terkonfirmasi\", sehingga tidak terlihat seperti sisinya sudah ditentukan sebelumnya. Setelah Anda mengonfirmasi pengundiannya, Anda perlu mengonfirmasi sisi-sisi pada halaman \"Sunting Sisi/Matchup\", walaupun Anda menginginkan untuk menerima penentuan acak dari Tabbycat." -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " msgstr "Sel yang diwarnai berhubungan dengan perubahan pada keseimbangan posisi, seperti berikut:
    • Sel berwarna merah mengindikasikan bahwa tim tidak dapat dialokasikan ke sebuah posisi yang menjaga keseimbangan.
    • Sel kuning mengindikasikan bahwa tim tersebut sebelumnya tidak seimbang, dan diberikan posisi terbaik yang memungkinkan di pengundian ini, tetapi tetap saja tidak seimbang.
    • Sel berwarna hijau mengindikasikan bahwa ketidakseimbangan tim sebelumnya sudah diperbaiki pada pengundian ini.
    " -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." msgstr "Pengundian untuk %(round)s belum dibangkitkan. Untuk membangkitkan, pergi ke seksi Ketersediaan." -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." msgstr "Sepertinya sisi belum dikonfirmasi pada beberapa debat dalam ronde ini. Laporan keseimbangan posisi ini dibangkitkan menggunakan \"sisi tidak terkonfirmasi\" di dalam basisdata, dan konsekuensinya, mungkin tidak masuk akal. Akan lebih baik untuk mengonfirmasi sisi-sisi di setiap debat sebelum melihat laporan ini." -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." -msgstr "Fungsi biaya posisi Anda saat ini adalah %(cost_func)s, dipangkatkan %(exponent)s. Baca lebih lanjut tentang bagaimana fungsi biaya posisi bekerja di dalam dokumentasi kami." +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgstr "" -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." msgstr "Laporan keseimbangan posisi tidak dihitung untuk ronde eliminasi." -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." msgstr "Laporan keseimbangan posisi hanya tersedia untuk turnamen Parlemen Inggris." -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." msgstr "Laporan keseimbangan posisi tidak dihitung untuk ronde pertama dari sebuah turnamen." -#: draw/views.py:68 draw/views.py:483 +#: draw/views.py msgid "No debates in this round" msgstr "Tidak ada debat dalam ronde ini" -#: draw/views.py:76 +#: draw/views.py #, python-format msgid "Draw for %(round)s" msgstr "Pengundian untuk %(round)s" -#: draw/views.py:78 +#: draw/views.py msgid "Draws for Current Rounds" msgstr "Pengundian untuk Ronde Ini" -#: draw/views.py:82 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" msgstr "debat dimulai pada %(time)s (zona waktu %(time_zone)s)" -#: draw/views.py:86 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" msgstr "waktu mulai pada zona waktu: %(time_zone)s" -#: draw/views.py:124 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" msgstr[0] "debat dimulai pada %(time)s" -#: draw/views.py:171 +#: draw/views.py msgid "The draw for this round hasn't been released." msgstr "Pengundian untuk ronde ini belum dirilis." -#: draw/views.py:224 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" msgstr "Seluruh Debat pada Semua Ronde dari %(tournament)s" -#: draw/views.py:382 +#: draw/views.py msgid "Adjudicator Assignments" msgstr "Penugasan Juri" -#: draw/views.py:404 +#: draw/views.py msgid "Position" msgstr "Posisi" -#: draw/views.py:424 +#: draw/views.py msgid "Team Pairings" msgstr "Pemasangan Tim" -#: draw/views.py:447 +#: draw/views.py msgid "No Draw" msgstr "Tidak ada Pengundian" -#: draw/views.py:449 +#: draw/views.py msgid "Draft Draw" msgstr "Pengundian Draf" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:541 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" msgstr "%(side)s: Ranking break" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:546 +#: draw/views.py msgid "BR" msgstr "RB" -#: draw/views.py:571 +#: draw/views.py msgid "Draw with Details" msgstr "Pengundian dengan Detail" -#: draw/views.py:579 +#: draw/views.py msgid "Position Balance Report" msgstr "Laporan Keseimbangan Posisi" -#: draw/views.py:590 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" msgstr "Entropi Rényi dari urutan %(order)s" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:593 +#: draw/views.py msgid " (i.e., Shannon entropy)" msgstr " (yaitu, entropi Shannon)" -#: draw/views.py:623 +#: draw/views.py msgid "Teams with position imbalances" msgstr "Tim dengan ketidakseimbangan posisi" -#: draw/views.py:624 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" msgstr "Tidak ada tim dengan ketidakseimbangan posisi! Mantul!" -#: draw/views.py:627 +#: draw/views.py msgid "Annotated draw" msgstr "Pengundian dengan catatan" -#: draw/views.py:658 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" msgstr "Tidak dapat membuat pengundian untuk %(round)s, karena sudah ada pengundian sebelumnya!" -#: draw/views.py:666 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " msgstr "

    Pengundian tidak dapat dibuat, karena alasan berikut: %(message)s

    \n" "

    Mohon perbaiki masalah ini sebelum mencoba membuat pengundiannya.

    " -#: draw/views.py:674 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " msgstr "

    Pengundian tidak dapat dibuat, karena kesalahan ini terjadi: %(message)s

    \n" "

    Jika masalahnya terus berlanjut dan Anda tidak yakin bagaimana memecahkannya, mohon kontak pengembang.

    " -#: draw/views.py:683 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " msgstr "

    Klasemen tim tidak dapat dibangkitkan, karena kesalahan berikut terjadi: %(message)s

    \n" "

    Karena membangkitkan pengundian menggunakan klasemen tim ini, pengundian tidak dapat dibangkitkan juga.

    " -#: draw/views.py:699 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "Ruangan tidak dialokasikan otomatis karena ada satu atau lebih batasan ruangan juri. Anda harus menjalankan alokasi ruangan setelah mengalokasikan juri." -#: draw/views.py:726 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "Pengundian dihapus. Anda sekarang dapat membuatnya kembali sebagai normal." -#: draw/views.py:746 +#: draw/views.py msgid "Released the draw." msgstr "Pengundian dirilis." -#: draw/views.py:761 +#: draw/views.py msgid "Unreleased the draw." msgstr "Pengundian ditarik kembali." -#: draw/views.py:774 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." msgstr "Maaf, \"%(input)s\" bukan waktu yang valid. Waktu harus dalam format 24-jam, dengan titik dua, contohnya: \"13:57\"." -#: draw/views.py:793 +#: draw/views.py msgid "Side Pre-Allocations" msgstr "Pre-Alokasi Sisi" -#: draw/views.py:826 +#: draw/views.py msgid "Edit Matchups" msgstr "Sunting Matchup" diff --git a/tabbycat/importer/locale/id/LC_MESSAGES/django.po b/tabbycat/importer/locale/id/LC_MESSAGES/django.po index bbb8aa6373f..7006cd8bd38 100644 --- a/tabbycat/importer/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-05-23 06:54\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -17,408 +17,397 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" msgstr "baris %(lineno)d: %(message)s" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" msgstr "Baris ini (untuk %(institution)s) tidak memiliki kode" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" msgstr "Baris ini (untuk %(institution)s) memiliki terlalu banyak kolom" -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." msgstr "Tidak ada institusi untuk diimpor." -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "Maaf, Anda hanya dapat mengimpor maksimal %(max_allowed)d institusi dalam satu waktu. (Anda saat ini memiliki %(given)d.) Cobalah membagi impor Anda menjadi pecahan kecil." -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." msgstr "Tidak ada ruangan untuk diimpor." -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "Maaf, Anda hanya dapat mengimpor maksimal %(max_allowed)d ruangan dalam satu waktu. (Anda sat ini memiliki %(given)d.) Cobalah untuk membagi impor Anda menjadi pecahan yang lebih kecil." -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" msgstr "Nama-nama pembicara" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" msgstr "Alamat e-mail pembicara" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" msgstr "Opsional, berguna untuk diikutsertakan jika mendistribusikan URL privat, daftarkan dengan urutan yang sama dengan nama-nama pembicara" -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" msgstr "Nama (tidak termasuk nama institusi)" -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" msgstr "Awali nama tim dengan nama institusi?" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" msgstr "Jangan ikutsertakan nama institusi (sebagai gantinya, cek kolom \"Awali nama tim dengan nama institusi?\")" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" msgstr "(Tidak digunakan untuk tim yang tidak terafiliasi)" -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" msgstr "Satu nama pembicara per baris" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" msgstr "Dapat dipisahkan dengan baris baru, tab, atau koma" -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "Pembicara %d" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" msgstr "pembicara%d@contoh.edu" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." msgstr "Paling tidak harus ada satu pembicara." -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." msgstr "%(email)s bukan alamat email yang valid." -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." msgstr "Ada lebih banyak alamat email daripada pembicara." -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." msgstr "Setiap tim pada satu turnamen dari institusi harus memiliki nama yang berbeda. Mohon perbaiki data duplikat." -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" msgstr "Rating" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." msgstr "Nilai ini harus berada di antara %(min)d dan %(max)d." -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" msgstr "Tidak terafiliasi (tanpa institusi)" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "Maaf, Anda hanya dapat mengimpor paling banyak %(max_allowed)d tim pada satu waktu. (Angka-angka tersebut saat ini ditambahkan ke %(given)d.) Coba pecah impor Anda ke bongkahan kecil." -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "Maaf, Anda hanya dapat mengimpor paling banyak %(max_allowed)d juri pada satu waktu. (Angka-angka tersebut saat ini ditambahkan ke %(given)d.) Coba pecah impor Anda ke bongkahan kecil." -#: importer/forms.py:396 +#: importer/forms.py msgid "XML" msgstr "" -#: importer/forms.py:397 +#: importer/forms.py msgid "The Debate XML archive to parse" msgstr "Arsip XML Debat untuk diurai" -#: importer/templates/archive_export_index.html:4 -#: importer/templates/archive_export_index.html:5 +#: importer/templates/archive_export_index.html msgid "Export Tournament Archive" msgstr "Ekspor Arsip Turnamen" -#: importer/templates/archive_export_index.html:9 +#: importer/templates/archive_export_index.html msgid "Tournaments can be exported in an XML format for use outside Tabbycat." msgstr "Turnamen dapat diekspor dalam format XML untuk digunakan di luar Tabbycat." -#: importer/templates/archive_export_index.html:17 +#: importer/templates/archive_export_index.html msgid "Export all data" msgstr "Ekspor semua data" -#: importer/templates/archive_importer.html:6 -#: importer/templates/archive_importer.html:18 +#: importer/templates/archive_importer.html msgctxt "page title" msgid "Import Tournament Archive" msgstr "Impor Arsip Turnamen" -#: importer/templates/archive_importer.html:19 +#: importer/templates/archive_importer.html msgid "This form will create a tournament with the data provided as a Debate XML format." msgstr "Formulir ini akan membuat turnamen dengan data yang disediakan dalam format XML Debat." -#: importer/templates/archive_importer.html:24 +#: importer/templates/archive_importer.html msgid "Import" msgstr "Impor" -#: importer/templates/archive_importer.html:25 +#: importer/templates/archive_importer.html msgid "Go back to the site home page" msgstr "Kembali ke laman utama" -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html msgctxt "page title" msgid "Add Adjudicators" msgstr "Tambah Juri" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" msgstr "(Langkah %(step)s dari %(count)s)" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" msgstr "Lengkah Sebelumnya" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." msgstr "Berdasarkan konfigurasi turnamen ini, rating seorang juri rating harus berada dalam rentang %(min)s dan %(max)s. Memberikan alamat email sifatnya opsional tetapi dapat berguna jika menggunakan URL privat untuk umpanbalik atau kertas suara." -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" msgstr "Juri untuk %(institution)s" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" msgstr "Juri Non-Terafiliasi" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" msgstr "Simpan Seluruh Juri" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." msgstr "Anda harus menambahkan institusi sebelum menambahkan juri." -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." msgstr "Tentukan jumlah juri baru untuk ditambahkan per institusi. Pada langkah berikutnya Anda dapat menentukan nama dan rating mereka." -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" -msgstr "Anda dapat menambahkan sampai 198 juri pada satu waktu. Jika Anda memiliki lebih dari 198 juri, pecah mereka menjadi bongkahan-bongkahan kecil. (Jangan mencoba untuk menambahkan lenih dari 198 dalam satu waktu; sistem akan crash dan Anda akan kehilangan data.)" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" +msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" msgstr "Langkah Berikutnya" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" msgstr "Pengimpor Sederhana" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." msgstr "Ada beberapa cara untuk mengimpor data ke dalam Tabbycat. Mana yang paling baik bergantung pada ukuran turnamen Anda dan latar belakang teknis Anda. Pengimpor sederhana ini adalah yang termudah untuk digunakan dan berjalan dengan baik untuk turnamen berukuran kecil atau sedang." -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" msgstr "TamTambah Institusi" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" msgstr "Tambah Tim" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" msgstr "Tambah Juri" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" msgstr "Tambah Ruangan" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" msgstr "Tambah/Sunting Kategori Ruangan" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" msgstr "Tambah/Sunting Batasan Ruangan" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" msgstr "Tambah/Sunting Konflik Tim-Juri" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" msgstr "Tambah/Sunting Konflik Juri-Juri" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" msgstr "Tambah/Sunting Konflik Juri-Institusi" -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" msgstr "Tambah/Sunting Konflik Tim-Institusi" -#: importer/templates/simple_import_index.html:66 +#: importer/templates/simple_import_index.html msgid "Add/Edit Break Categories" msgstr "ImportTambahkan / Ubah Kategori Break" -#: importer/templates/simple_import_index.html:70 +#: importer/templates/simple_import_index.html msgid "Add/Edit Speaker Categories" msgstr "Tambahkan / Ubah Kategori Pembicara" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" msgstr "TamTambah Institusi" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" msgstr "Simpan Semua Institusi" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" msgstr "Ada beberapa masalah terkait data pada formulir ini:" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" msgstr "Langkah Berikutnya" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" msgstr "Tambah Tim" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" msgstr "Tim untuk %(institution)s" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" msgstr "Tim Non-Terafiliasi" -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" msgstr "Simpan Semua Tim" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." msgstr "Anda harus menambahkan institusi sebelum menambahkan tim." -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." msgstr "Tentukan jumlah tim baru untuk ditambahkan per institusi. Pada langkah berikutnya Anda dapat menentukan nama tim dan pembicara." -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" -msgstr "Anda bisa menambahkan sampai 141 tim dalam satu waktu. Jika Anda memiliki lebih dari 141 tim, pecah mereka menjadi bongkahan-bongkahan. (Mohon tidak mencoba menambahkan lebih dari 141 dalam satu waktu; sistem akan crash dan Anda akan kehilangan data.)" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" +msgstr "" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" msgstr "Tambah Ruangan" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." msgstr "Prioritas mengindikasikan berapa banyak Anda ingin menggunakan ruangan. Nilai yang lebih besar mengindikasikan prioritas yang lebih tinggi. Jika anda memiliki lebih banyak ruangan dari debat, ruangan dengan prioritas terendah tidak akan digunakan." -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" msgstr "Simpan Semua Ruangan" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" msgstr "Tempel daftar ruangan dengan satu ruangan per baris dan mengikuti format dari: nama,prioritas. Sebagai contoh:" -#: importer/views.py:108 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." msgstr[0] "%(count)d institusi ditambahkan." -#: importer/views.py:129 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." msgstr[0] "%(count)d ruangan ditambahkan." -#: importer/views.py:188 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." msgstr[0] "%(count)d tim ditambahkan." -#: importer/views.py:209 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "Juri %(number)d" -#: importer/views.py:214 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." msgstr[0] "Juri %(count)d ditambahkan." -#: importer/views.py:230 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " msgstr "

    Ada satu atau lebih kesalahan membuat turnamen demo. Sebelum mencoba kembali, mohon haps turnamen demo yang sudah ada dan institusi di Area Sunting Basisdata.

    Informasi teknis: Kesalahannya adalah sebagai berikut:

    " -#: importer/views.py:238 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." msgstr "Turnamen demo sudah terbuat. Anda dapat mengonfigurasikannya di bawah ini." -#: importer/views.py:256 +#: importer/views.py msgid "Tournament archive has been imported." msgstr "Arsip turnamen telah diimpor." diff --git a/tabbycat/locale/id/LC_MESSAGES/django.po b/tabbycat/locale/id/LC_MESSAGES/django.po index 9e9656b4b19..7480ae3038e 100644 --- a/tabbycat/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-12-01 12:28\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -17,939 +17,939 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" msgstr "Application Programming Interface" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:105 +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" msgstr "Cek-In" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" msgstr "Pengenal cek-in yang terkirim tidak ada" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" msgstr "Cek-in" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" msgstr "Tidak ada pengenal cek-in untuk barcode yang dikirim" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." msgstr "Barcode harus memiliki tepat enam dijit." -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" msgstr "barcode" -#: checkins/models.py:37 +#: checkins/models.py msgid "" msgstr "" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" msgstr "orang" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" msgstr "pengenal orang" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" msgstr "pengenal orang" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "debat" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" msgstr "pengenal deba" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" msgstr "pengenal deba" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" msgstr "pengenal ruangan" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" msgstr "pengenal ruangan" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" msgstr "pengenal" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" msgstr "waktu cek-in" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "turnamen" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" msgstr "kejadian cek-in" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" msgstr "kejadian cek-in" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" msgstr "Dengan pengenal" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" msgstr "Lihat sebagai barcode" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" msgstr "Bangkitkan pengenal yang hilang" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" msgstr "Bangkitkan semua pengenal" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." msgstr "Tidak ada pengenal yang tersedia untuk dilihat. Seorang admin perlu membangkitkannya." -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." -msgstr "Setiap barcode di bawah adalah juga sebuah berkas gambar yang dapat diunduh secara individu. Jika anda ingin mengunduhnya semua cobalah gunakan ekstensi/plugin 'pengunduh sekaligus' pada peramban Anda, seperti ini (untuk Google Chrome). Untuk mengunduhnya sebagai sebuah daftar Anda dapat menuju seksi Cek-in pada area Sunting Basisdata dan salin/tempel dari tabel yang relevan." +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +msgstr "" -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "Anda bisa menggunakan Ctrl+P untuk mencetak atau menyimpan PDF barcode. Jangan lupa untuk mengatur orientasi halaman yang sesuai, mematikan header/footer, dan menyalakan gambar latar belakang. Bekerja paling baik di Chrome." -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." msgstr "Untuk memindai sebuah penanda ketikkan angka di bawah (akan otomatis terkirim). Anda juga bisa menggunakan pemindai barcode (terkonfigurasi untuk bekerja sebagai keyboard) atau pindah dari webcam atau kamera ponsel dengan menggunakan tombol di bawah." -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" msgstr "Tidak tercek-in (barcode %(barcode)s)" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" msgstr "Tidak tercek-in; tidak ada barcode yang dipasangkan" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" msgstr "cek-in pada %(time)s" -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." msgstr "%(speaker)s cek-in pada %(time)s." -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." msgstr "%(speaker)s tidak ada." -#: checkins/views.py:30 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" msgstr "Pindah penanda" -#: checkins/views.py:63 +#: checkins/views.py msgid "People's Check-In Statuses" msgstr "Status Cek-in Orang-Orang" -#: checkins/views.py:120 +#: checkins/views.py msgid "Rooms' Check-In Statuses" msgstr "Status Cek-In Ruangan-Ruangan" -#: checkins/views.py:169 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" msgstr "Buat Penanda" -#: checkins/views.py:176 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" msgstr "Pembicara" -#: checkins/views.py:181 templates/nav/public_nav.html:145 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "Juri" -#: checkins/views.py:186 +#: checkins/views.py msgid "Rooms" msgstr "Ruangan" -#: checkins/views.py:227 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" msgstr "Penanda untuk %s dibangkitkan" -#: checkins/views.py:234 +#: checkins/views.py msgid "Identifiers" msgstr "Penanda" -#: checkins/views.py:272 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." msgstr "Tidak dapat melakukan cek-in untuk Anda karena Anda tidak memiliki kode penanda — direktur tabulasi Anda mungkin perlu membuatkan Anda sebuah penanda." -#: checkins/views.py:280 +#: checkins/views.py msgid "You have revoked your check-in." msgstr "Anda telah membatalkan cek-in Anda." -#: checkins/views.py:282 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." msgstr "Ups! Sepertinya cek-in Anda sudah dibatalkan sebelumnya." -#: checkins/views.py:286 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." msgstr "Ups! Sepertinya Anda sudah cek-in sebelumnya." -#: checkins/views.py:293 +#: checkins/views.py msgid "You are now checked in." msgstr "Anda sekarang tercek-in." -#: settings/core.py:67 +#: settings/core.py msgid "Arabic" msgstr "" -#: settings/core.py:68 +#: settings/core.py msgid "Bengali" msgstr "Bengali" -#: settings/core.py:69 +#: settings/core.py msgid "English" msgstr "" -#: settings/core.py:70 +#: settings/core.py msgid "Spanish" msgstr "" -#: settings/core.py:71 +#: settings/core.py msgid "French" msgstr "" -#: settings/core.py:72 +#: settings/core.py msgid "Indonesian" msgstr "Bahasa Indonesia" -#: settings/core.py:73 +#: settings/core.py msgid "Japanese" msgstr "" -#: settings/core.py:74 +#: settings/core.py msgid "Malay" msgstr "" -#: settings/core.py:75 +#: settings/core.py msgid "Portuguese" msgstr "" -#: settings/core.py:76 +#: settings/core.py msgid "Russian" msgstr "" -#: settings/core.py:77 +#: settings/core.py msgid "Simplified Chinese" msgstr "Mandarin yang Disederhanakan" -#: settings/core.py:78 +#: settings/core.py msgid "Translation" msgstr "Terjemahan" -#: templates/admin/delete_protected_message.html:4 +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." msgstr "Anda perlu menghapus objek-objek di atas terlebih dahulu." -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." msgstr "Kartu informasi seperti ini mengumumkan informasi penting. Link." -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." msgstr "Kartu informasi seperti ini mengumumkan informasi umum." -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" msgstr "Judul Formulir" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" msgstr "Subjudul Judul" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" msgstr "Masuk" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" msgstr "Saya lupa password saya" -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "Tabulasi untuk %(tournament)s berjalan di atas Tabbycat, sebuah sistem tabulasi kode-terbuka untuk berbagai macam format debat parlementer" -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "Tabulasi ini berjalan di atas Tabbycat, sebuah sistem tabulasi kode-terbuka untuk berbagai macam format debat parlementer" -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." msgstr "Ups! Sepertinya ada kesalahan pada satu atau lebih kolom." -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" msgstr "Simpan dan Tambahkan Lagi" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" msgstr "Akses Tidak Diijinkan (403)" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." msgstr "Asisten halaman ini tidak dinyalakan untuk turnamen ini. Kembali ke beranda halaman asisten." -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgstr[0] "Saat ini Anda menggunakan %(nrows)s baris di dalam basisdata Anda. Jika Anda belum meningkatkan basisdata Heroku Anda ke tingkat berbayar, ini akan dibatasi oleh 10.000 baris. Karena Anda dekat dengan batas ini, Anda sebaiknya tidak membuat turnamen baru pada situs ini kecuali dan sampai Anda meningkatkan basisdata Anda ke tingkat berbayar." -#: templates/errors/legacy_sendgrid_warning.html:11 +#: templates/errors/legacy_sendgrid_warning.html msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." msgstr "Sepertinya anda menggunakan konfigurasi lama dari SendGrid config vars pada Heroku, SENDGRID_USERNAME dan SENDGRID_PASSWORD. Konfigurasi tersebut sudah tidak digunakan lagi (semenjak versi 2.6), dan akan berhenti digunakan untuk versi-versi terbaru Tabbycat. Mohon ubah config vars menjadi SENDGRID_API_KEY. Untuk informasi lebih lanjutkan, silahkan membaca untuk dokumentasi dari kami mengenai topik ini." -#: templates/errors/public_403.html:14 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." msgstr "Ups! Halaman ini tidak dinyalakan untuk turnamen ini. Kembali ke halaman beranda turnamen." -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." msgstr "Ups! Halaman ini tidak dinyalakan untuk turnamen ini. Kembali ke halaman beranda." -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "%(tournament)s berjalan di atas Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "Situs ini berjalan di atas %(tabbycat_version)s (%(tabbycat_codename)s)" -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." msgstr "Tabbycat adalah proyek kode-terbuka yang dibangun oleh relawan, dan gratis digunakan untuk tabulasi turnamen non-profit dan bukan bersifat penggalangan dana." -#: templates/footer.html:24 +#: templates/footer.html #, python-format msgid "For a tournament of this size, we suggest a donation of $%(amount)s." msgstr "Untuk turnamen seukuran ini, kami menyarankan donasi sebesar $%(amount)s." -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." msgstr "Pelajari lebih lanjut tentang berdonasi." -#: templates/footer.html:31 +#: templates/footer.html msgid "Donations to Tabbycat from individuals or organisations are much appreciated." msgstr "Donasi untuk Tabbycat dari individu atau organisasi sangat dihargai." -#: templates/footer.html:39 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" msgstr "Masih mengukur waktu debat dengan aplikasi stopwatch?" -#: templates/footer.html:41 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." msgstr "Menggunakan aplikasi yang didesain untuk mengukur waktu debat membuat berbicara dan menjurikan lebih mudah! Cek Timekept (iPhone/iPad) or Debatekeeper (Android)." -#: templates/footer.html:50 +#: templates/footer.html msgid "Our Organisation" msgstr "Organisasi Kami" -#: templates/footer.html:52 -msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." -msgstr "Tabbycat didukung oleh Tabbycat Debate Association, sebuah organisasi non-profit untuk memajukan teknologi debat terbuka." +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +msgstr "" -#: templates/footer.html:65 +#: templates/footer.html msgid "Language" msgstr "Bahasa" -#: templates/footer.html:72 +#: templates/footer.html msgid "GitHub" msgstr "" -#: templates/footer.html:78 +#: templates/footer.html msgid "Documentation" msgstr "Dokumentasi" -#: templates/footer.html:84 +#: templates/footer.html msgid "Support" msgstr "Dukungan" -#: templates/footer.html:90 +#: templates/footer.html msgid "Facebook" msgstr "" -#: templates/footer.html:96 +#: templates/footer.html msgid "Set Up A Copy" msgstr "Buat Duplikatnya" -#: templates/footer.html:110 +#: templates/footer.html msgid "Change Language" msgstr "Ubah Bahasa" -#: templates/footer.html:127 +#: templates/footer.html msgid "Use this language" msgstr "Gunakan bahasa ini" -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" msgstr "Logo Tabbycat" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" msgstr "Beranda Situs" -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" msgstr "Turnamen Baru" -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" msgstr "Sunting Basisdata" -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" msgstr "Area Admin" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" msgstr "Area Asisten" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" msgstr "Area Publik" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" msgstr "Tinjauan" -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" msgstr "Siapkan" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" msgstr "Konfigurasi" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" msgstr "Impor Data" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:175 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" msgstr "Partisipan" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" msgstr "URL Privat" -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" msgstr "Email" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" msgstr "Rancangan Panel" -#: templates/nav/admin_nav.html:97 +#: templates/nav/admin_nav.html msgid "Export XML" msgstr "Ekspor XML" -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:160 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" msgstr "Sisi" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" msgstr "Status Orang" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" msgstr "Status Ruangan" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" msgstr "Penilaian Juri" -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" msgstr "Terbaru" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" msgstr "Penting" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" msgstr "Komentar" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" msgstr "Temukan berdasarkan Sumber" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" msgstr "Temukan berdasarkan Target" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" msgstr "Belum Diterima" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" msgstr "Tambahkan Penilaian" -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" msgstr "Pembaruan Sekaligus" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:165 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" msgstr "Urutan" -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" msgstr "Semua Tim" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "Tim" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" msgstr "%(category)s Tim" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" msgstr "Semua Pembicara" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" msgstr "Pembicara kategori %(category)s" -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" msgstr "Tanggapan" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:155 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "Mosi" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:170 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" msgstr "Keberagaman" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" msgstr "Break" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" msgstr "Milik Juri" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" msgstr "Sunting Kategori" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" msgstr "Sunting Kelayakan" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" msgstr "Keluar" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" msgstr "Masukkan Hasil" -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:211 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" msgstr "Berikan Penilaian" -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" msgstr "Daftar Partisipan" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:180 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" msgstr "Institusi" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" msgstr "Nama Terkode" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" msgstr "Lihat Pengenal" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" msgstr "Tampilkan/Cetak Draw" -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" msgstr "Tabulasi Tim" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" msgstr "Tabulasi Individu" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" msgstr "Tabulasi Penyimpul" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" msgstr "Tabulasi Juri" -#: templates/nav/public_nav.html:53 templates/nav/public_nav.html:62 +#: templates/nav/public_nav.html msgid "Motions Tab" msgstr "Tabulasi Mosi" -#: templates/nav/public_nav.html:56 +#: templates/nav/public_nav.html msgid "By round" msgstr "Oleh ronde" -#: templates/nav/public_nav.html:57 +#: templates/nav/public_nav.html msgid "Globally" msgstr "Secara global" -#: templates/nav/public_nav.html:72 +#: templates/nav/public_nav.html msgid "Draws" msgstr "Draw" -#: templates/nav/public_nav.html:83 +#: templates/nav/public_nav.html msgid "No Draws Available" msgstr "Tidak Ada Draw yang Tersedia" -#: templates/nav/public_nav.html:91 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" msgstr "Draw untuk %(round)s" -#: templates/nav/public_nav.html:95 +#: templates/nav/public_nav.html msgid "Current Draws" msgstr "Draw saat ini" -#: templates/nav/public_nav.html:115 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" msgstr "Hasil" -#: templates/nav/public_nav.html:133 +#: templates/nav/public_nav.html msgid "Break" msgstr "Break" -#: templates/nav/public_nav.html:185 +#: templates/nav/public_nav.html msgid "Feedback Progress" msgstr "Progres Penilaian Juri" -#: templates/nav/public_nav.html:191 templates/nav/public_nav.html:197 +#: templates/nav/public_nav.html msgid "Enter Ballot" msgstr "Masukkan Lembar Penjurian" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" msgstr "Ketersediaan" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" msgstr "Draw" -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" msgstr "Tampilan" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" msgstr "Area Administrator untuk %(tournament)s" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" msgstr "Area Asisten untuk %(tournament)s" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" msgstr "Area Publik untuk %(tournament)s" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" msgstr "Masuk" -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" msgstr "Selamat tinggal" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" msgstr "Anda telah keluar. Masuk lagi?" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" msgstr "Masuk" -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" msgstr "Masuk ke Tabbycat" -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." msgstr "Nama pengguna dan kata sandi tidak cocok." -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." msgstr "Akun anda tidak memiliki akses ke laman ini. Silahkan masuk dengan akun yang memiliki akses untuk melanjutkan." -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." msgstr "Silakan masuk untuk melihat laman ini." -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" msgstr "Kata sandi diganti" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." msgstr "Kata sandi anda telah diubah." -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" msgstr "Balik ke laman awal" -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:27 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" msgstr "Pengubahan Kata Sandi" -#: templates/registration/password_change_form.html:16 +#: templates/registration/password_change_form.html #, python-format msgid "API Token: %(api_token)s" msgstr "API Token: %(api_token)s" -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgid "The API token will allow you to authorize external applications to access the site as staff." msgstr "API Token akan memberikan aplikasi eksternal otorisasi untuk mengakses situs sebagai staf." -#: templates/registration/password_change_form.html:28 +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." msgstr "Masukkan kata sandi lama dan baru anda." -#: templates/registration/password_change_form.html:33 -#: templates/registration/password_reset_confirm.html:25 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" msgstr "Ubah kata sandi saya" -#: templates/registration/password_change_form.html:34 -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" msgstr "Batalkan dan kembali ke laman awal" -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "" -#: templates/registration/password_reset_complete.html:11 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." msgstr "Kata sandi Anda telah di reset." -#: templates/registration/password_reset_complete.html:14 -#: templates/registration/password_reset_done.html:15 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" msgstr "Balik ke laman login" -#: templates/registration/password_reset_confirm.html:4 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" msgstr "Konfirmasi Reset Kata Sandi" -#: templates/registration/password_reset_confirm.html:16 -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html msgctxt "page title" msgid "Password Reset" msgstr "Reset Kata Sandi" -#: templates/registration/password_reset_confirm.html:18 +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" msgstr "Silakan masukkan password baru (dua kali):" -#: templates/registration/password_reset_confirm.html:33 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." msgstr "Tautan reset kata sandi tidak valid, mungkin karena telah digunakan sebelumnya. Silahkan meminta reset kata sandi baru." -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" msgid "Password reset email sent" msgstr "Email reset kata sandi dikirim" -#: templates/registration/password_reset_done.html:11 +#: templates/registration/password_reset_done.html msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." msgstr "Kita telah mengirimkan email yang berisi instruksi bagaimana mengubah password anda, apabila ada akun dengan alamat email yang anda masukkan. Anda akan menerima email tersebut segera." -#: templates/registration/password_reset_done.html:12 +#: templates/registration/password_reset_done.html msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." msgstr "Apabila anda tidak menerima email, pastikan bahwa alamat yang anda masukkan benar, dan cek folder spam anda." -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" msgstr "Hai, %(user)s!" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "Seseorang meminta reset kata sandi untuk email %(email)s pada situs Tabbycat %(protocol)s://%(domain)s." -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" msgstr "Apabila ini anda, silahkan ikuti tautan berikut untuk reset password anda:" -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "Apabila ini bukan anda, berarti orang lain memasukkan alamat email anda ke laman reset password di situs Tabbycat %(protocol)s://%(domain)s." -#: templates/registration/password_reset_form.html:27 +#: templates/registration/password_reset_form.html msgid "Enter your email address below, and we'll email you a password reset link." msgstr "Masukkan alamat e-mail Anda di bawah, dan kami akan mengirimkan Anda tautan untuk reset password." -#: templates/registration/password_reset_form.html:34 +#: templates/registration/password_reset_form.html msgid "Please enter a valid email address." msgstr "Mohon memasukkan alamat e-mail yang valid." -#: templates/registration/password_reset_form.html:39 users/forms.py:10 -#: users/forms.py:25 +#: templates/registration/password_reset_form.html users/forms.py msgid "Email address" msgstr "" -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" msgstr "Reset password saya" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" msgstr "Kembali ke halaman login" -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" msgstr "Reset password pada situs Tabbycat di %(domain)s" -#: urls.py:102 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" msgstr "Hi, %(user)s — Anda baru saja masuk!" -#: urls.py:105 +#: urls.py msgid "Welcome! You just logged in!" msgstr "Selamat datang! Anda baru saja masuk!" -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." msgstr "Pengguna dengan status staf dapat melihat dan menyunting pada area Sunting Basisdata. Ini bisa berbahaya dan disisihkan untuk direktur tabulasi yang sesungguhnya." -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." msgstr "Superuser memiliki akses penuh ke semua area dari Tabbycat yang dibutuhkan untuk menjalankan turnamen. Pengguna yang bukan merupakan superuser masih dapat melakukan pekerjaan memasukkan data seperti menambahkan hasil dan umpan balik tetapi tidak dapat mengakses area konfidensial seperti seksi Break dan Umpan balik. Ketua juri dan deputi mereka biasanya diberikan status superuser jika mereka tahu apa yang mereka lakukan." -#: users/templates/admin/auth/delete_user_warning.html:6 +#: users/templates/admin/auth/delete_user_warning.html msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." msgstr "Perhatian: Anda tidak semestinya menghapus pengguna dari basisdata setelah mereka melakukan sesuatu, karena basisdata mencatat aksi-aksi yang dilakukan oleh pengguna tersebut, dan menghapus penggunanya berarti menghapus catatannya juga. Jika Anda ingin mendeaktivasi akun pengguna, kembali untuk menyuntin penggunanya, klik pada tab \"Hak akses\", hapus cek pada kotak \"Aktif\", dan simpan penggunanya." -#: users/templates/signup.html:4 users/templates/signup.html:5 +#: users/templates/signup.html msgid "Sign-Up" msgstr "Mendaftar" -#: users/templates/signup.html:16 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Administrator Account" msgstr "Membuat Sebuah Akun Administrator Baru" -#: users/templates/signup.html:18 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Assistant Account" msgstr "Membukan Sebuah Akun Asisten Baru" -#: users/templates/signup.html:25 +#: users/templates/signup.html msgid "Create Account" msgstr "Buat Akun" -#: users/views.py:54 +#: users/views.py msgid "You have successfully created a new administrator account." msgstr "Anda telah berhasil membuat sebuah akun administrator baru." -#: users/views.py:56 +#: users/views.py msgid "You have successfully created a new assistant account." msgstr "Anda telah berhasil membuat sebuah akun asisten baru." -#: users/views.py:84 +#: users/views.py msgid "Whoops! It looks like someone's already created the first user account. Please log in." msgstr "Ups! Sepertinya seseorang telah membuat akun pengguna pertama. Silahkan masuk." -#: users/views.py:92 +#: users/views.py #, python-format msgid "Welcome! You've created an account for %s." msgstr "Selamat datang! Anda telah membuat akun untuk %s." diff --git a/tabbycat/motions/locale/id/LC_MESSAGES/django.po b/tabbycat/motions/locale/id/LC_MESSAGES/django.po index f911404ea0a..0f6c5c6c6c7 100644 --- a/tabbycat/motions/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-12-01 12:28\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -17,358 +17,366 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "Mosi" -#: motions/models.py:9 +#: motions/models.py msgid "text" msgstr "teks" -#: motions/models.py:10 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" msgstr "Teks lengkap mosi cth. \"Dewan ini akan meluruskan semua pisang\"" -#: motions/models.py:12 +#: motions/models.py msgid "reference" msgstr "referensi" -#: motions/models.py:13 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" msgstr "Nama pendek untuk mosi, seperti \"Pisang\"" -#: motions/models.py:15 +#: motions/models.py msgid "info slide" msgstr "slide informasi" -#: motions/models.py:16 +#: motions/models.py msgid "The information slide for this topic; if it has one" msgstr "Slide informasi untuk topik / mosi ini apabila ada" -#: motions/models.py:19 +#: motions/models.py msgid "tournament" msgstr "turnamen" -#: motions/models.py:21 +#: motions/models.py msgid "rounds" msgstr "ronde" -#: motions/models.py:24 motions/models.py:37 motions/models.py:62 +#: motions/models.py msgid "motion" msgstr "mosi" -#: motions/models.py:25 +#: motions/models.py msgid "motions" msgstr "mosi" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" msgstr "tim debat" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" msgstr "preferensi" -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" msgstr "submisi lembar penjurian" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" msgstr "preferensi mosi tim debat" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" msgstr "preferensi mosi tim debat" -#: motions/models.py:64 +#: motions/models.py msgid "round" msgstr "ronde" -#: motions/models.py:67 +#: motions/models.py msgid "sequence number" msgstr "nomor urut" -#: motions/models.py:68 +#: motions/models.py msgid "The order in which motions are displayed" msgstr "Urutan mosi ditampilkan" -#: motions/models.py:73 +#: motions/models.py msgid "round motion" msgstr "mosi ronde" -#: motions/models.py:74 +#: motions/models.py msgid "round motions" msgstr "mosi ronde" -#: motions/statistics.py:86 +#: motions/statistics.py msgid "extremely strong evidence" msgstr "bukti sangat kuat" -#: motions/statistics.py:87 +#: motions/statistics.py msgid "strong evidence" msgstr "bukti kuat" -#: motions/statistics.py:88 +#: motions/statistics.py msgid "moderate evidence" msgstr "bukti cukup" -#: motions/statistics.py:89 +#: motions/statistics.py msgid "weak evidence" msgstr "bukti lemah" -#: motions/statistics.py:90 +#: motions/statistics.py msgid "very weak evidence" msgstr "bukti sangat lemah" -#: motions/statistics.py:91 +#: motions/statistics.py msgid "extremely weak evidence" msgstr "bukti sangat lemah" -#: motions/statistics.py:114 +#: motions/statistics.py msgid "balance inconclusive" msgstr "keseimbangan inkonklusif" -#: motions/statistics.py:115 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" msgstr "terlalu sedikit debat untuk mendapatkan statistik yang berarti" -#: motions/statistics.py:123 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" msgstr "tidak seimbang pada level %(level)s" -#: motions/statistics.py:124 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." msgstr "χ²-stat adalah %(chisq).3f, memberikan %(evidence)s yang menunjukkan bahwa mosi tidak seimbang di tingkat signifikansi %(level)s." -#: motions/statistics.py:129 +#: motions/statistics.py msgid "probably balanced" msgstr "mungkin seimbang" -#: motions/statistics.py:130 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." msgstr "χ²-stat adalah %(chisq).3f, memberikan yang menunjukkan bahwa mosi tidak seimbang di tingkat signifikansi berapapun." -#: motions/templates/motion_global_statistics.html:22 -#: motions/templates/motion_round_statistics.html:31 -#: motions/templates/public_motions.html:32 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" msgstr "Buka Slide Info" -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" msgstr[0] "hasil dari %(ndebates)s debat" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" msgstr[0] "%(advancing)s dari %(ndebates)s tim sebagai %(side)s (%(percentage)s%%) menang" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" msgstr[0] "%(eliminated)s dari %(ndebates)s tim sebagai %(side)s (%(percentage)s%%) tereliminasi" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" msgstr "menang" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." msgstr "mng." -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" msgstr "tereliminasi" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." msgstr "elim." -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" msgstr "distribusi hasil %(side)s" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" msgstr "Tidak ada hasil untuk mosi ini" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" msgstr "Pemerintah" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" msgstr "Oposisi" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" msgstr "Rata-rata poin per pihak" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" msgstr "Pembuka" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" msgstr "Penutup" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" msgstr "Rata-rata poin per bagian" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" msgstr[0] "rata-rata poin per posisi (%(ndebates)s debat)" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" msgstr[0] "%(count)s hasil untuk %(side)s (%(percentage)s%%) adalah untuk %(points)s poin" -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" msgstr "hasil %(side)s" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" msgstr[0] "%(count)s %(side)s menang" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" msgstr "Tidak ada tim yang mendebatkan mosi ini" -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" msgstr[0] "%(count)s %(side)s veto" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" msgstr "Tidak ada tim yang memveto mosi ini" -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" msgstr[0] "Sunting Mosi" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" msgstr "Tampilkan Draw" -#: motions/templates/motions_edit.html:28 +#: motions/templates/motions_edit.html msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." msgstr "Ini akan mengganti seluruh mosi yang ada untuk ronde ini. Mosinya masih akan tersimpan di dalam database." -#: motions/templates/motions_edit.html:30 +#: motions/templates/motions_edit.html msgid "Reuse Motions from Last Round" msgstr "Gunakan Mosi dari Ronde Sebelumnya" -#: motions/templates/motions_edit.html:35 +#: motions/templates/motions_edit.html msgid "Use Existing Motions" msgstr "Gunakan Mosi yang Ada" -#: motions/templates/motions_edit.html:74 +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" msgstr[0] "Simpan Mosi" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "Slide Info" -#: motions/templates/public_motions.html:41 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." msgstr "Tidak ada mosi tersedia untuk ronde ini." -#: motions/templates/public_motions.html:47 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." msgstr "Mosi ronde ini belum dirilis." -#: motions/templates/public_motions.html:52 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." msgstr "Mosi ronde ini belum dirilis." -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" msgstr[0] "Tampilkan Slide Info untuk %(round)s" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" msgstr[0] "Tampilkan Mosi untuk %(round)s" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." msgstr "Tidak ada mosi untuk ronde ini yang dimasukkan ke Tabbycat." -#: motions/utils.py:11 +#: motions/utils.py msgid "Not all latest ballots list the same motion, so could not be merged." msgstr "Tidak semua kertas suara menggunakan mosi yang sama sehingga tidak dapat disatukan." -#: motions/utils.py:29 +#: motions/utils.py msgid "Motion vetos are inconsistent, so could not be merged." msgstr "Veto mosi tidak konsisten sehingga tidak dapat disatukan." -#: motions/views.py:91 +#: motions/views.py msgid "The motion has been saved." msgstr "Mosi telah disimpan." -#: motions/views.py:93 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." msgstr[0] "%(count)d mosi telah disimpan." -#: motions/views.py:97 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." msgstr[0] "%(count)d mosi telah dihapus." -#: motions/views.py:140 +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "" + +#: motions/views.py #, python-format msgid "Reused the motion from the previous round." msgid_plural "Reused the %(count)d motions from the previous round." msgstr[0] "Menggunakan %(count)d mosi dari ronde sebelumnya." -#: motions/views.py:164 -msgid "Released the motion(s)." -msgstr "Merilis mosi." +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" -#: motions/views.py:171 -msgid "Unreleased the motion(s)." -msgstr "Membatalkan rilis mosi." +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" -#: motions/views.py:195 +#: motions/views.py msgid "Round Motions" msgstr "Mosi Ronde" -#: motions/views.py:209 +#: motions/views.py msgid "Motion Statistics" msgstr "Statistik Mosi" diff --git a/tabbycat/notifications/locale/id/LC_MESSAGES/django.po b/tabbycat/notifications/locale/id/LC_MESSAGES/django.po index 30d7c8dcc02..ecde61ef3e0 100644 --- a/tabbycat/notifications/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-12-01 12:39\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -18,400 +18,398 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" msgstr "Notifikasi" -#: notifications/forms.py:12 +#: notifications/forms.py msgid "Recipient email address" msgstr "Alamat email penerima" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" msgstr "Uji email dari %(host)s" -#: notifications/forms.py:17 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" msgstr "Selamat! Apabila anda membaca pesan ini, email backend pada %(host)s sudah fungsional!" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Subject" msgstr "Subjek" -#: notifications/forms.py:31 +#: notifications/forms.py msgid "Message" msgstr "Pesan" -#: notifications/models.py:11 notifications/models.py:26 +#: notifications/models.py msgid "email" msgstr "email" -#: notifications/models.py:12 +#: notifications/models.py msgid "SMS" msgstr "SMS" -#: notifications/models.py:21 +#: notifications/models.py msgid "recipient" msgstr "penerima" -#: notifications/models.py:23 +#: notifications/models.py msgid "method" msgstr "metode" -#: notifications/models.py:28 notifications/models.py:134 +#: notifications/models.py msgid "context" msgstr "konteks" -#: notifications/models.py:31 +#: notifications/models.py msgid "notification" msgstr "notifikasi" -#: notifications/models.py:33 notifications/models.py:74 -#: notifications/models.py:130 +#: notifications/models.py msgid "timestamp" msgstr "waktu" -#: notifications/models.py:36 +#: notifications/models.py msgid "sent message" msgstr "pesan terkirim" -#: notifications/models.py:37 +#: notifications/models.py msgid "sent messages" msgstr "pesan terkirim" -#: notifications/models.py:58 +#: notifications/models.py msgid "team points" msgstr "poin tim" -#: notifications/models.py:59 +#: notifications/models.py msgid "ballot confirmed" msgstr "lembar penjurian terkonfirmasi" -#: notifications/models.py:60 +#: notifications/models.py msgid "feedback URL" msgstr "URL umpan balik" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot URL" msgstr "URL lembar penjurian" -#: notifications/models.py:62 +#: notifications/models.py msgid "landing page URL" msgstr "URL halaman utama" -#: notifications/models.py:63 +#: notifications/models.py msgid "adjudicator draw released" msgstr "draw juri dirilis" -#: notifications/models.py:64 +#: notifications/models.py msgid "team registration" msgstr "registrasi tim" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator registration" msgstr "registrasi juri" -#: notifications/models.py:66 +#: notifications/models.py msgid "motion(s) released" msgstr "mosi dirilis" -#: notifications/models.py:67 +#: notifications/models.py msgid "team draw released" msgstr "draw tim dirilis" -#: notifications/models.py:68 +#: notifications/models.py msgid "custom message" msgstr "pesan khusus" -#: notifications/models.py:72 notifications/models.py:132 +#: notifications/models.py msgid "event" msgstr "event" -#: notifications/models.py:77 +#: notifications/models.py msgid "tournament" msgstr "turnamen" -#: notifications/models.py:79 +#: notifications/models.py msgid "round" msgstr "ronde" -#: notifications/models.py:82 +#: notifications/models.py msgid "subject template" msgstr "template subjek" -#: notifications/models.py:84 +#: notifications/models.py msgid "body template" msgstr "template badan email" -#: notifications/models.py:87 +#: notifications/models.py msgid "bulk notification" msgstr "kumpulan notifikasi" -#: notifications/models.py:88 +#: notifications/models.py msgid "bulk notifications" msgstr "kumpulan notifikasi" -#: notifications/models.py:114 +#: notifications/models.py msgid "Processed" msgstr "Terproses" -#: notifications/models.py:115 +#: notifications/models.py msgid "Dropped" msgstr "Dibatalkan" -#: notifications/models.py:116 +#: notifications/models.py msgid "Deferred" msgstr "Ditangguhkan" -#: notifications/models.py:117 +#: notifications/models.py msgid "Delivered" msgstr "Diterima" -#: notifications/models.py:118 +#: notifications/models.py msgid "Bounced" msgstr "Tidak Terkirim" -#: notifications/models.py:119 +#: notifications/models.py msgid "Opened" msgstr "Dibuka" -#: notifications/models.py:120 +#: notifications/models.py msgid "Clicked" msgstr "Diklik" -#: notifications/models.py:121 +#: notifications/models.py msgid "Unsubscribed" msgstr "Berhenti berlangganan" -#: notifications/models.py:122 +#: notifications/models.py msgid "Marked as spam" msgstr "Ditandai sebagai spam" -#: notifications/models.py:123 +#: notifications/models.py msgid "Unsubscribed from group" msgstr "Berhenti berlangganan dari grup" -#: notifications/models.py:124 +#: notifications/models.py msgid "Resubscribed to group" msgstr "Dilanggankan kembali ke grup" -#: notifications/models.py:128 +#: notifications/models.py msgid "email message" msgstr "pesan email" -#: notifications/models.py:137 +#: notifications/models.py msgid "email status" msgstr "status email" -#: notifications/models.py:138 +#: notifications/models.py msgid "email statuses" msgstr "status email" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." msgstr "Anda belum memberikan alamat balasan. Ini berarti bahwa partisipan tidak dapat membalas pesan anda apabiila mereka memiliki pertanyaan. Beri alamat balasan di Bagian notifikasi di pengaturan." -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." msgstr "Webhook URL untuk digunakan pada SendGrid adalah %(notifications_webhook_url)s. Arahkan HTTP POST URL di SendGrid ke Webhook tsb." -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" msgstr "Kirim Pesan" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." msgstr "Email dapat dikirim menggunakan Tabbycat untuk berbagai tujuan. Email dapat dikirim saat pengaturan tertentu diaktifkan, seperti mengaktifkan Tanda Terima Balot, atau melalui aksi yang ada pada halaman tertentu, seperti laman Penayangan Draw untuk draw, Partisipan untuk registrasi tim. Laman ini menunjukkan status untuk email-email yang telah dikirim sebelumnya." -#: notifications/templates/notifications_nav.html:5 notifications/views.py:75 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" msgstr "Status email" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:29 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" msgstr "Kirim Email Percobaan" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" msgstr "Kirim Email Khusus" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" msgstr "Kirim Email Percobaan" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." msgstr "Anda dapat menggunakan form ini untuk mengirimkan email percobaan, untuk menguji apakah pengaturan email anda bekerja sebelum mengirimkan email kepada partisipan." -#: notifications/templates/test_email.html:20 +#: notifications/templates/test_email.html #, python-format msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." msgstr "Surel akan dikirmkan melalui: %(default_from_email)s. Apabila terdapat kesalahan, silahkan ubah konfigurasi DEFAULT_FROM_EMAIL config var pada Heroku (atau environment variable)." -#: notifications/templates/test_email.html:30 +#: notifications/templates/test_email.html msgid "Go back to the site home page" msgstr "Kembali ke laman utama" -#: notifications/utils.py:26 +#: notifications/utils.py msgid "the chair" msgstr "ketua juri" -#: notifications/utils.py:27 +#: notifications/utils.py msgid "the only" msgstr "satu-satunya" -#: notifications/utils.py:28 +#: notifications/utils.py msgid "a panellist" msgstr "panelis" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "a trainee" msgstr "trainee" -#: notifications/utils.py:59 +#: notifications/utils.py msgid "TBA" msgstr "Akan diumumkan nanti" -#: notifications/utils.py:88 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "" -#: notifications/utils.py:99 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" msgstr "
  • %(side)s: %(team)s (%(points)d poin dengan %(speaks)s total skor)" -#: notifications/utils.py:102 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" msgstr "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total skor)" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Win" msgstr "Menang" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Loss" msgstr "Kalah" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " msgstr "
  • %(pos)s: %(speaker)s (%(score)s)
  • " -#: notifications/utils.py:183 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " msgstr "
  • %(text)s (%(ref)s)
  • " -#: notifications/utils.py:206 notifications/utils.py:207 +#: notifications/utils.py msgid ", " msgstr ", " -#: notifications/views.py:47 +#: notifications/views.py #, python-format msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" msgstr "Server surel (SMTP) mengalami sebuah kesalahan dalam mengirimkan surel ujicoba: [SMTP code %(code)d%] %(error)s" -#: notifications/views.py:51 +#: notifications/views.py msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." msgstr "Petunjuk: Apabila kesalahannya terdapat pada verifikasi identitas pengirim pada SendGrid dan anda sudah menyelesaikan tahapan pada SendGrid, mungkin anda butuh melakukan pembaharuan pada DEFAULT_FROM_EMAIL config var pada Heroku untuk mencocokkan identitas pengirim yang terverifikasi." -#: notifications/views.py:60 +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" msgstr "Ada kesalahan saat mengirimkan email percobaan: %(error)s" -#: notifications/views.py:65 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." msgstr "Email percobaan telah dikirim ke %(recipient)s." -#: notifications/views.py:81 +#: notifications/views.py msgid "N/A" msgstr "N/A" -#: notifications/views.py:82 +#: notifications/views.py msgid "Not known" msgstr "Tidak tersedia" -#: notifications/views.py:87 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" msgstr "%(status)s @ %(time)s" -#: notifications/views.py:133 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "" -#: notifications/views.py:152 +#: notifications/views.py msgid "Timeline" msgstr "Waktu" -#: notifications/views.py:162 notifications/views.py:260 +#: notifications/views.py msgid "Participant" msgstr "Partisipan" -#: notifications/views.py:163 notifications/views.py:265 +#: notifications/views.py msgid "Email address" msgstr "" -#: notifications/views.py:164 +#: notifications/views.py msgid "Status" msgstr "Status" -#: notifications/views.py:165 +#: notifications/views.py msgid "Time" msgstr "Waktu" -#: notifications/views.py:204 +#: notifications/views.py msgid "Email Participants" msgstr "Email Partisipan" -#: notifications/views.py:233 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." msgstr[0] "%(email_count)s email telah disiapkan untuk dikirim." -#: notifications/views.py:239 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." msgstr "Tidak ada email yang dikirim -- mungkin karena tidak ada penerima yang dipilih." -#: notifications/views.py:250 +#: notifications/views.py msgid "Send Email" msgstr "Kirim Email" -#: notifications/views.py:266 +#: notifications/views.py msgid "Not Provided" msgstr "Tidak Tersedia" -#: notifications/views.py:279 +#: notifications/views.py msgid "Role" msgstr "Peran" -#: notifications/views.py:280 +#: notifications/views.py msgid "Adjudicator" msgstr "Juri" -#: notifications/views.py:280 +#: notifications/views.py msgid "Speaker" msgstr "Pendebat" -#: notifications/views.py:288 +#: notifications/views.py msgid "Speakers" msgstr "Pembicara" -#: notifications/views.py:289 +#: notifications/views.py msgid "Adjudicators" msgstr "Juri" diff --git a/tabbycat/options/locale/id/LC_MESSAGES/django.po b/tabbycat/options/locale/id/LC_MESSAGES/django.po index 79a3dc83738..150ddac1370 100644 --- a/tabbycat/options/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -18,1587 +18,1600 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" msgstr "Opsi Turnamen" -#: options/models.py:13 +#: options/models.py msgid "instance" msgstr "instance" -#: options/models.py:18 +#: options/models.py msgid "tournament preference" msgstr "opsi turnamen" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" msgstr "opsi turnamen" -#: options/preferences.py:19 options/templates/preferences_index.html:53 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" msgstr "Aturan Penilaian" -#: options/preferences.py:25 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" msgstr "Nilai minimum yang diijinkan untuk pidato substantif" -#: options/preferences.py:28 +#: options/preferences.py msgid "Minimum speaker score" msgstr "Nilai pembicara minimum" -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum speaker score" msgstr "Nilai pembicara maksimum" -#: options/preferences.py:35 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" msgstr "Skor maksimum yang diijinkan untuk pidato substantif" -#: options/preferences.py:43 +#: options/preferences.py msgid "Speaker score step" msgstr "Jarak antara nilai pembicara" -#: options/preferences.py:44 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" msgstr "Jarak nilai yang diijinkan untuk pidato substantif seperti bilangan bulat (1) atau separuh (0.5)" -#: options/preferences.py:52 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" msgstr "Margin antara dua tim terbesar yang diijinkan (0 berarti tidak dibatasi)" -#: options/preferences.py:53 +#: options/preferences.py msgid "Maximum margin" msgstr "Margin maksimum" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" msgstr "Nilai minimum yang diijinkan untuk pidato penyimpul" -#: options/preferences.py:63 +#: options/preferences.py msgid "Minimum reply score" msgstr "Nilai penyimpul minimum" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" msgstr "Nilai maksimum yang diijinkan untuk pidato penyimpul" -#: options/preferences.py:72 +#: options/preferences.py msgid "Maximum reply score" msgstr "Nilai penyimpul maksimum" -#: options/preferences.py:80 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" msgstr "Jarak nilai yang diijinkan untuk pidato penyimpul seperti bilangan bulat (1) atau separuh (0.5)" -#: options/preferences.py:81 +#: options/preferences.py msgid "Reply score step" msgstr "Jarak antara nilai penyimpul" -#: options/preferences.py:89 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" msgstr "Apabila ditandai, margin kemenangan juga akan menampung margin dari juri yang berbeda pendapat dalam ruangan" -#: options/preferences.py:90 +#: options/preferences.py msgid "Margin includes dissenters" msgstr "Margin termasuk juri beda pendapat" -#: options/preferences.py:98 +#: options/preferences.py msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" msgstr "" -#: options/preferences.py:99 +#: options/preferences.py msgid "Team score includes ghosts" msgstr "" -#: options/preferences.py:106 options/templates/preferences_index.html:58 +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" msgstr "Aturan Draw" -#: options/preferences.py:112 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" msgstr "Algoritma alokasi otomatis hanya akan mengambil juri dengan nilai diatas nilai ini sebagai panelis / juri yang memiliki hak suara" -#: options/preferences.py:113 +#: options/preferences.py msgid "Minimum adjudicator score to vote" msgstr "Nilai minimum juri untuk memiliki hak suara" -#: options/preferences.py:121 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" msgstr "Penalti untuk konflik dalam algoritma alokasi juri otomatis" -#: options/preferences.py:122 +#: options/preferences.py msgid "Adjudicator conflict penalty" msgstr "Penalti konflik juri" -#: options/preferences.py:130 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" msgstr "Penalti untuk riwayat penjurian dalam algoritma alokasi juri otomatis" -#: options/preferences.py:131 +#: options/preferences.py msgid "Adjudicator history penalty" msgstr "Penalti riwayat penjurian" -#: options/preferences.py:139 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" msgstr "Penalti untuk ketidak cocokan prioritas dalam algoritma alokasi preformed panel otomatis" -#: options/preferences.py:140 +#: options/preferences.py msgid "Importance mismatch penalty" msgstr "Penalti ketidak cocokan kepentingan" -#: options/preferences.py:148 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" msgstr "Penalti untuk metode penghindaran konflik antara tim dari institusi yang sama" -#: options/preferences.py:149 +#: options/preferences.py msgid "Team institution penalty" msgstr "Penalti institusi tim" -#: options/preferences.py:157 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" msgstr "Penalti untuk metode penghindaran konflik antara tim yang memiliki riwayat bertemu pada ronde sebelumnya" -#: options/preferences.py:158 +#: options/preferences.py msgid "Team history penalty" msgstr "Penalti riwayat tim" -#: options/preferences.py:166 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" msgstr "Apabila ditandai, draw akan sebisa mungkin menghindari tim untuk bertemu tim lain yang satu institusi" -#: options/preferences.py:167 +#: options/preferences.py msgid "Avoid same institution" msgstr "Hindari Institusi yang Sama" -#: options/preferences.py:175 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" msgstr "Apabila ditandai, draw akan sebisa mungkin menghindari tim untuk bertemu tim yang telah bertemu tim tersebut di ronde sebelumnya" -#: options/preferences.py:176 +#: options/preferences.py msgid "Avoid team history" msgstr "Hindari Riwayat Tim" -#: options/preferences.py:184 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "Bagaimana bracket yang ganjil diselesaikan (lihat dokumentasi untuk detail lebih lanjut)" -#: options/preferences.py:185 +#: options/preferences.py msgid "Odd bracket resolution method" msgstr "Metode resolusi bracket ganjil" -#: options/preferences.py:189 +#: options/preferences.py msgid "Pull up from top" msgstr "Pull-up dari atas" -#: options/preferences.py:190 +#: options/preferences.py msgid "Pull up from bottom" msgstr "Pull-up dari bawah" -#: options/preferences.py:191 +#: options/preferences.py msgid "Pull up from middle" msgstr "Pull-up dari tengah" -#: options/preferences.py:192 +#: options/preferences.py msgid "Pull up at random" msgstr "Pull-up secara acak" -#: options/preferences.py:193 +#: options/preferences.py msgid "Intermediate brackets" msgstr "Intermediate bracket" -#: options/preferences.py:194 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" msgstr "Intermediate brackets with bubble-up-bubble-down" -#: options/preferences.py:195 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" msgstr "Intermediate 1 (pre-allocated sides)" -#: options/preferences.py:196 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" msgstr "Intermediate 2 (pre-allocated sides)" -#: options/preferences.py:203 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" msgstr "Bagaimana posisi afirmatif / negatif dialokasikan (lihat dokumentasi untuk detail lebih lanjut)" -#: options/preferences.py:204 +#: options/preferences.py msgid "Side allocations method" msgstr "Metode alokasi sisi" -#: options/preferences.py:208 options/preferences.py:225 +#: options/preferences.py msgid "Random" msgstr "Acak" -#: options/preferences.py:209 +#: options/preferences.py msgid "Balance" msgstr "Seimbang" -#: options/preferences.py:210 +#: options/preferences.py msgid "Pre-allocated" msgstr "Dialokasikan mula-mula" -#: options/preferences.py:211 +#: options/preferences.py msgid "Manually enter from ballot" msgstr "Diinput secara manual pada balot" -#: options/preferences.py:218 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." msgstr "Slide (Break and Slide): 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent (Power pair): 1 vs 2, 3 vs 4, …." -#: options/preferences.py:219 +#: options/preferences.py msgid "Pairing method" msgstr "Metode matchup tim" -#: options/preferences.py:223 +#: options/preferences.py msgid "Slide" msgstr "Slide" -#: options/preferences.py:224 +#: options/preferences.py msgid "Fold" msgstr "Fold" -#: options/preferences.py:226 +#: options/preferences.py msgid "Adjacent" msgstr "Adjacent" -#: options/preferences.py:227 +#: options/preferences.py msgid "Fold top, adjacent rest" msgstr "Fold untuk atas, adjacent untuk yang lain" -#: options/preferences.py:234 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" msgstr "Metode yang digunakan untuk menghindarkan tim untuk bertemu dengan tim lain lebih dari satu kali atau bertemu dengan tim dari institusi sendiri (lihat dokumentasi untuk detail lebih lanjut)" -#: options/preferences.py:236 +#: options/preferences.py msgid "Conflict avoidance method" msgstr "Metode pencegahan konflik" -#: options/preferences.py:240 +#: options/preferences.py msgid "Off" msgstr "Nonaktif" -#: options/preferences.py:241 +#: options/preferences.py msgid "One-up-one-down" msgstr "Satu-atas-satu-bawah" -#: options/preferences.py:248 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "Apabila menggunakan pull-up, batasi tim mana yang dapat ditarik ke atas. Hanya mendukung format dengan dua tim, dan tidak akan berpengaruh pada format BP ataupun pada intermediate bracket." -#: options/preferences.py:250 +#: options/preferences.py msgid "Pullup restriction" msgstr "Pembatasan Pullup" -#: options/preferences.py:254 +#: options/preferences.py msgid "No restriction" msgstr "Tidak ada batasan" -#: options/preferences.py:255 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" msgstr "Pilih tim yang paling sedikit ditarik ke atas sejauh ini" -#: options/preferences.py:256 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" msgstr "Pilih tim dengan draw strength terendah berdasarkan kemenangan sejauh ini" -#: options/preferences.py:257 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" msgstr "Pilih tim dengan draw strength terendah berdasarkan skor sejauh ini" -#: options/preferences.py:264 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." msgstr "Bagaimana tim yang ditarik didistribusikan dalam BP. Hanya \"Dimana saja\" yang mengikuti standar WUDC." -#: options/preferences.py:265 +#: options/preferences.py msgid "BP pullup distribution" msgstr "Distribusi pullup BP" -#: options/preferences.py:269 +#: options/preferences.py msgid "Anywhere in bracket" msgstr "Dimana saja dalam bracket" -#: options/preferences.py:270 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" msgstr "Dimana saja dalam satu ruangan (tidak mengikuti standar WUDC)" -#: options/preferences.py:277 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" msgstr "Position cost function mana yang akan digunakan dalam BP (lihat dokumentasi untuk detail)" -#: options/preferences.py:278 +#: options/preferences.py msgid "BP position cost" msgstr "BP position cost" -#: options/preferences.py:282 +#: options/preferences.py msgid "Simple" msgstr "Sederhana" -#: options/preferences.py:283 +#: options/preferences.py msgid "Rényi entropy" msgstr "Entropi Rényi" -#: options/preferences.py:284 +#: options/preferences.py msgid "Population variance" msgstr "Varians Populasi" -#: options/preferences.py:291 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." msgstr "Orde Rényi α, apabila BP position cost menggunakan entropi Rényi. Shannon: α = 1, Hartley: α = 0, collision: α = 2. Lihat dokumentasi untuk detail." -#: options/preferences.py:294 +#: options/preferences.py msgid "Rényi order (BP)" msgstr "Orde Rényi (BP)" -#: options/preferences.py:303 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." msgstr "Orde (pangkat / eksponen) untuk BP position cost. Eksponen yang lebih tinggi berimplikasi pada menyelesaikan sedikit ketidakseimbangan posisi yang lebih besar dibandingkan banyak ketidakseimbangan yang lebih kecil. Lihat dokumentasi untuk detail." -#: options/preferences.py:306 +#: options/preferences.py msgid "BP position cost exponent" msgstr "Eksponen BP position cost" -#: options/preferences.py:315 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." msgstr "Metode yang digunakan untuk menyelesaikan permasalahan alokasi posisi dalam BP. Hanya Hungarian with preshuffling yang mengikuti standar WUDC." -#: options/preferences.py:317 +#: options/preferences.py msgid "BP assignment method" msgstr "Metode alokasi BP" -#: options/preferences.py:321 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" msgstr "Algoritma Hungarian (tidak mengikuti standar WUDC)" -#: options/preferences.py:322 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" msgstr "Hungarian algorithm with preshuffling" -#: options/preferences.py:329 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" msgstr "Buat seluruh juri tersedia untuk seluruh ronde secara otomatis" -#: options/preferences.py:330 +#: options/preferences.py msgid "Skip adjudicator check-ins" msgstr "Lompati check-in juri" -#: options/preferences.py:338 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" msgstr "Sembunyikan posisi panelis dalam tampilan antarmuka (dan jangan alokasikan panelis)" -#: options/preferences.py:339 +#: options/preferences.py msgid "No panellist adjudicators" msgstr "Tidak ada juri panelis" -#: options/preferences.py:347 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" msgstr "Sembunyikan posisi trainee dalam tampilan antarmuka (dan jangan alokasikan trainee)" -#: options/preferences.py:348 +#: options/preferences.py msgid "No trainee adjudicators" msgstr "Tidak ada juri trainee" -#: options/preferences.py:355 options/templates/preferences_index.html:73 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" msgstr "Penilaian Juri" -#: options/preferences.py:361 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" msgstr "Nilai minimum yang dapat diberikan untuk juri" -#: options/preferences.py:362 +#: options/preferences.py msgid "Minimum adjudicator score" msgstr "Nilai juri minimum" -#: options/preferences.py:370 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" msgstr "Nilai maksimum yang dapat diberikan untuk juri" -#: options/preferences.py:371 +#: options/preferences.py msgid "Maximum adjudicator score" msgstr "Nilai juri maksimum" -#: options/preferences.py:379 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" msgstr "Digunakan untuk menginformasikan pilihan yang tersedia dalam form umpan balik untuk juri (daring dan luring) serta perkembangan umpan balik" -#: options/preferences.py:380 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" msgstr "Ijinkan umpan balik untuk diberikan oleh" -#: options/preferences.py:384 +#: options/preferences.py msgid "Chairs on panellists and trainees" msgstr "Ketua juri untuk panelis dan trainee" -#: options/preferences.py:385 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" msgstr "Panelis kepada ketua juri, ketua juri kepada panelis dan trainee" -#: options/preferences.py:386 +#: options/preferences.py msgid "Panellists and trainees on chairs, vice-versa" msgstr "panelis dan trainee di ketua panel, dan sebalik nya" -#: options/preferences.py:387 +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" msgstr "Seluruh juri (termasuk trainee) kepada satu sama lain" -#: options/preferences.py:394 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "Ijinkan umpan balik diberikan oleh tim kepada" -#: options/preferences.py:395 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" msgstr "Digunakan untuk menginformasikan pilihan yang tersedia dalam form umpan balik untuk tim (daring dan luring) serta perkembangan umpan balik; opsi ini digunakan oleh turnamen seperti UADC" -#: options/preferences.py:399 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" msgstr "Hanya juri yang memberikan penjurian verbal (diijinkan juga untuk panelis, dengan opsi untuk memilih siapa yang memberikan penjurian verbal di dalam ruangan)" -#: options/preferences.py:400 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" msgstr "Seluruh juri (termasuk trainee)" -#: options/preferences.py:407 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" msgstr "Tampilkan pengisian umpan balik yang tidak seharusnya dalam laman partisipan" -#: options/preferences.py:408 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" msgstr "Tampilkan umpan balik yang tidak seharusnya dengan simbol tanda tanya; hanya relevan apabila perkembangan umpan balik dan partisipan dipublikasikan" -#: options/preferences.py:416 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" msgstr "Tampilkan apabila seorang juri adalah trainee (tidak terakreditasi)" -#: options/preferences.py:417 +#: options/preferences.py msgid "Show unaccredited" msgstr "Tunjukkan juri tanpa akreditasi" -#: options/preferences.py:425 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" msgstr "Letakkan detail yang diperlukan untuk menjelaskan form umpan balik / penilaian juri" -#: options/preferences.py:426 +#: options/preferences.py msgid "Feedback introduction/explanation" msgstr "Penjelasan Umpan Balik" -#: options/preferences.py:435 options/templates/preferences_index.html:63 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" msgstr "Aturan Debat" -#: options/preferences.py:441 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" msgstr "Format dengan dua tim (seperti Australs, WSDC) atau British Parliamentary" -#: options/preferences.py:442 +#: options/preferences.py msgid "Teams in debate" msgstr "Tim dalam debat" -#: options/preferences.py:446 +#: options/preferences.py msgid "Two-team format" msgstr "Format dua tim" -#: options/preferences.py:447 +#: options/preferences.py msgid "British Parliamentary (four teams)" msgstr "Parlementer Inggris (BP) (4 tim)" -#: options/preferences.py:454 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." msgstr "Apakah pada babak penyisihan, setiap juri dengan hak suara mengisi satu balot untuk tiap debat (voting ballot) atau seluruh juri mengisi satu balot secara konsensus (consensus ballot). Format BP wajib menggunakan balot konsensus." -#: options/preferences.py:455 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" msgstr "Balot per debat untuk babak penyisihan" -#: options/preferences.py:459 options/preferences.py:472 +#: options/preferences.py msgid "One ballot per voting adjudicator" msgstr "Satu balot tiap juri dengan hak suara" -#: options/preferences.py:460 options/preferences.py:473 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" msgstr "Balot Konsensus (satu balot per debat)" -#: options/preferences.py:467 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." msgstr "Apakah pada babak eliminasi, setiap juri dengan hak suara mengisi satu balot untuk tiap debat (voting ballot) atau seluruh juri mengisi satu balot secara konsensus (consensus ballot). Format BP wajib menggunakan balot konsensus." -#: options/preferences.py:468 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" msgstr "Balot per debat untuk babak eliminasi" -#: options/preferences.py:480 +#: options/preferences.py msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." msgstr "Apakah juri wajib memilih tim yang memenangkan debat pada balot mereka, dan bagaimana implementasi berikutnya. Tidak berpengaruh untuk format BP." -#: options/preferences.py:481 +#: options/preferences.py msgid "Winner Declaration in ballot(s)" msgstr "Deklarasi Kemenangan pada Balot" -#: options/preferences.py:485 +#: options/preferences.py msgid "Do not require separate winner selection" msgstr "Tidak perlu mendeklarasikan pemenang secara terpisah" -#: options/preferences.py:486 +#: options/preferences.py msgid "Require separate winner selection as a check on correct scores" msgstr "Minta juri untuk mengisi pemenang secara terpisah sebagai cek data" -#: options/preferences.py:487 +#: options/preferences.py msgid "Require winner selection to break tied-point debates" msgstr "Minta juri untuk mengisi pemenang secara terpisah sebagai pemenang dalam debat dengan skor seri" -#: options/preferences.py:488 +#: options/preferences.py msgid "Require winner selection, overriding scores" msgstr "Minta juri untuk mengisi pemenang secara terpisah sebagai pemenang dalam debat dan mengesampingkan nilai yang diisi" -#: options/preferences.py:495 +#: options/preferences.py msgid "When ballots should ask for speaker scores." msgstr "Kapan balot mewajibkan nilai pembicara." -#: options/preferences.py:496 +#: options/preferences.py msgid "Require speaker scores" msgstr "Kewajiban mengisi nilai pembicara" -#: options/preferences.py:500 +#: options/preferences.py msgid "Always require speaker scores" msgstr "Selalu wajibkan nilai pembicara" -#: options/preferences.py:501 +#: options/preferences.py msgid "Only require speaker scores in preliminary rounds" msgstr "Hanya wajibkan nilai pembicara pada babak penyisihan" -#: options/preferences.py:502 +#: options/preferences.py msgid "Never require speaker scores" msgstr "Tidak pernah minta nilai pembicara" -#: options/preferences.py:509 +#: options/preferences.py msgid "How many substantive speakers on a team" msgstr "Berapa banyak pembicara substantif dalam tim" -#: options/preferences.py:510 +#: options/preferences.py msgid "Substantive speakers" msgstr "Pembicara substantif" -#: options/preferences.py:518 +#: options/preferences.py msgid "What to call the teams" msgstr "Apa panggilan untuk tim-tim" -#: options/preferences.py:519 +#: options/preferences.py msgid "Side names" msgstr "Nama panggilan" -#: options/preferences.py:528 +#: options/preferences.py msgid "Whether this style features scored reply speeches" msgstr "Apakah ini gaya fitur nilai balasan pidato" -#: options/preferences.py:529 +#: options/preferences.py msgid "Reply scores" msgstr "Penyimpul nilai" -#: options/preferences.py:537 +#: options/preferences.py msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" msgstr "Apakah membatasi balasan pidato ke pembicara, yang memberikan sebuah pidato subtantif dalam debat" -#: options/preferences.py:538 +#: options/preferences.py msgid "Require reply speaker to have given a substantive speech" msgstr "Mmebutuhkan balasan pembiacara untuk dapat memberikan pidato subtantif" -#: options/preferences.py:545 options/templates/preferences_index.html:68 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "Urutan" -#: options/preferences.py:551 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" msgstr "Jumlah dari pidato subtantif dari seorang pembicara dapat di lewatkan dan masih bisa dilakukan pada tab pembiacara (-1berarti tidak ada batasan)" -#: options/preferences.py:552 +#: options/preferences.py msgid "Speeches missable for standings eligibility" msgstr "Pidato terlewatkan untuk kelayakan klasemen" -#: options/preferences.py:560 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" msgstr "Jumlah dari pidato subtantif dari seorang pembicara dapat di lewatkan dan masih bisa dilakukan pada tab pembiacara (-1berarti tidak ada batasan)" -#: options/preferences.py:561 +#: options/preferences.py msgid "Replies missable for standings eligibility" msgstr "Pidato terlewatkan untuk kelayakan klasemen" -#: options/preferences.py:569 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" msgstr "Metrik yang digunakan untuk menentukan peringkat tim (liat pada dokumentasi untuk lebih lengkapnya)" -#: options/preferences.py:570 +#: options/preferences.py msgid "Team standings precedence" msgstr "Presedensi Klasemen tim saat ini" -#: options/preferences.py:586 options/preferences.py:621 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" msgstr "Metrik tidak dapat didaftarkan dua kali: %(duplicates)s" -#: options/preferences.py:592 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" msgstr "Metrik di dihitung, tapi tidak digunakan untuk ranking tim" -#: options/preferences.py:593 +#: options/preferences.py msgid "Team standings extra metrics" msgstr "Metrik ekstra klasemen tim" -#: options/preferences.py:604 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" msgstr "Metrik yang digunakan untuk menentukani ranking pembicara (lihat dokumentasi untuk detail lebih lanjut)" -#: options/preferences.py:605 +#: options/preferences.py msgid "Speaker standings precedence" msgstr "Presedensi klasemen pembicara" -#: options/preferences.py:627 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" msgstr "Metrik dihitung, tapi tidak digunakan untuk pembicara" -#: options/preferences.py:628 +#: options/preferences.py msgid "Speaker standings extra metrics" msgstr "Klasemen pembicara metrik ekstra" -#: options/preferences.py:638 options/templates/preferences_index.html:89 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" msgstr "Rilis tab" -#: options/preferences.py:644 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." msgstr "Aktfikan tampilan public dari tab tim. Ditujukan untuk digunakan setelah turnamen." -#: options/preferences.py:645 +#: options/preferences.py msgid "Release team tab to public" msgstr "Rilis tab tim ke publik" -#: options/preferences.py:653 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." msgstr "Hanya tampilkan nilai untuk tim X teratas di tab publik (setel ke 0 untuk menunjukkan semua tim)." -#: options/preferences.py:654 +#: options/preferences.py msgid "Top teams cutoff" msgstr "Cutoff tim teratas" -#: options/preferences.py:662 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." msgstr "Publikasikan tabulasi pembicara. Digunakan setelah turnamen berakhir." -#: options/preferences.py:663 +#: options/preferences.py msgid "Release speaker tab to public" msgstr "Rilis tabulasi pembicara pada publik" -#: options/preferences.py:671 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." msgstr "Hanya tunjukkan skor untuk X pembicara terbaik pada publik (0 berarti tunjukkan seluruh pembicara)." -#: options/preferences.py:672 +#: options/preferences.py msgid "Top speakers cutoff" msgstr "Cutoff pembicara teratas" -#: options/preferences.py:680 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." msgstr "Publikasikan tabulasi pembicara penyimpul. Digunakan setelah turnamen berakhir." -#: options/preferences.py:681 +#: options/preferences.py msgid "Release replies tab to public" msgstr "Rilis tabulasi pembicara penyimpul pada publik" -#: options/preferences.py:689 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." msgstr "Hanya tunjukkan nilai untuk X pembicara penyimpul terbaik pada publik (0 berarti tunjukkan seluruh pembicara)." -#: options/preferences.py:690 +#: options/preferences.py msgid "Top replies cutoff" msgstr "Cutoff pembicara penyimpul teratas" -#: options/preferences.py:716 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." msgstr "Aktifkan tampilan publik dari semua mosi dan informasi menang / kalah / seleksi. Ini mencakup semua mosi - apakah mereka telah ditandai sebagai dilepaskan atau tidak. Ditujukan untuk digunakan setelah turnamen." -#: options/preferences.py:719 +#: options/preferences.py msgid "Release motions tab to public" msgstr "Rilis tab mosi ke publik" -#: options/preferences.py:727 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" msgstr "Aktifkan tampilan publik dari penilaian nilai dari juri" -#: options/preferences.py:728 +#: options/preferences.py msgid "Release adjudicator tab to public" msgstr "Rilis tab juri ke publik" -#: options/preferences.py:736 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" msgstr "Apa (jika dirilis) yang ditampilkan tab adjudicator" -#: options/preferences.py:737 +#: options/preferences.py msgid "Adjudicator tab displays" msgstr "Tap tampilan juri" -#: options/preferences.py:741 +#: options/preferences.py msgid "Only shows base score" msgstr "Hanya menunjukan nilai awal" -#: options/preferences.py:742 +#: options/preferences.py msgid "Only shows final score" msgstr "Hanya menunjukan nilai akhir" -#: options/preferences.py:743 +#: options/preferences.py msgid "Shows base, final, and per-round scores" msgstr "Tampilkan nilai awal, nilai final, dan nilai tiap round" -#: options/preferences.py:750 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." msgstr "Aktfikan tampilan publik pada setiap juri balot. Ditujukan untuk digunakan setelah turnamen." -#: options/preferences.py:751 +#: options/preferences.py msgid "Release ballots to public" msgstr "Rilis balot ke publik" -#: options/preferences.py:759 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" msgstr "Rilisan ini semua hasil untuk semua babak (termasuk babak diam dan istirahat). Lakukan itu hanya setelah turnamen selesai!" -#: options/preferences.py:760 +#: options/preferences.py msgid "Release all round results to public" msgstr "Rilis semua hasil ronde ke publik" -#: options/preferences.py:768 +#: options/preferences.py msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." msgstr "Aktifkan tampilan dari balot yang telah dikonfirmasi melalui URL pribadi. Ditujukan untuk digunakan setelah turnamen." -#: options/preferences.py:769 +#: options/preferences.py msgid "Release ballots through private URLs" msgstr "Rilis balot melalui URL pribadi" -#: options/preferences.py:776 options/templates/preferences_index.html:94 +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" msgstr "Data masukan" -#: options/preferences.py:782 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" msgstr "Apakah juri dapat menyerahkan sendiri balot nya, dan bagaimana cara melakukannya" -#: options/preferences.py:783 +#: options/preferences.py msgid "Ballot submissions from adjudicators" msgstr "Pengajuan balot dari juri" -#: options/preferences.py:787 options/preferences.py:801 +#: options/preferences.py msgid "Disabled (tab staff only)" msgstr "Nonaktfikan (tab khusus staff)" -#: options/preferences.py:788 options/preferences.py:802 +#: options/preferences.py msgid "Use private URLs" msgstr "Gunakan Privat URLs" -#: options/preferences.py:789 options/preferences.py:803 +#: options/preferences.py msgid "Use publicly accessible form" msgstr "Gunakan form yang mudah di akses publik" -#: options/preferences.py:796 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" msgstr "Apakah peserta dapat mengirimkan nilai mereka sendiri, dan bagaimana mereka melakukannya" -#: options/preferences.py:797 +#: options/preferences.py msgid "Feedback submissions from participants" msgstr "Pengajuan penilaian dari partisipan" -#: options/preferences.py:810 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" msgstr "Apabila ditandai, pengguna harus memasukkan kata sandi saat memasukkan penilaian juri / umpan balik dan balot melalui laman publik" -#: options/preferences.py:811 +#: options/preferences.py msgid "Require password for submission" msgstr "Membutuhkan password untuk pengajuan" -#: options/preferences.py:819 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" msgstr "Nilai kata sandi diperlukan untuk pengajuan publik, jika kata sandi diperlukan" -#: options/preferences.py:820 +#: options/preferences.py msgid "Password for public submission" msgstr "Password untuk pengajuan publik" -#: options/preferences.py:828 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" msgstr "Melompatinya pemeriksaan ganda dengan mengatur surat suara untuk dikonfirmasi secara otomatis" -#: options/preferences.py:829 +#: options/preferences.py msgid "Bypass double checking" msgstr "Melompati Pengecekan ganda" -#: options/preferences.py:837 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." msgstr "Wajibkan nilai untuk dimasukkan ulang sebagai bagian dari tahap konfirmasi (sebagai sistem pengecekan yang lebih ketat). Hanya berlaku untuk format BP." -#: options/preferences.py:838 +#: options/preferences.py msgid "Enforce blind confirmations" msgstr "Wajibkan konfirmasi buta" -#: options/preferences.py:846 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." msgstr "Apakah asisten dapat mengakses halaman yang dapat mengungkapkan pemasangan dan mosi sebelum rilis publik (halaman ini berguna untuk menampilkan gambar / mosi ke publik dan untuk mencetak balot)." -#: options/preferences.py:849 +#: options/preferences.py msgid "Assistant user access" msgstr "Akses asisten pengguna" -#: options/preferences.py:854 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" msgstr "Semua area (hasil entri, tampilan gambar, dan mosi)" -#: options/preferences.py:855 +#: options/preferences.py msgid "Just results entry and draw display" msgstr "Hanya hasil entri dan gambar ditampilkan" -#: options/preferences.py:856 +#: options/preferences.py msgid "Only results entry" msgstr "Hanya hasil masukan" -#: options/preferences.py:862 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." msgstr "Apakah peserta dapat check-in / out sendiri melalui URL pribadi mereka." -#: options/preferences.py:863 +#: options/preferences.py msgid "Participant self-checkin" msgstr "Partisipan check in sendiri" -#: options/preferences.py:871 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" msgstr "Jumlah waktu (dalam jam) sebelum acara check-in pembicara atau juri berakhir" -#: options/preferences.py:874 +#: options/preferences.py msgid "Check-In Window (People)" msgstr "Jendela Check-in (Orang)" -#: options/preferences.py:880 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" msgstr "Jumlah waktu (dalam jam) sebelum acara check-in ruangan berakhir" -#: options/preferences.py:883 +#: options/preferences.py msgid "Check-In Window (Rooms)" msgstr "Jendela Check-in (ruangan)" -#: options/preferences.py:889 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" msgstr "Apakah lembar nilai yang dicetak harus menampilkan perintah 'digit lingkaran' untuk membantu memeriksa tulisan tangan yang buruk" -#: options/preferences.py:890 +#: options/preferences.py msgid "Ballot Digit Checks" msgstr "Cek Digit balot" -#: options/preferences.py:898 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." msgstr "Lokasi untuk mengembalikan lembar nilai, dicetak pada surat suara yang telah dicetak sebelumnya. Set ke 'TBA' untuk menyembunyikan." -#: options/preferences.py:899 +#: options/preferences.py msgid "Score return location" msgstr "Lokasi Nilai Kembali" -#: options/preferences.py:907 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." msgstr "Lokasi untuk mengembalikan nilai, dicetak pada formulir nilai yang telah dicetak sebelumnya. Set ke 'TBA' untuk menyembunyikan." -#: options/preferences.py:908 +#: options/preferences.py msgid "Feedback return location" msgstr "Lokasi umpan balik kembali" -#: options/preferences.py:916 +#: options/preferences.py msgid "Lets debates have their status as postponed, as to not block draw generation." msgstr "Biarkan debat memiliki status mereka sebagai ditunda, untuk tidak memblokir pembuatan undian." -#: options/preferences.py:917 +#: options/preferences.py msgid "Enable postponements" msgstr "Aktifkan penundaan" -#: options/preferences.py:925 +#: options/preferences.py msgid "Have each voting adjudicator submit a separate ballot." msgstr "" -#: options/preferences.py:926 +#: options/preferences.py msgid "Individual voting ballots" msgstr "" -#: options/preferences.py:933 options/templates/preferences_index.html:99 +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" msgstr "Fitur umum" -#: options/preferences.py:939 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" msgstr "Mengaktifkan halaman publik yang mencantumkan semua peserta dalam turnamen" -#: options/preferences.py:940 +#: options/preferences.py msgid "Enable public view of participants list" msgstr "Aktifkan tampilan publik dari daftar peserta" -#: options/preferences.py:948 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" msgstr "Mengaktifkan halaman publik yang mencantumkan semua institusi di turnamen" -#: options/preferences.py:949 +#: options/preferences.py msgid "Enable public view of institutions list" msgstr "Aktifkan tampilan publik dari daftar institusi" -#: options/preferences.py:957 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" msgstr "Mengaktifkan statistik keragaman daftar halaman publik" -#: options/preferences.py:958 +#: options/preferences.py msgid "Enable public view of diversity info" msgstr "Aktifkan tampilan publik tentang info keragaman" -#: options/preferences.py:966 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." msgstr "Mengaktifkan halaman publik yang menampilkan status check in untuk individu, institusi, dan tim. Perhatikan bahwa laman ini bisa lambat saat digunakan di turnamen yang sangat besar." -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of the checkin statuses" msgstr "Aktifkan tampilan publik dari status check in" -#: options/preferences.py:977 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" msgstr "Jika daftar peserta diaktifkan, menampilkan kelayakan kategori istirahat di halaman itu" -#: options/preferences.py:978 +#: options/preferences.py msgid "Show break categories on participants page" msgstr "Tampilkan kategori istirahat di halaman peserta" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" msgstr "Mengaktifkan halaman publik yang mencantumkan sisi yang dialokasikan sebelumnya" -#: options/preferences.py:987 +#: options/preferences.py msgid "Show pre-allocated sides to public" msgstr "Show pre-allocated sides to public" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing released draws" msgstr "Mengaktifkan halaman publik yang menampilkan undian yang dirilis" -#: options/preferences.py:996 +#: options/preferences.py msgid "Enable public view of draw" msgstr "Aktifkan tampilan undian publik" -#: options/preferences.py:1000 +#: options/preferences.py msgid "Disabled" msgstr "Dinonaktifkan" -#: options/preferences.py:1001 +#: options/preferences.py msgid "Show a single page for the current round's draw" msgstr "Tunjukkan satu halaman untuk undian babak saat ini" -#: options/preferences.py:1002 +#: options/preferences.py msgid "Show individual pages for all released draws" msgstr "Tampilkan halaman individu untuk semua undian yang dirilis" -#: options/preferences.py:1009 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" msgstr "Mengaktifkan halaman publik yang menampilkan hasil putaran non-diam" -#: options/preferences.py:1010 +#: options/preferences.py msgid "Enable public view of results" msgstr "Aktifkan tampilan publik dari hasil" -#: options/preferences.py:1018 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" msgstr "Mengaktifkan halaman publik yang menampilkan gerakan yang telah dirilis secara eksplisit ke publik" -#: options/preferences.py:1019 +#: options/preferences.py msgid "Enable public view of motions" msgstr "Aktifkan tampilan publik tentang mosi" -#: options/preferences.py:1027 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" msgstr "Mengaktifkan halaman publik yang menampilkan klasemen tim, hanya menampilkan kemenangan (bukan nilai atau peringkat pembicara)" -#: options/preferences.py:1028 +#: options/preferences.py msgid "Enable public view of team standings" msgstr "Aktifkan tampilan publik klasemen tim" -#: options/preferences.py:1036 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" msgstr "Mengaktifkan halaman publik untuk setiap tim dan juri yang menampilkan catatan mereka" -#: options/preferences.py:1037 +#: options/preferences.py msgid "Enable public record pages" msgstr "Aktifkan halaman catatan publik" -#: options/preferences.py:1045 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." msgstr "Mengaktifkan halaman publik yang menampilkan jeda tim. Ditujukan untuk digunakan setelah pengumuman istirahat." -#: options/preferences.py:1046 +#: options/preferences.py msgid "Release team breaks to public" msgstr "Rilis istirahat tim ke publik" -#: options/preferences.py:1054 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." msgstr "Mengaktifkan halaman publik yang menampilkan juri yang sedang istirahat. Ditujukan untuk digunakan setelah pengumuman istirahat." -#: options/preferences.py:1055 +#: options/preferences.py msgid "Release adjudicators break to public" msgstr "Rilis juri yang istirahat ke publik" -#: options/preferences.py:1063 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" msgstr "Mengaktifkan halaman publik yang merinci siapa yang memiliki nilai yang belum dikirim" -#: options/preferences.py:1064 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" msgstr "Aktifkan tampilan publik dari nilai yang belum dikirim" -#: options/preferences.py:1072 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." msgstr "Daftar staf turnamen, untuk ditampilkan di halaman beranda turnamen. Biarkan kosong atau dengan teks default jika Anda tidak ingin menampilkan informasi ini." -#: options/preferences.py:1073 +#: options/preferences.py msgid "Tournament staff" msgstr "Staff turnamen" -#: options/preferences.py:1083 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" msgstr "Pesan yang akan ditampilkan di halaman beranda turnamen" -#: options/preferences.py:1084 +#: options/preferences.py msgid "Welcome message" msgstr "Pesan selamat datang" -#: options/preferences.py:1093 options/templates/preferences_index.html:104 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" msgstr "Opsi UI" -#: options/preferences.py:1099 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" msgstr "Jika menampilkan hasil ke publik, tunjukkan juri pemisah di dalamnya" -#: options/preferences.py:1100 +#: options/preferences.py msgid "Show splitting adjudicators" msgstr "Tunjukkan juri pemisah" -#: options/preferences.py:1108 +#: options/preferences.py msgid "Whether and how to use code names for teams" msgstr "Apakah dan bagaimana menggunakan nama kode untuk tim" -#: options/preferences.py:1109 +#: options/preferences.py msgid "Team code names" msgstr "Code nama tim" -#: options/preferences.py:1114 +#: options/preferences.py msgid "Do not use code names" msgstr "Jangan mengunakan kode nama" -#: options/preferences.py:1115 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" msgstr "Gunakan nama asli di mana saja, dan tampilkan kode nama di keterangan alat" -#: options/preferences.py:1116 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" msgstr "Gunakan kode nama untuk publik; nama asli dengan kode nama di keterangan alat untuk admin" -#: options/preferences.py:1118 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" msgstr "Gunakan kode nama untuk publik; kode nama dengan nama asli di keterangan alat untuk admin" -#: options/preferences.py:1120 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" msgstr "Gunakan kode nama di mana saja; jangan gunakan tooltips (nama asli ditampilkan di beberapa tampilan admin)" -#: options/preferences.py:1126 +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" msgstr "Tampilkan emoji tim di antarmuka publik dan admin" -#: options/preferences.py:1127 +#: options/preferences.py msgid "Show emoji" msgstr "Tampilkan Emoji" -#: options/preferences.py:1135 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" msgstr "Dalam tabel daftar tim, tambahkan kolom yang menunjukkan institusi mereka" -#: options/preferences.py:1136 +#: options/preferences.py msgid "Show team institutions" msgstr "Tunjukkan institusi tim" -#: options/preferences.py:1144 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" msgstr "Sembunyikan institusi juri di halaman publik dan pada balot yang dicetak" -#: options/preferences.py:1145 +#: options/preferences.py msgid "Show adjudicator institutions" msgstr "Tampilkan lembaga juri" -#: options/preferences.py:1153 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" msgstr "Mengaktifkan elemen hover di setiap nama tim yang menunjukkan pembicara tim tersebut" -#: options/preferences.py:1154 +#: options/preferences.py msgid "Show speakers in draw" msgstr "Tunjukkan pembicara dalam pengundian" -#: options/preferences.py:1161 options/templates/preferences_index.html:109 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" msgstr "Notifikasi" -#: options/preferences.py:1167 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "Nama penyelenggara yang bertugas mengelola email (jika ada balasan)" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Reply-to name" msgstr "Nama balas-ke" -#: options/preferences.py:1176 +#: options/preferences.py msgid "The email address for handling replies" msgstr "Alamat email untuk menangani balasan" -#: options/preferences.py:1177 +#: options/preferences.py msgid "Reply-to address" msgstr "Alamat balas-ke" -#: options/preferences.py:1185 +#: options/preferences.py msgid "A secret key to accept email status events" msgstr "Kunci rahasia untuk menerima peristiwa status email" -#: options/preferences.py:1186 +#: options/preferences.py msgid "Email status secret key" msgstr "Kunci rahasia status email" -#: options/preferences.py:1196 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "Memungkinkan salinan balot juri untuk secara otomatis dikirim kepada mereka (melalui email) setelah mereka dimasukkan di Tabbycat (untuk konfirmasi atau pemeriksaan)" -#: options/preferences.py:1197 +#: options/preferences.py msgid "Ballot receipts" msgstr "Tanda terima balot" -#: options/preferences.py:1205 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "Baris subjek untuk email yang dikirim ke juri dengan balot yang mereka kirimkan. Gunakan '{{DEBATE}}' sebagai placeholder untuk debat terkait" -#: options/preferences.py:1207 +#: options/preferences.py msgid "Ballot receipt subject line" msgstr "Baris subjek tanda terima balot" -#: options/preferences.py:1215 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "Badan pesan untuk email yang dikirim ke juri dengan balot yang mereka kirimkan." -#: options/preferences.py:1216 +#: options/preferences.py msgid "Ballot receipt message" msgstr "Pesan tanda terima balot" -#: options/preferences.py:1232 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." msgstr "Baris subjek untuk email yang dikirim ke pembicara dengan poin tim mereka." -#: options/preferences.py:1233 +#: options/preferences.py msgid "Team points subject line" msgstr "Baris subjek poin tim" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." msgstr "Badan Pesan untuk email yang dikirim ke pembicara dengan poin tim mereka." -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team points message" msgstr "Pesan poin tim" -#: options/preferences.py:1250 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." msgstr "Baris subjek untuk email yang dikirim ke juri dengan tugas mereka." -#: options/preferences.py:1251 +#: options/preferences.py msgid "Adjudicator draw subject line" msgstr "Baris subjek draw juri" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." msgstr "Badan pesan untuk email yang dikirim ke juri dengan tugas mereka." -#: options/preferences.py:1259 +#: options/preferences.py msgid "Adjudicator draw message" msgstr "Pesan draw juri" -#: options/preferences.py:1268 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." msgstr "Baris subjek untuk email yang dikirim ke tim dengan undian mereka." -#: options/preferences.py:1269 +#: options/preferences.py msgid "Team draw subject line" msgstr "Baris subjek poin tim" -#: options/preferences.py:1276 options/preferences.py:1294 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." msgstr "Badan pesan untuk email yang dikirim ke peserta dengan URL pribadinya." -#: options/preferences.py:1277 options/preferences.py:1295 +#: options/preferences.py msgid "Private URL notification message" msgstr "Pesan pemberitahuan URL pribadi" -#: options/preferences.py:1286 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." msgstr "Baris subjek untuk email yang dikirim ke peserta dengan URL pribadinya." -#: options/preferences.py:1287 +#: options/preferences.py msgid "Private URL notification subject line" msgstr "Baris subjek pemberitahuan URL pribadi" -#: options/preferences.py:1308 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." msgstr "Baris subjek untuk email yang dikirim ke peserta saat rilis mosi." -#: options/preferences.py:1309 +#: options/preferences.py msgid "Motion release notification subject line" msgstr "Baris subjek pemberitahuan pelepasan mosi" -#: options/preferences.py:1316 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." msgstr "Badan pesan untuk email yang dikirim ke peserta tentang rilis mosi." -#: options/preferences.py:1317 +#: options/preferences.py msgid "Motion release notification message" msgstr "Pesan pemberitahuan perilisan mosi" -#: options/preferences.py:1325 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." msgstr "Baris subjek untuk email yang dikirim ke peserta yang memberi tahu mereka tentang pendaftaran tim mereka." -#: options/preferences.py:1326 +#: options/preferences.py msgid "Team registration notification subject line" msgstr "Baris subjek pemberitahuan pendaftaran tim" -#: options/preferences.py:1333 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." msgstr "The message body for emails sent to participants informing them of their team registration." -#: options/preferences.py:1334 +#: options/preferences.py msgid "Team registration notification message" msgstr "Notifikasi pendaftaran tim" -#: options/preferences.py:1343 options/templates/preferences_index.html:78 +#: options/preferences.py options/templates/preferences_index.html msgid "Motions" msgstr "Mosi" -#: options/preferences.py:1349 +#: options/preferences.py msgid "If checked, ballots require a motion to be entered" msgstr "Apabila ditandai, sistem mewajibkan adanya mosi pada balot" -#: options/preferences.py:1350 +#: options/preferences.py msgid "Enable motions" msgstr "Aktifkan mosi" -#: options/preferences.py:1358 +#: options/preferences.py msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" msgstr "Apakah lembar nilai yang dicetak harus menyembunyikan teks mosi (meskipun telah dimasukkan dan dilepaskan)" -#: options/preferences.py:1359 +#: options/preferences.py msgid "Ballot Hide Motions" msgstr "Sembunyikan mosi balot" -#: options/preferences.py:1367 +#: options/preferences.py msgid "Enables the motion veto field on ballots, to track veto statistics" msgstr "Mengaktifkan bidang veto mosi pada balot, untuk melacak statistik veto" -#: options/preferences.py:1368 +#: options/preferences.py msgid "Motion vetoes" msgstr "Mosi diveto" -#: options/preferences.py:1376 +#: options/preferences.py msgid "If showing results to public, show which motions were selected in the record" msgstr "Jika menunjukan hasil ke publik, menunjukkan mosi mana yang dipilih dalam rekam jejak" -#: options/preferences.py:1377 +#: options/preferences.py msgid "Show motions in results" msgstr "Tunjukan mosi dalam hasil" -#: options/preferences.py:1385 +#: options/preferences.py msgid "Order in which are listed by round in the public view" msgstr "Urutan yang di daftarkan berdasarkan ronde pada tampilan publik" -#: options/preferences.py:1386 +#: options/preferences.py msgid "Order to display motions" msgstr "Urutan untuk tampilan mosi" -#: options/preferences.py:1390 +#: options/preferences.py msgid "Earliest round first" msgstr "Ronde paling awal pertama" -#: options/preferences.py:1391 +#: options/preferences.py msgid "Latest round first" msgstr "Ronde paling terakhir pertama" -#: options/preferences.py:1398 +#: options/preferences.py msgid "Whether motions can be reused from one round to another." msgstr "Apakah mosi dapat digunakan kembali dari satu putaran ke putaran lainnya." -#: options/preferences.py:1399 +#: options/preferences.py msgid "Allow motion reuse" msgstr "Memperbolehkan mosi sebelumnya" -#: options/preferences.py:1406 options/templates/preferences_index.html:114 +#: options/preferences.py options/templates/preferences_index.html msgid "Global Settings" msgstr "Pengaturan global" -#: options/preferences.py:1412 +#: options/preferences.py msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." msgstr "Memungkinkan aplikasi eksternal untuk mengakses situs melalui antarmuka khusus, sesuai dengan pengaturan informasi publik." -#: options/preferences.py:1413 +#: options/preferences.py msgid "Enable API access" msgstr "Aktifkan akases API" -#: options/preferences.py:1421 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1422 +#: options/preferences.py msgid "Assistant account creation key" msgstr "" -#: options/preferences.py:1431 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1433 +#: options/preferences.py msgid "Administrator account creation key" msgstr "" -#: options/presets.py:32 options/presets.py:324 +#: options/presets.py msgid "Public Information Options" msgstr "Opsi informasi public" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" msgstr "Aktifkan publik informasi" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" msgstr "Nonaktfikan informasi publik" -#: options/presets.py:74 +#: options/presets.py msgid "Australs Rules" msgstr "Aturan australs" -#: options/presets.py:75 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." msgstr "3 vs 3 dengan balasan, mosi yang dipilih, Brackets tengah, satu-atas-satu-ke-bawah. Sesuai dengan aturan AIDA." -#: options/presets.py:114 +#: options/presets.py msgid "British Parliamentary Rules" msgstr "Aturan parlemen inggris" -#: options/presets.py:115 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." msgstr "2 vs 2 vs 2 vs 2. Sesuai dengan aturan WUDC." -#: options/presets.py:157 +#: options/presets.py msgid "Canadian Parliamentary Rules" msgstr "Aturan parlemen canada" -#: options/presets.py:159 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." msgstr "2 vs 2 dengan balasan (tanpa nilai) dan POI. Mungkin memerlukan konfigurasi tambahan tergantung pada variasi regional." -#: options/presets.py:182 +#: options/presets.py msgid "Australian Easters Rules" msgstr "Aturan Easters Australia" -#: options/presets.py:184 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." msgstr "3 vs 3 tanpa balasan, atur mosi, pemula, gelembung menengah, satu-atas-satu-ke bawah. Sesuai dengan aturan AIDA." -#: options/presets.py:202 +#: options/presets.py msgid "2 vs 2 Impromptu" msgstr "2 vs 2 Dadakan" -#: options/presets.py:204 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." msgstr "2 vs 2 dengan balasan, mosi yang dipilih, sisi yang dipilih, dan status pemula." -#: options/presets.py:229 +#: options/presets.py msgid "3 vs 3 Prepared" msgstr "3 vs 3 disiapkan" -#: options/presets.py:231 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." msgstr "3 vs 3 dengan sisi yang telah dialokasikan sebelumnya, sisi dan gerakan yang ditampilkan secara publik, dan status pemula." -#: options/presets.py:258 +#: options/presets.py msgid "UADC Rules" msgstr "Aturan UADC" -#: options/presets.py:260 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." msgstr "3 vs 3 dengan balasan, mosi yang dipilih, dan semua juri dapat menerima umpan balik dari tim." -#: options/presets.py:296 +#: options/presets.py msgid "WSDC Rules" msgstr "Aturan WSDC" -#: options/presets.py:298 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "3 vs 3 dengan balasan, gerakan yang dipilih, label sisi prop / opp, dan semua juri dapat menerima umpan balik dari tim." -#: options/presets.py:326 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "Untuk turnamen yang diselenggarakan secara online: ini mengaturnya sehingga orang-orang dapat mengakses undian dan informasi lain yang umumnya berguna melalui situs tab." -#: options/presets.py:338 +#: options/presets.py msgid "Tab Release Options" msgstr "Rilis tab opsi" -#: options/presets.py:340 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" msgstr "Untuk saat tab siap dirilis. Ini akan secara terbuka menampilkan hasil dari semua putaran, tab tim, tab pembicara, dll" -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html msgid "Configuration" msgstr "Konfigurasi" -#: options/templates/preferences_index.html:11 +#: options/templates/preferences_index.html #, python-format msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." msgstr "Aturan undian Anda menentukan empat tim per debat, tetapi pengaturan balot Anda menentukan bahwa juri mengirimkan balot independen. Pengaturan ini tidak kompatibel dan akan menyebabkan entri hasil crash . Anda harus kembali ke bagian Aturan Debat dan mengubah konfigurasi Anda untuk menggunakan balot konsensus." -#: options/templates/preferences_index.html:24 +#: options/templates/preferences_index.html #, python-format msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." msgstr "Anda tidak menggunakan alokasi sisi yang dialokasikan sebelumnya namun metode resolusi tanda kurung ganjil menggunakan sisi yang dialokasikan sebelumnya. Ini akan menyebabkan kegagalan pembuatan undian. Anda perlu mengedit resolusi braket ganjil, menghindari Menengah 1 dan Menengah 2 di Bagian aturan pengundian." -#: options/templates/preferences_index.html:35 +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." msgstr "Anda berdua mengaktifkan nama kode tim, dan institusi tim ditampilkan di halaman publik. Jika tujuan Anda dalam mengaktifkan nama kode tim adalah untuk mengaburkan institusi tim, ini mungkin mengalahkan tujuan nama kode. Anda dapat mengedit pengaturan ini di bagian Opsi UI ." -#: options/templates/preferences_index.html:54 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" msgstr "Rentang nilai yang dapat diberikan untuk pidato, balasan, dan tim" -#: options/templates/preferences_index.html:59 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" msgstr "Bagaimana tim dipasangkan dalam undian dan bagaimana juri dialokasikan secara otomatis" -#: options/templates/preferences_index.html:64 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" msgstr "Berapa banyak pidato dalam sebuah debat, bagaimana mosi diputuskan, dan apakah pidato balasan digunakan" -#: options/templates/preferences_index.html:69 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" msgstr "Bagaimana tim dan pembicara diberi peringkat di tab yang dirilis" -#: options/templates/preferences_index.html:74 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" msgstr "Bagaimana peringkat juri dan siapa yang dapat mengirimkan umpan balik" -#: options/templates/preferences_index.html:79 +#: options/templates/preferences_index.html msgid "How and where are motions used" msgstr "Bagaimana dan dimana mosi digunakan" -#: options/templates/preferences_index.html:90 +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" msgstr "Kapan merilis tab publik dibuat terlihat dan data apa yang ditampilkan" -#: options/templates/preferences_index.html:95 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" msgstr "Bagaimana balot, nilai, dan check-in dimasukkan, termasuk opsi pengiriman online" -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" msgstr "Informasi apa yang ditampilkan situs pada halaman yang dapat diakses publik" -#: options/templates/preferences_index.html:105 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" msgstr "Perubahan kecil dalam informasi apa yang disajikan oleh antarmuka" -#: options/templates/preferences_index.html:110 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" msgstr "Mengonfigurasi pengiriman pemberitahuan, seperti email yang mengonfirmasi pengiriman balot atau poin tim" -#: options/templates/preferences_index.html:115 +#: options/templates/preferences_index.html msgid "Settings which can affect all tournaments on the site" msgstr "Pengaturan yang dapat mempengaruhi semua turnamen di situs" -#: options/templates/preferences_index.html:127 +#: options/templates/preferences_index.html msgid "Manually Set Current Round" msgstr "Set ronde sekarang secara manual" -#: options/templates/preferences_index.html:128 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." msgstr "Tabbycat akan meminta Anda untuk memajukan babak saat ini di halaman hasil setiap babak. Namun, jika ada keadaan khusus yang mengharuskan Anda untuk mengesampingkan ini dan set putaran saat ini ke putaran lain, gunakan halaman ini." -#: options/templates/preferences_index.html:132 -msgid "Set Round Weights" +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: options/templates/preferences_index.html:133 +#: options/templates/preferences_index.html msgid "Rounds can be weighted so that certain rounds are worth more team points." msgstr "" -#: options/templates/preferences_index.html:140 +#: options/templates/preferences_index.html msgid "Presets" msgstr "Preset" -#: options/templates/preferences_index.html:141 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." msgstr "Ini mengubah pengaturan umum untuk aturan dasar; periksa kembali dokumentasi kami untuk memastikan kebenarannya untuk turnamen Anda. Setiap tautan akan menampilkan pengaturan apa yang diubah sebelum menerapkannya." -#: options/templates/preferences_index.html:152 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" msgstr "Menerapkan %(preset)s" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" msgstr "Preset Diterapkan: %(preset_title)s" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" msgstr "Kembali ke konfigurasi" -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" msgstr "Preferensi yang diubah" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" msgstr "Konfirmasi Presets: %(preset_title)s" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" msgstr "Preferensi yang tidak akan berubah" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" msgstr "Preferensi yang akan berubah" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" msgstr "Terapkan Preset: %(preset_title)s" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" msgstr "Konfigurasi: %(section)s" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" msgstr "Edit konfigurasi: %(section)s" -#: options/views.py:65 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." msgstr "Opsi turnamen (%(section)s) disimpan." -#: options/views.py:111 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." msgstr "Opsi turnamen disimpan sesuai dengan %(name)s." diff --git a/tabbycat/participants/locale/id/LC_MESSAGES/django.po b/tabbycat/participants/locale/id/LC_MESSAGES/django.po index 569b9f8fbf9..768385f1bb9 100644 --- a/tabbycat/participants/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -18,954 +18,941 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 942\n" -#: participants/admin.py:96 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" msgstr "Tim ini tidak dapat berada pada kategori break dari turnamen yang berbeda. Harap hapus %(category)s" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." msgstr[0] "Sebanyak %(count)d pembicara sudah menghapus kunci URL mereka." -#: participants/admin.py:152 participants/admin.py:233 -msgid "Delete URL key" -msgstr "Hapus kunci URL" +#: participants/admin.py +msgid "Reset emoji" +msgstr "Reset emoji" -#: participants/admin.py:160 +#: participants/admin.py #, python-format msgid "%(count)d team had their emoji reset." msgid_plural "%(count)d teams had their emojis reset." msgstr[0] "Sebanyak %(count)d tim me-reset emoji mereka." -#: participants/admin.py:164 -msgid "Reset emoji" -msgstr "Reset emoji" +#: participants/admin.py +msgid "Reset code name" +msgstr "Reset kode nama" -#: participants/admin.py:170 +#: participants/admin.py #, python-format msgid "%(count)d team had their code name reset." msgid_plural "%(count)d teams had their code names reset." msgstr[0] "Sebanyak %(count)d tim me-reset kode nama mereka." -#: participants/admin.py:174 -msgid "Reset code name" -msgstr "Reset kode nama" - -#: participants/admin.py:228 +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." msgstr[0] "Sebanyak %(count)d juri sudah menghapus kunci URL mereka." -#: participants/apps.py:7 participants/views.py:41 +#: participants/apps.py participants/views.py msgid "Participants" msgstr "Partisipan" -#: participants/models.py:21 participants/models.py:37 -#: participants/models.py:66 participants/models.py:96 +#: participants/models.py msgid "name" msgstr "nama" -#: participants/models.py:24 participants/models.py:45 +#: participants/models.py msgid "region" msgstr "wilayah" -#: participants/models.py:25 +#: participants/models.py msgid "regions" msgstr "wilayah" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:39 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" msgstr "Nama panjang dari insitusi, seperti \"University of Cambridge\", \"Victoria University of Wellington\"" -#: participants/models.py:41 +#: participants/models.py msgid "code" msgstr "kode" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:43 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" msgstr "Nama institusi secara pendek yang biasa digunakan, seperti \"Cambridge\", \"Vic Wellington\"" -#: participants/models.py:55 participants/models.py:155 -#: participants/models.py:353 +#: participants/models.py msgid "institution" msgstr "institusi" -#: participants/models.py:56 +#: participants/models.py msgid "institutions" msgstr "institusi" -#: participants/models.py:64 participants/models.py:157 -#: participants/models.py:356 +#: participants/models.py msgid "tournament" msgstr "turnamen" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:68 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" msgstr "Nama untuk ditampilkan, misal, \"ESL\"" -#: participants/models.py:70 +#: participants/models.py msgid "slug" msgstr "slug" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:72 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" msgstr "Slug untuk URL, misal, \"esl\"" -#: participants/models.py:74 +#: participants/models.py msgid "sequence number" msgstr "nomor urut" -#: participants/models.py:75 +#: participants/models.py msgid "The order in which the categories are displayed" msgstr "Urutan kategori ditampilkan" -#: participants/models.py:77 +#: participants/models.py msgid "limit" msgstr "batas" -#: participants/models.py:78 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" msgstr "Maksimal sejumlah pembicara ini akan muncul pada tab publik untuk kategori ini, atau gunakan 0 untuk tidak dibatasi" -#: participants/models.py:80 +#: participants/models.py msgid "public" msgstr "publik" -#: participants/models.py:81 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" msgstr "Apabila ditandai, kategori ini akan ditampilkan pada publik pada bagian tabulasi pembicara per kategori" -#: participants/models.py:87 +#: participants/models.py msgid "speaker category" msgstr "kategori pembicara" -#: participants/models.py:88 participants/models.py:330 +#: participants/models.py msgid "speaker categories" msgstr "kategori pembicara" -#: participants/models.py:98 +#: participants/models.py msgid "email address" msgstr "" -#: participants/models.py:100 +#: participants/models.py msgid "phone" msgstr "nomor telepon" -#: participants/models.py:102 +#: participants/models.py msgid "anonymous" msgstr "anonim" -#: participants/models.py:103 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" msgstr "Nama dan tim para peserta anonim akan disunting pada rilis tab publik" -#: participants/models.py:106 +#: participants/models.py +msgid "code name" +msgstr "kode nama" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py msgid "URL key" msgstr "Kunci URL" -#: participants/models.py:111 +#: participants/models.py msgid "male" msgstr "pria" -#: participants/models.py:112 +#: participants/models.py msgid "female" msgstr "wanita" -#: participants/models.py:113 +#: participants/models.py msgid "other" msgstr "lainnya" -#: participants/models.py:115 +#: participants/models.py msgid "gender" msgstr "jenis kelamin" -#: participants/models.py:116 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" msgstr "Jenis kelamin akan ditampilkan pada alokasi tampilan untuk juri, dan tidak di tempat lain" -#: participants/models.py:118 +#: participants/models.py msgid "pronoun" msgstr "kata ganti" -#: participants/models.py:119 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" msgstr "Jika melakukan cetak kertas suara menggunakan Tabbycat, ada pilihan untuk pracetak kata ganti" -#: participants/models.py:122 +#: participants/models.py msgid "person" msgstr "orang" -#: participants/models.py:123 +#: participants/models.py msgid "persons" msgstr "orang" -#: participants/models.py:138 +#: participants/models.py msgid "full name/suffix" msgstr "nama lengkap/nama belakang" -#: participants/models.py:139 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" msgstr "Harap tidak menyertakan nama institusi (lihat \"penggunaan prefiks institusional\" di bawah)" -#: participants/models.py:141 +#: participants/models.py msgid "short name/suffix" msgstr "nama pendek/nama belakang" -#: participants/models.py:142 +#: participants/models.py msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" msgstr "Nama yang diterjemahkan yang ditampilkan dalam undian, tanpa termasuk nama institusi. (Ini dibuat secara otomatis.)" -#: participants/models.py:144 -msgid "code name" -msgstr "kode nama" - -#: participants/models.py:145 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" msgstr "Nama yang digunakan untuk menyamarkan identitas institusi pada halaman publik" -#: participants/models.py:148 +#: participants/models.py msgid "short name" msgstr "nama pendek" -#: participants/models.py:149 +#: participants/models.py msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" msgstr "Nama yang diterjemahkan yang ditampilkan dalam undian, termasuk nama institusi. (Ini dibuat secara otomatis.)" -#: participants/models.py:151 +#: participants/models.py msgid "long name" msgstr "nama panjang" -#: participants/models.py:152 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" msgstr "Nama lengkap dari tim, termasuk nama institusi. (Ini dibuat secara otomatis.)" -#: participants/models.py:159 +#: participants/models.py msgid "Uses institutional prefix" msgstr "Menggunakan nama depan institusi" -#: participants/models.py:160 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" msgstr "Jika ditandai, tim yang dipanggil \"1\" dari Victoria akan tertulis sebagai \"Victoria 1\"" -#: participants/models.py:162 +#: participants/models.py msgid "break categories" msgstr "kategori break" -#: participants/models.py:167 participants/models.py:364 +#: participants/models.py msgid "institution conflicts" msgstr "konflik institusi" -#: participants/models.py:178 +#: participants/models.py msgid "none" msgstr "tidak ada" -#: participants/models.py:179 +#: participants/models.py msgid "swing" msgstr "swing" -#: participants/models.py:180 +#: participants/models.py msgid "composite" msgstr "komposit" -#: participants/models.py:181 +#: participants/models.py msgid "bye" msgstr "" -#: participants/models.py:184 +#: participants/models.py msgid "type" msgstr "tipe" -#: participants/models.py:188 +#: participants/models.py msgid "emoji" msgstr "emoji" -#: participants/models.py:202 participants/models.py:328 +#: participants/models.py msgid "team" msgstr "tim" -#: participants/models.py:203 +#: participants/models.py msgid "teams" msgstr "tim" -#: participants/models.py:311 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." msgstr "Tim harus memiliki institusi jika mereka menggunakan nama depan institusi." -#: participants/models.py:313 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." msgstr "Tim harus memiliki nama lengkap jika mereka tidak menggunakan nama depan institusi." -#: participants/models.py:315 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." msgstr "Tim harus memiliki nama pendek jika mereka tidak menggunakan nama depan institusi." -#: participants/models.py:333 +#: participants/models.py msgid "speaker" msgstr "pembicara" -#: participants/models.py:334 +#: participants/models.py msgid "speakers" msgstr "pembicara" -#: participants/models.py:357 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" msgstr "Juri yang tidak terdaftar pada turnamen apapun dapat digunakan antar turnamen" -#: participants/models.py:359 +#: participants/models.py msgid "base score" msgstr "nilai basis" -#: participants/models.py:368 +#: participants/models.py msgid "team conflicts" msgstr "konflik tim" -#: participants/models.py:372 +#: participants/models.py msgid "adjudicator conflicts" msgstr "konflik juri" -#: participants/models.py:375 +#: participants/models.py msgid "always trainee" msgstr "selalu trainee" -#: participants/models.py:376 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" msgstr "Apabila ditandai, draw tidak akan mengalokasikan juri ini untuk mendapatkan hak suara, berapapun nilai yang didapat" -#: participants/models.py:378 +#: participants/models.py msgid "breaking" msgstr "breaking" -#: participants/models.py:380 +#: participants/models.py msgid "independent" msgstr "independen" -#: participants/models.py:382 +#: participants/models.py msgid "adjudication core" msgstr "juri inti" -#: participants/models.py:391 +#: participants/models.py msgid "adjudicator" msgstr "juri debat" -#: participants/models.py:392 +#: participants/models.py msgid "adjudicators" msgstr "juri" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" msgstr "Poin sesudah debat ini" -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" msgstr "Jumlah menang sesudah debat ini" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" msgstr "Nilai Pembicara
    (sesuai urutan giliran berbicara)" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" msgstr "Berbicara" -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" msgstr "Tentang %(name)s" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" msgstr "Juri independen" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" msgstr "Anggota tim penjurian inti" -#: participants/templates/adjudicator_registration_card.html:27 -#: participants/templates/team_registration_card.html:89 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" msgstr "Institusi:" -#: participants/templates/adjudicator_registration_card.html:31 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" msgstr "Tidak terafiliasi" -#: participants/templates/adjudicator_registration_card.html:36 -#: participants/templates/team_registration_card.html:98 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "Wilayah:" -#: participants/templates/adjudicator_registration_card.html:43 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." msgstr "Afiliasi untuk institusi para juri tidak bersifat publik pada turnamen ini." -#: participants/templates/adjudicator_registration_card.html:50 -#: participants/templates/team_registration_card.html:109 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" msgstr "Konflik Institusi:" -#: participants/templates/adjudicator_registration_card.html:52 -#: participants/templates/team_registration_card.html:111 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr "; " -#: participants/templates/adjudicator_registration_card.html:54 -#: participants/templates/adjudicator_registration_card.html:62 -#: participants/templates/adjudicator_registration_card.html:74 -#: participants/templates/adjudicator_registration_card.html:84 -#: participants/templates/team_registration_card.html:58 -#: participants/templates/team_registration_card.html:70 -#: participants/templates/team_registration_card.html:79 -#: participants/templates/team_registration_card.html:113 -#: participants/templates/team_registration_card.html:122 -#: participants/templates/team_registration_card.html:133 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" msgstr "Tidak ada" -#: participants/templates/adjudicator_registration_card.html:58 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" msgstr "Konflik Tim:" -#: participants/templates/adjudicator_registration_card.html:60 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:71 -#: participants/templates/adjudicator_registration_card.html:82 -#: participants/templates/team_registration_card.html:56 -#: participants/templates/team_registration_card.html:68 -#: participants/templates/team_registration_card.html:77 -#: participants/templates/team_registration_card.html:120 -#: participants/templates/team_registration_card.html:131 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr ", " -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/team_registration_card.html:118 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" msgstr "Konflik Juri:" -#: participants/templates/adjudicator_registration_card.html:80 -#: participants/templates/team_registration_card.html:129 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" msgstr "Batasan-batasan Ruangan:" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "Jangan lupa: Jika juri ini memiliki konflik dengan institusinya, anda sebaiknya menambahkan konflik ini sekarang di bagian tab Konflik Juri dengan institusi, karena konflik ini tidak dibuat secara otomatis ketika menggunakan formulir ini." -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." msgstr "Peringatan:Jika ada objek \"tim debat\" pada daftar di atas, mungkin sebaiknya anda jangan menghapus objek %(object_name)s." -#: participants/templates/admin/participants/delete_debateteam_warning.html:14 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." msgstr "Peringatan:Jika ada objek \"tim debat\" pada daftar di atas, mungkin sebaiknya anda jangan menghapus objek %(objects_name)s yang sudah dipilih." #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:21 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." msgstr "Terutama pada kasus jika ada tim yang akan dihapus ternyata sudah berpartisipasi pada sebuah debat. Jika tim tersebut sudah memiliki hasil yang tercatat, menghapus tim tersebut juga akan menghapus hasil tersebut, dimana biasanya juga menghapus tab yang ada, bahkan jika anda sudah tidak membutuhkan lagi hasil tersebut. Jika sebuah tim sudah mengikuti pertandingan dan sedang menunggu hasil dari turnamen tersebut, anda sebaiknya tidak menghapus tim tersebut. Anda cukup menandai tim tersebut tidak aktif pada bagian \"Ketersediaan\" di area admin Tabbycat." -#: participants/templates/admin/participants/delete_debateteam_warning.html:33 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." msgstr "Mohon diingat bahwa menghapus sebuah institusi juga akan menghapus seluruh tim dari institusi tersebut." -#: participants/templates/admin/participants/delete_debateteam_warning.html:41 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "Jika anda merasa yakin untuk menghapus objek %(object_name)s, harap hapus objek yang berada di atasnya terlebih dahulu, dan pastikan untuk memperhatikan peringatan yang akan anda lihat pada halaman objek \"tim debat\" sebelum melanjutkan." -#: participants/templates/admin/participants/delete_debateteam_warning.html:47 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "Jika anda merasa yakin untuk menghapus objek %(objects_name)s ini, harap hapus objek yang berada di atasnya terlebih dahulu, dan pastikan untuk memperhatikan peringatan yang akan anda lihat pada halaman objek \"tim debat\" sebelum melanjutkan." -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "Jangan lupa: Jika timini memiliki konflik dengan institusinya, anda sebaiknya menambahkan konflik ini sekarang di bagian tab Konflik Tim dengan institusi, karena konflik ini tidak dibuat secara otomatis ketika menggunakan formulir ini." -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" msgstr "Ronde akan dimulai pada %(start_time)s" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "Tim:" -#: participants/templates/current_round/common.html:28 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "Juri:" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" msgstr "Ⓒ" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" msgstr "Ⓣ" -#: participants/templates/current_round/common.html:44 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." msgstr "Tidak ada panelis atau asisten yang didaftarkan pada debat ini." -#: participants/templates/current_round/common.html:54 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." msgstr "Mosi tidak dirilis ke publik." -#: participants/templates/current_round/common.html:57 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "Mosi:" -#: participants/templates/current_round/common.html:61 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "Mosi %(seq)s:" -#: participants/templates/current_round/common.html:69 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." msgstr "Mosi untuk ronde ini belum dirilis." -#: participants/templates/current_round/round_adj.html:14 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s adalah ketua juri yang sedang menjadi juri pada %(aff)s vs%(neg)s pada tautan %(room)s." -#: participants/templates/current_round/round_adj.html:18 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s adalah ketua juriyang sedang menjadi juri %(aff)s vs %(neg)s di %(room)s." -#: participants/templates/current_round/round_adj.html:24 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Anda adalah ketua juri yang sedang menjadi juri %(aff)s vs %(neg)s pada tautan %(room)s." -#: participants/templates/current_round/round_adj.html:28 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Anda adalah ketua juri yang sedang menjadi juri %(aff)s vs %(neg)s di %(room)s." -#: participants/templates/current_round/round_adj.html:36 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Juri %(adjudicator)s adalah tipe juri %(type)s yang sedang menjadi juri %(aff)s vs %(neg)s di tautan %(room)s." -#: participants/templates/current_round/round_adj.html:40 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Juri %(adjudicator)s adalah tipe juri %(type)s yang sedang menjadi juri %(aff)s vs %(neg)s di \n" " %(room)s." -#: participants/templates/current_round/round_adj.html:46 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Anda adalah tipe juri %(type)s yang sedang menjadi juri %(aff)s vs%(neg)s di tautan %(room)s." -#: participants/templates/current_round/round_adj.html:50 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Anda adalah tipe juri %(type)s yang sedang menjadi juri %(aff)s vs%(neg)s di %(room)s." -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s sedang menjadi juri pada debat %(aff)s vs%(neg)s di %(room)s." -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s sedang menjadi juri pada debat %(aff)s vs %(neg)s di %(room)s." -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Anda sedang menjadi juri pada debat %(aff)s vs %(neg)s di %(room)s." -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Anda sedang menjadi juri pada debat %(aff)s vs %(neg)s di %(room)s." -#: participants/templates/current_round/round_adj.html:85 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "%(adjudicator)s adalah juri ketua yang sedang menjadi juri di tautan %(room)s." -#: participants/templates/current_round/round_adj.html:89 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "Juri %(adjudicator)s adalah juri ketua yang sedang menjadi juri di %(room)s." -#: participants/templates/current_round/round_adj.html:95 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "Anda adalah juri ketua yang sedang menjadi juri di tautan %(room)s." -#: participants/templates/current_round/round_adj.html:99 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "Anda adalah juri ketua yang menjadi juri di %(room)s." -#: participants/templates/current_round/round_adj.html:107 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "Juri %(adjudicator)s adalah tipe juri %(type)s yang sedang menjadi juri di tautan %(room)s." -#: participants/templates/current_round/round_adj.html:111 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "Juri %(adjudicator)s adalah tipe juri %(type)s yang sedang menjadi juri di %(room)s." -#: participants/templates/current_round/round_adj.html:117 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "Anda adalah tipe juri %(type)s yang sedang menjadi juri di tautan %(room)s." -#: participants/templates/current_round/round_adj.html:121 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "Anda adalah tipe juri %(type)s yang menjadi juri di %(room)s." -#: participants/templates/current_round/round_adj.html:129 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "juri %(adjudicator)s sedang menjadi juri di tautan %(room)s." -#: participants/templates/current_round/round_adj.html:133 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "%(adjudicator)s sedang menjadi juri di ruang %(room)s." -#: participants/templates/current_round/round_adj.html:139 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "Anda sedang menjadi juri pada %(room)s." -#: participants/templates/current_round/round_adj.html:143 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "Anda sedang menjadi juri di ruang %(room)s." -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team against %(opponent)s." msgstr "%(team)s sedang melakukan debat sebagai tim %(side)s melawan %(opponent)s." -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team against %(opponent)s." msgstr "Anda sedang melakukan debat sebagai tim %(side)s melawan %(opponent)s." -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating against %(opponent)s." msgstr "Tim %(team)s sedang melakukan debat melawan %(opponent)s." -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating against %(opponent)s." msgstr "Anda sedang melakukan debat melawan %(opponent)s." -#: participants/templates/current_round/round_team.html:39 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team." msgstr "%(team)s sedang melakukan debat sebagai tim %(side)s." -#: participants/templates/current_round/round_team.html:43 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team." msgstr "Anda sedang melakukan debat sebagai tim %(side)s." -#: participants/templates/current_round/round_team.html:56 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "Debat untuk %(team)s berada di tautan %(room)s." -#: participants/templates/current_round/round_team.html:60 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "Debat tim %(team)s berada di %(room)s." -#: participants/templates/current_round/round_team.html:66 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "Debat anda berada di tautan %(room)s." -#: participants/templates/current_round/round_team.html:70 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "Debat anda berada di ruang %(room)s." -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." msgstr "Sepertinya belum ada kategori pembicara yang sudah ditentukan. JIka anda ingin membuat tab untuk kategori pembicara yang spesifik, seperti tab pemula atau ESL, gunakan halaman Kategori Pembicara untuk membuat kategori tersebut, lalu kembali ke halaman ini untuk menentukan kelayakan pembicara." -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" msgstr "Umpan Balik kembali" -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" msgstr "Sudah memberikan umpan balik untuk %(adjudicator)s" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" msgstr "Belum mengumpulkan umpan balik untuk salah satu dari juri: %(adjudicators)s (Untuk siapapun juri yang berbicara)" -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" msgstr "Belum memberikan umpan balik untuk %(adjudicator)s" -#: participants/templates/feedback_progress_panel.html:38 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" msgstr "Pengumpulan umpan balik melebihi batas yang diijinkan untuk debat ini:" -#: participants/templates/feedback_progress_panel.html:46 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" msgstr "Ada pengumpulan umpan balik untuk %(adjudicator)s yang tidak diduga" -#: participants/templates/feedback_progress_panel.html:53 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." msgstr "%(name)s tidak memiliki umpan balik untuk diberikan." -#: participants/templates/in_this_round.html:9 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" msgstr "Pada Ronde Ini (%(round)s)" -#: participants/templates/in_this_round.html:13 +#: participants/templates/in_this_round.html msgid "In This Round" msgstr "Pada Ronde Ini" -#: participants/templates/in_this_round.html:16 +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" msgstr "(Tidak dirilis ke Publik)" -#: participants/templates/in_this_round.html:23 +#: participants/templates/in_this_round.html msgid "Room TBA" msgstr "Ruangan TBA" -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." msgstr "Juri %(adjudicator)s tidak menjadi juri pada ronde ini." -#: participants/templates/in_this_round.html:39 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." msgstr "Anda tidak menjadi juri pada ronde ini." -#: participants/templates/in_this_round.html:54 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." msgstr[0] "Sepertinya tim %(team)s sedang bertanding di debat %(ndebates)s pada ronde ini." -#: participants/templates/in_this_round.html:60 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." msgstr "Jika terdapat kesalahan, mohon hubungi pimpinan debat secepatnya." -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." msgstr "Tim %(team)s sedang tidak berdebat pada ronde ini." -#: participants/templates/in_this_round.html:79 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." msgstr "Anda sedang tidak memiliki debat pada ronde ini." -#: participants/templates/in_this_round.html:91 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." msgstr "Pengundian untuk ronde ini belum dirilis." -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" msgstr "Daftar Partisipan" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" msgstr "Daftar Institusi" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." msgstr "Email sudah dikirim." -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" msgstr "Registrasi Email Tim" -#: participants/templates/participants_subnav.html:26 participants/views.py:135 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" msgstr "Nama Terkode" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" msgstr "Kategori Pembicara" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" msgstr "Kelayakan Pembicara" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." msgstr "Kategori pembicara membolehkan pembicara pada kategori-spesifik untuk diproduksi, contoh, untuk kategori pemula atau ESL. Pada halaman ini, Anda dapat mendefinisikan apa saja kategori pembicara yang tersedia. Setelah Anda mendefinisikan kategori, Anda dapat mengisi kelayakan pada halaman Kelayakan." -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." msgstr "Jika Anda ingin menghapus kategori pembicara, gunakan area Sunting Basisdata." -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" msgstr "Menyimpan Kategori Pembicara" -#: participants/templates/team_registration_card.html:16 +#: participants/templates/team_registration_card.html msgid "Team name:" msgstr "Nama tim:" -#: participants/templates/team_registration_card.html:21 +#: participants/templates/team_registration_card.html msgid "Full team name:" msgstr "" -#: participants/templates/team_registration_card.html:25 +#: participants/templates/team_registration_card.html msgid "Short team name:" msgstr "" -#: participants/templates/team_registration_card.html:32 +#: participants/templates/team_registration_card.html msgid "Code name:" msgstr "Kode nama:" -#: participants/templates/team_registration_card.html:36 +#: participants/templates/team_registration_card.html msgid "No code name assigned" msgstr "" -#: participants/templates/team_registration_card.html:42 +#: participants/templates/team_registration_card.html msgid "Emoji:" msgstr "" -#: participants/templates/team_registration_card.html:46 +#: participants/templates/team_registration_card.html msgid "No emoji assigned" msgstr "" -#: participants/templates/team_registration_card.html:54 +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "Pembicara:" -#: participants/templates/team_registration_card.html:66 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" msgstr "Memenuhi syarat untuk kategori break:" -#: participants/templates/team_registration_card.html:75 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" msgstr "Kategori pembicara:" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" msgstr "%(code_name)s(%(real_name)s)" -#: participants/views.py:46 +#: participants/views.py msgid "Adjudicators" msgstr "Juri" -#: participants/views.py:55 +#: participants/views.py msgid "Speakers" msgstr "Pembicara" -#: participants/views.py:86 +#: participants/views.py msgid "Institutions" msgstr "Institusi" -#: participants/views.py:102 +#: participants/views.py msgid "Code" msgstr "Kode" -#: participants/views.py:103 +#: participants/views.py msgid "Full name" msgstr "Nama lengkap" -#: participants/views.py:105 +#: participants/views.py msgid "Region" msgstr "Wilayah" -#: participants/views.py:107 +#: participants/views.py msgid "Teams" msgstr "Tim" -#: participants/views.py:107 +#: participants/views.py msgid "Number of teams" msgstr "Jumlah tim" -#: participants/views.py:109 +#: participants/views.py msgid "Adjs" msgstr "Juri" -#: participants/views.py:110 +#: participants/views.py msgid "Number of adjudicators, excluding independents" msgstr "Jumlah juri, kecuali juri independen" -#: participants/views.py:112 +#: participants/views.py msgid "IAs" msgstr "JI" -#: participants/views.py:113 +#: participants/views.py msgid "Number of independent adjudicators" msgstr "Banyak juri independen" -#: participants/views.py:143 +#: participants/views.py msgid "Code name" msgstr "Kode nama" -#: participants/views.py:163 +#: participants/views.py msgid "Team Registration" msgstr "Registrasi Tim" -#: participants/views.py:231 +#: participants/views.py msgid "Results" msgstr "Hasil" -#: participants/views.py:239 participants/views.py:264 +#: participants/views.py #, python-format msgid "Record for %(name)s" msgstr "Catatan Rekor untuk %(name)s" -#: participants/views.py:261 +#: participants/views.py msgid "Previous Rounds" msgstr "Ronde sebelumnya" -#: participants/views.py:352 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" msgstr[0] "Kategori yang tersimpan: %(list)s" -#: participants/views.py:358 +#: participants/views.py msgid "No changes were made to the categories." msgstr "Tidak ada perubahan yang dilakukan pada kategori." -#: participants/views.py:371 +#: participants/views.py msgid "Speaker Category Eligibility" msgstr "Eligibilitas Kategori Pembicara" diff --git a/tabbycat/printing/locale/id/LC_MESSAGES/django.po b/tabbycat/printing/locale/id/LC_MESSAGES/django.po index adcb6ccd1de..3403edfffef 100644 --- a/tabbycat/printing/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2021-04-12 09:59\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -18,109 +18,108 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" msgstr "Form Penilaian" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" msgstr "Form Penilaian Dapat Di Cetak %(round)s" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." msgstr "Tidak ada pertanyaan balik yang ditambahkan baik untuk tim atau juri untuk dijawab." -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." msgstr "Tidak ada pertanyaan balik yang ditambahkan untuk tim untuk di jawab." -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." msgstr "Tidak ada pertanyaan balik yang ditambahkan untuk dijawab oleh juri." -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." -msgstr "%(first_sentence)s cek dokumentasi untuk informasi bagaimana menambahkannya (jikat tidak form akan dikosongkan)." +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgstr "" -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" msgstr "tidak ada lembar nilai tersedia - mungkin juri belum mengalokasikan nya?" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "Gunakan Ctrl+P untuk mencetak atau menyimpan ke PDF. Pastikan untuk set dengan tepat Orientasi halaman, to turn off headers/footers and turn on Grafik Latar Belakang. Berkerja paling baik di Chrome." -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" msgstr "Cetak %(sheet)s URLs" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." -msgstr "Halaman ini didesain untuk mencetak secara double pada 2 sisi lembar A4, dengan sisi menghadap luar menunjukkan nama peserta dan sisi menghadap ke dalam menunjukkan URL. Gunakan CTRL-P untuk mencetak; untuk hasil terbaik gunakan Chrome." +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +msgstr "" -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" msgstr "Private URL for %(name)s (%(group)s)" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" msgstr "Mohon tandai URL, yang anda akan gunakan untuk menyerahkan form ke seluruh tournament:" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" msgstr "Cetak lembar nilai" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" msgstr "untuk %(round)s" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" msgstr "Edit mosi" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" msgstr "Tidak ada lembar nilai yang tersedia - mungkin ronde belum di tarik?" -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" msgstr "Edit Mosi Balot" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "" -#: printing/templates/scoresheet_list.html:47 +#: printing/templates/scoresheet_list.html msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." msgstr "Mengedit Mosi di sini tidak akan tersimpan secara permanen - ini hanya mengupdate teks yang digunakan dalam mencetak balot di bawah ini. ini akan berguna jika menggunakan mosi pengisi ruang (untuk memastikan konfidensial) di Tabbycat, tapi anda masih ingin mencetak balot dengan mosi yang benar." -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "Mosi" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" msgstr "Menganti mosi akan memperbarui tampilan balot secara otomatis" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." msgstr "Pidato x menit, rentan nilai skor pembicara dari x sampai x. anda memiliki x menit untuk mengajukan keputusan ke seorang juri." -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" msgstr "Nilai Keseluruhan" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" msgstr "Tidak terafiliasi" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "Tim" diff --git a/tabbycat/privateurls/locale/id/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/id/LC_MESSAGES/django.po index 4272ed3f8b6..3107986b772 100644 --- a/tabbycat/privateurls/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-28 12:11\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -18,167 +18,160 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" msgstr "Manajemen URL Privat" -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:145 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" msgstr "URL Privat" -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." msgstr "URL privat untuk kertas suara dan/atau masukan umpan balik dari para peserta, diberikan dibawah ini." -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" msgstr "URL privat dipakai untuk memungkinkan para peserta menyampaikan suara dan/atau umpan balik secara daring. Anda sebaiknya memakainya bila bermaksud untuk membagikan URL-URL gila ke para peserta, dan terlalu khawatir terhadap penipuan menggunakan laman umum yang mudah diakses dimana siapapun bisa mencantumkan masukan apapun. URLnya akan terlihat seperti ini:" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." -msgstr "Siapapun yang punya URL dapat mengakses laman masukan data yang relevan. Idenya ialah sulit untuk menebak kunci lainnya (string yang terlihat aneh), sehingga anda mesti membuat tiap URL mudah diakses hanya untuk peserta yang dibicarakan. Baca lagi mengenai URL privat." +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +msgstr "" -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." msgstr "Bukan masukan kotak suara peserta, masukan umpan balik peserta, maupun daftar-mandiri peserta telah terkonfigurasi menjadi dari URL privat. URL apapun yang dihasilkan tidak akan berguna kecuali bila anda mengkonfigurasi pengaturan-pengaturan itu sedemikian rupa pada laman konfigurasi turnamen." -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." msgstr "Tidak ada URL privat yang ditetapkan." -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" msgstr "Menghasilkan URL privat" -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" msgstr "Lihat URL" -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" msgstr "Mencetak URL para tim" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" msgstr "Mencetak URL para juri" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." msgstr "Semua peserta yang terjangkau telah dikirimkan URL privat mereka." -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" msgstr "URL Email" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." msgstr "Tombol ini hanya mengahasilkan URL privat untuk para peserta yang sebelumnya belum punya." -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" msgstr "Menghasilkan URL" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." msgstr "Semua peserta sudah mempunyai URL privat." -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" msgstr "URL Privat" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" msgstr "untuk %(name)s" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "URL dari laman ini telah dipersonalisasi untukmu, %(name)s. Jangan dibagikan ke siapapun; siapapun yang tahu URL ini dapat mengirim hasil-hasil dan/atau umpan balik untuk debat-debatmu." -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" msgstr "Mencabut lapor masuk dari %(check_time)s" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" msgstr "Lapor masuk" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" msgstr "Anda telah dilaporkan masuk pada %(check_time)s" -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." msgstr "Saat ini anda belum lapor masuk." -#: privateurls/templates/public_url_landing.html:62 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Submit Ballot for %(round)s" msgstr "Mengajukan Kotak suara selama %(round)s" -#: privateurls/templates/public_url_landing.html:65 -msgid "There are no current rounds" -msgstr "Tidak ada ronde saat ini" - -#: privateurls/templates/public_url_landing.html:71 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" msgstr "Sampaikan Umpan balik" -#: privateurls/templates/public_url_landing.html:84 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" msgstr "Registrasi (%(name)s)" -#: privateurls/views.py:63 privateurls/views.py:164 +#: privateurls/views.py msgid "no URL" msgstr "tidak ada URL" -#: privateurls/views.py:76 +#: privateurls/views.py msgid "URL" msgstr "URL" -#: privateurls/views.py:87 +#: privateurls/views.py msgid "Speakers" msgstr "Pembicara" -#: privateurls/views.py:97 +#: privateurls/views.py msgid "Adjudicators" msgstr "Juri" -#: privateurls/views.py:119 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." msgstr "Semua para peserta sudah punya URL privat. Bila anda ingin menghapusnya, pakai area Edit Basisdata." -#: privateurls/views.py:126 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." msgstr[0] "URL-URL privat telah dihasilkan untuk semua %(nblank_people)d orang." -#: privateurls/views.py:131 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." msgstr[0] "URL-URL privat yang telah ada untuk %(nexisting_people)d orang dibiarkan utuh." -#: privateurls/views.py:172 +#: privateurls/views.py msgid "URL Key" msgstr "Kunci URL" -#: privateurls/views.py:181 +#: privateurls/views.py msgid "Debates" msgstr "Debat-debat" diff --git a/tabbycat/results/locale/id/LC_MESSAGES/django.po b/tabbycat/results/locale/id/LC_MESSAGES/django.po index 674b653285c..96e273623f6 100644 --- a/tabbycat/results/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2022-07-16 08:04\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:14\n" "Last-Translator: philip_tc\n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -18,882 +18,875 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 948\n" -#: results/admin.py:44 +#: results/admin.py +msgid "Resave results" +msgstr "Simpan kembali hasil" + +#: results/admin.py #, python-format msgid "Resaved results for %(count)d ballot submission." msgid_plural "Resaved results for %(count)d ballot submissions." msgstr[0] "Menyimpan ulang hasil untuk %(count)d pengumpulan kertas suara." -#: results/admin.py:47 -msgid "Resave results" -msgstr "Simpan kembali hasil" - -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:158 +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" msgstr "Hasil" -#: results/forms.py:39 +#: results/forms.py msgid "Tournament password" msgstr "Kata sandi turnamen" -#: results/forms.py:45 +#: results/forms.py msgid "That password isn't correct." msgstr "Kata sandi salah." -#: results/forms.py:77 +#: results/forms.py msgid "Please enter a whole number." msgstr "Silahkan masukan nomor." -#: results/forms.py:79 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." msgstr "Silahkan masukan kelipatan %s." -#: results/forms.py:166 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." msgstr "Kumpulan surat suara tidak dapat dibuang dan dikonfirmasi." -#: results/forms.py:173 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." msgstr "Status debat tidak dapat dikonfirmasi kecuali kumpulan surat suara sudah dikonfirmasi." -#: results/forms.py:302 results/forms.py:336 +#: results/forms.py msgid "---------" msgstr "" -#: results/forms.py:304 results/forms.py:306 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" msgstr "%(aff_team)s ditegaskan, %(neg_team)s ditiadakan" -#: results/forms.py:323 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" msgstr "%(side)s's mosi veto" -#: results/forms.py:332 results/forms.py:901 +#: results/forms.py #, python-format msgid "%(team)s (%(side)s)" msgstr "%(team)s (%(side)s)" -#: results/forms.py:335 +#: results/forms.py msgid "Winner" msgstr "Pemenang" -#: results/forms.py:489 +#: results/forms.py msgid "Mark as a duplicate speech" msgstr "Tandai sebagai duplikat pidato" -#: results/forms.py:549 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." msgstr "Pembicara %(speaker)s tidak berada dalam tim %(team)s." -#: results/forms.py:563 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." msgstr[0] "%(speaker)s tampaknya telah memberikan %(count)d pidato substantif." -#: results/forms.py:580 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." msgstr "Pembicara substantif terakhir dan pembicara balasan tidak boleh sama." -#: results/forms.py:587 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." msgstr "Jawaban pembicara untuk tim ini tidak memberikan pidato yang substantif." -#: results/forms.py:719 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." msgstr "Skor total sama untuk tim-tim (yaitu seri)." -#: results/forms.py:724 +#: results/forms.py msgid "The declared winner does not correspond to the team with the highest score." msgstr "Pemenang yang diumumkan tidak sesuai dengan tim dengan nilai tertinggi." -#: results/forms.py:733 +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" msgstr "Nilai total untuk tim berikut ini sama: %(teams)s" -#: results/forms.py:743 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "Margin (%(margin).1f) melebihi batas maksimum yang diperbolehkan (%(max_margin).1f)." -#: results/forms.py:846 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." msgstr "Nilai total untuk tim-tim adalah sama (yaitu seri) untuk juri %(adjudicator)s." -#: results/forms.py:851 +#: results/forms.py #, python-format msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." msgstr "Pemenang yang diumumkan tidak sesuai dengan tim dengan nilai tertinggi untuk juri %(adjudicator)s." -#: results/forms.py:859 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "Margin (%(margin).1f) dalam surat suara juri %(adjudicator)s melebihi batas maksimum yang diperbolehkan (%(max_margin).1f)." -#: results/forms.py:921 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." msgstr "Sisi perdebatan ini tidak dikonfirmasi. Anda tidak dapat menyimpan hasil untuk debat ini sampai kedua belah pihak telah dikonfirmasi dalam pengundian." -#: results/forms.py:964 +#: results/forms.py #, python-format msgid "There must be exactly %(n)d team advancing." msgid_plural "There must be exactly %(n)d teams advancing." msgstr[0] "Tepatnya harus ada %(n)d tim yang maju." -#: results/forms.py:1007 +#: results/forms.py msgid "There must be exactly 1 team advancing." msgstr "Harus ada 1 tim yang maju." -#: results/models.py:33 +#: results/models.py msgid "Tab room" msgstr "Ruang tab" -#: results/models.py:34 +#: results/models.py msgid "Public" msgstr "Publik" -#: results/models.py:38 +#: results/models.py msgid "timestamp" msgstr "waktu" -#: results/models.py:40 +#: results/models.py msgid "version" msgstr "versi" -#: results/models.py:42 +#: results/models.py msgid "submitter type" msgstr "tipe pengirim" -#: results/models.py:44 +#: results/models.py msgid "confirmed" msgstr "terkonfirmasi" -#: results/models.py:48 +#: results/models.py msgid "from private URL" msgstr "dari tautan pribadi" -#: results/models.py:51 +#: results/models.py msgid "from participant" msgstr "dari partisipan" -#: results/models.py:56 +#: results/models.py msgid "submitter" msgstr "pengirim" -#: results/models.py:59 +#: results/models.py msgid "confirmer" msgstr "terkonfirmasi" -#: results/models.py:61 +#: results/models.py msgid "confirm timestamp" msgstr "konfirmasi tanda waktu" -#: results/models.py:63 +#: results/models.py msgid "IP address" msgstr "" -#: results/models.py:103 +#: results/models.py msgid "A tab room ballot must have a user associated." msgstr "Sebuah kertas suara ruang tab harus memiliki pengguna yang terkait." -#: results/models.py:111 +#: results/models.py msgid "debate" msgstr "debat" -#: results/models.py:113 +#: results/models.py msgid "motion" msgstr "mosi" -#: results/models.py:115 +#: results/models.py msgid "discarded" msgstr "dibuang" -#: results/models.py:117 +#: results/models.py msgid "single adjudicator" msgstr "juri tunggal" -#: results/models.py:118 +#: results/models.py msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." msgstr "" -#: results/models.py:123 results/models.py:228 results/models.py:267 -#: results/models.py:305 results/models.py:347 +#: results/models.py msgid "ballot submission" msgstr "submisi lembar penjurian" -#: results/models.py:124 +#: results/models.py msgid "ballot submissions" msgstr "pengumpulan kertas suara" -#: results/models.py:143 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" msgstr "Perdebatan ada di ronde %(round)d tetapi mosi (%(motion)s) berasal dari ronde %(motion_round)d" -#: results/models.py:150 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" msgstr "Sebuah kertas suara tidak bisa dikonfirmasikan dan dibuang!" -#: results/models.py:230 results/models.py:269 +#: results/models.py msgid "debate adjudicator" msgstr "juri debat" -#: results/models.py:232 results/models.py:271 results/models.py:307 -#: results/models.py:349 +#: results/models.py msgid "debate team" msgstr "tim debat" -#: results/models.py:235 results/models.py:312 +#: results/models.py msgid "win" msgstr "menang" -#: results/models.py:237 results/models.py:314 +#: results/models.py msgid "margin" msgstr "batas" -#: results/models.py:239 results/models.py:272 results/models.py:316 -#: results/models.py:352 +#: results/models.py msgid "score" msgstr "nilai" -#: results/models.py:244 +#: results/models.py msgid "team score by adjudicator" msgstr "nilai tim oleh juri" -#: results/models.py:245 +#: results/models.py msgid "team scores by adjudicator" msgstr "nilai tim oleh juri" -#: results/models.py:260 results/models.py:294 +#: results/models.py msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." msgstr "Tim debat, juri debat dan pengumpulan kertas suara semuanya harus terkait dengan debat yang sama." -#: results/models.py:273 results/models.py:353 +#: results/models.py msgid "position" msgstr "posisi" -#: results/models.py:279 +#: results/models.py msgid "speaker score by adjudicator" msgstr "nilai pembicara oleh juri" -#: results/models.py:280 +#: results/models.py msgid "speaker scores by adjudicator" msgstr "nilai pembicara oleh juri" -#: results/models.py:310 +#: results/models.py msgid "points" msgstr "poin" -#: results/models.py:318 +#: results/models.py msgid "votes given" msgstr "suara yang diberikan" -#: results/models.py:320 +#: results/models.py msgid "votes possible" msgstr "suara yang memungkinkan" -#: results/models.py:324 +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py msgid "team score" msgstr "nilai tim" -#: results/models.py:325 +#: results/models.py msgid "team scores" msgstr "nilai tim" -#: results/models.py:351 +#: results/models.py msgid "speaker" msgstr "pembicara" -#: results/models.py:355 +#: results/models.py msgid "ghost" msgstr "hantu" -#: results/models.py:356 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." msgstr "Apabila ditandai, maka nilai ini tidak akan mempengaruhi perhitungan pada tabulasi pembicara. Ini biasa digunakan untuk pembicara yang harus berbicara dua kali saat ada anggota tim yang hilang (\"iron-person\")." -#: results/models.py:365 +#: results/models.py msgid "speaker score" msgstr "nilai pembicara" -#: results/models.py:366 +#: results/models.py msgid "speaker scores" msgstr "nilai pembicara" -#: results/models.py:375 +#: results/models.py msgid "The debate team and speaker must be from the same team." msgstr "Tim debat dan pembicara harus dari tim yang sama." -#: results/models.py:378 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." msgstr "Penngumpulan kertas suara dan tim debat harus terkait dengan debat yang sama." -#: results/tables.py:15 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" msgstr "Apakah kertas suara debat ini telah diperiksa" -#: results/tables.py:36 +#: results/tables.py msgid "Status of this debate's ballot" msgstr "Status kertas suara debat ini" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" msgstr "Tampilkan Pengundian" -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" msgstr "Kertas suara cek-in" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" msgstr "'Iron-Persons' terbaru" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" msgstr "Tim yang baru saja melewatkan pembicara" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" msgstr "Seorang pembicara dari %(team)s memberikan banyak pidato di babak sebelumnya" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the current round" msgstr "Seorang pembicara dari %(team)s memberikan banyak pidato di babak ini" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" msgstr "Tidak ada kasus yang diketahui di babak saat ini atau sebelumnya" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" msgstr "Ronde selesai" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." msgstr "Halaman ini secara otomatis diperbarui dengan entri kertas suara baru dan check in saat terjadi. Namun, Anda harus memuatnya kembali setelah semua kertas suara dilengkapi untuk melanjutkan putaran." -#: results/templates/admin_results.html:88 +#: results/templates/admin_results.html #, python-format msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." msgstr[0] "Perdebatan %(ndebates)s berikut tampaknya mendapat lembar nilai dari peserta pelatihan: %(debates_list)s." -#: results/templates/admin_results.html:94 +#: results/templates/admin_results.html #, python-format msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." msgstr "Ini dapat terjadi jika Anda menurunkan seorang panelis menjadi peserta pelatihan setelah hasil telah dikirimkan untuk debat tersebut. Ini mungkin menunjukkan bahwa ada ketidakkonsistenan dalam data hasil, yang dapat menyebabkan hasil yang tidak diharapkan (atau crash). Harap pertimbangkan untuk pergi ke area Edit Database dan menghapus \"pembicara nilai dengan adj\" objek , dan kemudian membuka dan menyimpan kembali hasilnya di sini." -#: results/templates/admin_results.html:113 +#: results/templates/admin_results.html msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." msgstr "" -#: results/templates/admin_results.html:127 +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." msgstr "Konfigurasi turnamen ini disetel ke Parlemen Inggris dengan satu surat suara per juri pemungutan suara . Kombinasi ini tidak diperbolehkan: Turnamen BP harus menggunakan surat suara konsensus. Hasil tidak dapat dimasukkan saat konfigurasi ini diterapkan. Harap perbaiki konfigurasi turnamen ini sebelum Anda mencoba untuk memasukkan hasil." -#: results/templates/admin_results.html:135 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." msgstr "Saat ini tidak ada mosi yang masuk untuk babak ini, jadi hasil debat tidak bisa dimasukkan. Tambahkan Gerakan. " -#: results/templates/admin_results.html:144 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." msgstr "Konfigurasi turnamen Anda memungkinkan kertas suara dikirimkan secara online oleh juri. Hasil imbang harus dilepaskan sebelum mereka dapat melakukannya untuk babak ini." -#: results/templates/admin_results.html:151 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." msgstr "Konfigurasi turnamen Anda memungkinkan balasan dikirimkan secara online oleh peserta. Hasil imbang harus dilepaskan sebelum mereka dapat melakukannya untuk babak ini." -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:12 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" msgstr "Kembali ke Hasil Pencarian" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:17 -#: results/templates/ballot_entry_base.html:21 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" msgstr "Buat set kertas suara baru untuk debat ini" -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." msgstr "Anda tidak dapat mengonfirmasi kumpulan kertas suara ini karena Anda telah memasukkannya." -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html msgid "Confirm results" msgstr "Konfirmasi hasil" -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" msgstr "Hasil tidak benar" -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:68 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." msgstr "Email akan dikirim ke juri saat kertas suara dikonfirmasi." -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 results/views.py:513 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" msgstr "Masukkan Hasil" -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "Halaman ini secara otomatis diperbarui dengan entri kertas suara baru dan check in saat terjadi." -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." msgstr "Konfigurasi turnamen ini disetel ke Parlemen Inggris dengan satu kertas suara per pemungutan suara juri. Kombinasi ini tidak diperbolehkan: Turnamen BP harus menggunakan surat suara konsensus. Hasil tidak dapat dimasukkan saat konfigurasi ini diterapkan. Silakan minta administrator untuk mengubah konfigurasi ini." -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "Saat ini tidak ada mosi yang masuk untuk babak ini, jadi hasil debat tidak bisa dimasukkan. Silakan minta administrator untuk menambahkan mosi." -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." msgstr[0] "%(ndebates)s debat belum dikonfirmasi pihaknya. Hasil untuk debat ini tidak dapat dimasukkan sampai alokasi sisi mereka ditandai sudah dikonfirmasi." -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr[0] "%(num_even_panel)s debat memiliki panel dengan jumlah pemungutan suara juri yang genap. Jika juri dibagi rata, debat akan diberikan kepada tim yang dipilih oleh ketua." -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" msgstr "Informasi debat" -#: results/templates/ballot/ballot_debate_info.html:42 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" msgstr "Tidak ada pembicara yang berbicara dua kali (tidak ada pidato 'iron-person')" -#: results/templates/ballot/ballot_debate_info.html:45 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" msgstr "Seorang pembicara berbicara dua kali (pidato 'iron-person')" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" msgstr "Hasil" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "Peringkat" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" msgstr "Marjin" -#: results/templates/ballot/ballot_set.html:6 +#: results/templates/ballot/ballot_set.html msgid "There are some problems with this scoresheet. Please review and correct them." msgstr "Ada beberapa masalah dengan lembar nilai ini. Harap tinjau dan perbaiki." -#: results/templates/ballot/ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s (%(institution)s)" msgstr "Kertas suara dari %(name)s (%(institution)s)" -#: results/templates/ballot/ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s" msgstr "Kertas suara %(name)s" -#: results/templates/ballot/ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html msgid "Scoresheet" msgstr "Lembar nilai" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Solo Chair" msgstr "Ketua Solo" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Chair" msgstr "Ketua panel" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Panellist" msgstr "Panelis" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Trainee" msgstr "Peserta pelatihan" -#: results/templates/ballot/ballot_set.html:44 +#: results/templates/ballot/ballot_set.html msgid "Assign sides before entering scores" msgstr "Tetapkan sisi sebelum memasukkan nilai" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." -msgstr "Pidato duplikat disembunyikan dari tab pembicara. Jika pembicara adalah 'iron-manning' Anda biasanya hanya menandai nilai yang lebih rendah sebagai duplikat." +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." +msgstr "" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "There is %(number)s existing ballot set for this debate." msgid_plural "There are %(number)s existing ballot sets for this debate." msgstr[0] "Ada %(number)s kertas suara yang disetel untuk debat ini." -#: results/templates/ballot/other_ballots_list.html:21 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." msgstr "Set kertas suara ini dikonfirmasi ." -#: results/templates/ballot/other_ballots_list.html:26 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." msgstr "Set kertas suara ini dibuang." -#: results/templates/ballot/other_ballots_list.html:41 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" msgstr "MELIHAT SAAT INI" -#: results/templates/ballot/other_ballots_list.html:45 +#: results/templates/ballot/other_ballots_list.html msgid "MERGING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:48 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," msgstr "Versi %(version)s," -#: results/templates/ballot/other_ballots_list.html:53 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," msgstr "dimasuki oleh %(submitter)s," -#: results/templates/ballot/other_ballots_list.html:58 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from %(adjudicator)s's private URL," msgstr "dikirim dari %(adjudicator)s URL pribadi," -#: results/templates/ballot/other_ballots_list.html:62 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," msgstr "dikirimkan dari formulir publik di %(ip_address)s" -#: results/templates/ballot/other_ballots_list.html:68 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," msgstr "%(timestamp)s (%(timeago)s yang lalu)," -#: results/templates/ballot/other_ballots_list.html:73 +#: results/templates/ballot/other_ballots_list.html msgid "unknown" msgstr "tidak diketahui" -#: results/templates/ballot/other_ballots_list.html:74 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "confirmed by %(confirmer)s" msgstr "dikonfirmasi oleh %(confirmer)s" -#: results/templates/ballot/other_ballots_list.html:78 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" msgstr "belum dikonfirmasi" -#: results/templates/ballot/other_ballots_list.html:82 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" msgstr "(dibuang)" -#: results/templates/ballot/other_ballots_list.html:86 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" msgstr[0] "(identik dengan versi %(others)s)" -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." msgstr "Antarmuka entri kertas suara ini dalam versi beta, jika Anda mengalami masalah, versi lama antarmuka tersedia di sini ." -#: results/templates/ballot_entry_base.html:30 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr "Debat ini memiliki panel dengan pemungutan suara juri dalam jumlah genap. Jika juri dibagi rata, debat akan diberikan kepada tim yang dipilih oleh ketua." -#: results/templates/ballot_entry_base.html:41 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." msgstr "%(team)s memiliki pembicara yang berbicara beberapa kali di babak terakhir - yaitu pidato orang 'iron'. Harap periksa kertas suara dengan hati-hati untuk melihat apakah hal itu masih berlaku untuk putaran ini. Jika ya, pastikan pembicara yang dipilih di bawah mencerminkan ini." -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" msgstr "Lembar nilai dari ketua %(chair)s" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" msgstr "Lembar nilai, tidak ada set ketua" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" msgstr "Kesalahan dengan bidang pembicara %(pos)s: %(error)s" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" msgstr "Kesalahan dengan bidang pembicara duplikat%(pos)s: %(error)s" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" msgstr "Kesalahan dengan bidang nilai %(pos)s: %(error)s" -#: results/templates/debate_postponement_form.html:3 +#: results/templates/debate_postponement_form.html msgid "Postponed" msgstr "Ditunda" -#: results/templates/debate_postponement_form.html:8 +#: results/templates/debate_postponement_form.html msgid "Postpone" msgstr "Menunda" -#: results/templates/enter_results.html:15 +#: results/templates/enter_results.html msgid "Ballot Status" msgstr "Status kertas suara" -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" msgstr "hanya set kertas suara yang dikonfirmasi yang akan mempengaruhi hasil debat ini" -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" msgstr "Status debat" -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" msgstr "semua debat harus dikonfirmasi untuk menyelesaikan babak tersebut" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" msgstr "Simpan Kertas suara" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" msgstr "Batalkan Entri" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "URL halaman ini dipersonalisasi untuk Anda, %(name)s. Jangan bagikan dengan siapa pun; siapa pun yang mengetahui URL ini dapat mengirimkan hasil dan /atau umpan balik untuk debat Anda. Anda dapat menandai halaman ini dan kembali ke sini setelah setiap debat untuk tindakan yang tersedia." -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." msgstr "Halaman ini disediakan untuk memungkinkan Anda, %(name)s, memverifikasi lembar skor Anda sendiri. Anda tidak boleh berbagi URL ini dengan siapa pun. Berbagi URL akan memungkinkan orang lain mengakses semua tindakan dari halaman landing pribadi Anda." -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" msgstr "Kertas suara tidak tersedia" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." msgstr "Kembali ke halaman landing pribadi anda." -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" msgstr "Masukkan Lembar Penjurian" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" msgstr "Siapakah Anda?" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" msgstr "(klik nama anda di daftar ini)" -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." msgstr "Pengundian dan/atau mosi untuk %(round)s belum dirilis." -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" msgstr "Kertas suara untuk %(matchup)s" -#: results/templates/public_ballot_set.html:28 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" msgstr "%(round)s @ %(room)s" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" msgstr "Kembali ke halaman landing" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" msgstr "Kembali ke Hasil untuk %(round)s" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "Mosi" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" msgstr "Dari %(name)s (%(institution)s)" -#: results/templates/public_ballot_set.html:92 -#: results/templates/public_ballot_set.html:96 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" msgstr "Total untuk %(name)s (%(side)s)" -#: results/templates/public_ballot_set.html:105 -#: results/templates/public_ballot_set.html:109 +#: results/templates/public_ballot_set.html #, python-format msgid "%(name)s (%(side)s)" msgstr "%(name)s(%(side)s)" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Won" msgstr "Menang" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Lost" msgstr "Kalah" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set_error.html #, python-format msgid "Back to the tournament home page." msgstr "Kembali ke halaman utama turnamen." -#: results/templates/public_enter_results.html:9 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" msgstr "%(adjudicator)s, perhatikan bahwa Anda harus memasukkan semua kertas suara dari panel Anda, bukan hanya milik Anda!" -#: results/templates/public_enter_results.html:16 +#: results/templates/public_enter_results.html msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." msgstr "" -#: results/templates/public_enter_results.html:24 +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." msgstr[0] "Formulir ini telah dikirimkan %(nsubmissions)s kali. Silakan hubungi tabulasi resmi setelah mengirimkan formulir Anda." -#: results/templates/public_enter_results.html:63 -msgid "Submit Ballot(s)" -msgstr "Menyerahkan Kertas suara" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" -#: results/templates/public_enter_results.html:65 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "Saat melakukan submisi, alamat IP anda akan disimpan untuk pencatatan." -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" msgstr "Tidak ada Hasil untuk Dimasukkan (%(adjudicator)s)" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" msgstr "Tidak Ada Hasil untuk Dimasukkan" -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" msgstr "Lihat berdasarkan Tim" -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" msgstr "Lihat berdasarkan Debat" -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" msgstr "Hasil untuk %(round)s" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" msgstr "Hasil tidak tersedia" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." msgstr "Hasil untuk %(round)s belum tersedia." -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." msgstr "%(round)s adalah babak diam." -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" msgstr "Tidak ada kertas suara" -#: results/utils.py:19 +#: results/utils.py msgid "Debate was Postponed" msgstr "Debat sudah ditunda" -#: results/utils.py:20 +#: results/utils.py msgid "Ballot is Unconfirmed" msgstr "Kertas suara tidak terkonfirmasi" -#: results/utils.py:21 +#: results/utils.py msgid "Ballot is Confirmed" msgstr "Kertas suara sudah terkonfirmasi" #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:36 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" msgstr "%(team)s sebagai %(side)s" -#: results/utils.py:43 +#: results/utils.py #, python-format msgid "%(team)s (%(side)s) won" msgstr "%(team)s (%(side)s) menang" #. Translators: The team here is the losing team -#: results/utils.py:45 +#: results/utils.py #, python-format msgid "vs %(team)s (%(side)s)" msgstr "vs %(team)s (%(side)s)" -#: results/utils.py:47 +#: results/utils.py #, python-format msgid "Advancing: %(advancing_list)s
    " msgstr "Lolos: %(advancing_list)s
    " -#: results/utils.py:50 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" msgstr "Tereliminasi: %(eliminated_list)s" -#: results/utils.py:58 +#: results/utils.py #, python-format msgid "1st: %(first_team)s
    " msgstr "Ke-1: %(first_team)s
    " -#: results/utils.py:59 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" @@ -902,190 +895,190 @@ msgstr "Ke-2: %(second_team)s
    \n" "Ke-3: %(third_team)s
    \n" "Ke-4: %(fourth_team)s" -#: results/utils.py:74 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" msgstr "Kesalahan pada hasil untuk %(debate)s" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:134 +#: results/utils.py msgid "PM" msgstr "PM" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:136 +#: results/utils.py msgid "DPM" msgstr "WPM" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:138 +#: results/utils.py msgid "LO" msgstr "PO" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:140 +#: results/utils.py msgid "DLO" msgstr "WPO" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:142 +#: results/utils.py msgid "MG" msgstr "APP" #. Translators: Abbreviation for Government Whip -#: results/utils.py:144 +#: results/utils.py msgid "GW" msgstr "PKPP" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:146 +#: results/utils.py msgid "MO" msgstr "APO" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:148 +#: results/utils.py msgid "OW" msgstr "PKPO" -#: results/utils.py:168 +#: results/utils.py msgid "Reply" msgstr "Balasan" -#: results/views.py:270 results/views.py:272 +#: results/views.py msgid " vs " msgstr " vs " -#: results/views.py:273 +#: results/views.py #, python-format msgid "%(matchup)s: %(round)s @ %(room)s" msgstr "" -#: results/views.py:275 +#: results/views.py msgid "N/A" msgstr "N/A" -#: results/views.py:408 +#: results/views.py msgid "New Ballot Set" msgstr "" -#: results/views.py:411 +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." msgstr "Kumpulan kertas suara %(debate)s telah ditambahkan." -#: results/views.py:413 results/views.py:480 +#: results/views.py msgid " Email receipts queued to be sent." msgstr " Tanda terima email diantri untuk dikirim." -#: results/views.py:427 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." msgstr "Ups! Debat %(debate)s tidak memiliki ketua, jadi Anda tidak bisa memasukkan hasil untuk itu." -#: results/views.py:433 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." msgstr "Ups! Debat %(debate)s tidak memiliki pihak terkonfirmasi, jadi Anda tidak bisa memasukkan hasil untuk itu." -#: results/views.py:459 +#: results/views.py msgid "Edit Ballot Set" msgstr "" -#: results/views.py:473 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." msgstr "Set kertas suara untuk %(matchup)s dibuang." -#: results/views.py:475 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." msgstr "Set kertas suara %(matchup)s telah dikonfirmasi." -#: results/views.py:477 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." msgstr "Pengeditan untuk kumpulan suara %(matchup)s telah disimpan." -#: results/views.py:528 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." msgstr "Terima kasih, %(user)s! Kertas suara Anda untuk %(debate)s telah tercatat." -#: results/views.py:535 +#: results/views.py msgid "The draw for this round hasn't been released yet." msgstr "Pengundian untuk ronde ini belum dirilis." -#: results/views.py:539 +#: results/views.py msgid "The motions for this round haven't been released yet." msgstr "Mosi ronde ini belum dirilis." -#: results/views.py:544 +#: results/views.py msgid "It looks like you don't have a debate this round." msgstr "Sepertinya Anda tidak berdebat di babak ini." -#: results/views.py:546 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." msgstr "Sepertinya Anda ditugaskan untuk dua atau lebih debat pada babak ini. Silakan hubungi ruang tabulasi resmi." -#: results/views.py:573 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." msgstr "Debat Anda tidak memiliki ketua, jadi Anda tidak bisa memasukkan hasil untuk itu. Silakan hubungi ruang tabulasi resmi." -#: results/views.py:578 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." msgstr "Sepertinya sisi perdebatan ini belum dikonfirmasi, jadi Anda tidak bisa memasukkan hasil untuk itu. Silakan hubungi ruang tabulasi resmi." -#: results/views.py:689 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." msgstr "Sepertinya Anda ditugaskan untuk dua atau lebih debat. Silakan hubungi ruang tabulasi resmi." -#: results/views.py:707 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." msgstr "Perdebatan ini ada di %s, yang merupakan babak diam." -#: results/views.py:710 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." msgstr "Perdebatan ini ada di %s, hasil yang belum tersedia." -#: results/views.py:714 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." msgstr "Hasil untuk debat %s belum dikonfirmasi." -#: results/views.py:717 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." msgstr "Debat ini %s belum dikonfirmasi kertas suaranya." -#: results/views.py:739 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." msgstr "Belum ada hasil untuk debat %s." -#: results/views.py:805 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" msgstr "Tambakan hasil dari %(adjudicator)s" -#: results/views.py:809 +#: results/views.py msgid "Adjudicator" msgstr "Juri" -#: results/views.py:846 +#: results/views.py msgid "Merge Ballots" msgstr "" -#: results/views.py:877 +#: results/views.py msgid "The speaking order in the ballots is inconsistent, so could not be merged." msgstr "" -#: results/views.py:879 +#: results/views.py msgid "Duplicate speeches are marked inconsistently, so could not be merged." msgstr "" -#: results/views.py:880 +#: results/views.py #, python-format msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." msgstr "" diff --git a/tabbycat/standings/locale/id/LC_MESSAGES/django.po b/tabbycat/standings/locale/id/LC_MESSAGES/django.po index 8bda1737b6e..4b410f2b45a 100644 --- a/tabbycat/standings/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-29 23:49-0400\n" -"PO-Revision-Date: 2021-04-12 11:18\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:01\n" "Last-Translator: philip_tc\n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -18,604 +18,595 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 950\n" -#: standings/base.py:297 +#: standings/base.py msgid "The same metric would be added twice:" msgstr "Metrik yang sama akan ditambahkan dua kali:" -#: standings/base.py:298 +#: standings/base.py msgid "The same ranking would be added twice:" msgstr "Ranking yang sama akan ditambahkan dua kali:" -#: standings/base.py:414 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" msgstr "Kode metrik tidak dikenal: %(code)s" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" msgstr "Semua" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" msgstr "Breaking" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" msgstr "Bukan %(category)s" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" msgstr "Semua Pembicara" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" msgstr "JI" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "Ketua Panel" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" msgstr "Panelis" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" msgstr "Trainee" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" msgstr "Rata-rata Rating" -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" msgstr "Median Rating" -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" msgstr "Kuartil Atas Rating" -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" msgstr "Kuartil Bawah Rating" -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" msgstr "Rata-rata Rating dari Tim" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" msgstr "Rata-rata rating dari Ketua Panel" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" msgstr "Rata-rata Rating dari Panelis" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" msgstr "Rata-rata Rating dari Trainee" -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" msgstr "Rata-rata Nilai" -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" msgstr "Median Nilai" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" msgstr "Kuartil Atas Nilai" -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" msgstr "Kuartil Bawah Nilai" -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" msgstr "Rata-rata Pembicara Penyimpul" -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" msgstr "Rata-rata Pembicara %(num)d" -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" msgstr "Rata-rata Nilai Akhir" -#: standings/speakers.py:50 standings/speakers.py:106 +#: standings/speakers.py msgid "total" msgstr "total" -#: standings/speakers.py:51 standings/speakers.py:107 +#: standings/speakers.py msgid "Total" msgstr "Total" -#: standings/speakers.py:58 standings/speakers.py:116 +#: standings/speakers.py msgid "average" msgstr "rata-rata" -#: standings/speakers.py:59 standings/speakers.py:117 +#: standings/speakers.py msgid "Avg" msgstr "Avg" -#: standings/speakers.py:66 +#: standings/speakers.py msgid "team points" msgstr "poin tim" -#: standings/speakers.py:67 +#: standings/speakers.py msgid "Team" msgstr "Tim" -#: standings/speakers.py:89 standings/speakers.py:126 +#: standings/speakers.py msgid "standard deviation" msgstr "standar deviasi" -#: standings/speakers.py:90 standings/speakers.py:127 +#: standings/speakers.py msgid "Stdev" msgstr "Stdev" -#: standings/speakers.py:98 +#: standings/speakers.py msgid "number of speeches given" msgstr "jumlah pidato yang diberikan" -#: standings/speakers.py:99 standings/speakers.py:138 +#: standings/speakers.py msgid "Num" msgstr "Jlh" -#: standings/speakers.py:137 +#: standings/speakers.py msgid "replies given" msgstr "penyimpul yang diberikan" -#: standings/speakers.py:147 +#: standings/speakers.py msgid "trimmed mean (high-low drop)" msgstr "rata-rata terpangkas (titik tinggi-rendah)" -#: standings/speakers.py:148 +#: standings/speakers.py msgid "Trim" msgstr "Trim" -#: standings/teams.py:62 +#: standings/teams.py msgid "points" msgstr "poin" -#: standings/teams.py:63 +#: standings/teams.py msgid "Pts" msgstr "Poin" -#: standings/teams.py:76 +#: standings/teams.py msgid "wins" msgstr "kemenangan" -#: standings/teams.py:77 standings/views.py:592 +#: standings/teams.py standings/views.py msgid "Wins" msgstr "Kemenangan" -#: standings/teams.py:87 +#: standings/teams.py msgid "total speaker score" msgstr "total nilai pembicara" -#: standings/teams.py:88 +#: standings/teams.py msgid "Spk" msgstr "Np" -#: standings/teams.py:97 +#: standings/teams.py msgid "average total speaker score" msgstr "rata-rata total nilai pembicara" -#: standings/teams.py:98 +#: standings/teams.py msgid "ATSS" msgstr "RTNP" -#: standings/teams.py:107 +#: standings/teams.py msgid "speaker score standard deviation" msgstr "standar deviasi nilai pembicara" -#: standings/teams.py:108 +#: standings/teams.py msgid "SSD" msgstr "SDNP" -#: standings/teams.py:118 +#: standings/teams.py msgid "sum of margins" msgstr "jumlah margin" -#: standings/teams.py:119 +#: standings/teams.py msgid "Marg" msgstr "Marg" -#: standings/teams.py:128 +#: standings/teams.py msgid "average margin" msgstr "rata-rata margin" -#: standings/teams.py:129 +#: standings/teams.py msgid "AWM" msgstr "RM" -#: standings/teams.py:138 +#: standings/teams.py msgid "average individual speaker score" msgstr "rata-rata nilai individu pembicara" -#: standings/teams.py:139 +#: standings/teams.py msgid "AISS" msgstr "RNIP" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by wins" msgstr "kekuatan undian berdasarkan kemenangan" -#: standings/teams.py:212 +#: standings/teams.py msgid "DS" msgstr "KU" -#: standings/teams.py:219 +#: standings/teams.py msgid "draw strength by total speaker score" msgstr "kekuatan undian berdasarkan total nilai pembicara" -#: standings/teams.py:220 +#: standings/teams.py msgid "DSS" msgstr "KUTNP" -#: standings/teams.py:231 +#: standings/teams.py msgid "number of pullups before this round" msgstr "jumlah pullup sebelum ronde ini" -#: standings/teams.py:232 +#: standings/teams.py msgid "PU" msgstr "PU" -#: standings/teams.py:254 +#: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "jumlah juri yang memberikan suara untuk tim ini" -#: standings/teams.py:255 +#: standings/teams.py msgid "Ballots" msgstr "Balot" -#: standings/teams.py:256 +#: standings/teams.py msgid "votes/ballots carried" msgstr "suara/balot yang dimiliki" -#: standings/teams.py:280 +#: standings/teams.py msgid "number of firsts" msgstr "jumlah posisi pertama" -#: standings/teams.py:281 +#: standings/teams.py msgid "1sts" msgstr "1sts" -#: standings/teams.py:290 +#: standings/teams.py msgid "number of seconds" msgstr "jumlah posisi kedua" -#: standings/teams.py:291 +#: standings/teams.py msgid "2nds" msgstr "2nds" -#: standings/teams.py:300 +#: standings/teams.py msgid "number of thirds" msgstr "jumlah posisi ketiga" -#: standings/teams.py:301 +#: standings/teams.py msgid "3rds" msgstr "3rds" -#: standings/teams.py:313 +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py msgid "Who-beat-whom" msgstr "Siapa-mengalahkan-siapa" -#: standings/teams.py:314 +#: standings/teams.py msgid "WBW" msgstr "SNS" -#: standings/teams.py:315 +#: standings/teams.py msgid "who-beat-whom" msgstr "siapa-mengalahkan-siapa" -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." msgstr "Hasil dari ronde diam dan ronde saat ini (jika ada) tidak akan dimasukkan." -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "Daftar ini diurutukan berdasarkan poin dari tim, kemudian berdasarkan abjad dari nama tim. Daftar ini tidak menandakan ranking dari setiap tim dalam setiap bracket. %(silent_round_sentence)s" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "Daftar ini diurutukan berdasarkan jumlah kemenangan dari tim, kemudian berdasarkan abjad dari nama tim. Daftar ini tidak menandakan ranking dari setiap tim dalam setiap bracket. %(silent_round_sentence)s" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." msgstr "Tidak ada ronde yang hasilnya tersedia." -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." msgstr "Pembicara pemyimpul diranking berdasarkan rata-rata nilai penyimpul." -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." msgstr "Pembicara dapat melewatkan hingga %(count)s pidato penyimpul sebelum mereka dihapus dari tabulasi penyimpul." -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." msgstr "Semua pembicara penyimpul muncul di klasemen ini, tidak peduli berapa banyak penyimpul yang mereka lewatkan." -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." msgstr "Pengaturan ini dapat diubah pada seksi Klasemen dari konfigurasi turnamen ini." -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." msgstr "Presedensi klasemen pembicara kosong. Ini artinya pembicara tidak diranking berdasarkan metrik apapun, sehingga semua pembicara setara. Jika ini bukan yang Anda inginkan, atur presedensi klasemen pembicara pada seksi Klasemen dari konfigurasi turnamen ini. Pada sebagian besar turnamen, metrik pertama seharusnya total atau rata-rata." -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." msgstr "Pembicara diranking berdasarkan rata-rata nilai." -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." msgstr "Pembicara diranking berdasarkan total nilai. Setiap pembicara yang melewatkan sebuah debat akan dihukum berat pada ranking ini." -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." msgstr "Pembicara dapat melewatkan hingga %(count)s debat sebelum mereka dihapus dari tabulasi pembicara." -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." msgstr "Semua pembicara muncul di klasemen ini, tidak peduli berapa banyak debat yang mereka lewatkan." -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." msgstr "Menetapkan batas jumlah debat yang dilewatkan memerlukan metrik \"jumlah pidato yang diberikan\" untuk disertakan pada penghitungan klasemen pembicara, sehingga secara otomatis telah ditambahkan. Untuk menghilangkan pesan peringatan ini, tambahkan Jumlah pidato yang diberikan ke metrik tambahan Klasemen pembicara pada seksi Klasemen dari konfigurasi turnamen ini." -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" msgstr "Tinjauan Keberagaman" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." msgstr "Data hasil yang ditampilkan di sini disajikan tanpa skor ujicoba demi kepentingan statistik. Korelasi sebaiknya tidak secara otomatis dianggap benar, terutama pada turnamen kecil. 'Wilayah' merupakan kategori yang dapat dikustomisasi yang diperuntukkan untuk sekumpulan institusi, dan dihitung berdasarkan jumlah partisipan yang telah diperuntukkan untuk institusi tersebut." -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" msgstr "Laki-laki" -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" msgstr "Bukan laki-laki" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" msgstr "Belum ditentukan/tercatat" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" msgstr "Klasemen" -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" msgstr "Nilai Pembicara Teratas" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" msgstr "%(speaker)s pada %(round)s" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:152 -#: standings/templates/standings_index.html:167 -#: standings/templates/standings_index.html:186 +#: standings/templates/standings_index.html msgid "No data yet" msgstr "Belum ada data" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" msgstr "Nilai Pembicara Terbawah" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" msgstr "Margin Terbesar" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" msgstr "%(team)s vs %(opp)s pada %(round)s" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" msgstr "Margin Terdekat" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" msgstr "Nilai Tim Teratas" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" msgstr "%(team)s di %(round)s" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" msgstr "Nilai Tim Terbawah" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" msgstr "Mosi Paling/Kurang Populer" -#: standings/templates/standings_index.html:177 +#: standings/templates/standings_index.html msgid "Average Speaks" msgstr "Rata-rata Nilai Pembicara" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" msgstr "Tinjauan" -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "Tim" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" msgstr "Semua" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" msgstr "Pembicara" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" msgstr "Substantif" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" msgstr "Semua" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "Pembicara " -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" msgstr "Penyimpul" -#: standings/templates/standings_menu.html:63 -#: standings/templates/standings_menu.html:76 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "Mosi" -#: standings/templates/standings_menu.html:66 +#: standings/templates/standings_menu.html msgid "By Round" msgstr "Berdasarkan Ronde" -#: standings/templates/standings_menu.html:81 +#: standings/templates/standings_menu.html msgid "Diversity" msgstr "Keberagaman" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." msgstr "Presedensi klasemen tim kosong. Ini artinya tim tidak diranking berdasarkan metrik apapun, sehingga semua tim setara. Jika ini bukan yang Anda inginkan, atur presedensi klasemen tim pada seksi Klasemen dari konfigurasi turnamen ini. Pada sebagian besar turnamen, metrik pertama seharusnya jumlah poin atau jumlah kemenangan." -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " msgstr "

    Ada kesalahan saat membangkitkan klasemen: %(message)s

    " -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " msgstr "

    Anda mungkin perlu memeriksa kembali konfigurasi klasemen pada seksi Setup. Jika masalahnya terus berlanjut dan Anda tidak yakin bagaimana memperbaikinya, mohon kontak pengembang.

    " -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " msgstr "

    Direktur tabulasi perlu menyelesaikan masalah ini.

    " -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" msgstr "pada %(round)s" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" msgstr "%(title)s(Hanya %(limit)d Teratas)" -#: standings/views.py:208 standings/views.py:428 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." msgstr "Tabulasi tidak dapat ditampilkan karena semua ronde pada turnamen sejauh ini merupakan ronde diam." -#: standings/views.py:290 +#: standings/views.py msgid "Speaker Standings" msgstr "Klasemen Pembicara" -#: standings/views.py:326 +#: standings/views.py msgid "Speaker Tab" msgstr "Tabulasi Individu" -#: standings/views.py:341 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" msgstr "Klasemen Pembicara %(category)s" -#: standings/views.py:359 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" msgstr "Tabulasi Pembicara %(category)s" -#: standings/views.py:372 +#: standings/views.py msgid "Reply Speaker Standings" msgstr "Klasemen Pembicara Penyimpul" -#: standings/views.py:380 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." msgstr "Pidato penyimpul tidak diaktifkan pada turnamen ini." -#: standings/views.py:408 +#: standings/views.py msgid "Reply Speaker Tab" msgstr "Tabulasi Pembicara Penyimpul" -#: standings/views.py:420 standings/views.py:669 +#: standings/views.py msgid "Team Standings" msgstr "Klasemen Tim" -#: standings/views.py:499 +#: standings/views.py msgid "Team Tab" msgstr "Tabulasi Tim" -#: standings/views.py:518 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" msgstr "Klasemen Tim %(category)s" -#: standings/views.py:545 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" msgstr "Tabulasi Tim %(category)s" -#: standings/views.py:556 +#: standings/views.py msgid "Current Team Standings" msgstr "Klasemen Tim Saat Ini" -#: standings/views.py:592 +#: standings/views.py msgid "Points" msgstr "Poin" -#: standings/views.py:638 +#: standings/views.py msgid "Feedback Overview" msgstr "Gambaran Umpan Balik" -#: standings/views.py:655 -msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." -msgstr "Nilai juri ditentukan berdasarkan kombinasi yang dapat dikustomisasi dari nilai awal dan rating umpan balik mereka. Kombinasi saat ini dinyatakan di bawah sebagai 'Komponen Nilai'. Rating umpan balik ditentukan dengan mencari rata-rata hasil dari semua umpan balik individu dari semua ronde.Baca lebih lanjut." +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +msgstr "" diff --git a/tabbycat/tournaments/locale/id/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/id/LC_MESSAGES/django.po index d4c477ae044..2a7f965a4c3 100644 --- a/tabbycat/tournaments/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -18,1024 +18,1014 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "Turnamen" -#: tournaments/forms.py:29 +#: tournaments/forms.py msgid "Number of preliminary rounds" msgstr "Jumlah ronde pre eliminasi" -#: tournaments/forms.py:34 +#: tournaments/forms.py msgid "Number of teams in the open break" msgstr "Jumlah tim pada open break" -#: tournaments/forms.py:35 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." msgstr "Biarkan kosong jika tidak ada ronde break." -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Did you agree with their decision?" msgstr "Apakah Anda setuju dengan keputusan mereka?" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Agree?" msgstr "Setuju?" -#: tournaments/forms.py:47 +#: tournaments/forms.py msgid "Comments" msgstr "Komentar" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:61 +#: tournaments/forms.py msgid "Open" msgstr "Open" -#: tournaments/forms.py:86 +#: tournaments/forms.py msgid "Format Configuration" msgstr "Format Konfigurasi" -#: tournaments/forms.py:87 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" msgstr "Gunakanlah sekumpulan pengaturan yang standar agar sesuai dengan format debat yang umum" -#: tournaments/forms.py:91 +#: tournaments/forms.py msgid "Public Configuration" msgstr "Konfigurasi Publik" -#: tournaments/forms.py:92 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" msgstr "Tampilkan informasi yang bukan rahasia pada sisi publik dari situs ini, seperti undian (setelah dirilis) dan mosi dari ronde sebelumnya" -#: tournaments/forms.py:99 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" -msgstr "Tabulasi:[tuliskan staf tabulasi di sini]
    Organisasi:[tuliskan anggota panitia penyelenggara di sini]
    Penjurian:[tuliskan ketua juri di sini]" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +msgstr "" -#: tournaments/forms.py:195 +#: tournaments/forms.py msgid "Current preliminary round" msgstr "Ronde penyisihan saat ini" -#: tournaments/forms.py:196 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" msgstr "Semua ronde penyisihan sudah selesai" -#: tournaments/forms.py:208 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" msgstr "Ronde eliminasi saat ini di %(category)s(hanya jika semua ronde penyisihan sudah selesai)" -#: tournaments/forms.py:214 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" msgstr "Semua ronde penyisihan di %(category)s sudah selesai" -#: tournaments/forms.py:226 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." msgstr "Jika ronde saat ini adalah ronde penyisihan, bidang ini harus kosong." -#: tournaments/forms.py:232 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." msgstr "Jika semua ronde penyisihan sudah selesai, bidang ini diperlukan." -#: tournaments/forms.py:267 +#: tournaments/forms.py #, python-format msgid "%(name)s (%(abbreviation)s)" msgstr "" -#: tournaments/mixins.py:109 +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." msgstr "Anda dialihkan ke halaman ini karena turnamen %(tournament)s tidak memiliki ronde. Silahkan membuat beberapa ronde sebelum kembali ke situs admin." -#: tournaments/mixins.py:117 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." msgstr "Ada masalah dengan data untuk turnamen %(tournament)s. Silahkan hubungi direktur tabulasi dan mintalah mereka untuk menginvestigasi." -#: tournaments/mixins.py:130 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." msgstr "Anda dialihkan ke laman ini karena ada masalah dengan bagaimana tim dialokasikan ke sisi dalam sebuah debat." -#: tournaments/mixins.py:137 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." msgstr "Ada masalah dengan bagaimana tim dialokasikan ke sisi pada sebuah debat. Direktur tabulasi perlu menyelesaikan masalah ini." -#: tournaments/mixins.py:236 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" msgstr "untuk %(round)s" -#: tournaments/mixins.py:437 +#: tournaments/mixins.py msgid "Return to Draw" msgstr "Kembali ke Undian" -#: tournaments/models.py:26 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." msgstr "Anda tidak dapat menggunakan slug ini sebagai slug turnamen, karena slug ini sudah dialokasikan untuk URL sistem Tabbycat. Silahkan coba yang lain." -#: tournaments/models.py:33 tournaments/models.py:320 +#: tournaments/models.py msgid "name" msgstr "nama" -#: tournaments/models.py:34 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" msgstr "Nama lengkap, seperti \"Kejuaraan Debat Intervarsitas Australasia 2016\"" -#: tournaments/models.py:36 +#: tournaments/models.py msgid "short name" msgstr "nama pendek" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" msgstr "Nama yang digunakan di menu, seperti \"Australs 2016\"" -#: tournaments/models.py:39 tournaments/models.py:314 +#: tournaments/models.py msgid "sequence number" msgstr "nomor urut" -#: tournaments/models.py:40 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." msgstr "Angka yang menentukan urutan relatif dimana turnamen ditampilkan di laman utama." -#: tournaments/models.py:42 +#: tournaments/models.py msgid "slug" msgstr "slug" -#: tournaments/models.py:43 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" msgstr "Sub-URL dari turnamen, tidak boleh mengandung spasi, contohnya \"australs2016\"" -#: tournaments/models.py:44 +#: tournaments/models.py msgid "active" msgstr "aktif" -#: tournaments/models.py:47 tournaments/models.py:313 +#: tournaments/models.py msgid "tournament" msgstr "turnamen" -#: tournaments/models.py:48 +#: tournaments/models.py msgid "tournaments" msgstr "turnamen" -#: tournaments/models.py:285 +#: tournaments/models.py msgid "Random" msgstr "Acak" -#: tournaments/models.py:286 +#: tournaments/models.py msgid "Manual" msgstr "Manual" -#: tournaments/models.py:287 +#: tournaments/models.py msgid "Round-robin" msgstr "Round-robin" -#: tournaments/models.py:288 +#: tournaments/models.py msgid "Power-paired" msgstr "Power-paired" -#: tournaments/models.py:289 tournaments/models.py:296 +#: tournaments/models.py msgid "Elimination" msgstr "Eliminasi" -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Preliminary" msgstr "Penyisihan" -#: tournaments/models.py:305 +#: tournaments/models.py msgid "None" msgstr "Tidak ada" -#: tournaments/models.py:306 +#: tournaments/models.py msgid "Draft" msgstr "Draf" -#: tournaments/models.py:307 +#: tournaments/models.py msgid "Confirmed" msgstr "Terkonfirmasi" -#: tournaments/models.py:308 +#: tournaments/models.py msgid "Released" msgstr "Dirilis" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" msgstr "Angka yang menentukan urutan dari ronde, harus dihitung secara berurutan dari 1 untuk ronde pertama" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "completed" msgstr "selesai" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" msgstr "Benar jika ronde sudah selesai, di mana umumnya berarti semua hasil sudah dimasukkan dan dikonfirmasi" -#: tournaments/models.py:320 +#: tournaments/models.py msgid "e.g. \"Round 1\"" msgstr "misalnya \"Ronde 1\"" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "abbreviation" msgstr "singkatan" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "e.g. \"R1\"" msgstr "misalnya \"R1\"" -#: tournaments/models.py:323 +#: tournaments/models.py msgid "stage" msgstr "tahap" -#: tournaments/models.py:324 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" msgstr "Penyisihan = inrounds, eliminasi = outrounds" -#: tournaments/models.py:326 +#: tournaments/models.py msgid "draw type" msgstr "jenis undian" -#: tournaments/models.py:327 +#: tournaments/models.py msgid "Which draw method to use" msgstr "Metode pengundian yang akan digunakan" -#: tournaments/models.py:330 +#: tournaments/models.py msgid "break category" msgstr "kategori break" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "If elimination round, which break category" msgstr "Jika ronde penyisihan, kategori break-nya apa" -#: tournaments/models.py:334 +#: tournaments/models.py msgid "draw status" msgstr "status undian" -#: tournaments/models.py:335 +#: tournaments/models.py msgid "The status of this round's draw" msgstr "Status dari undian ronde ini" -#: tournaments/models.py:338 +#: tournaments/models.py msgid "feedback weight" msgstr "bobot umpan balik" -#: tournaments/models.py:340 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." msgstr "Sejauh mana nilai keseluruhan masing-masing juri bergantung pada umpan balik dibandingkan dengan nilai awal mereka. Jika 0, 100% diambil dari nilai awal mereka, jika 1 100% diambil dari umpan balik." #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:343 +#: tournaments/models.py msgid "silent" msgstr "diam" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." msgstr "Jika ditandai diam, informasi mengenai ronde ini (seperti hasilnya) tidak akan ditampilkan pada publik." -#: tournaments/models.py:346 +#: tournaments/models.py msgid "motions released" msgstr "mosi dirilis" -#: tournaments/models.py:347 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" msgstr "Apakah mosi akan tampil di situs publik, asumsi fitur tersebut aktif" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "starts at" msgstr "mulai pada" -#: tournaments/models.py:351 +#: tournaments/models.py msgid "weight" msgstr "bobot" -#: tournaments/models.py:352 +#: tournaments/models.py msgid "A factor for the points received in the round. For example, if 2, all points are doubled." msgstr "Sebuah faktor untuk nilai yang didapatkan pada ronde. Sebagai contoh, jika 2, semua nilai digandakan sebesar 2 kali lipat." -#: tournaments/models.py:355 +#: tournaments/models.py msgid "round" msgstr "ronde" -#: tournaments/models.py:356 +#: tournaments/models.py msgid "rounds" msgstr "ronde" -#: tournaments/models.py:369 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." msgstr "Sebuah ronde di tahap eliminasi harus memiliki tipe undian \"Eliminasi\"." -#: tournaments/models.py:372 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." msgstr "Sebuah ronde di tahap penyisihan tidak boleh memiliki tipe undian \"Eliminasi\"." -#: tournaments/models.py:377 +#: tournaments/models.py msgid "Elimination rounds must have a break category." msgstr "Ronde eliminasi harus memiliki sebuah kategori break." -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" msgstr "Dasbor" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" msgstr "Tinjauan" -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" msgstr "ronde saat ini: %(round)s, status: %(status)s" -#: tournaments/templates/blank_site_start.html:7 -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" msgstr "Selamat datang di Tabbycat!" -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." msgstr "Untuk memulai, Anda perlu membuat akun pengguna pertama. Akun ini adalah akun \"superuser\": akun ini dapat menyunting semua hal di situs. Maka dari itu, Anda harus menggunakan kata sandi yang kuat." -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." msgstr "Anda hanya dapat membuat akun ini sekali, tetapi jika Anda mau, Anda dapat mengubah nama pengguna dan kata sandi setelah akun tersebut dibuat, atau menambahkan superuser baru setelahnya." -#: tournaments/templates/blank_site_start.html:32 +#: tournaments/templates/blank_site_start.html msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." msgstr "Alamat email digunakan untuk reset kata sandi. Anda tidak perlu mengisinya, tetapi jika tidak, Anda tidak akan bisa me-reset kata sandi Anda jika Anda melupakannya." -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" msgstr "Buat Akun" -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" msgstr "Konfigurasi Turnamen %(tournament)s" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." msgstr "Untuk menyelesaikan pembuatan turnamen Anda pilih pilihan konfigurasi dasar. Ingat bahwa hal ini dapat selalu diubah nanti (dan dengan kontrol yang presisi) jika dibutuhkan." -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" msgstr "Konfigurasi Turnamen" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" msgstr "Buat Turnamen Baru" -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." -msgstr "Tabbycat gratis digunakan untuk turnamen nonprofit dan non-fundraising (meskipun donasi dianjurkan). Jika turnamen Anda diselenggarakan untuk profit dan fundraising, tolong ingat bahwa ada untuk pembayaran yang dibutuhkan. Untuk perincian lebih, lihatlah persetujuan lisensi Tabbycat." +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgstr "" -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" msgstr "Hanya mencoba Tabbycat?" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." msgstr "Jika Anda sedang mempelajari atau mencoba-coba Tabbycat, cara paling mudah dengan membuat turnamen demo yang telah diisi sebelumnya dengan sekumpulan tim, juri, ruangan, dan sejenisnya yang palsu (tapi unik). Nantinya Anda dapat menghapus turnamen demo ini, atau membuat instansi baru untuk turnamen real Anda." -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" msgstr "Memuat %(demo)s" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." msgstr "Anda telah membuat sebuah turnamen menggunakan data set ini. Memuat ulang data tersebut akan menghapus seluruh data dari pertandingan tersebut." -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" msgstr "Buat Turnamen" -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" msgstr "Batalkan dan kembali ke laman awal" -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" msgstr "Tim Debat Tidak Ada" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." msgstr "Tabbycat selalu mewajibkan bahwa, untuk setiap debat, satu dan hanya satu tim yang dialokasikan untuk setiap sisi. Ketika hal tersebut tidak diikuti, kesalahan ini terjadi. Biasanya, hal ini merupakan akibat dari debat-debat disunting secara manual." -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" msgstr "Daftar dari debat yang salah ditampilkan di bawah ini. Untuk memperbaikinya, Anda harus melakukan hal berikut:" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." msgstr "Klik tombol Perbaiki debat ini untuk debat tersebut." #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." msgstr "Pastikan setiap sisi yang harus hadir di debat hadir dan memiliki sebuah tim yang telah ditetapkan. Jika tim tidak ada, carilah baris yang kosong dan gunakan simbol kaca pembesar untuk memilih sebuah tim. Setelah itu aturlah sisi dari tim baru sesuai dengan kebutuhan." #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." msgstr "Pastikan tidak ada sisi yang muncul lebih dari sekali pada debat." #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." msgstr "Simpan perubahan." -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." msgstr "Jika Anda sudah memperbaiki semua debat, Anda seharusnya bisa kembali ke laman apapun di mana Anda semula berada tanpa terjadi masalah." -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." msgstr "Anda juga dapat melihat semua debat di seksi Debat dari Area Sunting Basisdata." -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" msgstr "ID Debat" -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" -msgstr "Tim(plural) di %(side)s" +msgid "Teams on %(side)s" +msgstr "" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" msgstr "Tautan untuk memperbaiki debat ini" -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" msgstr "Tidak ada tim" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" msgstr "Multipel tim" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" msgstr "Perbaiki debat ini" -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" msgstr "Tampaknya semua debat dalam kondisi yang baik!" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." msgstr "Jika Anda terus-menerus dialihkan ke laman ini dan Anda tidak tahu mengapa, silahkan hubungi pengembang Tabbycat." -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" msgstr "Selamat Datang di %(tournament)s" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." msgstr "Tidak ada informasi publik yang tersedia untuk turnamen ini." -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" msgstr "Tabulasi Tim" -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" msgstr "Tabulasi Tim %(category)s" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" msgstr "Tabulasi Pembicara" -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" msgstr "Tabulasi Pembicara %(category)s" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" msgstr "Tabulasi Penyimpul" -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" msgstr "Tabulasi Juri" -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" msgstr "Tabulasi Mosi" -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" msgstr "Sisi" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:203 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" msgstr "Pengundian untuk %(round)s" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" msgstr "Pengundian untuk Ronde Ini" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" msgstr "Undian untuk %(round)s belum dirilis" -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" msgstr "Udian untuk ronde selanjutnya belum dirilis" -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" msgstr "Cek-In" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" msgstr "Hasil" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "Mosi" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" msgstr "Klasemen Tim" -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" msgstr "Break %(category)s" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" msgstr "Juri Breaking" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" msgstr "Keberagaman" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" msgstr "Partisipan" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" msgstr "Institusi" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" msgstr "Progres Umpan Balik" -#: tournaments/templates/public_tournament_index.html:188 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Enter Ballot for %(round)s" msgstr "Masukkan Balot untuk %(round)s" -#: tournaments/templates/public_tournament_index.html:195 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" msgstr "Berikan Umpan Balik" -#: tournaments/templates/public_tournament_index.html:217 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" msgstr "Staf Turnamen" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" msgstr "Konfirmasi Ronde Selesai" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" msgstr "Masukkan Hasil" -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." msgstr "Email telah dikirim." -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" msgstr "Kirim Email Kemenangan/Kekalahan tim" -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" msgstr "Kirim Email Poin Tim" -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" msgstr "Tandai %(round)s telah Selesai" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" msgstr "Tetap Tandai %(round)s telah Selesai" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" msgstr "Pindah Ke %(round)s" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" msgstr "%(round)s telah ditandai selesai!" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." msgstr[0] "Berikut ialah ronde sebelumnya yang belum diselesaikan: %(prior_rounds_not_completed)s. Anda sebaiknya menyelesaikan ronde tersebut sebelum menandai ronde ini selesai." -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" msgstr "Semua balot dari %(round)s sudah dikonfirmasi. Anda bisa lanjut tanpa masalah!" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." msgstr[0] "Masih ada %(num_unconfirmed)s balot yang belum dikonfirmasi. Sebaiknya Anda tidak melanjutkan ke ronde berikutnya sebelum semua balot terkonfirmasi." -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " msgstr "

    Ronde ini merupakan ronde diam.

    Meskipun tampilan publik untuk hasil dikaktifkan, hasil untuk ronde ini setelah ronde ini selesai akan tetap tersembunyi dari tampilan publik.

    Anda dapat mengubah ronde mana yang diam di Area Sunting Basisdata.

    " -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "

    Hasil untuk %(round)s akan dipublikasi secara online ketika Anda menandai ronde ini telah selesai!

    Ronde ini bukan ronde diam, dan tampilan publik untuk hasil telah diaktifkan.

    Jika Anda ingin hasil untuk ronde ini tetap tersembunyi, Anda dapat menandai ronde ini sebagai diam di Area Sunting Basisdata.

    Jika Anda ingin menonaktifkan tampilan publik untuk hasil, Anda dapat melakukannya di konfigurasi turnamen.

    " -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" msgstr "Tetapkan Ronde Saat Ini" -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" msgstr "Kembali ke konfigurasi" -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." msgstr "Tidak ada ronde yang ditetapkan saat ini. Agar Tabbycat dapat berjalan, silahkan tetapkanronda saat ini dari turnamen %(tournament)s." -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." msgstr "Pada laman ini, Anda dapat menetapkan ronde saat ini dari turnamen %(tournament)s." -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "Turnamen %(tournament)s tidak memiliki ronde. Anda perlu untuk menambahkan ronde dan asosiasikan ronde tersebut dengan turnamen ini sebelum Anda dapat menetapkan ronde saat ini." -#: tournaments/templates/set_round_weights.html:4 -#: tournaments/templates/set_round_weights.html:5 +#: tournaments/templates/set_round_weights.html msgctxt "page title" -msgid "Set Round Weights" +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: tournaments/templates/set_round_weights.html:8 +#: tournaments/templates/set_round_weights.html msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." msgstr "" -#: tournaments/templates/set_round_weights.html:41 +#: tournaments/templates/set_round_weights.html msgctxt "button" msgid "Set weights" msgstr "" -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:47 -msgid "Inactive Tournaments" -msgstr "Turnamen Tidak Aktif" - -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/site_index.html msgid "Welcome!" msgstr "Selamat Datang!" -#: tournaments/templates/site_index.html:21 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" msgstr "Sepertinya tidak ada turnamen pada situs ini. Apakah ingin membuat sebuah turnamen baru?" -#: tournaments/templates/site_index.html:30 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." msgstr "Tidak ada turnamen yang aktif pada situs ini." -#: tournaments/templates/site_index.html:34 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." msgstr "Tidak ada turnamen pada situs ini." -#: tournaments/templates/site_index.html:55 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html msgid "New Tournament" msgstr "Turnamen Baru" -#: tournaments/templates/site_index.html:58 +#: tournaments/templates/site_index.html msgid "Edit Database Area" msgstr "Sunting Area Basisdata" -#: tournaments/templates/site_index.html:61 +#: tournaments/templates/site_index.html msgid "Send a Test Email" msgstr "Kirim sebuah Email Uji Coba" -#: tournaments/templates/site_index.html:64 +#: tournaments/templates/site_index.html msgid "Import DebateXML" msgstr "Impor DebateXML" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Get API Token / Change Password (%(user)s)" msgstr "Dapatkan Token API/Ubah Kata Sandi (%(user)s)" -#: tournaments/templates/site_index.html:77 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" msgstr "Keluar (%(user)s)" -#: tournaments/templates/site_index.html:83 +#: tournaments/templates/site_index.html msgid "Log In as Admin" msgstr "Masuk sebagai Admin" -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." msgstr "Kami harap Anda senang menggunakan Tabbycat untuk turnamen Anda. Kami sangat menghargai jika Anda berminat memberi donasi untuk proyek ini demi mendukung proses pengembangan dan pengelolaannya. Untuk turnamen dengan ukuran berikut, Kami menyarankan donasi sebesar $%(amount)s. Perhatikan jika turnamen Anda dibuat untuk profit, atau untuk fundraising, memenuhi pembayaran ini merupakan syarat yang wajib dari lisensi perangkat lunak Tabbycat. Pelajari lebih lanjut tentang donasi." -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" msgstr "Selamat Datang di Turnamen baru Anda!" -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." msgstr "Langkah selanjutnya ialah impor data awal dari turnamen Anda: institusi, tim, juri dan ruangan yang akan ada pada turnamen Anda. Terdapat beberapa cara untuk melakukan hal ini. Untuk turnamen kecil-ke-menengah, importir sederhana ialah cara paling baik." #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." msgstr "Untuk informasi lebih lanjut, silahkan periksa dokumentasi Kami tentang mengimpor data awal." -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." msgstr "Gunakan importir sederhana untuk menambahkan data awal Anda." -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" -msgstr "Pindah ke area check in untuk mulai membuat undian untuk %(round)s" +msgid "Mark participants as available to prepare a draw for %(round)s" +msgstr "" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" msgstr "Pindah ke area undian untuk mengalokasi juri untuk %(round)s" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" -msgstr "Pindah ke area hasil untuk mulai memasukkan balot untuk %(round)s" +msgid "Go to the results area to enter ballots for %(round)s" +msgstr "" -#: tournaments/templates/tournament_index.html:74 +#: tournaments/templates/tournament_index.html msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." msgstr "" -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" msgstr "Area Administrator untuk %(tn)s" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" msgstr "Area Asisten untuk %(tn)s" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" msgstr "Area Publik untuk %(tn)s" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" msgstr "afirmatif" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" msgstr "negatif" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" msgstr "tim afirmatif" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" msgstr "tim negatif" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" msgstr "Afi" -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" msgstr "Neg" -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" msgstr "pemerintah" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" msgstr "oposisi" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" msgstr "tim pemerintah" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" msgstr "tim oposisi" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" msgstr "Pem" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" msgstr "Opo" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" msgstr "proposisi" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" msgstr "tim proposisi" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" msgstr "Prop" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" msgstr "pro" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" msgstr "kon" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" msgstr "tim pro" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" msgstr "tim kon" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" msgstr "Pro" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" msgstr "Kon" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" msgstr "pemohon" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" msgstr "terdakwa" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" msgstr "tim pemohon" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" msgstr "tim terdakwa" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" msgstr "Pmh" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" msgstr "Tdw" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "pembuka dari pemerintah" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "pembuka dari oposisi" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "penutup dari pemerintah" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "penutup dari oposisi" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" msgstr "pembuka dari tim pemerintah" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" msgstr "pembuka dari tim oposisi" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" msgstr "penutup dari tim pemerintah" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" msgstr "penutup dari tim oposisi" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "PbkP" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "PbkO" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "PtpP" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "PtpO" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "Ronde %(number)d" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" msgstr "R%(number)d" -#: tournaments/views.py:151 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" msgstr "%(round)s telah ditandai selesai. Sekarang semua ronde telah selesai, jadi turnamen Anda telah selesai! Selamat!" -#: tournaments/views.py:157 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." msgstr "%(round)s telah ditandai selesai. Ronde tersebut ialah ronde terakhir dari rentetan ronde tersebut! Pindah kembali ke ronde pertama yang belum ditandai selesai." -#: tournaments/views.py:170 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." msgstr "%(round)s telah ditandai selesai. Anda berhasil tiba di akhir ronde penyisihan! Selamat! Langkah selanjutnya ialah membuat break." -#: tournaments/views.py:176 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." msgstr "%(round)s telah ditandai selesai. Ronde tersebut merupakan ronde penyisihan terakhir, tetapi satu atau lebih ronde penyisihan masih belum selesai. Pindah kembali ke ronde penyisihan pertama yang belum selesai." -#: tournaments/views.py:184 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" msgstr "%(this_round)s telah ditandai selesai. Lanjut ke %(next_round)s! Woohoo! Lanjut terus!" -#: tournaments/views.py:201 +#: tournaments/views.py msgid "8-team generic dataset" msgstr "dataset 8-tim umum" -#: tournaments/views.py:202 +#: tournaments/views.py msgid "24-team Australs dataset" msgstr "dataset 24-tim Australs" -#: tournaments/views.py:203 +#: tournaments/views.py msgid "88-team BP dataset" msgstr "dataset 88-tim BP" -#: tournaments/views.py:288 -msgid "Successfully set round weights." +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." msgstr "" diff --git a/tabbycat/utils/locale/id/LC_MESSAGES/django.po b/tabbycat/utils/locale/id/LC_MESSAGES/django.po index a62ffd56759..ec2ee0b2977 100644 --- a/tabbycat/utils/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-12 11:59\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -18,303 +18,310 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "Email address" -msgstr "" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "Ronde" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "Tim" + +#: utils/admin.py +msgid "Speaker" +msgstr "Pendebat" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "Turnamen" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "Sisi" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "Mosi" + +#: utils/admin.py +msgid "Confirmed" +msgstr "Terkonfirmasi" + +#: utils/admin.py +msgid "Adjudicator" +msgstr "Juri" -#: utils/tables.py:47 +#: utils/tables.py msgid "No Data Available" msgstr "Tidak ada data yang tersedia" -#: utils/tables.py:155 utils/tables.py:156 +#: utils/tables.py msgid "Ⓒ" msgstr "Ⓒ" -#: utils/tables.py:157 +#: utils/tables.py msgid "Ⓣ" msgstr "Ⓣ" -#: utils/tables.py:161 +#: utils/tables.py msgid "chair" msgstr "ketua panel" -#: utils/tables.py:162 +#: utils/tables.py msgid "panellist" msgstr "panelis" -#: utils/tables.py:163 +#: utils/tables.py msgid "trainee" msgstr "trainee" -#: utils/tables.py:166 +#: utils/tables.py msgid "—" msgstr "" -#: utils/tables.py:167 +#: utils/tables.py msgid "Redacted" msgstr "Dihapus" -#: utils/tables.py:231 utils/tables.py:237 +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" msgstr "Lihat %(a)s Rekaman %(d)s" -#: utils/tables.py:247 utils/tables.py:252 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" msgstr "Tampilkan rekam jejak %(team)s" -#: utils/tables.py:274 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" msgstr "Nama samaran tim: %(name)s" -#: utils/tables.py:276 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" msgstr "Nama asli: %(name)s" -#: utils/tables.py:296 +#: utils/tables.py #, python-format msgid "%(team)s won" msgstr "%(team)s menang" -#: utils/tables.py:301 +#: utils/tables.py #, python-format msgid "%(team)s lost" msgstr "%(team)s kalah" -#: utils/tables.py:306 utils/tables.py:318 utils/tables.py:342 +#: utils/tables.py #, python-format msgid "%(team)s—no result" msgstr "%(team)s—tidak ada hasil" -#: utils/tables.py:323 +#: utils/tables.py #, python-format msgid "%(team)s placed %(place)s" msgstr "%(team)s mendapatkan urutan %(place)s" -#: utils/tables.py:332 +#: utils/tables.py #, python-format msgid "%(team)s is advancing" msgstr "%(team)s lanjut ke babak selanjutnya" -#: utils/tables.py:337 +#: utils/tables.py #, python-format msgid "%(team)s was eliminated" msgstr "%(team)s tereliminasi" -#: utils/tables.py:350 +#: utils/tables.py msgid "View/edit debate ballot" msgstr "Lihat/sunting lembar penilaian" -#: utils/tables.py:356 +#: utils/tables.py msgid "View debate ballot" msgstr "Lihat lembar penilaian" -#: utils/tables.py:369 +#: utils/tables.py #, python-format msgid " vs %(opposition)s" msgstr " vs %(opposition)s" -#: utils/tables.py:376 +#: utils/tables.py #, python-format msgid "Won against %(team)s" msgstr "Menang melawan %(team)s" -#: utils/tables.py:378 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" msgstr "Kalah dari %(team)s" -#: utils/tables.py:380 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" msgstr "Tidak ada hasil untuk debat melawan %(team)s" -#: utils/tables.py:405 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" msgstr "Total skor pembicara: %s" -#: utils/tables.py:412 +#: utils/tables.py msgid "Teams in debate:" msgstr "Tim dalam debat:" -#: utils/tables.py:415 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "%(team)s (%(side)s)" -#: utils/tables.py:416 utils/tables.py:420 utils/tables.py:446 -#: utils/tables.py:618 +#: utils/tables.py msgid "??" msgstr "??" -#: utils/tables.py:434 +#: utils/tables.py msgid "advancing" msgstr "maju" -#: utils/tables.py:435 +#: utils/tables.py msgid "Advancing" msgstr "Maju" -#: utils/tables.py:437 +#: utils/tables.py msgid "eliminated" msgstr "tereliminasi" -#: utils/tables.py:438 +#: utils/tables.py msgid "Eliminated" msgstr "Tereliminasi" -#: utils/tables.py:441 utils/tables.py:451 +#: utils/tables.py msgid "No result for debate" msgstr "Tak ada hasil untuk debat" -#: utils/tables.py:448 +#: utils/tables.py #, python-format msgid "Placed %(place)s" msgstr "Mendapatkan peringkat %(place)s" -#: utils/tables.py:463 -msgid "Tournament" -msgstr "Turnamen" - -#: utils/tables.py:472 -msgid "Round" -msgstr "Ronde" - -#: utils/tables.py:495 utils/tables.py:672 +#: utils/tables.py msgid "Name" msgstr "Nama" -#: utils/tables.py:501 utils/tables.py:650 +#: utils/tables.py msgid "Institution" msgstr "Institusi" -#: utils/tables.py:507 +#: utils/tables.py msgid "Member of the Adjudication Core" msgstr "Anggota Tim Penjurian Inti" -#: utils/tables.py:514 +#: utils/tables.py msgid "Independent Adjudicator" msgstr "Juri Undangan" -#: utils/tables.py:522 +#: utils/tables.py msgid "Always Trainee" msgstr "Selalu Trainee" -#: utils/tables.py:557 +#: utils/tables.py msgid "in minority" msgstr "sebagai minoritas" -#: utils/tables.py:590 +#: utils/tables.py msgid "Debate Adjudicators" msgstr "Juri Debat" -#: utils/tables.py:621 -msgid "Motion" -msgstr "Mosi" - -#: utils/tables.py:636 -msgid "Team" -msgstr "Tim" - -#: utils/tables.py:641 utils/tables.py:694 +#: utils/tables.py msgid "Categories" msgstr "Kategori" -#: utils/tables.py:692 +#: utils/tables.py msgid "Category" msgstr "Kategori" -#: utils/tables.py:719 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." msgstr "Ruangan ini %(predicate)s." -#: utils/tables.py:721 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." msgstr "Ruangan ini %(predicates)s, dan %(last_predicate)s." -#: utils/tables.py:736 +#: utils/tables.py msgid "Room" msgstr "Ruangan" -#: utils/tables.py:754 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" msgstr[0] "Tim telah bertemu %(count)d kali" -#: utils/tables.py:760 +#: utils/tables.py msgid "Teams are from the same institution" msgstr "Tim-tim dari institusi yang sama" -#: utils/tables.py:766 +#: utils/tables.py msgid "Conflicts/Flags" msgstr "Konflik/Peringatan" -#: utils/tables.py:819 +#: utils/tables.py msgid "The confirmed ballot" msgstr "Surat suara yang sudah dikonfirmasi" -#: utils/tables.py:824 utils/tables.py:849 +#: utils/tables.py msgid "No ballot" msgstr "Tidak ada kertas suara" -#: utils/tables.py:826 utils/tables.py:851 +#: utils/tables.py msgid "No scores" msgstr "Tidak ada nilai" -#: utils/tables.py:829 utils/tables.py:854 utils/tables.py:866 +#: utils/tables.py msgid "View Ballot" msgstr "Lihat Kertas suara" -#: utils/tables.py:836 +#: utils/tables.py msgid "The ballot you submitted" msgstr "Surat suara yang anda serahkan" -#: utils/tables.py:840 +#: utils/tables.py msgid "View/Edit Ballot" msgstr "Lihat/Edit Kertas suara" -#: utils/tables.py:874 +#: utils/tables.py msgid "Result" msgstr "Hasil" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:880 +#: utils/tables.py msgid "TBC" msgstr "UDK" -#: utils/tables.py:881 -msgid "Side" -msgstr "Sisi" - -#: utils/tables.py:919 -msgid "Team iron-manned this round and the last." -msgstr "Tim iron-manned di babak ini dan yang terakhir." +#: utils/tables.py +msgid "Team iron-personed this round and the last." +msgstr "" -#: utils/tables.py:922 -msgid "Team iron-manned this round." -msgstr "Tim iron-manned di babak ini." +#: utils/tables.py +msgid "Team iron-personed this round." +msgstr "" -#: utils/tables.py:925 -msgid "Team iron-manned last round." -msgstr "Babak terakhir timiron-manned." +#: utils/tables.py +msgid "Team iron-personed last round." +msgstr "" -#: utils/tables.py:942 utils/tables.py:943 +#: utils/tables.py #, python-format msgid "Team %(num)d" msgstr "Tim %(num)d" -#: utils/tables.py:950 +#: utils/tables.py msgid "Postpone" msgstr "Menunda" -#: utils/views.py:38 +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." msgstr "Ups! Anda tidak dimaksudkan untuk mengetik URL itu ke browser Anda." diff --git a/tabbycat/venues/locale/id/LC_MESSAGES/django.po b/tabbycat/venues/locale/id/LC_MESSAGES/django.po index c7cf7e9e1bf..3c0fa52dc74 100644 --- a/tabbycat/venues/locale/id/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-05 15:26-0300\n" -"PO-Revision-Date: 2021-04-18 11:54\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" "Last-Translator: philip_tc\n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -18,203 +18,201 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 +#: venues/apps.py msgid "Rooms" msgstr "Ruangan" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." msgstr "Pengundian telah dirilis, Batalkan rilis untuk menetapkan ruangan." -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." msgstr "Pengundian belum terkonfirmasi, pastikan pengundian agar dapat menetapkan ruangan." -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." msgstr "Berhasil mengalokasikan-otomatis ruangan-ruangan ke bagian Debat." -#: venues/models.py:9 venues/models.py:66 +#: venues/models.py msgid "name" msgstr "nama" -#: venues/models.py:11 venues/models.py:120 +#: venues/models.py msgid "priority" msgstr "prioritas" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" msgstr "Ruangan-ruangan dengan nomor prioritas yang lebih tinggi akan lebih mungkin terpilih saat mengalokasi Ruangan ke Debat" -#: venues/models.py:15 venues/models.py:78 +#: venues/models.py msgid "tournament" msgstr "turnamen" -#: venues/models.py:16 +#: venues/models.py msgid "URL" msgstr "URL" -#: venues/models.py:17 +#: venues/models.py msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" msgstr "Sebuah URL yang mengandung informasi tambahan mengenai ruangan ini, spt. sebuah peta atau tautan pertemuan (untuk turnamen daring)" -#: venues/models.py:24 +#: venues/models.py msgid "room" msgstr "ruangan" -#: venues/models.py:25 venues/models.py:76 +#: venues/models.py msgid "rooms" msgstr "ruangan" -#: venues/models.py:61 +#: venues/models.py msgid "Don't display in room name" msgstr "Jangan menampilkan di nama Ruangan" -#: venues/models.py:62 +#: venues/models.py msgid "Display as prefix" msgstr "Tampilkan sebagai prefiks" -#: venues/models.py:63 +#: venues/models.py msgid "Display as suffix" msgstr "Tampilkan sebagai sufiks" -#: venues/models.py:67 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." msgstr "Nama dari kategori, spt., \"Purple\", \"Step-free access\", \"Close to tab room\". Nama ini akan ditunjukkan saat kategori telah diawali atau diakhiri ke sebuah ruangan, spt., \"Purple – G05\"." -#: venues/models.py:71 +#: venues/models.py msgid "description" msgstr "keterangan" -#: venues/models.py:72 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." msgstr "Keterangan, sebagai predikat sebuah kalimat, spt. \"has step-free access\", \"is close to the briefing hall\". Keterangan ini mengikuti \"This room\" saat ditampilkan pada tooltip, e.g., \"This room is close to the briefing hall.\"." -#: venues/models.py:82 +#: venues/models.py msgid "display in room name" msgstr "ditampilkan di nama Ruangan" -#: venues/models.py:83 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" msgstr "Awalan: \"Purple – G05\", Akhiran: \"G05 – Purple\"" -#: venues/models.py:85 +#: venues/models.py msgid "display in public tooltip" msgstr "ditampilkan di tooltip publik" -#: venues/models.py:86 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." msgstr "Menampilkan keterangan di tooltip untuk Ruangan pada halaman-halaman publik. Bila keterangan tidak kosong, akan selalu muncul di halaman admin." -#: venues/models.py:90 +#: venues/models.py msgid "room category" msgstr "kategori ruangan" -#: venues/models.py:91 +#: venues/models.py msgid "room categories" msgstr "kategori-kategori ruangan" -#: venues/models.py:119 +#: venues/models.py msgid "category" msgstr "kategori" -#: venues/models.py:123 +#: venues/models.py msgid "subject content type" msgstr "tipe konten subjek" -#: venues/models.py:126 +#: venues/models.py msgid "subject ID" msgstr "ID subjek" -#: venues/models.py:132 +#: venues/models.py msgid "room constraint" msgstr "batasan ruangan" -#: venues/models.py:133 +#: venues/models.py msgid "room constraints" msgstr "batasan-batasan ruangan" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" msgstr "Kategori-kategori Ruangan" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." msgstr "Kategori-kategori Ruangan memungkinkan anda untuk menggabungkan ruangan-ruangan ke \"zones\" untuk ditampilkan dalam pengundian dan membuat navigasi menjadi lebih mudah untuk para peserta, dan/atau menentukan batasan-batasan pada pengalokasian ruangan yang membutuhkan para tim, para juri atau petunjuk-petunjuk untuk ditempatkan di sebuah ruangan dalam kategori tertentu." -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." msgstr "Bila anda ingin menghapus kategori-kategori ruangan, gunakan area Edit Basisdata." -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" msgstr "Simpan Kategori-kategori Ruangan" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" msgstr "Batasan-batasan Ruangan" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." msgstr "Batasan-batasan Ruangan memberitahu allocator ruangan agar berusaha mempertahankan tim atau juri yang sudah ditentukan, atau semua tim-tim (tapi tidak para juri) dari institusi yang ditentukan, dalam ruangan di kategori yang diberikan. Bidang \"priority\" memecahkan batasan-batasan yang bertentangan: prioritas yang lebih tinggi mendapat hak lebih tinggi. Anda juga bisa menggunakan bidang prioritas untuk menentukan batasan-batasan \"lower-preference\", yang diambil bila tidak sampai pada batasan prioritas yang lebih tinggi." -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" msgstr "Simpan Batasan-batasan Ruangan" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" msgstr "Batasan Ruangan dari %(name)s memenuhi (%(category)s)" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" msgstr "Ruangan tidak memenuhi batasan apa-apa dari %(name)s" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" msgstr "Batasan Ruangan dari %(team)s memenuhi (%(category)s, via institusi %(institution)s)" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" msgstr "Ruangan tidak memenuhi batasan apa-apa dari institusi %(institution)s (%(team)s)" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" msgstr "Edit Ruangan-ruangan" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" msgstr[0] "Kategori ruangan yang tersimpan: %(list)s" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." msgstr "Tidak ada perubahan yang dibuat pada kategori ruangan." -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "%s (Juri)" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" msgstr "%s (Tim)" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" msgstr "%s (Institusi)" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." From d1ffda72666475a08ecc1a6244be78e4687e0ff7 Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Sun, 5 Feb 2023 11:56:25 +1100 Subject: [PATCH 213/255] New translations django.po (Italian) --- .../actionlog/locale/it/LC_MESSAGES/django.po | 156 ++-- .../locale/it/LC_MESSAGES/django.po | 199 +++-- .../locale/it/LC_MESSAGES/django.po | 452 +++++----- .../locale/it/LC_MESSAGES/django.po | 164 ++-- .../breakqual/locale/it/LC_MESSAGES/django.po | 250 +++--- tabbycat/draw/locale/it/LC_MESSAGES/django.po | 604 +++++++------ .../importer/locale/it/LC_MESSAGES/django.po | 227 +++-- tabbycat/locale/it/LC_MESSAGES/django.po | 476 +++++----- .../motions/locale/it/LC_MESSAGES/django.po | 193 +++-- .../locale/it/LC_MESSAGES/django.po | 196 +++-- .../options/locale/it/LC_MESSAGES/django.po | 813 +++++++++--------- .../locale/it/LC_MESSAGES/django.po | 493 ++++++----- .../printing/locale/it/LC_MESSAGES/django.po | 59 +- .../locale/it/LC_MESSAGES/django.po | 87 +- .../results/locale/it/LC_MESSAGES/django.po | 538 ++++++------ .../standings/locale/it/LC_MESSAGES/django.po | 313 ++++--- .../locale/it/LC_MESSAGES/django.po | 508 ++++++----- .../utils/locale/it/LC_MESSAGES/django.po | 195 +++-- .../venues/locale/it/LC_MESSAGES/django.po | 100 ++- 19 files changed, 2979 insertions(+), 3044 deletions(-) diff --git a/tabbycat/actionlog/locale/it/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/it/LC_MESSAGES/django.po index 7e02c2e0597..2acf315f533 100644 --- a/tabbycat/actionlog/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2021-06-25 17:17\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -17,307 +17,307 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" msgstr "" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" msgstr "" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" msgstr "" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" msgstr "" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" msgstr "" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" msgstr "" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" msgstr "" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" msgstr "" -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" msgstr "" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" msgstr "" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" msgstr "" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" msgstr "" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" msgstr "" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" msgstr "" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" msgstr "" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" msgstr "" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" msgstr "" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" msgstr "" -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" msgstr "" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" msgstr "" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" msgstr "" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" msgstr "" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" msgstr "" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" msgstr "" -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "" -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" msgstr "" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" msgstr "" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" msgstr "" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" msgstr "" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" msgstr "" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" msgstr "" -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" msgstr "" -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" msgstr "" -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" msgstr "" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" msgstr "" -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" msgstr "" -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" msgstr "" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" msgstr "" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" msgstr "" -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" msgstr "" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" msgstr "" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" msgstr "" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" msgstr "" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" msgstr "" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" msgstr "" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" msgstr "" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" msgstr "" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" msgstr "" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" msgstr "" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" msgstr "" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" msgstr "" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" msgstr "" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" msgstr "" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" msgstr "" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" msgstr "" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" msgstr "" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" msgstr "" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" msgstr "" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" msgstr "" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" msgstr "" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" msgstr "" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" msgstr "" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" msgstr "" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" msgstr "" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" msgstr "" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" msgstr "" -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" msgstr "" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" msgstr "" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" msgstr "" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" msgstr "" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." msgstr "" -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" msgstr "" diff --git a/tabbycat/adjallocation/locale/it/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/it/LC_MESSAGES/django.po index 1ef9c395196..417a399f7ed 100644 --- a/tabbycat/adjallocation/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2022-04-16 19:46\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -17,436 +17,435 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." msgstr "Non ci sono giudici disponibili. Assicurati che ci siano giudici che sono stati contrassegnati come disponibili per questo round prima dell'auto-assegnazione." -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." msgstr[0] "Il punteggio %(count)s è più grande del punteggio massimo di giudizio consentito (%(score).1f)." msgstr[1] "I punteggi %(count)s sono più grandi del punteggio massimo di giudizio consentito (%(score).1f)." -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." msgstr[0] "Il punteggio %(count)s è più piccolo del punteggio minimo di giudizio consentito (%(score).1f)." msgstr[1] "I punteggi %(count)s sono più piccoli del punteggio minimo di giudizio consentito (%(score).1f)." -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." msgstr "Non ci sono giudici idonei a essere presidente o membro del panel. Prova a modificare l'impostazione \"Punteggio minimo di feedback richiesto per essere assegnato come presidente o membro del panel\" almeno ad un punteggio inferiore a quello di alcuni giudici e riprova." -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" msgstr "Non ci sono dibattiti in questo round. Forse non hai ancora creato un sorteggio?" -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." msgstr "Ci sono %(debate_count)s dibattiti ma solo %(adj_count)s giudici votanti." -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." msgstr "Ci sono %(panel_debates)s giurie di dibattiti ma solo %(panellists)s giudici disponibili (meno di %(needed)s)." -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." msgstr "Ci sono %(debates_count)s dibattiti ma solo %(voting_count)s giudici votanti." -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" msgstr "Assegnazione del giudice" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." msgstr "Il sorteggio è già stato rilasciato, annullare il sorteggio per rifare le allocazioni automatice." -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." msgstr "Il sorteggio non è confermato, conferma il sorteggio per eseguire allocazioni automatice." -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." msgstr "Non è disponibile nessuna giuria preformata da assegnare." -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." msgstr "Giurie preformate auto-assegnate con successo ai dibattiti." -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" msgstr[0] "Giudici auto-assegnati ai dibattiti con successo. Comunque, c'è un avviso:" msgstr[1] "Giudici auto-assegnati ai dibattiti con successo. Comunque, ci sono %(count)d avvisi:" -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." msgstr "Giurie preformate auto-assegnate con successo ai dibattiti." -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." msgstr "Non ci sono giurie da riempire. Crea prima delle giurie." -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" msgstr[0] "Giudici auto-assegnati ai dibattiti con successo. Comunque, c'è un avviso:" msgstr[1] "Giudici auto-assegnati ai dibattiti con successo. Comunque, ci sono %(count)d avvisi:" -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." msgstr "Giudici auto-assegnati con successo alle giurie preformate." -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." msgstr "Non hai nessuna categoria di interruzione impostata come 'è generale', quindi le importanze del dibattito non possono essere calcolate." -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." msgstr "Dibattiti prioritarizzati in automatico con successo." -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." msgstr "Non hai nessuna categoria di interruzione impostata come 'è generale', quindi le importanze del dibattito non possono essere calcolate." -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." msgstr "Giurie preformate prioritarizzate in automatico con successo." -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." msgstr "Poiché questo è il primo round, i pannelli preformati non sono annotati con gruppi e partecipazione." -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." msgstr "Il sorteggio del round precedente non esiste, quindi i pannelli preformati non possono essere annotati da gruppi e partecipazione." -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." msgstr "Create con successo nuove giurie preformate per questo round." -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" msgstr "arbitro" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" msgstr "giudice" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" msgstr "coach" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "dibattito" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "giudice" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" msgstr "tipo" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" msgstr "disponibile?" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" msgstr "giudice del dibattito" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" msgstr "giudici del dibattito" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "squadra" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" msgstr "giudice-squadra conflitto" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" msgstr "giudice-squadra conflitti" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "giudice 1" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "giudice 2" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" msgstr "giudice-giudice conflitto" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" msgstr "giudice-giudice conflitti" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" msgstr "istituzione" -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" msgstr "giudice-istituzione conflitto" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" msgstr "giudice-istituzione conflitti" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" msgstr "squadra-istituzione conflitto" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" msgstr "squadra-istituzione conflitti" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "round" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" msgstr "importanza" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" msgstr "raggruppamento minimo" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" msgstr "Stima del raggruppamento più basso nella quale dovrebbe trovarsi questa giuria" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" msgstr "raggruppamento massimo" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" msgstr "Stima del raggruppamento più alto nella quale dovrebbe trovarsi questa giuria" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" msgstr "grado stanza" -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" msgstr "Numero sequenziale della giuria, non viene usato in nessun algoritmo" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" msgstr "attività" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" msgstr "Numero di categorie per cui questa stanza dovrebbe essere usata" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" msgstr "giuria preformata" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" msgstr "giurie preformate" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" msgstr "giuria" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" msgstr "giudice della giuria preformata" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" msgstr "giudici della giuria preformata" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." msgstr "Non ci sono giurie preformate da usare. Hai assegnato delle giurie preformate per questo round? In caso contrario, prova ad allocare solo i giudici automatici." -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" msgstr "Giurie preformate" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." msgstr "Una giuria preformata è un gruppo definito di giudici che è specificato per un round prima che venga generato il sorteggio. È quindi possibile applicare manualmente o automaticamente questi pannelli durante il normale processo di assegnazione giudici. Questo può rendere le assegnazioni più veloci oppure consente di creare insiemi di giudici più ragionevoli." -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." msgstr "Si noti che solo i giudici che sono stati contrassegnati come 'disponibili' per quel round potranno essere assegnati nel round, quindi potrebbe essere necessario impostare prima la loro disponibilità." -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" msgstr "Modifica le giurie preformate per %(round)s" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" msgstr "Conflitto: %(adjudicator)s & %(team)s (personale)" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" msgstr "Conflitto: %(adjudicator)s & %(team)s per istituzione %(institution)s" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" msgstr "Conflitto: %(adjudicator1)s & %(adjudicator2)s (personale)" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" msgstr "Conflitto: %(adjudicator1)s & %(adjudicator2)s per istituzione %(institution)s" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "Uomo" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" msgstr "Donna" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "Altro" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" msgstr "Sconosciuto" -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" msgstr "Modifica assegnazione" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" msgstr "Modifica giurie" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" msgstr "Ritorna alla panormaica giurie" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" msgstr "Conflitti Giudice-Squadra" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" msgstr "Salva i conflitti Giudice-Squadra" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." msgstr[0] "Salvato %(count)d conflitto giudice-squadra." msgstr[1] "Salvati %(count)d conflitti giudice-squadra." -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." msgstr[0] "Cancellato %(count)d conflitto giudice-squadra." msgstr[1] "Cancellati %(count)d conflitti giudice-squadra." -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." msgstr "Non sono state apportate modifiche ai conflitti giudici-squadre." -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" msgstr "Conflitti Giudice-Giudice" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" msgstr "Salva conflitti Giudice-Giudice" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." msgstr[0] "Salvato %(count)d conflitto giudice-giudice." msgstr[1] "Salvati %(count)d conflitti giudice-giudice." -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." msgstr[0] "Cancellato %(count)d conflitto giudice-giudice." msgstr[1] "Cancellati %(count)d conflitti giudice-giudice." -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." msgstr "Non sono state apportate modifiche ai conflitti giudici-giudici." -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" msgstr "Conflitti giudice-istituto" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" msgstr "Salva conflitti giudice-istituzione" -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." msgstr[0] "Salvato %(count)d conflitto giudice-istituzione." msgstr[1] "Salvati %(count)d conflitti giudice-istituzione." -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." msgstr[0] "Eliminato %(count)d conflitto giudice-istituzione." msgstr[1] "Eliminati %(count)d conflitti giudice-istituzione." -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." msgstr "Non sono state apportate modifiche ai conflitti giudici-istituzioni." -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" msgstr "Conflitti squadra-istituzione" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" msgstr "Salva conflitti team-istituto" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." msgstr[0] "Salvato %(count)d conflitto team-istituzione." msgstr[1] "Salvati %(count)d conflitti team-istituzione." -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." msgstr[0] "Cancellato %(count)d conflitto team-istituzione." msgstr[1] "Cancellati %(count)d conflitti team-istituzione." -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." msgstr "Non sono state apportate modifiche ai conflitti giudici-istituzioni." diff --git a/tabbycat/adjfeedback/locale/it/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/it/LC_MESSAGES/django.po index 8b99b754cb3..2201ccd774e 100644 --- a/tabbycat/adjfeedback/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2022-04-18 11:36\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -17,951 +17,947 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:44 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" msgstr "Le scale intere devono avere un minimo e un massimo" -#: adjfeedback/admin.py:73 adjfeedback/admin.py:139 +#: adjfeedback/admin.py msgid "target" msgstr "obiettivo" -#: adjfeedback/admin.py:74 adjfeedback/admin.py:140 adjfeedback/models.py:236 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" msgstr "giudice del dibattito" -#: adjfeedback/admin.py:75 adjfeedback/admin.py:141 adjfeedback/models.py:238 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" msgstr "team di origine" -#: adjfeedback/admin.py:91 -#, python-format -msgid "%(timestamp)s (version %(version)s)" -msgstr "%(timestamp)s (versione %(version)s)" - -#: adjfeedback/admin.py:96 +#: adjfeedback/admin.py msgid "Target" msgstr "Obiettivo" -#: adjfeedback/admin.py:97 adjfeedback/admin.py:162 +#: adjfeedback/admin.py msgid "Source" msgstr "Fonte" -#: adjfeedback/admin.py:98 +#: adjfeedback/admin.py msgid "Feedback timestamp and version" msgstr "Feedback timestamp e versione" -#: adjfeedback/admin.py:180 +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "%(timestamp)s (versione %(version)s)" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgstr[0] "1 invio di feedback è stato contrassegnato come confermato. Nota che questo potrebbe aver causato altri invii di feedback da contrassegnare come non confermati." msgstr[1] "%(count)d invii di feedback sono stati contrassegnati come confermati. Nota che questo potrebbe aver causato altri invii di feedback da contrassegnare come non confermati." -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." msgstr[0] "1 invio di feedback è stato contrassegnato come confermato, probabilmente perché altri invii di feedback in conflitto con questo sono stati contrassegnati come confermati." msgstr[1] "%(count)d invii di feedback sono stati contrassegnati come confermati, probabilmente perché altri invii di feedback in conflitto con questi sono stati contrassegnati come confermati." -#: adjfeedback/admin.py:205 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." msgstr[0] "1 invio di feedback è stato contrassegnato come non confermato." msgstr[1] "%(count)d invii di feedback sono stati contrassegnati come non confermati." -#: adjfeedback/admin.py:215 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." msgstr[0] "1 invio di feedback è ora ignorato." msgstr[1] "%(count)d invii di feedback ora sono ignorati." -#: adjfeedback/admin.py:225 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." msgstr[0] "1 invio di feedback è ora riconosciuto." msgstr[1] "%(count)d invii di feedback ora sono riconosciuti." -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" msgstr "Feedback giudice" -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "chair" msgstr "arbitro" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "solo" msgstr "solo" -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "panellist" msgstr "giudice" -#: adjfeedback/forms.py:29 +#: adjfeedback/forms.py msgid "trainee" msgstr "coach" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:57 +#: adjfeedback/forms.py msgid "Yes" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:59 +#: adjfeedback/forms.py msgid "No" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:74 adjfeedback/forms.py:83 +#: adjfeedback/forms.py msgid "This field is required." msgstr "" -#: adjfeedback/forms.py:164 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" msgstr "Punteggio complessivo (%(min)d=peggiore; %(max)d=migliore)*" -#: adjfeedback/forms.py:176 +#: adjfeedback/forms.py msgid "Ignored" msgstr "Ignorato" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:228 adjfeedback/forms.py:291 +#: adjfeedback/forms.py msgid "Submitted - " msgstr "Inviato per approvazione - " #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:229 adjfeedback/forms.py:296 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" msgstr "%(name)s (%(adjpos)s)" -#: adjfeedback/forms.py:252 adjfeedback/forms.py:326 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "-- GiudicI --" -#: adjfeedback/forms.py:269 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" msgstr "Giudice questo feedback riguarda" -#: adjfeedback/forms.py:293 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "" -#: adjfeedback/forms.py:299 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" msgstr "%(name)s (il chair ha dato parola)" -#: adjfeedback/forms.py:301 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" msgstr "%(name)s (il giudice ha dato parola per la giuria)" -#: adjfeedback/forms.py:392 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" msgstr "Questa riga (per %(adjudicator)s) non ha un punteggio" -#: adjfeedback/forms.py:397 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" msgstr "Questa riga (per %(adjudicator)s) ha troppe colonne" -#: adjfeedback/forms.py:410 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." msgstr "Ci sono diversi giudici chiamati \"%(adjudicator)s\", quindi non puoi usare l'importatore di massa per aggiornare il loro punteggio. Si prega di farlo nella pagina Panoramica feedback." -#: adjfeedback/forms.py:416 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" msgstr "Non c'è nessun giudice in questo torneo con il nome \"%(adjudicator)s\"" -#: adjfeedback/forms.py:424 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" msgstr "Il punteggio per %(adjudicator)s, \"%(score)s\", non è un numero" -#: adjfeedback/forms.py:439 +#: adjfeedback/forms.py msgid "There were no scores to import." msgstr "Non ci sono punteggi da importare." -#: adjfeedback/models.py:13 adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator" msgstr "giudice" -#: adjfeedback/models.py:16 +#: adjfeedback/models.py msgid "round" msgstr "round" -#: adjfeedback/models.py:17 adjfeedback/models.py:232 +#: adjfeedback/models.py msgid "score" msgstr "punteggio" -#: adjfeedback/models.py:18 +#: adjfeedback/models.py msgid "timestamp" msgstr "data e ora" -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score history" msgstr "cronologia punteggio base giudice" -#: adjfeedback/models.py:22 +#: adjfeedback/models.py msgid "adjudicator base score histories" msgstr "cronologie punteggi base giudice" -#: adjfeedback/models.py:30 +#: adjfeedback/models.py msgid "question" msgstr "domanda" -#: adjfeedback/models.py:32 +#: adjfeedback/models.py msgid "feedback" msgstr "feedback" -#: adjfeedback/models.py:45 adjfeedback/models.py:55 adjfeedback/models.py:65 -#: adjfeedback/models.py:74 +#: adjfeedback/models.py msgid "answer" msgstr "risposta" -#: adjfeedback/models.py:48 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" msgstr "risposta booleana di feedback giudice" -#: adjfeedback/models.py:49 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" msgstr "risposte booleane di feedback giudice" -#: adjfeedback/models.py:58 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" msgstr "risposta intera di feedback giudice" -#: adjfeedback/models.py:59 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" msgstr "risposte intere di feedback giudice" -#: adjfeedback/models.py:68 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" msgstr "risposta numerica di feedback giudice" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" msgstr "risposte numerice di feedback giudice" -#: adjfeedback/models.py:77 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" msgstr "risposta di testo di feedback giudice" -#: adjfeedback/models.py:78 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" msgstr "risposte di testo di feedback giudice" -#: adjfeedback/models.py:86 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answer" msgstr "risposta a scelta multipla di feedback giudice" -#: adjfeedback/models.py:87 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answers" msgstr "risposte a scelta multipla di feedback giudice" -#: adjfeedback/models.py:106 +#: adjfeedback/models.py msgid "checkbox" msgstr "casella di spunta" -#: adjfeedback/models.py:107 +#: adjfeedback/models.py msgid "yes/no (dropdown)" msgstr "si/no (menu a tendina)" -#: adjfeedback/models.py:108 +#: adjfeedback/models.py msgid "integer (textbox)" msgstr "intero (casella di testo)" -#: adjfeedback/models.py:109 +#: adjfeedback/models.py msgid "integer scale" msgstr "scala intera" -#: adjfeedback/models.py:110 +#: adjfeedback/models.py msgid "float" msgstr "virgola" -#: adjfeedback/models.py:111 adjfeedback/models.py:145 +#: adjfeedback/models.py msgid "text" msgstr "testo" -#: adjfeedback/models.py:112 +#: adjfeedback/models.py msgid "long text" msgstr "testo lungo" -#: adjfeedback/models.py:113 +#: adjfeedback/models.py msgid "select one" msgstr "scelta singola" -#: adjfeedback/models.py:114 +#: adjfeedback/models.py msgid "select multiple" msgstr "scelta multipla" -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "tournament" msgstr "torneo" -#: adjfeedback/models.py:143 +#: adjfeedback/models.py msgid "sequence number" msgstr "numero sequenziale" -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" msgstr "La domanda mostrata ai partecipanti, ad esempio, \"Sei d'accordo con la decisione?\"" -#: adjfeedback/models.py:148 +#: adjfeedback/models.py msgid "name" msgstr "nome" -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" msgstr "Un nome breve per la domanda, ad esempio, \"In accordo con la decisione\"" -#: adjfeedback/models.py:151 +#: adjfeedback/models.py msgid "reference" msgstr "riferimento" -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" msgstr "Riferimento compatibile con il codice, ad esempio, \"agree_with_decision\"" -#: adjfeedback/models.py:155 +#: adjfeedback/models.py msgid "from adjudicator" msgstr "dal giudice" -#: adjfeedback/models.py:156 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" msgstr "Questa domanda dovrebbe essere posta ai giudici (riguardo altri giudici)" -#: adjfeedback/models.py:158 +#: adjfeedback/models.py msgid "from team" msgstr "dalle squadre" -#: adjfeedback/models.py:159 +#: adjfeedback/models.py msgid "Teams should be asked this question" msgstr "Questa domanda dovrebbe essere fatta alle squadre" -#: adjfeedback/models.py:162 +#: adjfeedback/models.py msgid "answer type" msgstr "tipo di risposta" -#: adjfeedback/models.py:164 +#: adjfeedback/models.py msgid "required" msgstr "obbligatorio" -#: adjfeedback/models.py:165 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" msgstr "Indica se i partecipanti sono tenuti a compilare questo campo" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "minimum value" msgstr "valore minimo" -#: adjfeedback/models.py:168 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "Valore minimo consentito per i campi numerici (ignorato per i campi di testo o numeri decimali)" -#: adjfeedback/models.py:170 +#: adjfeedback/models.py msgid "maximum value" msgstr "valore massimo" -#: adjfeedback/models.py:171 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "Valore massimo consentito per i campi numerici (ignorato per i campi di testo o numeri decimali)" -#: adjfeedback/models.py:176 +#: adjfeedback/models.py msgid "choices" msgstr "scelte" -#: adjfeedback/models.py:177 +#: adjfeedback/models.py msgid "Permissible choices for select one/multiple fields (ignored for other fields)" msgstr "Scelte consentite per selezionare uno o più campi (ignorati per altri campi)" -#: adjfeedback/models.py:182 +#: adjfeedback/models.py msgid "adjudicator feedback question" msgstr "domanda di feedback giudice" -#: adjfeedback/models.py:183 +#: adjfeedback/models.py msgid "adjudicator feedback questions" msgstr "domande di feedback giudice" -#: adjfeedback/models.py:241 adjfeedback/views.py:768 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" msgstr "ignorato" -#: adjfeedback/models.py:242 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" msgstr "Se il feedback deve influenzare il punteggio del giudice" -#: adjfeedback/models.py:246 +#: adjfeedback/models.py msgid "adjudicator feedback" msgstr "feedback giudice" -#: adjfeedback/models.py:247 +#: adjfeedback/models.py msgid "adjudicator feedbacks" msgstr "feedback giudice" -#: adjfeedback/models.py:307 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." msgstr "Il giudice o il team di origine non sono stati specificati." -#: adjfeedback/models.py:310 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." msgstr "C'erano sia un giudice che una squadrea di partenza." -#: adjfeedback/models.py:312 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" msgstr "Non c'è nessun giudice specificato come obiettivo per questo feedback. Forse è stato cancellato?" -#: adjfeedback/models.py:314 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." msgstr "Il giudice non ha assistito a questo dibattito." -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" msgstr "Se il giudice è stato contrassegnato come da eliminatorie (click per contrassegnare)" -#: adjfeedback/tables.py:35 +#: adjfeedback/tables.py msgid "N/A" msgstr "N/D" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py msgid "Current weighted score" msgstr "Punteggio ponderato attuale" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." msgstr "L'attuale rating di questo giudice." -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" msgstr "Punteggio base" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" msgstr "Fare click per modificare il punteggio base" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" msgstr "Punteggio base assegnato" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" msgstr "La differenza attuale tra il punteggio base di un giudice e il punteggio attuale" -#: adjfeedback/tables.py:84 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" msgstr "La differenza tra il punteggio base di questo giudice e il punteggio attuale" -#: adjfeedback/tables.py:93 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." msgstr "La deviazione standard dei punteggi attuali di questo giudice; i numeri più grandi significano punteggi di feedback meno coerenti." -#: adjfeedback/tables.py:97 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" msgstr "La deviazione standard degli attuali punteggi di questo giudice" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Feedback Per Round" msgstr "Feedback Per Round" -#: adjfeedback/tables.py:107 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" msgstr "Passa con il mouse dopra i dati per mostrare il punteggio medio ricevuto in quel round" -#: adjfeedback/tables.py:125 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" msgstr[0] "Mostra %(count)s
    feedback" msgstr[1] "Mostra %(count)s
    feedbacks" -#: adjfeedback/tables.py:148 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" msgstr "Votazioni di feedback non inviate" -#: adjfeedback/tables.py:172 +#: adjfeedback/tables.py msgid "View Missing Feedback" msgstr "Visualizza Feedback Mancante" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" msgstr "Da chi viene il feedback?" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" msgstr "Inserisci Feedback" -#: adjfeedback/templates/enter_feedback.html:9 -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format msgid "Add Feedback from %(name)s" msgstr "Aggiungi Feedback da %(name)s" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" msgstr "Aggiungi Feedback" -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" msgstr "Non ci sono opzioni di feedback perché nessun round è stato ancora rilasciato al pubblico. Controlla quando lo rilasceranno!" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." msgstr "Questo torneo si aspetta che tu invii un feedback solo sul giudice che ha emesso la sentenza. Non inviare un feedback su altri giudici." -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." msgstr "Questo torneo si aspetta che tu invii un feedback su tutti i giudici della giuria (inclusi i tirocinanti)." -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." msgstr "Ci sono alcuni problemi con questo invio di feedback. Si prega di rivederli e correggerli." -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "Quando si invia questo modulo il tuo indirizzo IP sarà memorizzato per motivi di logging." -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" msgstr "Panoramica" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" msgstr "Più recenti" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" msgstr "Non inviato" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" msgstr "Importante" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" msgstr "Commenti" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" msgstr "Per Sorgente" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" msgstr "Per destinatario" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" msgstr "Aggiornamento punteggi bulk" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" msgstr "Feedback %(source_type)s %(source_name)s" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." msgstr "%(source_name)s non ha ancora inviato nessun feedback." -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." msgstr "%(source_name)s non ha ancora ricevuto nessun feedback." -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." msgstr "Questo molto probabilmente perché il team o il giudice che ha inviato questo feedback lo restitutoreha inviato più volte sulla stessa persona; o perché un team ha inviato feedback su più giudici (piuttosto che solo chi ha restituito)." -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." msgstr "Non confermato; non influenzerà il punteggio di questo giudice." -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." msgstr "Il feedback è contato per il giudice, ma non viene preso in considerazione nel calcolo dei punteggi." -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." msgstr "Ignorato; non influenzerà il punteggio di questo giudice." -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." msgstr "Questo feedback viene inviato su un giudice che sembra sia stato rimosso dal dibattito. Probabilmente dovresti andare nell'area Modifica database ed eliminare questo feedback." -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." msgstr "Il punteggio dato in questa parte di feedback." -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" msgstr "%(round)s %(score)s" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "On %(adjudicator)s" msgstr "Su %(adjudicator)s" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" -msgstr "Ricevuto come %(as)s" +msgid "Received as %(as_type)s" +msgstr "" -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" msgstr "Base %(base)s" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" msgstr "Da %(source)s (il loro %(relationship)s)" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" msgstr "Da %(source)s (%(relationship)s da %(side)s)" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" msgstr "Da sconosciuto" -#: adjfeedback/templates/feedback_card.html:88 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:93 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." msgstr "Il feedback non confermato non è conteggiato come è stato inviato e non influisce sul punteggio di questo giudice." -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" msgstr "Non conferma" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" msgstr "Conferma" -#: adjfeedback/templates/feedback_card.html:103 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." msgstr "Il feedback ignorato viene contato tra quelli inviati, ma non influisce sul punteggio di questo giudice." -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" msgstr "Non ignorato" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" msgstr "Ignora" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" msgstr "Non è stato inviato ancora nessun feedback" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" msgstr "%(c_breaking)s qualificatocontrassegnato come eliminatorie" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." msgstr "L'attuale configurazione di feedback consente e prevede che solo gli arbitri presentino un feedback (sui loro arbitri e tirocinanti)." -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." msgstr "L'attuale configurazione di feedback consente e prevede che i giudici e le giurie presentino un feedback su loro stessi, inoltre i giudici inviano feedback sui tirocinanti." -#: adjfeedback/templates/feedback_overview.html:18 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." msgstr "L'attuale configurazione di feedback consente e prevede che le giurie ed i tirocinanti presentino un feedback sui giudici, inoltre i giudici inviano feedback su ogni altro membro della giuria (inclusi i tirocinanti)." -#: adjfeedback/templates/feedback_overview.html:22 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." msgstr "L'attuale configurazione di feedback consente e prevede che tutti i giudici (inclusi i tirocinanti) presentino un feedback su ogni altro membro della giuria (inclusi i tirocinanti)." -#: adjfeedback/templates/feedback_overview.html:30 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgstr[0] "C'è %(nadjs_outside_range)s giudice con un punteggio Fuori dal range consentito dei punteggi giudice, che è attualemtne impostato da %(min_score)s a %(max_score)s. Ciò potrebbe causare un comportamento anomalo dell'assegnazione automatica dei giudici. Se si desidera utilizzare un range più ampio, è possibile configurarlo nelle impostazioni di feedback." msgstr[1] "Ci sono %(nadjs_outside_range)s giudici con un punteggio fuori dal range consentito dei punteggi giudice, che è attualemtne impostato da %(min_score)s a %(max_score)s. Ciò potrebbe causare un comportamento anomalo dell'assegnazione automatica dei giudici. Se si desidera utilizzare un range più ampio, è possibile configurarlo nelle impostazioni di feedback." -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgstr[0] "%(count)s giudice ha attualmente un punteggio uguale o superiore a %(min)s e inferiore a %(max)s. Questo è %(percent)s%% dell'insieme dei giudici." msgstr[1] "%(count)s giudici hanno attualmente un punteggio uguale o superiore a %(min)s e inferiore a %(max)s. Questo è %(percent)s%% dell'insieme dei giudici." -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" msgstr "Distribuzione punteggi (range è %(min_score)s–%(max_score)s)" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" msgstr "Base" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" msgstr "Feedback" -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." msgstr "La proporzione del punteggio di un giudice determinata in base al feedback rispetto al punteggio di test è impostata sulla base di ogni round. Fare clic su questo link e modificare il campo 'Peso feedback' per modificare questo rapporto per %(round)s." -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" msgstr "Rapporto Punteggio" -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." msgstr[0] "C'è %(c_chairs)s dibattito per round, quindi c'è bisogno di %(c_chairs)s giudice." msgstr[1] "Ci sono %(c_chairs)s dibattiti per round, quindi c'è bisogno di %(c_chairs)s giudici." -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." msgstr[0] "C'è %(c_debates)s dibattito per round, ma solo %(c_chairs)s oltre il punteggio minimo per votare." msgstr[1] "Ci sono %(c_debates)s dibattiti per round, ma solo %(c_chairs)s oltre il punteggio minimo per votare." -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" msgstr[0] "%(c_chairs)s giudice arbitro" msgstr[1] "%(c_chairs)s giudici arbitri" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." msgstr "Tutti i giudici con un punteggio abbastanza alto per votare, ma che non sono assegnati per arbitrare, sono assegnati come giudici dal sistema automatico." -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" msgstr[0] "%(c_panellists)s giudice" msgstr[1] "%(c_panellists)s giudici" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." msgstr "I giudici vengono assegnati come apprendisti dal sistema automatico se il loro punteggio è inferiore al 'punteggio minimo di voto' (attualmente %(min_voting)s) impostato nella configurazione delle Regole di sorteggio di questo torneo." -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" msgstr[0] "%(c_trainees)s apprendista" msgstr[1] "%(c_trainees)s apprendisti" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" msgstr "Distribuzioni Auto-assegnate (%(min_voting_score)s+ per votare)" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" msgstr "Cambia il punteggio base" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." msgstr "L'intervallo di punteggio per i giudici è compreso tra %(pref.adj_min_score)s e %(pref.adj_max_score)s. Sono permessi decimali. Questo può essere configurato nelle Impostazioni di Feedback." -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." msgstr "La richiesta di punteggio minimo per essere assegnato come giudice o giudice arbitro (quando si utilizza il sistema automatico) è %(min_voting_score)s. È possibile configurarlo nelle Impostazioni del sorteggio." -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" msgstr "Punteggio base" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" msgstr "Salva punteggio base" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" msgstr "Chi sei?" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" msgstr "seleziona il tuo nome o il tuo team in questo elenco" -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" msgstr "Aggiorna Punteggi giudice" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." msgstr "In questo torneo non c'è nessun giudice, quindi non puoi aggiornare nessun punteggio. Potresti prima voler importare alcuni giudici." -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" msgstr "Incolla un elenco dei nomi dei giudici e dei loro nuovi punteggi, nel formato: giudice,punteggio. Per esempio:" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." msgstr "I nomi dei giudici devono corrispondere esattamente ai loro nomi nel sistema di tab." -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" msgstr "Ci sono alcuni problemi con i dati su questo modulo:" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" msgstr "Invia" -#: adjfeedback/views.py:118 +#: adjfeedback/views.py msgid "Feedback Overview" msgstr "Panoramica Feedback" -#: adjfeedback/views.py:142 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" msgstr "Trova feedback sul giudice" -#: adjfeedback/views.py:153 adjfeedback/views.py:177 adjfeedback/views.py:192 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" msgstr[0] "%(count)d feedback" msgstr[1] "%(count)d feedback" -#: adjfeedback/views.py:156 adjfeedback/views.py:182 adjfeedback/views.py:197 +#: adjfeedback/views.py msgid "Feedbacks" msgstr "Feedback" -#: adjfeedback/views.py:163 +#: adjfeedback/views.py msgid "Find Feedback" msgstr "Trova feedback" -#: adjfeedback/views.py:171 adjfeedback/views.py:710 +#: adjfeedback/views.py msgid "From Teams" msgstr "Dai team" -#: adjfeedback/views.py:186 adjfeedback/views.py:704 +#: adjfeedback/views.py msgid "From Adjudicators" msgstr "Dai giudici" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "Latest Feedback" msgstr "Ultimo feedback" -#: adjfeedback/views.py:272 +#: adjfeedback/views.py msgid "(30 most recent)" msgstr "(30 più recenti)" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "Only Comments" msgstr "Solo Commenti" -#: adjfeedback/views.py:283 +#: adjfeedback/views.py msgid "(250 most recent)" msgstr "(250 più recenti)" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "Important Feedback" msgstr "Feedback Importante" -#: adjfeedback/views.py:295 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" msgstr "(valutazione molto più alta/inferiore del previsto)" -#: adjfeedback/views.py:362 +#: adjfeedback/views.py msgid "A Team" msgstr "Un team" -#: adjfeedback/views.py:367 +#: adjfeedback/views.py msgid "Team" msgstr "Team" -#: adjfeedback/views.py:374 adjfeedback/views.py:391 +#: adjfeedback/views.py msgid "Institution" msgstr "Istituto" -#: adjfeedback/views.py:377 +#: adjfeedback/views.py msgid "An Adjudicator" msgstr "Un giudice" -#: adjfeedback/views.py:384 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "Giudice" -#: adjfeedback/views.py:511 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." msgstr "Aggiunto feedback da %(source)s a %(target)s." -#: adjfeedback/views.py:541 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." msgstr "Grazie, %(source)s! Il tuo feedback su %(target)s è stato registrato." -#: adjfeedback/views.py:625 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" msgstr "Ops! Non ho riconosciuto il giudice: %(adjudicator)s" -#: adjfeedback/views.py:648 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." msgstr "Ops! Il valore non è un punteggio valido." -#: adjfeedback/views.py:675 +#: adjfeedback/views.py msgid "Feedback Progress" msgstr "Progresso Feedback" -#: adjfeedback/views.py:696 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" msgstr[0] "%(nmissing)d feedback mancante (%(fulfilled).1f%% restituito)" msgstr[1] "%(nmissing)d feedback mancanti (%(fulfilled).1f%% restituito)" -#: adjfeedback/views.py:741 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." msgstr "Il feedback per %(adjudicator)s da %(source)s ora è %(result)s." -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "confirmed" msgstr "confermato" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "un-confirmed" msgstr "non confermato" -#: adjfeedback/views.py:768 +#: adjfeedback/views.py msgid "un-ignored" msgstr "non ignorato" -#: adjfeedback/views.py:804 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." diff --git a/tabbycat/availability/locale/it/LC_MESSAGES/django.po b/tabbycat/availability/locale/it/LC_MESSAGES/django.po index 16d71530dac..1fc2fd4ba6f 100644 --- a/tabbycat/availability/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2021-06-25 17:17\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -17,298 +17,290 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" msgstr "" -#: availability/models.py:15 +#: availability/models.py msgid "content type" msgstr "" -#: availability/models.py:16 +#: availability/models.py msgid "object id" msgstr "" -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" msgstr "" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" msgstr "" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" msgstr "" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" msgstr "" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" msgstr "" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" msgstr "" -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" msgstr "" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" msgstr "" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." msgstr "" -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." msgstr "" -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." msgstr "" -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgstr[0] "" msgstr[1] "" -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " msgstr "" -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" msgstr "" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." msgstr "" -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" msgstr "" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" msgstr "" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" msgstr "" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" msgstr "" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" msgstr "" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" msgstr "" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" msgstr "" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" msgstr "" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" msgstr "" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." msgstr "" -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." msgstr "" -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" msgstr "" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" msgstr "" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" msgstr "" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" msgstr "" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" @@ -316,7 +308,7 @@ msgstr[0] "" msgstr[1] "" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" @@ -326,7 +318,7 @@ msgstr[1] "" #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" @@ -334,67 +326,67 @@ msgstr[0] "" msgstr[1] "" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" msgstr[0] "" msgstr[1] "" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" msgstr "" -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" msgstr "" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" msgstr "" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" msgstr "" -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" msgstr "" -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" msgstr "" -#: availability/views.py:260 +#: availability/views.py msgid "Room" msgstr "" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" msgstr "" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" msgstr "" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" msgstr "" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." msgstr "" -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." msgstr "" -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." msgstr "" -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." msgstr "" diff --git a/tabbycat/breakqual/locale/it/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/it/LC_MESSAGES/django.po index b66471f94c6..f0871e2e152 100644 --- a/tabbycat/breakqual/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2022-04-17 08:28\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -17,508 +17,506 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" msgstr "" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "" +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" +msgstr[1] "" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "nome" -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" msgstr "" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" msgstr "" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" msgstr "" -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" msgstr "numero sequenziale" -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" msgstr "" -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" msgstr "" -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" msgstr "" -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" msgstr "" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" msgstr "" -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" msgstr "" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" msgstr "" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" msgstr "" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" msgstr "" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" msgstr "" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" msgstr "" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" msgstr "" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" msgstr "" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" msgstr "" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "squadra" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" msgstr "" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" msgstr "" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" msgstr "" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" msgstr "" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" msgstr "" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" msgstr "" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" msgstr "" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" msgstr "" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" msgstr "" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" msgstr "" -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" msgstr "" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." msgstr "" -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." msgstr "" -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" msgstr "" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." msgstr "" -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" msgstr "" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " msgstr "" -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" msgstr "" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" msgstr "" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " msgstr "" -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" msgstr "" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" msgstr "" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" msgstr "" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" msgstr "" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" msgstr "" -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" msgstr "" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." msgstr "" -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." msgstr "" -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." msgstr "" -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." msgstr "" -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." msgstr "" -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." msgstr "" -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" msgstr "" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" msgstr "" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" msgstr "Panoramica" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" msgstr "" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." msgstr "" -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" msgstr "" -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" msgstr "" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" msgstr "" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" msgstr "" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" msgstr "" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" msgstr "" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" msgstr "" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" msgstr "" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" msgstr "" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" msgstr "" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" msgstr "" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" msgstr "" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" msgstr "" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" msgstr "" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" msgstr "" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" msgstr "" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" msgstr "" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" msgstr "" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" msgstr "" -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" msgstr "" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" msgstr "" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" msgstr "" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." msgstr "" -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." msgstr "" -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" msgstr "" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" msgstr "" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" diff --git a/tabbycat/draw/locale/it/LC_MESSAGES/django.po b/tabbycat/draw/locale/it/LC_MESSAGES/django.po index a235eb8d9e8..b9773926e78 100644 --- a/tabbycat/draw/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2022-04-16 17:36\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:27\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -17,1123 +17,1103 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "" -msgstr[1] "" - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." msgstr[0] "" msgstr[1] "" -#: draw/admin.py:93 +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." msgstr[0] "" msgstr[1] "" -#: draw/apps.py:7 draw/views.py:452 draw/views.py:455 +#: draw/apps.py draw/views.py msgid "Draw" msgstr "" -#: draw/generator/__init__.py:14 +#: draw/generator/__init__.py msgid "Too many swaps" msgstr "" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" msgstr "" -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" msgstr "" -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "Bubble up (history)" msgstr "" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble down (history)" msgstr "" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble up (institution)" msgstr "" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble down (institution)" msgstr "" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" msgstr "" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Can't bubble up/down" msgstr "" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Pull-up team" msgstr "" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." msgstr "" -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." msgstr "" -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." msgstr "" -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." msgstr "" -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." msgstr "" -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." msgstr "" -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." msgstr "" -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." msgstr "" -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." msgstr "" -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." msgstr "" -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." msgstr "" -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." msgstr "" -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." msgstr "" -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." msgstr "" -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." msgstr "" -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" msgstr "" -#: draw/manager.py:276 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." msgstr "" -#: draw/models.py:29 draw/models.py:35 +#: draw/models.py msgid "none" msgstr "" -#: draw/models.py:30 +#: draw/models.py msgid "postponed" msgstr "" -#: draw/models.py:31 draw/models.py:36 +#: draw/models.py msgid "draft" msgstr "" -#: draw/models.py:32 draw/models.py:37 +#: draw/models.py msgid "confirmed" msgstr "" -#: draw/models.py:43 draw/models.py:375 +#: draw/models.py msgid "round" msgstr "" -#: draw/models.py:45 +#: draw/models.py msgid "room" msgstr "" -#: draw/models.py:48 +#: draw/models.py msgid "bracket" msgstr "" -#: draw/models.py:50 +#: draw/models.py msgid "room rank" msgstr "" -#: draw/models.py:56 +#: draw/models.py msgid "importance" msgstr "" -#: draw/models.py:58 +#: draw/models.py msgid "result status" msgstr "" -#: draw/models.py:60 +#: draw/models.py msgid "sides confirmed" msgstr "" -#: draw/models.py:61 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." msgstr "" -#: draw/models.py:64 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "dibattito" -#: draw/models.py:65 +#: draw/models.py msgid "debates" msgstr "" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:84 draw/models.py:109 +#: draw/models.py msgid " (sides not confirmed)" msgstr "" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:96 draw/models.py:113 +#: draw/models.py msgid " vs " msgstr "" -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" msgstr "" -#: draw/models.py:263 +#: draw/models.py msgid "negative" msgstr "" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" msgstr "" -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" msgstr "" -#: draw/models.py:266 +#: draw/models.py msgid "closing government" msgstr "" -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" msgstr "" -#: draw/models.py:274 draw/models.py:377 +#: draw/models.py msgid "team" msgstr "squadra" -#: draw/models.py:276 draw/models.py:379 +#: draw/models.py msgid "side" msgstr "" -#: draw/models.py:281 +#: draw/models.py msgid "debate team" msgstr "" -#: draw/models.py:282 +#: draw/models.py msgid "debate teams" msgstr "" -#: draw/models.py:303 +#: draw/models.py #, python-format msgid "placed %(place)s" msgstr "" -#: draw/models.py:305 draw/models.py:312 +#: draw/models.py msgid "result unknown" msgstr "" -#: draw/models.py:308 +#: draw/models.py msgid "won" msgstr "" -#: draw/models.py:310 +#: draw/models.py msgid "lost" msgstr "" -#: draw/models.py:383 +#: draw/models.py msgid "team side allocation" msgstr "" -#: draw/models.py:384 +#: draw/models.py msgid "team side allocations" msgstr "" #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" msgstr "" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" msgstr "" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" msgstr "" -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" msgstr "" -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" msgstr "" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" msgstr "" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" msgstr "" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" msgstr "" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" msgstr "" -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" msgstr "" -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" msgstr "" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" msgstr "" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" msgstr "" -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" msgstr "" -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" msgstr "" -#: draw/tables.py:292 +#: draw/tables.py msgid "After" msgstr "" -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" msgstr "" -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" msgstr "" -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" msgstr "" -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" msgstr "" -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" msgstr "" -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" msgstr "" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" msgstr "" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" msgstr "" -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" msgstr "" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" msgstr "" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" msgstr "" -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" msgstr "" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" msgstr "" -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" msgstr "" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" msgstr "" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" msgstr "" -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" msgstr "" -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" msgstr "" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." msgstr "" -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." -msgstr "" - -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." -msgstr "" - -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "" +msgid_plural "Enter motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" msgstr "" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." msgstr "" -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." msgstr "" -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." msgstr "" -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" msgstr "" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." msgstr "" -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." msgstr "" -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:200 +#: draw/templates/draw_display_admin.html msgid "Release Motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:201 -msgid "Release motion to public" -msgstr "" +msgid_plural "Release Motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:202 -msgid "Unrelease motion to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." msgstr "" -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." msgstr "" -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "" - -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "" +msgid_plural "Motions have been released publicly." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" msgstr "" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" msgstr "" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" msgstr "" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" msgstr "" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" msgstr "" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" msgstr "" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" msgstr "" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" msgstr "" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" msgstr "" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" msgstr "" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" msgstr "" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" msgstr "" -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" msgstr "" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" msgstr "" -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" msgstr "" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" msgstr "" -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" msgstr "" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" msgstr "" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" msgstr "" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" msgstr "" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." msgstr "" -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." msgstr "" -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." msgstr "" -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" msgstr "" -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" msgstr "" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" msgstr "Giurie preformate" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" msgstr "" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" msgstr "" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" msgstr "" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" msgstr "" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." msgstr "" -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." msgstr "" -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " msgstr "" -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." msgstr "" -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." msgstr "" -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." msgstr "" -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." msgstr "" -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." msgstr "" -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." msgstr "" -#: draw/views.py:68 draw/views.py:483 +#: draw/views.py msgid "No debates in this round" msgstr "" -#: draw/views.py:76 +#: draw/views.py #, python-format msgid "Draw for %(round)s" msgstr "" -#: draw/views.py:78 +#: draw/views.py msgid "Draws for Current Rounds" msgstr "" -#: draw/views.py:82 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" msgstr "" -#: draw/views.py:86 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" msgstr "" -#: draw/views.py:124 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" msgstr[0] "" msgstr[1] "" -#: draw/views.py:171 +#: draw/views.py msgid "The draw for this round hasn't been released." msgstr "" -#: draw/views.py:224 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" msgstr "" -#: draw/views.py:382 +#: draw/views.py msgid "Adjudicator Assignments" msgstr "" -#: draw/views.py:404 +#: draw/views.py msgid "Position" msgstr "" -#: draw/views.py:424 +#: draw/views.py msgid "Team Pairings" msgstr "" -#: draw/views.py:447 +#: draw/views.py msgid "No Draw" msgstr "" -#: draw/views.py:449 +#: draw/views.py msgid "Draft Draw" msgstr "" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:541 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" msgstr "" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:546 +#: draw/views.py msgid "BR" msgstr "" -#: draw/views.py:571 +#: draw/views.py msgid "Draw with Details" msgstr "" -#: draw/views.py:579 +#: draw/views.py msgid "Position Balance Report" msgstr "" -#: draw/views.py:590 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" msgstr "" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:593 +#: draw/views.py msgid " (i.e., Shannon entropy)" msgstr "" -#: draw/views.py:623 +#: draw/views.py msgid "Teams with position imbalances" msgstr "" -#: draw/views.py:624 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" msgstr "" -#: draw/views.py:627 +#: draw/views.py msgid "Annotated draw" msgstr "" -#: draw/views.py:658 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" msgstr "" -#: draw/views.py:666 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " msgstr "" -#: draw/views.py:674 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " msgstr "" -#: draw/views.py:683 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " msgstr "" -#: draw/views.py:699 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "" -#: draw/views.py:726 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "" -#: draw/views.py:746 +#: draw/views.py msgid "Released the draw." msgstr "" -#: draw/views.py:761 +#: draw/views.py msgid "Unreleased the draw." msgstr "" -#: draw/views.py:774 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." msgstr "" -#: draw/views.py:793 +#: draw/views.py msgid "Side Pre-Allocations" msgstr "" -#: draw/views.py:826 +#: draw/views.py msgid "Edit Matchups" msgstr "" diff --git a/tabbycat/importer/locale/it/LC_MESSAGES/django.po b/tabbycat/importer/locale/it/LC_MESSAGES/django.po index 5ea6ec2aad7..abdaf884c84 100644 --- a/tabbycat/importer/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2022-04-16 19:46\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -17,416 +17,405 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" msgstr "riga %(lineno)d: %(message)s" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" msgstr "Questa riga (per %(institution)s) non ha un codice" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" msgstr "Questa riga (per %(institution)s) ha troppe colonne" -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." msgstr "Nessun istituto da importare." -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "Siamo spiacenti, puoi importare solo %(max_allowed)d istituzione alla volta (al momento sono %(given)d). Prova a dividere la tua importazione in pezzi più piccoli." msgstr[1] "Siamo spiacenti, puoi importare massimo %(max_allowed)d istituzioni alla volta (al momento sono %(given)d). Prova a dividere la tua importazione in pezzi più piccoli." -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." msgstr "Non ci sono stanze da importare." -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "Siamo spiacenti, puoi importare solo %(max_allowed)d stanza alla volta (al momento sono %(given)d). Prova a dividere la tua importazione in pezzi più piccoli." msgstr[1] "Siamo spiacenti, puoi importare massimo %(max_allowed)d stanze alla volta (al momento sono %(given)d). Prova a dividere la tua importazione in pezzi più piccoli." -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" msgstr "Nomi degli speaker" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" msgstr "Indirizzi mail degli speaker" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" msgstr "Facoltativo, utile da includere se si distribuiscono URL privati, elencati nello stesso ordine dei nomi degli speaker" -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" msgstr "Nome (escluso il nome dell'istituto)" -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" msgstr "Prefisso del team con il nome dell'istituto?" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" msgstr "Non includere il nome dell'istituto (seleziona invece il campo \"Prefisso del team con il nome dell'istituto?\")" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" msgstr "(Non applicabile alle squadre non affiliate)" -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" msgstr "Un nome di speaker per riga" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" msgstr "Possono essere separati da nuova linea, tabulazione o virgola" -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "Speaker %d" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" msgstr "speaker%d@example.edu" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." msgstr "E' necessario avere almeno uno speaker." -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." msgstr "%(email)s non è un indirizzo email valido." -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." msgstr "Ci sono più indirizzi email che speaker." -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." msgstr "Le squadre dello stesso istituto in un torneo devono avere un nome diverso. Correggi i dati duplicati." -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" msgstr "Punteggio" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." msgstr "Questo valore deve essere compreso tra %(min)d e %(max)d." -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" msgstr "Non affiliato (nessuna istituzione)" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "Siamo spiacenti, puoi importare solo %(max_allowed)d team alla volta (al momento sono %(given)d.) Prova a dividere la tua importazione in pezzi più piccoli." msgstr[1] "Siamo spiacenti, puoi importare massimo %(max_allowed)d team alla volta (al momento sono %(given)d). Prova a dividere la tua importazione in pezzi più piccoli." -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "Siamo spiacenti, puoi importare solo %(max_allowed)d giudice alla volta (al momento sono %(given)d). Prova a dividere la tua importazione in pezzi più piccoli." msgstr[1] "Siamo spiacenti, puoi importare massimo %(max_allowed)d giudici alla volta (al momento sono %(given)d). Prova a dividere la tua importazione in pezzi più piccoli." -#: importer/forms.py:396 +#: importer/forms.py msgid "XML" msgstr "" -#: importer/forms.py:397 +#: importer/forms.py msgid "The Debate XML archive to parse" msgstr "L'archivio XML di dibattito da analizzare" -#: importer/templates/archive_export_index.html:4 -#: importer/templates/archive_export_index.html:5 +#: importer/templates/archive_export_index.html msgid "Export Tournament Archive" msgstr "Esporta Archivio Torneo" -#: importer/templates/archive_export_index.html:9 +#: importer/templates/archive_export_index.html msgid "Tournaments can be exported in an XML format for use outside Tabbycat." msgstr "I tornei possono essere esportati in un formato XML Per essere usati all'esterno di tabbycat." -#: importer/templates/archive_export_index.html:17 +#: importer/templates/archive_export_index.html msgid "Export all data" msgstr "Esporta tutti i dati" -#: importer/templates/archive_importer.html:6 -#: importer/templates/archive_importer.html:18 +#: importer/templates/archive_importer.html msgctxt "page title" msgid "Import Tournament Archive" msgstr "Importa Archivio Del Torneo" -#: importer/templates/archive_importer.html:19 +#: importer/templates/archive_importer.html msgid "This form will create a tournament with the data provided as a Debate XML format." msgstr "Questo modulo creerà un torneo con i dati forniti come formato XML di debate." -#: importer/templates/archive_importer.html:24 +#: importer/templates/archive_importer.html msgid "Import" msgstr "Importa" -#: importer/templates/archive_importer.html:25 +#: importer/templates/archive_importer.html msgid "Go back to the site home page" msgstr "Torna alla pagina iniziale" -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html msgctxt "page title" msgid "Add Adjudicators" msgstr "Aggiungi giudici" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" msgstr "(Passaggio %(step)s di %(count)s)" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" msgstr "Passaggio precedente" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." msgstr "Secondo la configurazione di questo torneo, il punteggio di un giudice deve essere compreso tra %(min)s e %(max)s. Fornire indirizzi mail non è obbligatorio, ma può essere utile usando gli URL privati Per i feedback o per i ballot." -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" msgstr "Giudici per %(institution)s" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" msgstr "Giudici non affiliati" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" msgstr "Salva tutti i giudici" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." msgstr "È necessario aggiungere istituti Prima di aggiungere dei giudici." -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." msgstr "Specifica il numero di nuovi giudici da aggiungere per istituto. Nella fase successiva puoi specificare i loro nomi e punteggi." -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" -msgstr "Puoi aggiungere fino a 198 giudici alla volta. Se hai più di 198 aggiudicatori, dividili in pezzi. (Si prega di non cercare di aggiungere più di 198 in una volta; il sistema si bloccherà e si perderanno i dati.)" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" +msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" msgstr "Prossimo passo" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" msgstr "Importatore Semplice" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." msgstr "Esistono diversi metodi per importare dati in Tabbycat. Quale sia il migliore dipende dalla dimensione del tuo torneo e dal tuo background tecnico. Questo importatore semplice è il più semplice da usare e funziona bene per tornei di piccole-medie dimensioni." -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" msgstr "Aggiungi istituti" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" msgstr "Aggiungi squadre" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" msgstr "Aggiungi giudici" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" msgstr "Aggiungi stanze" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" msgstr "Aggiungi/Modifica categorie della stanza" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" msgstr "Aggiungi/Modifica vincoli di stanza" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" msgstr "Aggiungi/Modifica conflitti giudice-squadra" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" msgstr "Aggiungi/Modifica conflitti giudice-giudice" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" msgstr "Aggiungi/Modifica conflitti giudice-istituto" -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" msgstr "Aggiungi/Modifica conflitti squadra-istituto" -#: importer/templates/simple_import_index.html:66 +#: importer/templates/simple_import_index.html msgid "Add/Edit Break Categories" msgstr "Aggiungi/modifica categoria di break" -#: importer/templates/simple_import_index.html:70 +#: importer/templates/simple_import_index.html msgid "Add/Edit Speaker Categories" msgstr "Aggiungi/modifica categorie di speaker" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" msgstr "Aggiungi istituti" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" msgstr "Salva tutti gli istituti" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" msgstr "Ci sono alcuni problemi con i dati su questo modulo:" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" msgstr "Prossimo passo" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" msgstr "Aggiungi squadre" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" msgstr "Squadre per %(institution)s" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" msgstr "Squadre Non affiliate" -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" msgstr "Salva Tutte Le Squadre" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." msgstr "È necessario aggiungere istituti Prima di aggiungere delle squadre." -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." msgstr "Specifica il numero di nuovi team da aggiungere per istituto. Nella fase successiva puoi specificare il team ed i nomi degli speaker." -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" -msgstr "Puoi aggiungere fino a 141 squadre alla volta. Se hai più di 141 squadre, dividile in pezzi. (Si prega di non cercare di aggiungerne più di 141 in una volta; il sistema si bloccherà e si perderanno i dati.)" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" +msgstr "" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" msgstr "Aggiungi stanze" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." msgstr "Le priorità indicano quanto si desidera utilizzare la stanza. I numeri più grandi indicano una priorità maggiore. Se si dispone di più stanze che dibattiti, le stanze con le priorità più bassa non saranno utilizzate." -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" msgstr "Salva Tutte Le Stanze" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" msgstr "Incolla un elenco di stanze con una stanza per riga e seguendo il formato di: nome,priorità. Per esempio:" -#: importer/views.py:108 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." msgstr[0] "Aggiunto %(count)d instituto." msgstr[1] "Aggiunti %(count)d instituti." -#: importer/views.py:129 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." msgstr[0] "Aggiunta %(count)d stanza." msgstr[1] "Aggiunte %(count)d stanze." -#: importer/views.py:188 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." msgstr[0] "Aggiunta %(count)d squadra." msgstr[1] "Aggiunte %(count)d squadre." -#: importer/views.py:209 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "Giudice %(number)d" -#: importer/views.py:214 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." msgstr[0] "Aggiunto %(count)d giudice." msgstr[1] "Aggiunti %(count)d giudici." -#: importer/views.py:230 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " msgstr "

    Ci sono stati uno o più errori nella creazione del torneo demo. Prima di riprovare, si prega di eliminare il torneo demo esistente e le istituzioni nell'area Modifica Database.

    Informazioni tecniche: gli errori sono i seguenti:

    " -#: importer/views.py:238 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." msgstr "Creato un nuovo torneo demo. Ora puoi configurarlo qui sotto." -#: importer/views.py:256 +#: importer/views.py msgid "Tournament archive has been imported." msgstr "L'archivio del torneo è stato importato." diff --git a/tabbycat/locale/it/LC_MESSAGES/django.po b/tabbycat/locale/it/LC_MESSAGES/django.po index 37dc3dc4062..ea83947ecfc 100644 --- a/tabbycat/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2022-04-18 11:06\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -17,940 +17,940 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" msgstr "" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:105 +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" msgstr "" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" msgstr "" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" msgstr "" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" msgstr "" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." msgstr "" -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" msgstr "" -#: checkins/models.py:37 +#: checkins/models.py msgid "" msgstr "" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" msgstr "" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" msgstr "" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" msgstr "" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "dibattito" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" msgstr "" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" msgstr "" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" msgstr "" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" msgstr "" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" msgstr "" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" msgstr "" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" msgstr "" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" msgstr "" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" msgstr "" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." msgstr "" -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." msgstr "" -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." msgstr "" -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" msgstr "" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" msgstr "" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" msgstr "" -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." msgstr "" -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." msgstr "" -#: checkins/views.py:30 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" msgstr "" -#: checkins/views.py:63 +#: checkins/views.py msgid "People's Check-In Statuses" msgstr "" -#: checkins/views.py:120 +#: checkins/views.py msgid "Rooms' Check-In Statuses" msgstr "" -#: checkins/views.py:169 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" msgstr "" -#: checkins/views.py:176 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" msgstr "" -#: checkins/views.py:181 templates/nav/public_nav.html:145 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "" -#: checkins/views.py:186 +#: checkins/views.py msgid "Rooms" msgstr "" -#: checkins/views.py:227 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" msgstr "" -#: checkins/views.py:234 +#: checkins/views.py msgid "Identifiers" msgstr "" -#: checkins/views.py:272 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." msgstr "" -#: checkins/views.py:280 +#: checkins/views.py msgid "You have revoked your check-in." msgstr "" -#: checkins/views.py:282 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." msgstr "" -#: checkins/views.py:286 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." msgstr "" -#: checkins/views.py:293 +#: checkins/views.py msgid "You are now checked in." msgstr "" -#: settings/core.py:67 +#: settings/core.py msgid "Arabic" msgstr "" -#: settings/core.py:68 +#: settings/core.py msgid "Bengali" msgstr "" -#: settings/core.py:69 +#: settings/core.py msgid "English" msgstr "" -#: settings/core.py:70 +#: settings/core.py msgid "Spanish" msgstr "" -#: settings/core.py:71 +#: settings/core.py msgid "French" msgstr "" -#: settings/core.py:72 +#: settings/core.py msgid "Indonesian" msgstr "" -#: settings/core.py:73 +#: settings/core.py msgid "Japanese" msgstr "" -#: settings/core.py:74 +#: settings/core.py msgid "Malay" msgstr "" -#: settings/core.py:75 +#: settings/core.py msgid "Portuguese" msgstr "" -#: settings/core.py:76 +#: settings/core.py msgid "Russian" msgstr "" -#: settings/core.py:77 +#: settings/core.py msgid "Simplified Chinese" msgstr "" -#: settings/core.py:78 +#: settings/core.py msgid "Translation" msgstr "" -#: templates/admin/delete_protected_message.html:4 +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." msgstr "" -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." msgstr "" -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." msgstr "" -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" msgstr "" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" msgstr "" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" msgstr "" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" msgstr "" -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." msgstr "" -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" msgstr "" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" msgstr "" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." msgstr "" -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgstr[0] "" msgstr[1] "" -#: templates/errors/legacy_sendgrid_warning.html:11 +#: templates/errors/legacy_sendgrid_warning.html msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." msgstr "" -#: templates/errors/public_403.html:14 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." msgstr "" -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." msgstr "" -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." msgstr "" -#: templates/footer.html:24 +#: templates/footer.html #, python-format msgid "For a tournament of this size, we suggest a donation of $%(amount)s." msgstr "" -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." msgstr "" -#: templates/footer.html:31 +#: templates/footer.html msgid "Donations to Tabbycat from individuals or organisations are much appreciated." msgstr "" -#: templates/footer.html:39 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" msgstr "" -#: templates/footer.html:41 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." msgstr "" -#: templates/footer.html:50 +#: templates/footer.html msgid "Our Organisation" msgstr "" -#: templates/footer.html:52 -msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." msgstr "" -#: templates/footer.html:65 +#: templates/footer.html msgid "Language" msgstr "" -#: templates/footer.html:72 +#: templates/footer.html msgid "GitHub" msgstr "" -#: templates/footer.html:78 +#: templates/footer.html msgid "Documentation" msgstr "" -#: templates/footer.html:84 +#: templates/footer.html msgid "Support" msgstr "" -#: templates/footer.html:90 +#: templates/footer.html msgid "Facebook" msgstr "" -#: templates/footer.html:96 +#: templates/footer.html msgid "Set Up A Copy" msgstr "" -#: templates/footer.html:110 +#: templates/footer.html msgid "Change Language" msgstr "" -#: templates/footer.html:127 +#: templates/footer.html msgid "Use this language" msgstr "" -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" msgstr "" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" msgstr "" -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" msgstr "" -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" msgstr "" -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" msgstr "" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" msgstr "" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" msgstr "" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" msgstr "Panoramica" -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" msgstr "" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" msgstr "" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" msgstr "" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:175 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" msgstr "" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" msgstr "" -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" msgstr "" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" msgstr "Giurie preformate" -#: templates/nav/admin_nav.html:97 +#: templates/nav/admin_nav.html msgid "Export XML" msgstr "" -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:160 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" msgstr "" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" msgstr "" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" msgstr "" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" msgstr "Feedback" -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" msgstr "Più recenti" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" msgstr "Importante" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" msgstr "" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" msgstr "" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" msgstr "" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" msgstr "Non inviato" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" msgstr "Aggiungi Feedback" -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" msgstr "" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:165 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" msgstr "" -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" msgstr "" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" msgstr "" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" msgstr "" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" msgstr "" -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" msgstr "" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:155 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:170 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" msgstr "" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" msgstr "" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" msgstr "" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" msgstr "" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" msgstr "" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" msgstr "" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" msgstr "" -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:211 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" msgstr "Inserisci Feedback" -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" msgstr "" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:180 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" msgstr "" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" msgstr "" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" msgstr "" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" msgstr "" -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" msgstr "" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" msgstr "" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" msgstr "" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" msgstr "" -#: templates/nav/public_nav.html:53 templates/nav/public_nav.html:62 +#: templates/nav/public_nav.html msgid "Motions Tab" msgstr "" -#: templates/nav/public_nav.html:56 +#: templates/nav/public_nav.html msgid "By round" msgstr "" -#: templates/nav/public_nav.html:57 +#: templates/nav/public_nav.html msgid "Globally" msgstr "" -#: templates/nav/public_nav.html:72 +#: templates/nav/public_nav.html msgid "Draws" msgstr "" -#: templates/nav/public_nav.html:83 +#: templates/nav/public_nav.html msgid "No Draws Available" msgstr "" -#: templates/nav/public_nav.html:91 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: templates/nav/public_nav.html:95 +#: templates/nav/public_nav.html msgid "Current Draws" msgstr "" -#: templates/nav/public_nav.html:115 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" msgstr "" -#: templates/nav/public_nav.html:133 +#: templates/nav/public_nav.html msgid "Break" msgstr "" -#: templates/nav/public_nav.html:185 +#: templates/nav/public_nav.html msgid "Feedback Progress" msgstr "Progresso Feedback" -#: templates/nav/public_nav.html:191 templates/nav/public_nav.html:197 +#: templates/nav/public_nav.html msgid "Enter Ballot" msgstr "" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" msgstr "" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" msgstr "" -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" msgstr "" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" msgstr "" -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" msgstr "" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" msgstr "" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" msgstr "" -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" msgstr "" -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." msgstr "" -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." msgstr "" -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." msgstr "" -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" msgstr "" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." msgstr "" -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" msgstr "" -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:27 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" msgstr "" -#: templates/registration/password_change_form.html:16 +#: templates/registration/password_change_form.html #, python-format msgid "API Token: %(api_token)s" msgstr "" -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgid "The API token will allow you to authorize external applications to access the site as staff." msgstr "" -#: templates/registration/password_change_form.html:28 +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." msgstr "" -#: templates/registration/password_change_form.html:33 -#: templates/registration/password_reset_confirm.html:25 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" msgstr "" -#: templates/registration/password_change_form.html:34 -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" msgstr "" -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "" -#: templates/registration/password_reset_complete.html:11 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." msgstr "" -#: templates/registration/password_reset_complete.html:14 -#: templates/registration/password_reset_done.html:15 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" msgstr "" -#: templates/registration/password_reset_confirm.html:4 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" msgstr "" -#: templates/registration/password_reset_confirm.html:16 -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html msgctxt "page title" msgid "Password Reset" msgstr "" -#: templates/registration/password_reset_confirm.html:18 +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" msgstr "" -#: templates/registration/password_reset_confirm.html:33 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." msgstr "" -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" msgid "Password reset email sent" msgstr "" -#: templates/registration/password_reset_done.html:11 +#: templates/registration/password_reset_done.html msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." msgstr "" -#: templates/registration/password_reset_done.html:12 +#: templates/registration/password_reset_done.html msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." msgstr "" -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" msgstr "" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" msgstr "" -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_form.html:27 +#: templates/registration/password_reset_form.html msgid "Enter your email address below, and we'll email you a password reset link." msgstr "" -#: templates/registration/password_reset_form.html:34 +#: templates/registration/password_reset_form.html msgid "Please enter a valid email address." msgstr "" -#: templates/registration/password_reset_form.html:39 users/forms.py:10 -#: users/forms.py:25 +#: templates/registration/password_reset_form.html users/forms.py msgid "Email address" msgstr "" -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" msgstr "" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" msgstr "" -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" msgstr "" -#: urls.py:102 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" msgstr "" -#: urls.py:105 +#: urls.py msgid "Welcome! You just logged in!" msgstr "" -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." msgstr "" -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." msgstr "" -#: users/templates/admin/auth/delete_user_warning.html:6 +#: users/templates/admin/auth/delete_user_warning.html msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." msgstr "" -#: users/templates/signup.html:4 users/templates/signup.html:5 +#: users/templates/signup.html msgid "Sign-Up" msgstr "" -#: users/templates/signup.html:16 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Administrator Account" msgstr "" -#: users/templates/signup.html:18 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Assistant Account" msgstr "" -#: users/templates/signup.html:25 +#: users/templates/signup.html msgid "Create Account" msgstr "" -#: users/views.py:54 +#: users/views.py msgid "You have successfully created a new administrator account." msgstr "" -#: users/views.py:56 +#: users/views.py msgid "You have successfully created a new assistant account." msgstr "" -#: users/views.py:84 +#: users/views.py msgid "Whoops! It looks like someone's already created the first user account. Please log in." msgstr "" -#: users/views.py:92 +#: users/views.py #, python-format msgid "Welcome! You've created an account for %s." msgstr "" diff --git a/tabbycat/motions/locale/it/LC_MESSAGES/django.po b/tabbycat/motions/locale/it/LC_MESSAGES/django.po index c5bde211496..c6ee1fb57c1 100644 --- a/tabbycat/motions/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2022-04-18 14:25\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -17,372 +17,383 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "Mozioni" -#: motions/models.py:9 +#: motions/models.py msgid "text" msgstr "testo" -#: motions/models.py:10 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" msgstr "La mozione completa, ad esempio, \"Quest'Assemblea raddrizzerebbe tutte le banane\"" -#: motions/models.py:12 +#: motions/models.py msgid "reference" msgstr "riferimento" -#: motions/models.py:13 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" msgstr "Abbreviazione per la mozione, ad esempio \"Banane\"" -#: motions/models.py:15 +#: motions/models.py msgid "info slide" msgstr "slide informazioni" -#: motions/models.py:16 +#: motions/models.py msgid "The information slide for this topic; if it has one" msgstr "La diapositiva di informazioni per questo argomento; se presente" -#: motions/models.py:19 +#: motions/models.py msgid "tournament" msgstr "torneo" -#: motions/models.py:21 +#: motions/models.py msgid "rounds" msgstr "round" -#: motions/models.py:24 motions/models.py:37 motions/models.py:62 +#: motions/models.py msgid "motion" msgstr "mozione" -#: motions/models.py:25 +#: motions/models.py msgid "motions" msgstr "mozioni" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" msgstr "team di dibattito" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" msgstr "preferenze" -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" msgstr "invio ballot" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" msgstr "preferenza mozione di dibattito a squadre" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" msgstr "preferenze mozione di dibattito a squadre" -#: motions/models.py:64 +#: motions/models.py msgid "round" msgstr "round" -#: motions/models.py:67 +#: motions/models.py msgid "sequence number" msgstr "numero sequenziale" -#: motions/models.py:68 +#: motions/models.py msgid "The order in which motions are displayed" msgstr "L'ordine di visualizzazione delle mozioni" -#: motions/models.py:73 +#: motions/models.py msgid "round motion" msgstr "mozione del round" -#: motions/models.py:74 +#: motions/models.py msgid "round motions" msgstr "mozioni del round" -#: motions/statistics.py:86 +#: motions/statistics.py msgid "extremely strong evidence" msgstr "evidence estremamente forte" -#: motions/statistics.py:87 +#: motions/statistics.py msgid "strong evidence" msgstr "evidence importante" -#: motions/statistics.py:88 +#: motions/statistics.py msgid "moderate evidence" msgstr "evidence moderata" -#: motions/statistics.py:89 +#: motions/statistics.py msgid "weak evidence" msgstr "evidence debole" -#: motions/statistics.py:90 +#: motions/statistics.py msgid "very weak evidence" msgstr "evidence molto debole" -#: motions/statistics.py:91 +#: motions/statistics.py msgid "extremely weak evidence" msgstr "evidence davvero molto debole" -#: motions/statistics.py:114 +#: motions/statistics.py msgid "balance inconclusive" msgstr "bilancio inconclusivo" -#: motions/statistics.py:115 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" msgstr "troppi pochi dibattiti per ottenere una statistica significativa" -#: motions/statistics.py:123 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" msgstr "squilibrato a %(level)s livello" -#: motions/statistics.py:124 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." msgstr "La statistica χ² è %(chisq).3f, fornendo %(evidence)s per suggerire che questa mozione non era bilanciata — ad un livello %(level)s di significato." -#: motions/statistics.py:129 +#: motions/statistics.py msgid "probably balanced" msgstr "probabilmente equilibrato" -#: motions/statistics.py:130 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." msgstr "La statistica χ² è %(chisq).3f, fornendo prove non sufficienti per suggerire che questa mozione non era bilanciata ad un qualsiasi livello di significato." -#: motions/templates/motion_global_statistics.html:22 -#: motions/templates/motion_round_statistics.html:31 -#: motions/templates/public_motions.html:32 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" msgstr "Visualizza la slide di informazioni" -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" msgstr[0] "risultati dal dibattito %(ndebates)s" msgstr[1] "risultati dai dibattiti %(ndebates)s" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" msgstr[0] "%(advancing)s di %(ndebates)s team su %(side)s (%(percentage)s%%) avanzano" msgstr[1] "%(advancing)s di %(ndebates)s team su %(side)s (%(percentage)s%%) avanzano" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" msgstr[0] "%(eliminated)s di %(ndebates)s team su %(side)s (%(percentage)s%%) sono eliminati" msgstr[1] "%(eliminated)s di %(ndebates)s team su %(side)s (%(percentage)s%%) sono eliminati" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" msgstr "avanzato" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." msgstr "avanz." -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" msgstr "eliminato" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." msgstr "elim." -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" msgstr "%(side)s distribuzione risultati" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" msgstr "Nessun risultato per questa mozione" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" msgstr "Pubblica amministrazione" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" msgstr "Opposizione" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" msgstr "Punti medi per banco" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" msgstr "Apertura" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" msgstr "Chiusura" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" msgstr "Punti medi per parte" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" msgstr[0] "punti medi per posizione (dibattito %(ndebates)s)" msgstr[1] "punti medi per posizione (dibattiti %(ndebates)s)" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" msgstr[0] "%(count)s risultato per %(side)s (%(percentage)s%%) per %(points)s punti" msgstr[1] "%(count)s risultati per %(side)s (%(percentage)s%%) per %(points)s punti" -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" msgstr "%(side)s risultati" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" msgstr[0] "%(count)s %(side)s vittoria" msgstr[1] "%(count)s %(side)s vittorie" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" msgstr "Nessuna squadra ha dibattuto questa mozione" -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" msgstr[0] "%(count)s %(side)s veto" msgstr[1] "%(count)s %(side)s veto" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" msgstr "Nessuna squadra ha posto il veto su questa mozione" -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" msgstr[0] "Modifica mozione" msgstr[1] "Modifica mozioni" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" msgstr "Mostra sorteggio" -#: motions/templates/motions_edit.html:28 +#: motions/templates/motions_edit.html msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." msgstr "Questo sostituirà tutte le mozioni presenti per questo round. Le mozioni stesse saranno ancora nel database." -#: motions/templates/motions_edit.html:30 +#: motions/templates/motions_edit.html msgid "Reuse Motions from Last Round" msgstr "Riutilizza le mozioni dal round precedente" -#: motions/templates/motions_edit.html:35 +#: motions/templates/motions_edit.html msgid "Use Existing Motions" msgstr "Usa le mozioni esistenti" -#: motions/templates/motions_edit.html:74 +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" msgstr[0] "Salva mozione" msgstr[1] "Salva mozioni" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "Slide informazioni" -#: motions/templates/public_motions.html:41 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." msgstr "Non ci sono mozioni disponibili per questo round." -#: motions/templates/public_motions.html:47 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." msgstr "Le mozioni per questo round non sono state rilasciate." -#: motions/templates/public_motions.html:52 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." msgstr "La mozione per questo round non è stata rilasciata." -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" msgstr[0] "Rivela la slide di informazioni per %(round)s" msgstr[1] "Rivela le slide di informazioni per %(round)s" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" msgstr[0] "Rivela la mozione per %(round)s" msgstr[1] "Rivela le mozioni per %(round)s" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." msgstr "Non ci sono mozioni per questo round inserite in Tabbycat." -#: motions/utils.py:11 +#: motions/utils.py msgid "Not all latest ballots list the same motion, so could not be merged." msgstr "Non tutti gli ultimi ballot mostrano la stessa mozione, quindi non possono essere uniti." -#: motions/utils.py:29 +#: motions/utils.py msgid "Motion vetos are inconsistent, so could not be merged." msgstr "I veti sulla mozione non sono consistenti, quindi non possono essere uniti." -#: motions/views.py:91 +#: motions/views.py msgid "The motion has been saved." msgstr "La mozione è stata salvata." -#: motions/views.py:93 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." msgstr[0] "%(count)d mozione salvata." msgstr[1] "%(count)d mozioni salvate." -#: motions/views.py:97 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." msgstr[0] "%(count)d mozione eliminata." msgstr[1] "%(count)d mozioni eliminate." -#: motions/views.py:140 +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "" + +#: motions/views.py #, python-format msgid "Reused the motion from the previous round." msgid_plural "Reused the %(count)d motions from the previous round." msgstr[0] "Mozione del round precedente riutilizzata." msgstr[1] "%(count)d mozioni del round precedente riutilizzate." -#: motions/views.py:164 -msgid "Released the motion(s)." -msgstr "Mozione(i) rilasciata(e)." +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" +msgstr[1] "" -#: motions/views.py:171 -msgid "Unreleased the motion(s)." -msgstr "Mozione(i) nono rilasciata(e)." +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" +msgstr[1] "" -#: motions/views.py:195 +#: motions/views.py msgid "Round Motions" msgstr "Mozioni del round" -#: motions/views.py:209 +#: motions/views.py msgid "Motion Statistics" msgstr "Statistiche mozione" diff --git a/tabbycat/notifications/locale/it/LC_MESSAGES/django.po b/tabbycat/notifications/locale/it/LC_MESSAGES/django.po index 5bf8516f3df..6317c937379 100644 --- a/tabbycat/notifications/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2022-04-16 20:15\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -18,401 +18,399 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" msgstr "Notifiche" -#: notifications/forms.py:12 +#: notifications/forms.py msgid "Recipient email address" msgstr "Indirizzo email di destinazione" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" msgstr "Email di prova da %(host)s" -#: notifications/forms.py:17 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" msgstr "Congratulazioni! Se stai leggendo questo messaggio, il tuo email backend su %(host)s sembra andare bene!" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Subject" msgstr "Oggetto" -#: notifications/forms.py:31 +#: notifications/forms.py msgid "Message" msgstr "Messaggio" -#: notifications/models.py:11 notifications/models.py:26 +#: notifications/models.py msgid "email" msgstr "email" -#: notifications/models.py:12 +#: notifications/models.py msgid "SMS" msgstr "SMS" -#: notifications/models.py:21 +#: notifications/models.py msgid "recipient" msgstr "destinatario" -#: notifications/models.py:23 +#: notifications/models.py msgid "method" msgstr "metodo" -#: notifications/models.py:28 notifications/models.py:134 +#: notifications/models.py msgid "context" msgstr "contesto" -#: notifications/models.py:31 +#: notifications/models.py msgid "notification" msgstr "notifica" -#: notifications/models.py:33 notifications/models.py:74 -#: notifications/models.py:130 +#: notifications/models.py msgid "timestamp" msgstr "data e ora" -#: notifications/models.py:36 +#: notifications/models.py msgid "sent message" msgstr "messaggio inviato" -#: notifications/models.py:37 +#: notifications/models.py msgid "sent messages" msgstr "messaggi inviati" -#: notifications/models.py:58 +#: notifications/models.py msgid "team points" msgstr "punti squadra" -#: notifications/models.py:59 +#: notifications/models.py msgid "ballot confirmed" msgstr "ballot confermato" -#: notifications/models.py:60 +#: notifications/models.py msgid "feedback URL" msgstr "URL feedback" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot URL" msgstr "ballot URL" -#: notifications/models.py:62 +#: notifications/models.py msgid "landing page URL" msgstr "URL pagina di destinazione" -#: notifications/models.py:63 +#: notifications/models.py msgid "adjudicator draw released" msgstr "sorteggio giudice rilasciato" -#: notifications/models.py:64 +#: notifications/models.py msgid "team registration" msgstr "registrazione del team" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator registration" msgstr "registrazione giudice" -#: notifications/models.py:66 +#: notifications/models.py msgid "motion(s) released" msgstr "mozione/i rilasciata/e" -#: notifications/models.py:67 +#: notifications/models.py msgid "team draw released" msgstr "sorteggio della squadra rilasciato" -#: notifications/models.py:68 +#: notifications/models.py msgid "custom message" msgstr "messaggio personalizzato" -#: notifications/models.py:72 notifications/models.py:132 +#: notifications/models.py msgid "event" msgstr "evento" -#: notifications/models.py:77 +#: notifications/models.py msgid "tournament" msgstr "torneo" -#: notifications/models.py:79 +#: notifications/models.py msgid "round" msgstr "round" -#: notifications/models.py:82 +#: notifications/models.py msgid "subject template" msgstr "modello oggetto" -#: notifications/models.py:84 +#: notifications/models.py msgid "body template" msgstr "modello corpo" -#: notifications/models.py:87 +#: notifications/models.py msgid "bulk notification" msgstr "notifica di massa" -#: notifications/models.py:88 +#: notifications/models.py msgid "bulk notifications" msgstr "notifiche di massa" -#: notifications/models.py:114 +#: notifications/models.py msgid "Processed" msgstr "Elaborato" -#: notifications/models.py:115 +#: notifications/models.py msgid "Dropped" msgstr "Saltato" -#: notifications/models.py:116 +#: notifications/models.py msgid "Deferred" msgstr "Rinviato" -#: notifications/models.py:117 +#: notifications/models.py msgid "Delivered" msgstr "Consegnato" -#: notifications/models.py:118 +#: notifications/models.py msgid "Bounced" msgstr "Rimbalzato" -#: notifications/models.py:119 +#: notifications/models.py msgid "Opened" msgstr "Aperto" -#: notifications/models.py:120 +#: notifications/models.py msgid "Clicked" msgstr "Cliccato" -#: notifications/models.py:121 +#: notifications/models.py msgid "Unsubscribed" msgstr "Iscrizione annullata" -#: notifications/models.py:122 +#: notifications/models.py msgid "Marked as spam" msgstr "Segnata come Spam" -#: notifications/models.py:123 +#: notifications/models.py msgid "Unsubscribed from group" msgstr "Disiscritto dal gruppo" -#: notifications/models.py:124 +#: notifications/models.py msgid "Resubscribed to group" msgstr "Sottoscritto nuovamente al gruppo" -#: notifications/models.py:128 +#: notifications/models.py msgid "email message" msgstr "messaggio email" -#: notifications/models.py:137 +#: notifications/models.py msgid "email status" msgstr "stato mail" -#: notifications/models.py:138 +#: notifications/models.py msgid "email statuses" msgstr "stato mail" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." msgstr "Non hai specificato un indirizzo di risposta. Ciò significa che i partecipanti non potranno rispondere al messaggio se hanno domande. Si prega di impostarne uno nella sezione Preferenze di notifiche." -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." msgstr "L'URL di webhook da usare in SendGrid è %(notifications_webhook_url)s. Si prega di indirizzare l'URL HTTP POST in SendGrid." -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" msgstr "Invia messaggi(o)" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." msgstr "Le email possono essere inviate da Tabbycat per molti motivi. Le email vengono inviate quando vengono abilitate le apposite preferenze (es. abilitando la ricezione del ballot) oppure attraverso azioni disponibili su pagine specifiche (es. la pagina di visualizzazione sorteggio per gli abbinamenti; oppure la pagina dei partecipanti per la registrazione del team). Questa pagina mostra lo stato delle email precedentemente inviate." -#: notifications/templates/notifications_nav.html:5 notifications/views.py:75 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" msgstr "Stato mail" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:29 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" msgstr "Invia email di prova" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" msgstr "Invia Email Personalizzata" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" msgstr "Invia email di prova" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." msgstr "È possibile utilizzare questo modulo per inviare una e-mail di prova, per controllare che le impostazioni del backend e-mail funzionino, prima di provare a inviare notifiche via mail ai partecipanti." -#: notifications/templates/test_email.html:20 +#: notifications/templates/test_email.html #, python-format msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." msgstr "L'email verrà inviata da: %(default_from_email)s. Se questo non sembra corretto, cambiare la variabile DEFAULT_FROM_EMAIL in Heroku (o la variabile d'ambiente)." -#: notifications/templates/test_email.html:30 +#: notifications/templates/test_email.html msgid "Go back to the site home page" msgstr "Torna alla pagina iniziale" -#: notifications/utils.py:26 +#: notifications/utils.py msgid "the chair" msgstr "giudice arbitro" -#: notifications/utils.py:27 +#: notifications/utils.py msgid "the only" msgstr "l'unico" -#: notifications/utils.py:28 +#: notifications/utils.py msgid "a panellist" msgstr "un giudice" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "a trainee" msgstr "un tirocinante" -#: notifications/utils.py:59 +#: notifications/utils.py msgid "TBA" msgstr "Da annunciare" -#: notifications/utils.py:88 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "" -#: notifications/utils.py:99 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" msgstr "
  • %(side)s: %(team)s (%(points)d punti con %(speaks)s speaker totali)" -#: notifications/utils.py:102 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" msgstr "
  • %(side)s: %(team)s (%(points)s - %(speaks)s speech totali)" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Win" msgstr "Vittoria" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Loss" msgstr "Sconfitta" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " msgstr "
  • %(pos)s: %(speaker)s (%(score)s)
  • " -#: notifications/utils.py:183 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " msgstr "
  • %(text)s (%(ref)s)
  • " -#: notifications/utils.py:206 notifications/utils.py:207 +#: notifications/utils.py msgid ", " msgstr ", " -#: notifications/views.py:47 +#: notifications/views.py #, python-format msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" msgstr "Il server di posta elettronica (SMTP) ha restituito un errore inviando l'email di prova: [codice SMTP %(code)d] %(error)s" -#: notifications/views.py:51 +#: notifications/views.py msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." msgstr "Suggerimento: se l'errore riguarda la verifica dell'identità del mittente in SendGrid, e hai già completato la procedura in SendGrid, potrebbe essere necessario aggiornare la variabile di config DEFAULT_FROM_EMAIL in Heroku per corrispondere all'identità verificata del mittente." -#: notifications/views.py:60 +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" msgstr "Si è verificato un errore durante l'invio dell'email di prova: %(error)s" -#: notifications/views.py:65 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." msgstr "Un'email di prova è stata inviata a %(recipient)s." -#: notifications/views.py:81 +#: notifications/views.py msgid "N/A" msgstr "N/D" -#: notifications/views.py:82 +#: notifications/views.py msgid "Not known" msgstr "Sconosciuto" -#: notifications/views.py:87 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" msgstr "%(status)s @ %(time)s" -#: notifications/views.py:133 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "" -#: notifications/views.py:152 +#: notifications/views.py msgid "Timeline" msgstr "Sequenza" -#: notifications/views.py:162 notifications/views.py:260 +#: notifications/views.py msgid "Participant" msgstr "Partecipante" -#: notifications/views.py:163 notifications/views.py:265 +#: notifications/views.py msgid "Email address" msgstr "" -#: notifications/views.py:164 +#: notifications/views.py msgid "Status" msgstr "Stato" -#: notifications/views.py:165 +#: notifications/views.py msgid "Time" msgstr "Ora" -#: notifications/views.py:204 +#: notifications/views.py msgid "Email Participants" msgstr "Email Partecipanti" -#: notifications/views.py:233 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." msgstr[0] "%(email_count)s email è stata accodata per l'invio." msgstr[1] "%(email_count)s email sono state accodate per l'invio." -#: notifications/views.py:239 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." msgstr "Nessuna email è stata inviata, probabilmente perché non è stato selezionato nessun destinatario." -#: notifications/views.py:250 +#: notifications/views.py msgid "Send Email" msgstr "Invia email" -#: notifications/views.py:266 +#: notifications/views.py msgid "Not Provided" msgstr "Non fornito" -#: notifications/views.py:279 +#: notifications/views.py msgid "Role" msgstr "Ruolo" -#: notifications/views.py:280 +#: notifications/views.py msgid "Adjudicator" msgstr "Giudice" -#: notifications/views.py:280 +#: notifications/views.py msgid "Speaker" msgstr "Speaker" -#: notifications/views.py:288 +#: notifications/views.py msgid "Speakers" msgstr "Speaker" -#: notifications/views.py:289 +#: notifications/views.py msgid "Adjudicators" msgstr "GiudicI" diff --git a/tabbycat/options/locale/it/LC_MESSAGES/django.po b/tabbycat/options/locale/it/LC_MESSAGES/django.po index 9eb6600049e..12a91324675 100644 --- a/tabbycat/options/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2022-04-19 11:41\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -18,1587 +18,1600 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" msgstr "Opzioni del torneo" -#: options/models.py:13 +#: options/models.py msgid "instance" msgstr "istanza" -#: options/models.py:18 +#: options/models.py msgid "tournament preference" msgstr "preferenze del torneo" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" msgstr "preferenze del torneo" -#: options/preferences.py:19 options/templates/preferences_index.html:53 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" msgstr "Regole di punteggio" -#: options/preferences.py:25 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" msgstr "Punteggio minimo consentito per i discorsi sostanziali" -#: options/preferences.py:28 +#: options/preferences.py msgid "Minimum speaker score" msgstr "Punteggio minimo dello speaker" -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum speaker score" msgstr "Punteggio massimo dello speaker" -#: options/preferences.py:35 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" msgstr "Punteggio massimo consentito per i discorsi sostanziali" -#: options/preferences.py:43 +#: options/preferences.py msgid "Speaker score step" msgstr "Passo di punteggio speaker" -#: options/preferences.py:44 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" msgstr "Intervallo tra i punteggi consentito per speech sostanziali, es. punti interi (1) o mezzo punto (0.5)" -#: options/preferences.py:52 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" msgstr "La più grande quantità con la quale una squadra può battere un'altra (0 significa nessun limite)" -#: options/preferences.py:53 +#: options/preferences.py msgid "Maximum margin" msgstr "Margine massimo" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" msgstr "Punteggio minimo consentito per i discorsi di arringa" -#: options/preferences.py:63 +#: options/preferences.py msgid "Minimum reply score" msgstr "Punteggio minimo arringa" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" msgstr "Punteggio massimo consentito per i discorsi di arringa" -#: options/preferences.py:72 +#: options/preferences.py msgid "Maximum reply score" msgstr "Punteggio massimo arringa" -#: options/preferences.py:80 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" msgstr "Intervallo tra i punteggi consentito per speech di arringa, es. punti interi (1) o mezzo punto (0.5)" -#: options/preferences.py:81 +#: options/preferences.py msgid "Reply score step" msgstr "Passo di punteggio risposta" -#: options/preferences.py:89 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" msgstr "Se selezionato, il margine vincente di una squadra include i giudici dissenzienti" -#: options/preferences.py:90 +#: options/preferences.py msgid "Margin includes dissenters" msgstr "Il margine include i dissidenti" -#: options/preferences.py:98 +#: options/preferences.py msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" msgstr "Se selezionato, verranno contati per i punteggi della squadra tutti i punteggi degli speaker, anche gli speech duplicati" -#: options/preferences.py:99 +#: options/preferences.py msgid "Team score includes ghosts" msgstr "Il punteggio della squadra include i ghost" -#: options/preferences.py:106 options/templates/preferences_index.html:58 +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" msgstr "Regole del sorteggio" -#: options/preferences.py:112 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" msgstr "Il sistema automatico prenderà solo gli giudici a questo punteggio o superiore come giudici votanti" -#: options/preferences.py:113 +#: options/preferences.py msgid "Minimum adjudicator score to vote" msgstr "Punteggio minimo giudice per votare" -#: options/preferences.py:121 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" msgstr "Penalità applicata a causa conflitti dal sistema automatico dei giudici" -#: options/preferences.py:122 +#: options/preferences.py msgid "Adjudicator conflict penalty" msgstr "Penalità conflitto giudice" -#: options/preferences.py:130 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" msgstr "Penalità applicata a causa di cronologia dal sistema automatico dei giudici" -#: options/preferences.py:131 +#: options/preferences.py msgid "Adjudicator history penalty" msgstr "Penalità cronologia giudice" -#: options/preferences.py:139 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" msgstr "Penalità applicata dal sistema automatico del pannello preformato per la mancata corrispondenza di priorità" -#: options/preferences.py:140 +#: options/preferences.py msgid "Importance mismatch penalty" msgstr "Penalità di disallineamento importanza" -#: options/preferences.py:148 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" msgstr "Penalità applicata con metodo di prevenzione dei conflitti per le squadre che incontrano il proprio istituto" -#: options/preferences.py:149 +#: options/preferences.py msgid "Team institution penalty" msgstr "Penalità istituto squadra" -#: options/preferences.py:157 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" msgstr "Penalità applicata con metodo di prevenzione dei conflitti per le squadre che si incontrano due o più volte" -#: options/preferences.py:158 +#: options/preferences.py msgid "Team history penalty" msgstr "Penalità cronologia squadra" -#: options/preferences.py:166 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" msgstr "Se selezionato, il sorteggio cercherà di evitare l'accoppiamento di squadre contro il proprio istituto" -#: options/preferences.py:167 +#: options/preferences.py msgid "Avoid same institution" msgstr "Evitare lo stesso istituto" -#: options/preferences.py:175 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" msgstr "Se selezionato, il sorteggio cercherà di evitare che le squadre si incontrino due volte" -#: options/preferences.py:176 +#: options/preferences.py msgid "Avoid team history" msgstr "Evita la cronologia team" -#: options/preferences.py:184 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "Come si gestiscono i gruppi dispari (vedere la documentazione per ulteriori dettagli)" -#: options/preferences.py:185 +#: options/preferences.py msgid "Odd bracket resolution method" msgstr "Metodo di gestione gruppi dispari" -#: options/preferences.py:189 +#: options/preferences.py msgid "Pull up from top" msgstr "Prendi dall'alto" -#: options/preferences.py:190 +#: options/preferences.py msgid "Pull up from bottom" msgstr "Prendi dal basso" -#: options/preferences.py:191 +#: options/preferences.py msgid "Pull up from middle" msgstr "Prendi al centro" -#: options/preferences.py:192 +#: options/preferences.py msgid "Pull up at random" msgstr "Prendi a caso" -#: options/preferences.py:193 +#: options/preferences.py msgid "Intermediate brackets" msgstr "Gruppi intermedi" -#: options/preferences.py:194 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" msgstr "Gruppi intermedi con prendi dall'alto-dal basso" -#: options/preferences.py:195 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" msgstr "Intermedio 1 (parti preassegnate)" -#: options/preferences.py:196 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" msgstr "Intermedio 2 (parti preassegnate)" -#: options/preferences.py:203 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" msgstr "Come vengono assegnate posizioni pro/contro (vedi documentazione per ulteriori dettagli)" -#: options/preferences.py:204 +#: options/preferences.py msgid "Side allocations method" msgstr "Metodo assegnazione side" -#: options/preferences.py:208 options/preferences.py:225 +#: options/preferences.py msgid "Random" msgstr "Casuale" -#: options/preferences.py:209 +#: options/preferences.py msgid "Balance" msgstr "Bilanciato" -#: options/preferences.py:210 +#: options/preferences.py msgid "Pre-allocated" msgstr "Preassegnato" -#: options/preferences.py:211 +#: options/preferences.py msgid "Manually enter from ballot" msgstr "Inserimento manuale dal ballot" -#: options/preferences.py:218 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." msgstr "Scivola: 1 vs 6, 2 vs 7, …. Incrocia: 1 vs 10, 2 vs 9, …. Adiacente: 1 vs 2, 3 vs 4, …." -#: options/preferences.py:219 +#: options/preferences.py msgid "Pairing method" msgstr "Metodo di accoppiamento" -#: options/preferences.py:223 +#: options/preferences.py msgid "Slide" msgstr "Scivola" -#: options/preferences.py:224 +#: options/preferences.py msgid "Fold" msgstr "Incrocia" -#: options/preferences.py:226 +#: options/preferences.py msgid "Adjacent" msgstr "Adiacente" -#: options/preferences.py:227 +#: options/preferences.py msgid "Fold top, adjacent rest" msgstr "Incrocia in alto, il resto adiacente" -#: options/preferences.py:234 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" msgstr "Metodo utilizzato per cercare di evitare che le squadre si affrontino più volte o il proprio istituto (vedi documentazione per ulteriori dettagli)" -#: options/preferences.py:236 +#: options/preferences.py msgid "Conflict avoidance method" msgstr "Metodo di prevenzione dei conflitti" -#: options/preferences.py:240 +#: options/preferences.py msgid "Off" msgstr "Off" -#: options/preferences.py:241 +#: options/preferences.py msgid "One-up-one-down" msgstr "Uno sù-uno giù" -#: options/preferences.py:248 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "Se si utilizzano gli spostamenti, limitare quali squadre possono essere spostate. Soloformati a due squadre. Non ha alcun effetto su BP o gruppi intermedi." -#: options/preferences.py:250 +#: options/preferences.py msgid "Pullup restriction" msgstr "Limitaazioni a portare su" -#: options/preferences.py:254 +#: options/preferences.py msgid "No restriction" msgstr "Nessuna limitazione" -#: options/preferences.py:255 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" msgstr "Scegli tra le squadre che sono state tirate in alto il minor numero di volte finora" -#: options/preferences.py:256 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" msgstr "Scegli tra squadre con la forza dei dibattiti vinti più bassi finora" -#: options/preferences.py:257 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" msgstr "Scegli tra squadre con la forza sorteggio per ogni discorso finora" -#: options/preferences.py:264 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." msgstr "In BP, come vengono distribuiti gli spostamenti. Solo \"Dovunque\" è conforme a WUDC." -#: options/preferences.py:265 +#: options/preferences.py msgid "BP pullup distribution" msgstr "Distribuzione spostamenti BP" -#: options/preferences.py:269 +#: options/preferences.py msgid "Anywhere in bracket" msgstr "Ovunque nel gruppo" -#: options/preferences.py:270 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" msgstr "Tutto nella stessa stanza (non conforme a WUDC)" -#: options/preferences.py:277 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" msgstr "In BP, quale funzione di costo della posizione da utilizzare (vedi documentazione per dettagli)" -#: options/preferences.py:278 +#: options/preferences.py msgid "BP position cost" msgstr "Costo posizione BP" -#: options/preferences.py:282 +#: options/preferences.py msgid "Simple" msgstr "Semplice" -#: options/preferences.py:283 +#: options/preferences.py msgid "Rényi entropy" msgstr "Rényi entropy" -#: options/preferences.py:284 +#: options/preferences.py msgid "Population variance" msgstr "Varianza di popolazione" -#: options/preferences.py:291 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." msgstr "Rényi order α, se il costo di una posizione BP usa Rényi entropy. Shannon è α = 1, Hartley è α = 0, la collisione è α = 2. Vedere la documentazione per i dettagli." -#: options/preferences.py:294 +#: options/preferences.py msgid "Rényi order (BP)" msgstr "Rényi order (BP)" -#: options/preferences.py:303 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." msgstr "Il costo della posizione BP è aumentato a questa base: esponenti più elevati tendono a risolvere meno squilibri di posizione di grandi dimensioni su quelli più piccoli. Vedere la documentazione per i dettagli." -#: options/preferences.py:306 +#: options/preferences.py msgid "BP position cost exponent" msgstr "Costo esponente posizione BP" -#: options/preferences.py:315 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." msgstr "" -#: options/preferences.py:317 +#: options/preferences.py msgid "BP assignment method" msgstr "" -#: options/preferences.py:321 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" msgstr "" -#: options/preferences.py:322 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" msgstr "" -#: options/preferences.py:329 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" msgstr "" -#: options/preferences.py:330 +#: options/preferences.py msgid "Skip adjudicator check-ins" msgstr "" -#: options/preferences.py:338 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:339 +#: options/preferences.py msgid "No panellist adjudicators" msgstr "" -#: options/preferences.py:347 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:348 +#: options/preferences.py msgid "No trainee adjudicators" msgstr "" -#: options/preferences.py:355 options/templates/preferences_index.html:73 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" msgstr "Feedback" -#: options/preferences.py:361 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:362 +#: options/preferences.py msgid "Minimum adjudicator score" msgstr "" -#: options/preferences.py:370 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:371 +#: options/preferences.py msgid "Maximum adjudicator score" msgstr "" -#: options/preferences.py:379 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" msgstr "" -#: options/preferences.py:380 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" msgstr "" -#: options/preferences.py:384 +#: options/preferences.py msgid "Chairs on panellists and trainees" msgstr "" -#: options/preferences.py:385 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" msgstr "" -#: options/preferences.py:386 +#: options/preferences.py msgid "Panellists and trainees on chairs, vice-versa" msgstr "" -#: options/preferences.py:387 +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" msgstr "" -#: options/preferences.py:394 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "" -#: options/preferences.py:395 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" msgstr "" -#: options/preferences.py:399 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" msgstr "" -#: options/preferences.py:400 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" msgstr "" -#: options/preferences.py:407 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" msgstr "" -#: options/preferences.py:408 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" msgstr "" -#: options/preferences.py:416 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" msgstr "" -#: options/preferences.py:417 +#: options/preferences.py msgid "Show unaccredited" msgstr "" -#: options/preferences.py:425 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" msgstr "" -#: options/preferences.py:426 +#: options/preferences.py msgid "Feedback introduction/explanation" msgstr "" -#: options/preferences.py:435 options/templates/preferences_index.html:63 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" msgstr "" -#: options/preferences.py:441 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" msgstr "" -#: options/preferences.py:442 +#: options/preferences.py msgid "Teams in debate" msgstr "" -#: options/preferences.py:446 +#: options/preferences.py msgid "Two-team format" msgstr "" -#: options/preferences.py:447 +#: options/preferences.py msgid "British Parliamentary (four teams)" msgstr "" -#: options/preferences.py:454 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:455 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" msgstr "" -#: options/preferences.py:459 options/preferences.py:472 +#: options/preferences.py msgid "One ballot per voting adjudicator" msgstr "" -#: options/preferences.py:460 options/preferences.py:473 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" msgstr "" -#: options/preferences.py:467 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:468 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" msgstr "" -#: options/preferences.py:480 +#: options/preferences.py msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." msgstr "" -#: options/preferences.py:481 +#: options/preferences.py msgid "Winner Declaration in ballot(s)" msgstr "" -#: options/preferences.py:485 +#: options/preferences.py msgid "Do not require separate winner selection" msgstr "" -#: options/preferences.py:486 +#: options/preferences.py msgid "Require separate winner selection as a check on correct scores" msgstr "" -#: options/preferences.py:487 +#: options/preferences.py msgid "Require winner selection to break tied-point debates" msgstr "" -#: options/preferences.py:488 +#: options/preferences.py msgid "Require winner selection, overriding scores" msgstr "" -#: options/preferences.py:495 +#: options/preferences.py msgid "When ballots should ask for speaker scores." msgstr "" -#: options/preferences.py:496 +#: options/preferences.py msgid "Require speaker scores" msgstr "" -#: options/preferences.py:500 +#: options/preferences.py msgid "Always require speaker scores" msgstr "" -#: options/preferences.py:501 +#: options/preferences.py msgid "Only require speaker scores in preliminary rounds" msgstr "" -#: options/preferences.py:502 +#: options/preferences.py msgid "Never require speaker scores" msgstr "" -#: options/preferences.py:509 +#: options/preferences.py msgid "How many substantive speakers on a team" msgstr "" -#: options/preferences.py:510 +#: options/preferences.py msgid "Substantive speakers" msgstr "" -#: options/preferences.py:518 +#: options/preferences.py msgid "What to call the teams" msgstr "" -#: options/preferences.py:519 +#: options/preferences.py msgid "Side names" msgstr "" -#: options/preferences.py:528 +#: options/preferences.py msgid "Whether this style features scored reply speeches" msgstr "" -#: options/preferences.py:529 +#: options/preferences.py msgid "Reply scores" msgstr "" -#: options/preferences.py:537 +#: options/preferences.py msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" msgstr "" -#: options/preferences.py:538 +#: options/preferences.py msgid "Require reply speaker to have given a substantive speech" msgstr "" -#: options/preferences.py:545 options/templates/preferences_index.html:68 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "" -#: options/preferences.py:551 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" msgstr "" -#: options/preferences.py:552 +#: options/preferences.py msgid "Speeches missable for standings eligibility" msgstr "" -#: options/preferences.py:560 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" msgstr "" -#: options/preferences.py:561 +#: options/preferences.py msgid "Replies missable for standings eligibility" msgstr "" -#: options/preferences.py:569 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" msgstr "" -#: options/preferences.py:570 +#: options/preferences.py msgid "Team standings precedence" msgstr "" -#: options/preferences.py:586 options/preferences.py:621 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" msgstr "" -#: options/preferences.py:592 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" msgstr "" -#: options/preferences.py:593 +#: options/preferences.py msgid "Team standings extra metrics" msgstr "" -#: options/preferences.py:604 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" msgstr "" -#: options/preferences.py:605 +#: options/preferences.py msgid "Speaker standings precedence" msgstr "" -#: options/preferences.py:627 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" msgstr "" -#: options/preferences.py:628 +#: options/preferences.py msgid "Speaker standings extra metrics" msgstr "" -#: options/preferences.py:638 options/templates/preferences_index.html:89 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" msgstr "" -#: options/preferences.py:644 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:645 +#: options/preferences.py msgid "Release team tab to public" msgstr "" -#: options/preferences.py:653 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." msgstr "" -#: options/preferences.py:654 +#: options/preferences.py msgid "Top teams cutoff" msgstr "" -#: options/preferences.py:662 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:663 +#: options/preferences.py msgid "Release speaker tab to public" msgstr "" -#: options/preferences.py:671 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." msgstr "" -#: options/preferences.py:672 +#: options/preferences.py msgid "Top speakers cutoff" msgstr "" -#: options/preferences.py:680 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:681 +#: options/preferences.py msgid "Release replies tab to public" msgstr "" -#: options/preferences.py:689 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." msgstr "" -#: options/preferences.py:690 +#: options/preferences.py msgid "Top replies cutoff" msgstr "" -#: options/preferences.py:716 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." msgstr "" -#: options/preferences.py:719 +#: options/preferences.py msgid "Release motions tab to public" msgstr "" -#: options/preferences.py:727 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" msgstr "" -#: options/preferences.py:728 +#: options/preferences.py msgid "Release adjudicator tab to public" msgstr "" -#: options/preferences.py:736 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" msgstr "" -#: options/preferences.py:737 +#: options/preferences.py msgid "Adjudicator tab displays" msgstr "" -#: options/preferences.py:741 +#: options/preferences.py msgid "Only shows base score" msgstr "" -#: options/preferences.py:742 +#: options/preferences.py msgid "Only shows final score" msgstr "" -#: options/preferences.py:743 +#: options/preferences.py msgid "Shows base, final, and per-round scores" msgstr "" -#: options/preferences.py:750 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." msgstr "" -#: options/preferences.py:751 +#: options/preferences.py msgid "Release ballots to public" msgstr "" -#: options/preferences.py:759 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" msgstr "" -#: options/preferences.py:760 +#: options/preferences.py msgid "Release all round results to public" msgstr "" -#: options/preferences.py:768 +#: options/preferences.py msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." msgstr "" -#: options/preferences.py:769 +#: options/preferences.py msgid "Release ballots through private URLs" msgstr "" -#: options/preferences.py:776 options/templates/preferences_index.html:94 +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" msgstr "" -#: options/preferences.py:782 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" msgstr "" -#: options/preferences.py:783 +#: options/preferences.py msgid "Ballot submissions from adjudicators" msgstr "" -#: options/preferences.py:787 options/preferences.py:801 +#: options/preferences.py msgid "Disabled (tab staff only)" msgstr "" -#: options/preferences.py:788 options/preferences.py:802 +#: options/preferences.py msgid "Use private URLs" msgstr "" -#: options/preferences.py:789 options/preferences.py:803 +#: options/preferences.py msgid "Use publicly accessible form" msgstr "" -#: options/preferences.py:796 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" msgstr "" -#: options/preferences.py:797 +#: options/preferences.py msgid "Feedback submissions from participants" msgstr "" -#: options/preferences.py:810 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" msgstr "" -#: options/preferences.py:811 +#: options/preferences.py msgid "Require password for submission" msgstr "" -#: options/preferences.py:819 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" msgstr "" -#: options/preferences.py:820 +#: options/preferences.py msgid "Password for public submission" msgstr "" -#: options/preferences.py:828 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" msgstr "" -#: options/preferences.py:829 +#: options/preferences.py msgid "Bypass double checking" msgstr "" -#: options/preferences.py:837 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." msgstr "" -#: options/preferences.py:838 +#: options/preferences.py msgid "Enforce blind confirmations" msgstr "" -#: options/preferences.py:846 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." msgstr "" -#: options/preferences.py:849 +#: options/preferences.py msgid "Assistant user access" msgstr "" -#: options/preferences.py:854 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" msgstr "" -#: options/preferences.py:855 +#: options/preferences.py msgid "Just results entry and draw display" msgstr "" -#: options/preferences.py:856 +#: options/preferences.py msgid "Only results entry" msgstr "" -#: options/preferences.py:862 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." msgstr "" -#: options/preferences.py:863 +#: options/preferences.py msgid "Participant self-checkin" msgstr "" -#: options/preferences.py:871 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" msgstr "" -#: options/preferences.py:874 +#: options/preferences.py msgid "Check-In Window (People)" msgstr "" -#: options/preferences.py:880 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" msgstr "" -#: options/preferences.py:883 +#: options/preferences.py msgid "Check-In Window (Rooms)" msgstr "" -#: options/preferences.py:889 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" msgstr "" -#: options/preferences.py:890 +#: options/preferences.py msgid "Ballot Digit Checks" msgstr "" -#: options/preferences.py:898 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:899 +#: options/preferences.py msgid "Score return location" msgstr "" -#: options/preferences.py:907 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:908 +#: options/preferences.py msgid "Feedback return location" msgstr "" -#: options/preferences.py:916 +#: options/preferences.py msgid "Lets debates have their status as postponed, as to not block draw generation." msgstr "" -#: options/preferences.py:917 +#: options/preferences.py msgid "Enable postponements" msgstr "" -#: options/preferences.py:925 +#: options/preferences.py msgid "Have each voting adjudicator submit a separate ballot." msgstr "" -#: options/preferences.py:926 +#: options/preferences.py msgid "Individual voting ballots" msgstr "" -#: options/preferences.py:933 options/templates/preferences_index.html:99 +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" msgstr "" -#: options/preferences.py:939 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" msgstr "" -#: options/preferences.py:940 +#: options/preferences.py msgid "Enable public view of participants list" msgstr "" -#: options/preferences.py:948 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" msgstr "" -#: options/preferences.py:949 +#: options/preferences.py msgid "Enable public view of institutions list" msgstr "" -#: options/preferences.py:957 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" msgstr "" -#: options/preferences.py:958 +#: options/preferences.py msgid "Enable public view of diversity info" msgstr "" -#: options/preferences.py:966 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." msgstr "" -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of the checkin statuses" msgstr "" -#: options/preferences.py:977 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" msgstr "" -#: options/preferences.py:978 +#: options/preferences.py msgid "Show break categories on participants page" msgstr "" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" msgstr "" -#: options/preferences.py:987 +#: options/preferences.py msgid "Show pre-allocated sides to public" msgstr "" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing released draws" msgstr "" -#: options/preferences.py:996 +#: options/preferences.py msgid "Enable public view of draw" msgstr "" -#: options/preferences.py:1000 +#: options/preferences.py msgid "Disabled" msgstr "" -#: options/preferences.py:1001 +#: options/preferences.py msgid "Show a single page for the current round's draw" msgstr "" -#: options/preferences.py:1002 +#: options/preferences.py msgid "Show individual pages for all released draws" msgstr "" -#: options/preferences.py:1009 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" msgstr "" -#: options/preferences.py:1010 +#: options/preferences.py msgid "Enable public view of results" msgstr "" -#: options/preferences.py:1018 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" msgstr "" -#: options/preferences.py:1019 +#: options/preferences.py msgid "Enable public view of motions" msgstr "" -#: options/preferences.py:1027 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" msgstr "" -#: options/preferences.py:1028 +#: options/preferences.py msgid "Enable public view of team standings" msgstr "" -#: options/preferences.py:1036 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" msgstr "" -#: options/preferences.py:1037 +#: options/preferences.py msgid "Enable public record pages" msgstr "" -#: options/preferences.py:1045 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1046 +#: options/preferences.py msgid "Release team breaks to public" msgstr "" -#: options/preferences.py:1054 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1055 +#: options/preferences.py msgid "Release adjudicators break to public" msgstr "" -#: options/preferences.py:1063 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" msgstr "" -#: options/preferences.py:1064 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" msgstr "" -#: options/preferences.py:1072 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." msgstr "" -#: options/preferences.py:1073 +#: options/preferences.py msgid "Tournament staff" msgstr "" -#: options/preferences.py:1083 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" msgstr "" -#: options/preferences.py:1084 +#: options/preferences.py msgid "Welcome message" msgstr "" -#: options/preferences.py:1093 options/templates/preferences_index.html:104 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" msgstr "" -#: options/preferences.py:1099 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" msgstr "" -#: options/preferences.py:1100 +#: options/preferences.py msgid "Show splitting adjudicators" msgstr "" -#: options/preferences.py:1108 +#: options/preferences.py msgid "Whether and how to use code names for teams" msgstr "" -#: options/preferences.py:1109 +#: options/preferences.py msgid "Team code names" msgstr "" -#: options/preferences.py:1114 +#: options/preferences.py msgid "Do not use code names" msgstr "" -#: options/preferences.py:1115 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" msgstr "" -#: options/preferences.py:1116 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" msgstr "" -#: options/preferences.py:1118 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" msgstr "" -#: options/preferences.py:1120 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" msgstr "" -#: options/preferences.py:1126 +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" msgstr "" -#: options/preferences.py:1127 +#: options/preferences.py msgid "Show emoji" msgstr "" -#: options/preferences.py:1135 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" msgstr "" -#: options/preferences.py:1136 +#: options/preferences.py msgid "Show team institutions" msgstr "" -#: options/preferences.py:1144 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" msgstr "" -#: options/preferences.py:1145 +#: options/preferences.py msgid "Show adjudicator institutions" msgstr "" -#: options/preferences.py:1153 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" msgstr "" -#: options/preferences.py:1154 +#: options/preferences.py msgid "Show speakers in draw" msgstr "" -#: options/preferences.py:1161 options/templates/preferences_index.html:109 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" msgstr "Notifiche" -#: options/preferences.py:1167 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Reply-to name" msgstr "" -#: options/preferences.py:1176 +#: options/preferences.py msgid "The email address for handling replies" msgstr "" -#: options/preferences.py:1177 +#: options/preferences.py msgid "Reply-to address" msgstr "" -#: options/preferences.py:1185 +#: options/preferences.py msgid "A secret key to accept email status events" msgstr "" -#: options/preferences.py:1186 +#: options/preferences.py msgid "Email status secret key" msgstr "" -#: options/preferences.py:1196 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "" -#: options/preferences.py:1197 +#: options/preferences.py msgid "Ballot receipts" msgstr "" -#: options/preferences.py:1205 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "" -#: options/preferences.py:1207 +#: options/preferences.py msgid "Ballot receipt subject line" msgstr "" -#: options/preferences.py:1215 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "" -#: options/preferences.py:1216 +#: options/preferences.py msgid "Ballot receipt message" msgstr "" -#: options/preferences.py:1232 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1233 +#: options/preferences.py msgid "Team points subject line" msgstr "" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team points message" msgstr "" -#: options/preferences.py:1250 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1251 +#: options/preferences.py msgid "Adjudicator draw subject line" msgstr "" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1259 +#: options/preferences.py msgid "Adjudicator draw message" msgstr "" -#: options/preferences.py:1268 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." msgstr "" -#: options/preferences.py:1269 +#: options/preferences.py msgid "Team draw subject line" msgstr "" -#: options/preferences.py:1276 options/preferences.py:1294 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1277 options/preferences.py:1295 +#: options/preferences.py msgid "Private URL notification message" msgstr "" -#: options/preferences.py:1286 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1287 +#: options/preferences.py msgid "Private URL notification subject line" msgstr "" -#: options/preferences.py:1308 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1309 +#: options/preferences.py msgid "Motion release notification subject line" msgstr "" -#: options/preferences.py:1316 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1317 +#: options/preferences.py msgid "Motion release notification message" msgstr "" -#: options/preferences.py:1325 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1326 +#: options/preferences.py msgid "Team registration notification subject line" msgstr "" -#: options/preferences.py:1333 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1334 +#: options/preferences.py msgid "Team registration notification message" msgstr "" -#: options/preferences.py:1343 options/templates/preferences_index.html:78 +#: options/preferences.py options/templates/preferences_index.html msgid "Motions" msgstr "" -#: options/preferences.py:1349 +#: options/preferences.py msgid "If checked, ballots require a motion to be entered" msgstr "" -#: options/preferences.py:1350 +#: options/preferences.py msgid "Enable motions" msgstr "" -#: options/preferences.py:1358 +#: options/preferences.py msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" msgstr "" -#: options/preferences.py:1359 +#: options/preferences.py msgid "Ballot Hide Motions" msgstr "" -#: options/preferences.py:1367 +#: options/preferences.py msgid "Enables the motion veto field on ballots, to track veto statistics" msgstr "" -#: options/preferences.py:1368 +#: options/preferences.py msgid "Motion vetoes" msgstr "" -#: options/preferences.py:1376 +#: options/preferences.py msgid "If showing results to public, show which motions were selected in the record" msgstr "" -#: options/preferences.py:1377 +#: options/preferences.py msgid "Show motions in results" msgstr "" -#: options/preferences.py:1385 +#: options/preferences.py msgid "Order in which are listed by round in the public view" msgstr "" -#: options/preferences.py:1386 +#: options/preferences.py msgid "Order to display motions" msgstr "" -#: options/preferences.py:1390 +#: options/preferences.py msgid "Earliest round first" msgstr "" -#: options/preferences.py:1391 +#: options/preferences.py msgid "Latest round first" msgstr "" -#: options/preferences.py:1398 +#: options/preferences.py msgid "Whether motions can be reused from one round to another." msgstr "" -#: options/preferences.py:1399 +#: options/preferences.py msgid "Allow motion reuse" msgstr "" -#: options/preferences.py:1406 options/templates/preferences_index.html:114 +#: options/preferences.py options/templates/preferences_index.html msgid "Global Settings" msgstr "" -#: options/preferences.py:1412 +#: options/preferences.py msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." msgstr "" -#: options/preferences.py:1413 +#: options/preferences.py msgid "Enable API access" msgstr "" -#: options/preferences.py:1421 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1422 +#: options/preferences.py msgid "Assistant account creation key" msgstr "" -#: options/preferences.py:1431 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1433 +#: options/preferences.py msgid "Administrator account creation key" msgstr "" -#: options/presets.py:32 options/presets.py:324 +#: options/presets.py msgid "Public Information Options" msgstr "" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" msgstr "" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" msgstr "" -#: options/presets.py:74 +#: options/presets.py msgid "Australs Rules" msgstr "" -#: options/presets.py:75 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:114 +#: options/presets.py msgid "British Parliamentary Rules" msgstr "" -#: options/presets.py:115 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." msgstr "" -#: options/presets.py:157 +#: options/presets.py msgid "Canadian Parliamentary Rules" msgstr "" -#: options/presets.py:159 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." msgstr "" -#: options/presets.py:182 +#: options/presets.py msgid "Australian Easters Rules" msgstr "" -#: options/presets.py:184 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:202 +#: options/presets.py msgid "2 vs 2 Impromptu" msgstr "" -#: options/presets.py:204 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." msgstr "" -#: options/presets.py:229 +#: options/presets.py msgid "3 vs 3 Prepared" msgstr "" -#: options/presets.py:231 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." msgstr "" -#: options/presets.py:258 +#: options/presets.py msgid "UADC Rules" msgstr "" -#: options/presets.py:260 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:296 +#: options/presets.py msgid "WSDC Rules" msgstr "" -#: options/presets.py:298 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:326 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "" -#: options/presets.py:338 +#: options/presets.py msgid "Tab Release Options" msgstr "" -#: options/presets.py:340 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" msgstr "" -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html msgid "Configuration" msgstr "" -#: options/templates/preferences_index.html:11 +#: options/templates/preferences_index.html #, python-format msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." msgstr "" -#: options/templates/preferences_index.html:24 +#: options/templates/preferences_index.html #, python-format msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." msgstr "" -#: options/templates/preferences_index.html:35 +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." msgstr "" -#: options/templates/preferences_index.html:54 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" msgstr "" -#: options/templates/preferences_index.html:59 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" msgstr "" -#: options/templates/preferences_index.html:64 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" msgstr "" -#: options/templates/preferences_index.html:69 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" msgstr "" -#: options/templates/preferences_index.html:74 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" msgstr "" -#: options/templates/preferences_index.html:79 +#: options/templates/preferences_index.html msgid "How and where are motions used" msgstr "" -#: options/templates/preferences_index.html:90 +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" msgstr "" -#: options/templates/preferences_index.html:95 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" msgstr "" -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" msgstr "" -#: options/templates/preferences_index.html:105 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" msgstr "" -#: options/templates/preferences_index.html:110 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" msgstr "" -#: options/templates/preferences_index.html:115 +#: options/templates/preferences_index.html msgid "Settings which can affect all tournaments on the site" msgstr "" -#: options/templates/preferences_index.html:127 +#: options/templates/preferences_index.html msgid "Manually Set Current Round" msgstr "" -#: options/templates/preferences_index.html:128 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." msgstr "" -#: options/templates/preferences_index.html:132 -msgid "Set Round Weights" +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: options/templates/preferences_index.html:133 +#: options/templates/preferences_index.html msgid "Rounds can be weighted so that certain rounds are worth more team points." msgstr "" -#: options/templates/preferences_index.html:140 +#: options/templates/preferences_index.html msgid "Presets" msgstr "" -#: options/templates/preferences_index.html:141 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." msgstr "" -#: options/templates/preferences_index.html:152 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" msgstr "" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" msgstr "" -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" msgstr "" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" msgstr "" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" msgstr "" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" msgstr "" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" msgstr "" -#: options/views.py:65 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." msgstr "" -#: options/views.py:111 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." msgstr "" diff --git a/tabbycat/participants/locale/it/LC_MESSAGES/django.po b/tabbycat/participants/locale/it/LC_MESSAGES/django.po index 3b0642dc5b5..914a047640d 100644 --- a/tabbycat/participants/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2022-04-17 08:28\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -18,960 +18,947 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 942\n" -#: participants/admin.py:96 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" msgstr "" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." msgstr[0] "" msgstr[1] "" -#: participants/admin.py:152 participants/admin.py:233 -msgid "Delete URL key" +#: participants/admin.py +msgid "Reset emoji" msgstr "" -#: participants/admin.py:160 +#: participants/admin.py #, python-format msgid "%(count)d team had their emoji reset." msgid_plural "%(count)d teams had their emojis reset." msgstr[0] "" msgstr[1] "" -#: participants/admin.py:164 -msgid "Reset emoji" +#: participants/admin.py +msgid "Reset code name" msgstr "" -#: participants/admin.py:170 +#: participants/admin.py #, python-format msgid "%(count)d team had their code name reset." msgid_plural "%(count)d teams had their code names reset." msgstr[0] "" msgstr[1] "" -#: participants/admin.py:174 -msgid "Reset code name" -msgstr "" - -#: participants/admin.py:228 +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." msgstr[0] "" msgstr[1] "" -#: participants/apps.py:7 participants/views.py:41 +#: participants/apps.py participants/views.py msgid "Participants" msgstr "" -#: participants/models.py:21 participants/models.py:37 -#: participants/models.py:66 participants/models.py:96 +#: participants/models.py msgid "name" msgstr "nome" -#: participants/models.py:24 participants/models.py:45 +#: participants/models.py msgid "region" msgstr "" -#: participants/models.py:25 +#: participants/models.py msgid "regions" msgstr "" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:39 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" msgstr "" -#: participants/models.py:41 +#: participants/models.py msgid "code" msgstr "" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:43 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" msgstr "" -#: participants/models.py:55 participants/models.py:155 -#: participants/models.py:353 +#: participants/models.py msgid "institution" msgstr "istituzione" -#: participants/models.py:56 +#: participants/models.py msgid "institutions" msgstr "" -#: participants/models.py:64 participants/models.py:157 -#: participants/models.py:356 +#: participants/models.py msgid "tournament" msgstr "" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:68 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" msgstr "" -#: participants/models.py:70 +#: participants/models.py msgid "slug" msgstr "" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:72 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" msgstr "" -#: participants/models.py:74 +#: participants/models.py msgid "sequence number" msgstr "numero sequenziale" -#: participants/models.py:75 +#: participants/models.py msgid "The order in which the categories are displayed" msgstr "" -#: participants/models.py:77 +#: participants/models.py msgid "limit" msgstr "" -#: participants/models.py:78 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: participants/models.py:80 +#: participants/models.py msgid "public" msgstr "" -#: participants/models.py:81 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" msgstr "" -#: participants/models.py:87 +#: participants/models.py msgid "speaker category" msgstr "" -#: participants/models.py:88 participants/models.py:330 +#: participants/models.py msgid "speaker categories" msgstr "" -#: participants/models.py:98 +#: participants/models.py msgid "email address" msgstr "" -#: participants/models.py:100 +#: participants/models.py msgid "phone" msgstr "" -#: participants/models.py:102 +#: participants/models.py msgid "anonymous" msgstr "" -#: participants/models.py:103 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" msgstr "" -#: participants/models.py:106 +#: participants/models.py +msgid "code name" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py msgid "URL key" msgstr "" -#: participants/models.py:111 +#: participants/models.py msgid "male" msgstr "" -#: participants/models.py:112 +#: participants/models.py msgid "female" msgstr "" -#: participants/models.py:113 +#: participants/models.py msgid "other" msgstr "" -#: participants/models.py:115 +#: participants/models.py msgid "gender" msgstr "" -#: participants/models.py:116 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" msgstr "" -#: participants/models.py:118 +#: participants/models.py msgid "pronoun" msgstr "" -#: participants/models.py:119 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" msgstr "" -#: participants/models.py:122 +#: participants/models.py msgid "person" msgstr "" -#: participants/models.py:123 +#: participants/models.py msgid "persons" msgstr "" -#: participants/models.py:138 +#: participants/models.py msgid "full name/suffix" msgstr "" -#: participants/models.py:139 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:141 +#: participants/models.py msgid "short name/suffix" msgstr "" -#: participants/models.py:142 +#: participants/models.py msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:144 -msgid "code name" -msgstr "" - -#: participants/models.py:145 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" msgstr "" -#: participants/models.py:148 +#: participants/models.py msgid "short name" msgstr "" -#: participants/models.py:149 +#: participants/models.py msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:151 +#: participants/models.py msgid "long name" msgstr "" -#: participants/models.py:152 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:159 +#: participants/models.py msgid "Uses institutional prefix" msgstr "" -#: participants/models.py:160 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" msgstr "" -#: participants/models.py:162 +#: participants/models.py msgid "break categories" msgstr "" -#: participants/models.py:167 participants/models.py:364 +#: participants/models.py msgid "institution conflicts" msgstr "" -#: participants/models.py:178 +#: participants/models.py msgid "none" msgstr "" -#: participants/models.py:179 +#: participants/models.py msgid "swing" msgstr "" -#: participants/models.py:180 +#: participants/models.py msgid "composite" msgstr "" -#: participants/models.py:181 +#: participants/models.py msgid "bye" msgstr "" -#: participants/models.py:184 +#: participants/models.py msgid "type" msgstr "" -#: participants/models.py:188 +#: participants/models.py msgid "emoji" msgstr "" -#: participants/models.py:202 participants/models.py:328 +#: participants/models.py msgid "team" msgstr "squadra" -#: participants/models.py:203 +#: participants/models.py msgid "teams" msgstr "" -#: participants/models.py:311 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." msgstr "" -#: participants/models.py:313 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:315 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:333 +#: participants/models.py msgid "speaker" msgstr "" -#: participants/models.py:334 +#: participants/models.py msgid "speakers" msgstr "" -#: participants/models.py:357 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" msgstr "" -#: participants/models.py:359 +#: participants/models.py msgid "base score" msgstr "punteggio base" -#: participants/models.py:368 +#: participants/models.py msgid "team conflicts" msgstr "" -#: participants/models.py:372 +#: participants/models.py msgid "adjudicator conflicts" msgstr "" -#: participants/models.py:375 +#: participants/models.py msgid "always trainee" msgstr "" -#: participants/models.py:376 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" msgstr "" -#: participants/models.py:378 +#: participants/models.py msgid "breaking" msgstr "" -#: participants/models.py:380 +#: participants/models.py msgid "independent" msgstr "" -#: participants/models.py:382 +#: participants/models.py msgid "adjudication core" msgstr "" -#: participants/models.py:391 +#: participants/models.py msgid "adjudicator" msgstr "giudice" -#: participants/models.py:392 +#: participants/models.py msgid "adjudicators" msgstr "" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" msgstr "" -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" msgstr "" -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" msgstr "" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" msgstr "" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" msgstr "" -#: participants/templates/adjudicator_registration_card.html:27 -#: participants/templates/team_registration_card.html:89 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:31 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" msgstr "" -#: participants/templates/adjudicator_registration_card.html:36 -#: participants/templates/team_registration_card.html:98 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:43 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." msgstr "" -#: participants/templates/adjudicator_registration_card.html:50 -#: participants/templates/team_registration_card.html:109 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:52 -#: participants/templates/team_registration_card.html:111 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr "" -#: participants/templates/adjudicator_registration_card.html:54 -#: participants/templates/adjudicator_registration_card.html:62 -#: participants/templates/adjudicator_registration_card.html:74 -#: participants/templates/adjudicator_registration_card.html:84 -#: participants/templates/team_registration_card.html:58 -#: participants/templates/team_registration_card.html:70 -#: participants/templates/team_registration_card.html:79 -#: participants/templates/team_registration_card.html:113 -#: participants/templates/team_registration_card.html:122 -#: participants/templates/team_registration_card.html:133 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" msgstr "" -#: participants/templates/adjudicator_registration_card.html:58 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:60 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:71 -#: participants/templates/adjudicator_registration_card.html:82 -#: participants/templates/team_registration_card.html:56 -#: participants/templates/team_registration_card.html:68 -#: participants/templates/team_registration_card.html:77 -#: participants/templates/team_registration_card.html:120 -#: participants/templates/team_registration_card.html:131 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr ", " -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/team_registration_card.html:118 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:80 -#: participants/templates/team_registration_card.html:129 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" msgstr "" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:14 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." msgstr "" #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:21 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:33 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:41 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:47 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" msgstr "" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "" -#: participants/templates/current_round/common.html:28 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "" msgstr[1] "" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" msgstr "" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" msgstr "" -#: participants/templates/current_round/common.html:44 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." msgstr "" -#: participants/templates/current_round/common.html:54 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." msgstr "" -#: participants/templates/current_round/common.html:57 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "" -#: participants/templates/current_round/common.html:61 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "" -#: participants/templates/current_round/common.html:69 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." msgstr "" -#: participants/templates/current_round/round_adj.html:14 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:18 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:24 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:28 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:36 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:40 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:46 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:50 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:85 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:89 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:95 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:99 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:107 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:111 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:117 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:121 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:129 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:133 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:139 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:143 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:39 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:43 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:56 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:60 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:66 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:70 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." msgstr "" -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" msgstr "" -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" msgstr "" -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:38 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" msgstr "" -#: participants/templates/feedback_progress_panel.html:46 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:53 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." msgstr "" -#: participants/templates/in_this_round.html:9 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" msgstr "" -#: participants/templates/in_this_round.html:13 +#: participants/templates/in_this_round.html msgid "In This Round" msgstr "" -#: participants/templates/in_this_round.html:16 +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" msgstr "" -#: participants/templates/in_this_round.html:23 +#: participants/templates/in_this_round.html msgid "Room TBA" msgstr "" -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:39 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:54 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." msgstr[0] "" msgstr[1] "" -#: participants/templates/in_this_round.html:60 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." msgstr "" -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:79 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:91 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." msgstr "" -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" msgstr "" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" msgstr "" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." msgstr "" -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" msgstr "" -#: participants/templates/participants_subnav.html:26 participants/views.py:135 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" msgstr "" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" msgstr "" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" msgstr "" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." msgstr "" -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." msgstr "" -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" msgstr "" -#: participants/templates/team_registration_card.html:16 +#: participants/templates/team_registration_card.html msgid "Team name:" msgstr "" -#: participants/templates/team_registration_card.html:21 +#: participants/templates/team_registration_card.html msgid "Full team name:" msgstr "" -#: participants/templates/team_registration_card.html:25 +#: participants/templates/team_registration_card.html msgid "Short team name:" msgstr "" -#: participants/templates/team_registration_card.html:32 +#: participants/templates/team_registration_card.html msgid "Code name:" msgstr "" -#: participants/templates/team_registration_card.html:36 +#: participants/templates/team_registration_card.html msgid "No code name assigned" msgstr "" -#: participants/templates/team_registration_card.html:42 +#: participants/templates/team_registration_card.html msgid "Emoji:" msgstr "" -#: participants/templates/team_registration_card.html:46 +#: participants/templates/team_registration_card.html msgid "No emoji assigned" msgstr "" -#: participants/templates/team_registration_card.html:54 +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "" -#: participants/templates/team_registration_card.html:66 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" msgstr "" -#: participants/templates/team_registration_card.html:75 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" msgstr "" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" msgstr "" -#: participants/views.py:46 +#: participants/views.py msgid "Adjudicators" msgstr "" -#: participants/views.py:55 +#: participants/views.py msgid "Speakers" msgstr "" -#: participants/views.py:86 +#: participants/views.py msgid "Institutions" msgstr "" -#: participants/views.py:102 +#: participants/views.py msgid "Code" msgstr "" -#: participants/views.py:103 +#: participants/views.py msgid "Full name" msgstr "" -#: participants/views.py:105 +#: participants/views.py msgid "Region" msgstr "" -#: participants/views.py:107 +#: participants/views.py msgid "Teams" msgstr "" -#: participants/views.py:107 +#: participants/views.py msgid "Number of teams" msgstr "" -#: participants/views.py:109 +#: participants/views.py msgid "Adjs" msgstr "" -#: participants/views.py:110 +#: participants/views.py msgid "Number of adjudicators, excluding independents" msgstr "" -#: participants/views.py:112 +#: participants/views.py msgid "IAs" msgstr "" -#: participants/views.py:113 +#: participants/views.py msgid "Number of independent adjudicators" msgstr "" -#: participants/views.py:143 +#: participants/views.py msgid "Code name" msgstr "" -#: participants/views.py:163 +#: participants/views.py msgid "Team Registration" msgstr "" -#: participants/views.py:231 +#: participants/views.py msgid "Results" msgstr "" -#: participants/views.py:239 participants/views.py:264 +#: participants/views.py #, python-format msgid "Record for %(name)s" msgstr "" -#: participants/views.py:261 +#: participants/views.py msgid "Previous Rounds" msgstr "" -#: participants/views.py:352 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" msgstr[0] "" msgstr[1] "" -#: participants/views.py:358 +#: participants/views.py msgid "No changes were made to the categories." msgstr "" -#: participants/views.py:371 +#: participants/views.py msgid "Speaker Category Eligibility" msgstr "" diff --git a/tabbycat/printing/locale/it/LC_MESSAGES/django.po b/tabbycat/printing/locale/it/LC_MESSAGES/django.po index 8d8ae32ff95..e5e9c1e9828 100644 --- a/tabbycat/printing/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2022-04-17 08:45\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -18,109 +18,108 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" msgstr "" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" msgstr "" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." msgstr "" -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." msgstr "" -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" msgstr "" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" msgstr "" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" msgstr "" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" msgstr "" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" msgstr "" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" msgstr "" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" msgstr "" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" msgstr "" -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" msgstr "" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "" -#: printing/templates/scoresheet_list.html:47 +#: printing/templates/scoresheet_list.html msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." msgstr "" -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" msgstr "" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." msgstr "" -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" msgstr "" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" msgstr "" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "Team" diff --git a/tabbycat/privateurls/locale/it/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/it/LC_MESSAGES/django.po index 3ce05568940..f4403546e34 100644 --- a/tabbycat/privateurls/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2022-04-18 16:46\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -18,169 +18,162 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" msgstr "Gestione URL privati" -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:145 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" msgstr "URL privati" -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." msgstr "Gli URL privati per i ballot e/o le sottomissioni di feedback dei partecipanti sono riportati di seguito." -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" msgstr "Gli URL privati sono utilizzati per consentire ai partecipanti di inviare ballot e/o feedback online. Dovresti usarli se hai un mezzo per distribuire URL difficili da ricordare ai partecipanti, e sono troppo preoccupati per le possibil frodi nell'utilizzare una pagina accessibile al pubblico dove chiunque può inserire qualsiasi informazione. Gli URL assomiglieranno a questo:" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." -msgstr "Chiunque abbia l'URL può accedere alla relativa pagina di inserimento dati. L'idea è che è difficile indovinare un'altra chiave (la stringa dall'aspetto casuale), in modo da rendere ogni URL accessibile solo al partecipante in questione. Per saperne di più sugli URL privati." +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +msgstr "" -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." msgstr "Ne i form di ballot per partecipanti, i feedback dei partecipanti, né gli auto-checkins dei partecipanti sono configurati per essere da URL privati. Qualsiasi URL generato sarà inutile a meno che tu non configuri queste impostazioni di conseguenza nella pagina di configurazione del torneo." -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." msgstr "Non ci sono URL privati assegnati." -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" msgstr "Genera URL Privati" -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" msgstr "Visualizza URL" -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" msgstr "Stampa Gli URL Dei Team" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" msgstr "Stampa URL dei giudici" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." msgstr "Tutti i partecipanti raggiungibili hanno già ricevuto il loro URL privato." -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" msgstr "Email URL" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." msgstr "Questo pulsante genera solo gli URL privati per i partecipanti che non ne hanno già uno." -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" msgstr "Genera URL" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." msgstr "Tutti i partecipanti hanno già un URL privato." -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" msgstr "URL PrivatI" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" msgstr "per %(name)s" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "L'URL di questa pagina è personalizzato per te, %(name)s. Non condividerlo con nessuno; chiunque abbia questo URL può inviare risultati e/o feedback per i tuoi dibattiti. Salva questa pagina e riaprila dopo ogni dibattito per le azioni disponibili." -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" msgstr "Revoca check-in da %(check_time)s" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" msgstr "Check in" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" msgstr "Hanno effettuato il check-in per te alle %(check_time)s" -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." msgstr "Attualmente non sei registrato." -#: privateurls/templates/public_url_landing.html:62 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Submit Ballot for %(round)s" msgstr "Invia Ballot per %(round)s" -#: privateurls/templates/public_url_landing.html:65 -msgid "There are no current rounds" -msgstr "Attualmente non ci sono round" - -#: privateurls/templates/public_url_landing.html:71 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" msgstr "Invia feedback" -#: privateurls/templates/public_url_landing.html:84 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" msgstr "Registrazione (%(name)s)" -#: privateurls/views.py:63 privateurls/views.py:164 +#: privateurls/views.py msgid "no URL" msgstr "nessun URL" -#: privateurls/views.py:76 +#: privateurls/views.py msgid "URL" msgstr "URL" -#: privateurls/views.py:87 +#: privateurls/views.py msgid "Speakers" msgstr "Speaker" -#: privateurls/views.py:97 +#: privateurls/views.py msgid "Adjudicators" msgstr "GiudicI" -#: privateurls/views.py:119 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." msgstr "Tutti i partecipanti hanno già URL privato. Per eliminarli, utilizzare l'area Modifica database." -#: privateurls/views.py:126 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." msgstr[0] "È stato generato un URL privato per %(nblank_people)d persona." msgstr[1] "Sono stati generato gli URL privati per %(nblank_people)d persone." -#: privateurls/views.py:131 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." msgstr[0] "L'URL privato già esistente per %(nexisting_people)d persona è stato lasciato intatto." msgstr[1] "Gli URL privati già esistente per %(nexisting_people)d persone sono stati lasciati intatti." -#: privateurls/views.py:172 +#: privateurls/views.py msgid "URL Key" msgstr "Chiave URL" -#: privateurls/views.py:181 +#: privateurls/views.py msgid "Debates" msgstr "Dibattiti" diff --git a/tabbycat/results/locale/it/LC_MESSAGES/django.po b/tabbycat/results/locale/it/LC_MESSAGES/django.po index e6330d89720..241217164a2 100644 --- a/tabbycat/results/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2022-04-18 16:46\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:14\n" "Last-Translator: philip_tc\n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -18,1081 +18,1075 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 948\n" -#: results/admin.py:44 +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py #, python-format msgid "Resaved results for %(count)d ballot submission." msgid_plural "Resaved results for %(count)d ballot submissions." msgstr[0] "" msgstr[1] "" -#: results/admin.py:47 -msgid "Resave results" -msgstr "" - -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:158 +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" msgstr "" -#: results/forms.py:39 +#: results/forms.py msgid "Tournament password" msgstr "" -#: results/forms.py:45 +#: results/forms.py msgid "That password isn't correct." msgstr "" -#: results/forms.py:77 +#: results/forms.py msgid "Please enter a whole number." msgstr "" -#: results/forms.py:79 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." msgstr "" -#: results/forms.py:166 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." msgstr "" -#: results/forms.py:173 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." msgstr "" -#: results/forms.py:302 results/forms.py:336 +#: results/forms.py msgid "---------" msgstr "" -#: results/forms.py:304 results/forms.py:306 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" msgstr "" -#: results/forms.py:323 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" msgstr "" -#: results/forms.py:332 results/forms.py:901 +#: results/forms.py #, python-format msgid "%(team)s (%(side)s)" msgstr "" -#: results/forms.py:335 +#: results/forms.py msgid "Winner" msgstr "" -#: results/forms.py:489 +#: results/forms.py msgid "Mark as a duplicate speech" msgstr "" -#: results/forms.py:549 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." msgstr "" -#: results/forms.py:563 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." msgstr[0] "" msgstr[1] "" -#: results/forms.py:580 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." msgstr "" -#: results/forms.py:587 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." msgstr "" -#: results/forms.py:719 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." msgstr "" -#: results/forms.py:724 +#: results/forms.py msgid "The declared winner does not correspond to the team with the highest score." msgstr "" -#: results/forms.py:733 +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" msgstr "" -#: results/forms.py:743 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:846 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:851 +#: results/forms.py #, python-format msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:859 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:921 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." msgstr "" -#: results/forms.py:964 +#: results/forms.py #, python-format msgid "There must be exactly %(n)d team advancing." msgid_plural "There must be exactly %(n)d teams advancing." msgstr[0] "" msgstr[1] "" -#: results/forms.py:1007 +#: results/forms.py msgid "There must be exactly 1 team advancing." msgstr "" -#: results/models.py:33 +#: results/models.py msgid "Tab room" msgstr "" -#: results/models.py:34 +#: results/models.py msgid "Public" msgstr "" -#: results/models.py:38 +#: results/models.py msgid "timestamp" msgstr "" -#: results/models.py:40 +#: results/models.py msgid "version" msgstr "" -#: results/models.py:42 +#: results/models.py msgid "submitter type" msgstr "" -#: results/models.py:44 +#: results/models.py msgid "confirmed" msgstr "" -#: results/models.py:48 +#: results/models.py msgid "from private URL" msgstr "" -#: results/models.py:51 +#: results/models.py msgid "from participant" msgstr "" -#: results/models.py:56 +#: results/models.py msgid "submitter" msgstr "" -#: results/models.py:59 +#: results/models.py msgid "confirmer" msgstr "" -#: results/models.py:61 +#: results/models.py msgid "confirm timestamp" msgstr "" -#: results/models.py:63 +#: results/models.py msgid "IP address" msgstr "" -#: results/models.py:103 +#: results/models.py msgid "A tab room ballot must have a user associated." msgstr "" -#: results/models.py:111 +#: results/models.py msgid "debate" msgstr "dibattito" -#: results/models.py:113 +#: results/models.py msgid "motion" msgstr "mozione" -#: results/models.py:115 +#: results/models.py msgid "discarded" msgstr "" -#: results/models.py:117 +#: results/models.py msgid "single adjudicator" msgstr "" -#: results/models.py:118 +#: results/models.py msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." msgstr "" -#: results/models.py:123 results/models.py:228 results/models.py:267 -#: results/models.py:305 results/models.py:347 +#: results/models.py msgid "ballot submission" msgstr "invio ballot" -#: results/models.py:124 +#: results/models.py msgid "ballot submissions" msgstr "" -#: results/models.py:143 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" msgstr "" -#: results/models.py:150 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" msgstr "" -#: results/models.py:230 results/models.py:269 +#: results/models.py msgid "debate adjudicator" msgstr "giudice del dibattito" -#: results/models.py:232 results/models.py:271 results/models.py:307 -#: results/models.py:349 +#: results/models.py msgid "debate team" msgstr "" -#: results/models.py:235 results/models.py:312 +#: results/models.py msgid "win" msgstr "" -#: results/models.py:237 results/models.py:314 +#: results/models.py msgid "margin" msgstr "" -#: results/models.py:239 results/models.py:272 results/models.py:316 -#: results/models.py:352 +#: results/models.py msgid "score" msgstr "punteggio" -#: results/models.py:244 +#: results/models.py msgid "team score by adjudicator" msgstr "" -#: results/models.py:245 +#: results/models.py msgid "team scores by adjudicator" msgstr "" -#: results/models.py:260 results/models.py:294 +#: results/models.py msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." msgstr "" -#: results/models.py:273 results/models.py:353 +#: results/models.py msgid "position" msgstr "" -#: results/models.py:279 +#: results/models.py msgid "speaker score by adjudicator" msgstr "" -#: results/models.py:280 +#: results/models.py msgid "speaker scores by adjudicator" msgstr "" -#: results/models.py:310 +#: results/models.py msgid "points" msgstr "" -#: results/models.py:318 +#: results/models.py msgid "votes given" msgstr "" -#: results/models.py:320 +#: results/models.py msgid "votes possible" msgstr "" -#: results/models.py:324 +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py msgid "team score" msgstr "" -#: results/models.py:325 +#: results/models.py msgid "team scores" msgstr "" -#: results/models.py:351 +#: results/models.py msgid "speaker" msgstr "" -#: results/models.py:355 +#: results/models.py msgid "ghost" msgstr "" -#: results/models.py:356 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." msgstr "" -#: results/models.py:365 +#: results/models.py msgid "speaker score" msgstr "" -#: results/models.py:366 +#: results/models.py msgid "speaker scores" msgstr "" -#: results/models.py:375 +#: results/models.py msgid "The debate team and speaker must be from the same team." msgstr "" -#: results/models.py:378 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." msgstr "" -#: results/tables.py:15 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" msgstr "" -#: results/tables.py:36 +#: results/tables.py msgid "Status of this debate's ballot" msgstr "" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" msgstr "" -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" msgstr "" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" msgstr "" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" msgstr "" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" msgstr "" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the current round" msgstr "" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" msgstr "" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" msgstr "" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." msgstr "" -#: results/templates/admin_results.html:88 +#: results/templates/admin_results.html #, python-format msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." msgstr[0] "" msgstr[1] "" -#: results/templates/admin_results.html:94 +#: results/templates/admin_results.html #, python-format msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." msgstr "" -#: results/templates/admin_results.html:113 +#: results/templates/admin_results.html msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." msgstr "" -#: results/templates/admin_results.html:127 +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." msgstr "" -#: results/templates/admin_results.html:135 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." msgstr "" -#: results/templates/admin_results.html:144 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/admin_results.html:151 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:12 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" msgstr "" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:17 -#: results/templates/ballot_entry_base.html:21 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" msgstr "" -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." msgstr "" -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html msgid "Confirm results" msgstr "" -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" msgstr "" -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:68 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." msgstr "" -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 results/views.py:513 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" msgstr "" -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "" -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." msgstr "" -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "" -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." msgstr[0] "" msgstr[1] "" -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr[0] "" msgstr[1] "" -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:42 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:45 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" msgstr "" -#: results/templates/ballot/ballot_set.html:6 +#: results/templates/ballot/ballot_set.html msgid "There are some problems with this scoresheet. Please review and correct them." msgstr "" -#: results/templates/ballot/ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s (%(institution)s)" msgstr "" -#: results/templates/ballot/ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s" msgstr "" -#: results/templates/ballot/ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html msgid "Scoresheet" msgstr "" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Solo Chair" msgstr "" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Chair" msgstr "" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Panellist" msgstr "" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Trainee" msgstr "" -#: results/templates/ballot/ballot_set.html:44 +#: results/templates/ballot/ballot_set.html msgid "Assign sides before entering scores" msgstr "" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." msgstr "" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "There is %(number)s existing ballot set for this debate." msgid_plural "There are %(number)s existing ballot sets for this debate." msgstr[0] "" msgstr[1] "" -#: results/templates/ballot/other_ballots_list.html:21 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." msgstr "" -#: results/templates/ballot/other_ballots_list.html:26 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." msgstr "" -#: results/templates/ballot/other_ballots_list.html:41 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:45 +#: results/templates/ballot/other_ballots_list.html msgid "MERGING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:48 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:53 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:58 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from %(adjudicator)s's private URL," msgstr "" -#: results/templates/ballot/other_ballots_list.html:62 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:68 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," msgstr "" -#: results/templates/ballot/other_ballots_list.html:73 +#: results/templates/ballot/other_ballots_list.html msgid "unknown" msgstr "" -#: results/templates/ballot/other_ballots_list.html:74 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "confirmed by %(confirmer)s" msgstr "" -#: results/templates/ballot/other_ballots_list.html:78 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" msgstr "" -#: results/templates/ballot/other_ballots_list.html:82 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" msgstr "" -#: results/templates/ballot/other_ballots_list.html:86 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" msgstr[0] "" msgstr[1] "" -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." msgstr "" -#: results/templates/ballot_entry_base.html:30 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr "" -#: results/templates/ballot_entry_base.html:41 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." msgstr "" -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" msgstr "" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" msgstr "" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" msgstr "" -#: results/templates/debate_postponement_form.html:3 +#: results/templates/debate_postponement_form.html msgid "Postponed" msgstr "" -#: results/templates/debate_postponement_form.html:8 +#: results/templates/debate_postponement_form.html msgid "Postpone" msgstr "" -#: results/templates/enter_results.html:15 +#: results/templates/enter_results.html msgid "Ballot Status" msgstr "" -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" msgstr "" -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" msgstr "" -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" msgstr "" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" msgstr "" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" msgstr "" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "L'URL di questa pagina è personalizzato per te, %(name)s. Non condividerlo con nessuno; chiunque abbia questo URL può inviare risultati e/o feedback per i tuoi dibattiti. Salva questa pagina e riaprila dopo ogni dibattito per le azioni disponibili." -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." msgstr "" -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" msgstr "" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." msgstr "" -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" msgstr "" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" msgstr "Chi sei?" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" msgstr "" -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." msgstr "" -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" msgstr "" -#: results/templates/public_ballot_set.html:28 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" msgstr "" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" msgstr "" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" msgstr "" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" msgstr "" -#: results/templates/public_ballot_set.html:92 -#: results/templates/public_ballot_set.html:96 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:105 -#: results/templates/public_ballot_set.html:109 +#: results/templates/public_ballot_set.html #, python-format msgid "%(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Won" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Lost" msgstr "" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set_error.html #, python-format msgid "Back to the tournament home page." msgstr "" -#: results/templates/public_enter_results.html:9 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" msgstr "" -#: results/templates/public_enter_results.html:16 +#: results/templates/public_enter_results.html msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." msgstr "" -#: results/templates/public_enter_results.html:24 +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." msgstr[0] "" msgstr[1] "" -#: results/templates/public_enter_results.html:63 -msgid "Submit Ballot(s)" -msgstr "" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" +msgstr[1] "" -#: results/templates/public_enter_results.html:65 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "Quando si invia questo modulo il tuo indirizzo IP sarà memorizzato per motivi di logging." -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" msgstr "" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" msgstr "" -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" msgstr "" -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" msgstr "" -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" msgstr "" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" msgstr "" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." msgstr "" -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." msgstr "" -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" msgstr "" -#: results/utils.py:19 +#: results/utils.py msgid "Debate was Postponed" msgstr "" -#: results/utils.py:20 +#: results/utils.py msgid "Ballot is Unconfirmed" msgstr "" -#: results/utils.py:21 +#: results/utils.py msgid "Ballot is Confirmed" msgstr "" #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:36 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" msgstr "" -#: results/utils.py:43 +#: results/utils.py #, python-format msgid "%(team)s (%(side)s) won" msgstr "" #. Translators: The team here is the losing team -#: results/utils.py:45 +#: results/utils.py #, python-format msgid "vs %(team)s (%(side)s)" msgstr "" -#: results/utils.py:47 +#: results/utils.py #, python-format msgid "Advancing: %(advancing_list)s
    " msgstr "" -#: results/utils.py:50 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" msgstr "" -#: results/utils.py:58 +#: results/utils.py #, python-format msgid "1st: %(first_team)s
    " msgstr "" -#: results/utils.py:59 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" "4th: %(fourth_team)s" msgstr "" -#: results/utils.py:74 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" msgstr "" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:134 +#: results/utils.py msgid "PM" msgstr "" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:136 +#: results/utils.py msgid "DPM" msgstr "" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:138 +#: results/utils.py msgid "LO" msgstr "" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:140 +#: results/utils.py msgid "DLO" msgstr "" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:142 +#: results/utils.py msgid "MG" msgstr "" #. Translators: Abbreviation for Government Whip -#: results/utils.py:144 +#: results/utils.py msgid "GW" msgstr "" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:146 +#: results/utils.py msgid "MO" msgstr "" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:148 +#: results/utils.py msgid "OW" msgstr "" -#: results/utils.py:168 +#: results/utils.py msgid "Reply" msgstr "" -#: results/views.py:270 results/views.py:272 +#: results/views.py msgid " vs " msgstr "" -#: results/views.py:273 +#: results/views.py #, python-format msgid "%(matchup)s: %(round)s @ %(room)s" msgstr "" -#: results/views.py:275 +#: results/views.py msgid "N/A" msgstr "N/D" -#: results/views.py:408 +#: results/views.py msgid "New Ballot Set" msgstr "" -#: results/views.py:411 +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." msgstr "" -#: results/views.py:413 results/views.py:480 +#: results/views.py msgid " Email receipts queued to be sent." msgstr "" -#: results/views.py:427 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." msgstr "" -#: results/views.py:433 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." msgstr "" -#: results/views.py:459 +#: results/views.py msgid "Edit Ballot Set" msgstr "" -#: results/views.py:473 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." msgstr "" -#: results/views.py:475 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." msgstr "" -#: results/views.py:477 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." msgstr "" -#: results/views.py:528 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." msgstr "" -#: results/views.py:535 +#: results/views.py msgid "The draw for this round hasn't been released yet." msgstr "" -#: results/views.py:539 +#: results/views.py msgid "The motions for this round haven't been released yet." msgstr "" -#: results/views.py:544 +#: results/views.py msgid "It looks like you don't have a debate this round." msgstr "" -#: results/views.py:546 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." msgstr "" -#: results/views.py:573 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:578 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:689 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." msgstr "" -#: results/views.py:707 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." msgstr "" -#: results/views.py:710 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." msgstr "" -#: results/views.py:714 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." msgstr "" -#: results/views.py:717 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." msgstr "" -#: results/views.py:739 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." msgstr "" -#: results/views.py:805 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" msgstr "" -#: results/views.py:809 +#: results/views.py msgid "Adjudicator" msgstr "Giudice" -#: results/views.py:846 +#: results/views.py msgid "Merge Ballots" msgstr "" -#: results/views.py:877 +#: results/views.py msgid "The speaking order in the ballots is inconsistent, so could not be merged." msgstr "" -#: results/views.py:879 +#: results/views.py msgid "Duplicate speeches are marked inconsistently, so could not be merged." msgstr "" -#: results/views.py:880 +#: results/views.py #, python-format msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." msgstr "" diff --git a/tabbycat/standings/locale/it/LC_MESSAGES/django.po b/tabbycat/standings/locale/it/LC_MESSAGES/django.po index a4e9871bff1..6d22c122ce5 100644 --- a/tabbycat/standings/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-29 23:49-0400\n" -"PO-Revision-Date: 2022-04-18 13:55\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:01\n" "Last-Translator: philip_tc\n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -18,604 +18,595 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 950\n" -#: standings/base.py:297 +#: standings/base.py msgid "The same metric would be added twice:" msgstr "La stessa metrica verrebbe aggiunta due volte:" -#: standings/base.py:298 +#: standings/base.py msgid "The same ranking would be added twice:" msgstr "La stessa classifica verrebbe aggiunta due volte:" -#: standings/base.py:414 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" msgstr "Codice metrico non riconosciuto: \"%(code)s\"" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" msgstr "Tutti" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" msgstr "Qualifiche" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" msgstr "Non %(category)s" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" msgstr "Tutti gli speaker" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" msgstr "IA" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "Arbitri" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" msgstr "Giudici" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" msgstr "Apprendista" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" msgstr "Punteggio medio" -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" msgstr "Punteggio mediano" -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" msgstr "Punteggi quartile superiore" -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" msgstr "Punteggi quartile inferiore" -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" msgstr "Valutazione media delle squadre" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" msgstr "Punteggio medio per gli arbitri" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" msgstr "Punteggio medio per i giudici" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" msgstr "Punteggio medio per gli apprendisti" -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" msgstr "Punteggio medio" -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" msgstr "Punteggio mediano" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" msgstr "Punteggi quartile superiore" -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" msgstr "Punteggi quartile inferiore" -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" msgstr "Media arringa speaker" -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" msgstr "Media %(num)d speaker" -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" msgstr "Punteggio finali medio" -#: standings/speakers.py:50 standings/speakers.py:106 +#: standings/speakers.py msgid "total" msgstr "totale" -#: standings/speakers.py:51 standings/speakers.py:107 +#: standings/speakers.py msgid "Total" msgstr "Totale" -#: standings/speakers.py:58 standings/speakers.py:116 +#: standings/speakers.py msgid "average" msgstr "media" -#: standings/speakers.py:59 standings/speakers.py:117 +#: standings/speakers.py msgid "Avg" msgstr "Med" -#: standings/speakers.py:66 +#: standings/speakers.py msgid "team points" msgstr "punti squadra" -#: standings/speakers.py:67 +#: standings/speakers.py msgid "Team" msgstr "Team" -#: standings/speakers.py:89 standings/speakers.py:126 +#: standings/speakers.py msgid "standard deviation" msgstr "deviazione standard" -#: standings/speakers.py:90 standings/speakers.py:127 +#: standings/speakers.py msgid "Stdev" msgstr "Devstd" -#: standings/speakers.py:98 +#: standings/speakers.py msgid "number of speeches given" msgstr "numero di speech fatti" -#: standings/speakers.py:99 standings/speakers.py:138 +#: standings/speakers.py msgid "Num" msgstr "Num" -#: standings/speakers.py:137 +#: standings/speakers.py msgid "replies given" msgstr "arringhe fatte" -#: standings/speakers.py:147 +#: standings/speakers.py msgid "trimmed mean (high-low drop)" msgstr "media tagliata (senza alto-basso)" -#: standings/speakers.py:148 +#: standings/speakers.py msgid "Trim" msgstr "Tagl" -#: standings/teams.py:62 +#: standings/teams.py msgid "points" msgstr "punti" -#: standings/teams.py:63 +#: standings/teams.py msgid "Pts" msgstr "Pti" -#: standings/teams.py:76 +#: standings/teams.py msgid "wins" msgstr "vittorie" -#: standings/teams.py:77 standings/views.py:592 +#: standings/teams.py standings/views.py msgid "Wins" msgstr "Vittorie" -#: standings/teams.py:87 +#: standings/teams.py msgid "total speaker score" msgstr "punteggio totale speaker" -#: standings/teams.py:88 +#: standings/teams.py msgid "Spk" msgstr "Spk" -#: standings/teams.py:97 +#: standings/teams.py msgid "average total speaker score" msgstr "punteggio totale speaker" -#: standings/teams.py:98 +#: standings/teams.py msgid "ATSS" msgstr "PTS" -#: standings/teams.py:107 +#: standings/teams.py msgid "speaker score standard deviation" msgstr "deviazione standard punteggio speaker" -#: standings/teams.py:108 +#: standings/teams.py msgid "SSD" msgstr "DSS" -#: standings/teams.py:118 +#: standings/teams.py msgid "sum of margins" msgstr "somma dei margini" -#: standings/teams.py:119 +#: standings/teams.py msgid "Marg" msgstr "Marg" -#: standings/teams.py:128 +#: standings/teams.py msgid "average margin" msgstr "margine medio" -#: standings/teams.py:129 +#: standings/teams.py msgid "AWM" msgstr "MM" -#: standings/teams.py:138 +#: standings/teams.py msgid "average individual speaker score" msgstr "punteggio medio individuale speaker" -#: standings/teams.py:139 +#: standings/teams.py msgid "AISS" msgstr "PMIS" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by wins" msgstr "forza del sorteggio per vittorie" -#: standings/teams.py:212 +#: standings/teams.py msgid "DS" msgstr "FS" -#: standings/teams.py:219 +#: standings/teams.py msgid "draw strength by total speaker score" msgstr "forza del sorteggio per punteggio totale speaker" -#: standings/teams.py:220 +#: standings/teams.py msgid "DSS" msgstr "FSS" -#: standings/teams.py:231 +#: standings/teams.py msgid "number of pullups before this round" msgstr "numero di pullup prima di questo round" -#: standings/teams.py:232 +#: standings/teams.py msgid "PU" msgstr "NP" -#: standings/teams.py:254 +#: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "numero di giudici che hanno votato per questa squadra" -#: standings/teams.py:255 +#: standings/teams.py msgid "Ballots" msgstr "Ballot" -#: standings/teams.py:256 +#: standings/teams.py msgid "votes/ballots carried" msgstr "voti/ballot" -#: standings/teams.py:280 +#: standings/teams.py msgid "number of firsts" msgstr "numero di primi" -#: standings/teams.py:281 +#: standings/teams.py msgid "1sts" msgstr "1mi" -#: standings/teams.py:290 +#: standings/teams.py msgid "number of seconds" msgstr "numero di secondi" -#: standings/teams.py:291 +#: standings/teams.py msgid "2nds" msgstr "2di" -#: standings/teams.py:300 +#: standings/teams.py msgid "number of thirds" msgstr "numero di terzi" -#: standings/teams.py:301 +#: standings/teams.py msgid "3rds" msgstr "3zi" -#: standings/teams.py:313 +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py msgid "Who-beat-whom" msgstr "Chi-batte-chi" -#: standings/teams.py:314 +#: standings/teams.py msgid "WBW" msgstr "CBC" -#: standings/teams.py:315 +#: standings/teams.py msgid "who-beat-whom" msgstr "chi-batte-chi" -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." msgstr "Inoltre esclude i risultati dei turni silenziosi (se presenti) e dei turni in corso." -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "Questo elenco è ordinato per punti di squadra, poi alfabeticamente per nome di squadra. Non indica la classifica di ogni squadra all'interno di ogni gruppo. %(silent_round_sentence)s" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "Questo elenco è ordinato per numeri di vittoria, poi alfabeticamente per nome di squadra. Non indica la classifica di ogni squadra all'interno di ogni gruppo. %(silent_round_sentence)s" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." msgstr "Non ci sono round per i quali sono disponibili risultati." -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." msgstr "Le arringhe degli speaker sono classificate in base al loro punteggio medio di risposta." -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." msgstr "Gli speaker possono perdere fino a %(count)s discorsi di arringa prima di essere omessi dalla scheda risposte." -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." msgstr "In questa classifica appaiono tutti gli speaker di arringhe, non importa quante arringhe abbiano perso." -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." msgstr "Queste impostazioni possono essere modificate nella sezione Classifiche della configurazione di questo torneo." -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." msgstr "La classifica dei debater è vuota. Ciò significa che gli speaker non sono classificati in base a nessuna metrica, quindi tutti sono tutti primi a pari merito. Se questo non è quello che volevi, imposta la classifica dei debater nella sezione Configurazione classifiche di questo torneo. Nella maggior parte dei tornei, la prima metrica dovrebbe essere totale o media." -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." msgstr "Gli speaker sono classificati in base al loro punteggio medio." -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." msgstr "Gli speaker sono classificati in base al loro punteggio totale. Ogni oratore che manchi un solo dibattito sarà severamente penalizzato in queste classifiche." -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." msgstr "Gli speaker possono perdere fino a %(count)s dibattiti prima di essere omessi dalla scheda speaker." -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." msgstr "In questa classifica appaiono tutti gli speaker, non importa quanti dibattiti abbiano perso." -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." msgstr "L'applicazione del limite al numero di dibattiti non svolti richiede che il \"numero di speech fatti\" sia incluso nei calcoli della classifica degli oratori, quindi è stato aggiunto automaticamente. Per rimuovere questo messaggio di avviso, aggiungi Numero di discorsi fatti alle metriche extra di classifica speaker nella sezione Configurazione classifiche di questo torneo." -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" msgstr "Panoramica Diversità" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." msgstr "I dati visualizzati qui sono presentati senza analisi di rilevanza statistica. Le correlazioni non devono essere automaticamente considerate affidabili, in particolare in piccoli tornei. Una 'regione' è una categoria personalizzabile assegnata ad un insieme di istituzioni e contata utilizzando il numero di partecipanti assegnati a tali istituzioni." -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" msgstr "Identificatore non maschile" -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" msgstr "Identificato maschile" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" msgstr "Non specificato/non registrato" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" msgstr "Classifiche" -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" msgstr "Punteggi migliori" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" msgstr "%(speaker)s in %(round)s" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:152 -#: standings/templates/standings_index.html:167 -#: standings/templates/standings_index.html:186 +#: standings/templates/standings_index.html msgid "No data yet" msgstr "Ancora nessun dato" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" msgstr "Punteggi più bassi" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" msgstr "Margini maggiori" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" msgstr "%(team)s vs %(opp)s in %(round)s" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" msgstr "Risultati più vicini" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" msgstr "Punteggi squadre migliori" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" msgstr "%(team)s in %(round)s" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" msgstr "Punteggi squadre peggiori" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" msgstr "Mozioni Più/Meno Popolari" -#: standings/templates/standings_index.html:177 +#: standings/templates/standings_index.html msgid "Average Speaks" msgstr "Meddia punti speech" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" msgstr "Panoramica" -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "Squadre" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" msgstr "Tutti" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" msgstr "Speaker" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" msgstr "Sostanziali" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" msgstr "Tutti" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "Speaker " -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" msgstr "Arringhe" -#: standings/templates/standings_menu.html:63 -#: standings/templates/standings_menu.html:76 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "Mozioni" -#: standings/templates/standings_menu.html:66 +#: standings/templates/standings_menu.html msgid "By Round" msgstr "Per Turno" -#: standings/templates/standings_menu.html:81 +#: standings/templates/standings_menu.html msgid "Diversity" msgstr "Diversità" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." msgstr "La classifica delle squadre è vuota. Ciò significa che le squadre non sono classificate in base a nessuna metrica, quindi tutti sono tutti primi a pari merito. Se questo non è quello che volevi, imposta la classifica delle squadre nella sezione Configurazione classifiche di questo torneo. Nella maggior parte dei tornei, la prima metrica dovrebbe essere punti o vittorie." -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " msgstr "

    Si è verificato un errore durante la generazione della classifica: %(message)s

    " -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " msgstr "

    Potrebbe essere necessario ricontrollare la configurazione classifiche nella sezione Impostazioni. Se il problema persiste e non sai come risolverlo, contatta gli sviluppatori.

    " -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " msgstr "

    Il tab master dovrà risolvere questo problema.

    " -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" msgstr "come da %(round)s" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" msgstr "%(title)s (solo %(limit)d in alto)" -#: standings/views.py:208 standings/views.py:428 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." msgstr "La scheda non può essere visualizzata perché tutti gli attuali turni in questo torneo sono silenziosi." -#: standings/views.py:290 +#: standings/views.py msgid "Speaker Standings" msgstr "Classifica speaker" -#: standings/views.py:326 +#: standings/views.py msgid "Speaker Tab" msgstr "Scheda speaker" -#: standings/views.py:341 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" msgstr "%(category)s Classifica speaker" -#: standings/views.py:359 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" msgstr "%(category)s scheda speaker" -#: standings/views.py:372 +#: standings/views.py msgid "Reply Speaker Standings" msgstr "Classifica speaker arringhe" -#: standings/views.py:380 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." msgstr "I discorsi di arringa non sono abilitati in questo torneo." -#: standings/views.py:408 +#: standings/views.py msgid "Reply Speaker Tab" msgstr "Scheda speaker arringa" -#: standings/views.py:420 standings/views.py:669 +#: standings/views.py msgid "Team Standings" msgstr "Classifica squadre" -#: standings/views.py:499 +#: standings/views.py msgid "Team Tab" msgstr "Tab squadre" -#: standings/views.py:518 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" msgstr "%(category)s Classifica squadre" -#: standings/views.py:545 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" msgstr "%(category)s Tab squadra" -#: standings/views.py:556 +#: standings/views.py msgid "Current Team Standings" msgstr "Classifica Squadra Attuale" -#: standings/views.py:592 +#: standings/views.py msgid "Points" msgstr "Punti" -#: standings/views.py:638 +#: standings/views.py msgid "Feedback Overview" msgstr "Panoramica Feedback" -#: standings/views.py:655 -msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." -msgstr "Il punteggio di un giudice è determinato da un mix personalizzabile del punteggio base e delle valutazioni di feedback. L'attuale mix è specificato di seguito come 'componenti del punteggio'. Le valutazioni di feedback sono determinate dalla media dei risultati di tutte le singole parti di feedback in tutti i round. Approfondisci." +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +msgstr "" diff --git a/tabbycat/tournaments/locale/it/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/it/LC_MESSAGES/django.po index fd8866bbb6d..6e95371281a 100644 --- a/tabbycat/tournaments/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2022-04-19 11:00\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -18,1026 +18,1016 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "" -#: tournaments/forms.py:29 +#: tournaments/forms.py msgid "Number of preliminary rounds" msgstr "" -#: tournaments/forms.py:34 +#: tournaments/forms.py msgid "Number of teams in the open break" msgstr "" -#: tournaments/forms.py:35 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." msgstr "" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Did you agree with their decision?" msgstr "" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Agree?" msgstr "" -#: tournaments/forms.py:47 +#: tournaments/forms.py msgid "Comments" msgstr "" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:61 +#: tournaments/forms.py msgid "Open" msgstr "" -#: tournaments/forms.py:86 +#: tournaments/forms.py msgid "Format Configuration" msgstr "" -#: tournaments/forms.py:87 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" msgstr "" -#: tournaments/forms.py:91 +#: tournaments/forms.py msgid "Public Configuration" msgstr "" -#: tournaments/forms.py:92 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" msgstr "" -#: tournaments/forms.py:99 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" msgstr "" -#: tournaments/forms.py:195 +#: tournaments/forms.py msgid "Current preliminary round" msgstr "" -#: tournaments/forms.py:196 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" msgstr "" -#: tournaments/forms.py:208 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" msgstr "" -#: tournaments/forms.py:214 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" msgstr "" -#: tournaments/forms.py:226 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." msgstr "" -#: tournaments/forms.py:232 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." msgstr "" -#: tournaments/forms.py:267 +#: tournaments/forms.py #, python-format msgid "%(name)s (%(abbreviation)s)" msgstr "" -#: tournaments/mixins.py:109 +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." msgstr "" -#: tournaments/mixins.py:117 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." msgstr "" -#: tournaments/mixins.py:130 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." msgstr "" -#: tournaments/mixins.py:137 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." msgstr "" -#: tournaments/mixins.py:236 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" msgstr "" -#: tournaments/mixins.py:437 +#: tournaments/mixins.py msgid "Return to Draw" msgstr "" -#: tournaments/models.py:26 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." msgstr "" -#: tournaments/models.py:33 tournaments/models.py:320 +#: tournaments/models.py msgid "name" msgstr "nome" -#: tournaments/models.py:34 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" msgstr "" -#: tournaments/models.py:36 +#: tournaments/models.py msgid "short name" msgstr "" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" msgstr "" -#: tournaments/models.py:39 tournaments/models.py:314 +#: tournaments/models.py msgid "sequence number" msgstr "numero sequenziale" -#: tournaments/models.py:40 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." msgstr "" -#: tournaments/models.py:42 +#: tournaments/models.py msgid "slug" msgstr "" -#: tournaments/models.py:43 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" msgstr "" -#: tournaments/models.py:44 +#: tournaments/models.py msgid "active" msgstr "" -#: tournaments/models.py:47 tournaments/models.py:313 +#: tournaments/models.py msgid "tournament" msgstr "" -#: tournaments/models.py:48 +#: tournaments/models.py msgid "tournaments" msgstr "" -#: tournaments/models.py:285 +#: tournaments/models.py msgid "Random" msgstr "Casuale" -#: tournaments/models.py:286 +#: tournaments/models.py msgid "Manual" msgstr "" -#: tournaments/models.py:287 +#: tournaments/models.py msgid "Round-robin" msgstr "" -#: tournaments/models.py:288 +#: tournaments/models.py msgid "Power-paired" msgstr "" -#: tournaments/models.py:289 tournaments/models.py:296 +#: tournaments/models.py msgid "Elimination" msgstr "" -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Preliminary" msgstr "" -#: tournaments/models.py:305 +#: tournaments/models.py msgid "None" msgstr "" -#: tournaments/models.py:306 +#: tournaments/models.py msgid "Draft" msgstr "" -#: tournaments/models.py:307 +#: tournaments/models.py msgid "Confirmed" msgstr "" -#: tournaments/models.py:308 +#: tournaments/models.py msgid "Released" msgstr "" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" msgstr "" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "completed" msgstr "" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" msgstr "" -#: tournaments/models.py:320 +#: tournaments/models.py msgid "e.g. \"Round 1\"" msgstr "" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "abbreviation" msgstr "" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "e.g. \"R1\"" msgstr "" -#: tournaments/models.py:323 +#: tournaments/models.py msgid "stage" msgstr "" -#: tournaments/models.py:324 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" msgstr "" -#: tournaments/models.py:326 +#: tournaments/models.py msgid "draw type" msgstr "" -#: tournaments/models.py:327 +#: tournaments/models.py msgid "Which draw method to use" msgstr "" -#: tournaments/models.py:330 +#: tournaments/models.py msgid "break category" msgstr "" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "If elimination round, which break category" msgstr "" -#: tournaments/models.py:334 +#: tournaments/models.py msgid "draw status" msgstr "" -#: tournaments/models.py:335 +#: tournaments/models.py msgid "The status of this round's draw" msgstr "" -#: tournaments/models.py:338 +#: tournaments/models.py msgid "feedback weight" msgstr "" -#: tournaments/models.py:340 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." msgstr "" #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:343 +#: tournaments/models.py msgid "silent" msgstr "" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." msgstr "" -#: tournaments/models.py:346 +#: tournaments/models.py msgid "motions released" msgstr "" -#: tournaments/models.py:347 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" msgstr "" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "starts at" msgstr "" -#: tournaments/models.py:351 +#: tournaments/models.py msgid "weight" msgstr "" -#: tournaments/models.py:352 +#: tournaments/models.py msgid "A factor for the points received in the round. For example, if 2, all points are doubled." msgstr "" -#: tournaments/models.py:355 +#: tournaments/models.py msgid "round" msgstr "" -#: tournaments/models.py:356 +#: tournaments/models.py msgid "rounds" msgstr "" -#: tournaments/models.py:369 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:372 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:377 +#: tournaments/models.py msgid "Elimination rounds must have a break category." msgstr "" -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" msgstr "" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" msgstr "Panoramica" -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" msgstr "" -#: tournaments/templates/blank_site_start.html:7 -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" msgstr "" -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." msgstr "" -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." msgstr "" -#: tournaments/templates/blank_site_start.html:32 +#: tournaments/templates/blank_site_start.html msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." msgstr "" -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" msgstr "" -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" msgstr "" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." msgstr "" -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." msgstr "" -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" msgstr "" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." msgstr "" -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" msgstr "" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." msgstr "" -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" msgstr "" -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" msgstr "" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." msgstr "" -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." msgstr "" -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." msgstr "" -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." msgstr "" -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" msgstr "" -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" +msgid "Teams on %(side)s" msgstr "" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" msgstr "" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." msgstr "" -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." msgstr "" -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" msgstr "%(category)s Tab squadra" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" msgstr "%(category)s scheda speaker" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" msgstr "" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:203 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" msgstr "" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" msgstr "" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" msgstr "" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" msgstr "Classifica squadre" -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" msgstr "" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" msgstr "" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" msgstr "" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" msgstr "" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" msgstr "" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" msgstr "Progresso Feedback" -#: tournaments/templates/public_tournament_index.html:188 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Enter Ballot for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:195 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" msgstr "Inserisci Feedback" -#: tournaments/templates/public_tournament_index.html:217 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" msgstr "" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" msgstr "" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" msgstr "" -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." msgstr "" -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" msgstr "" -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" msgstr "" -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" msgstr "" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" msgstr "" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" msgstr "" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" msgstr "" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." msgstr[0] "" msgstr[1] "" -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" msgstr "" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." msgstr[0] "" msgstr[1] "" -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " msgstr "" -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "" -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" msgstr "" -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" msgstr "" -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "" -#: tournaments/templates/set_round_weights.html:4 -#: tournaments/templates/set_round_weights.html:5 +#: tournaments/templates/set_round_weights.html msgctxt "page title" -msgid "Set Round Weights" +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: tournaments/templates/set_round_weights.html:8 +#: tournaments/templates/set_round_weights.html msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." msgstr "" -#: tournaments/templates/set_round_weights.html:41 +#: tournaments/templates/set_round_weights.html msgctxt "button" msgid "Set weights" msgstr "" -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:47 -msgid "Inactive Tournaments" -msgstr "" - -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/site_index.html msgid "Welcome!" msgstr "" -#: tournaments/templates/site_index.html:21 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" msgstr "" -#: tournaments/templates/site_index.html:30 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:34 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:55 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html msgid "New Tournament" msgstr "" -#: tournaments/templates/site_index.html:58 +#: tournaments/templates/site_index.html msgid "Edit Database Area" msgstr "" -#: tournaments/templates/site_index.html:61 +#: tournaments/templates/site_index.html msgid "Send a Test Email" msgstr "" -#: tournaments/templates/site_index.html:64 +#: tournaments/templates/site_index.html msgid "Import DebateXML" msgstr "" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Get API Token / Change Password (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:77 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:83 +#: tournaments/templates/site_index.html msgid "Log In as Admin" msgstr "" -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." msgstr "" -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" msgstr "" -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." msgstr "" #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." msgstr "" -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." msgstr "" -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" +msgid "Mark participants as available to prepare a draw for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" +msgid "Go to the results area to enter ballots for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:74 +#: tournaments/templates/tournament_index.html msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." msgstr "" -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" msgstr "" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" msgstr "" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" msgstr "" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" msgstr "" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" msgstr "" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" msgstr "" -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" msgstr "" -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" msgstr "" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" msgstr "" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" msgstr "" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" msgstr "" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" msgstr "" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" msgstr "" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" msgstr "" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" msgstr "" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" msgstr "" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" msgstr "" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" msgstr "" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" msgstr "" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" msgstr "" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" msgstr "" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" msgstr "" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" msgstr "" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" msgstr "" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" msgstr "" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" msgstr "" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" msgstr "" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" msgstr "" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" msgstr "" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" msgstr "" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" msgstr "" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" msgstr "" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" msgstr "" -#: tournaments/views.py:151 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" msgstr "" -#: tournaments/views.py:157 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." msgstr "" -#: tournaments/views.py:170 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." msgstr "" -#: tournaments/views.py:176 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." msgstr "" -#: tournaments/views.py:184 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" msgstr "" -#: tournaments/views.py:201 +#: tournaments/views.py msgid "8-team generic dataset" msgstr "" -#: tournaments/views.py:202 +#: tournaments/views.py msgid "24-team Australs dataset" msgstr "" -#: tournaments/views.py:203 +#: tournaments/views.py msgid "88-team BP dataset" msgstr "" -#: tournaments/views.py:288 -msgid "Successfully set round weights." +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." msgstr "" diff --git a/tabbycat/utils/locale/it/LC_MESSAGES/django.po b/tabbycat/utils/locale/it/LC_MESSAGES/django.po index 880d9bdc27e..aacd638c8ed 100644 --- a/tabbycat/utils/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2022-04-18 14:07\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -18,304 +18,311 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "Email address" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "Round" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "Team" + +#: utils/admin.py +msgid "Speaker" +msgstr "Speaker" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "Torneo" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "Lato" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "Mozione" + +#: utils/admin.py +msgid "Confirmed" msgstr "" -#: utils/tables.py:47 +#: utils/admin.py +msgid "Adjudicator" +msgstr "Giudice" + +#: utils/tables.py msgid "No Data Available" msgstr "Nessun Dato Disponibile" -#: utils/tables.py:155 utils/tables.py:156 +#: utils/tables.py msgid "Ⓒ" msgstr "Ⓒ" -#: utils/tables.py:157 +#: utils/tables.py msgid "Ⓣ" msgstr "Ⓣ" -#: utils/tables.py:161 +#: utils/tables.py msgid "chair" msgstr "arbitro" -#: utils/tables.py:162 +#: utils/tables.py msgid "panellist" msgstr "giudice" -#: utils/tables.py:163 +#: utils/tables.py msgid "trainee" msgstr "coach" -#: utils/tables.py:166 +#: utils/tables.py msgid "—" msgstr "" -#: utils/tables.py:167 +#: utils/tables.py msgid "Redacted" msgstr "Redatto" -#: utils/tables.py:231 utils/tables.py:237 +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" msgstr "Visualizza il record %(d)s di %(a)s" -#: utils/tables.py:247 utils/tables.py:252 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" msgstr "Visualizza il record di %(team)s" -#: utils/tables.py:274 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" msgstr "Nome in codice: %(name)s" -#: utils/tables.py:276 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" msgstr "Nome completo: %(name)s" -#: utils/tables.py:296 +#: utils/tables.py #, python-format msgid "%(team)s won" msgstr "%(team)s ha vinto" -#: utils/tables.py:301 +#: utils/tables.py #, python-format msgid "%(team)s lost" msgstr "%(team)s ha perso" -#: utils/tables.py:306 utils/tables.py:318 utils/tables.py:342 +#: utils/tables.py #, python-format msgid "%(team)s—no result" msgstr "%(team)s—nessun risultato" -#: utils/tables.py:323 +#: utils/tables.py #, python-format msgid "%(team)s placed %(place)s" msgstr "%(team)s piazzato %(place)s" -#: utils/tables.py:332 +#: utils/tables.py #, python-format msgid "%(team)s is advancing" msgstr "%(team)s sta avanzando" -#: utils/tables.py:337 +#: utils/tables.py #, python-format msgid "%(team)s was eliminated" msgstr "%(team)s è stato eliminato" -#: utils/tables.py:350 +#: utils/tables.py msgid "View/edit debate ballot" msgstr "Visualizza/modifica la scheda del dibattito" -#: utils/tables.py:356 +#: utils/tables.py msgid "View debate ballot" msgstr "Visualizza la scheda del dibattito" -#: utils/tables.py:369 +#: utils/tables.py #, python-format msgid " vs %(opposition)s" msgstr " vs %(opposition)s" -#: utils/tables.py:376 +#: utils/tables.py #, python-format msgid "Won against %(team)s" msgstr "Ha vinto contro %(team)s" -#: utils/tables.py:378 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" msgstr "Ha perso contro %(team)s" -#: utils/tables.py:380 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" msgstr "Nessun risultato per il dibattito contro %(team)s" -#: utils/tables.py:405 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" msgstr "Punteggio totale speaker: %s" -#: utils/tables.py:412 +#: utils/tables.py msgid "Teams in debate:" msgstr "Squadre in dibattito:" -#: utils/tables.py:415 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "%(team)s (%(side)s)" -#: utils/tables.py:416 utils/tables.py:420 utils/tables.py:446 -#: utils/tables.py:618 +#: utils/tables.py msgid "??" msgstr "??" -#: utils/tables.py:434 +#: utils/tables.py msgid "advancing" msgstr "avanzando" -#: utils/tables.py:435 +#: utils/tables.py msgid "Advancing" msgstr "Avanzando" -#: utils/tables.py:437 +#: utils/tables.py msgid "eliminated" msgstr "eliminato" -#: utils/tables.py:438 +#: utils/tables.py msgid "Eliminated" msgstr "Eliminato" -#: utils/tables.py:441 utils/tables.py:451 +#: utils/tables.py msgid "No result for debate" msgstr "Nessun risultato per il dibattito" -#: utils/tables.py:448 +#: utils/tables.py #, python-format msgid "Placed %(place)s" msgstr "Posizionato %(place)s" -#: utils/tables.py:463 -msgid "Tournament" -msgstr "Torneo" - -#: utils/tables.py:472 -msgid "Round" -msgstr "Round" - -#: utils/tables.py:495 utils/tables.py:672 +#: utils/tables.py msgid "Name" msgstr "Nome" -#: utils/tables.py:501 utils/tables.py:650 +#: utils/tables.py msgid "Institution" msgstr "Istituto" -#: utils/tables.py:507 +#: utils/tables.py msgid "Member of the Adjudication Core" msgstr "Membro del collegio giudici" -#: utils/tables.py:514 +#: utils/tables.py msgid "Independent Adjudicator" msgstr "Giudice indipendente" -#: utils/tables.py:522 +#: utils/tables.py msgid "Always Trainee" msgstr "Sempre tirocinante" -#: utils/tables.py:557 +#: utils/tables.py msgid "in minority" msgstr "in minoranza" -#: utils/tables.py:590 +#: utils/tables.py msgid "Debate Adjudicators" msgstr "Giudici del dibattito" -#: utils/tables.py:621 -msgid "Motion" -msgstr "Mozione" - -#: utils/tables.py:636 -msgid "Team" -msgstr "Team" - -#: utils/tables.py:641 utils/tables.py:694 +#: utils/tables.py msgid "Categories" msgstr "Categorie" -#: utils/tables.py:692 +#: utils/tables.py msgid "Category" msgstr "Categoria" -#: utils/tables.py:719 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." msgstr "Questa stanza %(predicate)s." -#: utils/tables.py:721 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." msgstr "Questa stanza %(predicates)s, e %(last_predicate)s." -#: utils/tables.py:736 +#: utils/tables.py msgid "Room" msgstr "Stanza" -#: utils/tables.py:754 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" msgstr[0] "Le squadre si sono incontrate una volta" msgstr[1] "Le squadre si sono incontrate %(count)d volte" -#: utils/tables.py:760 +#: utils/tables.py msgid "Teams are from the same institution" msgstr "Le squadre provengono dallo stesso istituto" -#: utils/tables.py:766 +#: utils/tables.py msgid "Conflicts/Flags" msgstr "Conflitti/Segnali" -#: utils/tables.py:819 +#: utils/tables.py msgid "The confirmed ballot" msgstr "Il ballot confermatoballo" -#: utils/tables.py:824 utils/tables.py:849 +#: utils/tables.py msgid "No ballot" msgstr "Nessun ballot" -#: utils/tables.py:826 utils/tables.py:851 +#: utils/tables.py msgid "No scores" msgstr "Nessun punteggio" -#: utils/tables.py:829 utils/tables.py:854 utils/tables.py:866 +#: utils/tables.py msgid "View Ballot" msgstr "Mostra ballot" -#: utils/tables.py:836 +#: utils/tables.py msgid "The ballot you submitted" msgstr "Il ballot che hai inviato" -#: utils/tables.py:840 +#: utils/tables.py msgid "View/Edit Ballot" msgstr "Visualizza/Modifica ballot" -#: utils/tables.py:874 +#: utils/tables.py msgid "Result" msgstr "Risultato" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:880 +#: utils/tables.py msgid "TBC" msgstr "DaConf" -#: utils/tables.py:881 -msgid "Side" -msgstr "Lato" - -#: utils/tables.py:919 -msgid "Team iron-manned this round and the last." -msgstr "Squadra con persona iron questo round e l'ultimo." +#: utils/tables.py +msgid "Team iron-personed this round and the last." +msgstr "" -#: utils/tables.py:922 -msgid "Team iron-manned this round." -msgstr "Squadra con persona iron questo round." +#: utils/tables.py +msgid "Team iron-personed this round." +msgstr "" -#: utils/tables.py:925 -msgid "Team iron-manned last round." -msgstr "Squadra con persona iron l'ultimo round." +#: utils/tables.py +msgid "Team iron-personed last round." +msgstr "" -#: utils/tables.py:942 utils/tables.py:943 +#: utils/tables.py #, python-format msgid "Team %(num)d" msgstr "Squadra %(num)d" -#: utils/tables.py:950 +#: utils/tables.py msgid "Postpone" msgstr "Posticipa" -#: utils/views.py:38 +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." msgstr "Ops! Non dovresti digitare quell'URL nel tuo browser." diff --git a/tabbycat/venues/locale/it/LC_MESSAGES/django.po b/tabbycat/venues/locale/it/LC_MESSAGES/django.po index e14c0c5b9a0..aaeda5c4f38 100644 --- a/tabbycat/venues/locale/it/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-05 15:26-0300\n" -"PO-Revision-Date: 2022-04-18 16:46\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" "Last-Translator: philip_tc\n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -18,204 +18,202 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 +#: venues/apps.py msgid "Rooms" msgstr "" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." msgstr "" -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." msgstr "" -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." msgstr "" -#: venues/models.py:9 venues/models.py:66 +#: venues/models.py msgid "name" msgstr "nome" -#: venues/models.py:11 venues/models.py:120 +#: venues/models.py msgid "priority" msgstr "" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" msgstr "" -#: venues/models.py:15 venues/models.py:78 +#: venues/models.py msgid "tournament" msgstr "" -#: venues/models.py:16 +#: venues/models.py msgid "URL" msgstr "URL" -#: venues/models.py:17 +#: venues/models.py msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" msgstr "" -#: venues/models.py:24 +#: venues/models.py msgid "room" msgstr "" -#: venues/models.py:25 venues/models.py:76 +#: venues/models.py msgid "rooms" msgstr "" -#: venues/models.py:61 +#: venues/models.py msgid "Don't display in room name" msgstr "" -#: venues/models.py:62 +#: venues/models.py msgid "Display as prefix" msgstr "" -#: venues/models.py:63 +#: venues/models.py msgid "Display as suffix" msgstr "" -#: venues/models.py:67 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." msgstr "" -#: venues/models.py:71 +#: venues/models.py msgid "description" msgstr "" -#: venues/models.py:72 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." msgstr "" -#: venues/models.py:82 +#: venues/models.py msgid "display in room name" msgstr "" -#: venues/models.py:83 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" msgstr "" -#: venues/models.py:85 +#: venues/models.py msgid "display in public tooltip" msgstr "" -#: venues/models.py:86 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." msgstr "" -#: venues/models.py:90 +#: venues/models.py msgid "room category" msgstr "" -#: venues/models.py:91 +#: venues/models.py msgid "room categories" msgstr "" -#: venues/models.py:119 +#: venues/models.py msgid "category" msgstr "" -#: venues/models.py:123 +#: venues/models.py msgid "subject content type" msgstr "" -#: venues/models.py:126 +#: venues/models.py msgid "subject ID" msgstr "" -#: venues/models.py:132 +#: venues/models.py msgid "room constraint" msgstr "" -#: venues/models.py:133 +#: venues/models.py msgid "room constraints" msgstr "" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" msgstr "" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." msgstr "" -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." msgstr "" -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" msgstr "" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" msgstr "" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." msgstr "" -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" msgstr "" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" msgstr "" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" msgstr "" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" msgstr "" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" msgstr "" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" msgstr "" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" msgstr[0] "" msgstr[1] "" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." msgstr "" -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" msgstr "" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" msgstr "" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." From e339f9fdee53addbde9df8ac592c90be1204d2f2 Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Sun, 5 Feb 2023 11:56:26 +1100 Subject: [PATCH 214/255] New translations django.po (Japanese) --- .../features/adjudicator-feedback.po | 4 +- .../actionlog/locale/ja/LC_MESSAGES/django.po | 156 ++-- .../locale/ja/LC_MESSAGES/django.po | 207 +++-- .../locale/ja/LC_MESSAGES/django.po | 466 +++++----- .../locale/ja/LC_MESSAGES/django.po | 164 ++-- .../breakqual/locale/ja/LC_MESSAGES/django.po | 249 +++--- tabbycat/draw/locale/ja/LC_MESSAGES/django.po | 620 +++++++------ .../importer/locale/ja/LC_MESSAGES/django.po | 223 +++-- tabbycat/locale/ja/LC_MESSAGES/django.po | 476 +++++----- .../motions/locale/ja/LC_MESSAGES/django.po | 190 ++-- .../locale/ja/LC_MESSAGES/django.po | 198 +++-- .../options/locale/ja/LC_MESSAGES/django.po | 813 +++++++++--------- .../locale/ja/LC_MESSAGES/django.po | 493 ++++++----- .../printing/locale/ja/LC_MESSAGES/django.po | 59 +- .../locale/ja/LC_MESSAGES/django.po | 85 +- .../results/locale/ja/LC_MESSAGES/django.po | 553 ++++++------ .../standings/locale/ja/LC_MESSAGES/django.po | 313 ++++--- .../locale/ja/LC_MESSAGES/django.po | 508 ++++++----- .../utils/locale/ja/LC_MESSAGES/django.po | 191 ++-- .../venues/locale/ja/LC_MESSAGES/django.po | 100 ++- 20 files changed, 2995 insertions(+), 3073 deletions(-) diff --git a/docs/locale/ja/LC_MESSAGES/features/adjudicator-feedback.po b/docs/locale/ja/LC_MESSAGES/features/adjudicator-feedback.po index 372ab688874..affbd17ade2 100644 --- a/docs/locale/ja/LC_MESSAGES/features/adjudicator-feedback.po +++ b/docs/locale/ja/LC_MESSAGES/features/adjudicator-feedback.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-07-05 17:25\n" +"PO-Revision-Date: 2023-03-23 07:48\n" "Last-Translator: \n" "Language-Team: Japanese\n" "MIME-Version: 1.0\n" @@ -20,7 +20,7 @@ msgstr "" #: ../../features/adjudicator-feedback.rst:5 msgid "Adjudicator Feedback" -msgstr "" +msgstr "ジャッジのフィードバック" #: ../../features/adjudicator-feedback.rst:7 msgid "You can set the questions that are used on adjudicator feedback forms. The only field that is permanently there is the ``score`` field, which is an overall score assessing the adjudicator. All other questions (including a generic comments section) must be defined if you want them to be on the form." diff --git a/tabbycat/actionlog/locale/ja/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/ja/LC_MESSAGES/django.po index b57615b8b4a..fd2f9d111ee 100644 --- a/tabbycat/actionlog/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:08\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -17,307 +17,307 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" msgstr "動作履歴" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" msgstr "破棄されたバロット一覧" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" msgstr "確定済みバロット一覧" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" msgstr "生成済みバロット一覧" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" msgstr "編集済みバロット一覧" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" msgstr "確定済みバロット一覧" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" msgstr "パブリックフォームから提出されたバロット一覧" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" msgstr "パブリックフォームから提出されたフィードバック一覧
    " -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" msgstr "保存済みフィードバック" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" msgstr "編集済みのジャッジの基礎スコア" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" msgstr "ジャッジについてNoteを設定" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" msgstr "保存済みジャッジアロケーション" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" msgstr "自動配置済みジャッジ" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" msgstr "会場のマニュアル編集を保存しました" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" msgstr "自動配置済みのラウンド部屋" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" msgstr "編集済みのラウンド部屋カテゴリー" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" msgstr "会場の各種制約を編集しました" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" msgstr "作成済み対戦表
    " -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" msgstr "確定済み対戦表" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" msgstr "再生成されたドロー" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" msgstr "公開済み対戦表" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" msgstr "未公開の対戦表" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" msgstr "マッチアップのマニュアル編集を保存しました" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" msgstr "マッチアップのサイドを保存しました" -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "" -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" msgstr "追加済み/編集済みの論題" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" msgstr "公開済みの論題" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" msgstr "未公開の論題" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" msgstr "ディベートの重要度に自動で優先順を設定する" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" msgstr "ディベートの重要度を編集する" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" msgstr "ジャッジのブレイク状況を変更" -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" msgstr "ブレイク資格を編集" -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" msgstr "編集済ブレイクカテゴリー" -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" msgstr "作成済みの全カテゴリーにおけるチームブレイク" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" msgstr "ブレイクチームの情報を編集し、全てのチームブレイクを更新しました" -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" msgstr "ブレイクチームの情報を編集し、このチームブレイクを更新しました" -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" msgstr "ブレイクチームの情報を編集しました" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" msgstr "試合開始時刻の設定" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" msgstr "現在のラウンドへ進む
    " -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" msgstr "ラウンドを完了したとして記録しました" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" msgstr "チームの有効/非有効を編集" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" msgstr "ジャッジの有効/非有効を編集" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" msgstr "会場の有効/非有効を編集" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" msgstr "保存済みの大会各種設定" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" msgstr "スピーカーカテゴリーのブレイク資格を編集" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" msgstr "編集済みスピーカーカテゴリー" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" msgstr "簡易入力機能を用いて大学・機関の情報をインポートしました" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" msgstr "簡易入力機能を用いて会場情報をインポートしました" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" msgstr "簡易入力機能を用いてチーム情報をインポートしました" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" msgstr "簡易入力機能を用いてジャッジ情報の情報をインポートしました" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" msgstr "ジャッジスコアを一括で更新しました" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" msgstr "ジャッジ・チーム間コンフリクトを修正する" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" msgstr "ジャッジ間コンフリクトを修正する" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" msgstr "ジャッジ・大学間のコンフリクト" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" msgstr "チーム・インスティチューション間のコンフリクトを編集" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" msgstr "スピーカーの識別コードの照合を生成" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" msgstr "ジャッジの識別コードの照合を生成" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" msgstr "会場の識別コードの照合を生成" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" msgstr "パネルを事前生成しました" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" msgstr "事前作成されたパネルに優先度を自動設定しました" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" msgstr "事前作成されたパネルの重要度を編集しました" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" msgstr "事前作成されたパネルにジャッジを自動配置しました" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" msgstr "事前作成されたパネルジャッジを編集しました" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" msgstr "事前作成されたパネルをディベートに自動配置しました" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" msgstr "タイプ" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" msgstr "タイムスタンプ" -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "ユーザー" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "IPアドレス" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "トーナメント" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "ラウンド" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" msgstr "コンテンツタイプ" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" msgstr "オブジェクトID" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" msgstr "動作履歴" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" msgstr "アクションログ エントリー" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." msgstr "全てのログエントリーには、最低でもユーザーとIPアドレスの少なくとも1つが必要です。" -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" msgstr "匿名" diff --git a/tabbycat/adjallocation/locale/ja/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/ja/LC_MESSAGES/django.po index d8f8c19c693..8cd618fbda9 100644 --- a/tabbycat/adjallocation/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-10-23 08:08\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-07-02 13:44\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -17,425 +17,424 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." -msgstr "使えるジャッジがいません。このラウンドの自動配置をする前に配配置可能なジャッジがいることを確認してください!" +msgstr "ジャッジ可能な人がいません。自動アロケーションをする前に、ジャッジ可能とマークされている人がいることを確認してください。" -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." msgstr[0] "%(count)sスコアがジャッジにつけられる最高点を超えています(%(score).1f)" -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." msgstr[0] "%(count)sスコアがジャッジにつけられる最低点を超えています(%(score).1f)" -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." msgstr "チェア又はパネルに割り当てられるジャッジがいません。\n" "設定から「チェア又はパネルに配置するのに必要なスコアの最低値」を引き下げ、現在のジャッジのスコアより最低限下回るように変更してから、もう一度お試しください。" -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" -msgstr "このラウンドにはディベーターがいません。ひょっとしたら、対戦表をまだ作っていないかもしれません!" +msgstr "このラウンドにはディベーターがいません。まだ対戦表を作っていませんか?" -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." -msgstr "ディベート部屋が %(debate_count)s つありますが、 %(adj_count)s 人のジャッジしか投票できません。" +msgstr "%(debate_count)s 試合ありますが、 投票可能なジャッジが%(adj_count)s人しかいません。" -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." msgstr "%(panel_debates)s つのパネル部屋がありますが、 %(panellists)s 人のパネル( %(needed)s 以下)しかいません。" -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." msgstr "%(debates_count)s 人のディベーターがいますが、%(voting_count)s 人のジャッジしか投票できません。" -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" msgstr "ジャッジ配置" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." msgstr "対戦表が既に公開されてしまっています。ジャッジの自動配置を再度行う場合は一度対戦表を非公開に戻してください。" -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." msgstr "対戦表が確定されていません。ジャッジの自動配置を行うために対戦表を確定させてください。" -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." msgstr "配置できるジャッジが用意されていません。" -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." msgstr "事前に用意されたパネルジャッジをディベートに自動で配置することに成功しました。" -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" msgstr[0] "ディベートにジャッジを自動で割り当てることに成功しました。以下の警告があります( %(count)d 個)。" -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." msgstr "ジャッジを自動で配置することに成功しました。" -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." msgstr "パネルがいません。まずパネルを作成してください。" -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" msgstr[0] "事前設定したパネルににジャッジを自動で割り当てることに成功しました。以下の警告があります( %(count)d 個)。" -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." msgstr "ジャッジを自動で事前に用意されたパネルの枠に配置することに成功しました。" -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." msgstr "「一般」として設定されたブレイクカテゴリーがないため、ディベートの重要度を計算できません。" -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." msgstr "ディベートの優先度の自動設定に成功しました。" -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." msgstr "「一般」として設定されたブレイクカテゴリーがないため、パネルの重要度を計算できません。" -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." msgstr "用意されたパネル枠の優先度の自動設定に成功しました。" -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." msgstr "これが初戦のため、用意されたパネル枠には勝ち点や生存度で注釈をつけることができません。" -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." msgstr "1つ前の試合は対戦表がまだないため、用意されたパネル枠には勝ち点や生存度で注釈をつけることができません。" -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." msgstr "このラウンドに新しくパネル枠を作ることに成功しました。" -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" msgstr "チェア" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" msgstr "パネル" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" msgstr "トレイニー" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "ディベート" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "ジャッジ" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" msgstr "タイプ" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" msgstr "有効ですか?" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" msgstr "ディベートのジャッジ" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" msgstr "ディベートのジャッジ" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "チーム" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" msgstr "ジャッジ・チーム間コンフリクト" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" msgstr "ジャッジ・チーム間コンフリクト" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "ジャッジ1" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "ジャッジ2" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" msgstr "ジャッジ間コンフリクト" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" msgstr "ジャッジ間コンフリクト" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" msgstr "インスティチューション" -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" msgstr "ジャッジ・インスティチューション間のコンフリクト" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" msgstr "ジャッジ・インスティチューション間のコンフリクト" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" msgstr "チーム・大学(または団体)間のコンフリクト" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" msgstr "チーム・大学(または団体)間のコンフリクト" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "ラウンド" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" msgstr "重要度" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" msgstr "勝ち点が同数のグループの最低数" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" msgstr "このパネルが割り当てられると想定されるブラケットの最低値" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" msgstr "勝ち点が同数のグループの最大数" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" msgstr "このパネルが割り当てられると想定されるブラケットの最高値" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" msgstr "部屋の順位" -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" msgstr "どのアルゴリズムでも使用されていないパネルの通し番号" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" msgstr "生存度" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" msgstr "この部屋で生存が予想されるカテゴリー数" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" msgstr "事前設定されたパネル" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" msgstr "事前設定されたパネル" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" -msgstr "パネルジャッジ" +msgstr "パネル" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" msgstr "事前設定されたパネルジャッジ" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" msgstr "事前設定されたパネルジャッジ" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." msgstr "使用できる事前設定されたパネルはいません。このラウンドに事前設定したパネルを配置済みですか?もし配置が済んでいなければ、代わりにジャッジの自動配置をお試しください。" -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" msgstr "事前設定されたパネル" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." msgstr "「事前設定されたパネル」はドロー生成前にラウンドに割り当てられたジャッジグループと定義されています。これらのパネルは通常のジャッジアロケーション作業の間に、自動もしくは手動で適用できます。より早くアロケーションを行うことができ、または配慮の行き届いたパネル配置を実現できます。" -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." msgstr "「参加可能」と表示されているジャッジのみがそのラウンドに割り当てられているか確認してください。 事前にジャッジの参加可否を設定する必要がある場合があります。" -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" msgstr "%(round)sの事前設定されたパネルを編集する" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" msgstr "コンフリクト:%(adjudicator)s%(team)s間(個人)" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" msgstr "コンフリクト:%(adjudicator)s%(team)s%(institution)s・大学/団体)" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" msgstr "コンフリクト:%(adjudicator1)s%(adjudicator2)s(個人)" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" msgstr "コンフリクト:%(adjudicator1)s%(adjudicator2)s%(institution)s・大学/団体)" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "男性" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" msgstr "女性" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "その他" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" msgstr "不明" -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" msgstr "アロケーションを編集する" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" msgstr "パネルを編集する" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" msgstr "パネルの概要に戻る" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" msgstr "ジャッジ・チーム間コンフリクト" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" msgstr "ジャッジ・チーム間のコンフリクトを保存する" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." msgstr[0] "%(count)d件のジャッジ・チーム間コンフリクトが保存されました。" -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." msgstr[0] "%(count)d件のジャッジ・チーム間コンフリクトが削除されました。" -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." msgstr "ジャッジ・チーム間のコンフリクトに変更された点はありません。" -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" msgstr "ジャッジ間コンフリクト" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" msgstr "ジャッジ間コンフリクトを保存する" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." msgstr[0] "%(count)d件のジャッジ間コンフリクトを保存されました。" -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." msgstr[0] "%(count)d件のジャッジ間コンフリクトを削除されました。" -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." msgstr "ジャッジ間コンフリクトに変更された点はありません。" -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" msgstr "ジャッジ・インスティチューション間のコンフリクト" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" msgstr "ジャッジ・インスティチューション間のコンフリクトを保存する" -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." msgstr[0] "%(count)d件のジャッジ・インスティチューション間のコンフリクトが保存されました。" -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." msgstr[0] "%(count)d件のジャッジ・インスティチューション間のコンフリクトが削除されました。" -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." msgstr "ジャッジ・インスティチューション間のコンフリクトに変更された点はありません。" -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" msgstr "チーム・大学(または団体)間のコンフリクト" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" msgstr "チーム・大学(または団体)間のコンフリクトを保存する" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." msgstr[0] "%(count)d個のチーム・大学(または団体)間のコンフリクトを保存しました。" -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." msgstr[0] "%(count)d個のチーム・大学(または団体)間のコンフリクトを削除しました。" -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." msgstr "チーム・大学(または団体)間のコンフリクトに変更はありません。" diff --git a/tabbycat/adjfeedback/locale/ja/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/ja/LC_MESSAGES/django.po index a8324aa3d1d..feaf8943a30 100644 --- a/tabbycat/adjfeedback/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-08-26 06:06\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-06-21 14:26\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -17,936 +17,932 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:44 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" msgstr "整数の範囲には最大値と最小値を設定する必要があります。" -#: adjfeedback/admin.py:73 adjfeedback/admin.py:139 +#: adjfeedback/admin.py msgid "target" msgstr "対象" -#: adjfeedback/admin.py:74 adjfeedback/admin.py:140 adjfeedback/models.py:236 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" msgstr "ディベートのジャッジ" -#: adjfeedback/admin.py:75 adjfeedback/admin.py:141 adjfeedback/models.py:238 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" msgstr "ディベートのチーム" -#: adjfeedback/admin.py:91 -#, python-format -msgid "%(timestamp)s (version %(version)s)" -msgstr "%(timestamp)s ( %(version)s 版)" - -#: adjfeedback/admin.py:96 +#: adjfeedback/admin.py msgid "Target" msgstr "対象" -#: adjfeedback/admin.py:97 adjfeedback/admin.py:162 +#: adjfeedback/admin.py msgid "Source" msgstr "ソース" -#: adjfeedback/admin.py:98 +#: adjfeedback/admin.py msgid "Feedback timestamp and version" msgstr "フィードバックのタイムスタンプとバージョン" -#: adjfeedback/admin.py:180 +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "%(timestamp)s ( %(version)s 版)" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgstr[0] "%(count)d 個のフィードバック提出が確認済みです。これにより、他に提出されたフィードバックが未確認の状態となっている可能性があります。" -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." msgstr[0] "他に提出されたフィードバックが確認済みとなったことによる競合のため、 %(count)d 個の提出されたフィードバックが未確認の状態です。" -#: adjfeedback/admin.py:205 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." -msgstr[0] "" +msgstr[0] "%(count)d フィードバックの提出が確認されていません。" -#: adjfeedback/admin.py:215 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." -msgstr[0] "" +msgstr[0] "%(count)d フィードバックの提出が無視されます。" -#: adjfeedback/admin.py:225 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." -msgstr[0] "" +msgstr[0] "%(count)d フィードバックの提出が確認されました。" -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" -msgstr "" +msgstr "ジャッジのフィードバック" -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "chair" msgstr "チェア" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "solo" msgstr "ソロ" -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "panellist" msgstr "パネル" -#: adjfeedback/forms.py:29 +#: adjfeedback/forms.py msgid "trainee" msgstr "トレイニー" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:57 +#: adjfeedback/forms.py msgid "Yes" msgstr "はい" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:59 +#: adjfeedback/forms.py msgid "No" msgstr "いいえ" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:74 adjfeedback/forms.py:83 +#: adjfeedback/forms.py msgid "This field is required." msgstr "必須" -#: adjfeedback/forms.py:164 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" -msgstr "" +msgstr "総合スコア (%(min)d=worst; %(max)d=best) *" -#: adjfeedback/forms.py:176 +#: adjfeedback/forms.py msgid "Ignored" msgstr "反映されていません" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:228 adjfeedback/forms.py:291 +#: adjfeedback/forms.py msgid "Submitted - " msgstr "提出済み " #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:229 adjfeedback/forms.py:296 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" -msgstr "" +msgstr "%(name)s(%(adjpos)s)" -#: adjfeedback/forms.py:252 adjfeedback/forms.py:326 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "-- ジャッジ -- " -#: adjfeedback/forms.py:269 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" -msgstr "" +msgstr "評価者について" -#: adjfeedback/forms.py:293 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "" -#: adjfeedback/forms.py:299 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" -msgstr "" +msgstr "%(name)s (フィードバックを行った人)" -#: adjfeedback/forms.py:301 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" msgstr "" -#: adjfeedback/forms.py:392 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" msgstr "" -#: adjfeedback/forms.py:397 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" msgstr "" -#: adjfeedback/forms.py:410 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." msgstr "" -#: adjfeedback/forms.py:416 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" msgstr "" -#: adjfeedback/forms.py:424 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" msgstr "" -#: adjfeedback/forms.py:439 +#: adjfeedback/forms.py msgid "There were no scores to import." msgstr "" -#: adjfeedback/models.py:13 adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator" msgstr "ジャッジ" -#: adjfeedback/models.py:16 +#: adjfeedback/models.py msgid "round" msgstr "ラウンド" -#: adjfeedback/models.py:17 adjfeedback/models.py:232 +#: adjfeedback/models.py msgid "score" msgstr "スコア" -#: adjfeedback/models.py:18 +#: adjfeedback/models.py msgid "timestamp" msgstr "タイムスタンプ" -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score history" msgstr "" -#: adjfeedback/models.py:22 +#: adjfeedback/models.py msgid "adjudicator base score histories" msgstr "" -#: adjfeedback/models.py:30 +#: adjfeedback/models.py msgid "question" msgstr "質問" -#: adjfeedback/models.py:32 +#: adjfeedback/models.py msgid "feedback" msgstr "フィードバック" -#: adjfeedback/models.py:45 adjfeedback/models.py:55 adjfeedback/models.py:65 -#: adjfeedback/models.py:74 +#: adjfeedback/models.py msgid "answer" msgstr "回答" -#: adjfeedback/models.py:48 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" msgstr "" -#: adjfeedback/models.py:49 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" msgstr "" -#: adjfeedback/models.py:58 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" msgstr "" -#: adjfeedback/models.py:59 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" msgstr "" -#: adjfeedback/models.py:68 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" msgstr "" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" msgstr "" -#: adjfeedback/models.py:77 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" msgstr "" -#: adjfeedback/models.py:78 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" msgstr "" -#: adjfeedback/models.py:86 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answer" msgstr "" -#: adjfeedback/models.py:87 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answers" msgstr "" -#: adjfeedback/models.py:106 +#: adjfeedback/models.py msgid "checkbox" msgstr "チェック欄" -#: adjfeedback/models.py:107 +#: adjfeedback/models.py msgid "yes/no (dropdown)" msgstr "はい/いいえ(ドロップダウン)" -#: adjfeedback/models.py:108 +#: adjfeedback/models.py msgid "integer (textbox)" msgstr "" -#: adjfeedback/models.py:109 +#: adjfeedback/models.py msgid "integer scale" msgstr "" -#: adjfeedback/models.py:110 +#: adjfeedback/models.py msgid "float" msgstr "" -#: adjfeedback/models.py:111 adjfeedback/models.py:145 +#: adjfeedback/models.py msgid "text" msgstr "文章" -#: adjfeedback/models.py:112 +#: adjfeedback/models.py msgid "long text" msgstr "長い文章" -#: adjfeedback/models.py:113 +#: adjfeedback/models.py msgid "select one" msgstr "一つ選んでください" -#: adjfeedback/models.py:114 +#: adjfeedback/models.py msgid "select multiple" msgstr "複数選択" -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "tournament" msgstr "大会" -#: adjfeedback/models.py:143 +#: adjfeedback/models.py msgid "sequence number" msgstr "" -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" msgstr "" -#: adjfeedback/models.py:148 +#: adjfeedback/models.py msgid "name" msgstr "" -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" msgstr "" -#: adjfeedback/models.py:151 +#: adjfeedback/models.py msgid "reference" msgstr "" -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" msgstr "" -#: adjfeedback/models.py:155 +#: adjfeedback/models.py msgid "from adjudicator" msgstr "" -#: adjfeedback/models.py:156 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" msgstr "" -#: adjfeedback/models.py:158 +#: adjfeedback/models.py msgid "from team" msgstr "" -#: adjfeedback/models.py:159 +#: adjfeedback/models.py msgid "Teams should be asked this question" msgstr "" -#: adjfeedback/models.py:162 +#: adjfeedback/models.py msgid "answer type" msgstr "" -#: adjfeedback/models.py:164 +#: adjfeedback/models.py msgid "required" msgstr "" -#: adjfeedback/models.py:165 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" msgstr "" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "minimum value" msgstr "" -#: adjfeedback/models.py:168 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "" -#: adjfeedback/models.py:170 +#: adjfeedback/models.py msgid "maximum value" msgstr "点数の上限" -#: adjfeedback/models.py:171 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "" -#: adjfeedback/models.py:176 +#: adjfeedback/models.py msgid "choices" msgstr "" -#: adjfeedback/models.py:177 +#: adjfeedback/models.py msgid "Permissible choices for select one/multiple fields (ignored for other fields)" msgstr "" -#: adjfeedback/models.py:182 +#: adjfeedback/models.py msgid "adjudicator feedback question" msgstr "" -#: adjfeedback/models.py:183 +#: adjfeedback/models.py msgid "adjudicator feedback questions" msgstr "" -#: adjfeedback/models.py:241 adjfeedback/views.py:768 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" msgstr "" -#: adjfeedback/models.py:242 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" msgstr "" -#: adjfeedback/models.py:246 +#: adjfeedback/models.py msgid "adjudicator feedback" msgstr "" -#: adjfeedback/models.py:247 +#: adjfeedback/models.py msgid "adjudicator feedbacks" msgstr "" -#: adjfeedback/models.py:307 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." msgstr "" -#: adjfeedback/models.py:310 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." msgstr "" -#: adjfeedback/models.py:312 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" msgstr "" -#: adjfeedback/models.py:314 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." msgstr "" -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" msgstr "" -#: adjfeedback/tables.py:35 +#: adjfeedback/tables.py msgid "N/A" msgstr "" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py msgid "Current weighted score" msgstr "" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." msgstr "" -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" msgstr "" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" msgstr "" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" msgstr "" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:84 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:93 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." msgstr "" -#: adjfeedback/tables.py:97 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" msgstr "" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Feedback Per Round" msgstr "" -#: adjfeedback/tables.py:107 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" msgstr "" -#: adjfeedback/tables.py:125 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" msgstr[0] "" -#: adjfeedback/tables.py:148 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" msgstr "" -#: adjfeedback/tables.py:172 +#: adjfeedback/tables.py msgid "View Missing Feedback" msgstr "" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" msgstr "" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" msgstr "フィードバックを入力する" -#: adjfeedback/templates/enter_feedback.html:9 -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format msgid "Add Feedback from %(name)s" msgstr "%(name)sからのフィードバックを入力する" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" msgstr "フィードバックを追加する" -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" msgstr "" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." msgstr "" -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." msgstr "" -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." msgstr "" -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" msgstr "概要" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" msgstr "最新" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" msgstr "未提出" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" msgstr "" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" msgstr "コメント" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" msgstr "" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" msgstr "" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." msgstr "" -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." msgstr "" -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "On %(adjudicator)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" +msgid "Received as %(as_type)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" msgstr "" -#: adjfeedback/templates/feedback_card.html:88 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:93 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:103 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" msgstr "" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" msgstr "" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" msgstr "" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" msgstr "" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." msgstr "" -#: adjfeedback/templates/feedback_overview.html:18 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:22 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:30 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" msgstr "フィードバック" -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" msgstr "" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" msgstr "" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" msgstr "" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" msgstr "提出" -#: adjfeedback/views.py:118 +#: adjfeedback/views.py msgid "Feedback Overview" msgstr "フィードバック概要" -#: adjfeedback/views.py:142 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" msgstr "ジャッジに対するフィードバックを検索" -#: adjfeedback/views.py:153 adjfeedback/views.py:177 adjfeedback/views.py:192 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" msgstr[0] "%(count)d件のフィードバック" -#: adjfeedback/views.py:156 adjfeedback/views.py:182 adjfeedback/views.py:197 +#: adjfeedback/views.py msgid "Feedbacks" msgstr "フィードバック" -#: adjfeedback/views.py:163 +#: adjfeedback/views.py msgid "Find Feedback" msgstr "フィードバックを探す" -#: adjfeedback/views.py:171 adjfeedback/views.py:710 +#: adjfeedback/views.py msgid "From Teams" msgstr "" -#: adjfeedback/views.py:186 adjfeedback/views.py:704 +#: adjfeedback/views.py msgid "From Adjudicators" msgstr "" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "Latest Feedback" msgstr "最近のフィードバック" -#: adjfeedback/views.py:272 +#: adjfeedback/views.py msgid "(30 most recent)" msgstr "(直近30個)" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "Only Comments" msgstr "" -#: adjfeedback/views.py:283 +#: adjfeedback/views.py msgid "(250 most recent)" msgstr "" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "Important Feedback" msgstr "重要なフィードバック" -#: adjfeedback/views.py:295 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" msgstr "(評価が予想より高かった/低かった)" -#: adjfeedback/views.py:362 +#: adjfeedback/views.py msgid "A Team" msgstr "チーム" -#: adjfeedback/views.py:367 +#: adjfeedback/views.py msgid "Team" msgstr "チーム" -#: adjfeedback/views.py:374 adjfeedback/views.py:391 +#: adjfeedback/views.py msgid "Institution" msgstr "大学・団体" -#: adjfeedback/views.py:377 +#: adjfeedback/views.py msgid "An Adjudicator" msgstr "ジャッジ" -#: adjfeedback/views.py:384 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "ジャッジ" -#: adjfeedback/views.py:511 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." msgstr "" -#: adjfeedback/views.py:541 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." msgstr "" -#: adjfeedback/views.py:625 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" msgstr "" -#: adjfeedback/views.py:648 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." msgstr "" -#: adjfeedback/views.py:675 +#: adjfeedback/views.py msgid "Feedback Progress" msgstr "フィードバック提出状況" -#: adjfeedback/views.py:696 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" msgstr[0] "" -#: adjfeedback/views.py:741 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." msgstr "" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "confirmed" msgstr "" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "un-confirmed" msgstr "" -#: adjfeedback/views.py:768 +#: adjfeedback/views.py msgid "un-ignored" msgstr "" -#: adjfeedback/views.py:804 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." diff --git a/tabbycat/availability/locale/ja/LC_MESSAGES/django.po b/tabbycat/availability/locale/ja/LC_MESSAGES/django.po index c8e908e9d4a..377cd8c6753 100644 --- a/tabbycat/availability/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:07\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -17,292 +17,284 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" msgstr "" -#: availability/models.py:15 +#: availability/models.py msgid "content type" msgstr "コンテンツタイプ" -#: availability/models.py:16 +#: availability/models.py msgid "object id" msgstr "" -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "ラウンド" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" msgstr "" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" msgstr "" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" msgstr "ブレイクしたすべてのジャッジを有効にする" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" msgstr "すべてを有効にする" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" msgstr "%(prev_round)sで有効にされているものをコピーする" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" msgstr "対戦表を確認する" -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" msgstr "" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" msgstr "対戦表を作成する" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." msgstr "いくつかのチームが有効にされていない限り対戦表は作成できません。" -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." msgstr "何人かのジャッジが有効にされていない限り対戦表は作成できません。" -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." msgstr "いくつかのラウンド部屋が有効にされていない限り対戦表は作成できません。" -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." msgstr "有効にされているラウンド部屋が足りません。正しく対戦表が作成されない可能性があります。" -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." msgstr "有効にされているジャッジが足りません。正しく対戦表が作成されない可能性があります。" -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." msgstr "有効にされているチーム数が奇数です。正しく対戦表が作成されない可能性があります。" -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." msgstr "有効にされているチーム数が4の倍数でありません。正しく対戦表が作成されない可能性があります。" -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgstr[0] "ラウンド%(prev_round)sの%(previous_unconfirmed)s試合のバロットが揃っていません。対戦表が正しく作成されず、誤りが生じる可能性があります。まずラウンド%(prev_round)sの結果を入力してください。" -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " msgstr "" -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" msgstr "" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." msgstr "" -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" msgstr "" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" msgstr "" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" msgstr "チェックイン" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" msgstr "ブレイクしているすべての者をチェックインする" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" msgstr "" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" msgstr "選択したものを保存する" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "チーム" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "ジャッジ" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" msgstr "ラウンド部屋" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" msgstr "チームを有効にする" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" msgstr "チームを有効にする必要がありません" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." msgstr "このラウンドで有効にされているチーム数が奇数です。" -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." msgstr "このラウンドで有効にされているチーム数が4の倍数でありません。" -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" msgstr "" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." msgstr[0] "" -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" msgstr[0] "" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." msgstr[0] "" -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" msgstr[0] "" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" msgstr "ジャッジを有効にする" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." msgstr[0] "" -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" msgstr "" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." msgstr[0] "" -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" msgstr[0] "" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." msgstr[0] "" -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" msgstr[0] "" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." msgstr[0] "" -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" msgstr "" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" msgstr "" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" msgstr[0] "" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" @@ -311,73 +303,73 @@ msgstr[0] "" #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" msgstr[0] "" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" msgstr[0] "" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" msgstr "" -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" msgstr "" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" msgstr "" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" msgstr "" -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" msgstr "" -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" msgstr "" -#: availability/views.py:260 +#: availability/views.py msgid "Room" msgstr "ラウンド部屋" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" msgstr "" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" msgstr "カテゴリー" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" msgstr "" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." msgstr "" -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." msgstr "" -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." msgstr "" -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." msgstr "" diff --git a/tabbycat/breakqual/locale/ja/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/ja/LC_MESSAGES/django.po index e190a9ce985..6a1b06cdd44 100644 --- a/tabbycat/breakqual/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:08\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -17,508 +17,505 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" msgstr "ブレイク要件" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "" +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "大会" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "名前" -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" msgstr "" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" msgstr "スラグ" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" msgstr "" -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" msgstr "" -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" msgstr "" -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" msgstr "" -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" msgstr "このカテゴリーでブレイクするチーム数" -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" msgstr "" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" msgstr "" -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" msgstr "" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" msgstr "" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" msgstr "制限" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" msgstr "" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" msgstr "" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" msgstr "" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" msgstr "" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" msgstr "" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" msgstr "" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "チーム" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "順位" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" msgstr "ブレイク順位" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" msgstr "" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" msgstr "ブレイクの資格なし" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" msgstr "違うカテゴリーでのブレイク" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" msgstr "失格" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" msgstr "コイントス負け" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" msgstr "辞退" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" msgstr "" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" msgstr "" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" msgstr "" -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" msgstr "" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." msgstr "" -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." msgstr "" -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" msgstr "" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." msgstr "" -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" msgstr "" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " msgstr "" -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" msgstr "" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" msgstr "" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " msgstr "" -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" msgstr "" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" msgstr "" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" msgstr "" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" msgstr "" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" msgstr "" -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" msgstr "" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." msgstr "" -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." msgstr "" -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." msgstr "" -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." msgstr "" -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." msgstr "" -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." msgstr "" -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" msgstr "" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" msgstr "" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" msgstr "概要" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" msgstr "ジャッジブレイク" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." msgstr "" -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" msgstr "ブレイク" -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "ジャッジ" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" msgstr "" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" msgstr "" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" msgstr "" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" msgstr "" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" msgstr "" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" msgstr "" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" msgstr "" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" msgstr "" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" msgstr "" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" msgstr "" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" msgstr "" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" msgstr "" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" msgstr "" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" msgstr "" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" msgstr "" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" msgstr "" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" msgstr "" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" msgstr "" -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" msgstr "" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" msgstr "" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" msgstr "" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." msgstr "" -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." msgstr "" -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" msgstr "" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" msgstr "" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" diff --git a/tabbycat/draw/locale/ja/LC_MESSAGES/django.po b/tabbycat/draw/locale/ja/LC_MESSAGES/django.po index 6f45d586cd0..2c0b34022dd 100644 --- a/tabbycat/draw/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-07-02 13:44\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -17,1107 +17,1079 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "" - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." msgstr[0] "" -#: draw/admin.py:93 +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." msgstr[0] "" -#: draw/apps.py:7 draw/views.py:452 draw/views.py:455 +#: draw/apps.py draw/views.py msgid "Draw" msgstr "対戦表" -#: draw/generator/__init__.py:14 +#: draw/generator/__init__.py msgid "Too many swaps" msgstr "" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" msgstr "" -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" msgstr "" -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "Bubble up (history)" msgstr "" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble down (history)" msgstr "" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble up (institution)" msgstr "" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble down (institution)" msgstr "バブルダウン(インスティチューションのため)" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" msgstr "" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Can't bubble up/down" msgstr "" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Pull-up team" msgstr "プルアップチーム" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." msgstr "" -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." msgstr "" -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." msgstr "" -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." msgstr "" -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." msgstr "" -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." msgstr "" -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." msgstr "" -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." msgstr "" -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." msgstr "" -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." msgstr "" -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." msgstr "" -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." msgstr "" -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." msgstr "" -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." msgstr "" -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." msgstr "" -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" msgstr "" -#: draw/manager.py:276 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." msgstr "" -#: draw/models.py:29 draw/models.py:35 +#: draw/models.py msgid "none" msgstr "" -#: draw/models.py:30 +#: draw/models.py msgid "postponed" msgstr "" -#: draw/models.py:31 draw/models.py:36 +#: draw/models.py msgid "draft" msgstr "下書き状態" -#: draw/models.py:32 draw/models.py:37 +#: draw/models.py msgid "confirmed" msgstr "" -#: draw/models.py:43 draw/models.py:375 +#: draw/models.py msgid "round" msgstr "ラウンド" -#: draw/models.py:45 +#: draw/models.py msgid "room" msgstr "部屋" -#: draw/models.py:48 +#: draw/models.py msgid "bracket" msgstr "" -#: draw/models.py:50 +#: draw/models.py msgid "room rank" msgstr "" -#: draw/models.py:56 +#: draw/models.py msgid "importance" msgstr "重要度" -#: draw/models.py:58 +#: draw/models.py msgid "result status" msgstr "" -#: draw/models.py:60 +#: draw/models.py msgid "sides confirmed" msgstr "" -#: draw/models.py:61 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." msgstr "" -#: draw/models.py:64 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "ディベート" -#: draw/models.py:65 +#: draw/models.py msgid "debates" msgstr "ディベート" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:84 draw/models.py:109 +#: draw/models.py msgid " (sides not confirmed)" msgstr "(サイドが決まっていません)" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:96 draw/models.py:113 +#: draw/models.py msgid " vs " msgstr "対" -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" msgstr "肯定側" -#: draw/models.py:263 +#: draw/models.py msgid "negative" msgstr "否定側" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" msgstr "Opening Government" -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" msgstr "Opening Opposition" -#: draw/models.py:266 +#: draw/models.py msgid "closing government" msgstr "Closing Government" -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" msgstr "Closing Opposition" -#: draw/models.py:274 draw/models.py:377 +#: draw/models.py msgid "team" msgstr "チーム" -#: draw/models.py:276 draw/models.py:379 +#: draw/models.py msgid "side" msgstr "サイド" -#: draw/models.py:281 +#: draw/models.py msgid "debate team" -msgstr "" +msgstr "ディベートチーム" -#: draw/models.py:282 +#: draw/models.py msgid "debate teams" -msgstr "" +msgstr "ディベートチーム" -#: draw/models.py:303 +#: draw/models.py #, python-format msgid "placed %(place)s" msgstr "%(place)s位" -#: draw/models.py:305 draw/models.py:312 +#: draw/models.py msgid "result unknown" msgstr "結果不明" -#: draw/models.py:308 +#: draw/models.py msgid "won" msgstr "勝ち" -#: draw/models.py:310 +#: draw/models.py msgid "lost" msgstr "負け" -#: draw/models.py:383 +#: draw/models.py msgid "team side allocation" -msgstr "" +msgstr "チームサイドのアロケーション" -#: draw/models.py:384 +#: draw/models.py msgid "team side allocations" -msgstr "" +msgstr "チームサイドのアロケーション" #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" msgstr "" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" -msgstr "" +msgstr "チーム%(num)d" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" msgstr "" -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" msgstr "" -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" msgstr "" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" msgstr "" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" msgstr "" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" msgstr "" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" msgstr "" -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" msgstr "" -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" msgstr "" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" -msgstr "" +msgstr "サイド" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" msgstr "" -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" msgstr "" -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" -msgstr "" +msgstr "このラウンド以前のサイドの履歴" -#: draw/tables.py:292 +#: draw/tables.py msgid "After" -msgstr "" +msgstr "の後" -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" -msgstr "" +msgstr "このラウンド後のサイドの履歴" -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" msgstr "" -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" msgstr "" -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" -msgstr "" +msgstr "状態" -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" msgstr "" -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" msgstr "" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" msgstr "注意!データベースからチームを消すことはTabbycatが落ちる可能性があります。" -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." msgstr[0] "" -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" msgstr[0] "" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." msgstr[0] "" -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." msgstr[0] "" -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" msgstr[0] "" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." msgstr[0] "" -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" msgstr[0] "" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." msgstr[0] "" -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" msgstr[0] "" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." msgstr[0] "" -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" msgstr "" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" msgstr "" -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" msgstr "対戦表を再度作成する" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" msgstr "" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" msgstr "" -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" msgstr "対戦表を公開する" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" msgstr "" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" msgstr "対戦表を確認する" -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" msgstr "%(start_time)sにラウンド開始" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" msgstr "開始時刻を追加する" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" msgstr "結果入力" -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" -msgstr "" +msgstr "モーションの詳細" -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." msgstr[0] "" -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "モーションを修正する" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "モーションの修正" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" msgstr "設定により、バロットを入力する際にモーションが必要です。\n" "試合終了までに入力してください。" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" -msgstr "モーションを入力する" - -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." -msgstr "モーションが入力されました。" - -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "モーションを修正する" - -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." msgstr "" -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "モーションを入力する" +msgid_plural "Enter motions" +msgstr[0] "モーションを入力" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" msgstr "対戦表を公開する" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." msgstr "まだこのラウンドの対戦表が作成されていないため、公開するものがありません。" -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." msgstr "" -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" msgstr "対戦表を非公開にする。" -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." msgstr "" -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" -msgstr "" +msgstr "参加者向けの対戦表を表示" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" -msgstr "" +msgstr "対戦表を公開する" -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "この大会ではオンラインでバロットやフィードバックを提出することができます。可能にするためには、事前に対戦表を公開しておいてください。" -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." msgstr "" -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." msgstr "" -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "モーションを公開する" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "モーションを公開" -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" -#: draw/templates/draw_display_admin.html:200 +#: draw/templates/draw_display_admin.html msgid "Release Motion" -msgstr "モーションを公開する" +msgid_plural "Release Motions" +msgstr[0] "モーションを公開" -#: draw/templates/draw_display_admin.html:201 -msgid "Release motion to public" -msgstr "" - -#: draw/templates/draw_display_admin.html:202 -msgid "Unrelease motion to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." msgstr "" -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." msgstr "" -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "" - -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "この大会では公開用サイトでモーションが見れるように設定されていません。モーションを発表する必要がありません。" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "" +msgid_plural "Motions have been released publicly." +msgstr[0] "" -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" msgstr "" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" msgstr "" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" msgstr "" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" msgstr "" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" msgstr "" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" msgstr "" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" msgstr "" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" msgstr "" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" msgstr "" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" msgstr "スクロールの速さ" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" msgstr "早く" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" msgstr "普通" -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" msgstr "遅く" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" msgstr "さらに遅く" -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" msgstr "文字の大きさ" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" msgstr "さらに小さく" -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" msgstr "小さく" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" msgstr "大きく" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" msgstr "さらに大きく" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" msgstr "スクロールを止める" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." msgstr "" -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." msgstr "" -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" msgstr "ジャッジのアロケーション" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." msgstr "" -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" msgstr "" -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" msgstr "" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" msgstr "ラウンド部屋の配置を修正する" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" msgstr "事前設定されたパネル" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." msgstr[0] "" -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" msgstr "" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" msgstr "" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." msgstr[0] "" -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" msgstr "" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" msgstr "" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." msgstr "" -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." msgstr "" -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " msgstr "" -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." msgstr "" -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." msgstr "" -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." msgstr "" -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." msgstr "" -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." msgstr "" -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." msgstr "" -#: draw/views.py:68 draw/views.py:483 +#: draw/views.py msgid "No debates in this round" msgstr "" -#: draw/views.py:76 +#: draw/views.py #, python-format msgid "Draw for %(round)s" msgstr "%(round)sの対戦表" -#: draw/views.py:78 +#: draw/views.py msgid "Draws for Current Rounds" msgstr "" -#: draw/views.py:82 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" msgstr "" -#: draw/views.py:86 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" msgstr "" -#: draw/views.py:124 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" msgstr[0] "" -#: draw/views.py:171 +#: draw/views.py msgid "The draw for this round hasn't been released." msgstr "" -#: draw/views.py:224 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" msgstr "" -#: draw/views.py:382 +#: draw/views.py msgid "Adjudicator Assignments" msgstr "" -#: draw/views.py:404 +#: draw/views.py msgid "Position" msgstr "" -#: draw/views.py:424 +#: draw/views.py msgid "Team Pairings" msgstr "" -#: draw/views.py:447 +#: draw/views.py msgid "No Draw" msgstr "対戦表がありません" -#: draw/views.py:449 +#: draw/views.py msgid "Draft Draw" msgstr "仮の対戦表" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:541 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" msgstr "" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:546 +#: draw/views.py msgid "BR" msgstr "" -#: draw/views.py:571 +#: draw/views.py msgid "Draw with Details" msgstr "詳細付きの対戦表" -#: draw/views.py:579 +#: draw/views.py msgid "Position Balance Report" msgstr "" -#: draw/views.py:590 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" msgstr "" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:593 +#: draw/views.py msgid " (i.e., Shannon entropy)" msgstr "" -#: draw/views.py:623 +#: draw/views.py msgid "Teams with position imbalances" msgstr "" -#: draw/views.py:624 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" msgstr "" -#: draw/views.py:627 +#: draw/views.py msgid "Annotated draw" msgstr "" -#: draw/views.py:658 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" msgstr "" -#: draw/views.py:666 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " msgstr "" -#: draw/views.py:674 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " msgstr "" -#: draw/views.py:683 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " msgstr "" -#: draw/views.py:699 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "" -#: draw/views.py:726 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "" -#: draw/views.py:746 +#: draw/views.py msgid "Released the draw." msgstr "対戦表を公開する。" -#: draw/views.py:761 +#: draw/views.py msgid "Unreleased the draw." msgstr "対戦表を非公開にする。" -#: draw/views.py:774 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." msgstr "" -#: draw/views.py:793 +#: draw/views.py msgid "Side Pre-Allocations" msgstr "" -#: draw/views.py:826 +#: draw/views.py msgid "Edit Matchups" msgstr "" diff --git a/tabbycat/importer/locale/ja/LC_MESSAGES/django.po b/tabbycat/importer/locale/ja/LC_MESSAGES/django.po index 2673cbae73a..dda9fbbe0ea 100644 --- a/tabbycat/importer/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:48\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -17,410 +17,399 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" msgstr "" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" msgstr "" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" msgstr "" -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." msgstr "" -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." msgstr "" -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" msgstr "スピーカーの名前" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" msgstr "スピーカーのメールアドレス" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" msgstr "" -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" msgstr "名前(インステチューションなし)" -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" msgstr "" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" msgstr "" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" msgstr "" -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" msgstr "選手を1行ごとに表記してください" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" msgstr "改行、タブ、カンマで分けれます" -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" msgstr "" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." msgstr "" -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." msgstr "" -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." msgstr "" -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." msgstr "" -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" msgstr "" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." msgstr "" -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" msgstr "無所属" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" -#: importer/forms.py:396 +#: importer/forms.py msgid "XML" msgstr "" -#: importer/forms.py:397 +#: importer/forms.py msgid "The Debate XML archive to parse" msgstr "" -#: importer/templates/archive_export_index.html:4 -#: importer/templates/archive_export_index.html:5 +#: importer/templates/archive_export_index.html msgid "Export Tournament Archive" msgstr "" -#: importer/templates/archive_export_index.html:9 +#: importer/templates/archive_export_index.html msgid "Tournaments can be exported in an XML format for use outside Tabbycat." msgstr "" -#: importer/templates/archive_export_index.html:17 +#: importer/templates/archive_export_index.html msgid "Export all data" msgstr "" -#: importer/templates/archive_importer.html:6 -#: importer/templates/archive_importer.html:18 +#: importer/templates/archive_importer.html msgctxt "page title" msgid "Import Tournament Archive" msgstr "" -#: importer/templates/archive_importer.html:19 +#: importer/templates/archive_importer.html msgid "This form will create a tournament with the data provided as a Debate XML format." msgstr "" -#: importer/templates/archive_importer.html:24 +#: importer/templates/archive_importer.html msgid "Import" msgstr "" -#: importer/templates/archive_importer.html:25 +#: importer/templates/archive_importer.html msgid "Go back to the site home page" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html msgctxt "page title" msgid "Add Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" msgstr "無所属のジャッジ" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" msgstr "すべてのジャッジを保存する" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" msgstr "" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" msgstr "簡単入力" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." msgstr "" -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" msgstr "大学・団体を追加する" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" msgstr "チームを追加する" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" msgstr "ジャッジを追加する" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" msgstr "ラウンド部屋を追加する" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" msgstr "ラウンド部屋の種類を追加・修正する" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" msgstr "" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" msgstr "ジャッジ - チーム間のコンフリクトを追加・修正する" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" msgstr "ジャッジ間コンフリクトを追加・修正する" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" msgstr "ジャッジ - 大学間のコンフリクトを追加・修正する" -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:66 +#: importer/templates/simple_import_index.html msgid "Add/Edit Break Categories" msgstr "" -#: importer/templates/simple_import_index.html:70 +#: importer/templates/simple_import_index.html msgid "Add/Edit Speaker Categories" msgstr "" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" msgstr "大学・団体を追加する" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" msgstr "すべての大学・団体を保存する" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" msgstr "次のステップ" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" msgstr "チームを追加する" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" msgstr "%(institution)sのチーム" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" msgstr "" -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" msgstr "" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" msgstr "ラウンド部屋を追加する" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." msgstr "ラウンド部屋の使用優先度を設定できます。\n" "大きい数字であるほど、優先度が高いことを示します。\n" "ラウンド部屋が試合数より多い場合、優先度が低い部屋が省かれます。" -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" msgstr "すべてのラウンド部屋を保存する" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" msgstr "" -#: importer/views.py:108 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." msgstr[0] "%(count)d大学追加しました。" -#: importer/views.py:129 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." msgstr[0] "ラウンド部屋を%(count)d追加しました。" -#: importer/views.py:188 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." msgstr[0] "%(count)dチーム追加しました。" -#: importer/views.py:209 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "" -#: importer/views.py:214 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." msgstr[0] "" -#: importer/views.py:230 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " msgstr "" -#: importer/views.py:238 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." msgstr "" -#: importer/views.py:256 +#: importer/views.py msgid "Tournament archive has been imported." msgstr "" diff --git a/tabbycat/locale/ja/LC_MESSAGES/django.po b/tabbycat/locale/ja/LC_MESSAGES/django.po index 99a8aa6d9b1..a363d75abbe 100644 --- a/tabbycat/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:15\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -17,940 +17,940 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" msgstr "" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:105 +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" msgstr "チェックイン" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" msgstr "" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" msgstr "" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" msgstr "" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." msgstr "" -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" msgstr "バーコード" -#: checkins/models.py:37 +#: checkins/models.py msgid "" msgstr "" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" msgstr "人" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" msgstr "個人の識別子" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" msgstr "個人の識別子" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "ディベート" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" msgstr "ディベートの識別コード" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" msgstr "ディベートの識別コード" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" msgstr "ラウンド部屋の識別コード" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" msgstr "ラウンド部屋の識別コード" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" msgstr "識別コード" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" msgstr "チェックイン時間" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "大会" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" msgstr "" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" msgstr "" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" msgstr "" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" msgstr "欠けている識別コードを作成する" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" msgstr "すべての識別コードを作成する" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." msgstr "表示すべき識別コードがありません。\n" "管理者が作成する必要があります。" -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." msgstr "" -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." msgstr "" -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" msgstr "" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" msgstr "" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" msgstr "" -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." msgstr "" -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." msgstr "" -#: checkins/views.py:30 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" msgstr "" -#: checkins/views.py:63 +#: checkins/views.py msgid "People's Check-In Statuses" msgstr "" -#: checkins/views.py:120 +#: checkins/views.py msgid "Rooms' Check-In Statuses" msgstr "" -#: checkins/views.py:169 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" msgstr "" -#: checkins/views.py:176 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" msgstr "スピーカー" -#: checkins/views.py:181 templates/nav/public_nav.html:145 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "ジャッジ" -#: checkins/views.py:186 +#: checkins/views.py msgid "Rooms" msgstr "ラウンド部屋" -#: checkins/views.py:227 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" msgstr "%sの識別コード" -#: checkins/views.py:234 +#: checkins/views.py msgid "Identifiers" msgstr "識別コード" -#: checkins/views.py:272 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." msgstr "" -#: checkins/views.py:280 +#: checkins/views.py msgid "You have revoked your check-in." msgstr "" -#: checkins/views.py:282 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." msgstr "" -#: checkins/views.py:286 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." msgstr "" -#: checkins/views.py:293 +#: checkins/views.py msgid "You are now checked in." msgstr "" -#: settings/core.py:67 +#: settings/core.py msgid "Arabic" msgstr "アラビア語" -#: settings/core.py:68 +#: settings/core.py msgid "Bengali" msgstr "" -#: settings/core.py:69 +#: settings/core.py msgid "English" msgstr "英語" -#: settings/core.py:70 +#: settings/core.py msgid "Spanish" msgstr "スペイン語" -#: settings/core.py:71 +#: settings/core.py msgid "French" msgstr "フランス語" -#: settings/core.py:72 +#: settings/core.py msgid "Indonesian" msgstr "" -#: settings/core.py:73 +#: settings/core.py msgid "Japanese" msgstr "日本語" -#: settings/core.py:74 +#: settings/core.py msgid "Malay" msgstr "" -#: settings/core.py:75 +#: settings/core.py msgid "Portuguese" msgstr "ポルトガル語" -#: settings/core.py:76 +#: settings/core.py msgid "Russian" msgstr "ロシア語" -#: settings/core.py:77 +#: settings/core.py msgid "Simplified Chinese" msgstr "" -#: settings/core.py:78 +#: settings/core.py msgid "Translation" msgstr "" -#: templates/admin/delete_protected_message.html:4 +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." msgstr "まず上記のものを削除しないといけません。" -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." msgstr "" -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." msgstr "" -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" msgstr "" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" msgstr "" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" msgstr "ログイン" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" msgstr "自分のパスワード忘れちゃった" -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." msgstr "" -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" msgstr "保存し、さらに追加する" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" msgstr "アクセス権限がなし(403)" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." msgstr "" -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgstr[0] "" -#: templates/errors/legacy_sendgrid_warning.html:11 +#: templates/errors/legacy_sendgrid_warning.html msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." msgstr "" -#: templates/errors/public_403.html:14 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." msgstr "" -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." msgstr "" -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." msgstr "" -#: templates/footer.html:24 +#: templates/footer.html #, python-format msgid "For a tournament of this size, we suggest a donation of $%(amount)s." msgstr "" -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." msgstr "" -#: templates/footer.html:31 +#: templates/footer.html msgid "Donations to Tabbycat from individuals or organisations are much appreciated." msgstr "" -#: templates/footer.html:39 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" msgstr "" -#: templates/footer.html:41 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." msgstr "" -#: templates/footer.html:50 +#: templates/footer.html msgid "Our Organisation" msgstr "" -#: templates/footer.html:52 -msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." msgstr "" -#: templates/footer.html:65 +#: templates/footer.html msgid "Language" msgstr "言語" -#: templates/footer.html:72 +#: templates/footer.html msgid "GitHub" msgstr "" -#: templates/footer.html:78 +#: templates/footer.html msgid "Documentation" msgstr "" -#: templates/footer.html:84 +#: templates/footer.html msgid "Support" msgstr "サポート" -#: templates/footer.html:90 +#: templates/footer.html msgid "Facebook" msgstr "" -#: templates/footer.html:96 +#: templates/footer.html msgid "Set Up A Copy" msgstr "" -#: templates/footer.html:110 +#: templates/footer.html msgid "Change Language" msgstr "言語設定" -#: templates/footer.html:127 +#: templates/footer.html msgid "Use this language" msgstr "この言語を利用する" -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" msgstr "" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" msgstr "" -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" msgstr "" -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" msgstr "データ管理" -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" msgstr "" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" msgstr "" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" msgstr "" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" msgstr "概要" -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" msgstr "" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" msgstr "" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" msgstr "データ入力" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:175 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" msgstr "参加者" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" msgstr "" -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" msgstr "" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" msgstr "事前設定されたパネル" -#: templates/nav/admin_nav.html:97 +#: templates/nav/admin_nav.html msgid "Export XML" msgstr "" -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:160 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" msgstr "サイド" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" msgstr "人の状況" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" msgstr "部屋の状況" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" msgstr "フィードバック" -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" msgstr "最新" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" msgstr "" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" msgstr "コメント" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" msgstr "" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" msgstr "ターゲットから探す" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" msgstr "未提出" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" msgstr "フィードバックを追加する" -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" msgstr "" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:165 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" msgstr "順位" -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" msgstr "" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "チーム" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" msgstr "%(category)sのチーム" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" msgstr "" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" msgstr "%(category)sのスピーカー" -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" msgstr "" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:155 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "モーション" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:170 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" msgstr "ダイバーシティ" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" msgstr "ブレイク" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" msgstr "" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" msgstr "" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" msgstr "" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" msgstr "ログアウト" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" msgstr "結果を入力する" -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:211 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" msgstr "フィードバックを入力する" -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" msgstr "参加者リスト" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:180 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" msgstr "大学・団体" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" msgstr "コード名" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" msgstr "" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "ラウンド部屋の状況" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" msgstr "対戦表を公開/プリントする" -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" msgstr "チームのタブ" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" msgstr "スピーカーのタブ" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" msgstr "リプライのタブ" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" msgstr "ジャッジのタブ" -#: templates/nav/public_nav.html:53 templates/nav/public_nav.html:62 +#: templates/nav/public_nav.html msgid "Motions Tab" msgstr "モーションのタブ" -#: templates/nav/public_nav.html:56 +#: templates/nav/public_nav.html msgid "By round" msgstr "" -#: templates/nav/public_nav.html:57 +#: templates/nav/public_nav.html msgid "Globally" msgstr "" -#: templates/nav/public_nav.html:72 +#: templates/nav/public_nav.html msgid "Draws" msgstr "対戦表" -#: templates/nav/public_nav.html:83 +#: templates/nav/public_nav.html msgid "No Draws Available" msgstr "" -#: templates/nav/public_nav.html:91 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" msgstr "%(round)sの対戦表" -#: templates/nav/public_nav.html:95 +#: templates/nav/public_nav.html msgid "Current Draws" msgstr "" -#: templates/nav/public_nav.html:115 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" msgstr "結果" -#: templates/nav/public_nav.html:133 +#: templates/nav/public_nav.html msgid "Break" msgstr "ブレイク" -#: templates/nav/public_nav.html:185 +#: templates/nav/public_nav.html msgid "Feedback Progress" msgstr "フィードバック状況" -#: templates/nav/public_nav.html:191 templates/nav/public_nav.html:197 +#: templates/nav/public_nav.html msgid "Enter Ballot" msgstr "バロットを入力する" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" msgstr "" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" msgstr "対戦表" -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" msgstr "" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" msgstr "ログイン" -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" msgstr "" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" msgstr "" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" msgstr "ログイン" -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" msgstr "Tabbycatにログインする" -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." msgstr "ユーザーネームとパスワードが一致しません" -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." msgstr "あなたのアカウントからではこのページにはアクセスできません。アクセスできるアカウントからログインしてください。" -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." msgstr "このページを見るためには、ログインしてください。" -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" msgstr "パスワードが変更されました" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." msgstr "パスワードが変更されました。" -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" msgstr "ホームページへ移る" -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:27 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" msgstr "パスワード変更" -#: templates/registration/password_change_form.html:16 +#: templates/registration/password_change_form.html #, python-format msgid "API Token: %(api_token)s" msgstr "" -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgid "The API token will allow you to authorize external applications to access the site as staff." msgstr "" -#: templates/registration/password_change_form.html:28 +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." msgstr "前のパスワードを入力してください。そのあとに、新しいパスワードを入力してください。" -#: templates/registration/password_change_form.html:33 -#: templates/registration/password_reset_confirm.html:25 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" msgstr "パスワードを変更する" -#: templates/registration/password_change_form.html:34 -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" msgstr "キャンセルし、サイトのホームページへ戻る" -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "パスワード変更完了しました" -#: templates/registration/password_reset_complete.html:11 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." msgstr "あなたのパスワードは変更されました。" -#: templates/registration/password_reset_complete.html:14 -#: templates/registration/password_reset_done.html:15 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" msgstr "ログインページへ移る" -#: templates/registration/password_reset_confirm.html:4 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" msgstr "" -#: templates/registration/password_reset_confirm.html:16 -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html msgctxt "page title" msgid "Password Reset" msgstr "" -#: templates/registration/password_reset_confirm.html:18 +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" msgstr "新しいパスワードを入力してください(2回)" -#: templates/registration/password_reset_confirm.html:33 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." msgstr "パスワード変更のためのリンクが使用できません。もうすでに使ってる可能性があるので、改めて変更手続きを行ってください。" -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" msgid "Password reset email sent" msgstr "パスワード変更のためのメールが送信されました" -#: templates/registration/password_reset_done.html:11 +#: templates/registration/password_reset_done.html msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." msgstr "新しいパスワードにするための手続きのメールを送りました。もうまもなく受診されると思いますので、ご確認ください。" -#: templates/registration/password_reset_done.html:12 +#: templates/registration/password_reset_done.html msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." msgstr "もし受け取らなかった場合、正しいメールアドレスを入力したか確認したり、迷惑メールなども確認してください。" -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" msgstr "%(user)s、こんにちは!" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "誰かが、%(email)sのアカウントの%(protocol)s://%(domain)sのTabbycatのサイトのパスワード変更申請を行おうとしています。" -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" msgstr "もしこれがあなたであれば、パスワードをリセットするために下記のリンクを押してください。" -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_form.html:27 +#: templates/registration/password_reset_form.html msgid "Enter your email address below, and we'll email you a password reset link." msgstr "" -#: templates/registration/password_reset_form.html:34 +#: templates/registration/password_reset_form.html msgid "Please enter a valid email address." msgstr "有効なメールアドレスを入力してください" -#: templates/registration/password_reset_form.html:39 users/forms.py:10 -#: users/forms.py:25 +#: templates/registration/password_reset_form.html users/forms.py msgid "Email address" msgstr "" -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" msgstr "パスワードを変更する" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" msgstr "ログインページへ移る" -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" msgstr "" -#: urls.py:102 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" msgstr "%(user)s、こんにちは!ログインできました!" -#: urls.py:105 +#: urls.py msgid "Welcome! You just logged in!" msgstr "ようこそ!ログインできました!" -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." msgstr "" -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." msgstr "" -#: users/templates/admin/auth/delete_user_warning.html:6 +#: users/templates/admin/auth/delete_user_warning.html msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." msgstr "" -#: users/templates/signup.html:4 users/templates/signup.html:5 +#: users/templates/signup.html msgid "Sign-Up" msgstr "" -#: users/templates/signup.html:16 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Administrator Account" msgstr "" -#: users/templates/signup.html:18 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Assistant Account" msgstr "" -#: users/templates/signup.html:25 +#: users/templates/signup.html msgid "Create Account" msgstr "" -#: users/views.py:54 +#: users/views.py msgid "You have successfully created a new administrator account." msgstr "" -#: users/views.py:56 +#: users/views.py msgid "You have successfully created a new assistant account." msgstr "" -#: users/views.py:84 +#: users/views.py msgid "Whoops! It looks like someone's already created the first user account. Please log in." msgstr "" -#: users/views.py:92 +#: users/views.py #, python-format msgid "Welcome! You've created an account for %s." msgstr "" diff --git a/tabbycat/motions/locale/ja/LC_MESSAGES/django.po b/tabbycat/motions/locale/ja/LC_MESSAGES/django.po index 9cd6c3e263e..2d3b6619bc9 100644 --- a/tabbycat/motions/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -17,359 +17,367 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "モーション" -#: motions/models.py:9 +#: motions/models.py msgid "text" msgstr "文章" -#: motions/models.py:10 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" msgstr "モーション全文" -#: motions/models.py:12 +#: motions/models.py msgid "reference" msgstr "" -#: motions/models.py:13 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" msgstr "モーションの短略" -#: motions/models.py:15 +#: motions/models.py msgid "info slide" msgstr "インフォスライド" -#: motions/models.py:16 +#: motions/models.py msgid "The information slide for this topic; if it has one" msgstr "このモーションのインフォスライドです。\n" "もしあれば入力してください。" -#: motions/models.py:19 +#: motions/models.py msgid "tournament" msgstr "トーナメント" -#: motions/models.py:21 +#: motions/models.py msgid "rounds" msgstr "ラウンド" -#: motions/models.py:24 motions/models.py:37 motions/models.py:62 +#: motions/models.py msgid "motion" msgstr "論題" -#: motions/models.py:25 +#: motions/models.py msgid "motions" msgstr "論題" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" msgstr "ディベートチーム" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" msgstr "" -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" msgstr "" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" msgstr "" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" msgstr "" -#: motions/models.py:64 +#: motions/models.py msgid "round" msgstr "ラウンド" -#: motions/models.py:67 +#: motions/models.py msgid "sequence number" msgstr "" -#: motions/models.py:68 +#: motions/models.py msgid "The order in which motions are displayed" msgstr "" -#: motions/models.py:73 +#: motions/models.py msgid "round motion" msgstr "" -#: motions/models.py:74 +#: motions/models.py msgid "round motions" msgstr "" -#: motions/statistics.py:86 +#: motions/statistics.py msgid "extremely strong evidence" msgstr "" -#: motions/statistics.py:87 +#: motions/statistics.py msgid "strong evidence" msgstr "" -#: motions/statistics.py:88 +#: motions/statistics.py msgid "moderate evidence" msgstr "" -#: motions/statistics.py:89 +#: motions/statistics.py msgid "weak evidence" msgstr "" -#: motions/statistics.py:90 +#: motions/statistics.py msgid "very weak evidence" msgstr "" -#: motions/statistics.py:91 +#: motions/statistics.py msgid "extremely weak evidence" msgstr "" -#: motions/statistics.py:114 +#: motions/statistics.py msgid "balance inconclusive" msgstr "" -#: motions/statistics.py:115 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" msgstr "" -#: motions/statistics.py:123 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" msgstr "" -#: motions/statistics.py:124 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." msgstr "" -#: motions/statistics.py:129 +#: motions/statistics.py msgid "probably balanced" msgstr "" -#: motions/statistics.py:130 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." msgstr "" -#: motions/templates/motion_global_statistics.html:22 -#: motions/templates/motion_round_statistics.html:31 -#: motions/templates/public_motions.html:32 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" msgstr "インフォスライドを表示" -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" msgstr[0] "" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" msgstr[0] "" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" msgstr[0] "" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" msgstr[0] "" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" msgstr[0] "" -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" msgstr[0] "" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" msgstr "この論題について議論したチームはありません" -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" msgstr[0] "" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" msgstr "" -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" msgstr[0] "論題の編集" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" msgstr "対戦表を公開する" -#: motions/templates/motions_edit.html:28 +#: motions/templates/motions_edit.html msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." msgstr "" -#: motions/templates/motions_edit.html:30 +#: motions/templates/motions_edit.html msgid "Reuse Motions from Last Round" msgstr "前回のラウンドからの論題を再利用する" -#: motions/templates/motions_edit.html:35 +#: motions/templates/motions_edit.html msgid "Use Existing Motions" msgstr "既存の論題を使用" -#: motions/templates/motions_edit.html:74 +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" msgstr[0] "論題を保存" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "インフォスライド" -#: motions/templates/public_motions.html:41 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." msgstr "このラウンドには利用可能な論題はありません。" -#: motions/templates/public_motions.html:47 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." msgstr "" -#: motions/templates/public_motions.html:52 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." msgstr "" -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" msgstr[0] "" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" msgstr[0] "" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." msgstr "" -#: motions/utils.py:11 +#: motions/utils.py msgid "Not all latest ballots list the same motion, so could not be merged." msgstr "" -#: motions/utils.py:29 +#: motions/utils.py msgid "Motion vetos are inconsistent, so could not be merged." msgstr "" -#: motions/views.py:91 +#: motions/views.py msgid "The motion has been saved." msgstr "モーションが保存されました。" -#: motions/views.py:93 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." msgstr[0] "" -#: motions/views.py:97 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." msgstr[0] "" -#: motions/views.py:140 +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "" + +#: motions/views.py #, python-format msgid "Reused the motion from the previous round." msgid_plural "Reused the %(count)d motions from the previous round." msgstr[0] "" -#: motions/views.py:164 -msgid "Released the motion(s)." -msgstr "" +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" -#: motions/views.py:171 -msgid "Unreleased the motion(s)." -msgstr "" +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" -#: motions/views.py:195 +#: motions/views.py msgid "Round Motions" msgstr "" -#: motions/views.py:209 +#: motions/views.py msgid "Motion Statistics" msgstr "" diff --git a/tabbycat/notifications/locale/ja/LC_MESSAGES/django.po b/tabbycat/notifications/locale/ja/LC_MESSAGES/django.po index 50e938c35a1..ef39e4560ea 100644 --- a/tabbycat/notifications/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-07-02 13:44\n" "Last-Translator: philip_tc\n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -18,400 +18,398 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" msgstr "" -#: notifications/forms.py:12 +#: notifications/forms.py msgid "Recipient email address" msgstr "" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" msgstr "" -#: notifications/forms.py:17 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" msgstr "" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Subject" msgstr "" -#: notifications/forms.py:31 +#: notifications/forms.py msgid "Message" msgstr "" -#: notifications/models.py:11 notifications/models.py:26 +#: notifications/models.py msgid "email" msgstr "" -#: notifications/models.py:12 +#: notifications/models.py msgid "SMS" msgstr "" -#: notifications/models.py:21 +#: notifications/models.py msgid "recipient" msgstr "" -#: notifications/models.py:23 +#: notifications/models.py msgid "method" msgstr "" -#: notifications/models.py:28 notifications/models.py:134 +#: notifications/models.py msgid "context" msgstr "" -#: notifications/models.py:31 +#: notifications/models.py msgid "notification" msgstr "" -#: notifications/models.py:33 notifications/models.py:74 -#: notifications/models.py:130 +#: notifications/models.py msgid "timestamp" msgstr "タイムスタンプ" -#: notifications/models.py:36 +#: notifications/models.py msgid "sent message" msgstr "" -#: notifications/models.py:37 +#: notifications/models.py msgid "sent messages" msgstr "" -#: notifications/models.py:58 +#: notifications/models.py msgid "team points" msgstr "" -#: notifications/models.py:59 +#: notifications/models.py msgid "ballot confirmed" msgstr "" -#: notifications/models.py:60 +#: notifications/models.py msgid "feedback URL" msgstr "" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot URL" msgstr "" -#: notifications/models.py:62 +#: notifications/models.py msgid "landing page URL" msgstr "" -#: notifications/models.py:63 +#: notifications/models.py msgid "adjudicator draw released" msgstr "" -#: notifications/models.py:64 +#: notifications/models.py msgid "team registration" msgstr "" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator registration" msgstr "" -#: notifications/models.py:66 +#: notifications/models.py msgid "motion(s) released" msgstr "" -#: notifications/models.py:67 +#: notifications/models.py msgid "team draw released" msgstr "" -#: notifications/models.py:68 +#: notifications/models.py msgid "custom message" msgstr "" -#: notifications/models.py:72 notifications/models.py:132 +#: notifications/models.py msgid "event" msgstr "" -#: notifications/models.py:77 +#: notifications/models.py msgid "tournament" msgstr "トーナメント" -#: notifications/models.py:79 +#: notifications/models.py msgid "round" msgstr "ラウンド" -#: notifications/models.py:82 +#: notifications/models.py msgid "subject template" msgstr "" -#: notifications/models.py:84 +#: notifications/models.py msgid "body template" msgstr "" -#: notifications/models.py:87 +#: notifications/models.py msgid "bulk notification" msgstr "" -#: notifications/models.py:88 +#: notifications/models.py msgid "bulk notifications" msgstr "" -#: notifications/models.py:114 +#: notifications/models.py msgid "Processed" msgstr "" -#: notifications/models.py:115 +#: notifications/models.py msgid "Dropped" msgstr "" -#: notifications/models.py:116 +#: notifications/models.py msgid "Deferred" msgstr "" -#: notifications/models.py:117 +#: notifications/models.py msgid "Delivered" msgstr "" -#: notifications/models.py:118 +#: notifications/models.py msgid "Bounced" msgstr "" -#: notifications/models.py:119 +#: notifications/models.py msgid "Opened" msgstr "" -#: notifications/models.py:120 +#: notifications/models.py msgid "Clicked" msgstr "" -#: notifications/models.py:121 +#: notifications/models.py msgid "Unsubscribed" msgstr "" -#: notifications/models.py:122 +#: notifications/models.py msgid "Marked as spam" msgstr "" -#: notifications/models.py:123 +#: notifications/models.py msgid "Unsubscribed from group" msgstr "" -#: notifications/models.py:124 +#: notifications/models.py msgid "Resubscribed to group" msgstr "" -#: notifications/models.py:128 +#: notifications/models.py msgid "email message" msgstr "" -#: notifications/models.py:137 +#: notifications/models.py msgid "email status" msgstr "" -#: notifications/models.py:138 +#: notifications/models.py msgid "email statuses" msgstr "" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." msgstr "" -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." msgstr "" -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" msgstr "" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." msgstr "" -#: notifications/templates/notifications_nav.html:5 notifications/views.py:75 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" msgstr "" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:29 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" msgstr "" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" msgstr "" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" msgstr "" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." msgstr "" -#: notifications/templates/test_email.html:20 +#: notifications/templates/test_email.html #, python-format msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." msgstr "" -#: notifications/templates/test_email.html:30 +#: notifications/templates/test_email.html msgid "Go back to the site home page" msgstr "" -#: notifications/utils.py:26 +#: notifications/utils.py msgid "the chair" msgstr "" -#: notifications/utils.py:27 +#: notifications/utils.py msgid "the only" msgstr "" -#: notifications/utils.py:28 +#: notifications/utils.py msgid "a panellist" msgstr "" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "a trainee" msgstr "" -#: notifications/utils.py:59 +#: notifications/utils.py msgid "TBA" msgstr "" -#: notifications/utils.py:88 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "" -#: notifications/utils.py:99 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:102 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Win" msgstr "" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Loss" msgstr "" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " msgstr "" -#: notifications/utils.py:183 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " msgstr "" -#: notifications/utils.py:206 notifications/utils.py:207 +#: notifications/utils.py msgid ", " msgstr "" -#: notifications/views.py:47 +#: notifications/views.py #, python-format msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" msgstr "" -#: notifications/views.py:51 +#: notifications/views.py msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." msgstr "" -#: notifications/views.py:60 +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" msgstr "" -#: notifications/views.py:65 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." msgstr "" -#: notifications/views.py:81 +#: notifications/views.py msgid "N/A" msgstr "" -#: notifications/views.py:82 +#: notifications/views.py msgid "Not known" msgstr "" -#: notifications/views.py:87 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" msgstr "" -#: notifications/views.py:133 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "" -#: notifications/views.py:152 +#: notifications/views.py msgid "Timeline" msgstr "" -#: notifications/views.py:162 notifications/views.py:260 +#: notifications/views.py msgid "Participant" msgstr "" -#: notifications/views.py:163 notifications/views.py:265 +#: notifications/views.py msgid "Email address" msgstr "" -#: notifications/views.py:164 +#: notifications/views.py msgid "Status" -msgstr "" +msgstr "状態" -#: notifications/views.py:165 +#: notifications/views.py msgid "Time" msgstr "" -#: notifications/views.py:204 +#: notifications/views.py msgid "Email Participants" msgstr "" -#: notifications/views.py:233 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." msgstr[0] "" -#: notifications/views.py:239 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." msgstr "" -#: notifications/views.py:250 +#: notifications/views.py msgid "Send Email" msgstr "" -#: notifications/views.py:266 +#: notifications/views.py msgid "Not Provided" msgstr "" -#: notifications/views.py:279 +#: notifications/views.py msgid "Role" msgstr "" -#: notifications/views.py:280 +#: notifications/views.py msgid "Adjudicator" msgstr "ジャッジ" -#: notifications/views.py:280 +#: notifications/views.py msgid "Speaker" msgstr "" -#: notifications/views.py:288 +#: notifications/views.py msgid "Speakers" msgstr "スピーカー" -#: notifications/views.py:289 +#: notifications/views.py msgid "Adjudicators" msgstr "ジャッジ" diff --git a/tabbycat/options/locale/ja/LC_MESSAGES/django.po b/tabbycat/options/locale/ja/LC_MESSAGES/django.po index 005d8e4c7a4..f401a524e48 100644 --- a/tabbycat/options/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -18,1587 +18,1600 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" msgstr "" -#: options/models.py:13 +#: options/models.py msgid "instance" msgstr "" -#: options/models.py:18 +#: options/models.py msgid "tournament preference" msgstr "" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" msgstr "" -#: options/preferences.py:19 options/templates/preferences_index.html:53 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" msgstr "スコアリングルール" -#: options/preferences.py:25 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:28 +#: options/preferences.py msgid "Minimum speaker score" msgstr "スピーカースコアの最低値" -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum speaker score" msgstr "スピーカースコアの最大値" -#: options/preferences.py:35 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:43 +#: options/preferences.py msgid "Speaker score step" msgstr "スピーカースコアの点数幅" -#: options/preferences.py:44 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:52 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" msgstr "" -#: options/preferences.py:53 +#: options/preferences.py msgid "Maximum margin" msgstr "マージンの最大値" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" msgstr "" -#: options/preferences.py:63 +#: options/preferences.py msgid "Minimum reply score" msgstr "リプライスピーチスコアの最低値" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" msgstr "" -#: options/preferences.py:72 +#: options/preferences.py msgid "Maximum reply score" msgstr "リプライスピーチスコアの最大値" -#: options/preferences.py:80 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:81 +#: options/preferences.py msgid "Reply score step" msgstr "" -#: options/preferences.py:89 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" msgstr "" -#: options/preferences.py:90 +#: options/preferences.py msgid "Margin includes dissenters" msgstr "" -#: options/preferences.py:98 +#: options/preferences.py msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" msgstr "" -#: options/preferences.py:99 +#: options/preferences.py msgid "Team score includes ghosts" msgstr "" -#: options/preferences.py:106 options/templates/preferences_index.html:58 +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" msgstr "" -#: options/preferences.py:112 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" msgstr "" -#: options/preferences.py:113 +#: options/preferences.py msgid "Minimum adjudicator score to vote" msgstr "" -#: options/preferences.py:121 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" msgstr "" -#: options/preferences.py:122 +#: options/preferences.py msgid "Adjudicator conflict penalty" msgstr "" -#: options/preferences.py:130 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" msgstr "" -#: options/preferences.py:131 +#: options/preferences.py msgid "Adjudicator history penalty" msgstr "" -#: options/preferences.py:139 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" msgstr "" -#: options/preferences.py:140 +#: options/preferences.py msgid "Importance mismatch penalty" msgstr "" -#: options/preferences.py:148 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" msgstr "" -#: options/preferences.py:149 +#: options/preferences.py msgid "Team institution penalty" msgstr "" -#: options/preferences.py:157 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" msgstr "" -#: options/preferences.py:158 +#: options/preferences.py msgid "Team history penalty" msgstr "" -#: options/preferences.py:166 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" msgstr "" -#: options/preferences.py:167 +#: options/preferences.py msgid "Avoid same institution" msgstr "" -#: options/preferences.py:175 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" msgstr "" -#: options/preferences.py:176 +#: options/preferences.py msgid "Avoid team history" msgstr "" -#: options/preferences.py:184 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "" -#: options/preferences.py:185 +#: options/preferences.py msgid "Odd bracket resolution method" msgstr "" -#: options/preferences.py:189 +#: options/preferences.py msgid "Pull up from top" msgstr "" -#: options/preferences.py:190 +#: options/preferences.py msgid "Pull up from bottom" msgstr "" -#: options/preferences.py:191 +#: options/preferences.py msgid "Pull up from middle" msgstr "" -#: options/preferences.py:192 +#: options/preferences.py msgid "Pull up at random" msgstr "" -#: options/preferences.py:193 +#: options/preferences.py msgid "Intermediate brackets" msgstr "" -#: options/preferences.py:194 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" msgstr "" -#: options/preferences.py:195 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" msgstr "" -#: options/preferences.py:196 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" msgstr "" -#: options/preferences.py:203 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" msgstr "" -#: options/preferences.py:204 +#: options/preferences.py msgid "Side allocations method" msgstr "" -#: options/preferences.py:208 options/preferences.py:225 +#: options/preferences.py msgid "Random" msgstr "" -#: options/preferences.py:209 +#: options/preferences.py msgid "Balance" msgstr "" -#: options/preferences.py:210 +#: options/preferences.py msgid "Pre-allocated" msgstr "" -#: options/preferences.py:211 +#: options/preferences.py msgid "Manually enter from ballot" msgstr "" -#: options/preferences.py:218 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." msgstr "" -#: options/preferences.py:219 +#: options/preferences.py msgid "Pairing method" msgstr "" -#: options/preferences.py:223 +#: options/preferences.py msgid "Slide" msgstr "" -#: options/preferences.py:224 +#: options/preferences.py msgid "Fold" msgstr "" -#: options/preferences.py:226 +#: options/preferences.py msgid "Adjacent" msgstr "" -#: options/preferences.py:227 +#: options/preferences.py msgid "Fold top, adjacent rest" msgstr "" -#: options/preferences.py:234 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" msgstr "" -#: options/preferences.py:236 +#: options/preferences.py msgid "Conflict avoidance method" msgstr "" -#: options/preferences.py:240 +#: options/preferences.py msgid "Off" msgstr "" -#: options/preferences.py:241 +#: options/preferences.py msgid "One-up-one-down" msgstr "" -#: options/preferences.py:248 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "" -#: options/preferences.py:250 +#: options/preferences.py msgid "Pullup restriction" msgstr "" -#: options/preferences.py:254 +#: options/preferences.py msgid "No restriction" msgstr "" -#: options/preferences.py:255 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" msgstr "" -#: options/preferences.py:256 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" msgstr "" -#: options/preferences.py:257 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" msgstr "" -#: options/preferences.py:264 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." msgstr "" -#: options/preferences.py:265 +#: options/preferences.py msgid "BP pullup distribution" msgstr "" -#: options/preferences.py:269 +#: options/preferences.py msgid "Anywhere in bracket" msgstr "" -#: options/preferences.py:270 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" msgstr "" -#: options/preferences.py:277 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" msgstr "" -#: options/preferences.py:278 +#: options/preferences.py msgid "BP position cost" msgstr "" -#: options/preferences.py:282 +#: options/preferences.py msgid "Simple" msgstr "" -#: options/preferences.py:283 +#: options/preferences.py msgid "Rényi entropy" msgstr "" -#: options/preferences.py:284 +#: options/preferences.py msgid "Population variance" msgstr "" -#: options/preferences.py:291 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." msgstr "" -#: options/preferences.py:294 +#: options/preferences.py msgid "Rényi order (BP)" msgstr "" -#: options/preferences.py:303 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." msgstr "" -#: options/preferences.py:306 +#: options/preferences.py msgid "BP position cost exponent" msgstr "" -#: options/preferences.py:315 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." msgstr "" -#: options/preferences.py:317 +#: options/preferences.py msgid "BP assignment method" msgstr "" -#: options/preferences.py:321 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" msgstr "" -#: options/preferences.py:322 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" msgstr "" -#: options/preferences.py:329 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" msgstr "" -#: options/preferences.py:330 +#: options/preferences.py msgid "Skip adjudicator check-ins" msgstr "" -#: options/preferences.py:338 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:339 +#: options/preferences.py msgid "No panellist adjudicators" msgstr "パネルはいません。" -#: options/preferences.py:347 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:348 +#: options/preferences.py msgid "No trainee adjudicators" msgstr "" -#: options/preferences.py:355 options/templates/preferences_index.html:73 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" msgstr "フィードバック" -#: options/preferences.py:361 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:362 +#: options/preferences.py msgid "Minimum adjudicator score" msgstr "" -#: options/preferences.py:370 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:371 +#: options/preferences.py msgid "Maximum adjudicator score" msgstr "" -#: options/preferences.py:379 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" msgstr "" -#: options/preferences.py:380 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" msgstr "" -#: options/preferences.py:384 +#: options/preferences.py msgid "Chairs on panellists and trainees" msgstr "" -#: options/preferences.py:385 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" msgstr "" -#: options/preferences.py:386 +#: options/preferences.py msgid "Panellists and trainees on chairs, vice-versa" msgstr "" -#: options/preferences.py:387 +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" msgstr "" -#: options/preferences.py:394 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "" -#: options/preferences.py:395 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" msgstr "" -#: options/preferences.py:399 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" msgstr "" -#: options/preferences.py:400 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" msgstr "" -#: options/preferences.py:407 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" msgstr "" -#: options/preferences.py:408 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" msgstr "" -#: options/preferences.py:416 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" msgstr "" -#: options/preferences.py:417 +#: options/preferences.py msgid "Show unaccredited" msgstr "" -#: options/preferences.py:425 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" msgstr "" -#: options/preferences.py:426 +#: options/preferences.py msgid "Feedback introduction/explanation" msgstr "" -#: options/preferences.py:435 options/templates/preferences_index.html:63 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" msgstr "" -#: options/preferences.py:441 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" msgstr "2チーム形式(例 Australs, WSDC)または、British Parliamentary形式" -#: options/preferences.py:442 +#: options/preferences.py msgid "Teams in debate" msgstr "1試合のチーム数" -#: options/preferences.py:446 +#: options/preferences.py msgid "Two-team format" msgstr "2チームの形式" -#: options/preferences.py:447 +#: options/preferences.py msgid "British Parliamentary (four teams)" msgstr "" -#: options/preferences.py:454 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:455 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" msgstr "" -#: options/preferences.py:459 options/preferences.py:472 +#: options/preferences.py msgid "One ballot per voting adjudicator" msgstr "各ジャッジがバロット1枚" -#: options/preferences.py:460 options/preferences.py:473 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" msgstr "コンセンサス バロット(1バロット/1試合)" -#: options/preferences.py:467 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:468 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" msgstr "" -#: options/preferences.py:480 +#: options/preferences.py msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." msgstr "" -#: options/preferences.py:481 +#: options/preferences.py msgid "Winner Declaration in ballot(s)" msgstr "" -#: options/preferences.py:485 +#: options/preferences.py msgid "Do not require separate winner selection" msgstr "" -#: options/preferences.py:486 +#: options/preferences.py msgid "Require separate winner selection as a check on correct scores" msgstr "" -#: options/preferences.py:487 +#: options/preferences.py msgid "Require winner selection to break tied-point debates" msgstr "" -#: options/preferences.py:488 +#: options/preferences.py msgid "Require winner selection, overriding scores" msgstr "" -#: options/preferences.py:495 +#: options/preferences.py msgid "When ballots should ask for speaker scores." msgstr "" -#: options/preferences.py:496 +#: options/preferences.py msgid "Require speaker scores" msgstr "" -#: options/preferences.py:500 +#: options/preferences.py msgid "Always require speaker scores" msgstr "" -#: options/preferences.py:501 +#: options/preferences.py msgid "Only require speaker scores in preliminary rounds" msgstr "" -#: options/preferences.py:502 +#: options/preferences.py msgid "Never require speaker scores" msgstr "" -#: options/preferences.py:509 +#: options/preferences.py msgid "How many substantive speakers on a team" msgstr "" -#: options/preferences.py:510 +#: options/preferences.py msgid "Substantive speakers" msgstr "" -#: options/preferences.py:518 +#: options/preferences.py msgid "What to call the teams" msgstr "" -#: options/preferences.py:519 +#: options/preferences.py msgid "Side names" msgstr "" -#: options/preferences.py:528 +#: options/preferences.py msgid "Whether this style features scored reply speeches" msgstr "" -#: options/preferences.py:529 +#: options/preferences.py msgid "Reply scores" msgstr "" -#: options/preferences.py:537 +#: options/preferences.py msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" msgstr "" -#: options/preferences.py:538 +#: options/preferences.py msgid "Require reply speaker to have given a substantive speech" msgstr "" -#: options/preferences.py:545 options/templates/preferences_index.html:68 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "順位" -#: options/preferences.py:551 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" msgstr "" -#: options/preferences.py:552 +#: options/preferences.py msgid "Speeches missable for standings eligibility" msgstr "" -#: options/preferences.py:560 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" msgstr "" -#: options/preferences.py:561 +#: options/preferences.py msgid "Replies missable for standings eligibility" msgstr "" -#: options/preferences.py:569 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" msgstr "" -#: options/preferences.py:570 +#: options/preferences.py msgid "Team standings precedence" msgstr "" -#: options/preferences.py:586 options/preferences.py:621 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" msgstr "" -#: options/preferences.py:592 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" msgstr "" -#: options/preferences.py:593 +#: options/preferences.py msgid "Team standings extra metrics" msgstr "" -#: options/preferences.py:604 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" msgstr "" -#: options/preferences.py:605 +#: options/preferences.py msgid "Speaker standings precedence" msgstr "" -#: options/preferences.py:627 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" msgstr "" -#: options/preferences.py:628 +#: options/preferences.py msgid "Speaker standings extra metrics" msgstr "" -#: options/preferences.py:638 options/templates/preferences_index.html:89 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" msgstr "タブ公開" -#: options/preferences.py:644 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:645 +#: options/preferences.py msgid "Release team tab to public" msgstr "" -#: options/preferences.py:653 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." msgstr "" -#: options/preferences.py:654 +#: options/preferences.py msgid "Top teams cutoff" msgstr "" -#: options/preferences.py:662 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:663 +#: options/preferences.py msgid "Release speaker tab to public" msgstr "" -#: options/preferences.py:671 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." msgstr "" -#: options/preferences.py:672 +#: options/preferences.py msgid "Top speakers cutoff" msgstr "" -#: options/preferences.py:680 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:681 +#: options/preferences.py msgid "Release replies tab to public" msgstr "" -#: options/preferences.py:689 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." msgstr "" -#: options/preferences.py:690 +#: options/preferences.py msgid "Top replies cutoff" msgstr "" -#: options/preferences.py:716 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." msgstr "" -#: options/preferences.py:719 +#: options/preferences.py msgid "Release motions tab to public" msgstr "" -#: options/preferences.py:727 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" msgstr "" -#: options/preferences.py:728 +#: options/preferences.py msgid "Release adjudicator tab to public" msgstr "" -#: options/preferences.py:736 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" msgstr "" -#: options/preferences.py:737 +#: options/preferences.py msgid "Adjudicator tab displays" msgstr "" -#: options/preferences.py:741 +#: options/preferences.py msgid "Only shows base score" msgstr "" -#: options/preferences.py:742 +#: options/preferences.py msgid "Only shows final score" msgstr "合計点数のみ表示" -#: options/preferences.py:743 +#: options/preferences.py msgid "Shows base, final, and per-round scores" msgstr "" -#: options/preferences.py:750 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." msgstr "" -#: options/preferences.py:751 +#: options/preferences.py msgid "Release ballots to public" msgstr "" -#: options/preferences.py:759 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" msgstr "" -#: options/preferences.py:760 +#: options/preferences.py msgid "Release all round results to public" msgstr "" -#: options/preferences.py:768 +#: options/preferences.py msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." msgstr "" -#: options/preferences.py:769 +#: options/preferences.py msgid "Release ballots through private URLs" msgstr "" -#: options/preferences.py:776 options/templates/preferences_index.html:94 +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" msgstr "" -#: options/preferences.py:782 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" msgstr "" -#: options/preferences.py:783 +#: options/preferences.py msgid "Ballot submissions from adjudicators" msgstr "" -#: options/preferences.py:787 options/preferences.py:801 +#: options/preferences.py msgid "Disabled (tab staff only)" msgstr "" -#: options/preferences.py:788 options/preferences.py:802 +#: options/preferences.py msgid "Use private URLs" msgstr "Private URLを使用する" -#: options/preferences.py:789 options/preferences.py:803 +#: options/preferences.py msgid "Use publicly accessible form" msgstr "" -#: options/preferences.py:796 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" msgstr "" -#: options/preferences.py:797 +#: options/preferences.py msgid "Feedback submissions from participants" msgstr "" -#: options/preferences.py:810 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" msgstr "" -#: options/preferences.py:811 +#: options/preferences.py msgid "Require password for submission" msgstr "" -#: options/preferences.py:819 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" msgstr "" -#: options/preferences.py:820 +#: options/preferences.py msgid "Password for public submission" msgstr "公開バロット入力用のパスワード" -#: options/preferences.py:828 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" msgstr "" -#: options/preferences.py:829 +#: options/preferences.py msgid "Bypass double checking" msgstr "" -#: options/preferences.py:837 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." msgstr "" -#: options/preferences.py:838 +#: options/preferences.py msgid "Enforce blind confirmations" msgstr "" -#: options/preferences.py:846 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." msgstr "" -#: options/preferences.py:849 +#: options/preferences.py msgid "Assistant user access" msgstr "" -#: options/preferences.py:854 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" msgstr "" -#: options/preferences.py:855 +#: options/preferences.py msgid "Just results entry and draw display" msgstr "" -#: options/preferences.py:856 +#: options/preferences.py msgid "Only results entry" msgstr "" -#: options/preferences.py:862 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." msgstr "" -#: options/preferences.py:863 +#: options/preferences.py msgid "Participant self-checkin" msgstr "" -#: options/preferences.py:871 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" msgstr "" -#: options/preferences.py:874 +#: options/preferences.py msgid "Check-In Window (People)" msgstr "" -#: options/preferences.py:880 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" msgstr "" -#: options/preferences.py:883 +#: options/preferences.py msgid "Check-In Window (Rooms)" msgstr "" -#: options/preferences.py:889 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" msgstr "" -#: options/preferences.py:890 +#: options/preferences.py msgid "Ballot Digit Checks" msgstr "" -#: options/preferences.py:898 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:899 +#: options/preferences.py msgid "Score return location" msgstr "" -#: options/preferences.py:907 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:908 +#: options/preferences.py msgid "Feedback return location" msgstr "" -#: options/preferences.py:916 +#: options/preferences.py msgid "Lets debates have their status as postponed, as to not block draw generation." msgstr "" -#: options/preferences.py:917 +#: options/preferences.py msgid "Enable postponements" msgstr "" -#: options/preferences.py:925 +#: options/preferences.py msgid "Have each voting adjudicator submit a separate ballot." msgstr "" -#: options/preferences.py:926 +#: options/preferences.py msgid "Individual voting ballots" msgstr "" -#: options/preferences.py:933 options/templates/preferences_index.html:99 +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" msgstr "" -#: options/preferences.py:939 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" msgstr "" -#: options/preferences.py:940 +#: options/preferences.py msgid "Enable public view of participants list" msgstr "" -#: options/preferences.py:948 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" msgstr "" -#: options/preferences.py:949 +#: options/preferences.py msgid "Enable public view of institutions list" msgstr "" -#: options/preferences.py:957 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" msgstr "" -#: options/preferences.py:958 +#: options/preferences.py msgid "Enable public view of diversity info" msgstr "" -#: options/preferences.py:966 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." msgstr "" -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of the checkin statuses" msgstr "" -#: options/preferences.py:977 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" msgstr "" -#: options/preferences.py:978 +#: options/preferences.py msgid "Show break categories on participants page" msgstr "" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" msgstr "" -#: options/preferences.py:987 +#: options/preferences.py msgid "Show pre-allocated sides to public" msgstr "" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing released draws" msgstr "" -#: options/preferences.py:996 +#: options/preferences.py msgid "Enable public view of draw" msgstr "" -#: options/preferences.py:1000 +#: options/preferences.py msgid "Disabled" msgstr "" -#: options/preferences.py:1001 +#: options/preferences.py msgid "Show a single page for the current round's draw" msgstr "" -#: options/preferences.py:1002 +#: options/preferences.py msgid "Show individual pages for all released draws" msgstr "" -#: options/preferences.py:1009 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" msgstr "" -#: options/preferences.py:1010 +#: options/preferences.py msgid "Enable public view of results" msgstr "" -#: options/preferences.py:1018 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" msgstr "" -#: options/preferences.py:1019 +#: options/preferences.py msgid "Enable public view of motions" msgstr "" -#: options/preferences.py:1027 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" msgstr "" -#: options/preferences.py:1028 +#: options/preferences.py msgid "Enable public view of team standings" msgstr "" -#: options/preferences.py:1036 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" msgstr "" -#: options/preferences.py:1037 +#: options/preferences.py msgid "Enable public record pages" msgstr "" -#: options/preferences.py:1045 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1046 +#: options/preferences.py msgid "Release team breaks to public" msgstr "" -#: options/preferences.py:1054 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1055 +#: options/preferences.py msgid "Release adjudicators break to public" msgstr "" -#: options/preferences.py:1063 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" msgstr "" -#: options/preferences.py:1064 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" msgstr "" -#: options/preferences.py:1072 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." msgstr "" -#: options/preferences.py:1073 +#: options/preferences.py msgid "Tournament staff" msgstr "" -#: options/preferences.py:1083 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" msgstr "" -#: options/preferences.py:1084 +#: options/preferences.py msgid "Welcome message" msgstr "" -#: options/preferences.py:1093 options/templates/preferences_index.html:104 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" msgstr "" -#: options/preferences.py:1099 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" msgstr "" -#: options/preferences.py:1100 +#: options/preferences.py msgid "Show splitting adjudicators" msgstr "" -#: options/preferences.py:1108 +#: options/preferences.py msgid "Whether and how to use code names for teams" msgstr "" -#: options/preferences.py:1109 +#: options/preferences.py msgid "Team code names" msgstr "" -#: options/preferences.py:1114 +#: options/preferences.py msgid "Do not use code names" msgstr "" -#: options/preferences.py:1115 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" msgstr "" -#: options/preferences.py:1116 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" msgstr "" -#: options/preferences.py:1118 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" msgstr "" -#: options/preferences.py:1120 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" msgstr "" -#: options/preferences.py:1126 +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" msgstr "" -#: options/preferences.py:1127 +#: options/preferences.py msgid "Show emoji" msgstr "" -#: options/preferences.py:1135 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" msgstr "" -#: options/preferences.py:1136 +#: options/preferences.py msgid "Show team institutions" msgstr "" -#: options/preferences.py:1144 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" msgstr "" -#: options/preferences.py:1145 +#: options/preferences.py msgid "Show adjudicator institutions" msgstr "" -#: options/preferences.py:1153 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" msgstr "" -#: options/preferences.py:1154 +#: options/preferences.py msgid "Show speakers in draw" msgstr "" -#: options/preferences.py:1161 options/templates/preferences_index.html:109 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" msgstr "" -#: options/preferences.py:1167 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Reply-to name" msgstr "" -#: options/preferences.py:1176 +#: options/preferences.py msgid "The email address for handling replies" msgstr "" -#: options/preferences.py:1177 +#: options/preferences.py msgid "Reply-to address" msgstr "" -#: options/preferences.py:1185 +#: options/preferences.py msgid "A secret key to accept email status events" msgstr "" -#: options/preferences.py:1186 +#: options/preferences.py msgid "Email status secret key" msgstr "" -#: options/preferences.py:1196 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "" -#: options/preferences.py:1197 +#: options/preferences.py msgid "Ballot receipts" msgstr "" -#: options/preferences.py:1205 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "" -#: options/preferences.py:1207 +#: options/preferences.py msgid "Ballot receipt subject line" msgstr "" -#: options/preferences.py:1215 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "" -#: options/preferences.py:1216 +#: options/preferences.py msgid "Ballot receipt message" msgstr "" -#: options/preferences.py:1232 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1233 +#: options/preferences.py msgid "Team points subject line" msgstr "" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team points message" msgstr "" -#: options/preferences.py:1250 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1251 +#: options/preferences.py msgid "Adjudicator draw subject line" msgstr "" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1259 +#: options/preferences.py msgid "Adjudicator draw message" msgstr "" -#: options/preferences.py:1268 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." msgstr "" -#: options/preferences.py:1269 +#: options/preferences.py msgid "Team draw subject line" msgstr "" -#: options/preferences.py:1276 options/preferences.py:1294 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1277 options/preferences.py:1295 +#: options/preferences.py msgid "Private URL notification message" msgstr "" -#: options/preferences.py:1286 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1287 +#: options/preferences.py msgid "Private URL notification subject line" msgstr "" -#: options/preferences.py:1308 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1309 +#: options/preferences.py msgid "Motion release notification subject line" msgstr "" -#: options/preferences.py:1316 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1317 +#: options/preferences.py msgid "Motion release notification message" msgstr "" -#: options/preferences.py:1325 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1326 +#: options/preferences.py msgid "Team registration notification subject line" msgstr "" -#: options/preferences.py:1333 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1334 +#: options/preferences.py msgid "Team registration notification message" msgstr "" -#: options/preferences.py:1343 options/templates/preferences_index.html:78 +#: options/preferences.py options/templates/preferences_index.html msgid "Motions" msgstr "モーション" -#: options/preferences.py:1349 +#: options/preferences.py msgid "If checked, ballots require a motion to be entered" msgstr "" -#: options/preferences.py:1350 +#: options/preferences.py msgid "Enable motions" msgstr "" -#: options/preferences.py:1358 +#: options/preferences.py msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" msgstr "" -#: options/preferences.py:1359 +#: options/preferences.py msgid "Ballot Hide Motions" msgstr "" -#: options/preferences.py:1367 +#: options/preferences.py msgid "Enables the motion veto field on ballots, to track veto statistics" msgstr "" -#: options/preferences.py:1368 +#: options/preferences.py msgid "Motion vetoes" msgstr "" -#: options/preferences.py:1376 +#: options/preferences.py msgid "If showing results to public, show which motions were selected in the record" msgstr "" -#: options/preferences.py:1377 +#: options/preferences.py msgid "Show motions in results" msgstr "" -#: options/preferences.py:1385 +#: options/preferences.py msgid "Order in which are listed by round in the public view" msgstr "" -#: options/preferences.py:1386 +#: options/preferences.py msgid "Order to display motions" msgstr "" -#: options/preferences.py:1390 +#: options/preferences.py msgid "Earliest round first" msgstr "" -#: options/preferences.py:1391 +#: options/preferences.py msgid "Latest round first" msgstr "" -#: options/preferences.py:1398 +#: options/preferences.py msgid "Whether motions can be reused from one round to another." msgstr "" -#: options/preferences.py:1399 +#: options/preferences.py msgid "Allow motion reuse" msgstr "" -#: options/preferences.py:1406 options/templates/preferences_index.html:114 +#: options/preferences.py options/templates/preferences_index.html msgid "Global Settings" msgstr "" -#: options/preferences.py:1412 +#: options/preferences.py msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." msgstr "" -#: options/preferences.py:1413 +#: options/preferences.py msgid "Enable API access" msgstr "" -#: options/preferences.py:1421 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1422 +#: options/preferences.py msgid "Assistant account creation key" msgstr "" -#: options/preferences.py:1431 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1433 +#: options/preferences.py msgid "Administrator account creation key" msgstr "" -#: options/presets.py:32 options/presets.py:324 +#: options/presets.py msgid "Public Information Options" msgstr "" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" msgstr "" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" msgstr "" -#: options/presets.py:74 +#: options/presets.py msgid "Australs Rules" msgstr "" -#: options/presets.py:75 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:114 +#: options/presets.py msgid "British Parliamentary Rules" msgstr "" -#: options/presets.py:115 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." msgstr "" -#: options/presets.py:157 +#: options/presets.py msgid "Canadian Parliamentary Rules" msgstr "" -#: options/presets.py:159 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." msgstr "" -#: options/presets.py:182 +#: options/presets.py msgid "Australian Easters Rules" msgstr "" -#: options/presets.py:184 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:202 +#: options/presets.py msgid "2 vs 2 Impromptu" msgstr "" -#: options/presets.py:204 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." msgstr "" -#: options/presets.py:229 +#: options/presets.py msgid "3 vs 3 Prepared" msgstr "" -#: options/presets.py:231 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." msgstr "" -#: options/presets.py:258 +#: options/presets.py msgid "UADC Rules" msgstr "" -#: options/presets.py:260 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:296 +#: options/presets.py msgid "WSDC Rules" msgstr "" -#: options/presets.py:298 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:326 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "" -#: options/presets.py:338 +#: options/presets.py msgid "Tab Release Options" msgstr "" -#: options/presets.py:340 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" msgstr "" -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html msgid "Configuration" msgstr "" -#: options/templates/preferences_index.html:11 +#: options/templates/preferences_index.html #, python-format msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." msgstr "" -#: options/templates/preferences_index.html:24 +#: options/templates/preferences_index.html #, python-format msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." msgstr "" -#: options/templates/preferences_index.html:35 +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." msgstr "" -#: options/templates/preferences_index.html:54 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" msgstr "" -#: options/templates/preferences_index.html:59 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" msgstr "" -#: options/templates/preferences_index.html:64 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" msgstr "" -#: options/templates/preferences_index.html:69 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" msgstr "" -#: options/templates/preferences_index.html:74 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" msgstr "" -#: options/templates/preferences_index.html:79 +#: options/templates/preferences_index.html msgid "How and where are motions used" msgstr "" -#: options/templates/preferences_index.html:90 +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" msgstr "" -#: options/templates/preferences_index.html:95 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" msgstr "" -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" msgstr "" -#: options/templates/preferences_index.html:105 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" msgstr "" -#: options/templates/preferences_index.html:110 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" msgstr "" -#: options/templates/preferences_index.html:115 +#: options/templates/preferences_index.html msgid "Settings which can affect all tournaments on the site" msgstr "" -#: options/templates/preferences_index.html:127 +#: options/templates/preferences_index.html msgid "Manually Set Current Round" msgstr "" -#: options/templates/preferences_index.html:128 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." msgstr "" -#: options/templates/preferences_index.html:132 -msgid "Set Round Weights" +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: options/templates/preferences_index.html:133 +#: options/templates/preferences_index.html msgid "Rounds can be weighted so that certain rounds are worth more team points." msgstr "" -#: options/templates/preferences_index.html:140 +#: options/templates/preferences_index.html msgid "Presets" msgstr "" -#: options/templates/preferences_index.html:141 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." msgstr "" -#: options/templates/preferences_index.html:152 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" msgstr "" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" msgstr "" -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" msgstr "" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" msgstr "" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" msgstr "" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" msgstr "" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" msgstr "" -#: options/views.py:65 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." msgstr "" -#: options/views.py:111 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." msgstr "" diff --git a/tabbycat/participants/locale/ja/LC_MESSAGES/django.po b/tabbycat/participants/locale/ja/LC_MESSAGES/django.po index a61f7ccf39b..f5724295944 100644 --- a/tabbycat/participants/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -18,953 +18,940 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 942\n" -#: participants/admin.py:96 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" msgstr "" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." msgstr[0] "" -#: participants/admin.py:152 participants/admin.py:233 -msgid "Delete URL key" +#: participants/admin.py +msgid "Reset emoji" msgstr "" -#: participants/admin.py:160 +#: participants/admin.py #, python-format msgid "%(count)d team had their emoji reset." msgid_plural "%(count)d teams had their emojis reset." msgstr[0] "" -#: participants/admin.py:164 -msgid "Reset emoji" +#: participants/admin.py +msgid "Reset code name" msgstr "" -#: participants/admin.py:170 +#: participants/admin.py #, python-format msgid "%(count)d team had their code name reset." msgid_plural "%(count)d teams had their code names reset." msgstr[0] "" -#: participants/admin.py:174 -msgid "Reset code name" -msgstr "" - -#: participants/admin.py:228 +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." msgstr[0] "" -#: participants/apps.py:7 participants/views.py:41 +#: participants/apps.py participants/views.py msgid "Participants" msgstr "参加者" -#: participants/models.py:21 participants/models.py:37 -#: participants/models.py:66 participants/models.py:96 +#: participants/models.py msgid "name" msgstr "" -#: participants/models.py:24 participants/models.py:45 +#: participants/models.py msgid "region" msgstr "" -#: participants/models.py:25 +#: participants/models.py msgid "regions" msgstr "" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:39 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" msgstr "" -#: participants/models.py:41 +#: participants/models.py msgid "code" msgstr "" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:43 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" msgstr "" -#: participants/models.py:55 participants/models.py:155 -#: participants/models.py:353 +#: participants/models.py msgid "institution" msgstr "インスティチューション" -#: participants/models.py:56 +#: participants/models.py msgid "institutions" msgstr "" -#: participants/models.py:64 participants/models.py:157 -#: participants/models.py:356 +#: participants/models.py msgid "tournament" msgstr "トーナメント" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:68 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" msgstr "" -#: participants/models.py:70 +#: participants/models.py msgid "slug" msgstr "スラグ" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:72 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" msgstr "" -#: participants/models.py:74 +#: participants/models.py msgid "sequence number" msgstr "" -#: participants/models.py:75 +#: participants/models.py msgid "The order in which the categories are displayed" msgstr "" -#: participants/models.py:77 +#: participants/models.py msgid "limit" msgstr "制限" -#: participants/models.py:78 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: participants/models.py:80 +#: participants/models.py msgid "public" msgstr "" -#: participants/models.py:81 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" msgstr "" -#: participants/models.py:87 +#: participants/models.py msgid "speaker category" msgstr "" -#: participants/models.py:88 participants/models.py:330 +#: participants/models.py msgid "speaker categories" msgstr "" -#: participants/models.py:98 +#: participants/models.py msgid "email address" msgstr "" -#: participants/models.py:100 +#: participants/models.py msgid "phone" msgstr "" -#: participants/models.py:102 +#: participants/models.py msgid "anonymous" msgstr "匿名" -#: participants/models.py:103 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" msgstr "" -#: participants/models.py:106 +#: participants/models.py +msgid "code name" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py msgid "URL key" msgstr "" -#: participants/models.py:111 +#: participants/models.py msgid "male" msgstr "男性" -#: participants/models.py:112 +#: participants/models.py msgid "female" msgstr "" -#: participants/models.py:113 +#: participants/models.py msgid "other" msgstr "" -#: participants/models.py:115 +#: participants/models.py msgid "gender" msgstr "" -#: participants/models.py:116 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" msgstr "" -#: participants/models.py:118 +#: participants/models.py msgid "pronoun" msgstr "" -#: participants/models.py:119 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" msgstr "" -#: participants/models.py:122 +#: participants/models.py msgid "person" msgstr "人" -#: participants/models.py:123 +#: participants/models.py msgid "persons" msgstr "" -#: participants/models.py:138 +#: participants/models.py msgid "full name/suffix" msgstr "" -#: participants/models.py:139 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:141 +#: participants/models.py msgid "short name/suffix" msgstr "" -#: participants/models.py:142 +#: participants/models.py msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:144 -msgid "code name" -msgstr "" - -#: participants/models.py:145 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" msgstr "" -#: participants/models.py:148 +#: participants/models.py msgid "short name" msgstr "" -#: participants/models.py:149 +#: participants/models.py msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:151 +#: participants/models.py msgid "long name" msgstr "" -#: participants/models.py:152 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:159 +#: participants/models.py msgid "Uses institutional prefix" msgstr "" -#: participants/models.py:160 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" msgstr "" -#: participants/models.py:162 +#: participants/models.py msgid "break categories" msgstr "" -#: participants/models.py:167 participants/models.py:364 +#: participants/models.py msgid "institution conflicts" msgstr "大学・団体コンフリクト" -#: participants/models.py:178 +#: participants/models.py msgid "none" msgstr "" -#: participants/models.py:179 +#: participants/models.py msgid "swing" msgstr "" -#: participants/models.py:180 +#: participants/models.py msgid "composite" msgstr "" -#: participants/models.py:181 +#: participants/models.py msgid "bye" msgstr "" -#: participants/models.py:184 +#: participants/models.py msgid "type" msgstr "タイプ" -#: participants/models.py:188 +#: participants/models.py msgid "emoji" msgstr "絵文字" -#: participants/models.py:202 participants/models.py:328 +#: participants/models.py msgid "team" msgstr "チーム" -#: participants/models.py:203 +#: participants/models.py msgid "teams" msgstr "チーム" -#: participants/models.py:311 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." msgstr "" -#: participants/models.py:313 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:315 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:333 +#: participants/models.py msgid "speaker" msgstr "" -#: participants/models.py:334 +#: participants/models.py msgid "speakers" msgstr "" -#: participants/models.py:357 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" msgstr "" -#: participants/models.py:359 +#: participants/models.py msgid "base score" msgstr "" -#: participants/models.py:368 +#: participants/models.py msgid "team conflicts" msgstr "" -#: participants/models.py:372 +#: participants/models.py msgid "adjudicator conflicts" msgstr "" -#: participants/models.py:375 +#: participants/models.py msgid "always trainee" msgstr "" -#: participants/models.py:376 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" msgstr "" -#: participants/models.py:378 +#: participants/models.py msgid "breaking" msgstr "" -#: participants/models.py:380 +#: participants/models.py msgid "independent" msgstr "" -#: participants/models.py:382 +#: participants/models.py msgid "adjudication core" msgstr "" -#: participants/models.py:391 +#: participants/models.py msgid "adjudicator" msgstr "ジャッジ" -#: participants/models.py:392 +#: participants/models.py msgid "adjudicators" msgstr "" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" msgstr "" -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" msgstr "" -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" msgstr "" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" msgstr "" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" msgstr "" -#: participants/templates/adjudicator_registration_card.html:27 -#: participants/templates/team_registration_card.html:89 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:31 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" msgstr "" -#: participants/templates/adjudicator_registration_card.html:36 -#: participants/templates/team_registration_card.html:98 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:43 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." msgstr "" -#: participants/templates/adjudicator_registration_card.html:50 -#: participants/templates/team_registration_card.html:109 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:52 -#: participants/templates/team_registration_card.html:111 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr "" -#: participants/templates/adjudicator_registration_card.html:54 -#: participants/templates/adjudicator_registration_card.html:62 -#: participants/templates/adjudicator_registration_card.html:74 -#: participants/templates/adjudicator_registration_card.html:84 -#: participants/templates/team_registration_card.html:58 -#: participants/templates/team_registration_card.html:70 -#: participants/templates/team_registration_card.html:79 -#: participants/templates/team_registration_card.html:113 -#: participants/templates/team_registration_card.html:122 -#: participants/templates/team_registration_card.html:133 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" msgstr "" -#: participants/templates/adjudicator_registration_card.html:58 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:60 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:71 -#: participants/templates/adjudicator_registration_card.html:82 -#: participants/templates/team_registration_card.html:56 -#: participants/templates/team_registration_card.html:68 -#: participants/templates/team_registration_card.html:77 -#: participants/templates/team_registration_card.html:120 -#: participants/templates/team_registration_card.html:131 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr "" -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/team_registration_card.html:118 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:80 -#: participants/templates/team_registration_card.html:129 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" msgstr "" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:14 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." msgstr "" #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:21 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:33 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:41 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:47 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" msgstr "" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "チーム:" -#: participants/templates/current_round/common.html:28 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" msgstr "" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" msgstr "" -#: participants/templates/current_round/common.html:44 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." msgstr "" -#: participants/templates/current_round/common.html:54 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." msgstr "" -#: participants/templates/current_round/common.html:57 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "" -#: participants/templates/current_round/common.html:61 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "" -#: participants/templates/current_round/common.html:69 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." msgstr "" -#: participants/templates/current_round/round_adj.html:14 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:18 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:24 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:28 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:36 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:40 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:46 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:50 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:85 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:89 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:95 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:99 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:107 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:111 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:117 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:121 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:129 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:133 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:139 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:143 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:39 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:43 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:56 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:60 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:66 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:70 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." msgstr "" -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" msgstr "" -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" msgstr "" -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:38 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" msgstr "" -#: participants/templates/feedback_progress_panel.html:46 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:53 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." msgstr "" -#: participants/templates/in_this_round.html:9 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" msgstr "" -#: participants/templates/in_this_round.html:13 +#: participants/templates/in_this_round.html msgid "In This Round" msgstr "" -#: participants/templates/in_this_round.html:16 +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" msgstr "" -#: participants/templates/in_this_round.html:23 +#: participants/templates/in_this_round.html msgid "Room TBA" msgstr "" -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:39 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:54 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." msgstr[0] "" -#: participants/templates/in_this_round.html:60 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." msgstr "" -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:79 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:91 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." msgstr "" -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" msgstr "参加者リスト" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" msgstr "" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." msgstr "" -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" msgstr "" -#: participants/templates/participants_subnav.html:26 participants/views.py:135 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" msgstr "コード名" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" msgstr "" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" msgstr "" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." msgstr "" -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." msgstr "" -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" msgstr "" -#: participants/templates/team_registration_card.html:16 +#: participants/templates/team_registration_card.html msgid "Team name:" msgstr "" -#: participants/templates/team_registration_card.html:21 +#: participants/templates/team_registration_card.html msgid "Full team name:" msgstr "" -#: participants/templates/team_registration_card.html:25 +#: participants/templates/team_registration_card.html msgid "Short team name:" msgstr "" -#: participants/templates/team_registration_card.html:32 +#: participants/templates/team_registration_card.html msgid "Code name:" msgstr "" -#: participants/templates/team_registration_card.html:36 +#: participants/templates/team_registration_card.html msgid "No code name assigned" msgstr "" -#: participants/templates/team_registration_card.html:42 +#: participants/templates/team_registration_card.html msgid "Emoji:" msgstr "" -#: participants/templates/team_registration_card.html:46 +#: participants/templates/team_registration_card.html msgid "No emoji assigned" msgstr "" -#: participants/templates/team_registration_card.html:54 +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "" -#: participants/templates/team_registration_card.html:66 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" msgstr "" -#: participants/templates/team_registration_card.html:75 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" msgstr "" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" msgstr "" -#: participants/views.py:46 +#: participants/views.py msgid "Adjudicators" msgstr "ジャッジ" -#: participants/views.py:55 +#: participants/views.py msgid "Speakers" msgstr "スピーカー" -#: participants/views.py:86 +#: participants/views.py msgid "Institutions" msgstr "大学・団体" -#: participants/views.py:102 +#: participants/views.py msgid "Code" msgstr "" -#: participants/views.py:103 +#: participants/views.py msgid "Full name" msgstr "" -#: participants/views.py:105 +#: participants/views.py msgid "Region" msgstr "" -#: participants/views.py:107 +#: participants/views.py msgid "Teams" msgstr "チーム" -#: participants/views.py:107 +#: participants/views.py msgid "Number of teams" msgstr "" -#: participants/views.py:109 +#: participants/views.py msgid "Adjs" msgstr "" -#: participants/views.py:110 +#: participants/views.py msgid "Number of adjudicators, excluding independents" msgstr "" -#: participants/views.py:112 +#: participants/views.py msgid "IAs" msgstr "" -#: participants/views.py:113 +#: participants/views.py msgid "Number of independent adjudicators" msgstr "" -#: participants/views.py:143 +#: participants/views.py msgid "Code name" msgstr "" -#: participants/views.py:163 +#: participants/views.py msgid "Team Registration" msgstr "" -#: participants/views.py:231 +#: participants/views.py msgid "Results" msgstr "結果" -#: participants/views.py:239 participants/views.py:264 +#: participants/views.py #, python-format msgid "Record for %(name)s" msgstr "" -#: participants/views.py:261 +#: participants/views.py msgid "Previous Rounds" msgstr "" -#: participants/views.py:352 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" msgstr[0] "" -#: participants/views.py:358 +#: participants/views.py msgid "No changes were made to the categories." msgstr "" -#: participants/views.py:371 +#: participants/views.py msgid "Speaker Category Eligibility" msgstr "" diff --git a/tabbycat/printing/locale/ja/LC_MESSAGES/django.po b/tabbycat/printing/locale/ja/LC_MESSAGES/django.po index 31051c45ec7..ffe2b39d011 100644 --- a/tabbycat/printing/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:18\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -18,109 +18,108 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" msgstr "フィードバックフォーム" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" msgstr "" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." msgstr "チームのフィードバックには質問はありません。" -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." msgstr "ジャッジのフィードバックには質問はありません。" -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." msgstr "" -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" msgstr "" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "Ctrl+PでPDFとして保存ができます。まだ途中" -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" msgstr "" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" msgstr "" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" msgstr "" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" msgstr "" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" msgstr "" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" msgstr "" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" msgstr "表示できるスコアシートがありません。……もしかすると、ラウンドがまだ設定されていないのかもしれません。" -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" msgstr "" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "" -#: printing/templates/scoresheet_list.html:47 +#: printing/templates/scoresheet_list.html msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." msgstr "" -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" msgstr "" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." msgstr "" -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" msgstr "合計点数" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" msgstr "" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "チーム" diff --git a/tabbycat/privateurls/locale/ja/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/ja/LC_MESSAGES/django.po index b1e17521824..6efdcb7ebf9 100644 --- a/tabbycat/privateurls/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:50\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -18,167 +18,160 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" msgstr "プライベートURL管理" -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:145 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" msgstr "" -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." msgstr "" -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" msgstr "" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." msgstr "" -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." msgstr "" -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." msgstr "プライベートURLが割り当てられていません。" -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" msgstr "URLを表示する" -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." msgstr "" -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." msgstr "このボタンはまだプライベートURLを保有していない参加者分を作成します。" -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." msgstr "すべての参加者にプライベートURLが割り当てられています。" -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" msgstr "" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" msgstr "" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" msgstr "" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." msgstr "" -#: privateurls/templates/public_url_landing.html:62 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Submit Ballot for %(round)s" msgstr "" -#: privateurls/templates/public_url_landing.html:65 -msgid "There are no current rounds" -msgstr "" - -#: privateurls/templates/public_url_landing.html:71 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" msgstr "" -#: privateurls/templates/public_url_landing.html:84 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" msgstr "" -#: privateurls/views.py:63 privateurls/views.py:164 +#: privateurls/views.py msgid "no URL" msgstr "URL なし" -#: privateurls/views.py:76 +#: privateurls/views.py msgid "URL" msgstr "" -#: privateurls/views.py:87 +#: privateurls/views.py msgid "Speakers" msgstr "スピーカー" -#: privateurls/views.py:97 +#: privateurls/views.py msgid "Adjudicators" msgstr "ジャッジ" -#: privateurls/views.py:119 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." msgstr "" -#: privateurls/views.py:126 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." msgstr[0] "" -#: privateurls/views.py:131 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." msgstr[0] "" -#: privateurls/views.py:172 +#: privateurls/views.py msgid "URL Key" msgstr "" -#: privateurls/views.py:181 +#: privateurls/views.py msgid "Debates" msgstr "" diff --git a/tabbycat/results/locale/ja/LC_MESSAGES/django.po b/tabbycat/results/locale/ja/LC_MESSAGES/django.po index bfd78dfb15a..d7a231e4593 100644 --- a/tabbycat/results/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-07-02 13:44\n" "Last-Translator: philip_tc\n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -18,1072 +18,1065 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 948\n" -#: results/admin.py:44 +#: results/admin.py +msgid "Resave results" +msgstr "結果を保存" + +#: results/admin.py #, python-format msgid "Resaved results for %(count)d ballot submission." msgid_plural "Resaved results for %(count)d ballot submissions." msgstr[0] "" -#: results/admin.py:47 -msgid "Resave results" -msgstr "" - -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:158 +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" msgstr "結果" -#: results/forms.py:39 +#: results/forms.py msgid "Tournament password" -msgstr "" +msgstr "大会のパスワード" -#: results/forms.py:45 +#: results/forms.py msgid "That password isn't correct." msgstr "パスワードが正しくありません。" -#: results/forms.py:77 +#: results/forms.py msgid "Please enter a whole number." msgstr "整数を入力してください。" -#: results/forms.py:79 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." msgstr "%sの倍数を入力してください。" -#: results/forms.py:166 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." msgstr "" -#: results/forms.py:173 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." msgstr "" -#: results/forms.py:302 results/forms.py:336 +#: results/forms.py msgid "---------" msgstr "" -#: results/forms.py:304 results/forms.py:306 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" msgstr "" -#: results/forms.py:323 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" msgstr "%(side)sのVetoモーション" -#: results/forms.py:332 results/forms.py:901 +#: results/forms.py #, python-format msgid "%(team)s (%(side)s)" msgstr "" -#: results/forms.py:335 +#: results/forms.py msgid "Winner" -msgstr "" +msgstr "優勝者" -#: results/forms.py:489 +#: results/forms.py msgid "Mark as a duplicate speech" msgstr "" -#: results/forms.py:549 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." msgstr "%(speaker)sは%(team)sのスピーカーではありません。" -#: results/forms.py:563 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." msgstr[0] "" -#: results/forms.py:580 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." msgstr "最後のコンストラクティブスピーカーはリプライスピーカーと同じであってはならない。" -#: results/forms.py:587 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." msgstr "" -#: results/forms.py:719 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." msgstr "" -#: results/forms.py:724 +#: results/forms.py msgid "The declared winner does not correspond to the team with the highest score." msgstr "" -#: results/forms.py:733 +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" msgstr "" -#: results/forms.py:743 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:846 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:851 +#: results/forms.py #, python-format msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:859 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:921 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." msgstr "" -#: results/forms.py:964 +#: results/forms.py #, python-format msgid "There must be exactly %(n)d team advancing." msgid_plural "There must be exactly %(n)d teams advancing." msgstr[0] "" -#: results/forms.py:1007 +#: results/forms.py msgid "There must be exactly 1 team advancing." msgstr "" -#: results/models.py:33 +#: results/models.py msgid "Tab room" msgstr "" -#: results/models.py:34 +#: results/models.py msgid "Public" msgstr "" -#: results/models.py:38 +#: results/models.py msgid "timestamp" msgstr "タイムスタンプ" -#: results/models.py:40 +#: results/models.py msgid "version" -msgstr "" +msgstr "バージョン" -#: results/models.py:42 +#: results/models.py msgid "submitter type" msgstr "" -#: results/models.py:44 +#: results/models.py msgid "confirmed" msgstr "" -#: results/models.py:48 +#: results/models.py msgid "from private URL" msgstr "" -#: results/models.py:51 +#: results/models.py msgid "from participant" msgstr "" -#: results/models.py:56 +#: results/models.py msgid "submitter" msgstr "" -#: results/models.py:59 +#: results/models.py msgid "confirmer" msgstr "" -#: results/models.py:61 +#: results/models.py msgid "confirm timestamp" msgstr "" -#: results/models.py:63 +#: results/models.py msgid "IP address" msgstr "IPアドレス" -#: results/models.py:103 +#: results/models.py msgid "A tab room ballot must have a user associated." msgstr "" -#: results/models.py:111 +#: results/models.py msgid "debate" msgstr "ディベート" -#: results/models.py:113 +#: results/models.py msgid "motion" msgstr "モーション" -#: results/models.py:115 +#: results/models.py msgid "discarded" msgstr "破棄済み" -#: results/models.py:117 +#: results/models.py msgid "single adjudicator" msgstr "" -#: results/models.py:118 +#: results/models.py msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." msgstr "" -#: results/models.py:123 results/models.py:228 results/models.py:267 -#: results/models.py:305 results/models.py:347 +#: results/models.py msgid "ballot submission" msgstr "" -#: results/models.py:124 +#: results/models.py msgid "ballot submissions" msgstr "" -#: results/models.py:143 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" msgstr "" -#: results/models.py:150 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" msgstr "" -#: results/models.py:230 results/models.py:269 +#: results/models.py msgid "debate adjudicator" msgstr "ディベートのジャッジ" -#: results/models.py:232 results/models.py:271 results/models.py:307 -#: results/models.py:349 +#: results/models.py msgid "debate team" -msgstr "" +msgstr "ディベートチーム" -#: results/models.py:235 results/models.py:312 +#: results/models.py msgid "win" msgstr "勝ち" -#: results/models.py:237 results/models.py:314 +#: results/models.py msgid "margin" msgstr "マージン" -#: results/models.py:239 results/models.py:272 results/models.py:316 -#: results/models.py:352 +#: results/models.py msgid "score" msgstr "点数" -#: results/models.py:244 +#: results/models.py msgid "team score by adjudicator" msgstr "" -#: results/models.py:245 +#: results/models.py msgid "team scores by adjudicator" msgstr "" -#: results/models.py:260 results/models.py:294 +#: results/models.py msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." msgstr "" -#: results/models.py:273 results/models.py:353 +#: results/models.py msgid "position" msgstr "ポジション" -#: results/models.py:279 +#: results/models.py msgid "speaker score by adjudicator" msgstr "" -#: results/models.py:280 +#: results/models.py msgid "speaker scores by adjudicator" msgstr "" -#: results/models.py:310 +#: results/models.py msgid "points" -msgstr "" +msgstr "ポイント" -#: results/models.py:318 +#: results/models.py msgid "votes given" msgstr "" -#: results/models.py:320 +#: results/models.py msgid "votes possible" msgstr "" -#: results/models.py:324 -msgid "team score" +#: results/models.py +msgid "has ghost score" msgstr "" -#: results/models.py:325 +#: results/models.py +msgid "team score" +msgstr "チームスコア" + +#: results/models.py msgid "team scores" -msgstr "" +msgstr "チームスコア" -#: results/models.py:351 +#: results/models.py msgid "speaker" -msgstr "" +msgstr "スピーカー" -#: results/models.py:355 +#: results/models.py msgid "ghost" msgstr "" -#: results/models.py:356 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." msgstr "" -#: results/models.py:365 +#: results/models.py msgid "speaker score" msgstr "" -#: results/models.py:366 +#: results/models.py msgid "speaker scores" msgstr "" -#: results/models.py:375 +#: results/models.py msgid "The debate team and speaker must be from the same team." msgstr "" -#: results/models.py:378 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." msgstr "" -#: results/tables.py:15 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" msgstr "" -#: results/tables.py:36 +#: results/tables.py msgid "Status of this debate's ballot" msgstr "" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" msgstr "対戦表を公開する" -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" msgstr "" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" msgstr "" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" msgstr "" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" msgstr "" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the current round" msgstr "" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" msgstr "" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" msgstr "" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." msgstr "" -#: results/templates/admin_results.html:88 +#: results/templates/admin_results.html #, python-format msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." msgstr[0] "" -#: results/templates/admin_results.html:94 +#: results/templates/admin_results.html #, python-format msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." msgstr "" -#: results/templates/admin_results.html:113 +#: results/templates/admin_results.html msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." msgstr "" -#: results/templates/admin_results.html:127 +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." msgstr "" -#: results/templates/admin_results.html:135 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." msgstr "" -#: results/templates/admin_results.html:144 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/admin_results.html:151 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:12 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" msgstr "全ての結果に戻る" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:17 -#: results/templates/ballot_entry_base.html:21 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" msgstr "この試合の新しいバロットを作成する" -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." msgstr "もう既に入力しているため、このバロットは入力できません。" -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html msgid "Confirm results" msgstr "結果を確定する" -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" msgstr "結果が正しくありません。" -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:68 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." msgstr "" -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 results/views.py:513 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" msgstr "結果を入力する" -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "" -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." msgstr "" -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "" -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." msgstr[0] "" -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr[0] "" -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:42 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:45 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" msgstr "" -#: results/templates/ballot/ballot_set.html:6 +#: results/templates/ballot/ballot_set.html msgid "There are some problems with this scoresheet. Please review and correct them." msgstr "" -#: results/templates/ballot/ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s (%(institution)s)" msgstr "%(name)s(%(institution)s)からのバロット" -#: results/templates/ballot/ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s" msgstr "%(name)sからのバロット" -#: results/templates/ballot/ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html msgid "Scoresheet" msgstr "スコアシート" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Solo Chair" msgstr "" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Chair" msgstr "" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Panellist" msgstr "" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Trainee" msgstr "" -#: results/templates/ballot/ballot_set.html:44 +#: results/templates/ballot/ballot_set.html msgid "Assign sides before entering scores" msgstr "" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." msgstr "" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "There is %(number)s existing ballot set for this debate." msgid_plural "There are %(number)s existing ballot sets for this debate." msgstr[0] "" -#: results/templates/ballot/other_ballots_list.html:21 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." msgstr "" -#: results/templates/ballot/other_ballots_list.html:26 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." msgstr "" -#: results/templates/ballot/other_ballots_list.html:41 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:45 +#: results/templates/ballot/other_ballots_list.html msgid "MERGING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:48 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:53 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," msgstr "%(submitter)sによって入力された、" -#: results/templates/ballot/other_ballots_list.html:58 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from %(adjudicator)s's private URL," msgstr "" -#: results/templates/ballot/other_ballots_list.html:62 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:68 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," msgstr "" -#: results/templates/ballot/other_ballots_list.html:73 +#: results/templates/ballot/other_ballots_list.html msgid "unknown" msgstr "" -#: results/templates/ballot/other_ballots_list.html:74 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "confirmed by %(confirmer)s" msgstr "" -#: results/templates/ballot/other_ballots_list.html:78 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" msgstr "" -#: results/templates/ballot/other_ballots_list.html:82 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" msgstr "" -#: results/templates/ballot/other_ballots_list.html:86 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" msgstr[0] "" -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." msgstr "" -#: results/templates/ballot_entry_base.html:30 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr "" -#: results/templates/ballot_entry_base.html:41 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." msgstr "" -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" msgstr "" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" msgstr "" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" msgstr "" -#: results/templates/debate_postponement_form.html:3 +#: results/templates/debate_postponement_form.html msgid "Postponed" msgstr "" -#: results/templates/debate_postponement_form.html:8 +#: results/templates/debate_postponement_form.html msgid "Postpone" msgstr "" -#: results/templates/enter_results.html:15 +#: results/templates/enter_results.html msgid "Ballot Status" msgstr "バロットの状態" -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" msgstr "" -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" msgstr "ディベートの状態" -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" msgstr "" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" msgstr "バロットを保存する" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" msgstr "入力をキャンセルする" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." msgstr "" -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" msgstr "" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." msgstr "" -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" msgstr "バロットを入力する" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" msgstr "あなたは誰ですか?" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" msgstr "(リストから選択してください)" -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." msgstr "" -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" msgstr "%(matchup)sのバロット" -#: results/templates/public_ballot_set.html:28 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" msgstr "" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" msgstr "" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" msgstr "" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" msgstr "" -#: results/templates/public_ballot_set.html:92 -#: results/templates/public_ballot_set.html:96 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:105 -#: results/templates/public_ballot_set.html:109 +#: results/templates/public_ballot_set.html #, python-format msgid "%(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Won" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Lost" msgstr "" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set_error.html #, python-format msgid "Back to the tournament home page." msgstr "" -#: results/templates/public_enter_results.html:9 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" msgstr "" -#: results/templates/public_enter_results.html:16 +#: results/templates/public_enter_results.html msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." msgstr "" -#: results/templates/public_enter_results.html:24 +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." msgstr[0] "" -#: results/templates/public_enter_results.html:63 -msgid "Submit Ballot(s)" -msgstr "" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" -#: results/templates/public_enter_results.html:65 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" msgstr "" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" msgstr "入力する結果がありません" -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" msgstr "チーム別で見る" -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" msgstr "ディベート別で見る" -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" msgstr "" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" msgstr "" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." msgstr "" -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." msgstr "" -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" msgstr "バロットなし" -#: results/utils.py:19 +#: results/utils.py msgid "Debate was Postponed" msgstr "" -#: results/utils.py:20 +#: results/utils.py msgid "Ballot is Unconfirmed" msgstr "" -#: results/utils.py:21 +#: results/utils.py msgid "Ballot is Confirmed" msgstr "" #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:36 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" msgstr "" -#: results/utils.py:43 +#: results/utils.py #, python-format msgid "%(team)s (%(side)s) won" msgstr "" #. Translators: The team here is the losing team -#: results/utils.py:45 +#: results/utils.py #, python-format msgid "vs %(team)s (%(side)s)" msgstr "" -#: results/utils.py:47 +#: results/utils.py #, python-format msgid "Advancing: %(advancing_list)s
    " msgstr "" -#: results/utils.py:50 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" msgstr "敗退:%(eliminated_list)s" -#: results/utils.py:58 +#: results/utils.py #, python-format msgid "1st: %(first_team)s
    " msgstr "" -#: results/utils.py:59 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" "4th: %(fourth_team)s" msgstr "" -#: results/utils.py:74 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" msgstr "" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:134 +#: results/utils.py msgid "PM" msgstr "" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:136 +#: results/utils.py msgid "DPM" msgstr "" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:138 +#: results/utils.py msgid "LO" msgstr "" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:140 +#: results/utils.py msgid "DLO" msgstr "" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:142 +#: results/utils.py msgid "MG" msgstr "" #. Translators: Abbreviation for Government Whip -#: results/utils.py:144 +#: results/utils.py msgid "GW" msgstr "" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:146 +#: results/utils.py msgid "MO" msgstr "" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:148 +#: results/utils.py msgid "OW" msgstr "" -#: results/utils.py:168 +#: results/utils.py msgid "Reply" msgstr "" -#: results/views.py:270 results/views.py:272 +#: results/views.py msgid " vs " msgstr "vs" -#: results/views.py:273 +#: results/views.py #, python-format msgid "%(matchup)s: %(round)s @ %(room)s" msgstr "" -#: results/views.py:275 +#: results/views.py msgid "N/A" msgstr "" -#: results/views.py:408 +#: results/views.py msgid "New Ballot Set" msgstr "" -#: results/views.py:411 +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." msgstr "%(debate)sのディベートのバロットが追加されました。" -#: results/views.py:413 results/views.py:480 +#: results/views.py msgid " Email receipts queued to be sent." msgstr "" -#: results/views.py:427 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." msgstr "%(debate)sの試合にチェアがいません。そのため、結果が入力できません。" -#: results/views.py:433 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." msgstr "" -#: results/views.py:459 +#: results/views.py msgid "Edit Ballot Set" msgstr "" -#: results/views.py:473 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." msgstr "%(matchup)sのバロットが削除されました。" -#: results/views.py:475 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." msgstr "%(matchup)sのバロットが確定されました。" -#: results/views.py:477 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." msgstr "" -#: results/views.py:528 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." msgstr "%(user)s、ありがとう!%(debate)sのバロットが入力されました。" -#: results/views.py:535 +#: results/views.py msgid "The draw for this round hasn't been released yet." msgstr "" -#: results/views.py:539 +#: results/views.py msgid "The motions for this round haven't been released yet." msgstr "モーションがまだ発表されていません。" -#: results/views.py:544 +#: results/views.py msgid "It looks like you don't have a debate this round." msgstr "このラウンドに試合はありません。" -#: results/views.py:546 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." msgstr "" -#: results/views.py:573 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." msgstr "このラウンドにチェアがいないため、結果が入力できません。タブ担当者に連絡してください。" -#: results/views.py:578 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:689 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." msgstr "" -#: results/views.py:707 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." msgstr "" -#: results/views.py:710 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." msgstr "" -#: results/views.py:714 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." msgstr "" -#: results/views.py:717 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." msgstr "" -#: results/views.py:739 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." msgstr "" -#: results/views.py:805 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" msgstr "" -#: results/views.py:809 +#: results/views.py msgid "Adjudicator" msgstr "ジャッジ" -#: results/views.py:846 +#: results/views.py msgid "Merge Ballots" msgstr "" -#: results/views.py:877 +#: results/views.py msgid "The speaking order in the ballots is inconsistent, so could not be merged." msgstr "" -#: results/views.py:879 +#: results/views.py msgid "Duplicate speeches are marked inconsistently, so could not be merged." msgstr "" -#: results/views.py:880 +#: results/views.py #, python-format msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." msgstr "" diff --git a/tabbycat/standings/locale/ja/LC_MESSAGES/django.po b/tabbycat/standings/locale/ja/LC_MESSAGES/django.po index 5f83d57276b..0eeb65b8dba 100644 --- a/tabbycat/standings/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-29 23:49-0400\n" -"PO-Revision-Date: 2020-12-30 04:10\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-07-02 13:44\n" "Last-Translator: philip_tc\n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -18,604 +18,595 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 950\n" -#: standings/base.py:297 +#: standings/base.py msgid "The same metric would be added twice:" msgstr "" -#: standings/base.py:298 +#: standings/base.py msgid "The same ranking would be added twice:" msgstr "" -#: standings/base.py:414 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" msgstr "" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" msgstr "すべて" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" msgstr "" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" msgstr "" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" msgstr "" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "チェア" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" msgstr "パネル" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" msgstr "トレイニー" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" msgstr "平均評価" -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" msgstr "" -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" msgstr "" -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" msgstr "" -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" msgstr "" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" msgstr "" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" msgstr "" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" msgstr "" -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" msgstr "" -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" msgstr "" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" msgstr "" -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" msgstr "" -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" msgstr "" -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" msgstr "" -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" msgstr "" -#: standings/speakers.py:50 standings/speakers.py:106 +#: standings/speakers.py msgid "total" msgstr "合計" -#: standings/speakers.py:51 standings/speakers.py:107 +#: standings/speakers.py msgid "Total" msgstr "合計" -#: standings/speakers.py:58 standings/speakers.py:116 +#: standings/speakers.py msgid "average" msgstr "平均" -#: standings/speakers.py:59 standings/speakers.py:117 +#: standings/speakers.py msgid "Avg" msgstr "" -#: standings/speakers.py:66 +#: standings/speakers.py msgid "team points" msgstr "" -#: standings/speakers.py:67 +#: standings/speakers.py msgid "Team" msgstr "チーム" -#: standings/speakers.py:89 standings/speakers.py:126 +#: standings/speakers.py msgid "standard deviation" msgstr "" -#: standings/speakers.py:90 standings/speakers.py:127 +#: standings/speakers.py msgid "Stdev" msgstr "" -#: standings/speakers.py:98 +#: standings/speakers.py msgid "number of speeches given" msgstr "" -#: standings/speakers.py:99 standings/speakers.py:138 +#: standings/speakers.py msgid "Num" msgstr "" -#: standings/speakers.py:137 +#: standings/speakers.py msgid "replies given" msgstr "" -#: standings/speakers.py:147 +#: standings/speakers.py msgid "trimmed mean (high-low drop)" msgstr "" -#: standings/speakers.py:148 +#: standings/speakers.py msgid "Trim" msgstr "" -#: standings/teams.py:62 +#: standings/teams.py msgid "points" -msgstr "" +msgstr "ポイント" -#: standings/teams.py:63 +#: standings/teams.py msgid "Pts" msgstr "" -#: standings/teams.py:76 +#: standings/teams.py msgid "wins" msgstr "勝" -#: standings/teams.py:77 standings/views.py:592 +#: standings/teams.py standings/views.py msgid "Wins" msgstr "勝" -#: standings/teams.py:87 +#: standings/teams.py msgid "total speaker score" msgstr "合計スピーカースコア" -#: standings/teams.py:88 +#: standings/teams.py msgid "Spk" msgstr "" -#: standings/teams.py:97 +#: standings/teams.py msgid "average total speaker score" msgstr "" -#: standings/teams.py:98 +#: standings/teams.py msgid "ATSS" msgstr "" -#: standings/teams.py:107 +#: standings/teams.py msgid "speaker score standard deviation" msgstr "" -#: standings/teams.py:108 +#: standings/teams.py msgid "SSD" msgstr "" -#: standings/teams.py:118 +#: standings/teams.py msgid "sum of margins" msgstr "" -#: standings/teams.py:119 +#: standings/teams.py msgid "Marg" msgstr "" -#: standings/teams.py:128 +#: standings/teams.py msgid "average margin" msgstr "" -#: standings/teams.py:129 +#: standings/teams.py msgid "AWM" msgstr "" -#: standings/teams.py:138 +#: standings/teams.py msgid "average individual speaker score" msgstr "" -#: standings/teams.py:139 +#: standings/teams.py msgid "AISS" msgstr "" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by wins" msgstr "" -#: standings/teams.py:212 +#: standings/teams.py msgid "DS" msgstr "" -#: standings/teams.py:219 +#: standings/teams.py msgid "draw strength by total speaker score" msgstr "" -#: standings/teams.py:220 +#: standings/teams.py msgid "DSS" msgstr "" -#: standings/teams.py:231 +#: standings/teams.py msgid "number of pullups before this round" msgstr "" -#: standings/teams.py:232 +#: standings/teams.py msgid "PU" msgstr "" -#: standings/teams.py:254 +#: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "" -#: standings/teams.py:255 +#: standings/teams.py msgid "Ballots" msgstr "" -#: standings/teams.py:256 +#: standings/teams.py msgid "votes/ballots carried" msgstr "" -#: standings/teams.py:280 +#: standings/teams.py msgid "number of firsts" msgstr "" -#: standings/teams.py:281 +#: standings/teams.py msgid "1sts" msgstr "" -#: standings/teams.py:290 +#: standings/teams.py msgid "number of seconds" msgstr "" -#: standings/teams.py:291 +#: standings/teams.py msgid "2nds" msgstr "" -#: standings/teams.py:300 +#: standings/teams.py msgid "number of thirds" msgstr "" -#: standings/teams.py:301 +#: standings/teams.py msgid "3rds" msgstr "" -#: standings/teams.py:313 +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py msgid "Who-beat-whom" msgstr "" -#: standings/teams.py:314 +#: standings/teams.py msgid "WBW" msgstr "" -#: standings/teams.py:315 +#: standings/teams.py msgid "who-beat-whom" msgstr "" -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." msgstr "" -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." msgstr "" -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." msgstr "" -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." msgstr "" -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." msgstr "" -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." msgstr "" -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." msgstr "" -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." msgstr "" -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." msgstr "" -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." msgstr "" -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" msgstr "" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." msgstr "" -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" msgstr "" -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" msgstr "" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" msgstr "" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" msgstr "順位" -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" msgstr "" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:152 -#: standings/templates/standings_index.html:167 -#: standings/templates/standings_index.html:186 +#: standings/templates/standings_index.html msgid "No data yet" msgstr "" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" msgstr "" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" msgstr "" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" msgstr "" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" msgstr "" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" msgstr "" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" msgstr "" -#: standings/templates/standings_index.html:177 +#: standings/templates/standings_index.html msgid "Average Speaks" msgstr "" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" msgstr "概要" -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "チーム" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" msgstr "すべて" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" msgstr "スピーカー" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" msgstr "" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" msgstr "すべて" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "" -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" msgstr "" -#: standings/templates/standings_menu.html:63 -#: standings/templates/standings_menu.html:76 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "モーション" -#: standings/templates/standings_menu.html:66 +#: standings/templates/standings_menu.html msgid "By Round" msgstr "" -#: standings/templates/standings_menu.html:81 +#: standings/templates/standings_menu.html msgid "Diversity" msgstr "ダイバーシティ" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." msgstr "" -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " msgstr "" -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " msgstr "" -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " msgstr "" -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" msgstr "ラウンド%(round)s現在" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" msgstr "" -#: standings/views.py:208 standings/views.py:428 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." msgstr "" -#: standings/views.py:290 +#: standings/views.py msgid "Speaker Standings" msgstr "" -#: standings/views.py:326 +#: standings/views.py msgid "Speaker Tab" msgstr "スピーカーのタブ" -#: standings/views.py:341 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" msgstr "%(category)sのスピーカー順位" -#: standings/views.py:359 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" msgstr "%(category)sのスピーカーのタブ" -#: standings/views.py:372 +#: standings/views.py msgid "Reply Speaker Standings" msgstr "リプライ順位" -#: standings/views.py:380 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." msgstr "リプライスピーチは本大会ではありません。" -#: standings/views.py:408 +#: standings/views.py msgid "Reply Speaker Tab" msgstr "リプライのタブ" -#: standings/views.py:420 standings/views.py:669 +#: standings/views.py msgid "Team Standings" msgstr "チーム順位" -#: standings/views.py:499 +#: standings/views.py msgid "Team Tab" msgstr "チームのタブ" -#: standings/views.py:518 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" msgstr "" -#: standings/views.py:545 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" msgstr "" -#: standings/views.py:556 +#: standings/views.py msgid "Current Team Standings" msgstr "現在のチーム順位" -#: standings/views.py:592 +#: standings/views.py msgid "Points" msgstr "" -#: standings/views.py:638 +#: standings/views.py msgid "Feedback Overview" msgstr "フィードバック概要" -#: standings/views.py:655 -msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." msgstr "" diff --git a/tabbycat/tournaments/locale/ja/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/ja/LC_MESSAGES/django.po index df56177df9b..b5c4e9f15ba 100644 --- a/tabbycat/tournaments/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -18,1024 +18,1014 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "大会" -#: tournaments/forms.py:29 +#: tournaments/forms.py msgid "Number of preliminary rounds" msgstr "予選ラウンド数" -#: tournaments/forms.py:34 +#: tournaments/forms.py msgid "Number of teams in the open break" msgstr "オープンブレイクするチーム数" -#: tournaments/forms.py:35 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." msgstr "ブレイクラウンドがない場合は空欄にしておいてください" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Did you agree with their decision?" msgstr "結果に納得しましたか?" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Agree?" msgstr "納得しましたか?" -#: tournaments/forms.py:47 +#: tournaments/forms.py msgid "Comments" msgstr "コメント" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:61 +#: tournaments/forms.py msgid "Open" msgstr "開く" -#: tournaments/forms.py:86 +#: tournaments/forms.py msgid "Format Configuration" msgstr "" -#: tournaments/forms.py:87 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" msgstr "" -#: tournaments/forms.py:91 +#: tournaments/forms.py msgid "Public Configuration" msgstr "" -#: tournaments/forms.py:92 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" msgstr "" -#: tournaments/forms.py:99 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" msgstr "" -#: tournaments/forms.py:195 +#: tournaments/forms.py msgid "Current preliminary round" msgstr "" -#: tournaments/forms.py:196 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" msgstr "" -#: tournaments/forms.py:208 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" msgstr "" -#: tournaments/forms.py:214 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" msgstr "" -#: tournaments/forms.py:226 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." msgstr "" -#: tournaments/forms.py:232 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." msgstr "" -#: tournaments/forms.py:267 +#: tournaments/forms.py #, python-format msgid "%(name)s (%(abbreviation)s)" msgstr "" -#: tournaments/mixins.py:109 +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." msgstr "" -#: tournaments/mixins.py:117 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." msgstr "" -#: tournaments/mixins.py:130 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." msgstr "どのようにチームにサイドを振り分けるかの問題があるためこのページへリダイレクトされました。" -#: tournaments/mixins.py:137 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." msgstr "サイドの決め方に問題があります。タブディレクターはこの問題を解決する必要があります。" -#: tournaments/mixins.py:236 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" msgstr "" -#: tournaments/mixins.py:437 +#: tournaments/mixins.py msgid "Return to Draw" msgstr "" -#: tournaments/models.py:26 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." msgstr "" -#: tournaments/models.py:33 tournaments/models.py:320 +#: tournaments/models.py msgid "name" msgstr "" -#: tournaments/models.py:34 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" msgstr "" -#: tournaments/models.py:36 +#: tournaments/models.py msgid "short name" msgstr "" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" msgstr "" -#: tournaments/models.py:39 tournaments/models.py:314 +#: tournaments/models.py msgid "sequence number" msgstr "" -#: tournaments/models.py:40 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." msgstr "" -#: tournaments/models.py:42 +#: tournaments/models.py msgid "slug" msgstr "スラグ" -#: tournaments/models.py:43 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" msgstr "大会のsub-URLには空白を入れないでください。例:'australs2016'" -#: tournaments/models.py:44 +#: tournaments/models.py msgid "active" msgstr "" -#: tournaments/models.py:47 tournaments/models.py:313 +#: tournaments/models.py msgid "tournament" msgstr "トーナメント" -#: tournaments/models.py:48 +#: tournaments/models.py msgid "tournaments" msgstr "" -#: tournaments/models.py:285 +#: tournaments/models.py msgid "Random" msgstr "ランダム" -#: tournaments/models.py:286 +#: tournaments/models.py msgid "Manual" msgstr "手動" -#: tournaments/models.py:287 +#: tournaments/models.py msgid "Round-robin" msgstr "ラウンドロビン方式" -#: tournaments/models.py:288 +#: tournaments/models.py msgid "Power-paired" msgstr "パワーマッチ方式" -#: tournaments/models.py:289 tournaments/models.py:296 +#: tournaments/models.py msgid "Elimination" msgstr "ノックアウト方式" -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Preliminary" msgstr "予選" -#: tournaments/models.py:305 +#: tournaments/models.py msgid "None" msgstr "" -#: tournaments/models.py:306 +#: tournaments/models.py msgid "Draft" msgstr "" -#: tournaments/models.py:307 +#: tournaments/models.py msgid "Confirmed" msgstr "" -#: tournaments/models.py:308 +#: tournaments/models.py msgid "Released" msgstr "" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" msgstr "" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "completed" msgstr "" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" msgstr "" -#: tournaments/models.py:320 +#: tournaments/models.py msgid "e.g. \"Round 1\"" msgstr "例: ラウンド1" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "abbreviation" msgstr "省略形" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "e.g. \"R1\"" msgstr "例: R1" -#: tournaments/models.py:323 +#: tournaments/models.py msgid "stage" msgstr "" -#: tournaments/models.py:324 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" msgstr "" -#: tournaments/models.py:326 +#: tournaments/models.py msgid "draw type" msgstr "" -#: tournaments/models.py:327 +#: tournaments/models.py msgid "Which draw method to use" msgstr "" -#: tournaments/models.py:330 +#: tournaments/models.py msgid "break category" msgstr "ブレイクカテゴリー" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "If elimination round, which break category" msgstr "" -#: tournaments/models.py:334 +#: tournaments/models.py msgid "draw status" msgstr "" -#: tournaments/models.py:335 +#: tournaments/models.py msgid "The status of this round's draw" msgstr "このラウンドの対戦表の状態" -#: tournaments/models.py:338 +#: tournaments/models.py msgid "feedback weight" msgstr "フィードバックの比重" -#: tournaments/models.py:340 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." msgstr "" #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:343 +#: tournaments/models.py msgid "silent" msgstr "サイレントラウンド" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." msgstr "" -#: tournaments/models.py:346 +#: tournaments/models.py msgid "motions released" msgstr "" -#: tournaments/models.py:347 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" msgstr "" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "starts at" msgstr "始まる時刻は" -#: tournaments/models.py:351 +#: tournaments/models.py msgid "weight" msgstr "" -#: tournaments/models.py:352 +#: tournaments/models.py msgid "A factor for the points received in the round. For example, if 2, all points are doubled." msgstr "" -#: tournaments/models.py:355 +#: tournaments/models.py msgid "round" msgstr "ラウンド" -#: tournaments/models.py:356 +#: tournaments/models.py msgid "rounds" msgstr "" -#: tournaments/models.py:369 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:372 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:377 +#: tournaments/models.py msgid "Elimination rounds must have a break category." msgstr "" -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" msgstr "" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" msgstr "概要" -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" msgstr "" -#: tournaments/templates/blank_site_start.html:7 -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" msgstr "Tabbycatへようこそ!" -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." msgstr "" -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." msgstr "" -#: tournaments/templates/blank_site_start.html:32 +#: tournaments/templates/blank_site_start.html msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." msgstr "" -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" msgstr "" -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" msgstr "" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." msgstr "" -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." msgstr "" -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" msgstr "" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." msgstr "" -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" msgstr "" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." msgstr "" -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" msgstr "大会を作成する" -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" msgstr "キャンセルし、サイトのホームページへ戻る" -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" msgstr "" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." msgstr "" -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." msgstr "" -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." msgstr "" -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." msgstr "" -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" msgstr "" -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" +msgid "Teams on %(side)s" msgstr "" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" msgstr "" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." msgstr "" -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." msgstr "" -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" msgstr "チームのタブ" -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" msgstr "スピーカーのタブ" -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" msgstr "%(category)sのスピーカーのタブ" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" msgstr "リプライのタブ" -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" msgstr "ジャッジのタブ" -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" msgstr "モーションタブ" -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" msgstr "" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:203 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" msgstr "%(round)sの対戦表" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" msgstr "" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" msgstr "チェックイン" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" msgstr "結果" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "モーション" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" msgstr "チーム順位" -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" msgstr "" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" msgstr "" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" msgstr "ダイバーシティ" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" msgstr "参加者" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" msgstr "大学・団体" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" msgstr "フィードバック状況" -#: tournaments/templates/public_tournament_index.html:188 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Enter Ballot for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:195 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" msgstr "フィードバックを入力する" -#: tournaments/templates/public_tournament_index.html:217 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" msgstr "" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" msgstr "" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" msgstr "結果入力" -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." msgstr "" -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" msgstr "" -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" msgstr "" -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" msgstr "" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" msgstr "" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" msgstr "" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" msgstr "" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." msgstr[0] "" -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" msgstr "" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." msgstr[0] "" -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " msgstr "" -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "" -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" msgstr "" -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" msgstr "" -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "" -#: tournaments/templates/set_round_weights.html:4 -#: tournaments/templates/set_round_weights.html:5 +#: tournaments/templates/set_round_weights.html msgctxt "page title" -msgid "Set Round Weights" +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: tournaments/templates/set_round_weights.html:8 +#: tournaments/templates/set_round_weights.html msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." msgstr "" -#: tournaments/templates/set_round_weights.html:41 +#: tournaments/templates/set_round_weights.html msgctxt "button" msgid "Set weights" msgstr "" -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:47 -msgid "Inactive Tournaments" -msgstr "" - -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/site_index.html msgid "Welcome!" msgstr "ようこそ!" -#: tournaments/templates/site_index.html:21 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" msgstr "" -#: tournaments/templates/site_index.html:30 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:34 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:55 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html msgid "New Tournament" msgstr "" -#: tournaments/templates/site_index.html:58 +#: tournaments/templates/site_index.html msgid "Edit Database Area" msgstr "" -#: tournaments/templates/site_index.html:61 +#: tournaments/templates/site_index.html msgid "Send a Test Email" msgstr "" -#: tournaments/templates/site_index.html:64 +#: tournaments/templates/site_index.html msgid "Import DebateXML" msgstr "" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Get API Token / Change Password (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:77 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:83 +#: tournaments/templates/site_index.html msgid "Log In as Admin" msgstr "管理者としてログイン" -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." msgstr "" -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" msgstr "新しい大会へようこそ!" -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." msgstr "" #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." msgstr "" -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." msgstr "" -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" +msgid "Mark participants as available to prepare a draw for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" +msgid "Go to the results area to enter ballots for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:74 +#: tournaments/templates/tournament_index.html msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." msgstr "" -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" msgstr "" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" msgstr "肯定側" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" msgstr "否定側" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" msgstr "肯定側チーム" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" msgstr "否定側チーム" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" msgstr "" -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" msgstr "" -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" msgstr "政府側" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" msgstr "反対側" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" msgstr "政府側チーム" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" msgstr "反対側チーム" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" msgstr "" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" msgstr "" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" msgstr "" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" msgstr "" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" msgstr "" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" msgstr "" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" msgstr "" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" msgstr "" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" msgstr "" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" msgstr "" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" msgstr "" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" msgstr "" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" msgstr "" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" msgstr "" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" msgstr "" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" msgstr "" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" msgstr "" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "Opening Government" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "Opening Opposition" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "Closing Government" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "Closing Opposition" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" msgstr "" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" msgstr "" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" msgstr "" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" msgstr "" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "ラウンド%(number)d" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" msgstr "" -#: tournaments/views.py:151 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" msgstr "" -#: tournaments/views.py:157 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." msgstr "" -#: tournaments/views.py:170 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." msgstr "" -#: tournaments/views.py:176 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." msgstr "" -#: tournaments/views.py:184 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" msgstr "" -#: tournaments/views.py:201 +#: tournaments/views.py msgid "8-team generic dataset" msgstr "" -#: tournaments/views.py:202 +#: tournaments/views.py msgid "24-team Australs dataset" msgstr "24チーム オーストラルズ データセット" -#: tournaments/views.py:203 +#: tournaments/views.py msgid "88-team BP dataset" msgstr "88チーム BPスタイル データセット" -#: tournaments/views.py:288 -msgid "Successfully set round weights." +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." msgstr "" diff --git a/tabbycat/utils/locale/ja/LC_MESSAGES/django.po b/tabbycat/utils/locale/ja/LC_MESSAGES/django.po index 0d6b8b5b883..add72f79fb2 100644 --- a/tabbycat/utils/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:47\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-07-02 13:44\n" "Last-Translator: philip_tc\n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -18,303 +18,310 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "Email address" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "ラウンド" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "チーム" + +#: utils/admin.py +msgid "Speaker" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "大会" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "サイド" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "モーション" + +#: utils/admin.py +msgid "Confirmed" msgstr "" -#: utils/tables.py:47 +#: utils/admin.py +msgid "Adjudicator" +msgstr "ジャッジ" + +#: utils/tables.py msgid "No Data Available" msgstr "データがありません" -#: utils/tables.py:155 utils/tables.py:156 +#: utils/tables.py msgid "Ⓒ" msgstr "" -#: utils/tables.py:157 +#: utils/tables.py msgid "Ⓣ" msgstr "" -#: utils/tables.py:161 +#: utils/tables.py msgid "chair" msgstr "チェア" -#: utils/tables.py:162 +#: utils/tables.py msgid "panellist" msgstr "パネル" -#: utils/tables.py:163 +#: utils/tables.py msgid "trainee" msgstr "トレイニー" -#: utils/tables.py:166 +#: utils/tables.py msgid "—" msgstr "" -#: utils/tables.py:167 +#: utils/tables.py msgid "Redacted" msgstr "" -#: utils/tables.py:231 utils/tables.py:237 +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" msgstr "" -#: utils/tables.py:247 utils/tables.py:252 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" msgstr "" -#: utils/tables.py:274 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" msgstr "コードネーム:%(name)s" -#: utils/tables.py:276 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" msgstr "実名:%(name)s" -#: utils/tables.py:296 +#: utils/tables.py #, python-format msgid "%(team)s won" msgstr "%(team)sが勝ち" -#: utils/tables.py:301 +#: utils/tables.py #, python-format msgid "%(team)s lost" msgstr "%(team)sが負け" -#: utils/tables.py:306 utils/tables.py:318 utils/tables.py:342 +#: utils/tables.py #, python-format msgid "%(team)s—no result" msgstr "%(team)sー結果なし" -#: utils/tables.py:323 +#: utils/tables.py #, python-format msgid "%(team)s placed %(place)s" msgstr "%(team)sが%(place)s位" -#: utils/tables.py:332 +#: utils/tables.py #, python-format msgid "%(team)s is advancing" msgstr "" -#: utils/tables.py:337 +#: utils/tables.py #, python-format msgid "%(team)s was eliminated" msgstr "%(team)sが敗退" -#: utils/tables.py:350 +#: utils/tables.py msgid "View/edit debate ballot" msgstr "ディベートのバロットを確認/修正" -#: utils/tables.py:356 +#: utils/tables.py msgid "View debate ballot" msgstr "ディベートのバロットを確認" -#: utils/tables.py:369 +#: utils/tables.py #, python-format msgid " vs %(opposition)s" msgstr "" -#: utils/tables.py:376 +#: utils/tables.py #, python-format msgid "Won against %(team)s" msgstr "%(team)sに勝利" -#: utils/tables.py:378 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" msgstr "%(team)sに敗北" -#: utils/tables.py:380 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" msgstr "%(team)sとの試合の記録なし" -#: utils/tables.py:405 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" msgstr "合計スピーカースコア:%s" -#: utils/tables.py:412 +#: utils/tables.py msgid "Teams in debate:" msgstr "" -#: utils/tables.py:415 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "" -#: utils/tables.py:416 utils/tables.py:420 utils/tables.py:446 -#: utils/tables.py:618 +#: utils/tables.py msgid "??" msgstr "" -#: utils/tables.py:434 +#: utils/tables.py msgid "advancing" msgstr "" -#: utils/tables.py:435 +#: utils/tables.py msgid "Advancing" msgstr "" -#: utils/tables.py:437 +#: utils/tables.py msgid "eliminated" msgstr "敗退" -#: utils/tables.py:438 +#: utils/tables.py msgid "Eliminated" msgstr "敗退" -#: utils/tables.py:441 utils/tables.py:451 +#: utils/tables.py msgid "No result for debate" msgstr "試合の結果なし" -#: utils/tables.py:448 +#: utils/tables.py #, python-format msgid "Placed %(place)s" msgstr "%(place)s位" -#: utils/tables.py:463 -msgid "Tournament" -msgstr "大会" - -#: utils/tables.py:472 -msgid "Round" -msgstr "ラウンド" - -#: utils/tables.py:495 utils/tables.py:672 +#: utils/tables.py msgid "Name" msgstr "名前" -#: utils/tables.py:501 utils/tables.py:650 +#: utils/tables.py msgid "Institution" msgstr "大学・団体" -#: utils/tables.py:507 +#: utils/tables.py msgid "Member of the Adjudication Core" msgstr "アッジュコアのメンバー" -#: utils/tables.py:514 +#: utils/tables.py msgid "Independent Adjudicator" msgstr "インディペンデントジャッジ" -#: utils/tables.py:522 +#: utils/tables.py msgid "Always Trainee" msgstr "常にトレイニー" -#: utils/tables.py:557 +#: utils/tables.py msgid "in minority" msgstr "" -#: utils/tables.py:590 +#: utils/tables.py msgid "Debate Adjudicators" msgstr "" -#: utils/tables.py:621 -msgid "Motion" -msgstr "モーション" - -#: utils/tables.py:636 -msgid "Team" -msgstr "チーム" - -#: utils/tables.py:641 utils/tables.py:694 +#: utils/tables.py msgid "Categories" msgstr "カテゴリー" -#: utils/tables.py:692 +#: utils/tables.py msgid "Category" msgstr "" -#: utils/tables.py:719 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." msgstr "" -#: utils/tables.py:721 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." msgstr "" -#: utils/tables.py:736 +#: utils/tables.py msgid "Room" msgstr "ラウンド部屋" -#: utils/tables.py:754 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" msgstr[0] "" -#: utils/tables.py:760 +#: utils/tables.py msgid "Teams are from the same institution" msgstr "両チームとも同じ大学・団体です" -#: utils/tables.py:766 +#: utils/tables.py msgid "Conflicts/Flags" msgstr "" -#: utils/tables.py:819 +#: utils/tables.py msgid "The confirmed ballot" msgstr "" -#: utils/tables.py:824 utils/tables.py:849 +#: utils/tables.py msgid "No ballot" msgstr "" -#: utils/tables.py:826 utils/tables.py:851 +#: utils/tables.py msgid "No scores" msgstr "" -#: utils/tables.py:829 utils/tables.py:854 utils/tables.py:866 +#: utils/tables.py msgid "View Ballot" msgstr "" -#: utils/tables.py:836 +#: utils/tables.py msgid "The ballot you submitted" msgstr "" -#: utils/tables.py:840 +#: utils/tables.py msgid "View/Edit Ballot" msgstr "" -#: utils/tables.py:874 +#: utils/tables.py msgid "Result" msgstr "結果" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:880 +#: utils/tables.py msgid "TBC" msgstr "確認中" -#: utils/tables.py:881 -msgid "Side" -msgstr "サイド" - -#: utils/tables.py:919 -msgid "Team iron-manned this round and the last." +#: utils/tables.py +msgid "Team iron-personed this round and the last." msgstr "" -#: utils/tables.py:922 -msgid "Team iron-manned this round." +#: utils/tables.py +msgid "Team iron-personed this round." msgstr "" -#: utils/tables.py:925 -msgid "Team iron-manned last round." +#: utils/tables.py +msgid "Team iron-personed last round." msgstr "" -#: utils/tables.py:942 utils/tables.py:943 +#: utils/tables.py #, python-format msgid "Team %(num)d" -msgstr "" +msgstr "チーム%(num)d" -#: utils/tables.py:950 +#: utils/tables.py msgid "Postpone" msgstr "" -#: utils/views.py:38 +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." msgstr "" diff --git a/tabbycat/venues/locale/ja/LC_MESSAGES/django.po b/tabbycat/venues/locale/ja/LC_MESSAGES/django.po index 143b3f82279..be0d82a4c9c 100644 --- a/tabbycat/venues/locale/ja/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-05 15:26-0300\n" -"PO-Revision-Date: 2020-07-10 07:04\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" "Last-Translator: philip_tc\n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -18,203 +18,201 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 +#: venues/apps.py msgid "Rooms" msgstr "ラウンド部屋" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." msgstr "対戦表が既に公開されています。試合の部屋を変更する場合は一度非公開にしてください。" -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." msgstr "" -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." msgstr "" -#: venues/models.py:9 venues/models.py:66 +#: venues/models.py msgid "name" msgstr "名前" -#: venues/models.py:11 venues/models.py:120 +#: venues/models.py msgid "priority" msgstr "優先度" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" msgstr "" -#: venues/models.py:15 venues/models.py:78 +#: venues/models.py msgid "tournament" msgstr "大会" -#: venues/models.py:16 +#: venues/models.py msgid "URL" msgstr "" -#: venues/models.py:17 +#: venues/models.py msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" msgstr "" -#: venues/models.py:24 +#: venues/models.py msgid "room" msgstr "部屋" -#: venues/models.py:25 venues/models.py:76 +#: venues/models.py msgid "rooms" msgstr "部屋" -#: venues/models.py:61 +#: venues/models.py msgid "Don't display in room name" msgstr "" -#: venues/models.py:62 +#: venues/models.py msgid "Display as prefix" msgstr "" -#: venues/models.py:63 +#: venues/models.py msgid "Display as suffix" msgstr "" -#: venues/models.py:67 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." msgstr "" -#: venues/models.py:71 +#: venues/models.py msgid "description" msgstr "" -#: venues/models.py:72 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." msgstr "" -#: venues/models.py:82 +#: venues/models.py msgid "display in room name" msgstr "" -#: venues/models.py:83 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" msgstr "" -#: venues/models.py:85 +#: venues/models.py msgid "display in public tooltip" msgstr "" -#: venues/models.py:86 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." msgstr "" -#: venues/models.py:90 +#: venues/models.py msgid "room category" msgstr "ラウンド部屋カテゴリー" -#: venues/models.py:91 +#: venues/models.py msgid "room categories" msgstr "ラウンド部屋カテゴリー" -#: venues/models.py:119 +#: venues/models.py msgid "category" msgstr "カテゴリー" -#: venues/models.py:123 +#: venues/models.py msgid "subject content type" msgstr "" -#: venues/models.py:126 +#: venues/models.py msgid "subject ID" msgstr "" -#: venues/models.py:132 +#: venues/models.py msgid "room constraint" msgstr "" -#: venues/models.py:133 +#: venues/models.py msgid "room constraints" msgstr "" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" msgstr "ラウンド部屋カテゴリー" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." msgstr "" -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." msgstr "" -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" msgstr "" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" msgstr "" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." msgstr "" -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" msgstr "" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" msgstr "" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" msgstr "" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" msgstr "" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" msgstr "" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" msgstr "" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" msgstr[0] "" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." msgstr "" -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "%s(ジャッジ)" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" msgstr "%s(チーム)" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" msgstr "%s(インスティチューション)" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." From 79eed2e84ddd81819f384b9e06628a7292b4cb1c Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Thu, 16 Mar 2023 00:13:16 +1100 Subject: [PATCH 215/255] New translations django.po (Kazakh) --- docs/locale/kk/LC_MESSAGES/about/authors.po | 72 + docs/locale/kk/LC_MESSAGES/about/changelog.po | 1922 +++++++++++++++++ .../kk/LC_MESSAGES/about/contributing.po | 352 +++ docs/locale/kk/LC_MESSAGES/about/licence.po | 80 + docs/locale/kk/LC_MESSAGES/about/support.po | 56 + .../LC_MESSAGES/about/tournament-history.po | 248 +++ .../features/adjudicator-allocation.po | 160 ++ .../features/adjudicator-feedback.po | 258 +++ .../locale/kk/LC_MESSAGES/features/backups.po | 120 + docs/locale/kk/LC_MESSAGES/features/breaks.po | 212 ++ .../kk/LC_MESSAGES/features/check-ins.po | 136 ++ .../kk/LC_MESSAGES/features/data-entry.po | 168 ++ .../kk/LC_MESSAGES/features/data-importers.po | 272 +++ .../features/draw-generation-bp.po | 598 +++++ .../LC_MESSAGES/features/draw-generation.po | 436 ++++ .../kk/LC_MESSAGES/features/notifications.po | 257 +++ .../LC_MESSAGES/features/preformed-panels.po | 176 ++ .../kk/LC_MESSAGES/features/printing.po | 68 + .../LC_MESSAGES/features/standings-rules.po | 272 +++ .../LC_MESSAGES/features/team-code-names.po | 104 + .../kk/LC_MESSAGES/features/user-accounts.po | 196 ++ .../LC_MESSAGES/features/venue-constraints.po | 168 ++ .../kk/LC_MESSAGES/guide/comparisons.po | 338 +++ docs/locale/kk/LC_MESSAGES/guide/scaling.po | 252 +++ .../LC_MESSAGES/guide/tournament-logistics.po | 1394 ++++++++++++ docs/locale/kk/LC_MESSAGES/guide/upgrading.po | 60 + docs/locale/kk/LC_MESSAGES/index.po | 48 + docs/locale/kk/LC_MESSAGES/install/docker.po | 173 ++ docs/locale/kk/LC_MESSAGES/install/heroku.po | 445 ++++ docs/locale/kk/LC_MESSAGES/install/linux.po | 249 +++ docs/locale/kk/LC_MESSAGES/install/local.po | 156 ++ docs/locale/kk/LC_MESSAGES/install/osx.po | 216 ++ docs/locale/kk/LC_MESSAGES/install/windows.po | 317 +++ docs/locale/kk/LC_MESSAGES/install/wsl.po | 100 + .../LC_MESSAGES/use/finishing-a-tournament.po | 80 + .../kk/LC_MESSAGES/use/importing-data.po | 236 ++ .../LC_MESSAGES/use/running-a-tournament.po | 196 ++ .../LC_MESSAGES/use/starting-a-tournament.po | 196 ++ .../actionlog/locale/kk/LC_MESSAGES/django.po | 323 +++ .../locale/kk/LC_MESSAGES/django.po | 451 ++++ .../locale/kk/LC_MESSAGES/django.po | 966 +++++++++ .../locale/kk/LC_MESSAGES/django.po | 392 ++++ .../breakqual/locale/kk/LC_MESSAGES/django.po | 525 +++++ tabbycat/draw/locale/kk/LC_MESSAGES/django.po | 1119 ++++++++++ .../importer/locale/kk/LC_MESSAGES/django.po | 421 ++++ tabbycat/locale/kk/LC_MESSAGES/django.po | 957 ++++++++ tabbycat/locale/kk/LC_MESSAGES/djangojs.po | 554 +++++ .../motions/locale/kk/LC_MESSAGES/django.po | 399 ++++ .../locale/kk/LC_MESSAGES/django.po | 416 ++++ .../options/locale/kk/LC_MESSAGES/django.po | 1618 ++++++++++++++ .../locale/kk/LC_MESSAGES/django.po | 964 +++++++++ .../printing/locale/kk/LC_MESSAGES/django.po | 125 ++ .../locale/kk/LC_MESSAGES/django.po | 179 ++ .../results/locale/kk/LC_MESSAGES/django.po | 1093 ++++++++++ .../standings/locale/kk/LC_MESSAGES/django.po | 612 ++++++ .../locale/kk/LC_MESSAGES/django.po | 1033 +++++++++ .../utils/locale/kk/LC_MESSAGES/django.po | 328 +++ .../venues/locale/kk/LC_MESSAGES/django.po | 222 ++ 58 files changed, 23484 insertions(+) create mode 100644 docs/locale/kk/LC_MESSAGES/about/authors.po create mode 100644 docs/locale/kk/LC_MESSAGES/about/changelog.po create mode 100644 docs/locale/kk/LC_MESSAGES/about/contributing.po create mode 100644 docs/locale/kk/LC_MESSAGES/about/licence.po create mode 100644 docs/locale/kk/LC_MESSAGES/about/support.po create mode 100644 docs/locale/kk/LC_MESSAGES/about/tournament-history.po create mode 100644 docs/locale/kk/LC_MESSAGES/features/adjudicator-allocation.po create mode 100644 docs/locale/kk/LC_MESSAGES/features/adjudicator-feedback.po create mode 100644 docs/locale/kk/LC_MESSAGES/features/backups.po create mode 100644 docs/locale/kk/LC_MESSAGES/features/breaks.po create mode 100644 docs/locale/kk/LC_MESSAGES/features/check-ins.po create mode 100644 docs/locale/kk/LC_MESSAGES/features/data-entry.po create mode 100644 docs/locale/kk/LC_MESSAGES/features/data-importers.po create mode 100644 docs/locale/kk/LC_MESSAGES/features/draw-generation-bp.po create mode 100644 docs/locale/kk/LC_MESSAGES/features/draw-generation.po create mode 100644 docs/locale/kk/LC_MESSAGES/features/notifications.po create mode 100644 docs/locale/kk/LC_MESSAGES/features/preformed-panels.po create mode 100644 docs/locale/kk/LC_MESSAGES/features/printing.po create mode 100644 docs/locale/kk/LC_MESSAGES/features/standings-rules.po create mode 100644 docs/locale/kk/LC_MESSAGES/features/team-code-names.po create mode 100644 docs/locale/kk/LC_MESSAGES/features/user-accounts.po create mode 100644 docs/locale/kk/LC_MESSAGES/features/venue-constraints.po create mode 100644 docs/locale/kk/LC_MESSAGES/guide/comparisons.po create mode 100644 docs/locale/kk/LC_MESSAGES/guide/scaling.po create mode 100644 docs/locale/kk/LC_MESSAGES/guide/tournament-logistics.po create mode 100644 docs/locale/kk/LC_MESSAGES/guide/upgrading.po create mode 100644 docs/locale/kk/LC_MESSAGES/index.po create mode 100644 docs/locale/kk/LC_MESSAGES/install/docker.po create mode 100644 docs/locale/kk/LC_MESSAGES/install/heroku.po create mode 100644 docs/locale/kk/LC_MESSAGES/install/linux.po create mode 100644 docs/locale/kk/LC_MESSAGES/install/local.po create mode 100644 docs/locale/kk/LC_MESSAGES/install/osx.po create mode 100644 docs/locale/kk/LC_MESSAGES/install/windows.po create mode 100644 docs/locale/kk/LC_MESSAGES/install/wsl.po create mode 100644 docs/locale/kk/LC_MESSAGES/use/finishing-a-tournament.po create mode 100644 docs/locale/kk/LC_MESSAGES/use/importing-data.po create mode 100644 docs/locale/kk/LC_MESSAGES/use/running-a-tournament.po create mode 100644 docs/locale/kk/LC_MESSAGES/use/starting-a-tournament.po create mode 100644 tabbycat/actionlog/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/adjallocation/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/adjfeedback/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/availability/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/breakqual/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/draw/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/importer/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/locale/kk/LC_MESSAGES/djangojs.po create mode 100644 tabbycat/motions/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/notifications/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/options/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/participants/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/printing/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/privateurls/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/results/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/standings/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/tournaments/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/utils/locale/kk/LC_MESSAGES/django.po create mode 100644 tabbycat/venues/locale/kk/LC_MESSAGES/django.po diff --git a/docs/locale/kk/LC_MESSAGES/about/authors.po b/docs/locale/kk/LC_MESSAGES/about/authors.po new file mode 100644 index 00000000000..f51f8581c87 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/about/authors.po @@ -0,0 +1,72 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/authors.po\n" +"X-Crowdin-File-ID: 1259\n" +"Language: kk_KZ\n" + +#: ../../../AUTHORS.rst:3 +msgid "Authors & Acknowledgements" +msgstr "" + +#: ../../../AUTHORS.rst:6 +msgid "Authors" +msgstr "" + +#: ../../../AUTHORS.rst:8 +msgid "Tabbycat was authored by Qi-Shan Lim for Auckland Australs 2010. The current active maintainers are:" +msgstr "" + +#: ../../../AUTHORS.rst:10 +msgid "Philip Belesky (`pb-e-mail `_)" +msgstr "" + +#: ../../../AUTHORS.rst:11 +msgid "Chuan-Zheng Lee (`cz-e-mail `_)" +msgstr "" + +#: ../../../AUTHORS.rst:13 +msgid "Please don't hesitate to contact us with any suggestions, expressions of interest or generally anything relating to Tabbycat." +msgstr "" + +#: ../../../AUTHORS.rst:16 +msgid "Contributors" +msgstr "" + +#: ../../../AUTHORS.rst:18 +msgid "Étienne Beaulé has contributed many features, fixes, and suggestions across many aspects of Tabbycat." +msgstr "" + +#: ../../../AUTHORS.rst:19 +msgid "Thevesh Theva contributed the algorithm for calculating the liveness of teams within a particular break category." +msgstr "" + +#: ../../../AUTHORS.rst:20 +msgid "Viran Weerasekera contributed the statistical tests used to estimate the degree to which a motion's results and vetoes are balanced." +msgstr "" + +#: ../../../AUTHORS.rst:21 +msgid "Viran Weerasekera, Valerie Tierney, Molly Dale, Madeline Schultz, and Vail Bromberger contributed to the \"Tournament Logistics\" section of our documentation." +msgstr "" + +#: ../../../AUTHORS.rst:24 +msgid "Sponsors" +msgstr "" + +#: ../../../AUTHORS.rst:26 +msgid "Thanks to the Western Australian Debating League for sponsoring various features related to organising division-based tournaments and round-robin based draw methods." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/about/changelog.po b/docs/locale/kk/LC_MESSAGES/about/changelog.po new file mode 100644 index 00000000000..e656b5f372f --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/about/changelog.po @@ -0,0 +1,1922 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/changelog.po\n" +"X-Crowdin-File-ID: 1261\n" +"Language: kk_KZ\n" + +#: ../../../CHANGELOG.rst:3 +msgid "Change Log" +msgstr "" + +#: ../../../CHANGELOG.rst:6 +msgid "2.4.0 (Maine)" +msgstr "" + +#: ../../../CHANGELOG.rst:7 +msgid "*Release date: ?*" +msgstr "" + +#: ../../../CHANGELOG.rst:9 +msgid "Added support for Russian, and shortened the language selector" +msgstr "" + +#: ../../../CHANGELOG.rst:10 +msgid "Renamed 'test score' to 'base score'" +msgstr "" + +#: ../../../CHANGELOG.rst:11 +msgid "Divisions-specific features have been deprecated and removed" +msgstr "" + +#: ../../../CHANGELOG.rst:12 +msgid "Moved the 'Edit Database' menu item to the dropdown with the logo in the admin navigation" +msgstr "" + +#: ../../../CHANGELOG.rst:13 +msgid "Pull-ups can now be restricted to teams with the lowest draw strength (by speaker or team points) of their bracket" +msgstr "" + +#: ../../../CHANGELOG.rst:14 +msgid "The number of pull-ups and draw strength by speaker score are now available as team standing metrics" +msgstr "" + +#: ../../../CHANGELOG.rst:15 +msgid "Added the new emoji that come along with Unicode 11 — thanks to Viran Weerasekera for this addition!" +msgstr "" + +#: ../../../CHANGELOG.rst:16 +msgid "The 'Show adjudicator institutions' preference now covers a wider range of cases; meaning that if it is unchecked then all adjudicator's institutional affiliations should be hidden from the public" +msgstr "" + +#: ../../../CHANGELOG.rst:20 +msgid "2.3.2" +msgstr "" + +#: ../../../CHANGELOG.rst:21 +msgid "*Release date: 19 October 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:23 +msgid "Fixed issue where teams would appear to be unavailable in break rounds" +msgstr "" + +#: ../../../CHANGELOG.rst:24 ../../../CHANGELOG.rst:294 +#: ../../../CHANGELOG.rst:302 ../../../CHANGELOG.rst:314 +msgid "Other minor fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:28 +msgid "2.3.1" +msgstr "" + +#: ../../../CHANGELOG.rst:29 +msgid "*Release date: 6 October 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:31 +msgid "Fixed issue where the institutions list would count teams/adjudicators outside of the tournament" +msgstr "" + +#: ../../../CHANGELOG.rst:32 +msgid "Fixed issue where a rejected ballot form would crash rather than providing an error message" +msgstr "" + +#: ../../../CHANGELOG.rst:33 +msgid "Fixed issue where the javascript bundle would not build on a local windows install" +msgstr "" + +#: ../../../CHANGELOG.rst:34 +msgid "Fixed issue where the adjudicator record pages would show an unreleased motion if that round's draw was released" +msgstr "" + +#: ../../../CHANGELOG.rst:38 +msgid "2.3.0 (LaPerm)" +msgstr "" + +#: ../../../CHANGELOG.rst:39 +msgid "*Release date: 27 September 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:44 +msgid "Added a preformed panel system which provides a powerful take on a 'shadow draw' workflow" +msgstr "" + +#: ../../../CHANGELOG.rst:42 +msgid "Shadow draw systems allow an adjudication core to form panels prior to a round being drawn. For example, the panels for Round 4 could be formed while Round 3 is taking place. Most implementations do so by having the tab system create a copy of the Round 3 draw, form new panels on top of it, and then transpose these panels onto Round 4. In large tournaments this workflow allows an adjudication core much more time to consider panel formation" +msgstr "" + +#: ../../../CHANGELOG.rst:43 +msgid "Tabbycat's preformed panels are formed per-round under a section available under the Setup menu. This interface looks like the standard Edit Adjudicators interface, but the 'debates' shown are based on a simulation of that round's results. These fake debates can then be prioritised" +msgstr "" + +#: ../../../CHANGELOG.rst:44 +msgid "Adjudicators can then be allocated to those fake debates in order to create a pre-formed panel. When the real draw is ready to be created, the priority of each preformed panel will be matched to the priority of the real debates" +msgstr "" + +#: ../../../CHANGELOG.rst:45 +msgid "By using the existing per-debate priority system, and by giving pre-formed panels their own priority, this workflow allows for very fine amounts of control over exactly how preformed panels are allocated as compared to a more simple top-down transposition of panels. Adjudication cores can easily target general areas of the draw (e.g. break-threshold brackets); control adjudicator strength within and across panels; and still account for special cases where a debate requires a particularly strong panel. At the same time, our existing options for automatic prioritisation and automatic allocation apply to all steps of this process so that preformed panels can be created and deployed rapidly" +msgstr "" + +#: ../../../CHANGELOG.rst:50 +msgid "Rewrote the Edit Adjudication, Venues, and Teams pages to enable a number of enhancements" +msgstr "" + +#: ../../../CHANGELOG.rst:47 +msgid "These pages now live-update changes that were made on other instances of that page. As a result, users on different computers can each open the Edit Adjudicators page and see the changes made by the other users. This feature, along with sharding, should make it easier than ever to distribute the task of adjudicator allocation across an entire adjudication core" +msgstr "" + +#: ../../../CHANGELOG.rst:48 +msgid "A new interface layout should better maximise space, particularly in BP settings, while also increasing the font size of key information" +msgstr "" + +#: ../../../CHANGELOG.rst:49 +msgid "The unused panel is now able to sort adjudicators by name, score, or drag order" +msgstr "" + +#: ../../../CHANGELOG.rst:50 +msgid "Average scores for all adjudicators, and a voting majority, are now shown next to the panel" +msgstr "" + +#: ../../../CHANGELOG.rst:51 +msgid "Various allocation-relevant settings, such as the minimum feedback score needed for a voting position, are now available inline on the allocation page itself. This should enable much faster tweaks/iterations of these values" +msgstr "" + +#: ../../../CHANGELOG.rst:52 +msgid "The ballot entry page will now indicate which teams have currently or recently given 'iron person' speeches so that these can be easily tracked, audited, and confirmed. It does show by showing both a text-highlight/icon in the table and in a dedicated modal window. Thanks to Étienne Beaulé for contributing this feature!" +msgstr "" + +#: ../../../CHANGELOG.rst:54 +msgid "Split up the Django settings files. Note that this means if you are upgrading a local install of Tabbycat to this version you will need to:" +msgstr "" + +#: ../../../CHANGELOG.rst:54 +msgid "Copy ``tabbycat/settings/local.example`` to become ``local.py`` (and fill in your original database details)" +msgstr "" + +#: ../../../CHANGELOG.rst:55 +msgid "Optional: repeat the same copying procedure for ``development.example`` and set the ``LOCAL_DEVELOPMENT`` environmental variable to ``True`` if you would like to use the settings designed to aid local development" +msgstr "" + +#: ../../../CHANGELOG.rst:61 +msgid "A range of improvements to the email notifications contributed by Étienne Beaulé:" +msgstr "" + +#: ../../../CHANGELOG.rst:57 +msgid "Ballot receipt emails now provide more information about team scores/points" +msgstr "" + +#: ../../../CHANGELOG.rst:58 +msgid "Emails are now in a rich-text format" +msgstr "" + +#: ../../../CHANGELOG.rst:59 +msgid "Custom emails may be sent out to select participants through the web-interface" +msgstr "" + +#: ../../../CHANGELOG.rst:60 +msgid "Participants can be specifically included or excluded from receiving a notification before sending with checks for duplicate messages" +msgstr "" + +#: ../../../CHANGELOG.rst:61 +msgid "Teams can be sent emails with their draw details" +msgstr "" + +#: ../../../CHANGELOG.rst:62 +msgid "Emails can be tracked to determine if sent or read (SendGrid-specific)" +msgstr "" + +#: ../../../CHANGELOG.rst:65 +msgid "Expanded the use of private URLs (Encore Étienne Beaulé):" +msgstr "" + +#: ../../../CHANGELOG.rst:64 +msgid "QR codes are now included in addition to the URL when printing private URLs" +msgstr "" + +#: ../../../CHANGELOG.rst:65 +msgid "Private landing pages will now display check-in status (if check-ins are used) along with further details regarding break categories, regions, etc." +msgstr "" + +#: ../../../CHANGELOG.rst:66 +msgid "Current and former draw assignments will display along with submitted ballots (for adjudicators) on landing pages" +msgstr "" + +#: ../../../CHANGELOG.rst:70 +msgid "Reworked how conflicts are determined to support double-past institutional conflicts:" +msgstr "" + +#: ../../../CHANGELOG.rst:68 +msgid "Added a \"team-institution conflict\" model" +msgstr "" + +#: ../../../CHANGELOG.rst:69 +msgid "Like adjudicator-institution conflicts, team-institution conflicts are automatically created if you use the simple importer or the command-line importer; but if you edit the database, it's your responsibility to add/edit them" +msgstr "" + +#: ../../../CHANGELOG.rst:70 +msgid "Institutional affiliations no longer matter for determining conflicts for either teams or adjudicators; only institutions listed in the team's or adjudicator's conflicts matter" +msgstr "" + +#: ../../../CHANGELOG.rst:71 +msgid "An adjudicator/team now conflicts with an adjudicator if *any* institution appears as an institutional conflict for both parties" +msgstr "" + +#: ../../../CHANGELOG.rst:72 +msgid "When printing scoresheets you can now edit the motions display just on that printing page. This allows you to use placeholder motions in Tabbycat (in order to prevent leaks) while still producing ballots with the correct motions" +msgstr "" + +#: ../../../CHANGELOG.rst:73 +msgid "Tabbycat no longer tracks which round is the 'current' round and instead tracks the completion of individual rounds. This change does not alter any existing workflows, but makes it easier to run simultaneous draws in out-rounds" +msgstr "" + +#: ../../../CHANGELOG.rst:74 +msgid "Info-slides can now be split into paragraphs" +msgstr "" + +#: ../../../CHANGELOG.rst:75 +msgid "Check-in pages now differentiate between teams with 1 and 2 checked-in people in two-team formats" +msgstr "" + +#: ../../../CHANGELOG.rst:76 +msgid "Institutional caps in breaks can be based on the number of teams in the break. Thanks to Viran Weerasekera for this feature!" +msgstr "" + +#: ../../../CHANGELOG.rst:77 +msgid "Several Tabbycat functions, adjudicator/venue allocation and email notifications, have been shifted to worker processes to help make them more reliable. If you are upgrading a Tabbycat instance that you will continue to use for new tournaments you will need to install the Heroku toolbelt and run ``heroku ps:scale worker=1``" +msgstr "" + +#: ../../../CHANGELOG.rst:78 +msgid "Upgraded to Python 3.6, dropped support for Python 3.5 and below. Note that this will require you to upgrade your python versions if running locally." +msgstr "" + +#: ../../../CHANGELOG.rst:82 +msgid "2.2.10" +msgstr "" + +#: ../../../CHANGELOG.rst:83 +msgid "*Release date: 10 February 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:85 +msgid "Fixed the display of feedback quantities on the Feedback Overview Page" +msgstr "" + +#: ../../../CHANGELOG.rst:86 +msgid "Fixed issue where 'ignored' feedback would hide the result from the feedback graph but not affect an adjudicator's current score. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:90 +msgid "2.2.9" +msgstr "" + +#: ../../../CHANGELOG.rst:91 +msgid "*Release date: 24 January 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:93 +msgid "Fixed an issue that could cause errors for tournaments when using an atypical number of rounds and break sizes. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:94 +msgid "Fixed an issue where the display of adjudicator's record links would display their name twice" +msgstr "" + +#: ../../../CHANGELOG.rst:98 +msgid "2.2.8" +msgstr "" + +#: ../../../CHANGELOG.rst:99 +msgid "*Release date: 14 December 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:101 +msgid "Fix issue where the check-in buttons were always disabled on admin and assistant pages" +msgstr "" + +#: ../../../CHANGELOG.rst:102 +msgid "Other minor fixes. Thanks to Étienne for these and for the check-in button fix!" +msgstr "" + +#: ../../../CHANGELOG.rst:106 +msgid "2.2.7" +msgstr "" + +#: ../../../CHANGELOG.rst:107 +msgid "*Release date: 16 November 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:109 +msgid "Lock redis-py version to 2.10.6, as workaround for `compatibility issue between django-redis and redis-py `_" +msgstr "" + +#: ../../../CHANGELOG.rst:110 +msgid "Fix login link on page shown after a user logs out" +msgstr "" + +#: ../../../CHANGELOG.rst:114 +msgid "2.2.6" +msgstr "" + +#: ../../../CHANGELOG.rst:115 +msgid "*Release date: 14 November 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:117 +msgid "Fix issue where check-ins could not be revoked" +msgstr "" + +#: ../../../CHANGELOG.rst:118 +msgid "Fix issue where the standings overview 'dashboard' included scores from elimination rounds. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:119 +msgid "Fix issue where the Average Individual Speaker Score metric would fail to calculate in some circumstances. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:120 +msgid "Fix issue where draw emails would crash if venues were unspecified. Thanks, again, to Étienne for this fix!" +msgstr "" + +#: ../../../CHANGELOG.rst:124 +msgid "2.2.5" +msgstr "" + +#: ../../../CHANGELOG.rst:125 +msgid "*Release date: 21 October 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:127 +msgid "Remove the buttons from the public check-ins page (as these do nothing unless the user is logged in)" +msgstr "" + +#: ../../../CHANGELOG.rst:128 +msgid "Hopefully fixed error that could cause Team- and Adjudicator- Institutional conflicts to not show properly on Allocation pages" +msgstr "" + +#: ../../../CHANGELOG.rst:129 +msgid "Thanks to Étienne for pull requests fixing rare bugs in the user creation form and break generation when rounds are not present" +msgstr "" + +#: ../../../CHANGELOG.rst:133 +msgid "2.2.4" +msgstr "" + +#: ../../../CHANGELOG.rst:134 +msgid "*Release date: 9 October 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:136 +msgid "Small fixes for functions related to email sending, conflict highlighting, and certain configurations of standings metrics" +msgstr "" + +#: ../../../CHANGELOG.rst:140 +msgid "2.2.3" +msgstr "" + +#: ../../../CHANGELOG.rst:141 +msgid "*Release date: 28 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:143 +msgid "*Literally* fix the issue causing public views of released scoresheets to throw errors (thanks for the pull request Étienne)" +msgstr "" + +#: ../../../CHANGELOG.rst:144 +msgid "Fix minor spacing issues in printed ballots (thanks for the pull request Étienne)" +msgstr "" + +#: ../../../CHANGELOG.rst:145 +msgid "Fix issue where institution-less adjudicators would cause some draw views to crash (thanks for the pull request Étienne)" +msgstr "" + +#: ../../../CHANGELOG.rst:149 +msgid "2.2.2" +msgstr "" + +#: ../../../CHANGELOG.rst:150 +msgid "*Release date: 22 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:152 +msgid "*Actually* fix the issue causing public views of released scoresheets to throw errors" +msgstr "" + +#: ../../../CHANGELOG.rst:156 +msgid "2.2.1" +msgstr "" + +#: ../../../CHANGELOG.rst:157 +msgid "*Release date: 21 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:159 +msgid "Fix issue causing public views of released scoresheets to throw errors" +msgstr "" + +#: ../../../CHANGELOG.rst:163 +msgid "2.2.0 (Khao Manee)" +msgstr "" + +#: ../../../CHANGELOG.rst:164 +msgid "*Release date: 20 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:167 +msgid "Implemented a new server architecture on Heroku along with other optimisation that should significantly improve the performance of sites receiving lots of traffic. Note that if you are upgrading an existing Heroku instance this requires a few tweaks before you deploy the update:" +msgstr "" + +#: ../../../CHANGELOG.rst:167 +msgid "Add the `https://github.com/heroku/heroku-buildpack-nginx.git` build pack under the Settings area of the Heroku Dashboard and positioning it first" +msgstr "" + +#: ../../../CHANGELOG.rst:168 +msgid "If your Heroku Stack is not \"heroku-16\" (noted under that same Settings page) it will need to be set as such using the Heroku CLI and the ``heroku stack:set heroku-16 --app APP_NAME`` command" +msgstr "" + +#: ../../../CHANGELOG.rst:169 +msgid "Added a page to the documentation that details how to scale a Tabbycat site that is receiving large amounts of traffic; and another page that documents how to upgrade a Tabbycat site to a new version" +msgstr "" + +#: ../../../CHANGELOG.rst:170 +msgid "Added support for Japanese and Portuguese. Let us know if you'd like to help contribute translations for either language (or a new one)!" +msgstr "" + +#: ../../../CHANGELOG.rst:171 +msgid "The results-entry page now updates its data live, giving you a more up to date look at data entry progress and reducing the cases of old data leading people to enter new ballots when they meant to confirm them" +msgstr "" + +#: ../../../CHANGELOG.rst:178 +msgid "A huge thanks to Étienne Beaulé for contributing a number of major new features and bug fixes. Notably:" +msgstr "" + +#: ../../../CHANGELOG.rst:173 +msgid "Added a means to mark feedback as 'ignored' so that it still is recorded as having been submitted, but does not affect the targeted-adjudicator's feedback score" +msgstr "" + +#: ../../../CHANGELOG.rst:174 +msgid "Added email notification to adjudicators on round release" +msgstr "" + +#: ../../../CHANGELOG.rst:175 +msgid "Implemented participant self-check-in through the use of their private URLs" +msgstr "" + +#: ../../../CHANGELOG.rst:176 +msgid "Gave all participants to a tournament a private URL key rather than being by team, and added a landing page for the participants using this key" +msgstr "" + +#: ../../../CHANGELOG.rst:177 +msgid "Implemented templated email notifications with ballot submission and round advance with the messages in a new settings panel. Private URL emails are now also customizable" +msgstr "" + +#: ../../../CHANGELOG.rst:178 +msgid "Added the \"average individual speaker score\" metric which averages the scores of all substantive speeches by the team within preliminary rounds. The old \"average speaker score\" metric has been renamed to to \"average total speaker score\"" +msgstr "" + +#: ../../../CHANGELOG.rst:179 +msgid "Reworked the ballots status graph to be an area chart" +msgstr "" + +#: ../../../CHANGELOG.rst:180 +msgid "Added the ability to hide motions on printed ballots (even if they have been entered). Thanks to Github user 0zlw for the feature request!" +msgstr "" + +#: ../../../CHANGELOG.rst:181 +msgid "Added the ability to unconfirm feedback from any of the views that show it" +msgstr "" + +#: ../../../CHANGELOG.rst:182 +msgid "BP motion statistics now also show average points split by bench and half" +msgstr "" + +#: ../../../CHANGELOG.rst:183 +msgid "Added a warning when users are close to their free-tier database limit on Heroku that makes it clear not to create new tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:184 +msgid "Added ``exportconfig`` and ``importconfig`` management commands to export and import tournament configurations to a JSON file" +msgstr "" + +#: ../../../CHANGELOG.rst:185 +msgid "Upgraded `django-dynamic-preferences `_ to version 1.6" +msgstr "" + +#: ../../../CHANGELOG.rst:187 +msgid "This won't affect most users, but advanced users previously having problems with a stray ``dynamic_preferences_users_userpreferencemodel`` table who are upgrading an existing instance may wish to run the SQL command ``DROP TABLE dynamic_preferences_users_userpreferencemodel;`` to remove this stray table. When this table was present, it caused an inconsistency between migration state and database schema that in turned caused the ``python manage.py flush`` command to fail. More information is available in the `django-dynamic-preferences changelog `_" +msgstr "" + +#: ../../../CHANGELOG.rst:191 +msgid "2.1.3" +msgstr "" + +#: ../../../CHANGELOG.rst:192 +msgid "*Release date: 21 August 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:194 +msgid "Added an alert for British Parliamentary format grand-final ballots that explains the workaround needed to nominate a sole winner" +msgstr "" + +#: ../../../CHANGELOG.rst:195 +msgid "Improved display of images shown when sharing Tabbycat links on social media" +msgstr "" + +#: ../../../CHANGELOG.rst:196 +msgid "Optimised the performance of several commonly-loaded pages. Thanks to Étienne Beaulé for the pull request!" +msgstr "" + +#: ../../../CHANGELOG.rst:197 +msgid "Prevented the entry of integer-scale feedback questions without the required min/max attributes" +msgstr "" + +#: ../../../CHANGELOG.rst:198 +msgid "Provided a shortcut link to editing a round's feedback weight" +msgstr "" + +#: ../../../CHANGELOG.rst:199 +msgid "Prevented standings from crashing when only a single standings metric is set" +msgstr "" + +#: ../../../CHANGELOG.rst:203 +msgid "2.1.2" +msgstr "" + +#: ../../../CHANGELOG.rst:204 +msgid "*Release date: 14 July 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:206 +msgid "Fixed an error caused when calculating breaks including teams without institutions" +msgstr "" + +#: ../../../CHANGELOG.rst:207 +msgid "Improved display of long motions and info slides" +msgstr "" + +#: ../../../CHANGELOG.rst:208 +msgid "Fixed bug in feedback progress tracking with UADC-style adjudication" +msgstr "" + +#: ../../../CHANGELOG.rst:209 +msgid "Fixed bug where the public checks page would cause large amounts of failing requests" +msgstr "" + +#: ../../../CHANGELOG.rst:210 +msgid "Fixed visual issue with adjudicator lists wrapping poorly on mobile devices" +msgstr "" + +#: ../../../CHANGELOG.rst:211 +msgid "Limited the time it takes to serve requests to match Heroku's in-built limit; this may help improve the performance of sites under heavy load" +msgstr "" + +#: ../../../CHANGELOG.rst:215 +msgid "2.1.1" +msgstr "" + +#: ../../../CHANGELOG.rst:216 +msgid "*Release date: 19 May 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:218 +msgid "The Scan Identifiers page now orders check-ins from top to bottom" +msgstr "" + +#: ../../../CHANGELOG.rst:219 +msgid "The Scan Identifiers now plays different sounds for failed check-ins" +msgstr "" + +#: ../../../CHANGELOG.rst:220 +msgid "The Scan Identifiers now has a toggle for sounds; allowing it to work in browsers like Safari that block auto-playing audio" +msgstr "" + +#: ../../../CHANGELOG.rst:224 +msgid "2.1.0 (Japanese Bobtail)" +msgstr "" + +#: ../../../CHANGELOG.rst:225 +msgid "*Release date: 7 May 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:227 +msgid "Added an introductory modal for the adjudicator allocation page to help outline how the features and workflow operate" +msgstr "" + +#: ../../../CHANGELOG.rst:228 +msgid "Added an automated method for assigning importances to debates using their bracket or 'liveness'. This should allow smaller tournaments to more easily assign importances and save time for larger tournaments that do so" +msgstr "" + +#: ../../../CHANGELOG.rst:230 +msgid "Added the ability to switch between using 'team codes' and standard team names" +msgstr "" + +#: ../../../CHANGELOG.rst:230 +msgid "By default team codes are set to match that team's emoji, but team codes are editable and can be imported like standard data" +msgstr "" + +#: ../../../CHANGELOG.rst:231 +msgid "Team codes can be swapped in an out for standard team names at will, with precise control over the contexts in which either is used — i.e. in public-facing pages, in admin-facing pages, in tooltips, *etc.*" +msgstr "" + +#: ../../../CHANGELOG.rst:235 +msgid "Added a range of 'check-in' functionality" +msgstr "" + +#: ../../../CHANGELOG.rst:233 +msgid "This includes barcode assignment, printing, and scanning. Scanning methods are optimised both for manual entry, entry with barcodes scanners, and for a 'live' scanning view that uses your phone's camera!" +msgstr "" + +#: ../../../CHANGELOG.rst:234 +msgid "This includes new people and venue status pages that show an overview of check-in status and allow for easy manual check-ins; ideal for a roll-calls!. This page can also be made public" +msgstr "" + +#: ../../../CHANGELOG.rst:235 +msgid "Ballot check-ins have been converted to this new method, and now all printed ballots will contain the barcodes needed to scan them" +msgstr "" + +#: ../../../CHANGELOG.rst:236 +msgid "Venue check-ins have been added alongside the standard 'person' check-ins to allow you to track a room's status at the start of the day or round-by-round" +msgstr "" + +#: ../../../CHANGELOG.rst:239 +msgid "Added (partial) translations in French, Spanish and Arabic" +msgstr "" + +#: ../../../CHANGELOG.rst:238 +msgid "Users can now use a link in the footer to switch the site's language into French, Spanish, or Arabic. By default Tabbycat should also match your browser's language and so automatically apply those languages if it matches" +msgstr "" + +#: ../../../CHANGELOG.rst:239 +msgid "Our translations are generously provided by volunteers, but (so far) do not cover all of the interface text within Tabbycat. If you're interested in helping to translate new or existing languages please get in touch!" +msgstr "" + +#: ../../../CHANGELOG.rst:240 +msgid "Thanks to the excellent team at QatarDebate for contributing the Arabic translations, and to Alejandro, Hernando, Julian and Zoe for contributing the Spanish translations." +msgstr "" + +#: ../../../CHANGELOG.rst:242 +msgid "Added a new (beta) feature: allocation 'sharding'" +msgstr "" + +#: ../../../CHANGELOG.rst:242 +msgid "Sharding allows you to split up the Adjudicator Allocation screen into a defined subset of the draw. This has been designed so that you can have multiple computers doing allocations simultaneously; allowing the adjudication core to split itself and tackle allocations in parallel." +msgstr "" + +#: ../../../CHANGELOG.rst:243 +msgid "Shards can be assigned into defined fractions (i.e. halves or fifths) according to specific criteria (i.e. bracket or priority) and following either a top-to-bottom sorting or a mixed sorting that ensures each bracket has an even proportion of each criteria." +msgstr "" + +#: ../../../CHANGELOG.rst:244 +msgid "Added an option to show a \"Confirm Digits\" option to pre-printed ballots that asks adjudicators to confirm their scores in a manner that may help clarify instances or bad handwriting. This can be enabled in the \"Data Entry\" settings area." +msgstr "" + +#: ../../../CHANGELOG.rst:245 +msgid "Added a 'liveness' calculator for BP that will estimate whether each team has, can, or can't break in each of their categories (as previously existed for 2-team formats)" +msgstr "" + +#: ../../../CHANGELOG.rst:246 +msgid "Added draw pull-up option: pull up from middle" +msgstr "" + +#: ../../../CHANGELOG.rst:247 +msgid "Added new draw option: choose pull-up from teams who have been pulled up the fewest times so far" +msgstr "" + +#: ../../../CHANGELOG.rst:248 +msgid "Added the ability to have different 'ballots-per-debates' for in/out rounds; accommodating tournaments like Australian Easters that use consensus for preliminary rounds but voting for elimination rounds." +msgstr "" + +#: ../../../CHANGELOG.rst:249 +msgid "Added time zone support to the locations where times are displayed" +msgstr "" + +#: ../../../CHANGELOG.rst:250 +msgid "Administrators can now view pages as if they were Assistants; allowing them to (for example) use the data entry forms that enforce double-checking without needed to create a separate account" +msgstr "" + +#: ../../../CHANGELOG.rst:251 +msgid "Fixed χ² test in motion statistics, and refactored the motion statistics page" +msgstr "" + +#: ../../../CHANGELOG.rst:252 +msgid "Teams, like adjudicators, no longer need to have an institution" +msgstr "" + +#: ../../../CHANGELOG.rst:253 +msgid "Added a page allowing for bulk updates to adjudicator scores" +msgstr "" + +#: ../../../CHANGELOG.rst:254 +msgid "Added break categories to team standings, and new team standings pages for break categories" +msgstr "" + +#: ../../../CHANGELOG.rst:259 +msgid "Made speaker standings more configurable" +msgstr "" + +#: ../../../CHANGELOG.rst:256 +msgid "Second-order metrics can now be specified" +msgstr "" + +#: ../../../CHANGELOG.rst:257 +msgid "Added trimmed mean (also known as high-low drop)" +msgstr "" + +#: ../../../CHANGELOG.rst:258 +msgid "Added ability to set no limit for number of missed debates" +msgstr "" + +#: ../../../CHANGELOG.rst:259 +msgid "Standard deviation is now the population standard deviation (was previously sample), and ranks in ascending order if used to rank speakers." +msgstr "" + +#: ../../../CHANGELOG.rst:273 ../../../CHANGELOG.rst:386 +msgid "Quality of life improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:262 +msgid "Added a \"☆\" indicator to more obviously liveness in the adjudicator allocation screen" +msgstr "" + +#: ../../../CHANGELOG.rst:263 +msgid "Added WYSIWYG editor for tournament welcome message, and moved it to tournament configuration" +msgstr "" + +#: ../../../CHANGELOG.rst:264 +msgid "Added \"appellant\" and \"respondent\" to the side name options" +msgstr "" + +#: ../../../CHANGELOG.rst:265 +msgid "Added a two new columns to the feedback overview page: one that displays the current difference between an adjudicator's test score and their current weighted score; another the displays the standard deviation of an adjudicator's feedback scores" +msgstr "" + +#: ../../../CHANGELOG.rst:266 +msgid "Added an 'important feedback' page that highlights feedback significantly above or below an adjudicator's test score" +msgstr "" + +#: ../../../CHANGELOG.rst:267 +msgid "Added a means to bulk-import adjudicator scores (for example from a CSV) to make it easier to work with external feedback processing" +msgstr "" + +#: ../../../CHANGELOG.rst:268 +msgid "Speakers and speaker's emails in the simple importer can now be separated by commas or tabs in addition to new lines" +msgstr "" + +#: ../../../CHANGELOG.rst:269 +msgid "The \"shared\" checkbox in the simple importer is now hidden unless the relevant tournament option is enabled" +msgstr "" + +#: ../../../CHANGELOG.rst:270 +msgid "Current team standings page now shows silent round results if \"Release all round results to public\" is set" +msgstr "" + +#: ../../../CHANGELOG.rst:271 +msgid "The Consensus vs Voting options for how ballots work has now been split into two settings: one option for preliminary rounds and one option for elimination rounds" +msgstr "" + +#: ../../../CHANGELOG.rst:272 +msgid "Speaker scores now show as integers (without decimals) where the tournament format would not allow decimals" +msgstr "" + +#: ../../../CHANGELOG.rst:273 +msgid "Added a page showing a list of institutions in the tournament" +msgstr "" + +#: ../../../CHANGELOG.rst:274 +msgid "On the assistant \"enter results\" page, pressing \"/\" jumps to the \"Find in Table\" box, so data entry can be done entirely from your keyboard" +msgstr "" + +#: ../../../CHANGELOG.rst:276 +msgid "Switched to using a Websockets/Channels based infrastructure to better allow for asynchronous updates. This should also ameliorate cases where the Memcachier plugin expired due to inactivity which would then crash a site. Notes for those upgrading:" +msgstr "" + +#: ../../../CHANGELOG.rst:276 +msgid "On Heroku: You should remove the Memcachier plugin and instead add 'heroku-redis' to any instances being upgraded" +msgstr "" + +#: ../../../CHANGELOG.rst:277 +msgid "Locally: You should recreate your `local_settings.py` from the `local_settings.example` file" +msgstr "" + +#: ../../../CHANGELOG.rst:280 +msgid "Upgraded to Django 2.0" +msgstr "" + +#: ../../../CHANGELOG.rst:279 +msgid "Converted most raw SQL queries to use the new ``filter`` keyword in annotations" +msgstr "" + +#: ../../../CHANGELOG.rst:283 +msgid "2.0.7" +msgstr "" + +#: ../../../CHANGELOG.rst:284 +msgid "*Release date: 13 April 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:286 +msgid "Fixed an issue preventing draws with pre-allocate sides generating" +msgstr "" + +#: ../../../CHANGELOG.rst:290 +msgid "2.0.6" +msgstr "" + +#: ../../../CHANGELOG.rst:291 +msgid "*Release date: 20 March 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:293 +msgid "Added reminder to add own-institution conflicts in the Edit Database area" +msgstr "" + +#: ../../../CHANGELOG.rst:298 +msgid "2.0.5" +msgstr "" + +#: ../../../CHANGELOG.rst:299 +msgid "*Release date: 7 February 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:301 +msgid "Improved the printing of scoresheets and feedback forms on Chrome." +msgstr "" + +#: ../../../CHANGELOG.rst:306 +msgid "2.0.4" +msgstr "" + +#: ../../../CHANGELOG.rst:307 +msgid "*Release date: 22 January 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:309 +msgid "Add alert for users who try to do voting ballots on BP-configured tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:310 +msgid "Fixed issue where draws of the \"manual\" type would not generate correctly" +msgstr "" + +#: ../../../CHANGELOG.rst:311 +msgid "Fixed issue where a ballot's speaker names dropdown would contain both team's speakers when using formats with side selection" +msgstr "" + +#: ../../../CHANGELOG.rst:312 +msgid "Fixed issue where scoresheets would not show correctly under some configurations" +msgstr "" + +#: ../../../CHANGELOG.rst:313 +msgid "Improved display of really long motions when using the inbuilt motion-showing page" +msgstr "" + +#: ../../../CHANGELOG.rst:318 +msgid "2.0.3" +msgstr "" + +#: ../../../CHANGELOG.rst:319 +msgid "*Release date: 3 December 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:321 +msgid "Fixed issue where the 'prefix team name with institution name' checkbox would not be correctly saved when using the Simple Importer" +msgstr "" + +#: ../../../CHANGELOG.rst:322 +msgid "Removed the scroll speed / text size buttons on mobile draw views that were making it difficult to view the table" +msgstr "" + +#: ../../../CHANGELOG.rst:323 +msgid "Improved the display of the motions tab page on mobile devices and fixed an issue where it appeared as if only half the vetoes were made" +msgstr "" + +#: ../../../CHANGELOG.rst:327 +msgid "2.0.2" +msgstr "" + +#: ../../../CHANGELOG.rst:328 +msgid "*Release date: 27 November 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:333 +msgid "Fixes and improvements to diversity overview" +msgstr "" + +#: ../../../CHANGELOG.rst:331 +msgid "Fixed average feedback rating from teams, it was previously (incorrectly) showing the average feedback rating from all adjudicators" +msgstr "" + +#: ../../../CHANGELOG.rst:332 +msgid "Gender splits for average feedback rating now go by target adjudicator; this was previously source adjudicator" +msgstr "" + +#: ../../../CHANGELOG.rst:333 +msgid "Persons with unknown gender are now shown in counts (but not score/rating averages); a bug had previously caused them to be incorrectly counted as zero" +msgstr "" + +#: ../../../CHANGELOG.rst:334 +msgid "Improved query efficiency of the page" +msgstr "" + +#: ../../../CHANGELOG.rst:335 +msgid "Improved the BP motions tab for out-rounds by specifying advancing teams as \"top/bottom ½\" rather than as 1st/4th and removed the average-points-per-position graphs that were misleading" +msgstr "" + +#: ../../../CHANGELOG.rst:336 +msgid "Improved handling of long motions in the motion display interface" +msgstr "" + +#: ../../../CHANGELOG.rst:337 +msgid "Fixed issue where creating BP tournaments using the wizard would create an extra break round given the size of the break specified" +msgstr "" + +#: ../../../CHANGELOG.rst:338 +msgid "Fixed auto-allocation in consensus panels where there are fewer judges than debates in the round" +msgstr "" + +#: ../../../CHANGELOG.rst:339 +msgid "Fixed reply speaker validity check when speeches are marked as duplicate" +msgstr "" + +#: ../../../CHANGELOG.rst:340 +msgid "Prohibit assignment of teams to break categories of other tournaments in Edit Database area" +msgstr "" + +#: ../../../CHANGELOG.rst:344 +msgid "2.0.1" +msgstr "" + +#: ../../../CHANGELOG.rst:345 +msgid "*Release date: 21 November 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:347 +msgid "Fixed issue where results submission would crash if sides are unconfirmed" +msgstr "" + +#: ../../../CHANGELOG.rst:348 +msgid "Fixed issue where scoresheets would not display properly for adjudicators who lack institutions" +msgstr "" + +#: ../../../CHANGELOG.rst:349 +msgid "Fixed issue where the round history indicators in the Edit Adjudicators page would sometimes omit the \"rounds ago\" indicator" +msgstr "" + +#: ../../../CHANGELOG.rst:353 +msgid "2.0.0 (Iberian Lynx)" +msgstr "" + +#: ../../../CHANGELOG.rst:354 +msgid "*Release date: 13 November 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:358 +msgid "British Parliamentary support" +msgstr "" + +#: ../../../CHANGELOG.rst:357 +msgid "Full support for British Parliamentary format has been added and we're incredibly excited to see Tabbycat's unique features and design (finally) available as an option for those tabbing in the predominant global format" +msgstr "" + +#: ../../../CHANGELOG.rst:358 +msgid "As part of the implementation of this format we've made significant improvements over existing tab software on how sides are allocated within BP draws. This means that teams are less likely to have 'imbalanced' proportions of side allocations (for example having many more debates as Opening Government than Closing Opposition)" +msgstr "" + +#: ../../../CHANGELOG.rst:359 +msgid "We've added a new \"Comparisons\" page added to the documentation to outline some of the key differences between Tabbycat and other software in the context of BP tabbing" +msgstr "" + +#: ../../../CHANGELOG.rst:365 +msgid "Refreshed interface design" +msgstr "" + +#: ../../../CHANGELOG.rst:361 +msgid "The basic graphic elements of Tabbycat have had a their typography, icons, colours, forms, and more redesign for a more distinctive and clear look. We also now have an official logo!" +msgstr "" + +#: ../../../CHANGELOG.rst:362 +msgid "The \"Motions\" stage of the per-round workflow has now been rolled into the Display area to better accommodate BP formats and consolidate the Draw/Motion 'release' process" +msgstr "" + +#: ../../../CHANGELOG.rst:363 +msgid "Sidebar menu items now display all sub-items within a section, such as for Feedback, Standings, and Breaks" +msgstr "" + +#: ../../../CHANGELOG.rst:364 +msgid "Better tablet and mobile interfaces; including a fully responsive sidebar for the admin area that maximises the content area" +msgstr "" + +#: ../../../CHANGELOG.rst:365 +msgid "More explicit and obvious calls-to-action for the key tasks necessary to running a round, with better interface alerts and text to help users understand when and why to perform crucial actions" +msgstr "" + +#: ../../../CHANGELOG.rst:366 +msgid "Redesigned motions tab page that gives a better idea of the sample size and distribution of results in both two- and four- team formats" +msgstr "" + +#: ../../../CHANGELOG.rst:368 +msgid "Improved handling of Break Rounds ballots and sides allocation" +msgstr "" + +#: ../../../CHANGELOG.rst:368 +msgid "The positions of teams within a break round are now created by the initial draw generation in an 'unset' state in recognition that most tournaments assign these manually (through say a coin toss). This should help clarify when showing break rounds draws when sides are or are not finalised" +msgstr "" + +#: ../../../CHANGELOG.rst:369 +msgid "Break rounds ballots for formats where scores are not typically entered (i.e. BP) will only specify that you nominate the teams advancing rather than enter in all of the speakers' scores" +msgstr "" + +#: ../../../CHANGELOG.rst:370 +msgid "Now, like Break Categories, you can define arbitrary Categories such as 'Novice' or 'ESL' to create custom Speaker tabs for groups of Speakers" +msgstr "" + +#: ../../../CHANGELOG.rst:371 +msgid "You can now release an Adjudicators Tab showing test scores, final scores, and/or per-round feedback averages" +msgstr "" + +#: ../../../CHANGELOG.rst:372 +msgid "Information Slides can now be added to the system; either for showing to an auditorium within Tabbycat or for displaying alongside the public list of motions and/or the motions tab" +msgstr "" + +#: ../../../CHANGELOG.rst:373 +msgid "Teams and adjudicators are no longer required to have institutions; something that should be very useful when setting up small IVs and the like" +msgstr "" + +#: ../../../CHANGELOG.rst:374 +msgid "Private URLs can now be incrementally generated. Records of sent mail are now also kept by Tabbycat, so that emails can be incrementally sent to participants as registration data changes" +msgstr "" + +#: ../../../CHANGELOG.rst:376 +msgid "After creating a new tournament you will now be prompted to apply a basic rules and public information preset" +msgstr "" + +#: ../../../CHANGELOG.rst:377 +msgid "Better handling of errors that arise when a debate team is missing or where two teams have been assigned the same side" +msgstr "" + +#: ../../../CHANGELOG.rst:378 +msgid "Fixed issue where the adjudicator feedback graphs would not sort along with their table" +msgstr "" + +#: ../../../CHANGELOG.rst:379 +msgid "The Feedback Overview page now makes it more clear how the score is determined, the current distribution of scores, and how scores affect the distribution of chairs, panellists, and trainees" +msgstr "" + +#: ../../../CHANGELOG.rst:380 +msgid "Speaker tabs now default to sorting by average, except for formats where we are certain that they must be sorted by total. The speaker tab page itself now prominently notes which setting is is currently using" +msgstr "" + +#: ../../../CHANGELOG.rst:381 +msgid "'Feedback paths' now default to a more permissive setting (rather than only allowing Chairs to submit feedback) and the Feedback Overview page will note that current configuration" +msgstr "" + +#: ../../../CHANGELOG.rst:382 +msgid "Emails can be assigned to adjudicators and teams in the Simple Importer" +msgstr "" + +#: ../../../CHANGELOG.rst:383 +msgid "More of the tables that allow you to set or edit data (such as the check-in tables for adjudicators, teams and venues) now automatically save changes" +msgstr "" + +#: ../../../CHANGELOG.rst:384 +msgid "When adding/editing users extraneous fields have been hidden and the \"Staff\" and \"Superuser\" roles have new sub-text clarifying what they mean for users with those permissions" +msgstr "" + +#: ../../../CHANGELOG.rst:385 +msgid "Team record pages now show cumulative team points, and if the speaker tab is fully released, speaker scores for that team in each debate" +msgstr "" + +#: ../../../CHANGELOG.rst:389 +msgid "1.4.6" +msgstr "" + +#: ../../../CHANGELOG.rst:390 +msgid "*Release date: 23 October 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:392 +msgid "Fixed issue where speaker standings with a large amount of non-ranking speakers would cause the page to load slowly or time-out." +msgstr "" + +#: ../../../CHANGELOG.rst:396 +msgid "1.4.5" +msgstr "" + +#: ../../../CHANGELOG.rst:397 +msgid "*Release date: 14 October 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:399 +msgid "Added warning message when adjudicator scores are outside the expected range" +msgstr "" + +#: ../../../CHANGELOG.rst:400 +msgid "Fixed handling of uniqueness failure in simple importer for teams" +msgstr "" + +#: ../../../CHANGELOG.rst:404 +msgid "1.4.4" +msgstr "" + +#: ../../../CHANGELOG.rst:405 +msgid "*Release date: 27 September 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:407 +msgid "Fixed Vue dependency issue preventing Heroku installs after a dependency release" +msgstr "" + +#: ../../../CHANGELOG.rst:408 +msgid "Fixed issue with formatting non-numeric standings metrics" +msgstr "" + +#: ../../../CHANGELOG.rst:409 +msgid "Fixed behaviour of public tabs when all rounds are silent" +msgstr "" + +#: ../../../CHANGELOG.rst:413 +msgid "1.4.3" +msgstr "" + +#: ../../../CHANGELOG.rst:414 +msgid "*Release date: 9 September 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:416 +msgid "A number of improvements to error handling and logging" +msgstr "" + +#: ../../../CHANGELOG.rst:417 +msgid "Changed the \"previous round\" of an elimination round to point to the last one in the same break category" +msgstr "" + +#: ../../../CHANGELOG.rst:418 +msgid "Other minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:422 +msgid "1.4.2" +msgstr "" + +#: ../../../CHANGELOG.rst:423 +msgid "*Release date: 23 August 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:425 +msgid "Minor bug fixes and error logging improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:429 +msgid "1.4.1" +msgstr "" + +#: ../../../CHANGELOG.rst:430 +msgid "*Release date: 2 August 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:432 +msgid "Fixed bug that prevented edited matchups from being saved" +msgstr "" + +#: ../../../CHANGELOG.rst:433 +msgid "Added flag to prevent retired sites from using the database for sessions" +msgstr "" + +#: ../../../CHANGELOG.rst:437 +msgid "1.4.0 (Havana Brown)" +msgstr "" + +#: ../../../CHANGELOG.rst:438 +msgid "*Release date: 26 July 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:444 +msgid "Overhauled the adjudicator allocation, venue allocation, and matchups editing pages, including:" +msgstr "" + +#: ../../../CHANGELOG.rst:441 +msgid "Upgraded to Vue 2.0 and refactored the code so that each page better shares methods for displaying the draw, showing additional information, and dragging/dropping" +msgstr "" + +#: ../../../CHANGELOG.rst:442 +msgid "When dragging/dropping, the changed elements now 'lock' in place to indicate that their saving is in-progress" +msgstr "" + +#: ../../../CHANGELOG.rst:443 +msgid "Added conflicts and recent histories to the slideovers shown for teams/adjudicators" +msgstr "" + +#: ../../../CHANGELOG.rst:444 +msgid "Added 'ranking' toggles to visibly highlight adjudicator strengths and more easily identify unbalanced panels" +msgstr "" + +#: ../../../CHANGELOG.rst:445 +msgid "Each interface's table is now sortable by a debate's importance, bracket, liveness, etc." +msgstr "" + +#: ../../../CHANGELOG.rst:446 +msgid "Added a new \"Tournament Logistics\" guide to the documentation that outlines some general best practices for tabbing tournaments. Thanks to Viran Weerasekera, Valerie Tierney, Molly Dale, Madeline Schultz, and Vail Bromberger for contributing to this document" +msgstr "" + +#: ../../../CHANGELOG.rst:447 +msgid "Added (basic) support for the Canadian Parliamentary format by allowing for consensus ballots and providing a preset. However note that only some of the common draw rules are supported (check our documentation for more information)" +msgstr "" + +#: ../../../CHANGELOG.rst:448 +msgid "Added an ESL/EFL tab release option and status field" +msgstr "" + +#: ../../../CHANGELOG.rst:449 +msgid "Added a chi-squared test to measure motion balance in the motion standings/balance. Thanks to Viran Weerasekera for contributing this" +msgstr "" + +#: ../../../CHANGELOG.rst:450 +msgid "The Auto Allocate function for adjudicators will now also allocate trainees to solo-chaired debates" +msgstr "" + +#: ../../../CHANGELOG.rst:451 +msgid "Added a 'Tab Release' preset for easily releasing all standings/results pages after a tournament is finished" +msgstr "" + +#: ../../../CHANGELOG.rst:452 +msgid "Added 'Average Speaks by Round' to the standings overview page" +msgstr "" + +#: ../../../CHANGELOG.rst:453 +msgid "Fixed issue where the Auto Allocator was forming panels of incorrect strengths in debates identified as less important" +msgstr "" + +#: ../../../CHANGELOG.rst:454 +msgid "Fixed issue where toggling iron-person speeches on and off wouldn't hide/unset the relevant checkboxes" +msgstr "" + +#: ../../../CHANGELOG.rst:455 +msgid "Fixed issue where VenueCategories could not be edited if they did not have Venues set" +msgstr "" + +#: ../../../CHANGELOG.rst:456 +msgid "Various other small fixes and improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:460 +msgid "1.3.1" +msgstr "" + +#: ../../../CHANGELOG.rst:461 +msgid "*Release date: 26 May 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:463 +msgid "Fixed bug that allowed duplicate emoji to be occasionally generated" +msgstr "" + +#: ../../../CHANGELOG.rst:467 +msgid "1.3.0 (Genetta)" +msgstr "" + +#: ../../../CHANGELOG.rst:468 +msgid "*Release date: 9 May 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:470 +msgid "Added the ability to mark speeches as duplicates when entering ballots so that they will not show in speaker tabs, intended for use with 'iron-man' speeches and swing speakers" +msgstr "" + +#: ../../../CHANGELOG.rst:471 +msgid "Reworked venue constraints and venue display options by streamlining \"venue groups\" and \"venue constraint categories\" into a single \"venue category\" type, with options for how they are used and displayed" +msgstr "" + +#: ../../../CHANGELOG.rst:472 +msgid "Relocated the Random (now renamed 'Private') URL pages to the Setup section and added pages for printing/emailing out the ballot submission URLs" +msgstr "" + +#: ../../../CHANGELOG.rst:473 +msgid "Reworked the simple data importer (formerly the visual importer) to improve its robustness" +msgstr "" + +#: ../../../CHANGELOG.rst:474 +msgid "Improved guards against having no current round set, and added a new page for manually overriding the current round (under Configuration)" +msgstr "" + +#: ../../../CHANGELOG.rst:475 +msgid "Added a preference for controlling whether assistant users have access to pages that can reveal draw or motions information ahead of their public release" +msgstr "" + +#: ../../../CHANGELOG.rst:476 +msgid "Added the ability to limit tab releases to a given number of ranks (*i.e.* only show the top 10 speakers)" +msgstr "" + +#: ../../../CHANGELOG.rst:477 +msgid "Added the ability to redact individual person's identifying details from speaker tabs" +msgstr "" + +#: ../../../CHANGELOG.rst:478 +msgid "Added the ability for user passwords to be easily reset" +msgstr "" + +#: ../../../CHANGELOG.rst:479 +msgid "Added a minimal set of default feedback questions to newly created Tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:480 +msgid "When a tournament's current round is set, redirect to a page where it can be set, rather than crashing" +msgstr "" + +#: ../../../CHANGELOG.rst:481 +msgid "A number of other minor bug fixes and enhancements" +msgstr "" + +#: ../../../CHANGELOG.rst:485 +msgid "1.2.3" +msgstr "" + +#: ../../../CHANGELOG.rst:486 +msgid "*Release date: 17 March 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:488 +msgid "Improved the display of the admin ballot entry form on mobile devices" +msgstr "" + +#: ../../../CHANGELOG.rst:489 ../../../CHANGELOG.rst:497 +#: ../../../CHANGELOG.rst:505 +msgid "A number of other minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:493 +msgid "1.2.2" +msgstr "" + +#: ../../../CHANGELOG.rst:494 +msgid "*Release date: 4 March 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:496 +msgid "Protected debate-team objects from cascaded deletion, and added warning messages with guidance when users would otherwise do this" +msgstr "" + +#: ../../../CHANGELOG.rst:501 +msgid "1.2.1" +msgstr "" + +#: ../../../CHANGELOG.rst:502 +msgid "*Release date: 25 February 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:504 +msgid "Printable feedback forms will now display the default rating scale, any configured introduction text, and better prompt you to add additional questions" +msgstr "" + +#: ../../../CHANGELOG.rst:509 +msgid "1.2.0 (Foldex)" +msgstr "" + +#: ../../../CHANGELOG.rst:510 +msgid "*Release date: 15 February 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:512 +msgid "Changed the core workflow by splitting display- and motion- related activities into separate pages to simplify each stage of running a round" +msgstr "" + +#: ../../../CHANGELOG.rst:513 +msgid "Added support for Docker-based installations to make local/offline installations much more simple" +msgstr "" + +#: ../../../CHANGELOG.rst:514 +msgid "Added a \"Tabbykitten\" version of Tabbycat that can be deployed to Heroku without a needing a credit/debit card" +msgstr "" + +#: ../../../CHANGELOG.rst:515 +msgid "Added button to load a demo tournament on the 'New Tournament' page so it is easier to test-run Tabbycat" +msgstr "" + +#: ../../../CHANGELOG.rst:516 +msgid "Changed venue groups to be separate to venue constraint categories" +msgstr "" + +#: ../../../CHANGELOG.rst:517 +msgid "Modified the licence to clarify that donations are required for some tournaments and added a more explicit donations link and explanation page" +msgstr "" + +#: ../../../CHANGELOG.rst:518 +msgid "Added information about autosave status to the adjudicator allocations page" +msgstr "" + +#: ../../../CHANGELOG.rst:519 +msgid "Added configurable side names so that tournaments can use labels like \"Proposition\"/\"Opposition\" instead of \"Affirmative\"/\"Negative\"" +msgstr "" + +#: ../../../CHANGELOG.rst:520 +msgid "Started work on basic infrastructure for translations" +msgstr "" + +#: ../../../CHANGELOG.rst:524 +msgid "1.1.7" +msgstr "" + +#: ../../../CHANGELOG.rst:525 +msgid "*Release date: 31 January 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:527 +msgid "Yet more minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:528 +msgid "The auto-allocation UI will now detail your minimum rating setting better" +msgstr "" + +#: ../../../CHANGELOG.rst:529 +msgid "Added guidance on database backups to documentation" +msgstr "" + +#: ../../../CHANGELOG.rst:533 +msgid "1.1.6" +msgstr "" + +#: ../../../CHANGELOG.rst:534 +msgid "*Release date: 19 January 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:536 +msgid "A number of minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:537 +msgid "Added basic infrastructure for creating tabbycat translations" +msgstr "" + +#: ../../../CHANGELOG.rst:541 +msgid "1.1.5" +msgstr "" + +#: ../../../CHANGELOG.rst:542 +msgid "*Release date: 12 January 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:544 +msgid "A number of minor bug fixes and improvements to documentation" +msgstr "" + +#: ../../../CHANGELOG.rst:548 +msgid "1.1.4" +msgstr "" + +#: ../../../CHANGELOG.rst:549 +msgid "*Release date: 25 November 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:551 +msgid "Redesigned the footer area to better describe Tabbycat and to promote donations and related projects" +msgstr "" + +#: ../../../CHANGELOG.rst:552 +msgid "Slight tweaks to the site homepage and main menus to better accommodate the login/log out links" +msgstr "" + +#: ../../../CHANGELOG.rst:553 +msgid "A few minor bug fixes and improvements to error reporting" +msgstr "" + +#: ../../../CHANGELOG.rst:557 +msgid "1.1.3" +msgstr "" + +#: ../../../CHANGELOG.rst:558 +msgid "*Release date: 15 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:560 +msgid "Fixed bug affecting some migrations from earlier versions" +msgstr "" + +#: ../../../CHANGELOG.rst:561 +msgid "Made latest results show question mark rather than crash if a team is missing" +msgstr "" + +#: ../../../CHANGELOG.rst:562 +msgid "Fixed bug affecting the ability to save motions" +msgstr "" + +#: ../../../CHANGELOG.rst:563 +msgid "Fixed bug preventing draw flags from being displayed" +msgstr "" + +#: ../../../CHANGELOG.rst:567 +msgid "1.1.2" +msgstr "" + +#: ../../../CHANGELOG.rst:568 +msgid "*Release date: 14 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:570 +msgid "Allow panels with even number of adjudicators (with warnings), by giving chair the casting vote" +msgstr "" + +#: ../../../CHANGELOG.rst:571 +msgid "Removed defunct person check-in, which hasn't been used since 2010" +msgstr "" + +#: ../../../CHANGELOG.rst:572 +msgid "Collapsed availability database models into a single model with Django content types" +msgstr "" + +#: ../../../CHANGELOG.rst:573 +msgid "Collapsed optional fields in action log entries into a single generic field using Django content types" +msgstr "" + +#: ../../../CHANGELOG.rst:574 +msgid "Added better warnings when attempting to create an elimination round draw with fewer than two teams" +msgstr "" + +#: ../../../CHANGELOG.rst:575 +msgid "Added warnings in Edit Database view when editing debate teams" +msgstr "" + +#: ../../../CHANGELOG.rst:576 +msgid "Renamed \"AIDA pre-2015\" break rule to \"AIDA 1996\"" +msgstr "" + +#: ../../../CHANGELOG.rst:580 +msgid "1.1.1" +msgstr "" + +#: ../../../CHANGELOG.rst:581 +msgid "*Release date: 8 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:583 +msgid "Fixed a bug where the team standings and team tab would crash when some emoji were not set" +msgstr "" + +#: ../../../CHANGELOG.rst:587 +msgid "1.1.0 (Egyptian Mau)" +msgstr "" + +#: ../../../CHANGELOG.rst:588 +msgid "*Release date: 3 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:590 +msgid "Added support for the United Asian Debating Championships style" +msgstr "" + +#: ../../../CHANGELOG.rst:591 +msgid "Added support for the World Schools Debating Championships style" +msgstr "" + +#: ../../../CHANGELOG.rst:592 +msgid "Made Windows 8+ Emoji more colourful" +msgstr "" + +#: ../../../CHANGELOG.rst:593 +msgid "Fixed an incompatability between Vue and IE 10-11 which caused tables to not render" +msgstr "" + +#: ../../../CHANGELOG.rst:594 +msgid "Minor bug fixes and dependency updates" +msgstr "" + +#: ../../../CHANGELOG.rst:598 +msgid "1.0.1" +msgstr "" + +#: ../../../CHANGELOG.rst:599 +msgid "*Release date: 19 August 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:601 +msgid "Fixed a minor bug with the visual importer affecting similarly named institutions" +msgstr "" + +#: ../../../CHANGELOG.rst:602 +msgid "Fixed error message when user tries to auto-allocate adjudicators on unconfirmed or released draw" +msgstr "" + +#: ../../../CHANGELOG.rst:603 +msgid "Minor docs edits" +msgstr "" + +#: ../../../CHANGELOG.rst:607 +msgid "1.0.0 (Devon Rex)" +msgstr "" + +#: ../../../CHANGELOG.rst:608 +msgid "*Release date: 16 August 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:613 +msgid "Redesigned and redeveloped adjudicator allocation page" +msgstr "" + +#: ../../../CHANGELOG.rst:611 +msgid "Redesigned interface, featuring clearer displays of conflict and diversity information" +msgstr "" + +#: ../../../CHANGELOG.rst:612 +msgid "Changes to importances and panels are now automatically saved" +msgstr "" + +#: ../../../CHANGELOG.rst:613 +msgid "Added debate \"liveness\" to help identify critical rooms—many thanks to Thevesh Theva" +msgstr "" + +#: ../../../CHANGELOG.rst:614 +msgid "Panel score calculations performed live to show strength of voting majorities" +msgstr "" + +#: ../../../CHANGELOG.rst:616 +msgid "New features" +msgstr "" + +#: ../../../CHANGELOG.rst:616 +msgid "Added record pages for teams and adjudicators" +msgstr "" + +#: ../../../CHANGELOG.rst:617 +msgid "Added a diversity tab to display demographic information about participants and scoring" +msgstr "" + +#: ../../../CHANGELOG.rst:619 +msgid "Significant general improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:619 +msgid "Shifted most table rendering to Vue.js to improve performance and design" +msgstr "" + +#: ../../../CHANGELOG.rst:620 +msgid "Drastically reduced number of SQL queries in large tables, *e.g.* draw, results, tab" +msgstr "" + +#: ../../../CHANGELOG.rst:624 +msgid "Break round management" +msgstr "" + +#: ../../../CHANGELOG.rst:622 +msgid "Completed support for break round draws" +msgstr "" + +#: ../../../CHANGELOG.rst:623 +msgid "Simplified procedure for adding remarks to teams and updating break" +msgstr "" + +#: ../../../CHANGELOG.rst:624 +msgid "Reworked break generation code to be class-based, to improve future extensibility" +msgstr "" + +#: ../../../CHANGELOG.rst:625 +msgid "Added support for break qualification rules: AIDA Australs, AIDA Easters, WADL" +msgstr "" + +#: ../../../CHANGELOG.rst:628 +msgid "Feedback" +msgstr "" + +#: ../../../CHANGELOG.rst:627 +msgid "Changed Boolean fields in AdjudicatorFeedbackQuestion to reflect what they actually do" +msgstr "" + +#: ../../../CHANGELOG.rst:628 +msgid "Changed \"panellist feedback enabled\" option to \"feedback paths\", a choice of three options" +msgstr "" + +#: ../../../CHANGELOG.rst:630 +msgid "Dropped \"/t/\" from tournament URLs and moved \"/admin/\" to \"/database/\", with 301 redirects" +msgstr "" + +#: ../../../CHANGELOG.rst:631 +msgid "Added basic code linting to the continuous integration tests" +msgstr "" + +#: ../../../CHANGELOG.rst:632 +msgid "Many other small bug fixes, refactors, optimisations, and documentation updates" +msgstr "" + +#: ../../../CHANGELOG.rst:636 +msgid "0.9.0 (Chartreux)" +msgstr "" + +#: ../../../CHANGELOG.rst:637 +msgid "*Release date: 13 June 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:639 +msgid "Added a beta implementation of the break rounds workflow" +msgstr "" + +#: ../../../CHANGELOG.rst:640 +msgid "Added venue constraints, to allow participants or divisions to preferentially be given venues from predefined groups" +msgstr "" + +#: ../../../CHANGELOG.rst:641 +msgid "Added a button to regenerate draws" +msgstr "" + +#: ../../../CHANGELOG.rst:642 +msgid "Refactored speaker standings implementation to match team standings implementation" +msgstr "" + +#: ../../../CHANGELOG.rst:643 +msgid "New standings metrics, draw methods, and interface settings for running small tournaments and division-based tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:644 +msgid "Improved support for multiple tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:645 +msgid "Improved user-facing error messages in some scenarios" +msgstr "" + +#: ../../../CHANGELOG.rst:646 +msgid "Most frontend dependencies now handled by Bower" +msgstr "" + +#: ../../../CHANGELOG.rst:647 +msgid "Static file compilation now handled by Gulp" +msgstr "" + +#: ../../../CHANGELOG.rst:648 ../../../CHANGELOG.rst:660 +msgid "Various bug fixes, optimisations, and documentation edits" +msgstr "" + +#: ../../../CHANGELOG.rst:652 +msgid "0.8.3" +msgstr "" + +#: ../../../CHANGELOG.rst:653 +msgid "*Release date: 4 April 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:655 +msgid "Restored and reworking printing functionality for scoresheets/feedback" +msgstr "" + +#: ../../../CHANGELOG.rst:656 +msgid "Restored Edit Venues and Edit Matchups on the draw pages" +msgstr "" + +#: ../../../CHANGELOG.rst:657 +msgid "Reworked tournament data importers to use csv.DictReader, so that column order in files doesn't matter" +msgstr "" + +#: ../../../CHANGELOG.rst:658 +msgid "Improved dashboard and feedback graphs" +msgstr "" + +#: ../../../CHANGELOG.rst:659 +msgid "Add separate pro speakers tab" +msgstr "" + +#: ../../../CHANGELOG.rst:664 +msgid "0.8.2" +msgstr "" + +#: ../../../CHANGELOG.rst:665 +msgid "*Release date: 20 March 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:667 +msgid "Fixed issue where scores from individual ballots would be deleted when any other panel in the round was edited" +msgstr "" + +#: ../../../CHANGELOG.rst:668 +msgid "Fixed issue where page crashes for URLs with \"tab\" in it but that aren't recognized tab pages" +msgstr "" + +#: ../../../CHANGELOG.rst:672 +msgid "0.8.1" +msgstr "" + +#: ../../../CHANGELOG.rst:673 +msgid "*Release date: 15 March 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:675 +msgid "Fixed a bug where editing a Team in the admin section could cause an error" +msgstr "" + +#: ../../../CHANGELOG.rst:676 +msgid "Added instructions on how to account for speakers speaking twice to docs" +msgstr "" + +#: ../../../CHANGELOG.rst:677 +msgid "Venues Importer wont show VenueGroup import info unless that option is enabled" +msgstr "" + +#: ../../../CHANGELOG.rst:681 +msgid "0.8.0 (Bengal)" +msgstr "" + +#: ../../../CHANGELOG.rst:682 +msgid "*Release date: 29 February 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:684 +msgid "Upgraded to Python 3.4, dropped support for Python 2" +msgstr "" + +#: ../../../CHANGELOG.rst:685 +msgid "Restructured directories and, as a consequence, changed database schema" +msgstr "" + +#: ../../../CHANGELOG.rst:686 +msgid "Added Django migrations to the release (they were previously generated by the user)" +msgstr "" + +#: ../../../CHANGELOG.rst:687 +msgid "Migrated documentation to `Read The Docs `_" +msgstr "" + +#: ../../../CHANGELOG.rst:688 +msgid "New user interface design and workflow" +msgstr "" + +#: ../../../CHANGELOG.rst:689 +msgid "Overhauled tournament preferences to use `django-dynamic-preferences `_" +msgstr "" + +#: ../../../CHANGELOG.rst:690 +msgid "Added new visual data importer" +msgstr "" + +#: ../../../CHANGELOG.rst:691 +msgid "Improved flexibility of team standings rules" +msgstr "" + +#: ../../../CHANGELOG.rst:692 +msgid "Moved data utility scripts to Django management commands" +msgstr "" + +#: ../../../CHANGELOG.rst:693 +msgid "Changed emoji to Unicode characters" +msgstr "" + +#: ../../../CHANGELOG.rst:694 +msgid "Various other fixes and refinements" +msgstr "" + +#: ../../../CHANGELOG.rst:698 +msgid "0.7.0 (Abyssinian)" +msgstr "" + +#: ../../../CHANGELOG.rst:699 +msgid "*Release date: 31 July 2015*" +msgstr "" + +#: ../../../CHANGELOG.rst:701 +msgid "Support for multiple tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:702 +msgid "Improved and extensible tournament data importer" +msgstr "" + +#: ../../../CHANGELOG.rst:703 +msgid "Display gender, region, and break category in adjudicator allocation" +msgstr "" + +#: ../../../CHANGELOG.rst:704 +msgid "New views for online adjudicator feedback" +msgstr "" + +#: ../../../CHANGELOG.rst:705 +msgid "Customisable adjudicator feedback forms" +msgstr "" + +#: ../../../CHANGELOG.rst:706 +msgid "Randomised URLs for public submission" +msgstr "" + +#: ../../../CHANGELOG.rst:707 +msgid "Customisable break categories" +msgstr "" + +#: ../../../CHANGELOG.rst:708 +msgid "Computerised break generation (break round draws not supported)" +msgstr "" + +#: ../../../CHANGELOG.rst:709 +msgid "Lots of fixes, interface touch-ups and performance enhancements" +msgstr "" + +#: ../../../CHANGELOG.rst:710 +msgid "Now requires Django 1.8 (and other package upgrades)" +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/about/contributing.po b/docs/locale/kk/LC_MESSAGES/about/contributing.po new file mode 100644 index 00000000000..0f8292081d3 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/about/contributing.po @@ -0,0 +1,352 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/contributing.po\n" +"X-Crowdin-File-ID: 1263\n" +"Language: kk_KZ\n" + +#: ../../../CONTRIBUTING.rst:3 +msgid "Contributing" +msgstr "" + +#: ../../../CONTRIBUTING.rst:5 +msgid "Contributions are welcome, and are greatly appreciated! Every little bit helps, and credit will be given. While at its core Tabbycat is a software project, you do not need to know how to code or use Git in order to help. We welcome feedback and ideas based on your tabbing experience and appreciate suggestions or proposals for how to improve the wording, translation, and design of our interface and documentation." +msgstr "" + +#: ../../../CONTRIBUTING.rst:7 +msgid "Feel free to `join our Facebook group `_ if you have any questions about how to get started." +msgstr "" + +#: ../../../CONTRIBUTING.rst:10 +msgid "Feedback and ideas" +msgstr "" + +#: ../../../CONTRIBUTING.rst:12 +msgid "These can be added as issues in the `GitHub repository `_; posts in our `Facebook group `_; or as an :ref:`email to the developers `." +msgstr "" + +#: ../../../CONTRIBUTING.rst:15 +msgid "Bug reports" +msgstr "" + +#: ../../../CONTRIBUTING.rst:17 +msgid "Please report bugs by opening a new issue in our `GitHub repository `_. It is most helpful if you can include:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:19 +msgid "How Tabbycat was installed (on Heroku, locally on macOS, `etc.`)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:20 +msgid "Any details about your tournament and setup that might be helpful in troubleshooting" +msgstr "" + +#: ../../../CONTRIBUTING.rst:21 +msgid "Detailed steps for how to reproduce the bug" +msgstr "" + +#: ../../../CONTRIBUTING.rst:24 +msgid "Getting started with development" +msgstr "" + +#: ../../../CONTRIBUTING.rst:26 +msgid "To easily test your changes to Tabbycat you probably want a working :ref:`local install ` (without using Docker)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:27 +msgid "Please submit pull requests for features and bug fixes against `develop` (but not `master`)." +msgstr "" + +#: ../../../CONTRIBUTING.rst:28 +msgid "We broadly use the `git-flow workflow `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:29 +msgid "We use Django's testing tools — adding unit tests to new features is greatly appreciated" +msgstr "" + +#: ../../../CONTRIBUTING.rst:31 +msgid "A number of our tests use `Selenium `_ and `ChromeDriver `_ to simulate in-browser functionality. They will fail if you do not have the Chrome browser and ChromeDriver installed." +msgstr "" + +#: ../../../CONTRIBUTING.rst:33 +msgid "A number of extra dependencies are required for running tests, linting, and serving the documentation. These can be installed with::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:37 +msgid "Our ``package.json`` provides a convenience command that runs a standard set of development tools simultaneously, such as the Django server and the automatic recompilation with live injecting of javascript and CSS. Once you have set ``USE_WEBPACK_SERVER=True`` in your ``settings_local.py`` you can then run this with::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:42 +msgid "Generating test data" +msgstr "" + +#: ../../../CONTRIBUTING.rst:44 +msgid "There are management commands to help developers quickly generate data for use in testing, including results and feedback. A list of all commands can be found from ``dj help``, but the most useful in this context are:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:46 +msgid "``dj importtournament ( minimal8team | australs24team | bp88team )``, which imports participant data for the 8-team (``minimal8team``), 24-team Australs (``australs24team``) and 88-team BP (``bp88team``) demonstration tournaments respectively." +msgstr "" + +#: ../../../CONTRIBUTING.rst:47 +msgid "``dj simulaterounds ROUND [ROUND ROUND ...]``, which simulates all of the rounds specified, generating a draw, an adjudicator allocation and a complete set of random results (but not feedback)." +msgstr "" + +#: ../../../CONTRIBUTING.rst:48 +msgid "``dj generatefeedback ROUND [ROUND ROUND ...]``, which randomly generates feedback for all existing debates in the specified rounds." +msgstr "" + +#: ../../../CONTRIBUTING.rst:49 +msgid "``dj generateresults ROUND [ROUND ROUND ...]``, which randomly generates results for all existing debates in the specified rounds. (You don't need to run this if you ran ``simulaterounds``, because that already does it.)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:51 +msgid "Rounds can be specified by sequence number (``seq``) or abbreviation. You can find more information about each of them by adding ``--help`` after the command name." +msgstr "" + +#: ../../../CONTRIBUTING.rst:54 +msgid "Database schema changes" +msgstr "" + +#: ../../../CONTRIBUTING.rst:56 +msgid "When adding new features, it may be necessary to modify the database schema to support these new additions. After the changes are made, the migration files made by ``python manage.py makemigrations`` must also be committed. The migration files should also contain methods fill the new fields based on existing data if possible." +msgstr "" + +#: ../../../CONTRIBUTING.rst:58 +msgid "Fixture files (found under ``data/fixtures/``) may also need to be updated, which can be done by running the ``migrate_fixtures.py`` script under a unmigrated database, then committing the result. ::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:64 +msgid "Style guide" +msgstr "" + +#: ../../../CONTRIBUTING.rst:66 +msgid "For the front end interface design there is a style guide available at \"/style/\" once a tournament has been setup." +msgstr "" + +#: ../../../CONTRIBUTING.rst:68 +msgid "For python code, we use `flake8 `_ to check for a non-strict series of style rules. Warnings will trigger a Travis CI build to fail. The entire codebase can be checked by using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:72 +msgid "For stylesheets, we use `stylelint `_. The relevant code can be checked by using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:76 +msgid "For javascript, we use `eslint `_ to enforce the `standardJS `_ style and the standard recommendation of the vue plugin for eslint. The relevant code can be checked by using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:81 +msgid "Versioning convention" +msgstr "" + +#: ../../../CONTRIBUTING.rst:83 +msgid "Our convention is to increment the minor version whenever we add new functionality, and to increment the major version whenever:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:85 +msgid "the database can't be migrated forwards using ``python manage.py migrate --no-input``, or" +msgstr "" + +#: ../../../CONTRIBUTING.rst:86 +msgid "there is a major change to how the tournament workflow goes, or" +msgstr "" + +#: ../../../CONTRIBUTING.rst:87 +msgid "we make some other change that is, in our opinion, significant enough to warrant a milestone." +msgstr "" + +#: ../../../CONTRIBUTING.rst:89 +msgid "We write `data migrations `_ to allow existing systems to be upgraded easily. However, we don't always support backward database migrations. Our expectation is that long-lived installations keep up with our latest version." +msgstr "" + +#: ../../../CONTRIBUTING.rst:91 +msgid "One day, we hope to have a public API in place to facilitate the integration with other debating tournament software, like registration or adjudicator feedback systems. If and when that happens, we'll probably revise this convention to be more in line with `Semantic Versioning `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:93 +msgid "Starting from version 0.7.0, we use cat breeds as the code names for major versions." +msgstr "" + +#: ../../../CONTRIBUTING.rst:96 +msgid "Documentation" +msgstr "" + +#: ../../../CONTRIBUTING.rst:98 +msgid "Documentation is created using `Sphinx `_ and hosted at `Read The Docs `_. Pushes to ``develop`` will update the *latest* documentation set, while pushes to ``master`` will update the *stable* documentation set." +msgstr "" + +#: ../../../CONTRIBUTING.rst:100 +msgid "To preview the documentation locally, install the development dependencies and then start the server::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:104 +msgid "You should then be able to preview the docs at `127.0.0.1:7999 `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:107 +msgid "Project structure" +msgstr "" + +#: ../../../CONTRIBUTING.rst:109 +msgid "``bin`` contains a number of convenience scripts for starting/stopping Docker, and the webserver/asset pipeline." +msgstr "" + +#: ../../../CONTRIBUTING.rst:110 +msgid "``data`` contains the sample data sets and fixtures used to setup demo tournaments and in automated tests respectively" +msgstr "" + +#: ../../../CONTRIBUTING.rst:111 +msgid "``docs`` contains our document source files and images (although some are linked from the root directory)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:115 +msgid "``tabbycat`` is the main directory containing the Django project" +msgstr "" + +#: ../../../CONTRIBUTING.rst:113 +msgid "``locale`` contains translation strings for shared templates (others are in respective app directories)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:114 +msgid "``templates`` contains shared html templates, stylesheets, javascript source files, and Vue.js components/mixins." +msgstr "" + +#: ../../../CONTRIBUTING.rst:115 +msgid "``utils`` contains shared utilities" +msgstr "" + +#: ../../../CONTRIBUTING.rst:116 +msgid "All other folders are the Django apps that contain specific views, models, and templates for functions such as ``draw`` generation/display, or recording ``results``. Each has sub-folders for tests and templates." +msgstr "" + +#: ../../../CONTRIBUTING.rst:117 +msgid "In the root directory there are a number of files defining our python and javascript dependencies, core configuration files, and key documents like the ``README``" +msgstr "" + +#: ../../../CONTRIBUTING.rst:120 +msgid "Internationalization/Localization" +msgstr "" + +#: ../../../CONTRIBUTING.rst:122 +msgid "The `gettext `_ framework is used to enable the translation of strings in Python files and Django templates. Backend in this context signifies these types of files." +msgstr "" + +#: ../../../CONTRIBUTING.rst:124 +msgid "The backend's translation files can be updated from the ``tabbycat`` directory using one or more of the supporting language codes (see settings.py)::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:128 +msgid "To do more than one language, just specify ``-l`` multiple times, _e.g._ ``-les -lar``." +msgstr "" + +#: ../../../CONTRIBUTING.rst:130 +msgid "These can then be compiled using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:134 +msgid "As it stands Heroku needs the .mo files pre-compiled (see `issue in Heroku Python buildpack `_, so these are committed to Git. Note that the English (``en``) language files should not be compiled; their sole purpose is to provide a source language for `Crowdin `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:136 +msgid "Strings defined in Vue files must similarily be marked with ``gettext`` but must be added manually to ``tabbycat/locale/LANGUAGE_CODE/djangojs.po``, for each language supported. These can then compiled to javascript bundles using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:141 +msgid "These are then also committed to git to save users needing to run `compilejsi18n` during setup. The resulting files are then bundled as part of the npm build task. Updating these translations in development (live-reload) requires the use of the ``cp-i18n`` npm task." +msgstr "" + +#: ../../../CONTRIBUTING.rst:144 +msgid "Release checklist" +msgstr "" + +#: ../../../CONTRIBUTING.rst:146 +msgid "Check that all migrations have been generated and committed into Git" +msgstr "" + +#: ../../../CONTRIBUTING.rst:147 +msgid "Merge translations from the Crowdin pull request and compile messages" +msgstr "" + +#: ../../../CONTRIBUTING.rst:148 +msgid "Bump version number in ``docs/conf.py``" +msgstr "" + +#: ../../../CONTRIBUTING.rst:149 +msgid "Bump version number and (if applicable) codename in ``tabbycat/settings/core.py``" +msgstr "" + +#: ../../../CONTRIBUTING.rst:150 +msgid "Update the main ``CHANGELOG.rst`` file (including release date)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:155 +msgid "Check the major current deployment options, including:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:152 +msgid "The ``deploy_heroku.py`` script" +msgstr "" + +#: ../../../CONTRIBUTING.rst:153 +msgid "The Tabbykitten version" +msgstr "" + +#: ../../../CONTRIBUTING.rst:154 +msgid "Docker (macOS, Windows 10*) and Docker Toolbox (Windows 10 Home) methods" +msgstr "" + +#: ../../../CONTRIBUTING.rst:155 +msgid "Using Bash and Powershell on Windows" +msgstr "" + +#: ../../../CONTRIBUTING.rst:156 +msgid "Using Terminal on macOS (at least test out a fresh install of the npm/pip dependencies)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:157 +msgid "Check that the last Travis CI build passed and run the full local test suite (this will include the Selenium tests that are not on Travis)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:158 +msgid "Shift remaining issues from the Github Milestone" +msgstr "" + +#: ../../../CONTRIBUTING.rst:159 +msgid "Create and finish the release branch as per git-flow" +msgstr "" + +#: ../../../CONTRIBUTING.rst:160 +msgid "Ensure the tag is correct (``vX.Y.Z``) and published to GitHub" +msgstr "" + +#: ../../../CONTRIBUTING.rst:161 +msgid "Back-merge ``master`` to the ``kitten`` branch" +msgstr "" + +#: ../../../CONTRIBUTING.rst:162 +msgid "Back-merge ``develop`` to the in-progress feature branches" +msgstr "" + +#: ../../../CONTRIBUTING.rst:163 +msgid "Issue a formal release with change notes on GitHub" +msgstr "" + +#: ../../../CONTRIBUTING.rst:164 +msgid "Post change notes on the Facebook page/group" +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/about/licence.po b/docs/locale/kk/LC_MESSAGES/about/licence.po new file mode 100644 index 00000000000..aa197978877 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/about/licence.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/licence.po\n" +"X-Crowdin-File-ID: 1265\n" +"Language: kk_KZ\n" + +#: ../../../LICENSE.rst:3 +msgid "Licence Information" +msgstr "" + +#: ../../../LICENSE.rst:5 +msgid "We haven't released Tabbycat under an open-source licence, so there is no formal and general right to use this software. Nonetheless, you're welcome to freely use Tabbycat to help run a debating tournament if it is a not-for-profit and not-for-fundraising activity. A voluntary donation of A$1 (Australian dollar) per team would be greatly appreciated, and would help us meet costs and justify our ongoing work and support for Tabbycat users. (A donation link is in the footer of your Tabbycat site.)" +msgstr "" + +#: ../../../LICENSE.rst:8 +msgid "Use at for-profit or fundraising tournaments" +msgstr "" + +#: ../../../LICENSE.rst:10 +msgid "If you use Tabbycat at a tournament where any individual or organisation is making a profit or raising funds (other than to cover the direct costs of the tournament), you or your tournament **must** make a donation of A$1 (Australian dollar) per team to the Tabbycat maintenance team, as outlined in each tournament’s donation page (the link is in the footer of your Tabbycat site). This includes instances where organisations run tournaments partly as fundraising activities and applies even if the organisation itself is a non-profit." +msgstr "" + +#: ../../../LICENSE.rst:12 +msgid "While we suggest that non-profit, non-fundraising tournaments budget for a donation of A$1 per team, it is not required in order for such tournaments to use Tabbycat." +msgstr "" + +#: ../../../LICENSE.rst:15 +msgid "Modifications to and redistributions of Tabbycat" +msgstr "" + +#: ../../../LICENSE.rst:17 +msgid "We grant you permission to modify and/or redistribute Tabbycat, provided that" +msgstr "" + +#: ../../../LICENSE.rst:19 +msgid "you do not receive any payment for this modification and/or redistribution," +msgstr "" + +#: ../../../LICENSE.rst:20 +msgid "if you modify Tabbycat, you add prominent notices stating that you modified it," +msgstr "" + +#: ../../../LICENSE.rst:21 +msgid "all references and functionality relating to donations are kept intact, and" +msgstr "" + +#: ../../../LICENSE.rst:22 +msgid "this licence page and all attributions of authorship are included as-is." +msgstr "" + +#: ../../../LICENSE.rst:24 +msgid "Modifying Tabbycat for payment, or using a version of Tabbycat that has been modified for payment, is strictly prohibited without our express permission." +msgstr "" + +#: ../../../LICENSE.rst:26 +msgid "If you use a version of Tabbycat that has been modified by you or a third party to run a for-profit or fundraising tournament, the abovementioned donation of A$1 per team is still required." +msgstr "" + +#: ../../../LICENSE.rst:29 +msgid "Disclaimer of warranty and liability" +msgstr "" + +#: ../../../LICENSE.rst:31 +msgid "We work on this software in our spare time and make it available for not-for-profit use in the hope that it will benefit the debating community. **It is provided \"as is\", without any warranty of any kind, express or implied, including without limitation any warranties of merchantability and fitness for a particular purpose, and we disclaim all legal liability. By using Tabbycat, you agree that none of its contributors will be held liable for any loss or claim arising directly or indirectly from using the software, or for any loss or claim otherwise in connection with the software.**" +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/about/support.po b/docs/locale/kk/LC_MESSAGES/about/support.po new file mode 100644 index 00000000000..78c41cccd58 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/about/support.po @@ -0,0 +1,56 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/support.po\n" +"X-Crowdin-File-ID: 1267\n" +"Language: kk_KZ\n" + +#: ../../about/support.rst:3 +msgid "Support" +msgstr "" + +#: ../../about/support.rst:5 +msgid "There are a number of ways to report bugs, ask for help, or submit feedback." +msgstr "" + +#: ../../about/support.rst:8 +msgid "Facebook" +msgstr "" + +#: ../../about/support.rst:10 +msgid "`Our Facebook group `_ is a good place to ask for help. It's also a good place to keep up with new releases and participate in more general discussions of features and ideas." +msgstr "" + +#: ../../about/support.rst:13 +msgid "GitHub" +msgstr "" + +#: ../../about/support.rst:15 +msgid "Adding an issue to our `GitHub repository `_ is a great way to let us know about bugs or writeup suggestions for how to improve Tabbycat. Pull requests are also encouraged!" +msgstr "" + +#: ../../about/support.rst:17 +msgid "When submitting bugs or reporting errors please let us know your site address (if installed online) or operating system (if local) along with a complete description of the problem along with any error messages." +msgstr "" + +#: ../../about/support.rst:20 +msgid "Email" +msgstr "" + +#: ../../about/support.rst:22 +msgid "Feel free to :ref:`contact the maintainers directly ` if you are not able to access Facebook or GitHub." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/about/tournament-history.po b/docs/locale/kk/LC_MESSAGES/about/tournament-history.po new file mode 100644 index 00000000000..9b8bfae40b7 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/about/tournament-history.po @@ -0,0 +1,248 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/tournament-history.po\n" +"X-Crowdin-File-ID: 1335\n" +"Language: kk_KZ\n" + +#: ../../about/tournament-history.rst:3 +msgid "Tournament History" +msgstr "" + +#: ../../about/tournament-history.rst:5 +msgid "A partial list of major national and international tournaments (that we know of) which have used Tabbycat." +msgstr "" + +#: ../../about/tournament-history.rst:8 +msgid "2017" +msgstr "" + +#: ../../about/tournament-history.rst:10 +msgid "`APU Philosophy CHallenge `_" +msgstr "" + +#: ../../about/tournament-history.rst:11 +msgid "`ANU Spring IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:12 +msgid "`Australian British Parliamentary Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:13 +msgid "`Australasian Wom*ns Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:14 +msgid "Asia World Schools Debating Championship" +msgstr "" + +#: ../../about/tournament-history.rst:15 +msgid "`Asia British Parliamentary Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:16 +msgid "`Borneo British Parliamentary Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:17 +msgid "`Canadian British Parliamentary Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:18 +msgid "`Cambridge Asian Schools BP Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:19 +msgid "Cambodia United Asian Debating Championship" +msgstr "" + +#: ../../about/tournament-history.rst:20 +msgid "`China British Parliamentary Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:21 +msgid "`Japan British Parliamentary Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:22 +msgid "`Kings College London IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:23 +msgid "`Kuala Lumpur Open Challenge `_" +msgstr "" + +#: ../../about/tournament-history.rst:24 +msgid "`KPU Pro Ams `_" +msgstr "" + +#: ../../about/tournament-history.rst:25 +msgid "`Malaysian National Intervarsity Debating Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:26 +msgid "`Melbourne Mini `_" +msgstr "" + +#: ../../about/tournament-history.rst:27 +msgid "`New Zealand Easters 2017 `_" +msgstr "" + +#: ../../about/tournament-history.rst:28 +msgid "`New Zealand British Parliamentary Debating Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:29 +msgid "`North East Asia Open `_" +msgstr "" + +#: ../../about/tournament-history.rst:30 +msgid "`Swords Mini-Gong `_" +msgstr "" + +#: ../../about/tournament-history.rst:31 +msgid "`Shanghai Asian Schools British Parliamentary Debate Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:32 +msgid "`UCD Law Society IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:33 +msgid "`UCD Vice President's Cup `_" +msgstr "" + +#: ../../about/tournament-history.rst:34 +msgid "`UQ Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:35 +msgid "`UT MARA Open `_" +msgstr "" + +#: ../../about/tournament-history.rst:36 +msgid "`Victoria Cup IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:37 +msgid "`Western Sydney BP Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:38 +msgid "`Wollongong Easters `_" +msgstr "" + +#: ../../about/tournament-history.rst:39 +msgid "`Yale IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:42 +msgid "2016" +msgstr "" + +#: ../../about/tournament-history.rst:44 +msgid "`Sydney Easters `_" +msgstr "" + +#: ../../about/tournament-history.rst:45 +msgid "`Joynt Scroll 2016 `_" +msgstr "" + +#: ../../about/tournament-history.rst:46 +msgid "`Malaysia Debate Open 2016 `_" +msgstr "" + +#: ../../about/tournament-history.rst:47 +msgid "`New Zealand Easters 2016 `_" +msgstr "" + +#: ../../about/tournament-history.rst:48 +msgid "`Perth Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:49 +msgid "`Thailand United Asian Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:50 ../../about/tournament-history.rst:61 +msgid "The National Law School Debate" +msgstr "" + +#: ../../about/tournament-history.rst:51 +msgid "The Khazak National Schools Debating Championship" +msgstr "" + +#: ../../about/tournament-history.rst:54 +msgid "2015" +msgstr "" + +#: ../../about/tournament-history.rst:56 +msgid "`Bali United Asian Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:57 +msgid "`Daejeon Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:58 +msgid "`Joynt Scroll `_" +msgstr "" + +#: ../../about/tournament-history.rst:59 +msgid "`Malaysia Debate Open 2015 `_" +msgstr "" + +#: ../../about/tournament-history.rst:60 +msgid "`New Zealand Easters 2015 `_" +msgstr "" + +#: ../../about/tournament-history.rst:62 +msgid "`UNSW/UTS Easters `_" +msgstr "" + +#: ../../about/tournament-history.rst:65 +msgid "2014" +msgstr "" + +#: ../../about/tournament-history.rst:67 +msgid "`Joynt Scroll 2014 `_" +msgstr "" + +#: ../../about/tournament-history.rst:68 +msgid "NTU United Asian Debating Championships" +msgstr "" + +#: ../../about/tournament-history.rst:69 +msgid "`Otago Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:72 +msgid "2012" +msgstr "" + +#: ../../about/tournament-history.rst:74 +msgid "Wellington Australs" +msgstr "" + +#: ../../about/tournament-history.rst:77 +msgid "2010" +msgstr "" + +#: ../../about/tournament-history.rst:79 +msgid "Auckland Australs" +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/features/adjudicator-allocation.po b/docs/locale/kk/LC_MESSAGES/features/adjudicator-allocation.po new file mode 100644 index 00000000000..c053fe40364 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/features/adjudicator-allocation.po @@ -0,0 +1,160 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-allocation.po\n" +"X-Crowdin-File-ID: 1271\n" +"Language: kk_KZ\n" + +#: ../../features/adjudicator-allocation.rst:5 +msgid "Adjudicator Allocation" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:7 +msgid "The adjudicator allocation screen offers the ability to automatically generate an allocation and/or allow you to create or edit an allocation manually. This interface is somewhat complex as it attempts to provide all of the information needed to inform allocation while also providing a number of automatic and manual tools for the allocation process itself." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:10 +msgid "Assigning Debate Priority" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:12 +msgid "For tournaments with more than a few debates you generally want to begin the allocation process by applying a priority value to your debates. A debate's priority value is used by the automatic adjudicator allocator (or the preformed panel indicator) to match the strongest panels to the debates that need them most." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:16 +msgid "The prioritise button in the top-left allows you to assign a priority value automatically based on a debate's bracket or its 'liveness'. Remember that in early rounds there are usually not enough results for the liveness of each debate to be distinct and that Tabbycat measures liveness based on the sum of all live break categories — a debate can have more liveness points than it has teams if there are teams that are live in multiple categories." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:18 +msgid "The automatic prioritiser never uses the 'highest' priority value so that you can easily use this to highlight the debates that need the strongest panels without needing to redistribute the priority of other debates." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:20 +msgid "Regardless of whether you automatically assign priority, there are sliders to the left of each team that can be used to manually specify priority. These are usually used to override the automatic priority of a debate if that matchup needs and especially strong/weak/mediocre panel for reasons that are not reflected in its bracket/liveness." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:24 +msgid "If each debate's priority is the same, the automatic adjudicator will fall-back on using the debate's bracket as a substitute for priority. Thus, you can skip the prioritisation process (or only prioritise the most/least important debates) if you want a relatively even spread of panellists (e.g. during Round 1)." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:27 +msgid "Automatic Adjudicator Allocation" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:29 +msgid "Once you are happy with your priorities you can begin assigning adjudicators. This also has an (optional) automatic process that will create panels for you. In creating these panels automatically, the allocator will:" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:31 +msgid "Avoid creating 'hard' conflicts (i.e. personal or institutional clashes) between adjudicators and teams while also trying to avoid 'soft' conflicts (i.e. avoiding an adjudicator seeing the same team again)." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:32 +msgid "Form panels whose relative average voting score matches the relative priority you assigned to each debate." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:33 +msgid "Allocate trainees (unless disabled or none are under the threshold) to panels (allocated first to the highest-strength panels)." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:34 +msgid "Violate the above intents in cases where there are inescapable constraints — e.g. if there are too many soft or hard conflicts to avoid creating panels that do not trigger them." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:36 +msgid "Remember that Tabbycat will only automatically allocate adjudicators that have been marked as available for this round." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:38 +msgid "To begin this process, click the *Allocate* button in the top-left. If you have :ref:`formed preformed panels ` for this round, the modal will first ask whether you want to assign adjudicators using those panels; otherwise the modal will contain a number of options that can be used to control the allocation. In general, the *minimum feedback score* value is the most important setting to consider as it determines the threshold needed for adjudicators to not be allocated as trainees." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:42 +msgid "Once you click *Auto-Allocate* the modal should disappear and your panels should appear. At large tournaments, and in the later rounds, it is not unheard of for this process to take a minute or longer." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:44 +msgid "You can re-run the automatic allocation process on top of an existing allocation. Thus it is worth tweaking your priorities or allocation settings if the allocation does not seem optimal to you. Also note that the allocation process is not deterministic — if you rerun it the panels will be different." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:46 +msgid "Once your adjudicators have been allocated you can drag and drop them on to different panels. You can also drag and drop them to the 'unused area' (the gray bar at the bottom of the page) if you wish to store them temporarily or remove them from the draw. Dropping an adjudicator into the chair position will 'swap' that adjudicator into the previous position of the new chair." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:49 +msgid "Saving, Live Updates, and Sharing" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:51 +msgid "Changes to your panels save automatically and you can exit the allocation page whenever you wish." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:53 +msgid "In addition, the allocation pages maintain a 'live' connection to the server that shows updates made by other users who are viewing/using the same page. That is to say, if two people on two computers are both viewing the allocation page they should see each other's changes in real-time. This allows you to 'distribute' the task of allocation across individual people (rather than sharing a screen/projector) if desired." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:55 +msgid "It is possible to have users 'undo' or 'overwrite' each others changes despite this live system, e.g. if both users drag and adjudicator somewhere at the same time." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:57 +msgid "If you are dividing the task of allocation across multiple people, the *Sharding* system can help by allowing individuals to limit their view of the draw. The use case here is usually to divide the draw up into mutually-exclusive subsets so that individuals (or groups) of the adjudication core can focus on creating panels across the draw in parallel." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:61 +msgid "To activate sharding, click the small icon to the right of the \"Allocate\" button. This then presents a number of options for how the draw is divide up into distinct sets. If you want to ensure that each person opens a completely distinct set of the draw, you will need to coordinate the options that each user selects here. They will need to set the **same** options for *Shard Mix*, *Shard Split* and *Shard Sort* but select a **different** *Open* option (i.e. opt-in to viewing a different shard from the other users). The ability to exit a sharded view is available in the same dialogue." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:64 +msgid "In-Place Highlights" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:66 +msgid "Adjudicators and teams may have borders of varying colors. These borders indicate that there is a clash — soft or hard — within a debate and highlights the teams/adjudicators that have triggered this. There is a key for these colors available at the top of the page — e.g. orange means *institutional conflict* while blue means *this adjudicator has seen this adjudicator/team before*." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:70 +msgid "In general, you want to be on the lookout for red borders ('hard conflicts') and for teams with orange borders (institutional conflicts). Blue borders on teams/adjudicators and orange borders between adjudicators are usually of lesser concern." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:72 +msgid "There are two 'special' types of highlight — a gray background in the chair position (no chair) or in the panellist position (the panel is not an odd-size). Adjudicators may also have a black background if they have not been marked as available." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:75 +msgid "Hover Highlights" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:77 +msgid "When you hover over an adjudicator or team, they will take on a purple background and other adjudicators or teams may suddenly have different colored backgrounds. These indicate the conflicts that this team/adjudicator has with those other teams/adjudicators. By showing this information you can avoid swapping that adjudicator into a new debate which they have a conflict with." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:81 +msgid "When you hover over an adjudicator or team the top-most area of the screen will show additional information about them, such as all of their previous institutions, their conflicts, their break category, their team members, their region, and who they saw in the last few rounds." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:84 +msgid "Toggle Highlights" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:86 +msgid "In the top-right of the interface are a number of toggles that changes the color of adjudicators and teams to more easily check specific types of information. For example, selecting the gender toggle will color-code teams and adjudicators with the gender that has been recorded in Tabbycat. Note that when a toggle is active, the color key will update to show the meaning of these new colors." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:90 +msgid "When finalising an adjudication you may want to ensure you have turned off any toggle highlights — often they make it more difficult to see the border colors that indicate conflicts." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/features/adjudicator-feedback.po b/docs/locale/kk/LC_MESSAGES/features/adjudicator-feedback.po new file mode 100644 index 00000000000..4aaf9b37bd5 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/features/adjudicator-feedback.po @@ -0,0 +1,258 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-feedback.po\n" +"X-Crowdin-File-ID: 1273\n" +"Language: kk_KZ\n" + +#: ../../features/adjudicator-feedback.rst:5 +msgid "Adjudicator Feedback" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:7 +msgid "You can set the questions that are used on adjudicator feedback forms. The only field that is permanently there is the ``score`` field, which is an overall score assessing the adjudicator. All other questions (including a generic comments section) must be defined if you want them to be on the form." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:9 +msgid "Currently, there are two methods of setting questions:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:11 +msgid "Through the :ref:`edit database area `. Go to **Setup** > **Edit Database**, then click **Change** next to *Adjudicator feedback questions*. You can add questions here." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:14 +msgid "Using the :ref:`importtournament command `." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:16 +msgid "Most of what you need to know is explained in help text in the edit database area. (Even if you're using ``importtournament``, you might find the field descriptions in the edit database area helpful.) Some more details are here." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:20 +msgid "Answer types and options" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:23 +msgid "Type" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:23 +msgid "Relevant options" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:23 +msgid "Appearance" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:25 +msgid "**checkbox**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:25 +#: ../../features/adjudicator-feedback.rst:27 +#: ../../features/adjudicator-feedback.rst:35 +#: ../../features/adjudicator-feedback.rst:37 +msgid "\\-" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:27 +msgid "**yes/no (dropdown)**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:29 +msgid "**integer (textbox)**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:29 +#: ../../features/adjudicator-feedback.rst:31 +#: ../../features/adjudicator-feedback.rst:33 +msgid "min_value, max_value" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:31 +msgid "**integer scale**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:33 +msgid "**float**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:35 +msgid "**text**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:37 +msgid "**long text**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:39 +msgid "**select one**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:39 +#: ../../features/adjudicator-feedback.rst:41 +msgid "choices" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:41 +msgid "**select multiple**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:44 +msgid "Options:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:46 +msgid "**min_value** and **max_value** specify the minimum and maximum allowable values in the field. Mandatory for \"integer scale\" types and optional for \"integer (textbox)\" and \"float\" types." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:47 +msgid "**choices** is used with \"select one\" and \"select multiple\" types, and is a ``//``-delimited list of possible answers, *e.g.* ``biased//clear//concise//rambly//attentive//inattentive``" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:48 +msgid "**required** specifies whether users must fill out the field before clicking \"submit\". This requirement is only enforced on public submission forms. It is not enforced on forms entered by tab room assistants." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:50 +msgid "The exception to this is the \"checkbox\" type. For checkboxes, \"required\" means that the user cannot submit the form unless the box is checked. Think of it like an \"I agree to the terms\" checkbox. This isn't a deliberate design decision—it's just a quirk of how checkboxes work on web forms." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:53 +msgid "Want another answer type?" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:55 +msgid "We don't really intend to add any further complexity to the built-in feedback system. If the above answer types don't cover your needs, we suggest using a third-party feedback system. You might be able to adapt `SurveyMonkey `_, `Google Forms `_ or `Qualtrics `_ to your needs." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:60 +msgid "We may be persuaded to make an exception if the new question type you have in mind is easy to add: that is, if it is straightforward to implement using standard web page elements and fits into the existing questionnaire framework (see :ref:`feedback-questionnaires` below). If you think there is such a case, please contact us using the contact details in the :ref:`authors` section." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:69 +msgid "Different questionnaires" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:71 +msgid "Tabbycat allows you to specify two questionnaires: one for feedback submitted by teams, and one for feedback submitted by adjudicators. You must specify in each question whether to include the question in each questionnaire." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:75 +msgid "**from_team**, if checked, includes the question in feedback submitted by teams" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:77 +msgid "**from_adj**, if checked, includes the question in feedback submitted by adjudicators" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:81 +msgid "Who gives feedback on whom?" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:82 +msgid "Tabbycat allows for three choices for which adjudicators give feedback on which other adjudicators:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:85 +msgid "Chairs give feedback on panellists and trainees" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:86 +msgid "Chairs give feedback on panellists and trainees, and panellists give feedback on chairs" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:88 +msgid "All adjudicators, including trainees, give feedback on all other adjudicators they have adjudicated with" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:91 +msgid "You can set this in the **feedback paths** option under *Setup* > *Configuration* > *Feedback*. Your choice affects each of the following:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:94 +msgid "The options presented to adjudicators in the online feedback form" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:95 +msgid "The printable feedback forms" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:96 +msgid "The submissions expected when calculating feedback progress and highlighting missing feedback" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:99 +msgid "The feedback paths option only affects feedback from adjudicators. Teams are always assumed to give feedback on the orallist, and they are encouraged to do so through hints on the online and printable feedback forms, but there is nothing technically preventing them from submitting feedback from any adjudicator on their panel." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:105 +msgid "Advanced users" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:108 +msgid "If you need a different setting, you need to edit the source code. Specifically, you should edit the function ``expected_feedback_targets`` in tabbycat/adjfeedback/utils.py." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:112 +msgid "Unless we can be convinced that they are very common, we don't intend to add any further choices to the feedback paths option. If your needs are specific enough that you need to differ from the available settings, they are probably also beyond what is sensible for a built-in feedback system, and we recommend using a third-party feedback system instead." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:119 +msgid "How is an adjudicator's score determined?" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:121 +msgid "For the purpose of the automated allocation, an adjudicator's overall score is a function of their base score, the current round's feedback weight, and their average feedback score. This number is calculated according to the following formula:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:126 +msgid "\\textrm{score} = (1-w)\\times\\textrm{base score} + w\\times\\textrm{average feedback score}" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:130 +msgid "where :math:`w` is the feedback weight for the round. Note that because the feedback score is averaged across all pieces of feedback (rather than on a per-round total) rounds in which a person receives feedback from many sources (say from all teams and all panellists) could impact their average score much more than a round in which they only receive feedback from one or two sources." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:132 +msgid "Under this formula, each round's feedback weight can be used to determine the relative influence of the base score vs feedback in determining the overall score. As an example, say that an adjudicator received 5.0 as their base score, but their average feedback rating has thus far been 2.0. If the current rounds' feedback weight is set to 0.75, then their overall score would be 2.75. If the current round's feedback weight is set to 0.5 their score would be 3.5. If the weight was 0, their score will always be their base score; if the weight was 1 it will always be their average feedback value." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:141 +msgid "To change the weight of a round you will need to go to the Edit Database area, open the round in question, and change its *Feedback weight* value. It is common to set rounds with a low feedback weight value early on in the tournament (when feedback is scant) and to increase the feedback weight as the tournament progresses." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:143 +msgid "A participant's base score can, in conjunction with feedback weight, also be used as a manual override for an adjudicator's overall ranking. At several tournaments, adjudication cores have set every round's feedback weight to 0, and manually adjusted an adjudicator's base score in response to feedback they have received and reviewed. In this way complete control over every adjudicator's overall score can be exerted." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:145 +msgid "If feedback from trainee adjudicators is enabled, any scores that they submit in their feedback are not counted towards that adjudicator's overall score." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:148 +msgid "Ignoring/Discarding feedback" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:150 +msgid "There are some cases where feedback should be discarded or ignored, but there are some differences between the two. Discarded feedback is mostly due to having another piece of feedback that supersedes the discarded ones. Ignored feedback is different as it still counts the affected feedback as submitted, just inconsequential, ignored in the adjudicator's score calculation." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:152 +msgid "Feedback can be marked as discarded in the database view, under the ``confirmed`` field. It can also be marked as ignored in the same view. Controls to reverse these designations are also available there. To mark feedback as ignored, an option is available in the administrator's and assistant's feedback adding form, as well in the form of a toggle link at the bottom of each card." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/features/backups.po b/docs/locale/kk/LC_MESSAGES/features/backups.po new file mode 100644 index 00000000000..071e8b3fb2b --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/features/backups.po @@ -0,0 +1,120 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/backups.po\n" +"X-Crowdin-File-ID: 1275\n" +"Language: kk_KZ\n" + +#: ../../features/backups.rst:5 +msgid "Backups" +msgstr "" + +#: ../../features/backups.rst:7 +msgid "Tabbycat doesn't provide an in-built backup system; instead you should create copies of your database directly. Heroku provides a very good backup utility for all sites hosted on Heroku which makes this easy, and for Heroku-based Tabbycat sites, we strongly recommend it." +msgstr "" + +#: ../../features/backups.rst:12 +msgid "You should **always** back up the database before deleting *any* data while in the Edit Database area, because deleting data cannot be undone. It is also a good idea to back up the database before doing anything in the Edit Database area, unless you're very familiar and confident with editing the Tabbycat database directly." +msgstr "" + +#: ../../features/backups.rst:18 +msgid "You may, as a matter of standard practice at large tournaments, wish to back up the database twice per round: Once just after you've generated the draw and allocated adjudicators, and once just after you've finished entering results." +msgstr "" + +#: ../../features/backups.rst:22 +msgid "If you're using an online version of Tabbycat, it's a good idea to download the backups. While it's extremely rare to lose internet access or have an outage in a critical web service (*i.e.*, Heroku), having a local copy of your backups allows you to :ref:`restore your tab to a local installation ` if this ever happens." +msgstr "" + +#: ../../features/backups.rst:29 +msgid "Installations on Heroku" +msgstr "" + +#: ../../features/backups.rst:31 +msgid "Heroku provides a utility to easily back up and restore the entire site database." +msgstr "" + +#: ../../features/backups.rst:35 +msgid "If you don't have the Heroku CLI" +msgstr "" + +#: ../../features/backups.rst:36 +msgid "You can capture backups from the Heroku Dashboard:" +msgstr "" + +#: ../../features/backups.rst:38 +msgid "Go to the `Heroku Dashboard `_ and click on your app." +msgstr "" + +#: ../../features/backups.rst:40 +msgid "Under *Installed add-ons*, go to **Heroku Postgres**." +msgstr "" + +#: ../../features/backups.rst:41 +msgid "Scroll down, and click on the **Capture Backup** button." +msgstr "" + +#: ../../features/backups.rst:42 +msgid "Once the capture has finished, a **Download** button will be available." +msgstr "" + +#: ../../features/backups.rst:44 +msgid "You can't restore a backup without the Heroku Command Line Interface (CLI), so if you end up needing your backup, you'll need to install the `Heroku CLI `_, and then follow the instructions below." +msgstr "" + +#: ../../features/backups.rst:50 +msgid "If you have the Heroku CLI" +msgstr "" + +#: ../../features/backups.rst:52 +msgid "The best guide to backing up databases is the `Heroku Dev Center's PGBackups guide `_." +msgstr "" + +#: ../../features/backups.rst:55 +msgid "To capture a backup::" +msgstr "" + +#: ../../features/backups.rst:59 +msgid "To download the most recently captured backup::" +msgstr "" + +#: ../../features/backups.rst:63 +msgid "To restore a backup::" +msgstr "" + +#: ../../features/backups.rst:67 +msgid "If you have multiple Tabbycat sites, you'll need to specify which one by adding ``--app mytournamentname`` to the end of the command." +msgstr "" + +#: ../../features/backups.rst:71 +msgid "Local installations" +msgstr "" + +#: ../../features/backups.rst:73 +msgid "There are lots of ways to back up local PostgreSQL databases, but we'd suggest using the `pg_dump `_ and `pg_restore `_ commands." +msgstr "" + +#: ../../features/backups.rst:83 +msgid "Restoring a Heroku backup to a local installation" +msgstr "" + +#: ../../features/backups.rst:85 +msgid "As detailed in the `Heroku Dev Center `_, you can restore a downloaded Heroku backup to a local installation. This might be useful if, say, your internet connection breaks irrecoverably in the middle of a tournament and you need to run offline. Of course, for this to work, you need to have downloaded your backup before your internet connection broke---a good reason to download a copy of your backups as soon as you make them." +msgstr "" + +#: ../../features/backups.rst:92 +msgid "Assuming your download is called ``latest.dump`` (this is the default name), your PostgreSQL username is ``tabbycat``, and you wish to call your local database ``fromheroku`` (if not, replace arguments as appropriate)::" +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/features/breaks.po b/docs/locale/kk/LC_MESSAGES/features/breaks.po new file mode 100644 index 00000000000..9412526d2ca --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/features/breaks.po @@ -0,0 +1,212 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/breaks.po\n" +"X-Crowdin-File-ID: 1277\n" +"Language: kk_KZ\n" + +#: ../../features/breaks.rst:5 +msgid "Breaks and Break Rounds" +msgstr "" + +#: ../../features/breaks.rst:7 +msgid "In Tabbycat, elimination rounds (sometimes called *outrounds* or the *final series*) are called \"break rounds\", and the qualification of teams to compete in the elimination phase of a tournament is called the \"break\"." +msgstr "" + +#: ../../features/breaks.rst:12 +msgid "About break categories" +msgstr "" + +#: ../../features/breaks.rst:14 +msgid "Tabbycat supports multiple and arbitrarily-named break categories. Most tournaments will have just one category, typically called \"Open\", leading to the grand final. Some tournaments also have restricted-eligibility break categories, for example, for novice teams or teams for whom English is a second language." +msgstr "" + +#: ../../features/breaks.rst:19 +msgid "Having multiple break categories is intended for tournaments where multiple *parallel* elimination phases derive from the *same* preliminary rounds (inrounds). It's not for parallel but distinct competitions---for those, you should create distinct tournaments." +msgstr "" + +#: ../../features/breaks.rst:27 +msgid "Break qualification rules" +msgstr "" + +#: ../../features/breaks.rst:29 +msgid "Tabbycat supports several break qualification rules, and each break category must be configured to use one of them. Most tournaments will use \"Standard\", which is the default." +msgstr "" + +#: ../../features/breaks.rst:38 +msgid "Rule name (string to use in ``importtournament`` CSV files)" +msgstr "" + +#: ../../features/breaks.rst:39 +msgid "Descrption" +msgstr "" + +#: ../../features/breaks.rst:41 +msgid "Standard (``standard``)" +msgstr "" + +#: ../../features/breaks.rst:42 +msgid "The top *n* teams break. This is the default, and most tournaments use this rule." +msgstr "" + +#: ../../features/breaks.rst:45 +msgid "AIDA 1996 (``aida-1996``)" +msgstr "" + +#: ../../features/breaks.rst:46 +msgid "The top *n* teams that are also in the top three teams from their institution break." +msgstr "" + +#: ../../features/breaks.rst:49 +msgid "AIDA 2016 (Australs) (``aida-2016-australs``)" +msgstr "" + +#: ../../features/breaks.rst:50 +msgid "The top *n* teams that fulfil either of these criteria break:" +msgstr "" + +#: ../../features/breaks.rst:53 +msgid "They are in the top *n* teams overall, and in the top three teams from their institution." +msgstr "" + +#: ../../features/breaks.rst:55 +msgid "They have at least as many wins as the *n*\\ th-ranked team, and they are the top team from their institution." +msgstr "" + +#: ../../features/breaks.rst:58 +msgid "If fewer than *n* teams fulfil either criterion, then the best teams not fulfilling the criteria are added to make *n* teams." +msgstr "" + +#: ../../features/breaks.rst:62 +msgid "AIDA 2016 (Easters) (``aida-2016-easters``)" +msgstr "" + +#: ../../features/breaks.rst:63 +msgid "As for AIDA 2016 (Australs), except that if fewer than *n* teams fulfil either criterion, then only the best teams who are in the top three teams from their institution are added to make *n* teams." +msgstr "" + +#: ../../features/breaks.rst:68 +msgid "The break generators are somewhat more complex than described in the above table: among other things, they also handle cases where there is a tie for the last place in the break, and for those break categories marked \"general\", they will show where ineligible teams would have broken, had they been eligible." +msgstr "" + +#: ../../features/breaks.rst:75 +msgid "Setting up break categories and rounds" +msgstr "" + +#: ../../features/breaks.rst:77 +msgid "For each break category in your tournament, you need to do two things:" +msgstr "" + +#: ../../features/breaks.rst:79 +msgid "Create (and name) a break category" +msgstr "" + +#: ../../features/breaks.rst:80 +msgid "Create break rounds for the category" +msgstr "" + +#: ../../features/breaks.rst:81 +msgid "Set the eligibility of teams to compete in the category" +msgstr "" + +#: ../../features/breaks.rst:83 +msgid "If you only have one break category (open) and you create your tournament using the \"Create New Tournament\" page, simply enter the number of teams in the break (*e.g.*, 8 if you're breaking to quarterfinals). Tabbycat will create the break category and break rounds for you. For any further break categories, you'll need to go to the **Breaks** item in the left-hand menu for a particular tournament and then click **Break Categories**. Fill out the forms for the number of new break categories and save. Rounds will be created automatically. You'll still need to set the eligibility of teams though, as in (3) below." +msgstr "" + +#: ../../features/breaks.rst:92 +msgid "If you create your tournament using the `importtournament` command or in **Edit Database**, you'll need to do all three steps above yourself. You may also want to edit the break rounds (2) to change their names." +msgstr "" + +#: ../../features/breaks.rst:97 +msgid "1. Creating break categories" +msgstr "" + +#: ../../features/breaks.rst:99 +msgid "If using the `importtournament` command, there is an example file, *break_categories.csv*, that you can copy and adjust. If using **Edit Database**, add categories under **Break Qualification > Break categories**." +msgstr "" + +#: ../../features/breaks.rst:103 +msgid "Most of the fields are self-explanatory or described on the Edit Database form, except for one: \"rule\", which sets the break qualification rule. Permissible values are described in :ref:`breakqual-rules` above. If using `importtournament`, be sure to use the correct string (in brackets in the table). The rule defaults to \"Standard\" (``standard``)." +msgstr "" + +#: ../../features/breaks.rst:109 +msgid "The \"institution cap\" field was removed in Tabbycat 1.0. All Australs break qualification rules are now hard-coded to a cap of three teams per institution." +msgstr "" + +#: ../../features/breaks.rst:114 +msgid "2. Creating break rounds" +msgstr "" + +#: ../../features/breaks.rst:116 +msgid "You should create a round for every break round you intend to hold, including it in *rounds.csv* if using `importtournament`, or adding them under **Tournaments > Rounds** if using **Edit Database**. Be careful to set the following fields correctly:" +msgstr "" + +#: ../../features/breaks.rst:121 +msgid "*Break category* must be set to the relevant break category." +msgstr "" + +#: ../../features/breaks.rst:122 +msgid "*Stage* and *draw type* must both be set to \"Elimination\"." +msgstr "" + +#: ../../features/breaks.rst:125 +msgid "3. Setting break eligibility" +msgstr "" + +#: ../../features/breaks.rst:127 +msgid "Once a break category has been created it will not have any teams eligible for it, even if it was marked as \"Is general\". To edit the eligibility of teams for any break round go to the **Breaks** item in the left-hand menu for a particular tournament and then click **Team Eligiblity**." +msgstr "" + +#: ../../features/breaks.rst:132 +msgid "Here you can select \"all\" or \"none\" to toggle all team eligiblities or edit them using the tick boxes. Once you **save** it should return you to the main break page which will display the number of teams marked eligible." +msgstr "" + +#: ../../features/breaks.rst:136 +msgid "Adjudicators can be marked as \"breaking\" on the **Feedback** page; clicking **Adjudicators** on the breaks page will take you straight there." +msgstr "" + +#: ../../features/breaks.rst:140 +msgid "Generating the break" +msgstr "" + +#: ../../features/breaks.rst:142 +msgid "Unlike team or speaker standings, each category's break (and the break ranks of teams) are not determined automatically and updated continuously. Instead each can be generated (and regenerated) as desired." +msgstr "" + +#: ../../features/breaks.rst:146 +msgid "To do so go to the **Breaks** item in the left-hand menu and then click the white button that corresponds to the break category you'd like to determine the rankings for. When prompted, select **Generate the break for all categories** to display the list of breaking teams." +msgstr "" + +#: ../../features/breaks.rst:151 +msgid "From this page you can update the breaking teams list for this break category (or all categories) as well as view and edit 'remarks' that account for cases in which a team may not break (such as being capped or losing a coin toss)." +msgstr "" + +#: ../../features/breaks.rst:155 +msgid "Please double-check the generated break before announcing or releasing it. Although the break generation code is designed to handle edge cases, we don't test the code for such cases." +msgstr "" + +#: ../../features/breaks.rst:160 +msgid "Creating draws for break rounds" +msgstr "" + +#: ../../features/breaks.rst:162 +msgid "Creating a draw for a break round proceeds as normal, except that the team availability process is skipped. Instead, when you visit the availability page for that round it will have automatically determined which teams should be debating based upon the determined break for that category. Once a draw has been generated it will then use the relevant break ranks to create the matchups (ie 1st-breaking vs 16th-breaking, 2nd vs 15th, *etc.*). Subsequent break rounds will then also automatically determine matchups based on the previous round's results and room ranks." +msgstr "" + +#: ../../features/breaks.rst:171 +msgid "If the \"break size\" of a break category is not a power of 2, it will treat the first break round as a partial-elimination draw and only create a draw for the teams not skipping the partial-elimination round. Subsequent break rounds will then process as described above." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/features/check-ins.po b/docs/locale/kk/LC_MESSAGES/features/check-ins.po new file mode 100644 index 00000000000..5c2bcf491d2 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/features/check-ins.po @@ -0,0 +1,136 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/check-ins.po\n" +"X-Crowdin-File-ID: 1279\n" +"Language: kk_KZ\n" + +#: ../../features/check-ins.rst:5 +msgid "Check-Ins" +msgstr "" + +#: ../../features/check-ins.rst:7 +msgid "A 'Check-in' is a record of a speaker, adjudicator, venue, or ballot's status at a particular point in time. Typically these are used at large tournaments to reliably track who is or is not present for the first round of each day." +msgstr "" + +#: ../../features/check-ins.rst:9 +msgid "Check-ins serve a similar purpose to the :ref:`availability ` system. However availabilities are tied to a particular round rather than to a particular time — they are generally used to record instances where you know ahead of time whether a person should or should not be included in a draw. In contrast, check-ins are useful for when you *don't* know ahead of time whether a person will be able to be put into the draw and so want to be able to confirm their presence with a high degree of confidence. That said the two systems interact — the standard availability pages allow you to easily set all adjudicators or teams who have checked-in as available for a given round." +msgstr "" + +#: ../../features/check-ins.rst:12 +msgid "Check-In Identifiers" +msgstr "" + +#: ../../features/check-ins.rst:14 +msgid "Check-ins are associated with a 'identifier' — a number that is unique to each speaker and adjudicator. To generate these numbers go to the *Identifiers* section under the Check-Ins menu. From here you generate identifiers for Speakers, Adjudicators, and Venues as needed. Note also that Identifiers can be manually added or edited in the *Edit Database* area if necessary." +msgstr "" + +#: ../../features/check-ins.rst:18 +msgid "Once this number has been generated it can be transformed into a barcode so that it can be easily included on tournament badges or otherwise printed and disbursed. On the same *Identifiers* page you can use the *View barcodes* option to open up a page that lists all the barcodes for the speakers, adjudicators, or venues." +msgstr "" + +#: ../../features/check-ins.rst:22 +msgid "The identifiers for ballots are automatically generated when printing ballots." +msgstr "" + +#: ../../features/check-ins.rst:25 +msgid "Recording Check-Ins" +msgstr "" + +#: ../../features/check-ins.rst:27 +msgid "On the *Scanning* section of Check-ins you can record a particular check-in. This can be done in a few different ways:" +msgstr "" + +#: ../../features/check-ins.rst:29 +msgid "You can type in the Identifier number into the box. Once five numbers have been identified it will automatically issue the check-in and clear the input field for the next number." +msgstr "" + +#: ../../features/check-ins.rst:31 +msgid "If you have purchased barcode scanners and configured them as USB keyboards they should then be compatible with this page: upon page load the cursor should be positioned in the input field, and any scanned barcodes should populate it with the specified number, issue the check-in, and then clear the box for the next scan." +msgstr "" + +#: ../../features/check-ins.rst:33 +msgid "Barcode scanners are probably cheaper than you think. A perfectly serviceable model should be around $20 USD or less although a cursory Google search might at first turn up models that are many times that amount. If you are a curious tab director, or are involved in a tournament with a little spare money, having just one or two around for critical tasks can be highly valuable." +msgstr "" + +#: ../../features/check-ins.rst:35 +msgid "If your device has a (web)cam you can use the Scan Using Camera button. Any barcodes put in front of the camera's video stream will be scanned into the form. A sound will play when a barcode has been identified — so be aware that turning sound on or using headphones can help identify when a scan has been made." +msgstr "" + +#: ../../features/check-ins.rst:39 +msgid "Camera scanning works on most modern browsers although it will only work with Safari 11 or higher (iOS 11+ and macOS 10.13+). Camera scanning may also not work when using a local-installation of Tabbycat in all browsers, *except* Firefox where it seems to. Depending on the quality of your camera barcodes that are less than 4cm wide may not be recognised — ideally barcodes should be at least 5cm if using this method as your main way of checking-in things." +msgstr "" + +#: ../../features/check-ins.rst:41 +msgid "The Check-in status page (described below) allows assistants and administrators to manually check-in particular people or entire institutions without needing to know their identifiers." +msgstr "" + +#: ../../features/check-ins.rst:44 +msgid "The Check-In 'Window'" +msgstr "" + +#: ../../features/check-ins.rst:46 +msgid "Because Check-In events are not explicitly linked to rounds there is essentially a 'window' or time period in which a check-in is still considered valid. The time of this 'window' in hours can be set in *Setup* > *Configuration* > *Data Entry*." +msgstr "" + +#: ../../features/check-ins.rst:48 +msgid "At tournaments the run check-ins during the start of each day the check-in 'window' (i.e. the time before check-ins expire) you can leave this window setting at the default time (12 hours) which should give enough time to distinguish between the first check-ins of that day as compared to the last check-ins of the previous day. At tournaments where you want to run a check-in process at the start of every round you may want to set the time to around 2 hours or something much shorter." +msgstr "" + +#: ../../features/check-ins.rst:51 +msgid "Viewing Check-Ins" +msgstr "" + +#: ../../features/check-ins.rst:53 +msgid "On the *People Statuses* section of Check-ins you can view who has or has not been checked-in. This page will live-update with the latest check-ins so you should be able to leave it open to monitor income attendances." +msgstr "" + +#: ../../features/check-ins.rst:57 +msgid "The blue \"tick\" boxes allow you to manually check-in people and/or entire institutions (for *People*) or venues and/or venue groups (for *Venues*) , without the need to scan their identifiers. This style of check-in is designed for use an auditorium roll-call type situation where you might be running through a list of people to the room or identifying absences on a per-institution basis." +msgstr "" + +#: ../../features/check-ins.rst:59 +msgid "A public version of this check-in status page can be enabled under *Setup* > *Configuration* > *Public Features* which can be useful for allowing people to self-police check-ins and/or validate their check-in worked." +msgstr "" + +#: ../../features/check-ins.rst:62 +msgid "Check-Ins for Ballots" +msgstr "" + +#: ../../features/check-ins.rst:64 +msgid "Ballots can be checked-in to quickly validate which ballots are physically present in the tab room. This can help more quickly identify ballots that are missing. Which ballots have or have not been checked-in will show up on the Results page. Ballots can be scanned using the standard 'Scan Identifiers' page." +msgstr "" + +#: ../../features/check-ins.rst:66 +msgid "Barcodes are automatically assigned and included to ballots when they are printed. Barcodes have no check-in window — any relevant check-in event counts regardless of how long ago it was." +msgstr "" + +#: ../../features/check-ins.rst:69 +msgid "Check-Ins for Venues" +msgstr "" + +#: ../../features/check-ins.rst:71 +msgid "Venues can be checked-in, but what a 'venue check-in' means is a bit more flexible. It might be used to validate which rooms are debate-ready at the start of a day (i.e. unlocked; has a desk) or it could be used during the rounds to record which rooms have returned their ballots." +msgstr "" + +#: ../../features/check-ins.rst:73 +msgid "Venues have a separate check-in window setting to that of people." +msgstr "" + +#: ../../features/check-ins.rst:75 +msgid "Venues have their own Status page (like people) and can be checked-in there manually. Like speakers and adjudicators their barcodes can also be printed off." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/features/data-entry.po b/docs/locale/kk/LC_MESSAGES/features/data-entry.po new file mode 100644 index 00000000000..30899143d7a --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/features/data-entry.po @@ -0,0 +1,168 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-entry.po\n" +"X-Crowdin-File-ID: 1281\n" +"Language: kk_KZ\n" + +#: ../../features/data-entry.rst:5 +msgid "Entering Ballots and Feedback" +msgstr "" + +#: ../../features/data-entry.rst:8 +msgid "Ballot check-in" +msgstr "" + +#: ../../features/data-entry.rst:10 +msgid "For tournaments that require it, there is a \"ballot check-in\" page that can be used to record the arrival of ballots to the tab room. When there's a missing ballot, it can help establish whether the ballot never made it to the tab room, or whether it's probably floating around in the room forgotten. Also, it can help enforce early checks that panels return the correct number of ballots to the room." +msgstr "" + +#: ../../features/data-entry.rst:12 +msgid "To get to the ballot check-in, click the relevant round in the menu of the admin area, and then click \"Results\" and then \"Ballot Check-In\". This requires superuser privileges." +msgstr "" + +#: ../../features/data-entry.rst:14 +msgid "There's no adverse effect from not using the ballot check-in. Data enterers will still be able to enter and confirmed ballots, even if not checked in." +msgstr "" + +#: ../../features/data-entry.rst:18 +msgid "Since the ballot check-in tends to require a dedicated computer or two, it can be worth creating a separate superuser account for ballot check-in, so that it doesn't appear on the action logs as being by a particular person." +msgstr "" + +#: ../../features/data-entry.rst:19 +msgid "Don't forget to provision a computer or two for this if you're planning to use it." +msgstr "" + +#: ../../features/data-entry.rst:20 +msgid "Ballot check-ins can be a bottleneck, so you might decide they're not worth using. Alternatively, you might have multiple computers for this purpose, or you might dedicate a tab room helper to driving the process (since this is probably faster than runners doing the typing in turn)." +msgstr "" + +#: ../../features/data-entry.rst:23 +msgid "Ballot entry" +msgstr "" + +#: ../../features/data-entry.rst:27 +msgid "Most tab rooms run some sort of check system to ensure data is entered accurately. In Tabbycat, this is built into the system, which also helps speed it up." +msgstr "" + +#: ../../features/data-entry.rst:29 +msgid "As a general principle, Tabbycat requires all ballots to be looked at by two people. The first person enters the data from the ballot, and the second person checks it. The second person isn't allowed to modify the data—they either confirm it or reject it, and if they reject it, then the whole process starts again. This is by design: to be confirmed, the *same* data must have been seen by at least two people." +msgstr "" + +#: ../../features/data-entry.rst:31 +msgid "The administrator area does **not** work like this. It's designed to be flexible, so allows you to edit, confirm or unconfirm any ballot at any time. For this reason, you should use the **assistant** area to enter ballots, even if you have a superuser account." +msgstr "" + +#: ../../features/data-entry.rst:35 +msgid "Don't forget to check the totals against the ballot—they're a useful integrity check too." +msgstr "" + +#: ../../features/data-entry.rst:36 +msgid "Don't forget to check the winner against the ballot! If the adjudicator gets it wrong, it's worth asking to clarify." +msgstr "" + +#: ../../features/data-entry.rst:37 +msgid "It can be helpful to think about the room layout to maximize efficiency." +msgstr "" + +#: ../../features/data-entry.rst:38 +msgid "Some tab rooms like to assign some to data entry and some to verification. This isn't really necessary, since Tabbycat doesn't let the same person enter and verify the same ballot. (This is one of many reasons why every person should have their own account.)" +msgstr "" + +#: ../../features/data-entry.rst:39 +msgid "Emails can be configured to be sent to adjudicators as a receipt of their ballot once confirmed." +msgstr "" + +#: ../../features/data-entry.rst:42 +msgid "Duplicate/Swing Speeches" +msgstr "" + +#: ../../features/data-entry.rst:46 +msgid "When entering the ballots there is a toggle label *'Iron' speeches*. When set to \"yes\" this allows you to have the same speaker deliver multiple speeches provided their extra speeches are labelled on the form as 'duplicates'. Typically, most tournaments require that lesser 'iron man' speech is discarded from the tab, which would mean that you would mark the lower speaker of the two scores as the duplicate (note that this may require you to check each score's average across a panel)." +msgstr "" + +#: ../../features/data-entry.rst:48 +msgid "Speeches marked as duplicates are not included in the speaker tab. This means that they can also be used to exclude swing speakers from the tab as needed; even if they do not actually speak twice. To do so, change the name of the swing speaker to be that of an existing team member and ensure that that speech is marked as a duplicate." +msgstr "" + +#: ../../features/data-entry.rst:50 +msgid "There is also an option under **Standings** in the **Configuration** section that specifies the number of debates a speaker can miss before you will not show on the tab. By default there is no limit, but if need be this can be set to hide swing speakers from the final speaker tab." +msgstr "" + +#: ../../features/data-entry.rst:53 +msgid "Feedback entry" +msgstr "" + +#: ../../features/data-entry.rst:57 +msgid "Feedback doesn't have the same verification process as ballots. Feedback that is entered by the tab room is assumed to be confirmed. If feedback is entered multiple times, all copies are retained but only the last one \"counts\" (is considered confirmed)." +msgstr "" + +#: ../../features/data-entry.rst:60 +msgid "Online entry" +msgstr "" + +#: ../../features/data-entry.rst:62 +msgid "There are two methods of allowing ballots and feedback to be submitted online. Both are set in the **Data Entry** page of each tournament's **Configuration** section and can be set independently; both in whether each can be submitted online at all and in which method of online submission are available." +msgstr "" + +#: ../../features/data-entry.rst:68 +msgid "Private URLs" +msgstr "" + +#: ../../features/data-entry.rst:70 +msgid "The first method of data entry is using 'private URLs'. When this setting is enabled you can create a special URL that is unique to a participant. This link contains a number of random characters and is not displayed publicly; it is in effect a secret that only that a specific participant should know. Presuming people do not share these links to others, this provides a means to (relatively) securely identify who is submitting what information. Because Tabbycat knows which participant has which URL it will only allow them to submit feedback/ballots for debates that they were speakers/adjudicators in." +msgstr "" + +#: ../../features/data-entry.rst:72 +msgid "Private URLs should provide more than adequate security for almost all tournaments' purposes, but they aren't foolproof. Anyone with access to the URL for a participant can submit feedback or ballots on their behalf, so it's important that participants not share their URLs. This also means participants need to be careful when submitting from devices they do not own, because the URL will be logged in that device's browser history." +msgstr "" + +#: ../../features/data-entry.rst:74 +msgid "These links must be generated within Tabbycat after the preference is enabled. To do so go to the **Feedback** section and then the **Private URLs** area. Once there you will be prompted to generate those URLs for all participants, which — once generated — will be presented in separate tables (one for teams; one for adjudicators)." +msgstr "" + +#: ../../features/data-entry.rst:78 +msgid "These URLs can then be distributed to each person in a number of ways. There are pages within Tabbycat for printing them out (one URL per page labelled by recipient) or emailing them out (providing participants have been assigned email addresses). In the past tournaments have also used data from this table to send out SMSs by bulk, or distributed them to institutional representatives to disburse." +msgstr "" + +#: ../../features/data-entry.rst:82 +msgid "You can assign email address to participants using the :ref:`importtournament command ` when importing your registration data, or by going to the *Edit Data* area and looking up each Speaker/Adjudicator." +msgstr "" + +#: ../../features/data-entry.rst:83 +msgid "If, after generating the private URLs, you add additional Teams or Adjudicators you can go to the *Edit Database* area , look up each Speaker/Adjudicator, and type in a bunch of random characters as their *Url key* to assign them a private URL." +msgstr "" + +#: ../../features/data-entry.rst:84 +msgid "You can delete the current set of URLs by running this command in a shell on your server (replacing TOURNAMENT_SLUG with the appropriate value): ``python manage.py privateurls delete --tournament TOURNAMENT_SLUG``" +msgstr "" + +#: ../../features/data-entry.rst:89 +msgid "Public URLs" +msgstr "" + +#: ../../features/data-entry.rst:91 +msgid "The second method of data entry is using 'normal URLs'. This essentially means that any users visiting the public version of the site is able to submit a ballot or feedback (as specified by their respective settings). They do so by self-selecting which Team or Adjudicator they are then entering in a form as normal." +msgstr "" + +#: ../../features/data-entry.rst:93 +msgid "This is, rather obviously, not a particularly secure method of data entry — nothing is stopping anyone on the site from entering data as someone else. The data can be checked, verified, and edited as normal by admins however. As such, this method is only recommended for small tournaments where you can trust those present to enter accurate information (or where accuracy is not crucial)." +msgstr "" + +#: ../../features/data-entry.rst:95 +msgid "There is an additional setting to set a 'tournament password' that needs to be submitted to enable the form. It is imagined, that if enabled, this password would only be distributed to tournament participants. However this only helps (at best) prevent non-participants from entering information; the fundamental problem of not verifying who is submitting what information is still present." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/features/data-importers.po b/docs/locale/kk/LC_MESSAGES/features/data-importers.po new file mode 100644 index 00000000000..d039916e7d0 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/features/data-importers.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-importers.po\n" +"X-Crowdin-File-ID: 1283\n" +"Language: kk_KZ\n" + +#: ../../features/data-importers.rst:5 +msgid "Tournament Data Importers" +msgstr "" + +#: ../../features/data-importers.rst:7 +msgid "This page describes how to write your own tournament data importer. It is aimed at an audience that is familiar with programming in Python, and may be willing to get their head around the Django model if necessary." +msgstr "" + +#: ../../features/data-importers.rst:9 +msgid "The **tournament data importer** is the class that imports data from one or more files (usually CSV files) into the database. A base class ``BaseTournamentDataImporter`` is in `importer/base.py `_. An example of a data importer is in `importer/anorak.py `_." +msgstr "" + +#: ../../features/data-importers.rst:11 +msgid "Todo" +msgstr "" + +#: ../../features/data-importers.rst:11 +msgid "This page is incomplete. If you're finding this information insufficient, please contact Chuan-Zheng using the contact details in the :ref:`authors` section." +msgstr "" + +#: ../../features/data-importers.rst:14 +msgid "Why write your own?" +msgstr "" + +#: ../../features/data-importers.rst:16 +msgid "While Tabbycat has standard import formats, you might find that none of them fit the data that you need to import." +msgstr "" + +#: ../../features/data-importers.rst:18 +msgid "It's not possible to devise a single, universally-convenient import file format. Tabbycat supports way too many permutations of configurations for this to be workable. Instead, we provide the ones that have been useful before and are therefore likely to be useful again—but if your tournament has different needs, you might decide that it's easier to write an importer to conform to you, rather than conform to the importer." +msgstr "" + +#: ../../features/data-importers.rst:20 +msgid "A base importer class abstracts away most of the nitty-gritty of parsing files, allowing new importers to focus on their interpretation with as little code as possible." +msgstr "" + +#: ../../features/data-importers.rst:22 +msgid "To allow new importers to be written with as little code as possible, most of the work is abstracted to the base class. The flipside of this abstraction is that it induces a learning curve." +msgstr "" + +#: ../../features/data-importers.rst:25 +msgid "Basic workflow" +msgstr "" + +#: ../../features/data-importers.rst:27 +msgid "Choose a name. We name importers after items of clothing in alphabetical order (starting at 'Anorak')." +msgstr "" + +#: ../../features/data-importers.rst:28 +msgid "Write a subclass of ``BaseTournamentDataImporter``." +msgstr "" + +#: ../../features/data-importers.rst:29 +msgid "Write the front-end interface. This will probably be a `Django management command `_." +msgstr "" + +#: ../../features/data-importers.rst:32 +msgid "A basic example" +msgstr "" + +#: ../../features/data-importers.rst:34 +msgid "It's easiest to start with an example. Here's a basic importer with just one import method, which imports adjudicators." +msgstr "" + +#: ../../features/data-importers.rst:60 +msgid "Let's break this down. The method ``import_adjudicators()`` takes a single argument, a file object representing the CSV file. Most of the work is passed off to ``self._import()``. This helper method is defined in ``BaseTournamentDataImporter`` and is where most of the intelligence lies." +msgstr "" + +#: ../../features/data-importers.rst:65 +msgid "When called, ``self._import(f, model, interpreter)`` does the following:" +msgstr "" + +#: ../../features/data-importers.rst:67 +msgid "It reads the CSV file using a `csv.DictReader `_. A ``DictReader`` iterates through the CSV file, yielding a dict for each line, whose keys are given by the column header names in the first row of the file." +msgstr "" + +#: ../../features/data-importers.rst:72 +msgid "On each line:" +msgstr "" + +#: ../../features/data-importers.rst:74 +msgid "It passes the dict given by the ``DictReader`` to ``interpreter``. The interpreter modifies the dict (or creates a new one) to prepare it for the model constructor, and returns it." +msgstr "" + +#: ../../features/data-importers.rst:78 +msgid "The dict returned by ``interpreter`` is then passed as keyword arguments to the ``model`` constructor." +msgstr "" + +#: ../../features/data-importers.rst:81 +msgid "So in very simplified form, ``self._import(f, model, interpreter)`` does this:" +msgstr "" + +#: ../../features/data-importers.rst:92 +msgid "(There's a lot more to it than that, but that's the basic idea.)" +msgstr "" + +#: ../../features/data-importers.rst:94 +msgid "A consequence of relying on column headers to identify fields is that the header names in CSV files must match model field names exactly, unless they are deleted by the interpreter using the ``DELETE`` keyword (see below)." +msgstr "" + +#: ../../features/data-importers.rst:100 +msgid "Interpreters" +msgstr "" + +#: ../../features/data-importers.rst:101 +msgid "The main task of an importer, then, is to provide interpreters so that ``self._import`` knows how to interpret the data in a CSV file. An interpreter takes a dict and returns a dict. For example:" +msgstr "" + +#: ../../features/data-importers.rst:113 +msgid "This interpreter does the following:" +msgstr "" + +#: ../../features/data-importers.rst:115 +msgid "Replaces ``line['institution']`` with an Institution object, by looking up the original value by name." +msgstr "" + +#: ../../features/data-importers.rst:117 +msgid "Replaces ``line['gender']`` with a ``Person.GENDER_*`` constant. We'll come back to how this works later." +msgstr "" + +#: ../../features/data-importers.rst:119 +msgid "Adds a new ``line['tournament']`` entry to the dict, being the Tournament object represented by ``self.tournament``, the tournament that was passed to the importer's constructor." +msgstr "" + +#: ../../features/data-importers.rst:122 +msgid "Leaves all other entries in the dict unchanged." +msgstr "" + +#: ../../features/data-importers.rst:124 +msgid "This looks simple enough, but it's very robust. What if a cell in the CSV file is blank, or what if the file omits a column? (For example, some tournaments might not collect information about participant gender, so Tabbycat doesn't require it.) We could deal with these scenarios on a case-by-case basis, but that's cumbersome." +msgstr "" + +#: ../../features/data-importers.rst:130 +msgid "Instead, we provide a ``make_interpreter`` method that returns an interpreter method which, in turn, takes care of all these details. This way, all you have to do is provide the functions that transform fields. So the following is equivalent to the above, but better:" +msgstr "" + +#: ../../features/data-importers.rst:143 +msgid "Notice that we provided a callable in two of these keyword arguments, and a (non-callable) Tournament object to the third. ``make_interpreter`` is smart enough to tell the difference, and treat them differently. What it does with each field depends on (a) whether a value exists in the CSV file and (b) what transformation function was provided, as summarised in the following table:" +msgstr "" + +#: ../../features/data-importers.rst:150 +msgid "Value in CSV file" +msgstr "" + +#: ../../features/data-importers.rst:150 +msgid "Transformation" +msgstr "" + +#: ../../features/data-importers.rst:150 +msgid "Action" +msgstr "" + +#: ../../features/data-importers.rst:152 +msgid "provided and not callable" +msgstr "" + +#: ../../features/data-importers.rst:152 +msgid "populate model field with interpreter value" +msgstr "" + +#: ../../features/data-importers.rst:155 +msgid "does not exist or blank" +msgstr "" + +#: ../../features/data-importers.rst:155 +msgid "callable or not provided" +msgstr "" + +#: ../../features/data-importers.rst:155 +msgid "do not pass to model constructor" +msgstr "" + +#: ../../features/data-importers.rst:158 ../../features/data-importers.rst:161 +msgid "exists and not blank" +msgstr "" + +#: ../../features/data-importers.rst:158 +msgid "callable" +msgstr "" + +#: ../../features/data-importers.rst:158 +msgid "call interpreter on column value, pass result to model constructor" +msgstr "" + +#: ../../features/data-importers.rst:161 +msgid "not provided" +msgstr "" + +#: ../../features/data-importers.rst:161 +msgid "pass column value directly to model constructor" +msgstr "" + +#: ../../features/data-importers.rst:169 +msgid "If a transformation isn't an existing method, you might find `lambda functions `_ useful. For example: ``lambda x: Speaker.objects.get(name=x)``." +msgstr "" + +#: ../../features/data-importers.rst:173 +msgid "You shouldn't check for mandatory fields. If a mandatory field is omitted, the model constructor will throw an error, and ``self._import()`` will catch the error and pass a useful message on to the caller. On the other hand, if it's an optional field in the model, it should optional in the importer, too. Similarly, interpreters generally shouldn't specify defaults; these should be left to model definitions." +msgstr "" + +#: ../../features/data-importers.rst:180 +msgid "You don't need to include interpreter transformations for things like converting strings to integers, floats or booleans. Django converts strings to appropriate values when it instantiates models. So, for example, adding ``test_score=float`` to the above interpreter would be redundant." +msgstr "" + +#: ../../features/data-importers.rst:186 +msgid "More complicated interpreters" +msgstr "" + +#: ../../features/data-importers.rst:188 +msgid "If you have a column in the CSV file that shouldn't be passed to the model constructor, you can tell the interpreter to remove it by using the special ``DELETE`` argument:" +msgstr "" + +#: ../../features/data-importers.rst:199 +msgid "The ``make_interpreter`` can only deal with modifications where each field is modified separately of the others (or not at all). If you want to combine information from multiple fields, you need to write your interpreter the long way (perhaps calling a function returned by ``make_interpreter`` to do some of the work)." +msgstr "" + +#: ../../features/data-importers.rst:205 +msgid "On the other hand, if you don't need to do any transformations involving some sort of object or constant lookup, then you can just omit the ``interpreter`` argument of ``self._lookup()``, and it'll just leave the fields as-is." +msgstr "" + +#: ../../features/data-importers.rst:210 +msgid "Lookup functions" +msgstr "" + +#: ../../features/data-importers.rst:211 +msgid "In the above example, we used a function ``self.lookup_gender`` to convert from the text in the CSV file to a ``Person.GENDER_*`` constant. To make this easier, the importer provides a convenience function to define such lookup functions. Let's look at the relevant lines again:" +msgstr "" + +#: ../../features/data-importers.rst:224 +msgid "This should be a member of your subclass, in our case, ``ExampleTournamentDataImporter``. It generates a function that looks something like:" +msgstr "" + +#: ../../features/data-importers.rst:241 +msgid "The ``make_lookup`` function takes two arguments. The first is a text description of what it's looking up; this is used for the error message if the value in the CSV file isn't recognised. The second is a dict mapping tuples of valid strings to constants." +msgstr "" + +#: ../../features/data-importers.rst:247 +msgid "Debugging output" +msgstr "" + +#: ../../features/data-importers.rst:249 +msgid "The ``BaseTournamentDataImporter`` constructor accepts a ``loglevel`` argument:" +msgstr "" + +#: ../../features/data-importers.rst:255 +msgid "If ``loglevel`` is set to ``logging.DEBUG``, the importer will print information about every instance it creates." +msgstr "" + +#: ../../features/data-importers.rst:258 +msgid "You can also pass in a logger for it to use (instead of the default one) with the ``logger`` argument." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/features/draw-generation-bp.po b/docs/locale/kk/LC_MESSAGES/features/draw-generation-bp.po new file mode 100644 index 00000000000..a072074659b --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/features/draw-generation-bp.po @@ -0,0 +1,598 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation-bp.po\n" +"X-Crowdin-File-ID: 1285\n" +"Language: kk_KZ\n" + +#: ../../features/draw-generation-bp.rst:5 +msgid "Draw Generation (BP)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:7 +msgid "The draw generator for British Parliamentary tournaments tries to rotate teams through positions by assigning them positions they've been in less often before the current round." +msgstr "" + +#: ../../features/draw-generation-bp.rst:10 +msgid "Summary of options" +msgstr "" + +#: ../../features/draw-generation-bp.rst:12 +msgid "Options are set in the **Configuration** page as described in :ref:`starting a tournament `. Options in `italics` with an asterisk are not WUDC-compliant. The recommended options are shown in **bold**." +msgstr "" + +#: ../../features/draw-generation-bp.rst:19 +msgid "Option" +msgstr "" + +#: ../../features/draw-generation-bp.rst:20 +msgid "Description" +msgstr "" + +#: ../../features/draw-generation-bp.rst:21 +msgid "Allowable values" +msgstr "" + +#: ../../features/draw-generation-bp.rst:22 +msgid ":ref:`Pullup distribution `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:23 +msgid "Where pullup teams get placed" +msgstr "" + +#: ../../features/draw-generation-bp.rst:24 +msgid "**Anywhere in bracket**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:25 +msgid "*All in the same room*\\*" +msgstr "" + +#: ../../features/draw-generation-bp.rst:26 +msgid ":ref:`Position cost `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:27 +msgid "Which cost function to use to indicate which position profiles are preferred" +msgstr "" + +#: ../../features/draw-generation-bp.rst:28 +#: ../../features/draw-generation-bp.rst:179 +msgid "Simple" +msgstr "" + +#: ../../features/draw-generation-bp.rst:29 +msgid "**Rényi entropy**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:30 +#: ../../features/draw-generation-bp.rst:254 +msgid "Population variance" +msgstr "" + +#: ../../features/draw-generation-bp.rst:31 +msgid ":ref:`Rényi order `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:32 +msgid "Order of Rényi entropy" +msgstr "" + +#: ../../features/draw-generation-bp.rst:33 +msgid "Any non-negative number (default: **1**, *i.e.* Shannon entropy)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:34 +msgid ":ref:`Position cost exponent `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:35 +msgid "Degree to which large position imbalances should be prioritised" +msgstr "" + +#: ../../features/draw-generation-bp.rst:36 +msgid "Any non-negative number (default: **4**)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:37 +msgid ":ref:`Assignment method `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:38 +msgid "Algorithm used to assign positions" +msgstr "" + +#: ../../features/draw-generation-bp.rst:39 +msgid "*Hungarian*\\*" +msgstr "" + +#: ../../features/draw-generation-bp.rst:40 +msgid "**Hungarian with preshuffling**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:45 +msgid "The big picture" +msgstr "" + +#: ../../features/draw-generation-bp.rst:47 +msgid "To try to achieve position balance, Tabbycat treats the allocation of teams to debates as an `assignment problem `_. That is, it computes the \"cost\" of assigning each team to each position in each debate, and finds an assignment of all teams to a position in a debate that minimises the total cost (the sum over all teams)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:50 +msgid "A simple example" +msgstr "" + +#: ../../features/draw-generation-bp.rst:52 +msgid "Here's a small example, to illustrate the idea. Say you have a tournament with 16 teams, and you're about to draw round 4. There are sixteen \"places\" in the draw: four positions in each of four rooms. Tabbycat calculates the \"cost\" of putting each team in each place, and puts them in a matrix, like this:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Room" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Top" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Second" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Third" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Bottom" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "Position" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "OG" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "OO" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "CG" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "CO" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +msgid "**A (8)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +#: ../../features/draw-generation-bp.rst:67 +#: ../../features/draw-generation-bp.rst:69 +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:77 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:81 +#: ../../features/draw-generation-bp.rst:83 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:93 +#: ../../features/draw-generation-bp.rst:95 +msgid "16" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +#: ../../features/draw-generation-bp.rst:67 +#: ../../features/draw-generation-bp.rst:69 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:77 +#: ../../features/draw-generation-bp.rst:81 +#: ../../features/draw-generation-bp.rst:83 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:93 +msgid ":q:`0`" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +#: ../../features/draw-generation-bp.rst:67 +#: ../../features/draw-generation-bp.rst:69 +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:77 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:81 +#: ../../features/draw-generation-bp.rst:83 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:93 +#: ../../features/draw-generation-bp.rst:95 +msgid "∞" +msgstr "" + +#: ../../features/draw-generation-bp.rst:67 +msgid "**B (7)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:69 +msgid "**C (7)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:71 +msgid "**D (6)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:95 +msgid "0" +msgstr "" + +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:95 +msgid ":q:`16`" +msgstr "" + +#: ../../features/draw-generation-bp.rst:73 +msgid "**E (6)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:75 +msgid "**F (6)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:77 +msgid "**G (5)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:79 +msgid "**H (5)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:81 +msgid "**I (4)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:83 +msgid "**J (4)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:85 +msgid "**K (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:87 +msgid "**L (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:89 +msgid "**M (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:91 +msgid "**N (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:93 +msgid "**O (1)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:95 +msgid "**P (1)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:98 +msgid "Each \"16\" is the cost of putting a team in a position it's seen once; each \"0\" is the cost of putting a team in the position it hasn't. (Details of how this is calculated are :ref:`below `.) For example, team A (on 8 points) has been in every position except CO. The ∞'s indicate places where the team isn't allowed to go, because the room isn't in their bracket. For example, the three teams on 6 points (D, E, F) can go in either the top or second room, because any of them can be the pullup team." +msgstr "" + +#: ../../features/draw-generation-bp.rst:100 +msgid "The algorithm then chooses entries so that one is selected from each row and one is selected from each column, in a way that minimises the sum of the selected entries. In this case, the selected entries are highlighted in blue. For example, the top room comprises teams E (OG), B (OO), C (CG) and A (CO)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:102 +msgid "Sometimes, particularly in round 4, it simply isn't possible to \"satisfy\" everyone. For example, among the top eight teams, five haven't been in OO, but only two can be accommodated within those brackets. In this case, teams B and G got lucky; there are also many other draws that would have incurred the same total cost." +msgstr "" + +#: ../../features/draw-generation-bp.rst:104 +msgid "More generally, in most cases, there will be many optimal solutions. To randomise the selection among them, Tabbycat (under default settings) randomly permutes the rows and columns of the matrix before starting the assignment algorithm." +msgstr "" + +#: ../../features/draw-generation-bp.rst:107 +msgid "Explanations of options" +msgstr "" + +#: ../../features/draw-generation-bp.rst:112 +msgid "Pullup distribution" +msgstr "" + +#: ../../features/draw-generation-bp.rst:114 +msgid "If the number of teams in a bracket is not a multiple of four, it pulls up teams from the next bracket down. The pullup distribution then governs how those teams are paired into the upper bracket." +msgstr "" + +#: ../../features/draw-generation-bp.rst:116 +msgid "The available options are as follows:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:120 +msgid "**Anywhere in bracket:** The pullup teams are treated as if they were any other team in their new bracket. For example, if there are 17 teams in a 10-point bracket, then the three 9-point teams that get pulled up may be paired anywhere in the 10-point bracket, independently of each other. Chance might put them in the same room, but more likely, they will not all be in the same room, so there will be multiple pullup rooms in the 10-point bracket." +msgstr "" + +#: ../../features/draw-generation-bp.rst:122 +msgid "**All in the same room:** All of the pullup teams will be paired into the same room. This means that there will be at most one pullup room per bracket, effectively creating an \"intermediate bracket\"." +msgstr "" + +#: ../../features/draw-generation-bp.rst:124 +msgid "While it can be argued that the `All in the same room` setting is fairer, it is prohibited by the WUDC constitution. If your tournament follows WUDC rules, you cannot use this setting." +msgstr "" + +#: ../../features/draw-generation-bp.rst:126 +msgid "The teams that get pulled up aren't specifically chosen---they're just assigned as part of the algorithm described :ref:`above `, which optimises for position balance. Tabbycat doesn't support taking anything else into account when choosing pullup teams. (WUDC rules wouldn't allow it, either.)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:131 +msgid "Position cost options" +msgstr "" + +#: ../../features/draw-generation-bp.rst:133 +msgid "The `position cost function` is a function that indicates how \"bad\" it would be if a team were to be allocated a certain position (OG, OO, CG, CO) in a debate. When generating a draw, Tabbycat chooses from among the draws that minimise the sum of the position costs for each team." +msgstr "" + +#: ../../features/draw-generation-bp.rst:135 +msgid "More formally:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:139 +msgid "A `position history` or just `history` :math:`\\mathbf{h}` is a 4-tuple where each element is the number of times a team has already been in the corresponding position. For example, :math:`\\mathbf{h} = (0, 2, 1, 1)` means that a team has been in OO twice, CG and CO once each, and hasn't been in OG." +msgstr "" + +#: ../../features/draw-generation-bp.rst:140 +msgid "A cost function :math:`C(\\mathbf{h},s)` is a function specifying how \"bad\" it would be if a team with position history :math:`\\mathbf{h}` were assigned the position :math:`s` in the next round." +msgstr "" + +#: ../../features/draw-generation-bp.rst:142 +msgid "Tabbycat allows you to choose from a number of different **position cost functions**, as well as a **position cost exponent** :math:`\\beta`. Then, when allocating teams to debates, Tabbycat allocates teams to positions :math:`(s_t, t \\in\\mathcal{T})` to minimise" +msgstr "" + +#: ../../features/draw-generation-bp.rst:144 +msgid "\\sum_{t \\in \\mathcal{T}} [C(\\mathbf{h}_t,s_t)]^\\beta" +msgstr "" + +#: ../../features/draw-generation-bp.rst:148 +msgid "where :math:`\\mathcal{T}` is the set of all teams, :math:`\\mathbf{h}_t` is the position history of team :math:`t` and :math:`s_t` is the position to which team :math:`t` would be allocated." +msgstr "" + +#: ../../features/draw-generation-bp.rst:153 +msgid "Position cost exponent" +msgstr "" + +#: ../../features/draw-generation-bp.rst:155 +msgid "The **position cost exponent** :math:`\\beta` controls how different teams trade off with each other." +msgstr "" + +#: ../../features/draw-generation-bp.rst:159 +msgid "The **larger** :math:`\\beta` is, the more concerned it is with preventing *very* bad situations. That is, it will give more teams some slight unevenness in order to prevent one team from getting a `very` uneven history." +msgstr "" + +#: ../../features/draw-generation-bp.rst:161 +msgid "The **smaller** :math:`\\beta` is, the more concerned it is with preventing *any* unevenness. That is, it will try to keep more teams from being uneven *at all*, at the cost of possibly letting just one team get a very uneven history." +msgstr "" + +#: ../../features/draw-generation-bp.rst:163 +msgid "At the large extreme, as :math:`\\beta\\rightarrow\\infty`, it will do everything it can to minimise the plight of the *worst-off* team, and it won't care for *any* team other than the worst-off." +msgstr "" + +#: ../../features/draw-generation-bp.rst:165 +msgid "At the small extreme, as :math:`\\beta\\rightarrow 0`, it will do everything it can to minimise the number of teams with a non-optimal profile---but if it's impossible to protect a team from sub-optimality, it won't care *how* uneven the unlucky team gets." +msgstr "" + +#: ../../features/draw-generation-bp.rst:167 +msgid "The \"balanced\" approach would be :math:`\\beta = 1`, which just takes the cost function as-is. This doesn't mean that this is the best idea, however---you'd typically want to bias towards preventing very uneven histories a bit more. Most tournaments will probably want :math:`\\beta` to be somewhere between 2 and 5. (Note that :math:`\\beta` need not be an integer.)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:172 +msgid "Position cost functions" +msgstr "" + +#: ../../features/draw-generation-bp.rst:174 +msgid "Tabbycat allows you to choose between three position cost functions :math:`C(\\mathbf{h},s)`: **Simple**, **Rényi entropy** and **Population variance**." +msgstr "" + +#: ../../features/draw-generation-bp.rst:176 +msgid "In the descriptions that follow, :math:`\\mathcal{S} = \\{\\texttt{OG}, \\texttt{OO}, \\texttt{CG}, \\texttt{CO}\\}`, the set of all BP positions." +msgstr "" + +#: ../../features/draw-generation-bp.rst:181 +msgid "The simple cost function :math:`C_\\textrm{simple}(\\mathbf{h},s)` returns the number of times the team has already been in position :math:`s`, less the number of times the team has been in its least frequent position. That is," +msgstr "" + +#: ../../features/draw-generation-bp.rst:183 +msgid "C_\\mathrm{simple}(\\mathbf{h},s) = \\mathbf{h}[s] - \\min_{s' \\in\\mathcal{S}} \\mathbf{h}[s']" +msgstr "" + +#: ../../features/draw-generation-bp.rst:187 +msgid "where :math:`\\mathbf{h}[s]` is the element of :math:`\\mathbf{h}` corresponding to position :math:`s`." +msgstr "" + +#: ../../features/draw-generation-bp.rst:190 +msgid "Rényi entropy" +msgstr "" + +#: ../../features/draw-generation-bp.rst:192 +msgid "Informally speaking, the `Rényi entropy `_ is a measure of the diversity of the positions in a team's history. A history consisting only of one position has *low* entropy, while a history that is perfectly evenly distributed has *high* entropy. The **Rényi entropy cost function** reverses this intuition, so that an even hypothetical history has low cost, while an uneven hypothetical history has high cost." +msgstr "" + +#: ../../features/draw-generation-bp.rst:194 +msgid "The Rényi entropy takes one parameter, known as its *order*, :math:`\\alpha`, which will be further discussed below." +msgstr "" + +#: ../../features/draw-generation-bp.rst:196 +msgid "More formally, the Rényi entropy cost function :math:`C_\\textrm{R\\'enyi}(\\mathbf{h},s)` is defined as" +msgstr "" + +#: ../../features/draw-generation-bp.rst:198 +msgid "C_\\textrm{R\\'enyi}(\\mathbf{h},s) = n_\\mathbf{h} [2 - H_\\alpha(\\hat{p}_{\\mathbf{h},s})]" +msgstr "" + +#: ../../features/draw-generation-bp.rst:202 +msgid "where" +msgstr "" + +#: ../../features/draw-generation-bp.rst:206 +msgid ":math:`n_\\mathbf{h} = \\sum_{s'} \\mathbf{h}[s']` is the number of rounds the team has competed in so far." +msgstr "" + +#: ../../features/draw-generation-bp.rst:207 +msgid ":math:`\\hat{p}_{\\mathbf{h},s}` is the *normalised hypothetical* position history that would arise if a team with history :math:`\\mathbf{h}` were to be allocated position :math:`s` in the next round; that is," +msgstr "" + +#: ../../features/draw-generation-bp.rst:209 +msgid "\\hat{p}_{\\mathbf{h},s}[s'] = \\begin{cases} \\frac{1}{n_\\mathbf{h} + 1} (\\mathbf{h}[s'] + 1), &\\text{ if } s = s', \\\\ \\frac{1}{n_\\mathbf{h} + 1} \\mathbf{h}[s'], &\\text{ if } s \\ne s'. \\end{cases}" +msgstr "" + +#: ../../features/draw-generation-bp.rst:216 +msgid "Note that :math:`\\hat{p}_{\\mathbf{h},s}` is a probability distribution (that is, its elements sum to 1)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:218 +msgid ":math:`H_\\alpha(\\cdot)` is the `Rényi entropy `_ of order :math:`\\alpha` of a probability distribution, defined as" +msgstr "" + +#: ../../features/draw-generation-bp.rst:220 +msgid "H_\\alpha(p) = \\frac{1}{1-\\alpha} \\log_2 \\left( \\sum_{s\\in\\mathcal{S}} (p[s])^\\alpha \\right), \\qquad \\alpha \\ne 1." +msgstr "" + +#: ../../features/draw-generation-bp.rst:224 +msgid "In the special (limiting) case where :math:`\\alpha=1`, it reduces to the `Shannon entropy `_," +msgstr "" + +#: ../../features/draw-generation-bp.rst:226 +msgid "H_1(p) =-\\sum_{s\\in\\mathcal{S}} p[s] \\log_2 p[s]." +msgstr "" + +#: ../../features/draw-generation-bp.rst:230 +msgid "Note that for all :math:`\\alpha`, :math:`0 \\le H_\\alpha(p) \\le \\log_2(4) = 2` (since there are four positions in BP)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:234 +msgid "The **Rényi order** is the parameter :math:`\\alpha` above, and it controls *what it means to be \"even among positions\"* for a team. Note that \"evenness\" is not easily defined. After round 8, which position history is more even: (0, 2, 3, 3) or (1, 1, 1, 5)? The Rényi order allows us to tune this definition." +msgstr "" + +#: ../../features/draw-generation-bp.rst:238 +msgid "The **smaller** :math:`\\alpha` is, the more it cares that teams compete in every position *at least* once, favouring (1, 1, 1, 5) over (0, 2, 3, 3): it's worse to have never OGed, than it is to have COed five times." +msgstr "" + +#: ../../features/draw-generation-bp.rst:240 +msgid "The **larger** :math:`\\alpha` is, the more it cares that teams do not compete in *any* (one) position too many times, favouring (0, 2, 3, 3) over (1, 1, 1, 5): it's worse to have COed five times, than it is to have never OGed." +msgstr "" + +#: ../../features/draw-generation-bp.rst:242 +msgid "At the small extreme, as :math:`\\alpha\\rightarrow0`, it *only* counts how many positions a team has seen at least once, and doesn't care about the distribution among them so long as a team has been in each position once." +msgstr "" + +#: ../../features/draw-generation-bp.rst:244 +msgid "At the large extreme, as :math:`\\alpha\\rightarrow\\infty`, it *only* looks at how many times each team has seen its *most frequent* position, and tries to keep this number even among all teams." +msgstr "" + +#: ../../features/draw-generation-bp.rst:246 +msgid "The \"balanced\" approach would be :math:`\\alpha=1` (the `Shannon entropy `_), though of course it's arguable what \"balanced\" means. Tabbycat defaults to this value." +msgstr "" + +#: ../../features/draw-generation-bp.rst:248 +msgid "To give some intuition for the useful range: In round 9, a strict ordering by number of positions seen at least once occurs for approximately :math:`\\alpha < 0.742`. A strict ordering by number of times in the most frequent position occurs for :math:`\\alpha>3`. Changing :math:`\\alpha` outside the range :math:`[0.742, 3]` will still affect the relative (cardinal) weighting *between teams*, but will not affect the *ordinal* ranking of possible histories." +msgstr "" + +#: ../../features/draw-generation-bp.rst:250 +msgid "The purpose of weighting costs by :math:`n_\\mathbf{h}` is to prioritise those teams who have competed in every round over those who have competed in fewer rounds." +msgstr "" + +#: ../../features/draw-generation-bp.rst:256 +msgid "The **population variance** cost function is just the population variance of the history 4-tuple," +msgstr "" + +#: ../../features/draw-generation-bp.rst:258 +msgid "C_\\textrm{popvar}(\\mathbf{h},s) = \\frac14 \\sum_{s'\\in\\mathcal{S}} \\left(\\mathbf{\\hat{h}}_s[s'] - \\mu_{\\mathbf{\\hat{h}}_s} \\right)^2," +msgstr "" + +#: ../../features/draw-generation-bp.rst:262 +msgid "where :math:`\\mathbf{\\hat{h}}_s` is the *hypothetical* position history that would arise if a team with history :math:`\\mathbf{h}` were to be allocated position :math:`s` in the next round; that is," +msgstr "" + +#: ../../features/draw-generation-bp.rst:264 +msgid "\\mathbf{\\hat{h}}_s[s'] = \\begin{cases} \\mathbf{h}[s'] + 1, &\\text{ if } s = s', \\\\ \\mathbf{h}[s'], &\\text{ if } s \\ne s'. \\end{cases}" +msgstr "" + +#: ../../features/draw-generation-bp.rst:271 +msgid "and where :math:`\\mu_{\\mathbf{\\hat{h}}_s}` is the mean of :math:`\\mathbf{\\hat{h}}_s`," +msgstr "" + +#: ../../features/draw-generation-bp.rst:273 +msgid "\\mu_{\\mathbf{\\hat{h}}_s} = \\frac14 \\sum_{s'\\in\\mathcal{S}} \\mathbf{\\hat{h}}_s[s']." +msgstr "" + +#: ../../features/draw-generation-bp.rst:277 +msgid "At the extremes, a team that has seen all positions evenly will have a population variance of zero, while a team that has seen just one position :math:`n` times will have a population variance of :math:`\\frac{3n^2}{16}`." +msgstr "" + +#: ../../features/draw-generation-bp.rst:282 +msgid "Assignment method" +msgstr "" + +#: ../../features/draw-generation-bp.rst:284 +msgid "Tabbycat uses the `Hungarian algorithm `_ to solve the `assignment problem `_ of assigning teams to positions in debates. This can be run with or without preshuffling:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:288 +msgid "**Hungarian algorithm** just runs the Hungarian algorithm as-is, with no randomness. This probably isn't what you want." +msgstr "" + +#: ../../features/draw-generation-bp.rst:290 +msgid "**Hungarian algorithm with preshuffling** also runs the Hungarian algorithm on the position cost matrix, but shuffles the input so that the draw is randomised, subject to having optimal position allocations." +msgstr "" + +#: ../../features/draw-generation-bp.rst:292 +msgid "Preshuffling doesn't compromise the optimality of position allocations: It simply shuffles the order in which teams and debates appear in the input to the algorithm, by randomly permuting the rows and columns of the position cost matrix. The Hungarian algorithm still guarantees an optimal position assignment, according to the chosen position cost function." +msgstr "" + +#: ../../features/draw-generation-bp.rst:294 +msgid "Running the Hungarian algorithm *without* preshuffling has the side effect of grouping teams with similar speaker scores in to the same room, and is therefore prohibited by WUDC rules. Its inclusion as an option is mainly academic; most tournaments will not want to use it in practice." +msgstr "" + +#: ../../features/draw-generation-bp.rst:296 +msgid "No other assignment methods are currently supported. For example, Tabbycat can't run fold (high-low) or adjacent (high-high) pairing *within* brackets." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/features/draw-generation.po b/docs/locale/kk/LC_MESSAGES/features/draw-generation.po new file mode 100644 index 00000000000..e3b2c199f91 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/features/draw-generation.po @@ -0,0 +1,436 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation.po\n" +"X-Crowdin-File-ID: 1287\n" +"Language: kk_KZ\n" + +#: ../../features/draw-generation.rst:5 +msgid "Draw Generation" +msgstr "" + +#: ../../features/draw-generation.rst:7 +msgid "The draw generator is quite flexible. You can specify a number of settings to suit different tournaments' rules." +msgstr "" + +#: ../../features/draw-generation.rst:10 +msgid "Summary of options" +msgstr "" + +#: ../../features/draw-generation.rst:11 +msgid "Options are set in the **Configuration** page as described in :ref:`starting a tournament `." +msgstr "" + +#: ../../features/draw-generation.rst:18 +msgid "Option" +msgstr "" + +#: ../../features/draw-generation.rst:19 +msgid "Description" +msgstr "" + +#: ../../features/draw-generation.rst:20 +msgid "Allowable values" +msgstr "" + +#: ../../features/draw-generation.rst:22 +msgid ":ref:`Odd bracket resolution method `" +msgstr "" + +#: ../../features/draw-generation.rst:23 +msgid "How to resolve odd brackets" +msgstr "" + +#: ../../features/draw-generation.rst:24 +msgid "Pull up from top" +msgstr "" + +#: ../../features/draw-generation.rst:25 +msgid "Pull up from bottom" +msgstr "" + +#: ../../features/draw-generation.rst:26 +msgid "Pull up from middle" +msgstr "" + +#: ../../features/draw-generation.rst:27 +msgid "Pull up at random" +msgstr "" + +#: ../../features/draw-generation.rst:29 +msgid "If sides are `Random` or `Balance`:" +msgstr "" + +#: ../../features/draw-generation.rst:31 +msgid "Intermediate" +msgstr "" + +#: ../../features/draw-generation.rst:32 +msgid "Intermediate with bubble-up-bubble-down" +msgstr "" + +#: ../../features/draw-generation.rst:34 +msgid "If sides are `Pre-allocated`:" +msgstr "" + +#: ../../features/draw-generation.rst:36 +msgid "Intermediate 1" +msgstr "" + +#: ../../features/draw-generation.rst:37 +msgid "Intermediate 2" +msgstr "" + +#: ../../features/draw-generation.rst:39 +msgid ":ref:`Side allocations method `" +msgstr "" + +#: ../../features/draw-generation.rst:40 +msgid "How to allocate aff/neg" +msgstr "" + +#: ../../features/draw-generation.rst:41 ../../features/draw-generation.rst:51 +msgid "Random" +msgstr "" + +#: ../../features/draw-generation.rst:42 +msgid "Balance" +msgstr "" + +#: ../../features/draw-generation.rst:43 +msgid "Pre-allocated" +msgstr "" + +#: ../../features/draw-generation.rst:44 +msgid "Manual ballot" +msgstr "" + +#: ../../features/draw-generation.rst:46 +msgid ":ref:`Pairing method `" +msgstr "" + +#: ../../features/draw-generation.rst:47 +msgid "How to pair teams within brackets" +msgstr "" + +#: ../../features/draw-generation.rst:48 +msgid "Slide" +msgstr "" + +#: ../../features/draw-generation.rst:49 +msgid "Fold" +msgstr "" + +#: ../../features/draw-generation.rst:50 +msgid "Adjacent" +msgstr "" + +#: ../../features/draw-generation.rst:53 +msgid ":ref:`Conflict avoidance method `" +msgstr "" + +#: ../../features/draw-generation.rst:54 +msgid "How to avoid history/institution conflicts" +msgstr "" + +#: ../../features/draw-generation.rst:55 +msgid "Off" +msgstr "" + +#: ../../features/draw-generation.rst:56 +msgid "One-up-one-down" +msgstr "" + +#: ../../features/draw-generation.rst:58 +msgid ":ref:`Pullup restriction `" +msgstr "" + +#: ../../features/draw-generation.rst:59 +msgid "Whether and how to restrict pullups" +msgstr "" + +#: ../../features/draw-generation.rst:60 +msgid "No restriction" +msgstr "" + +#: ../../features/draw-generation.rst:61 +msgid "Choose from teams who have been pulled up the fewest times so far" +msgstr "" + +#: ../../features/draw-generation.rst:62 +msgid "Choose from teams with the lowest draw strength by speaks so far" +msgstr "" + +#: ../../features/draw-generation.rst:64 +msgid "The valid options for intermediate brackets change depending on whether sides are pre-allocated, but these are **not** checked for validity. If you choose an invalid combination, Tabbycat will just crash. This won't corrupt the database, but it might be momentarily annoying." +msgstr "" + +#: ../../features/draw-generation.rst:67 +msgid "The big picture" +msgstr "" + +#: ../../features/draw-generation.rst:68 +msgid "When generating a power-paired draw, Tabbycat goes through five steps:" +msgstr "" + +#: ../../features/draw-generation.rst:70 +msgid "First, it divides teams into \"raw brackets\", grouping them by the number of wins." +msgstr "" + +#: ../../features/draw-generation.rst:71 +msgid "Second, it resolves odd brackets, applying the odd brackets rule to make sure there is an even number of teams in each bracket. This is often called \"pulling up\" teams." +msgstr "" + +#: ../../features/draw-generation.rst:72 +msgid "Third, within each bracket, it pairs teams into debates using the pairing method." +msgstr "" + +#: ../../features/draw-generation.rst:73 +msgid "Fourth, if enabled, it adjusts pairings to avoid history or institution conflicts." +msgstr "" + +#: ../../features/draw-generation.rst:74 +msgid "Finally, it assigns sides to teams in each debate." +msgstr "" + +#: ../../features/draw-generation.rst:76 +msgid "For each of these steps except the first, Tabbycat allows you to choose between a number of different methods." +msgstr "" + +#: ../../features/draw-generation.rst:80 +msgid "Explanations of options" +msgstr "" + +#: ../../features/draw-generation.rst:85 +msgid "Odd bracket resolution" +msgstr "" + +#: ../../features/draw-generation.rst:86 +msgid "The **draw odd brackets** option specifies what you do when a bracket has an odd number of teams. (Obviously you have to do something, otherwise you can't pair off teams within the bracket.) There are two groups of methods: pull-up and intermediate brackets." +msgstr "" + +#: ../../features/draw-generation.rst:90 +msgid "**Pull-up methods** take one or more teams from the next bracket down, and move them into the odd bracket to fill the bracket." +msgstr "" + +#: ../../features/draw-generation.rst:92 +msgid "**Intermediate brackets** take the excess teams from the odd bracket and move them down into a new bracket, which sits between the odd bracket and the next one down (the \"intermediate bracket\"). It then takes teams from the next bracket down and moves them up to fill the new intermediate bracket." +msgstr "" + +#: ../../features/draw-generation.rst:94 +msgid "The exact mechanics depend on whether or not sides are pre-allocated." +msgstr "" + +#: ../../features/draw-generation.rst:97 +msgid "When sides are not pre-allocated" +msgstr "" + +#: ../../features/draw-generation.rst:101 +msgid "**Pull-up methods:** Take a team from the next bracket down, and add them to the odd bracket to form an even bracket. You can choose to pull up the top team from the next bracket, or the bottom team, or the middle team, or a randomly chosen team. (If you pull up the middle team, and the bracket has an even number of teams, then it will choose randomly from the two middle teams.)" +msgstr "" + +#: ../../features/draw-generation.rst:103 +msgid "**Intermediate brackets:** Take the bottom team from the odd bracket and match them against the top team from the next bracket. An intermediate bracket always has two teams." +msgstr "" + +#: ../../features/draw-generation.rst:105 +msgid "If you're using conflict avoidance and intermediate brackets, you will probably want to use **Intermediate with bubble-up-bubble-down** instead. This uses the \"bubble-up-bubble-down\" rule to swap teams out of an intermediate bracket if there is a history or institution conflict. This is defined in the Australs constitution and is analogous to the \"one-up-one-down\" rule." +msgstr "" + +#: ../../features/draw-generation.rst:107 +msgid "Using `Intermediate` with `One-up-one-down` does **not** imply `Intermediate with bubble-up-bubble-down`. You must enable `Intermediate with bubble-up-bubble-down` specifically." +msgstr "" + +#: ../../features/draw-generation.rst:110 +msgid "When sides are pre-allocated" +msgstr "" + +#: ../../features/draw-generation.rst:111 +msgid "When sides are pre-allocated, an \"odd bracket\" is one that has an uneven number of affirmative and negative teams. (So odd brackets can have an even number of teams, *e.g.* 4 affs and 2 negs.)" +msgstr "" + +#: ../../features/draw-generation.rst:115 +msgid "**Pull-up methods:** Take as many teams from the next bracket down as necessary to fill the bracket. If there aren't enough teams in the next bracket down, take teams from the bracket after that, and so on, until the (original) odd bracket is filled. Higher brackets are always filled first. You can choose to pull up the top teams from the next bracket, the bottom teams, or a random selection of teams." +msgstr "" + +#: ../../features/draw-generation.rst:117 +msgid "**Intermediate brackets:** Take the unpaired teams in a bracket, and move them down to a new intermediate bracket. Then, take the number of teams necessary from the opposite side, from the next bracket down, to fill the next bracket." +msgstr "" + +#: ../../features/draw-generation.rst:119 +msgid "**Intermediate 1** and **Intermediate 2** differ only in what happens if there aren't enough teams in the next bracket to fill the intermediate bracket. In **Intermediate 1**, it will just take teams from the bracket after that, and so on, until the intermediate bracket is filled. In **Intermediate 2**, it will split the intermediate bracket: the teams that can be paired with the next bracket form the first intermediate bracket, and then the teams that aren't form a new (unfilled) intermediate bracket, to be filled from teams from the bracket after that. This keeps going, splitting into as many intermediate brackets as necessary, until all excess teams from the original odd bracket are paired." +msgstr "" + +#: ../../features/draw-generation.rst:124 +msgid "Side allocations" +msgstr "" + +#: ../../features/draw-generation.rst:125 +msgid "There are four methods:" +msgstr "" + +#: ../../features/draw-generation.rst:129 +msgid "**Random** allocates randomly. Some tournaments might like this, but most will probably want to use Balance, because Random doesn't guarantee that a team won't be (say) affirming the entire tournament." +msgstr "" + +#: ../../features/draw-generation.rst:130 +msgid "**Balance** assigns the team that has affirmed less so far the affirmative side (and, therefore, the team that has negated less the negative side). If both teams have affirmed the same number of times, it assigns sides randomly." +msgstr "" + +#: ../../features/draw-generation.rst:131 +msgid "**Preallocated** is used for pre-allocated sides. If used, you must enter data for pre-allocated sides into the database, as specified below." +msgstr "" + +#: ../../features/draw-generation.rst:132 +msgid "**Manually enter from ballot** is used for tournaments where the sides of the teams involved are not assigned in advance, but are instead determined by the teams themselves" +msgstr "" + +#: ../../features/draw-generation.rst:135 +msgid "Pre-allocated sides" +msgstr "" + +#: ../../features/draw-generation.rst:136 +msgid "There isn't currently any way to edit side allocations from the front end. To do so from the back end, you need to create one ``TeamPositionAllocation`` entry for each team in each round. All teams must have an allocation for every round. There are a few ways to do this, take your pick:" +msgstr "" + +#: ../../features/draw-generation.rst:140 +msgid "If you're using the :ref:`importtournament command `, it reads sides from the file sides.csv." +msgstr "" + +#: ../../features/draw-generation.rst:141 +msgid "You can do this from the Django admin interface (under Setup > Edit Database) by going to the relevant team and adding a **team position allocation** entry. That is:" +msgstr "" + +#: ../../features/draw-generation.rst:143 +msgid "Click **Admin** on the bottom right of any page after logging into an account with :ref:`superuser access `." +msgstr "" + +#: ../../features/draw-generation.rst:144 +msgid "Next to **Teams**, click **Change**." +msgstr "" + +#: ../../features/draw-generation.rst:145 +msgid "Click on the name of the team you want to edit side allocations for." +msgstr "" + +#: ../../features/draw-generation.rst:146 +msgid "Add or edit the entry or entries in the **Team position allocations** table at the bottom." +msgstr "" + +#: ../../features/draw-generation.rst:148 +msgid "You can also do this by writing a script that creates ``TeamPositionAllocation`` objects and saves them. Have a look at `draw/management/commands/generatesideallocations.py `_ for an example." +msgstr "" + +#: ../../features/draw-generation.rst:153 +msgid "Pairing method" +msgstr "" + +#: ../../features/draw-generation.rst:154 +msgid "It's easiest to describe these by example, using a ten-team bracket:" +msgstr "" + +#: ../../features/draw-generation.rst:156 +msgid "**Fold**: 1 vs 10, 2 vs 9, 3 vs 8, 4 vs 7, 5 vs 6. (Also known as high-low pairing.)" +msgstr "" + +#: ../../features/draw-generation.rst:157 +msgid "**Slide**: 1 vs 6, 2 vs 7, 3 vs 8, 4 vs 9, 5 vs 10." +msgstr "" + +#: ../../features/draw-generation.rst:158 +msgid "**Adjacent**: 1 vs 2, 3 vs 4, 5 vs 6, 7 vs 8, 9 vs 10. (Also known as high-high pairing.)" +msgstr "" + +#: ../../features/draw-generation.rst:159 +msgid "**Random**: paired at random within bracket." +msgstr "" + +#: ../../features/draw-generation.rst:161 +msgid "Teams are always paired within their brackets, after resolving odd brackets." +msgstr "" + +#: ../../features/draw-generation.rst:166 +msgid "Conflict avoidance method" +msgstr "" + +#: ../../features/draw-generation.rst:167 +msgid "A **conflict** is when two teams would face each other that have seen each other before, or are from the same institutions. Some tournaments have a preference against allowing this if it's avoidable within certain limits. The **draw avoid conflicts** option allows you to specify how." +msgstr "" + +#: ../../features/draw-generation.rst:169 +msgid "You can turn this off by using **Off**. Other than this, there is currently one conflict avoidance method implemented." +msgstr "" + +#: ../../features/draw-generation.rst:171 +msgid "**One-up-one-down** is the method specified in the Australs constitution. Broadly speaking, if there is a debate with a conflict:" +msgstr "" + +#: ../../features/draw-generation.rst:173 +msgid "It tries to swap teams with the debate \"one up\" from it in the draw." +msgstr "" + +#: ../../features/draw-generation.rst:174 +msgid "If that doesn't work, it tries to swap teams with the debate \"one down\" from it in the draw." +msgstr "" + +#: ../../features/draw-generation.rst:175 +msgid "If neither of those works, it accepts the original conflicted debate." +msgstr "" + +#: ../../features/draw-generation.rst:177 +msgid "It's a bit more complicated than that, for two reasons:" +msgstr "" + +#: ../../features/draw-generation.rst:181 +msgid "History conflicts are prioritised over (*i.e.*, \"worse than\") institution conflicts. So it's fine to resolve a history conflict by creating an institution conflict, but not the vice versa." +msgstr "" + +#: ../../features/draw-generation.rst:182 +msgid "Each swap obviously affects the debates around it, so it's not legal to have two adjacent swaps. (Otherwise, in theory, a team could \"one down\" all the way to the bottom of the draw!) So there is an optimization algorithm that finds the best combination of swaps, *i.e.* the one that minimises conflict, and if there are two profiles that have the same least conflict, then it chooses the one with fewer swaps." +msgstr "" + +#: ../../features/draw-generation.rst:187 +msgid "Pullup restriction" +msgstr "" + +#: ../../features/draw-generation.rst:188 +msgid "You can restrict which teams can be pulled up by configuring the draw generator to choose a pullup team from among only those teams who are the \"best off\" according to a given metric. If several teams are equally \"best off\" within the lower bracket, the draw generator chooses among them using the same **pull-up method** already specified (*e.g.*, \"pull up from top\")" +msgstr "" + +#: ../../features/draw-generation.rst:192 +msgid "You can **choose from teams who have been pulled up the fewest times so far**, that is, in rounds before the current round. Most of the time, this is equivalent to saying that a team cannot be pulled up more than once. But if *all* teams in a bracket have been pulled up at least once, it then chooses from among teams who have been pulled up *only* once (if any), and so on." +msgstr "" + +#: ../../features/draw-generation.rst:194 +msgid "You can **choose from teams with the lowest draw strength so far**, by **wins** or **speaks**." +msgstr "" + +#: ../../features/draw-generation.rst:196 +msgid "If you choose speaks, it's unlikely that two teams will have the same draw strength by speaks, so most of the time this will just choose the team in the lower bracket that's had the easiest draw so far (as measured by their opponents' speaker scores)." +msgstr "" + +#: ../../features/draw-generation.rst:198 +msgid "Pullup restrictions only apply when the :ref:`odd bracket resolution method ` is a pullup method. They have no effect on intermediate brackets." +msgstr "" + +#: ../../features/draw-generation.rst:201 +msgid "What do I do if the draw looks wrong?" +msgstr "" + +#: ../../features/draw-generation.rst:203 +msgid "You can edit match-ups directly from the draw page. Functionally, you can do anything you want. Of course, operationally, you should only edit the draw when you *know* that the draw algorithm got something wrong. If you need to do this, even just once, please file a bug report by creating a new issue on `our issues page on GitHub `_." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/features/notifications.po b/docs/locale/kk/LC_MESSAGES/features/notifications.po new file mode 100644 index 00000000000..0229c02e40f --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/features/notifications.po @@ -0,0 +1,257 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/notifications.po\n" +"X-Crowdin-File-ID: 1289\n" +"Language: kk_KZ\n" + +#: ../../features/notifications.rst:3 +msgid "Sending Notifications" +msgstr "" + +#: ../../features/notifications.rst:5 +msgid "Tabbycat offers integrations with email delivery services to send notifications to participants on certain enumerated events. For sending these emails, `SendGrid `_ is readily available as an add-on in Heroku. It may be necessary to install the `SendGrid add-on `_ manually. Other integrations may also be used in its place by changing the relevant environment variables." +msgstr "" + +#: ../../features/notifications.rst:8 +msgid "Events" +msgstr "" + +#: ../../features/notifications.rst:10 +msgid "Tabbycat includes a number of templated notifications that can be sent in various times. Variables which are included between curly brackets which are substituted for personalized information passed by email. Links to email will redirect to a page where the message can be changed and the participants selected." +msgstr "" + +#: ../../features/notifications.rst:12 +msgid "All emails have the ``{{ USER }}`` and ``{{ TOURN }}`` variables to indicate who the email is sent to, and the tournament it relates to. The \"From\" in the emails will also be the tournament's name." +msgstr "" + +#: ../../features/notifications.rst:17 +msgid "Email content and description" +msgstr "" + +#: ../../features/notifications.rst:18 +msgid "Variables" +msgstr "" + +#: ../../features/notifications.rst:20 +msgid "**Adjudicator draw notification**" +msgstr "" + +#: ../../features/notifications.rst:22 +msgid "Email to adjudicators indicating their room assignment." +msgstr "" + +#: ../../features/notifications.rst:24 ../../features/notifications.rst:36 +#: ../../features/notifications.rst:74 +msgid "Available through the admin draw page." +msgstr "" + +#: ../../features/notifications.rst:25 ../../features/notifications.rst:37 +msgid "``{{ ROUND }}``: The round name" +msgstr "" + +#: ../../features/notifications.rst:26 ../../features/notifications.rst:38 +msgid "``{{ VENUE }}``: The venue of the assigned debate" +msgstr "" + +#: ../../features/notifications.rst:27 ../../features/notifications.rst:39 +msgid "``{{ PANEL }}``: A list of all the adjudicators assigned to the venue (with positions)" +msgstr "" + +#: ../../features/notifications.rst:28 ../../features/notifications.rst:40 +msgid "``{{ DRAW }}``: A list of the team matchup with their roles" +msgstr "" + +#: ../../features/notifications.rst:29 +msgid "``{{ POSITION }}``: The target adjudicator's position in the panel" +msgstr "" + +#: ../../features/notifications.rst:30 +msgid "``{{ URL }}``: A link to the adjudicator's private URL page" +msgstr "" + +#: ../../features/notifications.rst:32 +msgid "**Team draw notification**" +msgstr "" + +#: ../../features/notifications.rst:34 +msgid "Email to teams indicating their pairing." +msgstr "" + +#: ../../features/notifications.rst:41 +msgid "``{{ TEAM }}``: The team's code or short name" +msgstr "" + +#: ../../features/notifications.rst:42 +msgid "``{{ SIDE }}``: The team's side" +msgstr "" + +#: ../../features/notifications.rst:44 +msgid "**Private URL distribution**" +msgstr "" + +#: ../../features/notifications.rst:46 +msgid "Email to participants giving them their private URL for electronic forms." +msgstr "" + +#: ../../features/notifications.rst:48 +msgid "Available through the private URLs page." +msgstr "" + +#: ../../features/notifications.rst:49 +msgid "``{{ URL }}``: The personalized URL" +msgstr "" + +#: ../../features/notifications.rst:50 +msgid "``{{ KEY }}``: The private code in the URL" +msgstr "" + +#: ../../features/notifications.rst:52 +msgid "**Ballot submission receipt**" +msgstr "" + +#: ../../features/notifications.rst:54 +msgid "Email to adjudicators of their ballot after tabroom confirmation." +msgstr "" + +#: ../../features/notifications.rst:56 +msgid "Sent automatically when their ballot's result status becomes confirmed, if enabled in the \"Notifications\" section of the tournament options." +msgstr "" + +#: ../../features/notifications.rst:58 +msgid "``{{ DEBATE }}``: The name (with round & venue) of the relevent debate" +msgstr "" + +#: ../../features/notifications.rst:59 +msgid "``{{ SCORES }}``: The submitted ballot with speaker scores ands team names" +msgstr "" + +#: ../../features/notifications.rst:61 +msgid "**Current team standings**" +msgstr "" + +#: ../../features/notifications.rst:63 +msgid "Email to speakers with their point total." +msgstr "" + +#: ../../features/notifications.rst:65 +msgid "Available through the \"Confirm Round Completion\" page." +msgstr "" + +#: ../../features/notifications.rst:66 +msgid "``{{ URL }}``: The URL of the team standings page (if public)" +msgstr "" + +#: ../../features/notifications.rst:67 +msgid "``{{ TEAM }}``: The team's name" +msgstr "" + +#: ../../features/notifications.rst:68 +msgid "``{{ POINTS }}``: The team's number of points" +msgstr "" + +#: ../../features/notifications.rst:70 +msgid "**Motion release**" +msgstr "" + +#: ../../features/notifications.rst:72 +msgid "Email to speakers with the motion(s) of the current round." +msgstr "" + +#: ../../features/notifications.rst:75 +msgid "``{{ ROUND }}``: The name of the round" +msgstr "" + +#: ../../features/notifications.rst:76 +msgid "``{{ MOTIONS }}``: A list of the motions released" +msgstr "" + +#: ../../features/notifications.rst:78 +msgid "**Team information**" +msgstr "" + +#: ../../features/notifications.rst:80 +msgid "Email to speakers with information pertaining to their team, such as eligibility and codes." +msgstr "" + +#: ../../features/notifications.rst:82 +msgid "Available through the Participants page." +msgstr "" + +#: ../../features/notifications.rst:83 +msgid "``{{ SHORT }}``: The team's short name" +msgstr "" + +#: ../../features/notifications.rst:84 +msgid "``{{ LONG }}``: The team's long name" +msgstr "" + +#: ../../features/notifications.rst:85 +msgid "``{{ CODE }}``: The team's code name" +msgstr "" + +#: ../../features/notifications.rst:86 +msgid "``{{ EMOJI }}``: The team's assigned emoji" +msgstr "" + +#: ../../features/notifications.rst:87 +msgid "``{{ DIVISION }}``: The team's division if applicable" +msgstr "" + +#: ../../features/notifications.rst:88 +msgid "``{{ BREAK }}``: Break categories which the team is a member" +msgstr "" + +#: ../../features/notifications.rst:89 +msgid "``{{ SPEAKERS }}``: A list of the speakers in the team" +msgstr "" + +#: ../../features/notifications.rst:90 +msgid "``{{ INSTITUTION }}``: The team's affiliation" +msgstr "" + +#: ../../features/notifications.rst:93 +msgid "Event Webhook" +msgstr "" + +#: ../../features/notifications.rst:95 +msgid "With SendGrid, the status of sent emails can be sent to Tabbycat to be displayed, giving an indication of failures and whether participants have opened the messages. To activate this feature, setup must be done both in your SendGrid account and in Tabbycat." +msgstr "" + +#: ../../features/notifications.rst:97 +msgid "Set a secret key in the Email section of the tournament's preferences. This key must be alphanumeric without any spaces." +msgstr "" + +#: ../../features/notifications.rst:98 +msgid "Copy the \"web-hook\" link presented in a box at the top of the \"email participants\" page." +msgstr "" + +#: ../../features/notifications.rst:99 +msgid "Go to https://app.sendgrid.com/settings/mail_settings and select \"Event Notifications\"" +msgstr "" + +#: ../../features/notifications.rst:100 +msgid "Enable the feature and paste the Tabbycat URL under \"HTTP POST URL\"." +msgstr "" + +#: ../../features/notifications.rst:101 +msgid "Select the notifications to keep track (or all of them)." +msgstr "" + +#: ../../features/notifications.rst:103 +msgid "Each email and change in status sent to Tabbycat will add a row to the database. If the number of rows is limited, as is for free Heroku apps, enabling the webhook may use up a significant number of rows. Be selective in the events to keep track." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/features/preformed-panels.po b/docs/locale/kk/LC_MESSAGES/features/preformed-panels.po new file mode 100644 index 00000000000..79b63167b6e --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/features/preformed-panels.po @@ -0,0 +1,176 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-27 08:04\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/preformed-panels.po\n" +"X-Crowdin-File-ID: 1291\n" +"Language: kk_KZ\n" + +#: ../../features/preformed-panels.rst:5 +msgid "Preformed Panels" +msgstr "Алдын-ала бекітілген құрам" + +#: ../../features/preformed-panels.rst:7 +msgid "Preformed panels, also known as a 'shadow draw', allow adjudicator panels to be created *before* a round has been drawn and then applied once its draw is ready. This means that panel formation can be done during periods outside the normal time pressure of finalising a draw for release. This can save a lot of time at large tournaments, or at tournaments where the adjudication core wants to carefully control the specific combination of adjudicators within panels." +msgstr "" + +#: ../../features/preformed-panels.rst:9 +msgid "Tabbycat's implementation of preformed panels is more powerful, but less simple, than many others. The chief difference is that our workflow does not simply transpose a linear set of preformed panels atop a draw. Instead we employ Tabbycat's existing allocation tools, primarily the notion of a debate's *priority*, to allow for a non-linear matching of preformed panels that avoids adjudicator conflicts and better adapts to a given draw — particularly when the most important debates do not strictly follow the highest debate brackets." +msgstr "" + +#: ../../features/preformed-panels.rst:11 +msgid "The central concept is that each preformed panel has a priority value. When applying preformed panels to a draw, the allocator ties to best match the priority value of each preformed panel to the priority of each actual debate. This is similar to how Tabbycat's normal auto-allocator matches the strength of each panel (as measured by adjudicators' ratings) to the priority of each debate." +msgstr "" + +#: ../../features/preformed-panels.rst:14 +msgid "Step 1: Create preformed panels" +msgstr "" + +#: ../../features/preformed-panels.rst:16 +msgid "You can find the preformed panels section either" +msgstr "" + +#: ../../features/preformed-panels.rst:18 +msgid "under the **Setup** menu (for all rounds), or" +msgstr "" + +#: ../../features/preformed-panels.rst:19 +msgid "on the **Draw** page (for the current and next round)." +msgstr "" + +#: ../../features/preformed-panels.rst:21 +msgid "Initially, the preformed panels page will have no panels. Click the **Create Panels** button in the top left to make some. The panels it creates are based upon a projection of that round's general results using the results of the previous round. As a result, each preformed panel will have a *bracket range*, the lowest and highest brackets that debate might be in, and a *liveness range*, the maximum number of teams that could be live in that room." +msgstr "" + +#: ../../features/preformed-panels.rst:25 +msgid "Like the normal adjudicator allocation interface, the preformed panel interfaces will indicate when an adjudicator has not been marked as available. If using preformed panels, you may want to set adjudicator availability earlier than you would otherwise." +msgstr "" + +#: ../../features/preformed-panels.rst:27 +msgid "Liveness in the anticipated draw only pertains to the open category (the first break category that is marked as a \"general\" category). It's not possible to meaningfully predict where teams open-dead but live in other categories will end up." +msgstr "" + +#: ../../features/preformed-panels.rst:30 +msgid "Step 2: Assign priorities to preformed panels" +msgstr "" + +#: ../../features/preformed-panels.rst:32 +msgid "By default the priority slider for all preformed panels is in the neutral position. You can use the \"Prioritise\" button in the top left to assign priority values automatically, based upon their brackets or liveness. Before or after this step you can alter the priorities as usual — even after you have allocated adjudicators." +msgstr "" + +#: ../../features/preformed-panels.rst:34 +msgid "It's important to remember to assign a range of priorities to the panels. Without distinct priority values, the application of your preformed panels to the actual draw will be essentially random. If allocating priorities manually, it is a good idea to keep a relatively even distribution of priorities — use the range!" +msgstr "" + +#: ../../features/preformed-panels.rst:36 +msgid "In Round 1, each debate has a liveness and bracket of 0. If you are using preformed panels in this instance you may need to manually-differentiate their priorities." +msgstr "" + +#: ../../features/preformed-panels.rst:39 +msgid "Step 3: Allocate adjudicators to preformed panels" +msgstr "" + +#: ../../features/preformed-panels.rst:43 +msgid "Now that your panels have a priority, you can begin allocating adjudicators. You can do this manually, but do note that the normal auto-allocator for adjudicators also works in this context (the \"Allocate\" button). Even if you want to tweak your panels extensively, the auto-allocator can provide a good first-pass collection of panels, because it will give stronger adjudicators to the panels that you have marked as important." +msgstr "" + +#: ../../features/preformed-panels.rst:45 +msgid "The created panels all auto-save, so you can leave the page and return to pick up where you left. Like the main allocation interface, changes should appear 'live' across different computers and the sharding system is available to divide up each person's view of the draw." +msgstr "" + +#: ../../features/preformed-panels.rst:48 +msgid "Step 4: Generate the draw" +msgstr "" + +#: ../../features/preformed-panels.rst:50 +msgid "Proceed with the creation of the draw as usual. Open up the normal adjudicator allocation page for that round." +msgstr "" + +#: ../../features/preformed-panels.rst:53 +msgid "Step 5: Assign priorities to debates" +msgstr "" + +#: ../../features/preformed-panels.rst:55 +msgid "When allocating preformed panels, the priority levels are what connects the preformed panels to the actual debates. It is thus crucial that you assign priorities to the debates in the actual draw using automatic prioritisation or the manual sliders. Because the automatic prioritiser does not employ the highest priority value, it is worth having a look at the draw and seeing if any debates justify this before proceeding." +msgstr "" + +#: ../../features/preformed-panels.rst:58 +msgid "Step 6: Allocate preformed panels to debates" +msgstr "" + +#: ../../features/preformed-panels.rst:60 +msgid "To allocate preformed panels to your debates, click the normal \"Allocate\" button and then select the *Preformed Panels* option." +msgstr "" + +#: ../../features/preformed-panels.rst:64 +msgid "This will then allocate the preformed panels to debates." +msgstr "" + +#: ../../features/preformed-panels.rst:68 +msgid "You can the edit the allocation as normal. If needed, you can redo the allocation of the preformed panels at any point." +msgstr "" + +#: ../../features/preformed-panels.rst:71 +msgid "How does the allocator work?" +msgstr "" + +#: ../../features/preformed-panels.rst:73 +msgid "Roughly speaking, the allocator tries to match panel priorities to debate priorities, while avoiding conflicts. It'll mostly try to swap panels within priority levels in order to avoid conflicts. If there aren't exactly as many panels at each priority level as there are debates, it'll do its best to match what it can." +msgstr "" + +#: ../../features/preformed-panels.rst:75 +msgid "More formally, it treats the allocation of preformed panels to debates as an `assignment problem `_, with a cost of assigning each panel :math:`p` to each debate :math:`d` given by" +msgstr "" + +#: ../../features/preformed-panels.rst:77 +msgid "C(p,d) = w_\\mathrm{mism} [\\mathrm{importance}(p) - \\mathrm{importance(d)}]^2 + w_\\mathrm{conf} \\, \\mathrm{conflicts}(p,d) + w_\\mathrm{hist} \\, \\mathrm{history}(p,d)" +msgstr "" + +#: ../../features/preformed-panels.rst:81 +msgid "where" +msgstr "" + +#: ../../features/preformed-panels.rst:83 +msgid ":math:`w_\\mathrm{mism}` is the \"Importance mismatch penalty\" in the \"Draw rules\" settings," +msgstr "" + +#: ../../features/preformed-panels.rst:84 +msgid ":math:`w_\\mathrm{hist}` is the \"Adjudicator conflict penalty\" in the \"Draw rules\" settings," +msgstr "" + +#: ../../features/preformed-panels.rst:85 +msgid ":math:`w_\\mathrm{conf}` is the \"Adjudicator history penalty\" in the \"Draw rules\" settings," +msgstr "" + +#: ../../features/preformed-panels.rst:86 +msgid ":math:`\\mathrm{importance}(p)` is the importance of panel :math:`p`," +msgstr "" + +#: ../../features/preformed-panels.rst:87 +msgid ":math:`\\mathrm{importance}(d)` is the importance of debate :math:`d`," +msgstr "" + +#: ../../features/preformed-panels.rst:88 +msgid ":math:`\\mathrm{conflicts}(p,d)` is the number of adjudicator-team conflicts between panel :math:`p` and debate :math:`d`, and" +msgstr "" + +#: ../../features/preformed-panels.rst:89 +msgid ":math:`\\mathrm{history}(p,d)` is the number of adjudicators and teams who have seen each other between panel :math:`p` and debate :math:`d`." +msgstr "" + +#: ../../features/preformed-panels.rst:91 +msgid "It then uses the `Hungarian algorithm `_ to find the assignment of panels to debates that minimizes the total cost of the pairings." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/features/printing.po b/docs/locale/kk/LC_MESSAGES/features/printing.po new file mode 100644 index 00000000000..00718398f96 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/features/printing.po @@ -0,0 +1,68 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/printing.po\n" +"X-Crowdin-File-ID: 1293\n" +"Language: kk_KZ\n" + +#: ../../features/printing.rst:3 +msgid "Printing Ballots and Feedback" +msgstr "" + +#: ../../features/printing.rst:5 +msgid "Tabbycat offers the ability to print scoresheets and feedback sheets on a per-round basis. This means that each scoresheet is customised to match the draw, and so will display:" +msgstr "" + +#: ../../features/printing.rst:7 +msgid "The motion or possible motions that could have been chosen from" +msgstr "" + +#: ../../features/printing.rst:8 +msgid "The teams, and a list of speakers for each team" +msgstr "" + +#: ../../features/printing.rst:9 +msgid "The room number, and name of the adjudicators present" +msgstr "" + +#: ../../features/printing.rst:11 +msgid "Feedback sheets will also be customised in this manner; displaying:" +msgstr "" + +#: ../../features/printing.rst:13 +msgid "A 'from' source. Sheet will be printed for each possible piece of feedback in that room: ie adjudicators will each get a sheet for their panellists and trainees while teams and panellists will get sheets for the chair." +msgstr "" + +#: ../../features/printing.rst:14 +msgid "The specific questions you established when configuring the :ref:`adjudicator feedback questions `" +msgstr "" + +#: ../../features/printing.rst:15 +msgid "The room number" +msgstr "" + +#: ../../features/printing.rst:17 +msgid "To print the ballots for each round, you would go to the **Display** page for that round, the click one of the two relevant print links. This opens a new window. In each window, you then use your browser's print function (CTRL-P). In the resulting print interface (from your browser) you'll want to turn background graphics on, header/footers off, and set the layout to portrait (feedback sheets) or landscape (score sheets)." +msgstr "" + +#: ../../features/printing.rst:19 +msgid "Typically you'd save these to PDF for printing, although you should be able to print straight from this dialogue box." +msgstr "" + +#: ../../features/printing.rst:21 +msgid "Printing works best in Safari and Firefox; use those if possible." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/features/standings-rules.po b/docs/locale/kk/LC_MESSAGES/features/standings-rules.po new file mode 100644 index 00000000000..7c255ae6548 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/features/standings-rules.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/standings-rules.po\n" +"X-Crowdin-File-ID: 1295\n" +"Language: kk_KZ\n" + +#: ../../features/standings-rules.rst:5 +msgid "Standings Rules" +msgstr "" + +#: ../../features/standings-rules.rst:8 +msgid "Team standings rules" +msgstr "" + +#: ../../features/standings-rules.rst:10 +msgid "In Tabbycat, you can choose how teams are ranked in the team standings. For example, at Australs, teams are ranked first on the number of wins, and second on their total speaker score. The setting that specifies how teams are ranked is called the **team standings precedence**. The team standings precedence is used:" +msgstr "" + +#: ../../features/standings-rules.rst:15 +msgid "When displaying the team tab," +msgstr "" + +#: ../../features/standings-rules.rst:16 +msgid "Whenever a power-paired draw is generated, and" +msgstr "" + +#: ../../features/standings-rules.rst:17 +msgid "When computing which teams are in the break." +msgstr "" + +#: ../../features/standings-rules.rst:19 +msgid "When you choose the team standings precedence, you choose from a list of *metrics*. Then, in the standings, teams will be sorted first by the first metric, then by the second metric, and so on. You must choose at least one metric, and you can choose up to eight. Teams tied on all metrics will have the same rank." +msgstr "" + +#: ../../features/standings-rules.rst:25 +msgid "If you like, you can also choose **team standings extra metrics**, which are metrics that will be shown in the team standings, but not used to rank teams." +msgstr "" + +#: ../../features/standings-rules.rst:33 ../../features/standings-rules.rst:132 +msgid "Metric" +msgstr "" + +#: ../../features/standings-rules.rst:34 ../../features/standings-rules.rst:133 +msgid "Description" +msgstr "" + +#: ../../features/standings-rules.rst:36 +msgid "Wins" +msgstr "" + +#: ../../features/standings-rules.rst:37 +msgid "How many debates the team has won." +msgstr "" + +#: ../../features/standings-rules.rst:39 +msgid "Points" +msgstr "" + +#: ../../features/standings-rules.rst:40 +msgid "How many points the team has. For two-team formats, this is just a synonym for wins, and differs only in column labelling. For BP, this is 3 points for a first, 2 for a second, 1 for a third and 0 for a fourth." +msgstr "" + +#: ../../features/standings-rules.rst:44 +msgid "Total speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:45 +msgid "The sum of all speaker scores attained in all debates." +msgstr "" + +#: ../../features/standings-rules.rst:47 +msgid "Average total speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:48 ../../features/standings-rules.rst:157 +msgid "The average total speaker score over all debates the team has had, not counting debates where they or their opponents forfeited." +msgstr "" + +#: ../../features/standings-rules.rst:51 +msgid "Average individual speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:52 +msgid "The total substantive speaker score, over all debates the team has had and the number of speakers. Provides an equivalent metric to average total speaker score in no-reply formats, but within the substantive speech scoring range." +msgstr "" + +#: ../../features/standings-rules.rst:57 +msgid "Speaker score standard deviation" +msgstr "" + +#: ../../features/standings-rules.rst:58 +msgid "The standard deviation of total speaker scores over all debates the team has had, not counting debates where they or their opponents forfeited. This metric is ranked in ascending order (smaller standard deviations ranked higher)." +msgstr "" + +#: ../../features/standings-rules.rst:63 +msgid "Sum of margins" +msgstr "" + +#: ../../features/standings-rules.rst:64 +msgid "The sum of all margins. Wins are positive, losses are negative." +msgstr "" + +#: ../../features/standings-rules.rst:66 +msgid "Average margin" +msgstr "" + +#: ../../features/standings-rules.rst:67 +msgid "The average margin over all debates the team has had, not counting debates where they or their opponents forfeited." +msgstr "" + +#: ../../features/standings-rules.rst:70 +msgid "Draw strength by wins" +msgstr "" + +#: ../../features/standings-rules.rst:71 +msgid "The sum of the number of wins of every team this team has faced so far." +msgstr "" + +#: ../../features/standings-rules.rst:73 +msgid "This is also known in some circuits as *win points*, *opponent wins* or *opponent strength*." +msgstr "" + +#: ../../features/standings-rules.rst:76 +msgid "Draw strength by speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:77 +msgid "The sum of speaker scores of every team this team has faced so far." +msgstr "" + +#: ../../features/standings-rules.rst:79 +msgid "Votes/ballots carried" +msgstr "" + +#: ../../features/standings-rules.rst:80 +msgid "The number of adjudicators that gave this team a win across all of their debates. Also known as the number of *ballots* or *judges* a team has." +msgstr "" + +#: ../../features/standings-rules.rst:83 +msgid "In cases where the panel is smaller or larger than 3, this number is normalised to be out of 3. For example, if a panel of five splits 3--2, then the winning team is recorded as gaining 1.8 votes, and the losing team is recorded as gaining 1.2. This also means that solo adjudicators are always worth three votes." +msgstr "" + +#: ../../features/standings-rules.rst:89 +msgid "Number of firsts" +msgstr "" + +#: ../../features/standings-rules.rst:90 +msgid "The number of debates in which the team came first. Only makes sense for British Parliamentary." +msgstr "" + +#: ../../features/standings-rules.rst:93 +msgid "Number of seconds" +msgstr "" + +#: ../../features/standings-rules.rst:94 +msgid "The number of debates in which the team came second. Only makes sense for British Parliamentary." +msgstr "" + +#: ../../features/standings-rules.rst:97 +msgid "Number of pullups before this round" +msgstr "" + +#: ../../features/standings-rules.rst:98 +msgid "The number of times the team has been pulled up as part of :ref:`draw generation `. You probably wouldn't use this as a metric to rank teams, but you may wish to display it as an \"extra metric\" in the team standings for transparency." +msgstr "" + +#: ../../features/standings-rules.rst:103 +msgid "Who-beat-whom" +msgstr "" + +#: ../../features/standings-rules.rst:104 +msgid "If there are exactly two teams tied on all metrics earlier in the precedence than this one, then check if the teams have faced each other. If they have, the team that won their encounter is ranked higher. If they have seen each other more than once, the team that has won more of their encounters is ranked higher." +msgstr "" + +#: ../../features/standings-rules.rst:110 +msgid "If there are more than two teams tied, this metric is not applied." +msgstr "" + +#: ../../features/standings-rules.rst:112 +msgid "This metric can be specified multiple times. Each time who-beat-whom occurs, it applies to all the metrics earlier in the precedence than the occurrence in question." +msgstr "" + +#: ../../features/standings-rules.rst:118 +msgid "Speaker standings rules" +msgstr "" + +#: ../../features/standings-rules.rst:120 +msgid "The speaker standings precedence is only used in speaker standings (*i.e.*, it doesn't affect the operation of the tournament). As for team standings, the **speaker standings precedence** specifies which metrics are used to rank speakers, with the second metric tie-breaking the first, the third tie-breaking the second, and so on. The **speaker standings extra metrics** are metrics that will be shown in the speaker standings, but won't be used to rank speakers." +msgstr "" + +#: ../../features/standings-rules.rst:135 +msgid "Total" +msgstr "" + +#: ../../features/standings-rules.rst:136 +msgid "The sum of all speaker scores attained by the speaker. Note that if a speaker misses a round, they'll typically be relegated to the bottom of the speaker standings by this metric." +msgstr "" + +#: ../../features/standings-rules.rst:140 +msgid "Average" +msgstr "" + +#: ../../features/standings-rules.rst:141 +msgid "The average of all speaker scores attained by the speaker." +msgstr "" + +#: ../../features/standings-rules.rst:143 +msgid "Trimmed mean" +msgstr "" + +#: ../../features/standings-rules.rst:144 +msgid "The average speaker score after excluding their highest and lowest speaker scores. Also known as the *high-low drop*, *truncated mean* or *Olympic average*." +msgstr "" + +#: ../../features/standings-rules.rst:148 +msgid "If the speaker has only one or two scores, this metric just returns the average of those scores, without excluding any." +msgstr "" + +#: ../../features/standings-rules.rst:151 +msgid "Standard deviation" +msgstr "" + +#: ../../features/standings-rules.rst:152 +msgid "The standard deviation of all speaker scores attained by the speaker. This metric is ranked in ascending order (smaller standard deviations ranked higher)." +msgstr "" + +#: ../../features/standings-rules.rst:156 +msgid "Average speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:160 +msgid "Number of speeches given" +msgstr "" + +#: ../../features/standings-rules.rst:161 +msgid "The number of speaker scores associated with the speaker. (In tournaments where teams can rotate speakers, this may not be all rounds.) This metric is normally used as an \"extra\" (unranked) metric, because it'd be weird to rank by number of speeches given, but you can if you want to." +msgstr "" + +#: ../../features/standings-rules.rst:168 +msgid "Motion balance" +msgstr "" + +#: ../../features/standings-rules.rst:170 +msgid "The motion balance page applies a statistical test to estimate the degree to which a motion is imbalanced. This is calculated by first making an underlying assumption that a motion is generally fair. This will be our null hypothesis: that, for a given motion, affirmative teams won the same number of times as negative teams." +msgstr "" + +#: ../../features/standings-rules.rst:172 +msgid "Our chi-squared test will then be centred around disproving this hypothesis. If we disprove the hypothesis, we say that, in the context of this tournament and this draw, the motion ended up being unbalanced. However (technically speaking) if we fail to reject the null hypothesis, we would conclude that there is insufficient evidence to suggest that the motion was unbalanced in the context of this tournament." +msgstr "" + +#: ../../features/standings-rules.rst:174 +msgid "The test proceeds by `calculating the chi-squared stat, then running a series of tests `_. The tests are where we go a little off-book with respect to statistical methodology. Normally we would test at a single \"level of significance\" (ie. with a certain degree of certainty), but that's insufficient in telling us how bad a motion ended up being. So, instead, we conduct a range of tests with a range of levels of significance, and calculate the minimum level of significance that causes our null hypothesis to be rejected. Using the minimum level of significance that rejects our null hypothesis, we can then grade the fairness of the motion on a scale. Motions whose tests fall below a certain threshold will be considered fair, while others will be graded based on the minimum." +msgstr "" + +#: ../../features/standings-rules.rst:176 +msgid "For formats with topic selection, the same test is applied using the number of affirmative and negative vetoes in place of wins. The assumption here is that, during the time allotted for motion selection, teams estimate how appealing a motion is from their position, and then veto the topic that they feel is least favourable. Thus, the null hypothesis is that a motion that is perceived of as fair would be vetoed by affirmative and negative teams to an equal degree." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/features/team-code-names.po b/docs/locale/kk/LC_MESSAGES/features/team-code-names.po new file mode 100644 index 00000000000..c0fdbe4dca1 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/features/team-code-names.po @@ -0,0 +1,104 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/team-code-names.po\n" +"X-Crowdin-File-ID: 1297\n" +"Language: kk_KZ\n" + +#: ../../features/team-code-names.rst:5 +msgid "Team Code Names" +msgstr "" + +#: ../../features/team-code-names.rst:7 +msgid "Some tournaments use \"code names\" to obscure the institutional affiliations of teams. For example, rather than calling a team \"Harvard DK\", they would be presented in the draw as \"Butterfly\". A natural way to do this would be just to change the name of every team, but then the team's \"real name\" would be hidden from tournament staff, too." +msgstr "" + +#: ../../features/team-code-names.rst:13 +msgid "Instead, Tabbycat allows you to assign code names to teams, alongside their real names. This way, you can have code names show to participants, while real team names show in administrative views (*e.g.* allocating adjudicators). It also allows you to \"decode\" team names for elimination rounds or final tab release easily, without having to actually change every team's name." +msgstr "" + +#: ../../features/team-code-names.rst:19 +msgid "While the most frequently-used public views have been checked to ensure that they show only code names, not all views have been checked thoroughly. Please check views using demonstration data on a test site, configured in the same way that you would use it at your tournament, before using code names at a real tournament." +msgstr "" + +#: ../../features/team-code-names.rst:26 +msgid "Assigning code names" +msgstr "" + +#: ../../features/team-code-names.rst:28 +msgid "Most methods of importing teams, including the simple importer and the ``importtournament`` command, automatically assign code names to teams. The code name is the name of the emoji that is automatically assigned at the same time. For example, the team assigned 🦋 will be code-named \"Butterfly\"." +msgstr "" + +#: ../../features/team-code-names.rst:33 +msgid "If you wish to use your own code names, you need to set the \"code name\" field of each team. Here are two ways to do this:" +msgstr "" + +#: ../../features/team-code-names.rst:36 +msgid "**Edit Database area:** Enter the Edit Database area, and under **Participants > Teams**, click **Change**. Modify each team one by one, entering a new code name then saving." +msgstr "" + +#: ../../features/team-code-names.rst:39 +msgid "``importtournament`` **command:** If you imported a tournament from CSV files, you can just add a ``code_name`` column to your teams CSV file." +msgstr "" + +#: ../../features/team-code-names.rst:43 +msgid "Displaying code names" +msgstr "" + +#: ../../features/team-code-names.rst:45 +msgid "Code names are disabled by default; to enable then, go to **Setup > Configuration > Public Options**, and change the **Team code names** option. You can choose between the following options:" +msgstr "" + +#: ../../features/team-code-names.rst:49 +msgid "Do not use code names" +msgstr "" + +#: ../../features/team-code-names.rst:50 +msgid "Use real names everywhere, and show code names in tooltips" +msgstr "" + +#: ../../features/team-code-names.rst:51 +msgid "Use code names for public; real names with code names in tooltips for admins" +msgstr "" + +#: ../../features/team-code-names.rst:52 +msgid "Use code names for public; code names with real names in tooltips for admins" +msgstr "" + +#: ../../features/team-code-names.rst:53 +msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" +msgstr "" + +#: ../../features/team-code-names.rst:55 +msgid "\"Code names in tooltips\" means that the code name will display in the details box that appears when you roll over a team's name, and similarly for real names." +msgstr "" + +#: ../../features/team-code-names.rst:58 +msgid "One typical use is as follows:" +msgstr "" + +#: ../../features/team-code-names.rst:60 +msgid "Before the tournament, set the team code names setting to *Use code names for public; real names with code names in tooltips for admins*. This hides real names from anything participants would see, but continues to refer to teams in administrative views by real names." +msgstr "" + +#: ../../features/team-code-names.rst:64 +msgid "After the break is announced, set it to *Use real names everywhere, and show code names in tooltips*. This basically decodes all team names, while still allowing people to look up the (now former) code name of a team." +msgstr "" + +#: ../../features/team-code-names.rst:68 +msgid "If you're enabling team codes, you probably want to disable the **Show team institutions** option too." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/features/user-accounts.po b/docs/locale/kk/LC_MESSAGES/features/user-accounts.po new file mode 100644 index 00000000000..4cc08479e9b --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/features/user-accounts.po @@ -0,0 +1,196 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/user-accounts.po\n" +"X-Crowdin-File-ID: 1299\n" +"Language: kk_KZ\n" + +#: ../../features/user-accounts.rst:5 +msgid "User Accounts" +msgstr "" + +#: ../../features/user-accounts.rst:7 +msgid "For obvious reasons, user logins are required to data entry and administrative functions. Conceptually, there are four levels of access:" +msgstr "" + +#: ../../features/user-accounts.rst:14 +msgid "Access" +msgstr "" + +#: ../../features/user-accounts.rst:15 +msgid "Should be used by" +msgstr "" + +#: ../../features/user-accounts.rst:16 +msgid "Grants access to" +msgstr "" + +#: ../../features/user-accounts.rst:17 +msgid "Is capable of" +msgstr "" + +#: ../../features/user-accounts.rst:19 +msgid "Public" +msgstr "" + +#: ../../features/user-accounts.rst:20 +msgid "The public" +msgstr "" + +#: ../../features/user-accounts.rst:21 +msgid "Publicly available information." +msgstr "" + +#: ../../features/user-accounts.rst:22 +msgid "Viewing things, and submitting new ballots/feedback if electronic submission is permitted by the tournament." +msgstr "" + +#: ../../features/user-accounts.rst:24 +msgid "Assistant" +msgstr "" + +#: ../../features/user-accounts.rst:25 +msgid "Data entry helpers" +msgstr "" + +#: ../../features/user-accounts.rst:26 +msgid "The assistant area" +msgstr "" + +#: ../../features/user-accounts.rst:27 +msgid "Entering, confirming and printing ballots and feedback, checking in ballots and people, and displaying the draw." +msgstr "" + +#: ../../features/user-accounts.rst:29 +msgid "Superuser" +msgstr "" + +#: ../../features/user-accounts.rst:30 +msgid "Chief adjudicators" +msgstr "" + +#: ../../features/user-accounts.rst:31 +msgid "The administrator and assistant areas" +msgstr "" + +#: ../../features/user-accounts.rst:32 +msgid "Generating draws, allocating adjudicators and venues, and editing ballots, feedback and adjudicator scores." +msgstr "" + +#: ../../features/user-accounts.rst:34 +msgid "Staff and superuser" +msgstr "" + +#: ../../features/user-accounts.rst:35 +msgid "Tab director" +msgstr "" + +#: ../../features/user-accounts.rst:36 +msgid "The administrator, assistant and Edit Database areas" +msgstr "" + +#: ../../features/user-accounts.rst:37 +msgid "Editing the database directly." +msgstr "" + +#: ../../features/user-accounts.rst:39 +msgid "If a user account on the tab system belongs to someone who is also a participant in the tournament (*e.g.*, a chief adjudicator), these two capacities are completely separate. User accounts are only used to regulate access to administrative functions. Tabbycat doesn't know about any relationship between user accounts, and who is participating in the tournament." +msgstr "" + +#: ../../features/user-accounts.rst:42 +msgid "Account roles" +msgstr "" + +#: ../../features/user-accounts.rst:44 +msgid "You should create an account for each person who needs to access the tab system. When you create an account in the Edit Database area, there are checkboxes for **Superuser status** and **Staff access**. Superusers have access to the administrator area, and staff have access to the Edit Database area. You should grant permissions as follows:" +msgstr "" + +#: ../../features/user-accounts.rst:46 +msgid "Tab directors should get both superuser and staff status." +msgstr "" + +#: ../../features/user-accounts.rst:47 +msgid "Chief adjudicators and their deputies should get superuser status, but not staff status." +msgstr "" + +#: ../../features/user-accounts.rst:48 +msgid "Tab assistants (helping only with data entry) should get neither superuser nor staff status." +msgstr "" + +#: ../../features/user-accounts.rst:50 +msgid "Tournament participants (other than tab staff) do not need an account. Everything they need to know can be accessed without an account. If you're using electronic ballots or electronic feedback, they access these using a URL that only they know (see :ref:`private-urls`)." +msgstr "" + +#: ../../features/user-accounts.rst:52 +msgid "When doing data entry, users with superuser status should use the **assistant area**. The administrator area is intended for managing the tournament, and doesn't include someand should **not** in general be used for data entry. Specifically, the administrator area lacks checks that are important for data integrity assurance. It should be used only to override the normal :ref:`data entry ` procedure, for example, to unconfirm or modify a ballot." +msgstr "" + +#: ../../features/user-accounts.rst:54 +msgid "The **Edit Database** interface should not be used except where it is actually necessary. There are a few functions which require this, but as a principle, it shouldn't be used as a matter of course." +msgstr "" + +#: ../../features/user-accounts.rst:56 +msgid "In theory, you could grant an account staff status but not superuser status. But then they'd be allowed to edit the database, but not run the tournament, which would be weird." +msgstr "" + +#: ../../features/user-accounts.rst:59 +msgid "Adding accounts" +msgstr "" + +#: ../../features/user-accounts.rst:61 +msgid "To add an account:" +msgstr "" + +#: ../../features/user-accounts.rst:63 +msgid "Go to the Edit Database area of the site." +msgstr "" + +#: ../../features/user-accounts.rst:65 +msgid "Under **Authentication and Authorization**, click the **Add** link next to **Users**." +msgstr "" + +#: ../../features/user-accounts.rst:67 +msgid "Ask the user to enter a username, password and possibly email address." +msgstr "" + +#: ../../features/user-accounts.rst:69 +msgid "Only they should know what the password is." +msgstr "" + +#: ../../features/user-accounts.rst:70 +msgid "If you're hosting on the internet, all passwords should be at least moderately strong!" +msgstr "" + +#: ../../features/user-accounts.rst:71 +msgid "Passwords are not stored as raw passwords, so you can't figure out what their password is." +msgstr "" + +#: ../../features/user-accounts.rst:72 +msgid "The email address is optional." +msgstr "" + +#: ../../features/user-accounts.rst:73 +msgid "This email address is only used to reset their password if they forget it, and has nothing to do with the email address that Tabbycat uses to send emails to tournament participants (*e.g.* private URL links)." +msgstr "" + +#: ../../features/user-accounts.rst:75 +msgid "If they are being assigned superuser and/or staff status, check the relevant boxes." +msgstr "" + +#: ../../features/user-accounts.rst:77 +msgid "Click \"Save\" or \"Save and add another\"." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/features/venue-constraints.po b/docs/locale/kk/LC_MESSAGES/features/venue-constraints.po new file mode 100644 index 00000000000..197e584ad1d --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/features/venue-constraints.po @@ -0,0 +1,168 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/venue-constraints.po\n" +"X-Crowdin-File-ID: 1301\n" +"Language: kk_KZ\n" + +#: ../../features/venue-constraints.rst:5 +msgid "Venue Constraints" +msgstr "" + +#: ../../features/venue-constraints.rst:7 +msgid "Tabbycat supports a basic form of venue constraints. A **venue constraint** is a requirement that a particular **team, adjudicator, institution** or **division** be assigned to a venue in a particular **venue category**. Typical uses would include:" +msgstr "" + +#: ../../features/venue-constraints.rst:12 +msgid "Meeting venue accessibility requirements of particular teams (*e.g.* step-free access)" +msgstr "" + +#: ../../features/venue-constraints.rst:14 +msgid "Placing adjudication core and tab team members close to the tab room" +msgstr "" + +#: ../../features/venue-constraints.rst:15 +msgid "Keeping all debates in a division in one location" +msgstr "" + +#: ../../features/venue-constraints.rst:17 +msgid "Constraints apply to **venue categories**, not individual venues. That is, you specify that (say) a team should be given a venue from a particular *list* of venues. Of course, it's permissible for a venue category to have only one venue in it." +msgstr "" + +#: ../../features/venue-constraints.rst:22 +msgid "The algorithm used to satisfy venue constraints is not guaranteed to be optimal. In some rare cases, it may propose an allocation that fails some constraints, even though some other allocation would have satisfied all (or more) constraints. In almost all practical circumstances, however, it should work, and save human effort (and time) in specially allocating rooms." +msgstr "" + +#: ../../features/venue-constraints.rst:29 +msgid "Adding venue categories" +msgstr "" + +#: ../../features/venue-constraints.rst:31 +msgid "Before you add venue constraints, you first need to add venue categories. Each venue category is a list of venues, typically satisfying a particular need. For example, you might have a category for each of the following:" +msgstr "" + +#: ../../features/venue-constraints.rst:35 +msgid "Venues with step-free access" +msgstr "" + +#: ../../features/venue-constraints.rst:36 +msgid "Venues that are close to general assembly (the briefing room)" +msgstr "" + +#: ../../features/venue-constraints.rst:37 +msgid "Venues that are close to the tab room" +msgstr "" + +#: ../../features/venue-constraints.rst:38 +msgid "Venues that are, or venues that are not, being live-streamed" +msgstr "" + +#: ../../features/venue-constraints.rst:40 +msgid "Each venue can be in as many categories as you like (or none at all)." +msgstr "" + +#: ../../features/venue-constraints.rst:44 +msgid "To add or edit venue categories, go to the **Import Data** area (under Setup) then select **Add/Edit Venue Categories**. Note that this page will show all existing Venue Categories first before showing the blank forms that allow you to create new categories. Give your category a name (like \"Step-free access\"), assign it some venues, then click the \"Save Venue Categories\" button at the bottom of the page." +msgstr "" + +#: ../../features/venue-constraints.rst:47 +msgid "Alternately you can add or edit a venue category by going to the **Edit Database** area (under Setup), scroll down to \"Venues\" and click \"Venue categories\". Then click the **+ Add venue category** button in the top-right of the page or click an existing item." +msgstr "" + +#: ../../features/venue-constraints.rst:50 +msgid "Adding venue constraints" +msgstr "" + +#: ../../features/venue-constraints.rst:52 +msgid "To add or edit venue constraints, go to the **Import Data** area (under Setup) then select **Add/Edit Venue Constraints**. Note that this page will show all existing Venue Constraints first before showing the blank forms that allow you to create new categories. Note that the \"Constrainee ID\" field should let you select from a dropdown or type in the name of an adjudicator, institution, or team (rather than having to lookup the exact ID)." +msgstr "" + +#: ../../features/venue-constraints.rst:57 +msgid "Alternately you can add or edit a venue category by going to the **Edit Database** area (under Setup), scroll down to \"Venues\" and click \"Venue constraints\". Then click the **+ Add venue category** button in the top-right of the page or click an existing item." +msgstr "" + +#: ../../features/venue-constraints.rst:59 +msgid "For each constraint, you need to specify four things:" +msgstr "" + +#: ../../features/venue-constraints.rst:62 +msgid "**Category**" +msgstr "" + +#: ../../features/venue-constraints.rst:62 +msgid "The venue category to which the subject of this constraint should be locked." +msgstr "" + +#: ../../features/venue-constraints.rst:65 +msgid "**Priority**" +msgstr "" + +#: ../../features/venue-constraints.rst:65 +msgid "This is a number used to resolve conflicts between constraints. Constraints with higher priority (greater number) take precedence over those with lower priority. If none of your constraints will ever conflict, then the priority is arbitrary (but it must still be specified)." +msgstr "" + +#: ../../features/venue-constraints.rst:72 +msgid "**Subject content** **type**" +msgstr "" + +#: ../../features/venue-constraints.rst:72 +msgid "The type of subject to which this constraint relates: adjudicator, team, institution or division." +msgstr "" + +#: ../../features/venue-constraints.rst:75 +msgid "**Subject ID**" +msgstr "" + +#: ../../features/venue-constraints.rst:75 +msgid "Which adjudicator, team, institution or division the constraint relates to. The textbox takes a number (the ID of the object in the database), but you can search for the subject by clicking on the search icon next to it. This will bring up a table of objects of the type specified in \"subject content type\" for you to choose from. (You need to select the subject content type first.)" +msgstr "" + +#: ../../features/venue-constraints.rst:86 +msgid "Applying venue constraints" +msgstr "" + +#: ../../features/venue-constraints.rst:88 +msgid "If you don't have any venue constraints for adjudicators, venue constraints are applied automatically when the draw is generated." +msgstr "" + +#: ../../features/venue-constraints.rst:91 +msgid "However, if you have one or more venue constraints for adjudicators, it's not possible to take adjudicator venue constraints into account during draw generation, because the adjudicator allocation isn't known then. You'll need to run the venue allocation yourself after you've allocated adjudicators." +msgstr "" + +#: ../../features/venue-constraints.rst:96 +msgid "To run venue allocation, go to **Edit Venues** (while looking at the draw), then in the screen where you can edit venues, click the **Auto Allocate** button. You can also do this at any other point (say, after adding a new venue constraint) if, for whatever reason, you would like to re-run the venue allocation algorithm." +msgstr "" + +#: ../../features/venue-constraints.rst:102 +msgid "If a venue constraint couldn't be met, a message will show in the \"conflicts/flags\" column of the draw. A constraint might not be met for a number of reasons:" +msgstr "" + +#: ../../features/venue-constraints.rst:106 +msgid "It could be that constraints of different parties (say, one team and one adjudicator) conflicted, so only one could be fulfilled." +msgstr "" + +#: ../../features/venue-constraints.rst:108 +msgid "It could be that all available rooms in the relevant category were already taken by other, higher-priority constraints." +msgstr "" + +#: ../../features/venue-constraints.rst:110 +msgid "It could just be one of those edge cases that's too hard for the naïve algorithm to handle." +msgstr "" + +#: ../../features/venue-constraints.rst:113 +msgid "Currently, Tabbycat doesn't tell you which of these happened, so if the venue allocation fails to meet all your constraints, it's on you to figure out why. In most scenarios, we imagine you'll have few enough constraints that this will be obvious; for example, if the chief adjudicator is judging a team with accessibility requirements, it might be obvious that the latter's constraint took priority. We might in future add support for more useful guidance on conflicting constraints, but we currently consider this to be of low priority." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/guide/comparisons.po b/docs/locale/kk/LC_MESSAGES/guide/comparisons.po new file mode 100644 index 00000000000..57af9b0faae --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/guide/comparisons.po @@ -0,0 +1,338 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/comparisons.po\n" +"X-Crowdin-File-ID: 1303\n" +"Language: kk_KZ\n" + +#: ../../guide/comparisons.rst:5 +msgid "Tab Software Comparisons" +msgstr "" + +#: ../../guide/comparisons.rst:7 +msgid "If you're reading this, you're probably interested in using Tabbycat, and wondering how it compares to other options. Perhaps you're a long-time user of another tab system, and wondering what Tabbycat can do better. This page is our effort to help answer this. Tabbycat's been around since 2010, but since BP support is a recent addition (2017), we thought it would be useful to outline the differences between Tabbycat and other BP software." +msgstr "" + +#: ../../guide/comparisons.rst:9 +msgid "Obviously, this page is written by the developers of Tabbycat, and naturally, we have our biases. But rarely is there a single best option for everyone and every situation: different tab programs imagine the tabbing process in a different ways and have made unique trade-offs in their development process and design decisions. So we've tried to be as fair and accurate as we can, and we've consulted experienced tab directors (other than us!) and chief adjudicators to help provide a balanced overview." +msgstr "" + +#: ../../guide/comparisons.rst:11 +msgid "At present, this guide just focuses on the major options available for the British Parliamentary format, although we'd like to expand this to incorporate the other formats that Tabbycat supports at some point in the future. As with all of our documentation, the source for this page `is on GitHub `_, and we welcome feedback and contributions." +msgstr "" + +#: ../../guide/comparisons.rst:14 +msgid "On feature lists" +msgstr "" + +#: ../../guide/comparisons.rst:16 +msgid "In the first draft of this document, we had a table that listed every feature we could think of, along with which software does and doesn't support it. This ended up not being a great idea, for a couple of reasons." +msgstr "" + +#: ../../guide/comparisons.rst:18 +msgid "Firstly, the largest feature disparities are for relatively niche features. All of the software discussed can do the basics necessary to run a tournament: generate draws, allocate adjudicators, enter results, etc. As a result, we will — like a good whip speech — be comparative and note key feature disparities when discussing each alternative software directly." +msgstr "" + +#: ../../guide/comparisons.rst:20 +msgid "Secondly, we felt that the 'checklist' approach to comparing tab software would do a disservice to the reasons you would actually choose one software over another. Except where a niche capability is essential, raw technical specifications rarely define the experience of using a product such as a phone, a car, or indeed, tabbing software. With Tabbycat, we've spent eight years continuously refining the tabbing workflow and smoothing out rough edges, and we believe you'll find the result extremely user-friendly and robust. As always, the best way to check this out is by :ref:`setting up a demo site and taking it for a spin `!" +msgstr "" + +#: ../../guide/comparisons.rst:23 +msgid "Comparison with Tabbie2" +msgstr "" + +#: ../../guide/comparisons.rst:26 +msgid "Centralised site vs individual sites" +msgstr "" + +#: ../../guide/comparisons.rst:28 +msgid "Tabbie2 and Tabbycat are both internet-based systems. Tabbie2 hosts all tournaments on a single site. However, when using Tabbycat, each tournament or organisation sets up its own site. Each model has its advantages and disadvantages in different areas:" +msgstr "" + +#: ../../guide/comparisons.rst:30 +msgid "**User identification**. Tabbie2's centralised model allows for site-wide user accounts for all tournament participants. This means that they can use the same login information for all tournaments, and perform tasks such as submitting ballots and feedback through that unified account. If you're in an established circuit, most of your participants probably already have user accounts which are identified and collected (via e-mail addresses) during registration. If you're in a newer circuit, or one where Tabbie2 is rarely used, most of your participants will probably need to create an account — a process which Tabbie2 handles by e-mailing them a request to do so when that person is added to your tournament." +msgstr "" + +#: ../../guide/comparisons.rst:32 +msgid "In Tabbycat's decentralised model, there is no persistent 'account' for tournament participants on each tab site or across different tab sites. Indeed, the only people who can log in to the site are those who have been given accounts by the tab director, such as tab staff and members of the adjudication core." +msgstr "" + +#: ../../guide/comparisons.rst:34 +msgid "For secure e-ballot and e-feedback submissions, Tabbycat assigns a \"private URL\" to each adjudicator or team. This is essentially a password that allows a participant to only submit data that they should have access to in that specific tournament. This means participants don't need user accounts and you don't need to collect user account information; however if your tournament uses e-ballots or e-feedback you will need to distribute those private URLs to participants. Tabbycat can e-mail these to participants for you, or print them to give them to participants, or you could distribute the URLs using your own means." +msgstr "" + +#: ../../guide/comparisons.rst:36 +msgid "**Control over data**. Some participant information in Tabbie2 is shared between tournaments, like their names and conflicts (discussed below). This means participants can manage it directly through their user accounts, without needing to go through you. On the other hand, this requires your participants to co-operate in keeping their accounts up to date, and to provide the correct e-mail address during registration (you'd be surprised how many don't). Furthermore, participants may look to you for assistance, and your ability to help is limited to directing them through Tabbie2 channels—easy enough if they forget their password, but not so much if they forget their account's e-mail address." +msgstr "" + +#: ../../guide/comparisons.rst:38 +msgid "Because each Tabbycat site is its own, you'll need to collect and import all participant details yourself. This might seem like more to do, but it also means there's no need to match your data to existing accounts, which can be time-consuming and prone to participant error. It also means you can freely change data, for example, to correct a participant's name or institution, or to add data like conflicts on an ad-hoc basis." +msgstr "" + +#: ../../guide/comparisons.rst:40 +msgid "**Data privacy**. Conflicts are typically entered into the tab, and are sensitive information. Tabbie2's centralisation allows for conflicts to be self-nominated by users and stored in their user accounts. This, in theory, saves the need for users to report conflicts to tab directors and other tournament staff. In practice, however, only special \"super\" users on Tabbie2 have access to the stored conflicts of users (otherwise anyone could access a user's conflicts by creating a new tournament and adding that user as a participant), so many tournaments need to collect this information from participants anyway." +msgstr "" + +#: ../../guide/comparisons.rst:42 +msgid "Tabbycat's decentralised model means that no-one will have access to conflict information except for the tab staff of each individual instance of Tabbycat. Unlike Tabbie2, Tabbycat's developers do not have any access to your tournament's data — conflicts or otherwise. However, to help us continually improve the software, Tabbycat does send error reports to its developers if there is a serious bug or crash in the code, which could potentially contain confidential information depending on which page triggered the report. As a result of Tabbycat's decentralised data storage, each tournament does need to collect and enter conflicts as part of their registration process." +msgstr "" + +#: ../../guide/comparisons.rst:44 +msgid "**When things go wrong**. In our view, this is probably the most important factor. Obviously, we all hope you never have to fix things. But no software is perfect, and software developed by volunteers in their spare time (as both Tabbie2 and Tabbycat are) is especially imperfect. On occasion, glitches or edge cases occur, and fixing them requires you to directly edit the offending data in the database. Being able to do this without assistance can be the difference between a delay of minutes and a delay of hours." +msgstr "" + +#: ../../guide/comparisons.rst:46 +msgid "In Tabbycat, because it's your site, you have full control of the database, and can edit it through Tabbycat's \"Edit Database\" area. This allows you to fix things (or break things, if you're not careful!). Tabbie2's centralisation prevents this—for obvious reasons, only Tabbie2's developers have direct database access, which makes their intervention necessary if direct database access is required to resolve a problem." +msgstr "" + +#: ../../guide/comparisons.rst:49 ../../guide/comparisons.rst:138 +msgid "Running your tournament" +msgstr "" + +#: ../../guide/comparisons.rst:51 +msgid "Tabbie2 and Tabbycat have broadly similar workflows for running rounds; at least on paper. Key differences are discussed below:" +msgstr "" + +#: ../../guide/comparisons.rst:53 +msgid "**Data import**. Tabbie2 takes CSV files for import. Tabbycat has a CSV file importer, but it's (for now) only accessible through a command-line interface and is only expected to be used for large tournaments by experienced tab directors. As a more user-friendly alternative, Tabbycat also has an import wizard that's designed to make it easy to copy and paste CSV data. This works well for small and medium scale tournaments, but is cumbersome for large ones." +msgstr "" + +#: ../../guide/comparisons.rst:55 +msgid "**Public interface**. Tabbycat can optionally publish the entire draw, as well as current team point standings and results of previous rounds, online. Tabbie2 shows to a logged-in user information about the debate that user is in for that round, but doesn't allow people to check up on people who are not themselves." +msgstr "" + +#: ../../guide/comparisons.rst:57 +msgid "**Position rotation**. Tabbie2 uses an algorithm known as the \"Silver Line algorithm\", which keeps swapping pairs of teams until no further improvement is found. Because it stops at any 'local optimum', this method isn't guaranteed to be the best possible distribution of positions, and for large tournaments it often isn't. Tabbycat instead uses the `Hungarian algorithm `_, an well-known algorithm that finds the (globally) optimal allocation of positions. (One might describe this algorithm, in technical terms, as 'powerful'.) Tabbycat also produces a position balance report, so that in every round you can see which teams have unbalanced position histories." +msgstr "" + +#: ../../guide/comparisons.rst:59 +msgid "**Venue allocations**. Both Tabbie2 and Tabbycat allow for debate venues to be automatically assigned and manually edited. Tabbycat also allows you to specify 'venue constraints' that can automatically match particular participants with their accessibility requirements, or alternatively allow for tournament staff, such as a convenor or chief adjudicator, to be allocated rooms close to the briefing hall or tab room." +msgstr "" + +#: ../../guide/comparisons.rst:61 +msgid "**Ballot entry**. Both Tabbie2 and Tabbycat support entering ballots online ('e-ballots') and entering ballots from paper from the tab room. Tabbie2 was built with e-ballots in mind, while Tabbycat was originally built for tab room staff, and the ballot entry paradigms reflect that. Both are flexible, just a little different—the best way to understand the difference is to try a demo of each. Also, Tabbycat takes note of the order in which speakers in a team spoke (i.e. who was PM and who was DPM), whereas Tabbie2 just records scores." +msgstr "" + +#: ../../guide/comparisons.rst:63 +msgid "As discussed earlier in *User identification*; Tabbie2's e-ballots are tied to unified user accounts, whereas Tabbycat's e-ballots are tied to per-tournament and per-adjudicator 'private URLs'." +msgstr "" + +#: ../../guide/comparisons.rst:65 +msgid "**Break and speaker categories**. Tabbie2 has ESL, EFL and novice markers, which you can enable in a tournament's settings. Tabbycat supports user-defined break and speaker categories, so if your tournament has ESL, EFL, novice or any other form of category, you can define and customise those categories as needed." +msgstr "" + +#: ../../guide/comparisons.rst:67 +msgid "**Adjudicator allocation algorithm**. Both Tabbie2 and Tabbycat use an algorithm to recommend an initial allocation of adjudicators to debates. In principle, they both work by assigning \"costs\" to allocations, and trying to find the minimum-cost assignment. Some notable differences:" +msgstr "" + +#: ../../guide/comparisons.rst:69 +msgid "Tabbie2 uses simulated annealing, which is not guaranteed to be optimal and technically needs to be tuned to be effective (which you're probably not doing). Tabbycat uses the Hungarian algorithm, which guarantees an optimal solution." +msgstr "" + +#: ../../guide/comparisons.rst:70 +msgid "On the other hand, the Hungarian algorithm can't account for relationships between adjudicators on a panel, so adjudicator-adjudicator conflicts aren't considered by Tabbycat's algorithm (though they are highlighted in the interface)." +msgstr "" + +#: ../../guide/comparisons.rst:71 +msgid "Tabbycat's cost function is simpler and more naive. On the other hand, Tabbie2's is more complicated and can be rather opaque (even if you read its source code)." +msgstr "" + +#: ../../guide/comparisons.rst:72 +msgid "Tabbie2 allows for single-gender panels to be charged an additional cost. Tabbycat's algorithm doesn't, but the interface does provide a way to easily check for this visually." +msgstr "" + +#: ../../guide/comparisons.rst:73 +msgid "Tabbie2 automatically calculates the importance of a room based on its bracket (team points). In Tabbycat, debate importance can be assigned for all debates automatically based on on a room's bracket or the quantity of live break categories inside it. Instead of — or subsequent to — automatic classification any importance value can be manually tweaked as desired. These options mean there is a greater flexibility in determining which debates the allocation algorithm should prioritise." +msgstr "" + +#: ../../guide/comparisons.rst:75 +msgid "**Adjudicator allocation interface**. While both interfaces use drag and drop interactions, and allow for color highlights to help identify adjudicators by gender, region, and feedback rating, Tabbycat's allocation interface was designed to be usable on both small screens and projectors, and has a number of extra features that can help inform allocations. These features include:" +msgstr "" + +#: ../../guide/comparisons.rst:77 +msgid "Clashes are shown directly in the interface when they apply, but dragging an adjudicator will also show you the potential conflicts that would occur if they were relocated in a new panel. This can make it much easier to avoid creating new clashes when shifting adjudicators around the draw." +msgstr "" + +#: ../../guide/comparisons.rst:78 +msgid "An inline display of an estimate of whether a team is 'live' for each of their break categories — i.e. whether they are 'safe' (have enough points to break); 'dead' (cannot gain enough points to break); or 'live' (still in contention)." +msgstr "" + +#: ../../guide/comparisons.rst:79 +msgid "'History' conflicts (where an adjudicator has seen a team before, or previously was on a panel with another judge) are displayed so they can be avoided." +msgstr "" + +#: ../../guide/comparisons.rst:80 +msgid "Each adjudicator is present as occupying a particular position (chair, panellist, trainee) rather than having those positions calculated automatically." +msgstr "" + +#: ../../guide/comparisons.rst:81 +msgid "Chairs can be 'swapped' by dragging adjudicators on top of each other, and an 'unallocated' area can be used to view and store adjudicators that have not been allocated." +msgstr "" + +#: ../../guide/comparisons.rst:83 +msgid "**Adjudicator feedback customisation**. Both Tabbie2 and Tabbycat have built-in adjudicator feedback forms, and allow you to specify the questions on the feedback form. Notable differences:" +msgstr "" + +#: ../../guide/comparisons.rst:85 +msgid "Setting up questions is painless on neither system. Tabbycat requires you to use the Edit Database area; Tabbie2 makes you click through a slightly more opaque maze of pages and forms." +msgstr "" + +#: ../../guide/comparisons.rst:86 +msgid "Tabbycat allows for a richer range of types of questions than Tabbie2 does." +msgstr "" + +#: ../../guide/comparisons.rst:87 +msgid "Tabbie2 allows you to specify different questionnaires for team-on-chair, chair-on-panellist and panellist-on-chair. Tabbycat only differentiates between team-on-adjudicator and adjudicator-on-adjudicator." +msgstr "" + +#: ../../guide/comparisons.rst:88 +msgid "Tabbycat gives you more control over who is expected to submit feedback on whom; e.g. whether teams submit on panellists, and whether panellists submit on each other. In Tabbie2, you can effect this with blank questionnaires, but only for the three options listed above." +msgstr "" + +#: ../../guide/comparisons.rst:89 +msgid "Tabbycat can, optionally, automatically incorporate feedback into adjudicator scores using a naive weighted average with the adjudicator base score. This can be disabled by simply setting feedback weight to zero, as some adjudication cores prefer. Tabbie2 has no ability to automatically incorporate feedback." +msgstr "" + +#: ../../guide/comparisons.rst:90 +msgid "Tabbycat produces a \"shame list\" of unsubmitted feedback, which you can optionally publish on the public-facing site to try to incentivise submission." +msgstr "" + +#: ../../guide/comparisons.rst:92 +msgid "(How participants access adjudicator feedback submission is discussed in *User identification* above.)" +msgstr "" + +#: ../../guide/comparisons.rst:95 ../../guide/comparisons.rst:149 +msgid "Other considerations" +msgstr "" + +#: ../../guide/comparisons.rst:97 +msgid "**Offline availability**. If you like, you can also install Tabbycat on your own computer, rather than host it as website on a server. This means that you can use it offline. However installing Tabbycat in this manner will require the (at least brief) use of a command line interface." +msgstr "" + +#: ../../guide/comparisons.rst:99 +msgid "**Cost**. Tabbie2 is free to use. Tabbycat is free to use for not-for-profit, not-for-fundraising tournaments; tournaments for profit or fundraising must make a donation of A$1 per team. In addition, larger tournaments that run on Tabbycat's recommended web host (Heroku) may need to purchase an upgraded database service (the free tier has storage limits) which will cost around ~US$3 to use for the duration of a week-long tournament." +msgstr "" + +#: ../../guide/comparisons.rst:101 +msgid "**Documentation**. Tabbycat has `relatively extensive documentation `_ that can be useful for learning how to use a particular feature or understanding what is happening at a technical level." +msgstr "" + +#: ../../guide/comparisons.rst:103 +#, python-format +msgid "**Hosting location**. Tabbycat recommends using Heroku, an established cloud platform service for deploying web applications. Heroku is in turn hosted on Amazon Web Services (AWS). Both Heroku and AWS are highly reliable and widely used; downtime for both has historically been (at worst) less than 0.05% over an annual period. Tabbie2 is hosted on `Uberspace `_; a pay-what-you-want web hosting service. To the best of our knowledge, uptime statistics are not available." +msgstr "" + +#: ../../guide/comparisons.rst:105 +msgid "**Multi-format support**. If you are interested in tabbing both four- and two- team formats there may be some value in using and learning Tabbycat as it will let you use the same software in both settings." +msgstr "" + +#: ../../guide/comparisons.rst:108 +msgid "Comparison with Tournaman" +msgstr "" + +#: ../../guide/comparisons.rst:111 +msgid "Native app vs web app" +msgstr "" + +#: ../../guide/comparisons.rst:113 +msgid "The crucial strength — and limitation — of Tournaman is that it is a Windows desktop application. Naturally, being a desktop app limits the features it can offer, relative to web apps like Tabbycat or Tabbie2, since it can't offer any online access. On the other hand, working with a desktop app can often be simpler than a web app." +msgstr "" + +#: ../../guide/comparisons.rst:115 +msgid "**Installation**. You'll need to run (or emulate) a Windows machine to run Tournaman. Assuming you're using Windows, Tournaman's installation process is easy and familiar." +msgstr "" + +#: ../../guide/comparisons.rst:117 +#, python-format +msgid "Tabbycat has a simple one-click installation process if you're deploying online (:ref:`to Heroku `). However, if you want to run Tabbycat on your own computer rather than a website, this is substantially more complicated. Local installations of Tabbycat work by having your computer emulate a web server, and while we've tried to make this as accessible as possible, a technical background is definitely helpful for this. Using our :ref:`Docker-based method ` should be simple, but it's not 100% reliable, and if it fails it can be difficult to figure out why. If internet access is available, we recommend running Tabbycat on Heroku." +msgstr "" + +#: ../../guide/comparisons.rst:119 +msgid "**Online features**. Because Tournaman runs fully offline, it naturally can't support many internet-based features: electronic ballots, online publication of draws and live team standings, and integrated tab release. Typically, if you wanted to publish anything online from Tournaman, you'd do so by publishing the files that Tournaman generates locally. In Tabbycat, all of these are built in, so there's a single website for all tab information." +msgstr "" + +#: ../../guide/comparisons.rst:121 +msgid "**Multi-user access**. Tournaman can be configured to allow networked ballot entry, but in order to set it up, you need to be comfortable with basic computer networking. This works best on small isolated networks that you control directly, e.g. a dedicated router set up in the tab room. It's not a great idea to set this up on computers connected to a university-wide network: many IT departments won't permit it, and even if they do, it's insecure, since anyone on the network can access it." +msgstr "" + +#: ../../guide/comparisons.rst:123 +msgid "Tournaman's multi-user access is designed primarily to allow tab assistants to enter data. Key administrative tasks, such as draw generation and adjudicator allocation, must still be done on the computer on which Tournaman is installed. In contrast, web-based systems like Tabbycat and Tabbie2 allow users to login from any internet-connected device to access the functionality permitted by their account. This is often extremely useful if, say, you want to log in to a lectern computer, or have tab assistants work on mobile devices that they have with them." +msgstr "" + +#: ../../guide/comparisons.rst:125 +msgid "If you choose to install Tabbycat offline (rather than on Heroku), it's also possible to have the computer on which the local installation resides serve the website to other computers on the same network. This then permits anyone on the same network to access the \"local\" installation as if it were hosted on the internet. However, like Tournaman, such a configuration requires at least basic networking experience, and for security reasons is only advisable on small isolated networks that you control." +msgstr "" + +#: ../../guide/comparisons.rst:127 +msgid "**Backups and portability**. Both Tournaman and Tabbycat (unlike Tabbie2) store data in a way that is completely accessible to you. Tournaman does this by saving files on your computer's hard drive, while Tabbycat stores data in a SQL database that belongs to you." +msgstr "" + +#: ../../guide/comparisons.rst:129 +msgid "It should be emphasized that in both Tournaman and Tabbycat, actually needing to revert to a backup is extremely rare. Almost always, any glitch or error that breaks the tab can be resolved by editing data directly, without needing to \"roll back\" to a previous state. In Tournaman, this is done by editing the files that it writes to your hard drive (they're just XML files). In Tabbycat, this is done through the \"Edit Database\" area." +msgstr "" + +#: ../../guide/comparisons.rst:131 +msgid "Tournaman's storage of data as XML files makes backups easy, although effort should be made to have backups stored on other computers or the cloud (e.g. on Dropbox) in case the tab computer breaks or is lost. Restoring data from those backups (or transferring the tab to a different computer) is typically a simple process of copying the files back to the original location." +msgstr "" + +#: ../../guide/comparisons.rst:133 +msgid "As for Tabbycat, in online installations, backups can be taken easily using Heroku's `database backup capability `_. However, restoring backups requires you to have the Heroku command line interface installed. In offline installations, PostgreSQL's \"dump\" and \"restore\" commands are recommended, and may require some perseverance to get going reliability, particularly if you don't have prior SQL experience." +msgstr "" + +#: ../../guide/comparisons.rst:135 +msgid "Generally there is no need for data portability when working with an online copy of Tabbycat — the website can be accessed anywhere. However if working with an offline/local copy, a tab can be transferred between machines by creating a backup of the database and restoring it to the other machine's database (doing so requires technical knowledge)." +msgstr "" + +#: ../../guide/comparisons.rst:140 +msgid "**Adjudicator feedback**. Tournaman lets you assign judges rankings, however it does not directly manage or assist the process of collecting judge feedback. As such tab directors generally need to run a parallel feedback system, and then manually copy over changes to an adjudicator's ranking into Tournaman itself. In contrast, Tabbycat has integrated methods for collecting judge feedback that allow it to be more easily issued, collected, viewed, and automatically translated into modifications to an adjudicator's rank." +msgstr "" + +#: ../../guide/comparisons.rst:142 +msgid "**Adjudicator allocation**. Tournaman has a fixed judge ranking scale and (from what we understand) has a relatively fixed procedure for allocating panels according to their absolute ranks. We are unsure about the exact mechanics of how this works, but broad details are `available here `_." +msgstr "" + +#: ../../guide/comparisons.rst:144 +msgid "As with the discussion of allocation interfaces vis-à-vis Tabbie2, there are a number of features in the Tabbycat allocation interface that mean it is more easily used in a collaborative setting and can display additional information to inform draws." +msgstr "" + +#: ../../guide/comparisons.rst:146 +msgid "**Flexibility in draw rules**. As we've said, all major tab systems are WUDC-compliant. But if you want to deviate from WUDC rules, Tournaman has a few more options. Whereas Tabbycat allows you to use intermediate brackets (rather than pull-ups), Tournaman allows you to sacrifice power-pairing integrity for position balance (though this generally isn't necessary to achieve position balance), fold within brackets and avoid teams hitting their own institution. On the other hand, Tabbycat allows you to tune how position balance trades off between teams (which the WUDC constitution doesn't precisely specify)." +msgstr "" + +#: ../../guide/comparisons.rst:151 +msgid "**Stability and development**. Tournaman has been in use for over a decade and is generally considered to be stable and reliable. However, new features are relatively rarely added, and its being a native app means that it doesn't boast as many features as Tabbycat or Tabbie2." +msgstr "" + +#: ../../guide/comparisons.rst:153 +msgid "**Cost**. Tournaman is free to use. Tabbycat is free to use for not-for-profit, not-for-fundraising tournaments; tournaments for profit or fundraising must make a donation of A$1 per team. In addition, larger tournaments that run on Tabbycat's recommended web host (Heroku) may need to purchase an upgraded database service (the free tier has storage limits) which will cost around ~US$3 to use for the duration of a week-long tournament." +msgstr "" + +#: ../../guide/comparisons.rst:155 +msgid "**Availability of source code**. Tournaman's code is closed-source, meaning it is not publicly available. If you do not have any coding experience this is probably not relevant to you, but if you do, having access to the source of Tabbycat can help you understand how the program works and customise it as needed." +msgstr "" + +#: ../../guide/comparisons.rst:158 +msgid "Comparison with hand tabbing" +msgstr "" + +#: ../../guide/comparisons.rst:160 +msgid "Hand tabbing is easy, until it isn't. Traditionally, using a spreadsheet has been the go-to option for smallish tournaments because, hey, you're pretty handy with Excel, right? Making draws in spreadsheets (or on paper) seems like a pretty approachable task; ultimately it's all cells and formulae and numbers unlike the more arcane underpinnings of actual tab software." +msgstr "" + +#: ../../guide/comparisons.rst:162 +msgid "However, hand tabbing does require you to have a good working knowledge of how your format's rules work and how your spreadsheet software of choice can be made to work them. That process might be easy for you, or it might not be. But, either way, we'd like to think that Tabbycat offers a better alternative to hand-tabbing; regardless of how well you can actually hand-tab. The setup costs of creating a copy of Tabbycat are pretty low and you can speed through the process of draw creation, adjudicator allocation, and result entry at a pace. It's still not going to be as fast a spreadsheet for a small tournament, but we think it's getting pretty close. And in exchange for a little speed you get a much stronger guarantee of your draws being correct, options for online data entry, a more comprehensive and shareable final tab, and much more. Give it a shot!" +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/guide/scaling.po b/docs/locale/kk/LC_MESSAGES/guide/scaling.po new file mode 100644 index 00000000000..34e335ec0ce --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/guide/scaling.po @@ -0,0 +1,252 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/scaling.po\n" +"X-Crowdin-File-ID: 1305\n" +"Language: kk_KZ\n" + +#: ../../guide/scaling.rst:5 +msgid "Scaling & Performance on Heroku" +msgstr "" + +#: ../../guide/scaling.rst:7 +msgid "If you expect your Tabbycat site to gain lots of traffic — either because it has lots of participants or will be followed by lots of people online — there are a number of strategies to ensure that it will remain fast despite this attention. This is typically only necessary for very large tournaments that will display information on the public-facing version of your Tabbycat site; and even then only minor amounts of 'scaling' are needed at particular moments. However, if your site does become slow you want to know what to do and how to do it ahead of time in order to prevent disruptions." +msgstr "" + +#: ../../guide/scaling.rst:9 +msgid "By default, a Tabbycat installation runs on Heroku's free tier. This is a resource-constrained environment and improving performance will typically require paying for higher levels of Heroku services. These services are billed on a per-minute (not monthly) basis, meaning that if you make use of any upgrades mentioned below, you will only be billed for the actual duration used — i.e. if an upgrade is listed at $100/month, but you only use it for 4 hours, the final bill will be around $0.50. As such you can make use of high-performing resources just when they are needed, without needing to pay the full monthly price to maintain the resource indefinitely." +msgstr "" + +#: ../../guide/scaling.rst:13 +msgid "This page was largely written before a number of improvements in the ``2.2`` release of Tabbycat that have significantly increased traffic capacity. Its recommendations may be overly cautious given these improvements." +msgstr "" + +#: ../../guide/scaling.rst:17 +msgid "Scaling for performance reasons is a separate issue to that of `upgrading the database capacity `_ of your tab which just provides the ability to store data. That said, typically only tournaments that are large enough to need an upgraded database will be the ones that ever need to consider scaling for performance anyway." +msgstr "" + +#: ../../guide/scaling.rst:20 +msgid "Introduction to Scaling" +msgstr "" + +#: ../../guide/scaling.rst:22 +msgid "Heroku's primary resource is that of a 'dyno'. Each dyno can be thought of as running a copy of Tabbycat. Following the 'many hands make light work' principle, running a greater number of dynos will generally improve the ability of your site to serve lots of pages simultaneously because traffic is divided up amongst all of the available dynos. In normal circumstances most Tabbycat pages on the public site are served by Heroku in under a second; however they can take noticeably longer than that when the quantity of incoming traffic exceeds the capacity of the existing dyno(s) to serve it. In such cases the delay accrues because the excess page loads need to first wait for an available dyno in addition to the standard wait for a page to be processed and transferred to the user." +msgstr "" + +#: ../../guide/scaling.rst:24 +msgid "Thus scaling is almost always a process of increasing *throughput* in order to decrease the chance that any page load needs to wait in order to be served by a dyno. On the flip side, having extra dynos or upgraded dynos won't make Tabbycat itself run any faster in general — they are essentially wasted unless there is sufficient large amounts of traffic that a single dyno cannot serve all of it without creating a queue." +msgstr "" + +#: ../../guide/scaling.rst:26 +msgid "Dynos can be scaled by adding more dynos ('horizontally') or by adding upgraded dynos ('vertically'). In general, horizontal scaling should be the first and most effective strategy — the problem traffic causes is due to *concurrency* or lots of people loading lots of pages all at once. The traffic on Tabbycat sites typically fluctuates a lot, with moments of high intensity clustering around draw releases, round advances, and the final tab release. As such you generally only need to scale your dynos for very short periods of time." +msgstr "" + +#: ../../guide/scaling.rst:28 +msgid "In order to increase the number of dynos you first need to be using at least the **Standard 1X** level of dyno. Once set the Heroku Dashboard will show you a slider that can be used to increase the dyno count. While dynos higher than the **Standard 1X** level may help serve pages a tiny bit faster, having *more* dynos is far more effective than having *upgraded* dynos. Upgrading beyond **Standard 1X** is generally only required if you need additional memory (as described below) or want to use auto-scaling (also described below)." +msgstr "" + +#: ../../guide/scaling.rst:32 +msgid "There should be no need to increase the number of 'worker' dynos. While 'web' dynos are responsible for serving traffic, the worker only handles a few rare tasks such as serving email and creating allocations." +msgstr "" + +#: ../../guide/scaling.rst:34 +msgid "At large tournaments you should always upgrade your existing '**Free**' dyno to a '**Hobby**'-level dyno. This upgrade is crucial as it will enable a \"Metrics\" tab on your Heroku dashboard that provides statistics which are crucial to understanding how your site is performing and how to improve said performance. If you are at all unsure about how your site will perform it is a good idea to do this pre-emptively and keep an eye on these metrics over the course of the tournament." +msgstr "" + +#: ../../guide/scaling.rst:38 +msgid "If pages are not loading it could be due to two things: your site being overloaded with traffic, or a bug in Tabbycat itself. Generally, if you see a generic or Heroku-branded 'application error' page that means it is the former problem, whereas a Tabbycat-branded page indicates the latter." +msgstr "" + +#: ../../guide/scaling.rst:41 +msgid "Scaling Dynos" +msgstr "" + +#: ../../guide/scaling.rst:43 +msgid "Once you have upgraded your dyno to the **Hobby** level, the metrics tab provides a number of graphs that can be used to help identify how your site is performing. The first graph, **Events** provides an overview of any problems that are occurring:" +msgstr "" + +#: ../../guide/scaling.rst:47 +msgid "Red marks, or those labelled *Critical* typically indicate some sort of problem. H13 errors are a good measure of the amount of pages failing to load during heavy traffic, however they can be triggered under normal conditions — you want to check how many are occurring within a given time period and ensure its more than a handful." +msgstr "" + +#: ../../guide/scaling.rst:50 +msgid "Response Time & Throughput" +msgstr "" + +#: ../../guide/scaling.rst:54 +msgid "The response time is the amount of time it takes a dyno to load a page and serve it to your users. Smaller response times are thus good, and long response times (over fifteen seconds) indicate that a site is struggling to serve its content due to a large amount of queueing." +msgstr "" + +#: ../../guide/scaling.rst:56 +msgid "Heroku dynos have a maximum response time of 30 seconds, at which point they will stop serving the request. To users this appears as an error page or as a page that never loads. Thus if you see the graph is at or approaching 30 seconds at any point you need to try and diagnose what is causing this and add more resources to reduce the response time." +msgstr "" + +#: ../../guide/scaling.rst:60 +msgid "You can toggle the percentiles in this graph. Problems are much more severe if it affects the 50th percentile which represents a site that is probably not loading for the majority of its users. There are also a couple of Tabbycat functions (like automatic adjudicator allocation) that naturally take 10-20 seconds which means that the maximum or 99th percentile metrics are not very reflective of general traffic." +msgstr "" + +#: ../../guide/scaling.rst:62 +msgid "Closely related to this is the **Throughput** graph (further down) which shows how many pages your site is serving per second. Normally this is not particularly interesting, however note that the red part of the bar graph shows the amount of failed page requests. Like the **Response Time** graph, this can indicate issues with the site — normally this red portion should be well below 1rps (and ideally 0rps). If it is above 0.5 it represents a site that is producing a significant number of failed page loads." +msgstr "" + +#: ../../guide/scaling.rst:64 +msgid "You can verify if pages are not being served to users by checking the **Events** graph and looking for H12 errors, although occasionally they are not reported properly. A large amount of H13 errors can also be a cause for concern." +msgstr "" + +#: ../../guide/scaling.rst:67 +msgid "Dyno Load" +msgstr "" + +#: ../../guide/scaling.rst:71 +msgid "This graph shows how well your dynos are being utilised. It is scaled relative to the total number of dynos you are running (or have run previously). So if you have 10 dynos and the bar graph is near the '10' this shows that each dyno is being utilised 100% (either on average over a 1-minute period or as the maximum use over a 1-minute period)." +msgstr "" + +#: ../../guide/scaling.rst:73 +msgid "If this bar graph is hitting the top it will usually mean that a site that is slow or failing to load pages — if each dyno is busy it can't serve a new page until it is finished. This issue can often compound, with more traffic coming in than it is possible to serve and clear." +msgstr "" + +#: ../../guide/scaling.rst:75 +msgid "If your average, rather than maximum, dyno load is approaching the upper limit of however many dynos you are running now (remember the y-axis will often exceed however many dynos you are currently running) that is a very good sign that you should increase the quantity of dynos being run. Continue adding dynos and evaluate how this effects load so that the bar is not hitting its limit." +msgstr "" + +#: ../../guide/scaling.rst:77 +msgid "If you are consistently needing to scale things (or having previously had issues and are expecting a very heavy burst of traffic) it may be worth upgrading to the **Performance-M** dyno type, which will then allow you to enable the *Auto-scaling* feature. This will automatically add dynos as needed to cope with traffic, and remove them when they become unnecessary. This is very effective; however, note that this dyno-type is $250/month per dyno and will self-add dynos (within an upper limit you can specify). While this is not a huge price on a per hour/minute basis (even running 10 for an hour is only $4) you definitely want to ensure you keep a close eye on it and turn it off when it is not necessary. Note that it also tends to be quite aggressive in how many dynos it 'thinks' you need — you may want to increase the default response time threshold to prevent it scaling so quickly." +msgstr "" + +#: ../../guide/scaling.rst:80 +msgid "Memory Usage" +msgstr "" + +#: ../../guide/scaling.rst:84 +msgid "It is very rare that Tabbycat sites will hit the memory limits of the Free or Hobby level dynos — its almost always hovering around 256MB of the (standard dyno) limit of 512MB. However, if the graph is approaching the dashed line you may want to first restart the dynos (in the *More* dropdown in the upper-right) and see if that resolves it." +msgstr "" + +#: ../../guide/scaling.rst:86 +msgid "You can also confirm that memory limits are causing the app to fail by checking for the presence of R14 errors in the Events chart. If your site continues to come very close to that memory limit you will want to upgrade your dynos to the higher level dynos which have increased memory." +msgstr "" + +#: ../../guide/scaling.rst:89 +msgid "Alerts" +msgstr "" + +#: ../../guide/scaling.rst:91 +msgid "If the site is really struggling to perform its usually relatively obvious. However, if you want to be pre-warned of this, or just ensure things are as fast as possible, you can use the \"Configure Alerts\" feature on the Metrics page to receive emails when things are getting slow. We would recommend creating a Response Time Threshold warning of ``15000ms`` and a Response Requests Percentage Threshold of ``5%``." +msgstr "" + +#: ../../guide/scaling.rst:94 +msgid "Understanding Caching" +msgstr "" + +#: ../../guide/scaling.rst:96 +msgid "When a page is 'cached' it means that Tabbycat has stored a copy of the final output of the page. It can then send that copy directly to a user who is loading that page without needing to go through the normal process of fetching the data from the database, running any calculations, and formatting the results. Pages that are cached will serve quickly — if a page is taking more than a few seconds to load it usually means that page has not been cached (or your site is having too much traffic to serve pages quickly in general). The downside is that changes to the underlying data won't update until the cache has 'expired' and is regenerated. So, for example, a cached copy of the draw will not immediately reflect change to panels and a newly-release motion or tab page will not show up in the menu immediately." +msgstr "" + +#: ../../guide/scaling.rst:98 +msgid "By default Tabbycat caches public pages according to three levels: a 1-minute timeout, a 3.5-minute timeout, and a 2-hour timeout. The only pages on the 2-hour timeout are those that come with a full tab release — such as speaker standings, the motions tab, etc. Public pages that need to update quickly, such as the draw and homepage, are on the 1-minute timeout to ensure data is up to date. Public pages that update less frequently such as Standings, Results, Participants, and Breaks are on the 3.5-minute timeout." +msgstr "" + +#: ../../guide/scaling.rst:100 +msgid "Caching means that a Tabbycat site should actually perform *faster* when it is being viewed by many people at once, as the caches are constantly up-to-date and can be used to serve the majority of requests. When there is less traffic the caches are more likely to be regenerated each time someone goes to a page resulting in slower page loads. Most often performance problems come when a popular page, such as a newly-released draw gains a large amount of traffic suddenly (such as by people constantly refreshing the draw). If the page hasn't finished caching it has to do a full page calculation for each of those new loads, which will spike the amount of resource use until the page load queue is cleared." +msgstr "" + +#: ../../guide/scaling.rst:102 +msgid "One way to help mitigate this is to try and load those pages first yourself to ensuring the cache is populated before other people access it. To do so you would generally open a new private browsing tab, and navigate to the specific page(s) immediately after you have enabled them. This may require going to the URL directly rather than relying on the homepage or menu (which may not have been updated to show the new information). In the case of draw releases, this can also be mitigated by not release online draws until they have been first shown on a projector (so that people aren't trying to get draw information ahead of time)." +msgstr "" + +#: ../../guide/scaling.rst:104 +msgid "You can also increase the 1-minute timeout for the pages that are popular during the in-rounds, by going to the **Settings** section of your Heroku dashboard, clicking *Reveal Config Vars*, and creating a new key/value of ``PUBLIC_FAST_CACHE_TIMEOUT`` and ``180`` (to set the timeout to be 3 minutes i.e. 180 seconds). This should only be necessary as a last resort. Turning off public pages is also an option." +msgstr "" + +#: ../../guide/scaling.rst:106 +msgid "If you ever need to clear the cache (say to force the site to quickly show an update to the speaker tab) you can install `Heroku's Command Line Interface `_ and run the following command, replacing ``YOUR_APP`` with your site's name in the Heroku dashboard::" +msgstr "" + +#: ../../guide/scaling.rst:111 +msgid "Postgres Limits" +msgstr "" + +#: ../../guide/scaling.rst:113 +msgid "The free tier of the Postgres database services has a limit of 20 'connections'. As with Redis, it is rare that a Tabbycat site will exceed this limit; most Australs-sized tournaments will see a maximum of 12 connections at any point in time." +msgstr "" + +#: ../../guide/scaling.rst:117 +msgid "You can monitor this in your Heroku Dashboard by going to the **Resources** tab and clicking on the purple Postgres link. The **Connections** graph here will show you how close you are to the limit. The first tier up from the 'free' Hobby tiers (i.e. ``Standard-0``) has a connection limit of 120 which can be used to overcome these limits if you do encounter them." +msgstr "" + +#: ../../guide/scaling.rst:120 +msgid "Mirror Admin Sites" +msgstr "" + +#: ../../guide/scaling.rst:122 +msgid "If you *really* want to be safe, or are unable to resolve traffic issues and unable to quickly complete tasks on the admin site, it is possible to create a 'mirror' of the tab site just for admin use. This site can be configured to share the same database as the primary site — meaning it is in effect always identical — but because it is at a separate URL it won't have to respond to public traffic and so can't be swamped with a large page load queue." +msgstr "" + +#: ../../guide/scaling.rst:124 +msgid "This requires some technical knowledge to setup and hasn't been rigorously tested. It works fine in our experience but we haven't tested it extensively. If using this make sure you backup (and now how to restore backups) before setting one up." +msgstr "" + +#: ../../guide/scaling.rst:126 +msgid "To do so you would deploy a new copy of Tabbycat on Heroku as you normally would. Once the site has been setup, go to it in the Heroku Dashboard, click through to the **Resources** tab and remove the Postgres and Redis Add-ons. Using the `Heroku Command Line Interface `_ run this command, substituting ``YOUR_APP`` with your *primary* tab site's name (i.e. the app that you had initially setup before this)::" +msgstr "" + +#: ../../guide/scaling.rst:130 +msgid "Here, make a copy of the ``DATABASE_URL`` and ``REDIS_URL`` values. They should look like ``postgres://`` or ``redis://`` followed by a long set of numbers and characters. Once you have those, go to the *Settings* tab of the Heroku dashboard for your *mirror* tab site. Click **Reveal Config Vars**. There should be no set ``DATABASE_URL`` or ``REDIS_URL`` values here — if there are check you are on the right app and that the add-ons were removed as instructed earlier. If they are not set, then add in those values, with ``DATABASE_URL`` on the left, and that Postgres URL from earlier on the right. Do the same for ``REDIS_URL`` and the Redis URL. Then restart the app using the link under **More** in the top right." +msgstr "" + +#: ../../guide/scaling.rst:132 +msgid "Once you visit the mirror site it should be setup just like the original one, with changes made to one site also affecting the other as if they were just a single site." +msgstr "" + +#: ../../guide/scaling.rst:135 +msgid "Estimated Costs" +msgstr "" + +#: ../../guide/scaling.rst:137 +msgid "As a quick and rough benchmark, here is a list of typical prices you would encounter if scaling to meet the performance needs of a high-team-count high-traffic tournament at the approximate scale of an Australs (~100 teams) or above. This is a probably an overly-conservative estimate in that it is based on tournaments run on the ``2.1`` version of Tabbycat. Versions ``2.2`` and above should perform dramatically better and thus have less need to scale using Standard and Performance dynos." +msgstr "" + +#: ../../guide/scaling.rst:139 +msgid "1x ``Hobby Basic Postgres Plan`` ($9/month) run all day for 14 days = ~$4" +msgstr "" + +#: ../../guide/scaling.rst:140 +msgid "A tournament of this size will require an upgraded database tier for the time when you are adding new data; i.e. during registration and rounds. Once the tab is released (and no further data changes needed) however you can downgrade it back to the ``Hobby Dev`` tier." +msgstr "" + +#: ../../guide/scaling.rst:141 +msgid "1x ``Hobby Dyno`` ($7/month each) run all day for 7 days = ~$2" +msgstr "" + +#: ../../guide/scaling.rst:142 +msgid "As recommended, 1 hobby dyno should be run as a baseline in order to see the metrics dashboard; but this can be downgraded a day or so after the tab has been released and traffic is sparse." +msgstr "" + +#: ../../guide/scaling.rst:143 +msgid "3x ``Standard 1X Dyno`` ($25/month each) run 10 hours a day for 4 days = ~$4" +msgstr "" + +#: ../../guide/scaling.rst:144 +msgid "This higher quantity of dynos should only be necessary during traffic spikes (i.e. draw releases, immediately after round advances, and tab release) but unless you want to be constantly turning things on/off its usually easier just to upgrade them at the start of each day of in-rounds (or when the tab is published) and downgrade them at the end of each day. As mentioned earlier, you should occasionally check the *Dyno Load* in the Metrics area and adjust the number of dynos as needed." +msgstr "" + +#: ../../:1 +msgid "``Autoscaled Performance M Dynos`` ($250/month each) average of 5 run for 1 hour = ~$2" +msgstr "" + +#: ../../guide/scaling.rst:146 +msgid "For just round 1 it is a good idea to upgrade to the ``Performance M`` tier so you can enable auto-scaling and thus have the site automatically adjust the number of dynos to the amount of traffic it's getting (rather than having to guess the number of dynos needed ahead of time). Doing so ensures that the first round runs smoothly and means that you can then review the Metrics graphs to see what your 'peak' load looks like and resume using whatever quantity of ``Standard 1X Dyno`` will accommodate this peak load in future rounds." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/guide/tournament-logistics.po b/docs/locale/kk/LC_MESSAGES/guide/tournament-logistics.po new file mode 100644 index 00000000000..6cc1f0285c8 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/guide/tournament-logistics.po @@ -0,0 +1,1394 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/tournament-logistics.po\n" +"X-Crowdin-File-ID: 1307\n" +"Language: kk_KZ\n" + +#: ../../guide/tournament-logistics.rst:5 +msgid "Tournament Logistics" +msgstr "" + +#: ../../guide/tournament-logistics.rst:7 +msgid "Unlike the rest of our documentation, this section does not deal with particular features or technical concerns with Tabbycat itself. Instead it is an attempt to outline the logistics of tab direction and aims to be of general relevance for people running major tournaments. At present, it is organised by the various ‘stages' of tabbing a tournament, and most of the content takes the form of check-lists or comments designed to highlight and provide guidance on common issues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:9 +msgid "Whilst it aims for general relevance, we should note that this guide is relatively opinionated and mostly written from the perspective of people whose primary experience is tabbing at Australasian tournaments using Tabbycat. That said, we welcome feedback and additions that can account for different format and regional considerations. In the future, if the guide becomes more general and more extensive, it could be spun off into a separate project." +msgstr "" + +#: ../../guide/tournament-logistics.rst:11 +msgid "As with the rest of our documentation, this page is source-available and we welcome :ref:`feedback and contributions `. Note also that we've formatted this guide a single page to reduce clutter, but the sub-sections in the sidebar can be used to help navigate across sections." +msgstr "" + +#: ../../guide/tournament-logistics.rst:14 +msgid "Planning and Preparation" +msgstr "" + +#: ../../guide/tournament-logistics.rst:16 +msgid "This section aims to outline concerns that occur in the months before the tournament: after you have agreed to help with tabbing and while the organising committee and adjudication core are deciding how they want to run key processes such as registration and feedback. It is organised in terms of who you should coordinate with in order to plan for a well-tabbed tournament." +msgstr "" + +#: ../../guide/tournament-logistics.rst:19 +msgid "General Notes" +msgstr "" + +#: ../../guide/tournament-logistics.rst:21 +msgid "You should avoid being the sole person responsible for that tab unless it is a small tournament. There are many cases where you want to be in several places at once and the easiest way to accommodate that is by having co-directors or trusted assistants. Few tab decisions require a single source of authority; it is far better to have multiple people available to share responsibilities around." +msgstr "" + +#: ../../guide/tournament-logistics.rst:23 +msgid "In a similar manner, it is worth considering how you can use the tournament to help train other people. Typically, knowledge of tabbing is concentrated in relatively few people and gained mostly through on-the-ground experience; meaning that every tournament should be approached as rare opportunity to help spread knowledge about tabbing more widely in a circuit. Consider reaching out to institutions or the tournament as a whole to see if they have anyone who would be interested in helping out." +msgstr "" + +#: ../../guide/tournament-logistics.rst:26 +msgid "Convenors" +msgstr "" + +#: ../../guide/tournament-logistics.rst:28 +msgid "It might sound obvious but it will pay to have a very thorough conversation about the tab process (more or less the contents of this document) with the convenors a few months out from the tournament. Do this even if you know the convenors to be knowledgeable or experienced debaters. Key concerns are:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:32 +msgid "Whether internet access will be available and whether participants can be presumed to have smart phones. This has an obvious impact on how online feedback, ballots, and draw release is done. Note that Eduroam is not necessarily a reliable guarantee of access; many participants will come from universities who don't have access to it or will need to follow a setup process that is onerous or requires them to be at their home institution." +msgstr "" + +#: ../../guide/tournament-logistics.rst:33 +msgid "What kind of room is the tab room going to be? Is it possible to optimize its placement when the bookings for rooms are made? Key details include: How large is it? Does it have a sufficient amount of desk space (for data entry)? Does it have a good projector (for allocations)?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:34 +msgid "If they have the resources, having an adjacent room available for just the adjudication core to use can also be useful. While you want to work closely with the adjudication core, they may want to discuss sensitive information (motions, equity) in a space without volunteers present; or they might at times get in the way of things, such as by eating lunch in the middle of a frenetic ballot entry process." +msgstr "" + +#: ../../guide/tournament-logistics.rst:35 +msgid "Ensure that plans are made for food to be brought to tab room. Otherwise you will starve and the adjudication core will swan off to lunch. Having regular access to caffeine can also be similarly essential to some adjudication and tab teams." +msgstr "" + +#: ../../guide/tournament-logistics.rst:36 +msgid "What kind of printers will be available? Can the tournament buy/borrow one? This is obviously a key consideration for pre-printed ballots. Also try and ensure there are back-up printing options if possible. Clearly stipulate your need for ink and paper; and try and opt for a black/white laserjet, over an inkjet, if possible." +msgstr "" + +#: ../../guide/tournament-logistics.rst:37 +msgid "What kind of volunteers will be available? How many, and what is their experience level? As a very broad recommendation, you probably want around 1 volunteer for every 10 rooms, assuming volunteers are performing a dual role as data-enterers and ballot-collectors." +msgstr "" + +#: ../../guide/tournament-logistics.rst:38 +msgid "Will the tournament make a donation to whoever maintains the tabbing software you are using? Depending on the license of your tabbing software and the nature of your tournament (for profit vs not for profit) this may be required. Also, if your tab is self-hosted or independently hosted (such as how Tabbycat is generally deployed on Heroku) accounting officers should also be aware that there will be some costs associated with hosting the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:39 +msgid "You should also ensure that people helping with the tab are fairly compensated for their flights, registration, etc and that any volunteers are invited along to socials and/or given some other recompense." +msgstr "" + +#: ../../guide/tournament-logistics.rst:40 +msgid "Will Swing teams be available? You should plan to have at least one more than you need. For example, with 39 teams, you should have both an 40th swing team to fill in the draw, and the option to easily assemble an 41st swing team in case a team goes missing. At very large tournaments (say over 150 teams) you should plan for even more swing team capacity — it's not unheard of for say three teams to vanish all in a single round. In these cases, you should try and ensure that the swing teams are always ready to go — i.e. that that they are pre-formed, you have a clear communication channel with them, and that they distributed/waiting near the debating rooms so they can fill in at a moment's notice (often you will only find out that teams are missing right as debates are scheduled to start)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:41 +msgid "How will critical information be communicated to participants? Consider that in general, Facebook announcements do not reach many people, although paying to boost the posts is often a very cheap way of dramatically raising their effectiveness. In particular also ensure or check how you manage to get in touch with teams or adjudicators who go missing: will they have reliable phone numbers? Can you get a list of institutional reps who can be reliably called? You want to have processes in place for chasing up adjudicators who do things such as make scoring mistakes as soon as possible in order to minimise delays." +msgstr "" + +#: ../../guide/tournament-logistics.rst:42 +msgid "How will critical information be shared between the tab team, adjudication core, and logistics/convening teams? For smaller/medium sized tournaments a group chat augmented by phone calls (assuming everyone knows everyone else's number) can be sufficient, but even then, you need to ensure that any critical information conveyed privately (i.e. in a call or in person) is conveyed back to the group channel. At very large tournaments (or if you have the resources) walkie-talkies are an excellent way to manage communication — just make sure you have (ahead of time) reserve the different channels to a distinct and known purpose (i.e. general discussion; just the tab team & adjudication core; just convenors)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:43 +msgid "As part of this it is ideal if the organising committees can procure local SIM cards for members of the tab team and adjudication core who are not local. These should be relatively generous in their plans — you don't want to worry about running out of minutes or data if on a critical call or using a hotspot to make critical allocation adjustments." +msgstr "" + +#: ../../guide/tournament-logistics.rst:44 +msgid "At major tournaments you want to arrive at least a day before check-in; and ideally whenever it is that the adjudication core is arriving for their own preparation." +msgstr "" + +#: ../../guide/tournament-logistics.rst:47 +msgid "Registration" +msgstr "" + +#: ../../guide/tournament-logistics.rst:49 +msgid "Having effective registration systems and processes is one of the most important aspects of preparing to tab a large tournament. Bad registration data *will* make setting up a tab extremely painful and introduces the chance for mistakes or inconsistencies in tab data that will only come to light in the first round. As such:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:53 +msgid "You should check in with the registration team and see what they plan to do as soon as possible after being brought on-board. As part of this you should make it clear that you should be consulted on any decisions they make about what data to collect, when to collect it, and how to collect it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:54 +msgid "Registration data should be collected into a shared and live-updating source, such as a Google Sheet. There should be as few canonical sources (ideally one) of data as possible; i.e. there should be a single sheet for individual details, a single sheet for team details, etc; and these should be maintained all the way through to check-in. For both you, and the registration team, having multiple conflicting or outdated copies of data will lead to errors. However, for the registration team these errors can usually be easily sorted out in person (at check-in) but for you that information always needs to be reliable and up to date otherwise what is imported into the tab cannot be trusted." +msgstr "" + +#: ../../guide/tournament-logistics.rst:56 +msgid "At this point our recommendation is to, in most cases, not use specialised registration systems as they are somewhat less intuitive and less flexible than setting up good Google Forms/Sheets." +msgstr "" + +#: ../../guide/tournament-logistics.rst:58 +msgid "If, for whatever reason, the registration team are not able to give you 'live' access to the data they have on hand, make sure they send you copies of it (even if it is incomplete) well before you need it to setup the tab itself. You want to be able to verify what data is actually being collected and how it is formatted well in advance." +msgstr "" + +#: ../../guide/tournament-logistics.rst:60 +msgid "You should have access to *all* of the data collected; often registration teams will make (false) assumptions about what you do or do not need. It is better to have everything and then selectively filter out what is not relevant to the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:61 +msgid "It is critical that the registration team should check in with you before setting up forms asking for information. Every additional time that registration asks for data there will be less and less participation in the process, so you should aim to gather all that you need at the first opportunity; typically during the canonical individual registration phase. Particular information that should not be overlooked for tab purposes:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:63 +msgid "Individual registration should ask whether a participant is a speaker or an adjudicator." +msgstr "" + +#: ../../guide/tournament-logistics.rst:64 +msgid "If that person is a speaker it should ask for their team name/number (reconciling these later is painful)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:65 +msgid "Individual registration should ask for any accessibility requirements of both adjudicators and speakers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:66 +msgid "Individual registration should ask for the previous institutions of both adjudicators and speakers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:67 +msgid "Individual registration should ask for the email addresses of all participants." +msgstr "" + +#: ../../guide/tournament-logistics.rst:68 +msgid "Individual registration should ask for the phone numbers of adjudicators." +msgstr "" + +#: ../../guide/tournament-logistics.rst:69 +msgid "Individual registration should ask for the gender identity of both adjudicators and speakers. Even if you are not *planning* on using this to inform processes, such as adjudicator allocations, you want it on hand in case plans change." +msgstr "" + +#: ../../guide/tournament-logistics.rst:71 +msgid "Independent adjudicators and the adjudication core should follow normal registration procedures. Having them not go through the normal process makes it easy to overlook their data or not get a complete picture of it. For example, adjudication core members might forget to nominate conflicts, or neglect to provide their previous institutions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:72 +msgid "You should confirm how the registration team plans to manage how people check-in to the accommodation in particular. Check-in is when issues with registration data come to light and it is vital that these changes are noted and recorded. Some form of validation of registration data *must* occur at check-in — in particular all adjudicators should be (individually) verified as present and all members of a team should confirm their presence along with their team's name/number and speakers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:73 +msgid "After check-in you need to have a definitive list of who is physically present at the tournament so you can run a first-round draw with confidence. Registration must know this and have processes in place for recording people individually as they arrive, and for that data to filter back to you." +msgstr "" + +#: ../../guide/tournament-logistics.rst:75 +msgid "If you are using Tabbycat's secret links for feedback or ballots these are best distributed at check-in. The registration team should know about this, prepare for it, and be provided with the pdfs to print and distribute." +msgstr "" + +#: ../../guide/tournament-logistics.rst:78 +msgid "Adjudication cores" +msgstr "" + +#: ../../guide/tournament-logistics.rst:80 +msgid "If there is a group chat for the adjudication core you probably want to be part of it; even if you don't contribute much. There are lots of small things that end up being discussed without consideration of how they will affect tab issues and it is also a chance to get to know — ahead of time — the people you will be working with closely over the tournament." +msgstr "" + +#: ../../guide/tournament-logistics.rst:82 +msgid "Members of the adjudication core will often leave tab-relevant decisions until the days prior to the first round or whenever it is that they can first meet with the tab team in person. This often wastes critical time and forces rushed decisions. Many considerations can instead be raised and discussed prior to the tournament. These could include:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:86 +msgid "How to manage the feedback process. This typically benefits from foresight and pre-planning, rather than being decided on the ground. Key considerations are:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:90 +msgid "Who submits feedback on whom? Do trainees do so on their chairs? Do panellists do so on each other? (Presuming your tab software supports these options)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:91 +msgid "Is feedback mandatory? If so, how will this be enforced exactly?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:92 +msgid "How much weight does each adjudicator's test or CV score have over the course of the tournament? By Round 3, or by Round 8, what proportion of an adjudicator's score is derived from their test and what proportion is derived from their feedback?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:93 +msgid "Will the adjudication core tweak an adjudicator's score to 'artificially' increase or decrease it to where they think it should be. For example, this could be done by adjusting a test/CV score upwards in order to compensate for bad feedback that (for whatever reason) they did not think was reliable or fair? Depending on your adjudication core's preferences and your tab software's allowances it is not unheard of for them to maintain full manual control over scores by reading/processing feedback results but only ever manually adjusting scores as a result (rather than having it automatically adjust due to the ratings in the feedback)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:94 +msgid "What is the score scale going to be? What do each of those numbers represent? How will this be communicated to participants so they can score accurately and consistently?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:95 +msgid "What kind of questions will feedback forms ask? If using :ref:`customisable printed or online forms ` consider how these questions be used tactically to identify key issues (say discriminatory scoring) or more easily identify people who should be promoted/demoted. While managing feedback is often a messy and subjective task, it can often be improved by being more targeted in what data it collects." +msgstr "" + +#: ../../guide/tournament-logistics.rst:96 +msgid "How will feedback be monitored, and how will this information feed back into the scores and allocations? At large tournaments it is not unusual for an adjudication core member to sit off each round to review and process feedback — there isn't really a good stretch of available time to do so otherwise. However even if doing this note that there are communication issues to manage here, as each adjudication core member will each end up with a relatively incomplete overview of the total volume of feedback." +msgstr "" + +#: ../../guide/tournament-logistics.rst:98 +msgid "If possible it's nice to plan in advance for when the tab will be released (i.e. on the last night; the day after; etc.) as this often gets left to the last minute to be decided. Also the possibility of whether people can redact themselves from tabs should be raised, as that might be useful to inform participants of during online registration or tournament briefings. In a similar fashion, some adjudication cores might also want to limit speaker tabs to only a certain number of places, particularly at novice-centric tournaments." +msgstr "" + +#: ../../guide/tournament-logistics.rst:99 +msgid "How to handle conflict collection; see the following section." +msgstr "" + +#: ../../guide/tournament-logistics.rst:100 +msgid "How to handle the submission of scoresheets and feedback, primarily in terms of which parts of the process should be done online and offline. Some adjudication cores will have strong thoughts here; others will happily follow whatever you recommend. Key considerations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:104 +msgid "Paper-based feedback is much more taxing to enter than paper-based scoresheets — typically there is much more of it; it asks for a greater variety of data; and it is submitted at inconsistent times. The one advantage is that it is easier to make feedback mandatory with paper, as you can ensure all teams and adjudicators have done so prior to leaving the room. Thus, in most cases, a good online feedback system is much more preferable than paper. If using paper be aware that you will need a lot of volunteers to ensure the feedback is collected promptly. If internet or smartphone access is limited at your tournament it is probably best to accommodate both paper-based and online methods." +msgstr "" + +#: ../../guide/tournament-logistics.rst:105 +msgid "The consequences of having incorrect or missing ballots are much more severe than for feedback. As such major tournaments use paper ballots in some form as the final stage in a checking process to ensure that the results of a debate are definitely correct — adjudicators will always make mistakes and while digital ballots can catch/prevent some types of error (i.e. a low point win) they can't catch others (assigning the wrong scores to the wrong speaker, nominating the wrong winning team, etc.). Assuming your software supports both options, the choice is thus whether to use a hybrid approach (online submission followed by paper verification) or to rely entirely on paper. A fully-paper based approach will be simpler for both yourself and adjudicators, and can be almost as efficient if you have a sufficient number of volunteers. In contrast, a hybrid approach will be potentially much faster if you are short of volunteers and if you expect that almost all adjudicators will have access to the internet, a smartphone, and are capable of following instructions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:107 +msgid "In some circuits, and when using some particular tab software, tournaments might run a 'dual tab' where there is a second, independent, version of the tab software and database into which all data is *also* entered. From what we understand this performs a dual role, as both a backup system that can take over from the main one (say if internet access drops) and as a way of verifying ballot data (by comparing draws or databases between software rather than having a two-step entry process operating for a single tab). This practice seems obsolete when working with modern web-based tab software that is capable of backing up and restoring to an offline system, but we would like to hear your feedback if you think that is not the case." +msgstr "" + +#: ../../guide/tournament-logistics.rst:110 +msgid "Conflicts/Clashes (registration/equity/adjudication core)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:114 +msgid "There should always be a *single* means of collecting conflicts (i.e. a single Google Sheet/Form) and all conflicts should go through it. Because the nature of this data is sensitive and evolving, there must be a single location where it can be easily captured and verified as having been entered into the tab. Conflicts data should never be spread across a loose collection of emails/personal messages/spreadsheets; otherwise keeping track and knowing which ones have been entered into the system will be painful and error prone. Get in touch in with equity and registration in advance and make it clear that they should not make their own conflicts form; or if they've already made one, make sure you adopt it and have access/control of it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:115 +msgid "Conflicts should, ideally, *only be collected after a participants list has been published* and requests for people to nominate conflicts should also be sent out as few times as possible. Most people will only fill this form in once, so it is vital that when asked to nominate conflicts they have as much information as they need to do so comprehensively. Without a public and reasonably-complete participants list people will either nominate conflicts that are not present (wasting your time in cross-referencing data) or not realise someone is present and raise the conflict at a latter, less opportune time." +msgstr "" + +#: ../../guide/tournament-logistics.rst:116 +msgid "In some circuits only adjudicators are allowed to nominate conflicts because of the risk of teams using conflicts 'tactically' to block adjudicators that they think are terrible judges. However, having teams nominate conflicts can be useful: adjudicators may overlook a conflict or there may be equity-based reasons that a conflict is non-symmetrical. This trade-off can be handled in two ways:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:120 +msgid "Not allow teams to nominate conflicts during registration; but allow them to approach equity teams before, or during, the tournament to identify the conflict. Equity can then raise the issue with the tab team and adjudication core and it can be added to the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:121 +msgid "Allow teams to nominate conflicts during registration; but have the adjudication core review the data for 'tactical' conflicts. These are usually relatively easily identified, although can be overlooked if the adjudication core does not know the participants or their region/circuit well. The adjudication core can then override the conflict, discuss it with the teams, or raise it with equity. However, if going down this route, the tab team should discuss with the adjudication core how to manage this process well-ahead of the tournament, and ensure they actually do review the conflicts prior to the first round — otherwise it will likely surface during an allocation and become a major distraction during a critical time period." +msgstr "" + +#: ../../guide/tournament-logistics.rst:123 +msgid "As mentioned in the previous section, the adjudication core (possibly with equity) should provide some degree of guidance about what kinds of debating-related conflicts should be provided. People should be able to self-define what constitutes a conflict, but there are circumstances where they are overly cautious and can be reassured that it is not necessary. The opposite problem may occur also, where many people may have a very high bar for what defines a conflict which could lead to perceptions of bias from other participants." +msgstr "" + +#: ../../guide/tournament-logistics.rst:124 +msgid "Generally, it is preferable that each form nominates a single conflict, and people are asked to re-submit for each conflict they are adding." +msgstr "" + +#: ../../guide/tournament-logistics.rst:126 +msgid "To save you some hassle the conflict form should make this very clear (i.e. that one conflict = one submission; ensure the field labels reinforce this)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:127 +msgid "The conflict form should also make clear that you shouldn't use the form if you don't have any conflicts (i.e. people will submit 'None', 'None' etc)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:128 +msgid "The conflicts form should also make clear that adjudicator's don't need to submit a conflict for their current institution and that team's don't need to submit conflicts for adjudicators from their current institution." +msgstr "" + +#: ../../guide/tournament-logistics.rst:130 +msgid "In poorly-structured conflict forms, identifying exactly who is doing the conflicting and who is being conflicted is a nightmare. You want to structure the questions to minimise this ambiguity. A form should definitely ask:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:132 +msgid "Who are you (the conflict-specifier)?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:133 +msgid "Are you a team or an adjudicator?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:134 +msgid "Which institution are you from?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:135 +msgid "If part of a team, which team are you in?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:136 +msgid "Who are you conflicting?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:137 +msgid "Are they a team or an adjudicator?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:138 +msgid "Which institution are they from?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:139 +msgid "If they are in a team, which team is it?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:140 +msgid "Have previously attended any other institutions; or have other reasons to conflict entire institutions? If so, specify those institutions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:142 +msgid "Note that this last question can be tricky to deal with; good tab software will let you conflict an adjudicator from an institution other than their own, but it is harder to mark an individual team as having members previously attending another institution. These circumstances are rare and typically very 'soft' conflicts but are probably best handled by creating individual conflicts between that team and adjudicators from the previous institution in question." +msgstr "" + +#: ../../guide/tournament-logistics.rst:143 +msgid "Adjudication core members will often not nominate their own conflicts; presuming that they will notice and correct them during allocations. They often forget or overlook this. Their conflicts should be entered as per normal." +msgstr "" + +#: ../../guide/tournament-logistics.rst:146 +msgid "Scheduling (convenors / venue organisers)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:148 +msgid "One of the easiest ways to have things run late is to set an unrealistic schedule. As much as possible the timing allocated to rounds (inclusive of events such as lunch or committee forums) should conform to an even distribution of how long it takes to process results and create a draw/allocation — you don't want to be in a position where particular rounds have too much time and others too little time to spend on allocations and other crucial tasks. This is something that should definitely be working on in conjunction with convenors and other critical parties before they lock down timing details with food suppliers or the operators of the debating venues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:150 +msgid "Note also that in most circumstances it is preferable to create a draw and allocation for the first day of the next round at the night before. This time should be built in to the schedule of the previous day, and raised with the adjudication core so they don't expect to be able to immediately depart after the day's rounds are done." +msgstr "" + +#: ../../guide/tournament-logistics.rst:152 +msgid "Below is the time taken within each round at Australs 2017. For context, this was neither a particular efficiently or inefficiently tabbed tournament. Notable details:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:156 +msgid "The tournament was ~40 rooms each round and had access to 3-6 runners and data enterers. Paper ballots were pre-printed and distributed by runners to rooms prior to the debates starting, then collected sometime after the 15 minute deliberation period. Feedback was submitted online. At Australs all adjudicators (excluding trainees) submit their own ballots." +msgstr "" + +#: ../../guide/tournament-logistics.rst:157 +msgid "The adjudication core were neither particular slow nor fast in allocating adjudicators compared to other adjudication cores. At Australs most adjudication cores will create allocations by using first running an automatic allocation then extensively tweak the results." +msgstr "" + +#: ../../guide/tournament-logistics.rst:158 +msgid "There were no serious issues that delayed the tabbing of any particular round beyond the routine and expected issues of last-minute draw changes, adjudicators producing incomprehensible ballots, etc." +msgstr "" + +#: ../../guide/tournament-logistics.rst:159 +msgid "Whilst the tab ran relatively quickly, there were minor delays because of mismatches between the planned schedule and the optimal schedule from a tab perspective." +msgstr "" + +#: ../../guide/tournament-logistics.rst:160 +msgid "A round at Australs takes around 2 hours from a debater's perspective: 30m of prep, ~60m for a debate, ~15m for deliberation, and ~15m for the oral adjudication and feedback." +msgstr "" + +#: ../../guide/tournament-logistics.rst:161 +msgid "We didn't note the timing of data-entry in Round 8 as there was no time pressure. After data entry was finished, finalising and double-checking the breaks took through to ~7-8pm." +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "Day" +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "One" +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "Two" +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "Three" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "Round" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "1" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "2" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "3" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "4" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "5" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "6" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "7" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "8" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "Draw generated" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +#: ../../guide/tournament-logistics.rst:169 +msgid "*Night prior**" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "12:43" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "16:12" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "19:17*" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "12:05" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "15:46" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "19:10*" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "12:07" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "Allocation finished" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "13:17 ``+34m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "16:36 ``+24m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "20:28* ``+71m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "12:58 ``+53m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "16:24 ``+38m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "21:30* ``+140m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "13:25 ``+78m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "Motions released" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "09:28" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "13:50 ``+33m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "16:47 ``+11m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "09:22" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "13:14 ``+16m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "16:40 ``+16m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "9:30" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "14:18 ``+53m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "First ballot received" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "11:51 ``+143m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "15:46 ``+116m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "18:52 ``+125m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "11:18 ``+116m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "15:13 ``+119m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "18:40 ``+120m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "11:35 ``+125m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +#: ../../guide/tournament-logistics.rst:172 +msgid "?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "Last ballot confirmed" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "12:38 ``+47m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "16:07 ``+21m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "19:15 ``+23m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "12:05 ``+47m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "15:44 ``+31m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "19:09 ``+29m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "12:06 ``+31m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:176 +msgid "Tab Setup" +msgstr "" + +#: ../../guide/tournament-logistics.rst:178 +msgid "Setting up a tab site is the most technically challenging (or at least annoying) part of tabbing. It is where you need to reconcile large amounts of data and configure a variety of settings to ensure everything will run without issues during rounds. While this is often done a day or two before the tournament, ideally you should look to do as much as possible in the week or two beforehand where there is much less time pressure." +msgstr "" + +#: ../../guide/tournament-logistics.rst:181 +msgid "Importing data: workflow" +msgstr "" + +#: ../../guide/tournament-logistics.rst:185 +msgid "First check with registration people if their data is complete, and if not who is missing. If it's only a few people it's viable (for tab purposes) to use place-holders for them, as long as you remember to follow up and edit their data manually later." +msgstr "" + +#: ../../guide/tournament-logistics.rst:186 +msgid "Familiarise yourself with the different methods for importing data into your tabbing program. Typically, these include options for bulk-importing spreadsheets, for adding information piece-by-piece through a graphical interface, or a hybrid systems. Depending on your tabbing software it may be easiest to first setup your tournament on a local copy of the tab (where it will be faster to rectify mistakes) and transfer the data to the live site when everything is mostly complete." +msgstr "" + +#: ../../guide/tournament-logistics.rst:188 +msgid "If you are using Tabbycat our spreadsheet importer is definitely easiest to use on a local copy; however using the visual importer is perfectly viable for larger tournaments if you are not comfortable with the command line. When using the spreadsheet importer note that it will likely take several iterations to get the data to import cleanly as there will typically be small mismatches in speaker/institution names and the like." +msgstr "" + +#: ../../guide/tournament-logistics.rst:190 +msgid "If the tournament (or the host society) has their own domain name and your tab software is self-hosted consider whether you want to setup the tab site on their domain so that the URL is nicer and/or easier to type." +msgstr "" + +#: ../../guide/tournament-logistics.rst:192 +msgid "If you are using Tabbycat, and deploying to Heroku, be sure to read our documentation about the size of Postgres database your tournament will require. Setting up the correct size of database from the start is the best way to go, as transferring information at a later stage is a hassle and could delay the tab at inopportune times." +msgstr "" + +#: ../../guide/tournament-logistics.rst:195 +msgid "Importing data: regions/societies" +msgstr "" + +#: ../../guide/tournament-logistics.rst:199 +msgid "Societies will often have special names that they like to use in draws (that are not the same as their institution's name or acronym). These can be gathered from institutional reps or from prior tabs. When in doubt err on the colloquial / most recognisable name; particularly for formats where teams need to find each other prior to the debate." +msgstr "" + +#: ../../guide/tournament-logistics.rst:200 +msgid "If your tabbing software has methods for assigning region information to teams and adjudicators (for diversity purposes) determine with the adjudication core the types of regions that will be used." +msgstr "" + +#: ../../guide/tournament-logistics.rst:203 +msgid "Importing data: participants" +msgstr "" + +#: ../../guide/tournament-logistics.rst:207 +msgid "Check you have emails/phone numbers included in your data that will be imported (presuming your tabbing software supports this) there are useful to have on hand later for either emailing out information or quickly following up errant adjudicators." +msgstr "" + +#: ../../guide/tournament-logistics.rst:208 +msgid "Often, the easiest way to prepare registration data for tab imports is to create new tabs in the registration spreadsheet, and use referencing to automatically order and arrange their data into the format your tab software wants. If the registration data changes significantly this will also make it easier to re-import things." +msgstr "" + +#: ../../guide/tournament-logistics.rst:209 +msgid "Often some adjudicators, typically local independents, may not be available for all rounds. Try and find out who this affects and when; once data has been imported you can :ref:`pre-check these adjudicators in and out of rounds ` (if your tab software supports this; otherwise note it for later)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:210 +msgid "Remember that the swing team(s) probably also need to be imported into the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:213 +msgid "Data import: rooms" +msgstr "" + +#: ../../guide/tournament-logistics.rst:217 +msgid "Ideally you want not just a list of rooms, but also of their types and categories — i.e. what building a room is in and/or it will be coded so that participants can find it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:218 +msgid "You want to know if access to some rooms is conditional; i.e. if some rooms are only available for some rounds. Again, if your tab software supports it you can :ref:`record this availability information into the system ` (once data is imported) otherwise you can note it for later." +msgstr "" + +#: ../../guide/tournament-logistics.rst:219 +msgid "Registration should have collected information about accessibility requirements; they should be imported into your tab software (if it :ref:`supports automatically matching accessibility requirements `) or note for later. In general you will also want to use a similar process to ensure that members of the adjudication core are assigned rooms that are close to the tab room." +msgstr "" + +#: ../../guide/tournament-logistics.rst:220 +msgid "You also want some idea of priority; that is to say if some rooms are inconvenient (and you have more rooms than you need) they should be marked as a low priority so they will be allocated only if needed. Again, this might be automatically done by your tab software or something you will need to note and manually change after each draw is made." +msgstr "" + +#: ../../guide/tournament-logistics.rst:223 +msgid "Data import: adjudicator test/CV scores" +msgstr "" + +#: ../../guide/tournament-logistics.rst:225 +msgid "Ideally the adjudication core should do this themselves as they are marking the test or scoring CVs. If they won't, or you don't trust them with full tab access, be prepared to do so yourself." +msgstr "" + +#: ../../guide/tournament-logistics.rst:228 +msgid "Data import: tab access" +msgstr "" + +#: ../../guide/tournament-logistics.rst:230 +msgid "Set up user accounts for the adjudication core with dummy passwords (they can change them later)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:231 +msgid "Set up user accounts for runners/assistants with dummy passwords (they can change them later)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:233 +msgid "If using Tabbycat and using online ballots or feedback with the private URLs method, participants should be emailed out their private URLs before they start travelling to arrive at the tournament (i.e. when they have a reasonable chance of checking their email). This can be done using the inbuilt pages on Tabbycat, or by importing participants data into a service such as Mailchimp." +msgstr "" + +#: ../../guide/tournament-logistics.rst:236 +msgid "Pre-Rounds Setup" +msgstr "" + +#: ../../guide/tournament-logistics.rst:239 +msgid "Setting up the tab room" +msgstr "" + +#: ../../guide/tournament-logistics.rst:241 +msgid "This is typically the first order of business, as all future pre-round setup tasks (i.e. training the adjudication core, testing printing, etc.) are better for being done in the same space that will be used throughout the rounds. Once you're in the space there are a couple of small checks to run through before the larger question of how to arrange and use the space should be tackled:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:245 +msgid "Check with convenors whether things can be left in the tab room overnight. If they can't you'll need to make plans for how to move any big items (printers; ballot stacks) to and from the tab room each day." +msgstr "" + +#: ../../guide/tournament-logistics.rst:246 +msgid "Check that the internet access in the tab room is reliable." +msgstr "" + +#: ../../guide/tournament-logistics.rst:247 +msgid "Check that the projector system works, both with whatever wired-in computer is in the room and when connected to your laptop." +msgstr "" + +#: ../../guide/tournament-logistics.rst:248 +msgid "Check what items either yourself, or the organisers, have at hand and check if anything needs to be acquired before the next day. Critical items for tab rooms are typically:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:252 +msgid "An extension cord with multi box; ideally a pair of each." +msgstr "" + +#: ../../guide/tournament-logistics.rst:253 +msgid "Whiteboard markers (assuming there is a whiteboard) otherwise permanent markers and large sheets of paper (i.e. A2) can suffice." +msgstr "" + +#: ../../guide/tournament-logistics.rst:254 +msgid "Boxes. Lots of boxes. Loose ballots are a source of confusion and error, so you want some way of temporarily storing ballots as they proceed through the entering and checking process. You probably want at least three large boxes (for ballots to-enter, ballots to-check, and finished ballots) but more will be useful." +msgstr "" + +#: ../../guide/tournament-logistics.rst:255 +msgid "Spare printing ink/toner, and paper for the printer. Ideally your paper would be multi-coloured, with each colour being used for a different round. Pastel colours are ideal, and you ideally want at least three different colours so that you don't have to repeat a colour within the same day. Be sure to calculate how many sheets you will need per round and ensure you have a generous number of spares." +msgstr "" + +#: ../../guide/tournament-logistics.rst:256 +msgid "If tabbing a format that can produce multiple ballots per-debate, staplers are essential to keep those ballots organised. Buy at least two sturdy ones." +msgstr "" + +#: ../../guide/tournament-logistics.rst:258 +msgid "Non-essential, but often useful to have items:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:262 +msgid "Whatever dongles/adapters you need to connect your laptop to the projectors, both in the tab room and in the briefing room." +msgstr "" + +#: ../../guide/tournament-logistics.rst:263 +msgid "An Ethernet cable (or two) as a backup option if WiFi drops or is overloaded." +msgstr "" + +#: ../../guide/tournament-logistics.rst:264 +msgid "Post-it notes are a great way to temporarily mark ballots with information; typically used to indicate ballots that need correcting." +msgstr "" + +#: ../../guide/tournament-logistics.rst:265 +msgid "You'll often need to make impromptu signs; sticky tape and/or blu-tack are good here" +msgstr "" + +#: ../../guide/tournament-logistics.rst:266 +msgid "Spare pens for the people doing data entry to use" +msgstr "" + +#: ../../guide/tournament-logistics.rst:267 +msgid "Trash bags for collecting rubbish as it accumulates" +msgstr "" + +#: ../../guide/tournament-logistics.rst:268 +msgid "A Chrome Cast can occasionally be very useful if a projector or screen doesn't have accessible input cables or so that you can use a projector without having your laptop tethered to a particular podium and desk." +msgstr "" + +#: ../../guide/tournament-logistics.rst:270 +msgid "If you haven't already it's a good idea to check your printing setup by printing off a bunch of generic ballots and feedback forms to have on hand if the need arises (i.e. a ballot is missing and needs to go out ASAP; or if someone can't do feedback online and needs to do so on paper). At worst, the blank ballots you print can be used for the out-rounds. While printing these off, time how long it takes the printer to print say 25 ballots and extrapolate from that to figure out how long it will take to print the entire round's worth of ballots. Note that if printing off a round's ballots is relatively quick it can be useful to delay it in order to better accommodate any last-minute changes to the draw that happen post-announcement. It's also worth thinking about how you (or at least who will) group up the printed ballots in order to distribute them to runners." +msgstr "" + +#: ../../guide/tournament-logistics.rst:272 +msgid "At this point you should also setup whatever process you need for managing runners and the ballot collection process. At a minimum, this should probably be a spreadsheet or a list on a whiteboard outlining the different groups of rooms with spaces to mark in which runners are delivering/collecting ballots for each location. Who is running where might change from day to day and should be kept updated. It should also have some method for contacting each runner (i.e. a cell phone number)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:274 +msgid "The question of how to arrange the actual room is one with many answers, and is obviously shaped by the peculiarities of the space itself. However there needs to be some system behind it so that people know exactly where to go and what to do when there is time pressure." +msgstr "" + +#: ../../guide/tournament-logistics.rst:276 +msgid "The key consideration behind this system is typically the 'flow' of ballots: what happens after they are brought back from runners, but before they are completely entered into the system. Think through how you want this process to operate and how the space can be arranged to make each step as smooth as possible. Considerations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:280 +msgid "When runners initially return a big stack of ballots, what happens? They could be transferred directly to the data-enterers to start on, but it is often useful to have preliminary checks here in order to keep the job of the data-enterers as simple as possible. These checks could include:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:284 +msgid "For formats with multiple ballots per-debate, you typically want to identify and staple together all the ballots from a given panel." +msgstr "" + +#: ../../guide/tournament-logistics.rst:285 +msgid "For tournaments where ballots are liable to go missing (or for when you have plenty of data-enterers and want peace of mind) it is worth using the :ref:`ballot 'check-in' system of your tab software ` (if it has one) to mark off ballots as physically present in the tab room. This allows you to quickly identify which ballots are missing and begin tracking them down earlier than you would do otherwise if just waiting for the 'to enter' pile to be exhausted." +msgstr "" + +#: ../../guide/tournament-logistics.rst:286 +msgid "Depending on your preferences and resources, ballots could at this stage be checked for errors. This could include a basic sweep for missing information (i.e. totals) or a comprehensive sweep that includes checking math errors, ambiguous handwriting, low-point wins, etc.). While this will delay the time between ballots arriving and being entered, it will mean that you can start correcting ballots sooner, and lessens the burden on (potentially inexperienced) data-enterers to check and catch these. If you have many runners, and they are familiar with how debating scoring works, this is recommended." +msgstr "" + +#: ../../guide/tournament-logistics.rst:288 +msgid "Once this preliminary step has occurred the next task is actually entering the ballots. The number of steps here is dependent on your tab software and tab settings; you might have had the 'draft' ballot be submitted online by chairs or you might have the whole two-step process of a 'draft' ballot entry and the 'confirmed' ballot entry taking place within the tab room. Considerations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:292 +msgid "Regardless of whether you are working with a one-step or a two-step process, you want to arrange the tables where data-enterers are sitting such that their need to move is minimised. That might mean either have a central inbox of ballots to enter in the centre of the tables (such that everyone can reach it) or having multiple 'clusters' of enterers around boxes." +msgstr "" + +#: ../../guide/tournament-logistics.rst:293 +msgid "If work with a two-step process you want those two steps to be an active part of the spatial arrangement. That is to say, typically there will be a grouping of enterers who are working on the initial ballot entry (clustered around a box or boxes) and then a separate 'downstream' grouping of enterers that work on confirming/validating those entries. Depending on the size of tournament and quantity of runners, you either want it so that individuals from the first group can easily pass their ballots to the box of the second group; i.e. by reaching across the table or walking a short distance. At huge tournaments, you might want a dedicated person to transfer ballots between boxes to prevent enterers having to get up." +msgstr "" + +#: ../../guide/tournament-logistics.rst:294 +msgid "In a two-step process people may need to transfer roles, as generally you want to prioritise entry and then validation. Often this isn't necessarily much more efficient, but if 'rebalancing' the roles make sure that the spaces assigned to each role can accommodate extra people, and that people physically move to occupy each role." +msgstr "" + +#: ../../guide/tournament-logistics.rst:295 +msgid "In general, you want to minimise the number of ballots that each enterer feels the need to 'hoard' to work through to keep the work evenly distributed. If people are taking a large number of ballots to process, at the final stages of entering some people will have a bunch to work through while others will be finished. Making it easy to collect and pass on ballots in the space itself helps cut down on this while keeping entry efficient." +msgstr "" + +#: ../../guide/tournament-logistics.rst:296 +msgid "While the exact spatial arrangement depends on your numbers and what furniture is available, a long rectangle is a good starting point as the ballot process is in general linear (check, enter, validate, finish). Typically, this might look like a series of tables in a row with enterers sitting on either side and with the various ballot boxes in the middle." +msgstr "" + +#: ../../guide/tournament-logistics.rst:297 +msgid "When ballots have finished being enter/validated there definitely should be some sort of final 'done' box. Take care how ballots are put here, a common source of error is people putting ballots there before they are fully finished." +msgstr "" + +#: ../../guide/tournament-logistics.rst:298 +msgid "When ballots need to be corrected you generally want to 'extract' them from this process and hand them off to a tab-director or assistant to chase up and collect. There should be a forethought process for managing this; and ideally a dedicated space for it to prevent ballots being lost and to make it easy to identify ongoing issues. This might look like a process of sticking a post-it note (outlining the error) to the ballot, and then pulling it from entry/validation and placing it on a desk. Ideally you also want one of the tab directors always *not* doing data entry so that they are immediately available to manage this process." +msgstr "" + +#: ../../guide/tournament-logistics.rst:301 +msgid "Training volunteers" +msgstr "" + +#: ../../guide/tournament-logistics.rst:303 +msgid "If at all feasible you want to train that volunteers acting as runners and/or data enterers the day *before* the tournament starts otherwise the first round will be rough. It's generally a good idea for this training session to generally mirror the process of running a round. It's also generally a good idea that — even if you have enough people for dedicated runner and data-enterer roles — to train all volunteers so that they are familiar with each role and can fill in if needed. This has a couple of stages:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:307 +msgid "Introductions and details" +msgstr "" + +#: ../../guide/tournament-logistics.rst:311 +msgid "Volunteering is typically thankless and often stressful. It's also quite a dull and mechanical process: deliver paper; collect paper; enter numbers; check numbers. Given the rather unglamorous nature of their role you want your volunteers to feel welcome and a crucial part of a wider team. When meeting everyone for the first time try and run the introductions in a non-perfunctory manner and get to know people's background/interests and outline how valuable they are to the tournament." +msgstr "" + +#: ../../guide/tournament-logistics.rst:312 +msgid "As part of this process you should, note their cell phone numbers or whatever means you will use to coordinate communication between the team." +msgstr "" + +#: ../../guide/tournament-logistics.rst:313 +msgid "Figure out what will be happening during downtime and how you can make it more enjoyable. Would volunteers like to watch debates, work in the tab room, etc. Is there anything they would like during those down times (music, snacks, coffee, etc.)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:315 +msgid "Rooms and Running" +msgstr "" + +#: ../../guide/tournament-logistics.rst:319 +msgid "If runners are unfamiliar with debating in general, outline the basics of what draws are, what ballots are actually for, and what this process looks like from a debater's perspective." +msgstr "" + +#: ../../guide/tournament-logistics.rst:320 +msgid "Outline how/when the printing process occurs and who will sort/assign the ballots. Now is a good time to assign different runners to the different groups/rooms that they will be working with." +msgstr "" + +#: ../../guide/tournament-logistics.rst:321 +msgid "It is critical that, as a group, you actually go to everyone one of the venue groups and identify all of the venue rooms that are listed so that everyone knows exactly where to go. This may take some time. But it is a good chance to both check those rooms actually exist and pre-identify any problems that might occur with runners and debaters finding them." +msgstr "" + +#: ../../guide/tournament-logistics.rst:322 +msgid "Outline in general what happens during ballot collecting: when to do it, how to approach chairs, what do to if they are slow or delaying. You should raise the chance of chairs being belligerent and outline how they (and you) should deal with this." +msgstr "" + +#: ../../guide/tournament-logistics.rst:323 +msgid "If you are having runners pre-check ballots it's a good idea to fill out a few 'bad' ballots to demonstrate the kinds of checking required. If you are using any communication systems (i.e. having runners mark of buildings as 'done' in an online system) go through that now also." +msgstr "" + +#: ../../guide/tournament-logistics.rst:325 +msgid "Data entry and checking" +msgstr "" + +#: ../../guide/tournament-logistics.rst:329 +msgid "Before starting, setup logins for everyone and show them how to login. Also get an idea of what devices they will be using, or can bring, for data entry purposes. Check/ensure that they will have internet access on those devices." +msgstr "" + +#: ../../guide/tournament-logistics.rst:330 +msgid "Run through this in the actual tab room; illustrating examples with actual ballots and going through the roles in the actual spots which they will occur." +msgstr "" + +#: ../../guide/tournament-logistics.rst:331 +msgid "Run through how the seating/table/box arrangement works and the types of roles at different positions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:332 +msgid "Emphasise that in general, any ambiguities should be raised with the tab directors/assistants; i.e. that you should never guess about ballots but instead always delegate resolving issues to someone else." +msgstr "" + +#: ../../guide/tournament-logistics.rst:333 +msgid "Run through the different edge cases and things to check during entry. For example Iron Person speeches, mismatched totals, entering the wrong ballot for the wrong panellist, etc (see section below). Be sure to also go through what happens when the validation step fails; i.e. when a ballot needs to be re-entered." +msgstr "" + +#: ../../guide/tournament-logistics.rst:336 +msgid "Training the adjudication core" +msgstr "" + +#: ../../guide/tournament-logistics.rst:338 +msgid "Typically making the first-round's draw and allocation is the best time to really run through how your tab software and processes work in a 'real' environment as well as the expectations surrounding their and your role. Generous amounts of time should be budgeted for this; it's not uncommon for it to take up most of an evening. It's also worth having an older tab, or a tab full of fake data handy in order to show them how, say, the feedback or allocation interfaces look like when full of data." +msgstr "" + +#: ../../guide/tournament-logistics.rst:340 +msgid "To kick off you should probably setup tab logins for the adjudication core as necessary, outline what kinds of access they have, and (particularly if they haven't used your tab software before) outline broadly what pages they should and shouldn't access. In particular, show them how to find and parse feedback as that is often the interface where they will be spending most of their time individually. As part of this tour outline (if you haven't already) how feedback will work, as well as the means by which the adjudication core can use the tab software to keep track of feedback as it comes in. Ideally some sort of general strategy should be formed for this, so that particular people sit out rounds, or are delegated the task of catching up on feedback at other points." +msgstr "" + +#: ../../guide/tournament-logistics.rst:342 +msgid "Depending on how many runners you have it may be necessary, or beneficial, if the adjudication core helps out with data entry. However, if you go down this route the adjudication core need to be highly trained; they are often much more likely than volunteers (who are less self-confident and have more experience) to make errors. Whether you do or don't do this, ensure that adjudication core members know to come to the tab room ASAP after they have finished adjudications rather than swanning around socialising or going to lunch. Draws will often be held up just by the fact that not enough adjudication core members are present to start or finish an allocation." +msgstr "" + +#: ../../guide/tournament-logistics.rst:344 +msgid "The first-round allocation is the last thing you want to cover. It is typically your only change to slowly and comprehensively walk the adjudication core through the allocation interface and the allocation system." +msgstr "" + +#: ../../guide/tournament-logistics.rst:346 +msgid "Allocation interfaces, while often complex, should be stepped through so that the adjudication core knows precisely how to operate it themselves (if needed). They should know what it can (and can't do) and how the different features can be used and activated. For example, diversity highlights might be an optional toggle (in which case you explain how to active it, when to do so, and what it represents) or there might be parts of the interface that detail information such as a room's liveness, energy, or bracket which should be highlighted and explained (i.e. how 'liveness' is determined)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:348 +msgid "Secondly, and most importantly, is outlining how the automated process of adjudicator allocation operates, and how this can be made to match the adjudication core's preferences. Typically, you want to rely on automatic adjudicator allocations as much as possible in order to decrease the time taken to do an allocation; however every adjudication core has a different philosophy on what their perfect allocation looks like, and it is your job to try and align that ideal with what the automated system produces as much as is possible. The precursor to this is yourself knowing how your tab system allocation works: what is the relationship between a debate's bracket (or assigned priority/energy) and the numeric ranking of the automatically generated panel? Does the software optimise panel strength for a voting majority, or across all panellists? When does the software allocate solo chairs over panels? How does it avoid conflicts? Does it have (and enforce) particular expectations for a given adjudicator's score; or does it rely on a more relative comparison? The answers to the questions will often be dramatically different between different programs and you should know them in advance." +msgstr "" + +#: ../../guide/tournament-logistics.rst:350 +msgid "Most tab software will have at least some options for you to configure those automated processes — either by changing the automatic allocation's parameters directly or by controlling the ranking and feedback systems that feed into it. The first round is the prime opportunity to configure these options so that they align as close as possible with what the priorities of the adjudication core. If your feedback ranking system is mismatched with how you expect the automatic allocation to place adjudicators, or if the distribution of adjudicators across the draw is not what you expect, the adjudication core will end up wasting significant amounts of time adjusting allocations. Even if things work well using the default settings, ensure you experiment and demonstrate the consequences of changing the settings just to show that it can be done, what the general effects are, and to see if there are even-better configurations." +msgstr "" + +#: ../../guide/tournament-logistics.rst:352 +msgid "This process of tweaking the automatic allocation settings is one you should also revisit as the rounds progress." +msgstr "" + +#: ../../guide/tournament-logistics.rst:354 +msgid "How to approach diversity (typically in terms of region and gender) across an allocation in particular is something that some members of an adjudication core will not have had to consider in the context of a large tournament with time pressure or in terms of having to make explicit trade-offs. Again, you should make it clear how the software can accommodate this, and get the adjudication core to plan for how (in general) they want to approach this. Often it will form the final phase of the allocation process, and so can easily be forgotten or skipped over; or people will have different philosophies of how to approach this which are only raised at critical points." +msgstr "" + +#: ../../guide/tournament-logistics.rst:356 +msgid "Outline that there will usually be a trade-off between the quality of each allocations and the speed at which the tournament runs. When time is not a factor, many adjudication cores will often take an hour or more in order to create a perfect allocation; but they should know though that aiming for perfect during many rounds will break the schedule. You should try and get them to set some sort of time goal for allocations, and (during the rounds) ensure that they are aware of when they are going too fast or too slow. Depending on your personal preferences and the norms surrounding tab direction in your circuit you may want to actual enforce these time limits." +msgstr "" + +#: ../../guide/tournament-logistics.rst:358 +msgid "Finally, outline how you will all communicate. Again, there should be a single medium for this so that everyone knows what is going on; and this is ideally something that has been planned out beforehand with them and the organising committee. But at this point the tab team may have expanded, or there may be better options than what was being used previously. It's also worth outlining which parts of the tab team will generally be doing what roles and where — i.e. who will be rolling the draw, who will be chasing up people, etc." +msgstr "" + +#: ../../guide/tournament-logistics.rst:361 +msgid "Preparing a briefing" +msgstr "" + +#: ../../guide/tournament-logistics.rst:365 +msgid "At large tournaments there should be some form of briefing covering ballots and feedback process, even if it is just quick one. Usually you will want to be the person to design and deliver this; other people less-familiar with the system may miss details." +msgstr "" + +#: ../../guide/tournament-logistics.rst:366 +msgid "Liaise with convenors and the other people doing briefings to ensure (a) they know you're doing one; and (b) you are not overlapping in terms of content." +msgstr "" + +#: ../../guide/tournament-logistics.rst:367 +msgid "See the last section of this document for notes on what can be useful to include here" +msgstr "" + +#: ../../guide/tournament-logistics.rst:370 +msgid "Final checks" +msgstr "" + +#: ../../guide/tournament-logistics.rst:374 +msgid "Check if the convenors have made a map that clearly outlines where the rooms are. Ensure it's clear and post it to either the tab site (ideally) or somewhere like Facebook." +msgstr "" + +#: ../../guide/tournament-logistics.rst:375 +msgid "Check that convenors have some sort of way-finding system in place, i.e. chalked directions or colour-coded signs. Check these colour codes match the names of your venues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:376 +msgid "Check that the draw types are correct for each round in the tab system." +msgstr "" + +#: ../../guide/tournament-logistics.rst:377 +msgid "Check with adjudication core if/when there are secret rounds and that these are correct in the edit data base area." +msgstr "" + +#: ../../guide/tournament-logistics.rst:378 +msgid "Check how the draw will be displayed and managed. Is the projector good; how big does the text size need to be? How fast is the scroll?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:379 +msgid "If you will pre-print ballots check that you've set the \"return ballots to\" configuration setting; even if it just says \"to runners\"." +msgstr "" + +#: ../../guide/tournament-logistics.rst:382 +msgid "Managing Rounds" +msgstr "" + +#: ../../guide/tournament-logistics.rst:384 +msgid "Once everything has been setup and everyone knows what they should do, the actual process of running each round should go smoothly. It probably won't though. The earlier sections should have laid out what the ideal process for managing data entry and allocations, so this section will instead focus on what can go wrong and what to keep an eye out for." +msgstr "" + +#: ../../guide/tournament-logistics.rst:387 +msgid "Disaster scenarios" +msgstr "" + +#: ../../guide/tournament-logistics.rst:389 +msgid "There are two broad classes of disaster scenario here. The first, and more rare case is when either internet access at the venue goes out or if a web service that your tab software depends on has an outage (for example, both Tabbie 2 and Heroku-deployed Tabbycat instances depend on Amazon Web Services). The first can at least be solved temporarily if tethering is available, but if that is not possible (or the latter case occurs) you may need to switch to using an offline copy of that tab by restoring from a backup if the outage is non-transient." +msgstr "" + +#: ../../guide/tournament-logistics.rst:391 +msgid "Obviously, for this to work, you should be taking regular backups using whatever mechanism your tab software allows. Key times to do so are critical events such as finishing entering a round's data or finalising an adjudication allocation as these are especially difficult to recreate. Importantly, these backups are only useful to you if you have a downloaded copy of them; ideally download to a Dropbox or some other cloud service that will spread them across multiple computers and an online service." +msgstr "" + +#: ../../guide/tournament-logistics.rst:393 +msgid "Having an outage of internet access or a key web service go down to the point of having to switch to an offline tab is an exceedingly rare event, but one worth planning for at large tournaments. That is to say you should have ideally have an offline copy of your tabbing software setup on your local machine, and know how to restore a backup to it if necessary." +msgstr "" + +#: ../../guide/tournament-logistics.rst:395 +msgid "Backups are also useful as guards against a much more common source of error: data loss caused by user error. It is not unheard of for even experienced tab directors (or inexperienced adjudication core members) to accidentally delete an entire allocation, delete a round, or some other form of destructive action that would require a lot of work to redo. Taking backups at key points, and knowing how to restore them (to the online copy of the tab) is a useful — and occasionally essential — skill." +msgstr "" + +#: ../../guide/tournament-logistics.rst:397 +msgid "The much more common source of a major tab disruption is a major user-error or a bug within your tab software itself. Fixing these will be highly-context dependent and the best way you can prepare for them is to know your tab software well enough to understand what might have caused it or be able to contact someone else who does. That said, having backups on hand can also allow you to restore your database to before the bug or user-error occurred and try to proceed without re-triggering it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:400 +msgid "Expected problems" +msgstr "" + +#: ../../guide/tournament-logistics.rst:402 +msgid "Incorrect ballots are an inevitable tragedy. Many more optimistic tab directors will imagine that these can be prevented through sufficiently detailed briefings, recurring public shamings, or fool-proof ballot designs. While these might help in cutting down the number of errors, eliminating them entirely seems to be an unachievable goal. Note that this is particularly true at international tournaments and/or at tournaments that draw participants from circuits which have more than one predominant format." +msgstr "" + +#: ../../guide/tournament-logistics.rst:404 +msgid "While debaters as a whole display astonishing levels of innovation in discovering new ways to incorrectly fill in a ballot, there are a couple of broad cases that you should look out for an prepare people to deal with:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:408 +msgid "Not adding up score correctly. Pretty much everyone who does this will note that this is the first time that it has ever happened to them." +msgstr "" + +#: ../../guide/tournament-logistics.rst:409 +msgid "Omitting some information. Most common are not filling in total scores, the nominating winner, or the margin. Having omitted an entire team's scores or speaker names is not uncommon." +msgstr "" + +#: ../../guide/tournament-logistics.rst:410 +msgid "Scores that are outside the range." +msgstr "" + +#: ../../guide/tournament-logistics.rst:411 +msgid "Low-point wins, or tied-point wins. Typically occurs in conjunction with (1)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:412 +msgid "Poor handwriting rendering numbers illegible. While one could 'guess' whether a number is in fact a 6 or a 5 based on a team's total score, doing so is dangerous as it assumes that the person hasn't also done (1)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:413 +msgid "'Correcting' information in an ambiguous way. For example, using arrows to swap a speaker's order (which is typically circular/ambiguous) or drawing numbers over other numbers in a way that makes it unclear which is the original and which is the replacement." +msgstr "" + +#: ../../guide/tournament-logistics.rst:414 +msgid "Ballots just going entirely missing because either a runner missed the room, the chair forgot to return it, or the chair just left it in the room." +msgstr "" + +#: ../../guide/tournament-logistics.rst:416 +msgid "Ballots aside, there are a number of other common occurrences that will necessitate changes to the drawn and allocations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:420 +msgid "Teams will not turn up to debates, or turn up to debates extremely late. In both cases they will often not notifying anyone. Aside from needing to swap in a swing team in their place in the draw, it's worth keeping in mind that the necessity of a swing team might not be known until right when debates are about to start (which can lead to issues if you assume trainees or runners will be filling up the 'spare' swing team)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:421 +msgid "Adjudicators will also go missing. As with teams this can usually be caught during roll call; but might also not be known up until debates start. If the adjudication core is available they can make adjustments, but often you will need to make a call as to whether to form an even-sized panel or to redistribute adjudicators from elsewhere." +msgstr "" + +#: ../../guide/tournament-logistics.rst:422 +msgid "When a draw is released there will often be conflicts that were unknown to the tab system, and will necessitate making changes to the draw post-release. It's important that when making these changes you keep a clear record of what needs to change (if there are multiple swaps needed it can get tricky to keep track of) and ensure that all parties involved know about where they are being swapped to." +msgstr "" + +#: ../../guide/tournament-logistics.rst:425 +msgid "Ongoing checks" +msgstr "" + +#: ../../guide/tournament-logistics.rst:427 +msgid "You will have a decent amount of downtime during rounds when debates are happening. A couple of things its worth keeping an eye on during that time:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:431 +msgid "Ensuring your backups have been taken and downloaded." +msgstr "" + +#: ../../guide/tournament-logistics.rst:432 +msgid "Ensuring the tab room isn't devolving into mess." +msgstr "" + +#: ../../guide/tournament-logistics.rst:433 +msgid "If you can be bothered (and if no adjudication core member is doing so) reviewing feedback for critical issues (i.e. comments highlighting severe issues, or chairs getting very low scores) is a good way to be useful. If using paper-based feedback this can look like physically separating out these feedback forms for the attention of the adjudication core; while if using online feedback systems you may want to keep a collection of browser tabs to show." +msgstr "" + +#: ../../guide/tournament-logistics.rst:434 +msgid "Chasing up the language committee (if one exists for this tournament) to confirm which teams are in which category and what their break preferences are (if multiple breaks are not allowed). You want to have this information confirmed as soon as possible as it becomes of critical value to allocations once the draw starts segmenting into live/dead rooms." +msgstr "" + +#: ../../guide/tournament-logistics.rst:435 +msgid "Reviewing how efficiently things are running and whether there are any bottlenecks that can be better addressed in the next round. It's generally a good idea to (on a whiteboard or a spreadsheet) keep track of how long each stage of a round is taking (running, data-entry, allocation) and what (if anything) is causing delays." +msgstr "" + +#: ../../guide/tournament-logistics.rst:437 +msgid "If hosting Tabbycat on Heroku keep an eye on the metrics section of the dashboard area, noting if there are 'timeout errors' and what the average response times are. Adding more dynos should help with both." +msgstr "" + +#: ../../guide/tournament-logistics.rst:440 +msgid "Breaks and Break Rounds" +msgstr "" + +#: ../../guide/tournament-logistics.rst:443 +msgid "Generating the adjudicator's break" +msgstr "" + +#: ../../guide/tournament-logistics.rst:445 +msgid "Determining the adjudicator break generally involves a complex set of considerations rather than strictly ranking based on feedback. As such most adjudication cores will use whiteboards or Google docs to draft and discuss the possible options. One thing to note here is that breaking adjudicators will need to be marked as such in the tab at some point (both so they can be on future draws, and for publication) so you want to be careful that the tab is the final source of authority here — it is easy for information to get out of sync between what the adjudication core is using to draft the break and the system." +msgstr "" + +#: ../../guide/tournament-logistics.rst:447 +msgid "When the adjudication core is determining the break ensure that they have an idea of the *quantity* of adjudicators needed (breaking too few or too many will cause issues) and whether there are any special considerations (such as having conflicts with large portions of the draw, or leaving at a given point) that involve a specific adjudicator being considered." +msgstr "" + +#: ../../guide/tournament-logistics.rst:450 +msgid "Generating the team break" +msgstr "" + +#: ../../guide/tournament-logistics.rst:452 +msgid "Before doing so in an automated fashion, first check in your tab software whether all teams are assigned to the right break categories. Depending on whether your software supports multiple formats you probably also want to check that each break category is using the right 'rule' specified by the tournament (i.e. a WUDC- or Australs- compliant break ranking). Also double check the break size itself is correct in the software." +msgstr "" + +#: ../../guide/tournament-logistics.rst:454 +msgid "Hopefully the automated system will generate a correct break, but this should always be checked against what you'd expect the results to be from standings. Note also that there are cases, such as when a team has to leave, or when teams are or are not double-breaking, that mean the automated break results need to be overridden (typically in Tabbycat you would add a marker or note to include their ranking, but exclude them from having a break rank)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:457 +msgid "Announcing the break" +msgstr "" + +#: ../../guide/tournament-logistics.rst:459 +msgid "Mistakes are made surprisingly often during results announcements. Again, this is often a problem with incomplete or out of sync data, where print-outs, slides, or the tab site itself might not reflect (for example) last minute changes about breaks or have potentially mixed up teams or adjudicators with similar names. Things that can help:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:463 +msgid "Have a single source for what is being read out — i.e. a printed list (recommended) or the tab site itself — but don't mix and match. If making slides (often a good idea for large/crowded venues) copy the data from the canonical source being announced." +msgstr "" + +#: ../../guide/tournament-logistics.rst:464 +msgid "Double check what is being read out against the tab site, and/or whatever draft lists were used to determine the adjudicator's break. Verify with the adjudication core that everyone who should be there is, and that nobody is missing." +msgstr "" + +#: ../../guide/tournament-logistics.rst:465 +msgid "Clarify what information should be on the print-outs and the general order in which things are read. For example, it might be easy to omit breaking adjudicator's institutions, to use ambiguous abbreviations over full institution names, or to have an inconsistent approach to how the information is read (i.e. whether it is read as *wins* then *team points* then *team name*)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:466 +msgid "Without revealing any details try and get at least some guidance on how to pronounce names that people are not familiar with pronounce." +msgstr "" + +#: ../../guide/tournament-logistics.rst:467 +msgid "Have backup copies of whatever is being read from and clarify who is reading off what portions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:468 +msgid "Try to publish the break list on the tab website (or via some other online method) shortly after it is announced in order to minimise the chance of misinformation spreading." +msgstr "" + +#: ../../guide/tournament-logistics.rst:471 +msgid "Managing the out-rounds" +msgstr "" + +#: ../../guide/tournament-logistics.rst:473 +msgid "Out-rounds are generally under less time pressure and can be managed by just one or two members of the tab team. However, they tend to be run in a more haphazard fashion, so there are a couple of things to keep on top of:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:477 +msgid "You should keep track of which adjudicators have or have not been used throughout the finals allocations. It is easy for adjudication cores to forget to allocate someone and have to either drop them or promote them beyond what they had originally intended." +msgstr "" + +#: ../../guide/tournament-logistics.rst:478 +msgid "It is very easy for ballots to get lost in break rounds as chairs have less defined roles and processes in what they do with their ballots. While having correct speaker scores correctly entered for break rounds isn't a strict necessity, it is nice to have and the alternative (using fake speaks just to record the winner) can cause confusion. Closely manage distributing ballots to the chairs and collecting them as soon as possible afterwards; especially if there is any time pressure. Generally it is not worth printing off per-debate ballots; just print a stack of generic ballots at the start of the out-rounds and distribute as needed." +msgstr "" + +#: ../../guide/tournament-logistics.rst:479 +msgid "You should know, in addition to when the break rounds are, when the results announcements are. Often these announcements are saved (for suspense or logistics reasons) until particular points of time (i.e. until the evening social; or until other out-rounds are finished). Obviously it's important not to accidentally release results; but often convenors and the adjudication core will often have different ideas about when results are meant to be released." +msgstr "" + +#: ../../guide/tournament-logistics.rst:481 +msgid "If using Tabbycat to manage out-rounds with multiple break categories, note that the round progression is no longer strictly linear. So be careful with when/if results are released online and note that often you can't rely on online interface to release draws publicly." +msgstr "" + +#: ../../guide/tournament-logistics.rst:484 +msgid "Preparing for tab release" +msgstr "" + +#: ../../guide/tournament-logistics.rst:486 +msgid "At some point, if you haven't already, have a discussion with the adjudication core about when the tab itself will be released and what data will be released. Well before the tab is due to be released you want to check that anonymisations and any speaker flags (i.e. Novice, ESL) are up to date in your tab software." +msgstr "" + +#: ../../guide/tournament-logistics.rst:489 +msgid "Managing the tab release" +msgstr "" + +#: ../../guide/tournament-logistics.rst:491 +msgid "Almost there!" +msgstr "" + +#: ../../guide/tournament-logistics.rst:493 +msgid "If hosting Tabbycat on Heroku it's worth increasing the resources available to the server for the ~12 hour period following tab release; it's by far the most concentrated burst of traffic the site will receive. Because Heroku bills by the hour, even going to a relatively expensive option, such as performance dynos with auto-scaling, will be very cheap if run just for this period. That said the site should be relatively resilient even in the face of large amounts of traffic; even running with the most basic resources allocated, at worst pages will be temporarily slow or not load." +msgstr "" + +#: ../../guide/tournament-logistics.rst:495 +msgid "To get an idea of how the site is performing in the Heroku dashboard keep an eye on the average request time number and adjust the number of dynos to try and keep it under say two seconds; ideally just one. When you first turn on the tab release settings, make sure you go through and load every page before announcing it to the public, doing so will trigger the caching mechanism that means potentially complex pages (say the speaker tab) don't need to be calculated from scratch each time someone loads the page." +msgstr "" + +#: ../../guide/tournament-logistics.rst:498 +msgid "Post-tournament" +msgstr "" + +#: ../../guide/tournament-logistics.rst:500 +msgid "Once you have sufficiently recovered, consider writing up and sharing a post-script about how things went; noting things that did or didn't go well. Next year's tab directors would certainly appreciate it, and it would be great to see this kind of knowledge spread more widely. The developers of your tab software would also appreciate hearing your feedback; particularly if there were issues that could have been prevented or ameliorated by the software itself." +msgstr "" + +#: ../../guide/tournament-logistics.rst:503 +msgid "Appendix: Briefing Notes" +msgstr "" + +#: ../../guide/tournament-logistics.rst:505 +msgid "This is a very loose, but not exhaustive, collection of things that are useful to communicate to speakers and adjudicators in a tab briefing. While briefing fatigue is real, having clear expectations about how things like ballots and feedback work are highly valuable uses of the tournament's time if they can at all help cut down the kinds of problems that delay the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:508 +msgid "How feedback works" +msgstr "" + +#: ../../guide/tournament-logistics.rst:510 +msgid "Is it online, or offline? If online did people receive links? What do they do if they have lost it?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:511 +msgid "Is feedback mandatory? What accountability mechanisms are there? Will you publish the shame list online or raise it in between rounds?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:512 +msgid "Who will be submitting feedback on who? Do trainees do so?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:513 +msgid "Remind teams that only one of their feedbacks count; they should coordinate who is doing it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:514 +msgid "What is the feedback scale? What does it correspond to? Common sources of confusion:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:516 +msgid "Feedback scales are not like Uber. You do not get five stars for being adequate and generic." +msgstr "" + +#: ../../guide/tournament-logistics.rst:517 +msgid "Feedback scales are not relative to position; it is an absolute scale. That is to say, if your trainee was good, they probably do not deserve the highest rating; they get whatever rating indicates they should be a panellist or low-chair." +msgstr "" + +#: ../../guide/tournament-logistics.rst:518 +msgid "Consider accompanying the score/scale with a statement characterising how these numbers correspond to positions - e.g. a 4.0 means 'should continue on good panels, should chair low rooms'" +msgstr "" + +#: ../../guide/tournament-logistics.rst:520 +msgid "If using online submission options, what should people without phones or internet access do?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:523 +msgid "How ballots work" +msgstr "" + +#: ../../guide/tournament-logistics.rst:525 +msgid "This part of the presentation will be condescending. It is also necessary. The two causes of delays in the draw running late, and thus the tournament running late are (1) people not filling out ballots correctly or (2) people's ballots going missing. Emphasise that this should be taken seriously; minutes spent chasing bad ballots are often minutes that delay every single person at the tournament from doing what they are actually here to do. You should highlight, ideally with illustrated examples:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:529 +msgid "Which parts of the ballot *must* be filled in; people will often overlook margins, or special fields such as motion vetoes." +msgstr "" + +#: ../../guide/tournament-logistics.rst:530 +msgid "That people must specify the full names of speakers; not nicknames or just-first names. Often names will be written poorly or have ambiguities (i.e. two speakers on a team called James) and having the full name is the only way to resolve it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:531 +msgid "That people should **not draw arrows to swap the order of speakers** as these are impossible to decipher. Here, and in other areas, always *cross-out* information clearly and write it again rather than using arrows or drawing over what is there." +msgstr "" + +#: ../../guide/tournament-logistics.rst:532 +msgid "That people should try and write numbers in a manner that makes them crystal clear. Put cross-bars in 7s; bases on 1's. Make 8's actually look like two circles. If people know they have poor handwriting maybe consider writing the literal words — *seventy-one* below the numbers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:533 +msgid "That for styles that do not have a single ballot for a panel, reiterate that everyone fills in their own ballots. At Australs, if this isn't made absolutely clear someone will average their panels ballots in order to try and 'help' you." +msgstr "" + +#: ../../guide/tournament-logistics.rst:534 +msgid "That runners do not fill out ballots. In BP, remind them that only chairs should fill out ballots (i.e. it cannot be deputised to a wing). In formats with individual ballots, remind chairs to make sure their wings have actually filled out a ballot, and get them to check for errors or ambiguities." +msgstr "" + +#: ../../guide/tournament-logistics.rst:535 +msgid "That everyone is bad at math. People who think they are good at math just haven't messed up their ballot *yet*. Emphasize that people should always use their phone's calculators to check totals. At typical tournaments using exclusively paper ballots math errors happen multiple times a round, almost every round." +msgstr "" + +#: ../../guide/tournament-logistics.rst:536 +msgid "How long people have to fill out their ballots. Suggest that chairs actually keep track of this time during a stopwatch, and start moving towards critical steps (i.e. scoring) well *before* the time is up, not *once* it is up." +msgstr "" + +#: ../../guide/tournament-logistics.rst:537 +msgid "Outline what chairs should do to return ballots. If ballots are being run by runners, outline what they should do if a runner doesn't appear. If they are not being run by runners remind people that returning ballots should be there number one priority, over say giving a lengthy adjudication or team feedback. Or getting lunch." +msgstr "" + +#: ../../guide/tournament-logistics.rst:538 +msgid "Remind people to *be nice to runners* and that being mean to runners will have serious consequences." +msgstr "" + +#: ../../guide/tournament-logistics.rst:539 +msgid "Remind people that the tab team and adjudication core will not, except for absolutely exceptional circumstances, accept photos or messaged descriptions of ballots; that all results must be on paper and handled in the same manner. The adjudication core should also be reminded of this." +msgstr "" + +#: ../../guide/tournament-logistics.rst:542 +msgid "How to locate the tab room" +msgstr "" + +#: ../../guide/tournament-logistics.rst:544 +msgid "People should know how to get to the tab room, either to raise issues with the adjudication core or to correct ballot errors. Make it crystal clear where it is and how to get there. Also ensure people know not to barge in; that they should knock and wait." +msgstr "" + +#: ../../guide/tournament-logistics.rst:546 +msgid "Clearly communicate the contact details of the tab directors and get people to take them down. In most cases you do not want people going through convenors or the adjudication core for any tab-related issues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:549 +msgid "Misc" +msgstr "" + +#: ../../guide/tournament-logistics.rst:551 +msgid "Now is a good time to encourage people to consider getting involved with tabbing and tab-development. Emphasize that both do not necessarily require technical skills and that tabbers are (or should be) open to feedback and ideas from the wider community. Tell people to come find you and chat if they are interested and put up a link to the `Facebook tabbing group `_." +msgstr "" + +#: ../../guide/tournament-logistics.rst:553 +msgid "If you appreciated this guide we'd appreciate a slide promoting `Timekept `_ and `Debatekeeper `_. This would also be a good point to remind people that their timekeeping apps shouldn't be making noise *unless* they have been explicitly assigned to keep time by the chair." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/guide/upgrading.po b/docs/locale/kk/LC_MESSAGES/guide/upgrading.po new file mode 100644 index 00000000000..09dfc212a92 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/guide/upgrading.po @@ -0,0 +1,60 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/upgrading.po\n" +"X-Crowdin-File-ID: 1309\n" +"Language: kk_KZ\n" + +#: ../../guide/upgrading.rst:5 +msgid "Upgrading Tabbycat" +msgstr "" + +#: ../../guide/upgrading.rst:7 +msgid "Generally only want to upgrade copies of tab sites that are used on an ongoing basis for multiple tournaments, or if there is a bugfix release between when you setup your site and when the tournament is running." +msgstr "" + +#: ../../guide/upgrading.rst:11 +msgid "Going from any version of Tabbycat 1 to any version of Tabbycat 2 won't work with the below instructions — check out the CHANGELOG for the 2.0 version for details of how to perform this upgrade." +msgstr "" + +#: ../../guide/upgrading.rst:14 +msgid "Upgrading a Local Copy" +msgstr "" + +#: ../../guide/upgrading.rst:16 +msgid "Assuming you haven't made any changes to the Tabbycat code, upgrading a locally installed copy should just be a matter of `downloading the latest source code `_ and replacing the existing files with the new ones. If you used git to download these files initially you can just pull down the latest copy of the master branch to do this." +msgstr "" + +#: ../../guide/upgrading.rst:18 +msgid "You would then repeat the \"Install Tabbycat\" instructions for your original installation method." +msgstr "" + +#: ../../guide/upgrading.rst:21 +msgid "Upgrading on Heroku" +msgstr "" + +#: ../../guide/upgrading.rst:23 +msgid "The easiest way to upgrade a Heroku site is to create an account on Github and then to `'fork' `_ the `Tabbycat repository `_." +msgstr "" + +#: ../../guide/upgrading.rst:25 +msgid "Once you have done this you can login to your Heroku Dashboard, go to your app, and then navigate to the Deploy tab. In this tab, adjacent to *Deployment method* select the GitHub option. This will bring up a new 'Connect to GitHub' section where you can search for 'Tabbycat' to find the copy of the repository you made earlier and connect it." +msgstr "" + +#: ../../guide/upgrading.rst:29 +msgid "Once connected a new *Manual deploy* section will appear. Make sure you select the *master* branch (not develop) and then click *Deploy Branch*. This will then show the app deploying and notify you when it has finished; which may take several minutes." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/index.po b/docs/locale/kk/LC_MESSAGES/index.po new file mode 100644 index 00000000000..8b146e9eba0 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/index.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/index.po\n" +"X-Crowdin-File-ID: 1311\n" +"Language: kk_KZ\n" + +#: ../../index.rst:18 +msgid "Installation" +msgstr "" + +#: ../../index.rst:32 +msgid "Using Tabbycat" +msgstr "" + +#: ../../index.rst:41 +msgid "Tabbing Guide" +msgstr "" + +#: ../../index.rst:52 +msgid "Feature notes" +msgstr "" + +#: ../../index.rst:75 +msgid "About" +msgstr "" + +#: ../../index.rst:8 +msgid "Tabbycat User Guide" +msgstr "" + +#: ../../index.rst:10 +msgid "Tabbycat is a draw tabulation system for parliamentary debate tournaments. It supports two-team formats such as Australs, World Schools, Asians, Australian Easters and all New Zealand formats, as well as British Parliamentary (WUDC). It is also highly configurable, supporting many custom variations of the above formats too. If you're looking for a general overview of the software, check out our `README on Github `_." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/install/docker.po b/docs/locale/kk/LC_MESSAGES/install/docker.po new file mode 100644 index 00000000000..dbe390648a4 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/install/docker.po @@ -0,0 +1,173 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/docker.po\n" +"X-Crowdin-File-ID: 1313\n" +"Language: kk_KZ\n" + +#: ../../install/docker.rst:5 +msgid "Installing Locally using Docker" +msgstr "" + +#: ../../install/docker.rst:7 +msgid "Is this the best install method for you?" +msgstr "" + +#: ../../install/docker.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/docker.rst:12 +#, python-format +msgid "If you need an offline copy of Tabbycat, installing using Docker should be simpler and quicker than using the \"Install Locally on…\" instructions for your operating system. However if a Docker installation doesn't work as outlined below, it's harder to address what isn't working. If you encounter any problems with Docker, we recommend using the \"Install Locally on…\" option as a fallback, but if you need to do so, `please also report the issue you're having on GitHub `_ or :ref:`contact the developers `." +msgstr "" + +#: ../../install/docker.rst:14 +msgid "Docker is an application that makes it very easy to load and run a specific collection of software. It allows us to bundle everything necessary to run Tabbycat into a single package rather than have users install everything needed step-by-step. Once set up, Docker will allow you to start and stop a webserver (that in turn runs Tabbycat) on your computer whenever you want and without the need for internet access." +msgstr "" + +#: ../../install/docker.rst:18 +msgid "1. Download Tabbycat" +msgstr "" + +#: ../../install/docker.rst:20 +msgid "`Go to the page for our latest release `_." +msgstr "" + +#: ../../install/docker.rst:22 +msgid "Download the zip or tar.gz file." +msgstr "" + +#: ../../install/docker.rst:24 +msgid "Extract all files in it to a folder of your choice." +msgstr "" + +#: ../../install/docker.rst:28 +msgid "2. Install Docker" +msgstr "" + +#: ../../install/docker.rst:31 +msgid "If using macOS or Linux" +msgstr "" + +#: ../../install/docker.rst:33 +msgid "Install the **Docker Community Edition (stable)** from the `Docker store page `_." +msgstr "" + +#: ../../install/docker.rst:36 +msgid "If using Windows 10 Pro, Enterprise, or Education Edition" +msgstr "" + +#: ../../install/docker.rst:40 +msgid "Install the ****Docker Community Edition (stable)*** from the `Docker store page `_." +msgstr "" + +#: ../../install/docker.rst:41 +msgid "Before or shortly after installing it, Docker may ask you to enable hypervisor and restart your PC. If it asks you this follow the prompts and restart as asked." +msgstr "" + +#: ../../install/docker.rst:42 +msgid "Once Docker has finished installing, open up the newly-installed Docker application, then right-click the app's icon (the whale) in the Taskbar." +msgstr "" + +#: ../../install/docker.rst:43 +msgid "From there, hit *Settings* in the menu and *Shared Drives* in the sidebar. Tick the checkbox next to your hardrive and then click *Apply*. After that has applied exit and reopen the docker app (ie right-click the taskbar icon and hit exit) and verify that the checkbox is still there." +msgstr "" + +#: ../../install/docker.rst:49 +msgid "If using Windows 7, Windows 8, or Windows 10 Home Edition" +msgstr "" + +#: ../../install/docker.rst:51 +msgid "Install the **Docker Toolbox** from the `Docker Toolbox downloads page `_." +msgstr "" + +#: ../../install/docker.rst:53 +msgid "Not sure which edition of Windows you have? Click Start, search for \"System\", and open the Control Panel item \"System\"." +msgstr "" + +#: ../../install/docker.rst:57 +msgid "3. Run Tabbycat in Docker" +msgstr "" + +#: ../../install/docker.rst:60 +msgid "If using the Docker App" +msgstr "" + +#: ../../install/docker.rst:62 +msgid "*These instructions apply if you installed the Docker App, i.e., if you are using macOS, Linux or Windows Pro/Enterprise/Education.*" +msgstr "" + +#: ../../install/docker.rst:66 +msgid "Ensure that Docker application is open (there should be a whale icon in your menu/task bar) and that it says that Docker is running." +msgstr "" + +#: ../../install/docker.rst:68 +msgid "Browse to the location where you extracted Tabbycat to. Open up the **bin** folder there. Within that folder:" +msgstr "" + +#: ../../install/docker.rst:70 +msgid "If you're on macOS, press the Control key, click the icon for **osx_docker_start.command**, then choose Open from the shortcut menu." +msgstr "" + +#: ../../install/docker.rst:71 +msgid "If you're on Windows, open **windows_docker_start.bat**." +msgstr "" + +#: ../../install/docker.rst:72 +msgid "If you're on Linux, open up a terminal in the Tabbycat folder (*i.e.* the folder containing ``README.md``) and run ``docker-compose up``." +msgstr "" + +#: ../../install/docker.rst:74 +msgid "A terminal window should popup and bunch of text scroll by. If this is your first time running Docker it may take a while (30 minutes or more) to download the virtual machine. When the text has stopped scrolling by you should see a `Finished building Tabbycat!` message." +msgstr "" + +#: ../../install/docker.rst:76 +msgid "Open up http://localhost:8000/ (Windows) or http://0.0.0.0:8000 (OSX/Linux) in a browser of your choice!" +msgstr "" + +#: ../../install/docker.rst:78 ../../install/docker.rst:100 +msgid "If you want to reopen Tabbycat at a later time (say after restarting) repeat steps 1 through 4 here." +msgstr "" + +#: ../../install/docker.rst:81 +msgid "If using the Docker Toolbox" +msgstr "" + +#: ../../install/docker.rst:83 +msgid "*These instructions apply if you installed the Docker Toolbox, i.e., if you are using Windows 7, Windows 8 or Windows 10 Home.*" +msgstr "" + +#: ../../install/docker.rst:87 +msgid "Start the **Docker Quickstart Terminal**." +msgstr "" + +#: ../../install/docker.rst:89 +msgid "Run the command ``docker-machine ip``. Take note of the IP address it shows, for example::" +msgstr "" + +#: ../../install/docker.rst:94 +msgid "Navigate to the Tabbycat folder (*i.e.* the folder containing ``README.md``) and run ``docker-compose up``." +msgstr "" + +#: ../../install/docker.rst:96 +msgid "Open a browser and go to http://192.168.99.100:8000/, replacing \"192.168.99.100\" with whatever IP address was shown in step 2." +msgstr "" + +#: ../../install/docker.rst:98 +msgid "Once you're done and want to stop the Tabbycat server, press Ctrl+C, wait until the next prompt appears, and then run ``docker-machine stop``." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/install/heroku.po b/docs/locale/kk/LC_MESSAGES/install/heroku.po new file mode 100644 index 00000000000..2d7c329dcbe --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/install/heroku.po @@ -0,0 +1,445 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/heroku.po\n" +"X-Crowdin-File-ID: 1315\n" +"Language: kk_KZ\n" + +#: ../../install/heroku.rst:5 +msgid "Installing on Heroku" +msgstr "" + +#: ../../install/heroku.rst:7 +msgid "When running Tabbycat on the internet, we set it up on `Heroku `_. The project is set up to be good to go on Heroku, and it works well for us, so if you'd like to run it online, we recommend that you do the same. Naturally, this requires you to have a Heroku account." +msgstr "" + +#: ../../install/heroku.rst:9 +msgid "There are two ways to do this: a **short way** and a **long way**. Most people should use the short way. The long way requires some familiarity with command-line interfaces and Git, and requires a :ref:`local installation ` as a prerequisite, but makes it easier to :ref:`upgrade versions ` later on and (unlike the short way) allows you to import data from CSV files." +msgstr "" + +#: ../../install/heroku.rst:12 +msgid "The short way" +msgstr "" + +#: ../../install/heroku.rst:13 +msgid "Click this button:" +msgstr "" + +#: ../../install/heroku.rst:18 +msgid "This is the easiest way to deploy an instance of Tabbycat online. It requires no technical background." +msgstr "" + +#: ../../install/heroku.rst:20 +msgid "If you don't already have a Heroku account, it'll prompt you to create one. Once you're logged in to Heroku, choose a name for your installation, then scroll down and click **Deploy**. Once it's finished, click **View** and follow the prompts. Once finished, open the site and from there you can easily set up a demo data set (if you just want to learn Tabbycat) or use the data importer to set up a real tournament." +msgstr "" + +#: ../../install/heroku.rst:22 +msgid "During the setup process, Heroku will ask you to verify your account by adding a credit card. A standard Tabbycat site *will not charge* your card — charges only accrue if you deliberately add a paid service in the Heroku dashboard." +msgstr "" + +#: ../../install/heroku.rst:24 +msgid "If you can't access a credit card, you can instead install a limited version, which we call \"Tabbykitten\". However, Tabbykitten cannot send any e-mails or handle as much public traffic. We therefore strongly recommend it only as a last resort, and even then only for small tournaments. `Use this link to set up a Tabbykitten site `_." +msgstr "" + +#: ../../install/heroku.rst:27 +msgid "The long way" +msgstr "" + +#: ../../install/heroku.rst:28 +msgid "The long way sets you up with more control over your environment. Because you'll clone `our GitHub repository`_, it'll be easier for you to :ref:`upgrade your app ` when a new version is released. You'll also have the flexibility to make and contribute updates to the source code. We recommend it if you have experience with Git. It's also easier with this method to import CSV files using the command-line importer, so if you have a very large tournament, this might make importing initial data easier." +msgstr "" + +#: ../../install/heroku.rst:30 +msgid "We've tested these instructions successfully on Windows, Linux and macOS." +msgstr "" + +#: ../../install/heroku.rst:33 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/heroku.rst:35 +msgid "You need to have at least a passing familiarity with command-line interfaces to get through the longer traditional method. We'll talk you through the rest." +msgstr "" + +#: ../../install/heroku.rst:37 +msgid "When we say \"command shell\", on Windows we mean **Command Prompt**, and on Linux and macOS we mean **Terminal** (or your favourite command shell)." +msgstr "" + +#: ../../install/heroku.rst:39 ../../install/heroku.rst:100 +msgid "Advanced users" +msgstr "" + +#: ../../install/heroku.rst:42 +msgid "Tabbycat is a `Django `_ project. As such, it can be installed on any web platform that supports Django, using any SQL system that Django supports. Just be aware that we haven't tried any other platform." +msgstr "" + +#: ../../install/heroku.rst:45 +msgid "Short version of the long way" +msgstr "" + +#: ../../install/heroku.rst:47 +msgid "We provide a \"short version\" for experienced users. Don't just copy and paste these commands before you understand what they do! If things aren't set up perfectly they can fail, so it's important to supervise them the first time you do them. If this is all new to you, read the long version of the instructions below." +msgstr "" + +#: ../../install/heroku.rst:56 +msgid "If you want to :ref:`import tournament data ` from CSV files, :ref:`install Tabbycat locally `, put your CSV files in ``data/yourtournamentname``, then::" +msgstr "" + +#: ../../install/heroku.rst:68 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/heroku.rst:70 +msgid "Install the `Heroku Command Line Interface (CLI) `_, then log in with the command ``heroku login``." +msgstr "" + +#: ../../install/heroku.rst:72 +msgid "If you don't already have **Git**, follow the `instructions on the GitHub website `_ to set up Git." +msgstr "" + +#: ../../install/heroku.rst:75 +msgid "2. Set up a local installation" +msgstr "" + +#: ../../install/heroku.rst:77 +msgid "If you don't already have a local installation, follow the instructions on the page for your operating system, listed below, to set up a local installation." +msgstr "" + +#: ../../install/heroku.rst:79 +msgid "When downloading the source code, you **must** take the option involving cloning the GitHub repository using Git. In the macOS and Windows instructions, this means the option described in the \"Advanced users\" box. To do so, use these commands:" +msgstr "" + +#: ../../install/heroku.rst:86 +msgid "Do not download the .tar.gz or .zip file and extract it." +msgstr "" + +#: ../../install/heroku.rst:88 +msgid ":ref:`install-linux`" +msgstr "" + +#: ../../install/heroku.rst:89 +msgid ":ref:`install-osx`" +msgstr "" + +#: ../../install/heroku.rst:90 +msgid ":ref:`install-wsl`" +msgstr "" + +#: ../../install/heroku.rst:91 +msgid ":ref:`install-windows`" +msgstr "" + +#: ../../install/heroku.rst:93 +msgid "If you do already have a local installation, update to the latest version using:" +msgstr "" + +#: ../../install/heroku.rst:103 +msgid "It's not *strictly* necessary to have a fully functional local installation if you don't want to import data from CSV files. But it certainly helps." +msgstr "" + +#: ../../install/heroku.rst:106 +msgid "3. Deploy to Heroku" +msgstr "" + +#: ../../install/heroku.rst:110 +msgid "Navigate to your Tabbycat directory::" +msgstr "" + +#: ../../install/heroku.rst:114 +msgid "Run the script to deploy the app to Heroku. Replace ``yourappname`` with your preferred URL. Your website will be at ``yourappname.herokuapp.com``." +msgstr "" + +#: ../../install/heroku.rst:120 +msgid "This script has other options that you might find useful. Run ``python deploy_heroku.py --help`` for details." +msgstr "" + +#: ../../install/heroku.rst:122 +msgid "When this script finishes, it will open the app in your browser. It should look something like this:" +msgstr "" + +#: ../../install/heroku.rst:127 +msgid "4. Import tournament data locally" +msgstr "" + +#: ../../install/heroku.rst:129 +msgid "Steps 4 and 5 are optional; there are other methods of :ref:`importing data `. However the following method is most useful for large tournaments where manual entry would be tedious." +msgstr "" + +#: ../../install/heroku.rst:131 +msgid "Step 4 is the same as the process described in :ref:`importtournament-command`." +msgstr "" + +#: ../../install/heroku.rst:135 +msgid "Place your CSV files in ``data/yourtournamentname``, as described in :ref:`importing-initial-data`." +msgstr "" + +#: ../../install/heroku.rst:137 +msgid "Create a new, blank local database::" +msgstr "" + +#: ../../install/heroku.rst:141 +msgid "It's normally easiest to name your local database after your app name, so that if you have multiple sites, you know which one relates to which." +msgstr "" + +#: ../../install/heroku.rst:143 +msgid "Reconfigure ``DATABASES`` in your settings_local.py file to point to this new database." +msgstr "" + +#: ../../install/heroku.rst:145 +msgid "Activate your virtual environment::" +msgstr "" + +#: ../../install/heroku.rst:149 +msgid "Run initial migrations on your blank local database::" +msgstr "" + +#: ../../install/heroku.rst:154 +msgid "Import your tournament data into your blank local database::" +msgstr "" + +#: ../../install/heroku.rst:158 +msgid "If your data's not clean, it might take a few attempts to get this right. We recommend either destroying and recreating the database (``dropdb``, ``createdb``), or wiping it using ``dj flush``, before retrying." +msgstr "" + +#: ../../install/heroku.rst:160 +msgid "Check it looks like how you expect it to look, by starting your local installation::" +msgstr "" + +#: ../../install/heroku.rst:165 +msgid "5. Push the local database to Heroku" +msgstr "" + +#: ../../install/heroku.rst:167 +msgid "Once you're happy with how your local import went, you can push the local database to Heroku." +msgstr "" + +#: ../../install/heroku.rst:169 +msgid "This step wipes the Heroku database clean, and replaces it with the contents of your local database. If you have any data on the Heroku site that isn't also in your local database, **that data will be lost** and will not be recoverable." +msgstr "" + +#: ../../install/heroku.rst:171 +msgid "If you have multiple Heroku sites, you may find that the ``heroku`` commands refuse to run, prompting you to specify an app. If so, add ``--app yourappname`` to each ``heroku`` command." +msgstr "" + +#: ../../install/heroku.rst:173 +msgid "Enable maintenance mode. This takes the site offline, to ensure that no-one can possibly create or change any data on the site while you're pushing a new database up::" +msgstr "" + +#: ../../install/heroku.rst:177 +msgid "Reset the database. (Caution: This permanently deletes all information on your Heroku database!)" +msgstr "" + +#: ../../install/heroku.rst:183 +msgid "Push your local database to Heroku::" +msgstr "" + +#: ../../install/heroku.rst:187 +msgid "You might need to specify your local PostgreSQL credentials by adding ``PGUSER=yourusername PGPASSWORD=******** PGHOST=localhost`` to the *beginning* of that command. (This sets environment variables to those values for the duration of that one command.)" +msgstr "" + +#: ../../install/heroku.rst:189 +msgid "Disable maintenance mode::" +msgstr "" + +#: ../../install/heroku.rst:195 +msgid "Heroku options you may want to change" +msgstr "" + +#: ../../install/heroku.rst:197 +msgid "If you have a large tournament, you may want to customize your Heroku app. This section provides some guidance on upgrades and settings you may wish to consider. Some of these configurations require you to have the `Heroku Command Line Interface (CLI) `_ installed." +msgstr "" + +#: ../../install/heroku.rst:202 +msgid "Upgrading your database size" +msgstr "" + +#: ../../install/heroku.rst:204 +msgid "The free plan of `Heroku Postgres `_, \"Hobby Dev\", should work for most small tournaments. For large tournaments, however, you may find that you exceed the 10,000-row limit of this plan. It's difficult to give general guidance on how many rows you're likely to use, because it depends on which features of Tabbycat you use (*e.g.*, if you use adjudicator feedback). But to give some idea:" +msgstr "" + +#: ../../install/heroku.rst:206 +msgid "Australs 2016, which had 74 teams, 8 preliminary rounds and heavily used adjudicator feedback, ended up at around 30,000 rows." +msgstr "" + +#: ../../install/heroku.rst:207 +#, python-format +msgid "The Asia BP championships 2017 had 100 teams, 6 preliminary rounds, and mandatory feedback (i.e. 100% return rates) used 15,000 rows." +msgstr "" + +#: ../../install/heroku.rst:208 +msgid "A 3 vs 3 tournament with 54 teams, 5 preliminary rounds, and which only lightly used adjudicator feedback ended up using around 4,500 rows" +msgstr "" + +#: ../../install/heroku.rst:210 +msgid "If you need more than 10,000 rows, you'll need to upgrade to a paid Heroku Postgres Plan. The 10,000,000 rows allowed in the lowest paid plan, \"Hobby Basic\", should certainly be more than sufficient." +msgstr "" + +#: ../../install/heroku.rst:212 +msgid "If you're not sure, you can always start at Hobby Dev—just be prepared to `upgrade `_ during the tournament if you run close to capacity." +msgstr "" + +#: ../../install/heroku.rst:215 +msgid "Custom domain names" +msgstr "" + +#: ../../install/heroku.rst:217 +msgid "Your Heroku app will be available at ``yourappname.herokuapp.com``. You may want it to be a subdomain of your tournament's website, like ``tab.australasians2015.org``. If so, you'll need to configure your custom domain and SSL. Instructions for both are in the Heroku Dev Center:" +msgstr "" + +#: ../../install/heroku.rst:219 +msgid "`Custom Domain Names for Apps `_" +msgstr "" + +#: ../../install/heroku.rst:220 +msgid "`Heroku SSL `_" +msgstr "" + +#: ../../install/heroku.rst:222 +msgid "The custom domain name basically requires two things: a DNS ``CNAME`` entry on your website targeting ``yourappname.herokuapp.com``, and the custom domain configured on Heroku using ``heroku domains:add tab.yourwebsite.com``. You'll also need to provide an SSL certificate for your custom domain and add it using the ``heroku certs:add`` command." +msgstr "" + +#: ../../install/heroku.rst:225 +msgid "HTTPS" +msgstr "" + +#: ../../install/heroku.rst:227 +msgid "All Tabbycat sites deployed to Heroku redirect all traffic to HTTPS by default." +msgstr "" + +#: ../../install/heroku.rst:229 +msgid "For a myriad of reasons, we strongly advise against disabling this. But if for some reason you need to run on plain HTTP, you can do this by setting the ``DISABLE_HTTPS_REDIRECTS`` config variable in Heroku to ``disable`` (see `Heroku documentation on config vars `_). The value of the config var must be ``disable``; if it's anything else, HTTPS redirects will remain in place." +msgstr "" + +#: ../../install/heroku.rst:231 +msgid "Most modern browsers, after having been redirected by a site to HTTPS once, remember that that site requires HTTPS and go there for all subsequent visits even if the user typed in a plain http\\:// address. It may do this because it cached the HTTP 301 permanent redirect, stored an HSTS entry and/or tagged its session cookie to require HTTPS. If, after disabling HTTPS on your Tabbycat site, you find that you're still being redirected to HTTPS, first try a browser or computer that *hasn't* visited the site before. If that works, then remove the relevant entry from your (original) browser's cache, HSTS set and cookies, and try again." +msgstr "" + +#: ../../install/heroku.rst:234 +msgid "Time zone" +msgstr "" + +#: ../../install/heroku.rst:236 +msgid "If you want to change the time zone you nominated during deployment, you can do so by going to the `Heroku Dashboard `_, clicking on your app, going to the **Settings** tab, clicking **Reveal Config Vars** and changing the value of the ``TIME_ZONE`` variable. This value must be one of the names in the IANA tz database, *e.g.* ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``. You can find a `list of these on Wikipedia `_ in the 'TZ\\*' column." +msgstr "" + +#: ../../install/heroku.rst:239 +msgid "SendGrid account details" +msgstr "" + +#: ../../install/heroku.rst:241 +msgid "By default, Heroku will automatically create a SendGrid account for you. For small tournaments, this should work fine. For larger ones, though, SendGrid typically doesn't allow new accounts to send so many emails without additional vetting. This vetting is separate to the verification you did for your Heroku account, and as far as we're aware, it can't be done until you send your first email, by which time it's probably too late." +msgstr "" + +#: ../../install/heroku.rst:243 +msgid "If you're running a large tournament, you may wish to use your own SendGrid account instead. The free tier probably won't suffice after the trial period, but the Essentials tier should be more than adequate. If you're a student and have the `GitHub Education Pack `_, you might find the SendGrid plan here useful." +msgstr "" + +#: ../../install/heroku.rst:245 +msgid "If you set up and use your own SendGrid account, you can remove the SendGrid add-on from your Heroku app. The SendGrid add-on is only necessary if you wish to use Heroku's auto-created SendGrid account." +msgstr "" + +#: ../../install/heroku.rst:247 +msgid "To set up your app to use your own SendGrid account:" +msgstr "" + +#: ../../install/heroku.rst:251 +msgid "`Sign up for a SendGrid account `_, if you don't already have one." +msgstr "" + +#: ../../install/heroku.rst:253 +msgid "`Create an API key `_ in your SendGrid account." +msgstr "" + +#: ../../install/heroku.rst:255 +msgid "There are `instructions for how to do this in the SendGrid documentation `_. The only permission that is needed is the \"Mail Send\" permission, so you can turn off all others if you want to be safe." +msgstr "" + +#: ../../install/heroku.rst:257 +msgid "Set the following config vars in Heroku Dashboard (or using the Heroku CLI, if you have it):" +msgstr "" + +#: ../../install/heroku.rst:259 +msgid "``SENDGRID_USERNAME`` should be set to ``apikey`` (not your username)." +msgstr "" + +#: ../../install/heroku.rst:260 +msgid "``SENDGRID_PASSWORD`` should be set to your API key, which will start with ``SG*******``." +msgstr "" + +#: ../../install/heroku.rst:262 +msgid "The `Heroku SendGrid instructions `_ to do something with ``SENDGRID_API_KEY`` are **incorrect**. We figured this out by contacting SendGrid support staff. Use the above config vars instead." +msgstr "" + +#: ../../install/heroku.rst:268 +msgid "Upgrading an existing Heroku app" +msgstr "" + +#: ../../install/heroku.rst:270 +msgid "For most users, we recommend starting a new site for every tournament, when you set up the tab for that tournament. There's generally not a pressing need to upgrade Tabbycat after a tournament is concluded, and every time you deploy a new site, you'll be using the latest version at the time of deployment." +msgstr "" + +#: ../../install/heroku.rst:272 +msgid "To upgrade an existing Heroku-based Tabbycat app to the latest version, you need to *deploy* the current version of Tabbycat to your Heroku app. There are several ways to do this. We list one below, primarily targeted at users with some background in Git." +msgstr "" + +#: ../../install/heroku.rst:274 +msgid "The essence of it is that you need to `create a Git remote `_ for your Heroku app (if you don't already have one), then `push to it `_." +msgstr "" + +#: ../../install/heroku.rst:276 +msgid "You should **always** :ref:`back up your database ` before upgrading Tabbycat." +msgstr "" + +#: ../../install/heroku.rst:278 +msgid "You'll need both Git and the Heroku CLI, and you'll need to be logged in to the Heroku CLI already." +msgstr "" + +#: ../../install/heroku.rst:280 +msgid "Take a backup of your database::" +msgstr "" + +#: ../../install/heroku.rst:284 +msgid "If you haven't already, clone our Git repository and check out the master branch::" +msgstr "" + +#: ../../install/heroku.rst:289 +msgid "If you've already cloned our Git repository, don't forget to pull so you're up to date::" +msgstr "" + +#: ../../install/heroku.rst:294 +msgid "Check to see if you have a Git remote already in place::" +msgstr "" + +#: ../../install/heroku.rst:300 +msgid "If you do, the name of the remote will be on the left (``heroku`` in the above example), and the URL of your Git repository will be on the right. In the example above, our Tabbycat site URL would be ``mytournament2018.herokuapp.com``; the Git remote URL is then ``https://git.heroku.com/mytournament2018.git``." +msgstr "" + +#: ../../install/heroku.rst:302 +msgid "If a Git remote URL for your Tabbycat site *doesn't* appear, then create one::" +msgstr "" + +#: ../../install/heroku.rst:307 +msgid "If you tab many tournaments, it'll probably be helpful to use a name other than ``heroku`` (say, ``mytournament2018``), so that you can manage multiple tournaments." +msgstr "" + +#: ../../install/heroku.rst:309 +msgid "Push to Heroku::" +msgstr "" + +#: ../../install/heroku.rst:313 +msgid "This will take a while to complete." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/install/linux.po b/docs/locale/kk/LC_MESSAGES/install/linux.po new file mode 100644 index 00000000000..82d7b1583c1 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/install/linux.po @@ -0,0 +1,249 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/linux.po\n" +"X-Crowdin-File-ID: 1317\n" +"Language: kk_KZ\n" + +#: ../../install/linux.rst:5 +msgid "Installing Locally on Linux" +msgstr "" + +#: ../../install/linux.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/linux.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/linux.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on Linux, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/linux.rst:14 +msgid "The instructions apply to both Linux, and :ref:`Linux on Windows `." +msgstr "" + +#: ../../install/linux.rst:17 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/linux.rst:19 +msgid "You need to be familiar with command-line interfaces to get through this comfortably. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest." +msgstr "" + +#: ../../install/linux.rst:21 ../../install/linux.rst:56 +#: ../../install/linux.rst:130 +msgid "Advanced users" +msgstr "" + +#: ../../install/linux.rst:24 +msgid "If you wish to use an SQL engine other that PostgreSQL, most of Tabbycat should work, but a few features rely on SQL functions that aren't supported by all engines. To configure Tabbycat to use a different engine, set the ``DATABASES`` `Django setting `_ accordingly." +msgstr "" + +#: ../../install/linux.rst:27 +msgid "Short version" +msgstr "" + +#: ../../install/linux.rst:38 +msgid "Then create **settings/local.py** as described :ref:`below `, then::" +msgstr "" + +#: ../../install/linux.rst:53 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/linux.rst:54 +msgid "First, you need to install all of the software on which Tabbycat depends, if you don't already have it installed." +msgstr "" + +#: ../../install/linux.rst:59 +msgid "These instructions are for Ubuntu, and are targeted at Ubuntu 18.04. If you have another distribution of Linux, we trust you'll know how to navigate the package manager for your distribution to install the dependencies." +msgstr "" + +#: ../../install/linux.rst:64 +msgid "1(a). Python" +msgstr "" + +#: ../../install/linux.rst:65 +msgid "Tabbycat requires Python 3.6 or later. You probably already have Python 3.6, but you'll also need the development package in order to install Psycopg2 later. The ``venv`` module will come in handy too. Install::" +msgstr "" + +#: ../../install/linux.rst:69 +msgid "Check the version::" +msgstr "" + +#: ../../install/linux.rst:74 +msgid "Tabbycat does not support Python 2. You must use Python 3.6 or later." +msgstr "" + +#: ../../install/linux.rst:77 +msgid "1(b). PostgreSQL" +msgstr "" + +#: ../../install/linux.rst:78 +msgid "*PostgreSQL is a database management system.*" +msgstr "" + +#: ../../install/linux.rst:80 +msgid "Install PostgreSQL using the `PostgreSQL installation instructions here `_." +msgstr "" + +#: ../../install/linux.rst:82 +msgid "Normally, installing the latest stable version should be best, but if you're having issues, install the same version as the current `default version on Heroku `_, as that will be what is currently most commonly used with Tabbycat. If you're planning on pushing data between your local installation and a Heroku site, it's best to match the Heroku's current default version." +msgstr "" + +#: ../../install/linux.rst:84 +msgid "You'll also need the ``libpq-dev`` package in order to install Psycopg2 later::" +msgstr "" + +#: ../../install/linux.rst:91 +msgid "1(c). Node.js/NPM" +msgstr "" + +#: ../../install/linux.rst:92 +msgid "*Node.js is a JavaScript runtime.*" +msgstr "" + +#: ../../install/linux.rst:94 +msgid "Tabbycat requires Node and its package manager to compile front-end dependencies. Install using:" +msgstr "" + +#: ../../install/linux.rst:104 +msgid "1(d). Other development tools" +msgstr "" + +#: ../../install/linux.rst:105 +msgid "Some of the Python packages require GCC, G++ and Make in order to install::" +msgstr "" + +#: ../../install/linux.rst:112 +msgid "2. Get the source code" +msgstr "" + +#: ../../install/linux.rst:114 +msgid "Choose either of the following two methods." +msgstr "" + +#: ../../install/linux.rst:117 +msgid "Method 1 (Git clone)" +msgstr "" + +#: ../../install/linux.rst:119 +msgid "If you have Git, life will be easier if you clone `our GitHub repository`_:" +msgstr "" + +#: ../../install/linux.rst:126 +msgid "(You can find out if you have Git using ``git --version``. If you don't, you can install it using ``sudo apt install git``.)" +msgstr "" + +#: ../../install/linux.rst:128 +msgid "The default branch is ``develop``, so you need to explicitly change the branch to ``master``, which is what the ``git checkout master`` line does." +msgstr "" + +#: ../../install/linux.rst:133 +msgid "You might like to fork the repository first, to give yourself a little more freedom to make code changes on the fly (and potentially :ref:`contribute ` them to the project)." +msgstr "" + +#: ../../install/linux.rst:136 +msgid "Method 2 (tarball)" +msgstr "" + +#: ../../install/linux.rst:138 +msgid "If you don't want to use Git, simply download and extract:" +msgstr "" + +#: ../../install/linux.rst:147 +msgid "3. Set up a new database" +msgstr "" + +#: ../../install/linux.rst:149 +msgid "You can skip step 1 if this is not your first installation. Every Tabbycat installation requires its own database, but they can use the same login role if you like." +msgstr "" + +#: ../../install/linux.rst:151 +msgid "Create a new user account with a password, replacing ``myusername`` with whatever name you prefer. If you don't know what username to pick, use ``tabbycat``. Grant this user the ability to create databases, since this'll make it easier to spin up new instances of Tabbycat in the future." +msgstr "" + +#: ../../install/linux.rst:157 +msgid "If you'll be running multiple instances of Tabbycat, developing, or diving into the database yourself, you might find it convenient to set up client authentication so that you don't need to do all manual operations from ``sudo -u postgres``. See the `PostgreSQL documentation on client authentication `_ for more information. For example, you could add a ``local all myusername md5`` line to the *pg_hba.conf* file, or you could define a mapping in *pg_ident.conf* and append the ``map=`` option to the ``local all all peer`` line in *pg_hba.conf*." +msgstr "" + +#: ../../install/linux.rst:159 +msgid "Create a new database, replacing ``mydatabasename`` with whatever name you prefer, probably the name of the tournament you're running::" +msgstr "" + +#: ../../install/linux.rst:167 +msgid "4. Install Tabbycat" +msgstr "" + +#: ../../install/linux.rst:168 +msgid "Almost there!" +msgstr "" + +#: ../../install/linux.rst:170 +msgid "Navigate to your Tabbycat directory::" +msgstr "" + +#: ../../install/linux.rst:176 +msgid "Start a new virtual environment. We suggest the name ``venv``, though it can be any name you like:" +msgstr "" + +#: ../../install/linux.rst:182 +msgid "Run the ``activate`` script. This puts you \"into\" the virtual environment::" +msgstr "" + +#: ../../install/linux.rst:186 +msgid "Install Tabbycat's requirements into your virtual environment::" +msgstr "" + +#: ../../install/linux.rst:192 +msgid "Navigate to the **tabbycat/settings** sub folder and copy **local.example** to **local.py**. Find this part in your new **local.py**, and fill in the blanks as indicated:" +msgstr "" + +#: ../../install/linux.rst:207 +msgid "Optionally, replace the value in this line in the same file with your own time zone, as defined in the `IANA time zone database `_ (*e.g.*, ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``)::" +msgstr "" + +#: ../../install/linux.rst:211 +msgid "Navigate to the **tabbycat** sub-directory, initialize the database, compile the assets, and create a user account for yourself::" +msgstr "" + +#: ../../install/linux.rst:219 +msgid "Start Tabbycat!" +msgstr "" + +#: ../../install/linux.rst:225 +msgid "It should show something like this::" +msgstr "" + +#: ../../install/linux.rst:229 +msgid "Open your browser and go to the URL printed above. (In the above example, it's http://127.0.0.1:8000.) It should look something like the screenshot below. If it does, great! You've successfully installed Tabbycat." +msgstr "" + +#: ../../install/linux.rst:234 +msgid "Naturally, your database is currently empty, so proceed to :ref:`importing initial data `." +msgstr "" + +#: ../../install/linux.rst:237 +msgid "Starting up an existing Tabbycat instance" +msgstr "" + +#: ../../install/linux.rst:238 +msgid "To start your Tabbycat instance up again next time you use your computer::" +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/install/local.po b/docs/locale/kk/LC_MESSAGES/install/local.po new file mode 100644 index 00000000000..061b0c0e341 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/install/local.po @@ -0,0 +1,156 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/local.po\n" +"X-Crowdin-File-ID: 1319\n" +"Language: kk_KZ\n" + +#: ../../install/local.rst:5 +msgid "Local Installations" +msgstr "" + +#: ../../install/local.rst:8 +msgid "What is a local installation?" +msgstr "" + +#: ../../install/local.rst:10 +msgid "Tabbycat is a web-based system: it's designed to run as a web site. However, instead of installing it on a web server, you can install it on your computer, serving web pages to yourself. This is called a local installation." +msgstr "" + +#: ../../install/local.rst:12 +msgid "Then, when you open your browser, you can use Tabbycat like any other web site. The only difference is that this one is on **your** computer, not some computer in a data centre in a far-away land. In effect, you are getting your computer to behave like a web server." +msgstr "" + +#: ../../install/local.rst:17 +msgid "Should I use a local installation?" +msgstr "" + +#: ../../install/local.rst:19 +msgid "In most cases, you should make an online Tabbycat installation by :ref:`setting up an instance on Heroku `. This has a number of major advantages:" +msgstr "" + +#: ../../install/local.rst:21 +msgid "The installation process is easier." +msgstr "" + +#: ../../install/local.rst:22 +msgid "You can enter ballots and manage your tournament from multiple computers." +msgstr "" + +#: ../../install/local.rst:23 +msgid "Participants can access the draw, motions, results and more online." +msgstr "" + +#: ../../install/local.rst:24 +msgid "Heroku's data centers are less likely to fail than your computer is." +msgstr "" + +#: ../../install/local.rst:25 +msgid "Heroku e-mails Tabbycat's developers error reports to help us fix bugs." +msgstr "" + +#: ../../install/local.rst:27 +msgid "In some cases, you might have a good reason to use a local installation. We can think of just one such reason: If you won't have access to the internet at your tournament, or if internet access will be flaky, then you should use a local installation." +msgstr "" + +#: ../../install/local.rst:32 +msgid "You'll need internet access to download dependencies during the local installation process. So if you're not expecting to have reliable internet access at your tournament, be sure to have Tabbycat installed *before* you get there!" +msgstr "" + +#: ../../install/local.rst:37 +msgid "Advanced users" +msgstr "" + +#: ../../install/local.rst:40 +msgid "Tabbycat is a `Django `_ project, so if you have your own preferred method of running Django projects, you can also do that. Just be aware that we haven't tried it." +msgstr "" + +#: ../../install/local.rst:45 +msgid "Okay, so how do I do it?" +msgstr "" + +#: ../../install/local.rst:47 +msgid "The easiest option is to :ref:`install Tabbycat using Docker `. This method should work across all operating systems and is by far the easiest way to get a local copy running." +msgstr "" + +#: ../../install/local.rst:49 +msgid "If installing using Docker does not work, or if you want to be able to modify Tabbycat's code we also have a number of instructions for manually setting up a copy of Tabbycat. There instructions are here:" +msgstr "" + +#: ../../install/local.rst:51 +msgid ":ref:`install-linux`" +msgstr "" + +#: ../../install/local.rst:52 +msgid ":ref:`install-osx`" +msgstr "" + +#: ../../install/local.rst:53 +msgid ":ref:`install-wsl`" +msgstr "" + +#: ../../install/local.rst:54 +msgid ":ref:`install-windows`" +msgstr "" + +#: ../../install/local.rst:57 +msgid "Advanced uses" +msgstr "" + +#: ../../install/local.rst:60 +msgid "Can others access my local install?" +msgstr "" + +#: ../../install/local.rst:62 +msgid "Local installations can also take advantage of multiple-computer site access, including data entry---it's just takes more work than a Heroku installation to set up." +msgstr "" + +#: ../../install/local.rst:64 +msgid "Since a local installation is just having your computer run a web server, it can serve other computers too. You can make this work even if you don't have internet access: all you need is a router that you can use to connect a few computers together. Then other computers on your local network can access the Tabbycat site hosted on your computer. We did this at Victoria Australs 2012." +msgstr "" + +#: ../../install/local.rst:66 +msgid "We don't provide detailed instructions for this; we leave it for advanced users to set up themselves. As a rough guide:" +msgstr "" + +#: ../../install/local.rst:68 +msgid "You need to pass in your computer's IP address and port to the `runserver` command, for example, if your computer (the one acting as a server) is 196.168.0.2 and you want to run it on port 8000: ``dj runserver 192.168.0.2:8000``" +msgstr "" + +#: ../../install/local.rst:69 +msgid "You need to configure your firewall settings to allow incoming connections on the IP address and port you specified in that command." +msgstr "" + +#: ../../install/local.rst:70 +msgid "Be aware that local installs use the Django development server, whose **security is not tested**. Therefore, it's a good idea to make sure your firewall **only lets in computers on your local network** (or, if you're really paranoid, isolate the network from the internet completely)." +msgstr "" + +#: ../../install/local.rst:73 +msgid "Can I run an internet-accessible website from a local installation?" +msgstr "" + +#: ../../install/local.rst:75 +msgid "Probably not. Even if you disable your firewall, chances are your home router (or university router) will block any connections from the outside world to you. Even if you can though, **you really shouldn't**. The local installation uses the *Django development server*, which is a lightweight server designed for developers. Specifically, Django **does not test the security of its development server** in the way that proper web servers do. That is: It's a security risk to run a local installation as an internet-accessible site. Don't do it. `Install Tabbycat on Heroku `_ instead." +msgstr "" + +#: ../../install/local.rst:77 +msgid "Alternatively, if you have a background in web development, you might choose to install Tabbycat on your own production server. It's a Django project, so any means of supporting Django projects should work fine." +msgstr "" + +#: ../../install/local.rst:79 +msgid "It's safe to run on a small, isolated network (see above) with your firewall correctly configured because you presumably trust everyone you let on the network!" +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/install/osx.po b/docs/locale/kk/LC_MESSAGES/install/osx.po new file mode 100644 index 00000000000..00613e0034c --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/install/osx.po @@ -0,0 +1,216 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/osx.po\n" +"X-Crowdin-File-ID: 1321\n" +"Language: kk_KZ\n" + +#: ../../install/osx.rst:5 +msgid "Installing Locally on macOS" +msgstr "" + +#: ../../install/osx.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/osx.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/osx.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on macOS, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/osx.rst:15 +msgid "Requisite technical knowledge" +msgstr "" + +#: ../../install/osx.rst:17 +msgid "You need to be familiar with command-line interfaces to get through this comfortably. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest. You just need to be prepared to bear with us. It'll take a while the first time, but it gets easier after that." +msgstr "" + +#: ../../install/osx.rst:19 +msgid "Every line in the instructions that begins with ``$`` is a command that you need to run in a **Terminal**, but without the ``$``: that sign is a convention used in instructions to make it clear that it is a command you need to run." +msgstr "" + +#: ../../install/osx.rst:21 ../../install/osx.rst:42 ../../install/osx.rst:68 +msgid "Advanced users" +msgstr "" + +#: ../../install/osx.rst:24 +msgid "If you wish to use an SQL engine other that PostgreSQL, most of Tabbycat should work, but a few features rely on SQL functions that aren't supported by all engines. To configure Tabbycat to use a different engine, set the ``DATABASES`` `Django setting `_ accordingly." +msgstr "" + +#: ../../install/osx.rst:27 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/osx.rst:29 +msgid "First, you need to install all of the software on which Tabbycat depends, if you don't already have it installed." +msgstr "" + +#: ../../install/osx.rst:32 +msgid "1(a). Python" +msgstr "" + +#: ../../install/osx.rst:33 +msgid "Tabbycat requires Python 3.6 or later. macOS only comes with Python 2.7, so you'll need to install this. You can download the latest version from the `Python website `_." +msgstr "" + +#: ../../install/osx.rst:35 +msgid "The executable will probably be called ``python3``, rather than ``python``. Check::" +msgstr "" + +#: ../../install/osx.rst:40 +msgid "Tabbycat does not support Python 2. You must use Python 3.6 or later." +msgstr "" + +#: ../../install/osx.rst:45 +msgid "These instructions will use the ``venv`` module. If you prefer, you can use `Virtualenv `_ instead." +msgstr "" + +#: ../../install/osx.rst:48 +msgid "1(b). Postgres.app" +msgstr "" + +#: ../../install/osx.rst:50 +msgid "Download `Postgres.app `_, move it to your Applications folder, and open it. This should place an icon in your menu bar, showing that the postgres database is running. Whenever you are running Tabbycat you'll need to have this app running." +msgstr "" + +#: ../../install/osx.rst:52 +msgid "You'll need to use the PostgreSQL command-line tools, so run the command that the Postgres.app suggests in its `installation instructions `_ for adding them to your ``$PATH``. As of February 2018, it was::" +msgstr "" + +#: ../../install/osx.rst:57 +msgid "1(c). Node.js/NPM" +msgstr "" + +#: ../../install/osx.rst:59 +msgid "Download and run the `node.js 8 macOS Installer (.pkg) `_" +msgstr "" + +#: ../../install/osx.rst:62 +msgid "2. Get the source code" +msgstr "" + +#: ../../install/osx.rst:64 +msgid "`Go to the page for our latest release `_." +msgstr "" + +#: ../../install/osx.rst:65 +msgid "Download the zip or tar.gz file." +msgstr "" + +#: ../../install/osx.rst:66 +msgid "Extract all files in it to a folder of your choice." +msgstr "" + +#: ../../install/osx.rst:71 +msgid "If you've used Git before, you might prefer to clone `our GitHub repository`_ instead. Don't forget to check out the |vrelease| tag or the master branch." +msgstr "" + +#: ../../install/osx.rst:73 +msgid "Even better, you might like to fork the repository first, to give yourself a little more freedom to make code changes on the fly (and potentially :ref:`contribute ` them to the project)." +msgstr "" + +#: ../../install/osx.rst:76 +msgid "3. Set up a new database" +msgstr "" + +#: ../../install/osx.rst:78 +msgid "You can skip steps 1--3 if this is not your first installation. Every Tabbycat installation requires its own database, but they can use the same login role if you like." +msgstr "" + +#: ../../install/osx.rst:80 +msgid "Open up a copy of the Terminal app, then copy/paste or type in::" +msgstr "" + +#: ../../install/osx.rst:84 +msgid "Hit enter then quit and reopen the Terminal app." +msgstr "" + +#: ../../install/osx.rst:86 +msgid "Create a new user account with a password, replacing ``myusername`` with whatever name you prefer. If you don't know what username to pick, use ``tabbycat``." +msgstr "" + +#: ../../install/osx.rst:92 +msgid "Create a new database, replacing ``mydatabasename`` with whatever name you prefer, probably the name of the tournament you're running::" +msgstr "" + +#: ../../install/osx.rst:96 +msgid "In terminal type in::" +msgstr "" + +#: ../../install/osx.rst:101 +msgid "4. Install Tabbycat" +msgstr "" + +#: ../../install/osx.rst:102 +msgid "Almost there!" +msgstr "" + +#: ../../install/osx.rst:104 +msgid "Navigate to your Tabbycat directory::" +msgstr "" + +#: ../../install/osx.rst:108 +msgid "Copy **settings/local.example** to **settings/local.py**. Find this part in your new **local.py**, and fill in the blanks as indicated:" +msgstr "" + +#: ../../install/osx.rst:123 +msgid "Optionally, replace the value in this line in the same file with your own time zone, as defined in the `IANA time zone database `_ (*e.g.*, ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``)::" +msgstr "" + +#: ../../install/osx.rst:127 +msgid "Ensure you are in the main Tabbycat directory (not the config folder where **settings_local.py** is and start a new virtual environment. We suggest the name ``venv``, though it can be any name you like::" +msgstr "" + +#: ../../install/osx.rst:131 +msgid "Run the ``activate`` script. This puts you \"into\" the virtual environment::" +msgstr "" + +#: ../../install/osx.rst:135 +msgid "Install Tabbycat's requirements into your virtual environment::" +msgstr "" + +#: ../../install/osx.rst:141 +msgid "Navigate to the **tabbycat** sub folder, initialize the database, compile the assets, and create a user account for yourself::" +msgstr "" + +#: ../../install/osx.rst:149 +msgid "Start Tabbycat!" +msgstr "" + +#: ../../install/osx.rst:155 +msgid "It should show something like this::" +msgstr "" + +#: ../../install/osx.rst:159 +msgid "Open your browser and go to the URL printed above. (In the above example, it's http://127.0.0.1:8000.) It should look something like the screenshot below. If it does, great! You've successfully installed Tabbycat." +msgstr "" + +#: ../../install/osx.rst:164 +msgid "Naturally, your database is currently empty, so proceed to :ref:`importing initial data `." +msgstr "" + +#: ../../install/osx.rst:167 +msgid "Starting up an existing Tabbycat instance" +msgstr "" + +#: ../../install/osx.rst:168 +msgid "To start your Tabbycat instance up again next time you use your computer::" +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/install/windows.po b/docs/locale/kk/LC_MESSAGES/install/windows.po new file mode 100644 index 00000000000..bd7b6d5305e --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/install/windows.po @@ -0,0 +1,317 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/windows.po\n" +"X-Crowdin-File-ID: 1323\n" +"Language: kk_KZ\n" + +#: ../../install/windows.rst:5 +msgid "Installing Locally on Windows" +msgstr "" + +#: ../../install/windows.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/windows.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/windows.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on Windows, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/windows.rst:14 +msgid "If you have Windows 10 and any experience with Linux, we recommend installing it on :ref:`Linux on Windows (WSL) ` instead, which is much easier than the process below." +msgstr "" + +#: ../../install/windows.rst:17 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/windows.rst:19 +msgid "You need to be familiar with command-line interfaces to get through this comfortably. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest. You just need to be prepared to bear with us. It'll take a while the first time, but it gets easier after that." +msgstr "" + +#: ../../install/windows.rst:21 +msgid "In these instructions, we'll use **Windows PowerShell**, a command-line interface that comes with every installation of Windows (since XP). The easiest way to find it (on Windows 7 and later) is to search for it in your Start Menu. Every line in the instructions that begins with ``>`` is a command that you need to run in PowerShell, but without the ``>``: that sign is a convention used in instructions to make it clear that it is a command you need to run." +msgstr "" + +#: ../../install/windows.rst:23 ../../install/windows.rst:81 +#: ../../install/windows.rst:104 +msgid "Advanced users" +msgstr "" + +#: ../../install/windows.rst:26 +msgid "If you wish to use an SQL engine other that PostgreSQL, most of Tabbycat should work, but a few features rely on SQL functions that aren't supported by all engines. To configure Tabbycat to use a different engine, set the ``DATABASES`` `Django setting `_ accordingly." +msgstr "" + +#: ../../install/windows.rst:29 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/windows.rst:31 +msgid "First, you need to install all of the software on which Tabbycat depends, if you don't already have it installed." +msgstr "" + +#: ../../install/windows.rst:36 +msgid "1(a). Python" +msgstr "" + +#: ../../install/windows.rst:37 +msgid "*Python is a popular programming language, and the language in which the core of Tabbycat is coded.*" +msgstr "" + +#: ../../install/windows.rst:39 +msgid "Download and install the latest version of Python 3.6 from the `Python website `_. In the installer, check the box to add Python to your PATH (see box below)." +msgstr "" + +#: ../../install/windows.rst:42 +msgid "Which file should I download?" +msgstr "" + +#: ../../install/windows.rst:44 +msgid "Regardless of if you have 64-bit or 32-bit Windows, choose the \"Windows x86 executable installer\"." +msgstr "" + +#: ../../install/windows.rst:46 +msgid "**Please take note:** Just after you open the installer, **check the \"Add Python 3.6 to PATH\" box**:" +msgstr "" + +#: ../../install/windows.rst:51 +msgid "To check that Python is installed correctly, open Windows PowerShell, type ``python`` and press Enter. It should look something like this. If you installed the 32-bit version, it will say ``32 bit`` instead of ``64 bit``." +msgstr "" + +#: ../../install/windows.rst:55 +msgid "(To exit Python, type ``exit()`` then press Enter.)" +msgstr "" + +#: ../../install/windows.rst:57 +msgid "**If you already have Python**, great! Some things to double-check:" +msgstr "" + +#: ../../install/windows.rst:59 +msgid "You must have at least Python 3.6 (Python 2 is not supported.)" +msgstr "" + +#: ../../install/windows.rst:60 +msgid "Your installation path must not have any spaces in it." +msgstr "" + +#: ../../install/windows.rst:61 +msgid "If that doesn't work, note that the following must be part of your ``PATH`` environment variable: ``C:\\Python36;C:\\Python36\\Scripts`` (or as appropriate for your installation directory). Follow `the instructions here `_ to add this to your path." +msgstr "" + +#: ../../install/windows.rst:66 +msgid "1(b). PostgreSQL" +msgstr "" + +#: ../../install/windows.rst:67 +msgid "*PostgreSQL is a database management system.*" +msgstr "" + +#: ../../install/windows.rst:69 +msgid "Go to the `PostgreSQL downloads page `_, then follow the link through to EnterpriseDB to download and install the latest version of PostgreSQL." +msgstr "" + +#: ../../install/windows.rst:71 +msgid "Once PostgreSQL is installed, the PostgreSQL service will run on your computer whenever you are using it. You might prefer to configure it so that it only runs when you want to run Tabbycat. To do this, open \"Services\" in your Control Panel on Windows, find the PostgreSQL service, and change its startup type to \"Manual\". This will tell it not to start whenever you log in. Then, if you want to run the server (so you can use Tabbycat), you can do so from \"Services\" by selecting the PostgreSQL service and clicking \"Start the service\"." +msgstr "" + +#: ../../install/windows.rst:74 +msgid "1(c). Git" +msgstr "" + +#: ../../install/windows.rst:75 +msgid "*Git is a version control system.*" +msgstr "" + +#: ../../install/windows.rst:77 +msgid "We won't use Git directly, but Node.js (which we install in the next step) requires Git to work. So, install the latest version for Windows from the `Git website `_." +msgstr "" + +#: ../../install/windows.rst:84 +msgid "If you already have `GitHub Desktop `_ installed, you might think that this would be good enough. Unfortunately, it's not---GitHub Desktop installs a portable version of Git. Node.js, on the other hand, requires the ``git`` to be in the ``PATH``, so it can call it directly. The easiest (but not only) way to do this is just to install Git from the link above." +msgstr "" + +#: ../../install/windows.rst:92 +msgid "1(d). Node.js/NPM" +msgstr "" + +#: ../../install/windows.rst:93 +msgid "*Node.js is a JavaScript runtime.*" +msgstr "" + +#: ../../install/windows.rst:95 +msgid "Download and run the node.js 8 Installer (.msi) for either `x64 versions `_ of Windows or `x86 versions `_." +msgstr "" + +#: ../../install/windows.rst:98 +msgid "2. Get the source code" +msgstr "" + +#: ../../install/windows.rst:100 +msgid "`Go to the page for our latest release `_." +msgstr "" + +#: ../../install/windows.rst:101 +msgid "Download the zip file." +msgstr "" + +#: ../../install/windows.rst:102 +msgid "Extract all files in it to a folder of your choice." +msgstr "" + +#: ../../install/windows.rst:107 +msgid "If you've used Git before, you might prefer to clone `our GitHub repository`_ instead. Don't forget to check out the |vrelease| tag or the master branch." +msgstr "" + +#: ../../install/windows.rst:109 +msgid "Even better, you might like to fork the repository first, to give yourself a little more freedom to make code changes on the fly (and potentially :ref:`contribute ` them to the project)." +msgstr "" + +#: ../../install/windows.rst:114 +msgid "3. Set up a new database" +msgstr "" + +#: ../../install/windows.rst:116 +msgid "You can skip steps 2 and 3 if this is not your first installation. Every Tabbycat installation requires its own database, but they can use the same login role if you like." +msgstr "" + +#: ../../install/windows.rst:118 +msgid "Open the **pgAdmin** tool, which you installed as part of installing PostgreSQL. In the object browser on the left, double-click the server marked \"(localhost:5432)\". Log in using the password you set during installation." +msgstr "" + +#: ../../install/windows.rst:120 +msgid "Right-click Login Roles, and click \"New Login Role…\"" +msgstr "" + +#: ../../install/windows.rst:124 +msgid "Fill in the New Login Role box as follows (everything not listed below can be left as-is):" +msgstr "" + +#: ../../install/windows.rst:126 +msgid "In the **Properties** tab, in **Role Name**, choose a user account name. (If you don't know what to pick, we suggest \"tabbycat\".)" +msgstr "" + +#: ../../install/windows.rst:127 +msgid "In the **Definition** tab, choose a **Password** and type it in **Password (again)**." +msgstr "" + +#: ../../install/windows.rst:129 +msgid "Then click OK. (Remember this user name and password, you'll need it later.)" +msgstr "" + +#: ../../install/windows.rst:131 +msgid "Right-click Databases, and click \"New Database…\"" +msgstr "" + +#: ../../install/windows.rst:135 +msgid "Fill in the New Database box as follows (everything not listed below can be left as-is):" +msgstr "" + +#: ../../install/windows.rst:137 +msgid "In the **Properties** tab, in **Name**, choose a database name (with no spaces in it)." +msgstr "" + +#: ../../install/windows.rst:138 +msgid "In the **Properties** tab, in **Owner**, type the name of the login role you just created." +msgstr "" + +#: ../../install/windows.rst:140 +msgid "Then click OK. (Remember the database name, you'll need it later.)" +msgstr "" + +#: ../../install/windows.rst:143 +msgid "4. Install Tabbycat" +msgstr "" + +#: ../../install/windows.rst:145 +msgid "Almost there!" +msgstr "" + +#: ../../install/windows.rst:147 +msgid "Open a Windows PowerShell. Navigate to the folder where you cloned/extracted Tabbycat. For example, if you installed it in ``C:\\Users\\myusername\\Documents\\GitHub\\tabbycat``, then run::" +msgstr "" + +#: ../../install/windows.rst:151 +msgid "Make a copy of **settings\\\\local.example** and rename it to **settings\\\\local.py**. Open your new **local.py** file. Find this part, and fill in the blanks (the empty quotation marks) as indicated:" +msgstr "" + +#: ../../install/windows.rst:166 +msgid "Optionally, replace the value in this line in the same file with your own time zone, as defined in the `IANA time zone database `_ (*e.g.*, ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``)::" +msgstr "" + +#: ../../install/windows.rst:170 +msgid "Start a new virtual environment. We suggest the name `venv`, though it can be any name you like::" +msgstr "" + +#: ../../install/windows.rst:174 +msgid "Run the `Activate.ps1` script. This puts you \"into\" the virtual environment::" +msgstr "" + +#: ../../install/windows.rst:178 +msgid "If you get an error message saying that the script isn't digitally signed, open a PowerShell with administrator privileges by right-clicking PowerShell in the Start meny and clicking \"Run as administrator\". Then run this command::" +msgstr "" + +#: ../../install/windows.rst:182 +msgid "Read the warning message, then type ``y`` to confirm. By default, the execution policy on Windows is ``Restricted``, which does not permit scripts like ``activate`` to be run. Changing it to ``RemoteSigned`` relaxes it to allow local scripts to be run without checking the signature." +msgstr "" + +#: ../../install/windows.rst:184 +msgid "Install Tabbycat's requirements." +msgstr "" + +#: ../../install/windows.rst:186 +msgid "If you installed **32-bit Python**::" +msgstr "" + +#: ../../install/windows.rst:192 +msgid "You might be wondering: I thought I already installed the requirements. Why am I installing more? And the answer is: Before, you were installing the requirements to create a Python virtual environment for Tabbycat to live in. Now, you're *in* the virtual environment, and you're installing everything required for *Tabbycat* to operate." +msgstr "" + +#: ../../install/windows.rst:194 +msgid "Initialize the database and create a user account for yourself::" +msgstr "" + +#: ../../install/windows.rst:202 +msgid "Start Tabbycat!" +msgstr "" + +#: ../../install/windows.rst:208 +msgid "It should show something like this::" +msgstr "" + +#: ../../install/windows.rst:212 +msgid "Open your browser and go to the URL printed above. (In the above example, it's http://127.0.0.1:8000/). It should look something like this:" +msgstr "" + +#: ../../install/windows.rst:216 +msgid "If it does, great! You've successfully installed Tabbycat." +msgstr "" + +#: ../../install/windows.rst:218 +msgid "Naturally, your database is currently empty, so proceed to :ref:`importing initial data `." +msgstr "" + +#: ../../install/windows.rst:221 +msgid "Starting up an existing Tabbycat instance" +msgstr "" + +#: ../../install/windows.rst:223 +msgid "To start your Tabbycat instance up again next time you use your computer, open a PowerShell and::" +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/install/wsl.po b/docs/locale/kk/LC_MESSAGES/install/wsl.po new file mode 100644 index 00000000000..94a5036e358 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/install/wsl.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/wsl.po\n" +"X-Crowdin-File-ID: 1325\n" +"Language: kk_KZ\n" + +#: ../../install/wsl.rst:5 +msgid "Installing Locally on Linux on Windows (WSL)" +msgstr "" + +#: ../../install/wsl.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/wsl.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/wsl.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on Windows, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/wsl.rst:14 +msgid "Windows Subsystem for Linux is only available on Windows 10. If you have an older version of Windows, :ref:`install Tabbycat locally on Windows ` instead." +msgstr "" + +#: ../../install/wsl.rst:18 +msgid "Windows Subsystem for Linux (WSL) was taken out of beta in the `Windows 10 Fall Creators Update `_, which was released in October 2017. On Windows 10 computers, we now recommend this local installation method over :ref:`installing it directly on Windows `." +msgstr "" + +#: ../../install/wsl.rst:21 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/wsl.rst:23 +msgid "It will help a lot if you have some experience with Linux, but mainly you need to be familiar with command-line interfaces, and you should be willing to install and work with the `Windows Subsystem for Linux `_. You might need to be prepared to familiarise yourself with aspects of WSL not covered in these instructions. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest." +msgstr "" + +#: ../../install/wsl.rst:27 +msgid "A. Install Ubuntu on Windows" +msgstr "" + +#: ../../install/wsl.rst:29 +msgid "*If you already have a Linux distribution installed on your PC, skip to* :ref:`part B `." +msgstr "" + +#: ../../install/wsl.rst:31 +msgid "First, `check that you have the Fall Creators Update (build 1709) `_. If you don't, update Windows." +msgstr "" + +#: ../../install/wsl.rst:33 +msgid "Then, install the Windows Subsystem for Linux. For most people, this involves the following:" +msgstr "" + +#: ../../install/wsl.rst:35 +msgid "Enable the Windows Subsystem for Linux feature, by finding **Turn Windows features on or off** on the Start Menu, then checking the box for **Windows Subsystem for Linux** and clicking **OK**. You'll be prompted to restart your computer to make the changes take effect." +msgstr "" + +#: ../../install/wsl.rst:39 +msgid "Install Ubuntu by finding it on the Microsoft Store. For your convenience, `here's a direct link to Ubuntu on the Microsoft Store `_." +msgstr "" + +#: ../../install/wsl.rst:41 +msgid "Launch Ubuntu and follow the instructions. You'll be prompted to create a user account for your Ubuntu system." +msgstr "" + +#: ../../install/wsl.rst:43 +msgid "Some more detailed instructions, including some troubleshooting, are `available on Microsoft's website `_." +msgstr "" + +#: ../../install/wsl.rst:45 +msgid "Advanced users" +msgstr "" + +#: ../../install/wsl.rst:48 +msgid "You can, of course, use any Linux distribution that Windows supports. We just suggest Ubuntu because it's the most well-known (and the one that we use)." +msgstr "" + +#: ../../install/wsl.rst:53 +msgid "B. Install Tabbycat" +msgstr "" + +#: ../../install/wsl.rst:55 +msgid "You now have a Linux subsystem running on your computer, so head over to the :ref:`instructions to install Tabbycat locally on Linux ` and follow those (in full)." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/use/finishing-a-tournament.po b/docs/locale/kk/LC_MESSAGES/use/finishing-a-tournament.po new file mode 100644 index 00000000000..fa81148bc15 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/use/finishing-a-tournament.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/finishing-a-tournament.po\n" +"X-Crowdin-File-ID: 1327\n" +"Language: kk_KZ\n" + +#: ../../use/finishing-a-tournament.rst:5 +msgid "Finishing a Tournament" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:7 +msgid "This page outlines some final steps to take after the conclusion of outrounds." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:10 +msgid "Tab Release" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:12 +msgid "Tabs can be released using the *Tab released* option under **Setup** > **Configuration**. Tabbycat offers the following system tabs:" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:14 +msgid "Team Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:15 +msgid "Speakers Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:16 +msgid "Replies Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:17 +msgid "Motions Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:19 +msgid "You can configure the team, speakers and replies tab to display only a certain number of speakers, *e.g.*, to show only a \"Top 10 Speakers\" tab." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:21 +msgid "If you defined any speaker categories (for example, Novice, ESL or EFL), a tab for each category marked \"public\" can also be released using the **Release speaker category tabs to public**. You can similarly limit each of these tabs to display just the top few speakers, in the definition of the speaker categories. The speaker categories not marked public are *not* released by this option." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:23 +msgid "You can also redact individual speaker's identifying details (name, team, and institution) from the public individual tabs. You can do so by going into the **Edit Database** area, going to *Participants > Speakers*, finding the speaker and clicking the **Anonymous** box (and saving)." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:25 +msgid "Public tab pages are cached for performance reasons. This means that any changes that affect a tab page (say redacting a speaker or changing a speaker score) may not show up on the public site for up to an hour." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:28 +msgid "Wrapping Up" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:30 +msgid "You probably want to turn off the *Public ballots*, *Public feedback*, *Feedback progress*, and *Public draw* features under **Configuration** at this stage as they no longer have any use." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:32 +msgid "You also want to go into the **Edit Database** area, find the tournament and hit \"release all\" so that the results for the final round can be released." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/use/importing-data.po b/docs/locale/kk/LC_MESSAGES/use/importing-data.po new file mode 100644 index 00000000000..5feab5a1074 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/use/importing-data.po @@ -0,0 +1,236 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/importing-data.po\n" +"X-Crowdin-File-ID: 1329\n" +"Language: kk_KZ\n" + +#: ../../use/importing-data.rst:5 +msgid "Importing Initial Data" +msgstr "" + +#: ../../use/importing-data.rst:7 +msgid "Once you've got Tabbycat installed, the next step is to import data for the tournament: that is, import details of teams, speakers, adjudicators and rounds. There are a few ways to do this, each with their advantages and disadvantages." +msgstr "" + +#: ../../use/importing-data.rst:9 +msgid "To help you decide which to choose, here's a summary:" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Method" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Best for" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Drawcard" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Drawback" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "**Demonstration data**" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "Trying out Tabbycat" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "Loads sample data in one click" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "Not for use with real tournaments" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "**Simple importer**" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "Small and medium-sized tournaments" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "Easy to use" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "Only deals with basic data" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "**Edit database**" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "Adding data not handled by the simple importer or editing existing data" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "Can handle all types of information" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "Adding large amounts of data is time consuming" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "``importtournament`` **command**" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "Large tournaments" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "Easier to repeat, can handle most formats of information" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "Requires basic knowledge of how to use a command line interface" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "**Developing your own importer**" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "Large tournaments with custom needs" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "Easier to repeat, will take information in whatever format it is already in" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "Requires background in Python and and learning about the importer classes" +msgstr "" + +#: ../../use/importing-data.rst:41 +msgid "Demonstration data" +msgstr "" + +#: ../../use/importing-data.rst:42 +msgid "If you're just learning or experimenting with Tabbycat, there are two demonstration datasets available, each with a sample set of teams, adjudicators, *etc.*, so that you can immediately start running rounds. Just be aware that these probably won't relate to anyone at your real-life tournament." +msgstr "" + +#: ../../use/importing-data.rst:44 +msgid "To load a demonstration dataset, click **New Tournament** link on the home page (once logged in as admin). You'll see a page titled \"Create New Tournament\". Scroll to the bottom of this page and click on one of the links at the bottom." +msgstr "" + +#: ../../use/importing-data.rst:47 +msgid "Simple importer" +msgstr "" + +#: ../../use/importing-data.rst:48 +msgid "The simple importer is the easiest way to get a tournament going, and we recommend it for small- and medium-sized tournaments. It allows you to add institutions, teams, adjudicators, venues, venue categories and venue constraints. (If you need to add anything else, use the :ref:`Edit Database area ` instead.)" +msgstr "" + +#: ../../use/importing-data.rst:50 +msgid "To get started, create a new tournament using the **New Tournament** link on the home page (once logged in as admin). It'll ask you for a few basic pieces of information." +msgstr "" + +#: ../../use/importing-data.rst:54 +msgid "Then, once you're in your tournament, click **Setup** in the left-hand menu, then **Import Data**, to open the simple importer." +msgstr "" + +#: ../../use/importing-data.rst:58 +msgid "You first need to add institutions. Once institutions are added, you can then add teams and adjudicators in the relevant sections. Each of these is a two-step process:" +msgstr "" + +#: ../../use/importing-data.rst:60 +msgid "For **institutions** and **venues**, it will first ask you to copy-paste a list of names and properties in a comma-separated table format. The second step is to confirm individual fiels." +msgstr "" + +#: ../../use/importing-data.rst:61 +msgid "For **teams** and **adjudicators**, it will first ask you how many teams/adjudicators to add for each institution (or who lack an institutional affiliation). The second step is to fill in their details, for example, names." +msgstr "" + +#: ../../use/importing-data.rst:69 +msgid "Finally, if you would like to use venue categories and/or :ref:`venue constraints `, you can do so using the two last sections of the simple importer." +msgstr "" + +#: ../../use/importing-data.rst:71 +msgid "If copying and pasting from a spreadsheet, an easy way to make a comma-separated table is to save a spreadsheet with the relevant information as a \\*.csv file, then open this file in a plain text editor (such as Notepad or TextEdit), and copying it from there." +msgstr "" + +#: ../../use/importing-data.rst:76 +msgid "Editing the database" +msgstr "" + +#: ../../use/importing-data.rst:77 +msgid "Sometimes, the simple importer just isn't enough---whether because you need more customization than the simple importer handles (*e.g.* adjudicator feedback questions), or because some participants changed their details after you imported the inital data. In this case, the easiest thing to do is to edit the database via the Django administrative interface (under Setup > Edit Database)." +msgstr "" + +#: ../../use/importing-data.rst:79 +msgid "The general pattern goes like this: Go to **Setup > Edit Database**, find the type of object you wish to add/change, and click \"Add\" or \"Change\". Then, fill in what you need to and save the object." +msgstr "" + +#: ../../use/importing-data.rst:81 +msgid "The Edit Database area is very powerful, and naturally if you mess things up, you can insert potentially catastrophic inconsistencies into the database. For participant information this is hard to do, but it's worth keeping in mind." +msgstr "" + +#: ../../use/importing-data.rst:86 +msgid "The ``importtournament`` command on local installations" +msgstr "" + +#: ../../use/importing-data.rst:88 +msgid "We've written a management command called ``importtournament`` to help automate the tournament set-up. The script, however, is neither foolproof nor comprehensive, so you might find you need to modify things slightly if your tournament structure is different from ours. Be prepared to try this a few times to get it to work. Nonetheless, this is probably the fastest way to set up a tournament." +msgstr "" + +#: ../../use/importing-data.rst:90 +msgid "Copy and rename the ``data/demo`` folder" +msgstr "" + +#: ../../use/importing-data.rst:91 +msgid "See the CSV files in the new folder, and add/replace the data as per your tournament. Note that the institutions (*i.e.* first column) in the ``speakers.csv`` and ``adjudicators.csv`` files must match the institutions in the second column of the ``institutions.csv`` file. And that all CSV files must end with a blank line." +msgstr "" + +#: ../../use/importing-data.rst:92 +msgid "Use this command, replacing ``YOUR_DATA_DIR`` with your new folder's name. (Square brackets indicate optional arguments; if you use them, omit the square brackets. All of them relate to the name of your tournament.)" +msgstr "" + +#: ../../use/importing-data.rst:98 +msgid "This script has a number of options. They're worth taking a look at before you run the script. For details, see::" +msgstr "" + +#: ../../use/importing-data.rst:102 +msgid "Assuming the command completes successfully without errors, you should double check the data in the Django interface, as described above in :ref:`import-edit-database`. In particular you should check that the *Rounds* have the correct draw types and that silent rounds have been marked correctly." +msgstr "" + +#: ../../use/importing-data.rst:105 +msgid "``importtournament`` on Heroku installs" +msgstr "" + +#: ../../use/importing-data.rst:107 +msgid "Instructions for using the ``importtournament`` command on Heroku installations are in steps 4 and 5 of :ref:`install-heroku`. The recommended procedure is first to import the tournament into a local installation, :ref:`as described above `, and then to push the local database to Heroku using the ``heroku pg:push`` command." +msgstr "" + +#: ../../use/importing-data.rst:110 +msgid "Developing your own importer" +msgstr "" + +#: ../../use/importing-data.rst:112 +msgid "If our suggested file formats cause you headaches, it might be easier to write your own importer. We have a generic importer framework that should make this easier, so for some tournaments it might (very conceivably) be faster to write your own importer to conform to your data, than it is to make your data conform to our importer. You need a background in Python in order to do this. For more details, see :ref:`tournament-data-importers`." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/use/running-a-tournament.po b/docs/locale/kk/LC_MESSAGES/use/running-a-tournament.po new file mode 100644 index 00000000000..e3351b43512 --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/use/running-a-tournament.po @@ -0,0 +1,196 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/running-a-tournament.po\n" +"X-Crowdin-File-ID: 1331\n" +"Language: kk_KZ\n" + +#: ../../use/running-a-tournament.rst:5 +msgid "Running a Tournament" +msgstr "" + +#: ../../use/running-a-tournament.rst:7 +msgid "Once you've finished the steps in :ref:`starting-a-tournament`, you're ready to go! This page outlines what you would do for each round during the tournament. After the tournament, proceed to :ref:`finishing-a-tournament`." +msgstr "" + +#: ../../use/running-a-tournament.rst:9 +msgid "This is all done from the admin area (*i.e.*, by the tab director or adjudication core member). In the admin area, tournament-wide pages (feedback, standings, and break) are at the top of the left-hand menu, while round-specific pages (availability, draw, display, motions, and results) are in dropdown's organised by each round's abbreviation." +msgstr "" + +#: ../../use/running-a-tournament.rst:11 +msgid "The basic workflow for each round is:" +msgstr "" + +#: ../../use/running-a-tournament.rst:13 +msgid ":ref:`Mark the teams, adjudicators, and venues present as available `" +msgstr "" + +#: ../../use/running-a-tournament.rst:14 +msgid ":ref:`Generate the draw ` and allocate the adjudicators" +msgstr "" + +#: ../../use/running-a-tournament.rst:15 +msgid ":ref:`Show/release the draw `" +msgstr "" + +#: ../../use/running-a-tournament.rst:16 +msgid ":ref:`Release/enter ` the motions" +msgstr "" + +#: ../../use/running-a-tournament.rst:17 +msgid "Have the debates" +msgstr "" + +#: ../../use/running-a-tournament.rst:18 +msgid ":ref:`Enter results `" +msgstr "" + +#: ../../use/running-a-tournament.rst:19 +msgid ":ref:`Advance to the next round `" +msgstr "" + +#: ../../use/running-a-tournament.rst:24 +msgid "Availability" +msgstr "" + +#: ../../use/running-a-tournament.rst:26 +msgid "**Set availability.** For each round, you need to set the venue, team and adjudicator availability. If any of those are not marked as available they will not be used within the draw; so this feature is mostly useful for when adjudicators or venues are only available for certain rounds." +msgstr "" + +#: ../../use/running-a-tournament.rst:28 +msgid "To do this, click the round in the menu, then click **Check-Ins**. Here you can then go to the availability pages for venue, teams, and adjudicators, or check in everything at once. When you've set everything appropriately use the **Generate Draw** button in the top right to advance." +msgstr "" + +#: ../../use/running-a-tournament.rst:34 +msgid "You can set availabilities in advance of the current round — ie if you know the venue/adjudicator schedules their availabilities can be set ahead of time." +msgstr "" + +#: ../../use/running-a-tournament.rst:37 +msgid "Generating the draw" +msgstr "" + +#: ../../use/running-a-tournament.rst:39 +msgid "**Confirm the draft draw**. After advancing from availability section you will first be shown a draft draw that details how the draw was formulated, pointing out pull-ups and conflict swaps and the like." +msgstr "" + +#: ../../use/running-a-tournament.rst:43 +msgid "The draft draw is for you to double-check. While there are some basic tests on the draw algorithm, it never hurts to sanity-check it again." +msgstr "" + +#: ../../use/running-a-tournament.rst:45 +msgid "If you *do* find something wrong with a draft draw, you can edit the match-ups, but please also let us know what the problem was! You can find our contact details in the :ref:`authors` section." +msgstr "" + +#: ../../use/running-a-tournament.rst:47 +msgid "Once on the confirmed draw page you can click **Edit Adjudicators**." +msgstr "" + +#: ../../use/running-a-tournament.rst:51 +msgid "**Allocate the adjudicators**. Changes here will auto-save; feel free to return to the **Draw** when needed. See :ref:`adjudicator allocation ` for more details about the allocation process." +msgstr "" + +#: ../../use/running-a-tournament.rst:55 +msgid "If you are using venue constraints the **Draw** page may prompt you to Auto Allocate the venues used to satisfy those constraints; see :ref:`venue-constraints ` for more details. Regardless of whether you are using venue constraints or not you can change the Venues per-debate in the **Edit Venues** area." +msgstr "" + +#: ../../use/running-a-tournament.rst:60 +msgid "Releasing the draw" +msgstr "" + +#: ../../use/running-a-tournament.rst:62 +msgid "Once you're happy with your adjudicator allocation, you're ready to start the round." +msgstr "" + +#: ../../use/running-a-tournament.rst:64 +msgid "**Release to general assembly.** From the *Display* page for that round, go to **Show by Venue** or **Show by Team** (whichever you prefer). Then put it up on the projector. There are automatic scroll buttons and buttons for changing text sizing." +msgstr "" + +#: ../../use/running-a-tournament.rst:68 +msgid "**Release to public.** If you're using the public draw function (where the draw is posted publicly to your Tabbycat website) use the **Release to Public** button to allow the page to display." +msgstr "" + +#: ../../use/running-a-tournament.rst:72 +msgid "To avoid the site from being overloaded by anxious refreshers, we recommend that large tournaments not release the draw to the public until after it's been seen by general assembly. That said, note that due to caching there can be a delay of up to 1 minute between when a draw is released and when it first shows up on the public site." +msgstr "" + +#: ../../use/running-a-tournament.rst:73 +msgid "Tabbycat can be set to send emails once the draw is released to adjudicators informing them of their assignments for convenience." +msgstr "" + +#: ../../use/running-a-tournament.rst:78 +msgid "Entering and Releasing Motions" +msgstr "" + +#: ../../use/running-a-tournament.rst:80 +msgid "Tabbycat is agnostic as to whether you enter motions into Tabbycat before or after they are shown publicly. However, they must be entered *at some point* before ballots are entered." +msgstr "" + +#: ../../use/running-a-tournament.rst:82 +msgid "**Enter the motion text.** Either before or after their public release motions can be entered in the **Motions** section for that round." +msgstr "" + +#: ../../use/running-a-tournament.rst:84 +msgid "**Release to general assembly.** If you are entering motions *before* they are publicly revealed note that there is a *Display Motions* button in the **Display** area that allows you to do a Power Point style motion release." +msgstr "" + +#: ../../use/running-a-tournament.rst:86 +msgid "**Release to public.** As with draws, if you have the *enable public view of motions* setting configured your Tabbycat website will display a running list of motions from the tournament. When this is on, using the **Release Motions to Public** button on the **Motions** page will mark the current set of motions as able to be displayed on this page." +msgstr "" + +#: ../../use/running-a-tournament.rst:91 +msgid "Entering Results" +msgstr "" + +#: ../../use/running-a-tournament.rst:93 +msgid "Enter debate results and feedback as they come in (and/or allow online entry of results and feedback)." +msgstr "" + +#: ../../use/running-a-tournament.rst:95 +msgid "Both results and feedback entered in the tab room or online need to be confirmed before the results are counted. To confirm a debate ballot and the debate as a whole, the confirmed checkbox under *Ballot Status* should be ticket in addition to the *Debate Status* being set to Confirmed." +msgstr "" + +#: ../../use/running-a-tournament.rst:97 +msgid "Note that you can track data entry progress from the **Overview** page for the tournament." +msgstr "" + +#: ../../use/running-a-tournament.rst:99 +msgid "See :ref:`data-entry` for more details about the data entry process." +msgstr "" + +#: ../../use/running-a-tournament.rst:101 +msgid "We strongly recommend entering all data using the assistant area, not the admin area. This is because the admin area (intentionally) does not enforce the data confirmation procedure." +msgstr "" + +#: ../../use/running-a-tournament.rst:106 +msgid "Advancing to the next round" +msgstr "" + +#: ../../use/running-a-tournament.rst:108 +msgid "Once you've got all the results entered and confirmed, you're ready to progress to the next round. This can be done by going to the **Results** area, and then using the **Advance to Next Round** button." +msgstr "" + +#: ../../use/running-a-tournament.rst:112 +msgid "When you advance to the next round, if you've enabled public results, the results for the current round (which is now the previous round) will be released to the public **unless** the round is marked as \"silent\" in the database. So if you're careful about when results should be released, don't change the current round until you're ready to release those results." +msgstr "" + +#: ../../use/running-a-tournament.rst:114 +msgid "There is a design assumption that you will always want to release results for non-silent rounds before you start working on the draw for the next round. If this isn't true for you, please get in touch with us so that we know. The workaround is to make all rounds silent, then unsilent them when you're ready to release results." +msgstr "" + +#: ../../use/running-a-tournament.rst:116 +msgid "Emails can be sent to speakers informing them of their team's win/loss/points record before advancing rounds. This is independent from whether the whole round's results are released to the public." +msgstr "" + diff --git a/docs/locale/kk/LC_MESSAGES/use/starting-a-tournament.po b/docs/locale/kk/LC_MESSAGES/use/starting-a-tournament.po new file mode 100644 index 00000000000..fae915b11dd --- /dev/null +++ b/docs/locale/kk/LC_MESSAGES/use/starting-a-tournament.po @@ -0,0 +1,196 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-15 13:14\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/starting-a-tournament.po\n" +"X-Crowdin-File-ID: 1333\n" +"Language: kk_KZ\n" + +#: ../../use/starting-a-tournament.rst:5 +msgid "Starting a Tournament" +msgstr "" + +#: ../../use/starting-a-tournament.rst:7 +msgid "This page outlines a few things you should do at the start of a tournament, after you've :ref:`imported the initial data `. Once you've done these, proceed to :ref:`running a tournament `." +msgstr "" + +#: ../../use/starting-a-tournament.rst:9 +msgid "Tabbycat is developed for — and tested on — modern web browsers. If you are using **Internet Explorer versions 8, 7, or 6** the interface may look odd or not function properly. Switch to a newer browser if possible." +msgstr "" + +#: ../../use/starting-a-tournament.rst:13 +msgid "Tournament configuration" +msgstr "" + +#: ../../use/starting-a-tournament.rst:15 +msgid "After importing all your data you can log into the site as an administrator by loading up the homepage and then using the **Login** button in the lower-right. From there you should go to the administration section of your tournament, and then go to the tournament configuration page by clicking **Setup** then **Configuration** in the menu." +msgstr "" + +#: ../../use/starting-a-tournament.rst:17 +msgid "Here you can adjust the debate rules and interface options to your liking then hit **Save** when finished. We also offer a number of presets that apply particular rule sets (such as the Australs rules) or feature sets (such as displaying information normally released during briefs on the website)." +msgstr "" + +#: ../../use/starting-a-tournament.rst:20 +msgid "Special data types and options" +msgstr "" + +#: ../../use/starting-a-tournament.rst:22 +msgid "There are a few optional fields that are not covered in the initial data templates, in the visual importer, or that may only be relevant in particular scenarios. It's worth going over these quickly to see if they are needed for your tournament. You can view and edit these fields in the **Edit Database** area (link is in the menu under **Setup**)." +msgstr "" + +#: ../../use/starting-a-tournament.rst:25 +msgid "Adjudicator Feedback > Adj Feedback Questions" +msgstr "" + +#: ../../use/starting-a-tournament.rst:25 +msgid "As described in :ref:`adjudicator-feedback`, the types of questions that can be posed for adjudicator feedback are able to be heavily customised. If you are customising your feedback form it should be done here, and before the tournament starts." +msgstr "" + +#: ../../use/starting-a-tournament.rst:30 +msgid "Authentication and Authorisation > Users" +msgstr "" + +#: ../../use/starting-a-tournament.rst:28 +msgid "Here you can add new admin users (those with full access) as well as new assistant users those (who can only do common data-entry tasks but not edit or view the full tab interface). See :ref:`user-accounts` for information on how to do this." +msgstr "" + +#: ../../use/starting-a-tournament.rst:30 +msgid "The people you're adding accounts for should be physically present when you do this, so that they can enter their password." +msgstr "" + +#: ../../use/starting-a-tournament.rst:33 +msgid "Participants > Regions" +msgstr "" + +#: ../../use/starting-a-tournament.rst:33 +msgid "Optionally, each institution may belong to a *Region*. An institution's region is used within the adjudicator allocation process to visually identify teams and adjudicators for the purposes of highlighting diversity issues. These have traditionally been used for geographic regions (such as Oceania), although could be repurposed as arbitrary markers of information — for example they could be used to denote teams from a particular State, institutional size, or circuit." +msgstr "" + +#: ../../use/starting-a-tournament.rst:41 +msgid "Participants > Adjudicators" +msgstr "" + +#: ../../use/starting-a-tournament.rst:36 +msgid "An adjudicators *Base Score* represents their relative ability to judge important rooms, where adjudicators with higher numbers will, relative to the other adjudicators, be placed in better roles (ie as Chairs) and in the rooms you deem most important in each round. If you are running a small tournament, and plan to do your allocations manually, you can set everyone's number to the same amount." +msgstr "" + +#: ../../use/starting-a-tournament.rst:37 +msgid "For larger tournaments, particularly those that collect feedback, see the :ref:`adjudicator-feedback` section for more information on how base scores and other variables influence the automated allocation process." +msgstr "" + +#: ../../use/starting-a-tournament.rst:38 +msgid "Regardless of how you score the adjs, if you have changed the minimimum chairing score in settings, you'll want to make sure there are enough adjudicators that meet this minimum threshold or the automated allocator may not function effectively." +msgstr "" + +#: ../../use/starting-a-tournament.rst:39 +msgid "All types of conflicts are assigned to the relevant adjudicator. Adjudicator's can be conflicted against particular teams, particular institutions, and other adjudicators. Each of these is a located in a tab at the top of the page." +msgstr "" + +#: ../../use/starting-a-tournament.rst:40 +msgid "Each adjudicator's gender is optional and is not displayed publicly; it is only shown in the adjudicator allocation interface" +msgstr "" + +#: ../../use/starting-a-tournament.rst:41 +msgid "Each adjudicator's pronoun is optional, and is only displayed if you use tabbycat to print the ballots and feedback sheets for each round." +msgstr "" + +#: ../../use/starting-a-tournament.rst:48 +msgid "Participants > Teams" +msgstr "" + +#: ../../use/starting-a-tournament.rst:44 +msgid "Note the distinction here between full name and short name. The latter is used on pages where space is tight, such as the draw displays or the adjudicator allocation interface." +msgstr "" + +#: ../../use/starting-a-tournament.rst:45 +msgid "Note that \"Uses institutional prefix\" option. With this option on, a team from the 'MUDS' insttution named '1' or 'Gold' would be displayed as 'MUDS 1' or 'MUDS Gold'." +msgstr "" + +#: ../../use/starting-a-tournament.rst:46 +msgid "At present, setting a team's type to Bye, Swing, or Composite only affects very particular circumstances, and should be considered unnecessary." +msgstr "" + +#: ../../use/starting-a-tournament.rst:47 +msgid "If you do have composite teams, and wish to have them be conflicted by adjudicators from each respective instutution, you'll need to add a new team conflict to each adjudicator from each institution." +msgstr "" + +#: ../../use/starting-a-tournament.rst:48 +msgid "If you do have swing teams, or teams that are otherwise ineligible for breaking, this is typically handled through the breaks interface in the main site" +msgstr "" + +#: ../../use/starting-a-tournament.rst:52 +msgid "Participants > Speakers" +msgstr "" + +#: ../../use/starting-a-tournament.rst:51 +msgid "Each speaker's gender is optional and is not displayed publicly; it is only shown in the adjudicator allocation interface" +msgstr "" + +#: ../../use/starting-a-tournament.rst:52 +msgid "Each speaker's pronoun is optional, and is only displayed if you use tabbycat to print the ballots and feedback sheets for each round." +msgstr "" + +#: ../../use/starting-a-tournament.rst:55 +msgid "Tournaments > Divisions" +msgstr "" + +#: ../../use/starting-a-tournament.rst:55 +msgid "At the moment divisions are only useful for running tournaments that use round-robin style draws. Here, each division represents a draw pool within a round. Division support here is under development and not tested in many scenarios." +msgstr "" + +#: ../../use/starting-a-tournament.rst:58 +msgid "Tournaments > Tournaments" +msgstr "" + +#: ../../use/starting-a-tournament.rst:58 +msgid "Note that tournaments can have a welcome message (useful for displaying maps and other information on the homepage)." +msgstr "" + +#: ../../use/starting-a-tournament.rst:61 +msgid "Venues > Venues" +msgstr "" + +#: ../../use/starting-a-tournament.rst:61 +msgid "A venue's priority determines its priority in being allocated. If there are 20 debates, and 30 rooms, the 20 rooms with the highest priorities will be chosen. Furthermore, if particular debates are marked as important during the draw process, those debates will receive the rooms with the highest priorities. In this way you can give close rooms to members of the adj core, or give larger rooms to debates that will draw a large audience." +msgstr "" + +#: ../../use/starting-a-tournament.rst:64 +msgid "Venues > Venue Categories" +msgstr "" + +#: ../../use/starting-a-tournament.rst:64 +msgid "Venue categories are not needed for most kinds of tournaments. Their purpose is to classify particular venues, such as venues all within one building or venues that are accessible. Once assigned these categories can display in the venue's name — ie \"Red 01.01\" or be used to assign Venue Constraints that match particular teams, institutions, or adjudicators to particular types of venues." +msgstr "" + +#: ../../use/starting-a-tournament.rst:67 +msgid "Information for the briefing" +msgstr "" + +#: ../../use/starting-a-tournament.rst:69 +msgid "If you're using the online submissions feature, some things you should probably mention in the briefing:" +msgstr "" + +#: ../../use/starting-a-tournament.rst:71 +msgid "Adjudicators must fill out ballots completely, including motions and venues—they are entered into the system." +msgstr "" + +#: ../../use/starting-a-tournament.rst:72 +msgid "There is a static URL for each person's ballots and feedback forms. It can be bookmarked, or the page can refreshed after each round." +msgstr "" + +#: ../../use/starting-a-tournament.rst:73 +msgid "If people submit a result or feedback online, they should indicate that they have done so on the paper copy of their ballot." +msgstr "" + diff --git a/tabbycat/actionlog/locale/kk/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..5482183e7e8 --- /dev/null +++ b/tabbycat/actionlog/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,323 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-27 09:25\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 920\n" + +#: actionlog/apps.py +msgid "Action Log" +msgstr "Әрекеттер тізімі" + +#: actionlog/models.py +msgid "Discarded ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Checked in ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Created ballot set" +msgstr "Дайындалған төрешілер парағы" + +#: actionlog/models.py +msgid "Edited ballot set" +msgstr "Өзгертілген төрешілер парағы" + +#: actionlog/models.py +msgid "Confirmed ballot set" +msgstr "Бекітілген төрешілер парағы" + +#: actionlog/models.py +msgid "Submitted ballot set from the public form" +msgstr "" + +#: actionlog/models.py +msgid "Submitted feedback from the public form" +msgstr "" + +#: actionlog/models.py +msgid "Saved feedback" +msgstr "Сақталған кері байланыс" + +#: actionlog/models.py +msgid "Edited adjudicator base score" +msgstr "" + +#: actionlog/models.py +msgid "Set adjudicator note" +msgstr "" + +#: actionlog/models.py +msgid "Saved adjudicator allocation" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated adjudicators" +msgstr "" + +#: actionlog/models.py +msgid "Saved a room manual edit" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated rooms" +msgstr "" + +#: actionlog/models.py +msgid "Edited room categories" +msgstr "" + +#: actionlog/models.py +msgid "Edited room constraints" +msgstr "" + +#: actionlog/models.py +msgid "Created draw" +msgstr "" + +#: actionlog/models.py +msgid "Confirmed draw" +msgstr "" + +#: actionlog/models.py +msgid "Regenerated draw" +msgstr "" + +#: actionlog/models.py +msgid "Released draw" +msgstr "Жарияланған кесте" + +#: actionlog/models.py +msgid "Unreleased draw" +msgstr "" + +#: actionlog/models.py +msgid "Saved a matchup manual edit" +msgstr "" + +#: actionlog/models.py +msgid "Saved the sides status of a matchup" +msgstr "" + +#: actionlog/models.py +msgid "Saved divisions" +msgstr "" + +#: actionlog/models.py +msgid "Added/edited motion" +msgstr "Дайын/өзгертілген қарарлар" + +#: actionlog/models.py +msgid "Released motions" +msgstr "Жарияланған қарарлар" + +#: actionlog/models.py +msgid "Unreleased motions" +msgstr "Жарияланбаған қарарлар" + +#: actionlog/models.py +msgid "Auto-prioritized debate importance" +msgstr "" + +#: actionlog/models.py +msgid "Edited debate importance" +msgstr "" + +#: actionlog/models.py +msgid "Changed adjudicator breaking status" +msgstr "" + +#: actionlog/models.py +msgid "Edited break eligibility" +msgstr "" + +#: actionlog/models.py +msgid "Edited break categories" +msgstr "" + +#: actionlog/models.py +msgid "Generated the team break for all categories" +msgstr "" + +#: actionlog/models.py +msgid "Edited breaking team remarks and updated all team breaks" +msgstr "" + +#: actionlog/models.py +msgid "Edited breaking team remarks and updated this team break" +msgstr "" + +#: actionlog/models.py +msgid "Edited breaking team remarks" +msgstr "" + +#: actionlog/models.py +msgid "Set start time" +msgstr "" + +#: actionlog/models.py +msgid "Advanced the current round to" +msgstr "" + +#: actionlog/models.py +msgid "Marked round as completed" +msgstr "" + +#: actionlog/models.py +msgid "Edited teams availability" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicators availability" +msgstr "" + +#: actionlog/models.py +msgid "Edited room availability" +msgstr "" + +#: actionlog/models.py +msgid "Edited tournament options" +msgstr "" + +#: actionlog/models.py +msgid "Edited speaker category eligibility" +msgstr "" + +#: actionlog/models.py +msgid "Edited speaker categories" +msgstr "" + +#: actionlog/models.py +msgid "Imported institutions using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Imported rooms using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Imported teams using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Imported adjudicators using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Updated adjudicator scores in bulk" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator-team conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator-adjudicator conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator-institution conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Edited team-institution conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Generated check in identifiers for speakers" +msgstr "" + +#: actionlog/models.py +msgid "Generated check in identifiers for adjudicators" +msgstr "" + +#: actionlog/models.py +msgid "Generated check in identifiers for rooms" +msgstr "" + +#: actionlog/models.py +msgid "Created preformed panels" +msgstr "" + +#: actionlog/models.py +msgid "Auto-prioritized preformed panels" +msgstr "" + +#: actionlog/models.py +msgid "Edited preformed panel importance" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated adjudicators to preformed panels" +msgstr "" + +#: actionlog/models.py +msgid "Edited preformed panel adjudicator" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated preformed panels to debates" +msgstr "" + +#: actionlog/models.py +msgid "type" +msgstr "" + +#: actionlog/models.py +msgid "timestamp" +msgstr "" + +#: actionlog/models.py +msgid "user" +msgstr "қолданушы" + +#: actionlog/models.py +msgid "IP address" +msgstr "" + +#: actionlog/models.py +msgid "tournament" +msgstr "турнир" + +#: actionlog/models.py +msgid "round" +msgstr "ойын" + +#: actionlog/models.py +msgid "content type" +msgstr "" + +#: actionlog/models.py +msgid "object ID" +msgstr "" + +#: actionlog/models.py +msgid "action log" +msgstr "" + +#: actionlog/models.py +msgid "action log entries" +msgstr "" + +#: actionlog/models.py +msgid "All log entries require at least one of a user and an IP address." +msgstr "" + +#: actionlog/models.py +msgid "anonymous" +msgstr "жасырын түрде" + diff --git a/tabbycat/adjallocation/locale/kk/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..aa0653a6f2d --- /dev/null +++ b/tabbycat/adjallocation/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,451 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-27 09:26\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 922\n" + +#: adjallocation/allocators/base.py +msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." +msgstr "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." +msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." +msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/allocators/hungarian.py +msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." +msgstr "" + +#: adjallocation/allocators/hungarian.py +msgid "There are no debates for this round. Maybe you haven't created a draw yet?" +msgstr "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." +msgstr "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." +msgstr "" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." +msgstr "" + +#: adjallocation/apps.py +msgid "Adjudicator Allocation" +msgstr "" + +#: adjallocation/consumers.py +msgid "Draw is already released, unrelease draw to redo auto-allocations." +msgstr "" + +#: adjallocation/consumers.py +msgid "Draw is not confirmed, confirm draw to run auto-allocations." +msgstr "" + +#: adjallocation/consumers.py +msgid "There are no preformed panels available to allocate." +msgstr "" + +#: adjallocation/consumers.py +msgid "Successfully auto-allocated preformed panels to debates." +msgstr "" + +#: adjallocation/consumers.py +#, python-format +msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" +msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/consumers.py +msgid "Successfully auto-allocated adjudicators to debates." +msgstr "" + +#: adjallocation/consumers.py +msgid "There aren't any panels to fill. Create panels first." +msgstr "" + +#: adjallocation/consumers.py +#, python-format +msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" +msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/consumers.py +msgid "Successfully auto-allocated adjudicators to preformed panels." +msgstr "" + +#: adjallocation/consumers.py +msgid "You have no break category set as 'is general' so debate importances can't be calculated." +msgstr "" + +#: adjallocation/consumers.py +msgid "Succesfully auto-prioritised debates." +msgstr "" + +#: adjallocation/consumers.py +msgid "You have no break category set as 'is general' so panel importances can't be calculated." +msgstr "" + +#: adjallocation/consumers.py +msgid "Succesfully auto-prioritised preformed panels." +msgstr "" + +#: adjallocation/consumers.py +msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." +msgstr "" + +#: adjallocation/consumers.py +msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." +msgstr "" + +#: adjallocation/consumers.py +msgid "Succesfully created new preformed panels for this round." +msgstr "" + +#: adjallocation/models.py +msgid "chair" +msgstr "ойынның бас төрешісі" + +#: adjallocation/models.py +msgid "panellist" +msgstr "қосымша төреші" + +#: adjallocation/models.py +msgid "trainee" +msgstr "үйренуші" + +#: adjallocation/models.py +msgid "debate" +msgstr "пікірсайыс" + +#: adjallocation/models.py +msgid "adjudicator" +msgstr "төреші" + +#: adjallocation/models.py +msgid "type" +msgstr "түрі" + +#: adjallocation/models.py +msgid "available?" +msgstr "қолжетімді ме?" + +#: adjallocation/models.py +msgid "debate adjudicator" +msgstr "ойын төрешісі" + +#: adjallocation/models.py +msgid "debate adjudicators" +msgstr "ойын төрешілері" + +#: adjallocation/models.py +msgid "team" +msgstr "топ" + +#: adjallocation/models.py +msgid "adjudicator-team conflict" +msgstr "" + +#: adjallocation/models.py +msgid "adjudicator-team conflicts" +msgstr "төреші мен ойыншылар арасындағы шектеу" + +#: adjallocation/models.py +msgid "adjudicator 1" +msgstr "1-төреші" + +#: adjallocation/models.py +msgid "adjudicator 2" +msgstr "2-төреші" + +#: adjallocation/models.py +msgid "adjudicator-adjudicator conflict" +msgstr "төреші мен төреші арасындағы шектеу" + +#: adjallocation/models.py +msgid "adjudicator-adjudicator conflicts" +msgstr "төреші мен ойыншылар арасындағы шектеулер" + +#: adjallocation/models.py +msgid "institution" +msgstr "қауымдастық" + +#: adjallocation/models.py +msgid "adjudicator-institution conflict" +msgstr "төреші мен қауымдастық арасындағы шектеу" + +#: adjallocation/models.py +msgid "adjudicator-institution conflicts" +msgstr "төреші мен қауымдастық арасындағы шектеулер" + +#: adjallocation/models.py +msgid "team-institution conflict" +msgstr "ойыншылар мен қауымдастық арасындағы шектеу" + +#: adjallocation/models.py +msgid "team-institution conflicts" +msgstr "ойыншылар мен қауымдастық арасындағы шектеулер" + +#: adjallocation/models.py +msgid "round" +msgstr "ойын" + +#: adjallocation/models.py +msgid "importance" +msgstr "маңызы" + +#: adjallocation/models.py +msgid "minimum bracket" +msgstr "" + +#: adjallocation/models.py +msgid "Estimate of the lowest bracket for which this panel might be" +msgstr "" + +#: adjallocation/models.py +msgid "maximum bracket" +msgstr "" + +#: adjallocation/models.py +msgid "Estimate of the highest bracket for which this panel might be" +msgstr "" + +#: adjallocation/models.py +msgid "room rank" +msgstr "ойын деңгейі" + +#: adjallocation/models.py +msgid "Sequential number of panel, not used in any algorithms" +msgstr "" + +#: adjallocation/models.py +msgid "liveness" +msgstr "" + +#: adjallocation/models.py +msgid "Number of categories this room is expected to be live for" +msgstr "" + +#: adjallocation/models.py +msgid "preformed panel" +msgstr "" + +#: adjallocation/models.py +msgid "preformed panels" +msgstr "" + +#: adjallocation/models.py +msgid "panel" +msgstr "құрам" + +#: adjallocation/models.py +msgid "preformed panel adjudicator" +msgstr "алдын-ала бекітілген төреші" + +#: adjallocation/models.py +msgid "preformed panel adjudicators" +msgstr "алдын-ала бекітілген төрешілік құрам" + +#: adjallocation/preformed/base.py +msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." +msgstr "" + +#: adjallocation/templates/preformed_index.html adjallocation/views.py +msgid "Preformed Panels" +msgstr "Алдын-ала бекітілген құрам" + +#: adjallocation/templates/preformed_index.html +msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." +msgstr "" + +#: adjallocation/templates/preformed_index.html +msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." +msgstr "" + +#: adjallocation/templates/preformed_index.html +#, python-format +msgid "Edit Preformed Panels for %(round)s" +msgstr "" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator)s & %(team)s (personal)" +msgstr "" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" +msgstr "" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" +msgstr "" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" +msgstr "" + +#: adjallocation/views.py +msgid "Male" +msgstr "Ер адам" + +#: adjallocation/views.py +msgid "Female" +msgstr "Әйел адам" + +#: adjallocation/views.py +msgid "Other" +msgstr "Басқа" + +#: adjallocation/views.py +msgid "Unknown" +msgstr "Белгісіз" + +#: adjallocation/views.py +msgid "Edit Allocation" +msgstr "" + +#: adjallocation/views.py +msgid "Edit Panels" +msgstr "Төрешілік құрамды өзгерту" + +#: adjallocation/views.py +msgid "Return to Panels Overview" +msgstr "" + +#: adjallocation/views.py +msgid "Adjudicator-Team Conflicts" +msgstr "Төреші мен ойыншылар арасындағы шектеулер" + +#: adjallocation/views.py +msgid "Save Adjudicator-Team Conflicts" +msgstr "Төреші мен ойыншылар арасындағы шектеулер сақтау" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d adjudicator-team conflict." +msgid_plural "Saved %(count)d adjudicator-team conflicts." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d adjudicator-team conflict." +msgid_plural "Deleted %(count)d adjudicator-team conflicts." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/views.py +msgid "No changes were made to adjudicator-team conflicts." +msgstr "" + +#: adjallocation/views.py +msgid "Adjudicator-Adjudicator Conflicts" +msgstr "" + +#: adjallocation/views.py +msgid "Save Adjudicator-Adjudicator Conflicts" +msgstr "" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d adjudicator-adjudicator conflict." +msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d adjudicator-adjudicator conflict." +msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/views.py +msgid "No changes were made to adjudicator-adjudicator conflicts." +msgstr "" + +#: adjallocation/views.py +msgid "Adjudicator-Institution Conflicts" +msgstr "" + +#: adjallocation/views.py +msgid "Save Adjudicator-Institution Conflicts" +msgstr "" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d adjudicator-institution conflict." +msgid_plural "Saved %(count)d adjudicator-institution conflicts." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d adjudicator-institution conflict." +msgid_plural "Deleted %(count)d adjudicator-institution conflicts." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/views.py +msgid "No changes were made to adjudicator-institution conflicts." +msgstr "" + +#: adjallocation/views.py +msgid "Team-Institution Conflicts" +msgstr "" + +#: adjallocation/views.py +msgid "Save Team-Institution Conflicts" +msgstr "" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d team-institution conflict." +msgid_plural "Saved %(count)d team-institution conflicts." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d team-institution conflict." +msgid_plural "Deleted %(count)d team-institution conflicts." +msgstr[0] "" +msgstr[1] "" + +#: adjallocation/views.py +msgid "No changes were made to team-institution conflicts." +msgstr "" + diff --git a/tabbycat/adjfeedback/locale/kk/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..20091d842c4 --- /dev/null +++ b/tabbycat/adjfeedback/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,966 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-27 09:26\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 924\n" + +#: adjfeedback/admin.py +msgid "Integer scales must have a minimum and maximum" +msgstr "" + +#: adjfeedback/admin.py +msgid "target" +msgstr "" + +#: adjfeedback/admin.py adjfeedback/models.py +msgid "source adjudicator" +msgstr "" + +#: adjfeedback/admin.py adjfeedback/models.py +msgid "source team" +msgstr "" + +#: adjfeedback/admin.py +msgid "Target" +msgstr "" + +#: adjfeedback/admin.py +msgid "Source" +msgstr "" + +#: adjfeedback/admin.py +msgid "Feedback timestamp and version" +msgstr "" + +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." +msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." +msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission was marked as unconfirmed." +msgid_plural "%(count)d feedback submissions were marked as unconfirmed." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission is now ignored." +msgid_plural "%(count)d feedback submissions are now ignored." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission is now recognized." +msgid_plural "%(count)d feedback submissions are now recognized." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/apps.py +msgid "Adjudicator Feedback" +msgstr "" + +#: adjfeedback/forms.py +msgid "chair" +msgstr "ойынның бас төрешісі" + +#: adjfeedback/forms.py +msgid "solo" +msgstr "" + +#: adjfeedback/forms.py +msgid "panellist" +msgstr "қосымша төреші" + +#: adjfeedback/forms.py +msgid "trainee" +msgstr "үйренуші" + +#. Translators: Please leave this blank, it should be left for the base Django translations. +#: adjfeedback/forms.py +msgid "Yes" +msgstr "" + +#. Translators: Please leave this blank, it should be left for the base Django translations. +#: adjfeedback/forms.py +msgid "No" +msgstr "" + +#. Translators: Please leave this blank, it should be left for the base Django translations. +#: adjfeedback/forms.py +msgid "This field is required." +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "Overall score (%(min)d=worst; %(max)d=best)*" +msgstr "" + +#: adjfeedback/forms.py +msgid "Ignored" +msgstr "" + +#. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" +#: adjfeedback/forms.py +msgid "Submitted - " +msgstr "" + +#. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s (%(adjpos)s)" +msgstr "" + +#: adjfeedback/forms.py +msgid "-- Adjudicators --" +msgstr "" + +#: adjfeedback/forms.py +msgid "Adjudicator this feedback is about" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s (chair gave oral)" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s (panellist gave oral as chair rolled)" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "This line (for %(adjudicator)s) didn't have a score" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "This line (for %(adjudicator)s) had too many columns" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" +msgstr "" + +#: adjfeedback/forms.py +msgid "There were no scores to import." +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator" +msgstr "төреші" + +#: adjfeedback/models.py +msgid "round" +msgstr "ойын" + +#: adjfeedback/models.py +msgid "score" +msgstr "" + +#: adjfeedback/models.py +msgid "timestamp" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator base score history" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator base score histories" +msgstr "" + +#: adjfeedback/models.py +msgid "question" +msgstr "" + +#: adjfeedback/models.py +msgid "feedback" +msgstr "" + +#: adjfeedback/models.py +msgid "answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback boolean answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback boolean answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback integer answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback integer answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback float answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback float answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback string answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback string answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answers" +msgstr "" + +#: adjfeedback/models.py +msgid "checkbox" +msgstr "" + +#: adjfeedback/models.py +msgid "yes/no (dropdown)" +msgstr "" + +#: adjfeedback/models.py +msgid "integer (textbox)" +msgstr "" + +#: adjfeedback/models.py +msgid "integer scale" +msgstr "" + +#: adjfeedback/models.py +msgid "float" +msgstr "" + +#: adjfeedback/models.py +msgid "text" +msgstr "" + +#: adjfeedback/models.py +msgid "long text" +msgstr "" + +#: adjfeedback/models.py +msgid "select one" +msgstr "" + +#: adjfeedback/models.py +msgid "select multiple" +msgstr "" + +#: adjfeedback/models.py +msgid "tournament" +msgstr "турнир" + +#: adjfeedback/models.py +msgid "sequence number" +msgstr "" + +#: adjfeedback/models.py +msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" +msgstr "" + +#: adjfeedback/models.py +msgid "name" +msgstr "" + +#: adjfeedback/models.py +msgid "A short name for the question, e.g., \"Agree with decision\"" +msgstr "" + +#: adjfeedback/models.py +msgid "reference" +msgstr "" + +#: adjfeedback/models.py +msgid "Code-compatible reference, e.g., \"agree_with_decision\"" +msgstr "" + +#: adjfeedback/models.py +msgid "from adjudicator" +msgstr "" + +#: adjfeedback/models.py +msgid "Adjudicators should be asked this question (about other adjudicators)" +msgstr "" + +#: adjfeedback/models.py +msgid "from team" +msgstr "" + +#: adjfeedback/models.py +msgid "Teams should be asked this question" +msgstr "" + +#: adjfeedback/models.py +msgid "answer type" +msgstr "" + +#: adjfeedback/models.py +msgid "required" +msgstr "" + +#: adjfeedback/models.py +msgid "Whether participants are required to fill out this field" +msgstr "" + +#: adjfeedback/models.py +msgid "minimum value" +msgstr "" + +#: adjfeedback/models.py +msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" +msgstr "" + +#: adjfeedback/models.py +msgid "maximum value" +msgstr "" + +#: adjfeedback/models.py +msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" +msgstr "" + +#: adjfeedback/models.py +msgid "choices" +msgstr "" + +#: adjfeedback/models.py +msgid "Permissible choices for select one/multiple fields (ignored for other fields)" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback question" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback questions" +msgstr "" + +#: adjfeedback/models.py adjfeedback/views.py +msgid "ignored" +msgstr "" + +#: adjfeedback/models.py +msgid "Whether the feedback should affect the adjudicator's score" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedbacks" +msgstr "" + +#: adjfeedback/models.py +msgid "Either the source adjudicator or source team wasn't specified." +msgstr "" + +#: adjfeedback/models.py +msgid "There was both a source adjudicator and a source team." +msgstr "" + +#: adjfeedback/models.py +msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" +msgstr "" + +#: adjfeedback/models.py +msgid "Adjudicator did not see this debate." +msgstr "" + +#: adjfeedback/tables.py +msgid "Whether the adj is marked as breaking (click to mark)" +msgstr "" + +#: adjfeedback/tables.py +msgid "N/A" +msgstr "" + +#: adjfeedback/tables.py +msgid "Current weighted score" +msgstr "" + +#: adjfeedback/tables.py +msgid "This adjudicator's current rating." +msgstr "" + +#: adjfeedback/tables.py +msgid "Base score result" +msgstr "" + +#: adjfeedback/tables.py +msgid "Click to edit base score" +msgstr "" + +#: adjfeedback/tables.py +msgid "Assigned base score" +msgstr "" + +#: adjfeedback/tables.py +msgid "The current difference between an adjudicator's base score and current score" +msgstr "" + +#: adjfeedback/tables.py +msgid "The difference between this adjudicator's base score and current score" +msgstr "" + +#: adjfeedback/tables.py +msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." +msgstr "" + +#: adjfeedback/tables.py +msgid "The standard deviation of this adjudicator's current scores" +msgstr "" + +#: adjfeedback/tables.py +msgid "Feedback Per Round" +msgstr "" + +#: adjfeedback/tables.py +msgid "Hover over the data points to show the average score received in that round" +msgstr "" + +#: adjfeedback/tables.py +#, python-format +msgid "View %(count)s
    feedback" +msgid_plural "View %(count)s
    feedbacks" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/tables.py +msgid "Unsubmitted feedback ballots" +msgstr "" + +#: adjfeedback/tables.py +msgid "View Missing Feedback" +msgstr "" + +#: adjfeedback/templates/add_feedback.html +msgid "Who is the feedback from?" +msgstr "" + +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html +msgid "Enter Feedback" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html +#, python-format +msgid "Add Feedback from %(name)s" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html +msgid "Add Feedback" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "There are some problems with this feedback submission. Please review and correct them." +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "When submitting this form your IP address will be stored for logging purposes." +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Overview" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Latest" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Unsubmitted" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Important" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Comments" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "By Source" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "By Target" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Bulk Update Scores" +msgstr "" + +#: adjfeedback/templates/feedback_by_source.html +#, python-format +msgid "Feedback %(source_type)s %(source_name)s" +msgstr "" + +#: adjfeedback/templates/feedback_by_source.html +#, python-format +msgid "%(source_name)s hasn't submitted any feedback yet." +msgstr "" + +#: adjfeedback/templates/feedback_by_source.html +#, python-format +msgid "%(source_name)s hasn't received any feedback yet." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Unconfirmed; will not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Ignored; will not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "The score given in this piece of feedback." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "%(round)s %(score)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "On %(adjudicator)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "Received as %(as_type)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "Base %(base)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "From %(source)s (their %(relationship)s)" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "From %(source)s (%(relationship)s from %(side)s)" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "From unknown" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "%(time)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Un-confirm" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Confirm" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Un-ignore" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Ignore" +msgstr "" + +#: adjfeedback/templates/feedback_cards_list.html +msgid "No feedback has been submitted yet" +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "%(c_breaking)s marked as breaking" +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." +msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." +msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "Base" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "Feedback" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "Score Ratio" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." +msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." +msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(c_chairs)s chair" +msgid_plural "%(c_chairs)s chairs" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(c_panellists)s panellist" +msgid_plural "%(c_panellists)s panellists" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(c_trainees)s trainee" +msgid_plural "%(c_trainees)s trainees" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" +msgstr "" + +#: adjfeedback/templates/overview_modals.html +msgid "Change Base Score" +msgstr "" + +#: adjfeedback/templates/overview_modals.html +#, python-format +msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." +msgstr "" + +#: adjfeedback/templates/overview_modals.html +#, python-format +msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." +msgstr "" + +#: adjfeedback/templates/overview_modals.html +msgid "Base score" +msgstr "" + +#: adjfeedback/templates/overview_modals.html +msgid "Save Base Score" +msgstr "" + +#: adjfeedback/templates/public_add_feedback.html +msgid "Who are you?" +msgstr "" + +#: adjfeedback/templates/public_add_feedback.html +msgid "click your name or your team on this list" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgctxt "page title" +msgid "Update Adjudicator Scores" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +#, python-format +msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "The adjudicators' names must match their names in the tab system exactly." +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "There are some problems with the data on this form:" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "Submit" +msgstr "" + +#: adjfeedback/views.py +msgid "Feedback Overview" +msgstr "" + +#: adjfeedback/views.py +msgid "Find Feedback on Adjudicator" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "%(count)d feedback" +msgid_plural "%(count)d feedbacks" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/views.py +msgid "Feedbacks" +msgstr "" + +#: adjfeedback/views.py +msgid "Find Feedback" +msgstr "" + +#: adjfeedback/views.py +msgid "From Teams" +msgstr "" + +#: adjfeedback/views.py +msgid "From Adjudicators" +msgstr "" + +#: adjfeedback/views.py +msgid "Latest Feedback" +msgstr "" + +#: adjfeedback/views.py +msgid "(30 most recent)" +msgstr "" + +#: adjfeedback/views.py +msgid "Only Comments" +msgstr "" + +#: adjfeedback/views.py +msgid "(250 most recent)" +msgstr "" + +#: adjfeedback/views.py +msgid "Important Feedback" +msgstr "" + +#: adjfeedback/views.py +msgid "(rating was much higher/lower than expected)" +msgstr "" + +#: adjfeedback/views.py +msgid "A Team" +msgstr "" + +#: adjfeedback/views.py +msgid "Team" +msgstr "" + +#: adjfeedback/views.py +msgid "Institution" +msgstr "" + +#: adjfeedback/views.py +msgid "An Adjudicator" +msgstr "" + +#: adjfeedback/views.py +msgid "Adjudicator" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Feedback from %(source)s on %(target)s added." +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" +msgstr "" + +#: adjfeedback/views.py +msgid "Whoops! The value isn't a valid base score." +msgstr "" + +#: adjfeedback/views.py +msgid "Feedback Progress" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" +msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" +msgstr[0] "" +msgstr[1] "" + +#: adjfeedback/views.py +#, python-format +msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." +msgstr "" + +#: adjfeedback/views.py +msgid "confirmed" +msgstr "" + +#: adjfeedback/views.py +msgid "un-confirmed" +msgstr "" + +#: adjfeedback/views.py +msgid "un-ignored" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Updated base score for %(count)d adjudicator." +msgid_plural "Updated base scores for %(count)d adjudicators." +msgstr[0] "" +msgstr[1] "" + diff --git a/tabbycat/availability/locale/kk/LC_MESSAGES/django.po b/tabbycat/availability/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..3df79059c22 --- /dev/null +++ b/tabbycat/availability/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,392 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-27 09:26\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 926\n" + +#: availability/apps.py availability/views.py +msgid "Availability" +msgstr "" + +#: availability/models.py +msgid "content type" +msgstr "" + +#: availability/models.py +msgid "object id" +msgstr "" + +#: availability/models.py +msgid "round" +msgstr "ойын" + +#: availability/models.py +msgid "round availability" +msgstr "" + +#: availability/models.py +msgid "round availabilities" +msgstr "" + +#: availability/templates/availability_index.html +msgid "Mark All Breaking Adjs as Available" +msgstr "" + +#: availability/templates/availability_index.html +msgid "Mark Everything as Available" +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "Copy Availability from %(prev_round)s" +msgstr "" + +#: availability/templates/availability_index.html +msgid "View Draw" +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" +msgstr "" + +#: availability/templates/availability_index.html +msgid "Generate Draw" +msgstr "" + +#: availability/templates/availability_index.html +msgid "The draw cannot be generated until some teams have been marked as available." +msgstr "" + +#: availability/templates/availability_index.html +msgid "The draw cannot be generated until some adjudicators have been marked as available." +msgstr "" + +#: availability/templates/availability_index.html +msgid "The draw cannot be generated until some rooms have been marked as available." +msgstr "" + +#: availability/templates/availability_index.html +msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." +msgstr "" + +#: availability/templates/availability_index.html +msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." +msgstr "" + +#: availability/templates/availability_index.html +msgid "There is an uneven number of teams marked as available — the draw may not generate properly." +msgstr "" + +#: availability/templates/availability_index.html +msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " +msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." +msgstr "" + +#: availability/templates/base_availability.html +msgid "Select All" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Select None" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Check-Ins" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Check In All Breaking" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Copy from Previous" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Save Selected" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Teams" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Adjudicators" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Rooms" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Mark teams as available" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "No need to set team availability" +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "There is an uneven number of teams marked as available for this round." +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "The number of teams marked as available for this round is not a multiple of 4." +msgstr "" + +#: availability/templates/checkin_progress.html +msgid "Edit team availability" +msgstr "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." +msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s adjudicator who was not available last round, is available this round." +msgid_plural "%(count)s adjudicators who were not available last round, are available this round." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" +msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s adjudicator who was available last round, is not available this round." +msgid_plural "%(count)s adjudicators who were available last round, are not available this round." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" +msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +msgid "Mark adjudicators as available" +msgstr "" + +#. Translators: required_count is a word for a number (e.g. "two", "three", etc.) +#: availability/templates/checkin_progress.html +#, python-format +msgid "There needs to be at least one adjudicator marked as available, given the number of debates." +msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +msgid "Edit adjudicator availability" +msgstr "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s room that was not available last round, is available this round." +msgid_plural "%(count)s rooms that were not available last round, are available this round." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" +msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s room that was available last round, is not available this round." +msgid_plural "%(count)s rooms that were available last round, are not available this round." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" +msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." +msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +msgid "Mark rooms as available" +msgstr "" + +#. Translators: required_count is a word for a number (e.g. "two", "three", etc.) +#: availability/templates/checkin_progress.html +#, python-format +msgid "There needs to be at least one room marked as available, given the number of debates." +msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." +msgstr[0] "" +msgstr[1] "" + +#: availability/templates/checkin_progress.html +msgid "Edit room availability" +msgstr "" + +#: availability/views.py +msgid "no teams are debating" +msgstr "" + +#. Translators: nteams in this string can only be 0 or 1 +#: availability/views.py +#, python-format +msgid "%(nteams)d breaking team — no debates can happen" +msgid_plural "%(nteams)d breaking teams — no debates can happen" +msgstr[0] "" +msgstr[1] "" + +#. Translators: ndebating in this string is always at least 2 +#: availability/views.py +#, python-format +msgid "%(ndebating)d breaking team is debating this round" +msgid_plural "%(ndebating)d breaking teams are debating this round" +msgstr[0] "" +msgstr[1] "" + +#. Translators: This gets appended to the previous string (the one with +#. ndebating in it) if (and only if) nbypassing is greater than 0. +#. "It" refers to this round. +#: availability/views.py +#, python-format +msgid "; %(nbypassing)d team is bypassing it" +msgid_plural "; %(nbypassing)d teams are bypassing it" +msgstr[0] "" +msgstr[1] "" + +#. Translators: nadvancing in this string is always at least 2 +#: availability/views.py +#, python-format +msgid "%(nadvancing)s advancing team is debating this round" +msgid_plural "%(nadvancing)s advancing teams are debating this round" +msgstr[0] "" +msgstr[1] "" + +#: availability/views.py +msgid "Active Now" +msgstr "" + +#: availability/views.py +#, python-format +msgid "Active in %(prev_round)s" +msgstr "" + +#: availability/views.py +msgid "Checked-In" +msgstr "" + +#: availability/views.py +msgid "Team Availability" +msgstr "" + +#: availability/views.py +msgid "Adjudicator Availability" +msgstr "" + +#: availability/views.py +msgid "Room Availability" +msgstr "" + +#: availability/views.py +msgid "Room" +msgstr "" + +#: availability/views.py +msgid "Display Name (for the draw)" +msgstr "" + +#: availability/views.py +msgid "Categories" +msgstr "" + +#: availability/views.py +msgid "Priority" +msgstr "" + +#: availability/views.py +msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." +msgstr "" + +#: availability/views.py +msgid "Checked in all teams, adjudicators and rooms." +msgstr "" + +#: availability/views.py +msgid "Checked in all breaking adjudicators." +msgstr "" + +#: availability/views.py +msgid "Checked in all teams, adjudicators and rooms from previous round." +msgstr "" + diff --git a/tabbycat/breakqual/locale/kk/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..e2a1e13de49 --- /dev/null +++ b/tabbycat/breakqual/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,525 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-03-27 09:26\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 928\n" + +#: breakqual/apps.py +msgid "Break Qualification" +msgstr "" + +#: breakqual/base.py +#, python-format +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" +msgstr[1] "" + +#: breakqual/models.py +msgid "tournament" +msgstr "турнир" + +#: breakqual/models.py +msgid "name" +msgstr "" + +#: breakqual/models.py +msgid "Name to be displayed, e.g., \"ESL\"" +msgstr "" + +#: breakqual/models.py +msgid "slug" +msgstr "" + +#: breakqual/models.py +msgid "Slug for URLs, e.g., \"esl\"" +msgstr "" + +#: breakqual/models.py +msgid "sequence number" +msgstr "" + +#: breakqual/models.py +msgid "The order in which the categories are displayed" +msgstr "" + +#: breakqual/models.py +msgid "break size" +msgstr "" + +#: breakqual/models.py +msgid "Number of breaking teams in this category" +msgstr "" + +#: breakqual/models.py +msgid "is general" +msgstr "" + +#: breakqual/models.py +msgid "True if most teams eligible for this category, e.g. Open, False otherwise" +msgstr "" + +#: breakqual/models.py +msgid "priority" +msgstr "" + +#: breakqual/models.py +msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" +msgstr "" + +#: breakqual/models.py +msgid "limit" +msgstr "" + +#: breakqual/models.py +msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" +msgstr "" + +#: breakqual/models.py +msgid "Standard" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 1996" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 2016 (Easters)" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 2016 (Australs)" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 2019 (Australs, Dynamic Cap)" +msgstr "" + +#: breakqual/models.py +msgid "rule" +msgstr "" + +#: breakqual/models.py +msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" +msgstr "" + +#: breakqual/models.py +msgid "breaking teams" +msgstr "" + +#: breakqual/models.py +msgid "break category" +msgstr "" + +#: breakqual/models.py +msgid "break categories" +msgstr "" + +#: breakqual/models.py +msgid "team" +msgstr "топ" + +#: breakqual/models.py +msgid "rank" +msgstr "" + +#: breakqual/models.py +msgid "break rank" +msgstr "" + +#: breakqual/models.py +msgid "Capped" +msgstr "" + +#: breakqual/models.py +msgid "Ineligible" +msgstr "" + +#: breakqual/models.py +msgid "Different break" +msgstr "" + +#: breakqual/models.py +msgid "Disqualified" +msgstr "" + +#: breakqual/models.py +msgid "Lost coin toss" +msgstr "" + +#: breakqual/models.py +msgid "Withdrawn" +msgstr "" + +#: breakqual/models.py +msgid "remark" +msgstr "" + +#: breakqual/models.py +msgid "Used to explain why an otherwise-qualified team didn't break" +msgstr "" + +#: breakqual/models.py +msgid "breaking team" +msgstr "" + +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html +msgid "Break Categories" +msgstr "" + +#: breakqual/templates/break_categories_edit.html +#, python-format +msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." +msgstr "" + +#: breakqual/templates/break_categories_edit.html +#, python-format +msgid "If you want to delete break categories, use the Edit Database area." +msgstr "" + +#: breakqual/templates/break_categories_edit.html +msgid "Save Break Categories" +msgstr "" + +#: breakqual/templates/breaking_adjs.html +#, python-format +msgid "Adjudicators can be marked as breaking in the Feedback Overview section." +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Breaks" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Team Eligibility" +msgstr "" + +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py +#, python-format +msgid "%(category)s Break" +msgstr "" + +#: breakqual/templates/breaking_index.html +#, python-format +msgid " %(size)s Spots " +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Teams Eligible" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Breaking" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Excluded" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Eligible" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Mark teams as eligible" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Generate this break" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "View this break" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "publicly visible" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "not publicly visible" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Delete and Regenerate All Breaks" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Generate the Break for All Categories" +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Save Remarks and Update All Breaks" +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "Save Remarks and Update the %(category)s Break" +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" +msgstr "" + +#: breakqual/templates/breakqual_subnav.html +msgid "Overview" +msgstr "" + +#: breakqual/templates/breakqual_subnav.html +msgid "Adjudicators' Break" +msgstr "" + +#: breakqual/templates/edit_break_eligibility.html +#, python-format +msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." +msgstr "" + +#: breakqual/templates/public_break_index.html breakqual/views.py +msgid "Break" +msgstr "" + +#: breakqual/templates/public_break_index.html +msgid "Adjudicators" +msgstr "" + +#. Translators: abbreviation for "grand final" +#: breakqual/utils.py +msgid "Grand Final" +msgstr "" + +#: breakqual/utils.py +msgid "GF" +msgstr "" + +#. Translators: abbreviation for "semifinals" +#: breakqual/utils.py +msgid "Semifinals" +msgstr "" + +#: breakqual/utils.py +msgid "SF" +msgstr "" + +#. Translators: abbreviation for "quarterfinals" +#: breakqual/utils.py +msgid "Quarterfinals" +msgstr "" + +#: breakqual/utils.py +msgid "QF" +msgstr "" + +#. Translators: abbreviation for "octofinals" +#: breakqual/utils.py +msgid "Octofinals" +msgstr "" + +#: breakqual/utils.py +msgid "OF" +msgstr "" + +#. Translators: abbreviation for "double-octofinals" +#: breakqual/utils.py +msgid "Double-Octofinals" +msgstr "" + +#: breakqual/utils.py +msgid "DOF" +msgstr "" + +#. Translators: abbreviation for "triple-octofinals" +#: breakqual/utils.py +msgid "Triple-Octofinals" +msgstr "" + +#: breakqual/utils.py +msgid "TOF" +msgstr "" + +#. Translators: abbreviation for "finals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Finals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sF" +msgstr "" + +#. Translators: abbreviation for "semifinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Semifinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sSF" +msgstr "" + +#. Translators: abbreviation for "quarterfinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Quarterfinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sQF" +msgstr "" + +#. Translators: abbreviation for "octofinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Octofinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sOF" +msgstr "" + +#. Translators: abbreviation for "double-octofinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Double-Octofinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sDOF" +msgstr "" + +#. Translators: abbreviation for "triple-octofinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Triple-Octofinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sTOF" +msgstr "" + +#. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) +#: breakqual/utils.py +#, python-format +msgid "Unknown %s break round" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "U%sBR" +msgstr "" + +#: breakqual/utils.py +msgid "Unknown break round" +msgstr "" + +#: breakqual/utils.py +msgid "UBR" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "There was an error generating the break for category %(category)s: %(message)s" +msgstr "" + +#: breakqual/views.py +msgid "Eligible for" +msgstr "" + +#: breakqual/views.py +msgid "Edit Remark" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." +msgstr "" + +#: breakqual/views.py +msgid "Changes to breaking team remarks saved." +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Teams break generated for the following break categories: %(categories)s." +msgstr "" + +#: breakqual/views.py +msgid "Breaking Adjudicators" +msgstr "" + +#: breakqual/views.py +msgid "Break Eligibility" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "%s Speakers" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" +msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" +msgstr[0] "" +msgstr[1] "" + diff --git a/tabbycat/draw/locale/kk/LC_MESSAGES/django.po b/tabbycat/draw/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..59076683346 --- /dev/null +++ b/tabbycat/draw/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,1119 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-03-27 09:26\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 930\n" + +#: draw/admin.py +#, python-format +msgid "%(count)d debate was marked as having its sides confirmed." +msgid_plural "%(count)d debates were marked as having their sides confirmed." +msgstr[0] "" +msgstr[1] "" + +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py +#, python-format +msgid "%(count)d debate was marked as having its sides not confirmed." +msgid_plural "%(count)d debates were marked as having their sides not confirmed." +msgstr[0] "" +msgstr[1] "" + +#: draw/apps.py draw/views.py +msgid "Draw" +msgstr "" + +#: draw/generator/__init__.py +msgid "Too many swaps" +msgstr "" + +#: draw/generator/__init__.py +msgid "One-up-one-down (history)" +msgstr "" + +#: draw/generator/__init__.py +msgid "One-up-one-down (institution)" +msgstr "" + +#: draw/generator/__init__.py +msgid "One-up-one-down (to accommodate)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble up (history)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble down (history)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble up (institution)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble down (institution)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble up (to accommodate)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble down (to accommodate)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Can't bubble up/down" +msgstr "" + +#: draw/generator/__init__.py +msgid "Pull-up team" +msgstr "" + +#: draw/generator/bpelimination.py draw/generator/elimination.py +#, python-format +msgid "%d debates in the previous round don't have a result." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "%d debates in the previous round don't have exactly two teams advancing." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "The number of debates (%d) in the last round is not a power of two." +msgstr "" + +#: draw/generator/bphungarian.py +#, python-format +msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." +msgstr "" + +#: draw/generator/common.py +#, python-format +msgid "The number of teams presented for the draw was not a multiple of %(num)d." +msgstr "" + +#: draw/generator/common.py +msgid "There were no teams for the draw." +msgstr "" + +#: draw/generator/elimination.py +#, python-format +msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." +msgstr "" + +#: draw/generator/elimination.py +#, python-format +msgid "The number of teams (%d) in this round is not a power of two." +msgstr "" + +#: draw/generator/powerpair.py +#, python-format +msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." +msgstr "" + +#: draw/generator/random.py +#, python-format +msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." +msgstr "" + +#: draw/generator/random.py +msgid "One or more teams had an allocated side that wasn't affirmative or negative." +msgstr "" + +#: draw/manager.py +#, python-format +msgid "The draw type %(type)s can't be used with two-team formats." +msgstr "" + +#: draw/manager.py +#, python-format +msgid "The draw type %(type)s can't be used with British Parliamentary." +msgstr "" + +#: draw/manager.py +#, python-format +msgid "Unrecognised \"teams in debate\" option: %(option)s" +msgstr "" + +#: draw/manager.py +#, python-format +msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." +msgstr "" + +#: draw/models.py +msgid "none" +msgstr "" + +#: draw/models.py +msgid "postponed" +msgstr "" + +#: draw/models.py +msgid "draft" +msgstr "" + +#: draw/models.py +msgid "confirmed" +msgstr "" + +#: draw/models.py +msgid "round" +msgstr "ойын" + +#: draw/models.py +msgid "room" +msgstr "" + +#: draw/models.py +msgid "bracket" +msgstr "" + +#: draw/models.py +msgid "room rank" +msgstr "" + +#: draw/models.py +msgid "importance" +msgstr "" + +#: draw/models.py +msgid "result status" +msgstr "" + +#: draw/models.py +msgid "sides confirmed" +msgstr "" + +#: draw/models.py +msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." +msgstr "" + +#: draw/models.py +msgid "debate" +msgstr "пікірсайыс" + +#: draw/models.py +msgid "debates" +msgstr "" + +#. Translators: This is appended to a list of teams, e.g. "Auckland +#. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading +#. space. +#: draw/models.py +msgid " (sides not confirmed)" +msgstr "" + +#. Translators: This goes between teams in a debate, e.g. "Auckland 1 +#. vs Vic Wellington 1". Mind the leading and trailing spaces. +#: draw/models.py +msgid " vs " +msgstr "" + +#: draw/models.py +msgid "affirmative" +msgstr "" + +#: draw/models.py +msgid "negative" +msgstr "" + +#: draw/models.py +msgid "opening government" +msgstr "" + +#: draw/models.py +msgid "opening opposition" +msgstr "" + +#: draw/models.py +msgid "closing government" +msgstr "" + +#: draw/models.py +msgid "closing opposition" +msgstr "" + +#: draw/models.py +msgid "team" +msgstr "топ" + +#: draw/models.py +msgid "side" +msgstr "" + +#: draw/models.py +msgid "debate team" +msgstr "" + +#: draw/models.py +msgid "debate teams" +msgstr "" + +#: draw/models.py +#, python-format +msgid "placed %(place)s" +msgstr "" + +#: draw/models.py +msgid "result unknown" +msgstr "" + +#: draw/models.py +msgid "won" +msgstr "" + +#: draw/models.py +msgid "lost" +msgstr "" + +#: draw/models.py +msgid "team side allocation" +msgstr "" + +#: draw/models.py +msgid "team side allocations" +msgstr "" + +#. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", +#. "Opening government: Total speaker score", "Closing opposition: Number of firsts" +#: draw/tables.py +#, python-format +msgid "%(side)s: %(metric)s" +msgstr "" + +#: draw/tables.py +#, python-format +msgid "Team %(num)d" +msgstr "" + +#: draw/tables.py +msgid "Room rank of this debate" +msgstr "" + +#: draw/tables.py +msgid "Bracket of this debate" +msgstr "" + +#: draw/tables.py +msgid "side history
    \n" +"(number of times the team has been on each side before this round)" +msgstr "" + +#. Translators: Abbreviation for "side history" +#: draw/tables.py +msgid "SH" +msgstr "" + +#: draw/tables.py +msgid "Went from balanced to imbalanced" +msgstr "" + +#: draw/tables.py +msgid "Went from imbalanced to balanced" +msgstr "" + +#: draw/tables.py +msgid "Best improvement possible, still imbalanced" +msgstr "" + +#: draw/tables.py +msgid "Was imbalanced and still imbalanced" +msgstr "" + +#: draw/tables.py +msgid "No metrics in the team standings precedence" +msgstr "" + +#: draw/tables.py +msgid "Side" +msgstr "" + +#: draw/tables.py +msgid "Position this round" +msgstr "" + +#: draw/tables.py +msgid "Before" +msgstr "" + +#: draw/tables.py +msgid "Side history before this round" +msgstr "" + +#: draw/tables.py +msgid "After" +msgstr "" + +#: draw/tables.py +msgid "Side history after this round" +msgstr "" + +#: draw/tables.py +msgid "Cost" +msgstr "" + +#: draw/tables.py +msgid "Position cost" +msgstr "" + +#: draw/tables.py +msgid "Status" +msgstr "" + +#: draw/tables.py +msgid "Teams with this many points are permitted in this debate
    \n" +"(bracket in bold)" +msgstr "" + +#: draw/tables.py +#, python-format +msgid "%(team)s: %(metric)s" +msgstr "" + +#: draw/tables.py +msgid "side history before this round" +msgstr "" + +#: draw/tables.py +msgid "Sides" +msgstr "" + +#: draw/tables.py +msgid "position cost" +msgstr "" + +#: draw/templates/admin/draw/debateteam/delete_warning.html +msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" +msgstr "" + +#: draw/templates/admin/draw/debateteam/delete_warning.html +msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." +msgstr "" + +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html +msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." +msgstr "" + +#: draw/templates/admin/draw/debateteam/edit_warning.html +msgid "WARNING!!! If you are editing debate teams, read this first!" +msgstr "" + +#: draw/templates/admin/draw/debateteam/edit_warning.html +msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." +msgstr "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 debate does not have a chair." +msgid_plural "%(ndebates)s debates do not have a chair." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "%(adjudicators)s is adjudicating multiple debates." +msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 debate has a panel with an even number of adjudicators." +msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 debate has an adjudicator conflict." +msgid_plural "%(ndebates)s debates have adjudicator conflicts." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." +msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 adjudicator is available but not assigned to a debate." +msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_teams.html +#, python-format +msgid "%(teams)s is competing in multiple debates." +msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_venues.html +#, python-format +msgid "1 debate does not have a room." +msgid_plural "%(ndebates)s debates do not have a room." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_venues.html +#, python-format +msgid "There are multiple debates in %(rooms)s." +msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_alerts_venues.html +#, python-format +msgid "1 debate has a room constraint violation." +msgid_plural "%(ndebates)s debates have room constraint violations." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_base.html +msgid "Availability" +msgstr "" + +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html +msgid "Edit Sides/Matchups" +msgstr "" + +#: draw/templates/draw_base.html +msgid "Redo Draw" +msgstr "" + +#: draw/templates/draw_base.html +msgid "Draw Details" +msgstr "" + +#: draw/templates/draw_base.html +msgid "Position Balance" +msgstr "" + +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draw" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +msgid "Confirm draw regeneration" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html +msgid "Back to Draw" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#, python-format +msgid "Confirm Draw Deletion for %(round)s" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#, python-format +msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#, python-format +msgid "Yes, I want to delete the current draw for %(round)s" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "View Draw" +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "Debates start at %(start_time)s" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Add Start Time" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Enter Results" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Motion Details" +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "%(motions_count)s motion has been entered." +msgid_plural "%(motions_count)s motions have been entered." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Enter a motion" +msgid_plural "Enter motions" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Release Draw" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "You have not generated a draw for this round yet. There is nothing to release." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Unrelease draw to public" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "The draw has been released publicly." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "View public draw page" +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Release draw to public" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Release Motion" +msgid_plural "Release Motions" +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "The motion has been released publicly." +msgid_plural "Motions have been released publicly." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_display_admin.html +msgid "View public motions page" +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "(for the briefing room)" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draw ordered by Room" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draw ordered by Team" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draws for All Current Rounds ordered by Room" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draws for All Current Rounds ordered by Team" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +#, python-format +msgid "Display Draw for %(round)s ordered by Room" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +#, python-format +msgid "Display Draw for %(round)s ordered by Team" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Motions" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Email Motions" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Email Motion" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Start at" +msgstr "" + +#: draw/templates/draw_display_assistant.html +msgid "(for printing)" +msgstr "" + +#: draw/templates/draw_display_assistant.html +msgid "View Ballot Forms" +msgstr "" + +#: draw/templates/draw_display_assistant.html +msgid "View Feedback Forms" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Scroll Speed" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Fast" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Medium" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Slow" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Extra Slow" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Hide Adjudicators" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Show Adjudicators" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Text Size" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Tiny" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Small" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Large" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Huge" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Stop Scroll" +msgstr "" + +#: draw/templates/draw_not_released.html +#, python-format +msgid "The draw for %(round)s has yet to be released." +msgstr "" + +#: draw/templates/draw_not_released.html +msgid "The draw for the next round has yet to be released." +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Adjudicator Allocations" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "There are currently fewer adjudicators checked in than there are rooms." +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Allocate adjudicators" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Edit adjudicator allocation" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Room Allocations" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Allocate rooms" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Edit room allocation" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Preformed Panels" +msgstr "Алдын-ала бекітілген құрам" + +#: draw/templates/draw_status_confirmed.html +#, python-format +msgid "There is %(npanels)s preformed panel available for this round." +msgid_plural "There are %(npanels)s preformed panels available for this round." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_status_confirmed.html +msgid "There are no preformed panels available for this round" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +#, python-format +msgid "Edit preformed panels for %(round)s" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Side Allocations" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +#, python-format +msgid "1 debate does not have its sides confirmed." +msgid_plural "%(ndebates)s debates do not have their sides confirmed." +msgstr[0] "" +msgstr[1] "" + +#: draw/templates/draw_status_draft.html +msgid "Delete Draw" +msgstr "" + +#: draw/templates/draw_status_draft.html +msgid "Confirm Draw" +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." +msgstr "" + +#: draw/templates/draw_status_draft.html +msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." +msgstr "" + +#: draw/templates/draw_status_draft.html +msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " +msgstr "" + +#: draw/templates/draw_status_none.html +#, python-format +msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." +msgstr "" + +#: draw/templates/position_balance.html +msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." +msgstr "" + +#: draw/templates/position_balance.html +#, python-format +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgstr "" + +#: draw/templates/position_balance_break.html +msgid "Position balance reports aren't computed for elimination rounds." +msgstr "" + +#: draw/templates/position_balance_nonbp.html +msgid "Position balance reports are only available for British Parliamentary tournaments." +msgstr "" + +#: draw/templates/position_balance_round1.html +msgid "Position balance reports aren't computed for the first round of a tournament." +msgstr "" + +#: draw/views.py +msgid "No debates in this round" +msgstr "" + +#: draw/views.py +#, python-format +msgid "Draw for %(round)s" +msgstr "" + +#: draw/views.py +msgid "Draws for Current Rounds" +msgstr "" + +#: draw/views.py +#, python-format +msgid "debates start at %(time)s (in %(time_zone)s)" +msgstr "" + +#: draw/views.py +#, python-format +msgid "start times in time zone: %(time_zone)s" +msgstr "" + +#: draw/views.py +#, python-format +msgid "debate starts at %(time)s" +msgid_plural "debates start at %(time)s" +msgstr[0] "" +msgstr[1] "" + +#: draw/views.py +msgid "The draw for this round hasn't been released." +msgstr "" + +#: draw/views.py +#, python-format +msgid "All Debates for All Rounds of %(tournament)s" +msgstr "" + +#: draw/views.py +msgid "Adjudicator Assignments" +msgstr "" + +#: draw/views.py +msgid "Position" +msgstr "" + +#: draw/views.py +msgid "Team Pairings" +msgstr "" + +#: draw/views.py +msgid "No Draw" +msgstr "" + +#: draw/views.py +msgid "Draft Draw" +msgstr "" + +#. Translators: e.g. "Affirmative: Break rank" +#: draw/views.py +#, python-format +msgid "%(side)s: Break rank" +msgstr "" + +#. Translators: "BR" stands for "Break rank" +#: draw/views.py +msgid "BR" +msgstr "" + +#: draw/views.py +msgid "Draw with Details" +msgstr "" + +#: draw/views.py +msgid "Position Balance Report" +msgstr "" + +#: draw/views.py +#, python-format +msgid "Rényi entropy of order %(order)s" +msgstr "" + +#. Translators: This is appended to the string "Rényi entropy of order 1.0" +#: draw/views.py +msgid " (i.e., Shannon entropy)" +msgstr "" + +#: draw/views.py +msgid "Teams with position imbalances" +msgstr "" + +#: draw/views.py +msgid "No teams with position imbalances! Hooray!" +msgstr "" + +#: draw/views.py +msgid "Annotated draw" +msgstr "" + +#: draw/views.py +#, python-format +msgid "Could not create draw for %(round)s, there was already a draw!" +msgstr "" + +#: draw/views.py +#, python-format +msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" +"

    Please fix this issue before attempting to create the draw.

    " +msgstr "" + +#: draw/views.py +#, python-format +msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" +"

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " +msgstr "" + +#: draw/views.py +#, python-format +msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" +"

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " +msgstr "" + +#: draw/views.py +msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." +msgstr "" + +#: draw/views.py +msgid "Deleted the draw. You can now recreate it as normal." +msgstr "" + +#: draw/views.py +msgid "Released the draw." +msgstr "" + +#: draw/views.py +msgid "Unreleased the draw." +msgstr "" + +#: draw/views.py +#, python-format +msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." +msgstr "" + +#: draw/views.py +msgid "Side Pre-Allocations" +msgstr "" + +#: draw/views.py +msgid "Edit Matchups" +msgstr "" + diff --git a/tabbycat/importer/locale/kk/LC_MESSAGES/django.po b/tabbycat/importer/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..72473c71fc1 --- /dev/null +++ b/tabbycat/importer/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,421 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 932\n" + +#: importer/forms.py +#, python-format +msgid "line %(lineno)d: %(message)s" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "This line (for %(institution)s) didn't have a code" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "This line (for %(institution)s) had too many columns" +msgstr "" + +#: importer/forms.py +msgid "There were no institutions to import." +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" +msgstr[1] "" + +#: importer/forms.py +msgid "There were no rooms to import." +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" +msgstr[1] "" + +#: importer/forms.py +msgid "Speakers' names" +msgstr "" + +#: importer/forms.py +msgid "Speakers' email addresses" +msgstr "" + +#: importer/forms.py +msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" +msgstr "" + +#: importer/forms.py +msgid "Name (excluding institution name)" +msgstr "" + +#: importer/forms.py +msgid "Prefix team name with institution name?" +msgstr "" + +#: importer/forms.py +msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" +msgstr "" + +#: importer/forms.py +msgid "(Not applicable to unaffiliated teams)" +msgstr "" + +#: importer/forms.py +msgid "One speaker's name per line" +msgstr "" + +#: importer/forms.py +msgid "Can be separated by newlines, tabs or commas" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Speaker %d" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "speaker%d@example.edu" +msgstr "" + +#: importer/forms.py +msgid "There must be at least one speaker." +msgstr "" + +#: importer/forms.py +#, python-format +msgid "%(email)s is not a valid email address." +msgstr "" + +#: importer/forms.py +msgid "There are more email addresses than speakers." +msgstr "" + +#: importer/forms.py +msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." +msgstr "" + +#: importer/forms.py +msgid "Rating" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "This value must be between %(min)d and %(max)d." +msgstr "" + +#: importer/forms.py +msgid "Unaffiliated (no institution)" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "%(name)s (%(code)s)" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" +msgstr[1] "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" +msgstr[1] "" + +#: importer/forms.py +msgid "XML" +msgstr "" + +#: importer/forms.py +msgid "The Debate XML archive to parse" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export Tournament Archive" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Tournaments can be exported in an XML format for use outside Tabbycat." +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export all data" +msgstr "" + +#: importer/templates/archive_importer.html +msgctxt "page title" +msgid "Import Tournament Archive" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "This form will create a tournament with the data provided as a Debate XML format." +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Import" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Go back to the site home page" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +msgctxt "page title" +msgid "Add Adjudicators" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html +#, python-format +msgid "(Step %(step)s of %(count)s)" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html +msgid "Previous Step" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#, python-format +msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#, python-format +msgid "Adjudicators for %(institution)s" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +msgid "Unaffiliated Adjudicators" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +msgid "Save All Adjudicators" +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +#, python-format +msgid "You need to add institutions before adding adjudicators." +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html +msgctxt "button" +msgid "Next Step" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Simple Importer" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Institutions" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Teams" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Adjudicators" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Rooms" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Room Categories" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Room Constraints" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Adjudicator-Team Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Adjudicator-Adjudicator Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Adjudicator-Institution Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Team-Institution Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Break Categories" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Speaker Categories" +msgstr "" + +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +msgctxt "page title" +msgid "Add Institutions" +msgstr "" + +#: importer/templates/simple_import_institutions_details.html +msgid "Save All Institutions" +msgstr "" + +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html +msgid "There are some problems with the data on this form:" +msgstr "" + +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html +msgid "Next Step" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +msgctxt "page title" +msgid "Add Teams" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +#, python-format +msgid "Teams for %(institution)s" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +msgid "Unaffiliated Teams" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +msgid "Save All Teams" +msgstr "" + +#: importer/templates/simple_import_teams_numbers.html +#, python-format +msgid "You need to add institutions before adding teams." +msgstr "" + +#: importer/templates/simple_import_teams_numbers.html +msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." +msgstr "" + +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" +msgstr "" + +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html +msgctxt "page title" +msgid "Add Rooms" +msgstr "" + +#: importer/templates/simple_import_venues_details.html +msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." +msgstr "" + +#: importer/templates/simple_import_venues_details.html +msgid "Save All Rooms" +msgstr "" + +#: importer/templates/simple_import_venues_raw.html +msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" +msgstr "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d institution." +msgid_plural "Added %(count)d institutions." +msgstr[0] "" +msgstr[1] "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d room." +msgid_plural "Added %(count)d rooms." +msgstr[0] "" +msgstr[1] "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d team." +msgid_plural "Added %(count)d teams." +msgstr[0] "" +msgstr[1] "" + +#: importer/views.py +#, python-format +msgid "Adjudicator %(number)d" +msgstr "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d adjudicator." +msgid_plural "Added %(count)d adjudicators." +msgstr[0] "" +msgstr[1] "" + +#: importer/views.py +msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " +msgstr "" + +#: importer/views.py +msgid "Created new demo tournament. You can now configure it below." +msgstr "" + +#: importer/views.py +msgid "Tournament archive has been imported." +msgstr "" + diff --git a/tabbycat/locale/kk/LC_MESSAGES/django.po b/tabbycat/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..ded62e57002 --- /dev/null +++ b/tabbycat/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,957 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-27 09:26\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 934\n" + +#: api/apps.py +msgid "Application Programming Interface" +msgstr "" + +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html +msgid "Check-Ins" +msgstr "" + +#: checkins/consumers.py +msgid "Sent checkin identifier doesn't exist" +msgstr "" + +#: checkins/consumers.py +msgid "Checkins" +msgstr "" + +#: checkins/consumers.py +msgid "No checkin identifiers exist for sent barcodes" +msgstr "" + +#: checkins/models.py +msgid "The barcode must contain exactly six digits." +msgstr "" + +#: checkins/models.py +msgid "barcode" +msgstr "" + +#: checkins/models.py +msgid "" +msgstr "" + +#: checkins/models.py +#, python-format +msgid "%(classname)s %(barcode)s" +msgstr "" + +#: checkins/models.py +msgid "person" +msgstr "" + +#: checkins/models.py +msgid "person identifier" +msgstr "" + +#: checkins/models.py +msgid "person identifiers" +msgstr "" + +#: checkins/models.py +msgid "debate" +msgstr "пікірсайыс" + +#: checkins/models.py +msgid "debate identifier" +msgstr "" + +#: checkins/models.py +msgid "debate identifiers" +msgstr "" + +#: checkins/models.py +msgid "room identifier" +msgstr "" + +#: checkins/models.py +msgid "room identifiers" +msgstr "" + +#: checkins/models.py +msgid "identifier" +msgstr "" + +#: checkins/models.py +msgid "check-in time" +msgstr "" + +#: checkins/models.py +msgid "tournament" +msgstr "турнир" + +#: checkins/models.py +msgid "check-in event" +msgstr "" + +#: checkins/models.py +msgid "check-in events" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "With identifiers" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "View as barcodes" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "Generate missing identifiers" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "Generate all identifiers" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "There are no identifiers available to view. An admin will need to generate them." +msgstr "" + +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +msgstr "" + +#: checkins/templates/checkin_printables.html +msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." +msgstr "" + +#: checkins/templates/checkin_scan.html +msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "Not checked in (barcode %(barcode)s)" +msgstr "" + +#: checkins/utils.py +msgid "Not checked in; no barcode assigned" +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "checked in at %(time)s" +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "%(speaker)s checked in at %(time)s." +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "%(speaker)s is missing." +msgstr "" + +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html +msgid "Scan Identifiers" +msgstr "" + +#: checkins/views.py +msgid "People's Check-In Statuses" +msgstr "" + +#: checkins/views.py +msgid "Rooms' Check-In Statuses" +msgstr "" + +#: checkins/views.py templates/nav/admin_nav.html +msgid "Make Identifiers" +msgstr "" + +#: checkins/views.py templates/nav/admin_nav.html +msgid "Speakers" +msgstr "" + +#: checkins/views.py templates/nav/public_nav.html +msgid "Adjudicators" +msgstr "" + +#: checkins/views.py +msgid "Rooms" +msgstr "" + +#: checkins/views.py +#, python-format +msgid "Generated identifiers for %s" +msgstr "" + +#: checkins/views.py +msgid "Identifiers" +msgstr "" + +#: checkins/views.py +msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." +msgstr "" + +#: checkins/views.py +msgid "You have revoked your check-in." +msgstr "" + +#: checkins/views.py +msgid "Whoops! Looks like your check-in was already revoked." +msgstr "" + +#: checkins/views.py +msgid "Whoops! Looks like you're already checked in." +msgstr "" + +#: checkins/views.py +msgid "You are now checked in." +msgstr "" + +#: settings/core.py +msgid "Arabic" +msgstr "" + +#: settings/core.py +msgid "Bengali" +msgstr "" + +#: settings/core.py +msgid "English" +msgstr "" + +#: settings/core.py +msgid "Spanish" +msgstr "" + +#: settings/core.py +msgid "French" +msgstr "" + +#: settings/core.py +msgid "Indonesian" +msgstr "" + +#: settings/core.py +msgid "Japanese" +msgstr "" + +#: settings/core.py +msgid "Malay" +msgstr "" + +#: settings/core.py +msgid "Portuguese" +msgstr "" + +#: settings/core.py +msgid "Russian" +msgstr "" + +#: settings/core.py +msgid "Simplified Chinese" +msgstr "" + +#: settings/core.py +msgid "Translation" +msgstr "" + +#: templates/admin/delete_protected_message.html +msgid "You need to delete the above objects first." +msgstr "" + +#: templates/admin/style_guide.html +msgid "This style of info card announces critical information. Link." +msgstr "" + +#: templates/admin/style_guide.html +msgid "This style of info card announces general information." +msgstr "" + +#: templates/admin/style_guide.html +msgctxt "page title" +msgid "Form Title" +msgstr "" + +#: templates/admin/style_guide.html +msgid "Sub Title Title" +msgstr "" + +#: templates/admin/style_guide.html templates/registration/login.html +msgctxt "button" +msgid "Log In" +msgstr "" + +#: templates/admin/style_guide.html templates/registration/login.html +msgctxt "button" +msgid "I forgot my password" +msgstr "" + +#: templates/base.html +msgid "Tabbycat" +msgstr "" + +#: templates/base.html +#, python-format +msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" +msgstr "" + +#: templates/base.html +msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" +msgstr "" + +#: templates/components/form-errors.html +msgid "Whoops! There was an error with one or more fields." +msgstr "" + +#: templates/components/formset.html +msgid "Save and Add More" +msgstr "" + +#: templates/errors/assistant_403.html templates/errors/public_403.html +msgid "Permission Denied (403)" +msgstr "" + +#: templates/errors/assistant_403.html +#, python-format +msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." +msgstr "" + +#: templates/errors/database_limit_warning.html +#, python-format +msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." +msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." +msgstr[0] "" +msgstr[1] "" + +#: templates/errors/legacy_sendgrid_warning.html +msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." +msgstr "" + +#: templates/errors/public_403.html +#, python-format +msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." +msgstr "" + +#: templates/errors/public_403.html +#, python-format +msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." +msgstr "" + +#: templates/footer.html +#, python-format +msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" +msgstr "" + +#: templates/footer.html +#, python-format +msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" +msgstr "" + +#: templates/footer.html +msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." +msgstr "" + +#: templates/footer.html +#, python-format +msgid "For a tournament of this size, we suggest a donation of $%(amount)s." +msgstr "" + +#: templates/footer.html +msgid "Learn more about donating." +msgstr "" + +#: templates/footer.html +msgid "Donations to Tabbycat from individuals or organisations are much appreciated." +msgstr "" + +#: templates/footer.html +msgid "Still timing debates with the stopwatch app?" +msgstr "" + +#: templates/footer.html +#, python-format +msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." +msgstr "" + +#: templates/footer.html +msgid "Our Organisation" +msgstr "" + +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +msgstr "" + +#: templates/footer.html +msgid "Language" +msgstr "" + +#: templates/footer.html +msgid "GitHub" +msgstr "" + +#: templates/footer.html +msgid "Documentation" +msgstr "" + +#: templates/footer.html +msgid "Support" +msgstr "" + +#: templates/footer.html +msgid "Facebook" +msgstr "" + +#: templates/footer.html +msgid "Set Up A Copy" +msgstr "" + +#: templates/footer.html +msgid "Change Language" +msgstr "" + +#: templates/footer.html +msgid "Use this language" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Tabbycat Logo" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Site Home" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "New Tournament" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Edit Database" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Admin Area" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Assistant Area" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Public Area" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Overview" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Setup" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Configuration" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Import Data" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html +msgid "Participants" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Private URLs" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Emails" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Preformed Panels" +msgstr "Алдын-ала бекітілген құрам" + +#: templates/nav/admin_nav.html +msgid "Export XML" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Sides" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +msgid "People's Status" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Rooms' Status" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Feedback" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Latest" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Important" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Comments" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Find by Source" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Find by Target" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Unsubmitted" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Add Feedback" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Bulk Update" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Standings" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "All Teams" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Teams" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +#, python-format +msgid "%(category)s Teams" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "All Speakers" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +#, python-format +msgid "%(category)s Speakers" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Replies" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Motions" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Diversity" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Breaks" +msgstr "" + +#: templates/nav/admin_nav.html +#, python-format +msgid "%(category)s" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Adjudicators'" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Edit Categories" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Edit Eligibility" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Log Out" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Enter Results" +msgstr "" + +#: templates/nav/assistant_nav.html templates/nav/public_nav.html +msgid "Enter Feedback" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Participants List" +msgstr "" + +#: templates/nav/assistant_nav.html templates/nav/public_nav.html +msgid "Institutions" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Code Names" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "View Identifiers" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Room's Status" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Display/Print Draw" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Team Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Speaker Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Replies Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Adjudicator Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Motions Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "By round" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Globally" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Draws" +msgstr "" + +#: templates/nav/public_nav.html +msgid "No Draws Available" +msgstr "" + +#: templates/nav/public_nav.html +#, python-format +msgid "Draw for %(round)s" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Current Draws" +msgstr "" + +#: templates/nav/public_nav.html templates/nav/round_panel.html +msgid "Results" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Break" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Feedback Progress" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Enter Ballot" +msgstr "" + +#: templates/nav/round_panel.html +msgid "Availability" +msgstr "" + +#: templates/nav/round_panel.html +msgid "Draw" +msgstr "" + +#: templates/nav/round_panel.html +msgid "Display" +msgstr "" + +#: templates/nav/top_nav_base.html +#, python-format +msgid "Administrator area for %(tournament)s" +msgstr "" + +#: templates/nav/top_nav_base.html +#, python-format +msgid "Assistant area for %(tournament)s" +msgstr "" + +#: templates/nav/top_nav_base.html +#, python-format +msgid "Public area for %(tournament)s" +msgstr "" + +#: templates/nav/top_nav_base.html +msgid "Login" +msgstr "" + +#: templates/registration/logged_out.html +msgid "Goodbye" +msgstr "" + +#: templates/registration/logged_out.html +#, python-format +msgid "You have been logged out. Log in again?" +msgstr "" + +#: templates/registration/login.html +msgctxt "page title" +msgid "Login" +msgstr "" + +#: templates/registration/login.html +msgctxt "page title" +msgid "Log in to Tabbycat" +msgstr "" + +#: templates/registration/login.html +msgid "Your username and password didn't match." +msgstr "" + +#: templates/registration/login.html +msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." +msgstr "" + +#: templates/registration/login.html +msgid "Please log in to see this page." +msgstr "" + +#: templates/registration/password_change_done.html +msgctxt "page title" +msgid "Password changed" +msgstr "" + +#: templates/registration/password_change_done.html +msgid "Your password has been changed." +msgstr "" + +#: templates/registration/password_change_done.html +msgid "Go to the home page" +msgstr "" + +#: templates/registration/password_change_form.html +msgctxt "page title" +msgid "Password Change" +msgstr "" + +#: templates/registration/password_change_form.html +#, python-format +msgid "API Token: %(api_token)s" +msgstr "" + +#: templates/registration/password_change_form.html +msgid "The API token will allow you to authorize external applications to access the site as staff." +msgstr "" + +#: templates/registration/password_change_form.html +msgid "Please enter your old password, then enter a new one." +msgstr "" + +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html +msgctxt "button" +msgid "Change my password" +msgstr "" + +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html +msgid "Cancel and go back to the site home page" +msgstr "" + +#: templates/registration/password_reset_complete.html +msgctxt "page title" +msgid "Password reset complete" +msgstr "" + +#: templates/registration/password_reset_complete.html +msgid "Your password has been reset." +msgstr "" + +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html +msgid "Go to the login page" +msgstr "" + +#: templates/registration/password_reset_confirm.html +msgctxt "page title" +msgid "Password Reset Confirmation" +msgstr "" + +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html +msgctxt "page title" +msgid "Password Reset" +msgstr "" + +#: templates/registration/password_reset_confirm.html +msgid "Please enter a new password (twice):" +msgstr "" + +#: templates/registration/password_reset_confirm.html +msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." +msgstr "" + +#: templates/registration/password_reset_done.html +msgctxt "page title" +msgid "Password reset email sent" +msgstr "" + +#: templates/registration/password_reset_done.html +msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." +msgstr "" + +#: templates/registration/password_reset_done.html +msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." +msgstr "" + +#: templates/registration/password_reset_email.html +#, python-format +msgid "Hi, %(user)s!" +msgstr "" + +#: templates/registration/password_reset_email.html +#, python-format +msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." +msgstr "" + +#: templates/registration/password_reset_email.html +msgid "If this was you, follow the link below to reset your password:" +msgstr "" + +#: templates/registration/password_reset_email.html +#, python-format +msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." +msgstr "" + +#: templates/registration/password_reset_form.html +msgid "Enter your email address below, and we'll email you a password reset link." +msgstr "" + +#: templates/registration/password_reset_form.html +msgid "Please enter a valid email address." +msgstr "" + +#: templates/registration/password_reset_form.html users/forms.py +msgid "Email address" +msgstr "" + +#: templates/registration/password_reset_form.html +msgctxt "button" +msgid "Reset my password" +msgstr "" + +#: templates/registration/password_reset_form.html +msgid "Back to the login page" +msgstr "" + +#: templates/registration/password_reset_subject.txt +#, python-format +msgid "Password reset on Tabbycat site at %(domain)s" +msgstr "" + +#: urls.py +#, python-format +msgid "Hi, %(user)s — you just logged in!" +msgstr "" + +#: urls.py +msgid "Welcome! You just logged in!" +msgstr "" + +#: users/admin.py +msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." +msgstr "" + +#: users/admin.py +msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." +msgstr "" + +#: users/templates/admin/auth/delete_user_warning.html +msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." +msgstr "" + +#: users/templates/signup.html +msgid "Sign-Up" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Administrator Account" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Assistant Account" +msgstr "" + +#: users/templates/signup.html +msgid "Create Account" +msgstr "" + +#: users/views.py +msgid "You have successfully created a new administrator account." +msgstr "" + +#: users/views.py +msgid "You have successfully created a new assistant account." +msgstr "" + +#: users/views.py +msgid "Whoops! It looks like someone's already created the first user account. Please log in." +msgstr "" + +#: users/views.py +#, python-format +msgid "Welcome! You've created an account for %s." +msgstr "" + diff --git a/tabbycat/locale/kk/LC_MESSAGES/djangojs.po b/tabbycat/locale/kk/LC_MESSAGES/djangojs.po new file mode 100644 index 00000000000..062668e6d0c --- /dev/null +++ b/tabbycat/locale/kk/LC_MESSAGES/djangojs.po @@ -0,0 +1,554 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-14 04:50+1100\n" +"PO-Revision-Date: 2023-03-27 08:04\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/djangojs.po\n" +"X-Crowdin-File-ID: 962\n" + +#: checkins/templates/CheckInScanContainer.vue: +msgid "Scan Using Camera" +msgstr "" + +#: checkins/templates/CheckInScanContainer.vue: +msgid "Stop Camera Scan" +msgstr "" + +#: checkins/templates/CheckInScanContainer.vue: +msgid "Turn On Sounds" +msgstr "" + +#. Translators: %1: Time of checkin, %2: Barcode number, %3: Name of "owner" +#: checkins/templates/CheckInScanContainer.vue: +msgid "%1 checked in %2: %3" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "All" +msgstr "" + +#. Translators: %1: Option name +#: checkins/templates/CheckInStatusContainer.vue: +msgid "By %1" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "No matching rooms found." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "No matching people found." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "This page will live-update with new check-ins as they occur although the initial list may be up to a minute old." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid " All" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid " All" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "Click to check-in manually" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "saving..." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "This person does not have a check-in identifier so they can't be checked in" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "If you want to view this page without the sidebar (i.e. for displaying to an auditorium) you can use the assistant version." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "Open the assistant version." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "Click to undo a check-in" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 of no institutional affiliation with identifier of %3" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 of no institutional affiliation with no assigned identifier" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 from %3 with identifier of %4" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 from %3 with no assigned identifier" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1 (Present; id=%2)" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1 (Absent; id=%2)" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a team with speakers %2" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "Anonymous (due to team codes)" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "Anon" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "Independent" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (%2) with identifier of %3" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (no category) with identifier of %2" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (%2) with no assigned identifier" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (no category) with no assigned identifier" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "Uncategorised" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "No Category" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "Priority %1" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 %4" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 on %4 (Chair)" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 on %4 (Panellist)" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 on %4 (Trainee)" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "ID %1," +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "Room:" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "Chair for Panel of %1" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: +msgid "Solo Chair" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: +msgid "Panellist" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: +msgid "Trainee" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "Team" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Mark speeches %1 to %2; %3." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Mark replies %1 to %2; %3." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Return ballots to %1." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "The motion is %1" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Debated" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Circle %1" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "%1: %2" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Aff Veto" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Neg Veto" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: printing/templates/PrintableTeamScores.vue: +msgid "%1:" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "tab entry" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "tab check" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: checkins/templates/PeopleStatusMixin.vue: +msgid "Unaffiliated" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "no ½ marks" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "½ marks are allowed" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "decimal marks are allowed" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "%1 (%2, %3)" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Adjudicating with %1." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "; " +msgstr "" + +#: printing/templates/PrintableFeedback.vue: +msgid "Did %1 deliver the adjudication?" +msgstr "" + +#: printing/templates/PrintableFeedback.vue: printing/templates/PrintableFeedbackQuestion.vue: +msgid "Yes" +msgstr "" + +#: printing/templates/PrintableFeedback.vue: +msgid "No, I am submitting feedback on:" +msgstr "" + +#: printing/templates/PrintableFeedbackQuestion.vue: +msgid "Unsure" +msgstr "" + +#: printing/templates/PrintableFeedbackQuestion.vue: +msgid "No" +msgstr "" + +#: printing/templates/PrintableScoresheet.vue: +msgid "Which team won the debate:" +msgstr "" + +#: printing/templates/PrintableScoresheet.vue: +msgid "By how many points did they win:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "%1, %2" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "IMPORTANT: Check and explicitly note if a speaker gives multiple speeches" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Score:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Circle the last digit of the %1's score:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Circle Rank:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Total:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Circle the last digit of the team's total:" +msgstr "" + +#: templates/tables/TablesContainer.vue:8 +msgid "Find in Table" +msgstr "" + +#: templates/tables/CheckboxTables.vue:30 +msgid "Set All Breaking as Available" +msgstr "" + +#: templates/tables/CheckboxTables.vue:36 +msgid "Set all the availabilities to exactly match what they were in the previous round." +msgstr "" + +#: templates/tables/CheckboxTables.vue:37 +msgid "Match" +msgstr "" + +#: templates/tables/CheckboxTables.vue:41 +msgid "Set all availabilities to exactly match check-ins." +msgstr "" + +#: templates/tables/CheckboxTables.vue:44 +msgid "Match Check-Ins" +msgstr "" + +#: templates/tables/CheckboxTables.vue: +msgid "Set people as available only if they have a check-in and are currently unavailable — i.e. it will not overwrite any existing availabilities." +msgstr "" + +#: templates/tables/CheckboxTables.vue:47 +msgid "Copy From Check-Ins" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "Ballots Status" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "Latest Actions" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "No Actions Yet" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "Latest Results" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "No Confirmed Results Yet" +msgstr "" + +#: participants/templates/DiversityContainer.vue:6 +msgid "Speaker Demographics" +msgstr "" + +#: participants/templates/DiversityContainer.vue:11 +msgid "No Gender Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:18 +msgid "No Speaker Categories Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:33 +msgid "Speaker Results" +msgstr "" + +#: participants/templates/DiversityContainer.vue:36 +msgid "speakers with gender data" +msgstr "" + +#: participants/templates/DiversityContainer.vue:38 +msgid "speaker scores total" +msgstr "" + +#: participants/templates/DiversityContainer.vue:49 +msgid "No Region Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:56 +msgid "Adjudicator Demographics" +msgstr "" + +#: participants/templates/DiversityContainer.vue:68 +msgid "No Position Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:83 +msgid "Adjudicator Results" +msgstr "" + +#: participants/templates/DiversityContainer.vue:86 +msgid "adjudicators with gender data" +msgstr "" + +#: participants/templates/DiversityContainer.vue:88 +msgid "feedback scores total" +msgstr "" + +#: participants/templates/DiversityContainer.vue:94 +msgid "No Adjudicator Ratings Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:99 +msgid "No Adjudicator-Adjudicator Feedback Information" +msgstr "" + +#: results/templates/ResultsStats.vue:10 +msgid "Checked-In" +msgstr "" + +#: results/templates/ResultsStats.vue:15 +msgid "Not Checked-In" +msgstr "" + +#: results/templates/ResultsStats.vue:19 +msgid "Ballot Check-Ins" +msgstr "" + +#: results/templates/ResultsStats.vue:26 +msgid "Unknown" +msgstr "Белгісіз" + +#: results/templates/ResultsStats.vue:31 +msgid "Unconfirmed" +msgstr "" + +#: results/templates/ResultsStats.vue:36 +msgid "Confirmed" +msgstr "" + +#: results/templates/ResultsStats.vue:40 +msgid "Ballot Statuses" +msgstr "" + +#: results/templates/BallotsCell.vue:18 +msgid "You cannot confirm this ballot because you entered it" +msgstr "" + +#: results/templates/BallotsCell.vue:34 +msgid "Add Ballot" +msgstr "" + +#: results/templates/BallotsCell.vue:79 +msgid "Re-Edit" +msgstr "" + +#: results/templates/BallotsCell.vue:81 +msgid "Review" +msgstr "" + +#: utils/templates/AutoSaveCounter.vue:4 +msgid "No changes" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:8 +msgid "Return to Draw" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:15 +msgid "Auto-Prioritise" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:17 +msgid "Auto-Allocate" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Break" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Gender" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Rank" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Region" +msgstr "" + +#. Translators: Short for "Venue Category" +#: utils/templates/DragAndDropActions.vue:65 +msgid "Category" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:5 +msgid "The debate's bracket" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:9 +msgid "The bracket range of the hypothetical debate" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:20 +msgid "The total number of live break categories across all teams" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:26 +msgid "The estimated total number of live break categories across all teams of the hypothetical debate" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:33 +msgid "This debate's priority" +msgstr "" + +#: draw/templates/InlineTeam.vue:41 +msgid "No code name set" +msgstr "" + diff --git a/tabbycat/motions/locale/kk/LC_MESSAGES/django.po b/tabbycat/motions/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..340c326b6c7 --- /dev/null +++ b/tabbycat/motions/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,399 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-03-27 09:26\n" +"Last-Translator: \n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 936\n" + +#: motions/apps.py motions/templates/public_motions.html +msgid "Motions" +msgstr "" + +#: motions/models.py +msgid "text" +msgstr "" + +#: motions/models.py +msgid "The full motion e.g., \"This House would straighten all bananas\"" +msgstr "" + +#: motions/models.py +msgid "reference" +msgstr "" + +#: motions/models.py +msgid "Shortcode for the motion, e.g., \"Bananas\"" +msgstr "" + +#: motions/models.py +msgid "info slide" +msgstr "" + +#: motions/models.py +msgid "The information slide for this topic; if it has one" +msgstr "" + +#: motions/models.py +msgid "tournament" +msgstr "турнир" + +#: motions/models.py +msgid "rounds" +msgstr "" + +#: motions/models.py +msgid "motion" +msgstr "" + +#: motions/models.py +msgid "motions" +msgstr "" + +#: motions/models.py +msgid "debate team" +msgstr "" + +#: motions/models.py +msgid "preferences" +msgstr "" + +#: motions/models.py +msgid "ballot submission" +msgstr "" + +#: motions/models.py +msgid "debate team motion preference" +msgstr "" + +#: motions/models.py +msgid "debate team motion preferences" +msgstr "" + +#: motions/models.py +msgid "round" +msgstr "ойын" + +#: motions/models.py +msgid "sequence number" +msgstr "" + +#: motions/models.py +msgid "The order in which motions are displayed" +msgstr "" + +#: motions/models.py +msgid "round motion" +msgstr "" + +#: motions/models.py +msgid "round motions" +msgstr "" + +#: motions/statistics.py +msgid "extremely strong evidence" +msgstr "" + +#: motions/statistics.py +msgid "strong evidence" +msgstr "" + +#: motions/statistics.py +msgid "moderate evidence" +msgstr "" + +#: motions/statistics.py +msgid "weak evidence" +msgstr "" + +#: motions/statistics.py +msgid "very weak evidence" +msgstr "" + +#: motions/statistics.py +msgid "extremely weak evidence" +msgstr "" + +#: motions/statistics.py +msgid "balance inconclusive" +msgstr "" + +#: motions/statistics.py +msgid "too few debates to get a meaningful statistic" +msgstr "" + +#: motions/statistics.py +#, python-format +msgid "imbalanced at %(level)s level" +msgstr "" + +#: motions/statistics.py +#, python-format +msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." +msgstr "" + +#: motions/statistics.py +msgid "probably balanced" +msgstr "" + +#: motions/statistics.py +#, python-format +msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." +msgstr "" + +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html +msgid "View Info Slide" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "results from %(ndebates)s debate" +msgid_plural "results from %(ndebates)s debates" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" +msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" +msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_bp_elim.html +msgid "advanced" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +msgctxt "abbreviation for 'advanced', used when not enough space" +msgid "adv." +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +msgid "eliminated" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +msgctxt "abbreviation for 'eliminated', used when not enough space" +msgid "elim." +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "%(side)s results distribution" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html +msgid "No results for this motion" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Government" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Opposition" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Average Points per bench" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Opening" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Closing" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Average Points per half" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +#, python-format +msgid "average points per position (%(ndebates)s debate)" +msgid_plural "average points per position (%(ndebates)s debates)" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_bp_prelim.html +#, python-format +msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" +msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_bp_prelim.html +#, python-format +msgid "%(side)s results" +msgstr "" + +#: motions/templates/motion_statistics_twoteam.html +#, python-format +msgid "%(count)s %(side)s win" +msgid_plural "%(count)s %(side)s wins" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_twoteam.html +msgid "No teams debated this motion" +msgstr "" + +#: motions/templates/motion_statistics_twoteam.html +#, python-format +msgid "%(count)s %(side)s veto" +msgid_plural "%(count)s %(side)s vetoes" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motion_statistics_twoteam.html +msgid "No teams vetoed this motion" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Edit Motion" +msgid_plural "Edit Motions" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motions_edit.html +msgid "Display Draw" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Reuse Motions from Last Round" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Use Existing Motions" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motions_edit.html +msgid "Save Motion" +msgid_plural "Save Motions" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motions_info.html +msgid "Info Slide" +msgstr "" + +#: motions/templates/public_motions.html +msgid "There are no motions available for this round." +msgstr "" + +#: motions/templates/public_motions.html +msgid "The motions for this round have not been released." +msgstr "" + +#: motions/templates/public_motions.html +msgid "The motion for this round has not been released." +msgstr "" + +#: motions/templates/show.html +#, python-format +msgid "Reveal Info Slide for %(round)s" +msgid_plural "Reveal Info Slides for %(round)s" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/show.html +#, python-format +msgid "Reveal Motion for %(round)s" +msgid_plural "Reveal Motions for %(round)s" +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/show.html +msgid "There are no motions for this round entered into Tabbycat." +msgstr "" + +#: motions/utils.py +msgid "Not all latest ballots list the same motion, so could not be merged." +msgstr "" + +#: motions/utils.py +msgid "Motion vetos are inconsistent, so could not be merged." +msgstr "" + +#: motions/views.py +msgid "The motion has been saved." +msgstr "" + +#: motions/views.py +#, python-format +msgid "%(count)d motion has been saved." +msgid_plural "%(count)d motions have been saved." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +#, python-format +msgid "%(count)d motion has been deleted." +msgid_plural "%(count)d motions have been deleted." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "" + +#: motions/views.py +#, python-format +msgid "Reused the motion from the previous round." +msgid_plural "Reused the %(count)d motions from the previous round." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" +msgstr[1] "" + +#: motions/views.py +msgid "Round Motions" +msgstr "" + +#: motions/views.py +msgid "Motion Statistics" +msgstr "" + diff --git a/tabbycat/notifications/locale/kk/LC_MESSAGES/django.po b/tabbycat/notifications/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..7f3d341cf81 --- /dev/null +++ b/tabbycat/notifications/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,416 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-27 09:26\n" +"Last-Translator: philip_tc\n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/notifications/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 938\n" + +#: notifications/apps.py +msgid "Notifications" +msgstr "" + +#: notifications/forms.py +msgid "Recipient email address" +msgstr "" + +#: notifications/forms.py +#, python-format +msgid "Test email from %(host)s" +msgstr "" + +#: notifications/forms.py +#, python-format +msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" +msgstr "" + +#: notifications/forms.py +msgid "Subject" +msgstr "" + +#: notifications/forms.py +msgid "Message" +msgstr "" + +#: notifications/models.py +msgid "email" +msgstr "" + +#: notifications/models.py +msgid "SMS" +msgstr "" + +#: notifications/models.py +msgid "recipient" +msgstr "" + +#: notifications/models.py +msgid "method" +msgstr "" + +#: notifications/models.py +msgid "context" +msgstr "" + +#: notifications/models.py +msgid "notification" +msgstr "" + +#: notifications/models.py +msgid "timestamp" +msgstr "" + +#: notifications/models.py +msgid "sent message" +msgstr "" + +#: notifications/models.py +msgid "sent messages" +msgstr "" + +#: notifications/models.py +msgid "team points" +msgstr "" + +#: notifications/models.py +msgid "ballot confirmed" +msgstr "" + +#: notifications/models.py +msgid "feedback URL" +msgstr "" + +#: notifications/models.py +msgid "ballot URL" +msgstr "" + +#: notifications/models.py +msgid "landing page URL" +msgstr "" + +#: notifications/models.py +msgid "adjudicator draw released" +msgstr "" + +#: notifications/models.py +msgid "team registration" +msgstr "" + +#: notifications/models.py +msgid "adjudicator registration" +msgstr "" + +#: notifications/models.py +msgid "motion(s) released" +msgstr "" + +#: notifications/models.py +msgid "team draw released" +msgstr "" + +#: notifications/models.py +msgid "custom message" +msgstr "" + +#: notifications/models.py +msgid "event" +msgstr "" + +#: notifications/models.py +msgid "tournament" +msgstr "турнир" + +#: notifications/models.py +msgid "round" +msgstr "ойын" + +#: notifications/models.py +msgid "subject template" +msgstr "" + +#: notifications/models.py +msgid "body template" +msgstr "" + +#: notifications/models.py +msgid "bulk notification" +msgstr "" + +#: notifications/models.py +msgid "bulk notifications" +msgstr "" + +#: notifications/models.py +msgid "Processed" +msgstr "" + +#: notifications/models.py +msgid "Dropped" +msgstr "" + +#: notifications/models.py +msgid "Deferred" +msgstr "" + +#: notifications/models.py +msgid "Delivered" +msgstr "" + +#: notifications/models.py +msgid "Bounced" +msgstr "" + +#: notifications/models.py +msgid "Opened" +msgstr "" + +#: notifications/models.py +msgid "Clicked" +msgstr "" + +#: notifications/models.py +msgid "Unsubscribed" +msgstr "" + +#: notifications/models.py +msgid "Marked as spam" +msgstr "" + +#: notifications/models.py +msgid "Unsubscribed from group" +msgstr "" + +#: notifications/models.py +msgid "Resubscribed to group" +msgstr "" + +#: notifications/models.py +msgid "email message" +msgstr "" + +#: notifications/models.py +msgid "email status" +msgstr "" + +#: notifications/models.py +msgid "email statuses" +msgstr "" + +#: notifications/templates/email_participants.html +#, python-format +msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." +msgstr "" + +#: notifications/templates/email_participants.html +#, python-format +msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." +msgstr "" + +#: notifications/templates/email_participants.html +msgid "Send Message(s)" +msgstr "" + +#: notifications/templates/email_statuses.html +msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." +msgstr "" + +#: notifications/templates/notifications_nav.html notifications/views.py +msgid "Email Statuses" +msgstr "" + +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html +msgid "Send Test Email" +msgstr "" + +#: notifications/templates/notifications_nav.html +msgid "Send Custom Email" +msgstr "" + +#: notifications/templates/test_email.html +msgctxt "page title" +msgid "Send Test Email" +msgstr "" + +#: notifications/templates/test_email.html +msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." +msgstr "" + +#: notifications/templates/test_email.html +#, python-format +msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." +msgstr "" + +#: notifications/templates/test_email.html +msgid "Go back to the site home page" +msgstr "" + +#: notifications/utils.py +msgid "the chair" +msgstr "" + +#: notifications/utils.py +msgid "the only" +msgstr "" + +#: notifications/utils.py +msgid "a panellist" +msgstr "" + +#: notifications/utils.py +msgid "a trainee" +msgstr "" + +#: notifications/utils.py +msgid "TBA" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "%(tournament)s %(round)s @ %(room)s" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" +msgstr "" + +#: notifications/utils.py +msgid "Win" +msgstr "" + +#: notifications/utils.py +msgid "Loss" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(text)s (%(ref)s)
  • " +msgstr "" + +#: notifications/utils.py +msgid ", " +msgstr "" + +#: notifications/views.py +#, python-format +msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" +msgstr "" + +#: notifications/views.py +msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." +msgstr "" + +#: notifications/views.py +#, python-format +msgid "There was an error sending the test email: %(error)s" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "A test email has been sent to %(recipient)s." +msgstr "" + +#: notifications/views.py +msgid "N/A" +msgstr "" + +#: notifications/views.py +msgid "Not known" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "%(status)s @ %(time)s" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "@ %s" +msgstr "" + +#: notifications/views.py +msgid "Timeline" +msgstr "" + +#: notifications/views.py +msgid "Participant" +msgstr "" + +#: notifications/views.py +msgid "Email address" +msgstr "" + +#: notifications/views.py +msgid "Status" +msgstr "" + +#: notifications/views.py +msgid "Time" +msgstr "" + +#: notifications/views.py +msgid "Email Participants" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "%(email_count)s email has been queued for sending." +msgid_plural "%(email_count)s emails have been queued for sending." +msgstr[0] "" +msgstr[1] "" + +#: notifications/views.py +msgid "No emails were sent — likely because no recipients were selected." +msgstr "" + +#: notifications/views.py +msgid "Send Email" +msgstr "" + +#: notifications/views.py +msgid "Not Provided" +msgstr "" + +#: notifications/views.py +msgid "Role" +msgstr "" + +#: notifications/views.py +msgid "Adjudicator" +msgstr "" + +#: notifications/views.py +msgid "Speaker" +msgstr "" + +#: notifications/views.py +msgid "Speakers" +msgstr "" + +#: notifications/views.py +msgid "Adjudicators" +msgstr "" + diff --git a/tabbycat/options/locale/kk/LC_MESSAGES/django.po b/tabbycat/options/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..0436e6d3a70 --- /dev/null +++ b/tabbycat/options/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,1618 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: philip_tc\n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/options/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 940\n" + +#: options/apps.py +msgid "Tournament Options" +msgstr "" + +#: options/models.py +msgid "instance" +msgstr "" + +#: options/models.py +msgid "tournament preference" +msgstr "" + +#: options/models.py +msgid "tournament preferences" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Score Rules" +msgstr "" + +#: options/preferences.py +msgid "Minimum allowed score for substantive speeches" +msgstr "" + +#: options/preferences.py +msgid "Minimum speaker score" +msgstr "" + +#: options/preferences.py +msgid "Maximum speaker score" +msgstr "" + +#: options/preferences.py +msgid "Maximum allowed score for substantive speeches" +msgstr "" + +#: options/preferences.py +msgid "Speaker score step" +msgstr "" + +#: options/preferences.py +msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" +msgstr "" + +#: options/preferences.py +msgid "The largest amount by which one team can beat another (0 means no limit)" +msgstr "" + +#: options/preferences.py +msgid "Maximum margin" +msgstr "" + +#: options/preferences.py +msgid "Minimum allowed score for reply speeches" +msgstr "" + +#: options/preferences.py +msgid "Minimum reply score" +msgstr "" + +#: options/preferences.py +msgid "Maximum allowed score for reply speeches" +msgstr "" + +#: options/preferences.py +msgid "Maximum reply score" +msgstr "" + +#: options/preferences.py +msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" +msgstr "" + +#: options/preferences.py +msgid "Reply score step" +msgstr "" + +#: options/preferences.py +msgid "If checked, a team's winning margin includes dissenting adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Margin includes dissenters" +msgstr "" + +#: options/preferences.py +msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" +msgstr "" + +#: options/preferences.py +msgid "Team score includes ghosts" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Draw Rules" +msgstr "" + +#: options/preferences.py +msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" +msgstr "" + +#: options/preferences.py +msgid "Minimum adjudicator score to vote" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by adjudicator auto-allocator for conflicts" +msgstr "" + +#: options/preferences.py +msgid "Adjudicator conflict penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by adjudicator auto-allocator for history" +msgstr "" + +#: options/preferences.py +msgid "Adjudicator history penalty" +msgstr "" + +#: options/preferences.py +msgid "Penality applied by preformed panel auto-allocator for priority mismatch" +msgstr "" + +#: options/preferences.py +msgid "Importance mismatch penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" +msgstr "" + +#: options/preferences.py +msgid "Team institution penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" +msgstr "" + +#: options/preferences.py +msgid "Team history penalty" +msgstr "" + +#: options/preferences.py +msgid "If checked, the draw will try to avoid pairing teams against their own institution" +msgstr "" + +#: options/preferences.py +msgid "Avoid same institution" +msgstr "" + +#: options/preferences.py +msgid "If checked, the draw will try to avoid having teams see each other twice" +msgstr "" + +#: options/preferences.py +msgid "Avoid team history" +msgstr "" + +#: options/preferences.py +msgid "How odd brackets are resolved (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Odd bracket resolution method" +msgstr "" + +#: options/preferences.py +msgid "Pull up from top" +msgstr "" + +#: options/preferences.py +msgid "Pull up from bottom" +msgstr "" + +#: options/preferences.py +msgid "Pull up from middle" +msgstr "" + +#: options/preferences.py +msgid "Pull up at random" +msgstr "" + +#: options/preferences.py +msgid "Intermediate brackets" +msgstr "" + +#: options/preferences.py +msgid "Intermediate brackets with bubble-up-bubble-down" +msgstr "" + +#: options/preferences.py +msgid "Intermediate 1 (pre-allocated sides)" +msgstr "" + +#: options/preferences.py +msgid "Intermediate 2 (pre-allocated sides)" +msgstr "" + +#: options/preferences.py +msgid "How affirmative/negative positions are assigned (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Side allocations method" +msgstr "" + +#: options/preferences.py +msgid "Random" +msgstr "" + +#: options/preferences.py +msgid "Balance" +msgstr "" + +#: options/preferences.py +msgid "Pre-allocated" +msgstr "" + +#: options/preferences.py +msgid "Manually enter from ballot" +msgstr "" + +#: options/preferences.py +msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." +msgstr "" + +#: options/preferences.py +msgid "Pairing method" +msgstr "" + +#: options/preferences.py +msgid "Slide" +msgstr "" + +#: options/preferences.py +msgid "Fold" +msgstr "" + +#: options/preferences.py +msgid "Adjacent" +msgstr "" + +#: options/preferences.py +msgid "Fold top, adjacent rest" +msgstr "" + +#: options/preferences.py +msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Conflict avoidance method" +msgstr "" + +#: options/preferences.py +msgid "Off" +msgstr "" + +#: options/preferences.py +msgid "One-up-one-down" +msgstr "" + +#: options/preferences.py +msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." +msgstr "" + +#: options/preferences.py +msgid "Pullup restriction" +msgstr "" + +#: options/preferences.py +msgid "No restriction" +msgstr "" + +#: options/preferences.py +msgid "Choose from teams who have been pulled up the fewest times so far" +msgstr "" + +#: options/preferences.py +msgid "Choose from teams with the lowest draw strength by wins so far" +msgstr "" + +#: options/preferences.py +msgid "Choose from teams with the lowest draw strength by speaks so far" +msgstr "" + +#: options/preferences.py +msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." +msgstr "" + +#: options/preferences.py +msgid "BP pullup distribution" +msgstr "" + +#: options/preferences.py +msgid "Anywhere in bracket" +msgstr "" + +#: options/preferences.py +msgid "All in the same room (not WUDC-compliant)" +msgstr "" + +#: options/preferences.py +msgid "In BP, which position cost function to use (see documentation for details)" +msgstr "" + +#: options/preferences.py +msgid "BP position cost" +msgstr "" + +#: options/preferences.py +msgid "Simple" +msgstr "" + +#: options/preferences.py +msgid "Rényi entropy" +msgstr "" + +#: options/preferences.py +msgid "Population variance" +msgstr "" + +#: options/preferences.py +msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." +msgstr "" + +#: options/preferences.py +msgid "Rényi order (BP)" +msgstr "" + +#: options/preferences.py +msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." +msgstr "" + +#: options/preferences.py +msgid "BP position cost exponent" +msgstr "" + +#: options/preferences.py +msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." +msgstr "" + +#: options/preferences.py +msgid "BP assignment method" +msgstr "" + +#: options/preferences.py +msgid "Hungarian algorithm (not WUDC-compliant)" +msgstr "" + +#: options/preferences.py +msgid "Hungarian algorithm with preshuffling" +msgstr "" + +#: options/preferences.py +msgid "Automatically make all adjudicators available for all rounds" +msgstr "" + +#: options/preferences.py +msgid "Skip adjudicator check-ins" +msgstr "" + +#: options/preferences.py +msgid "Hide panellist positions in the UI (and don't allocate them)" +msgstr "" + +#: options/preferences.py +msgid "No panellist adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Hide trainee positions in the UI (and don't allocate them)" +msgstr "" + +#: options/preferences.py +msgid "No trainee adjudicators" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Feedback" +msgstr "" + +#: options/preferences.py +msgid "Minimum possible adjudicator score that can be given" +msgstr "" + +#: options/preferences.py +msgid "Minimum adjudicator score" +msgstr "" + +#: options/preferences.py +msgid "Maximum possible adjudicator score that can be given" +msgstr "" + +#: options/preferences.py +msgid "Maximum adjudicator score" +msgstr "" + +#: options/preferences.py +msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" +msgstr "" + +#: options/preferences.py +msgid "Allow and expect feedback to be submitted by" +msgstr "" + +#: options/preferences.py +msgid "Chairs on panellists and trainees" +msgstr "" + +#: options/preferences.py +msgid "Panellists on chairs, chairs on panellists and trainees" +msgstr "" + +#: options/preferences.py +msgid "Panellists and trainees on chairs, vice-versa" +msgstr "" + +#: options/preferences.py +msgid "All adjudicators (including trainees) on each other" +msgstr "" + +#: options/preferences.py +msgid "Expect feedback to be submitted by teams on" +msgstr "" + +#: options/preferences.py +msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" +msgstr "" + +#: options/preferences.py +msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" +msgstr "" + +#: options/preferences.py +msgid "All adjudicators in their panels (including trainees)" +msgstr "" + +#: options/preferences.py +msgid "Show unexpected feedback submissions in participants pages" +msgstr "" + +#: options/preferences.py +msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" +msgstr "" + +#: options/preferences.py +msgid "Show if an adjudicator is a trainee (unaccredited)" +msgstr "" + +#: options/preferences.py +msgid "Show unaccredited" +msgstr "" + +#: options/preferences.py +msgid "Any explanatory text needed to introduce the feedback form" +msgstr "" + +#: options/preferences.py +msgid "Feedback introduction/explanation" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Debate Rules" +msgstr "" + +#: options/preferences.py +msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" +msgstr "" + +#: options/preferences.py +msgid "Teams in debate" +msgstr "" + +#: options/preferences.py +msgid "Two-team format" +msgstr "" + +#: options/preferences.py +msgid "British Parliamentary (four teams)" +msgstr "" + +#: options/preferences.py +msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." +msgstr "" + +#: options/preferences.py +msgid "Ballots per debate, preliminary rounds" +msgstr "" + +#: options/preferences.py +msgid "One ballot per voting adjudicator" +msgstr "" + +#: options/preferences.py +msgid "Consensus ballot (one ballot per debate)" +msgstr "" + +#: options/preferences.py +msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." +msgstr "" + +#: options/preferences.py +msgid "Ballots per debate, elimination rounds" +msgstr "" + +#: options/preferences.py +msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." +msgstr "" + +#: options/preferences.py +msgid "Winner Declaration in ballot(s)" +msgstr "" + +#: options/preferences.py +msgid "Do not require separate winner selection" +msgstr "" + +#: options/preferences.py +msgid "Require separate winner selection as a check on correct scores" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection to break tied-point debates" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection, overriding scores" +msgstr "" + +#: options/preferences.py +msgid "When ballots should ask for speaker scores." +msgstr "" + +#: options/preferences.py +msgid "Require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Always require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Only require speaker scores in preliminary rounds" +msgstr "" + +#: options/preferences.py +msgid "Never require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "How many substantive speakers on a team" +msgstr "" + +#: options/preferences.py +msgid "Substantive speakers" +msgstr "" + +#: options/preferences.py +msgid "What to call the teams" +msgstr "" + +#: options/preferences.py +msgid "Side names" +msgstr "" + +#: options/preferences.py +msgid "Whether this style features scored reply speeches" +msgstr "" + +#: options/preferences.py +msgid "Reply scores" +msgstr "" + +#: options/preferences.py +msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" +msgstr "" + +#: options/preferences.py +msgid "Require reply speaker to have given a substantive speech" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Standings" +msgstr "" + +#: options/preferences.py +msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" +msgstr "" + +#: options/preferences.py +msgid "Speeches missable for standings eligibility" +msgstr "" + +#: options/preferences.py +msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" +msgstr "" + +#: options/preferences.py +msgid "Replies missable for standings eligibility" +msgstr "" + +#: options/preferences.py +msgid "Metrics to use to rank teams (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Team standings precedence" +msgstr "" + +#: options/preferences.py +#, python-format +msgid "The following metrics can't be listed twice: %(duplicates)s" +msgstr "" + +#: options/preferences.py +msgid "Metrics to calculate, but not used to rank teams" +msgstr "" + +#: options/preferences.py +msgid "Team standings extra metrics" +msgstr "" + +#: options/preferences.py +msgid "Metrics to use to rank speakers (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Speaker standings precedence" +msgstr "" + +#: options/preferences.py +msgid "Metrics to calculate, but not used to rank speakers" +msgstr "" + +#: options/preferences.py +msgid "Speaker standings extra metrics" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Tab Release" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the team tab. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release team tab to public" +msgstr "" + +#: options/preferences.py +msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." +msgstr "" + +#: options/preferences.py +msgid "Top teams cutoff" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the speaker tab. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release speaker tab to public" +msgstr "" + +#: options/preferences.py +msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." +msgstr "" + +#: options/preferences.py +msgid "Top speakers cutoff" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the replies tab. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release replies tab to public" +msgstr "" + +#: options/preferences.py +msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." +msgstr "" + +#: options/preferences.py +msgid "Top replies cutoff" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release motions tab to public" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the feedback scores of all adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Release adjudicator tab to public" +msgstr "" + +#: options/preferences.py +msgid "What (if released) the adjudicator tab shows" +msgstr "" + +#: options/preferences.py +msgid "Adjudicator tab displays" +msgstr "" + +#: options/preferences.py +msgid "Only shows base score" +msgstr "" + +#: options/preferences.py +msgid "Only shows final score" +msgstr "" + +#: options/preferences.py +msgid "Shows base, final, and per-round scores" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release ballots to public" +msgstr "" + +#: options/preferences.py +msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" +msgstr "" + +#: options/preferences.py +msgid "Release all round results to public" +msgstr "" + +#: options/preferences.py +msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release ballots through private URLs" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Data Entry" +msgstr "" + +#: options/preferences.py +msgid "Whether adjudicators can submit ballots themselves, and how they do so" +msgstr "" + +#: options/preferences.py +msgid "Ballot submissions from adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Disabled (tab staff only)" +msgstr "" + +#: options/preferences.py +msgid "Use private URLs" +msgstr "" + +#: options/preferences.py +msgid "Use publicly accessible form" +msgstr "" + +#: options/preferences.py +msgid "Whether participants can submit feedback themselves, and how they do so" +msgstr "" + +#: options/preferences.py +msgid "Feedback submissions from participants" +msgstr "" + +#: options/preferences.py +msgid "If checked, users must enter a password when submitting public feedback and ballots" +msgstr "" + +#: options/preferences.py +msgid "Require password for submission" +msgstr "" + +#: options/preferences.py +msgid "Value of the password required for public submissions, if passwords are required" +msgstr "" + +#: options/preferences.py +msgid "Password for public submission" +msgstr "" + +#: options/preferences.py +msgid "Bypasses double checking by setting ballots to be automatically confirmed" +msgstr "" + +#: options/preferences.py +msgid "Bypass double checking" +msgstr "" + +#: options/preferences.py +msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." +msgstr "" + +#: options/preferences.py +msgid "Enforce blind confirmations" +msgstr "" + +#: options/preferences.py +msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." +msgstr "" + +#: options/preferences.py +msgid "Assistant user access" +msgstr "" + +#: options/preferences.py +msgid "All areas (results entry, draw display, and motions)" +msgstr "" + +#: options/preferences.py +msgid "Just results entry and draw display" +msgstr "" + +#: options/preferences.py +msgid "Only results entry" +msgstr "" + +#: options/preferences.py +msgid "Whether participants can check themselves in/out through their private URL." +msgstr "" + +#: options/preferences.py +msgid "Participant self-checkin" +msgstr "" + +#: options/preferences.py +msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" +msgstr "" + +#: options/preferences.py +msgid "Check-In Window (People)" +msgstr "" + +#: options/preferences.py +msgid "The amount of time (in hours) before a room's check-in event expires" +msgstr "" + +#: options/preferences.py +msgid "Check-In Window (Rooms)" +msgstr "" + +#: options/preferences.py +msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" +msgstr "" + +#: options/preferences.py +msgid "Ballot Digit Checks" +msgstr "" + +#: options/preferences.py +msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." +msgstr "" + +#: options/preferences.py +msgid "Score return location" +msgstr "" + +#: options/preferences.py +msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." +msgstr "" + +#: options/preferences.py +msgid "Feedback return location" +msgstr "" + +#: options/preferences.py +msgid "Lets debates have their status as postponed, as to not block draw generation." +msgstr "" + +#: options/preferences.py +msgid "Enable postponements" +msgstr "" + +#: options/preferences.py +msgid "Have each voting adjudicator submit a separate ballot." +msgstr "" + +#: options/preferences.py +msgid "Individual voting ballots" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Public Features" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing all participants in the tournament" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of participants list" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing all institutions in the tournament" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of institutions list" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing diversity statistics" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of diversity info" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." +msgstr "" + +#: options/preferences.py +msgid "Enable public view of the checkin statuses" +msgstr "" + +#: options/preferences.py +msgid "If the participants list is enabled, displays break category eligibility on that page" +msgstr "" + +#: options/preferences.py +msgid "Show break categories on participants page" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing pre-allocated sides" +msgstr "" + +#: options/preferences.py +msgid "Show pre-allocated sides to public" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing released draws" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of draw" +msgstr "" + +#: options/preferences.py +msgid "Disabled" +msgstr "" + +#: options/preferences.py +msgid "Show a single page for the current round's draw" +msgstr "" + +#: options/preferences.py +msgid "Show individual pages for all released draws" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing results of non-silent rounds" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of results" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing motions that have been explicitly released to the public" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of motions" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of team standings" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page for each team and adjudicator showing their records" +msgstr "" + +#: options/preferences.py +msgid "Enable public record pages" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." +msgstr "" + +#: options/preferences.py +msgid "Release team breaks to public" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." +msgstr "" + +#: options/preferences.py +msgid "Release adjudicators break to public" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page detailing who has unsubmitted feedback" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of unsubmitted feedback" +msgstr "" + +#: options/preferences.py +msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." +msgstr "" + +#: options/preferences.py +msgid "Tournament staff" +msgstr "" + +#: options/preferences.py +msgid "Message to be displayed on the tournament home page" +msgstr "" + +#: options/preferences.py +msgid "Welcome message" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "UI Options" +msgstr "" + +#: options/preferences.py +msgid "If showing results to public, show splitting adjudicators in them" +msgstr "" + +#: options/preferences.py +msgid "Show splitting adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Whether and how to use code names for teams" +msgstr "" + +#: options/preferences.py +msgid "Team code names" +msgstr "" + +#: options/preferences.py +msgid "Do not use code names" +msgstr "" + +#: options/preferences.py +msgid "Use real names everywhere, and show code names in tooltips" +msgstr "" + +#: options/preferences.py +msgid "Use code names for public; real names with code names in tooltips for admins" +msgstr "" + +#: options/preferences.py +msgid "Use code names for public; code names with real names in tooltips for admins" +msgstr "" + +#: options/preferences.py +msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" +msgstr "" + +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py +msgid "Display team emoji in the public and admin interfaces" +msgstr "" + +#: options/preferences.py +msgid "Show emoji" +msgstr "" + +#: options/preferences.py +msgid "In tables listing teams, adds a column showing their institutions" +msgstr "" + +#: options/preferences.py +msgid "Show team institutions" +msgstr "" + +#: options/preferences.py +msgid "Hide the institutions of adjudicators on public pages and on printed ballots" +msgstr "" + +#: options/preferences.py +msgid "Show adjudicator institutions" +msgstr "" + +#: options/preferences.py +msgid "Enables a hover element on every team's name showing that team's speakers" +msgstr "" + +#: options/preferences.py +msgid "Show speakers in draw" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Notifications" +msgstr "" + +#: options/preferences.py +msgid "The name of the organizer tasked with managing emails (in case of replies)" +msgstr "" + +#: options/preferences.py +msgid "Reply-to name" +msgstr "" + +#: options/preferences.py +msgid "The email address for handling replies" +msgstr "" + +#: options/preferences.py +msgid "Reply-to address" +msgstr "" + +#: options/preferences.py +msgid "A secret key to accept email status events" +msgstr "" + +#: options/preferences.py +msgid "Email status secret key" +msgstr "" + +#: options/preferences.py +msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" +msgstr "" + +#: options/preferences.py +msgid "Ballot receipts" +msgstr "" + +#: options/preferences.py +msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" +msgstr "" + +#: options/preferences.py +msgid "Ballot receipt subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to adjudicators with their submitted ballot." +msgstr "" + +#: options/preferences.py +msgid "Ballot receipt message" +msgstr "" + +#: options/preferences.py +msgid "The subject line for emails sent to speakers with their team points." +msgstr "" + +#: options/preferences.py +msgid "Team points subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to speakers with their team points." +msgstr "" + +#: options/preferences.py +msgid "Team points message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to adjudicators with their assignments." +msgstr "" + +#: options/preferences.py +msgid "Adjudicator draw subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to adjudicators with their assignments." +msgstr "" + +#: options/preferences.py +msgid "Adjudicator draw message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to teams with their draw." +msgstr "" + +#: options/preferences.py +msgid "Team draw subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to participants with their private URLs." +msgstr "" + +#: options/preferences.py +msgid "Private URL notification message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to participants with their private URLs." +msgstr "" + +#: options/preferences.py +msgid "Private URL notification subject line" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to participants on motion release." +msgstr "" + +#: options/preferences.py +msgid "Motion release notification subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to participants on motion release." +msgstr "" + +#: options/preferences.py +msgid "Motion release notification message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to participants informing them of their team registration." +msgstr "" + +#: options/preferences.py +msgid "Team registration notification subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to participants informing them of their team registration." +msgstr "" + +#: options/preferences.py +msgid "Team registration notification message" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Motions" +msgstr "" + +#: options/preferences.py +msgid "If checked, ballots require a motion to be entered" +msgstr "" + +#: options/preferences.py +msgid "Enable motions" +msgstr "" + +#: options/preferences.py +msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" +msgstr "" + +#: options/preferences.py +msgid "Ballot Hide Motions" +msgstr "" + +#: options/preferences.py +msgid "Enables the motion veto field on ballots, to track veto statistics" +msgstr "" + +#: options/preferences.py +msgid "Motion vetoes" +msgstr "" + +#: options/preferences.py +msgid "If showing results to public, show which motions were selected in the record" +msgstr "" + +#: options/preferences.py +msgid "Show motions in results" +msgstr "" + +#: options/preferences.py +msgid "Order in which are listed by round in the public view" +msgstr "" + +#: options/preferences.py +msgid "Order to display motions" +msgstr "" + +#: options/preferences.py +msgid "Earliest round first" +msgstr "" + +#: options/preferences.py +msgid "Latest round first" +msgstr "" + +#: options/preferences.py +msgid "Whether motions can be reused from one round to another." +msgstr "" + +#: options/preferences.py +msgid "Allow motion reuse" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Global Settings" +msgstr "" + +#: options/preferences.py +msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." +msgstr "" + +#: options/preferences.py +msgid "Enable API access" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Assistant account creation key" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Administrator account creation key" +msgstr "" + +#: options/presets.py +msgid "Public Information Options" +msgstr "" + +#: options/presets.py +msgid "Enable Public Information" +msgstr "" + +#: options/presets.py +msgid "Disable Public Information" +msgstr "" + +#: options/presets.py +msgid "Australs Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." +msgstr "" + +#: options/presets.py +msgid "British Parliamentary Rules" +msgstr "" + +#: options/presets.py +msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." +msgstr "" + +#: options/presets.py +msgid "Canadian Parliamentary Rules" +msgstr "" + +#: options/presets.py +msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." +msgstr "" + +#: options/presets.py +msgid "Australian Easters Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." +msgstr "" + +#: options/presets.py +msgid "2 vs 2 Impromptu" +msgstr "" + +#: options/presets.py +msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." +msgstr "" + +#: options/presets.py +msgid "3 vs 3 Prepared" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." +msgstr "" + +#: options/presets.py +msgid "UADC Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." +msgstr "" + +#: options/presets.py +msgid "WSDC Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." +msgstr "" + +#: options/presets.py +msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." +msgstr "" + +#: options/presets.py +msgid "Tab Release Options" +msgstr "" + +#: options/presets.py +msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" +msgstr "" + +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html +msgid "Configuration" +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." +msgstr "" + +#: options/templates/preferences_index.html +msgid "The range of scores that can awarded to speeches, replies, and teams" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How teams are paired in the draw and how adjudicators are auto-allocated" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How teams and speakers are ranked in the released tabs" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How adjudicators are ranked and who can submit feedback" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How and where are motions used" +msgstr "" + +#: options/templates/preferences_index.html +msgid "When to release a public tab is made visible and what data it shows" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How ballots, feedback, and check-ins are entered, including online submission options" +msgstr "" + +#: options/templates/preferences_index.html +msgid "What information the site displays on the publicly accessible pages" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Small tweaks in what information is presented by the interface" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Settings which can affect all tournaments on the site" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Manually Set Current Round" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." +msgstr "" + +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Rounds can be weighted so that certain rounds are worth more team points." +msgstr "" + +#: options/templates/preferences_index.html +msgid "Presets" +msgstr "" + +#: options/templates/preferences_index.html +msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "Apply %(preset)s" +msgstr "" + +#: options/templates/preferences_presets_complete.html +#, python-format +msgid "Presets Applied: %(preset_title)s" +msgstr "" + +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html +msgid "Back to Configuration" +msgstr "" + +#: options/templates/preferences_presets_complete.html +msgid "Preferences that were changed" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +#, python-format +msgid "Confirm Presets: %(preset_title)s" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +msgid "Preferences that will not change" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +msgid "Preferences that will change" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +#, python-format +msgid "Apply Presets: %(preset_title)s" +msgstr "" + +#: options/templates/preferences_section_set.html +#, python-format +msgid "Configuration: %(section)s" +msgstr "" + +#: options/templates/preferences_section_set.html +#, python-format +msgid "Edit Configuration: %(section)s" +msgstr "" + +#: options/views.py +#, python-format +msgid "Tournament options (%(section)s) saved." +msgstr "" + +#: options/views.py +#, python-format +msgid "Tournament options saved according to preset %(name)s." +msgstr "" + diff --git a/tabbycat/participants/locale/kk/LC_MESSAGES/django.po b/tabbycat/participants/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..69c6c5fe87f --- /dev/null +++ b/tabbycat/participants/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,964 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-27 09:26\n" +"Last-Translator: philip_tc\n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/participants/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 942\n" + +#: participants/admin.py +#, python-format +msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" +msgstr "" + +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d speaker had their URL key removed." +msgid_plural "%(count)d speakers had their URL keys removed." +msgstr[0] "" +msgstr[1] "" + +#: participants/admin.py +msgid "Reset emoji" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d team had their emoji reset." +msgid_plural "%(count)d teams had their emojis reset." +msgstr[0] "" +msgstr[1] "" + +#: participants/admin.py +msgid "Reset code name" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d team had their code name reset." +msgid_plural "%(count)d teams had their code names reset." +msgstr[0] "" +msgstr[1] "" + +#: participants/admin.py +#, python-format +msgid "%(count)d adjudicator had their URL key removed." +msgid_plural "%(count)d adjudicators had their URL keys removed." +msgstr[0] "" +msgstr[1] "" + +#: participants/apps.py participants/views.py +msgid "Participants" +msgstr "" + +#: participants/models.py +msgid "name" +msgstr "" + +#: participants/models.py +msgid "region" +msgstr "" + +#: participants/models.py +msgid "regions" +msgstr "" + +#. Translators: Change the examples to institutions native to your language; keep consistent between strings +#: participants/models.py +msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" +msgstr "" + +#: participants/models.py +msgid "code" +msgstr "" + +#. Translators: Change the examples to institutions native to your language; keep consistent between strings +#: participants/models.py +msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" +msgstr "" + +#: participants/models.py +msgid "institution" +msgstr "қауымдастық" + +#: participants/models.py +msgid "institutions" +msgstr "" + +#: participants/models.py +msgid "tournament" +msgstr "турнир" + +#. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" +#: participants/models.py +msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" +msgstr "" + +#: participants/models.py +msgid "slug" +msgstr "" + +#. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" +#: participants/models.py +msgid "Slug for URLs, e.g., \"novice\", \"esl\"" +msgstr "" + +#: participants/models.py +msgid "sequence number" +msgstr "" + +#: participants/models.py +msgid "The order in which the categories are displayed" +msgstr "" + +#: participants/models.py +msgid "limit" +msgstr "" + +#: participants/models.py +msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" +msgstr "" + +#: participants/models.py +msgid "public" +msgstr "" + +#: participants/models.py +msgid "If checked, this category will be included in the speaker category tabs shown to the public" +msgstr "" + +#: participants/models.py +msgid "speaker category" +msgstr "" + +#: participants/models.py +msgid "speaker categories" +msgstr "" + +#: participants/models.py +msgid "email address" +msgstr "" + +#: participants/models.py +msgid "phone" +msgstr "" + +#: participants/models.py +msgid "anonymous" +msgstr "жасырын түрде" + +#: participants/models.py +msgid "Anonymous persons will have their name and team redacted on public tab releases" +msgstr "" + +#: participants/models.py +msgid "code name" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py +msgid "URL key" +msgstr "" + +#: participants/models.py +msgid "male" +msgstr "" + +#: participants/models.py +msgid "female" +msgstr "" + +#: participants/models.py +msgid "other" +msgstr "" + +#: participants/models.py +msgid "gender" +msgstr "" + +#: participants/models.py +msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" +msgstr "" + +#: participants/models.py +msgid "pronoun" +msgstr "" + +#: participants/models.py +msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" +msgstr "" + +#: participants/models.py +msgid "person" +msgstr "" + +#: participants/models.py +msgid "persons" +msgstr "" + +#: participants/models.py +msgid "full name/suffix" +msgstr "" + +#: participants/models.py +msgid "Do not include institution name (see \"uses institutional prefix\" below)" +msgstr "" + +#: participants/models.py +msgid "short name/suffix" +msgstr "" + +#: participants/models.py +msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure institutional identity on public-facing pages" +msgstr "" + +#: participants/models.py +msgid "short name" +msgstr "" + +#: participants/models.py +msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" +msgstr "" + +#: participants/models.py +msgid "long name" +msgstr "" + +#: participants/models.py +msgid "The full name of the team, including institution name. (This is autogenerated.)" +msgstr "" + +#: participants/models.py +msgid "Uses institutional prefix" +msgstr "" + +#: participants/models.py +msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" +msgstr "" + +#: participants/models.py +msgid "break categories" +msgstr "" + +#: participants/models.py +msgid "institution conflicts" +msgstr "" + +#: participants/models.py +msgid "none" +msgstr "" + +#: participants/models.py +msgid "swing" +msgstr "" + +#: participants/models.py +msgid "composite" +msgstr "" + +#: participants/models.py +msgid "bye" +msgstr "" + +#: participants/models.py +msgid "type" +msgstr "" + +#: participants/models.py +msgid "emoji" +msgstr "" + +#: participants/models.py +msgid "team" +msgstr "топ" + +#: participants/models.py +msgid "teams" +msgstr "" + +#: participants/models.py +msgid "Teams must have an institution if they are using the institutional prefix." +msgstr "" + +#: participants/models.py +msgid "Teams must have a full name if they don't use the institutional prefix." +msgstr "" + +#: participants/models.py +msgid "Teams must have a short name if they don't use the institutional prefix." +msgstr "" + +#: participants/models.py +msgid "speaker" +msgstr "" + +#: participants/models.py +msgid "speakers" +msgstr "" + +#: participants/models.py +msgid "Adjudicators not assigned to any tournament can be shared between tournaments" +msgstr "" + +#: participants/models.py +msgid "base score" +msgstr "" + +#: participants/models.py +msgid "team conflicts" +msgstr "" + +#: participants/models.py +msgid "adjudicator conflicts" +msgstr "" + +#: participants/models.py +msgid "always trainee" +msgstr "" + +#: participants/models.py +msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" +msgstr "" + +#: participants/models.py +msgid "breaking" +msgstr "" + +#: participants/models.py +msgid "independent" +msgstr "" + +#: participants/models.py +msgid "adjudication core" +msgstr "" + +#: participants/models.py +msgid "adjudicator" +msgstr "төреші" + +#: participants/models.py +msgid "adjudicators" +msgstr "" + +#: participants/tables.py +msgid "Points after this debate" +msgstr "" + +#: participants/tables.py +msgid "Wins after this debate" +msgstr "" + +#: participants/tables.py +msgid "Speaker scores
    (in speaking order)" +msgstr "" + +#: participants/tables.py +msgid "Speaks" +msgstr "" + +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html +#, python-format +msgid "About %(name)s" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +msgid "Independent adjudicator" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +msgid "Member of the adjudication core" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Institution:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Unaffiliated" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Region:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +msgid "The institutional affiliations of adjudicators are not public at this tournament." +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Institutional Conflicts:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "; " +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "None" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +msgid "Team Conflicts:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid ", " +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Adjudicator Conflicts:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Room Constraints:" +msgstr "" + +#: participants/templates/admin/participants/adjudicator/change_form.html +msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." +msgstr "" + +#. Translators: This follows the above sentence in the same paragraph. +#: participants/templates/admin/participants/delete_debateteam_warning.html +msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +msgid "Note that deleting an institution also deletes all teams from that institution." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." +msgstr "" + +#: participants/templates/admin/participants/team/change_form.html +msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." +msgstr "" + +#: participants/templates/current_round/common.html +#, python-format +msgid "The round begins at %(start_time)s" +msgstr "" + +#: participants/templates/current_round/common.html +msgid "Teams:" +msgstr "" + +#: participants/templates/current_round/common.html +msgid "Adjudicator:" +msgid_plural "Adjudicators:" +msgstr[0] "" +msgstr[1] "" + +#: participants/templates/current_round/common.html +msgctxt "chair icon" +msgid "Ⓒ" +msgstr "" + +#: participants/templates/current_round/common.html +msgctxt "trainee icon" +msgid "Ⓣ" +msgstr "" + +#: participants/templates/current_round/common.html +msgid "There are no panellists or trainees assigned to this debate." +msgstr "" + +#: participants/templates/current_round/common.html +msgid "Motions are not released to public." +msgstr "" + +#: participants/templates/current_round/common.html +msgid "Motion:" +msgstr "" + +#: participants/templates/current_round/common.html +#, python-format +msgid "Motion %(seq)s:" +msgstr "" + +#: participants/templates/current_round/common.html +msgid "The motion(s) for this round haven't yet been released." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating as the %(side)s team." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating as the %(side)s team." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s's debate is in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s's debate is in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "Your debate is in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "Your debate is in %(room)s." +msgstr "" + +#: participants/templates/edit_speaker_eligibility.html +#, python-format +msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." +msgstr "" + +#: participants/templates/feedback_progress_panel.html +msgid "Feedback Returns" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Has submitted feedback for %(adjudicator)s" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Has not submitted feedback for %(adjudicator)s" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +msgid "More feedback submissions than expected for this debate:" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Unexpected feedback submission for %(adjudicator)s" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "%(name)s doesn't have any feedback to submit." +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "In This Round (%(round)s)" +msgstr "" + +#: participants/templates/in_this_round.html +msgid "In This Round" +msgstr "" + +#: participants/templates/in_this_round.html +msgid "(Not Released to Public)" +msgstr "" + +#: participants/templates/in_this_round.html +msgid "Room TBA" +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "%(adjudicator)s is not adjudicating this round." +msgstr "" + +#: participants/templates/in_this_round.html +msgid "You are not adjudicating this round." +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." +msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." +msgstr[0] "" +msgstr[1] "" + +#: participants/templates/in_this_round.html +msgid "If this is an error, please contact a tab director immediately." +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "%(team)s does not have a debate this round." +msgstr "" + +#: participants/templates/in_this_round.html +msgid "You do not have a debate this round." +msgstr "" + +#: participants/templates/in_this_round.html +msgid "The draw for this round hasn't yet been released." +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Participants List" +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Institutions List" +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Emails have already been sent." +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Email Team Registrations" +msgstr "" + +#: participants/templates/participants_subnav.html participants/views.py +msgid "Code Names" +msgstr "" + +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html +msgid "Speaker Categories" +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Speaker Eligibility" +msgstr "" + +#: participants/templates/speaker_categories_edit.html +msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." +msgstr "" + +#: participants/templates/speaker_categories_edit.html +#, python-format +msgid "If you want to delete speaker categories, use the Edit Database area." +msgstr "" + +#: participants/templates/speaker_categories_edit.html +msgid "Save Speaker Categories" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Team name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Full team name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Short team name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Code name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "No code name assigned" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Emoji:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "No emoji assigned" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Speakers:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Eligible for break categories:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Speaker categories:" +msgstr "" + +#: participants/templatetags/team_name_for_data_entry.py +#, python-format +msgid "%(code_name)s (%(real_name)s)" +msgstr "" + +#: participants/views.py +msgid "Adjudicators" +msgstr "" + +#: participants/views.py +msgid "Speakers" +msgstr "" + +#: participants/views.py +msgid "Institutions" +msgstr "" + +#: participants/views.py +msgid "Code" +msgstr "" + +#: participants/views.py +msgid "Full name" +msgstr "" + +#: participants/views.py +msgid "Region" +msgstr "" + +#: participants/views.py +msgid "Teams" +msgstr "" + +#: participants/views.py +msgid "Number of teams" +msgstr "" + +#: participants/views.py +msgid "Adjs" +msgstr "" + +#: participants/views.py +msgid "Number of adjudicators, excluding independents" +msgstr "" + +#: participants/views.py +msgid "IAs" +msgstr "" + +#: participants/views.py +msgid "Number of independent adjudicators" +msgstr "" + +#: participants/views.py +msgid "Code name" +msgstr "" + +#: participants/views.py +msgid "Team Registration" +msgstr "" + +#: participants/views.py +msgid "Results" +msgstr "" + +#: participants/views.py +#, python-format +msgid "Record for %(name)s" +msgstr "" + +#: participants/views.py +msgid "Previous Rounds" +msgstr "" + +#: participants/views.py +#, python-format +msgid "Saved category: %(list)s" +msgid_plural "Saved categories: %(list)s" +msgstr[0] "" +msgstr[1] "" + +#: participants/views.py +msgid "No changes were made to the categories." +msgstr "" + +#: participants/views.py +msgid "Speaker Category Eligibility" +msgstr "" + diff --git a/tabbycat/printing/locale/kk/LC_MESSAGES/django.po b/tabbycat/printing/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..99e5a7813da --- /dev/null +++ b/tabbycat/printing/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: philip_tc\n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/printing/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 944\n" + +#: printing/templates/feedback_list.html +msgid "Feedback Forms" +msgstr "" + +#: printing/templates/feedback_list.html +#, python-format +msgid "Printable Feedback Forms for %(round)s" +msgstr "" + +#: printing/templates/feedback_list.html +msgid "No feedback questions have been added for either teams or adjudicators to answer." +msgstr "" + +#: printing/templates/feedback_list.html +msgid "No feedback questions have been added for teams to answer." +msgstr "" + +#: printing/templates/feedback_list.html +msgid "No feedback questions have been added for adjudicators to answer." +msgstr "" + +#: printing/templates/feedback_list.html +#, python-format +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgstr "" + +#: printing/templates/feedback_list.html +msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" +msgstr "" + +#: printing/templates/printables_list.html +msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." +msgstr "" + +#: printing/templates/randomised_url_sheets.html +#, python-format +msgid "Printable %(sheet)s URLs" +msgstr "" + +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +msgstr "" + +#: printing/templates/randomised_url_sheets.html +#, python-format +msgid "Private URL for %(name)s (%(group)s)" +msgstr "" + +#: printing/templates/randomised_url_sheets.html +msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Printable Scoresheets" +msgstr "" + +#: printing/templates/scoresheet_list.html +#, python-format +msgid "for %(round)s" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Edit Motion(s)" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "There are no scoresheets available — perhaps the round has not been drawn?" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Edit Ballot Motions" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "×" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Motion" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Changes to motions will update in the displayed ballots automatically" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." +msgstr "" + +#: printing/views.py +msgid "Overall Score" +msgstr "" + +#: printing/views.py +msgid "Unaffiliated" +msgstr "" + +#: printing/views.py +msgid "Team" +msgstr "" + diff --git a/tabbycat/privateurls/locale/kk/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..15cdc3dd83a --- /dev/null +++ b/tabbycat/privateurls/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,179 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: philip_tc\n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/privateurls/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 946\n" + +#: privateurls/apps.py +msgid "Private URL Management" +msgstr "" + +#: privateurls/templates/private_urls.html privateurls/views.py +msgid "Private URLs" +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "The private URLs for ballot and/or feedback submission from participants are given below." +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +msgstr "" + +#: privateurls/templates/private_urls.html +#, python-format +msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "There are no private URLs assigned." +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "Generate Private URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "View URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "Print Teams' URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "Print Adjudicators' URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "All reachable participants have already been sent their private URLs." +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "Email URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "This button only generates private URLs for participants who do not already have one." +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "Generate URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "All participants already have private URLs." +msgstr "" + +#: privateurls/templates/public_url_landing.html +msgid "Private URL" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "for %(name)s" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "(%(team)s)" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Revoke check-in from %(check_time)s" +msgstr "" + +#: privateurls/templates/public_url_landing.html +msgid "Check in" +msgstr "" + +#. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "You have been checked in at %(check_time)s" +msgstr "" + +#: privateurls/templates/public_url_landing.html +msgid "You are not currently checked in." +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Submit Ballot for %(round)s" +msgstr "" + +#: privateurls/templates/public_url_landing.html +msgid "Submit Feedback" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Registration (%(name)s)" +msgstr "" + +#: privateurls/views.py +msgid "no URL" +msgstr "" + +#: privateurls/views.py +msgid "URL" +msgstr "" + +#: privateurls/views.py +msgid "Speakers" +msgstr "" + +#: privateurls/views.py +msgid "Adjudicators" +msgstr "" + +#: privateurls/views.py +msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." +msgstr "" + +#: privateurls/views.py +#, python-format +msgid "A private URL was generated for %(nblank_people)d person." +msgid_plural "Private URLs were generated for all %(nblank_people)d people." +msgstr[0] "" +msgstr[1] "" + +#: privateurls/views.py +#, python-format +msgid "The already-existing private URL for %(nexisting_people)d person was left intact." +msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." +msgstr[0] "" +msgstr[1] "" + +#: privateurls/views.py +msgid "URL Key" +msgstr "" + +#: privateurls/views.py +msgid "Debates" +msgstr "" + diff --git a/tabbycat/results/locale/kk/LC_MESSAGES/django.po b/tabbycat/results/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..6ce9394edc9 --- /dev/null +++ b/tabbycat/results/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,1093 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-03-15 14:16\n" +"Last-Translator: philip_tc\n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/results/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 948\n" + +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py +#, python-format +msgid "Resaved results for %(count)d ballot submission." +msgid_plural "Resaved results for %(count)d ballot submissions." +msgstr[0] "" +msgstr[1] "" + +#: results/apps.py results/templates/public_results_index.html results/views.py +msgid "Results" +msgstr "" + +#: results/forms.py +msgid "Tournament password" +msgstr "" + +#: results/forms.py +msgid "That password isn't correct." +msgstr "" + +#: results/forms.py +msgid "Please enter a whole number." +msgstr "" + +#: results/forms.py +#, python-format +msgid "Please enter a multiple of %s." +msgstr "" + +#: results/forms.py +msgid "The ballot set can't be both discarded and confirmed." +msgstr "" + +#: results/forms.py +msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." +msgstr "" + +#: results/forms.py +msgid "---------" +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(aff_team)s affirmed, %(neg_team)s negated" +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(side)s's motion veto" +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(team)s (%(side)s)" +msgstr "" + +#: results/forms.py +msgid "Winner" +msgstr "" + +#: results/forms.py +msgid "Mark as a duplicate speech" +msgstr "" + +#: results/forms.py +#, python-format +msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(speaker)s appears to have given %(count)d substantive speech." +msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." +msgstr[0] "" +msgstr[1] "" + +#: results/forms.py +msgid "The last substantive speaker and reply speaker can't be the same." +msgstr "" + +#: results/forms.py +msgid "The reply speaker for this team did not give a substantive speech." +msgstr "" + +#: results/forms.py +msgid "The total scores for the teams are the same (i.e. a draw)." +msgstr "" + +#: results/forms.py +msgid "The declared winner does not correspond to the team with the highest score." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The total scores for the following teams are the same: %(teams)s" +msgstr "" + +#: results/forms.py +#, python-format +msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." +msgstr "" + +#: results/forms.py +msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." +msgstr "" + +#: results/forms.py +#, python-format +msgid "There must be exactly %(n)d team advancing." +msgid_plural "There must be exactly %(n)d teams advancing." +msgstr[0] "" +msgstr[1] "" + +#: results/forms.py +msgid "There must be exactly 1 team advancing." +msgstr "" + +#: results/models.py +msgid "Tab room" +msgstr "" + +#: results/models.py +msgid "Public" +msgstr "" + +#: results/models.py +msgid "timestamp" +msgstr "" + +#: results/models.py +msgid "version" +msgstr "" + +#: results/models.py +msgid "submitter type" +msgstr "" + +#: results/models.py +msgid "confirmed" +msgstr "" + +#: results/models.py +msgid "from private URL" +msgstr "" + +#: results/models.py +msgid "from participant" +msgstr "" + +#: results/models.py +msgid "submitter" +msgstr "" + +#: results/models.py +msgid "confirmer" +msgstr "" + +#: results/models.py +msgid "confirm timestamp" +msgstr "" + +#: results/models.py +msgid "IP address" +msgstr "" + +#: results/models.py +msgid "A tab room ballot must have a user associated." +msgstr "" + +#: results/models.py +msgid "debate" +msgstr "пікірсайыс" + +#: results/models.py +msgid "motion" +msgstr "" + +#: results/models.py +msgid "discarded" +msgstr "" + +#: results/models.py +msgid "single adjudicator" +msgstr "" + +#: results/models.py +msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." +msgstr "" + +#: results/models.py +msgid "ballot submission" +msgstr "" + +#: results/models.py +msgid "ballot submissions" +msgstr "" + +#: results/models.py +#, python-format +msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" +msgstr "" + +#: results/models.py +msgid "A ballot can't be both confirmed and discarded!" +msgstr "" + +#: results/models.py +msgid "debate adjudicator" +msgstr "ойын төрешісі" + +#: results/models.py +msgid "debate team" +msgstr "" + +#: results/models.py +msgid "win" +msgstr "" + +#: results/models.py +msgid "margin" +msgstr "" + +#: results/models.py +msgid "score" +msgstr "" + +#: results/models.py +msgid "team score by adjudicator" +msgstr "" + +#: results/models.py +msgid "team scores by adjudicator" +msgstr "" + +#: results/models.py +msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." +msgstr "" + +#: results/models.py +msgid "position" +msgstr "" + +#: results/models.py +msgid "speaker score by adjudicator" +msgstr "" + +#: results/models.py +msgid "speaker scores by adjudicator" +msgstr "" + +#: results/models.py +msgid "points" +msgstr "" + +#: results/models.py +msgid "votes given" +msgstr "" + +#: results/models.py +msgid "votes possible" +msgstr "" + +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py +msgid "team score" +msgstr "" + +#: results/models.py +msgid "team scores" +msgstr "" + +#: results/models.py +msgid "speaker" +msgstr "" + +#: results/models.py +msgid "ghost" +msgstr "" + +#: results/models.py +msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." +msgstr "" + +#: results/models.py +msgid "speaker score" +msgstr "" + +#: results/models.py +msgid "speaker scores" +msgstr "" + +#: results/models.py +msgid "The debate team and speaker must be from the same team." +msgstr "" + +#: results/models.py +msgid "The ballot submission and debate team must relate to the same debate." +msgstr "" + +#: results/tables.py +msgid "Whether this debate's ballot has been checked in" +msgstr "" + +#: results/tables.py +msgid "Status of this debate's ballot" +msgstr "" + +#: results/templates/admin_results.html +msgid "Display Draw" +msgstr "" + +#: results/templates/admin_results.html +msgid "Check-In Ballots" +msgstr "" + +#: results/templates/admin_results.html +msgid "Recent 'Iron-Persons'" +msgstr "" + +#: results/templates/admin_results.html +msgid "Teams who have recently missed a speaker" +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "A speaker from %(team)s gave multiple speeches in the previous round" +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "A speaker from %(team)s gave multiple speeches in the current round" +msgstr "" + +#: results/templates/admin_results.html +msgid "No known cases in the current or previous round" +msgstr "" + +#: results/templates/admin_results.html +msgid "Complete Round" +msgstr "" + +#: results/templates/admin_results.html +msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." +msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/admin_results.html +#, python-format +msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." +msgstr "" + +#: results/templates/admin_results.html +msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." +msgstr "" + +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html +msgid "Back to All Results" +msgstr "" + +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html +msgid "Create a new ballot set for this debate" +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because you entered it." +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "Confirm results" +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "Results are incorrect" +msgstr "" + +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html +msgid "Emails will be sent to adjudicators when the ballot is confirmed." +msgstr "" + +#: results/templates/assistant_results.html results/views.py +msgid "Enter Results" +msgstr "" + +#: results/templates/assistant_results.html +msgid "This page automatically updates with the new ballot entries and checkins as they occur." +msgstr "" + +#: results/templates/assistant_results.html +msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." +msgstr "" + +#: results/templates/assistant_results.html +msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." +msgstr "" + +#: results/templates/assistant_results.html +#, python-format +msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." +msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/assistant_results.html +#, python-format +msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." +msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/ballot/ballot_debate_info.html +msgid "Debate Information" +msgstr "" + +#: results/templates/ballot/ballot_debate_info.html +msgid "No speakers spoke twice (no 'iron-person' speeches)" +msgstr "" + +#: results/templates/ballot/ballot_debate_info.html +msgid "A speaker spoke twice (an 'iron-person' speech)" +msgstr "" + +#: results/templates/ballot/ballot_scoresheet.html +msgid "Result" +msgstr "" + +#: results/templates/ballot/ballot_scoresheet.html +msgid "Rank" +msgstr "" + +#: results/templates/ballot/ballot_scoresheet.html +msgid "Margin" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "There are some problems with this scoresheet. Please review and correct them." +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s (%(institution)s)" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html +msgid "Scoresheet" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Solo Chair" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Chair" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Panellist" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Trainee" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Assign sides before entering scores" +msgstr "" + +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "There is %(number)s existing ballot set for this debate." +msgid_plural "There are %(number)s existing ballot sets for this debate." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/ballot/other_ballots_list.html +msgid "This ballot set is confirmed." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "This ballot set is discarded." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "CURRENTLY VIEWING" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "MERGING" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "Version %(version)s," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "entered by %(submitter)s," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "submitted from %(adjudicator)s's private URL," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "submitted from the public form on %(ip_address)s," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "%(timestamp)s (%(timeago)s ago)," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "unknown" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "confirmed by %(confirmer)s" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "unconfirmed" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "(discarded)" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "(identical to version %(others)s)" +msgid_plural "(identical to versions %(others)s)" +msgstr[0] "" +msgstr[1] "" + +#: results/templates/ballot_entry.html +#, python-format +msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." +msgstr "" + +#: results/templates/ballot_entry_base.html +msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." +msgstr "" + +#: results/templates/ballot_entry_base.html +#, python-format +msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Scoresheet from chair %(chair)s" +msgstr "" + +#: results/templates/ballot_entry_form.html +msgid "Scoresheet, no chair set" +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Error with %(pos)s's speaker field: %(error)s" +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Error with %(pos)s's duplicate speaker field: %(error)s" +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Error with %(pos)s's score field: %(error)s" +msgstr "" + +#: results/templates/debate_postponement_form.html +msgid "Postponed" +msgstr "" + +#: results/templates/debate_postponement_form.html +msgid "Postpone" +msgstr "" + +#: results/templates/enter_results.html +msgid "Ballot Status" +msgstr "" + +#: results/templates/enter_results.html +msgid "only the confirmed ballot set will affect this debate's result" +msgstr "" + +#: results/templates/enter_results.html +msgid "Debate Status" +msgstr "" + +#: results/templates/enter_results.html +msgid "all debates must be confirmed to complete the round" +msgstr "" + +#: results/templates/enter_results.html +msgid "Save Ballot" +msgstr "" + +#: results/templates/enter_results.html +msgid "Cancel Entry" +msgstr "" + +#: results/templates/includes/public_enter_results_info.html +#, python-format +msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." +msgstr "" + +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html +#, python-format +msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." +msgstr "" + +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html +msgid "Ballot Not Available" +msgstr "" + +#: results/templates/privateurl_ballot_set_error.html +#, python-format +msgid "Back to your private landing page." +msgstr "" + +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html +msgid "Enter Ballot" +msgstr "" + +#: results/templates/public_add_ballot.html +msgid "Who are you?" +msgstr "" + +#: results/templates/public_add_ballot.html +msgid "(click your name on this list)" +msgstr "" + +#: results/templates/public_add_ballot_unreleased.html +#, python-format +msgid "The draw and/or motions for %(round)s have yet to be released." +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "Ballot for %(matchup)s" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "%(round)s @ %(room)s" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Return to landing page" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "Return to Results for %(round)s" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Motion" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "From %(name)s (%(institution)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "Total for %(name)s (%(side)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "%(name)s (%(side)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Won" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Lost" +msgstr "" + +#: results/templates/public_ballot_set_error.html +#, python-format +msgid "Back to the tournament home page." +msgstr "" + +#: results/templates/public_enter_results.html +#, python-format +msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" +msgstr "" + +#: results/templates/public_enter_results.html +msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." +msgstr "" + +#: results/templates/public_enter_results.html +#, python-format +msgid "This form has already been submitted once. Please contact a tab official after submitting your form." +msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." +msgstr[0] "" +msgstr[1] "" + +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" +msgstr[1] "" + +#: results/templates/public_enter_results.html +msgid "When submitting this form your IP address will be stored for logging purposes." +msgstr "" + +#: results/templates/public_enter_results_error.html +#, python-format +msgid "No Result to Enter (%(adjudicator)s)" +msgstr "" + +#: results/templates/public_enter_results_error.html +msgid "No Result to Enter" +msgstr "" + +#: results/templates/public_results_for_round.html +msgid "View by Team" +msgstr "" + +#: results/templates/public_results_for_round.html +msgid "View by Debate" +msgstr "" + +#: results/templates/public_results_index.html +#, python-format +msgid "Results for %(round)s" +msgstr "" + +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html +msgid "Results Not Available" +msgstr "" + +#: results/templates/public_results_not_available.html +#, python-format +msgid "The results for %(round)s aren't yet available." +msgstr "" + +#: results/templates/public_results_silent.html +#, python-format +msgid "%(round)s is a silent round." +msgstr "" + +#: results/utils.py +msgid "No Ballot" +msgstr "" + +#: results/utils.py +msgid "Debate was Postponed" +msgstr "" + +#: results/utils.py +msgid "Ballot is Unconfirmed" +msgstr "" + +#: results/utils.py +msgid "Ballot is Confirmed" +msgstr "" + +#. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" +#: results/utils.py +#, python-format +msgid "%(team)s as %(side)s" +msgstr "" + +#: results/utils.py +#, python-format +msgid "%(team)s (%(side)s) won" +msgstr "" + +#. Translators: The team here is the losing team +#: results/utils.py +#, python-format +msgid "vs %(team)s (%(side)s)" +msgstr "" + +#: results/utils.py +#, python-format +msgid "Advancing: %(advancing_list)s
    " +msgstr "" + +#: results/utils.py +#, python-format +msgid "Eliminated: %(eliminated_list)s" +msgstr "" + +#: results/utils.py +#, python-format +msgid "1st: %(first_team)s
    " +msgstr "" + +#: results/utils.py +#, python-format +msgid "2nd: %(second_team)s
    \n" +"3rd: %(third_team)s
    \n" +"4th: %(fourth_team)s" +msgstr "" + +#: results/utils.py +#, python-format +msgid "Error with result for %(debate)s" +msgstr "" + +#. Translators: Abbreviation for Prime Minister +#: results/utils.py +msgid "PM" +msgstr "" + +#. Translators: Abbreviation for Deputy Prime Minister +#: results/utils.py +msgid "DPM" +msgstr "" + +#. Translators: Abbreviation for Leader of the Opposition +#: results/utils.py +msgid "LO" +msgstr "" + +#. Translators: Abbreviation for Deputy Leader of the Opposition +#: results/utils.py +msgid "DLO" +msgstr "" + +#. Translators: Abbreviation for Member for the Government +#: results/utils.py +msgid "MG" +msgstr "" + +#. Translators: Abbreviation for Government Whip +#: results/utils.py +msgid "GW" +msgstr "" + +#. Translators: Abbreviation for Member for the Opposition +#: results/utils.py +msgid "MO" +msgstr "" + +#. Translators: Abbreviation for Opposition Whip +#: results/utils.py +msgid "OW" +msgstr "" + +#: results/utils.py +msgid "Reply" +msgstr "" + +#: results/views.py +msgid " vs " +msgstr "" + +#: results/views.py +#, python-format +msgid "%(matchup)s: %(round)s @ %(room)s" +msgstr "" + +#: results/views.py +msgid "N/A" +msgstr "" + +#: results/views.py +msgid "New Ballot Set" +msgstr "" + +#: results/views.py +#, python-format +msgid "Ballot set for %(debate)s added." +msgstr "" + +#: results/views.py +msgid " Email receipts queued to be sent." +msgstr "" + +#: results/views.py +#, python-format +msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." +msgstr "" + +#: results/views.py +#, python-format +msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." +msgstr "" + +#: results/views.py +msgid "Edit Ballot Set" +msgstr "" + +#: results/views.py +#, python-format +msgid "Ballot set for %(matchup)s discarded." +msgstr "" + +#: results/views.py +#, python-format +msgid "Ballot set for %(matchup)s confirmed." +msgstr "" + +#: results/views.py +#, python-format +msgid "Edits to ballot set for %(matchup)s saved." +msgstr "" + +#: results/views.py +#, python-format +msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." +msgstr "" + +#: results/views.py +msgid "The draw for this round hasn't been released yet." +msgstr "" + +#: results/views.py +msgid "The motions for this round haven't been released yet." +msgstr "" + +#: results/views.py +msgid "It looks like you don't have a debate this round." +msgstr "" + +#: results/views.py +msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." +msgstr "" + +#: results/views.py +msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." +msgstr "" + +#: results/views.py +msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." +msgstr "" + +#: results/views.py +msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." +msgstr "" + +#: results/views.py +#, python-format +msgid "This debate is in %s, which is a silent round." +msgstr "" + +#: results/views.py +#, python-format +msgid "This debate is in %s, the results for which aren't available yet." +msgstr "" + +#: results/views.py +#, python-format +msgid "The result for debate %s is not confirmed." +msgstr "" + +#: results/views.py +#, python-format +msgid "The debate %s does not have a confirmed ballot." +msgstr "" + +#: results/views.py +#, python-format +msgid "There is no result yet for debate %s." +msgstr "" + +#: results/views.py +#, python-format +msgid "Add result from %(adjudicator)s" +msgstr "" + +#: results/views.py +msgid "Adjudicator" +msgstr "" + +#: results/views.py +msgid "Merge Ballots" +msgstr "" + +#: results/views.py +msgid "The speaking order in the ballots is inconsistent, so could not be merged." +msgstr "" + +#: results/views.py +msgid "Duplicate speeches are marked inconsistently, so could not be merged." +msgstr "" + +#: results/views.py +#, python-format +msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." +msgstr "" + diff --git a/tabbycat/standings/locale/kk/LC_MESSAGES/django.po b/tabbycat/standings/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..cb549ed94bb --- /dev/null +++ b/tabbycat/standings/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,612 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-15 13:13\n" +"Last-Translator: philip_tc\n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/standings/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 950\n" + +#: standings/base.py +msgid "The same metric would be added twice:" +msgstr "" + +#: standings/base.py +msgid "The same ranking would be added twice:" +msgstr "" + +#: standings/base.py +#, python-format +msgid "Unrecognized metric code: \"%(code)s\"" +msgstr "" + +#: standings/diversity.py +msgid "All" +msgstr "" + +#: standings/diversity.py +msgid "Breaking" +msgstr "" + +#: standings/diversity.py +#, python-format +msgid "Not %(category)s" +msgstr "" + +#: standings/diversity.py +msgid "All Speakers" +msgstr "" + +#: standings/diversity.py +msgid "IAs" +msgstr "" + +#: standings/diversity.py +msgid "Chairs" +msgstr "" + +#: standings/diversity.py +msgid "Panellists" +msgstr "" + +#: standings/diversity.py +msgid "Trainees" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating" +msgstr "" + +#: standings/diversity.py +msgid "Median Rating" +msgstr "" + +#: standings/diversity.py +msgid "Upper Quartile Rating" +msgstr "" + +#: standings/diversity.py +msgid "Lower Quartile Rating" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Teams" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Chairs" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Panellists" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Trainees" +msgstr "" + +#: standings/diversity.py +msgid "Average Score" +msgstr "" + +#: standings/diversity.py +msgid "Median Score" +msgstr "" + +#: standings/diversity.py +msgid "Upper Quartile Score" +msgstr "" + +#: standings/diversity.py +msgid "Lower Quartile Score" +msgstr "" + +#: standings/diversity.py +msgid "Reply Speaker Average" +msgstr "" + +#: standings/diversity.py +#, python-format +msgid "Speaker %(num)d Average" +msgstr "" + +#: standings/diversity.py +msgid "Average Finals Score" +msgstr "" + +#: standings/speakers.py +msgid "total" +msgstr "" + +#: standings/speakers.py +msgid "Total" +msgstr "" + +#: standings/speakers.py +msgid "average" +msgstr "" + +#: standings/speakers.py +msgid "Avg" +msgstr "" + +#: standings/speakers.py +msgid "team points" +msgstr "" + +#: standings/speakers.py +msgid "Team" +msgstr "" + +#: standings/speakers.py +msgid "standard deviation" +msgstr "" + +#: standings/speakers.py +msgid "Stdev" +msgstr "" + +#: standings/speakers.py +msgid "number of speeches given" +msgstr "" + +#: standings/speakers.py +msgid "Num" +msgstr "" + +#: standings/speakers.py +msgid "replies given" +msgstr "" + +#: standings/speakers.py +msgid "trimmed mean (high-low drop)" +msgstr "" + +#: standings/speakers.py +msgid "Trim" +msgstr "" + +#: standings/teams.py +msgid "points" +msgstr "" + +#: standings/teams.py +msgid "Pts" +msgstr "" + +#: standings/teams.py +msgid "wins" +msgstr "" + +#: standings/teams.py standings/views.py +msgid "Wins" +msgstr "" + +#: standings/teams.py +msgid "total speaker score" +msgstr "" + +#: standings/teams.py +msgid "Spk" +msgstr "" + +#: standings/teams.py +msgid "average total speaker score" +msgstr "" + +#: standings/teams.py +msgid "ATSS" +msgstr "" + +#: standings/teams.py +msgid "speaker score standard deviation" +msgstr "" + +#: standings/teams.py +msgid "SSD" +msgstr "" + +#: standings/teams.py +msgid "sum of margins" +msgstr "" + +#: standings/teams.py +msgid "Marg" +msgstr "" + +#: standings/teams.py +msgid "average margin" +msgstr "" + +#: standings/teams.py +msgid "AWM" +msgstr "" + +#: standings/teams.py +msgid "average individual speaker score" +msgstr "" + +#: standings/teams.py +msgid "AISS" +msgstr "" + +#: standings/teams.py +msgid "draw strength by wins" +msgstr "" + +#: standings/teams.py +msgid "DS" +msgstr "" + +#: standings/teams.py +msgid "draw strength by total speaker score" +msgstr "" + +#: standings/teams.py +msgid "DSS" +msgstr "" + +#: standings/teams.py +msgid "number of pullups before this round" +msgstr "" + +#: standings/teams.py +msgid "PU" +msgstr "" + +#: standings/teams.py +msgid "number of adjudicators who voted for this team" +msgstr "" + +#: standings/teams.py +msgid "Ballots" +msgstr "" + +#: standings/teams.py +msgid "votes/ballots carried" +msgstr "" + +#: standings/teams.py +msgid "number of firsts" +msgstr "" + +#: standings/teams.py +msgid "1sts" +msgstr "" + +#: standings/teams.py +msgid "number of seconds" +msgstr "" + +#: standings/teams.py +msgid "2nds" +msgstr "" + +#: standings/teams.py +msgid "number of thirds" +msgstr "" + +#: standings/teams.py +msgid "3rds" +msgstr "" + +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py +msgid "Who-beat-whom" +msgstr "" + +#: standings/teams.py +msgid "WBW" +msgstr "" + +#: standings/teams.py +msgid "who-beat-whom" +msgstr "" + +#: standings/templates/current_standings.html +msgid "It also excludes results from silent rounds (if any) and from the current round." +msgstr "" + +#: standings/templates/current_standings.html +#, python-format +msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" +msgstr "" + +#: standings/templates/current_standings.html +#, python-format +msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" +msgstr "" + +#: standings/templates/current_standings_no_round.html +msgid "There aren't any rounds for which results are available." +msgstr "" + +#: standings/templates/reply_standings.html +msgid "Reply speakers are ranked by their average reply score." +msgstr "" + +#: standings/templates/reply_standings.html +#, python-format +msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." +msgstr "" + +#: standings/templates/reply_standings.html +msgid "All reply speakers appear in these standings, no matter how many replies they've missed." +msgstr "" + +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html +#, python-format +msgid "These settings can be changed in the Standings section of this tournament's configuration." +msgstr "" + +#: standings/templates/speaker_standings.html +#, python-format +msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." +msgstr "" + +#: standings/templates/speaker_standings.html +msgid "Speakers are ranked by their average score." +msgstr "" + +#: standings/templates/speaker_standings.html +msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." +msgstr "" + +#: standings/templates/speaker_standings.html +#, python-format +msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." +msgstr "" + +#: standings/templates/speaker_standings.html +msgid "All speakers appear in these standings, no matter how many debates they've missed." +msgstr "" + +#: standings/templates/speaker_standings.html +#, python-format +msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Diversity Overview" +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Non-cis male identifying" +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Cis-male identifying" +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Unspecified/unrecorded" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Standings" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Top Speaks" +msgstr "" + +#: standings/templates/standings_index.html +#, python-format +msgid "%(speaker)s in %(round)s" +msgstr "" + +#: standings/templates/standings_index.html +msgid "No data yet" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Bottom Speaks" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Largest Margins" +msgstr "" + +#: standings/templates/standings_index.html +#, python-format +msgid "%(team)s vs %(opp)s in %(round)s" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Closest Margins" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Top Team Scores" +msgstr "" + +#: standings/templates/standings_index.html +#, python-format +msgid "%(team)s in %(round)s" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Bottom Team Scores" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Most/Least Popular Motions" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Average Speaks" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Overview" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Teams" +msgstr "" + +#: standings/templates/standings_menu.html +msgctxt "All [Teams]" +msgid "All" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Speakers" +msgstr "" + +#: standings/templates/standings_menu.html +msgctxt "Substantive speeches" +msgid "Substantives" +msgstr "" + +#: standings/templates/standings_menu.html +msgctxt "All [Speakers]" +msgid "All" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Speakers " +msgstr "" + +#: standings/templates/standings_menu.html +#, python-format +msgid "%(category)s" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Replies" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Motions" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "By Round" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Diversity" +msgstr "" + +#: standings/templates/team_standings.html +#, python-format +msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." +msgstr "" + +#: standings/views.py +#, python-format +msgid "

    There was an error generating the standings: %(message)s

    " +msgstr "" + +#: standings/views.py +#, python-format +msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " +msgstr "" + +#: standings/views.py +msgid "

    The tab director will need to resolve this issue.

    " +msgstr "" + +#: standings/views.py +#, python-format +msgid "as of %(round)s" +msgstr "" + +#. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix +#: standings/views.py +#, python-format +msgid "%(title)s (Top %(limit)d Only)" +msgstr "" + +#: standings/views.py +msgid "The tab can't be displayed because all rounds so far in this tournament are silent." +msgstr "" + +#: standings/views.py +msgid "Speaker Standings" +msgstr "" + +#: standings/views.py +msgid "Speaker Tab" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Speaker Standings" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Speaker Tab" +msgstr "" + +#: standings/views.py +msgid "Reply Speaker Standings" +msgstr "" + +#: standings/views.py +msgid "Reply speeches aren't enabled in this tournament." +msgstr "" + +#: standings/views.py +msgid "Reply Speaker Tab" +msgstr "" + +#: standings/views.py +msgid "Team Standings" +msgstr "" + +#: standings/views.py +msgid "Team Tab" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Team Standings" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Team Tab" +msgstr "" + +#: standings/views.py +msgid "Current Team Standings" +msgstr "" + +#: standings/views.py +msgid "Points" +msgstr "" + +#: standings/views.py +msgid "Feedback Overview" +msgstr "" + +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +msgstr "" + diff --git a/tabbycat/tournaments/locale/kk/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..d9f130570d0 --- /dev/null +++ b/tabbycat/tournaments/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,1033 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-03-27 09:26\n" +"Last-Translator: philip_tc\n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/tournaments/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 952\n" + +#: tournaments/apps.py +msgid "Tournaments" +msgstr "" + +#: tournaments/forms.py +msgid "Number of preliminary rounds" +msgstr "" + +#: tournaments/forms.py +msgid "Number of teams in the open break" +msgstr "" + +#: tournaments/forms.py +msgid "Leave blank if there are no break rounds." +msgstr "" + +#: tournaments/forms.py +msgid "Did you agree with their decision?" +msgstr "" + +#: tournaments/forms.py +msgid "Agree?" +msgstr "" + +#: tournaments/forms.py +msgid "Comments" +msgstr "" + +#. Translators: This is the name given to the 'Open Break'. +#: tournaments/forms.py +msgid "Open" +msgstr "" + +#: tournaments/forms.py +msgid "Format Configuration" +msgstr "" + +#: tournaments/forms.py +msgid "Apply a standard set of settings to match a common debate format" +msgstr "" + +#: tournaments/forms.py +msgid "Public Configuration" +msgstr "" + +#: tournaments/forms.py +msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" +msgstr "" + +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +msgstr "" + +#: tournaments/forms.py +msgid "Current preliminary round" +msgstr "" + +#: tournaments/forms.py +msgid "All preliminary rounds have been completed" +msgstr "" + +#: tournaments/forms.py +#, python-format +msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" +msgstr "" + +#: tournaments/forms.py +#, python-format +msgid "All elimination rounds in %(category)s have been completed" +msgstr "" + +#: tournaments/forms.py +msgid "If the current round is a preliminary round, this field must be blank." +msgstr "" + +#: tournaments/forms.py +msgid "If all preliminary rounds have been completed, this field is required." +msgstr "" + +#: tournaments/forms.py +#, python-format +msgid "%(name)s (%(abbreviation)s)" +msgstr "" + +#: tournaments/mixins.py +#, python-format +msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." +msgstr "" + +#: tournaments/mixins.py +#, python-format +msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." +msgstr "" + +#: tournaments/mixins.py +msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." +msgstr "" + +#: tournaments/mixins.py +msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." +msgstr "" + +#: tournaments/mixins.py tournaments/templates/round_complete_check.html +#, python-format +msgid "for %(round)s" +msgstr "" + +#: tournaments/mixins.py +msgid "Return to Draw" +msgstr "" + +#: tournaments/models.py +msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." +msgstr "" + +#: tournaments/models.py +msgid "name" +msgstr "" + +#: tournaments/models.py +msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" +msgstr "" + +#: tournaments/models.py +msgid "short name" +msgstr "" + +#: tournaments/models.py +msgid "The name used in the menu, e.g. \"Australs 2016\"" +msgstr "" + +#: tournaments/models.py +msgid "sequence number" +msgstr "" + +#: tournaments/models.py +msgid "A number that determines the relative order in which tournaments are displayed on the homepage." +msgstr "" + +#: tournaments/models.py +msgid "slug" +msgstr "" + +#: tournaments/models.py +msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" +msgstr "" + +#: tournaments/models.py +msgid "active" +msgstr "" + +#: tournaments/models.py +msgid "tournament" +msgstr "турнир" + +#: tournaments/models.py +msgid "tournaments" +msgstr "" + +#: tournaments/models.py +msgid "Random" +msgstr "" + +#: tournaments/models.py +msgid "Manual" +msgstr "" + +#: tournaments/models.py +msgid "Round-robin" +msgstr "" + +#: tournaments/models.py +msgid "Power-paired" +msgstr "" + +#: tournaments/models.py +msgid "Elimination" +msgstr "" + +#: tournaments/models.py +msgid "Preliminary" +msgstr "" + +#: tournaments/models.py +msgid "None" +msgstr "" + +#: tournaments/models.py +msgid "Draft" +msgstr "" + +#: tournaments/models.py +msgid "Confirmed" +msgstr "" + +#: tournaments/models.py +msgid "Released" +msgstr "" + +#: tournaments/models.py +msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" +msgstr "" + +#: tournaments/models.py +msgid "completed" +msgstr "" + +#: tournaments/models.py +msgid "True if the round is over, which normally means all results have been entered and confirmed" +msgstr "" + +#: tournaments/models.py +msgid "e.g. \"Round 1\"" +msgstr "" + +#: tournaments/models.py +msgid "abbreviation" +msgstr "" + +#: tournaments/models.py +msgid "e.g. \"R1\"" +msgstr "" + +#: tournaments/models.py +msgid "stage" +msgstr "" + +#: tournaments/models.py +msgid "Preliminary = inrounds, elimination = outrounds" +msgstr "" + +#: tournaments/models.py +msgid "draw type" +msgstr "" + +#: tournaments/models.py +msgid "Which draw method to use" +msgstr "" + +#: tournaments/models.py +msgid "break category" +msgstr "" + +#: tournaments/models.py +msgid "If elimination round, which break category" +msgstr "" + +#: tournaments/models.py +msgid "draw status" +msgstr "" + +#: tournaments/models.py +msgid "The status of this round's draw" +msgstr "" + +#: tournaments/models.py +msgid "feedback weight" +msgstr "" + +#: tournaments/models.py +#, no-python-format +msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." +msgstr "" + +#. Translators: A silent round is a round for which results are not disclosed once the round is over. +#: tournaments/models.py +msgid "silent" +msgstr "" + +#: tournaments/models.py +msgid "If marked silent, information about this round (such as its results) will not be shown publicly." +msgstr "" + +#: tournaments/models.py +msgid "motions released" +msgstr "" + +#: tournaments/models.py +msgid "Whether motions will appear on the public website, assuming that feature is turned on" +msgstr "" + +#: tournaments/models.py +msgid "starts at" +msgstr "" + +#: tournaments/models.py +msgid "weight" +msgstr "" + +#: tournaments/models.py +msgid "A factor for the points received in the round. For example, if 2, all points are doubled." +msgstr "" + +#: tournaments/models.py +msgid "round" +msgstr "ойын" + +#: tournaments/models.py +msgid "rounds" +msgstr "" + +#: tournaments/models.py +msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." +msgstr "" + +#: tournaments/models.py +msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." +msgstr "" + +#: tournaments/models.py +msgid "Elimination rounds must have a break category." +msgstr "" + +#: tournaments/templates/assistant_tournament_index.html +msgid "Dashboard" +msgstr "" + +#: tournaments/templates/assistant_tournament_index.html +msgid "Overview" +msgstr "" + +#: tournaments/templates/assistant_tournament_index.html +#, python-format +msgid "current round: %(round)s, status: %(status)s" +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "Welcome to Tabbycat!" +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "Create Account" +msgstr "" + +#: tournaments/templates/configure_tournament.html +#, python-format +msgid "Configure Tournament %(tournament)s" +msgstr "" + +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html +msgid "Tabbycat" +msgstr "" + +#: tournaments/templates/configure_tournament.html +msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." +msgstr "" + +#: tournaments/templates/configure_tournament.html +msgid "Configure Tournament" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Create New Tournament" +msgstr "" + +#: tournaments/templates/create_tournament.html +#, python-format +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Just trying out Tabbycat?" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." +msgstr "" + +#: tournaments/templates/create_tournament.html +#, python-format +msgid "Load %(demo)s" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Create Tournament" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Cancel and go back to the site home page" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Debate Team Missing" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Click the Fix this debate button for that debate." +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Ensure that no side appears more than once in the debate." +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Save the changes." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +#, python-format +msgid "You can also see all the debates in the Debates section of the Edit Database Area." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Debate ID" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +#, python-format +msgid "Teams on %(side)s" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Link to fix this debate" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "No teams" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Multiple teams" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgctxt "button label" +msgid "Fix this debate" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "It looks like all debates are in good shape!" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Welcome to %(tournament)s" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "There is currently no public information available for this tournament." +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Team Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(category)s Team Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Speaker Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(category)s Speaker Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Replies Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Adjudicator Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Motions Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Sides" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Draw for %(round)s" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Draws for Current Rounds" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(round)s's draw has yet to be released" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "The draw for the next round has yet to be released" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Check-Ins" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Results" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Motions" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Team Standings" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(category)s Break" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Breaking Adjudicators" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Diversity" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Participants" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Institutions" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Feedback Progress" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Enter Ballot for %(round)s" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Enter Feedback" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Tournament Staff" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Confirm Round Completion" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Enter Results" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Emails have already been sent." +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Email Team Wins/Losses" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Email Team Points" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "Mark %(round)s as Completed" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "Mark %(round)s as Completed Anyway" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "Go to %(round)s" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "%(round)s has already been marked as completed!" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." +msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." +msgstr[0] "" +msgstr[1] "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "All ballots from %(round)s are confirmed. You should be good to go!" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." +msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." +msgstr[0] "" +msgstr[1] "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " +msgstr "" + +#: tournaments/templates/set_current_round.html +msgid "Set Current Round" +msgstr "" + +#: tournaments/templates/set_current_round.html +msgid "Back to Configuration" +msgstr "" + +#: tournaments/templates/set_current_round.html +#, python-format +msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." +msgstr "" + +#: tournaments/templates/set_current_round.html +#, python-format +msgid "On this page, you can set the current round of the tournament %(tournament)s." +msgstr "" + +#: tournaments/templates/set_current_round.html +#, python-format +msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgctxt "page title" +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgctxt "button" +msgid "Set weights" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Welcome!" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "There are currently no active tournaments set up on this site." +msgstr "" + +#: tournaments/templates/site_index.html +msgid "There are currently no tournaments set up on this site." +msgstr "" + +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "New Tournament" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Edit Database Area" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Send a Test Email" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Import DebateXML" +msgstr "" + +#: tournaments/templates/site_index.html +#, python-format +msgid "Get API Token / Change Password (%(user)s)" +msgstr "" + +#: tournaments/templates/site_index.html +#, python-format +msgid "Log Out (%(user)s)" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Log In as Admin" +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "Welcome to your new tournament!" +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." +msgstr "" + +#. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. +#: tournaments/templates/tournament_index.html +#, python-format +msgid "For more information, please consult our documentation on importing initial data." +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "Use the simple importer to add your initial data." +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "Mark participants as available to prepare a draw for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "Go to the draw area to allocate adjudicators for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "Go to the results area to enter ballots for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." +msgstr "" + +#: tournaments/templates/tournament_index_links.html +#, python-format +msgid "Administrator area for %(tn)s" +msgstr "" + +#: tournaments/templates/tournament_index_links.html +#, python-format +msgid "Assistant area for %(tn)s" +msgstr "" + +#: tournaments/templates/tournament_index_links.html +#, python-format +msgid "Public area for %(tn)s" +msgstr "" + +#: tournaments/utils.py +msgid "affirmative" +msgstr "" + +#: tournaments/utils.py +msgid "negative" +msgstr "" + +#: tournaments/utils.py +msgid "affirmative team" +msgstr "" + +#: tournaments/utils.py +msgid "negative team" +msgstr "" + +#: tournaments/utils.py +msgid "Aff" +msgstr "" + +#: tournaments/utils.py +msgid "Neg" +msgstr "" + +#: tournaments/utils.py +msgid "government" +msgstr "" + +#: tournaments/utils.py +msgid "opposition" +msgstr "" + +#: tournaments/utils.py +msgid "government team" +msgstr "" + +#: tournaments/utils.py +msgid "opposition team" +msgstr "" + +#: tournaments/utils.py +msgid "Gov" +msgstr "" + +#: tournaments/utils.py +msgid "Opp" +msgstr "" + +#: tournaments/utils.py +msgid "proposition" +msgstr "" + +#: tournaments/utils.py +msgid "proposition team" +msgstr "" + +#: tournaments/utils.py +msgid "Prop" +msgstr "" + +#: tournaments/utils.py +msgid "pro" +msgstr "" + +#: tournaments/utils.py +msgid "con" +msgstr "" + +#: tournaments/utils.py +msgid "pro team" +msgstr "" + +#: tournaments/utils.py +msgid "con team" +msgstr "" + +#: tournaments/utils.py +msgid "Pro" +msgstr "" + +#: tournaments/utils.py +msgid "Con" +msgstr "" + +#: tournaments/utils.py +msgid "appellant" +msgstr "" + +#: tournaments/utils.py +msgid "respondent" +msgstr "" + +#: tournaments/utils.py +msgid "appellant team" +msgstr "" + +#: tournaments/utils.py +msgid "respondent team" +msgstr "" + +#: tournaments/utils.py +msgid "App" +msgstr "" + +#: tournaments/utils.py +msgid "Res" +msgstr "" + +#: tournaments/utils.py +msgid "opening government" +msgstr "" + +#: tournaments/utils.py +msgid "opening opposition" +msgstr "" + +#: tournaments/utils.py +msgid "closing government" +msgstr "" + +#: tournaments/utils.py +msgid "closing opposition" +msgstr "" + +#: tournaments/utils.py +msgid "opening government team" +msgstr "" + +#: tournaments/utils.py +msgid "opening opposition team" +msgstr "" + +#: tournaments/utils.py +msgid "closing government team" +msgstr "" + +#: tournaments/utils.py +msgid "closing opposition team" +msgstr "" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "OG" +msgstr "" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "OO" +msgstr "" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "CG" +msgstr "" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "CO" +msgstr "" + +#: tournaments/utils.py +#, python-format +msgid "Round %(number)d" +msgstr "" + +#. Translators: This stands for "Round %(number)d". +#: tournaments/utils.py +#, python-format +msgid "R%(number)d" +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" +msgstr "" + +#: tournaments/views.py +msgid "8-team generic dataset" +msgstr "" + +#: tournaments/views.py +msgid "24-team Australs dataset" +msgstr "" + +#: tournaments/views.py +msgid "88-team BP dataset" +msgstr "" + +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." +msgstr "" + diff --git a/tabbycat/utils/locale/kk/LC_MESSAGES/django.po b/tabbycat/utils/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..df06aec45cc --- /dev/null +++ b/tabbycat/utils/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,328 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-03-27 08:04\n" +"Last-Translator: philip_tc\n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/utils/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 954\n" + +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "" + +#: utils/admin.py +msgid "Speaker" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "" + +#: utils/admin.py +msgid "Confirmed" +msgstr "" + +#: utils/admin.py +msgid "Adjudicator" +msgstr "" + +#: utils/tables.py +msgid "No Data Available" +msgstr "" + +#: utils/tables.py +msgid "Ⓒ" +msgstr "" + +#: utils/tables.py +msgid "Ⓣ" +msgstr "" + +#: utils/tables.py +msgid "chair" +msgstr "ойынның бас төрешісі" + +#: utils/tables.py +msgid "panellist" +msgstr "қосымша төреші" + +#: utils/tables.py +msgid "trainee" +msgstr "үйренуші" + +#: utils/tables.py +msgid "—" +msgstr "" + +#: utils/tables.py +msgid "Redacted" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "View %(a)s's %(d)s Record" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "View %(team)s's Record" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Code name: %(name)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Real name: %(name)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s won" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s lost" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s—no result" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s placed %(place)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s is advancing" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s was eliminated" +msgstr "" + +#: utils/tables.py +msgid "View/edit debate ballot" +msgstr "" + +#: utils/tables.py +msgid "View debate ballot" +msgstr "" + +#: utils/tables.py +#, python-format +msgid " vs %(opposition)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Won against %(team)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Lost to %(team)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "No result for debate against %(team)s" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Total speaker score: %s" +msgstr "" + +#: utils/tables.py +msgid "Teams in debate:" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "%(team)s (%(side)s)" +msgstr "" + +#: utils/tables.py +msgid "??" +msgstr "" + +#: utils/tables.py +msgid "advancing" +msgstr "" + +#: utils/tables.py +msgid "Advancing" +msgstr "" + +#: utils/tables.py +msgid "eliminated" +msgstr "" + +#: utils/tables.py +msgid "Eliminated" +msgstr "" + +#: utils/tables.py +msgid "No result for debate" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Placed %(place)s" +msgstr "" + +#: utils/tables.py +msgid "Name" +msgstr "" + +#: utils/tables.py +msgid "Institution" +msgstr "" + +#: utils/tables.py +msgid "Member of the Adjudication Core" +msgstr "" + +#: utils/tables.py +msgid "Independent Adjudicator" +msgstr "" + +#: utils/tables.py +msgid "Always Trainee" +msgstr "" + +#: utils/tables.py +msgid "in minority" +msgstr "" + +#: utils/tables.py +msgid "Debate Adjudicators" +msgstr "" + +#: utils/tables.py +msgid "Categories" +msgstr "" + +#: utils/tables.py +msgid "Category" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "This room %(predicate)s." +msgstr "" + +#: utils/tables.py +#, python-format +msgid "This room %(predicates)s, and %(last_predicate)s." +msgstr "" + +#: utils/tables.py +msgid "Room" +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Teams have met once" +msgid_plural "Teams have met %(count)d times" +msgstr[0] "" +msgstr[1] "" + +#: utils/tables.py +msgid "Teams are from the same institution" +msgstr "" + +#: utils/tables.py +msgid "Conflicts/Flags" +msgstr "" + +#: utils/tables.py +msgid "The confirmed ballot" +msgstr "" + +#: utils/tables.py +msgid "No ballot" +msgstr "" + +#: utils/tables.py +msgid "No scores" +msgstr "" + +#: utils/tables.py +msgid "View Ballot" +msgstr "" + +#: utils/tables.py +msgid "The ballot you submitted" +msgstr "" + +#: utils/tables.py +msgid "View/Edit Ballot" +msgstr "" + +#: utils/tables.py +msgid "Result" +msgstr "" + +#. Translators: "TBC" stands for "to be confirmed". +#: utils/tables.py +msgid "TBC" +msgstr "" + +#: utils/tables.py +msgid "Team iron-personed this round and the last." +msgstr "" + +#: utils/tables.py +msgid "Team iron-personed this round." +msgstr "" + +#: utils/tables.py +msgid "Team iron-personed last round." +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Team %(num)d" +msgstr "" + +#: utils/tables.py +msgid "Postpone" +msgstr "" + +#: utils/views.py +msgid "Whoops! You're not meant to type that URL into your browser." +msgstr "" + diff --git a/tabbycat/venues/locale/kk/LC_MESSAGES/django.po b/tabbycat/venues/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..cca5110d98b --- /dev/null +++ b/tabbycat/venues/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,222 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-27 09:26\n" +"Last-Translator: philip_tc\n" +"Language-Team: Kazakh\n" +"Language: kk_KZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: kk\n" +"X-Crowdin-File: /develop/tabbycat/venues/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 956\n" + +#: venues/apps.py +msgid "Rooms" +msgstr "" + +#: venues/consumers.py +msgid "Draw is already released, unrelease draw to assign rooms." +msgstr "" + +#: venues/consumers.py +msgid "Draw is not confirmed, confirm draw to assign rooms." +msgstr "" + +#: venues/consumers.py +msgid "Successfully auto-allocated rooms to debates." +msgstr "" + +#: venues/models.py +msgid "name" +msgstr "" + +#: venues/models.py +msgid "priority" +msgstr "" + +#: venues/models.py +msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" +msgstr "" + +#: venues/models.py +msgid "tournament" +msgstr "турнир" + +#: venues/models.py +msgid "URL" +msgstr "" + +#: venues/models.py +msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" +msgstr "" + +#: venues/models.py +msgid "room" +msgstr "" + +#: venues/models.py +msgid "rooms" +msgstr "" + +#: venues/models.py +msgid "Don't display in room name" +msgstr "" + +#: venues/models.py +msgid "Display as prefix" +msgstr "" + +#: venues/models.py +msgid "Display as suffix" +msgstr "" + +#: venues/models.py +msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." +msgstr "" + +#: venues/models.py +msgid "description" +msgstr "" + +#: venues/models.py +msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." +msgstr "" + +#: venues/models.py +msgid "display in room name" +msgstr "" + +#: venues/models.py +msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" +msgstr "" + +#: venues/models.py +msgid "display in public tooltip" +msgstr "" + +#: venues/models.py +msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." +msgstr "" + +#: venues/models.py +msgid "room category" +msgstr "" + +#: venues/models.py +msgid "room categories" +msgstr "" + +#: venues/models.py +msgid "category" +msgstr "" + +#: venues/models.py +msgid "subject content type" +msgstr "" + +#: venues/models.py +msgid "subject ID" +msgstr "" + +#: venues/models.py +msgid "room constraint" +msgstr "" + +#: venues/models.py +msgid "room constraints" +msgstr "" + +#: venues/templates/venue_categories_edit.html +msgid "Room Categories" +msgstr "" + +#: venues/templates/venue_categories_edit.html +msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." +msgstr "" + +#: venues/templates/venue_categories_edit.html +#, python-format +msgid "If you want to delete room categories, use the Edit Database area." +msgstr "" + +#: venues/templates/venue_categories_edit.html +msgid "Save Room Categories" +msgstr "" + +#: venues/templates/venue_constraints_edit.html +msgid "Room Constraints" +msgstr "" + +#: venues/templates/venue_constraints_edit.html +msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." +msgstr "" + +#: venues/templates/venue_constraints_edit.html +msgid "Save Room Constraints" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room constraint of %(name)s met (%(category)s)" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room does not meet any constraint of %(name)s" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" +msgstr "" + +#: venues/views.py +msgid "Edit Rooms" +msgstr "" + +#: venues/views.py +#, python-format +msgid "Saved room category: %(list)s" +msgid_plural "Saved venue categories: %(list)s" +msgstr[0] "" +msgstr[1] "" + +#: venues/views.py +msgid "No changes were made to the room categories." +msgstr "" + +#: venues/views.py +#, python-format +msgid "%s (Adjudicator)" +msgstr "" + +#: venues/views.py +#, python-format +msgid "%s (Team)" +msgstr "" + +#: venues/views.py +#, python-format +msgid "%s (Institution)" +msgstr "" + +#: venues/views.py +#, python-format +msgid "Saved %(count)d room constraint." +msgid_plural "Saved %(count)d room constraints." +msgstr[0] "" +msgstr[1] "" + From 7a0b4c03949a53bc3110ab21282b8d2a0b631d46 Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Sun, 5 Feb 2023 11:56:34 +1100 Subject: [PATCH 216/255] New translations django.po (Malay) --- .../actionlog/locale/ms/LC_MESSAGES/django.po | 156 ++-- .../locale/ms/LC_MESSAGES/django.po | 199 +++-- .../locale/ms/LC_MESSAGES/django.po | 450 +++++----- .../locale/ms/LC_MESSAGES/django.po | 164 ++-- .../breakqual/locale/ms/LC_MESSAGES/django.po | 249 +++--- tabbycat/draw/locale/ms/LC_MESSAGES/django.po | 594 ++++++------- .../importer/locale/ms/LC_MESSAGES/django.po | 223 +++-- tabbycat/locale/ms/LC_MESSAGES/django.po | 476 +++++----- .../motions/locale/ms/LC_MESSAGES/django.po | 190 ++-- .../locale/ms/LC_MESSAGES/django.po | 196 +++-- .../options/locale/ms/LC_MESSAGES/django.po | 813 +++++++++--------- .../locale/ms/LC_MESSAGES/django.po | 495 ++++++----- .../printing/locale/ms/LC_MESSAGES/django.po | 59 +- .../locale/ms/LC_MESSAGES/django.po | 85 +- .../results/locale/ms/LC_MESSAGES/django.po | 537 ++++++------ .../standings/locale/ms/LC_MESSAGES/django.po | 311 ++++--- .../locale/ms/LC_MESSAGES/django.po | 508 ++++++----- .../utils/locale/ms/LC_MESSAGES/django.po | 189 ++-- .../venues/locale/ms/LC_MESSAGES/django.po | 100 ++- 19 files changed, 2958 insertions(+), 3036 deletions(-) diff --git a/tabbycat/actionlog/locale/ms/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/ms/LC_MESSAGES/django.po index dd49ea01433..389d8054067 100644 --- a/tabbycat/actionlog/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:08\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -17,307 +17,307 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" msgstr "Log tindakan" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" msgstr "Set kertas undi terbuang" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" msgstr "Set undian didaftar masuk" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" msgstr "Set undian diwujudkan" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" msgstr "Set undian diedit" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" msgstr "Set undian disahkan" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" msgstr "Set undian dihantar daripada borang awam" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" msgstr "Maklum balas dihantar melalui borang awam" -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" msgstr "Maklum balas disimpan" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" msgstr "Skor asas hakim diedit" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" msgstr "" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" msgstr "Penetapan hakim disimpan" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" msgstr "Hakim ditetap secara auto" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" msgstr "Bilik yang diubah secara manual disimpan" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" msgstr "Bilik ditetap secara auto" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" msgstr "Kategori bilik diedit" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" msgstr "Kekangan bilik telah diubah" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" msgstr "Match-up telah dibuat" -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" msgstr "Match-up telah disahkan" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" msgstr "Match-up telah dijana semula" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" msgstr "Match-up telah disiarkan" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" msgstr "Siaran match-up ditarik balik" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" msgstr "Match-up yang diubah secara manual disimpan" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" msgstr "Status belah pasukan match-up telah disimpan" -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "" -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" msgstr "Usul ditambah/diubah" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" msgstr "Usul disiarkan" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" msgstr "Siaran usul ditarik balik" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" msgstr "Kepentingan perdebatan diberi keutamaan secara auto" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" msgstr "Kepentingan perdebatan diubah" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" msgstr "Status hakim 'break' telah diubah" -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" msgstr "Kelayakan 'break' diubah" -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" msgstr "Kategori 'break' diubah" -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" msgstr "Senarai pasukan yang 'break' telah dijana" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" msgstr "Catatan pasukan 'break' diubah dan semua 'break' pasukan dikemaskini" -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" msgstr "Catatan pasukan 'break' diubah dan 'break' pasukan ini dikemaskini" -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" msgstr "Catatan pasukan 'break' diubah" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" msgstr "Masa bermula ditetapkan" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" msgstr "Pusingan kini mara ke" -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" msgstr "Pusingan ditanda sebagai selesai" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" msgstr "Keberadaan pasukan diubah" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" msgstr "Keberadaan hakim diubah" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" msgstr "Keberadaan bilik diubah" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" msgstr "" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" msgstr "Kelayakan kategori pembahas diedit" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" msgstr "Kategori pembahas diubah" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" msgstr "Institusi telah diimport menggunakan pengimport mudah" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" msgstr "Bilik telah diimport menggunakan pengimport mudah" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" msgstr "Pasukan telah diimport menggunakan pengimport mudah" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" msgstr "Hakim telah diimport menggunakan pengimport mudah" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" msgstr "Markah hakim dikemas kini secara banyak" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" msgstr "Konflik hakim-pasukan diedit" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" msgstr "Konflik hakim-hakim diedit" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" msgstr "Konflik hakim-institusi diedit" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" msgstr "Konflik pasukan-institusi diedit" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" msgstr "Pengenal pasti untuk pendaftaran pembahas dijana" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" msgstr "Pengenal pasti untuk pendaftaran hakim dijana" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" msgstr "Pengenal pasti untuk pendaftaran bilik dijana" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" msgstr "Panel hakim tetap diwujudkan" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" msgstr "Panel hakim tetap diberi keutamaan" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" msgstr "Kepentingan panel hakim tetap diedit" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" msgstr "Berjaya menetap secara auto hakim ke panel hakim tetap" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" msgstr "Panel hakim tetap diedit" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" msgstr "Panel hakim tetap ditetap secara auto perdebatan" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" msgstr "jenis" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" msgstr "cap masa" -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "pengguna" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "alamat IP" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "pertandingan" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "pusingan" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" msgstr "jenis kandungan" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" msgstr "ID objek" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" msgstr "log tindakan" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" msgstr "entri log tindakan" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." msgstr "Setiap entri log memerlukan sekurang-kurangnya satu pengguna dan alamat IP." -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" msgstr "" diff --git a/tabbycat/adjallocation/locale/ms/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/ms/LC_MESSAGES/django.po index b086ba15867..0805669bfc0 100644 --- a/tabbycat/adjallocation/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-10-12 07:20\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -17,424 +17,423 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." msgstr "Tiada hakim yang berkelapangan. Pastikan terdapat hakim yang ditanda 'ada' untuk pusingan ini sebelum ditetap secara auto." -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." msgstr[0] "Markah %(count)s lebih besar daripada markah maksima yang dibenarkan (%(score).1f)." -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." msgstr[0] "Markah %(count)s lebih kecil daripada markah minimum yang dibenarkan (%(score).1f)." -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." msgstr "Tiada hakim yang layak untuk menjadi Yang Di-Pertua Dewan dan ahli panel. Cuba ubah seting \"Markah minimum maklum balas hakim diperlukan untuk ditetapkan sebagai Yang Di-Pertuan Agung\" ke markah yang lebih rendah daripada markah para hakim terkini, dan cuba lagi." -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" msgstr "Tiada perdebatan untuk pusingan ini. Munkin match up belum dibuat?" -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." msgstr "Terdapat %(debate_count)s perdebatan, tetapi hanya %(adj_count)s hakim yang boleh undi." -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." msgstr "Terdapat %(panel_debates)s panel hakim tetapi terdapat hanya %(panellists)s yang ada (kurang daripada %(needed)s)." -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." msgstr "Terdapat %(debates_count)s perdebatan, namun hanya %(voting_count)s hakim yang boleh undi." -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" msgstr "Penetapan hakim" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." msgstr "Match-up telah disiarkan, tarik balik siaran untuk jana semula penetapan auto." -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." msgstr "Match-up belum disahkan, sahkan match-up untuk laksanakan penjanaan auto." -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." msgstr "Tidak ada panel hakim tetap ada untuk ditetapkan." -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." msgstr "Berjaya menetap secara auto panel hakim tetap ke perdebatan." -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" msgstr[0] "Berjaya tetapkan hakim ke perdebatan secara auto. Tetapi, terdapat %(count)d amaran: " -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." msgstr "Berjaya menetap secara auto panel hakim tetap ke perdebatan." -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." msgstr "Tiada kekosongan panel untuk diisi. Cipta panel dahulu." -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" msgstr[0] "Berjaya tetapkan hakim ke panel hakim tetap secara auto. Tetapi, terdapat %(count)d amaran: " -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." msgstr "Berjaya menetap secara auto ke panel hakim tetap." -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." msgstr "Awak tiada tetapkan kateogri break sebagai 'umum', jadi kepentingan perdebatan tidak dapat dikira." -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." msgstr "Berjaya memberi perdebatan keutamaan secara auto." -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." msgstr "Awak tiada tetapkan kateogri break sebagai 'umum', jadi kepentingan panel tidak dapat dikira." -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." msgstr "Berjaya memberi panel hakim tetap keutamaan secara auto." -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." msgstr "Memandangkan ini pusingan pertama, panel hakim tetap tidak dianotasi dengan 'bracket' dan 'liveness'." -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." msgstr "Match-up pusingan sebelum tidak wujud, panel hakim tetap tidak dianotasi dengan 'bracket' dan 'liveness'." -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." msgstr "Berjaya mewujudkan panel hakim tetap untuk pusingan ini." -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" msgstr "Yang Di-Pertua Dewan" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" msgstr "ahli panel" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" msgstr "trainee" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "debat" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "hakim" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" msgstr "jenis" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" msgstr "tersedia?" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" msgstr "hakim debat" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" msgstr "hakim debat" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "pasukan" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" msgstr "konflik hakim-pasukan" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" msgstr "Konflik hakim-pasukan" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "hakim 1" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "hakim 2" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" msgstr "Konflik hakim-hakim" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" msgstr "konflik hakim-hakim" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" msgstr "institusi" -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" msgstr "konflik hakim-institusi" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" msgstr "konflik hakim-institusi" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" msgstr "konflik pasukan-hakim" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" msgstr "konflik pasukan-hakim" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "pusingan" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" msgstr "kepentingan" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" msgstr "braket minimum" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" msgstr "Anggaran braket terendah untuk hakim ini" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" msgstr "braket maximum" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" msgstr "Anggaran braket tertinggi untuk hakim ini" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" msgstr "kedudukan bilik" -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" msgstr "Bilangan panel berjujukan, tidak digunakan dalam algoritma" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" msgstr "layak break" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" msgstr "Bilangan kategori break yang masih boleh break" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" msgstr "panel hakim tetap" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" msgstr "panel hakim tetap" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" msgstr "panel" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" msgstr "panel hakim tetap" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" msgstr "panel hakim tetap" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." msgstr "Tiada panel hakim tetap yang boleh digunakan. Adakah panel hakim tetap telah ditetapkan untuk pusingan ini? Jika tidak, cuba tetapkan hakim secara auto." -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" msgstr "Panel hakim tetap" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." msgstr "" -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." msgstr "Hanya hakim yang ditanda sebagai 'ada' untuk pusingan itu boleh ditetapkan untukp pusingan itu, jadi anda perlu tetapkan keberadaan hakim terlebih dahulu." -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" msgstr "" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" msgstr "" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" msgstr "" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" msgstr "" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" msgstr "Konflik:%(adjudicator1)s & %(adjudicator2)s kerana institusi %(institution)s" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "Lelaki" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" msgstr "Perempuan" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "Lain-lain" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" msgstr "Tidak diketahui" -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" msgstr "Edit penetapan" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" msgstr "Edit panel" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" msgstr "Kembali ke Gambaran Keseluruhan Panel" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" msgstr "Konflik hakim-pasukan" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" msgstr "Simpan konflik hakim-pasukan" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." msgstr[0] "%(count)d konflik hakim-pasukan disimpan." -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." msgstr[0] "%(count)d konflik hakim-pasukan dibuang." -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." msgstr "Tiada perubahan dibuat untuk konflik hakim-pasukan." -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" msgstr "Konflik hakim-hakim" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" msgstr "Simpan konflik hakim-hakim" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." msgstr[0] "%(count)d konflik hakim-hakim disimpan." -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." msgstr[0] "%(count)d konflik hakim-hakim dibuang." -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." msgstr "Tiada perubahan dibuat untuk konflik hakim-hakim." -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" msgstr "Konflik hakim-institusi" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" msgstr "Simpan konflik hakim-institusi" -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." msgstr[0] "%(count)d konflik hakim-institusi disimpan." -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." msgstr[0] "%(count)d konflik hakim-institusi dibuang." -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." msgstr "Tiada perubahan dibuat untuk konflik hakim-institusi." -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" msgstr "Konflik pasukan-institusi" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." msgstr[0] "" -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." msgstr[0] "" -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." msgstr "" diff --git a/tabbycat/adjfeedback/locale/ms/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/ms/LC_MESSAGES/django.po index b30df001800..9ac7a3a83ce 100644 --- a/tabbycat/adjfeedback/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:54\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -17,936 +17,932 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:44 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" msgstr "" -#: adjfeedback/admin.py:73 adjfeedback/admin.py:139 +#: adjfeedback/admin.py msgid "target" msgstr "" -#: adjfeedback/admin.py:74 adjfeedback/admin.py:140 adjfeedback/models.py:236 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" msgstr "" -#: adjfeedback/admin.py:75 adjfeedback/admin.py:141 adjfeedback/models.py:238 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" msgstr "" -#: adjfeedback/admin.py:91 -#, python-format -msgid "%(timestamp)s (version %(version)s)" -msgstr "" - -#: adjfeedback/admin.py:96 +#: adjfeedback/admin.py msgid "Target" msgstr "" -#: adjfeedback/admin.py:97 adjfeedback/admin.py:162 +#: adjfeedback/admin.py msgid "Source" msgstr "" -#: adjfeedback/admin.py:98 +#: adjfeedback/admin.py msgid "Feedback timestamp and version" msgstr "" -#: adjfeedback/admin.py:180 +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgstr[0] "" -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." msgstr[0] "" -#: adjfeedback/admin.py:205 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." msgstr[0] "" -#: adjfeedback/admin.py:215 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." msgstr[0] "" -#: adjfeedback/admin.py:225 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." msgstr[0] "" -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" msgstr "" -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "chair" msgstr "Yang Di-Pertua Dewan" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "solo" msgstr "" -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "panellist" msgstr "ahli panel" -#: adjfeedback/forms.py:29 +#: adjfeedback/forms.py msgid "trainee" msgstr "trainee" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:57 +#: adjfeedback/forms.py msgid "Yes" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:59 +#: adjfeedback/forms.py msgid "No" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:74 adjfeedback/forms.py:83 +#: adjfeedback/forms.py msgid "This field is required." msgstr "" -#: adjfeedback/forms.py:164 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" msgstr "" -#: adjfeedback/forms.py:176 +#: adjfeedback/forms.py msgid "Ignored" msgstr "" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:228 adjfeedback/forms.py:291 +#: adjfeedback/forms.py msgid "Submitted - " msgstr "" #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:229 adjfeedback/forms.py:296 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" msgstr "" -#: adjfeedback/forms.py:252 adjfeedback/forms.py:326 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "" -#: adjfeedback/forms.py:269 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" msgstr "" -#: adjfeedback/forms.py:293 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "" -#: adjfeedback/forms.py:299 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" msgstr "" -#: adjfeedback/forms.py:301 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" msgstr "" -#: adjfeedback/forms.py:392 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" msgstr "" -#: adjfeedback/forms.py:397 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" msgstr "" -#: adjfeedback/forms.py:410 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." msgstr "" -#: adjfeedback/forms.py:416 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" msgstr "" -#: adjfeedback/forms.py:424 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" msgstr "" -#: adjfeedback/forms.py:439 +#: adjfeedback/forms.py msgid "There were no scores to import." msgstr "" -#: adjfeedback/models.py:13 adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator" msgstr "hakim" -#: adjfeedback/models.py:16 +#: adjfeedback/models.py msgid "round" msgstr "pusingan" -#: adjfeedback/models.py:17 adjfeedback/models.py:232 +#: adjfeedback/models.py msgid "score" msgstr "" -#: adjfeedback/models.py:18 +#: adjfeedback/models.py msgid "timestamp" msgstr "cap masa" -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score history" msgstr "" -#: adjfeedback/models.py:22 +#: adjfeedback/models.py msgid "adjudicator base score histories" msgstr "" -#: adjfeedback/models.py:30 +#: adjfeedback/models.py msgid "question" msgstr "" -#: adjfeedback/models.py:32 +#: adjfeedback/models.py msgid "feedback" msgstr "" -#: adjfeedback/models.py:45 adjfeedback/models.py:55 adjfeedback/models.py:65 -#: adjfeedback/models.py:74 +#: adjfeedback/models.py msgid "answer" msgstr "" -#: adjfeedback/models.py:48 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" msgstr "" -#: adjfeedback/models.py:49 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" msgstr "" -#: adjfeedback/models.py:58 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" msgstr "" -#: adjfeedback/models.py:59 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" msgstr "" -#: adjfeedback/models.py:68 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" msgstr "" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" msgstr "" -#: adjfeedback/models.py:77 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" msgstr "" -#: adjfeedback/models.py:78 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" msgstr "" -#: adjfeedback/models.py:86 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answer" msgstr "" -#: adjfeedback/models.py:87 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answers" msgstr "" -#: adjfeedback/models.py:106 +#: adjfeedback/models.py msgid "checkbox" msgstr "" -#: adjfeedback/models.py:107 +#: adjfeedback/models.py msgid "yes/no (dropdown)" msgstr "" -#: adjfeedback/models.py:108 +#: adjfeedback/models.py msgid "integer (textbox)" msgstr "" -#: adjfeedback/models.py:109 +#: adjfeedback/models.py msgid "integer scale" msgstr "" -#: adjfeedback/models.py:110 +#: adjfeedback/models.py msgid "float" msgstr "" -#: adjfeedback/models.py:111 adjfeedback/models.py:145 +#: adjfeedback/models.py msgid "text" msgstr "" -#: adjfeedback/models.py:112 +#: adjfeedback/models.py msgid "long text" msgstr "" -#: adjfeedback/models.py:113 +#: adjfeedback/models.py msgid "select one" msgstr "" -#: adjfeedback/models.py:114 +#: adjfeedback/models.py msgid "select multiple" msgstr "" -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "tournament" msgstr "pertandingan" -#: adjfeedback/models.py:143 +#: adjfeedback/models.py msgid "sequence number" msgstr "" -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" msgstr "" -#: adjfeedback/models.py:148 +#: adjfeedback/models.py msgid "name" msgstr "" -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" msgstr "" -#: adjfeedback/models.py:151 +#: adjfeedback/models.py msgid "reference" msgstr "" -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" msgstr "" -#: adjfeedback/models.py:155 +#: adjfeedback/models.py msgid "from adjudicator" msgstr "" -#: adjfeedback/models.py:156 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" msgstr "" -#: adjfeedback/models.py:158 +#: adjfeedback/models.py msgid "from team" msgstr "" -#: adjfeedback/models.py:159 +#: adjfeedback/models.py msgid "Teams should be asked this question" msgstr "" -#: adjfeedback/models.py:162 +#: adjfeedback/models.py msgid "answer type" msgstr "" -#: adjfeedback/models.py:164 +#: adjfeedback/models.py msgid "required" msgstr "" -#: adjfeedback/models.py:165 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" msgstr "" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "minimum value" msgstr "" -#: adjfeedback/models.py:168 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "" -#: adjfeedback/models.py:170 +#: adjfeedback/models.py msgid "maximum value" msgstr "" -#: adjfeedback/models.py:171 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "" -#: adjfeedback/models.py:176 +#: adjfeedback/models.py msgid "choices" msgstr "" -#: adjfeedback/models.py:177 +#: adjfeedback/models.py msgid "Permissible choices for select one/multiple fields (ignored for other fields)" msgstr "" -#: adjfeedback/models.py:182 +#: adjfeedback/models.py msgid "adjudicator feedback question" msgstr "" -#: adjfeedback/models.py:183 +#: adjfeedback/models.py msgid "adjudicator feedback questions" msgstr "" -#: adjfeedback/models.py:241 adjfeedback/views.py:768 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" msgstr "" -#: adjfeedback/models.py:242 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" msgstr "" -#: adjfeedback/models.py:246 +#: adjfeedback/models.py msgid "adjudicator feedback" msgstr "" -#: adjfeedback/models.py:247 +#: adjfeedback/models.py msgid "adjudicator feedbacks" msgstr "" -#: adjfeedback/models.py:307 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." msgstr "" -#: adjfeedback/models.py:310 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." msgstr "" -#: adjfeedback/models.py:312 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" msgstr "" -#: adjfeedback/models.py:314 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." msgstr "" -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" msgstr "" -#: adjfeedback/tables.py:35 +#: adjfeedback/tables.py msgid "N/A" msgstr "" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py msgid "Current weighted score" msgstr "" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." msgstr "" -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" msgstr "" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" msgstr "" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" msgstr "" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:84 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:93 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." msgstr "" -#: adjfeedback/tables.py:97 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" msgstr "" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Feedback Per Round" msgstr "" -#: adjfeedback/tables.py:107 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" msgstr "" -#: adjfeedback/tables.py:125 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" msgstr[0] "" -#: adjfeedback/tables.py:148 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" msgstr "" -#: adjfeedback/tables.py:172 +#: adjfeedback/tables.py msgid "View Missing Feedback" msgstr "" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" msgstr "" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" msgstr "" -#: adjfeedback/templates/enter_feedback.html:9 -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format msgid "Add Feedback from %(name)s" msgstr "" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" msgstr "" -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" msgstr "" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." msgstr "" -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." msgstr "" -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." msgstr "" -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" msgstr "" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" msgstr "" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" msgstr "" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" msgstr "" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" msgstr "Komen" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" msgstr "" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" msgstr "" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." msgstr "" -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." msgstr "" -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "On %(adjudicator)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" +msgid "Received as %(as_type)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" msgstr "" -#: adjfeedback/templates/feedback_card.html:88 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:93 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:103 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" msgstr "" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" msgstr "" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" msgstr "" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" msgstr "" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." msgstr "" -#: adjfeedback/templates/feedback_overview.html:18 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:22 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:30 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" msgstr[0] "" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" msgstr "" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" msgstr "" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" msgstr "" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" msgstr "" -#: adjfeedback/views.py:118 +#: adjfeedback/views.py msgid "Feedback Overview" msgstr "" -#: adjfeedback/views.py:142 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" msgstr "" -#: adjfeedback/views.py:153 adjfeedback/views.py:177 adjfeedback/views.py:192 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" msgstr[0] "" -#: adjfeedback/views.py:156 adjfeedback/views.py:182 adjfeedback/views.py:197 +#: adjfeedback/views.py msgid "Feedbacks" msgstr "" -#: adjfeedback/views.py:163 +#: adjfeedback/views.py msgid "Find Feedback" msgstr "" -#: adjfeedback/views.py:171 adjfeedback/views.py:710 +#: adjfeedback/views.py msgid "From Teams" msgstr "" -#: adjfeedback/views.py:186 adjfeedback/views.py:704 +#: adjfeedback/views.py msgid "From Adjudicators" msgstr "" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "Latest Feedback" msgstr "" -#: adjfeedback/views.py:272 +#: adjfeedback/views.py msgid "(30 most recent)" msgstr "" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "Only Comments" msgstr "" -#: adjfeedback/views.py:283 +#: adjfeedback/views.py msgid "(250 most recent)" msgstr "" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "Important Feedback" msgstr "" -#: adjfeedback/views.py:295 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" msgstr "" -#: adjfeedback/views.py:362 +#: adjfeedback/views.py msgid "A Team" msgstr "" -#: adjfeedback/views.py:367 +#: adjfeedback/views.py msgid "Team" msgstr "" -#: adjfeedback/views.py:374 adjfeedback/views.py:391 +#: adjfeedback/views.py msgid "Institution" msgstr "" -#: adjfeedback/views.py:377 +#: adjfeedback/views.py msgid "An Adjudicator" msgstr "" -#: adjfeedback/views.py:384 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "" -#: adjfeedback/views.py:511 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." msgstr "" -#: adjfeedback/views.py:541 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." msgstr "" -#: adjfeedback/views.py:625 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" msgstr "" -#: adjfeedback/views.py:648 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." msgstr "" -#: adjfeedback/views.py:675 +#: adjfeedback/views.py msgid "Feedback Progress" msgstr "" -#: adjfeedback/views.py:696 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" msgstr[0] "" -#: adjfeedback/views.py:741 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." msgstr "" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "confirmed" msgstr "" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "un-confirmed" msgstr "" -#: adjfeedback/views.py:768 +#: adjfeedback/views.py msgid "un-ignored" msgstr "" -#: adjfeedback/views.py:804 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." diff --git a/tabbycat/availability/locale/ms/LC_MESSAGES/django.po b/tabbycat/availability/locale/ms/LC_MESSAGES/django.po index 6ca9e8c681e..3e1a94f595a 100644 --- a/tabbycat/availability/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:07\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -17,292 +17,284 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" msgstr "" -#: availability/models.py:15 +#: availability/models.py msgid "content type" msgstr "jenis kandungan" -#: availability/models.py:16 +#: availability/models.py msgid "object id" msgstr "" -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "pusingan" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" msgstr "" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" msgstr "" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" msgstr "" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" msgstr "" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" msgstr "" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" msgstr "" -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" msgstr "" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" msgstr "" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." msgstr "" -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." msgstr "" -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." msgstr "" -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgstr[0] "" -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " msgstr "" -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" msgstr "" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." msgstr "" -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" msgstr "" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" msgstr "" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" msgstr "" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" msgstr "" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" msgstr "" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" msgstr "" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" msgstr "Bilik" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" msgstr "" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" msgstr "" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." msgstr "" -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." msgstr "" -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" msgstr "" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." msgstr[0] "" -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" msgstr[0] "" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." msgstr[0] "" -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" msgstr[0] "" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." msgstr[0] "" -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" msgstr "" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." msgstr[0] "" -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" msgstr[0] "" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." msgstr[0] "" -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" msgstr[0] "" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." msgstr[0] "" -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" msgstr "" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" msgstr "" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" msgstr[0] "" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" @@ -311,73 +303,73 @@ msgstr[0] "" #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" msgstr[0] "" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" msgstr[0] "" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" msgstr "" -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" msgstr "" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" msgstr "" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" msgstr "" -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" msgstr "" -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" msgstr "" -#: availability/views.py:260 +#: availability/views.py msgid "Room" msgstr "Bilik" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" msgstr "" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" msgstr "" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" msgstr "" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." msgstr "" -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." msgstr "" -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." msgstr "" -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." msgstr "" diff --git a/tabbycat/breakqual/locale/ms/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/ms/LC_MESSAGES/django.po index 782a41a4544..0ef10483ea9 100644 --- a/tabbycat/breakqual/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:10\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" "Last-Translator: \n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -17,508 +17,505 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" msgstr "" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "" +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "pertandingan" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "" -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" msgstr "" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" msgstr "" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" msgstr "" -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" msgstr "" -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" msgstr "" -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" msgstr "" -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" msgstr "" -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" msgstr "" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" msgstr "" -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" msgstr "" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" msgstr "" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" msgstr "" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" msgstr "" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" msgstr "" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" msgstr "" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" msgstr "" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" msgstr "" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" msgstr "" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "pasukan" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" msgstr "" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" msgstr "" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" msgstr "" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" msgstr "" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" msgstr "" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" msgstr "" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" msgstr "" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" msgstr "" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" msgstr "" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" msgstr "" -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" msgstr "" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." msgstr "" -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." msgstr "" -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" msgstr "" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." msgstr "" -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" msgstr "" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " msgstr "" -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" msgstr "" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" msgstr "" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " msgstr "" -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" msgstr "" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" msgstr "" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" msgstr "" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" msgstr "" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" msgstr "" -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" msgstr "" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." msgstr "" -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." msgstr "" -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." msgstr "" -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." msgstr "" -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." msgstr "" -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." msgstr "" -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" msgstr "" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" msgstr "" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" msgstr "" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" msgstr "" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." msgstr "" -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" msgstr "" -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" msgstr "" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" msgstr "" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" msgstr "" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" msgstr "" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" msgstr "" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" msgstr "" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" msgstr "" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" msgstr "" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" msgstr "" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" msgstr "" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" msgstr "" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" msgstr "" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" msgstr "" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" msgstr "" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" msgstr "" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" msgstr "" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" msgstr "" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" msgstr "" -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" msgstr "" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" msgstr "" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" msgstr "" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." msgstr "" -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." msgstr "" -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" msgstr "" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" msgstr "" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" diff --git a/tabbycat/draw/locale/ms/LC_MESSAGES/django.po b/tabbycat/draw/locale/ms/LC_MESSAGES/django.po index 051c1cabd13..7d50043e575 100644 --- a/tabbycat/draw/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -17,1106 +17,1078 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "" - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." msgstr[0] "" -#: draw/admin.py:93 +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." msgstr[0] "" -#: draw/apps.py:7 draw/views.py:452 draw/views.py:455 +#: draw/apps.py draw/views.py msgid "Draw" msgstr "" -#: draw/generator/__init__.py:14 +#: draw/generator/__init__.py msgid "Too many swaps" msgstr "" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" msgstr "" -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" msgstr "" -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "Bubble up (history)" msgstr "" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble down (history)" msgstr "" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble up (institution)" msgstr "" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble down (institution)" msgstr "" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" msgstr "" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Can't bubble up/down" msgstr "" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Pull-up team" msgstr "" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." msgstr "" -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." msgstr "" -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." msgstr "" -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." msgstr "" -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." msgstr "" -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." msgstr "" -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." msgstr "" -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." msgstr "" -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." msgstr "" -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." msgstr "" -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." msgstr "" -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." msgstr "" -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." msgstr "" -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." msgstr "" -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." msgstr "" -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" msgstr "" -#: draw/manager.py:276 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." msgstr "" -#: draw/models.py:29 draw/models.py:35 +#: draw/models.py msgid "none" msgstr "" -#: draw/models.py:30 +#: draw/models.py msgid "postponed" msgstr "" -#: draw/models.py:31 draw/models.py:36 +#: draw/models.py msgid "draft" msgstr "" -#: draw/models.py:32 draw/models.py:37 +#: draw/models.py msgid "confirmed" msgstr "" -#: draw/models.py:43 draw/models.py:375 +#: draw/models.py msgid "round" msgstr "pusingan" -#: draw/models.py:45 +#: draw/models.py msgid "room" msgstr "" -#: draw/models.py:48 +#: draw/models.py msgid "bracket" msgstr "" -#: draw/models.py:50 +#: draw/models.py msgid "room rank" msgstr "" -#: draw/models.py:56 +#: draw/models.py msgid "importance" msgstr "" -#: draw/models.py:58 +#: draw/models.py msgid "result status" msgstr "" -#: draw/models.py:60 +#: draw/models.py msgid "sides confirmed" msgstr "" -#: draw/models.py:61 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." msgstr "" -#: draw/models.py:64 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "debat" -#: draw/models.py:65 +#: draw/models.py msgid "debates" msgstr "" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:84 draw/models.py:109 +#: draw/models.py msgid " (sides not confirmed)" msgstr "" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:96 draw/models.py:113 +#: draw/models.py msgid " vs " msgstr "" -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" msgstr "" -#: draw/models.py:263 +#: draw/models.py msgid "negative" msgstr "" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" msgstr "" -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" msgstr "" -#: draw/models.py:266 +#: draw/models.py msgid "closing government" msgstr "" -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" msgstr "" -#: draw/models.py:274 draw/models.py:377 +#: draw/models.py msgid "team" msgstr "pasukan" -#: draw/models.py:276 draw/models.py:379 +#: draw/models.py msgid "side" msgstr "" -#: draw/models.py:281 +#: draw/models.py msgid "debate team" msgstr "" -#: draw/models.py:282 +#: draw/models.py msgid "debate teams" msgstr "" -#: draw/models.py:303 +#: draw/models.py #, python-format msgid "placed %(place)s" msgstr "" -#: draw/models.py:305 draw/models.py:312 +#: draw/models.py msgid "result unknown" msgstr "" -#: draw/models.py:308 +#: draw/models.py msgid "won" msgstr "" -#: draw/models.py:310 +#: draw/models.py msgid "lost" msgstr "" -#: draw/models.py:383 +#: draw/models.py msgid "team side allocation" msgstr "" -#: draw/models.py:384 +#: draw/models.py msgid "team side allocations" msgstr "" #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" msgstr "" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" msgstr "" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" msgstr "" -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" msgstr "" -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" msgstr "" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" msgstr "" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" msgstr "" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" msgstr "" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" msgstr "" -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" msgstr "" -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" msgstr "" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" msgstr "" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" msgstr "" -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" msgstr "" -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" msgstr "" -#: draw/tables.py:292 +#: draw/tables.py msgid "After" msgstr "" -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" msgstr "" -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" msgstr "" -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" msgstr "" -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" msgstr "" -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" msgstr "" -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" msgstr "" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." msgstr[0] "" -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" msgstr[0] "" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." msgstr[0] "" -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." msgstr[0] "" -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" msgstr[0] "" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." msgstr[0] "" -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" msgstr[0] "" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." msgstr[0] "" -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" msgstr[0] "" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." msgstr[0] "" -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" msgstr "" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" msgstr "" -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" msgstr "" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" msgstr "" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" msgstr "" -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" msgstr "" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" msgstr "" -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" msgstr "" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" msgstr "" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" msgstr "" -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" msgstr "" -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." msgstr[0] "" -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" msgstr "" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." msgstr "" -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." -msgstr "" - -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." -msgstr "" - -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "" +msgid_plural "Enter motions" +msgstr[0] "" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" msgstr "" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." msgstr "" -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." msgstr "" -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." msgstr "" -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" msgstr "" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." msgstr "" -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." msgstr "" -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" -#: draw/templates/draw_display_admin.html:200 +#: draw/templates/draw_display_admin.html msgid "Release Motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:201 -msgid "Release motion to public" -msgstr "" +msgid_plural "Release Motions" +msgstr[0] "" -#: draw/templates/draw_display_admin.html:202 -msgid "Unrelease motion to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." msgstr "" -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." msgstr "" -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "" - -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "" +msgid_plural "Motions have been released publicly." +msgstr[0] "" -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" msgstr "" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" msgstr "" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" msgstr "" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" msgstr "" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" msgstr "" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" msgstr "" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" msgstr "" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" msgstr "" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" msgstr "" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" msgstr "" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" msgstr "" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" msgstr "" -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" msgstr "" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" msgstr "" -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" msgstr "" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" msgstr "" -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" msgstr "" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" msgstr "" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" msgstr "" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" msgstr "" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." msgstr "" -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." msgstr "" -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." msgstr "" -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" msgstr "" -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" msgstr "" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" msgstr "Panel hakim tetap" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." msgstr[0] "" -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" msgstr "" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" msgstr "" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." msgstr[0] "" -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" msgstr "" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" msgstr "" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." msgstr "" -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." msgstr "" -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " msgstr "" -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." msgstr "" -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." msgstr "" -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." msgstr "" -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." msgstr "" -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." msgstr "" -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." msgstr "" -#: draw/views.py:68 draw/views.py:483 +#: draw/views.py msgid "No debates in this round" msgstr "" -#: draw/views.py:76 +#: draw/views.py #, python-format msgid "Draw for %(round)s" msgstr "" -#: draw/views.py:78 +#: draw/views.py msgid "Draws for Current Rounds" msgstr "" -#: draw/views.py:82 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" msgstr "" -#: draw/views.py:86 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" msgstr "" -#: draw/views.py:124 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" msgstr[0] "" -#: draw/views.py:171 +#: draw/views.py msgid "The draw for this round hasn't been released." msgstr "" -#: draw/views.py:224 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" msgstr "" -#: draw/views.py:382 +#: draw/views.py msgid "Adjudicator Assignments" msgstr "" -#: draw/views.py:404 +#: draw/views.py msgid "Position" msgstr "" -#: draw/views.py:424 +#: draw/views.py msgid "Team Pairings" msgstr "" -#: draw/views.py:447 +#: draw/views.py msgid "No Draw" msgstr "" -#: draw/views.py:449 +#: draw/views.py msgid "Draft Draw" msgstr "" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:541 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" msgstr "" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:546 +#: draw/views.py msgid "BR" msgstr "" -#: draw/views.py:571 +#: draw/views.py msgid "Draw with Details" msgstr "" -#: draw/views.py:579 +#: draw/views.py msgid "Position Balance Report" msgstr "" -#: draw/views.py:590 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" msgstr "" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:593 +#: draw/views.py msgid " (i.e., Shannon entropy)" msgstr "" -#: draw/views.py:623 +#: draw/views.py msgid "Teams with position imbalances" msgstr "" -#: draw/views.py:624 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" msgstr "" -#: draw/views.py:627 +#: draw/views.py msgid "Annotated draw" msgstr "" -#: draw/views.py:658 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" msgstr "" -#: draw/views.py:666 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " msgstr "" -#: draw/views.py:674 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " msgstr "" -#: draw/views.py:683 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " msgstr "" -#: draw/views.py:699 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "" -#: draw/views.py:726 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "" -#: draw/views.py:746 +#: draw/views.py msgid "Released the draw." msgstr "" -#: draw/views.py:761 +#: draw/views.py msgid "Unreleased the draw." msgstr "" -#: draw/views.py:774 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." msgstr "" -#: draw/views.py:793 +#: draw/views.py msgid "Side Pre-Allocations" msgstr "" -#: draw/views.py:826 +#: draw/views.py msgid "Edit Matchups" msgstr "" diff --git a/tabbycat/importer/locale/ms/LC_MESSAGES/django.po b/tabbycat/importer/locale/ms/LC_MESSAGES/django.po index 204b24e90ed..e9479789444 100644 --- a/tabbycat/importer/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:54\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -17,408 +17,397 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" msgstr "" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" msgstr "" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" msgstr "" -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." msgstr "" -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." msgstr "" -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" msgstr "" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" msgstr "" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" msgstr "" -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" msgstr "" -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" msgstr "" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" msgstr "" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" msgstr "" -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" msgstr "" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" msgstr "" -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" msgstr "" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." msgstr "" -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." msgstr "" -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." msgstr "" -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." msgstr "" -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" msgstr "" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." msgstr "" -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" msgstr "" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" -#: importer/forms.py:396 +#: importer/forms.py msgid "XML" msgstr "" -#: importer/forms.py:397 +#: importer/forms.py msgid "The Debate XML archive to parse" msgstr "" -#: importer/templates/archive_export_index.html:4 -#: importer/templates/archive_export_index.html:5 +#: importer/templates/archive_export_index.html msgid "Export Tournament Archive" msgstr "" -#: importer/templates/archive_export_index.html:9 +#: importer/templates/archive_export_index.html msgid "Tournaments can be exported in an XML format for use outside Tabbycat." msgstr "" -#: importer/templates/archive_export_index.html:17 +#: importer/templates/archive_export_index.html msgid "Export all data" msgstr "" -#: importer/templates/archive_importer.html:6 -#: importer/templates/archive_importer.html:18 +#: importer/templates/archive_importer.html msgctxt "page title" msgid "Import Tournament Archive" msgstr "" -#: importer/templates/archive_importer.html:19 +#: importer/templates/archive_importer.html msgid "This form will create a tournament with the data provided as a Debate XML format." msgstr "" -#: importer/templates/archive_importer.html:24 +#: importer/templates/archive_importer.html msgid "Import" msgstr "" -#: importer/templates/archive_importer.html:25 +#: importer/templates/archive_importer.html msgid "Go back to the site home page" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html msgctxt "page title" msgid "Add Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" msgstr "" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" msgstr "" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." msgstr "" -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" msgstr "" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" msgstr "" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" msgstr "" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" msgstr "" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" msgstr "" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" msgstr "" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:66 +#: importer/templates/simple_import_index.html msgid "Add/Edit Break Categories" msgstr "" -#: importer/templates/simple_import_index.html:70 +#: importer/templates/simple_import_index.html msgid "Add/Edit Speaker Categories" msgstr "" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" msgstr "" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" msgstr "" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" msgstr "" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" msgstr "" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" msgstr "" -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" msgstr "" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" msgstr "" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." msgstr "" -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" msgstr "" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" msgstr "" -#: importer/views.py:108 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." msgstr[0] "" -#: importer/views.py:129 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." msgstr[0] "" -#: importer/views.py:188 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." msgstr[0] "" -#: importer/views.py:209 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "" -#: importer/views.py:214 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." msgstr[0] "" -#: importer/views.py:230 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " msgstr "" -#: importer/views.py:238 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." msgstr "" -#: importer/views.py:256 +#: importer/views.py msgid "Tournament archive has been imported." msgstr "" diff --git a/tabbycat/locale/ms/LC_MESSAGES/django.po b/tabbycat/locale/ms/LC_MESSAGES/django.po index bed9ad557dc..ec9bfca053b 100644 --- a/tabbycat/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -17,939 +17,939 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" msgstr "" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:105 +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" msgstr "" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" msgstr "" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" msgstr "" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" msgstr "" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." msgstr "" -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" msgstr "" -#: checkins/models.py:37 +#: checkins/models.py msgid "" msgstr "" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" msgstr "" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" msgstr "" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" msgstr "" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "debat" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" msgstr "" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" msgstr "" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" msgstr "" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" msgstr "" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" msgstr "" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" msgstr "" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "pertandingan" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" msgstr "" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" msgstr "" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" msgstr "" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." msgstr "" -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." msgstr "" -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." msgstr "" -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" msgstr "" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" msgstr "" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" msgstr "" -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." msgstr "" -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." msgstr "" -#: checkins/views.py:30 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" msgstr "" -#: checkins/views.py:63 +#: checkins/views.py msgid "People's Check-In Statuses" msgstr "" -#: checkins/views.py:120 +#: checkins/views.py msgid "Rooms' Check-In Statuses" msgstr "" -#: checkins/views.py:169 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" msgstr "" -#: checkins/views.py:176 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" msgstr "" -#: checkins/views.py:181 templates/nav/public_nav.html:145 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "" -#: checkins/views.py:186 +#: checkins/views.py msgid "Rooms" msgstr "Bilik" -#: checkins/views.py:227 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" msgstr "" -#: checkins/views.py:234 +#: checkins/views.py msgid "Identifiers" msgstr "" -#: checkins/views.py:272 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." msgstr "" -#: checkins/views.py:280 +#: checkins/views.py msgid "You have revoked your check-in." msgstr "" -#: checkins/views.py:282 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." msgstr "" -#: checkins/views.py:286 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." msgstr "" -#: checkins/views.py:293 +#: checkins/views.py msgid "You are now checked in." msgstr "" -#: settings/core.py:67 +#: settings/core.py msgid "Arabic" msgstr "" -#: settings/core.py:68 +#: settings/core.py msgid "Bengali" msgstr "" -#: settings/core.py:69 +#: settings/core.py msgid "English" msgstr "" -#: settings/core.py:70 +#: settings/core.py msgid "Spanish" msgstr "" -#: settings/core.py:71 +#: settings/core.py msgid "French" msgstr "" -#: settings/core.py:72 +#: settings/core.py msgid "Indonesian" msgstr "" -#: settings/core.py:73 +#: settings/core.py msgid "Japanese" msgstr "" -#: settings/core.py:74 +#: settings/core.py msgid "Malay" msgstr "" -#: settings/core.py:75 +#: settings/core.py msgid "Portuguese" msgstr "" -#: settings/core.py:76 +#: settings/core.py msgid "Russian" msgstr "" -#: settings/core.py:77 +#: settings/core.py msgid "Simplified Chinese" msgstr "" -#: settings/core.py:78 +#: settings/core.py msgid "Translation" msgstr "" -#: templates/admin/delete_protected_message.html:4 +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." msgstr "" -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." msgstr "" -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." msgstr "" -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" msgstr "" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" msgstr "" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" msgstr "" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" msgstr "" -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." msgstr "" -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" msgstr "" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" msgstr "" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." msgstr "" -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgstr[0] "" -#: templates/errors/legacy_sendgrid_warning.html:11 +#: templates/errors/legacy_sendgrid_warning.html msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." msgstr "" -#: templates/errors/public_403.html:14 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." msgstr "" -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." msgstr "" -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." msgstr "" -#: templates/footer.html:24 +#: templates/footer.html #, python-format msgid "For a tournament of this size, we suggest a donation of $%(amount)s." msgstr "" -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." msgstr "" -#: templates/footer.html:31 +#: templates/footer.html msgid "Donations to Tabbycat from individuals or organisations are much appreciated." msgstr "" -#: templates/footer.html:39 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" msgstr "" -#: templates/footer.html:41 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." msgstr "" -#: templates/footer.html:50 +#: templates/footer.html msgid "Our Organisation" msgstr "" -#: templates/footer.html:52 -msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." msgstr "" -#: templates/footer.html:65 +#: templates/footer.html msgid "Language" msgstr "Bahasa" -#: templates/footer.html:72 +#: templates/footer.html msgid "GitHub" msgstr "" -#: templates/footer.html:78 +#: templates/footer.html msgid "Documentation" msgstr "" -#: templates/footer.html:84 +#: templates/footer.html msgid "Support" msgstr "" -#: templates/footer.html:90 +#: templates/footer.html msgid "Facebook" msgstr "" -#: templates/footer.html:96 +#: templates/footer.html msgid "Set Up A Copy" msgstr "" -#: templates/footer.html:110 +#: templates/footer.html msgid "Change Language" msgstr "" -#: templates/footer.html:127 +#: templates/footer.html msgid "Use this language" msgstr "" -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" msgstr "" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" msgstr "" -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" msgstr "" -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" msgstr "" -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" msgstr "" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" msgstr "" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" msgstr "" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" msgstr "" -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" msgstr "" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" msgstr "" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" msgstr "" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:175 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" msgstr "" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" msgstr "" -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" msgstr "" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" msgstr "Panel hakim tetap" -#: templates/nav/admin_nav.html:97 +#: templates/nav/admin_nav.html msgid "Export XML" msgstr "" -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:160 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" msgstr "" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" msgstr "" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" msgstr "" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" msgstr "" -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" msgstr "" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" msgstr "" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" msgstr "Komen" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" msgstr "" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" msgstr "" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" msgstr "" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" msgstr "" -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" msgstr "" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:165 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" msgstr "" -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" msgstr "" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" msgstr "" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" msgstr "" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" msgstr "" -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" msgstr "" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:155 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:170 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" msgstr "" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" msgstr "" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" msgstr "" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" msgstr "" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" msgstr "" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" msgstr "" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" msgstr "" -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:211 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" msgstr "" -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" msgstr "" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:180 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" msgstr "" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" msgstr "" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" msgstr "" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" msgstr "" -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" msgstr "" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" msgstr "" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" msgstr "" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" msgstr "" -#: templates/nav/public_nav.html:53 templates/nav/public_nav.html:62 +#: templates/nav/public_nav.html msgid "Motions Tab" msgstr "" -#: templates/nav/public_nav.html:56 +#: templates/nav/public_nav.html msgid "By round" msgstr "" -#: templates/nav/public_nav.html:57 +#: templates/nav/public_nav.html msgid "Globally" msgstr "" -#: templates/nav/public_nav.html:72 +#: templates/nav/public_nav.html msgid "Draws" msgstr "" -#: templates/nav/public_nav.html:83 +#: templates/nav/public_nav.html msgid "No Draws Available" msgstr "" -#: templates/nav/public_nav.html:91 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: templates/nav/public_nav.html:95 +#: templates/nav/public_nav.html msgid "Current Draws" msgstr "" -#: templates/nav/public_nav.html:115 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" msgstr "" -#: templates/nav/public_nav.html:133 +#: templates/nav/public_nav.html msgid "Break" msgstr "" -#: templates/nav/public_nav.html:185 +#: templates/nav/public_nav.html msgid "Feedback Progress" msgstr "" -#: templates/nav/public_nav.html:191 templates/nav/public_nav.html:197 +#: templates/nav/public_nav.html msgid "Enter Ballot" msgstr "" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" msgstr "" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" msgstr "" -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" msgstr "" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" msgstr "" -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" msgstr "" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" msgstr "" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" msgstr "" -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" msgstr "" -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." msgstr "" -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." msgstr "" -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." msgstr "" -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" msgstr "" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." msgstr "" -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" msgstr "" -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:27 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" msgstr "" -#: templates/registration/password_change_form.html:16 +#: templates/registration/password_change_form.html #, python-format msgid "API Token: %(api_token)s" msgstr "" -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgid "The API token will allow you to authorize external applications to access the site as staff." msgstr "" -#: templates/registration/password_change_form.html:28 +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." msgstr "" -#: templates/registration/password_change_form.html:33 -#: templates/registration/password_reset_confirm.html:25 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" msgstr "" -#: templates/registration/password_change_form.html:34 -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" msgstr "" -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "" -#: templates/registration/password_reset_complete.html:11 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." msgstr "" -#: templates/registration/password_reset_complete.html:14 -#: templates/registration/password_reset_done.html:15 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" msgstr "" -#: templates/registration/password_reset_confirm.html:4 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" msgstr "" -#: templates/registration/password_reset_confirm.html:16 -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html msgctxt "page title" msgid "Password Reset" msgstr "" -#: templates/registration/password_reset_confirm.html:18 +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" msgstr "" -#: templates/registration/password_reset_confirm.html:33 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." msgstr "" -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" msgid "Password reset email sent" msgstr "" -#: templates/registration/password_reset_done.html:11 +#: templates/registration/password_reset_done.html msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." msgstr "" -#: templates/registration/password_reset_done.html:12 +#: templates/registration/password_reset_done.html msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." msgstr "" -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" msgstr "" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" msgstr "" -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_form.html:27 +#: templates/registration/password_reset_form.html msgid "Enter your email address below, and we'll email you a password reset link." msgstr "" -#: templates/registration/password_reset_form.html:34 +#: templates/registration/password_reset_form.html msgid "Please enter a valid email address." msgstr "" -#: templates/registration/password_reset_form.html:39 users/forms.py:10 -#: users/forms.py:25 +#: templates/registration/password_reset_form.html users/forms.py msgid "Email address" msgstr "" -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" msgstr "" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" msgstr "" -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" msgstr "" -#: urls.py:102 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" msgstr "" -#: urls.py:105 +#: urls.py msgid "Welcome! You just logged in!" msgstr "" -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." msgstr "" -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." msgstr "" -#: users/templates/admin/auth/delete_user_warning.html:6 +#: users/templates/admin/auth/delete_user_warning.html msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." msgstr "" -#: users/templates/signup.html:4 users/templates/signup.html:5 +#: users/templates/signup.html msgid "Sign-Up" msgstr "" -#: users/templates/signup.html:16 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Administrator Account" msgstr "" -#: users/templates/signup.html:18 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Assistant Account" msgstr "" -#: users/templates/signup.html:25 +#: users/templates/signup.html msgid "Create Account" msgstr "" -#: users/views.py:54 +#: users/views.py msgid "You have successfully created a new administrator account." msgstr "" -#: users/views.py:56 +#: users/views.py msgid "You have successfully created a new assistant account." msgstr "" -#: users/views.py:84 +#: users/views.py msgid "Whoops! It looks like someone's already created the first user account. Please log in." msgstr "" -#: users/views.py:92 +#: users/views.py #, python-format msgid "Welcome! You've created an account for %s." msgstr "" diff --git a/tabbycat/motions/locale/ms/LC_MESSAGES/django.po b/tabbycat/motions/locale/ms/LC_MESSAGES/django.po index b258b9e6d4f..5f54ebda9aa 100644 --- a/tabbycat/motions/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -17,358 +17,366 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "Usul" -#: motions/models.py:9 +#: motions/models.py msgid "text" msgstr "teks" -#: motions/models.py:10 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" msgstr "Usul Penuh. Cth., \"Dewan ini percaya tomato bukan buah\"" -#: motions/models.py:12 +#: motions/models.py msgid "reference" msgstr "rujukan" -#: motions/models.py:13 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" msgstr "Nama pendek untuk usul, cth., \"Tomato\"" -#: motions/models.py:15 +#: motions/models.py msgid "info slide" msgstr "maklumat tambahan" -#: motions/models.py:16 +#: motions/models.py msgid "The information slide for this topic; if it has one" msgstr "Maklumat tambahan untuk usul ini, jika ada" -#: motions/models.py:19 +#: motions/models.py msgid "tournament" msgstr "pertandingan" -#: motions/models.py:21 +#: motions/models.py msgid "rounds" msgstr "" -#: motions/models.py:24 motions/models.py:37 motions/models.py:62 +#: motions/models.py msgid "motion" msgstr "usul" -#: motions/models.py:25 +#: motions/models.py msgid "motions" msgstr "usul" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" msgstr "pasukan" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" msgstr "pilihan" -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" msgstr "penyerahan keputusan" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" msgstr "" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" msgstr "" -#: motions/models.py:64 +#: motions/models.py msgid "round" msgstr "pusingan" -#: motions/models.py:67 +#: motions/models.py msgid "sequence number" msgstr "" -#: motions/models.py:68 +#: motions/models.py msgid "The order in which motions are displayed" msgstr "Urutan usul yang akan terpapar" -#: motions/models.py:73 +#: motions/models.py msgid "round motion" msgstr "" -#: motions/models.py:74 +#: motions/models.py msgid "round motions" msgstr "" -#: motions/statistics.py:86 +#: motions/statistics.py msgid "extremely strong evidence" msgstr "" -#: motions/statistics.py:87 +#: motions/statistics.py msgid "strong evidence" msgstr "" -#: motions/statistics.py:88 +#: motions/statistics.py msgid "moderate evidence" msgstr "" -#: motions/statistics.py:89 +#: motions/statistics.py msgid "weak evidence" msgstr "" -#: motions/statistics.py:90 +#: motions/statistics.py msgid "very weak evidence" msgstr "" -#: motions/statistics.py:91 +#: motions/statistics.py msgid "extremely weak evidence" msgstr "" -#: motions/statistics.py:114 +#: motions/statistics.py msgid "balance inconclusive" msgstr "" -#: motions/statistics.py:115 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" msgstr "" -#: motions/statistics.py:123 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" msgstr "" -#: motions/statistics.py:124 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." msgstr "" -#: motions/statistics.py:129 +#: motions/statistics.py msgid "probably balanced" msgstr "" -#: motions/statistics.py:130 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." msgstr "" -#: motions/templates/motion_global_statistics.html:22 -#: motions/templates/motion_round_statistics.html:31 -#: motions/templates/public_motions.html:32 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" msgstr[0] "" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" msgstr[0] "" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" msgstr[0] "" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" msgstr "disingkir" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." msgstr "disingkir" -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" msgstr "Kerajaan" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" msgstr "Pembangkang" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" msgstr "Markah Purata setiap pihak" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" msgstr "Pembuka" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" msgstr "Penutup" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" msgstr "Markah Purata setiap belah" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" msgstr[0] "markah purata untuk setiap kedudukan (%(ndebates)s perdebatan)" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" msgstr[0] "" -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" msgstr[0] "" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" msgstr "Tiada pasukan berdebat usul ini" -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" msgstr[0] "" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" msgstr "Tiada pasukan tolak usul ini" -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" msgstr[0] "Ubah suai Usul" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" msgstr "Tunjuk usul" -#: motions/templates/motions_edit.html:28 +#: motions/templates/motions_edit.html msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." msgstr "" -#: motions/templates/motions_edit.html:30 +#: motions/templates/motions_edit.html msgid "Reuse Motions from Last Round" msgstr "" -#: motions/templates/motions_edit.html:35 +#: motions/templates/motions_edit.html msgid "Use Existing Motions" msgstr "" -#: motions/templates/motions_edit.html:74 +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" msgstr[0] "Simpan usul" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "Maklumat tambahan" -#: motions/templates/public_motions.html:41 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." msgstr "Tiada usul wujud untuk pusingan ini." -#: motions/templates/public_motions.html:47 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." msgstr "Usul untuk pusingan ini belum lagi disiarkan." -#: motions/templates/public_motions.html:52 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." msgstr "Usul untuk pusingan ini belum lagi disiarkan." -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" msgstr[0] "Tunjukkan Maklumat Tambahan untuk %(round)s" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" msgstr[0] "Tunjukkan usul untuk %(round)s" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." msgstr "Tiada usul dimasukkan dalam Tabbycat untuk pusingan ini." -#: motions/utils.py:11 +#: motions/utils.py msgid "Not all latest ballots list the same motion, so could not be merged." msgstr "" -#: motions/utils.py:29 +#: motions/utils.py msgid "Motion vetos are inconsistent, so could not be merged." msgstr "" -#: motions/views.py:91 +#: motions/views.py msgid "The motion has been saved." msgstr "Usul telah disimpan." -#: motions/views.py:93 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." msgstr[0] "%(count)d usul telah disimpan." -#: motions/views.py:97 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." msgstr[0] "%(count)d usul telah dibuang." -#: motions/views.py:140 +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "" + +#: motions/views.py #, python-format msgid "Reused the motion from the previous round." msgid_plural "Reused the %(count)d motions from the previous round." msgstr[0] "" -#: motions/views.py:164 -msgid "Released the motion(s)." -msgstr "Usul disiarkan." +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" -#: motions/views.py:171 -msgid "Unreleased the motion(s)." -msgstr "Siaran usul ditarik balik." +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" -#: motions/views.py:195 +#: motions/views.py msgid "Round Motions" msgstr "Usul Pusingan" -#: motions/views.py:209 +#: motions/views.py msgid "Motion Statistics" msgstr "" diff --git a/tabbycat/notifications/locale/ms/LC_MESSAGES/django.po b/tabbycat/notifications/locale/ms/LC_MESSAGES/django.po index fcf97453aed..8d8df8ad710 100644 --- a/tabbycat/notifications/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -18,400 +18,398 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" msgstr "" -#: notifications/forms.py:12 +#: notifications/forms.py msgid "Recipient email address" msgstr "" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" msgstr "" -#: notifications/forms.py:17 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" msgstr "" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Subject" msgstr "" -#: notifications/forms.py:31 +#: notifications/forms.py msgid "Message" msgstr "" -#: notifications/models.py:11 notifications/models.py:26 +#: notifications/models.py msgid "email" msgstr "" -#: notifications/models.py:12 +#: notifications/models.py msgid "SMS" msgstr "" -#: notifications/models.py:21 +#: notifications/models.py msgid "recipient" msgstr "" -#: notifications/models.py:23 +#: notifications/models.py msgid "method" msgstr "" -#: notifications/models.py:28 notifications/models.py:134 +#: notifications/models.py msgid "context" msgstr "" -#: notifications/models.py:31 +#: notifications/models.py msgid "notification" msgstr "" -#: notifications/models.py:33 notifications/models.py:74 -#: notifications/models.py:130 +#: notifications/models.py msgid "timestamp" msgstr "cap masa" -#: notifications/models.py:36 +#: notifications/models.py msgid "sent message" msgstr "" -#: notifications/models.py:37 +#: notifications/models.py msgid "sent messages" msgstr "" -#: notifications/models.py:58 +#: notifications/models.py msgid "team points" msgstr "" -#: notifications/models.py:59 +#: notifications/models.py msgid "ballot confirmed" msgstr "" -#: notifications/models.py:60 +#: notifications/models.py msgid "feedback URL" msgstr "" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot URL" msgstr "" -#: notifications/models.py:62 +#: notifications/models.py msgid "landing page URL" msgstr "" -#: notifications/models.py:63 +#: notifications/models.py msgid "adjudicator draw released" msgstr "" -#: notifications/models.py:64 +#: notifications/models.py msgid "team registration" msgstr "" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator registration" msgstr "" -#: notifications/models.py:66 +#: notifications/models.py msgid "motion(s) released" msgstr "" -#: notifications/models.py:67 +#: notifications/models.py msgid "team draw released" msgstr "" -#: notifications/models.py:68 +#: notifications/models.py msgid "custom message" msgstr "" -#: notifications/models.py:72 notifications/models.py:132 +#: notifications/models.py msgid "event" msgstr "" -#: notifications/models.py:77 +#: notifications/models.py msgid "tournament" msgstr "pertandingan" -#: notifications/models.py:79 +#: notifications/models.py msgid "round" msgstr "pusingan" -#: notifications/models.py:82 +#: notifications/models.py msgid "subject template" msgstr "" -#: notifications/models.py:84 +#: notifications/models.py msgid "body template" msgstr "" -#: notifications/models.py:87 +#: notifications/models.py msgid "bulk notification" msgstr "" -#: notifications/models.py:88 +#: notifications/models.py msgid "bulk notifications" msgstr "" -#: notifications/models.py:114 +#: notifications/models.py msgid "Processed" msgstr "" -#: notifications/models.py:115 +#: notifications/models.py msgid "Dropped" msgstr "" -#: notifications/models.py:116 +#: notifications/models.py msgid "Deferred" msgstr "" -#: notifications/models.py:117 +#: notifications/models.py msgid "Delivered" msgstr "" -#: notifications/models.py:118 +#: notifications/models.py msgid "Bounced" msgstr "" -#: notifications/models.py:119 +#: notifications/models.py msgid "Opened" msgstr "" -#: notifications/models.py:120 +#: notifications/models.py msgid "Clicked" msgstr "" -#: notifications/models.py:121 +#: notifications/models.py msgid "Unsubscribed" msgstr "" -#: notifications/models.py:122 +#: notifications/models.py msgid "Marked as spam" msgstr "" -#: notifications/models.py:123 +#: notifications/models.py msgid "Unsubscribed from group" msgstr "" -#: notifications/models.py:124 +#: notifications/models.py msgid "Resubscribed to group" msgstr "" -#: notifications/models.py:128 +#: notifications/models.py msgid "email message" msgstr "" -#: notifications/models.py:137 +#: notifications/models.py msgid "email status" msgstr "" -#: notifications/models.py:138 +#: notifications/models.py msgid "email statuses" msgstr "" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." msgstr "" -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." msgstr "" -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" msgstr "" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." msgstr "" -#: notifications/templates/notifications_nav.html:5 notifications/views.py:75 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" msgstr "" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:29 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" msgstr "" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" msgstr "" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" msgstr "" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." msgstr "" -#: notifications/templates/test_email.html:20 +#: notifications/templates/test_email.html #, python-format msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." msgstr "" -#: notifications/templates/test_email.html:30 +#: notifications/templates/test_email.html msgid "Go back to the site home page" msgstr "" -#: notifications/utils.py:26 +#: notifications/utils.py msgid "the chair" msgstr "" -#: notifications/utils.py:27 +#: notifications/utils.py msgid "the only" msgstr "" -#: notifications/utils.py:28 +#: notifications/utils.py msgid "a panellist" msgstr "" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "a trainee" msgstr "" -#: notifications/utils.py:59 +#: notifications/utils.py msgid "TBA" msgstr "" -#: notifications/utils.py:88 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "" -#: notifications/utils.py:99 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:102 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Win" msgstr "" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Loss" msgstr "" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " msgstr "" -#: notifications/utils.py:183 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " msgstr "" -#: notifications/utils.py:206 notifications/utils.py:207 +#: notifications/utils.py msgid ", " msgstr "" -#: notifications/views.py:47 +#: notifications/views.py #, python-format msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" msgstr "" -#: notifications/views.py:51 +#: notifications/views.py msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." msgstr "" -#: notifications/views.py:60 +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" msgstr "" -#: notifications/views.py:65 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." msgstr "" -#: notifications/views.py:81 +#: notifications/views.py msgid "N/A" msgstr "" -#: notifications/views.py:82 +#: notifications/views.py msgid "Not known" msgstr "" -#: notifications/views.py:87 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" msgstr "" -#: notifications/views.py:133 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "" -#: notifications/views.py:152 +#: notifications/views.py msgid "Timeline" msgstr "" -#: notifications/views.py:162 notifications/views.py:260 +#: notifications/views.py msgid "Participant" msgstr "" -#: notifications/views.py:163 notifications/views.py:265 +#: notifications/views.py msgid "Email address" msgstr "" -#: notifications/views.py:164 +#: notifications/views.py msgid "Status" msgstr "" -#: notifications/views.py:165 +#: notifications/views.py msgid "Time" msgstr "" -#: notifications/views.py:204 +#: notifications/views.py msgid "Email Participants" msgstr "" -#: notifications/views.py:233 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." msgstr[0] "" -#: notifications/views.py:239 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." msgstr "" -#: notifications/views.py:250 +#: notifications/views.py msgid "Send Email" msgstr "" -#: notifications/views.py:266 +#: notifications/views.py msgid "Not Provided" msgstr "" -#: notifications/views.py:279 +#: notifications/views.py msgid "Role" msgstr "" -#: notifications/views.py:280 +#: notifications/views.py msgid "Adjudicator" msgstr "" -#: notifications/views.py:280 +#: notifications/views.py msgid "Speaker" msgstr "" -#: notifications/views.py:288 +#: notifications/views.py msgid "Speakers" msgstr "" -#: notifications/views.py:289 +#: notifications/views.py msgid "Adjudicators" msgstr "" diff --git a/tabbycat/options/locale/ms/LC_MESSAGES/django.po b/tabbycat/options/locale/ms/LC_MESSAGES/django.po index efa9ead05cb..cf98c2beebe 100644 --- a/tabbycat/options/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -18,1587 +18,1600 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" msgstr "" -#: options/models.py:13 +#: options/models.py msgid "instance" msgstr "" -#: options/models.py:18 +#: options/models.py msgid "tournament preference" msgstr "" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" msgstr "" -#: options/preferences.py:19 options/templates/preferences_index.html:53 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" msgstr "" -#: options/preferences.py:25 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:28 +#: options/preferences.py msgid "Minimum speaker score" msgstr "" -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum speaker score" msgstr "" -#: options/preferences.py:35 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:43 +#: options/preferences.py msgid "Speaker score step" msgstr "" -#: options/preferences.py:44 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:52 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" msgstr "" -#: options/preferences.py:53 +#: options/preferences.py msgid "Maximum margin" msgstr "" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" msgstr "" -#: options/preferences.py:63 +#: options/preferences.py msgid "Minimum reply score" msgstr "" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" msgstr "" -#: options/preferences.py:72 +#: options/preferences.py msgid "Maximum reply score" msgstr "" -#: options/preferences.py:80 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:81 +#: options/preferences.py msgid "Reply score step" msgstr "" -#: options/preferences.py:89 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" msgstr "" -#: options/preferences.py:90 +#: options/preferences.py msgid "Margin includes dissenters" msgstr "" -#: options/preferences.py:98 +#: options/preferences.py msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" msgstr "" -#: options/preferences.py:99 +#: options/preferences.py msgid "Team score includes ghosts" msgstr "" -#: options/preferences.py:106 options/templates/preferences_index.html:58 +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" msgstr "" -#: options/preferences.py:112 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" msgstr "" -#: options/preferences.py:113 +#: options/preferences.py msgid "Minimum adjudicator score to vote" msgstr "" -#: options/preferences.py:121 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" msgstr "" -#: options/preferences.py:122 +#: options/preferences.py msgid "Adjudicator conflict penalty" msgstr "" -#: options/preferences.py:130 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" msgstr "" -#: options/preferences.py:131 +#: options/preferences.py msgid "Adjudicator history penalty" msgstr "" -#: options/preferences.py:139 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" msgstr "" -#: options/preferences.py:140 +#: options/preferences.py msgid "Importance mismatch penalty" msgstr "" -#: options/preferences.py:148 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" msgstr "" -#: options/preferences.py:149 +#: options/preferences.py msgid "Team institution penalty" msgstr "" -#: options/preferences.py:157 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" msgstr "" -#: options/preferences.py:158 +#: options/preferences.py msgid "Team history penalty" msgstr "" -#: options/preferences.py:166 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" msgstr "" -#: options/preferences.py:167 +#: options/preferences.py msgid "Avoid same institution" msgstr "" -#: options/preferences.py:175 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" msgstr "" -#: options/preferences.py:176 +#: options/preferences.py msgid "Avoid team history" msgstr "" -#: options/preferences.py:184 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "" -#: options/preferences.py:185 +#: options/preferences.py msgid "Odd bracket resolution method" msgstr "" -#: options/preferences.py:189 +#: options/preferences.py msgid "Pull up from top" msgstr "" -#: options/preferences.py:190 +#: options/preferences.py msgid "Pull up from bottom" msgstr "" -#: options/preferences.py:191 +#: options/preferences.py msgid "Pull up from middle" msgstr "" -#: options/preferences.py:192 +#: options/preferences.py msgid "Pull up at random" msgstr "" -#: options/preferences.py:193 +#: options/preferences.py msgid "Intermediate brackets" msgstr "" -#: options/preferences.py:194 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" msgstr "" -#: options/preferences.py:195 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" msgstr "" -#: options/preferences.py:196 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" msgstr "" -#: options/preferences.py:203 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" msgstr "" -#: options/preferences.py:204 +#: options/preferences.py msgid "Side allocations method" msgstr "" -#: options/preferences.py:208 options/preferences.py:225 +#: options/preferences.py msgid "Random" msgstr "" -#: options/preferences.py:209 +#: options/preferences.py msgid "Balance" msgstr "" -#: options/preferences.py:210 +#: options/preferences.py msgid "Pre-allocated" msgstr "" -#: options/preferences.py:211 +#: options/preferences.py msgid "Manually enter from ballot" msgstr "" -#: options/preferences.py:218 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." msgstr "" -#: options/preferences.py:219 +#: options/preferences.py msgid "Pairing method" msgstr "" -#: options/preferences.py:223 +#: options/preferences.py msgid "Slide" msgstr "" -#: options/preferences.py:224 +#: options/preferences.py msgid "Fold" msgstr "" -#: options/preferences.py:226 +#: options/preferences.py msgid "Adjacent" msgstr "" -#: options/preferences.py:227 +#: options/preferences.py msgid "Fold top, adjacent rest" msgstr "" -#: options/preferences.py:234 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" msgstr "" -#: options/preferences.py:236 +#: options/preferences.py msgid "Conflict avoidance method" msgstr "" -#: options/preferences.py:240 +#: options/preferences.py msgid "Off" msgstr "" -#: options/preferences.py:241 +#: options/preferences.py msgid "One-up-one-down" msgstr "" -#: options/preferences.py:248 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "" -#: options/preferences.py:250 +#: options/preferences.py msgid "Pullup restriction" msgstr "" -#: options/preferences.py:254 +#: options/preferences.py msgid "No restriction" msgstr "" -#: options/preferences.py:255 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" msgstr "" -#: options/preferences.py:256 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" msgstr "" -#: options/preferences.py:257 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" msgstr "" -#: options/preferences.py:264 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." msgstr "" -#: options/preferences.py:265 +#: options/preferences.py msgid "BP pullup distribution" msgstr "" -#: options/preferences.py:269 +#: options/preferences.py msgid "Anywhere in bracket" msgstr "" -#: options/preferences.py:270 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" msgstr "" -#: options/preferences.py:277 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" msgstr "" -#: options/preferences.py:278 +#: options/preferences.py msgid "BP position cost" msgstr "" -#: options/preferences.py:282 +#: options/preferences.py msgid "Simple" msgstr "" -#: options/preferences.py:283 +#: options/preferences.py msgid "Rényi entropy" msgstr "" -#: options/preferences.py:284 +#: options/preferences.py msgid "Population variance" msgstr "" -#: options/preferences.py:291 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." msgstr "" -#: options/preferences.py:294 +#: options/preferences.py msgid "Rényi order (BP)" msgstr "" -#: options/preferences.py:303 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." msgstr "" -#: options/preferences.py:306 +#: options/preferences.py msgid "BP position cost exponent" msgstr "" -#: options/preferences.py:315 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." msgstr "" -#: options/preferences.py:317 +#: options/preferences.py msgid "BP assignment method" msgstr "" -#: options/preferences.py:321 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" msgstr "" -#: options/preferences.py:322 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" msgstr "" -#: options/preferences.py:329 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" msgstr "" -#: options/preferences.py:330 +#: options/preferences.py msgid "Skip adjudicator check-ins" msgstr "" -#: options/preferences.py:338 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:339 +#: options/preferences.py msgid "No panellist adjudicators" msgstr "" -#: options/preferences.py:347 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:348 +#: options/preferences.py msgid "No trainee adjudicators" msgstr "" -#: options/preferences.py:355 options/templates/preferences_index.html:73 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" msgstr "" -#: options/preferences.py:361 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:362 +#: options/preferences.py msgid "Minimum adjudicator score" msgstr "" -#: options/preferences.py:370 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:371 +#: options/preferences.py msgid "Maximum adjudicator score" msgstr "" -#: options/preferences.py:379 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" msgstr "" -#: options/preferences.py:380 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" msgstr "" -#: options/preferences.py:384 +#: options/preferences.py msgid "Chairs on panellists and trainees" msgstr "" -#: options/preferences.py:385 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" msgstr "" -#: options/preferences.py:386 +#: options/preferences.py msgid "Panellists and trainees on chairs, vice-versa" msgstr "" -#: options/preferences.py:387 +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" msgstr "" -#: options/preferences.py:394 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "" -#: options/preferences.py:395 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" msgstr "" -#: options/preferences.py:399 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" msgstr "" -#: options/preferences.py:400 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" msgstr "" -#: options/preferences.py:407 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" msgstr "" -#: options/preferences.py:408 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" msgstr "" -#: options/preferences.py:416 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" msgstr "" -#: options/preferences.py:417 +#: options/preferences.py msgid "Show unaccredited" msgstr "" -#: options/preferences.py:425 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" msgstr "" -#: options/preferences.py:426 +#: options/preferences.py msgid "Feedback introduction/explanation" msgstr "" -#: options/preferences.py:435 options/templates/preferences_index.html:63 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" msgstr "" -#: options/preferences.py:441 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" msgstr "" -#: options/preferences.py:442 +#: options/preferences.py msgid "Teams in debate" msgstr "" -#: options/preferences.py:446 +#: options/preferences.py msgid "Two-team format" msgstr "" -#: options/preferences.py:447 +#: options/preferences.py msgid "British Parliamentary (four teams)" msgstr "" -#: options/preferences.py:454 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:455 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" msgstr "" -#: options/preferences.py:459 options/preferences.py:472 +#: options/preferences.py msgid "One ballot per voting adjudicator" msgstr "" -#: options/preferences.py:460 options/preferences.py:473 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" msgstr "" -#: options/preferences.py:467 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:468 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" msgstr "" -#: options/preferences.py:480 +#: options/preferences.py msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." msgstr "" -#: options/preferences.py:481 +#: options/preferences.py msgid "Winner Declaration in ballot(s)" msgstr "" -#: options/preferences.py:485 +#: options/preferences.py msgid "Do not require separate winner selection" msgstr "" -#: options/preferences.py:486 +#: options/preferences.py msgid "Require separate winner selection as a check on correct scores" msgstr "" -#: options/preferences.py:487 +#: options/preferences.py msgid "Require winner selection to break tied-point debates" msgstr "" -#: options/preferences.py:488 +#: options/preferences.py msgid "Require winner selection, overriding scores" msgstr "" -#: options/preferences.py:495 +#: options/preferences.py msgid "When ballots should ask for speaker scores." msgstr "" -#: options/preferences.py:496 +#: options/preferences.py msgid "Require speaker scores" msgstr "" -#: options/preferences.py:500 +#: options/preferences.py msgid "Always require speaker scores" msgstr "" -#: options/preferences.py:501 +#: options/preferences.py msgid "Only require speaker scores in preliminary rounds" msgstr "" -#: options/preferences.py:502 +#: options/preferences.py msgid "Never require speaker scores" msgstr "" -#: options/preferences.py:509 +#: options/preferences.py msgid "How many substantive speakers on a team" msgstr "" -#: options/preferences.py:510 +#: options/preferences.py msgid "Substantive speakers" msgstr "" -#: options/preferences.py:518 +#: options/preferences.py msgid "What to call the teams" msgstr "" -#: options/preferences.py:519 +#: options/preferences.py msgid "Side names" msgstr "" -#: options/preferences.py:528 +#: options/preferences.py msgid "Whether this style features scored reply speeches" msgstr "" -#: options/preferences.py:529 +#: options/preferences.py msgid "Reply scores" msgstr "" -#: options/preferences.py:537 +#: options/preferences.py msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" msgstr "" -#: options/preferences.py:538 +#: options/preferences.py msgid "Require reply speaker to have given a substantive speech" msgstr "" -#: options/preferences.py:545 options/templates/preferences_index.html:68 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "" -#: options/preferences.py:551 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" msgstr "" -#: options/preferences.py:552 +#: options/preferences.py msgid "Speeches missable for standings eligibility" msgstr "" -#: options/preferences.py:560 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" msgstr "" -#: options/preferences.py:561 +#: options/preferences.py msgid "Replies missable for standings eligibility" msgstr "" -#: options/preferences.py:569 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" msgstr "" -#: options/preferences.py:570 +#: options/preferences.py msgid "Team standings precedence" msgstr "" -#: options/preferences.py:586 options/preferences.py:621 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" msgstr "" -#: options/preferences.py:592 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" msgstr "" -#: options/preferences.py:593 +#: options/preferences.py msgid "Team standings extra metrics" msgstr "" -#: options/preferences.py:604 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" msgstr "" -#: options/preferences.py:605 +#: options/preferences.py msgid "Speaker standings precedence" msgstr "" -#: options/preferences.py:627 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" msgstr "" -#: options/preferences.py:628 +#: options/preferences.py msgid "Speaker standings extra metrics" msgstr "" -#: options/preferences.py:638 options/templates/preferences_index.html:89 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" msgstr "" -#: options/preferences.py:644 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:645 +#: options/preferences.py msgid "Release team tab to public" msgstr "" -#: options/preferences.py:653 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." msgstr "" -#: options/preferences.py:654 +#: options/preferences.py msgid "Top teams cutoff" msgstr "" -#: options/preferences.py:662 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:663 +#: options/preferences.py msgid "Release speaker tab to public" msgstr "" -#: options/preferences.py:671 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." msgstr "" -#: options/preferences.py:672 +#: options/preferences.py msgid "Top speakers cutoff" msgstr "" -#: options/preferences.py:680 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:681 +#: options/preferences.py msgid "Release replies tab to public" msgstr "" -#: options/preferences.py:689 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." msgstr "" -#: options/preferences.py:690 +#: options/preferences.py msgid "Top replies cutoff" msgstr "" -#: options/preferences.py:716 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." msgstr "" -#: options/preferences.py:719 +#: options/preferences.py msgid "Release motions tab to public" msgstr "" -#: options/preferences.py:727 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" msgstr "" -#: options/preferences.py:728 +#: options/preferences.py msgid "Release adjudicator tab to public" msgstr "" -#: options/preferences.py:736 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" msgstr "" -#: options/preferences.py:737 +#: options/preferences.py msgid "Adjudicator tab displays" msgstr "" -#: options/preferences.py:741 +#: options/preferences.py msgid "Only shows base score" msgstr "" -#: options/preferences.py:742 +#: options/preferences.py msgid "Only shows final score" msgstr "" -#: options/preferences.py:743 +#: options/preferences.py msgid "Shows base, final, and per-round scores" msgstr "" -#: options/preferences.py:750 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." msgstr "" -#: options/preferences.py:751 +#: options/preferences.py msgid "Release ballots to public" msgstr "" -#: options/preferences.py:759 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" msgstr "" -#: options/preferences.py:760 +#: options/preferences.py msgid "Release all round results to public" msgstr "" -#: options/preferences.py:768 +#: options/preferences.py msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." msgstr "" -#: options/preferences.py:769 +#: options/preferences.py msgid "Release ballots through private URLs" msgstr "" -#: options/preferences.py:776 options/templates/preferences_index.html:94 +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" msgstr "" -#: options/preferences.py:782 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" msgstr "" -#: options/preferences.py:783 +#: options/preferences.py msgid "Ballot submissions from adjudicators" msgstr "" -#: options/preferences.py:787 options/preferences.py:801 +#: options/preferences.py msgid "Disabled (tab staff only)" msgstr "" -#: options/preferences.py:788 options/preferences.py:802 +#: options/preferences.py msgid "Use private URLs" msgstr "" -#: options/preferences.py:789 options/preferences.py:803 +#: options/preferences.py msgid "Use publicly accessible form" msgstr "" -#: options/preferences.py:796 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" msgstr "" -#: options/preferences.py:797 +#: options/preferences.py msgid "Feedback submissions from participants" msgstr "" -#: options/preferences.py:810 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" msgstr "" -#: options/preferences.py:811 +#: options/preferences.py msgid "Require password for submission" msgstr "" -#: options/preferences.py:819 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" msgstr "" -#: options/preferences.py:820 +#: options/preferences.py msgid "Password for public submission" msgstr "" -#: options/preferences.py:828 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" msgstr "" -#: options/preferences.py:829 +#: options/preferences.py msgid "Bypass double checking" msgstr "" -#: options/preferences.py:837 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." msgstr "" -#: options/preferences.py:838 +#: options/preferences.py msgid "Enforce blind confirmations" msgstr "" -#: options/preferences.py:846 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." msgstr "" -#: options/preferences.py:849 +#: options/preferences.py msgid "Assistant user access" msgstr "" -#: options/preferences.py:854 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" msgstr "" -#: options/preferences.py:855 +#: options/preferences.py msgid "Just results entry and draw display" msgstr "" -#: options/preferences.py:856 +#: options/preferences.py msgid "Only results entry" msgstr "" -#: options/preferences.py:862 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." msgstr "" -#: options/preferences.py:863 +#: options/preferences.py msgid "Participant self-checkin" msgstr "" -#: options/preferences.py:871 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" msgstr "" -#: options/preferences.py:874 +#: options/preferences.py msgid "Check-In Window (People)" msgstr "" -#: options/preferences.py:880 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" msgstr "" -#: options/preferences.py:883 +#: options/preferences.py msgid "Check-In Window (Rooms)" msgstr "" -#: options/preferences.py:889 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" msgstr "" -#: options/preferences.py:890 +#: options/preferences.py msgid "Ballot Digit Checks" msgstr "" -#: options/preferences.py:898 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:899 +#: options/preferences.py msgid "Score return location" msgstr "" -#: options/preferences.py:907 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:908 +#: options/preferences.py msgid "Feedback return location" msgstr "" -#: options/preferences.py:916 +#: options/preferences.py msgid "Lets debates have their status as postponed, as to not block draw generation." msgstr "" -#: options/preferences.py:917 +#: options/preferences.py msgid "Enable postponements" msgstr "" -#: options/preferences.py:925 +#: options/preferences.py msgid "Have each voting adjudicator submit a separate ballot." msgstr "" -#: options/preferences.py:926 +#: options/preferences.py msgid "Individual voting ballots" msgstr "" -#: options/preferences.py:933 options/templates/preferences_index.html:99 +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" msgstr "" -#: options/preferences.py:939 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" msgstr "" -#: options/preferences.py:940 +#: options/preferences.py msgid "Enable public view of participants list" msgstr "" -#: options/preferences.py:948 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" msgstr "" -#: options/preferences.py:949 +#: options/preferences.py msgid "Enable public view of institutions list" msgstr "" -#: options/preferences.py:957 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" msgstr "" -#: options/preferences.py:958 +#: options/preferences.py msgid "Enable public view of diversity info" msgstr "" -#: options/preferences.py:966 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." msgstr "" -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of the checkin statuses" msgstr "" -#: options/preferences.py:977 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" msgstr "" -#: options/preferences.py:978 +#: options/preferences.py msgid "Show break categories on participants page" msgstr "" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" msgstr "" -#: options/preferences.py:987 +#: options/preferences.py msgid "Show pre-allocated sides to public" msgstr "" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing released draws" msgstr "" -#: options/preferences.py:996 +#: options/preferences.py msgid "Enable public view of draw" msgstr "" -#: options/preferences.py:1000 +#: options/preferences.py msgid "Disabled" msgstr "" -#: options/preferences.py:1001 +#: options/preferences.py msgid "Show a single page for the current round's draw" msgstr "" -#: options/preferences.py:1002 +#: options/preferences.py msgid "Show individual pages for all released draws" msgstr "" -#: options/preferences.py:1009 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" msgstr "" -#: options/preferences.py:1010 +#: options/preferences.py msgid "Enable public view of results" msgstr "" -#: options/preferences.py:1018 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" msgstr "" -#: options/preferences.py:1019 +#: options/preferences.py msgid "Enable public view of motions" msgstr "" -#: options/preferences.py:1027 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" msgstr "" -#: options/preferences.py:1028 +#: options/preferences.py msgid "Enable public view of team standings" msgstr "" -#: options/preferences.py:1036 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" msgstr "" -#: options/preferences.py:1037 +#: options/preferences.py msgid "Enable public record pages" msgstr "" -#: options/preferences.py:1045 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1046 +#: options/preferences.py msgid "Release team breaks to public" msgstr "" -#: options/preferences.py:1054 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1055 +#: options/preferences.py msgid "Release adjudicators break to public" msgstr "" -#: options/preferences.py:1063 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" msgstr "" -#: options/preferences.py:1064 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" msgstr "" -#: options/preferences.py:1072 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." msgstr "" -#: options/preferences.py:1073 +#: options/preferences.py msgid "Tournament staff" msgstr "" -#: options/preferences.py:1083 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" msgstr "" -#: options/preferences.py:1084 +#: options/preferences.py msgid "Welcome message" msgstr "" -#: options/preferences.py:1093 options/templates/preferences_index.html:104 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" msgstr "" -#: options/preferences.py:1099 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" msgstr "" -#: options/preferences.py:1100 +#: options/preferences.py msgid "Show splitting adjudicators" msgstr "" -#: options/preferences.py:1108 +#: options/preferences.py msgid "Whether and how to use code names for teams" msgstr "" -#: options/preferences.py:1109 +#: options/preferences.py msgid "Team code names" msgstr "" -#: options/preferences.py:1114 +#: options/preferences.py msgid "Do not use code names" msgstr "" -#: options/preferences.py:1115 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" msgstr "" -#: options/preferences.py:1116 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" msgstr "" -#: options/preferences.py:1118 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" msgstr "" -#: options/preferences.py:1120 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" msgstr "" -#: options/preferences.py:1126 +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" msgstr "" -#: options/preferences.py:1127 +#: options/preferences.py msgid "Show emoji" msgstr "" -#: options/preferences.py:1135 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" msgstr "" -#: options/preferences.py:1136 +#: options/preferences.py msgid "Show team institutions" msgstr "" -#: options/preferences.py:1144 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" msgstr "" -#: options/preferences.py:1145 +#: options/preferences.py msgid "Show adjudicator institutions" msgstr "" -#: options/preferences.py:1153 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" msgstr "" -#: options/preferences.py:1154 +#: options/preferences.py msgid "Show speakers in draw" msgstr "" -#: options/preferences.py:1161 options/templates/preferences_index.html:109 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" msgstr "" -#: options/preferences.py:1167 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Reply-to name" msgstr "" -#: options/preferences.py:1176 +#: options/preferences.py msgid "The email address for handling replies" msgstr "" -#: options/preferences.py:1177 +#: options/preferences.py msgid "Reply-to address" msgstr "" -#: options/preferences.py:1185 +#: options/preferences.py msgid "A secret key to accept email status events" msgstr "" -#: options/preferences.py:1186 +#: options/preferences.py msgid "Email status secret key" msgstr "" -#: options/preferences.py:1196 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "" -#: options/preferences.py:1197 +#: options/preferences.py msgid "Ballot receipts" msgstr "" -#: options/preferences.py:1205 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "" -#: options/preferences.py:1207 +#: options/preferences.py msgid "Ballot receipt subject line" msgstr "" -#: options/preferences.py:1215 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "" -#: options/preferences.py:1216 +#: options/preferences.py msgid "Ballot receipt message" msgstr "" -#: options/preferences.py:1232 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1233 +#: options/preferences.py msgid "Team points subject line" msgstr "" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team points message" msgstr "" -#: options/preferences.py:1250 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1251 +#: options/preferences.py msgid "Adjudicator draw subject line" msgstr "" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1259 +#: options/preferences.py msgid "Adjudicator draw message" msgstr "" -#: options/preferences.py:1268 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." msgstr "" -#: options/preferences.py:1269 +#: options/preferences.py msgid "Team draw subject line" msgstr "" -#: options/preferences.py:1276 options/preferences.py:1294 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1277 options/preferences.py:1295 +#: options/preferences.py msgid "Private URL notification message" msgstr "" -#: options/preferences.py:1286 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1287 +#: options/preferences.py msgid "Private URL notification subject line" msgstr "" -#: options/preferences.py:1308 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1309 +#: options/preferences.py msgid "Motion release notification subject line" msgstr "" -#: options/preferences.py:1316 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1317 +#: options/preferences.py msgid "Motion release notification message" msgstr "" -#: options/preferences.py:1325 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1326 +#: options/preferences.py msgid "Team registration notification subject line" msgstr "" -#: options/preferences.py:1333 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1334 +#: options/preferences.py msgid "Team registration notification message" msgstr "" -#: options/preferences.py:1343 options/templates/preferences_index.html:78 +#: options/preferences.py options/templates/preferences_index.html msgid "Motions" msgstr "" -#: options/preferences.py:1349 +#: options/preferences.py msgid "If checked, ballots require a motion to be entered" msgstr "" -#: options/preferences.py:1350 +#: options/preferences.py msgid "Enable motions" msgstr "" -#: options/preferences.py:1358 +#: options/preferences.py msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" msgstr "" -#: options/preferences.py:1359 +#: options/preferences.py msgid "Ballot Hide Motions" msgstr "" -#: options/preferences.py:1367 +#: options/preferences.py msgid "Enables the motion veto field on ballots, to track veto statistics" msgstr "" -#: options/preferences.py:1368 +#: options/preferences.py msgid "Motion vetoes" msgstr "" -#: options/preferences.py:1376 +#: options/preferences.py msgid "If showing results to public, show which motions were selected in the record" msgstr "" -#: options/preferences.py:1377 +#: options/preferences.py msgid "Show motions in results" msgstr "" -#: options/preferences.py:1385 +#: options/preferences.py msgid "Order in which are listed by round in the public view" msgstr "" -#: options/preferences.py:1386 +#: options/preferences.py msgid "Order to display motions" msgstr "" -#: options/preferences.py:1390 +#: options/preferences.py msgid "Earliest round first" msgstr "" -#: options/preferences.py:1391 +#: options/preferences.py msgid "Latest round first" msgstr "" -#: options/preferences.py:1398 +#: options/preferences.py msgid "Whether motions can be reused from one round to another." msgstr "" -#: options/preferences.py:1399 +#: options/preferences.py msgid "Allow motion reuse" msgstr "" -#: options/preferences.py:1406 options/templates/preferences_index.html:114 +#: options/preferences.py options/templates/preferences_index.html msgid "Global Settings" msgstr "" -#: options/preferences.py:1412 +#: options/preferences.py msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." msgstr "" -#: options/preferences.py:1413 +#: options/preferences.py msgid "Enable API access" msgstr "" -#: options/preferences.py:1421 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1422 +#: options/preferences.py msgid "Assistant account creation key" msgstr "" -#: options/preferences.py:1431 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1433 +#: options/preferences.py msgid "Administrator account creation key" msgstr "" -#: options/presets.py:32 options/presets.py:324 +#: options/presets.py msgid "Public Information Options" msgstr "" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" msgstr "" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" msgstr "" -#: options/presets.py:74 +#: options/presets.py msgid "Australs Rules" msgstr "" -#: options/presets.py:75 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:114 +#: options/presets.py msgid "British Parliamentary Rules" msgstr "" -#: options/presets.py:115 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." msgstr "" -#: options/presets.py:157 +#: options/presets.py msgid "Canadian Parliamentary Rules" msgstr "" -#: options/presets.py:159 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." msgstr "" -#: options/presets.py:182 +#: options/presets.py msgid "Australian Easters Rules" msgstr "" -#: options/presets.py:184 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:202 +#: options/presets.py msgid "2 vs 2 Impromptu" msgstr "" -#: options/presets.py:204 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." msgstr "" -#: options/presets.py:229 +#: options/presets.py msgid "3 vs 3 Prepared" msgstr "" -#: options/presets.py:231 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." msgstr "" -#: options/presets.py:258 +#: options/presets.py msgid "UADC Rules" msgstr "" -#: options/presets.py:260 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:296 +#: options/presets.py msgid "WSDC Rules" msgstr "" -#: options/presets.py:298 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:326 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "" -#: options/presets.py:338 +#: options/presets.py msgid "Tab Release Options" msgstr "" -#: options/presets.py:340 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" msgstr "" -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html msgid "Configuration" msgstr "" -#: options/templates/preferences_index.html:11 +#: options/templates/preferences_index.html #, python-format msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." msgstr "" -#: options/templates/preferences_index.html:24 +#: options/templates/preferences_index.html #, python-format msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." msgstr "" -#: options/templates/preferences_index.html:35 +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." msgstr "" -#: options/templates/preferences_index.html:54 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" msgstr "" -#: options/templates/preferences_index.html:59 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" msgstr "" -#: options/templates/preferences_index.html:64 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" msgstr "" -#: options/templates/preferences_index.html:69 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" msgstr "" -#: options/templates/preferences_index.html:74 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" msgstr "" -#: options/templates/preferences_index.html:79 +#: options/templates/preferences_index.html msgid "How and where are motions used" msgstr "" -#: options/templates/preferences_index.html:90 +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" msgstr "" -#: options/templates/preferences_index.html:95 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" msgstr "" -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" msgstr "" -#: options/templates/preferences_index.html:105 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" msgstr "" -#: options/templates/preferences_index.html:110 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" msgstr "" -#: options/templates/preferences_index.html:115 +#: options/templates/preferences_index.html msgid "Settings which can affect all tournaments on the site" msgstr "" -#: options/templates/preferences_index.html:127 +#: options/templates/preferences_index.html msgid "Manually Set Current Round" msgstr "" -#: options/templates/preferences_index.html:128 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." msgstr "" -#: options/templates/preferences_index.html:132 -msgid "Set Round Weights" +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: options/templates/preferences_index.html:133 +#: options/templates/preferences_index.html msgid "Rounds can be weighted so that certain rounds are worth more team points." msgstr "" -#: options/templates/preferences_index.html:140 +#: options/templates/preferences_index.html msgid "Presets" msgstr "" -#: options/templates/preferences_index.html:141 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." msgstr "" -#: options/templates/preferences_index.html:152 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" msgstr "" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" msgstr "" -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" msgstr "" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" msgstr "" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" msgstr "" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" msgstr "" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" msgstr "" -#: options/views.py:65 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." msgstr "" -#: options/views.py:111 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." msgstr "" diff --git a/tabbycat/participants/locale/ms/LC_MESSAGES/django.po b/tabbycat/participants/locale/ms/LC_MESSAGES/django.po index 727246f476b..d72452c4a42 100644 --- a/tabbycat/participants/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -18,953 +18,940 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 942\n" -#: participants/admin.py:96 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" msgstr "" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." msgstr[0] "%(count)d Pautan URL pendebat telah dibuang." -#: participants/admin.py:152 participants/admin.py:233 -msgid "Delete URL key" -msgstr "Buang pautan URL" +#: participants/admin.py +msgid "Reset emoji" +msgstr "" -#: participants/admin.py:160 +#: participants/admin.py #, python-format msgid "%(count)d team had their emoji reset." msgid_plural "%(count)d teams had their emojis reset." msgstr[0] "" -#: participants/admin.py:164 -msgid "Reset emoji" +#: participants/admin.py +msgid "Reset code name" msgstr "" -#: participants/admin.py:170 +#: participants/admin.py #, python-format msgid "%(count)d team had their code name reset." msgid_plural "%(count)d teams had their code names reset." msgstr[0] "" -#: participants/admin.py:174 -msgid "Reset code name" -msgstr "" - -#: participants/admin.py:228 +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." msgstr[0] "" -#: participants/apps.py:7 participants/views.py:41 +#: participants/apps.py participants/views.py msgid "Participants" msgstr "" -#: participants/models.py:21 participants/models.py:37 -#: participants/models.py:66 participants/models.py:96 +#: participants/models.py msgid "name" msgstr "nama" -#: participants/models.py:24 participants/models.py:45 +#: participants/models.py msgid "region" msgstr "" -#: participants/models.py:25 +#: participants/models.py msgid "regions" msgstr "" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:39 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" msgstr "Nama penuh institusi, contoh; \"Universiti Islam Antarabangsa Malaysia, Institut Pendidikan Guru Malaysia\"" -#: participants/models.py:41 +#: participants/models.py msgid "code" msgstr "kod" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:43 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" msgstr "" -#: participants/models.py:55 participants/models.py:155 -#: participants/models.py:353 +#: participants/models.py msgid "institution" msgstr "institusi" -#: participants/models.py:56 +#: participants/models.py msgid "institutions" msgstr "institusi" -#: participants/models.py:64 participants/models.py:157 -#: participants/models.py:356 +#: participants/models.py msgid "tournament" msgstr "pertandingan" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:68 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" msgstr "" -#: participants/models.py:70 +#: participants/models.py msgid "slug" msgstr "" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:72 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" msgstr "" -#: participants/models.py:74 +#: participants/models.py msgid "sequence number" msgstr "" -#: participants/models.py:75 +#: participants/models.py msgid "The order in which the categories are displayed" msgstr "" -#: participants/models.py:77 +#: participants/models.py msgid "limit" msgstr "" -#: participants/models.py:78 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: participants/models.py:80 +#: participants/models.py msgid "public" msgstr "" -#: participants/models.py:81 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" msgstr "" -#: participants/models.py:87 +#: participants/models.py msgid "speaker category" msgstr "kategori pendebat" -#: participants/models.py:88 participants/models.py:330 +#: participants/models.py msgid "speaker categories" msgstr "kategori pendebat" -#: participants/models.py:98 +#: participants/models.py msgid "email address" msgstr "" -#: participants/models.py:100 +#: participants/models.py msgid "phone" msgstr "" -#: participants/models.py:102 +#: participants/models.py msgid "anonymous" msgstr "" -#: participants/models.py:103 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" msgstr "" -#: participants/models.py:106 +#: participants/models.py +msgid "code name" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py msgid "URL key" msgstr "" -#: participants/models.py:111 +#: participants/models.py msgid "male" msgstr "" -#: participants/models.py:112 +#: participants/models.py msgid "female" msgstr "" -#: participants/models.py:113 +#: participants/models.py msgid "other" msgstr "" -#: participants/models.py:115 +#: participants/models.py msgid "gender" msgstr "" -#: participants/models.py:116 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" msgstr "" -#: participants/models.py:118 +#: participants/models.py msgid "pronoun" msgstr "" -#: participants/models.py:119 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" msgstr "" -#: participants/models.py:122 +#: participants/models.py msgid "person" msgstr "" -#: participants/models.py:123 +#: participants/models.py msgid "persons" msgstr "" -#: participants/models.py:138 +#: participants/models.py msgid "full name/suffix" msgstr "" -#: participants/models.py:139 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:141 +#: participants/models.py msgid "short name/suffix" msgstr "" -#: participants/models.py:142 +#: participants/models.py msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:144 -msgid "code name" -msgstr "" - -#: participants/models.py:145 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" msgstr "" -#: participants/models.py:148 +#: participants/models.py msgid "short name" msgstr "" -#: participants/models.py:149 +#: participants/models.py msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:151 +#: participants/models.py msgid "long name" msgstr "" -#: participants/models.py:152 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:159 +#: participants/models.py msgid "Uses institutional prefix" msgstr "" -#: participants/models.py:160 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" msgstr "" -#: participants/models.py:162 +#: participants/models.py msgid "break categories" msgstr "" -#: participants/models.py:167 participants/models.py:364 +#: participants/models.py msgid "institution conflicts" msgstr "" -#: participants/models.py:178 +#: participants/models.py msgid "none" msgstr "" -#: participants/models.py:179 +#: participants/models.py msgid "swing" msgstr "" -#: participants/models.py:180 +#: participants/models.py msgid "composite" msgstr "" -#: participants/models.py:181 +#: participants/models.py msgid "bye" msgstr "" -#: participants/models.py:184 +#: participants/models.py msgid "type" msgstr "jenis" -#: participants/models.py:188 +#: participants/models.py msgid "emoji" msgstr "" -#: participants/models.py:202 participants/models.py:328 +#: participants/models.py msgid "team" msgstr "pasukan" -#: participants/models.py:203 +#: participants/models.py msgid "teams" msgstr "" -#: participants/models.py:311 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." msgstr "" -#: participants/models.py:313 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:315 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:333 +#: participants/models.py msgid "speaker" msgstr "" -#: participants/models.py:334 +#: participants/models.py msgid "speakers" msgstr "" -#: participants/models.py:357 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" msgstr "" -#: participants/models.py:359 +#: participants/models.py msgid "base score" msgstr "" -#: participants/models.py:368 +#: participants/models.py msgid "team conflicts" msgstr "" -#: participants/models.py:372 +#: participants/models.py msgid "adjudicator conflicts" msgstr "" -#: participants/models.py:375 +#: participants/models.py msgid "always trainee" msgstr "" -#: participants/models.py:376 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" msgstr "" -#: participants/models.py:378 +#: participants/models.py msgid "breaking" msgstr "" -#: participants/models.py:380 +#: participants/models.py msgid "independent" msgstr "" -#: participants/models.py:382 +#: participants/models.py msgid "adjudication core" msgstr "" -#: participants/models.py:391 +#: participants/models.py msgid "adjudicator" msgstr "hakim" -#: participants/models.py:392 +#: participants/models.py msgid "adjudicators" msgstr "" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" msgstr "" -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" msgstr "" -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" msgstr "" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" msgstr "" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" msgstr "" -#: participants/templates/adjudicator_registration_card.html:27 -#: participants/templates/team_registration_card.html:89 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:31 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" msgstr "" -#: participants/templates/adjudicator_registration_card.html:36 -#: participants/templates/team_registration_card.html:98 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:43 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." msgstr "" -#: participants/templates/adjudicator_registration_card.html:50 -#: participants/templates/team_registration_card.html:109 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:52 -#: participants/templates/team_registration_card.html:111 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr "" -#: participants/templates/adjudicator_registration_card.html:54 -#: participants/templates/adjudicator_registration_card.html:62 -#: participants/templates/adjudicator_registration_card.html:74 -#: participants/templates/adjudicator_registration_card.html:84 -#: participants/templates/team_registration_card.html:58 -#: participants/templates/team_registration_card.html:70 -#: participants/templates/team_registration_card.html:79 -#: participants/templates/team_registration_card.html:113 -#: participants/templates/team_registration_card.html:122 -#: participants/templates/team_registration_card.html:133 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" msgstr "" -#: participants/templates/adjudicator_registration_card.html:58 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:60 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:71 -#: participants/templates/adjudicator_registration_card.html:82 -#: participants/templates/team_registration_card.html:56 -#: participants/templates/team_registration_card.html:68 -#: participants/templates/team_registration_card.html:77 -#: participants/templates/team_registration_card.html:120 -#: participants/templates/team_registration_card.html:131 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr "" -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/team_registration_card.html:118 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:80 -#: participants/templates/team_registration_card.html:129 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" msgstr "" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:14 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." msgstr "" #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:21 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:33 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:41 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:47 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" msgstr "" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "" -#: participants/templates/current_round/common.html:28 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" msgstr "" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" msgstr "" -#: participants/templates/current_round/common.html:44 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." msgstr "" -#: participants/templates/current_round/common.html:54 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." msgstr "" -#: participants/templates/current_round/common.html:57 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "" -#: participants/templates/current_round/common.html:61 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "" -#: participants/templates/current_round/common.html:69 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." msgstr "" -#: participants/templates/current_round/round_adj.html:14 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:18 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:24 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:28 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:36 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:40 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:46 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:50 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:85 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:89 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:95 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:99 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:107 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:111 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:117 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:121 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:129 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:133 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:139 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:143 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:39 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:43 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:56 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:60 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:66 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:70 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." msgstr "" -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" msgstr "" -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" msgstr "" -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:38 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" msgstr "" -#: participants/templates/feedback_progress_panel.html:46 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:53 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." msgstr "" -#: participants/templates/in_this_round.html:9 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" msgstr "" -#: participants/templates/in_this_round.html:13 +#: participants/templates/in_this_round.html msgid "In This Round" msgstr "" -#: participants/templates/in_this_round.html:16 +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" msgstr "" -#: participants/templates/in_this_round.html:23 +#: participants/templates/in_this_round.html msgid "Room TBA" msgstr "" -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:39 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:54 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." msgstr[0] "" -#: participants/templates/in_this_round.html:60 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." msgstr "" -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:79 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:91 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." msgstr "" -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" msgstr "" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" msgstr "Senarai Institusi" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." msgstr "" -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" msgstr "" -#: participants/templates/participants_subnav.html:26 participants/views.py:135 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" msgstr "" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" msgstr "" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" msgstr "" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." msgstr "" -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." msgstr "" -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" msgstr "" -#: participants/templates/team_registration_card.html:16 +#: participants/templates/team_registration_card.html msgid "Team name:" msgstr "" -#: participants/templates/team_registration_card.html:21 +#: participants/templates/team_registration_card.html msgid "Full team name:" msgstr "" -#: participants/templates/team_registration_card.html:25 +#: participants/templates/team_registration_card.html msgid "Short team name:" msgstr "" -#: participants/templates/team_registration_card.html:32 +#: participants/templates/team_registration_card.html msgid "Code name:" msgstr "" -#: participants/templates/team_registration_card.html:36 +#: participants/templates/team_registration_card.html msgid "No code name assigned" msgstr "" -#: participants/templates/team_registration_card.html:42 +#: participants/templates/team_registration_card.html msgid "Emoji:" msgstr "" -#: participants/templates/team_registration_card.html:46 +#: participants/templates/team_registration_card.html msgid "No emoji assigned" msgstr "" -#: participants/templates/team_registration_card.html:54 +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "" -#: participants/templates/team_registration_card.html:66 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" msgstr "" -#: participants/templates/team_registration_card.html:75 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" msgstr "" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" msgstr "" -#: participants/views.py:46 +#: participants/views.py msgid "Adjudicators" msgstr "" -#: participants/views.py:55 +#: participants/views.py msgid "Speakers" msgstr "" -#: participants/views.py:86 +#: participants/views.py msgid "Institutions" msgstr "" -#: participants/views.py:102 +#: participants/views.py msgid "Code" msgstr "" -#: participants/views.py:103 +#: participants/views.py msgid "Full name" msgstr "" -#: participants/views.py:105 +#: participants/views.py msgid "Region" msgstr "" -#: participants/views.py:107 +#: participants/views.py msgid "Teams" msgstr "" -#: participants/views.py:107 +#: participants/views.py msgid "Number of teams" msgstr "Bilangan pasukan" -#: participants/views.py:109 +#: participants/views.py msgid "Adjs" msgstr "Para hakim" -#: participants/views.py:110 +#: participants/views.py msgid "Number of adjudicators, excluding independents" msgstr "Bilangan hakim, tidak termasuk hakim jemputan" -#: participants/views.py:112 +#: participants/views.py msgid "IAs" msgstr "" -#: participants/views.py:113 +#: participants/views.py msgid "Number of independent adjudicators" msgstr "Bilangan hakim jemputan" -#: participants/views.py:143 +#: participants/views.py msgid "Code name" msgstr "" -#: participants/views.py:163 +#: participants/views.py msgid "Team Registration" msgstr "Pendaftaran pasukan" -#: participants/views.py:231 +#: participants/views.py msgid "Results" msgstr "Keputusan" -#: participants/views.py:239 participants/views.py:264 +#: participants/views.py #, python-format msgid "Record for %(name)s" msgstr "Rekod untuk %(name)s" -#: participants/views.py:261 +#: participants/views.py msgid "Previous Rounds" msgstr "Pusingan Lalu" -#: participants/views.py:352 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" msgstr[0] "" -#: participants/views.py:358 +#: participants/views.py msgid "No changes were made to the categories." msgstr "" -#: participants/views.py:371 +#: participants/views.py msgid "Speaker Category Eligibility" msgstr "" diff --git a/tabbycat/printing/locale/ms/LC_MESSAGES/django.po b/tabbycat/printing/locale/ms/LC_MESSAGES/django.po index b75c5de28cb..93c9f99ef2d 100644 --- a/tabbycat/printing/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:18\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -18,109 +18,108 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" msgstr "" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" msgstr "" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." msgstr "" -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." msgstr "" -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" msgstr "" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" msgstr "" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" msgstr "" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" msgstr "" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" msgstr "" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" msgstr "" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" msgstr "" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" msgstr "" -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" msgstr "" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "" -#: printing/templates/scoresheet_list.html:47 +#: printing/templates/scoresheet_list.html msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." msgstr "" -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" msgstr "" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." msgstr "" -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" msgstr "" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" msgstr "" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "" diff --git a/tabbycat/privateurls/locale/ms/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/ms/LC_MESSAGES/django.po index 179cdaafb6a..41a3e6c4e97 100644 --- a/tabbycat/privateurls/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:54\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -18,167 +18,160 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" msgstr "" -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:145 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" msgstr "" -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." msgstr "" -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" msgstr "" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." msgstr "" -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." msgstr "" -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." msgstr "" -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." msgstr "" -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." msgstr "" -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." msgstr "" -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" msgstr "" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" msgstr "" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" msgstr "" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." msgstr "" -#: privateurls/templates/public_url_landing.html:62 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Submit Ballot for %(round)s" msgstr "" -#: privateurls/templates/public_url_landing.html:65 -msgid "There are no current rounds" -msgstr "" - -#: privateurls/templates/public_url_landing.html:71 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" msgstr "" -#: privateurls/templates/public_url_landing.html:84 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" msgstr "" -#: privateurls/views.py:63 privateurls/views.py:164 +#: privateurls/views.py msgid "no URL" msgstr "" -#: privateurls/views.py:76 +#: privateurls/views.py msgid "URL" msgstr "" -#: privateurls/views.py:87 +#: privateurls/views.py msgid "Speakers" msgstr "" -#: privateurls/views.py:97 +#: privateurls/views.py msgid "Adjudicators" msgstr "" -#: privateurls/views.py:119 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." msgstr "" -#: privateurls/views.py:126 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." msgstr[0] "" -#: privateurls/views.py:131 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." msgstr[0] "" -#: privateurls/views.py:172 +#: privateurls/views.py msgid "URL Key" msgstr "" -#: privateurls/views.py:181 +#: privateurls/views.py msgid "Debates" msgstr "" diff --git a/tabbycat/results/locale/ms/LC_MESSAGES/django.po b/tabbycat/results/locale/ms/LC_MESSAGES/django.po index ef4ebc1dfe3..c5507efd6e6 100644 --- a/tabbycat/results/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:14\n" "Last-Translator: philip_tc\n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -18,1072 +18,1065 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 948\n" -#: results/admin.py:44 +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py #, python-format msgid "Resaved results for %(count)d ballot submission." msgid_plural "Resaved results for %(count)d ballot submissions." msgstr[0] "" -#: results/admin.py:47 -msgid "Resave results" -msgstr "" - -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:158 +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" msgstr "Keputusan" -#: results/forms.py:39 +#: results/forms.py msgid "Tournament password" msgstr "" -#: results/forms.py:45 +#: results/forms.py msgid "That password isn't correct." msgstr "Kata laluan itu tidak tepat." -#: results/forms.py:77 +#: results/forms.py msgid "Please enter a whole number." msgstr "Sila masukkan nombor bulat." -#: results/forms.py:79 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." msgstr "Sila masukkan gandaan %s." -#: results/forms.py:166 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." msgstr "Set ballot ini tidak boleh dibuang dan disahkan pada masa yang sama." -#: results/forms.py:173 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." msgstr "" -#: results/forms.py:302 results/forms.py:336 +#: results/forms.py msgid "---------" msgstr "" -#: results/forms.py:304 results/forms.py:306 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" msgstr "" -#: results/forms.py:323 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" msgstr "" -#: results/forms.py:332 results/forms.py:901 +#: results/forms.py #, python-format msgid "%(team)s (%(side)s)" msgstr "" -#: results/forms.py:335 +#: results/forms.py msgid "Winner" msgstr "" -#: results/forms.py:489 +#: results/forms.py msgid "Mark as a duplicate speech" msgstr "" -#: results/forms.py:549 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." msgstr "" -#: results/forms.py:563 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." msgstr[0] "" -#: results/forms.py:580 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." msgstr "" -#: results/forms.py:587 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." msgstr "" -#: results/forms.py:719 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." msgstr "" -#: results/forms.py:724 +#: results/forms.py msgid "The declared winner does not correspond to the team with the highest score." msgstr "" -#: results/forms.py:733 +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" msgstr "" -#: results/forms.py:743 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:846 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:851 +#: results/forms.py #, python-format msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:859 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:921 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." msgstr "" -#: results/forms.py:964 +#: results/forms.py #, python-format msgid "There must be exactly %(n)d team advancing." msgid_plural "There must be exactly %(n)d teams advancing." msgstr[0] "" -#: results/forms.py:1007 +#: results/forms.py msgid "There must be exactly 1 team advancing." msgstr "" -#: results/models.py:33 +#: results/models.py msgid "Tab room" msgstr "" -#: results/models.py:34 +#: results/models.py msgid "Public" msgstr "" -#: results/models.py:38 +#: results/models.py msgid "timestamp" msgstr "cap masa" -#: results/models.py:40 +#: results/models.py msgid "version" msgstr "" -#: results/models.py:42 +#: results/models.py msgid "submitter type" msgstr "" -#: results/models.py:44 +#: results/models.py msgid "confirmed" msgstr "" -#: results/models.py:48 +#: results/models.py msgid "from private URL" msgstr "" -#: results/models.py:51 +#: results/models.py msgid "from participant" msgstr "" -#: results/models.py:56 +#: results/models.py msgid "submitter" msgstr "" -#: results/models.py:59 +#: results/models.py msgid "confirmer" msgstr "" -#: results/models.py:61 +#: results/models.py msgid "confirm timestamp" msgstr "" -#: results/models.py:63 +#: results/models.py msgid "IP address" msgstr "alamat IP" -#: results/models.py:103 +#: results/models.py msgid "A tab room ballot must have a user associated." msgstr "" -#: results/models.py:111 +#: results/models.py msgid "debate" msgstr "debat" -#: results/models.py:113 +#: results/models.py msgid "motion" msgstr "usul" -#: results/models.py:115 +#: results/models.py msgid "discarded" msgstr "" -#: results/models.py:117 +#: results/models.py msgid "single adjudicator" msgstr "" -#: results/models.py:118 +#: results/models.py msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." msgstr "" -#: results/models.py:123 results/models.py:228 results/models.py:267 -#: results/models.py:305 results/models.py:347 +#: results/models.py msgid "ballot submission" msgstr "penyerahan keputusan" -#: results/models.py:124 +#: results/models.py msgid "ballot submissions" msgstr "" -#: results/models.py:143 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" msgstr "" -#: results/models.py:150 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" msgstr "" -#: results/models.py:230 results/models.py:269 +#: results/models.py msgid "debate adjudicator" msgstr "hakim debat" -#: results/models.py:232 results/models.py:271 results/models.py:307 -#: results/models.py:349 +#: results/models.py msgid "debate team" msgstr "" -#: results/models.py:235 results/models.py:312 +#: results/models.py msgid "win" msgstr "menang" -#: results/models.py:237 results/models.py:314 +#: results/models.py msgid "margin" msgstr "margin" -#: results/models.py:239 results/models.py:272 results/models.py:316 -#: results/models.py:352 +#: results/models.py msgid "score" msgstr "" -#: results/models.py:244 +#: results/models.py msgid "team score by adjudicator" msgstr "" -#: results/models.py:245 +#: results/models.py msgid "team scores by adjudicator" msgstr "" -#: results/models.py:260 results/models.py:294 +#: results/models.py msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." msgstr "" -#: results/models.py:273 results/models.py:353 +#: results/models.py msgid "position" msgstr "" -#: results/models.py:279 +#: results/models.py msgid "speaker score by adjudicator" msgstr "" -#: results/models.py:280 +#: results/models.py msgid "speaker scores by adjudicator" msgstr "" -#: results/models.py:310 +#: results/models.py msgid "points" msgstr "" -#: results/models.py:318 +#: results/models.py msgid "votes given" msgstr "" -#: results/models.py:320 +#: results/models.py msgid "votes possible" msgstr "" -#: results/models.py:324 +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py msgid "team score" msgstr "" -#: results/models.py:325 +#: results/models.py msgid "team scores" msgstr "" -#: results/models.py:351 +#: results/models.py msgid "speaker" msgstr "" -#: results/models.py:355 +#: results/models.py msgid "ghost" msgstr "" -#: results/models.py:356 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." msgstr "" -#: results/models.py:365 +#: results/models.py msgid "speaker score" msgstr "" -#: results/models.py:366 +#: results/models.py msgid "speaker scores" msgstr "" -#: results/models.py:375 +#: results/models.py msgid "The debate team and speaker must be from the same team." msgstr "" -#: results/models.py:378 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." msgstr "" -#: results/tables.py:15 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" msgstr "" -#: results/tables.py:36 +#: results/tables.py msgid "Status of this debate's ballot" msgstr "" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" msgstr "" -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" msgstr "" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" msgstr "" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" msgstr "" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" msgstr "" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the current round" msgstr "" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" msgstr "" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" msgstr "" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." msgstr "" -#: results/templates/admin_results.html:88 +#: results/templates/admin_results.html #, python-format msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." msgstr[0] "" -#: results/templates/admin_results.html:94 +#: results/templates/admin_results.html #, python-format msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." msgstr "" -#: results/templates/admin_results.html:113 +#: results/templates/admin_results.html msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." msgstr "" -#: results/templates/admin_results.html:127 +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." msgstr "" -#: results/templates/admin_results.html:135 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." msgstr "" -#: results/templates/admin_results.html:144 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/admin_results.html:151 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:12 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" msgstr "" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:17 -#: results/templates/ballot_entry_base.html:21 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" msgstr "" -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." msgstr "" -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html msgid "Confirm results" msgstr "" -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" msgstr "" -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:68 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." msgstr "" -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 results/views.py:513 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" msgstr "" -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "" -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." msgstr "" -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "" -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." msgstr[0] "" -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr[0] "" -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:42 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:45 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" msgstr "" -#: results/templates/ballot/ballot_set.html:6 +#: results/templates/ballot/ballot_set.html msgid "There are some problems with this scoresheet. Please review and correct them." msgstr "" -#: results/templates/ballot/ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s (%(institution)s)" msgstr "" -#: results/templates/ballot/ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s" msgstr "" -#: results/templates/ballot/ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html msgid "Scoresheet" msgstr "" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Solo Chair" msgstr "" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Chair" msgstr "" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Panellist" msgstr "" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Trainee" msgstr "" -#: results/templates/ballot/ballot_set.html:44 +#: results/templates/ballot/ballot_set.html msgid "Assign sides before entering scores" msgstr "" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." msgstr "" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "There is %(number)s existing ballot set for this debate." msgid_plural "There are %(number)s existing ballot sets for this debate." msgstr[0] "" -#: results/templates/ballot/other_ballots_list.html:21 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." msgstr "" -#: results/templates/ballot/other_ballots_list.html:26 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." msgstr "" -#: results/templates/ballot/other_ballots_list.html:41 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:45 +#: results/templates/ballot/other_ballots_list.html msgid "MERGING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:48 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:53 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:58 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from %(adjudicator)s's private URL," msgstr "" -#: results/templates/ballot/other_ballots_list.html:62 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:68 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," msgstr "" -#: results/templates/ballot/other_ballots_list.html:73 +#: results/templates/ballot/other_ballots_list.html msgid "unknown" msgstr "" -#: results/templates/ballot/other_ballots_list.html:74 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "confirmed by %(confirmer)s" msgstr "" -#: results/templates/ballot/other_ballots_list.html:78 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" msgstr "" -#: results/templates/ballot/other_ballots_list.html:82 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" msgstr "" -#: results/templates/ballot/other_ballots_list.html:86 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" msgstr[0] "" -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." msgstr "" -#: results/templates/ballot_entry_base.html:30 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr "" -#: results/templates/ballot_entry_base.html:41 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." msgstr "" -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" msgstr "" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" msgstr "" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" msgstr "" -#: results/templates/debate_postponement_form.html:3 +#: results/templates/debate_postponement_form.html msgid "Postponed" msgstr "" -#: results/templates/debate_postponement_form.html:8 +#: results/templates/debate_postponement_form.html msgid "Postpone" msgstr "" -#: results/templates/enter_results.html:15 +#: results/templates/enter_results.html msgid "Ballot Status" msgstr "" -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" msgstr "" -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" msgstr "" -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" msgstr "" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" msgstr "" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" msgstr "" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." msgstr "" -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" msgstr "" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." msgstr "" -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" msgstr "" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" msgstr "" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" msgstr "" -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." msgstr "" -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" msgstr "" -#: results/templates/public_ballot_set.html:28 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" msgstr "" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" msgstr "" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" msgstr "" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" msgstr "" -#: results/templates/public_ballot_set.html:92 -#: results/templates/public_ballot_set.html:96 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:105 -#: results/templates/public_ballot_set.html:109 +#: results/templates/public_ballot_set.html #, python-format msgid "%(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Won" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Lost" msgstr "" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set_error.html #, python-format msgid "Back to the tournament home page." msgstr "" -#: results/templates/public_enter_results.html:9 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" msgstr "" -#: results/templates/public_enter_results.html:16 +#: results/templates/public_enter_results.html msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." msgstr "" -#: results/templates/public_enter_results.html:24 +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." msgstr[0] "" -#: results/templates/public_enter_results.html:63 -msgid "Submit Ballot(s)" -msgstr "" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" -#: results/templates/public_enter_results.html:65 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" msgstr "" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" msgstr "" -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" msgstr "" -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" msgstr "" -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" msgstr "" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" msgstr "" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." msgstr "" -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." msgstr "" -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" msgstr "" -#: results/utils.py:19 +#: results/utils.py msgid "Debate was Postponed" msgstr "" -#: results/utils.py:20 +#: results/utils.py msgid "Ballot is Unconfirmed" msgstr "" -#: results/utils.py:21 +#: results/utils.py msgid "Ballot is Confirmed" msgstr "" #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:36 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" msgstr "" -#: results/utils.py:43 +#: results/utils.py #, python-format msgid "%(team)s (%(side)s) won" msgstr "" #. Translators: The team here is the losing team -#: results/utils.py:45 +#: results/utils.py #, python-format msgid "vs %(team)s (%(side)s)" msgstr "" -#: results/utils.py:47 +#: results/utils.py #, python-format msgid "Advancing: %(advancing_list)s
    " msgstr "" -#: results/utils.py:50 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" msgstr "" -#: results/utils.py:58 +#: results/utils.py #, python-format msgid "1st: %(first_team)s
    " msgstr "" -#: results/utils.py:59 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" "4th: %(fourth_team)s" msgstr "" -#: results/utils.py:74 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" msgstr "" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:134 +#: results/utils.py msgid "PM" msgstr "" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:136 +#: results/utils.py msgid "DPM" msgstr "" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:138 +#: results/utils.py msgid "LO" msgstr "" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:140 +#: results/utils.py msgid "DLO" msgstr "" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:142 +#: results/utils.py msgid "MG" msgstr "" #. Translators: Abbreviation for Government Whip -#: results/utils.py:144 +#: results/utils.py msgid "GW" msgstr "" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:146 +#: results/utils.py msgid "MO" msgstr "" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:148 +#: results/utils.py msgid "OW" msgstr "" -#: results/utils.py:168 +#: results/utils.py msgid "Reply" msgstr "" -#: results/views.py:270 results/views.py:272 +#: results/views.py msgid " vs " msgstr "" -#: results/views.py:273 +#: results/views.py #, python-format msgid "%(matchup)s: %(round)s @ %(room)s" msgstr "" -#: results/views.py:275 +#: results/views.py msgid "N/A" msgstr "" -#: results/views.py:408 +#: results/views.py msgid "New Ballot Set" msgstr "" -#: results/views.py:411 +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." msgstr "" -#: results/views.py:413 results/views.py:480 +#: results/views.py msgid " Email receipts queued to be sent." msgstr "" -#: results/views.py:427 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." msgstr "" -#: results/views.py:433 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." msgstr "" -#: results/views.py:459 +#: results/views.py msgid "Edit Ballot Set" msgstr "" -#: results/views.py:473 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." msgstr "" -#: results/views.py:475 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." msgstr "" -#: results/views.py:477 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." msgstr "" -#: results/views.py:528 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." msgstr "" -#: results/views.py:535 +#: results/views.py msgid "The draw for this round hasn't been released yet." msgstr "" -#: results/views.py:539 +#: results/views.py msgid "The motions for this round haven't been released yet." msgstr "" -#: results/views.py:544 +#: results/views.py msgid "It looks like you don't have a debate this round." msgstr "" -#: results/views.py:546 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." msgstr "" -#: results/views.py:573 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:578 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:689 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." msgstr "" -#: results/views.py:707 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." msgstr "" -#: results/views.py:710 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." msgstr "" -#: results/views.py:714 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." msgstr "" -#: results/views.py:717 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." msgstr "" -#: results/views.py:739 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." msgstr "" -#: results/views.py:805 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" msgstr "" -#: results/views.py:809 +#: results/views.py msgid "Adjudicator" msgstr "" -#: results/views.py:846 +#: results/views.py msgid "Merge Ballots" msgstr "" -#: results/views.py:877 +#: results/views.py msgid "The speaking order in the ballots is inconsistent, so could not be merged." msgstr "" -#: results/views.py:879 +#: results/views.py msgid "Duplicate speeches are marked inconsistently, so could not be merged." msgstr "" -#: results/views.py:880 +#: results/views.py #, python-format msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." msgstr "" diff --git a/tabbycat/standings/locale/ms/LC_MESSAGES/django.po b/tabbycat/standings/locale/ms/LC_MESSAGES/django.po index 65a90f62d72..c0c1b8d839a 100644 --- a/tabbycat/standings/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-29 23:49-0400\n" -"PO-Revision-Date: 2020-12-30 04:13\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:01\n" "Last-Translator: philip_tc\n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -18,604 +18,595 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 950\n" -#: standings/base.py:297 +#: standings/base.py msgid "The same metric would be added twice:" msgstr "" -#: standings/base.py:298 +#: standings/base.py msgid "The same ranking would be added twice:" msgstr "" -#: standings/base.py:414 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" msgstr "" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" msgstr "" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" msgstr "" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" msgstr "" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" msgstr "Semua pendebat" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" msgstr "Hakim Jemputan" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" msgstr "" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" msgstr "" -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" msgstr "" -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" msgstr "" -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" msgstr "" -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" msgstr "" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" msgstr "" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" msgstr "" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" msgstr "" -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" msgstr "" -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" msgstr "" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" msgstr "" -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" msgstr "" -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" msgstr "" -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" msgstr "" -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" msgstr "" -#: standings/speakers.py:50 standings/speakers.py:106 +#: standings/speakers.py msgid "total" msgstr "" -#: standings/speakers.py:51 standings/speakers.py:107 +#: standings/speakers.py msgid "Total" msgstr "" -#: standings/speakers.py:58 standings/speakers.py:116 +#: standings/speakers.py msgid "average" msgstr "" -#: standings/speakers.py:59 standings/speakers.py:117 +#: standings/speakers.py msgid "Avg" msgstr "" -#: standings/speakers.py:66 +#: standings/speakers.py msgid "team points" msgstr "" -#: standings/speakers.py:67 +#: standings/speakers.py msgid "Team" msgstr "" -#: standings/speakers.py:89 standings/speakers.py:126 +#: standings/speakers.py msgid "standard deviation" msgstr "" -#: standings/speakers.py:90 standings/speakers.py:127 +#: standings/speakers.py msgid "Stdev" msgstr "" -#: standings/speakers.py:98 +#: standings/speakers.py msgid "number of speeches given" msgstr "" -#: standings/speakers.py:99 standings/speakers.py:138 +#: standings/speakers.py msgid "Num" msgstr "" -#: standings/speakers.py:137 +#: standings/speakers.py msgid "replies given" msgstr "" -#: standings/speakers.py:147 +#: standings/speakers.py msgid "trimmed mean (high-low drop)" msgstr "" -#: standings/speakers.py:148 +#: standings/speakers.py msgid "Trim" msgstr "" -#: standings/teams.py:62 +#: standings/teams.py msgid "points" msgstr "" -#: standings/teams.py:63 +#: standings/teams.py msgid "Pts" msgstr "" -#: standings/teams.py:76 +#: standings/teams.py msgid "wins" msgstr "" -#: standings/teams.py:77 standings/views.py:592 +#: standings/teams.py standings/views.py msgid "Wins" msgstr "" -#: standings/teams.py:87 +#: standings/teams.py msgid "total speaker score" msgstr "" -#: standings/teams.py:88 +#: standings/teams.py msgid "Spk" msgstr "" -#: standings/teams.py:97 +#: standings/teams.py msgid "average total speaker score" msgstr "" -#: standings/teams.py:98 +#: standings/teams.py msgid "ATSS" msgstr "" -#: standings/teams.py:107 +#: standings/teams.py msgid "speaker score standard deviation" msgstr "" -#: standings/teams.py:108 +#: standings/teams.py msgid "SSD" msgstr "" -#: standings/teams.py:118 +#: standings/teams.py msgid "sum of margins" msgstr "jumlah margin" -#: standings/teams.py:119 +#: standings/teams.py msgid "Marg" msgstr "" -#: standings/teams.py:128 +#: standings/teams.py msgid "average margin" msgstr "" -#: standings/teams.py:129 +#: standings/teams.py msgid "AWM" msgstr "" -#: standings/teams.py:138 +#: standings/teams.py msgid "average individual speaker score" msgstr "" -#: standings/teams.py:139 +#: standings/teams.py msgid "AISS" msgstr "" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by wins" msgstr "" -#: standings/teams.py:212 +#: standings/teams.py msgid "DS" msgstr "" -#: standings/teams.py:219 +#: standings/teams.py msgid "draw strength by total speaker score" msgstr "" -#: standings/teams.py:220 +#: standings/teams.py msgid "DSS" msgstr "" -#: standings/teams.py:231 +#: standings/teams.py msgid "number of pullups before this round" msgstr "" -#: standings/teams.py:232 +#: standings/teams.py msgid "PU" msgstr "" -#: standings/teams.py:254 +#: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "" -#: standings/teams.py:255 +#: standings/teams.py msgid "Ballots" msgstr "" -#: standings/teams.py:256 +#: standings/teams.py msgid "votes/ballots carried" msgstr "" -#: standings/teams.py:280 +#: standings/teams.py msgid "number of firsts" msgstr "" -#: standings/teams.py:281 +#: standings/teams.py msgid "1sts" msgstr "" -#: standings/teams.py:290 +#: standings/teams.py msgid "number of seconds" msgstr "" -#: standings/teams.py:291 +#: standings/teams.py msgid "2nds" msgstr "" -#: standings/teams.py:300 +#: standings/teams.py msgid "number of thirds" msgstr "" -#: standings/teams.py:301 +#: standings/teams.py msgid "3rds" msgstr "" -#: standings/teams.py:313 +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py msgid "Who-beat-whom" msgstr "" -#: standings/teams.py:314 +#: standings/teams.py msgid "WBW" msgstr "" -#: standings/teams.py:315 +#: standings/teams.py msgid "who-beat-whom" msgstr "" -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." msgstr "" -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." msgstr "" -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." msgstr "" -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." msgstr "" -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." msgstr "" -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." msgstr "" -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." msgstr "" -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." msgstr "" -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." msgstr "" -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." msgstr "" -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" msgstr "" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." msgstr "" -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" msgstr "" -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" msgstr "" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" msgstr "" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" msgstr "" -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" msgstr "" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:152 -#: standings/templates/standings_index.html:167 -#: standings/templates/standings_index.html:186 +#: standings/templates/standings_index.html msgid "No data yet" msgstr "" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" msgstr "" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" msgstr "" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" msgstr "" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" msgstr "" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" msgstr "" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" msgstr "" -#: standings/templates/standings_index.html:177 +#: standings/templates/standings_index.html msgid "Average Speaks" msgstr "" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" msgstr "" -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" msgstr "" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" msgstr "" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" msgstr "" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" msgstr "" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "" -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" msgstr "" -#: standings/templates/standings_menu.html:63 -#: standings/templates/standings_menu.html:76 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "" -#: standings/templates/standings_menu.html:66 +#: standings/templates/standings_menu.html msgid "By Round" msgstr "" -#: standings/templates/standings_menu.html:81 +#: standings/templates/standings_menu.html msgid "Diversity" msgstr "" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." msgstr "" -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " msgstr "" -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " msgstr "" -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " msgstr "" -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" msgstr "" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" msgstr "" -#: standings/views.py:208 standings/views.py:428 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." msgstr "" -#: standings/views.py:290 +#: standings/views.py msgid "Speaker Standings" msgstr "" -#: standings/views.py:326 +#: standings/views.py msgid "Speaker Tab" msgstr "" -#: standings/views.py:341 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" msgstr "" -#: standings/views.py:359 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" msgstr "" -#: standings/views.py:372 +#: standings/views.py msgid "Reply Speaker Standings" msgstr "" -#: standings/views.py:380 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." msgstr "" -#: standings/views.py:408 +#: standings/views.py msgid "Reply Speaker Tab" msgstr "" -#: standings/views.py:420 standings/views.py:669 +#: standings/views.py msgid "Team Standings" msgstr "" -#: standings/views.py:499 +#: standings/views.py msgid "Team Tab" msgstr "" -#: standings/views.py:518 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" msgstr "" -#: standings/views.py:545 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" msgstr "" -#: standings/views.py:556 +#: standings/views.py msgid "Current Team Standings" msgstr "" -#: standings/views.py:592 +#: standings/views.py msgid "Points" msgstr "" -#: standings/views.py:638 +#: standings/views.py msgid "Feedback Overview" msgstr "" -#: standings/views.py:655 -msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." msgstr "" diff --git a/tabbycat/tournaments/locale/ms/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/ms/LC_MESSAGES/django.po index ea62039d87f..0809b6c6846 100644 --- a/tabbycat/tournaments/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -18,1024 +18,1014 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "Pertandingan" -#: tournaments/forms.py:29 +#: tournaments/forms.py msgid "Number of preliminary rounds" msgstr "Bilangan pusingan awal" -#: tournaments/forms.py:34 +#: tournaments/forms.py msgid "Number of teams in the open break" msgstr "Bilangan pasukan mara pusingan akhir terbuka" -#: tournaments/forms.py:35 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." msgstr "Biar kosong jika tiada pusingan akhir." -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Did you agree with their decision?" msgstr "Adakah anda setuju dengan keputusan?" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Agree?" msgstr "Setuju?" -#: tournaments/forms.py:47 +#: tournaments/forms.py msgid "Comments" msgstr "Komen" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:61 +#: tournaments/forms.py msgid "Open" msgstr "" -#: tournaments/forms.py:86 +#: tournaments/forms.py msgid "Format Configuration" msgstr "" -#: tournaments/forms.py:87 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" msgstr "" -#: tournaments/forms.py:91 +#: tournaments/forms.py msgid "Public Configuration" msgstr "" -#: tournaments/forms.py:92 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" msgstr "" -#: tournaments/forms.py:99 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" msgstr "" -#: tournaments/forms.py:195 +#: tournaments/forms.py msgid "Current preliminary round" msgstr "" -#: tournaments/forms.py:196 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" msgstr "" -#: tournaments/forms.py:208 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" msgstr "" -#: tournaments/forms.py:214 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" msgstr "" -#: tournaments/forms.py:226 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." msgstr "" -#: tournaments/forms.py:232 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." msgstr "" -#: tournaments/forms.py:267 +#: tournaments/forms.py #, python-format msgid "%(name)s (%(abbreviation)s)" msgstr "" -#: tournaments/mixins.py:109 +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." msgstr "" -#: tournaments/mixins.py:117 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." msgstr "" -#: tournaments/mixins.py:130 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." msgstr "" -#: tournaments/mixins.py:137 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." msgstr "" -#: tournaments/mixins.py:236 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" msgstr "" -#: tournaments/mixins.py:437 +#: tournaments/mixins.py msgid "Return to Draw" msgstr "" -#: tournaments/models.py:26 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." msgstr "" -#: tournaments/models.py:33 tournaments/models.py:320 +#: tournaments/models.py msgid "name" msgstr "" -#: tournaments/models.py:34 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" msgstr "" -#: tournaments/models.py:36 +#: tournaments/models.py msgid "short name" msgstr "" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" msgstr "" -#: tournaments/models.py:39 tournaments/models.py:314 +#: tournaments/models.py msgid "sequence number" msgstr "" -#: tournaments/models.py:40 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." msgstr "" -#: tournaments/models.py:42 +#: tournaments/models.py msgid "slug" msgstr "" -#: tournaments/models.py:43 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" msgstr "" -#: tournaments/models.py:44 +#: tournaments/models.py msgid "active" msgstr "" -#: tournaments/models.py:47 tournaments/models.py:313 +#: tournaments/models.py msgid "tournament" msgstr "pertandingan" -#: tournaments/models.py:48 +#: tournaments/models.py msgid "tournaments" msgstr "" -#: tournaments/models.py:285 +#: tournaments/models.py msgid "Random" msgstr "" -#: tournaments/models.py:286 +#: tournaments/models.py msgid "Manual" msgstr "" -#: tournaments/models.py:287 +#: tournaments/models.py msgid "Round-robin" msgstr "" -#: tournaments/models.py:288 +#: tournaments/models.py msgid "Power-paired" msgstr "" -#: tournaments/models.py:289 tournaments/models.py:296 +#: tournaments/models.py msgid "Elimination" msgstr "" -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Preliminary" msgstr "" -#: tournaments/models.py:305 +#: tournaments/models.py msgid "None" msgstr "" -#: tournaments/models.py:306 +#: tournaments/models.py msgid "Draft" msgstr "" -#: tournaments/models.py:307 +#: tournaments/models.py msgid "Confirmed" msgstr "" -#: tournaments/models.py:308 +#: tournaments/models.py msgid "Released" msgstr "" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" msgstr "" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "completed" msgstr "" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" msgstr "" -#: tournaments/models.py:320 +#: tournaments/models.py msgid "e.g. \"Round 1\"" msgstr "" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "abbreviation" msgstr "" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "e.g. \"R1\"" msgstr "" -#: tournaments/models.py:323 +#: tournaments/models.py msgid "stage" msgstr "" -#: tournaments/models.py:324 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" msgstr "" -#: tournaments/models.py:326 +#: tournaments/models.py msgid "draw type" msgstr "" -#: tournaments/models.py:327 +#: tournaments/models.py msgid "Which draw method to use" msgstr "" -#: tournaments/models.py:330 +#: tournaments/models.py msgid "break category" msgstr "" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "If elimination round, which break category" msgstr "" -#: tournaments/models.py:334 +#: tournaments/models.py msgid "draw status" msgstr "" -#: tournaments/models.py:335 +#: tournaments/models.py msgid "The status of this round's draw" msgstr "" -#: tournaments/models.py:338 +#: tournaments/models.py msgid "feedback weight" msgstr "" -#: tournaments/models.py:340 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." msgstr "" #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:343 +#: tournaments/models.py msgid "silent" msgstr "" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." msgstr "" -#: tournaments/models.py:346 +#: tournaments/models.py msgid "motions released" msgstr "" -#: tournaments/models.py:347 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" msgstr "" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "starts at" msgstr "" -#: tournaments/models.py:351 +#: tournaments/models.py msgid "weight" msgstr "" -#: tournaments/models.py:352 +#: tournaments/models.py msgid "A factor for the points received in the round. For example, if 2, all points are doubled." msgstr "" -#: tournaments/models.py:355 +#: tournaments/models.py msgid "round" msgstr "pusingan" -#: tournaments/models.py:356 +#: tournaments/models.py msgid "rounds" msgstr "" -#: tournaments/models.py:369 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:372 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:377 +#: tournaments/models.py msgid "Elimination rounds must have a break category." msgstr "" -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" msgstr "" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" msgstr "" -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" msgstr "" -#: tournaments/templates/blank_site_start.html:7 -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" msgstr "" -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." msgstr "" -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." msgstr "" -#: tournaments/templates/blank_site_start.html:32 +#: tournaments/templates/blank_site_start.html msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." msgstr "" -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" msgstr "" -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" msgstr "" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." msgstr "" -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." msgstr "" -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" msgstr "" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." msgstr "" -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" msgstr "" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." msgstr "" -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" msgstr "" -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" msgstr "" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." msgstr "" -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." msgstr "" -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." msgstr "" -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." msgstr "" -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" msgstr "" -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" +msgid "Teams on %(side)s" msgstr "" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" msgstr "" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." msgstr "" -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." msgstr "" -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" msgstr "" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:203 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" msgstr "" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" msgstr "" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" msgstr "" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" msgstr "" -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" msgstr "" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" msgstr "" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" msgstr "" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" msgstr "" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" msgstr "" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" msgstr "" -#: tournaments/templates/public_tournament_index.html:188 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Enter Ballot for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:195 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" msgstr "" -#: tournaments/templates/public_tournament_index.html:217 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" msgstr "" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" msgstr "" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" msgstr "" -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." msgstr "" -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" msgstr "" -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" msgstr "" -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" msgstr "" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" msgstr "" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" msgstr "" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" msgstr "" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." msgstr[0] "" -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" msgstr "" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." msgstr[0] "" -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " msgstr "" -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "" -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" msgstr "" -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" msgstr "" -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "" -#: tournaments/templates/set_round_weights.html:4 -#: tournaments/templates/set_round_weights.html:5 +#: tournaments/templates/set_round_weights.html msgctxt "page title" -msgid "Set Round Weights" +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: tournaments/templates/set_round_weights.html:8 +#: tournaments/templates/set_round_weights.html msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." msgstr "" -#: tournaments/templates/set_round_weights.html:41 +#: tournaments/templates/set_round_weights.html msgctxt "button" msgid "Set weights" msgstr "" -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:47 -msgid "Inactive Tournaments" -msgstr "" - -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/site_index.html msgid "Welcome!" msgstr "" -#: tournaments/templates/site_index.html:21 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" msgstr "" -#: tournaments/templates/site_index.html:30 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:34 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:55 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html msgid "New Tournament" msgstr "" -#: tournaments/templates/site_index.html:58 +#: tournaments/templates/site_index.html msgid "Edit Database Area" msgstr "" -#: tournaments/templates/site_index.html:61 +#: tournaments/templates/site_index.html msgid "Send a Test Email" msgstr "" -#: tournaments/templates/site_index.html:64 +#: tournaments/templates/site_index.html msgid "Import DebateXML" msgstr "" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Get API Token / Change Password (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:77 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:83 +#: tournaments/templates/site_index.html msgid "Log In as Admin" msgstr "" -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." msgstr "" -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" msgstr "" -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." msgstr "" #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." msgstr "" -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." msgstr "" -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" +msgid "Mark participants as available to prepare a draw for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" +msgid "Go to the results area to enter ballots for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:74 +#: tournaments/templates/tournament_index.html msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." msgstr "" -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" msgstr "" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" msgstr "" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" msgstr "" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" msgstr "" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" msgstr "" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" msgstr "" -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" msgstr "" -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" msgstr "" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" msgstr "" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" msgstr "" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" msgstr "" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" msgstr "" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" msgstr "" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" msgstr "" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" msgstr "" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" msgstr "" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" msgstr "" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" msgstr "" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" msgstr "" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" msgstr "" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" msgstr "" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" msgstr "" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" msgstr "" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" msgstr "" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" msgstr "" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" msgstr "" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" msgstr "" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" msgstr "" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" msgstr "" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" msgstr "" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" msgstr "" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" msgstr "" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" msgstr "" -#: tournaments/views.py:151 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" msgstr "" -#: tournaments/views.py:157 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." msgstr "" -#: tournaments/views.py:170 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." msgstr "" -#: tournaments/views.py:176 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." msgstr "" -#: tournaments/views.py:184 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" msgstr "" -#: tournaments/views.py:201 +#: tournaments/views.py msgid "8-team generic dataset" msgstr "" -#: tournaments/views.py:202 +#: tournaments/views.py msgid "24-team Australs dataset" msgstr "" -#: tournaments/views.py:203 +#: tournaments/views.py msgid "88-team BP dataset" msgstr "" -#: tournaments/views.py:288 -msgid "Successfully set round weights." +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." msgstr "" diff --git a/tabbycat/utils/locale/ms/LC_MESSAGES/django.po b/tabbycat/utils/locale/ms/LC_MESSAGES/django.po index 1e1f46a4e9c..e1d173a110b 100644 --- a/tabbycat/utils/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:54\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -18,303 +18,310 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "Email address" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "" + +#: utils/admin.py +msgid "Speaker" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "" + +#: utils/admin.py +msgid "Confirmed" msgstr "" -#: utils/tables.py:47 +#: utils/admin.py +msgid "Adjudicator" +msgstr "" + +#: utils/tables.py msgid "No Data Available" msgstr "" -#: utils/tables.py:155 utils/tables.py:156 +#: utils/tables.py msgid "Ⓒ" msgstr "" -#: utils/tables.py:157 +#: utils/tables.py msgid "Ⓣ" msgstr "" -#: utils/tables.py:161 +#: utils/tables.py msgid "chair" msgstr "Yang Di-Pertua Dewan" -#: utils/tables.py:162 +#: utils/tables.py msgid "panellist" msgstr "ahli panel" -#: utils/tables.py:163 +#: utils/tables.py msgid "trainee" msgstr "trainee" -#: utils/tables.py:166 +#: utils/tables.py msgid "—" msgstr "" -#: utils/tables.py:167 +#: utils/tables.py msgid "Redacted" msgstr "" -#: utils/tables.py:231 utils/tables.py:237 +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" msgstr "" -#: utils/tables.py:247 utils/tables.py:252 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" msgstr "" -#: utils/tables.py:274 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" msgstr "" -#: utils/tables.py:276 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" msgstr "" -#: utils/tables.py:296 +#: utils/tables.py #, python-format msgid "%(team)s won" msgstr "" -#: utils/tables.py:301 +#: utils/tables.py #, python-format msgid "%(team)s lost" msgstr "" -#: utils/tables.py:306 utils/tables.py:318 utils/tables.py:342 +#: utils/tables.py #, python-format msgid "%(team)s—no result" msgstr "" -#: utils/tables.py:323 +#: utils/tables.py #, python-format msgid "%(team)s placed %(place)s" msgstr "" -#: utils/tables.py:332 +#: utils/tables.py #, python-format msgid "%(team)s is advancing" msgstr "" -#: utils/tables.py:337 +#: utils/tables.py #, python-format msgid "%(team)s was eliminated" msgstr "" -#: utils/tables.py:350 +#: utils/tables.py msgid "View/edit debate ballot" msgstr "" -#: utils/tables.py:356 +#: utils/tables.py msgid "View debate ballot" msgstr "" -#: utils/tables.py:369 +#: utils/tables.py #, python-format msgid " vs %(opposition)s" msgstr "" -#: utils/tables.py:376 +#: utils/tables.py #, python-format msgid "Won against %(team)s" msgstr "" -#: utils/tables.py:378 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" msgstr "" -#: utils/tables.py:380 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" msgstr "" -#: utils/tables.py:405 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" msgstr "" -#: utils/tables.py:412 +#: utils/tables.py msgid "Teams in debate:" msgstr "" -#: utils/tables.py:415 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "" -#: utils/tables.py:416 utils/tables.py:420 utils/tables.py:446 -#: utils/tables.py:618 +#: utils/tables.py msgid "??" msgstr "" -#: utils/tables.py:434 +#: utils/tables.py msgid "advancing" msgstr "" -#: utils/tables.py:435 +#: utils/tables.py msgid "Advancing" msgstr "" -#: utils/tables.py:437 +#: utils/tables.py msgid "eliminated" msgstr "disingkir" -#: utils/tables.py:438 +#: utils/tables.py msgid "Eliminated" msgstr "" -#: utils/tables.py:441 utils/tables.py:451 +#: utils/tables.py msgid "No result for debate" msgstr "" -#: utils/tables.py:448 +#: utils/tables.py #, python-format msgid "Placed %(place)s" msgstr "" -#: utils/tables.py:463 -msgid "Tournament" -msgstr "" - -#: utils/tables.py:472 -msgid "Round" -msgstr "" - -#: utils/tables.py:495 utils/tables.py:672 +#: utils/tables.py msgid "Name" msgstr "" -#: utils/tables.py:501 utils/tables.py:650 +#: utils/tables.py msgid "Institution" msgstr "" -#: utils/tables.py:507 +#: utils/tables.py msgid "Member of the Adjudication Core" msgstr "" -#: utils/tables.py:514 +#: utils/tables.py msgid "Independent Adjudicator" msgstr "" -#: utils/tables.py:522 +#: utils/tables.py msgid "Always Trainee" msgstr "" -#: utils/tables.py:557 +#: utils/tables.py msgid "in minority" msgstr "" -#: utils/tables.py:590 +#: utils/tables.py msgid "Debate Adjudicators" msgstr "" -#: utils/tables.py:621 -msgid "Motion" -msgstr "" - -#: utils/tables.py:636 -msgid "Team" -msgstr "" - -#: utils/tables.py:641 utils/tables.py:694 +#: utils/tables.py msgid "Categories" msgstr "" -#: utils/tables.py:692 +#: utils/tables.py msgid "Category" msgstr "" -#: utils/tables.py:719 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." msgstr "" -#: utils/tables.py:721 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." msgstr "" -#: utils/tables.py:736 +#: utils/tables.py msgid "Room" msgstr "Bilik" -#: utils/tables.py:754 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" msgstr[0] "" -#: utils/tables.py:760 +#: utils/tables.py msgid "Teams are from the same institution" msgstr "" -#: utils/tables.py:766 +#: utils/tables.py msgid "Conflicts/Flags" msgstr "" -#: utils/tables.py:819 +#: utils/tables.py msgid "The confirmed ballot" msgstr "" -#: utils/tables.py:824 utils/tables.py:849 +#: utils/tables.py msgid "No ballot" msgstr "" -#: utils/tables.py:826 utils/tables.py:851 +#: utils/tables.py msgid "No scores" msgstr "" -#: utils/tables.py:829 utils/tables.py:854 utils/tables.py:866 +#: utils/tables.py msgid "View Ballot" msgstr "" -#: utils/tables.py:836 +#: utils/tables.py msgid "The ballot you submitted" msgstr "" -#: utils/tables.py:840 +#: utils/tables.py msgid "View/Edit Ballot" msgstr "" -#: utils/tables.py:874 +#: utils/tables.py msgid "Result" msgstr "" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:880 +#: utils/tables.py msgid "TBC" msgstr "" -#: utils/tables.py:881 -msgid "Side" -msgstr "" - -#: utils/tables.py:919 -msgid "Team iron-manned this round and the last." +#: utils/tables.py +msgid "Team iron-personed this round and the last." msgstr "" -#: utils/tables.py:922 -msgid "Team iron-manned this round." +#: utils/tables.py +msgid "Team iron-personed this round." msgstr "" -#: utils/tables.py:925 -msgid "Team iron-manned last round." +#: utils/tables.py +msgid "Team iron-personed last round." msgstr "" -#: utils/tables.py:942 utils/tables.py:943 +#: utils/tables.py #, python-format msgid "Team %(num)d" msgstr "" -#: utils/tables.py:950 +#: utils/tables.py msgid "Postpone" msgstr "" -#: utils/views.py:38 +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." msgstr "" diff --git a/tabbycat/venues/locale/ms/LC_MESSAGES/django.po b/tabbycat/venues/locale/ms/LC_MESSAGES/django.po index edfede57476..a79cbeecd23 100644 --- a/tabbycat/venues/locale/ms/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/ms/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-05 15:26-0300\n" -"PO-Revision-Date: 2020-07-10 07:04\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" "Last-Translator: philip_tc\n" "Language-Team: Malay\n" "Language: ms_MY\n" @@ -18,203 +18,201 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 +#: venues/apps.py msgid "Rooms" msgstr "Bilik" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." msgstr "" -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." msgstr "" -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." msgstr "" -#: venues/models.py:9 venues/models.py:66 +#: venues/models.py msgid "name" msgstr "" -#: venues/models.py:11 venues/models.py:120 +#: venues/models.py msgid "priority" msgstr "" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" msgstr "" -#: venues/models.py:15 venues/models.py:78 +#: venues/models.py msgid "tournament" msgstr "pertandingan" -#: venues/models.py:16 +#: venues/models.py msgid "URL" msgstr "" -#: venues/models.py:17 +#: venues/models.py msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" msgstr "" -#: venues/models.py:24 +#: venues/models.py msgid "room" msgstr "bilik" -#: venues/models.py:25 venues/models.py:76 +#: venues/models.py msgid "rooms" msgstr "bilik" -#: venues/models.py:61 +#: venues/models.py msgid "Don't display in room name" msgstr "" -#: venues/models.py:62 +#: venues/models.py msgid "Display as prefix" msgstr "" -#: venues/models.py:63 +#: venues/models.py msgid "Display as suffix" msgstr "" -#: venues/models.py:67 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." msgstr "" -#: venues/models.py:71 +#: venues/models.py msgid "description" msgstr "" -#: venues/models.py:72 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." msgstr "" -#: venues/models.py:82 +#: venues/models.py msgid "display in room name" msgstr "" -#: venues/models.py:83 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" msgstr "" -#: venues/models.py:85 +#: venues/models.py msgid "display in public tooltip" msgstr "" -#: venues/models.py:86 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." msgstr "" -#: venues/models.py:90 +#: venues/models.py msgid "room category" msgstr "" -#: venues/models.py:91 +#: venues/models.py msgid "room categories" msgstr "" -#: venues/models.py:119 +#: venues/models.py msgid "category" msgstr "" -#: venues/models.py:123 +#: venues/models.py msgid "subject content type" msgstr "" -#: venues/models.py:126 +#: venues/models.py msgid "subject ID" msgstr "" -#: venues/models.py:132 +#: venues/models.py msgid "room constraint" msgstr "" -#: venues/models.py:133 +#: venues/models.py msgid "room constraints" msgstr "" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" msgstr "" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." msgstr "" -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." msgstr "" -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" msgstr "" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" msgstr "" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." msgstr "" -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" msgstr "" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" msgstr "" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" msgstr "" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" msgstr "" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" msgstr "" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" msgstr "" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" msgstr[0] "" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." msgstr "" -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" msgstr "" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" msgstr "" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." From b5c579bb572e6093b7dd8fb80c599f1eb458cf3a Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Sun, 5 Feb 2023 11:56:27 +1100 Subject: [PATCH 217/255] New translations django.po (Portuguese) --- .../actionlog/locale/pt/LC_MESSAGES/django.po | 156 ++-- .../locale/pt/LC_MESSAGES/django.po | 199 +++-- .../locale/pt/LC_MESSAGES/django.po | 452 +++++----- .../locale/pt/LC_MESSAGES/django.po | 164 ++-- .../breakqual/locale/pt/LC_MESSAGES/django.po | 250 +++--- tabbycat/draw/locale/pt/LC_MESSAGES/django.po | 604 +++++++------ .../importer/locale/pt/LC_MESSAGES/django.po | 223 +++-- tabbycat/locale/pt/LC_MESSAGES/django.po | 476 +++++----- .../motions/locale/pt/LC_MESSAGES/django.po | 193 +++-- .../locale/pt/LC_MESSAGES/django.po | 196 +++-- .../options/locale/pt/LC_MESSAGES/django.po | 813 +++++++++--------- .../locale/pt/LC_MESSAGES/django.po | 493 ++++++----- .../printing/locale/pt/LC_MESSAGES/django.po | 59 +- .../locale/pt/LC_MESSAGES/django.po | 85 +- .../results/locale/pt/LC_MESSAGES/django.po | 538 ++++++------ .../standings/locale/pt/LC_MESSAGES/django.po | 311 ++++--- .../locale/pt/LC_MESSAGES/django.po | 514 ++++++----- .../utils/locale/pt/LC_MESSAGES/django.po | 189 ++-- .../venues/locale/pt/LC_MESSAGES/django.po | 100 ++- 19 files changed, 2975 insertions(+), 3040 deletions(-) diff --git a/tabbycat/actionlog/locale/pt/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/pt/LC_MESSAGES/django.po index 8f5c2501fdf..a4edbc480ba 100644 --- a/tabbycat/actionlog/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:08\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -17,307 +17,307 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" msgstr "Log de ação" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" msgstr "Conjunto de cédulas descartado" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" msgstr "Conjunto de cédulas inserido" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" msgstr "Conjunto de cédulas criado" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" msgstr "Conjunto de cédulas editado" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" msgstr "Conjunto de cédulas confirmado" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" msgstr "Conjunto de cédulas submetido a partir do formulário público" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" msgstr "Feedback submetido a partir do formulário público" -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" msgstr "Feedback salvo" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" msgstr "" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" msgstr "Definir nota do juiz" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" msgstr "Alocação dos juízes salva" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" msgstr "Juízes alocados automaticamente" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" msgstr "Edição manual de local salva" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" msgstr "Locais alocados automaticamente" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" msgstr "Categorias de locais editadas" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" msgstr "Restrições de locais editadas" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" msgstr "Sorteio criado" -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" msgstr "Sorteio confirmado" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" msgstr "Novo sorteio gerado" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" msgstr "Sorteio liberado" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" msgstr "Sorteio não liberado" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" msgstr "" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" msgstr "" -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "" -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" msgstr "" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" msgstr "" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" msgstr "" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" msgstr "" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" msgstr "" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" msgstr "" -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" msgstr "" -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" msgstr "" -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" msgstr "" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" msgstr "" -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" msgstr "" -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" msgstr "" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" msgstr "" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" msgstr "" -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" msgstr "" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" msgstr "" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" msgstr "" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" msgstr "" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" msgstr "" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" msgstr "" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" msgstr "" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" msgstr "" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" msgstr "" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" msgstr "" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" msgstr "" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" msgstr "" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" msgstr "" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" msgstr "" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" msgstr "" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" msgstr "" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" msgstr "" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" msgstr "" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" msgstr "" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" msgstr "" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" msgstr "" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" msgstr "" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" msgstr "" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" msgstr "" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" msgstr "" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" msgstr "tipo" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" msgstr "marca de tempo" -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "usuário" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "torneio" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "rodada" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" msgstr "" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" msgstr "" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" msgstr "" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" msgstr "" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." msgstr "" -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" msgstr "anônimo" diff --git a/tabbycat/adjallocation/locale/pt/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/pt/LC_MESSAGES/django.po index f33d5de3e76..45f223a23c9 100644 --- a/tabbycat/adjallocation/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:08\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -17,436 +17,435 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." msgstr "Não há juízes disponíveis. Certifique-se de que há juízes que foram marcados como estão disponíveis para esta rodada antes de serem atribuídos automaticamente." -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." msgstr[0] "" msgstr[1] "" -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." msgstr[0] "" msgstr[1] "" -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." msgstr "" -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" msgstr "" -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." msgstr "" -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." msgstr "" -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." msgstr "" -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" msgstr "Alocação dos juízes" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." msgstr "" -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." msgstr "" -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." msgstr "" -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." msgstr "" -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" msgstr[0] "" msgstr[1] "" -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." msgstr "" -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." msgstr "" -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" msgstr[0] "" msgstr[1] "" -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." msgstr "" -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." msgstr "" -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." msgstr "" -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." msgstr "" -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." msgstr "" -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." msgstr "" -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." msgstr "" -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." msgstr "" -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" msgstr "presidente" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" msgstr "juiz auxiliar" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" msgstr "aprendiz" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "debate" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "juiz" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" msgstr "tipo" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" msgstr "disponível?" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" msgstr "juiz do debate" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" msgstr "juízes do debate" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "dupla" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" msgstr "conflito entre juiz e dupla" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" msgstr "conflitos entre juiz e dupla" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "juiz 1" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "juiz 2" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" msgstr "conflito entre juízes" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" msgstr "conflitos entre juízes" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" msgstr "instituição" -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" msgstr "" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" msgstr "" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" msgstr "" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" msgstr "" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "rodada" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" msgstr "" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" msgstr "" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" msgstr "" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" msgstr "" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" msgstr "" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" msgstr "" -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" msgstr "" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" msgstr "" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" msgstr "" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" msgstr "" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" msgstr "" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" msgstr "" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" msgstr "" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" msgstr "" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." msgstr "" -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" msgstr "" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." msgstr "" -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." msgstr "" -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" msgstr "" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" msgstr "" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" msgstr "" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" msgstr "" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" msgstr "" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" msgstr "" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" msgstr "" -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" msgstr "" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" msgstr "" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" msgstr "" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" msgstr "" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" msgstr "" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." msgstr "" -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" msgstr "" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" msgstr "" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." msgstr "" -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" msgstr "" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" msgstr "" -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." msgstr "" -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." msgstr "" diff --git a/tabbycat/adjfeedback/locale/pt/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/pt/LC_MESSAGES/django.po index 8c62e8a5250..1d0219d73bc 100644 --- a/tabbycat/adjfeedback/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:46\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -17,951 +17,947 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:44 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" msgstr "Escalas de números inteiros devem ter um mínimo e um máximo" -#: adjfeedback/admin.py:73 adjfeedback/admin.py:139 +#: adjfeedback/admin.py msgid "target" msgstr "alvo" -#: adjfeedback/admin.py:74 adjfeedback/admin.py:140 adjfeedback/models.py:236 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" msgstr "juiz fonte" -#: adjfeedback/admin.py:75 adjfeedback/admin.py:141 adjfeedback/models.py:238 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" msgstr "dupla fonte" -#: adjfeedback/admin.py:91 -#, python-format -msgid "%(timestamp)s (version %(version)s)" -msgstr "" - -#: adjfeedback/admin.py:96 +#: adjfeedback/admin.py msgid "Target" msgstr "Alvo" -#: adjfeedback/admin.py:97 adjfeedback/admin.py:162 +#: adjfeedback/admin.py msgid "Source" msgstr "Fonte" -#: adjfeedback/admin.py:98 +#: adjfeedback/admin.py msgid "Feedback timestamp and version" msgstr "" -#: adjfeedback/admin.py:180 +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgstr[0] "1 submissão de feedback foi marcada como confirmada. Note que isso pode ter causado com que outras submissões de feedback tenham sido marcadas como não confirmadas." msgstr[1] "%(count)d submissões de feedback foram marcadas como confirmadas. Note que isso pode ter causado com que outras submissões de feedback tenham sido marcadas como não confirmadas." -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." msgstr[0] "1 submissão de feedback não foi marcada como confirmado, provavelmente porque outras submissões de feedback conflitantes também foram marcadas como confirmadas." msgstr[1] "%(count)d submissões de feedback não foram marcadas como confirmados, provavelmente porque outras submissões de feedback conflitantes também foram marcadas como confirmadas." -#: adjfeedback/admin.py:205 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." msgstr[0] "1 submissão de feedback foi marcada como não confirmada." msgstr[1] "%(count)d submissões de feedback foram marcadas como não confirmadas." -#: adjfeedback/admin.py:215 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." msgstr[0] "1 submissão de feedback está agora como \"ignorada\"." msgstr[1] "%(count)d submissões de feedback estão agora como \"ignoradas\"." -#: adjfeedback/admin.py:225 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." msgstr[0] "1 submissão de feedback agora está como \"reconhecida\"." msgstr[1] "%(count)d submissões de feedback estão agora como \"reconhecidas\"." -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" msgstr "Avaliação de juiz" -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "chair" msgstr "presidente" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "solo" msgstr "sozinho" -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "panellist" msgstr "juiz auxiliar" -#: adjfeedback/forms.py:29 +#: adjfeedback/forms.py msgid "trainee" msgstr "aprendiz" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:57 +#: adjfeedback/forms.py msgid "Yes" msgstr "Sim" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:59 +#: adjfeedback/forms.py msgid "No" msgstr "Não" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:74 adjfeedback/forms.py:83 +#: adjfeedback/forms.py msgid "This field is required." msgstr "Este campo é obrigatório." -#: adjfeedback/forms.py:164 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" msgstr "Pontuação geral (%(min)d=pior; %(max)d=melhor)*" -#: adjfeedback/forms.py:176 +#: adjfeedback/forms.py msgid "Ignored" msgstr "Ignorado" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:228 adjfeedback/forms.py:291 +#: adjfeedback/forms.py msgid "Submitted - " msgstr "" #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:229 adjfeedback/forms.py:296 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" msgstr "%(name)s (%(adjpos)s)" -#: adjfeedback/forms.py:252 adjfeedback/forms.py:326 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "-- Juízes --" -#: adjfeedback/forms.py:269 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" msgstr "Juiz que este feedback é sobre" -#: adjfeedback/forms.py:293 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "" -#: adjfeedback/forms.py:299 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" msgstr "%(name)s (o presidente deu feedback oral)" -#: adjfeedback/forms.py:301 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" msgstr "" -#: adjfeedback/forms.py:392 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" msgstr "Esta linha (para %(adjudicator)s) não teve uma pontuação" -#: adjfeedback/forms.py:397 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" msgstr "Esta linha (para %(adjudicator)s) teve muitas colunas" -#: adjfeedback/forms.py:410 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." msgstr "Existem vários juízes chamados \"%(adjudicator)s\", então você não pode usar o importador em massa para atualizar suas pontuações. Por favor, faça isso na página Visão Geral do Feedback." -#: adjfeedback/forms.py:416 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" msgstr "Não há juiz neste torneio com o nome de \"%(adjudicator)s\"" -#: adjfeedback/forms.py:424 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" msgstr "A pontuação para %(adjudicator)s, \"%(score)s\", não é um número" -#: adjfeedback/forms.py:439 +#: adjfeedback/forms.py msgid "There were no scores to import." msgstr "Não haviam pontuações para importar." -#: adjfeedback/models.py:13 adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator" msgstr "juiz" -#: adjfeedback/models.py:16 +#: adjfeedback/models.py msgid "round" msgstr "rodada" -#: adjfeedback/models.py:17 adjfeedback/models.py:232 +#: adjfeedback/models.py msgid "score" msgstr "pontuação" -#: adjfeedback/models.py:18 +#: adjfeedback/models.py msgid "timestamp" msgstr "marca de tempo" -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score history" msgstr "" -#: adjfeedback/models.py:22 +#: adjfeedback/models.py msgid "adjudicator base score histories" msgstr "" -#: adjfeedback/models.py:30 +#: adjfeedback/models.py msgid "question" msgstr "pergunta" -#: adjfeedback/models.py:32 +#: adjfeedback/models.py msgid "feedback" msgstr "feedback" -#: adjfeedback/models.py:45 adjfeedback/models.py:55 adjfeedback/models.py:65 -#: adjfeedback/models.py:74 +#: adjfeedback/models.py msgid "answer" msgstr "resposta" -#: adjfeedback/models.py:48 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" msgstr "resposta booleana de uma avaliação de juiz" -#: adjfeedback/models.py:49 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" msgstr "respostas booleanas de uma avaliação de juiz" -#: adjfeedback/models.py:58 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" msgstr "" -#: adjfeedback/models.py:59 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" msgstr "" -#: adjfeedback/models.py:68 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" msgstr "" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" msgstr "" -#: adjfeedback/models.py:77 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" msgstr "" -#: adjfeedback/models.py:78 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" msgstr "" -#: adjfeedback/models.py:86 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answer" msgstr "" -#: adjfeedback/models.py:87 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answers" msgstr "" -#: adjfeedback/models.py:106 +#: adjfeedback/models.py msgid "checkbox" msgstr "caixa de seleção" -#: adjfeedback/models.py:107 +#: adjfeedback/models.py msgid "yes/no (dropdown)" msgstr "" -#: adjfeedback/models.py:108 +#: adjfeedback/models.py msgid "integer (textbox)" msgstr "" -#: adjfeedback/models.py:109 +#: adjfeedback/models.py msgid "integer scale" msgstr "" -#: adjfeedback/models.py:110 +#: adjfeedback/models.py msgid "float" msgstr "" -#: adjfeedback/models.py:111 adjfeedback/models.py:145 +#: adjfeedback/models.py msgid "text" msgstr "texto" -#: adjfeedback/models.py:112 +#: adjfeedback/models.py msgid "long text" msgstr "texto longo" -#: adjfeedback/models.py:113 +#: adjfeedback/models.py msgid "select one" msgstr "selecione um" -#: adjfeedback/models.py:114 +#: adjfeedback/models.py msgid "select multiple" msgstr "selecione vários" -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "tournament" msgstr "torneio" -#: adjfeedback/models.py:143 +#: adjfeedback/models.py msgid "sequence number" msgstr "número sequencial" -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" msgstr "A pergunta exibida aos participantes, por exemplo, \"Concordou com a decisão?\"" -#: adjfeedback/models.py:148 +#: adjfeedback/models.py msgid "name" msgstr "nome" -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" msgstr "Um apelido para a pergunta, por exemplo, \"Concordar com a decisão\"" -#: adjfeedback/models.py:151 +#: adjfeedback/models.py msgid "reference" msgstr "referência" -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" msgstr "Referência compatível com a programação, por exemplo, \"concordo_com_decisao\"" -#: adjfeedback/models.py:155 +#: adjfeedback/models.py msgid "from adjudicator" msgstr "do juiz" -#: adjfeedback/models.py:156 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" msgstr "Deverão ser feitas estas perguntas aos juízes (sobre outros juízes)" -#: adjfeedback/models.py:158 +#: adjfeedback/models.py msgid "from team" msgstr "das duplas" -#: adjfeedback/models.py:159 +#: adjfeedback/models.py msgid "Teams should be asked this question" msgstr "Estas perguntas devem ser feitas às duplas" -#: adjfeedback/models.py:162 +#: adjfeedback/models.py msgid "answer type" msgstr "tipo de resposta" -#: adjfeedback/models.py:164 +#: adjfeedback/models.py msgid "required" msgstr "obrigatório" -#: adjfeedback/models.py:165 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" msgstr "Se os participantes são obrigados a preencher este campo" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "minimum value" msgstr "valor mínimo" -#: adjfeedback/models.py:168 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "Valor mínimo permitido para campos numéricos (ignorado para campos de texto ou booleanos)" -#: adjfeedback/models.py:170 +#: adjfeedback/models.py msgid "maximum value" msgstr "valor máximo" -#: adjfeedback/models.py:171 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "Valor máximo permitido para campos numéricos (ignorado para campos de texto ou booleanos)" -#: adjfeedback/models.py:176 +#: adjfeedback/models.py msgid "choices" msgstr "escolhas" -#: adjfeedback/models.py:177 +#: adjfeedback/models.py msgid "Permissible choices for select one/multiple fields (ignored for other fields)" msgstr "" -#: adjfeedback/models.py:182 +#: adjfeedback/models.py msgid "adjudicator feedback question" msgstr "pergunta para a avaliação dos juízes" -#: adjfeedback/models.py:183 +#: adjfeedback/models.py msgid "adjudicator feedback questions" msgstr "perguntas para a avaliação dos juízes" -#: adjfeedback/models.py:241 adjfeedback/views.py:768 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" msgstr "ignorado" -#: adjfeedback/models.py:242 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" msgstr "Se a avaliação deve afetar a pontuação do juiz" -#: adjfeedback/models.py:246 +#: adjfeedback/models.py msgid "adjudicator feedback" msgstr "avaliação de juiz" -#: adjfeedback/models.py:247 +#: adjfeedback/models.py msgid "adjudicator feedbacks" msgstr "avaliações de juiz" -#: adjfeedback/models.py:307 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." msgstr "O juiz de origem ou a dupla de origem não foi especificada." -#: adjfeedback/models.py:310 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." msgstr "Houve tanto um juiz de origem quanto uma dupla de origem." -#: adjfeedback/models.py:312 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" msgstr "" -#: adjfeedback/models.py:314 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." msgstr "O juiz não viu este debate." -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" msgstr "Se o juiz está marcado como classificado (clique para marcar)" -#: adjfeedback/tables.py:35 +#: adjfeedback/tables.py msgid "N/A" msgstr "" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py msgid "Current weighted score" msgstr "Pontuação ponderada atualizada" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." msgstr "A classificação atual deste juiz." -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" msgstr "" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" msgstr "" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" msgstr "" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:84 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:93 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." msgstr "O desvio padrão das pontuações atuais deste juiz; com números maiores, o que significa menos resultados consistentes de avaliações de juízes." -#: adjfeedback/tables.py:97 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" msgstr "O desvio padrão dos resultados atuais deste juiz" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Feedback Per Round" msgstr "Avaliação por Rodada" -#: adjfeedback/tables.py:107 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" msgstr "Passe sobre os pontos de dados para mostrar a pontuação média recebida nessa rodada" -#: adjfeedback/tables.py:125 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" msgstr[0] "" msgstr[1] "" -#: adjfeedback/tables.py:148 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" msgstr "Cédulas de feedback não enviadas" -#: adjfeedback/tables.py:172 +#: adjfeedback/tables.py msgid "View Missing Feedback" msgstr "Visualizar avaliações faltantes" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" msgstr "De quem é esta avaliação?" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" msgstr "Inserir avaliação" -#: adjfeedback/templates/enter_feedback.html:9 -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format msgid "Add Feedback from %(name)s" msgstr "Adicionar feedback de %(name)s" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" msgstr "Adicionar feedback" -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" msgstr "Não há avaliações a serem feitas porque nenhuma rodada foi divulgada ao público. Volte quanto tiverem!" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." msgstr "Este torneio espera que você envie avaliação apenas no juiz que der o feedback. Não envie avaliações sobre outros juízes." -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." msgstr "Este torneio espera que você avalie todos os juízes na mesa (incluindo aprendizes)." -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." msgstr "Há alguns problemas com a submissão desta avaliação. Por favor, reveja e conserte-os." -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "Ao enviar este formulário, seu endereço IP será armazenado para fins de registro." -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" msgstr "Visão geral" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" msgstr "Último" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" msgstr "Não submetido" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" msgstr "Importante" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" msgstr "Comentários" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" msgstr "Por fonte" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" msgstr "Por alvo" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" msgstr "Feedback %(source_type)s%(source_name)s" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." msgstr "%(source_name)s ainda não submeteu nenhum feedback." -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." msgstr "%(source_name)s ainda não recebeu nenhuma avaliação." -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." msgstr "Isso é muito provável porque a dupla ou o juiz que enviou essa avaliação submeteu várias vezes sobre a mesma pessoa; ou porque a dupla enviou várias avaliações em múltiplos juízes (ao invés de ter enviado apenas sobre o juiz que deu o feedback)." -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." msgstr "Não confirmado; não afetará a pontuação deste juiz." -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." msgstr "A avaliação é considerado para o juiz, mas não é tido em conta para o cálculo da pontuação." -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." msgstr "Ignorado; não afetará a pontuação deste juiz." -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." msgstr "Esta avaliação foi submetida para um juiz, mas parece que ele foi removido do debate. Você provavelmente deve ir para a área de Editar Banco de Dados e excluir esta avaliação." -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." msgstr "A pontuação dada para esta parte da avaliação." -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" msgstr "%(round)s %(score)s" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "On %(adjudicator)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" -msgstr "Recebido como %(as)s" +msgid "Received as %(as_type)s" +msgstr "" -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" msgstr "De %(source)s (seus %(relationship)s)" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" msgstr "De %(source)s (%(relationship)s de %(side)s)" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" msgstr "De desconhecido" -#: adjfeedback/templates/feedback_card.html:88 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "%(time)s" -#: adjfeedback/templates/feedback_card.html:93 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" msgstr "Desfazer confirmação" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" msgstr "Confirmar" -#: adjfeedback/templates/feedback_card.html:103 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" msgstr "Desfazer o \"ignorar\"" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" msgstr "Ignorar" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" msgstr "Nenhum feedback foi submetido até agora" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" msgstr "%(c_breaking)s marcado como classificante" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." msgstr "A atual configuração de avaliaçãopermite e espera que apenas os presidentes enviem avaliações (sobre seus auxiliares e aprendizes)." -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." msgstr "" -#: adjfeedback/templates/feedback_overview.html:18 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:22 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." msgstr "A atual configuração de avaliação permite e espera que todos os juízes (incluindo os aprendizes) enviem avaliações sobre todos os outros membros da mesa (incluindo aprendizes)." -#: adjfeedback/templates/feedback_overview.html:30 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgstr[0] "Há um %(nadjs_outside_range)s juiz com a pontuação fora da margem permitida de pontuações de juízes, que atualmente é de %(min_score)s até %(max_score)s. Isso pode causar que a alocação automática de juízes aja de formas não previstas. Se você preferir utilizar uma margem mais ampla de pontuação, você pode configurar isso em configuração de avaliação." msgstr[1] "Há %(nadjs_outside_range)s juízes com pontuações fora da margem permitida de pontuações de juízes, que atualmente é de %(min_score)s até %(max_score)s. Isso pode causar que a alocação automática de juízes aja de formas não previstas. Se você preferir utilizar uma margem mais ampla de pontuação, você pode configurar isso em configuração de avaliação." -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" msgstr "Avaliação de juiz" -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" msgstr "" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" msgstr "" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" msgstr "" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" msgstr "Quem é você?" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" msgstr "Atualizar Pontuações dos Juízes" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." msgstr "Não há quaisquer juízes neste torneio, então você não pode atualizar quaisquer pontuações. Você talvez queira importar alguns juízes primeiro." -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" msgstr "Submeter" -#: adjfeedback/views.py:118 +#: adjfeedback/views.py msgid "Feedback Overview" msgstr "Visão geral do feedback" -#: adjfeedback/views.py:142 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" msgstr "Procurar feedback de um juiz" -#: adjfeedback/views.py:153 adjfeedback/views.py:177 adjfeedback/views.py:192 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" msgstr[0] "%(count)d feedback" msgstr[1] "%(count)d feedbacks" -#: adjfeedback/views.py:156 adjfeedback/views.py:182 adjfeedback/views.py:197 +#: adjfeedback/views.py msgid "Feedbacks" msgstr "Feedbacks" -#: adjfeedback/views.py:163 +#: adjfeedback/views.py msgid "Find Feedback" msgstr "Procurar feedback" -#: adjfeedback/views.py:171 adjfeedback/views.py:710 +#: adjfeedback/views.py msgid "From Teams" msgstr "Das duplas" -#: adjfeedback/views.py:186 adjfeedback/views.py:704 +#: adjfeedback/views.py msgid "From Adjudicators" msgstr "Dos juízes" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "Latest Feedback" msgstr "Último feedback" -#: adjfeedback/views.py:272 +#: adjfeedback/views.py msgid "(30 most recent)" msgstr "(30 mais recentes)" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "Only Comments" msgstr "Apenas Comentários" -#: adjfeedback/views.py:283 +#: adjfeedback/views.py msgid "(250 most recent)" msgstr "(250 mais recentes)" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "Important Feedback" msgstr "" -#: adjfeedback/views.py:295 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" msgstr "" -#: adjfeedback/views.py:362 +#: adjfeedback/views.py msgid "A Team" msgstr "Uma dupla" -#: adjfeedback/views.py:367 +#: adjfeedback/views.py msgid "Team" msgstr "Dupla" -#: adjfeedback/views.py:374 adjfeedback/views.py:391 +#: adjfeedback/views.py msgid "Institution" msgstr "Instituição" -#: adjfeedback/views.py:377 +#: adjfeedback/views.py msgid "An Adjudicator" msgstr "Um juiz" -#: adjfeedback/views.py:384 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "Juiz" -#: adjfeedback/views.py:511 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." msgstr "" -#: adjfeedback/views.py:541 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." msgstr "" -#: adjfeedback/views.py:625 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" msgstr "" -#: adjfeedback/views.py:648 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." msgstr "" -#: adjfeedback/views.py:675 +#: adjfeedback/views.py msgid "Feedback Progress" msgstr "" -#: adjfeedback/views.py:696 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" msgstr[0] "" msgstr[1] "" -#: adjfeedback/views.py:741 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." msgstr "" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "confirmed" msgstr "" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "un-confirmed" msgstr "" -#: adjfeedback/views.py:768 +#: adjfeedback/views.py msgid "un-ignored" msgstr "" -#: adjfeedback/views.py:804 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." diff --git a/tabbycat/availability/locale/pt/LC_MESSAGES/django.po b/tabbycat/availability/locale/pt/LC_MESSAGES/django.po index b02c16b9c05..889113c5ef1 100644 --- a/tabbycat/availability/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:07\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -17,298 +17,290 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" msgstr "" -#: availability/models.py:15 +#: availability/models.py msgid "content type" msgstr "" -#: availability/models.py:16 +#: availability/models.py msgid "object id" msgstr "" -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "rodada" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" msgstr "" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" msgstr "" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" msgstr "" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" msgstr "" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" msgstr "" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" msgstr "" -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" msgstr "" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" msgstr "" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." msgstr "" -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." msgstr "" -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." msgstr "" -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgstr[0] "" msgstr[1] "" -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " msgstr "" -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" msgstr "" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." msgstr "" -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" msgstr "" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" msgstr "" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" msgstr "" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" msgstr "" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" msgstr "" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" msgstr "" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" msgstr "" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" msgstr "" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" msgstr "" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." msgstr "" -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." msgstr "" -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" msgstr "" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" msgstr "" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" msgstr "" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" msgstr "" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" @@ -316,7 +308,7 @@ msgstr[0] "" msgstr[1] "" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" @@ -326,7 +318,7 @@ msgstr[1] "" #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" @@ -334,67 +326,67 @@ msgstr[0] "" msgstr[1] "" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" msgstr[0] "" msgstr[1] "" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" msgstr "" -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" msgstr "" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" msgstr "" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" msgstr "" -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" msgstr "" -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" msgstr "" -#: availability/views.py:260 +#: availability/views.py msgid "Room" msgstr "" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" msgstr "" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" msgstr "" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" msgstr "" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." msgstr "" -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." msgstr "" -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." msgstr "" -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." msgstr "" diff --git a/tabbycat/breakqual/locale/pt/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/pt/LC_MESSAGES/django.po index c6f564795a8..0c92fcccfa5 100644 --- a/tabbycat/breakqual/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:09\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -17,508 +17,506 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" msgstr "" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "" +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" +msgstr[1] "" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "torneio" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "nome" -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" msgstr "" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" msgstr "" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" msgstr "" -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" msgstr "número sequencial" -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" msgstr "" -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" msgstr "" -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" msgstr "" -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" msgstr "" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" msgstr "" -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" msgstr "" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" msgstr "" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" msgstr "" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" msgstr "" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" msgstr "" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" msgstr "" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" msgstr "" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" msgstr "" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" msgstr "" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "dupla" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" msgstr "" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" msgstr "" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" msgstr "" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" msgstr "" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" msgstr "" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" msgstr "" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" msgstr "" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" msgstr "" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" msgstr "" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" msgstr "" -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" msgstr "" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." msgstr "" -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." msgstr "" -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" msgstr "" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." msgstr "" -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" msgstr "" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " msgstr "" -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" msgstr "" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" msgstr "" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " msgstr "" -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" msgstr "" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" msgstr "" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" msgstr "" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" msgstr "" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" msgstr "" -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" msgstr "" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." msgstr "" -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." msgstr "" -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." msgstr "" -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." msgstr "" -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." msgstr "" -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." msgstr "" -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" msgstr "" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" msgstr "" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" msgstr "Visão geral" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" msgstr "" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." msgstr "" -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" msgstr "" -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" msgstr "Grande Final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" msgstr "" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "Semifinais" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "Quartas de final" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "Oitavas de final" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" msgstr "" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" msgstr "" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" msgstr "" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" msgstr "" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" msgstr "" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" msgstr "" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" msgstr "" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" msgstr "" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" msgstr "" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" msgstr "" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" msgstr "" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" msgstr "" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" msgstr "" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" msgstr "" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" msgstr "Rodada %s de classificação desconhecida" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" msgstr "Rodada de classificação desconhecida" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" msgstr "RCD" -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" msgstr "" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" msgstr "" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" msgstr "" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." msgstr "" -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." msgstr "" -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" msgstr "" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" msgstr "" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" diff --git a/tabbycat/draw/locale/pt/LC_MESSAGES/django.po b/tabbycat/draw/locale/pt/LC_MESSAGES/django.po index 05bc3c60a13..e2e67d6bbd6 100644 --- a/tabbycat/draw/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:27\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -17,1123 +17,1103 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "O debate %(count)dteve seu status configurado para %(status)s." -msgstr[1] "Os debates %(count)d tiverem seus status configurados para %(status)s." - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "Status dos resultados configurados para %(status)s" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." msgstr[0] "" msgstr[1] "" -#: draw/admin.py:93 +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." msgstr[0] "" msgstr[1] "" -#: draw/apps.py:7 draw/views.py:452 draw/views.py:455 +#: draw/apps.py draw/views.py msgid "Draw" msgstr "" -#: draw/generator/__init__.py:14 +#: draw/generator/__init__.py msgid "Too many swaps" msgstr "Muitas mudanças" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" msgstr "" -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" msgstr "" -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "Bubble up (history)" msgstr "" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble down (history)" msgstr "" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble up (institution)" msgstr "" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble down (institution)" msgstr "" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" msgstr "" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Can't bubble up/down" msgstr "" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Pull-up team" msgstr "" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." msgstr "%d dos debates da rodada anterior não têm um resultado" -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." msgstr "%d debates da rodada anterior não têm exatamente duas duplas avançando" -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." msgstr "" -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." msgstr "" -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." msgstr "" -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." msgstr "" -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." msgstr "" -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." msgstr "" -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." msgstr "" -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." msgstr "" -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." msgstr "" -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." msgstr "" -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." msgstr "" -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." msgstr "" -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." msgstr "" -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" msgstr "" -#: draw/manager.py:276 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." msgstr "" -#: draw/models.py:29 draw/models.py:35 +#: draw/models.py msgid "none" msgstr "" -#: draw/models.py:30 +#: draw/models.py msgid "postponed" msgstr "" -#: draw/models.py:31 draw/models.py:36 +#: draw/models.py msgid "draft" msgstr "" -#: draw/models.py:32 draw/models.py:37 +#: draw/models.py msgid "confirmed" msgstr "" -#: draw/models.py:43 draw/models.py:375 +#: draw/models.py msgid "round" msgstr "rodada" -#: draw/models.py:45 +#: draw/models.py msgid "room" msgstr "" -#: draw/models.py:48 +#: draw/models.py msgid "bracket" msgstr "" -#: draw/models.py:50 +#: draw/models.py msgid "room rank" msgstr "" -#: draw/models.py:56 +#: draw/models.py msgid "importance" msgstr "" -#: draw/models.py:58 +#: draw/models.py msgid "result status" msgstr "" -#: draw/models.py:60 +#: draw/models.py msgid "sides confirmed" msgstr "" -#: draw/models.py:61 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." msgstr "" -#: draw/models.py:64 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "debate" -#: draw/models.py:65 +#: draw/models.py msgid "debates" msgstr "" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:84 draw/models.py:109 +#: draw/models.py msgid " (sides not confirmed)" msgstr "" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:96 draw/models.py:113 +#: draw/models.py msgid " vs " msgstr "" -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" msgstr "" -#: draw/models.py:263 +#: draw/models.py msgid "negative" msgstr "" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" msgstr "" -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" msgstr "" -#: draw/models.py:266 +#: draw/models.py msgid "closing government" msgstr "" -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" msgstr "" -#: draw/models.py:274 draw/models.py:377 +#: draw/models.py msgid "team" msgstr "dupla" -#: draw/models.py:276 draw/models.py:379 +#: draw/models.py msgid "side" msgstr "" -#: draw/models.py:281 +#: draw/models.py msgid "debate team" msgstr "" -#: draw/models.py:282 +#: draw/models.py msgid "debate teams" msgstr "" -#: draw/models.py:303 +#: draw/models.py #, python-format msgid "placed %(place)s" msgstr "" -#: draw/models.py:305 draw/models.py:312 +#: draw/models.py msgid "result unknown" msgstr "" -#: draw/models.py:308 +#: draw/models.py msgid "won" msgstr "" -#: draw/models.py:310 +#: draw/models.py msgid "lost" msgstr "" -#: draw/models.py:383 +#: draw/models.py msgid "team side allocation" msgstr "" -#: draw/models.py:384 +#: draw/models.py msgid "team side allocations" msgstr "" #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" msgstr "" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" msgstr "" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" msgstr "" -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" msgstr "" -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" msgstr "" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" msgstr "" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" msgstr "" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" msgstr "" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" msgstr "" -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" msgstr "" -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" msgstr "" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" msgstr "" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" msgstr "" -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" msgstr "" -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" msgstr "" -#: draw/tables.py:292 +#: draw/tables.py msgid "After" msgstr "" -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" msgstr "" -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" msgstr "" -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" msgstr "" -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" msgstr "" -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" msgstr "" -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" msgstr "" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" msgstr "" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" msgstr "" -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" msgstr "" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" msgstr "" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" msgstr "" -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" msgstr "" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" msgstr "" -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" msgstr "" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" msgstr "" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" msgstr "" -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" msgstr "" -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" msgstr "" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." -msgstr "" - -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." msgstr "" -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "" +msgid_plural "Enter motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" msgstr "" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." msgstr "" -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." msgstr "" -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." msgstr "" -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" msgstr "" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." msgstr "" -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." msgstr "" -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:200 +#: draw/templates/draw_display_admin.html msgid "Release Motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:201 -msgid "Release motion to public" -msgstr "" +msgid_plural "Release Motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:202 -msgid "Unrelease motion to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." msgstr "" -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." msgstr "" -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "" - -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "" +msgid_plural "Motions have been released publicly." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" msgstr "" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" msgstr "" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" msgstr "" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" msgstr "" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" msgstr "" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" msgstr "" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" msgstr "" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" msgstr "" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" msgstr "" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" msgstr "" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" msgstr "" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" msgstr "" -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" msgstr "" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" msgstr "" -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" msgstr "" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" msgstr "" -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" msgstr "" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" msgstr "" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" msgstr "" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" msgstr "" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." msgstr "" -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." msgstr "" -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." msgstr "" -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" msgstr "" -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" msgstr "" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" msgstr "" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" msgstr "" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" msgstr "" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" msgstr "" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" msgstr "" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." msgstr "" -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." msgstr "" -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " msgstr "" -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." msgstr "" -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." msgstr "" -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." msgstr "" -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." msgstr "" -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." msgstr "" -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." msgstr "" -#: draw/views.py:68 draw/views.py:483 +#: draw/views.py msgid "No debates in this round" msgstr "" -#: draw/views.py:76 +#: draw/views.py #, python-format msgid "Draw for %(round)s" msgstr "" -#: draw/views.py:78 +#: draw/views.py msgid "Draws for Current Rounds" msgstr "" -#: draw/views.py:82 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" msgstr "" -#: draw/views.py:86 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" msgstr "" -#: draw/views.py:124 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" msgstr[0] "" msgstr[1] "" -#: draw/views.py:171 +#: draw/views.py msgid "The draw for this round hasn't been released." msgstr "" -#: draw/views.py:224 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" msgstr "" -#: draw/views.py:382 +#: draw/views.py msgid "Adjudicator Assignments" msgstr "" -#: draw/views.py:404 +#: draw/views.py msgid "Position" msgstr "" -#: draw/views.py:424 +#: draw/views.py msgid "Team Pairings" msgstr "" -#: draw/views.py:447 +#: draw/views.py msgid "No Draw" msgstr "" -#: draw/views.py:449 +#: draw/views.py msgid "Draft Draw" msgstr "" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:541 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" msgstr "" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:546 +#: draw/views.py msgid "BR" msgstr "" -#: draw/views.py:571 +#: draw/views.py msgid "Draw with Details" msgstr "" -#: draw/views.py:579 +#: draw/views.py msgid "Position Balance Report" msgstr "" -#: draw/views.py:590 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" msgstr "" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:593 +#: draw/views.py msgid " (i.e., Shannon entropy)" msgstr "" -#: draw/views.py:623 +#: draw/views.py msgid "Teams with position imbalances" msgstr "" -#: draw/views.py:624 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" msgstr "" -#: draw/views.py:627 +#: draw/views.py msgid "Annotated draw" msgstr "" -#: draw/views.py:658 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" msgstr "" -#: draw/views.py:666 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " msgstr "" -#: draw/views.py:674 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " msgstr "" -#: draw/views.py:683 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " msgstr "" -#: draw/views.py:699 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "" -#: draw/views.py:726 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "" -#: draw/views.py:746 +#: draw/views.py msgid "Released the draw." msgstr "" -#: draw/views.py:761 +#: draw/views.py msgid "Unreleased the draw." msgstr "" -#: draw/views.py:774 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." msgstr "" -#: draw/views.py:793 +#: draw/views.py msgid "Side Pre-Allocations" msgstr "" -#: draw/views.py:826 +#: draw/views.py msgid "Edit Matchups" msgstr "" diff --git a/tabbycat/importer/locale/pt/LC_MESSAGES/django.po b/tabbycat/importer/locale/pt/LC_MESSAGES/django.po index 3674d5f7de6..e3be774b929 100644 --- a/tabbycat/importer/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:46\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -17,416 +17,405 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" msgstr "" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" msgstr "" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" msgstr "" -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." msgstr "" -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." msgstr "" -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" msgstr "" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" msgstr "" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" msgstr "" -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" msgstr "" -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" msgstr "" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" msgstr "" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" msgstr "" -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" msgstr "" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" msgstr "" -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" msgstr "" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." msgstr "" -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." msgstr "" -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." msgstr "" -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." msgstr "" -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" msgstr "" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." msgstr "" -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" msgstr "" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:396 +#: importer/forms.py msgid "XML" msgstr "" -#: importer/forms.py:397 +#: importer/forms.py msgid "The Debate XML archive to parse" msgstr "" -#: importer/templates/archive_export_index.html:4 -#: importer/templates/archive_export_index.html:5 +#: importer/templates/archive_export_index.html msgid "Export Tournament Archive" msgstr "" -#: importer/templates/archive_export_index.html:9 +#: importer/templates/archive_export_index.html msgid "Tournaments can be exported in an XML format for use outside Tabbycat." msgstr "" -#: importer/templates/archive_export_index.html:17 +#: importer/templates/archive_export_index.html msgid "Export all data" msgstr "" -#: importer/templates/archive_importer.html:6 -#: importer/templates/archive_importer.html:18 +#: importer/templates/archive_importer.html msgctxt "page title" msgid "Import Tournament Archive" msgstr "" -#: importer/templates/archive_importer.html:19 +#: importer/templates/archive_importer.html msgid "This form will create a tournament with the data provided as a Debate XML format." msgstr "" -#: importer/templates/archive_importer.html:24 +#: importer/templates/archive_importer.html msgid "Import" msgstr "" -#: importer/templates/archive_importer.html:25 +#: importer/templates/archive_importer.html msgid "Go back to the site home page" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html msgctxt "page title" msgid "Add Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" msgstr "" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" msgstr "" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." msgstr "" -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" msgstr "" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" msgstr "" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" msgstr "" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" msgstr "" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" msgstr "" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" msgstr "" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:66 +#: importer/templates/simple_import_index.html msgid "Add/Edit Break Categories" msgstr "" -#: importer/templates/simple_import_index.html:70 +#: importer/templates/simple_import_index.html msgid "Add/Edit Speaker Categories" msgstr "" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" msgstr "" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" msgstr "" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" msgstr "" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" msgstr "" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" msgstr "" -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" msgstr "" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" msgstr "" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." msgstr "" -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" msgstr "" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" msgstr "" -#: importer/views.py:108 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." msgstr[0] "" msgstr[1] "" -#: importer/views.py:129 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." msgstr[0] "" msgstr[1] "" -#: importer/views.py:188 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." msgstr[0] "" msgstr[1] "" -#: importer/views.py:209 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "" -#: importer/views.py:214 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." msgstr[0] "" msgstr[1] "" -#: importer/views.py:230 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " msgstr "" -#: importer/views.py:238 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." msgstr "" -#: importer/views.py:256 +#: importer/views.py msgid "Tournament archive has been imported." msgstr "" diff --git a/tabbycat/locale/pt/LC_MESSAGES/django.po b/tabbycat/locale/pt/LC_MESSAGES/django.po index cec9280ba51..436d4dead0c 100644 --- a/tabbycat/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -17,940 +17,940 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" msgstr "" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:105 +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" msgstr "" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" msgstr "" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" msgstr "" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" msgstr "" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." msgstr "" -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" msgstr "" -#: checkins/models.py:37 +#: checkins/models.py msgid "" msgstr "" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" msgstr "" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" msgstr "" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" msgstr "" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "debate" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" msgstr "" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" msgstr "" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" msgstr "" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" msgstr "" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" msgstr "" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" msgstr "" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "torneio" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" msgstr "" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" msgstr "" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" msgstr "" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." msgstr "" -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." msgstr "" -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." msgstr "" -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" msgstr "" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" msgstr "" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" msgstr "" -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." msgstr "" -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." msgstr "" -#: checkins/views.py:30 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" msgstr "" -#: checkins/views.py:63 +#: checkins/views.py msgid "People's Check-In Statuses" msgstr "" -#: checkins/views.py:120 +#: checkins/views.py msgid "Rooms' Check-In Statuses" msgstr "" -#: checkins/views.py:169 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" msgstr "" -#: checkins/views.py:176 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" msgstr "" -#: checkins/views.py:181 templates/nav/public_nav.html:145 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "" -#: checkins/views.py:186 +#: checkins/views.py msgid "Rooms" msgstr "" -#: checkins/views.py:227 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" msgstr "" -#: checkins/views.py:234 +#: checkins/views.py msgid "Identifiers" msgstr "" -#: checkins/views.py:272 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." msgstr "" -#: checkins/views.py:280 +#: checkins/views.py msgid "You have revoked your check-in." msgstr "" -#: checkins/views.py:282 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." msgstr "" -#: checkins/views.py:286 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." msgstr "" -#: checkins/views.py:293 +#: checkins/views.py msgid "You are now checked in." msgstr "" -#: settings/core.py:67 +#: settings/core.py msgid "Arabic" msgstr "Árabe" -#: settings/core.py:68 +#: settings/core.py msgid "Bengali" msgstr "" -#: settings/core.py:69 +#: settings/core.py msgid "English" msgstr "Inglês" -#: settings/core.py:70 +#: settings/core.py msgid "Spanish" msgstr "Espanhol" -#: settings/core.py:71 +#: settings/core.py msgid "French" msgstr "Francês" -#: settings/core.py:72 +#: settings/core.py msgid "Indonesian" msgstr "" -#: settings/core.py:73 +#: settings/core.py msgid "Japanese" msgstr "Japonês" -#: settings/core.py:74 +#: settings/core.py msgid "Malay" msgstr "" -#: settings/core.py:75 +#: settings/core.py msgid "Portuguese" msgstr "Português" -#: settings/core.py:76 +#: settings/core.py msgid "Russian" msgstr "Russo" -#: settings/core.py:77 +#: settings/core.py msgid "Simplified Chinese" msgstr "" -#: settings/core.py:78 +#: settings/core.py msgid "Translation" msgstr "" -#: templates/admin/delete_protected_message.html:4 +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." msgstr "" -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." msgstr "" -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." msgstr "" -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" msgstr "" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" msgstr "" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" msgstr "" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" msgstr "" -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." msgstr "" -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" msgstr "" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" msgstr "" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." msgstr "" -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgstr[0] "" msgstr[1] "" -#: templates/errors/legacy_sendgrid_warning.html:11 +#: templates/errors/legacy_sendgrid_warning.html msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." msgstr "" -#: templates/errors/public_403.html:14 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." msgstr "" -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." msgstr "" -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." msgstr "" -#: templates/footer.html:24 +#: templates/footer.html #, python-format msgid "For a tournament of this size, we suggest a donation of $%(amount)s." msgstr "" -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." msgstr "" -#: templates/footer.html:31 +#: templates/footer.html msgid "Donations to Tabbycat from individuals or organisations are much appreciated." msgstr "" -#: templates/footer.html:39 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" msgstr "" -#: templates/footer.html:41 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." msgstr "" -#: templates/footer.html:50 +#: templates/footer.html msgid "Our Organisation" msgstr "" -#: templates/footer.html:52 -msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." msgstr "" -#: templates/footer.html:65 +#: templates/footer.html msgid "Language" msgstr "Idioma" -#: templates/footer.html:72 +#: templates/footer.html msgid "GitHub" msgstr "" -#: templates/footer.html:78 +#: templates/footer.html msgid "Documentation" msgstr "" -#: templates/footer.html:84 +#: templates/footer.html msgid "Support" msgstr "" -#: templates/footer.html:90 +#: templates/footer.html msgid "Facebook" msgstr "" -#: templates/footer.html:96 +#: templates/footer.html msgid "Set Up A Copy" msgstr "" -#: templates/footer.html:110 +#: templates/footer.html msgid "Change Language" msgstr "" -#: templates/footer.html:127 +#: templates/footer.html msgid "Use this language" msgstr "" -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" msgstr "" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" msgstr "" -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" msgstr "Novo Torneio" -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" msgstr "" -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" msgstr "" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" msgstr "" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" msgstr "" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" msgstr "Visão geral" -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" msgstr "" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" msgstr "" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" msgstr "" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:175 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" msgstr "" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" msgstr "" -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" msgstr "" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" msgstr "" -#: templates/nav/admin_nav.html:97 +#: templates/nav/admin_nav.html msgid "Export XML" msgstr "" -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:160 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" msgstr "" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" msgstr "" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" msgstr "" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" msgstr "Avaliação de juiz" -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" msgstr "Último" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" msgstr "Importante" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" msgstr "Comentários" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" msgstr "" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" msgstr "" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" msgstr "Não submetido" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" msgstr "Adicionar feedback" -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" msgstr "" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:165 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" msgstr "" -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" msgstr "" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" msgstr "" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" msgstr "" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" msgstr "" -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" msgstr "" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:155 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:170 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" msgstr "" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" msgstr "" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" msgstr "" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" msgstr "" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" msgstr "" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" msgstr "" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" msgstr "" -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:211 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" msgstr "Inserir avaliação" -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" msgstr "" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:180 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" msgstr "" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" msgstr "" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" msgstr "" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" msgstr "" -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" msgstr "" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" msgstr "" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" msgstr "" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" msgstr "" -#: templates/nav/public_nav.html:53 templates/nav/public_nav.html:62 +#: templates/nav/public_nav.html msgid "Motions Tab" msgstr "" -#: templates/nav/public_nav.html:56 +#: templates/nav/public_nav.html msgid "By round" msgstr "" -#: templates/nav/public_nav.html:57 +#: templates/nav/public_nav.html msgid "Globally" msgstr "" -#: templates/nav/public_nav.html:72 +#: templates/nav/public_nav.html msgid "Draws" msgstr "" -#: templates/nav/public_nav.html:83 +#: templates/nav/public_nav.html msgid "No Draws Available" msgstr "" -#: templates/nav/public_nav.html:91 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: templates/nav/public_nav.html:95 +#: templates/nav/public_nav.html msgid "Current Draws" msgstr "" -#: templates/nav/public_nav.html:115 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" msgstr "" -#: templates/nav/public_nav.html:133 +#: templates/nav/public_nav.html msgid "Break" msgstr "" -#: templates/nav/public_nav.html:185 +#: templates/nav/public_nav.html msgid "Feedback Progress" msgstr "" -#: templates/nav/public_nav.html:191 templates/nav/public_nav.html:197 +#: templates/nav/public_nav.html msgid "Enter Ballot" msgstr "" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" msgstr "" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" msgstr "" -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" msgstr "" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" msgstr "Área de administrador para %(tournament)s" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" msgstr "Área de assistente para %(tournament)s" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" msgstr "Área pública para %(tournament)s" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" msgstr "" -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" msgstr "" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" msgstr "" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" msgstr "" -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" msgstr "" -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." msgstr "" -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." msgstr "" -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." msgstr "" -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" msgstr "" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." msgstr "" -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" msgstr "" -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:27 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" msgstr "" -#: templates/registration/password_change_form.html:16 +#: templates/registration/password_change_form.html #, python-format msgid "API Token: %(api_token)s" msgstr "" -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgid "The API token will allow you to authorize external applications to access the site as staff." msgstr "" -#: templates/registration/password_change_form.html:28 +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." msgstr "" -#: templates/registration/password_change_form.html:33 -#: templates/registration/password_reset_confirm.html:25 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" msgstr "" -#: templates/registration/password_change_form.html:34 -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" msgstr "" -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "" -#: templates/registration/password_reset_complete.html:11 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." msgstr "" -#: templates/registration/password_reset_complete.html:14 -#: templates/registration/password_reset_done.html:15 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" msgstr "" -#: templates/registration/password_reset_confirm.html:4 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" msgstr "" -#: templates/registration/password_reset_confirm.html:16 -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html msgctxt "page title" msgid "Password Reset" msgstr "" -#: templates/registration/password_reset_confirm.html:18 +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" msgstr "" -#: templates/registration/password_reset_confirm.html:33 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." msgstr "" -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" msgid "Password reset email sent" msgstr "" -#: templates/registration/password_reset_done.html:11 +#: templates/registration/password_reset_done.html msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." msgstr "" -#: templates/registration/password_reset_done.html:12 +#: templates/registration/password_reset_done.html msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." msgstr "" -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" msgstr "" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" msgstr "" -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_form.html:27 +#: templates/registration/password_reset_form.html msgid "Enter your email address below, and we'll email you a password reset link." msgstr "" -#: templates/registration/password_reset_form.html:34 +#: templates/registration/password_reset_form.html msgid "Please enter a valid email address." msgstr "" -#: templates/registration/password_reset_form.html:39 users/forms.py:10 -#: users/forms.py:25 +#: templates/registration/password_reset_form.html users/forms.py msgid "Email address" msgstr "" -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" msgstr "" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" msgstr "" -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" msgstr "" -#: urls.py:102 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" msgstr "" -#: urls.py:105 +#: urls.py msgid "Welcome! You just logged in!" msgstr "" -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." msgstr "" -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." msgstr "" -#: users/templates/admin/auth/delete_user_warning.html:6 +#: users/templates/admin/auth/delete_user_warning.html msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." msgstr "" -#: users/templates/signup.html:4 users/templates/signup.html:5 +#: users/templates/signup.html msgid "Sign-Up" msgstr "" -#: users/templates/signup.html:16 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Administrator Account" msgstr "" -#: users/templates/signup.html:18 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Assistant Account" msgstr "" -#: users/templates/signup.html:25 +#: users/templates/signup.html msgid "Create Account" msgstr "Criar conta" -#: users/views.py:54 +#: users/views.py msgid "You have successfully created a new administrator account." msgstr "" -#: users/views.py:56 +#: users/views.py msgid "You have successfully created a new assistant account." msgstr "" -#: users/views.py:84 +#: users/views.py msgid "Whoops! It looks like someone's already created the first user account. Please log in." msgstr "" -#: users/views.py:92 +#: users/views.py #, python-format msgid "Welcome! You've created an account for %s." msgstr "" diff --git a/tabbycat/motions/locale/pt/LC_MESSAGES/django.po b/tabbycat/motions/locale/pt/LC_MESSAGES/django.po index 404c8eddab4..b54c428e311 100644 --- a/tabbycat/motions/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -17,372 +17,383 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "Moções" -#: motions/models.py:9 +#: motions/models.py msgid "text" msgstr "texto" -#: motions/models.py:10 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" msgstr "A moção completa, por exemplo, \"Esta Casa fortaleceria todas as bananas\"" -#: motions/models.py:12 +#: motions/models.py msgid "reference" msgstr "referência" -#: motions/models.py:13 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" msgstr "Código para a moção, por exemplo, \"Bananas\"" -#: motions/models.py:15 +#: motions/models.py msgid "info slide" msgstr "info slide" -#: motions/models.py:16 +#: motions/models.py msgid "The information slide for this topic; if it has one" msgstr "O slide informativo para esta moção (se tiver)" -#: motions/models.py:19 +#: motions/models.py msgid "tournament" msgstr "torneio" -#: motions/models.py:21 +#: motions/models.py msgid "rounds" msgstr "rodadas" -#: motions/models.py:24 motions/models.py:37 motions/models.py:62 +#: motions/models.py msgid "motion" msgstr "moção" -#: motions/models.py:25 +#: motions/models.py msgid "motions" msgstr "moções" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" msgstr "dupla de debate" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" msgstr "preferências" -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" msgstr "submissão de cédulas" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" msgstr "preferência de moção de uma dupla de debate" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" msgstr "preferências de moção de uma dupla de debate" -#: motions/models.py:64 +#: motions/models.py msgid "round" msgstr "rodada" -#: motions/models.py:67 +#: motions/models.py msgid "sequence number" msgstr "Número sequencial" -#: motions/models.py:68 +#: motions/models.py msgid "The order in which motions are displayed" msgstr "A ordem a qual as moções são exibidas" -#: motions/models.py:73 +#: motions/models.py msgid "round motion" msgstr "" -#: motions/models.py:74 +#: motions/models.py msgid "round motions" msgstr "" -#: motions/statistics.py:86 +#: motions/statistics.py msgid "extremely strong evidence" msgstr "evidência muito forte" -#: motions/statistics.py:87 +#: motions/statistics.py msgid "strong evidence" msgstr "evidência forte" -#: motions/statistics.py:88 +#: motions/statistics.py msgid "moderate evidence" msgstr "evidência moderada" -#: motions/statistics.py:89 +#: motions/statistics.py msgid "weak evidence" msgstr "evidência fraca" -#: motions/statistics.py:90 +#: motions/statistics.py msgid "very weak evidence" msgstr "evidência muito fraca" -#: motions/statistics.py:91 +#: motions/statistics.py msgid "extremely weak evidence" msgstr "evidência extremamente fraca" -#: motions/statistics.py:114 +#: motions/statistics.py msgid "balance inconclusive" msgstr "equilíbrio inconclusivo" -#: motions/statistics.py:115 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" msgstr "poucos debates para obter uma estatística significativa" -#: motions/statistics.py:123 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" msgstr "desequilibrado no nível %(level)s" -#: motions/statistics.py:124 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." msgstr "o valor de χ² é %(chisq).3f, visto que há %(evidence)s que sugere que essa moção foi desequilibrada - em um nível significante de %(level)s." -#: motions/statistics.py:129 +#: motions/statistics.py msgid "probably balanced" msgstr "provavelmente equilibrado" -#: motions/statistics.py:130 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." msgstr "o valor de χ² é %(chisq).3f, visto que as evidências são insuficientes para sugerir que essa moção foi desequilibrada em qualquer nível significativo." -#: motions/templates/motion_global_statistics.html:22 -#: motions/templates/motion_round_statistics.html:31 -#: motions/templates/public_motions.html:32 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" msgstr "Ver o Info Slide" -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" msgstr[0] "resultados do %(ndebates)s debate" msgstr[1] "resultados dos %(ndebates)s debates" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" msgstr[0] "%(advancing)s de %(ndebates)s dupla em %(side)s (%(percentage)s%%) avançou" msgstr[1] "%(advancing)s de %(ndebates)s duplas em %(side)s (%(percentage)s%%) avançaram" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" msgstr[0] "%(eliminated)s de %(ndebates)s dupla em %(side)s (%(percentage)s%%) foi eliminada" msgstr[1] "%(eliminated)s de %(ndebates)s duplas em %(side)s (%(percentage)s%%) foram eliminadas" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" msgstr "avançou" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." msgstr "avan." -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" msgstr "eliminado" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." msgstr "elim." -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" msgstr "Distribuição de resultados por %(side)s" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" msgstr "Nenhum resultado para esta moção" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" msgstr "Governo" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" msgstr "Oposição" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" msgstr "Média de Pontos por bancada" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" msgstr "Abertura" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" msgstr "Encerramento" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" msgstr "Média de Pontos por metade" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" msgstr[0] "média de pontos por posição (%(ndebates)s debate)" msgstr[1] "média de pontos por posição (%(ndebates)s debates)" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" msgstr[0] "%(count)s resultado para %(side)s (%(percentage)s%%) foram %(points)s pontos" msgstr[1] "%(count)s resultados para %(side)s (%(percentage)s%%) foram %(points)s pontos" -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" msgstr "%(side)s resultados" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" msgstr[0] "%(count)s%(side)s venceu" msgstr[1] "%(count)s%(side)s venceram" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" msgstr "Nenhuma dupla debateu essa moção" -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" msgstr[0] "%(count)s%(side)s vetou" msgstr[1] "%(count)s%(side)s vetaram" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" msgstr "Nenhuma dupla vetou essa moção" -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" msgstr[0] "Editar Moção" msgstr[1] "Editar Moções" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" msgstr "Exibir Sorteio" -#: motions/templates/motions_edit.html:28 +#: motions/templates/motions_edit.html msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." msgstr "" -#: motions/templates/motions_edit.html:30 +#: motions/templates/motions_edit.html msgid "Reuse Motions from Last Round" msgstr "" -#: motions/templates/motions_edit.html:35 +#: motions/templates/motions_edit.html msgid "Use Existing Motions" msgstr "" -#: motions/templates/motions_edit.html:74 +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" msgstr[0] "Salvar Moção" msgstr[1] "Salvar Moções" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "Info Slide" -#: motions/templates/public_motions.html:41 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." msgstr "Não há moções disponíveis para esta rodada." -#: motions/templates/public_motions.html:47 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." msgstr "As moções para esta rodada ainda não foram divulgadas." -#: motions/templates/public_motions.html:52 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." msgstr "A moção para esta rodada ainda não foi divulgada." -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" msgstr[0] "" msgstr[1] "" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" msgstr[0] "" msgstr[1] "" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." msgstr "Não há moções para esta rodada que estejam inseridas no Tabbycat." -#: motions/utils.py:11 +#: motions/utils.py msgid "Not all latest ballots list the same motion, so could not be merged." msgstr "" -#: motions/utils.py:29 +#: motions/utils.py msgid "Motion vetos are inconsistent, so could not be merged." msgstr "" -#: motions/views.py:91 +#: motions/views.py msgid "The motion has been saved." msgstr "A moção foi salva." -#: motions/views.py:93 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." msgstr[0] "%(count)d moção foi salva." msgstr[1] "%(count)d moções foram salvas." -#: motions/views.py:97 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." msgstr[0] "%(count)d moção foi deletada." msgstr[1] "%(count)d moções foram deletadas." -#: motions/views.py:140 +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "" + +#: motions/views.py #, python-format msgid "Reused the motion from the previous round." msgid_plural "Reused the %(count)d motions from the previous round." msgstr[0] "" msgstr[1] "" -#: motions/views.py:164 -msgid "Released the motion(s)." -msgstr "Divulgar a(s) moção(ões)." +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" +msgstr[1] "" -#: motions/views.py:171 -msgid "Unreleased the motion(s)." -msgstr "Desfazer a divulgação da(s) moção(ões)." +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" +msgstr[1] "" -#: motions/views.py:195 +#: motions/views.py msgid "Round Motions" msgstr "Moções da Rodada" -#: motions/views.py:209 +#: motions/views.py msgid "Motion Statistics" msgstr "Estatísticas das Moções" diff --git a/tabbycat/notifications/locale/pt/LC_MESSAGES/django.po b/tabbycat/notifications/locale/pt/LC_MESSAGES/django.po index a5bb96e0b24..d767577fb7d 100644 --- a/tabbycat/notifications/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -18,401 +18,399 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" msgstr "" -#: notifications/forms.py:12 +#: notifications/forms.py msgid "Recipient email address" msgstr "" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" msgstr "" -#: notifications/forms.py:17 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" msgstr "" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Subject" msgstr "" -#: notifications/forms.py:31 +#: notifications/forms.py msgid "Message" msgstr "" -#: notifications/models.py:11 notifications/models.py:26 +#: notifications/models.py msgid "email" msgstr "" -#: notifications/models.py:12 +#: notifications/models.py msgid "SMS" msgstr "" -#: notifications/models.py:21 +#: notifications/models.py msgid "recipient" msgstr "" -#: notifications/models.py:23 +#: notifications/models.py msgid "method" msgstr "" -#: notifications/models.py:28 notifications/models.py:134 +#: notifications/models.py msgid "context" msgstr "" -#: notifications/models.py:31 +#: notifications/models.py msgid "notification" msgstr "" -#: notifications/models.py:33 notifications/models.py:74 -#: notifications/models.py:130 +#: notifications/models.py msgid "timestamp" msgstr "marca de tempo" -#: notifications/models.py:36 +#: notifications/models.py msgid "sent message" msgstr "" -#: notifications/models.py:37 +#: notifications/models.py msgid "sent messages" msgstr "" -#: notifications/models.py:58 +#: notifications/models.py msgid "team points" msgstr "" -#: notifications/models.py:59 +#: notifications/models.py msgid "ballot confirmed" msgstr "" -#: notifications/models.py:60 +#: notifications/models.py msgid "feedback URL" msgstr "" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot URL" msgstr "" -#: notifications/models.py:62 +#: notifications/models.py msgid "landing page URL" msgstr "" -#: notifications/models.py:63 +#: notifications/models.py msgid "adjudicator draw released" msgstr "" -#: notifications/models.py:64 +#: notifications/models.py msgid "team registration" msgstr "" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator registration" msgstr "" -#: notifications/models.py:66 +#: notifications/models.py msgid "motion(s) released" msgstr "" -#: notifications/models.py:67 +#: notifications/models.py msgid "team draw released" msgstr "" -#: notifications/models.py:68 +#: notifications/models.py msgid "custom message" msgstr "" -#: notifications/models.py:72 notifications/models.py:132 +#: notifications/models.py msgid "event" msgstr "" -#: notifications/models.py:77 +#: notifications/models.py msgid "tournament" msgstr "torneio" -#: notifications/models.py:79 +#: notifications/models.py msgid "round" msgstr "rodada" -#: notifications/models.py:82 +#: notifications/models.py msgid "subject template" msgstr "" -#: notifications/models.py:84 +#: notifications/models.py msgid "body template" msgstr "" -#: notifications/models.py:87 +#: notifications/models.py msgid "bulk notification" msgstr "" -#: notifications/models.py:88 +#: notifications/models.py msgid "bulk notifications" msgstr "" -#: notifications/models.py:114 +#: notifications/models.py msgid "Processed" msgstr "" -#: notifications/models.py:115 +#: notifications/models.py msgid "Dropped" msgstr "" -#: notifications/models.py:116 +#: notifications/models.py msgid "Deferred" msgstr "" -#: notifications/models.py:117 +#: notifications/models.py msgid "Delivered" msgstr "" -#: notifications/models.py:118 +#: notifications/models.py msgid "Bounced" msgstr "" -#: notifications/models.py:119 +#: notifications/models.py msgid "Opened" msgstr "" -#: notifications/models.py:120 +#: notifications/models.py msgid "Clicked" msgstr "" -#: notifications/models.py:121 +#: notifications/models.py msgid "Unsubscribed" msgstr "" -#: notifications/models.py:122 +#: notifications/models.py msgid "Marked as spam" msgstr "" -#: notifications/models.py:123 +#: notifications/models.py msgid "Unsubscribed from group" msgstr "" -#: notifications/models.py:124 +#: notifications/models.py msgid "Resubscribed to group" msgstr "" -#: notifications/models.py:128 +#: notifications/models.py msgid "email message" msgstr "" -#: notifications/models.py:137 +#: notifications/models.py msgid "email status" msgstr "" -#: notifications/models.py:138 +#: notifications/models.py msgid "email statuses" msgstr "" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." msgstr "" -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." msgstr "" -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" msgstr "" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." msgstr "" -#: notifications/templates/notifications_nav.html:5 notifications/views.py:75 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" msgstr "" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:29 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" msgstr "" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" msgstr "" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" msgstr "" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." msgstr "" -#: notifications/templates/test_email.html:20 +#: notifications/templates/test_email.html #, python-format msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." msgstr "" -#: notifications/templates/test_email.html:30 +#: notifications/templates/test_email.html msgid "Go back to the site home page" msgstr "" -#: notifications/utils.py:26 +#: notifications/utils.py msgid "the chair" msgstr "" -#: notifications/utils.py:27 +#: notifications/utils.py msgid "the only" msgstr "" -#: notifications/utils.py:28 +#: notifications/utils.py msgid "a panellist" msgstr "" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "a trainee" msgstr "" -#: notifications/utils.py:59 +#: notifications/utils.py msgid "TBA" msgstr "" -#: notifications/utils.py:88 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "" -#: notifications/utils.py:99 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:102 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Win" msgstr "" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Loss" msgstr "" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " msgstr "" -#: notifications/utils.py:183 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " msgstr "" -#: notifications/utils.py:206 notifications/utils.py:207 +#: notifications/utils.py msgid ", " msgstr "" -#: notifications/views.py:47 +#: notifications/views.py #, python-format msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" msgstr "" -#: notifications/views.py:51 +#: notifications/views.py msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." msgstr "" -#: notifications/views.py:60 +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" msgstr "" -#: notifications/views.py:65 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." msgstr "" -#: notifications/views.py:81 +#: notifications/views.py msgid "N/A" msgstr "" -#: notifications/views.py:82 +#: notifications/views.py msgid "Not known" msgstr "" -#: notifications/views.py:87 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" msgstr "" -#: notifications/views.py:133 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "" -#: notifications/views.py:152 +#: notifications/views.py msgid "Timeline" msgstr "" -#: notifications/views.py:162 notifications/views.py:260 +#: notifications/views.py msgid "Participant" msgstr "" -#: notifications/views.py:163 notifications/views.py:265 +#: notifications/views.py msgid "Email address" msgstr "" -#: notifications/views.py:164 +#: notifications/views.py msgid "Status" msgstr "" -#: notifications/views.py:165 +#: notifications/views.py msgid "Time" msgstr "" -#: notifications/views.py:204 +#: notifications/views.py msgid "Email Participants" msgstr "" -#: notifications/views.py:233 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." msgstr[0] "" msgstr[1] "" -#: notifications/views.py:239 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." msgstr "" -#: notifications/views.py:250 +#: notifications/views.py msgid "Send Email" msgstr "" -#: notifications/views.py:266 +#: notifications/views.py msgid "Not Provided" msgstr "" -#: notifications/views.py:279 +#: notifications/views.py msgid "Role" msgstr "" -#: notifications/views.py:280 +#: notifications/views.py msgid "Adjudicator" msgstr "Juiz" -#: notifications/views.py:280 +#: notifications/views.py msgid "Speaker" msgstr "" -#: notifications/views.py:288 +#: notifications/views.py msgid "Speakers" msgstr "" -#: notifications/views.py:289 +#: notifications/views.py msgid "Adjudicators" msgstr "" diff --git a/tabbycat/options/locale/pt/LC_MESSAGES/django.po b/tabbycat/options/locale/pt/LC_MESSAGES/django.po index e56b74719f4..b0abcf6bbcf 100644 --- a/tabbycat/options/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -18,1587 +18,1600 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" msgstr "" -#: options/models.py:13 +#: options/models.py msgid "instance" msgstr "" -#: options/models.py:18 +#: options/models.py msgid "tournament preference" msgstr "" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" msgstr "" -#: options/preferences.py:19 options/templates/preferences_index.html:53 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" msgstr "" -#: options/preferences.py:25 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:28 +#: options/preferences.py msgid "Minimum speaker score" msgstr "" -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum speaker score" msgstr "" -#: options/preferences.py:35 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:43 +#: options/preferences.py msgid "Speaker score step" msgstr "" -#: options/preferences.py:44 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:52 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" msgstr "" -#: options/preferences.py:53 +#: options/preferences.py msgid "Maximum margin" msgstr "" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" msgstr "" -#: options/preferences.py:63 +#: options/preferences.py msgid "Minimum reply score" msgstr "" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" msgstr "" -#: options/preferences.py:72 +#: options/preferences.py msgid "Maximum reply score" msgstr "" -#: options/preferences.py:80 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:81 +#: options/preferences.py msgid "Reply score step" msgstr "" -#: options/preferences.py:89 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" msgstr "" -#: options/preferences.py:90 +#: options/preferences.py msgid "Margin includes dissenters" msgstr "" -#: options/preferences.py:98 +#: options/preferences.py msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" msgstr "" -#: options/preferences.py:99 +#: options/preferences.py msgid "Team score includes ghosts" msgstr "" -#: options/preferences.py:106 options/templates/preferences_index.html:58 +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" msgstr "" -#: options/preferences.py:112 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" msgstr "" -#: options/preferences.py:113 +#: options/preferences.py msgid "Minimum adjudicator score to vote" msgstr "" -#: options/preferences.py:121 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" msgstr "" -#: options/preferences.py:122 +#: options/preferences.py msgid "Adjudicator conflict penalty" msgstr "" -#: options/preferences.py:130 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" msgstr "" -#: options/preferences.py:131 +#: options/preferences.py msgid "Adjudicator history penalty" msgstr "" -#: options/preferences.py:139 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" msgstr "" -#: options/preferences.py:140 +#: options/preferences.py msgid "Importance mismatch penalty" msgstr "" -#: options/preferences.py:148 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" msgstr "" -#: options/preferences.py:149 +#: options/preferences.py msgid "Team institution penalty" msgstr "" -#: options/preferences.py:157 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" msgstr "" -#: options/preferences.py:158 +#: options/preferences.py msgid "Team history penalty" msgstr "" -#: options/preferences.py:166 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" msgstr "" -#: options/preferences.py:167 +#: options/preferences.py msgid "Avoid same institution" msgstr "" -#: options/preferences.py:175 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" msgstr "" -#: options/preferences.py:176 +#: options/preferences.py msgid "Avoid team history" msgstr "" -#: options/preferences.py:184 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "" -#: options/preferences.py:185 +#: options/preferences.py msgid "Odd bracket resolution method" msgstr "" -#: options/preferences.py:189 +#: options/preferences.py msgid "Pull up from top" msgstr "" -#: options/preferences.py:190 +#: options/preferences.py msgid "Pull up from bottom" msgstr "" -#: options/preferences.py:191 +#: options/preferences.py msgid "Pull up from middle" msgstr "" -#: options/preferences.py:192 +#: options/preferences.py msgid "Pull up at random" msgstr "" -#: options/preferences.py:193 +#: options/preferences.py msgid "Intermediate brackets" msgstr "" -#: options/preferences.py:194 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" msgstr "" -#: options/preferences.py:195 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" msgstr "" -#: options/preferences.py:196 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" msgstr "" -#: options/preferences.py:203 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" msgstr "" -#: options/preferences.py:204 +#: options/preferences.py msgid "Side allocations method" msgstr "" -#: options/preferences.py:208 options/preferences.py:225 +#: options/preferences.py msgid "Random" msgstr "" -#: options/preferences.py:209 +#: options/preferences.py msgid "Balance" msgstr "" -#: options/preferences.py:210 +#: options/preferences.py msgid "Pre-allocated" msgstr "" -#: options/preferences.py:211 +#: options/preferences.py msgid "Manually enter from ballot" msgstr "" -#: options/preferences.py:218 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." msgstr "" -#: options/preferences.py:219 +#: options/preferences.py msgid "Pairing method" msgstr "" -#: options/preferences.py:223 +#: options/preferences.py msgid "Slide" msgstr "" -#: options/preferences.py:224 +#: options/preferences.py msgid "Fold" msgstr "" -#: options/preferences.py:226 +#: options/preferences.py msgid "Adjacent" msgstr "" -#: options/preferences.py:227 +#: options/preferences.py msgid "Fold top, adjacent rest" msgstr "" -#: options/preferences.py:234 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" msgstr "" -#: options/preferences.py:236 +#: options/preferences.py msgid "Conflict avoidance method" msgstr "" -#: options/preferences.py:240 +#: options/preferences.py msgid "Off" msgstr "" -#: options/preferences.py:241 +#: options/preferences.py msgid "One-up-one-down" msgstr "" -#: options/preferences.py:248 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "" -#: options/preferences.py:250 +#: options/preferences.py msgid "Pullup restriction" msgstr "" -#: options/preferences.py:254 +#: options/preferences.py msgid "No restriction" msgstr "" -#: options/preferences.py:255 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" msgstr "" -#: options/preferences.py:256 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" msgstr "" -#: options/preferences.py:257 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" msgstr "" -#: options/preferences.py:264 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." msgstr "" -#: options/preferences.py:265 +#: options/preferences.py msgid "BP pullup distribution" msgstr "" -#: options/preferences.py:269 +#: options/preferences.py msgid "Anywhere in bracket" msgstr "" -#: options/preferences.py:270 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" msgstr "" -#: options/preferences.py:277 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" msgstr "" -#: options/preferences.py:278 +#: options/preferences.py msgid "BP position cost" msgstr "" -#: options/preferences.py:282 +#: options/preferences.py msgid "Simple" msgstr "" -#: options/preferences.py:283 +#: options/preferences.py msgid "Rényi entropy" msgstr "" -#: options/preferences.py:284 +#: options/preferences.py msgid "Population variance" msgstr "" -#: options/preferences.py:291 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." msgstr "" -#: options/preferences.py:294 +#: options/preferences.py msgid "Rényi order (BP)" msgstr "" -#: options/preferences.py:303 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." msgstr "" -#: options/preferences.py:306 +#: options/preferences.py msgid "BP position cost exponent" msgstr "" -#: options/preferences.py:315 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." msgstr "" -#: options/preferences.py:317 +#: options/preferences.py msgid "BP assignment method" msgstr "" -#: options/preferences.py:321 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" msgstr "" -#: options/preferences.py:322 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" msgstr "" -#: options/preferences.py:329 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" msgstr "" -#: options/preferences.py:330 +#: options/preferences.py msgid "Skip adjudicator check-ins" msgstr "" -#: options/preferences.py:338 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:339 +#: options/preferences.py msgid "No panellist adjudicators" msgstr "" -#: options/preferences.py:347 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:348 +#: options/preferences.py msgid "No trainee adjudicators" msgstr "" -#: options/preferences.py:355 options/templates/preferences_index.html:73 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" msgstr "Avaliação de juiz" -#: options/preferences.py:361 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:362 +#: options/preferences.py msgid "Minimum adjudicator score" msgstr "" -#: options/preferences.py:370 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:371 +#: options/preferences.py msgid "Maximum adjudicator score" msgstr "" -#: options/preferences.py:379 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" msgstr "" -#: options/preferences.py:380 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" msgstr "" -#: options/preferences.py:384 +#: options/preferences.py msgid "Chairs on panellists and trainees" msgstr "" -#: options/preferences.py:385 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" msgstr "" -#: options/preferences.py:386 +#: options/preferences.py msgid "Panellists and trainees on chairs, vice-versa" msgstr "" -#: options/preferences.py:387 +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" msgstr "" -#: options/preferences.py:394 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "" -#: options/preferences.py:395 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" msgstr "" -#: options/preferences.py:399 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" msgstr "" -#: options/preferences.py:400 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" msgstr "" -#: options/preferences.py:407 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" msgstr "" -#: options/preferences.py:408 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" msgstr "" -#: options/preferences.py:416 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" msgstr "" -#: options/preferences.py:417 +#: options/preferences.py msgid "Show unaccredited" msgstr "" -#: options/preferences.py:425 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" msgstr "" -#: options/preferences.py:426 +#: options/preferences.py msgid "Feedback introduction/explanation" msgstr "" -#: options/preferences.py:435 options/templates/preferences_index.html:63 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" msgstr "" -#: options/preferences.py:441 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" msgstr "" -#: options/preferences.py:442 +#: options/preferences.py msgid "Teams in debate" msgstr "" -#: options/preferences.py:446 +#: options/preferences.py msgid "Two-team format" msgstr "" -#: options/preferences.py:447 +#: options/preferences.py msgid "British Parliamentary (four teams)" msgstr "" -#: options/preferences.py:454 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:455 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" msgstr "" -#: options/preferences.py:459 options/preferences.py:472 +#: options/preferences.py msgid "One ballot per voting adjudicator" msgstr "" -#: options/preferences.py:460 options/preferences.py:473 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" msgstr "" -#: options/preferences.py:467 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:468 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" msgstr "" -#: options/preferences.py:480 +#: options/preferences.py msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." msgstr "" -#: options/preferences.py:481 +#: options/preferences.py msgid "Winner Declaration in ballot(s)" msgstr "" -#: options/preferences.py:485 +#: options/preferences.py msgid "Do not require separate winner selection" msgstr "" -#: options/preferences.py:486 +#: options/preferences.py msgid "Require separate winner selection as a check on correct scores" msgstr "" -#: options/preferences.py:487 +#: options/preferences.py msgid "Require winner selection to break tied-point debates" msgstr "" -#: options/preferences.py:488 +#: options/preferences.py msgid "Require winner selection, overriding scores" msgstr "" -#: options/preferences.py:495 +#: options/preferences.py msgid "When ballots should ask for speaker scores." msgstr "" -#: options/preferences.py:496 +#: options/preferences.py msgid "Require speaker scores" msgstr "" -#: options/preferences.py:500 +#: options/preferences.py msgid "Always require speaker scores" msgstr "" -#: options/preferences.py:501 +#: options/preferences.py msgid "Only require speaker scores in preliminary rounds" msgstr "" -#: options/preferences.py:502 +#: options/preferences.py msgid "Never require speaker scores" msgstr "" -#: options/preferences.py:509 +#: options/preferences.py msgid "How many substantive speakers on a team" msgstr "" -#: options/preferences.py:510 +#: options/preferences.py msgid "Substantive speakers" msgstr "" -#: options/preferences.py:518 +#: options/preferences.py msgid "What to call the teams" msgstr "" -#: options/preferences.py:519 +#: options/preferences.py msgid "Side names" msgstr "" -#: options/preferences.py:528 +#: options/preferences.py msgid "Whether this style features scored reply speeches" msgstr "" -#: options/preferences.py:529 +#: options/preferences.py msgid "Reply scores" msgstr "" -#: options/preferences.py:537 +#: options/preferences.py msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" msgstr "" -#: options/preferences.py:538 +#: options/preferences.py msgid "Require reply speaker to have given a substantive speech" msgstr "" -#: options/preferences.py:545 options/templates/preferences_index.html:68 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "" -#: options/preferences.py:551 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" msgstr "" -#: options/preferences.py:552 +#: options/preferences.py msgid "Speeches missable for standings eligibility" msgstr "" -#: options/preferences.py:560 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" msgstr "" -#: options/preferences.py:561 +#: options/preferences.py msgid "Replies missable for standings eligibility" msgstr "" -#: options/preferences.py:569 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" msgstr "" -#: options/preferences.py:570 +#: options/preferences.py msgid "Team standings precedence" msgstr "" -#: options/preferences.py:586 options/preferences.py:621 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" msgstr "" -#: options/preferences.py:592 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" msgstr "" -#: options/preferences.py:593 +#: options/preferences.py msgid "Team standings extra metrics" msgstr "" -#: options/preferences.py:604 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" msgstr "" -#: options/preferences.py:605 +#: options/preferences.py msgid "Speaker standings precedence" msgstr "" -#: options/preferences.py:627 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" msgstr "" -#: options/preferences.py:628 +#: options/preferences.py msgid "Speaker standings extra metrics" msgstr "" -#: options/preferences.py:638 options/templates/preferences_index.html:89 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" msgstr "" -#: options/preferences.py:644 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:645 +#: options/preferences.py msgid "Release team tab to public" msgstr "" -#: options/preferences.py:653 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." msgstr "" -#: options/preferences.py:654 +#: options/preferences.py msgid "Top teams cutoff" msgstr "" -#: options/preferences.py:662 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:663 +#: options/preferences.py msgid "Release speaker tab to public" msgstr "" -#: options/preferences.py:671 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." msgstr "" -#: options/preferences.py:672 +#: options/preferences.py msgid "Top speakers cutoff" msgstr "" -#: options/preferences.py:680 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:681 +#: options/preferences.py msgid "Release replies tab to public" msgstr "" -#: options/preferences.py:689 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." msgstr "" -#: options/preferences.py:690 +#: options/preferences.py msgid "Top replies cutoff" msgstr "" -#: options/preferences.py:716 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." msgstr "" -#: options/preferences.py:719 +#: options/preferences.py msgid "Release motions tab to public" msgstr "" -#: options/preferences.py:727 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" msgstr "" -#: options/preferences.py:728 +#: options/preferences.py msgid "Release adjudicator tab to public" msgstr "" -#: options/preferences.py:736 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" msgstr "" -#: options/preferences.py:737 +#: options/preferences.py msgid "Adjudicator tab displays" msgstr "" -#: options/preferences.py:741 +#: options/preferences.py msgid "Only shows base score" msgstr "" -#: options/preferences.py:742 +#: options/preferences.py msgid "Only shows final score" msgstr "" -#: options/preferences.py:743 +#: options/preferences.py msgid "Shows base, final, and per-round scores" msgstr "" -#: options/preferences.py:750 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." msgstr "" -#: options/preferences.py:751 +#: options/preferences.py msgid "Release ballots to public" msgstr "" -#: options/preferences.py:759 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" msgstr "" -#: options/preferences.py:760 +#: options/preferences.py msgid "Release all round results to public" msgstr "" -#: options/preferences.py:768 +#: options/preferences.py msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." msgstr "" -#: options/preferences.py:769 +#: options/preferences.py msgid "Release ballots through private URLs" msgstr "" -#: options/preferences.py:776 options/templates/preferences_index.html:94 +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" msgstr "" -#: options/preferences.py:782 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" msgstr "" -#: options/preferences.py:783 +#: options/preferences.py msgid "Ballot submissions from adjudicators" msgstr "" -#: options/preferences.py:787 options/preferences.py:801 +#: options/preferences.py msgid "Disabled (tab staff only)" msgstr "" -#: options/preferences.py:788 options/preferences.py:802 +#: options/preferences.py msgid "Use private URLs" msgstr "" -#: options/preferences.py:789 options/preferences.py:803 +#: options/preferences.py msgid "Use publicly accessible form" msgstr "" -#: options/preferences.py:796 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" msgstr "" -#: options/preferences.py:797 +#: options/preferences.py msgid "Feedback submissions from participants" msgstr "" -#: options/preferences.py:810 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" msgstr "" -#: options/preferences.py:811 +#: options/preferences.py msgid "Require password for submission" msgstr "" -#: options/preferences.py:819 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" msgstr "" -#: options/preferences.py:820 +#: options/preferences.py msgid "Password for public submission" msgstr "" -#: options/preferences.py:828 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" msgstr "" -#: options/preferences.py:829 +#: options/preferences.py msgid "Bypass double checking" msgstr "" -#: options/preferences.py:837 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." msgstr "" -#: options/preferences.py:838 +#: options/preferences.py msgid "Enforce blind confirmations" msgstr "" -#: options/preferences.py:846 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." msgstr "" -#: options/preferences.py:849 +#: options/preferences.py msgid "Assistant user access" msgstr "" -#: options/preferences.py:854 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" msgstr "" -#: options/preferences.py:855 +#: options/preferences.py msgid "Just results entry and draw display" msgstr "" -#: options/preferences.py:856 +#: options/preferences.py msgid "Only results entry" msgstr "" -#: options/preferences.py:862 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." msgstr "" -#: options/preferences.py:863 +#: options/preferences.py msgid "Participant self-checkin" msgstr "" -#: options/preferences.py:871 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" msgstr "" -#: options/preferences.py:874 +#: options/preferences.py msgid "Check-In Window (People)" msgstr "" -#: options/preferences.py:880 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" msgstr "" -#: options/preferences.py:883 +#: options/preferences.py msgid "Check-In Window (Rooms)" msgstr "" -#: options/preferences.py:889 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" msgstr "" -#: options/preferences.py:890 +#: options/preferences.py msgid "Ballot Digit Checks" msgstr "" -#: options/preferences.py:898 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:899 +#: options/preferences.py msgid "Score return location" msgstr "" -#: options/preferences.py:907 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:908 +#: options/preferences.py msgid "Feedback return location" msgstr "" -#: options/preferences.py:916 +#: options/preferences.py msgid "Lets debates have their status as postponed, as to not block draw generation." msgstr "" -#: options/preferences.py:917 +#: options/preferences.py msgid "Enable postponements" msgstr "" -#: options/preferences.py:925 +#: options/preferences.py msgid "Have each voting adjudicator submit a separate ballot." msgstr "" -#: options/preferences.py:926 +#: options/preferences.py msgid "Individual voting ballots" msgstr "" -#: options/preferences.py:933 options/templates/preferences_index.html:99 +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" msgstr "" -#: options/preferences.py:939 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" msgstr "" -#: options/preferences.py:940 +#: options/preferences.py msgid "Enable public view of participants list" msgstr "" -#: options/preferences.py:948 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" msgstr "" -#: options/preferences.py:949 +#: options/preferences.py msgid "Enable public view of institutions list" msgstr "" -#: options/preferences.py:957 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" msgstr "" -#: options/preferences.py:958 +#: options/preferences.py msgid "Enable public view of diversity info" msgstr "" -#: options/preferences.py:966 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." msgstr "" -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of the checkin statuses" msgstr "" -#: options/preferences.py:977 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" msgstr "" -#: options/preferences.py:978 +#: options/preferences.py msgid "Show break categories on participants page" msgstr "" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" msgstr "" -#: options/preferences.py:987 +#: options/preferences.py msgid "Show pre-allocated sides to public" msgstr "" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing released draws" msgstr "" -#: options/preferences.py:996 +#: options/preferences.py msgid "Enable public view of draw" msgstr "" -#: options/preferences.py:1000 +#: options/preferences.py msgid "Disabled" msgstr "" -#: options/preferences.py:1001 +#: options/preferences.py msgid "Show a single page for the current round's draw" msgstr "" -#: options/preferences.py:1002 +#: options/preferences.py msgid "Show individual pages for all released draws" msgstr "" -#: options/preferences.py:1009 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" msgstr "" -#: options/preferences.py:1010 +#: options/preferences.py msgid "Enable public view of results" msgstr "" -#: options/preferences.py:1018 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" msgstr "" -#: options/preferences.py:1019 +#: options/preferences.py msgid "Enable public view of motions" msgstr "" -#: options/preferences.py:1027 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" msgstr "" -#: options/preferences.py:1028 +#: options/preferences.py msgid "Enable public view of team standings" msgstr "" -#: options/preferences.py:1036 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" msgstr "" -#: options/preferences.py:1037 +#: options/preferences.py msgid "Enable public record pages" msgstr "" -#: options/preferences.py:1045 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1046 +#: options/preferences.py msgid "Release team breaks to public" msgstr "" -#: options/preferences.py:1054 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1055 +#: options/preferences.py msgid "Release adjudicators break to public" msgstr "" -#: options/preferences.py:1063 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" msgstr "" -#: options/preferences.py:1064 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" msgstr "" -#: options/preferences.py:1072 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." msgstr "" -#: options/preferences.py:1073 +#: options/preferences.py msgid "Tournament staff" msgstr "" -#: options/preferences.py:1083 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" msgstr "" -#: options/preferences.py:1084 +#: options/preferences.py msgid "Welcome message" msgstr "" -#: options/preferences.py:1093 options/templates/preferences_index.html:104 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" msgstr "" -#: options/preferences.py:1099 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" msgstr "" -#: options/preferences.py:1100 +#: options/preferences.py msgid "Show splitting adjudicators" msgstr "" -#: options/preferences.py:1108 +#: options/preferences.py msgid "Whether and how to use code names for teams" msgstr "" -#: options/preferences.py:1109 +#: options/preferences.py msgid "Team code names" msgstr "" -#: options/preferences.py:1114 +#: options/preferences.py msgid "Do not use code names" msgstr "" -#: options/preferences.py:1115 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" msgstr "" -#: options/preferences.py:1116 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" msgstr "" -#: options/preferences.py:1118 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" msgstr "" -#: options/preferences.py:1120 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" msgstr "" -#: options/preferences.py:1126 +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" msgstr "" -#: options/preferences.py:1127 +#: options/preferences.py msgid "Show emoji" msgstr "" -#: options/preferences.py:1135 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" msgstr "" -#: options/preferences.py:1136 +#: options/preferences.py msgid "Show team institutions" msgstr "" -#: options/preferences.py:1144 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" msgstr "" -#: options/preferences.py:1145 +#: options/preferences.py msgid "Show adjudicator institutions" msgstr "" -#: options/preferences.py:1153 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" msgstr "" -#: options/preferences.py:1154 +#: options/preferences.py msgid "Show speakers in draw" msgstr "" -#: options/preferences.py:1161 options/templates/preferences_index.html:109 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" msgstr "" -#: options/preferences.py:1167 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Reply-to name" msgstr "" -#: options/preferences.py:1176 +#: options/preferences.py msgid "The email address for handling replies" msgstr "" -#: options/preferences.py:1177 +#: options/preferences.py msgid "Reply-to address" msgstr "" -#: options/preferences.py:1185 +#: options/preferences.py msgid "A secret key to accept email status events" msgstr "" -#: options/preferences.py:1186 +#: options/preferences.py msgid "Email status secret key" msgstr "" -#: options/preferences.py:1196 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "" -#: options/preferences.py:1197 +#: options/preferences.py msgid "Ballot receipts" msgstr "" -#: options/preferences.py:1205 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "" -#: options/preferences.py:1207 +#: options/preferences.py msgid "Ballot receipt subject line" msgstr "" -#: options/preferences.py:1215 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "" -#: options/preferences.py:1216 +#: options/preferences.py msgid "Ballot receipt message" msgstr "" -#: options/preferences.py:1232 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1233 +#: options/preferences.py msgid "Team points subject line" msgstr "" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team points message" msgstr "" -#: options/preferences.py:1250 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1251 +#: options/preferences.py msgid "Adjudicator draw subject line" msgstr "" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1259 +#: options/preferences.py msgid "Adjudicator draw message" msgstr "" -#: options/preferences.py:1268 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." msgstr "" -#: options/preferences.py:1269 +#: options/preferences.py msgid "Team draw subject line" msgstr "" -#: options/preferences.py:1276 options/preferences.py:1294 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1277 options/preferences.py:1295 +#: options/preferences.py msgid "Private URL notification message" msgstr "" -#: options/preferences.py:1286 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1287 +#: options/preferences.py msgid "Private URL notification subject line" msgstr "" -#: options/preferences.py:1308 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1309 +#: options/preferences.py msgid "Motion release notification subject line" msgstr "" -#: options/preferences.py:1316 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1317 +#: options/preferences.py msgid "Motion release notification message" msgstr "" -#: options/preferences.py:1325 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1326 +#: options/preferences.py msgid "Team registration notification subject line" msgstr "" -#: options/preferences.py:1333 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1334 +#: options/preferences.py msgid "Team registration notification message" msgstr "" -#: options/preferences.py:1343 options/templates/preferences_index.html:78 +#: options/preferences.py options/templates/preferences_index.html msgid "Motions" msgstr "" -#: options/preferences.py:1349 +#: options/preferences.py msgid "If checked, ballots require a motion to be entered" msgstr "" -#: options/preferences.py:1350 +#: options/preferences.py msgid "Enable motions" msgstr "" -#: options/preferences.py:1358 +#: options/preferences.py msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" msgstr "" -#: options/preferences.py:1359 +#: options/preferences.py msgid "Ballot Hide Motions" msgstr "" -#: options/preferences.py:1367 +#: options/preferences.py msgid "Enables the motion veto field on ballots, to track veto statistics" msgstr "" -#: options/preferences.py:1368 +#: options/preferences.py msgid "Motion vetoes" msgstr "" -#: options/preferences.py:1376 +#: options/preferences.py msgid "If showing results to public, show which motions were selected in the record" msgstr "" -#: options/preferences.py:1377 +#: options/preferences.py msgid "Show motions in results" msgstr "" -#: options/preferences.py:1385 +#: options/preferences.py msgid "Order in which are listed by round in the public view" msgstr "" -#: options/preferences.py:1386 +#: options/preferences.py msgid "Order to display motions" msgstr "" -#: options/preferences.py:1390 +#: options/preferences.py msgid "Earliest round first" msgstr "" -#: options/preferences.py:1391 +#: options/preferences.py msgid "Latest round first" msgstr "" -#: options/preferences.py:1398 +#: options/preferences.py msgid "Whether motions can be reused from one round to another." msgstr "" -#: options/preferences.py:1399 +#: options/preferences.py msgid "Allow motion reuse" msgstr "" -#: options/preferences.py:1406 options/templates/preferences_index.html:114 +#: options/preferences.py options/templates/preferences_index.html msgid "Global Settings" msgstr "" -#: options/preferences.py:1412 +#: options/preferences.py msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." msgstr "" -#: options/preferences.py:1413 +#: options/preferences.py msgid "Enable API access" msgstr "" -#: options/preferences.py:1421 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1422 +#: options/preferences.py msgid "Assistant account creation key" msgstr "" -#: options/preferences.py:1431 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1433 +#: options/preferences.py msgid "Administrator account creation key" msgstr "" -#: options/presets.py:32 options/presets.py:324 +#: options/presets.py msgid "Public Information Options" msgstr "" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" msgstr "" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" msgstr "" -#: options/presets.py:74 +#: options/presets.py msgid "Australs Rules" msgstr "" -#: options/presets.py:75 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:114 +#: options/presets.py msgid "British Parliamentary Rules" msgstr "" -#: options/presets.py:115 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." msgstr "" -#: options/presets.py:157 +#: options/presets.py msgid "Canadian Parliamentary Rules" msgstr "" -#: options/presets.py:159 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." msgstr "" -#: options/presets.py:182 +#: options/presets.py msgid "Australian Easters Rules" msgstr "" -#: options/presets.py:184 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:202 +#: options/presets.py msgid "2 vs 2 Impromptu" msgstr "" -#: options/presets.py:204 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." msgstr "" -#: options/presets.py:229 +#: options/presets.py msgid "3 vs 3 Prepared" msgstr "" -#: options/presets.py:231 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." msgstr "" -#: options/presets.py:258 +#: options/presets.py msgid "UADC Rules" msgstr "" -#: options/presets.py:260 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:296 +#: options/presets.py msgid "WSDC Rules" msgstr "" -#: options/presets.py:298 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:326 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "" -#: options/presets.py:338 +#: options/presets.py msgid "Tab Release Options" msgstr "" -#: options/presets.py:340 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" msgstr "" -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html msgid "Configuration" msgstr "" -#: options/templates/preferences_index.html:11 +#: options/templates/preferences_index.html #, python-format msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." msgstr "" -#: options/templates/preferences_index.html:24 +#: options/templates/preferences_index.html #, python-format msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." msgstr "" -#: options/templates/preferences_index.html:35 +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." msgstr "" -#: options/templates/preferences_index.html:54 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" msgstr "" -#: options/templates/preferences_index.html:59 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" msgstr "" -#: options/templates/preferences_index.html:64 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" msgstr "" -#: options/templates/preferences_index.html:69 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" msgstr "" -#: options/templates/preferences_index.html:74 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" msgstr "" -#: options/templates/preferences_index.html:79 +#: options/templates/preferences_index.html msgid "How and where are motions used" msgstr "" -#: options/templates/preferences_index.html:90 +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" msgstr "" -#: options/templates/preferences_index.html:95 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" msgstr "" -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" msgstr "" -#: options/templates/preferences_index.html:105 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" msgstr "" -#: options/templates/preferences_index.html:110 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" msgstr "" -#: options/templates/preferences_index.html:115 +#: options/templates/preferences_index.html msgid "Settings which can affect all tournaments on the site" msgstr "" -#: options/templates/preferences_index.html:127 +#: options/templates/preferences_index.html msgid "Manually Set Current Round" msgstr "" -#: options/templates/preferences_index.html:128 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." msgstr "" -#: options/templates/preferences_index.html:132 -msgid "Set Round Weights" +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: options/templates/preferences_index.html:133 +#: options/templates/preferences_index.html msgid "Rounds can be weighted so that certain rounds are worth more team points." msgstr "" -#: options/templates/preferences_index.html:140 +#: options/templates/preferences_index.html msgid "Presets" msgstr "" -#: options/templates/preferences_index.html:141 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." msgstr "" -#: options/templates/preferences_index.html:152 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" msgstr "" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" msgstr "" -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" msgstr "" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" msgstr "" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" msgstr "" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" msgstr "" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" msgstr "" -#: options/views.py:65 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." msgstr "" -#: options/views.py:111 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." msgstr "" diff --git a/tabbycat/participants/locale/pt/LC_MESSAGES/django.po b/tabbycat/participants/locale/pt/LC_MESSAGES/django.po index 0d600c1b09b..60978a8ce1f 100644 --- a/tabbycat/participants/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -18,960 +18,947 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 942\n" -#: participants/admin.py:96 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" msgstr "" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." msgstr[0] "" msgstr[1] "" -#: participants/admin.py:152 participants/admin.py:233 -msgid "Delete URL key" +#: participants/admin.py +msgid "Reset emoji" msgstr "" -#: participants/admin.py:160 +#: participants/admin.py #, python-format msgid "%(count)d team had their emoji reset." msgid_plural "%(count)d teams had their emojis reset." msgstr[0] "" msgstr[1] "" -#: participants/admin.py:164 -msgid "Reset emoji" +#: participants/admin.py +msgid "Reset code name" msgstr "" -#: participants/admin.py:170 +#: participants/admin.py #, python-format msgid "%(count)d team had their code name reset." msgid_plural "%(count)d teams had their code names reset." msgstr[0] "" msgstr[1] "" -#: participants/admin.py:174 -msgid "Reset code name" -msgstr "" - -#: participants/admin.py:228 +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." msgstr[0] "" msgstr[1] "" -#: participants/apps.py:7 participants/views.py:41 +#: participants/apps.py participants/views.py msgid "Participants" msgstr "" -#: participants/models.py:21 participants/models.py:37 -#: participants/models.py:66 participants/models.py:96 +#: participants/models.py msgid "name" msgstr "nome" -#: participants/models.py:24 participants/models.py:45 +#: participants/models.py msgid "region" msgstr "" -#: participants/models.py:25 +#: participants/models.py msgid "regions" msgstr "" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:39 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" msgstr "" -#: participants/models.py:41 +#: participants/models.py msgid "code" msgstr "" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:43 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" msgstr "" -#: participants/models.py:55 participants/models.py:155 -#: participants/models.py:353 +#: participants/models.py msgid "institution" msgstr "instituição" -#: participants/models.py:56 +#: participants/models.py msgid "institutions" msgstr "" -#: participants/models.py:64 participants/models.py:157 -#: participants/models.py:356 +#: participants/models.py msgid "tournament" msgstr "torneio" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:68 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" msgstr "" -#: participants/models.py:70 +#: participants/models.py msgid "slug" msgstr "" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:72 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" msgstr "" -#: participants/models.py:74 +#: participants/models.py msgid "sequence number" msgstr "número sequencial" -#: participants/models.py:75 +#: participants/models.py msgid "The order in which the categories are displayed" msgstr "" -#: participants/models.py:77 +#: participants/models.py msgid "limit" msgstr "" -#: participants/models.py:78 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: participants/models.py:80 +#: participants/models.py msgid "public" msgstr "" -#: participants/models.py:81 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" msgstr "" -#: participants/models.py:87 +#: participants/models.py msgid "speaker category" msgstr "" -#: participants/models.py:88 participants/models.py:330 +#: participants/models.py msgid "speaker categories" msgstr "" -#: participants/models.py:98 +#: participants/models.py msgid "email address" msgstr "" -#: participants/models.py:100 +#: participants/models.py msgid "phone" msgstr "" -#: participants/models.py:102 +#: participants/models.py msgid "anonymous" msgstr "anônimo" -#: participants/models.py:103 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" msgstr "" -#: participants/models.py:106 +#: participants/models.py +msgid "code name" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py msgid "URL key" msgstr "" -#: participants/models.py:111 +#: participants/models.py msgid "male" msgstr "" -#: participants/models.py:112 +#: participants/models.py msgid "female" msgstr "" -#: participants/models.py:113 +#: participants/models.py msgid "other" msgstr "" -#: participants/models.py:115 +#: participants/models.py msgid "gender" msgstr "" -#: participants/models.py:116 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" msgstr "" -#: participants/models.py:118 +#: participants/models.py msgid "pronoun" msgstr "" -#: participants/models.py:119 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" msgstr "" -#: participants/models.py:122 +#: participants/models.py msgid "person" msgstr "" -#: participants/models.py:123 +#: participants/models.py msgid "persons" msgstr "" -#: participants/models.py:138 +#: participants/models.py msgid "full name/suffix" msgstr "" -#: participants/models.py:139 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:141 +#: participants/models.py msgid "short name/suffix" msgstr "" -#: participants/models.py:142 +#: participants/models.py msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:144 -msgid "code name" -msgstr "" - -#: participants/models.py:145 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" msgstr "" -#: participants/models.py:148 +#: participants/models.py msgid "short name" msgstr "" -#: participants/models.py:149 +#: participants/models.py msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:151 +#: participants/models.py msgid "long name" msgstr "" -#: participants/models.py:152 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:159 +#: participants/models.py msgid "Uses institutional prefix" msgstr "" -#: participants/models.py:160 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" msgstr "" -#: participants/models.py:162 +#: participants/models.py msgid "break categories" msgstr "" -#: participants/models.py:167 participants/models.py:364 +#: participants/models.py msgid "institution conflicts" msgstr "" -#: participants/models.py:178 +#: participants/models.py msgid "none" msgstr "" -#: participants/models.py:179 +#: participants/models.py msgid "swing" msgstr "" -#: participants/models.py:180 +#: participants/models.py msgid "composite" msgstr "" -#: participants/models.py:181 +#: participants/models.py msgid "bye" msgstr "" -#: participants/models.py:184 +#: participants/models.py msgid "type" msgstr "tipo" -#: participants/models.py:188 +#: participants/models.py msgid "emoji" msgstr "" -#: participants/models.py:202 participants/models.py:328 +#: participants/models.py msgid "team" msgstr "dupla" -#: participants/models.py:203 +#: participants/models.py msgid "teams" msgstr "" -#: participants/models.py:311 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." msgstr "" -#: participants/models.py:313 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:315 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:333 +#: participants/models.py msgid "speaker" msgstr "" -#: participants/models.py:334 +#: participants/models.py msgid "speakers" msgstr "" -#: participants/models.py:357 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" msgstr "" -#: participants/models.py:359 +#: participants/models.py msgid "base score" msgstr "" -#: participants/models.py:368 +#: participants/models.py msgid "team conflicts" msgstr "" -#: participants/models.py:372 +#: participants/models.py msgid "adjudicator conflicts" msgstr "" -#: participants/models.py:375 +#: participants/models.py msgid "always trainee" msgstr "" -#: participants/models.py:376 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" msgstr "" -#: participants/models.py:378 +#: participants/models.py msgid "breaking" msgstr "" -#: participants/models.py:380 +#: participants/models.py msgid "independent" msgstr "" -#: participants/models.py:382 +#: participants/models.py msgid "adjudication core" msgstr "" -#: participants/models.py:391 +#: participants/models.py msgid "adjudicator" msgstr "juiz" -#: participants/models.py:392 +#: participants/models.py msgid "adjudicators" msgstr "" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" msgstr "" -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" msgstr "" -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" msgstr "" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" msgstr "" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" msgstr "" -#: participants/templates/adjudicator_registration_card.html:27 -#: participants/templates/team_registration_card.html:89 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:31 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" msgstr "" -#: participants/templates/adjudicator_registration_card.html:36 -#: participants/templates/team_registration_card.html:98 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:43 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." msgstr "" -#: participants/templates/adjudicator_registration_card.html:50 -#: participants/templates/team_registration_card.html:109 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:52 -#: participants/templates/team_registration_card.html:111 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr "" -#: participants/templates/adjudicator_registration_card.html:54 -#: participants/templates/adjudicator_registration_card.html:62 -#: participants/templates/adjudicator_registration_card.html:74 -#: participants/templates/adjudicator_registration_card.html:84 -#: participants/templates/team_registration_card.html:58 -#: participants/templates/team_registration_card.html:70 -#: participants/templates/team_registration_card.html:79 -#: participants/templates/team_registration_card.html:113 -#: participants/templates/team_registration_card.html:122 -#: participants/templates/team_registration_card.html:133 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" msgstr "Nenhum" -#: participants/templates/adjudicator_registration_card.html:58 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:60 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:71 -#: participants/templates/adjudicator_registration_card.html:82 -#: participants/templates/team_registration_card.html:56 -#: participants/templates/team_registration_card.html:68 -#: participants/templates/team_registration_card.html:77 -#: participants/templates/team_registration_card.html:120 -#: participants/templates/team_registration_card.html:131 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr "" -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/team_registration_card.html:118 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:80 -#: participants/templates/team_registration_card.html:129 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" msgstr "" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:14 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." msgstr "" #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:21 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:33 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:41 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:47 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" msgstr "" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "" -#: participants/templates/current_round/common.html:28 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "" msgstr[1] "" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" msgstr "" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" msgstr "" -#: participants/templates/current_round/common.html:44 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." msgstr "" -#: participants/templates/current_round/common.html:54 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." msgstr "" -#: participants/templates/current_round/common.html:57 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "" -#: participants/templates/current_round/common.html:61 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "" -#: participants/templates/current_round/common.html:69 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." msgstr "" -#: participants/templates/current_round/round_adj.html:14 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:18 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:24 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:28 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:36 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:40 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:46 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:50 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:85 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:89 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:95 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:99 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:107 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:111 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:117 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:121 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:129 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:133 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:139 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:143 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:39 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:43 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:56 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:60 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:66 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:70 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." msgstr "" -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" msgstr "" -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" msgstr "" -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:38 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" msgstr "" -#: participants/templates/feedback_progress_panel.html:46 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:53 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." msgstr "" -#: participants/templates/in_this_round.html:9 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" msgstr "" -#: participants/templates/in_this_round.html:13 +#: participants/templates/in_this_round.html msgid "In This Round" msgstr "" -#: participants/templates/in_this_round.html:16 +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" msgstr "" -#: participants/templates/in_this_round.html:23 +#: participants/templates/in_this_round.html msgid "Room TBA" msgstr "" -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:39 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:54 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." msgstr[0] "" msgstr[1] "" -#: participants/templates/in_this_round.html:60 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." msgstr "" -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:79 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:91 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." msgstr "" -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" msgstr "" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" msgstr "" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." msgstr "" -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" msgstr "" -#: participants/templates/participants_subnav.html:26 participants/views.py:135 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" msgstr "" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" msgstr "" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" msgstr "" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." msgstr "" -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." msgstr "" -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" msgstr "" -#: participants/templates/team_registration_card.html:16 +#: participants/templates/team_registration_card.html msgid "Team name:" msgstr "" -#: participants/templates/team_registration_card.html:21 +#: participants/templates/team_registration_card.html msgid "Full team name:" msgstr "" -#: participants/templates/team_registration_card.html:25 +#: participants/templates/team_registration_card.html msgid "Short team name:" msgstr "" -#: participants/templates/team_registration_card.html:32 +#: participants/templates/team_registration_card.html msgid "Code name:" msgstr "" -#: participants/templates/team_registration_card.html:36 +#: participants/templates/team_registration_card.html msgid "No code name assigned" msgstr "" -#: participants/templates/team_registration_card.html:42 +#: participants/templates/team_registration_card.html msgid "Emoji:" msgstr "" -#: participants/templates/team_registration_card.html:46 +#: participants/templates/team_registration_card.html msgid "No emoji assigned" msgstr "" -#: participants/templates/team_registration_card.html:54 +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "" -#: participants/templates/team_registration_card.html:66 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" msgstr "" -#: participants/templates/team_registration_card.html:75 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" msgstr "" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" msgstr "" -#: participants/views.py:46 +#: participants/views.py msgid "Adjudicators" msgstr "" -#: participants/views.py:55 +#: participants/views.py msgid "Speakers" msgstr "" -#: participants/views.py:86 +#: participants/views.py msgid "Institutions" msgstr "" -#: participants/views.py:102 +#: participants/views.py msgid "Code" msgstr "" -#: participants/views.py:103 +#: participants/views.py msgid "Full name" msgstr "" -#: participants/views.py:105 +#: participants/views.py msgid "Region" msgstr "" -#: participants/views.py:107 +#: participants/views.py msgid "Teams" msgstr "" -#: participants/views.py:107 +#: participants/views.py msgid "Number of teams" msgstr "" -#: participants/views.py:109 +#: participants/views.py msgid "Adjs" msgstr "" -#: participants/views.py:110 +#: participants/views.py msgid "Number of adjudicators, excluding independents" msgstr "" -#: participants/views.py:112 +#: participants/views.py msgid "IAs" msgstr "" -#: participants/views.py:113 +#: participants/views.py msgid "Number of independent adjudicators" msgstr "" -#: participants/views.py:143 +#: participants/views.py msgid "Code name" msgstr "" -#: participants/views.py:163 +#: participants/views.py msgid "Team Registration" msgstr "" -#: participants/views.py:231 +#: participants/views.py msgid "Results" msgstr "" -#: participants/views.py:239 participants/views.py:264 +#: participants/views.py #, python-format msgid "Record for %(name)s" msgstr "" -#: participants/views.py:261 +#: participants/views.py msgid "Previous Rounds" msgstr "" -#: participants/views.py:352 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" msgstr[0] "" msgstr[1] "" -#: participants/views.py:358 +#: participants/views.py msgid "No changes were made to the categories." msgstr "" -#: participants/views.py:371 +#: participants/views.py msgid "Speaker Category Eligibility" msgstr "" diff --git a/tabbycat/printing/locale/pt/LC_MESSAGES/django.po b/tabbycat/printing/locale/pt/LC_MESSAGES/django.po index 793f8b03a63..bee1c33d639 100644 --- a/tabbycat/printing/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:18\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -18,109 +18,108 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" msgstr "" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" msgstr "" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." msgstr "" -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." msgstr "" -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" msgstr "" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" msgstr "" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" msgstr "" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" msgstr "" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" msgstr "" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" msgstr "para %(round)s" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" msgstr "" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" msgstr "" -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" msgstr "" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "" -#: printing/templates/scoresheet_list.html:47 +#: printing/templates/scoresheet_list.html msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." msgstr "" -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" msgstr "" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." msgstr "" -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" msgstr "" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" msgstr "" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "Dupla" diff --git a/tabbycat/privateurls/locale/pt/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/pt/LC_MESSAGES/django.po index ee4094b9546..525fd65f777 100644 --- a/tabbycat/privateurls/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:46\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -18,169 +18,162 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" msgstr "" -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:145 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" msgstr "" -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." msgstr "" -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" msgstr "" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." msgstr "" -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." msgstr "" -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." msgstr "" -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." msgstr "" -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." msgstr "" -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." msgstr "" -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" msgstr "" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" msgstr "" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" msgstr "" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." msgstr "" -#: privateurls/templates/public_url_landing.html:62 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Submit Ballot for %(round)s" msgstr "" -#: privateurls/templates/public_url_landing.html:65 -msgid "There are no current rounds" -msgstr "" - -#: privateurls/templates/public_url_landing.html:71 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" msgstr "" -#: privateurls/templates/public_url_landing.html:84 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" msgstr "" -#: privateurls/views.py:63 privateurls/views.py:164 +#: privateurls/views.py msgid "no URL" msgstr "" -#: privateurls/views.py:76 +#: privateurls/views.py msgid "URL" msgstr "" -#: privateurls/views.py:87 +#: privateurls/views.py msgid "Speakers" msgstr "" -#: privateurls/views.py:97 +#: privateurls/views.py msgid "Adjudicators" msgstr "" -#: privateurls/views.py:119 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." msgstr "" -#: privateurls/views.py:126 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." msgstr[0] "" msgstr[1] "" -#: privateurls/views.py:131 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." msgstr[0] "" msgstr[1] "" -#: privateurls/views.py:172 +#: privateurls/views.py msgid "URL Key" msgstr "" -#: privateurls/views.py:181 +#: privateurls/views.py msgid "Debates" msgstr "" diff --git a/tabbycat/results/locale/pt/LC_MESSAGES/django.po b/tabbycat/results/locale/pt/LC_MESSAGES/django.po index 0c61bc2a3c0..b3425dc15da 100644 --- a/tabbycat/results/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:14\n" "Last-Translator: philip_tc\n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -18,1081 +18,1075 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 948\n" -#: results/admin.py:44 +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py #, python-format msgid "Resaved results for %(count)d ballot submission." msgid_plural "Resaved results for %(count)d ballot submissions." msgstr[0] "" msgstr[1] "" -#: results/admin.py:47 -msgid "Resave results" -msgstr "" - -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:158 +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" msgstr "" -#: results/forms.py:39 +#: results/forms.py msgid "Tournament password" msgstr "" -#: results/forms.py:45 +#: results/forms.py msgid "That password isn't correct." msgstr "" -#: results/forms.py:77 +#: results/forms.py msgid "Please enter a whole number." msgstr "" -#: results/forms.py:79 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." msgstr "" -#: results/forms.py:166 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." msgstr "" -#: results/forms.py:173 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." msgstr "" -#: results/forms.py:302 results/forms.py:336 +#: results/forms.py msgid "---------" msgstr "" -#: results/forms.py:304 results/forms.py:306 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" msgstr "" -#: results/forms.py:323 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" msgstr "" -#: results/forms.py:332 results/forms.py:901 +#: results/forms.py #, python-format msgid "%(team)s (%(side)s)" msgstr "" -#: results/forms.py:335 +#: results/forms.py msgid "Winner" msgstr "" -#: results/forms.py:489 +#: results/forms.py msgid "Mark as a duplicate speech" msgstr "" -#: results/forms.py:549 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." msgstr "" -#: results/forms.py:563 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." msgstr[0] "" msgstr[1] "" -#: results/forms.py:580 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." msgstr "" -#: results/forms.py:587 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." msgstr "" -#: results/forms.py:719 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." msgstr "" -#: results/forms.py:724 +#: results/forms.py msgid "The declared winner does not correspond to the team with the highest score." msgstr "" -#: results/forms.py:733 +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" msgstr "" -#: results/forms.py:743 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:846 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:851 +#: results/forms.py #, python-format msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:859 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:921 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." msgstr "" -#: results/forms.py:964 +#: results/forms.py #, python-format msgid "There must be exactly %(n)d team advancing." msgid_plural "There must be exactly %(n)d teams advancing." msgstr[0] "" msgstr[1] "" -#: results/forms.py:1007 +#: results/forms.py msgid "There must be exactly 1 team advancing." msgstr "" -#: results/models.py:33 +#: results/models.py msgid "Tab room" msgstr "" -#: results/models.py:34 +#: results/models.py msgid "Public" msgstr "" -#: results/models.py:38 +#: results/models.py msgid "timestamp" msgstr "marca de tempo" -#: results/models.py:40 +#: results/models.py msgid "version" msgstr "" -#: results/models.py:42 +#: results/models.py msgid "submitter type" msgstr "" -#: results/models.py:44 +#: results/models.py msgid "confirmed" msgstr "" -#: results/models.py:48 +#: results/models.py msgid "from private URL" msgstr "" -#: results/models.py:51 +#: results/models.py msgid "from participant" msgstr "" -#: results/models.py:56 +#: results/models.py msgid "submitter" msgstr "" -#: results/models.py:59 +#: results/models.py msgid "confirmer" msgstr "" -#: results/models.py:61 +#: results/models.py msgid "confirm timestamp" msgstr "" -#: results/models.py:63 +#: results/models.py msgid "IP address" msgstr "" -#: results/models.py:103 +#: results/models.py msgid "A tab room ballot must have a user associated." msgstr "" -#: results/models.py:111 +#: results/models.py msgid "debate" msgstr "debate" -#: results/models.py:113 +#: results/models.py msgid "motion" msgstr "moção" -#: results/models.py:115 +#: results/models.py msgid "discarded" msgstr "" -#: results/models.py:117 +#: results/models.py msgid "single adjudicator" msgstr "" -#: results/models.py:118 +#: results/models.py msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." msgstr "" -#: results/models.py:123 results/models.py:228 results/models.py:267 -#: results/models.py:305 results/models.py:347 +#: results/models.py msgid "ballot submission" msgstr "submissão de cédulas" -#: results/models.py:124 +#: results/models.py msgid "ballot submissions" msgstr "" -#: results/models.py:143 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" msgstr "" -#: results/models.py:150 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" msgstr "" -#: results/models.py:230 results/models.py:269 +#: results/models.py msgid "debate adjudicator" msgstr "juiz do debate" -#: results/models.py:232 results/models.py:271 results/models.py:307 -#: results/models.py:349 +#: results/models.py msgid "debate team" msgstr "" -#: results/models.py:235 results/models.py:312 +#: results/models.py msgid "win" msgstr "" -#: results/models.py:237 results/models.py:314 +#: results/models.py msgid "margin" msgstr "" -#: results/models.py:239 results/models.py:272 results/models.py:316 -#: results/models.py:352 +#: results/models.py msgid "score" msgstr "pontuação" -#: results/models.py:244 +#: results/models.py msgid "team score by adjudicator" msgstr "" -#: results/models.py:245 +#: results/models.py msgid "team scores by adjudicator" msgstr "" -#: results/models.py:260 results/models.py:294 +#: results/models.py msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." msgstr "" -#: results/models.py:273 results/models.py:353 +#: results/models.py msgid "position" msgstr "" -#: results/models.py:279 +#: results/models.py msgid "speaker score by adjudicator" msgstr "" -#: results/models.py:280 +#: results/models.py msgid "speaker scores by adjudicator" msgstr "" -#: results/models.py:310 +#: results/models.py msgid "points" msgstr "" -#: results/models.py:318 +#: results/models.py msgid "votes given" msgstr "" -#: results/models.py:320 +#: results/models.py msgid "votes possible" msgstr "" -#: results/models.py:324 +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py msgid "team score" msgstr "" -#: results/models.py:325 +#: results/models.py msgid "team scores" msgstr "" -#: results/models.py:351 +#: results/models.py msgid "speaker" msgstr "" -#: results/models.py:355 +#: results/models.py msgid "ghost" msgstr "" -#: results/models.py:356 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." msgstr "" -#: results/models.py:365 +#: results/models.py msgid "speaker score" msgstr "" -#: results/models.py:366 +#: results/models.py msgid "speaker scores" msgstr "" -#: results/models.py:375 +#: results/models.py msgid "The debate team and speaker must be from the same team." msgstr "" -#: results/models.py:378 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." msgstr "" -#: results/tables.py:15 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" msgstr "" -#: results/tables.py:36 +#: results/tables.py msgid "Status of this debate's ballot" msgstr "" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" msgstr "" -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" msgstr "" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" msgstr "" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" msgstr "" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" msgstr "" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the current round" msgstr "" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" msgstr "" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" msgstr "" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." msgstr "" -#: results/templates/admin_results.html:88 +#: results/templates/admin_results.html #, python-format msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." msgstr[0] "" msgstr[1] "" -#: results/templates/admin_results.html:94 +#: results/templates/admin_results.html #, python-format msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." msgstr "" -#: results/templates/admin_results.html:113 +#: results/templates/admin_results.html msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." msgstr "" -#: results/templates/admin_results.html:127 +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." msgstr "" -#: results/templates/admin_results.html:135 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." msgstr "" -#: results/templates/admin_results.html:144 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/admin_results.html:151 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:12 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" msgstr "" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:17 -#: results/templates/ballot_entry_base.html:21 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" msgstr "" -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." msgstr "" -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html msgid "Confirm results" msgstr "" -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" msgstr "" -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:68 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." msgstr "" -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 results/views.py:513 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" msgstr "" -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "" -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." msgstr "" -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "" -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." msgstr[0] "" msgstr[1] "" -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr[0] "" msgstr[1] "" -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:42 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:45 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" msgstr "" -#: results/templates/ballot/ballot_set.html:6 +#: results/templates/ballot/ballot_set.html msgid "There are some problems with this scoresheet. Please review and correct them." msgstr "" -#: results/templates/ballot/ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s (%(institution)s)" msgstr "" -#: results/templates/ballot/ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s" msgstr "" -#: results/templates/ballot/ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html msgid "Scoresheet" msgstr "" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Solo Chair" msgstr "" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Chair" msgstr "" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Panellist" msgstr "" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Trainee" msgstr "" -#: results/templates/ballot/ballot_set.html:44 +#: results/templates/ballot/ballot_set.html msgid "Assign sides before entering scores" msgstr "" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." msgstr "" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "There is %(number)s existing ballot set for this debate." msgid_plural "There are %(number)s existing ballot sets for this debate." msgstr[0] "" msgstr[1] "" -#: results/templates/ballot/other_ballots_list.html:21 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." msgstr "" -#: results/templates/ballot/other_ballots_list.html:26 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." msgstr "" -#: results/templates/ballot/other_ballots_list.html:41 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:45 +#: results/templates/ballot/other_ballots_list.html msgid "MERGING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:48 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:53 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:58 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from %(adjudicator)s's private URL," msgstr "" -#: results/templates/ballot/other_ballots_list.html:62 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:68 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," msgstr "" -#: results/templates/ballot/other_ballots_list.html:73 +#: results/templates/ballot/other_ballots_list.html msgid "unknown" msgstr "" -#: results/templates/ballot/other_ballots_list.html:74 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "confirmed by %(confirmer)s" msgstr "" -#: results/templates/ballot/other_ballots_list.html:78 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" msgstr "" -#: results/templates/ballot/other_ballots_list.html:82 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" msgstr "" -#: results/templates/ballot/other_ballots_list.html:86 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" msgstr[0] "" msgstr[1] "" -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." msgstr "" -#: results/templates/ballot_entry_base.html:30 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr "" -#: results/templates/ballot_entry_base.html:41 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." msgstr "" -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" msgstr "" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" msgstr "" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" msgstr "" -#: results/templates/debate_postponement_form.html:3 +#: results/templates/debate_postponement_form.html msgid "Postponed" msgstr "" -#: results/templates/debate_postponement_form.html:8 +#: results/templates/debate_postponement_form.html msgid "Postpone" msgstr "" -#: results/templates/enter_results.html:15 +#: results/templates/enter_results.html msgid "Ballot Status" msgstr "" -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" msgstr "" -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" msgstr "" -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" msgstr "" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" msgstr "" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" msgstr "" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." msgstr "" -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" msgstr "" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." msgstr "" -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" msgstr "" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" msgstr "Quem é você?" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" msgstr "" -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." msgstr "" -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" msgstr "" -#: results/templates/public_ballot_set.html:28 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" msgstr "" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" msgstr "" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" msgstr "" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" msgstr "" -#: results/templates/public_ballot_set.html:92 -#: results/templates/public_ballot_set.html:96 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:105 -#: results/templates/public_ballot_set.html:109 +#: results/templates/public_ballot_set.html #, python-format msgid "%(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Won" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Lost" msgstr "" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set_error.html #, python-format msgid "Back to the tournament home page." msgstr "" -#: results/templates/public_enter_results.html:9 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" msgstr "" -#: results/templates/public_enter_results.html:16 +#: results/templates/public_enter_results.html msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." msgstr "" -#: results/templates/public_enter_results.html:24 +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." msgstr[0] "" msgstr[1] "" -#: results/templates/public_enter_results.html:63 -msgid "Submit Ballot(s)" -msgstr "" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" +msgstr[1] "" -#: results/templates/public_enter_results.html:65 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "Ao enviar este formulário, seu endereço IP será armazenado para fins de registro." -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" msgstr "" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" msgstr "" -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" msgstr "" -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" msgstr "" -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" msgstr "" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" msgstr "" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." msgstr "" -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." msgstr "" -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" msgstr "" -#: results/utils.py:19 +#: results/utils.py msgid "Debate was Postponed" msgstr "" -#: results/utils.py:20 +#: results/utils.py msgid "Ballot is Unconfirmed" msgstr "" -#: results/utils.py:21 +#: results/utils.py msgid "Ballot is Confirmed" msgstr "" #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:36 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" msgstr "" -#: results/utils.py:43 +#: results/utils.py #, python-format msgid "%(team)s (%(side)s) won" msgstr "" #. Translators: The team here is the losing team -#: results/utils.py:45 +#: results/utils.py #, python-format msgid "vs %(team)s (%(side)s)" msgstr "" -#: results/utils.py:47 +#: results/utils.py #, python-format msgid "Advancing: %(advancing_list)s
    " msgstr "" -#: results/utils.py:50 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" msgstr "" -#: results/utils.py:58 +#: results/utils.py #, python-format msgid "1st: %(first_team)s
    " msgstr "" -#: results/utils.py:59 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" "4th: %(fourth_team)s" msgstr "" -#: results/utils.py:74 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" msgstr "" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:134 +#: results/utils.py msgid "PM" msgstr "" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:136 +#: results/utils.py msgid "DPM" msgstr "" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:138 +#: results/utils.py msgid "LO" msgstr "" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:140 +#: results/utils.py msgid "DLO" msgstr "" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:142 +#: results/utils.py msgid "MG" msgstr "" #. Translators: Abbreviation for Government Whip -#: results/utils.py:144 +#: results/utils.py msgid "GW" msgstr "" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:146 +#: results/utils.py msgid "MO" msgstr "" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:148 +#: results/utils.py msgid "OW" msgstr "" -#: results/utils.py:168 +#: results/utils.py msgid "Reply" msgstr "" -#: results/views.py:270 results/views.py:272 +#: results/views.py msgid " vs " msgstr "" -#: results/views.py:273 +#: results/views.py #, python-format msgid "%(matchup)s: %(round)s @ %(room)s" msgstr "" -#: results/views.py:275 +#: results/views.py msgid "N/A" msgstr "" -#: results/views.py:408 +#: results/views.py msgid "New Ballot Set" msgstr "" -#: results/views.py:411 +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." msgstr "" -#: results/views.py:413 results/views.py:480 +#: results/views.py msgid " Email receipts queued to be sent." msgstr "" -#: results/views.py:427 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." msgstr "" -#: results/views.py:433 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." msgstr "" -#: results/views.py:459 +#: results/views.py msgid "Edit Ballot Set" msgstr "" -#: results/views.py:473 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." msgstr "" -#: results/views.py:475 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." msgstr "" -#: results/views.py:477 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." msgstr "" -#: results/views.py:528 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." msgstr "" -#: results/views.py:535 +#: results/views.py msgid "The draw for this round hasn't been released yet." msgstr "" -#: results/views.py:539 +#: results/views.py msgid "The motions for this round haven't been released yet." msgstr "" -#: results/views.py:544 +#: results/views.py msgid "It looks like you don't have a debate this round." msgstr "" -#: results/views.py:546 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." msgstr "" -#: results/views.py:573 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:578 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:689 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." msgstr "" -#: results/views.py:707 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." msgstr "" -#: results/views.py:710 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." msgstr "" -#: results/views.py:714 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." msgstr "" -#: results/views.py:717 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." msgstr "" -#: results/views.py:739 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." msgstr "" -#: results/views.py:805 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" msgstr "" -#: results/views.py:809 +#: results/views.py msgid "Adjudicator" msgstr "Juiz" -#: results/views.py:846 +#: results/views.py msgid "Merge Ballots" msgstr "" -#: results/views.py:877 +#: results/views.py msgid "The speaking order in the ballots is inconsistent, so could not be merged." msgstr "" -#: results/views.py:879 +#: results/views.py msgid "Duplicate speeches are marked inconsistently, so could not be merged." msgstr "" -#: results/views.py:880 +#: results/views.py #, python-format msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." msgstr "" diff --git a/tabbycat/standings/locale/pt/LC_MESSAGES/django.po b/tabbycat/standings/locale/pt/LC_MESSAGES/django.po index 077fb6d0f98..d832a90b84f 100644 --- a/tabbycat/standings/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-29 23:49-0400\n" -"PO-Revision-Date: 2020-12-30 04:11\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:01\n" "Last-Translator: philip_tc\n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -18,604 +18,595 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 950\n" -#: standings/base.py:297 +#: standings/base.py msgid "The same metric would be added twice:" msgstr "A mesma métrica seria adicionada duas vezes:" -#: standings/base.py:298 +#: standings/base.py msgid "The same ranking would be added twice:" msgstr "O mesmo ranking seria adicionado duas vezes:" -#: standings/base.py:414 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" msgstr "Código métrico não reconhecido: \"%(code)s\"" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" msgstr "Todos" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" msgstr "Classificando" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" msgstr "Não é %(category)s" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" msgstr "Todos os debatedores" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "Presidentes" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" msgstr "Juízes auxiliares" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" msgstr "Aprendiz" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" msgstr "Avaliação média" -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" msgstr "Avaliação Mediana" -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" msgstr "Classificação do Quarto Superior" -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" msgstr "Classificação do Quarto Inferior" -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" msgstr "Avaliação média das duplas" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" msgstr "Avaliação média dos Presidentes" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" msgstr "Avaliação média dos Juízes Auxiliares" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" msgstr "Avaliação média dos Aprendizes" -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" msgstr "Pontuação Média" -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" msgstr "Pontuação Mediana" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" msgstr "Pontuação do Quarto Superior" -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" msgstr "Pontuação do Quarto Inferior" -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" msgstr "Média do Debatedor Replicante" -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" msgstr "Média %(num)d do debatedor" -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" msgstr "Média de Pontuação da Final" -#: standings/speakers.py:50 standings/speakers.py:106 +#: standings/speakers.py msgid "total" msgstr "total" -#: standings/speakers.py:51 standings/speakers.py:107 +#: standings/speakers.py msgid "Total" msgstr "Total" -#: standings/speakers.py:58 standings/speakers.py:116 +#: standings/speakers.py msgid "average" msgstr "média" -#: standings/speakers.py:59 standings/speakers.py:117 +#: standings/speakers.py msgid "Avg" msgstr "Md" -#: standings/speakers.py:66 +#: standings/speakers.py msgid "team points" msgstr "pontos de dupla" -#: standings/speakers.py:67 +#: standings/speakers.py msgid "Team" msgstr "Dupla" -#: standings/speakers.py:89 standings/speakers.py:126 +#: standings/speakers.py msgid "standard deviation" msgstr "desvio padrão" -#: standings/speakers.py:90 standings/speakers.py:127 +#: standings/speakers.py msgid "Stdev" msgstr "DsvPdao" -#: standings/speakers.py:98 +#: standings/speakers.py msgid "number of speeches given" msgstr "número de discursos dados" -#: standings/speakers.py:99 standings/speakers.py:138 +#: standings/speakers.py msgid "Num" msgstr "Nº" -#: standings/speakers.py:137 +#: standings/speakers.py msgid "replies given" msgstr "réplicas dadas" -#: standings/speakers.py:147 +#: standings/speakers.py msgid "trimmed mean (high-low drop)" msgstr "" -#: standings/speakers.py:148 +#: standings/speakers.py msgid "Trim" msgstr "" -#: standings/teams.py:62 +#: standings/teams.py msgid "points" msgstr "pontos" -#: standings/teams.py:63 +#: standings/teams.py msgid "Pts" msgstr "Pts." -#: standings/teams.py:76 +#: standings/teams.py msgid "wins" msgstr "vitórias" -#: standings/teams.py:77 standings/views.py:592 +#: standings/teams.py standings/views.py msgid "Wins" msgstr "Vitórias" -#: standings/teams.py:87 +#: standings/teams.py msgid "total speaker score" msgstr "pontuação total do debatedor" -#: standings/teams.py:88 +#: standings/teams.py msgid "Spk" msgstr "Dbtor" -#: standings/teams.py:97 +#: standings/teams.py msgid "average total speaker score" msgstr "pontuação total média do debatedor" -#: standings/teams.py:98 +#: standings/teams.py msgid "ATSS" msgstr "PTMD" -#: standings/teams.py:107 +#: standings/teams.py msgid "speaker score standard deviation" msgstr "desvio padrão de pontuação do debatedor" -#: standings/teams.py:108 +#: standings/teams.py msgid "SSD" msgstr "DPPD" -#: standings/teams.py:118 +#: standings/teams.py msgid "sum of margins" msgstr "soma das margens" -#: standings/teams.py:119 +#: standings/teams.py msgid "Marg" msgstr "Marg" -#: standings/teams.py:128 +#: standings/teams.py msgid "average margin" msgstr "" -#: standings/teams.py:129 +#: standings/teams.py msgid "AWM" msgstr "" -#: standings/teams.py:138 +#: standings/teams.py msgid "average individual speaker score" msgstr "pontuação individual média do debatedor" -#: standings/teams.py:139 +#: standings/teams.py msgid "AISS" msgstr "PIMD" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by wins" msgstr "" -#: standings/teams.py:212 +#: standings/teams.py msgid "DS" msgstr "FA" -#: standings/teams.py:219 +#: standings/teams.py msgid "draw strength by total speaker score" msgstr "" -#: standings/teams.py:220 +#: standings/teams.py msgid "DSS" msgstr "" -#: standings/teams.py:231 +#: standings/teams.py msgid "number of pullups before this round" msgstr "" -#: standings/teams.py:232 +#: standings/teams.py msgid "PU" msgstr "" -#: standings/teams.py:254 +#: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "número de juízes que votaram nesta dupla" -#: standings/teams.py:255 +#: standings/teams.py msgid "Ballots" msgstr "Cédulas" -#: standings/teams.py:256 +#: standings/teams.py msgid "votes/ballots carried" msgstr "votos/cédulas feitos" -#: standings/teams.py:280 +#: standings/teams.py msgid "number of firsts" msgstr "número de primeiros" -#: standings/teams.py:281 +#: standings/teams.py msgid "1sts" msgstr "1ºs" -#: standings/teams.py:290 +#: standings/teams.py msgid "number of seconds" msgstr "número de segundos" -#: standings/teams.py:291 +#: standings/teams.py msgid "2nds" msgstr "2ºs" -#: standings/teams.py:300 +#: standings/teams.py msgid "number of thirds" msgstr "" -#: standings/teams.py:301 +#: standings/teams.py msgid "3rds" msgstr "" -#: standings/teams.py:313 +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py msgid "Who-beat-whom" msgstr "Quem venceu quem" -#: standings/teams.py:314 +#: standings/teams.py msgid "WBW" msgstr "QVQ" -#: standings/teams.py:315 +#: standings/teams.py msgid "who-beat-whom" msgstr "quem venceu quem" -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." msgstr "Também exclui resultados de rodadas silenciosas (se houver) e da rodada atual." -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "Esta lista é ordenada por pontos de dupla, e então alfabética pelo nome da equipe. Não indica o ranking de cada time em cada confronto. %(silent_round_sentence)s" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "Esta lista é ordenada por número de vitórias, e então alfabética pelo nome da dupla. Não indica o ranking de cada equipe em cada confronto. %(silent_round_sentence)s" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." msgstr "Não há rodadas para os quais os resultados estão disponíveis." -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." msgstr "Os debatedores de réplica estão ranqueados por sua pontuação média de réplica." -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." msgstr "Os oradores podem perder até %(count)s discursos de réplica antes que eles sejam omitidos das classificações de réplica." -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." msgstr "Todos os replicantes aparecem nestas classificações, não importando quantas réplicas eles perderam." -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." msgstr "Estas configurações podem ser modificadas na seção de Classificações nas configurações deste torneio." -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." msgstr "" -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." msgstr "Os debatedores estão ranqueados pela sua pontuação média." -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." msgstr "Os debatedores estão ranqueados pela sua pontuação total. Qualquer debatedor que tenha perdido um único debate será imensamente punido nesse ranking." -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." msgstr "Os debatedores podem perder até %(count)s debates antes que eles sejam omitidos das classificações individuais." -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." msgstr "Todos os debatedores aparecem nestas classificações, independentemente de quantos debates eles perderam." -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." msgstr "Colocar um limite no número de debates perdidos requer que a métrica do \"número de discursos dados\" seja incluída nos cálculos das classificações de debatedores, então foi automaticamente adicionada. Para remover esta mensagem de alerta, adicione Número de discursos dados ao Métricas extras da Classificação dos Debatedores na Seção de classificações nas configurações deste torneio." -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" msgstr "Visão geral da diversidade" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." msgstr "Os resultados aqui dispostos são apresentados sem testes de significado estatístico. As correlação não devem ser consideradas automaticamente confiáveis; em especial em pequenos torneios. Uma \"região\" é uma categoria personalizável atribuída a um conjunto de instituições e contada usando o número de participantes atribuídos a essas instituições." -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" msgstr "Não identificado como um homem cis" -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" msgstr "Identificado como um homem cis" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" msgstr "Não especificado/não informado" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" msgstr "Classificações" -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" msgstr "Melhores notas" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" msgstr "%(speaker)s em %(round)s" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:152 -#: standings/templates/standings_index.html:167 -#: standings/templates/standings_index.html:186 +#: standings/templates/standings_index.html msgid "No data yet" msgstr "Ainda sem dados" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" msgstr "Piores notas" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" msgstr "Maiores Margens" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" msgstr "%(team)s vs %(opp)s em %(round)s" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" msgstr "Margens mais próximas" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" msgstr "Melhores Notas de Dupla" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" msgstr "%(team)s em %(round)s" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" msgstr "" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" msgstr "Moções mais/menos populares" -#: standings/templates/standings_index.html:177 +#: standings/templates/standings_index.html msgid "Average Speaks" msgstr "Média de notas" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" msgstr "Visão geral" -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "Duplas" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" msgstr "Todos" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" msgstr "Debatedores" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" msgstr "Discursos principais" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" msgstr "Todos" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "Debatedores " -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" msgstr "Réplicas" -#: standings/templates/standings_menu.html:63 -#: standings/templates/standings_menu.html:76 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "Moções" -#: standings/templates/standings_menu.html:66 +#: standings/templates/standings_menu.html msgid "By Round" msgstr "" -#: standings/templates/standings_menu.html:81 +#: standings/templates/standings_menu.html msgid "Diversity" msgstr "Diversidade" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." msgstr "" -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " msgstr "

    Houve um erro ao gerar as colocações: %(message)s

    " -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " msgstr "

    Você talvez deva verificar duas vezes as configurações das colocações na seção Configurar. Se esse problema persistir e você não tiver certeza de como consertar, por favor contate os desenvolvedores.

    " -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " msgstr "

    O diretor da tabulação precisará resolver este problema.

    " -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" msgstr "para %(round)s" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" msgstr "%(title)s (Apenas %(limit)d superior)" -#: standings/views.py:208 standings/views.py:428 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." msgstr "A tabulação não pode ser exibida porque todas as rodadas até agora neste torneio estão silenciosas." -#: standings/views.py:290 +#: standings/views.py msgid "Speaker Standings" msgstr "Colocações dos Debatedores" -#: standings/views.py:326 +#: standings/views.py msgid "Speaker Tab" msgstr "Classificação individual" -#: standings/views.py:341 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" msgstr "%(category)s Colocações dos Debatedores" -#: standings/views.py:359 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" msgstr "%(category)s Classificação individual" -#: standings/views.py:372 +#: standings/views.py msgid "Reply Speaker Standings" msgstr "Colocações dos Replicantes" -#: standings/views.py:380 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." msgstr "Os discursos de réplica não estão habilitados neste torneio." -#: standings/views.py:408 +#: standings/views.py msgid "Reply Speaker Tab" msgstr "Colocações dos Debatedores Replicantes" -#: standings/views.py:420 standings/views.py:669 +#: standings/views.py msgid "Team Standings" msgstr "Colocações das Duplas" -#: standings/views.py:499 +#: standings/views.py msgid "Team Tab" msgstr "Classificação das Duplas" -#: standings/views.py:518 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" msgstr "%(category)s Colocações das Duplas" -#: standings/views.py:545 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" msgstr "%(category)s Classificação das Duplas" -#: standings/views.py:556 +#: standings/views.py msgid "Current Team Standings" msgstr "Colocações atuais das Duplas" -#: standings/views.py:592 +#: standings/views.py msgid "Points" msgstr "Pontos" -#: standings/views.py:638 +#: standings/views.py msgid "Feedback Overview" msgstr "Visão geral do feedback" -#: standings/views.py:655 -msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." msgstr "" diff --git a/tabbycat/tournaments/locale/pt/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/pt/LC_MESSAGES/django.po index 43fa62f46ac..5f842f55c59 100644 --- a/tabbycat/tournaments/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -18,1026 +18,1016 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "Torneios" -#: tournaments/forms.py:29 +#: tournaments/forms.py msgid "Number of preliminary rounds" msgstr "Número de rodadas classificatórias" -#: tournaments/forms.py:34 +#: tournaments/forms.py msgid "Number of teams in the open break" msgstr "Número de duplas na classificação \"aberta\"" -#: tournaments/forms.py:35 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." msgstr "Deixe em branco se não tiverem rodadas \"abertas\"." -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Did you agree with their decision?" msgstr "Você concordou com a decisão deles?" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Agree?" msgstr "Concorda?" -#: tournaments/forms.py:47 +#: tournaments/forms.py msgid "Comments" msgstr "Comentários" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:61 +#: tournaments/forms.py msgid "Open" msgstr "Aberto" -#: tournaments/forms.py:86 +#: tournaments/forms.py msgid "Format Configuration" msgstr "Configuração do formato" -#: tournaments/forms.py:87 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" msgstr "Aplicar um conjunto de configurações padrão para coincidir com um formato de debate comum" -#: tournaments/forms.py:91 +#: tournaments/forms.py msgid "Public Configuration" msgstr "Configuração do público" -#: tournaments/forms.py:92 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" msgstr "Mostrar informações não sensíveis na página pública do site, como posições no debate (uma vez liberadas) e as moções de rodadas anteriores" -#: tournaments/forms.py:99 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" -msgstr "Tabulação[liste a equipe de tabulação aqui
    Organização:[liste o comitê de organização aqui]
    Juízes:[liste os juízes-chefes aqui]" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +msgstr "" -#: tournaments/forms.py:195 +#: tournaments/forms.py msgid "Current preliminary round" msgstr "Atual rodada classificatória" -#: tournaments/forms.py:196 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" msgstr "Todas as rodadas classificatórias foram completadas" -#: tournaments/forms.py:208 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" msgstr "Atual rodada eliminatória em %(category)s(apenas se todas as rodadas classificatórias tiverem sido completadas)" -#: tournaments/forms.py:214 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" msgstr "Todas as rodadas eliminatórias em %(category)s foram concluídas" -#: tournaments/forms.py:226 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." msgstr "Se a rodada atual é uma rodada classificatória, este campo deve estar em branco." -#: tournaments/forms.py:232 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." msgstr "Se todas as rodadas classificatórias foram concluídas, este campo é obrigatório." -#: tournaments/forms.py:267 +#: tournaments/forms.py #, python-format msgid "%(name)s (%(abbreviation)s)" msgstr "" -#: tournaments/mixins.py:109 +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." msgstr "Você foi redirecionado para esta página porque o torneio %(tournament)s não tem rodadas. Por favor, crie algumas antes de voltar à página de administração." -#: tournaments/mixins.py:117 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." msgstr "Existe um problema com os dados do torneio %(tournament)s. Favor contactar um diretor de tabulação e pedir para que eles investiguem." -#: tournaments/mixins.py:130 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." msgstr "Você foi redirecionado para esta página devido a um problema como as equipes foram atribuídas às posições em um debate." -#: tournaments/mixins.py:137 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." msgstr "Há um problema como as equipas são atribuídas às posições em um debate. O diretor de tabulação precisará resolver esta questão." -#: tournaments/mixins.py:236 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" msgstr "para %(round)s" -#: tournaments/mixins.py:437 +#: tournaments/mixins.py msgid "Return to Draw" msgstr "Retornar às Posições" -#: tournaments/models.py:26 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." msgstr "Você não pode usar isto para o endereço do torneio, pois ele é reservado para uma URL do sistema Tabbycat. Por favor, tente outro." -#: tournaments/models.py:33 tournaments/models.py:320 +#: tournaments/models.py msgid "name" msgstr "nome" -#: tournaments/models.py:34 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" msgstr "O nome completo, por exemplo, \"Australasian Intervarsity Debating Championships 2016\"" -#: tournaments/models.py:36 +#: tournaments/models.py msgid "short name" msgstr "apelido" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" msgstr "O nome utilizado no menu, por exemplo, \"Australs 2016\"" -#: tournaments/models.py:39 tournaments/models.py:314 +#: tournaments/models.py msgid "sequence number" msgstr "número sequencial" -#: tournaments/models.py:40 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." msgstr "Um número que determina a ordem em que os torneios são exibidos na página inicial." -#: tournaments/models.py:42 +#: tournaments/models.py msgid "slug" msgstr "endereço" -#: tournaments/models.py:43 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" msgstr "O sub-URL do torneio não pode ter espaços, por exemplo, \"australs2016\"" -#: tournaments/models.py:44 +#: tournaments/models.py msgid "active" msgstr "ativo" -#: tournaments/models.py:47 tournaments/models.py:313 +#: tournaments/models.py msgid "tournament" msgstr "torneio" -#: tournaments/models.py:48 +#: tournaments/models.py msgid "tournaments" msgstr "torneios" -#: tournaments/models.py:285 +#: tournaments/models.py msgid "Random" msgstr "Aleatório" -#: tournaments/models.py:286 +#: tournaments/models.py msgid "Manual" msgstr "Manual" -#: tournaments/models.py:287 +#: tournaments/models.py msgid "Round-robin" msgstr "Rodízio" -#: tournaments/models.py:288 +#: tournaments/models.py msgid "Power-paired" msgstr "Pareamento por força" -#: tournaments/models.py:289 tournaments/models.py:296 +#: tournaments/models.py msgid "Elimination" msgstr "Eliminação" -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Preliminary" msgstr "Classificatória" -#: tournaments/models.py:305 +#: tournaments/models.py msgid "None" msgstr "Nenhum" -#: tournaments/models.py:306 +#: tournaments/models.py msgid "Draft" msgstr "Rascunho" -#: tournaments/models.py:307 +#: tournaments/models.py msgid "Confirmed" msgstr "Confirmado" -#: tournaments/models.py:308 +#: tournaments/models.py msgid "Released" msgstr "Publicado" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" msgstr "Um número que determina a sequência da rodada, o qual deve contar de forma consecutiva a partir de 1 para a primeira rodada" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "completed" msgstr "concluído" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" msgstr "Verdadeiro se a rodada acabou, o que normalmente significa que todos os resultados foram inseridos e confirmados" -#: tournaments/models.py:320 +#: tournaments/models.py msgid "e.g. \"Round 1\"" msgstr "por exemplo, \"Rodada 1\"" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "abbreviation" msgstr "abreviação" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "e.g. \"R1\"" msgstr "por exemplo, \"R1\"" -#: tournaments/models.py:323 +#: tournaments/models.py msgid "stage" msgstr "fase" -#: tournaments/models.py:324 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" msgstr "" -#: tournaments/models.py:326 +#: tournaments/models.py msgid "draw type" msgstr "tipo de alocação das posições" -#: tournaments/models.py:327 +#: tournaments/models.py msgid "Which draw method to use" msgstr "Qual método de alocação de posições a ser utilizado" -#: tournaments/models.py:330 +#: tournaments/models.py msgid "break category" msgstr "categoria de classificação" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "If elimination round, which break category" msgstr "Se rodada eliminatória, qual categoria de classificação" -#: tournaments/models.py:334 +#: tournaments/models.py msgid "draw status" msgstr "status da alocação das posições" -#: tournaments/models.py:335 +#: tournaments/models.py msgid "The status of this round's draw" msgstr "O status da alocação das posições desta rodada" -#: tournaments/models.py:338 +#: tournaments/models.py msgid "feedback weight" msgstr "peso do feedback" -#: tournaments/models.py:340 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." msgstr "" #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:343 +#: tournaments/models.py msgid "silent" msgstr "muda" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." msgstr "Se selecionado como \"muda\", as informações sobre essa rodada (assim como os resultados) não serão mostradas publicamente." -#: tournaments/models.py:346 +#: tournaments/models.py msgid "motions released" msgstr "moções publicadas" -#: tournaments/models.py:347 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" msgstr "Se as moções aparecerão no website público, desde que essa função esteja ligada" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "starts at" msgstr "começa em" -#: tournaments/models.py:351 +#: tournaments/models.py msgid "weight" msgstr "" -#: tournaments/models.py:352 +#: tournaments/models.py msgid "A factor for the points received in the round. For example, if 2, all points are doubled." msgstr "" -#: tournaments/models.py:355 +#: tournaments/models.py msgid "round" msgstr "rodada" -#: tournaments/models.py:356 +#: tournaments/models.py msgid "rounds" msgstr "rodadas" -#: tournaments/models.py:369 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." msgstr "Uma rodada na fase de eliminação deve ter o seu tipo de alocação de posições definido como \"Eliminação\"." -#: tournaments/models.py:372 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." msgstr "Uma rodada na fase de classificação não pode ter o seu tipo de alocação de posições definido como \"Eliminação\"." -#: tournaments/models.py:377 +#: tournaments/models.py msgid "Elimination rounds must have a break category." msgstr "Rodadas eliminatórias devem ter uma categoria de classificação." -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" msgstr "Painel" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" msgstr "Visão geral" -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" msgstr "rodada atual: %(round)s, status: %(status)s" -#: tournaments/templates/blank_site_start.html:7 -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" msgstr "Bem-vindo ao Tabbycat!" -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." msgstr "Para começar, você precisará criar a primeira conta. Essa conta é uma conta de \"super usuário\": ela será capaz de editar qualquer coisa no site. Logo, você deverá ter uma senha forte." -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." msgstr "Você só pode criar essa conta uma vez, mas, caso queira, poderá modificar o login e a senha depois de criado, ou adicionar novos super usuários posteriormente." -#: tournaments/templates/blank_site_start.html:32 +#: tournaments/templates/blank_site_start.html msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." msgstr "O endereço eletrônico é utilizado para reconfigurações da senha. Você não precisa informar um, mas caso não o faça, não poderá reconfigurar sua senha caso a esqueça." -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" msgstr "Criar conta" -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" msgstr "Configurar o Torneio %(tournament)s" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "Tabbycat" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." msgstr "Para finalizar a criação do seu torneio, selecione uma configuração básica. Note que isso sempre poderá ser alterado (e com maior controle preciso) caso necessário." -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" msgstr "Configurar o Torneio" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" msgstr "Criar Novo Torneio" -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." -msgstr "Tabbycat é livre para utilizar em torneios sem fins lucrativos e/ou sem captação de recursos (apesar de que doações são encorajadas). Se o seu torneio tem como objetivo lucro ou captação de recursos, favor notar que há um pagamento necessário. Para mais detalhes, acessar o Contrato de Licença do Tabbycat." +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgstr "" -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" msgstr "Apenas experimentando o Tabbycat?" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." msgstr "Se você estivar aprendendo ou brincando c om o Tabbycat, é mais fácil criar um torneio demo que já vem preenchido com falsos (mas normais) conjuntos de duplas, juízes, locais, etc. Você poderá deletar esse torneio demo posteriormente ou utilizar uma nova instância para o seu torneio real." -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" msgstr "Carregar %(demo)s" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." msgstr "" -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" msgstr "Criar torneio" -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" msgstr "Cancelar e voltar para a página inicial do site" -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" msgstr "Dupla de Debate faltando" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." msgstr "O Tabbycat sempre requer que, em cada debate, uma e apenas uma equipe seja atribuída a cada posição. Quando não for esse o caso, este erro ocorre. Normalmente, isso é o resultado de debates que foram editados manualmente." -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." msgstr "Aperte o botão Consertar este debate para aquele debate." #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." msgstr "Certifique-se de que todos asposições que devem estar presentes no debate estão presentes e tem uma equipe atribuída. Se uma equipe está faltando, encontre uma linha vazia e use a lupa para selecionar uma dupla. Em seguida, defina a posição da nova equipe apropriadamente." #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." msgstr "Certifique-se de que nenhuma posição aparece mais de uma vez no debate." #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." msgstr "Salve as modificações." -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." msgstr "Uma vez que você consertou todos os debates, você poderá retornar a qualquer página que você estava originalmente sem que este erro ocorra novamente." -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." msgstr "Você também pode ver todos os debates na seção de Debates da Área de Edição da Base de Dados." -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" msgstr "ID do Debate" -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" -msgstr "Dupla(s) em %(side)s" +msgid "Teams on %(side)s" +msgstr "" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" msgstr "Link para consertar este debate" -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" msgstr "Sem times" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" msgstr "Múltiplos times" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" msgstr "Consertar este debate" -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" msgstr "Parece que todos os debate estão bem configurados!" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." msgstr "Se você continuar sendo redirecionado a esta pagina e você não sabe o motivo, favor contactar os desenvolvedores do Tabbycat." -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" msgstr "Bem-vindo ao %(tournament)s" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." msgstr "Não há informações públicas disponíveis para este torneio." -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" msgstr "Classificação das Duplas" -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" msgstr "%(category)s Classificação das Duplas" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" msgstr "Classificação individual" -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" msgstr "%(category)s Classificação individual" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" msgstr "" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:203 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" msgstr "" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" msgstr "" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" msgstr "Resultados" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "Moções" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" msgstr "Colocações das Duplas" -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" msgstr "" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" msgstr "" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" msgstr "" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" msgstr "Participantes" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" msgstr "Instituições" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" msgstr "Progresso do feedback" -#: tournaments/templates/public_tournament_index.html:188 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Enter Ballot for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:195 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" msgstr "Inserir feedback" -#: tournaments/templates/public_tournament_index.html:217 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" msgstr "Organizadores do Torneio" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" msgstr "" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" msgstr "" -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." msgstr "" -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" msgstr "" -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" msgstr "" -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" msgstr "" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" msgstr "" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" msgstr "" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" msgstr "" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." msgstr[0] "" msgstr[1] "" -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" msgstr "" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." msgstr[0] "" msgstr[1] "" -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " msgstr "" -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "" -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" msgstr "Configurar a Rodada Atual" -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" msgstr "" -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." msgstr "Nenhuma rodada está configurada. Para que o Tabbycat funcione, favor configurar a rodada do torneio %(tournament)s." -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." msgstr "Nesta página, você poderá configurar a rodada atual do torneio%(tournament)s." -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "O torneio %(tournament)s não tem rodadas. Você precisar adicionar rodadas e associá-las a este torneio antes que você configure a rodada atual." -#: tournaments/templates/set_round_weights.html:4 -#: tournaments/templates/set_round_weights.html:5 +#: tournaments/templates/set_round_weights.html msgctxt "page title" -msgid "Set Round Weights" +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: tournaments/templates/set_round_weights.html:8 +#: tournaments/templates/set_round_weights.html msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." msgstr "" -#: tournaments/templates/set_round_weights.html:41 +#: tournaments/templates/set_round_weights.html msgctxt "button" msgid "Set weights" msgstr "" -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:47 -msgid "Inactive Tournaments" -msgstr "" - -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/site_index.html msgid "Welcome!" msgstr "Bem-vindo!" -#: tournaments/templates/site_index.html:21 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" msgstr "Parece que não há nenhum torneio neste site. Você gostaria de criar um?" -#: tournaments/templates/site_index.html:30 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:34 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." msgstr "Não há nenhum torneio configurados neste site." -#: tournaments/templates/site_index.html:55 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html msgid "New Tournament" msgstr "Novo Torneio" -#: tournaments/templates/site_index.html:58 +#: tournaments/templates/site_index.html msgid "Edit Database Area" msgstr "Editar Área de Base de Dados" -#: tournaments/templates/site_index.html:61 +#: tournaments/templates/site_index.html msgid "Send a Test Email" msgstr "" -#: tournaments/templates/site_index.html:64 +#: tournaments/templates/site_index.html msgid "Import DebateXML" msgstr "" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Get API Token / Change Password (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:77 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" msgstr "Sair (%(user)s)" -#: tournaments/templates/site_index.html:83 +#: tournaments/templates/site_index.html msgid "Log In as Admin" msgstr "Entrar como Administrador" -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." msgstr "Esperamos que você tenha gostado de utilizar o Tabbycat para o seu torneio. Nós apreciaríamos caso você fizesse uma doação para o projeto a fim de apoiar os contínuos desenvolvimentos e manutenções. Para um torneio deste tamanho, nós sugerimos uma doação de $%(amount)s. Note que se seu torneio tem fins lucrativos, ou de captação de recursos, fazer este pagamento é condição mandatória para a licença de software do Tabbycat. Leia mais sobre doações." -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" msgstr "Bem-vindo ao seu novo torneio!" -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." msgstr "" #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." msgstr "Para mais informações, favor consultar nosso documento sobre importar dados iniciais (in English)." -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." msgstr "Utilize o importador simples para adicionar seus dados iniciais." -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" +msgid "Mark participants as available to prepare a draw for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" +msgid "Go to the results area to enter ballots for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:74 +#: tournaments/templates/tournament_index.html msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." msgstr "" -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" msgstr "Área de administrador para %(tn)s" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" msgstr "Área de assistente para %(tn)s" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" msgstr "Área pública para %(tn)s" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" msgstr "afirmativo" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" msgstr "negativo" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" msgstr "time de afirmação" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" msgstr "time de negação" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" msgstr "" -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" msgstr "" -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" msgstr "governo" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" msgstr "oposição" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" msgstr "time do governo" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" msgstr "time da oposição" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" msgstr "" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" msgstr "Op" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" msgstr "proposição" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" msgstr "time propositivo" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" msgstr "Prop" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" msgstr "pró" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" msgstr "contra" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" msgstr "time pró" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" msgstr "time contra" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" msgstr "Pró" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" msgstr "Contra" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" msgstr "apelante" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" msgstr "replicante" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" msgstr "equipe apelante" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" msgstr "equipe replicante" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" msgstr "Ap" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" msgstr "Rep" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "Primeira Defesa" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "Primeira Oposição" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "Segunda Defesa" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "Segunda Oposição" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" msgstr "Primeira dupla de Defesa" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" msgstr "Primeira dupla de Oposição" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" msgstr "Segunda dupla de Defesa" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" msgstr "Segunda dupla de Oposição" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "1D" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "1O" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "2D" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "2O" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "Rodada %(number)d" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" msgstr "R%(number)d" -#: tournaments/views.py:151 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" msgstr "%(round)s foram marcadas como concluídas. Todas as rodadas estão concluídas, então você finalizou o torneio! Parabéns!" -#: tournaments/views.py:157 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." msgstr "%(round)s foram marcadas como concluídas. Esta é a última rodada na sequência. Voltando para a primeira rodada não marcada como concluída." -#: tournaments/views.py:170 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." msgstr "%(round)s foram marcadas como concluídas. Você o fez até o final das rodadas classificatórias! Parabéns! O próximo passo é gerar a classificação." -#: tournaments/views.py:176 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." msgstr "%(round)s foram marcadas como concluídas. Essa foi a última rodada classificatória, mas uma ou mais rodadas classificatórias ainda não estão concluídas. Voltando à primeira rodada classificatória incompleta." -#: tournaments/views.py:184 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" msgstr "%(this_round)s foram marcadas como concluídas. Indo para %(next_round)s! Aí sim! Continue assim!" -#: tournaments/views.py:201 +#: tournaments/views.py msgid "8-team generic dataset" msgstr "Conjunto de dados genérico de 8 times" -#: tournaments/views.py:202 +#: tournaments/views.py msgid "24-team Australs dataset" msgstr "Conjunto de dados do Australs de 24 times" -#: tournaments/views.py:203 +#: tournaments/views.py msgid "88-team BP dataset" msgstr "Conjunto de dados do BP de 88 times" -#: tournaments/views.py:288 -msgid "Successfully set round weights." +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." msgstr "" diff --git a/tabbycat/utils/locale/pt/LC_MESSAGES/django.po b/tabbycat/utils/locale/pt/LC_MESSAGES/django.po index 78b02097db4..0a34873e89a 100644 --- a/tabbycat/utils/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:46\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -18,304 +18,311 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "Email address" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "Rodada" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "Dupla" + +#: utils/admin.py +msgid "Speaker" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Side" msgstr "" -#: utils/tables.py:47 +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "" + +#: utils/admin.py +msgid "Confirmed" +msgstr "Confirmado" + +#: utils/admin.py +msgid "Adjudicator" +msgstr "Juiz" + +#: utils/tables.py msgid "No Data Available" msgstr "" -#: utils/tables.py:155 utils/tables.py:156 +#: utils/tables.py msgid "Ⓒ" msgstr "" -#: utils/tables.py:157 +#: utils/tables.py msgid "Ⓣ" msgstr "" -#: utils/tables.py:161 +#: utils/tables.py msgid "chair" msgstr "presidente" -#: utils/tables.py:162 +#: utils/tables.py msgid "panellist" msgstr "juiz auxiliar" -#: utils/tables.py:163 +#: utils/tables.py msgid "trainee" msgstr "aprendiz" -#: utils/tables.py:166 +#: utils/tables.py msgid "—" msgstr "" -#: utils/tables.py:167 +#: utils/tables.py msgid "Redacted" msgstr "" -#: utils/tables.py:231 utils/tables.py:237 +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" msgstr "" -#: utils/tables.py:247 utils/tables.py:252 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" msgstr "" -#: utils/tables.py:274 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" msgstr "" -#: utils/tables.py:276 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" msgstr "" -#: utils/tables.py:296 +#: utils/tables.py #, python-format msgid "%(team)s won" msgstr "" -#: utils/tables.py:301 +#: utils/tables.py #, python-format msgid "%(team)s lost" msgstr "" -#: utils/tables.py:306 utils/tables.py:318 utils/tables.py:342 +#: utils/tables.py #, python-format msgid "%(team)s—no result" msgstr "" -#: utils/tables.py:323 +#: utils/tables.py #, python-format msgid "%(team)s placed %(place)s" msgstr "" -#: utils/tables.py:332 +#: utils/tables.py #, python-format msgid "%(team)s is advancing" msgstr "" -#: utils/tables.py:337 +#: utils/tables.py #, python-format msgid "%(team)s was eliminated" msgstr "" -#: utils/tables.py:350 +#: utils/tables.py msgid "View/edit debate ballot" msgstr "" -#: utils/tables.py:356 +#: utils/tables.py msgid "View debate ballot" msgstr "" -#: utils/tables.py:369 +#: utils/tables.py #, python-format msgid " vs %(opposition)s" msgstr "" -#: utils/tables.py:376 +#: utils/tables.py #, python-format msgid "Won against %(team)s" msgstr "" -#: utils/tables.py:378 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" msgstr "" -#: utils/tables.py:380 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" msgstr "" -#: utils/tables.py:405 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" msgstr "" -#: utils/tables.py:412 +#: utils/tables.py msgid "Teams in debate:" msgstr "" -#: utils/tables.py:415 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "" -#: utils/tables.py:416 utils/tables.py:420 utils/tables.py:446 -#: utils/tables.py:618 +#: utils/tables.py msgid "??" msgstr "" -#: utils/tables.py:434 +#: utils/tables.py msgid "advancing" msgstr "" -#: utils/tables.py:435 +#: utils/tables.py msgid "Advancing" msgstr "" -#: utils/tables.py:437 +#: utils/tables.py msgid "eliminated" msgstr "eliminado" -#: utils/tables.py:438 +#: utils/tables.py msgid "Eliminated" msgstr "" -#: utils/tables.py:441 utils/tables.py:451 +#: utils/tables.py msgid "No result for debate" msgstr "" -#: utils/tables.py:448 +#: utils/tables.py #, python-format msgid "Placed %(place)s" msgstr "" -#: utils/tables.py:463 -msgid "Tournament" -msgstr "" - -#: utils/tables.py:472 -msgid "Round" -msgstr "Rodada" - -#: utils/tables.py:495 utils/tables.py:672 +#: utils/tables.py msgid "Name" msgstr "" -#: utils/tables.py:501 utils/tables.py:650 +#: utils/tables.py msgid "Institution" msgstr "Instituição" -#: utils/tables.py:507 +#: utils/tables.py msgid "Member of the Adjudication Core" msgstr "" -#: utils/tables.py:514 +#: utils/tables.py msgid "Independent Adjudicator" msgstr "" -#: utils/tables.py:522 +#: utils/tables.py msgid "Always Trainee" msgstr "" -#: utils/tables.py:557 +#: utils/tables.py msgid "in minority" msgstr "" -#: utils/tables.py:590 +#: utils/tables.py msgid "Debate Adjudicators" msgstr "" -#: utils/tables.py:621 -msgid "Motion" -msgstr "" - -#: utils/tables.py:636 -msgid "Team" -msgstr "Dupla" - -#: utils/tables.py:641 utils/tables.py:694 +#: utils/tables.py msgid "Categories" msgstr "" -#: utils/tables.py:692 +#: utils/tables.py msgid "Category" msgstr "" -#: utils/tables.py:719 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." msgstr "" -#: utils/tables.py:721 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." msgstr "" -#: utils/tables.py:736 +#: utils/tables.py msgid "Room" msgstr "" -#: utils/tables.py:754 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" msgstr[0] "" msgstr[1] "" -#: utils/tables.py:760 +#: utils/tables.py msgid "Teams are from the same institution" msgstr "" -#: utils/tables.py:766 +#: utils/tables.py msgid "Conflicts/Flags" msgstr "" -#: utils/tables.py:819 +#: utils/tables.py msgid "The confirmed ballot" msgstr "" -#: utils/tables.py:824 utils/tables.py:849 +#: utils/tables.py msgid "No ballot" msgstr "" -#: utils/tables.py:826 utils/tables.py:851 +#: utils/tables.py msgid "No scores" msgstr "" -#: utils/tables.py:829 utils/tables.py:854 utils/tables.py:866 +#: utils/tables.py msgid "View Ballot" msgstr "" -#: utils/tables.py:836 +#: utils/tables.py msgid "The ballot you submitted" msgstr "" -#: utils/tables.py:840 +#: utils/tables.py msgid "View/Edit Ballot" msgstr "" -#: utils/tables.py:874 +#: utils/tables.py msgid "Result" msgstr "" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:880 +#: utils/tables.py msgid "TBC" msgstr "" -#: utils/tables.py:881 -msgid "Side" -msgstr "" - -#: utils/tables.py:919 -msgid "Team iron-manned this round and the last." +#: utils/tables.py +msgid "Team iron-personed this round and the last." msgstr "" -#: utils/tables.py:922 -msgid "Team iron-manned this round." +#: utils/tables.py +msgid "Team iron-personed this round." msgstr "" -#: utils/tables.py:925 -msgid "Team iron-manned last round." +#: utils/tables.py +msgid "Team iron-personed last round." msgstr "" -#: utils/tables.py:942 utils/tables.py:943 +#: utils/tables.py #, python-format msgid "Team %(num)d" msgstr "" -#: utils/tables.py:950 +#: utils/tables.py msgid "Postpone" msgstr "" -#: utils/views.py:38 +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." msgstr "" diff --git a/tabbycat/venues/locale/pt/LC_MESSAGES/django.po b/tabbycat/venues/locale/pt/LC_MESSAGES/django.po index ec34273a65c..5c15b754db1 100644 --- a/tabbycat/venues/locale/pt/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-05 15:26-0300\n" -"PO-Revision-Date: 2020-07-10 07:04\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" "Last-Translator: philip_tc\n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -18,204 +18,202 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 +#: venues/apps.py msgid "Rooms" msgstr "" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." msgstr "" -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." msgstr "" -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." msgstr "" -#: venues/models.py:9 venues/models.py:66 +#: venues/models.py msgid "name" msgstr "nome" -#: venues/models.py:11 venues/models.py:120 +#: venues/models.py msgid "priority" msgstr "" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" msgstr "" -#: venues/models.py:15 venues/models.py:78 +#: venues/models.py msgid "tournament" msgstr "torneio" -#: venues/models.py:16 +#: venues/models.py msgid "URL" msgstr "" -#: venues/models.py:17 +#: venues/models.py msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" msgstr "" -#: venues/models.py:24 +#: venues/models.py msgid "room" msgstr "" -#: venues/models.py:25 venues/models.py:76 +#: venues/models.py msgid "rooms" msgstr "" -#: venues/models.py:61 +#: venues/models.py msgid "Don't display in room name" msgstr "" -#: venues/models.py:62 +#: venues/models.py msgid "Display as prefix" msgstr "" -#: venues/models.py:63 +#: venues/models.py msgid "Display as suffix" msgstr "" -#: venues/models.py:67 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." msgstr "" -#: venues/models.py:71 +#: venues/models.py msgid "description" msgstr "" -#: venues/models.py:72 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." msgstr "" -#: venues/models.py:82 +#: venues/models.py msgid "display in room name" msgstr "" -#: venues/models.py:83 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" msgstr "" -#: venues/models.py:85 +#: venues/models.py msgid "display in public tooltip" msgstr "" -#: venues/models.py:86 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." msgstr "" -#: venues/models.py:90 +#: venues/models.py msgid "room category" msgstr "" -#: venues/models.py:91 +#: venues/models.py msgid "room categories" msgstr "" -#: venues/models.py:119 +#: venues/models.py msgid "category" msgstr "" -#: venues/models.py:123 +#: venues/models.py msgid "subject content type" msgstr "" -#: venues/models.py:126 +#: venues/models.py msgid "subject ID" msgstr "" -#: venues/models.py:132 +#: venues/models.py msgid "room constraint" msgstr "" -#: venues/models.py:133 +#: venues/models.py msgid "room constraints" msgstr "" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" msgstr "" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." msgstr "" -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." msgstr "" -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" msgstr "" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" msgstr "" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." msgstr "" -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" msgstr "" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" msgstr "" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" msgstr "" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" msgstr "" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" msgstr "" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" msgstr "" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" msgstr[0] "" msgstr[1] "" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." msgstr "" -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" msgstr "" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" msgstr "" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." From 5a2a9896b5e8b6f46a2d1069bfe2eb4454e3999a Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Mon, 6 Jul 2020 03:03:37 +1000 Subject: [PATCH 218/255] New translations django.po (Romanian) --- docs/locale/ro/LC_MESSAGES/about/authors.po | 6 +- docs/locale/ro/LC_MESSAGES/about/changelog.po | 6 +- .../ro/LC_MESSAGES/about/contributing.po | 6 +- docs/locale/ro/LC_MESSAGES/about/licence.po | 6 +- docs/locale/ro/LC_MESSAGES/about/support.po | 6 +- .../LC_MESSAGES/about/tournament-history.po | 6 +- .../features/adjudicator-allocation.po | 6 +- .../features/adjudicator-feedback.po | 6 +- .../locale/ro/LC_MESSAGES/features/backups.po | 6 +- docs/locale/ro/LC_MESSAGES/features/breaks.po | 6 +- .../ro/LC_MESSAGES/features/check-ins.po | 6 +- .../ro/LC_MESSAGES/features/data-entry.po | 6 +- .../ro/LC_MESSAGES/features/data-importers.po | 6 +- .../features/draw-generation-bp.po | 6 +- .../LC_MESSAGES/features/draw-generation.po | 6 +- .../ro/LC_MESSAGES/features/notifications.po | 6 +- .../LC_MESSAGES/features/preformed-panels.po | 6 +- .../ro/LC_MESSAGES/features/printing.po | 6 +- .../LC_MESSAGES/features/standings-rules.po | 6 +- .../LC_MESSAGES/features/team-code-names.po | 6 +- .../ro/LC_MESSAGES/features/user-accounts.po | 6 +- .../LC_MESSAGES/features/venue-constraints.po | 6 +- .../ro/LC_MESSAGES/guide/comparisons.po | 6 +- docs/locale/ro/LC_MESSAGES/guide/scaling.po | 6 +- .../LC_MESSAGES/guide/tournament-logistics.po | 6 +- docs/locale/ro/LC_MESSAGES/guide/upgrading.po | 6 +- docs/locale/ro/LC_MESSAGES/index.po | 6 +- docs/locale/ro/LC_MESSAGES/install/docker.po | 6 +- docs/locale/ro/LC_MESSAGES/install/heroku.po | 6 +- docs/locale/ro/LC_MESSAGES/install/linux.po | 6 +- docs/locale/ro/LC_MESSAGES/install/local.po | 6 +- docs/locale/ro/LC_MESSAGES/install/osx.po | 6 +- docs/locale/ro/LC_MESSAGES/install/windows.po | 6 +- docs/locale/ro/LC_MESSAGES/install/wsl.po | 6 +- .../LC_MESSAGES/use/finishing-a-tournament.po | 6 +- .../ro/LC_MESSAGES/use/importing-data.po | 6 +- .../LC_MESSAGES/use/running-a-tournament.po | 6 +- .../LC_MESSAGES/use/starting-a-tournament.po | 6 +- .../actionlog/locale/ro/LC_MESSAGES/django.po | 160 +-- .../locale/ro/LC_MESSAGES/django.po | 203 ++-- .../locale/ro/LC_MESSAGES/django.po | 474 ++++----- .../locale/ro/LC_MESSAGES/django.po | 168 ++- .../breakqual/locale/ro/LC_MESSAGES/django.po | 255 ++--- tabbycat/draw/locale/ro/LC_MESSAGES/django.po | 637 ++++++------ .../importer/locale/ro/LC_MESSAGES/django.po | 250 +++-- tabbycat/locale/ro/LC_MESSAGES/django.po | 562 +++++----- tabbycat/locale/ro/LC_MESSAGES/djangojs.po | 10 +- .../motions/locale/ro/LC_MESSAGES/django.po | 246 +++-- .../locale/ro/LC_MESSAGES/django.po | 230 +++-- .../options/locale/ro/LC_MESSAGES/django.po | 959 ++++++++++-------- .../locale/ro/LC_MESSAGES/django.po | 587 ++++++----- .../printing/locale/ro/LC_MESSAGES/django.po | 68 +- .../locale/ro/LC_MESSAGES/django.po | 87 +- .../results/locale/ro/LC_MESSAGES/django.po | 740 ++++++++------ .../standings/locale/ro/LC_MESSAGES/django.po | 338 +++--- .../locale/ro/LC_MESSAGES/django.po | 568 +++++------ .../utils/locale/ro/LC_MESSAGES/django.po | 243 +++-- .../venues/locale/ro/LC_MESSAGES/django.po | 108 +- 58 files changed, 3884 insertions(+), 3237 deletions(-) diff --git a/docs/locale/ro/LC_MESSAGES/about/authors.po b/docs/locale/ro/LC_MESSAGES/about/authors.po index a823b293dce..1719ec9e25a 100644 --- a/docs/locale/ro/LC_MESSAGES/about/authors.po +++ b/docs/locale/ro/LC_MESSAGES/about/authors.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:17\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:20\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/authors.po\n" +"X-Crowdin-File-ID: 1259\n" "Language: ro_RO\n" #: ../../../AUTHORS.rst:3 diff --git a/docs/locale/ro/LC_MESSAGES/about/changelog.po b/docs/locale/ro/LC_MESSAGES/about/changelog.po index c70e69a16c5..ea3610f8501 100644 --- a/docs/locale/ro/LC_MESSAGES/about/changelog.po +++ b/docs/locale/ro/LC_MESSAGES/about/changelog.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:17\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:22\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/changelog.po\n" +"X-Crowdin-File-ID: 1261\n" "Language: ro_RO\n" #: ../../../CHANGELOG.rst:3 diff --git a/docs/locale/ro/LC_MESSAGES/about/contributing.po b/docs/locale/ro/LC_MESSAGES/about/contributing.po index c7b86a44638..92da10333a0 100644 --- a/docs/locale/ro/LC_MESSAGES/about/contributing.po +++ b/docs/locale/ro/LC_MESSAGES/about/contributing.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:17\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:21\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/contributing.po\n" +"X-Crowdin-File-ID: 1263\n" "Language: ro_RO\n" #: ../../../CONTRIBUTING.rst:3 diff --git a/docs/locale/ro/LC_MESSAGES/about/licence.po b/docs/locale/ro/LC_MESSAGES/about/licence.po index 70812ad8cec..af367dcd3ca 100644 --- a/docs/locale/ro/LC_MESSAGES/about/licence.po +++ b/docs/locale/ro/LC_MESSAGES/about/licence.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:17\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:19\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/licence.po\n" +"X-Crowdin-File-ID: 1265\n" "Language: ro_RO\n" #: ../../../LICENSE.rst:3 diff --git a/docs/locale/ro/LC_MESSAGES/about/support.po b/docs/locale/ro/LC_MESSAGES/about/support.po index d9cb8ad3279..dcd8134b571 100644 --- a/docs/locale/ro/LC_MESSAGES/about/support.po +++ b/docs/locale/ro/LC_MESSAGES/about/support.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:17\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:18\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/support.po\n" +"X-Crowdin-File-ID: 1267\n" "Language: ro_RO\n" #: ../../about/support.rst:3 diff --git a/docs/locale/ro/LC_MESSAGES/about/tournament-history.po b/docs/locale/ro/LC_MESSAGES/about/tournament-history.po index 452fd7b4c89..b816b0f6b73 100644 --- a/docs/locale/ro/LC_MESSAGES/about/tournament-history.po +++ b/docs/locale/ro/LC_MESSAGES/about/tournament-history.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:17\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:20\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/tournament-history.po\n" +"X-Crowdin-File-ID: 1335\n" "Language: ro_RO\n" #: ../../about/tournament-history.rst:3 diff --git a/docs/locale/ro/LC_MESSAGES/features/adjudicator-allocation.po b/docs/locale/ro/LC_MESSAGES/features/adjudicator-allocation.po index 787569475f7..c988c69d9b1 100644 --- a/docs/locale/ro/LC_MESSAGES/features/adjudicator-allocation.po +++ b/docs/locale/ro/LC_MESSAGES/features/adjudicator-allocation.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:17\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:19\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-allocation.po\n" +"X-Crowdin-File-ID: 1271\n" "Language: ro_RO\n" #: ../../features/adjudicator-allocation.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/features/adjudicator-feedback.po b/docs/locale/ro/LC_MESSAGES/features/adjudicator-feedback.po index 336d4d8c74f..0c8538b52bd 100644 --- a/docs/locale/ro/LC_MESSAGES/features/adjudicator-feedback.po +++ b/docs/locale/ro/LC_MESSAGES/features/adjudicator-feedback.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:17\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:25\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-feedback.po\n" +"X-Crowdin-File-ID: 1273\n" "Language: ro_RO\n" #: ../../features/adjudicator-feedback.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/features/backups.po b/docs/locale/ro/LC_MESSAGES/features/backups.po index c29cc005437..83e276dcab0 100644 --- a/docs/locale/ro/LC_MESSAGES/features/backups.po +++ b/docs/locale/ro/LC_MESSAGES/features/backups.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:17\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:25\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/backups.po\n" +"X-Crowdin-File-ID: 1275\n" "Language: ro_RO\n" #: ../../features/backups.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/features/breaks.po b/docs/locale/ro/LC_MESSAGES/features/breaks.po index 6cde34ba74d..fc883b184fd 100644 --- a/docs/locale/ro/LC_MESSAGES/features/breaks.po +++ b/docs/locale/ro/LC_MESSAGES/features/breaks.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:18\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/breaks.po\n" +"X-Crowdin-File-ID: 1277\n" "Language: ro_RO\n" #: ../../features/breaks.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/features/check-ins.po b/docs/locale/ro/LC_MESSAGES/features/check-ins.po index ca265c46bc2..4ecb84966a8 100644 --- a/docs/locale/ro/LC_MESSAGES/features/check-ins.po +++ b/docs/locale/ro/LC_MESSAGES/features/check-ins.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:26\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/check-ins.po\n" +"X-Crowdin-File-ID: 1279\n" "Language: ro_RO\n" #: ../../features/check-ins.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/features/data-entry.po b/docs/locale/ro/LC_MESSAGES/features/data-entry.po index ea8100f4782..ce5eda69392 100644 --- a/docs/locale/ro/LC_MESSAGES/features/data-entry.po +++ b/docs/locale/ro/LC_MESSAGES/features/data-entry.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:24\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-entry.po\n" +"X-Crowdin-File-ID: 1281\n" "Language: ro_RO\n" #: ../../features/data-entry.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/features/data-importers.po b/docs/locale/ro/LC_MESSAGES/features/data-importers.po index d5189914d9e..7aed2f464d4 100644 --- a/docs/locale/ro/LC_MESSAGES/features/data-importers.po +++ b/docs/locale/ro/LC_MESSAGES/features/data-importers.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:22\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-importers.po\n" +"X-Crowdin-File-ID: 1283\n" "Language: ro_RO\n" #: ../../features/data-importers.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/features/draw-generation-bp.po b/docs/locale/ro/LC_MESSAGES/features/draw-generation-bp.po index b0efd6866dd..8980eff9092 100644 --- a/docs/locale/ro/LC_MESSAGES/features/draw-generation-bp.po +++ b/docs/locale/ro/LC_MESSAGES/features/draw-generation-bp.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:23\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation-bp.po\n" +"X-Crowdin-File-ID: 1285\n" "Language: ro_RO\n" #: ../../features/draw-generation-bp.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/features/draw-generation.po b/docs/locale/ro/LC_MESSAGES/features/draw-generation.po index 0be8cb8848e..588f203f37d 100644 --- a/docs/locale/ro/LC_MESSAGES/features/draw-generation.po +++ b/docs/locale/ro/LC_MESSAGES/features/draw-generation.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:24\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation.po\n" +"X-Crowdin-File-ID: 1287\n" "Language: ro_RO\n" #: ../../features/draw-generation.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/features/notifications.po b/docs/locale/ro/LC_MESSAGES/features/notifications.po index ac4e2fde6e6..3d508abbbd0 100644 --- a/docs/locale/ro/LC_MESSAGES/features/notifications.po +++ b/docs/locale/ro/LC_MESSAGES/features/notifications.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:18\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/notifications.po\n" +"X-Crowdin-File-ID: 1289\n" "Language: ro_RO\n" #: ../../features/notifications.rst:3 diff --git a/docs/locale/ro/LC_MESSAGES/features/preformed-panels.po b/docs/locale/ro/LC_MESSAGES/features/preformed-panels.po index a81617e3d41..d337a7c1a64 100644 --- a/docs/locale/ro/LC_MESSAGES/features/preformed-panels.po +++ b/docs/locale/ro/LC_MESSAGES/features/preformed-panels.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:12\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/preformed-panels.po\n" +"X-Crowdin-File-ID: 1291\n" "Language: ro_RO\n" #: ../../features/preformed-panels.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/features/printing.po b/docs/locale/ro/LC_MESSAGES/features/printing.po index 51c48237b85..9cf7524ee16 100644 --- a/docs/locale/ro/LC_MESSAGES/features/printing.po +++ b/docs/locale/ro/LC_MESSAGES/features/printing.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:12\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/printing.po\n" +"X-Crowdin-File-ID: 1293\n" "Language: ro_RO\n" #: ../../features/printing.rst:3 diff --git a/docs/locale/ro/LC_MESSAGES/features/standings-rules.po b/docs/locale/ro/LC_MESSAGES/features/standings-rules.po index b8281a84279..01bf4cc93da 100644 --- a/docs/locale/ro/LC_MESSAGES/features/standings-rules.po +++ b/docs/locale/ro/LC_MESSAGES/features/standings-rules.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:13\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/standings-rules.po\n" +"X-Crowdin-File-ID: 1295\n" "Language: ro_RO\n" #: ../../features/standings-rules.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/features/team-code-names.po b/docs/locale/ro/LC_MESSAGES/features/team-code-names.po index 1322414d1eb..247e6336503 100644 --- a/docs/locale/ro/LC_MESSAGES/features/team-code-names.po +++ b/docs/locale/ro/LC_MESSAGES/features/team-code-names.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:13\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/team-code-names.po\n" +"X-Crowdin-File-ID: 1297\n" "Language: ro_RO\n" #: ../../features/team-code-names.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/features/user-accounts.po b/docs/locale/ro/LC_MESSAGES/features/user-accounts.po index 989967b70f5..624a89adc96 100644 --- a/docs/locale/ro/LC_MESSAGES/features/user-accounts.po +++ b/docs/locale/ro/LC_MESSAGES/features/user-accounts.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:11\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/user-accounts.po\n" +"X-Crowdin-File-ID: 1299\n" "Language: ro_RO\n" #: ../../features/user-accounts.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/features/venue-constraints.po b/docs/locale/ro/LC_MESSAGES/features/venue-constraints.po index f5d1fc39fdb..52212f4717d 100644 --- a/docs/locale/ro/LC_MESSAGES/features/venue-constraints.po +++ b/docs/locale/ro/LC_MESSAGES/features/venue-constraints.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:11\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/venue-constraints.po\n" +"X-Crowdin-File-ID: 1301\n" "Language: ro_RO\n" #: ../../features/venue-constraints.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/guide/comparisons.po b/docs/locale/ro/LC_MESSAGES/guide/comparisons.po index 2edac4f49d9..e2eba258e1b 100644 --- a/docs/locale/ro/LC_MESSAGES/guide/comparisons.po +++ b/docs/locale/ro/LC_MESSAGES/guide/comparisons.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:12\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/comparisons.po\n" +"X-Crowdin-File-ID: 1303\n" "Language: ro_RO\n" #: ../../guide/comparisons.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/guide/scaling.po b/docs/locale/ro/LC_MESSAGES/guide/scaling.po index 6fe183616c7..a586b0f7d62 100644 --- a/docs/locale/ro/LC_MESSAGES/guide/scaling.po +++ b/docs/locale/ro/LC_MESSAGES/guide/scaling.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:11\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/scaling.po\n" +"X-Crowdin-File-ID: 1305\n" "Language: ro_RO\n" #: ../../guide/scaling.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/guide/tournament-logistics.po b/docs/locale/ro/LC_MESSAGES/guide/tournament-logistics.po index ba3511d15f6..1a389302e27 100644 --- a/docs/locale/ro/LC_MESSAGES/guide/tournament-logistics.po +++ b/docs/locale/ro/LC_MESSAGES/guide/tournament-logistics.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:16\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/tournament-logistics.po\n" +"X-Crowdin-File-ID: 1307\n" "Language: ro_RO\n" #: ../../guide/tournament-logistics.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/guide/upgrading.po b/docs/locale/ro/LC_MESSAGES/guide/upgrading.po index dfe899cadd6..872626ac0a3 100644 --- a/docs/locale/ro/LC_MESSAGES/guide/upgrading.po +++ b/docs/locale/ro/LC_MESSAGES/guide/upgrading.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:16\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/upgrading.po\n" +"X-Crowdin-File-ID: 1309\n" "Language: ro_RO\n" #: ../../guide/upgrading.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/index.po b/docs/locale/ro/LC_MESSAGES/index.po index 69383718012..9d95bee45bb 100644 --- a/docs/locale/ro/LC_MESSAGES/index.po +++ b/docs/locale/ro/LC_MESSAGES/index.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:17\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:27\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/index.po\n" +"X-Crowdin-File-ID: 1311\n" "Language: ro_RO\n" #: ../../index.rst:18 diff --git a/docs/locale/ro/LC_MESSAGES/install/docker.po b/docs/locale/ro/LC_MESSAGES/install/docker.po index e92502b0631..1acd5cbeb85 100644 --- a/docs/locale/ro/LC_MESSAGES/install/docker.po +++ b/docs/locale/ro/LC_MESSAGES/install/docker.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:18\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/docker.po\n" +"X-Crowdin-File-ID: 1313\n" "Language: ro_RO\n" #: ../../install/docker.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/install/heroku.po b/docs/locale/ro/LC_MESSAGES/install/heroku.po index 72eb2d0737e..e13fac1fd9e 100644 --- a/docs/locale/ro/LC_MESSAGES/install/heroku.po +++ b/docs/locale/ro/LC_MESSAGES/install/heroku.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:17\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/heroku.po\n" +"X-Crowdin-File-ID: 1315\n" "Language: ro_RO\n" #: ../../install/heroku.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/install/linux.po b/docs/locale/ro/LC_MESSAGES/install/linux.po index 4031f82f612..5334d482bca 100644 --- a/docs/locale/ro/LC_MESSAGES/install/linux.po +++ b/docs/locale/ro/LC_MESSAGES/install/linux.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:15\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/linux.po\n" +"X-Crowdin-File-ID: 1317\n" "Language: ro_RO\n" #: ../../install/linux.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/install/local.po b/docs/locale/ro/LC_MESSAGES/install/local.po index 4430b76b598..d51cac5ec71 100644 --- a/docs/locale/ro/LC_MESSAGES/install/local.po +++ b/docs/locale/ro/LC_MESSAGES/install/local.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:14\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/local.po\n" +"X-Crowdin-File-ID: 1319\n" "Language: ro_RO\n" #: ../../install/local.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/install/osx.po b/docs/locale/ro/LC_MESSAGES/install/osx.po index f8871391cae..ac6ba6ab215 100644 --- a/docs/locale/ro/LC_MESSAGES/install/osx.po +++ b/docs/locale/ro/LC_MESSAGES/install/osx.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:16\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/osx.po\n" +"X-Crowdin-File-ID: 1321\n" "Language: ro_RO\n" #: ../../install/osx.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/install/windows.po b/docs/locale/ro/LC_MESSAGES/install/windows.po index 573e1edb8f7..e89ca2e3a65 100644 --- a/docs/locale/ro/LC_MESSAGES/install/windows.po +++ b/docs/locale/ro/LC_MESSAGES/install/windows.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:15\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/windows.po\n" +"X-Crowdin-File-ID: 1323\n" "Language: ro_RO\n" #: ../../install/windows.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/install/wsl.po b/docs/locale/ro/LC_MESSAGES/install/wsl.po index 1614354f5bc..8202d3c9633 100644 --- a/docs/locale/ro/LC_MESSAGES/install/wsl.po +++ b/docs/locale/ro/LC_MESSAGES/install/wsl.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:27\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/wsl.po\n" +"X-Crowdin-File-ID: 1325\n" "Language: ro_RO\n" #: ../../install/wsl.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/use/finishing-a-tournament.po b/docs/locale/ro/LC_MESSAGES/use/finishing-a-tournament.po index 51ec5ad8ed7..b9d3b4cc498 100644 --- a/docs/locale/ro/LC_MESSAGES/use/finishing-a-tournament.po +++ b/docs/locale/ro/LC_MESSAGES/use/finishing-a-tournament.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:27\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/finishing-a-tournament.po\n" +"X-Crowdin-File-ID: 1327\n" "Language: ro_RO\n" #: ../../use/finishing-a-tournament.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/use/importing-data.po b/docs/locale/ro/LC_MESSAGES/use/importing-data.po index 5472cbc1d08..08ede224e7f 100644 --- a/docs/locale/ro/LC_MESSAGES/use/importing-data.po +++ b/docs/locale/ro/LC_MESSAGES/use/importing-data.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:28\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/importing-data.po\n" +"X-Crowdin-File-ID: 1329\n" "Language: ro_RO\n" #: ../../use/importing-data.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/use/running-a-tournament.po b/docs/locale/ro/LC_MESSAGES/use/running-a-tournament.po index d2d9cf702e3..238d60e81f0 100644 --- a/docs/locale/ro/LC_MESSAGES/use/running-a-tournament.po +++ b/docs/locale/ro/LC_MESSAGES/use/running-a-tournament.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:26\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/running-a-tournament.po\n" +"X-Crowdin-File-ID: 1331\n" "Language: ro_RO\n" #: ../../use/running-a-tournament.rst:5 diff --git a/docs/locale/ro/LC_MESSAGES/use/starting-a-tournament.po b/docs/locale/ro/LC_MESSAGES/use/starting-a-tournament.po index 617e5dbf48a..66679db578c 100644 --- a/docs/locale/ro/LC_MESSAGES/use/starting-a-tournament.po +++ b/docs/locale/ro/LC_MESSAGES/use/starting-a-tournament.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-02-25 20:16\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:26\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/starting-a-tournament.po\n" +"X-Crowdin-File-ID: 1333\n" "Language: ro_RO\n" #: ../../use/starting-a-tournament.rst:5 diff --git a/tabbycat/actionlog/locale/ro/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/ro/LC_MESSAGES/django.po index d45e24b9b3d..adad6887aaa 100644 --- a/tabbycat/actionlog/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/ro/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:27\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" "MIME-Version: 1.0\n" @@ -12,310 +12,312 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" msgstr "" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" msgstr "" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" msgstr "" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" msgstr "" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" msgstr "" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" msgstr "" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" msgstr "" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" msgstr "" -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" msgstr "" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" msgstr "" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" msgstr "" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" msgstr "" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" msgstr "" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" msgstr "" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" msgstr "" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" msgstr "" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" msgstr "" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" msgstr "" -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" msgstr "" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" msgstr "" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" msgstr "" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" msgstr "" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" msgstr "" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" msgstr "" -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "" -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" msgstr "" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" msgstr "" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" msgstr "" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" msgstr "" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" msgstr "" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" msgstr "" -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" msgstr "" -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" msgstr "" -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" msgstr "" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" msgstr "" -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" msgstr "" -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" msgstr "" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" msgstr "" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" msgstr "" -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" msgstr "" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" msgstr "" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" msgstr "" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" msgstr "" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" msgstr "" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" msgstr "" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" msgstr "" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" msgstr "" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" msgstr "" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" msgstr "" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" msgstr "" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" msgstr "" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" msgstr "" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" msgstr "" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" msgstr "" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" msgstr "" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" msgstr "" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" msgstr "" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" msgstr "" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" msgstr "" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" msgstr "" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" msgstr "" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" msgstr "" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" msgstr "" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" msgstr "" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" msgstr "" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" msgstr "" -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" msgstr "" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" msgstr "" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" msgstr "" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" msgstr "" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." msgstr "" -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" msgstr "" diff --git a/tabbycat/adjallocation/locale/ro/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/ro/LC_MESSAGES/django.po index e9d826b0164..80b8d49a6cc 100644 --- a/tabbycat/adjallocation/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/ro/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:27\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" "MIME-Version: 1.0\n" @@ -12,14 +12,16 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." msgstr "" -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." @@ -27,7 +29,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." @@ -35,50 +37,50 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." msgstr "" -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" msgstr "" -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." msgstr "" -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." msgstr "" -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." msgstr "" -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" msgstr "" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." msgstr "" -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." msgstr "" -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." msgstr "" -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." msgstr "" -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" @@ -86,15 +88,15 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." msgstr "" -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." msgstr "" -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" @@ -102,261 +104,260 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." msgstr "" -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." msgstr "" -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." msgstr "" -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." msgstr "" -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." msgstr "" -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." msgstr "" -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." msgstr "" -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." msgstr "" -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" msgstr "" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" msgstr "" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" msgstr "" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" msgstr "" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" msgstr "" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" msgstr "" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" msgstr "" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" msgstr "" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" msgstr "" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" msgstr "" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" msgstr "" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" msgstr "" -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" msgstr "" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" msgstr "" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" msgstr "" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" msgstr "" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" msgstr "" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" msgstr "" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" msgstr "" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" msgstr "" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" msgstr "" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" msgstr "" -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" msgstr "" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" msgstr "" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" msgstr "" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" msgstr "" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" msgstr "" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" msgstr "" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" msgstr "" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" msgstr "" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." msgstr "" -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" msgstr "" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." msgstr "" -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." msgstr "" -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" msgstr "" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" msgstr "" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" msgstr "" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" msgstr "" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" msgstr "" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" msgstr "" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" msgstr "" -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" msgstr "" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" msgstr "" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" msgstr "" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" msgstr "" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" msgstr "" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." @@ -364,7 +365,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." @@ -372,19 +373,19 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." msgstr "" -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" msgstr "" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" msgstr "" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." @@ -392,7 +393,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." @@ -400,19 +401,19 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." msgstr "" -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" msgstr "" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" msgstr "" -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." @@ -420,7 +421,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." @@ -428,19 +429,19 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." msgstr "" -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." @@ -448,7 +449,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." @@ -456,7 +457,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." msgstr "" diff --git a/tabbycat/adjfeedback/locale/ro/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/ro/LC_MESSAGES/django.po index 736000595a5..e0413ce1932 100644 --- a/tabbycat/adjfeedback/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/ro/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:26\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" "MIME-Version: 1.0\n" @@ -12,34 +12,45 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:43 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" msgstr "" -#: adjfeedback/admin.py:68 adjfeedback/admin.py:126 +#: adjfeedback/admin.py msgid "target" msgstr "" -#: adjfeedback/admin.py:69 adjfeedback/admin.py:127 adjfeedback/models.py:220 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" msgstr "" -#: adjfeedback/admin.py:70 adjfeedback/admin.py:128 adjfeedback/models.py:222 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" msgstr "" -#: adjfeedback/admin.py:84 +#: adjfeedback/admin.py msgid "Target" msgstr "" -#: adjfeedback/admin.py:85 adjfeedback/admin.py:149 +#: adjfeedback/admin.py msgid "Source" msgstr "" -#: adjfeedback/admin.py:167 +#: adjfeedback/admin.py +msgid "Feedback timestamp and version" +msgstr "" + +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." @@ -47,7 +58,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjfeedback/admin.py:179 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." @@ -55,7 +66,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." @@ -63,7 +74,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjfeedback/admin.py:202 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." @@ -71,7 +82,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjfeedback/admin.py:212 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." @@ -79,387 +90,398 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" msgstr "" -#: adjfeedback/forms.py:25 +#: adjfeedback/forms.py msgid "chair" msgstr "" -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "solo" msgstr "" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "panellist" msgstr "" -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "trainee" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:56 +#: adjfeedback/forms.py msgid "Yes" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:58 +#: adjfeedback/forms.py msgid "No" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:73 adjfeedback/forms.py:82 +#: adjfeedback/forms.py msgid "This field is required." msgstr "" -#: adjfeedback/forms.py:173 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" msgstr "" -#: adjfeedback/forms.py:185 +#: adjfeedback/forms.py msgid "Ignored" msgstr "" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:244 adjfeedback/forms.py:307 +#: adjfeedback/forms.py msgid "Submitted - " msgstr "" #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:245 adjfeedback/forms.py:312 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" msgstr "" -#: adjfeedback/forms.py:268 adjfeedback/forms.py:342 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "" -#: adjfeedback/forms.py:285 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" msgstr "" -#: adjfeedback/forms.py:309 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "" -#: adjfeedback/forms.py:315 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" msgstr "" -#: adjfeedback/forms.py:317 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" msgstr "" -#: adjfeedback/forms.py:408 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" msgstr "" -#: adjfeedback/forms.py:413 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" msgstr "" -#: adjfeedback/forms.py:426 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." msgstr "" -#: adjfeedback/forms.py:432 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" msgstr "" -#: adjfeedback/forms.py:440 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" msgstr "" -#: adjfeedback/forms.py:455 +#: adjfeedback/forms.py msgid "There were no scores to import." msgstr "" -#: adjfeedback/models.py:12 adjfeedback/models.py:215 +#: adjfeedback/models.py msgid "adjudicator" msgstr "" -#: adjfeedback/models.py:15 +#: adjfeedback/models.py msgid "round" msgstr "" -#: adjfeedback/models.py:16 adjfeedback/models.py:216 +#: adjfeedback/models.py msgid "score" msgstr "" -#: adjfeedback/models.py:17 +#: adjfeedback/models.py msgid "timestamp" msgstr "" -#: adjfeedback/models.py:20 +#: adjfeedback/models.py msgid "adjudicator base score history" msgstr "" -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score histories" msgstr "" -#: adjfeedback/models.py:29 +#: adjfeedback/models.py msgid "question" msgstr "" -#: adjfeedback/models.py:31 +#: adjfeedback/models.py msgid "feedback" msgstr "" -#: adjfeedback/models.py:42 adjfeedback/models.py:50 adjfeedback/models.py:58 -#: adjfeedback/models.py:66 +#: adjfeedback/models.py msgid "answer" msgstr "" -#: adjfeedback/models.py:45 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" msgstr "" -#: adjfeedback/models.py:46 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" msgstr "" -#: adjfeedback/models.py:53 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" msgstr "" -#: adjfeedback/models.py:54 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" msgstr "" -#: adjfeedback/models.py:61 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" msgstr "" -#: adjfeedback/models.py:62 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" msgstr "" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" msgstr "" -#: adjfeedback/models.py:70 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" msgstr "" -#: adjfeedback/models.py:89 +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answers" +msgstr "" + +#: adjfeedback/models.py msgid "checkbox" msgstr "" -#: adjfeedback/models.py:90 +#: adjfeedback/models.py msgid "yes/no (dropdown)" msgstr "" -#: adjfeedback/models.py:91 +#: adjfeedback/models.py msgid "integer (textbox)" msgstr "" -#: adjfeedback/models.py:92 +#: adjfeedback/models.py msgid "integer scale" msgstr "" -#: adjfeedback/models.py:93 +#: adjfeedback/models.py msgid "float" msgstr "" -#: adjfeedback/models.py:94 adjfeedback/models.py:127 +#: adjfeedback/models.py msgid "text" msgstr "" -#: adjfeedback/models.py:95 +#: adjfeedback/models.py msgid "long text" msgstr "" -#: adjfeedback/models.py:96 +#: adjfeedback/models.py msgid "select one" msgstr "" -#: adjfeedback/models.py:97 +#: adjfeedback/models.py msgid "select multiple" msgstr "" -#: adjfeedback/models.py:123 +#: adjfeedback/models.py msgid "tournament" msgstr "" -#: adjfeedback/models.py:125 +#: adjfeedback/models.py msgid "sequence number" msgstr "" -#: adjfeedback/models.py:128 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" msgstr "" -#: adjfeedback/models.py:130 +#: adjfeedback/models.py msgid "name" msgstr "" -#: adjfeedback/models.py:131 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" msgstr "" -#: adjfeedback/models.py:133 +#: adjfeedback/models.py msgid "reference" msgstr "" -#: adjfeedback/models.py:134 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" msgstr "" -#: adjfeedback/models.py:137 +#: adjfeedback/models.py msgid "from adjudicator" msgstr "" -#: adjfeedback/models.py:138 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" msgstr "" -#: adjfeedback/models.py:140 +#: adjfeedback/models.py msgid "from team" msgstr "" -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "Teams should be asked this question" msgstr "" -#: adjfeedback/models.py:144 +#: adjfeedback/models.py msgid "answer type" msgstr "" -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "required" msgstr "" -#: adjfeedback/models.py:147 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" msgstr "" -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "minimum value" msgstr "" -#: adjfeedback/models.py:150 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "" -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "maximum value" msgstr "" -#: adjfeedback/models.py:153 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "" -#: adjfeedback/models.py:160 +#: adjfeedback/models.py msgid "choices" msgstr "" -#: adjfeedback/models.py:161 -msgid "Permissible choices for select one/multiple fields, separated by '//' (ignored for other fields)" +#: adjfeedback/models.py +msgid "Permissible choices for select one/multiple fields (ignored for other fields)" msgstr "" -#: adjfeedback/models.py:166 +#: adjfeedback/models.py msgid "adjudicator feedback question" msgstr "" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "adjudicator feedback questions" msgstr "" -#: adjfeedback/models.py:225 adjfeedback/views.py:761 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" msgstr "" -#: adjfeedback/models.py:226 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" msgstr "" -#: adjfeedback/models.py:230 +#: adjfeedback/models.py msgid "adjudicator feedback" msgstr "" -#: adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator feedbacks" msgstr "" -#: adjfeedback/models.py:278 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." msgstr "" -#: adjfeedback/models.py:281 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." msgstr "" -#: adjfeedback/models.py:283 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" msgstr "" -#: adjfeedback/models.py:285 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." msgstr "" -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" msgstr "" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py +msgid "N/A" +msgstr "" + +#: adjfeedback/tables.py msgid "Current weighted score" msgstr "" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." msgstr "" -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" msgstr "" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" msgstr "" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" msgstr "" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:83 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:92 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." msgstr "" -#: adjfeedback/tables.py:96 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" msgstr "" -#: adjfeedback/tables.py:105 +#: adjfeedback/tables.py msgid "Feedback Per Round" msgstr "" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" msgstr "" -#: adjfeedback/tables.py:124 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" @@ -467,215 +489,218 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjfeedback/tables.py:147 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" msgstr "" -#: adjfeedback/tables.py:171 +#: adjfeedback/tables.py msgid "View Missing Feedback" msgstr "" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" msgstr "" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" msgstr "" -#: adjfeedback/templates/enter_feedback.html:9 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format -msgid "Add Feedback from %(source_name)s" +msgid "Add Feedback from %(name)s" msgstr "" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" msgstr "" -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" msgstr "" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." msgstr "" -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." msgstr "" -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." msgstr "" -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" msgstr "" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" msgstr "" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" msgstr "" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" msgstr "" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" msgstr "" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" msgstr "" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" msgstr "" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." msgstr "" -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." msgstr "" -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." msgstr "" -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "\n" -" On %(adjudicator)s\n" -" " +msgid "On %(adjudicator)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" +msgid "Received as %(as_type)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" msgstr "" -#: adjfeedback/templates/feedback_card.html:85 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:90 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:95 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:95 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:100 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:105 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" msgstr "" -#: adjfeedback/templates/feedback_card.html:105 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" msgstr "" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" msgstr "" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" msgstr "" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html #, python-format -msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit on trainees." +msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:20 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:31 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." @@ -683,7 +708,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." @@ -691,29 +716,29 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." @@ -721,7 +746,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." @@ -729,7 +754,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" @@ -737,11 +762,11 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" @@ -749,12 +774,12 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" @@ -762,83 +787,76 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" msgstr "" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" msgstr "" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" msgstr "" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 -#, python-format -msgid "Add feedback from %(name)s" -msgstr "" - -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" msgstr "" -#: adjfeedback/views.py:117 +#: adjfeedback/views.py msgid "Feedback Overview" msgstr "" -#: adjfeedback/views.py:141 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" msgstr "" -#: adjfeedback/views.py:152 adjfeedback/views.py:176 adjfeedback/views.py:191 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" @@ -846,90 +864,90 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjfeedback/views.py:155 adjfeedback/views.py:181 adjfeedback/views.py:196 +#: adjfeedback/views.py msgid "Feedbacks" msgstr "" -#: adjfeedback/views.py:162 +#: adjfeedback/views.py msgid "Find Feedback" msgstr "" -#: adjfeedback/views.py:170 adjfeedback/views.py:706 +#: adjfeedback/views.py msgid "From Teams" msgstr "" -#: adjfeedback/views.py:185 adjfeedback/views.py:700 +#: adjfeedback/views.py msgid "From Adjudicators" msgstr "" -#: adjfeedback/views.py:270 +#: adjfeedback/views.py msgid "Latest Feedback" msgstr "" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "(30 most recent)" msgstr "" -#: adjfeedback/views.py:281 +#: adjfeedback/views.py msgid "Only Comments" msgstr "" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "(250 most recent)" msgstr "" -#: adjfeedback/views.py:293 +#: adjfeedback/views.py msgid "Important Feedback" msgstr "" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" msgstr "" -#: adjfeedback/views.py:361 +#: adjfeedback/views.py msgid "A Team" msgstr "" -#: adjfeedback/views.py:366 +#: adjfeedback/views.py msgid "Team" msgstr "" -#: adjfeedback/views.py:373 adjfeedback/views.py:392 +#: adjfeedback/views.py msgid "Institution" msgstr "" -#: adjfeedback/views.py:378 +#: adjfeedback/views.py msgid "An Adjudicator" msgstr "" -#: adjfeedback/views.py:385 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "" -#: adjfeedback/views.py:512 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." msgstr "" -#: adjfeedback/views.py:542 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." msgstr "" -#: adjfeedback/views.py:621 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" msgstr "" -#: adjfeedback/views.py:644 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." msgstr "" -#: adjfeedback/views.py:671 +#: adjfeedback/views.py msgid "Feedback Progress" msgstr "" -#: adjfeedback/views.py:692 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" @@ -937,24 +955,24 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: adjfeedback/views.py:737 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." msgstr "" -#: adjfeedback/views.py:751 +#: adjfeedback/views.py msgid "confirmed" msgstr "" -#: adjfeedback/views.py:751 +#: adjfeedback/views.py msgid "un-confirmed" msgstr "" -#: adjfeedback/views.py:761 +#: adjfeedback/views.py msgid "un-ignored" msgstr "" -#: adjfeedback/views.py:797 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." diff --git a/tabbycat/availability/locale/ro/LC_MESSAGES/django.po b/tabbycat/availability/locale/ro/LC_MESSAGES/django.po index 9a110f59f69..de543498e70 100644 --- a/tabbycat/availability/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/ro/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:28\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" "MIME-Version: 1.0\n" @@ -12,96 +12,90 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" msgstr "" -#: availability/models.py:15 +#: availability/models.py msgid "content type" msgstr "" -#: availability/models.py:16 +#: availability/models.py msgid "object id" msgstr "" -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" msgstr "" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" msgstr "" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" msgstr "" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" msgstr "" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" msgstr "" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" msgstr "" -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" msgstr "" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" msgstr "" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." msgstr "" -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." msgstr "" -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." msgstr "" -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " @@ -109,98 +103,98 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " msgstr "" -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." msgstr "" -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" msgstr "" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." msgstr "" -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" msgstr "" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" msgstr "" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" msgstr "" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" msgstr "" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" msgstr "" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" msgstr "" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" msgstr "" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" msgstr "" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" msgstr "" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." msgstr "" -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." msgstr "" -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" msgstr "" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." @@ -208,7 +202,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." @@ -216,7 +210,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" @@ -224,7 +218,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." @@ -232,7 +226,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" @@ -240,12 +234,12 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." @@ -253,11 +247,11 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" msgstr "" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." @@ -265,7 +259,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" @@ -273,7 +267,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." @@ -281,7 +275,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" @@ -289,7 +283,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." @@ -297,12 +291,12 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." @@ -310,16 +304,16 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" msgstr "" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" msgstr "" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" @@ -328,7 +322,7 @@ msgstr[1] "" msgstr[2] "" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" @@ -339,7 +333,7 @@ msgstr[2] "" #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" @@ -348,7 +342,7 @@ msgstr[1] "" msgstr[2] "" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" @@ -356,60 +350,60 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" msgstr "" -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" msgstr "" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" msgstr "" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" msgstr "" -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" msgstr "" -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" msgstr "" -#: availability/views.py:260 +#: availability/views.py msgid "Room" msgstr "" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" msgstr "" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" msgstr "" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" msgstr "" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." msgstr "" -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." msgstr "" -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." msgstr "" -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." msgstr "" diff --git a/tabbycat/breakqual/locale/ro/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/ro/LC_MESSAGES/django.po index 4e8f4c8b881..9e7527c1e50 100644 --- a/tabbycat/breakqual/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/ro/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:28\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" "MIME-Version: 1.0\n" @@ -12,511 +12,512 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" msgstr "" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "" +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "" -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" msgstr "" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" msgstr "" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" msgstr "" -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" msgstr "" -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" msgstr "" -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" msgstr "" -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" msgstr "" -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" msgstr "" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" msgstr "" -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" msgstr "" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" msgstr "" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" msgstr "" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" msgstr "" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" msgstr "" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" msgstr "" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" msgstr "" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" msgstr "" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" msgstr "" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" msgstr "" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" msgstr "" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" msgstr "" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" msgstr "" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" msgstr "" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" msgstr "" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" msgstr "" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" msgstr "" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" msgstr "" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" msgstr "" -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" msgstr "" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." msgstr "" -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." msgstr "" -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" msgstr "" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." msgstr "" -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" msgstr "" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " msgstr "" -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" msgstr "" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" msgstr "" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " msgstr "" -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" msgstr "" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" msgstr "" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" msgstr "" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" msgstr "" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" msgstr "" -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" msgstr "" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." msgstr "" -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." msgstr "" -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." msgstr "" -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." msgstr "" -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." msgstr "" -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." msgstr "" -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" msgstr "" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" msgstr "" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" msgstr "" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" msgstr "" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." msgstr "" -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" msgstr "" -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" msgstr "" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" msgstr "" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" msgstr "" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" msgstr "" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" msgstr "" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" msgstr "" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" msgstr "" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" msgstr "" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" msgstr "" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" msgstr "" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" msgstr "" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" msgstr "" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" msgstr "" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" msgstr "" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" msgstr "" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" msgstr "" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" msgstr "" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" msgstr "" -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" msgstr "" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" msgstr "" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" msgstr "" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." msgstr "" -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." msgstr "" -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" msgstr "" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" msgstr "" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" diff --git a/tabbycat/draw/locale/ro/LC_MESSAGES/django.po b/tabbycat/draw/locale/ro/LC_MESSAGES/django.po index 49be10ec765..1f24c8f8dc4 100644 --- a/tabbycat/draw/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/ro/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:27\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:27\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" "MIME-Version: 1.0\n" @@ -12,23 +12,12 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." @@ -36,7 +25,11 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: draw/admin.py:93 +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." @@ -44,416 +37,405 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: draw/apps.py:7 draw/views.py:429 draw/views.py:432 +#: draw/apps.py draw/views.py msgid "Draw" msgstr "" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "Too many swaps" msgstr "" -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" msgstr "" -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" msgstr "" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble up (history)" msgstr "" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble down (history)" msgstr "" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble up (institution)" msgstr "" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble down (institution)" msgstr "" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" msgstr "" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Can't bubble up/down" msgstr "" -#: draw/generator/__init__.py:26 +#: draw/generator/__init__.py msgid "Pull-up team" msgstr "" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." msgstr "" -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." msgstr "" -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." msgstr "" -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." msgstr "" -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." msgstr "" -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." msgstr "" -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." msgstr "" -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." msgstr "" -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." msgstr "" -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." msgstr "" -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." msgstr "" -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." msgstr "" -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." msgstr "" -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." msgstr "" -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." msgstr "" -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" msgstr "" -#: draw/manager.py:269 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." msgstr "" -#: draw/models.py:27 +#: draw/models.py msgid "none" msgstr "" -#: draw/models.py:28 +#: draw/models.py msgid "postponed" msgstr "" -#: draw/models.py:29 +#: draw/models.py msgid "draft" msgstr "" -#: draw/models.py:30 +#: draw/models.py msgid "confirmed" msgstr "" -#: draw/models.py:36 draw/models.py:389 +#: draw/models.py msgid "round" msgstr "" -#: draw/models.py:38 -msgid "venue" +#: draw/models.py +msgid "room" msgstr "" -#: draw/models.py:41 +#: draw/models.py msgid "bracket" msgstr "" -#: draw/models.py:43 +#: draw/models.py msgid "room rank" msgstr "" -#: draw/models.py:49 +#: draw/models.py msgid "importance" msgstr "" -#: draw/models.py:51 +#: draw/models.py msgid "result status" msgstr "" -#: draw/models.py:53 +#: draw/models.py msgid "sides confirmed" msgstr "" -#: draw/models.py:54 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." msgstr "" -#: draw/models.py:57 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "" -#: draw/models.py:58 +#: draw/models.py msgid "debates" msgstr "" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:77 draw/models.py:102 +#: draw/models.py msgid " (sides not confirmed)" msgstr "" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:89 draw/models.py:106 +#: draw/models.py msgid " vs " msgstr "" -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" msgstr "" -#: draw/models.py:263 +#: draw/models.py msgid "negative" msgstr "" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" msgstr "" -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" msgstr "" -#: draw/models.py:266 +#: draw/models.py msgid "closing government" msgstr "" -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" msgstr "" -#: draw/models.py:274 draw/models.py:391 +#: draw/models.py msgid "team" msgstr "" -#: draw/models.py:276 draw/models.py:393 +#: draw/models.py msgid "side" msgstr "" -#: draw/models.py:282 +#: draw/models.py msgid "debate team" msgstr "" -#: draw/models.py:283 +#: draw/models.py msgid "debate teams" msgstr "" -#: draw/models.py:311 -msgid "placed 1st" -msgstr "" - -#: draw/models.py:313 -msgid "placed 2nd" -msgstr "" - -#: draw/models.py:315 -msgid "placed 3rd" -msgstr "" - -#: draw/models.py:317 -msgid "placed 4th" +#: draw/models.py +#, python-format +msgid "placed %(place)s" msgstr "" -#: draw/models.py:319 draw/models.py:326 +#: draw/models.py msgid "result unknown" msgstr "" -#: draw/models.py:322 +#: draw/models.py msgid "won" msgstr "" -#: draw/models.py:324 +#: draw/models.py msgid "lost" msgstr "" -#: draw/models.py:397 +#: draw/models.py msgid "team side allocation" msgstr "" -#: draw/models.py:398 +#: draw/models.py msgid "team side allocations" msgstr "" #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" msgstr "" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" msgstr "" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" msgstr "" -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" msgstr "" -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" msgstr "" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" msgstr "" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" msgstr "" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" msgstr "" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" msgstr "" -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" msgstr "" -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" msgstr "" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" msgstr "" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" msgstr "" -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" msgstr "" -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" msgstr "" -#: draw/tables.py:292 +#: draw/tables.py msgid "After" msgstr "" -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" msgstr "" -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" msgstr "" -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" msgstr "" -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" msgstr "" -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" msgstr "" -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" msgstr "" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." @@ -461,7 +443,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" @@ -469,7 +451,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." @@ -477,7 +459,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." @@ -485,7 +467,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" @@ -493,7 +475,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." @@ -501,7 +483,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" @@ -509,7 +491,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." @@ -517,7 +499,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" @@ -525,7 +507,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." @@ -533,81 +515,77 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" msgstr "" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" msgstr "" -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" msgstr "" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" msgstr "" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" msgstr "" -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" msgstr "" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" msgstr "" -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" msgstr "" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" msgstr "" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" msgstr "" -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" msgstr "" -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." @@ -615,310 +593,312 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" msgstr "" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." -msgstr "" - -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." msgstr "" -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "" +msgid_plural "Enter motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" msgstr "" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." msgstr "" -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." msgstr "" -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." msgstr "" -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" msgstr "" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." msgstr "" -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." msgstr "" -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: draw/templates/draw_display_admin.html:200 +#: draw/templates/draw_display_admin.html msgid "Release Motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:201 -msgid "Release motion to public" -msgstr "" +msgid_plural "Release Motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: draw/templates/draw_display_admin.html:202 -msgid "Unrelease motion to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." msgstr "" -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." msgstr "" -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "" - -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "" +msgid_plural "Motions have been released publicly." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" msgstr "" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" msgstr "" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" msgstr "" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" msgstr "" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" msgstr "" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" msgstr "" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" msgstr "" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" msgstr "" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" msgstr "" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" msgstr "" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" msgstr "" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" msgstr "" -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" msgstr "" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" msgstr "" -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" msgstr "" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" msgstr "" -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" msgstr "" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" msgstr "" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" msgstr "" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" msgstr "" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." msgstr "" -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." msgstr "" -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." msgstr "" -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" msgstr "" -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" msgstr "" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" msgstr "" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." @@ -926,21 +906,20 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" msgstr "" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" msgstr "" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." @@ -948,92 +927,92 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" msgstr "" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" msgstr "" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." msgstr "" -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." msgstr "" -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " msgstr "" -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." msgstr "" -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." msgstr "" -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." msgstr "" -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." msgstr "" -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." msgstr "" -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." msgstr "" -#: draw/views.py:66 draw/views.py:460 +#: draw/views.py msgid "No debates in this round" msgstr "" -#: draw/views.py:74 +#: draw/views.py #, python-format msgid "Draw for %(round)s" msgstr "" -#: draw/views.py:76 +#: draw/views.py msgid "Draws for Current Rounds" msgstr "" -#: draw/views.py:80 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" msgstr "" -#: draw/views.py:84 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" msgstr "" -#: draw/views.py:122 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" @@ -1041,121 +1020,125 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: draw/views.py:169 +#: draw/views.py msgid "The draw for this round hasn't been released." msgstr "" -#: draw/views.py:222 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" msgstr "" -#: draw/views.py:380 +#: draw/views.py msgid "Adjudicator Assignments" msgstr "" -#: draw/views.py:400 +#: draw/views.py +msgid "Position" +msgstr "" + +#: draw/views.py msgid "Team Pairings" msgstr "" -#: draw/views.py:424 +#: draw/views.py msgid "No Draw" msgstr "" -#: draw/views.py:426 +#: draw/views.py msgid "Draft Draw" msgstr "" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:518 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" msgstr "" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:523 +#: draw/views.py msgid "BR" msgstr "" -#: draw/views.py:548 +#: draw/views.py msgid "Draw with Details" msgstr "" -#: draw/views.py:556 +#: draw/views.py msgid "Position Balance Report" msgstr "" -#: draw/views.py:567 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" msgstr "" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:570 +#: draw/views.py msgid " (i.e., Shannon entropy)" msgstr "" -#: draw/views.py:600 +#: draw/views.py msgid "Teams with position imbalances" msgstr "" -#: draw/views.py:601 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" msgstr "" -#: draw/views.py:604 +#: draw/views.py msgid "Annotated draw" msgstr "" -#: draw/views.py:635 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" msgstr "" -#: draw/views.py:643 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " msgstr "" -#: draw/views.py:651 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " msgstr "" -#: draw/views.py:660 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " msgstr "" -#: draw/views.py:676 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "" -#: draw/views.py:703 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "" -#: draw/views.py:723 +#: draw/views.py msgid "Released the draw." msgstr "" -#: draw/views.py:738 +#: draw/views.py msgid "Unreleased the draw." msgstr "" -#: draw/views.py:751 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." msgstr "" -#: draw/views.py:770 +#: draw/views.py msgid "Side Pre-Allocations" msgstr "" -#: draw/views.py:803 +#: draw/views.py msgid "Edit Matchups" msgstr "" diff --git a/tabbycat/importer/locale/ro/LC_MESSAGES/django.po b/tabbycat/importer/locale/ro/LC_MESSAGES/django.po index 8f5402d9098..6fb1533fe2e 100644 --- a/tabbycat/importer/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/ro/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:29\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" "MIME-Version: 1.0\n" @@ -12,29 +12,31 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" msgstr "" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" msgstr "" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" msgstr "" -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." msgstr "" -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." @@ -42,11 +44,11 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." msgstr "" -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." @@ -54,88 +56,88 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" msgstr "" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" msgstr "" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" msgstr "" -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" msgstr "" -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" msgstr "" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" msgstr "" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" msgstr "" -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" msgstr "" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" msgstr "" -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" msgstr "" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." msgstr "" -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." msgstr "" -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." msgstr "" -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." msgstr "" -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" msgstr "" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." msgstr "" -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" msgstr "" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." @@ -143,7 +145,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." @@ -151,196 +153,232 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 +#: importer/forms.py +msgid "XML" +msgstr "" + +#: importer/forms.py +msgid "The Debate XML archive to parse" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export Tournament Archive" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Tournaments can be exported in an XML format for use outside Tabbycat." +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export all data" +msgstr "" + +#: importer/templates/archive_importer.html +msgctxt "page title" +msgid "Import Tournament Archive" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "This form will create a tournament with the data provided as a Debate XML format." +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Import" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Go back to the site home page" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html msgctxt "page title" msgid "Add Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" msgstr "" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" msgstr "" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." msgstr "" -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" msgstr "" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" msgstr "" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" msgstr "" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" msgstr "" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" msgstr "" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" msgstr "" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_index.html +msgid "Add/Edit Break Categories" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Speaker Categories" +msgstr "" + +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" msgstr "" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" msgstr "" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" msgstr "" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" msgstr "" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" msgstr "" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" msgstr "" -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" msgstr "" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." msgstr "" -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" msgstr "" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." msgstr "" -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" msgstr "" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" msgstr "" -#: importer/views.py:102 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." @@ -348,7 +386,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: importer/views.py:123 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." @@ -356,7 +394,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: importer/views.py:182 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." @@ -364,12 +402,12 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: importer/views.py:203 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "" -#: importer/views.py:208 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." @@ -377,11 +415,15 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: importer/views.py:224 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " msgstr "" -#: importer/views.py:232 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." msgstr "" +#: importer/views.py +msgid "Tournament archive has been imported." +msgstr "" + diff --git a/tabbycat/locale/ro/LC_MESSAGES/django.po b/tabbycat/locale/ro/LC_MESSAGES/django.po index 5c8a6488037..ddc8036dbbb 100644 --- a/tabbycat/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/locale/ro/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:35\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" "MIME-Version: 1.0\n" @@ -12,304 +12,333 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" msgstr "" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:92 +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" msgstr "" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" msgstr "" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" msgstr "" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" msgstr "" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." msgstr "" -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" msgstr "" -#: checkins/models.py:37 +#: checkins/models.py msgid "" msgstr "" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" msgstr "" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" msgstr "" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" msgstr "" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" msgstr "" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" msgstr "" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" msgstr "" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" msgstr "" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" msgstr "" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" msgstr "" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" msgstr "" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" msgstr "" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" msgstr "" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." msgstr "" -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." msgstr "" -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." msgstr "" -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" msgstr "" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" msgstr "" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" msgstr "" -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." msgstr "" -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." msgstr "" -#: checkins/views.py:29 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" msgstr "" -#: checkins/views.py:62 +#: checkins/views.py msgid "People's Check-In Statuses" msgstr "" -#: checkins/views.py:119 +#: checkins/views.py msgid "Rooms' Check-In Statuses" msgstr "" -#: checkins/views.py:168 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" msgstr "" -#: checkins/views.py:175 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" msgstr "Vorbitori" -#: checkins/views.py:180 templates/nav/public_nav.html:132 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "" -#: checkins/views.py:185 +#: checkins/views.py msgid "Rooms" msgstr "" -#: checkins/views.py:226 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" msgstr "" -#: checkins/views.py:233 +#: checkins/views.py msgid "Identifiers" msgstr "" -#: checkins/views.py:269 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." msgstr "" -#: checkins/views.py:276 +#: checkins/views.py msgid "You have revoked your check-in." msgstr "" -#: checkins/views.py:278 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." msgstr "" -#: checkins/views.py:281 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." msgstr "" -#: checkins/views.py:283 +#: checkins/views.py msgid "You are now checked in." msgstr "" -#: settings/core.py:45 +#: settings/core.py msgid "Arabic" msgstr "" -#: settings/core.py:46 +#: settings/core.py +msgid "Bengali" +msgstr "" + +#: settings/core.py msgid "English" msgstr "" -#: settings/core.py:47 +#: settings/core.py msgid "Spanish" msgstr "" -#: settings/core.py:48 +#: settings/core.py msgid "French" msgstr "" -#: settings/core.py:49 +#: settings/core.py +msgid "Indonesian" +msgstr "" + +#: settings/core.py msgid "Japanese" msgstr "" -#: settings/core.py:50 +#: settings/core.py +msgid "Malay" +msgstr "" + +#: settings/core.py msgid "Portuguese" msgstr "" -#: settings/core.py:51 +#: settings/core.py msgid "Russian" msgstr "" -#: templates/admin/delete_protected_message.html:4 +#: settings/core.py +msgid "Simplified Chinese" +msgstr "" + +#: settings/core.py +msgid "Translation" +msgstr "" + +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." msgstr "" -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." msgstr "" -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." msgstr "" -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" msgstr "" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" msgstr "" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" msgstr "Autentificare" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" msgstr "" -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "" -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." msgstr "" -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" msgstr "" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" msgstr "" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." msgstr "" -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." @@ -317,568 +346,613 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: templates/errors/public_403.html:14 +#: templates/errors/legacy_sendgrid_warning.html +msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." +msgstr "" + +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." msgstr "" -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." msgstr "" -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." msgstr "" -#: templates/footer.html:24 +#: templates/footer.html #, python-format -msgid "For a tournament of this size, we suggest a donation of $%(amount)s." +msgid "For a tournament of this size, we suggest a donation of $%(amount)s." msgstr "" -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." msgstr "" -#: templates/footer.html:32 -#, python-format -msgid "Donations to Tabbycat from individuals or organisations are much appreciated." +#: templates/footer.html +msgid "Donations to Tabbycat from individuals or organisations are much appreciated." msgstr "" -#: templates/footer.html:40 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" msgstr "" -#: templates/footer.html:42 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." msgstr "" -#: templates/footer.html:51 -msgid "Need ballots?" +#: templates/footer.html +msgid "Our Organisation" msgstr "" -#: templates/footer.html:53 -msgid "You can customise and print great ballots from your browser." +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." msgstr "" -#: templates/footer.html:66 +#: templates/footer.html msgid "Language" msgstr "" -#: templates/footer.html:73 +#: templates/footer.html msgid "GitHub" msgstr "" -#: templates/footer.html:79 +#: templates/footer.html msgid "Documentation" msgstr "" -#: templates/footer.html:85 +#: templates/footer.html msgid "Support" msgstr "" -#: templates/footer.html:91 +#: templates/footer.html msgid "Facebook" msgstr "" -#: templates/footer.html:97 +#: templates/footer.html msgid "Set Up A Copy" msgstr "" -#: templates/footer.html:111 +#: templates/footer.html msgid "Change Language" msgstr "" -#: templates/footer.html:128 +#: templates/footer.html msgid "Use this language" msgstr "" -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" msgstr "" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" msgstr "" -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" msgstr "" -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" msgstr "" -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" msgstr "" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" msgstr "" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" msgstr "" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" msgstr "" -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" msgstr "" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" msgstr "" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" msgstr "" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:162 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" msgstr "" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" msgstr "" -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" msgstr "" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" msgstr "" -#: templates/nav/admin_nav.html:96 -msgid "It\\" -msgstr "" - -#: templates/nav/admin_nav.html:97 -msgid "Where's Edit Database?" +#: templates/nav/admin_nav.html +msgid "Export XML" msgstr "" -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:147 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" msgstr "" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" msgstr "" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" msgstr "" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" msgstr "" -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" msgstr "" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" msgstr "" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" msgstr "" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" msgstr "" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" msgstr "" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" msgstr "" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" msgstr "" -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" msgstr "" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:152 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" msgstr "" -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" msgstr "" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" msgstr "" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" msgstr "" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" msgstr "" -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" msgstr "" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:142 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "Moțiuni" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:157 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" msgstr "" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" msgstr "" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" msgstr "" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" msgstr "" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" msgstr "" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" msgstr "" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" msgstr "" -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:182 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" msgstr "" -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" msgstr "" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:167 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" msgstr "" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" msgstr "" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" msgstr "" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" msgstr "" -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" msgstr "" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" msgstr "" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" msgstr "" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" msgstr "" -#: templates/nav/public_nav.html:50 +#: templates/nav/public_nav.html msgid "Motions Tab" msgstr "" -#: templates/nav/public_nav.html:59 +#: templates/nav/public_nav.html +msgid "By round" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Globally" +msgstr "" + +#: templates/nav/public_nav.html msgid "Draws" msgstr "" -#: templates/nav/public_nav.html:70 +#: templates/nav/public_nav.html msgid "No Draws Available" msgstr "" -#: templates/nav/public_nav.html:78 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: templates/nav/public_nav.html:82 +#: templates/nav/public_nav.html msgid "Current Draws" msgstr "" -#: templates/nav/public_nav.html:102 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" msgstr "" -#: templates/nav/public_nav.html:120 +#: templates/nav/public_nav.html msgid "Break" msgstr "" -#: templates/nav/public_nav.html:172 +#: templates/nav/public_nav.html msgid "Feedback Progress" msgstr "" -#: templates/nav/public_nav.html:177 +#: templates/nav/public_nav.html msgid "Enter Ballot" msgstr "" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" msgstr "" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" msgstr "" -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" msgstr "" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" msgstr "" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" msgstr "" -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" msgstr "" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" msgstr "" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" msgstr "" -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" msgstr "" -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." msgstr "" -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." msgstr "" -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." msgstr "" -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" msgstr "" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." msgstr "" -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" msgstr "" -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" msgstr "" -#: templates/registration/password_change_form.html:20 +#: templates/registration/password_change_form.html +#, python-format +msgid "API Token: %(api_token)s" +msgstr "" + +#: templates/registration/password_change_form.html +msgid "The API token will allow you to authorize external applications to access the site as staff." +msgstr "" + +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." msgstr "" -#: templates/registration/password_change_form.html:25 -#: templates/registration/password_reset_confirm.html:38 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" msgstr "" -#: templates/registration/password_change_form.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" msgstr "" -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "" -#: templates/registration/password_reset_complete.html:16 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." msgstr "" -#. Translators: This text appears on a button that takes the user to the login page after a password reset. -#: templates/registration/password_reset_complete.html:23 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" msgstr "" -#: templates/registration/password_reset_confirm.html:4 -#: templates/registration/password_reset_confirm.html:14 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" msgstr "" -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html +msgctxt "page title" +msgid "Password Reset" +msgstr "" + +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" msgstr "" -#: templates/registration/password_reset_confirm.html:44 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." msgstr "" -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" -msgid "Password reset e-mail sent" -msgstr "" - -#: templates/registration/password_reset_done.html:16 -msgid "We've e-mailed you instructions for setting your password, if an account exists with the e-mail address you entered. You should receive them shortly." +msgid "Password reset email sent" msgstr "" -#: templates/registration/password_reset_done.html:19 -msgid "If you don't receive an e-mail, please make sure you've entered the address you registered with, and check your spam folder." +#: templates/registration/password_reset_done.html +msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." msgstr "" -#. Translators: This text appears on a button that takes the user back to the login page from the password reset page. -#: templates/registration/password_reset_done.html:26 -msgid "Return to the login page" +#: templates/registration/password_reset_done.html +msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." msgstr "" -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" msgstr "" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format -msgid "Someone asked for a password reset for the e-mail address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." +msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" msgstr "" -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format -msgid "If this wasn't you, that probably means someone else typed your e-mail address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." -msgstr "" - -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 -msgctxt "page title" -msgid "Password Reset" +msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_form.html:27 -msgid "Enter your e-mail address below, and we'll e-mail you a password reset link." +#: templates/registration/password_reset_form.html +msgid "Enter your email address below, and we'll email you a password reset link." msgstr "" -#: templates/registration/password_reset_form.html:34 -msgid "Please enter a valid e-mail address." +#: templates/registration/password_reset_form.html +msgid "Please enter a valid email address." msgstr "" -#: templates/registration/password_reset_form.html:39 -msgid "E-mail address" +#: templates/registration/password_reset_form.html users/forms.py +msgid "Email address" msgstr "" -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" msgstr "" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" msgstr "" -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" msgstr "" -#: urls.py:101 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" msgstr "" -#: urls.py:104 +#: urls.py msgid "Welcome! You just logged in!" msgstr "" -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." msgstr "" -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." msgstr "" +#: users/templates/admin/auth/delete_user_warning.html +msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." +msgstr "" + +#: users/templates/signup.html +msgid "Sign-Up" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Administrator Account" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Assistant Account" +msgstr "" + +#: users/templates/signup.html +msgid "Create Account" +msgstr "" + +#: users/views.py +msgid "You have successfully created a new administrator account." +msgstr "" + +#: users/views.py +msgid "You have successfully created a new assistant account." +msgstr "" + +#: users/views.py +msgid "Whoops! It looks like someone's already created the first user account. Please log in." +msgstr "" + +#: users/views.py +#, python-format +msgid "Welcome! You've created an account for %s." +msgstr "" + diff --git a/tabbycat/locale/ro/LC_MESSAGES/djangojs.po b/tabbycat/locale/ro/LC_MESSAGES/djangojs.po index 49dab1d14b1..b46ab8dcfbb 100644 --- a/tabbycat/locale/ro/LC_MESSAGES/djangojs.po +++ b/tabbycat/locale/ro/LC_MESSAGES/djangojs.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-01-14 04:50+1100\n" -"PO-Revision-Date: 2020-02-25 20:17\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-10 07:03\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" "MIME-Version: 1.0\n" @@ -12,8 +12,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/djangojs.po\n" +"X-Crowdin-File-ID: 962\n" #: checkins/templates/CheckInScanContainer.vue: msgid "Scan Using Camera" @@ -42,7 +44,7 @@ msgid "By %1" msgstr "" #: checkins/templates/CheckInStatusContainer.vue: -msgid "No matching venues found." +msgid "No matching rooms found." msgstr "" #: checkins/templates/CheckInStatusContainer.vue: @@ -182,7 +184,7 @@ msgid "ID %1," msgstr "" #: printing/templates/PrintableBallotHeader.vue: -msgid "Venue:" +msgid "Room:" msgstr "" #: printing/templates/PrintableBallotHeader.vue: diff --git a/tabbycat/motions/locale/ro/LC_MESSAGES/django.po b/tabbycat/motions/locale/ro/LC_MESSAGES/django.po index 9cf2905a1f4..505ffa19b69 100644 --- a/tabbycat/motions/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/ro/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:32\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" +"Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" "MIME-Version: 1.0\n" @@ -12,144 +12,153 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "Moțiuni" -#: motions/models.py:9 -msgid "sequence number" -msgstr "" - -#: motions/models.py:10 -msgid "The order in which motions are displayed" -msgstr "" - -#: motions/models.py:12 +#: motions/models.py msgid "text" msgstr "" -#: motions/models.py:13 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" msgstr "" -#: motions/models.py:15 +#: motions/models.py msgid "reference" msgstr "" -#: motions/models.py:16 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" msgstr "" -#: motions/models.py:18 +#: motions/models.py msgid "info slide" msgstr "" -#: motions/models.py:19 +#: motions/models.py msgid "The information slide for this topic; if it has one" msgstr "" -#: motions/models.py:21 -msgid "round" +#: motions/models.py +msgid "tournament" msgstr "" -#: motions/models.py:25 motions/models.py:37 +#: motions/models.py +msgid "rounds" +msgstr "" + +#: motions/models.py msgid "motion" msgstr "moțiune" -#: motions/models.py:26 +#: motions/models.py msgid "motions" msgstr "moțiuni" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" msgstr "" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" msgstr "" -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" msgstr "" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" msgstr "" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" msgstr "" -#: motions/statistics.py:88 +#: motions/models.py +msgid "round" +msgstr "" + +#: motions/models.py +msgid "sequence number" +msgstr "" + +#: motions/models.py +msgid "The order in which motions are displayed" +msgstr "" + +#: motions/models.py +msgid "round motion" +msgstr "" + +#: motions/models.py +msgid "round motions" +msgstr "" + +#: motions/statistics.py msgid "extremely strong evidence" msgstr "" -#: motions/statistics.py:89 +#: motions/statistics.py msgid "strong evidence" msgstr "" -#: motions/statistics.py:90 +#: motions/statistics.py msgid "moderate evidence" msgstr "" -#: motions/statistics.py:91 +#: motions/statistics.py msgid "weak evidence" msgstr "" -#: motions/statistics.py:92 +#: motions/statistics.py msgid "very weak evidence" msgstr "" -#: motions/statistics.py:93 +#: motions/statistics.py msgid "extremely weak evidence" msgstr "" -#: motions/statistics.py:116 +#: motions/statistics.py msgid "balance inconclusive" msgstr "" -#: motions/statistics.py:117 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" msgstr "" -#: motions/statistics.py:125 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" msgstr "" -#: motions/statistics.py:126 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." msgstr "" -#: motions/statistics.py:131 +#: motions/statistics.py msgid "probably balanced" msgstr "" -#: motions/statistics.py:132 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." msgstr "" -#: motions/templates/motion_statistics.html:4 -#: motions/templates/motion_statistics.html:5 motions/views.py:165 -msgid "Motion Statistics" -msgstr "" - -#: motions/templates/motion_statistics.html:12 -msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments and during elimination rounds." -msgstr "" - -#: motions/templates/motion_statistics.html:39 -#: motions/templates/public_motions.html:31 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" @@ -157,7 +166,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" @@ -165,7 +174,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" @@ -173,59 +182,59 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" msgstr "Guvern" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" msgstr "Opoziție" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" @@ -233,7 +242,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" @@ -241,13 +250,12 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" @@ -255,12 +263,11 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" @@ -268,45 +275,64 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" msgstr "" -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" msgstr "" -#: motions/templates/motions_edit.html:55 +#: motions/templates/motions_edit.html +msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Reuse Motions from Last Round" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Use Existing Motions" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "" -#: motions/templates/public_motions.html:39 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." msgstr "" -#: motions/templates/public_motions.html:45 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." msgstr "" -#: motions/templates/public_motions.html:50 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." msgstr "" -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" @@ -314,7 +340,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" @@ -322,15 +348,23 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." msgstr "" -#: motions/views.py:87 +#: motions/utils.py +msgid "Not all latest ballots list the same motion, so could not be merged." +msgstr "" + +#: motions/utils.py +msgid "Motion vetos are inconsistent, so could not be merged." +msgstr "" + +#: motions/views.py msgid "The motion has been saved." msgstr "" -#: motions/views.py:89 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." @@ -338,7 +372,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: motions/views.py:94 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." @@ -346,15 +380,37 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: motions/views.py:118 -msgid "Released the motion(s)." +#: motions/views.py +msgid "Motions cannot be copied to the first round." msgstr "" -#: motions/views.py:125 -msgid "Unreleased the motion(s)." -msgstr "" +#: motions/views.py +#, python-format +msgid "Reused the motion from the previous round." +msgid_plural "Reused the %(count)d motions from the previous round." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: motions/views.py:149 +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: motions/views.py msgid "Round Motions" msgstr "" +#: motions/views.py +msgid "Motion Statistics" +msgstr "" + diff --git a/tabbycat/notifications/locale/ro/LC_MESSAGES/django.po b/tabbycat/notifications/locale/ro/LC_MESSAGES/django.po index 9f9951eec1c..6c0a84ed037 100644 --- a/tabbycat/notifications/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:33\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -15,349 +15,367 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/notifications/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" msgstr "" -#: notifications/consumers.py:37 -msgid "Failed to send e-mails." -msgstr "" - -#: notifications/consumers.py:40 -msgid "Connection error sending e-mails." -msgstr "" - -#: notifications/forms.py:11 +#: notifications/forms.py msgid "Recipient email address" msgstr "" -#: notifications/forms.py:15 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" msgstr "" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" msgstr "" -#: notifications/forms.py:29 +#: notifications/forms.py msgid "Subject" msgstr "" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Message" msgstr "" -#: notifications/models.py:12 notifications/models.py:27 +#: notifications/models.py msgid "email" msgstr "" -#: notifications/models.py:13 +#: notifications/models.py msgid "SMS" msgstr "" -#: notifications/models.py:22 +#: notifications/models.py msgid "recipient" msgstr "" -#: notifications/models.py:24 +#: notifications/models.py msgid "method" msgstr "" -#: notifications/models.py:29 notifications/models.py:130 +#: notifications/models.py msgid "context" msgstr "" -#: notifications/models.py:31 -msgid "message" -msgstr "" - -#: notifications/models.py:34 +#: notifications/models.py msgid "notification" msgstr "" -#: notifications/models.py:36 notifications/models.py:75 -#: notifications/models.py:126 +#: notifications/models.py msgid "timestamp" msgstr "" -#: notifications/models.py:39 +#: notifications/models.py msgid "sent message" msgstr "" -#: notifications/models.py:40 +#: notifications/models.py msgid "sent messages" msgstr "" -#: notifications/models.py:60 +#: notifications/models.py msgid "team points" msgstr "" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot confirmed" msgstr "" -#: notifications/models.py:62 +#: notifications/models.py msgid "feedback URL" msgstr "" -#: notifications/models.py:63 +#: notifications/models.py msgid "ballot URL" msgstr "" -#: notifications/models.py:64 +#: notifications/models.py msgid "landing page URL" msgstr "" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator draw released" msgstr "" -#: notifications/models.py:66 +#: notifications/models.py msgid "team registration" msgstr "" -#: notifications/models.py:67 +#: notifications/models.py msgid "adjudicator registration" msgstr "" -#: notifications/models.py:68 +#: notifications/models.py msgid "motion(s) released" msgstr "" -#: notifications/models.py:69 +#: notifications/models.py msgid "team draw released" msgstr "" -#: notifications/models.py:73 notifications/models.py:128 +#: notifications/models.py +msgid "custom message" +msgstr "" + +#: notifications/models.py msgid "event" msgstr "" -#: notifications/models.py:78 +#: notifications/models.py msgid "tournament" msgstr "" -#: notifications/models.py:80 +#: notifications/models.py msgid "round" msgstr "" -#: notifications/models.py:83 +#: notifications/models.py +msgid "subject template" +msgstr "" + +#: notifications/models.py +msgid "body template" +msgstr "" + +#: notifications/models.py msgid "bulk notification" msgstr "" -#: notifications/models.py:84 +#: notifications/models.py msgid "bulk notifications" msgstr "" -#: notifications/models.py:110 +#: notifications/models.py msgid "Processed" msgstr "" -#: notifications/models.py:111 +#: notifications/models.py msgid "Dropped" msgstr "" -#: notifications/models.py:112 +#: notifications/models.py msgid "Deferred" msgstr "" -#: notifications/models.py:113 +#: notifications/models.py msgid "Delivered" msgstr "" -#: notifications/models.py:114 +#: notifications/models.py msgid "Bounced" msgstr "" -#: notifications/models.py:115 +#: notifications/models.py msgid "Opened" msgstr "" -#: notifications/models.py:116 +#: notifications/models.py msgid "Clicked" msgstr "" -#: notifications/models.py:117 +#: notifications/models.py msgid "Unsubscribed" msgstr "" -#: notifications/models.py:118 +#: notifications/models.py msgid "Marked as spam" msgstr "" -#: notifications/models.py:119 +#: notifications/models.py msgid "Unsubscribed from group" msgstr "" -#: notifications/models.py:120 +#: notifications/models.py msgid "Resubscribed to group" msgstr "" -#: notifications/models.py:124 +#: notifications/models.py msgid "email message" msgstr "" -#: notifications/models.py:133 +#: notifications/models.py msgid "email status" msgstr "" -#: notifications/models.py:134 +#: notifications/models.py msgid "email statuses" msgstr "" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." msgstr "" -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." msgstr "" -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" msgstr "" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." msgstr "" -#: notifications/templates/notifications_nav.html:5 notifications/views.py:47 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" msgstr "" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:24 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" msgstr "" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" msgstr "" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" msgstr "" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." msgstr "" -#: notifications/templates/test_email.html:25 +#: notifications/templates/test_email.html +#, python-format +msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." +msgstr "" + +#: notifications/templates/test_email.html msgid "Go back to the site home page" msgstr "" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "the chair" msgstr "" -#: notifications/utils.py:30 +#: notifications/utils.py msgid "the only" msgstr "" -#: notifications/utils.py:31 +#: notifications/utils.py msgid "a panellist" msgstr "" -#: notifications/utils.py:32 +#: notifications/utils.py msgid "a trainee" msgstr "" -#: notifications/utils.py:55 +#: notifications/utils.py msgid "TBA" msgstr "" -#: notifications/utils.py:101 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "" -#: notifications/utils.py:112 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:116 +#: notifications/utils.py msgid "Win" msgstr "" -#: notifications/utils.py:116 +#: notifications/utils.py msgid "Loss" msgstr "" -#: notifications/utils.py:128 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " msgstr "" -#: notifications/utils.py:202 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " msgstr "" -#: notifications/utils.py:237 notifications/utils.py:238 +#: notifications/utils.py msgid ", " msgstr "" -#: notifications/views.py:39 +#: notifications/views.py +#, python-format +msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" +msgstr "" + +#: notifications/views.py +msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." +msgstr "" + +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" msgstr "" -#: notifications/views.py:42 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." msgstr "" -#: notifications/views.py:53 +#: notifications/views.py msgid "N/A" msgstr "" -#: notifications/views.py:54 +#: notifications/views.py msgid "Not known" msgstr "" -#: notifications/views.py:59 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" msgstr "" -#: notifications/views.py:102 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "" -#: notifications/views.py:119 +#: notifications/views.py msgid "Timeline" msgstr "" -#: notifications/views.py:129 notifications/views.py:220 +#: notifications/views.py msgid "Participant" msgstr "" -#: notifications/views.py:130 +#: notifications/views.py +msgid "Email address" +msgstr "" + +#: notifications/views.py msgid "Status" msgstr "" -#: notifications/views.py:131 +#: notifications/views.py msgid "Time" msgstr "" -#: notifications/views.py:170 +#: notifications/views.py msgid "Email Participants" msgstr "" -#: notifications/views.py:196 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." @@ -365,39 +383,35 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: notifications/views.py:202 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." msgstr "" -#: notifications/views.py:210 +#: notifications/views.py msgid "Send Email" msgstr "" -#: notifications/views.py:225 -msgid "Email Address" -msgstr "" - -#: notifications/views.py:226 +#: notifications/views.py msgid "Not Provided" msgstr "" -#: notifications/views.py:239 +#: notifications/views.py msgid "Role" msgstr "" -#: notifications/views.py:240 +#: notifications/views.py msgid "Adjudicator" msgstr "" -#: notifications/views.py:240 +#: notifications/views.py msgid "Speaker" msgstr "Vorbitor" -#: notifications/views.py:248 +#: notifications/views.py msgid "Speakers" msgstr "Vorbitori" -#: notifications/views.py:249 +#: notifications/views.py msgid "Adjudicators" msgstr "" diff --git a/tabbycat/options/locale/ro/LC_MESSAGES/django.po b/tabbycat/options/locale/ro/LC_MESSAGES/django.po index 16c74ad39a7..f58c142c2f6 100644 --- a/tabbycat/options/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:33\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -15,1438 +15,1603 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/options/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" msgstr "" -#: options/models.py:13 +#: options/models.py msgid "instance" msgstr "" -#: options/models.py:18 +#: options/models.py msgid "tournament preference" msgstr "" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" msgstr "" -#: options/preferences.py:18 options/templates/preferences_index.html:28 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" msgstr "" -#: options/preferences.py:24 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:27 +#: options/preferences.py msgid "Minimum speaker score" msgstr "" -#: options/preferences.py:33 +#: options/preferences.py msgid "Maximum speaker score" msgstr "" -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:42 +#: options/preferences.py msgid "Speaker score step" msgstr "" -#: options/preferences.py:43 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:51 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" msgstr "" -#: options/preferences.py:52 +#: options/preferences.py msgid "Maximum margin" msgstr "" -#: options/preferences.py:61 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" msgstr "" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum reply score" msgstr "" -#: options/preferences.py:70 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" msgstr "" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum reply score" msgstr "" -#: options/preferences.py:79 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:80 +#: options/preferences.py msgid "Reply score step" msgstr "" -#: options/preferences.py:88 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" msgstr "" -#: options/preferences.py:89 +#: options/preferences.py msgid "Margin includes dissenters" msgstr "" -#: options/preferences.py:96 options/templates/preferences_index.html:33 +#: options/preferences.py +msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" +msgstr "" + +#: options/preferences.py +msgid "Team score includes ghosts" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" msgstr "" -#: options/preferences.py:102 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" msgstr "" -#: options/preferences.py:103 +#: options/preferences.py msgid "Minimum adjudicator score to vote" msgstr "" -#: options/preferences.py:111 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" msgstr "" -#: options/preferences.py:112 +#: options/preferences.py msgid "Adjudicator conflict penalty" msgstr "" -#: options/preferences.py:120 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" msgstr "" -#: options/preferences.py:121 +#: options/preferences.py msgid "Adjudicator history penalty" msgstr "" -#: options/preferences.py:129 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" msgstr "" -#: options/preferences.py:130 +#: options/preferences.py msgid "Importance mismatch penalty" msgstr "" -#: options/preferences.py:138 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" msgstr "" -#: options/preferences.py:139 +#: options/preferences.py msgid "Team institution penalty" msgstr "" -#: options/preferences.py:147 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" msgstr "" -#: options/preferences.py:148 +#: options/preferences.py msgid "Team history penalty" msgstr "" -#: options/preferences.py:156 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" msgstr "" -#: options/preferences.py:157 +#: options/preferences.py msgid "Avoid same institution" msgstr "" -#: options/preferences.py:165 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" msgstr "" -#: options/preferences.py:166 +#: options/preferences.py msgid "Avoid team history" msgstr "" -#: options/preferences.py:174 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "" -#: options/preferences.py:175 +#: options/preferences.py msgid "Odd bracket resolution method" msgstr "" -#: options/preferences.py:179 +#: options/preferences.py msgid "Pull up from top" msgstr "" -#: options/preferences.py:180 +#: options/preferences.py msgid "Pull up from bottom" msgstr "" -#: options/preferences.py:181 +#: options/preferences.py msgid "Pull up from middle" msgstr "" -#: options/preferences.py:182 +#: options/preferences.py msgid "Pull up at random" msgstr "" -#: options/preferences.py:183 +#: options/preferences.py msgid "Intermediate brackets" msgstr "" -#: options/preferences.py:184 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" msgstr "" -#: options/preferences.py:185 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" msgstr "" -#: options/preferences.py:186 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" msgstr "" -#: options/preferences.py:193 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" msgstr "" -#: options/preferences.py:194 +#: options/preferences.py msgid "Side allocations method" msgstr "" -#: options/preferences.py:198 options/preferences.py:215 +#: options/preferences.py msgid "Random" msgstr "" -#: options/preferences.py:199 +#: options/preferences.py msgid "Balance" msgstr "" -#: options/preferences.py:200 +#: options/preferences.py msgid "Pre-allocated" msgstr "" -#: options/preferences.py:201 +#: options/preferences.py msgid "Manually enter from ballot" msgstr "" -#: options/preferences.py:208 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." msgstr "" -#: options/preferences.py:209 +#: options/preferences.py msgid "Pairing method" msgstr "" -#: options/preferences.py:213 +#: options/preferences.py msgid "Slide" msgstr "" -#: options/preferences.py:214 +#: options/preferences.py msgid "Fold" msgstr "" -#: options/preferences.py:216 +#: options/preferences.py msgid "Adjacent" msgstr "" -#: options/preferences.py:217 +#: options/preferences.py msgid "Fold top, adjacent rest" msgstr "" -#: options/preferences.py:224 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" msgstr "" -#: options/preferences.py:226 +#: options/preferences.py msgid "Conflict avoidance method" msgstr "" -#: options/preferences.py:230 +#: options/preferences.py msgid "Off" msgstr "" -#: options/preferences.py:231 +#: options/preferences.py msgid "One-up-one-down" msgstr "" -#: options/preferences.py:238 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "" -#: options/preferences.py:240 +#: options/preferences.py msgid "Pullup restriction" msgstr "" -#: options/preferences.py:244 +#: options/preferences.py msgid "No restriction" msgstr "" -#: options/preferences.py:245 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" msgstr "" -#: options/preferences.py:246 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" msgstr "" -#: options/preferences.py:247 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" msgstr "" -#: options/preferences.py:254 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." msgstr "" -#: options/preferences.py:255 +#: options/preferences.py msgid "BP pullup distribution" msgstr "" -#: options/preferences.py:259 +#: options/preferences.py msgid "Anywhere in bracket" msgstr "" -#: options/preferences.py:260 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" msgstr "" -#: options/preferences.py:267 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" msgstr "" -#: options/preferences.py:268 +#: options/preferences.py msgid "BP position cost" msgstr "" -#: options/preferences.py:272 +#: options/preferences.py msgid "Simple" msgstr "" -#: options/preferences.py:273 +#: options/preferences.py msgid "Rényi entropy" msgstr "" -#: options/preferences.py:274 +#: options/preferences.py msgid "Population variance" msgstr "" -#: options/preferences.py:281 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." msgstr "" -#: options/preferences.py:284 +#: options/preferences.py msgid "Rényi order (BP)" msgstr "" -#: options/preferences.py:293 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." msgstr "" -#: options/preferences.py:296 +#: options/preferences.py msgid "BP position cost exponent" msgstr "" -#: options/preferences.py:305 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." msgstr "" -#: options/preferences.py:307 +#: options/preferences.py msgid "BP assignment method" msgstr "" -#: options/preferences.py:311 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" msgstr "" -#: options/preferences.py:312 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" msgstr "" -#: options/preferences.py:319 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" msgstr "" -#: options/preferences.py:320 +#: options/preferences.py msgid "Skip adjudicator check-ins" msgstr "" -#: options/preferences.py:328 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:329 +#: options/preferences.py msgid "No panellist adjudicators" msgstr "" -#: options/preferences.py:337 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:338 +#: options/preferences.py msgid "No trainee adjudicators" msgstr "" -#: options/preferences.py:345 options/templates/preferences_index.html:48 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" msgstr "" -#: options/preferences.py:351 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:352 +#: options/preferences.py msgid "Minimum adjudicator score" msgstr "" -#: options/preferences.py:360 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:361 +#: options/preferences.py msgid "Maximum adjudicator score" msgstr "" -#: options/preferences.py:369 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" msgstr "" -#: options/preferences.py:370 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" msgstr "" -#: options/preferences.py:374 +#: options/preferences.py msgid "Chairs on panellists and trainees" msgstr "" -#: options/preferences.py:375 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" msgstr "" -#: options/preferences.py:376 +#: options/preferences.py +msgid "Panellists and trainees on chairs, vice-versa" +msgstr "" + +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" msgstr "" -#: options/preferences.py:383 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "" -#: options/preferences.py:384 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" msgstr "" -#: options/preferences.py:388 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" msgstr "" -#: options/preferences.py:389 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" msgstr "" -#: options/preferences.py:396 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" msgstr "" -#: options/preferences.py:397 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" msgstr "" -#: options/preferences.py:405 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" msgstr "" -#: options/preferences.py:406 +#: options/preferences.py msgid "Show unaccredited" msgstr "" -#: options/preferences.py:414 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" msgstr "" -#: options/preferences.py:415 +#: options/preferences.py msgid "Feedback introduction/explanation" msgstr "" -#: options/preferences.py:423 options/templates/preferences_index.html:38 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" msgstr "" -#: options/preferences.py:429 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" msgstr "" -#: options/preferences.py:430 +#: options/preferences.py msgid "Teams in debate" msgstr "" -#: options/preferences.py:434 +#: options/preferences.py msgid "Two-team format" msgstr "" -#: options/preferences.py:435 +#: options/preferences.py msgid "British Parliamentary (four teams)" msgstr "" -#: options/preferences.py:442 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:443 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" msgstr "" -#: options/preferences.py:447 options/preferences.py:460 +#: options/preferences.py msgid "One ballot per voting adjudicator" msgstr "" -#: options/preferences.py:448 options/preferences.py:461 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" msgstr "" -#: options/preferences.py:455 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:456 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" msgstr "" -#: options/preferences.py:468 +#: options/preferences.py +msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." +msgstr "" + +#: options/preferences.py +msgid "Winner Declaration in ballot(s)" +msgstr "" + +#: options/preferences.py +msgid "Do not require separate winner selection" +msgstr "" + +#: options/preferences.py +msgid "Require separate winner selection as a check on correct scores" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection to break tied-point debates" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection, overriding scores" +msgstr "" + +#: options/preferences.py +msgid "When ballots should ask for speaker scores." +msgstr "" + +#: options/preferences.py +msgid "Require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Always require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Only require speaker scores in preliminary rounds" +msgstr "" + +#: options/preferences.py +msgid "Never require speaker scores" +msgstr "" + +#: options/preferences.py msgid "How many substantive speakers on a team" msgstr "" -#: options/preferences.py:469 +#: options/preferences.py msgid "Substantive speakers" msgstr "" -#: options/preferences.py:477 +#: options/preferences.py msgid "What to call the teams" msgstr "" -#: options/preferences.py:478 +#: options/preferences.py msgid "Side names" msgstr "" -#: options/preferences.py:487 +#: options/preferences.py msgid "Whether this style features scored reply speeches" msgstr "" -#: options/preferences.py:488 +#: options/preferences.py msgid "Reply scores" msgstr "" -#: options/preferences.py:496 -msgid "Enables the motion veto field on ballots, to track veto statistics" +#: options/preferences.py +msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" msgstr "" -#: options/preferences.py:497 -msgid "Motion vetoes" +#: options/preferences.py +msgid "Require reply speaker to have given a substantive speech" msgstr "" -#: options/preferences.py:504 options/templates/preferences_index.html:43 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "" -#: options/preferences.py:510 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" msgstr "" -#: options/preferences.py:511 +#: options/preferences.py msgid "Speeches missable for standings eligibility" msgstr "" -#: options/preferences.py:519 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" msgstr "" -#: options/preferences.py:520 +#: options/preferences.py msgid "Replies missable for standings eligibility" msgstr "" -#: options/preferences.py:528 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" msgstr "" -#: options/preferences.py:529 +#: options/preferences.py msgid "Team standings precedence" msgstr "" -#: options/preferences.py:545 options/preferences.py:580 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" msgstr "" -#: options/preferences.py:551 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" msgstr "" -#: options/preferences.py:552 +#: options/preferences.py msgid "Team standings extra metrics" msgstr "" -#: options/preferences.py:563 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" msgstr "" -#: options/preferences.py:564 +#: options/preferences.py msgid "Speaker standings precedence" msgstr "" -#: options/preferences.py:586 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" msgstr "" -#: options/preferences.py:587 +#: options/preferences.py msgid "Speaker standings extra metrics" msgstr "" -#: options/preferences.py:597 options/templates/preferences_index.html:59 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" msgstr "" -#: options/preferences.py:603 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:604 +#: options/preferences.py msgid "Release team tab to public" msgstr "" -#: options/preferences.py:612 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." msgstr "" -#: options/preferences.py:613 +#: options/preferences.py msgid "Top teams cutoff" msgstr "" -#: options/preferences.py:621 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:622 +#: options/preferences.py msgid "Release speaker tab to public" msgstr "" -#: options/preferences.py:630 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." msgstr "" -#: options/preferences.py:631 +#: options/preferences.py msgid "Top speakers cutoff" msgstr "" -#: options/preferences.py:639 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:640 +#: options/preferences.py msgid "Release replies tab to public" msgstr "" -#: options/preferences.py:648 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." msgstr "" -#: options/preferences.py:649 +#: options/preferences.py msgid "Top replies cutoff" msgstr "" -#: options/preferences.py:675 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." msgstr "" -#: options/preferences.py:678 +#: options/preferences.py msgid "Release motions tab to public" msgstr "" -#: options/preferences.py:686 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" msgstr "" -#: options/preferences.py:687 +#: options/preferences.py msgid "Release adjudicator tab to public" msgstr "" -#: options/preferences.py:695 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" msgstr "" -#: options/preferences.py:696 +#: options/preferences.py msgid "Adjudicator tab displays" msgstr "" -#: options/preferences.py:700 +#: options/preferences.py msgid "Only shows base score" msgstr "" -#: options/preferences.py:701 +#: options/preferences.py msgid "Only shows final score" msgstr "" -#: options/preferences.py:702 +#: options/preferences.py msgid "Shows base, final, and per-round scores" msgstr "" -#: options/preferences.py:709 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." msgstr "" -#: options/preferences.py:710 +#: options/preferences.py msgid "Release ballots to public" msgstr "" -#: options/preferences.py:718 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" msgstr "" -#: options/preferences.py:719 +#: options/preferences.py msgid "Release all round results to public" msgstr "" -#: options/preferences.py:726 options/templates/preferences_index.html:64 +#: options/preferences.py +msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release ballots through private URLs" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" msgstr "" -#: options/preferences.py:732 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" msgstr "" -#: options/preferences.py:733 +#: options/preferences.py msgid "Ballot submissions from adjudicators" msgstr "" -#: options/preferences.py:737 options/preferences.py:751 +#: options/preferences.py msgid "Disabled (tab staff only)" msgstr "" -#: options/preferences.py:738 options/preferences.py:752 +#: options/preferences.py msgid "Use private URLs" msgstr "" -#: options/preferences.py:739 options/preferences.py:753 +#: options/preferences.py msgid "Use publicly accessible form" msgstr "" -#: options/preferences.py:746 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" msgstr "" -#: options/preferences.py:747 +#: options/preferences.py msgid "Feedback submissions from participants" msgstr "" -#: options/preferences.py:760 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" msgstr "" -#: options/preferences.py:761 +#: options/preferences.py msgid "Require password for submission" msgstr "" -#: options/preferences.py:769 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" msgstr "" -#: options/preferences.py:770 +#: options/preferences.py msgid "Password for public submission" msgstr "" -#: options/preferences.py:778 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" msgstr "" -#: options/preferences.py:779 +#: options/preferences.py msgid "Bypass double checking" msgstr "" -#: options/preferences.py:787 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." msgstr "" -#: options/preferences.py:788 +#: options/preferences.py msgid "Enforce blind confirmations" msgstr "" -#: options/preferences.py:796 -msgid "If checked, ballots require a motion to be selected from a list of options. " -msgstr "" - -#: options/preferences.py:797 -msgid "Enable motion selection" -msgstr "" - -#: options/preferences.py:805 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." msgstr "" -#: options/preferences.py:808 +#: options/preferences.py msgid "Assistant user access" msgstr "" -#: options/preferences.py:813 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" msgstr "" -#: options/preferences.py:814 +#: options/preferences.py msgid "Just results entry and draw display" msgstr "" -#: options/preferences.py:815 +#: options/preferences.py msgid "Only results entry" msgstr "" -#: options/preferences.py:821 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." msgstr "" -#: options/preferences.py:822 +#: options/preferences.py msgid "Participant self-checkin" msgstr "" -#: options/preferences.py:830 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" msgstr "" -#: options/preferences.py:833 +#: options/preferences.py msgid "Check-In Window (People)" msgstr "" -#: options/preferences.py:839 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" msgstr "" -#: options/preferences.py:842 +#: options/preferences.py msgid "Check-In Window (Rooms)" msgstr "" -#: options/preferences.py:848 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" msgstr "" -#: options/preferences.py:849 +#: options/preferences.py msgid "Ballot Digit Checks" msgstr "" -#: options/preferences.py:857 -msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" -msgstr "" - -#: options/preferences.py:858 -msgid "Ballot Hide Motions" -msgstr "" - -#: options/preferences.py:866 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:867 +#: options/preferences.py msgid "Score return location" msgstr "" -#: options/preferences.py:875 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:876 +#: options/preferences.py msgid "Feedback return location" msgstr "" -#: options/preferences.py:883 options/templates/preferences_index.html:69 +#: options/preferences.py +msgid "Lets debates have their status as postponed, as to not block draw generation." +msgstr "" + +#: options/preferences.py +msgid "Enable postponements" +msgstr "" + +#: options/preferences.py +msgid "Have each voting adjudicator submit a separate ballot." +msgstr "" + +#: options/preferences.py +msgid "Individual voting ballots" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" msgstr "" -#: options/preferences.py:889 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" msgstr "" -#: options/preferences.py:890 +#: options/preferences.py msgid "Enable public view of participants list" msgstr "" -#: options/preferences.py:898 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" msgstr "" -#: options/preferences.py:899 +#: options/preferences.py msgid "Enable public view of institutions list" msgstr "" -#: options/preferences.py:907 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" msgstr "" -#: options/preferences.py:908 +#: options/preferences.py msgid "Enable public view of diversity info" msgstr "" -#: options/preferences.py:916 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." msgstr "" -#: options/preferences.py:919 +#: options/preferences.py msgid "Enable public view of the checkin statuses" msgstr "" -#: options/preferences.py:927 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" msgstr "" -#: options/preferences.py:928 +#: options/preferences.py msgid "Show break categories on participants page" msgstr "" -#: options/preferences.py:936 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" msgstr "" -#: options/preferences.py:937 +#: options/preferences.py msgid "Show pre-allocated sides to public" msgstr "" -#: options/preferences.py:945 +#: options/preferences.py msgid "Enables the public page showing released draws" msgstr "" -#: options/preferences.py:946 +#: options/preferences.py msgid "Enable public view of draw" msgstr "" -#: options/preferences.py:950 +#: options/preferences.py msgid "Disabled" msgstr "" -#: options/preferences.py:951 +#: options/preferences.py msgid "Show a single page for the current round's draw" msgstr "" -#: options/preferences.py:952 +#: options/preferences.py msgid "Show individual pages for all released draws" msgstr "" -#: options/preferences.py:959 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" msgstr "" -#: options/preferences.py:960 +#: options/preferences.py msgid "Enable public view of results" msgstr "" -#: options/preferences.py:968 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" msgstr "" -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of motions" msgstr "" -#: options/preferences.py:977 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" msgstr "" -#: options/preferences.py:978 +#: options/preferences.py msgid "Enable public view of team standings" msgstr "" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" msgstr "" -#: options/preferences.py:987 +#: options/preferences.py msgid "Enable public record pages" msgstr "" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:996 +#: options/preferences.py msgid "Release team breaks to public" msgstr "" -#: options/preferences.py:1004 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1005 +#: options/preferences.py msgid "Release adjudicators break to public" msgstr "" -#: options/preferences.py:1013 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" msgstr "" -#: options/preferences.py:1014 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" msgstr "" -#: options/preferences.py:1022 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." msgstr "" -#: options/preferences.py:1023 +#: options/preferences.py msgid "Tournament staff" msgstr "" -#: options/preferences.py:1033 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" msgstr "" -#: options/preferences.py:1034 +#: options/preferences.py msgid "Welcome message" msgstr "" -#: options/preferences.py:1043 options/templates/preferences_index.html:74 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" msgstr "" -#: options/preferences.py:1049 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" msgstr "" -#: options/preferences.py:1050 +#: options/preferences.py msgid "Show splitting adjudicators" msgstr "" -#: options/preferences.py:1058 -msgid "If showing results to public, show which motions were selected in the record" -msgstr "" - -#: options/preferences.py:1059 -msgid "Show motions in results" -msgstr "" - -#: options/preferences.py:1067 +#: options/preferences.py msgid "Whether and how to use code names for teams" msgstr "" -#: options/preferences.py:1068 +#: options/preferences.py msgid "Team code names" msgstr "" -#: options/preferences.py:1073 +#: options/preferences.py msgid "Do not use code names" msgstr "" -#: options/preferences.py:1074 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" msgstr "" -#: options/preferences.py:1075 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" msgstr "" -#: options/preferences.py:1077 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" msgstr "" -#: options/preferences.py:1079 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" msgstr "" -#: options/preferences.py:1085 +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" msgstr "" -#: options/preferences.py:1086 +#: options/preferences.py msgid "Show emoji" msgstr "" -#: options/preferences.py:1094 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" msgstr "" -#: options/preferences.py:1095 +#: options/preferences.py msgid "Show team institutions" msgstr "" -#: options/preferences.py:1103 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" msgstr "" -#: options/preferences.py:1104 +#: options/preferences.py msgid "Show adjudicator institutions" msgstr "" -#: options/preferences.py:1112 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" msgstr "" -#: options/preferences.py:1113 +#: options/preferences.py msgid "Show speakers in draw" msgstr "" -#: options/preferences.py:1121 -msgid "Order in which are listed by round in the public view" -msgstr "" - -#: options/preferences.py:1122 -msgid "Order to display motions" -msgstr "" - -#: options/preferences.py:1126 -msgid "Earliest round first" -msgstr "" - -#: options/preferences.py:1127 -msgid "Latest round first" -msgstr "" - -#: options/preferences.py:1133 options/templates/preferences_index.html:79 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" msgstr "" -#: options/preferences.py:1139 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "" -#: options/preferences.py:1140 +#: options/preferences.py msgid "Reply-to name" msgstr "" -#: options/preferences.py:1148 +#: options/preferences.py msgid "The email address for handling replies" msgstr "" -#: options/preferences.py:1149 +#: options/preferences.py msgid "Reply-to address" msgstr "" -#: options/preferences.py:1157 +#: options/preferences.py msgid "A secret key to accept email status events" msgstr "" -#: options/preferences.py:1158 +#: options/preferences.py msgid "Email status secret key" msgstr "" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "" -#: options/preferences.py:1169 +#: options/preferences.py msgid "Ballot receipts" msgstr "" -#: options/preferences.py:1177 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "" -#: options/preferences.py:1179 +#: options/preferences.py msgid "Ballot receipt subject line" msgstr "" -#: options/preferences.py:1187 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "" -#: options/preferences.py:1188 +#: options/preferences.py msgid "Ballot receipt message" msgstr "" -#: options/preferences.py:1204 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1205 +#: options/preferences.py msgid "Team points subject line" msgstr "" -#: options/preferences.py:1212 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1213 +#: options/preferences.py msgid "Team points message" msgstr "" -#: options/preferences.py:1222 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1223 +#: options/preferences.py msgid "Adjudicator draw subject line" msgstr "" -#: options/preferences.py:1230 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1231 +#: options/preferences.py msgid "Adjudicator draw message" msgstr "" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." msgstr "" -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team draw subject line" msgstr "" -#: options/preferences.py:1248 options/preferences.py:1266 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1249 options/preferences.py:1267 +#: options/preferences.py msgid "Private URL notification message" msgstr "" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1259 +#: options/preferences.py msgid "Private URL notification subject line" msgstr "" -#: options/preferences.py:1280 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1281 +#: options/preferences.py msgid "Motion release notification subject line" msgstr "" -#: options/preferences.py:1288 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1289 +#: options/preferences.py msgid "Motion release notification message" msgstr "" -#: options/preferences.py:1297 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1298 +#: options/preferences.py msgid "Team registration notification subject line" msgstr "" -#: options/preferences.py:1305 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1306 +#: options/preferences.py msgid "Team registration notification message" msgstr "" -#: options/presets.py:32 options/presets.py:351 +#: options/preferences.py options/templates/preferences_index.html +msgid "Motions" +msgstr "Moțiuni" + +#: options/preferences.py +msgid "If checked, ballots require a motion to be entered" +msgstr "" + +#: options/preferences.py +msgid "Enable motions" +msgstr "" + +#: options/preferences.py +msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" +msgstr "" + +#: options/preferences.py +msgid "Ballot Hide Motions" +msgstr "" + +#: options/preferences.py +msgid "Enables the motion veto field on ballots, to track veto statistics" +msgstr "" + +#: options/preferences.py +msgid "Motion vetoes" +msgstr "" + +#: options/preferences.py +msgid "If showing results to public, show which motions were selected in the record" +msgstr "" + +#: options/preferences.py +msgid "Show motions in results" +msgstr "" + +#: options/preferences.py +msgid "Order in which are listed by round in the public view" +msgstr "" + +#: options/preferences.py +msgid "Order to display motions" +msgstr "" + +#: options/preferences.py +msgid "Earliest round first" +msgstr "" + +#: options/preferences.py +msgid "Latest round first" +msgstr "" + +#: options/preferences.py +msgid "Whether motions can be reused from one round to another." +msgstr "" + +#: options/preferences.py +msgid "Allow motion reuse" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Global Settings" +msgstr "" + +#: options/preferences.py +msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." +msgstr "" + +#: options/preferences.py +msgid "Enable API access" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Assistant account creation key" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Administrator account creation key" +msgstr "" + +#: options/presets.py msgid "Public Information Options" msgstr "" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" msgstr "" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" msgstr "" -#: options/presets.py:67 +#: options/presets.py msgid "Australs Rules" msgstr "" -#: options/presets.py:68 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:107 +#: options/presets.py msgid "British Parliamentary Rules" msgstr "" -#: options/presets.py:108 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." msgstr "" -#: options/presets.py:148 +#: options/presets.py msgid "Canadian Parliamentary Rules" msgstr "" -#: options/presets.py:150 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." msgstr "" -#: options/presets.py:173 +#: options/presets.py msgid "Australian Easters Rules" msgstr "" -#: options/presets.py:175 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:193 +#: options/presets.py msgid "2 vs 2 Impromptu" msgstr "" -#: options/presets.py:195 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." msgstr "" -#: options/presets.py:220 +#: options/presets.py msgid "3 vs 3 Prepared" msgstr "" -#: options/presets.py:222 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." msgstr "" -#: options/presets.py:249 +#: options/presets.py msgid "UADC Rules" msgstr "" -#: options/presets.py:251 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:287 +#: options/presets.py msgid "WSDC Rules" msgstr "" -#: options/presets.py:289 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:353 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "" -#: options/presets.py:365 +#: options/presets.py msgid "Tab Release Options" msgstr "" -#: options/presets.py:367 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" msgstr "" -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html msgid "Configuration" msgstr "" -#: options/templates/preferences_index.html:10 +#: options/templates/preferences_index.html +#, python-format +msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." +msgstr "" + +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." msgstr "" -#: options/templates/preferences_index.html:29 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" msgstr "" -#: options/templates/preferences_index.html:34 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" msgstr "" -#: options/templates/preferences_index.html:39 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" msgstr "" -#: options/templates/preferences_index.html:44 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" msgstr "" -#: options/templates/preferences_index.html:49 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" msgstr "" -#: options/templates/preferences_index.html:60 +#: options/templates/preferences_index.html +msgid "How and where are motions used" +msgstr "" + +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" msgstr "" -#: options/templates/preferences_index.html:65 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" msgstr "" -#: options/templates/preferences_index.html:70 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" msgstr "" -#: options/templates/preferences_index.html:75 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" msgstr "" -#: options/templates/preferences_index.html:80 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" msgstr "" -#: options/templates/preferences_index.html:92 +#: options/templates/preferences_index.html +msgid "Settings which can affect all tournaments on the site" +msgstr "" + +#: options/templates/preferences_index.html msgid "Manually Set Current Round" msgstr "" -#: options/templates/preferences_index.html:93 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." msgstr "" -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Rounds can be weighted so that certain rounds are worth more team points." +msgstr "" + +#: options/templates/preferences_index.html msgid "Presets" msgstr "" -#: options/templates/preferences_index.html:101 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." msgstr "" -#: options/templates/preferences_index.html:112 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" msgstr "" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" msgstr "" -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" msgstr "" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" msgstr "" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" msgstr "" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" msgstr "" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" msgstr "" -#: options/views.py:43 -msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules settings and change your configuration to use consensus ballots." -msgstr "" - -#: options/views.py:63 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." msgstr "" -#: options/views.py:113 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." msgstr "" diff --git a/tabbycat/participants/locale/ro/LC_MESSAGES/django.po b/tabbycat/participants/locale/ro/LC_MESSAGES/django.po index 5615a043392..14824987d47 100644 --- a/tabbycat/participants/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:32\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -15,13 +15,23 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/participants/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 942\n" -#: participants/admin.py:94 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" msgstr "" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." @@ -29,11 +39,31 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: participants/admin.py:152 participants/admin.py:211 -msgid "Delete URL key" +#: participants/admin.py +msgid "Reset emoji" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d team had their emoji reset." +msgid_plural "%(count)d teams had their emojis reset." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: participants/admin.py +msgid "Reset code name" msgstr "" -#: participants/admin.py:206 +#: participants/admin.py +#, python-format +msgid "%(count)d team had their code name reset." +msgid_plural "%(count)d teams had their code names reset." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." @@ -41,646 +71,708 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: participants/apps.py:7 participants/views.py:40 +#: participants/apps.py participants/views.py msgid "Participants" msgstr "" -#: participants/models.py:20 participants/models.py:36 -#: participants/models.py:65 participants/models.py:95 +#: participants/models.py msgid "name" msgstr "" -#: participants/models.py:23 participants/models.py:44 +#: participants/models.py msgid "region" msgstr "" -#: participants/models.py:24 +#: participants/models.py msgid "regions" msgstr "" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:38 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" msgstr "" -#: participants/models.py:40 +#: participants/models.py msgid "code" msgstr "" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:42 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" msgstr "" -#: participants/models.py:54 participants/models.py:154 -#: participants/models.py:340 +#: participants/models.py msgid "institution" msgstr "" -#: participants/models.py:55 +#: participants/models.py msgid "institutions" msgstr "" -#: participants/models.py:63 participants/models.py:156 -#: participants/models.py:343 +#: participants/models.py msgid "tournament" msgstr "" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:67 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" msgstr "" -#: participants/models.py:69 +#: participants/models.py msgid "slug" msgstr "" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:71 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" msgstr "" -#: participants/models.py:73 +#: participants/models.py msgid "sequence number" msgstr "" -#: participants/models.py:74 +#: participants/models.py msgid "The order in which the categories are displayed" msgstr "" -#: participants/models.py:76 +#: participants/models.py msgid "limit" msgstr "" -#: participants/models.py:77 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: participants/models.py:79 +#: participants/models.py msgid "public" msgstr "" -#: participants/models.py:80 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" msgstr "" -#: participants/models.py:86 +#: participants/models.py msgid "speaker category" msgstr "" -#: participants/models.py:87 participants/models.py:321 +#: participants/models.py msgid "speaker categories" msgstr "" -#: participants/models.py:97 -msgid "e-mail address" +#: participants/models.py +msgid "email address" msgstr "" -#: participants/models.py:99 +#: participants/models.py msgid "phone" msgstr "" -#: participants/models.py:101 +#: participants/models.py msgid "anonymous" msgstr "" -#: participants/models.py:102 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" msgstr "" -#: participants/models.py:105 +#: participants/models.py +msgid "code name" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py msgid "URL key" msgstr "" -#: participants/models.py:110 +#: participants/models.py msgid "male" msgstr "" -#: participants/models.py:111 +#: participants/models.py msgid "female" msgstr "" -#: participants/models.py:112 +#: participants/models.py msgid "other" msgstr "" -#: participants/models.py:114 +#: participants/models.py msgid "gender" msgstr "" -#: participants/models.py:115 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" msgstr "" -#: participants/models.py:117 +#: participants/models.py msgid "pronoun" msgstr "" -#: participants/models.py:118 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" msgstr "" -#: participants/models.py:121 +#: participants/models.py msgid "person" msgstr "" -#: participants/models.py:122 +#: participants/models.py msgid "persons" msgstr "" -#: participants/models.py:137 +#: participants/models.py msgid "full name/suffix" msgstr "" -#: participants/models.py:138 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:140 +#: participants/models.py msgid "short name/suffix" msgstr "" -#: participants/models.py:141 -msgid "The name shown in the draw. Do not include institution name (see \"uses institutional prefix\" below)" +#: participants/models.py +msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:143 -msgid "code name" -msgstr "" - -#: participants/models.py:144 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" msgstr "" -#: participants/models.py:147 +#: participants/models.py msgid "short name" msgstr "" -#: participants/models.py:148 -msgid "The name shown in the draw, including institution name. (This is autogenerated.)" +#: participants/models.py +msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:150 +#: participants/models.py msgid "long name" msgstr "" -#: participants/models.py:151 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:158 +#: participants/models.py msgid "Uses institutional prefix" msgstr "" -#: participants/models.py:159 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" msgstr "" -#: participants/models.py:161 +#: participants/models.py msgid "break categories" msgstr "" -#: participants/models.py:172 +#: participants/models.py +msgid "institution conflicts" +msgstr "" + +#: participants/models.py msgid "none" msgstr "" -#: participants/models.py:173 +#: participants/models.py msgid "swing" msgstr "" -#: participants/models.py:174 +#: participants/models.py msgid "composite" msgstr "" -#: participants/models.py:175 +#: participants/models.py msgid "bye" msgstr "" -#: participants/models.py:178 +#: participants/models.py msgid "type" msgstr "" -#: participants/models.py:182 +#: participants/models.py msgid "emoji" msgstr "" -#: participants/models.py:196 participants/models.py:319 +#: participants/models.py msgid "team" msgstr "" -#: participants/models.py:197 +#: participants/models.py msgid "teams" msgstr "" -#: participants/models.py:302 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." msgstr "" -#: participants/models.py:304 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:306 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." msgstr "" -#: participants/models.py:324 +#: participants/models.py msgid "speaker" msgstr "vorbitor" -#: participants/models.py:325 +#: participants/models.py msgid "speakers" msgstr "vorbitori" -#: participants/models.py:344 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" msgstr "" -#: participants/models.py:346 +#: participants/models.py msgid "base score" msgstr "" -#: participants/models.py:352 -msgid "institution conflicts" +#: participants/models.py +msgid "team conflicts" msgstr "" -#: participants/models.py:356 -msgid "team conflicts" +#: participants/models.py +msgid "adjudicator conflicts" msgstr "" -#: participants/models.py:359 +#: participants/models.py msgid "always trainee" msgstr "" -#: participants/models.py:360 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" msgstr "" -#: participants/models.py:362 +#: participants/models.py msgid "breaking" msgstr "" -#: participants/models.py:364 +#: participants/models.py msgid "independent" msgstr "" -#: participants/models.py:366 +#: participants/models.py msgid "adjudication core" msgstr "" -#: participants/models.py:375 +#: participants/models.py msgid "adjudicator" msgstr "" -#: participants/models.py:376 +#: participants/models.py msgid "adjudicators" msgstr "" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" msgstr "" -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" msgstr "" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" msgstr "" -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" msgstr "" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" msgstr "" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" msgstr "" -#: participants/templates/adjudicator_registration_card.html:26 -#: participants/templates/team_registration_card.html:57 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:30 -#: participants/templates/team_registration_card.html:61 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" msgstr "" -#: participants/templates/adjudicator_registration_card.html:34 -#: participants/templates/team_registration_card.html:65 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:40 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." msgstr "" -#: participants/templates/adjudicator_registration_card.html:47 -#: participants/templates/team_registration_card.html:74 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:49 -#: participants/templates/team_registration_card.html:76 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr "" -#: participants/templates/adjudicator_registration_card.html:51 -#: participants/templates/adjudicator_registration_card.html:58 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:79 -#: participants/templates/team_registration_card.html:30 -#: participants/templates/team_registration_card.html:41 -#: participants/templates/team_registration_card.html:49 -#: participants/templates/team_registration_card.html:78 -#: participants/templates/team_registration_card.html:85 -#: participants/templates/team_registration_card.html:95 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" msgstr "" -#: participants/templates/adjudicator_registration_card.html:54 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:56 -#: participants/templates/adjudicator_registration_card.html:64 -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/adjudicator_registration_card.html:77 -#: participants/templates/team_registration_card.html:28 -#: participants/templates/team_registration_card.html:39 -#: participants/templates/team_registration_card.html:47 -#: participants/templates/team_registration_card.html:83 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr "" -#: participants/templates/adjudicator_registration_card.html:61 -#: participants/templates/team_registration_card.html:81 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:75 -#: participants/templates/team_registration_card.html:91 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" msgstr "" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:13 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format -msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete these %(objects_name)s." +msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." msgstr "" #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:20 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:32 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:40 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:46 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "" -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" msgstr "" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "" -#: participants/templates/current_round/common.html:30 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: participants/templates/current_round/common.html:39 -#: participants/templates/current_round/common.html:41 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" msgstr "" -#: participants/templates/current_round/common.html:39 -#: participants/templates/current_round/common.html:41 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" msgstr "" -#: participants/templates/current_round/common.html:46 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." msgstr "" -#: participants/templates/current_round/common.html:56 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." msgstr "" -#: participants/templates/current_round/common.html:59 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "" -#: participants/templates/current_round/common.html:63 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "" -#: participants/templates/current_round/common.html:71 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." msgstr "" -#: participants/templates/current_round/round_adj.html:13 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:17 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:23 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:27 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:33 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:37 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:48 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:52 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating as the %(side)s team against %(opponent)s in %(room)s." +msgid "%(team)s is debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating as the %(side)s team against %(opponent)s in %(room)s." +msgid "You are debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating against %(opponent)s in %(room)s." +msgid "%(team)s is debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating against %(opponent)s in %(room)s." +msgid "You are debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:37 +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating as the %(side)s team in %(room)s." +msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:41 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating as the %(side)s team in %(room)s." +msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:47 +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating in %(room)s." +msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:51 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating in %(room)s." +msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." msgstr "" -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" msgstr "" -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" msgstr "" -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:39 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" msgstr "" -#: participants/templates/feedback_progress_panel.html:48 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" msgstr "" -#: participants/templates/feedback_progress_panel.html:55 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." msgstr "" -#: participants/templates/in_this_round.html:8 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" msgstr "" -#: participants/templates/in_this_round.html:12 +#: participants/templates/in_this_round.html +msgid "In This Round" +msgstr "" + +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" msgstr "" -#: participants/templates/in_this_round.html:19 +#: participants/templates/in_this_round.html msgid "Room TBA" msgstr "" -#: participants/templates/in_this_round.html:31 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:50 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." @@ -688,165 +780,180 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: participants/templates/in_this_round.html:56 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." msgstr "" -#: participants/templates/in_this_round.html:71 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:87 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." msgstr "" -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" msgstr "" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" msgstr "" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." msgstr "" -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" msgstr "" -#: participants/templates/participants_subnav.html:26 participants/views.py:134 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" msgstr "" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" msgstr "" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" msgstr "" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." msgstr "" -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." msgstr "" -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" msgstr "" -#: participants/templates/team_registration_card.html:14 +#: participants/templates/team_registration_card.html msgid "Team name:" msgstr "" -#: participants/templates/team_registration_card.html:14 -msgid "Full name:" +#: participants/templates/team_registration_card.html +msgid "Full team name:" msgstr "" -#: participants/templates/team_registration_card.html:18 +#: participants/templates/team_registration_card.html +msgid "Short team name:" +msgstr "" + +#: participants/templates/team_registration_card.html msgid "Code name:" msgstr "" -#: participants/templates/team_registration_card.html:26 +#: participants/templates/team_registration_card.html +msgid "No code name assigned" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Emoji:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "No emoji assigned" +msgstr "" + +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "Vorbitori:" -#: participants/templates/team_registration_card.html:37 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" msgstr "" -#: participants/templates/team_registration_card.html:45 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" msgstr "" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" msgstr "" -#: participants/views.py:45 +#: participants/views.py msgid "Adjudicators" msgstr "" -#: participants/views.py:54 +#: participants/views.py msgid "Speakers" msgstr "Vorbitori" -#: participants/views.py:85 +#: participants/views.py msgid "Institutions" msgstr "" -#: participants/views.py:101 +#: participants/views.py msgid "Code" msgstr "" -#: participants/views.py:102 +#: participants/views.py msgid "Full name" msgstr "" -#: participants/views.py:104 +#: participants/views.py msgid "Region" msgstr "" -#: participants/views.py:106 +#: participants/views.py msgid "Teams" msgstr "" -#: participants/views.py:106 +#: participants/views.py msgid "Number of teams" msgstr "" -#: participants/views.py:108 +#: participants/views.py msgid "Adjs" msgstr "" -#: participants/views.py:109 +#: participants/views.py msgid "Number of adjudicators, excluding independents" msgstr "" -#: participants/views.py:111 +#: participants/views.py msgid "IAs" msgstr "" -#: participants/views.py:112 +#: participants/views.py msgid "Number of independent adjudicators" msgstr "" -#: participants/views.py:142 +#: participants/views.py msgid "Code name" msgstr "" -#: participants/views.py:162 +#: participants/views.py msgid "Team Registration" msgstr "" -#: participants/views.py:208 +#: participants/views.py msgid "Results" msgstr "" -#: participants/views.py:213 participants/views.py:247 +#: participants/views.py #, python-format msgid "Record for %(name)s" msgstr "" -#: participants/views.py:244 +#: participants/views.py msgid "Previous Rounds" msgstr "" -#: participants/views.py:333 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" @@ -854,11 +961,11 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: participants/views.py:339 +#: participants/views.py msgid "No changes were made to the categories." msgstr "" -#: participants/views.py:352 +#: participants/views.py msgid "Speaker Category Eligibility" msgstr "" diff --git a/tabbycat/printing/locale/ro/LC_MESSAGES/django.po b/tabbycat/printing/locale/ro/LC_MESSAGES/django.po index 62a37b27ab0..9ad780c06d0 100644 --- a/tabbycat/printing/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:36\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -15,115 +15,111 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/printing/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" msgstr "" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" msgstr "" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." msgstr "" -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." msgstr "" -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." msgstr "" -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" msgstr "" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" msgstr "" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" msgstr "" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" msgstr "" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" msgstr "" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" msgstr "" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" msgstr "" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" msgstr "" -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" msgstr "" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "" -#: printing/templates/scoresheet_list.html:47 -msgid "\n" -" Editing motions here will not save them permanently — it will only\n" -" update the text used in the printed ballots below. This can be useful if using\n" -" placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print\n" -" ballots with correct motions.\n" -" " +#: printing/templates/scoresheet_list.html +msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." msgstr "" -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" msgstr "" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." msgstr "" -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" msgstr "" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" msgstr "" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "" diff --git a/tabbycat/privateurls/locale/ro/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/ro/LC_MESSAGES/django.po index 9cac3da0dbb..f79cd0910d9 100644 --- a/tabbycat/privateurls/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:36\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -15,148 +15,147 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/privateurls/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" msgstr "" -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:144 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" msgstr "" -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." msgstr "" -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" msgstr "" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." msgstr "" -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." msgstr "" -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." msgstr "" -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." msgstr "" -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." msgstr "" -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." msgstr "" -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" msgstr "" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" msgstr "" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" msgstr "" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." msgstr "" -#: privateurls/templates/public_url_landing.html:61 -msgid "Submit Ballot" +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Submit Ballot for %(round)s" msgstr "" -#: privateurls/templates/public_url_landing.html:67 -#: privateurls/templates/public_url_landing.html:73 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" msgstr "" -#: privateurls/templates/public_url_landing.html:82 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" msgstr "" -#: privateurls/views.py:62 +#: privateurls/views.py msgid "no URL" msgstr "" -#: privateurls/views.py:75 +#: privateurls/views.py msgid "URL" msgstr "" -#: privateurls/views.py:86 +#: privateurls/views.py msgid "Speakers" msgstr "Vorbitori" -#: privateurls/views.py:96 +#: privateurls/views.py msgid "Adjudicators" msgstr "" -#: privateurls/views.py:118 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." msgstr "" -#: privateurls/views.py:125 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." @@ -164,7 +163,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: privateurls/views.py:130 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." @@ -172,11 +171,11 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: privateurls/views.py:161 +#: privateurls/views.py msgid "URL Key" msgstr "" -#: privateurls/views.py:174 +#: privateurls/views.py msgid "Debates" msgstr "" diff --git a/tabbycat/results/locale/ro/LC_MESSAGES/django.po b/tabbycat/results/locale/ro/LC_MESSAGES/django.po index 3e1dcd4cbbc..f31af8a3bc9 100644 --- a/tabbycat/results/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:37\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:14\n" "Last-Translator: philip_tc\n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -15,57 +15,83 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/results/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 948\n" -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:112 +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py +#, python-format +msgid "Resaved results for %(count)d ballot submission." +msgid_plural "Resaved results for %(count)d ballot submissions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" msgstr "" -#: results/forms.py:44 +#: results/forms.py +msgid "Tournament password" +msgstr "" + +#: results/forms.py msgid "That password isn't correct." msgstr "" -#: results/forms.py:76 +#: results/forms.py msgid "Please enter a whole number." msgstr "" -#: results/forms.py:78 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." msgstr "" -#: results/forms.py:157 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." msgstr "" -#: results/forms.py:163 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." msgstr "" -#: results/forms.py:299 +#: results/forms.py msgid "---------" msgstr "" -#: results/forms.py:301 results/forms.py:303 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" msgstr "" -#: results/forms.py:320 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" msgstr "" -#: results/forms.py:337 +#: results/forms.py +#, python-format +msgid "%(team)s (%(side)s)" +msgstr "" + +#: results/forms.py +msgid "Winner" +msgstr "" + +#: results/forms.py msgid "Mark as a duplicate speech" msgstr "" -#: results/forms.py:472 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." msgstr "" -#: results/forms.py:486 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." @@ -73,324 +99,380 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: results/forms.py:503 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." msgstr "" -#: results/forms.py:510 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." msgstr "" -#: results/forms.py:663 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." msgstr "" -#: results/forms.py:672 +#: results/forms.py +msgid "The declared winner does not correspond to the team with the highest score." +msgstr "" + +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" msgstr "" -#: results/forms.py:682 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:759 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:767 +#: results/forms.py #, python-format -msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." +msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:799 +#: results/forms.py #, python-format -msgid "%(team)s (%(side)s)" +msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" -#: results/forms.py:813 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." msgstr "" -#: results/forms.py:820 -msgid "There must be exactly two teams advancing." +#: results/forms.py +#, python-format +msgid "There must be exactly %(n)d team advancing." +msgid_plural "There must be exactly %(n)d teams advancing." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: results/forms.py +msgid "There must be exactly 1 team advancing." msgstr "" -#: results/models.py:32 +#: results/models.py msgid "Tab room" msgstr "" -#: results/models.py:33 +#: results/models.py msgid "Public" msgstr "" -#: results/models.py:37 +#: results/models.py msgid "timestamp" msgstr "" -#: results/models.py:39 +#: results/models.py msgid "version" msgstr "" -#: results/models.py:41 +#: results/models.py msgid "submitter type" msgstr "" -#: results/models.py:43 +#: results/models.py msgid "confirmed" msgstr "" -#: results/models.py:48 +#: results/models.py +msgid "from private URL" +msgstr "" + +#: results/models.py +msgid "from participant" +msgstr "" + +#: results/models.py msgid "submitter" msgstr "" -#: results/models.py:51 +#: results/models.py msgid "confirmer" msgstr "" -#: results/models.py:53 +#: results/models.py msgid "confirm timestamp" msgstr "" -#: results/models.py:55 +#: results/models.py msgid "IP address" msgstr "" -#: results/models.py:92 +#: results/models.py msgid "A tab room ballot must have a user associated." msgstr "" -#: results/models.py:100 +#: results/models.py msgid "debate" msgstr "" -#: results/models.py:102 +#: results/models.py msgid "motion" msgstr "moțiune" -#: results/models.py:104 +#: results/models.py msgid "discarded" msgstr "" -#: results/models.py:108 results/models.py:188 results/models.py:226 -#: results/models.py:268 +#: results/models.py +msgid "single adjudicator" +msgstr "" + +#: results/models.py +msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." +msgstr "" + +#: results/models.py msgid "ballot submission" msgstr "" -#: results/models.py:109 +#: results/models.py msgid "ballot submissions" msgstr "" -#: results/models.py:128 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" msgstr "" -#: results/models.py:135 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" msgstr "" -#: results/models.py:190 +#: results/models.py msgid "debate adjudicator" msgstr "" -#: results/models.py:192 results/models.py:228 results/models.py:270 +#: results/models.py msgid "debate team" msgstr "" -#: results/models.py:193 results/models.py:237 results/models.py:273 -msgid "score" +#: results/models.py +msgid "win" msgstr "" -#: results/models.py:194 results/models.py:274 -msgid "position" +#: results/models.py +msgid "margin" msgstr "" -#: results/models.py:200 -msgid "speaker score by adjudicator" +#: results/models.py +msgid "score" msgstr "" -#: results/models.py:201 -msgid "speaker scores by adjudicator" +#: results/models.py +msgid "team score by adjudicator" msgstr "" -#: results/models.py:215 +#: results/models.py +msgid "team scores by adjudicator" +msgstr "" + +#: results/models.py msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." msgstr "" -#: results/models.py:231 -msgid "points" +#: results/models.py +msgid "position" msgstr "" -#: results/models.py:233 -msgid "win" +#: results/models.py +msgid "speaker score by adjudicator" msgstr "" -#: results/models.py:235 -msgid "margin" +#: results/models.py +msgid "speaker scores by adjudicator" +msgstr "" + +#: results/models.py +msgid "points" msgstr "" -#: results/models.py:239 +#: results/models.py msgid "votes given" msgstr "" -#: results/models.py:241 +#: results/models.py msgid "votes possible" msgstr "" -#: results/models.py:245 +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py msgid "team score" msgstr "" -#: results/models.py:246 +#: results/models.py msgid "team scores" msgstr "" -#: results/models.py:272 +#: results/models.py msgid "speaker" msgstr "vorbitor" -#: results/models.py:276 +#: results/models.py msgid "ghost" msgstr "" -#: results/models.py:277 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." msgstr "" -#: results/models.py:286 +#: results/models.py msgid "speaker score" msgstr "" -#: results/models.py:287 +#: results/models.py msgid "speaker scores" msgstr "" -#: results/models.py:296 +#: results/models.py msgid "The debate team and speaker must be from the same team." msgstr "" -#: results/models.py:299 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." msgstr "" -#: results/tables.py:17 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" msgstr "" -#: results/tables.py:38 +#: results/tables.py msgid "Status of this debate's ballot" msgstr "" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" msgstr "" -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" msgstr "" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" msgstr "" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" msgstr "" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" msgstr "" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format -msgid "\n" -" A speaker from %(team)s gave multiple speeches in the current round\n" -" " +msgid "A speaker from %(team)s gave multiple speeches in the current round" msgstr "" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" msgstr "" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" msgstr "" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." msgstr "" -#: results/templates/admin_results.html:81 +#: results/templates/admin_results.html +#, python-format +msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." +msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: results/templates/admin_results.html +#, python-format +msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." +msgstr "" + +#: results/templates/admin_results.html +msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." +msgstr "" + +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." msgstr "" -#: results/templates/admin_results.html:89 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." msgstr "" -#: results/templates/admin_results.html:98 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/admin_results.html:105 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:30 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" msgstr "" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:35 -#: results/templates/ballot_entry_base.html:39 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" msgstr "" -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." msgstr "" -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html msgid "Confirm results" msgstr "" -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" msgstr "" -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:74 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." msgstr "" -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" msgstr "" -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "" -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." msgstr "" -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "" -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." @@ -398,7 +480,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." @@ -406,44 +488,78 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:41 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:44 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" msgstr "" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." +#: results/templates/ballot/ballot_set.html +msgid "There are some problems with this scoresheet. Please review and correct them." msgstr "" -#: results/templates/ballot/bp_elimination_ballot.html:6 -#: results/templates/ballot/standard_ballot_set.html:6 -msgid "There are some problems with this scoresheet. Please review and correct them." +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s (%(institution)s)" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html +msgid "Scoresheet" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Solo Chair" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Chair" msgstr "" -#: results/templates/ballot/bp_elimination_ballot.html:12 -msgid "Advancing Teams" +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Panellist" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Trainee" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Assign sides before entering scores" msgstr "" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "There is %(number)s existing ballot set for this debate." msgid_plural "There are %(number)s existing ballot sets for this debate." @@ -451,61 +567,65 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: results/templates/ballot/other_ballots_list.html:19 -#, python-format -msgid "There are %(number)s ballot sets for this debate." -msgstr "" - -#: results/templates/ballot/other_ballots_list.html:29 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." msgstr "" -#: results/templates/ballot/other_ballots_list.html:34 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." msgstr "" -#: results/templates/ballot/other_ballots_list.html:49 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:52 +#: results/templates/ballot/other_ballots_list.html +msgid "MERGING" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:57 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:61 +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "submitted from %(adjudicator)s's private URL," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:66 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," msgstr "" -#: results/templates/ballot/other_ballots_list.html:71 -#, python-format -msgid "confirmed by %(confirmer)s" +#: results/templates/ballot/other_ballots_list.html +msgid "unknown" msgstr "" -#: results/templates/ballot/other_ballots_list.html:75 -msgid "confirmed by unknown confirmer" +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "confirmed by %(confirmer)s" msgstr "" -#: results/templates/ballot/other_ballots_list.html:77 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" msgstr "" -#: results/templates/ballot/other_ballots_list.html:81 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" msgstr "" -#: results/templates/ballot/other_ballots_list.html:85 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" @@ -513,224 +633,176 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: results/templates/ballot/standard_ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 -#, python-format -msgid "Ballot from %(name)s (%(institution)s)" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 -#, python-format -msgid "Ballot from %(name)s" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 -msgid "Scoresheet" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -msgid "Solo Chair" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 -msgid "Chair" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 -msgid "Panellist" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -msgid "Trainee" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:44 -msgid "Assign sides before entering scores" -msgstr "" - -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." msgstr "" -#: results/templates/ballot_entry_base.html:8 -#, python-format -msgid "New Ballot Set for %(debate)s" -msgstr "" - -#: results/templates/ballot_entry_base.html:12 -#, python-format -msgid "Edit Ballot Set for %(debate)s" -msgstr "" - -#: results/templates/ballot_entry_base.html:19 -#, python-format -msgid "%(room)s: %(debate)s" -msgstr "" - -#: results/templates/ballot_entry_base.html:48 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr "" -#: results/templates/ballot_entry_base.html:58 -#, python-format -msgid "In the grand-final rounds of a British Parliamentary format this form will not let you nominate a single winner. To work around this, you need to first nominate a second 'fake' winner in this ballot and save/complete the ballot as normal. To then correct this result, you go to the Team Scores page of the Edit Database area, click the Team Score of the 'fake' winner of this debate, set the Win field to No, and then Save the change." -msgstr "" - -#: results/templates/ballot_entry_base.html:72 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." msgstr "" -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" msgstr "" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" msgstr "" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" msgstr "" -#: results/templates/enter_results.html:15 +#: results/templates/debate_postponement_form.html +msgid "Postponed" +msgstr "" + +#: results/templates/debate_postponement_form.html +msgid "Postpone" +msgstr "" + +#: results/templates/enter_results.html msgid "Ballot Status" msgstr "" -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" msgstr "" -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" msgstr "" -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" msgstr "" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" msgstr "" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" msgstr "" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format -msgid "The URL of this page is personalised to you, %(adjudicator)s. Do not share it with anyone: anyone who knows this URL can submit results for your debates. If you bookmark this page and return here after each debate, it will always show the debate that you just adjudicated." +msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." msgstr "" -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" msgstr "" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." msgstr "" -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" msgstr "" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" msgstr "" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" msgstr "" -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." msgstr "" -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" msgstr "" -#: results/templates/public_ballot_set.html:28 -#: results/templates/public_enter_results.html:14 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" msgstr "" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" msgstr "" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" msgstr "" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" msgstr "" -#: results/templates/public_ballot_set.html:91 -#: results/templates/public_ballot_set.html:95 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set.html #, python-format -msgid "Back to the tournament home page." +msgid "%(name)s (%(side)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Won" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Lost" msgstr "" -#: results/templates/public_enter_results.html:5 -#: results/templates/public_enter_results.html:8 +#: results/templates/public_ballot_set_error.html #, python-format -msgid "Enter Results for %(debate)s" +msgid "Back to the tournament home page." msgstr "" -#: results/templates/public_enter_results.html:22 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" msgstr "" -#: results/templates/public_enter_results.html:30 +#: results/templates/public_enter_results.html +msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." +msgstr "" + +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." @@ -738,254 +810,294 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: results/templates/public_enter_results.html:69 -msgid "Submit Ballot(s)" -msgstr "" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: results/templates/public_enter_results.html:71 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" msgstr "" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" msgstr "" -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" msgstr "" -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" msgstr "" -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" msgstr "" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" msgstr "" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." msgstr "" -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." msgstr "" -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" msgstr "" -#: results/utils.py:20 +#: results/utils.py +msgid "Debate was Postponed" +msgstr "" + +#: results/utils.py msgid "Ballot is Unconfirmed" msgstr "" -#: results/utils.py:22 +#: results/utils.py msgid "Ballot is Confirmed" msgstr "" #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:32 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" msgstr "" -#: results/utils.py:51 +#: results/utils.py #, python-format -msgid "%(winner)s (%(winner_side)s) won" +msgid "%(team)s (%(side)s) won" msgstr "" -#: results/utils.py:56 +#. Translators: The team here is the losing team +#: results/utils.py #, python-format -msgid "vs %(loser)s (%(loser_side)s)" +msgid "vs %(team)s (%(side)s)" msgstr "" -#: results/utils.py:71 +#: results/utils.py #, python-format -msgid "Advancing: %(advancing_list)s
    \n" +msgid "Advancing: %(advancing_list)s
    " msgstr "" -#: results/utils.py:75 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" msgstr "" -#: results/utils.py:85 +#: results/utils.py #, python-format -msgid "1st: %(first_team)s
    \n" +msgid "1st: %(first_team)s
    " msgstr "" -#: results/utils.py:87 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" "4th: %(fourth_team)s" msgstr "" -#: results/utils.py:102 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" msgstr "" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:162 +#: results/utils.py msgid "PM" msgstr "" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:164 +#: results/utils.py msgid "DPM" msgstr "" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:166 +#: results/utils.py msgid "LO" msgstr "" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:168 +#: results/utils.py msgid "DLO" msgstr "" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:170 +#: results/utils.py msgid "MG" msgstr "" #. Translators: Abbreviation for Government Whip -#: results/utils.py:172 +#: results/utils.py msgid "GW" msgstr "" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:174 +#: results/utils.py msgid "MO" msgstr "" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:176 +#: results/utils.py msgid "OW" msgstr "" -#: results/utils.py:196 +#: results/utils.py msgid "Reply" msgstr "" -#: results/views.py:224 results/views.py:226 +#: results/views.py msgid " vs " msgstr "" -#: results/views.py:359 +#: results/views.py +#, python-format +msgid "%(matchup)s: %(round)s @ %(room)s" +msgstr "" + +#: results/views.py +msgid "N/A" +msgstr "" + +#: results/views.py +msgid "New Ballot Set" +msgstr "" + +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." msgstr "" -#: results/views.py:361 results/views.py:428 +#: results/views.py msgid " Email receipts queued to be sent." msgstr "" -#: results/views.py:375 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." msgstr "" -#: results/views.py:381 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." msgstr "" -#: results/views.py:421 +#: results/views.py +msgid "Edit Ballot Set" +msgstr "" + +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." msgstr "" -#: results/views.py:423 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." msgstr "" -#: results/views.py:425 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." msgstr "" -#: results/views.py:469 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." msgstr "" -#: results/views.py:477 +#: results/views.py msgid "The draw for this round hasn't been released yet." msgstr "" -#: results/views.py:481 +#: results/views.py msgid "The motions for this round haven't been released yet." msgstr "" -#: results/views.py:486 +#: results/views.py msgid "It looks like you don't have a debate this round." msgstr "" -#: results/views.py:488 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." msgstr "" -#: results/views.py:496 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:501 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." msgstr "" -#: results/views.py:588 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." msgstr "" -#: results/views.py:606 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." msgstr "" -#: results/views.py:609 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." msgstr "" -#: results/views.py:613 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." msgstr "" -#: results/views.py:616 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." msgstr "" -#: results/views.py:638 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." msgstr "" -#: results/views.py:694 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" msgstr "" -#: results/views.py:698 +#: results/views.py msgid "Adjudicator" msgstr "" +#: results/views.py +msgid "Merge Ballots" +msgstr "" + +#: results/views.py +msgid "The speaking order in the ballots is inconsistent, so could not be merged." +msgstr "" + +#: results/views.py +msgid "Duplicate speeches are marked inconsistently, so could not be merged." +msgstr "" + +#: results/views.py +#, python-format +msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." +msgstr "" + diff --git a/tabbycat/standings/locale/ro/LC_MESSAGES/django.po b/tabbycat/standings/locale/ro/LC_MESSAGES/django.po index 494ce2b2274..bff76a06647 100644 --- a/tabbycat/standings/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:37\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:01\n" "Last-Translator: philip_tc\n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -15,590 +15,598 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/standings/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 950\n" -#: standings/base.py:283 +#: standings/base.py msgid "The same metric would be added twice:" msgstr "" -#: standings/base.py:284 +#: standings/base.py msgid "The same ranking would be added twice:" msgstr "" -#: standings/base.py:358 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" msgstr "" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" msgstr "" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" msgstr "" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" msgstr "" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" msgstr "" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" msgstr "" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" msgstr "" -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" msgstr "" -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" msgstr "" -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" msgstr "" -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" msgstr "" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" msgstr "" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" msgstr "" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" msgstr "" -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" msgstr "" -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" msgstr "" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" msgstr "" -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" msgstr "" -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" msgstr "" -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" msgstr "" -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" msgstr "" -#: standings/speakers.py:50 standings/speakers.py:136 +#: standings/speakers.py msgid "total" msgstr "" -#: standings/speakers.py:51 standings/speakers.py:137 +#: standings/speakers.py msgid "Total" msgstr "" -#: standings/speakers.py:58 standings/speakers.py:146 +#: standings/speakers.py msgid "average" msgstr "" -#: standings/speakers.py:59 standings/speakers.py:147 +#: standings/speakers.py msgid "Avg" msgstr "" -#: standings/speakers.py:66 -msgid "trimmed mean (high-low drop)" -msgstr "" - -#: standings/speakers.py:67 -msgid "Trim" -msgstr "" - -#: standings/speakers.py:99 +#: standings/speakers.py msgid "team points" msgstr "" -#: standings/speakers.py:100 +#: standings/speakers.py msgid "Team" msgstr "" -#: standings/speakers.py:119 standings/speakers.py:156 +#: standings/speakers.py msgid "standard deviation" msgstr "" -#: standings/speakers.py:120 standings/speakers.py:157 +#: standings/speakers.py msgid "Stdev" msgstr "" -#: standings/speakers.py:128 +#: standings/speakers.py msgid "number of speeches given" msgstr "" -#: standings/speakers.py:129 standings/speakers.py:168 +#: standings/speakers.py msgid "Num" msgstr "" -#: standings/speakers.py:167 +#: standings/speakers.py msgid "replies given" msgstr "" -#: standings/teams.py:64 +#: standings/speakers.py +msgid "trimmed mean (high-low drop)" +msgstr "" + +#: standings/speakers.py +msgid "Trim" +msgstr "" + +#: standings/teams.py msgid "points" msgstr "" -#: standings/teams.py:65 +#: standings/teams.py msgid "Pts" msgstr "" -#: standings/teams.py:74 +#: standings/teams.py msgid "wins" msgstr "" -#: standings/teams.py:75 standings/views.py:596 +#: standings/teams.py standings/views.py msgid "Wins" msgstr "" -#: standings/teams.py:85 +#: standings/teams.py msgid "total speaker score" msgstr "" -#: standings/teams.py:86 +#: standings/teams.py msgid "Spk" msgstr "" -#: standings/teams.py:95 +#: standings/teams.py msgid "average total speaker score" msgstr "" -#: standings/teams.py:96 +#: standings/teams.py msgid "ATSS" msgstr "" -#: standings/teams.py:105 +#: standings/teams.py msgid "speaker score standard deviation" msgstr "" -#: standings/teams.py:106 +#: standings/teams.py msgid "SSD" msgstr "" -#: standings/teams.py:116 +#: standings/teams.py msgid "sum of margins" msgstr "" -#: standings/teams.py:117 +#: standings/teams.py msgid "Marg" msgstr "" -#: standings/teams.py:126 +#: standings/teams.py msgid "average margin" msgstr "" -#: standings/teams.py:127 +#: standings/teams.py msgid "AWM" msgstr "" -#: standings/teams.py:136 +#: standings/teams.py msgid "average individual speaker score" msgstr "" -#: standings/teams.py:137 +#: standings/teams.py msgid "AISS" msgstr "" -#: standings/teams.py:203 +#: standings/teams.py msgid "draw strength by wins" msgstr "" -#: standings/teams.py:204 +#: standings/teams.py msgid "DS" msgstr "" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by total speaker score" msgstr "" -#: standings/teams.py:212 +#: standings/teams.py msgid "DSS" msgstr "" -#: standings/teams.py:223 +#: standings/teams.py msgid "number of pullups before this round" msgstr "" -#: standings/teams.py:224 +#: standings/teams.py msgid "PU" msgstr "" -#: standings/teams.py:246 +#: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "" -#: standings/teams.py:247 +#: standings/teams.py msgid "Ballots" msgstr "" -#: standings/teams.py:248 +#: standings/teams.py msgid "votes/ballots carried" msgstr "" -#: standings/teams.py:273 +#: standings/teams.py msgid "number of firsts" msgstr "" -#: standings/teams.py:274 +#: standings/teams.py msgid "1sts" msgstr "" -#: standings/teams.py:283 +#: standings/teams.py msgid "number of seconds" msgstr "" -#: standings/teams.py:284 +#: standings/teams.py msgid "2nds" msgstr "" -#: standings/teams.py:296 +#: standings/teams.py +msgid "number of thirds" +msgstr "" + +#: standings/teams.py +msgid "3rds" +msgstr "" + +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py msgid "Who-beat-whom" msgstr "" -#: standings/teams.py:297 +#: standings/teams.py msgid "WBW" msgstr "" -#: standings/teams.py:298 +#: standings/teams.py msgid "who-beat-whom" msgstr "" -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." msgstr "" -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." msgstr "" -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." msgstr "" -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." msgstr "" -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." msgstr "" -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." msgstr "" -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." msgstr "" -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." msgstr "" -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." msgstr "" -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." msgstr "" -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" msgstr "" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." msgstr "" -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" msgstr "" -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" msgstr "" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" msgstr "" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" msgstr "" -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" msgstr "" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:150 -#: standings/templates/standings_index.html:163 -#: standings/templates/standings_index.html:182 +#: standings/templates/standings_index.html msgid "No data yet" msgstr "" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" msgstr "" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" msgstr "" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" msgstr "" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" msgstr "" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" msgstr "" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" msgstr "" -#: standings/templates/standings_index.html:144 -#: standings/templates/standings_index.html:157 -#, python-format -msgid "%(reference)s in %(abbreviation)s" -msgstr "" - -#: standings/templates/standings_index.html:173 +#: standings/templates/standings_index.html msgid "Average Speaks" msgstr "" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" msgstr "" -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" msgstr "" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" msgstr "Vorbitori" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" msgstr "" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" msgstr "" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "" -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" msgstr "" -#: standings/templates/standings_menu.html:64 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "Moțiuni" -#: standings/templates/standings_menu.html:68 +#: standings/templates/standings_menu.html +msgid "By Round" +msgstr "" + +#: standings/templates/standings_menu.html msgid "Diversity" msgstr "" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." msgstr "" -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " msgstr "" -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " msgstr "" -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " msgstr "" -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" msgstr "" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" msgstr "" -#: standings/views.py:206 standings/views.py:432 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." msgstr "" -#: standings/views.py:282 +#: standings/views.py msgid "Speaker Standings" msgstr "" -#: standings/views.py:324 +#: standings/views.py msgid "Speaker Tab" msgstr "" -#: standings/views.py:339 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" msgstr "" -#: standings/views.py:357 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" msgstr "" -#: standings/views.py:370 +#: standings/views.py msgid "Reply Speaker Standings" msgstr "" -#: standings/views.py:375 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." msgstr "" -#: standings/views.py:412 +#: standings/views.py msgid "Reply Speaker Tab" msgstr "" -#: standings/views.py:424 standings/views.py:673 +#: standings/views.py msgid "Team Standings" msgstr "" -#: standings/views.py:503 +#: standings/views.py msgid "Team Tab" msgstr "" -#: standings/views.py:522 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" msgstr "" -#: standings/views.py:549 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" msgstr "" -#: standings/views.py:560 +#: standings/views.py msgid "Current Team Standings" msgstr "" -#: standings/views.py:596 +#: standings/views.py msgid "Points" msgstr "" +#: standings/views.py +msgid "Feedback Overview" +msgstr "" + +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +msgstr "" + diff --git a/tabbycat/tournaments/locale/ro/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/ro/LC_MESSAGES/django.po index 06d7821087c..bbe1e24fd5f 100644 --- a/tabbycat/tournaments/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:37\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -15,657 +15,638 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/tournaments/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "" -#: tournaments/forms.py:27 +#: tournaments/forms.py msgid "Number of preliminary rounds" msgstr "" -#: tournaments/forms.py:32 +#: tournaments/forms.py msgid "Number of teams in the open break" msgstr "" -#: tournaments/forms.py:33 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." msgstr "" -#: tournaments/forms.py:39 +#: tournaments/forms.py msgid "Did you agree with their decision?" msgstr "" -#: tournaments/forms.py:39 +#: tournaments/forms.py msgid "Agree?" msgstr "" -#: tournaments/forms.py:45 +#: tournaments/forms.py msgid "Comments" msgstr "" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:59 +#: tournaments/forms.py msgid "Open" msgstr "" -#: tournaments/forms.py:84 +#: tournaments/forms.py msgid "Format Configuration" msgstr "" -#: tournaments/forms.py:85 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" msgstr "" -#: tournaments/forms.py:89 +#: tournaments/forms.py msgid "Public Configuration" msgstr "" -#: tournaments/forms.py:90 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" msgstr "" -#: tournaments/forms.py:96 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" msgstr "" -#: tournaments/forms.py:186 +#: tournaments/forms.py msgid "Current preliminary round" msgstr "" -#: tournaments/forms.py:187 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" msgstr "" -#: tournaments/forms.py:199 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" msgstr "" -#: tournaments/forms.py:205 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" msgstr "" -#: tournaments/forms.py:217 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." msgstr "" -#: tournaments/forms.py:223 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." msgstr "" -#: tournaments/mixins.py:108 +#: tournaments/forms.py +#, python-format +msgid "%(name)s (%(abbreviation)s)" +msgstr "" + +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." msgstr "" -#: tournaments/mixins.py:116 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." msgstr "" -#: tournaments/mixins.py:129 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." msgstr "" -#: tournaments/mixins.py:136 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." msgstr "" -#: tournaments/mixins.py:231 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" msgstr "" -#: tournaments/mixins.py:431 +#: tournaments/mixins.py msgid "Return to Draw" msgstr "" -#: tournaments/models.py:27 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." msgstr "" -#: tournaments/models.py:34 tournaments/models.py:330 +#: tournaments/models.py msgid "name" msgstr "" -#: tournaments/models.py:35 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" msgstr "" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "short name" msgstr "" -#: tournaments/models.py:38 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" msgstr "" -#: tournaments/models.py:40 tournaments/models.py:324 +#: tournaments/models.py msgid "sequence number" msgstr "" -#: tournaments/models.py:41 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." msgstr "" -#: tournaments/models.py:43 +#: tournaments/models.py msgid "slug" msgstr "" -#: tournaments/models.py:44 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" msgstr "" -#: tournaments/models.py:45 +#: tournaments/models.py msgid "active" msgstr "" -#: tournaments/models.py:48 tournaments/models.py:323 +#: tournaments/models.py msgid "tournament" msgstr "" -#: tournaments/models.py:49 +#: tournaments/models.py msgid "tournaments" msgstr "" -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Random" msgstr "" -#: tournaments/models.py:296 +#: tournaments/models.py msgid "Manual" msgstr "" -#: tournaments/models.py:297 +#: tournaments/models.py msgid "Round-robin" msgstr "" -#: tournaments/models.py:298 +#: tournaments/models.py msgid "Power-paired" msgstr "" -#: tournaments/models.py:299 tournaments/models.py:306 +#: tournaments/models.py msgid "Elimination" msgstr "" -#: tournaments/models.py:305 +#: tournaments/models.py msgid "Preliminary" msgstr "" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "None" msgstr "" -#: tournaments/models.py:316 +#: tournaments/models.py msgid "Draft" msgstr "" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "Confirmed" msgstr "" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "Released" msgstr "" -#: tournaments/models.py:325 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" msgstr "" -#: tournaments/models.py:327 +#: tournaments/models.py msgid "completed" msgstr "" -#: tournaments/models.py:328 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" msgstr "" -#: tournaments/models.py:330 +#: tournaments/models.py msgid "e.g. \"Round 1\"" msgstr "" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "abbreviation" msgstr "" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "e.g. \"R1\"" msgstr "" -#: tournaments/models.py:333 +#: tournaments/models.py msgid "stage" msgstr "" -#: tournaments/models.py:334 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" msgstr "" -#: tournaments/models.py:336 +#: tournaments/models.py msgid "draw type" msgstr "" -#: tournaments/models.py:337 +#: tournaments/models.py msgid "Which draw method to use" msgstr "" -#: tournaments/models.py:340 +#: tournaments/models.py msgid "break category" msgstr "" -#: tournaments/models.py:341 +#: tournaments/models.py msgid "If elimination round, which break category" msgstr "" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "draw status" msgstr "" -#: tournaments/models.py:345 +#: tournaments/models.py msgid "The status of this round's draw" msgstr "" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "feedback weight" msgstr "" -#: tournaments/models.py:350 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." msgstr "" #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:353 +#: tournaments/models.py msgid "silent" msgstr "" -#: tournaments/models.py:354 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." msgstr "" -#: tournaments/models.py:356 +#: tournaments/models.py msgid "motions released" msgstr "" -#: tournaments/models.py:357 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" msgstr "" -#: tournaments/models.py:358 +#: tournaments/models.py msgid "starts at" msgstr "" -#: tournaments/models.py:361 +#: tournaments/models.py +msgid "weight" +msgstr "" + +#: tournaments/models.py +msgid "A factor for the points received in the round. For example, if 2, all points are doubled." +msgstr "" + +#: tournaments/models.py msgid "round" msgstr "" -#: tournaments/models.py:362 +#: tournaments/models.py msgid "rounds" msgstr "" -#: tournaments/models.py:375 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:378 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:383 +#: tournaments/models.py msgid "Elimination rounds must have a break category." msgstr "" -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" msgstr "" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" msgstr "" -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" msgstr "" -#: tournaments/templates/blank_site_start.html:7 -msgid "Welcome to Tabbycat" -msgstr "" - -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" msgstr "" -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." msgstr "" -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." msgstr "" -#: tournaments/templates/blank_site_start.html:32 -msgid "The e-mail address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." +#: tournaments/templates/blank_site_start.html +msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." msgstr "" -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" msgstr "" -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" msgstr "" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." msgstr "" -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." msgstr "" -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" msgstr "" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." msgstr "" -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" msgstr "" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." msgstr "" -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" msgstr "" -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" msgstr "" -#: tournaments/templates/donations.html:4 -#: tournaments/templates/donations.html:5 -msgctxt "title" -msgid "Donate to Tabbycat" -msgstr "" - -#: tournaments/templates/donations.html:11 -msgid "Tabbycat is a volunteer effort. Since 2012, its maintainers have spent thousands of hours working on it." -msgstr "" - -#: tournaments/templates/donations.html:17 -msgid "Donating to Tabbycat helps the maintainers to meet recurring costs and justify our ongoing contributions in responding to support enquiries, keeping the software up to date, fixing bugs, and developing new features." -msgstr "" - -#: tournaments/templates/donations.html:24 -msgid "We suggest that tournaments budget for a donation of A$1 (Australian dollar) per team. For tournaments run for fundraising or for profit, whether partly or solely, this payment is required and your licence to use Tabbycat is conditional upon it. General donations from individuals or organisations are of course also much appreciated." -msgstr "" - -#: tournaments/templates/donations.html:34 -#, python-format -msgid "Our suggested donation from %(tournament)s, based on its size, is A$%(nteams)s. The easiest way to donate is via Paypal, but please don’t hesitate to email us if other methods would work better for you. Also, feel free to get in touch if you require an invoice or receipt for the payment." -msgstr "" - -#: tournaments/templates/donations.html:46 -msgid "The easiest way to donate is via Paypal. Please contact us if you require other options." -msgstr "" - -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" msgstr "" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." msgstr "" -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." msgstr "" -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." msgstr "" -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." msgstr "" -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" msgstr "" -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" +msgid "Teams on %(side)s" msgstr "" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" msgstr "" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." msgstr "" -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." msgstr "" -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" msgstr "" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:201 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" msgstr "" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" msgstr "" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" msgstr "" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "Moțiuni" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" msgstr "" -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" msgstr "" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" msgstr "" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" msgstr "" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" msgstr "" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" msgstr "" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" msgstr "" -#: tournaments/templates/public_tournament_index.html:187 -msgid "Enter Ballot" +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Enter Ballot for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:193 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" msgstr "" -#: tournaments/templates/public_tournament_index.html:215 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" msgstr "" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" msgstr "" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" msgstr "" -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." msgstr "" -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" msgstr "" -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" msgstr "" -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" msgstr "" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" msgstr "" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" msgstr "" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" msgstr "" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." @@ -673,12 +654,12 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" msgstr "" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." @@ -686,356 +667,369 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " msgstr "" -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "" -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" msgstr "" -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" msgstr "" -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "" -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:46 -msgid "Inactive Tournaments" +#: tournaments/templates/set_round_weights.html +msgctxt "page title" +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." msgstr "" -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/set_round_weights.html +msgctxt "button" +msgid "Set weights" +msgstr "" + +#: tournaments/templates/site_index.html msgid "Welcome!" msgstr "" -#: tournaments/templates/site_index.html:20 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" msgstr "" -#: tournaments/templates/site_index.html:29 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:33 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:54 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html msgid "New Tournament" msgstr "" -#: tournaments/templates/site_index.html:57 +#: tournaments/templates/site_index.html msgid "Edit Database Area" msgstr "" -#: tournaments/templates/site_index.html:60 +#: tournaments/templates/site_index.html msgid "Send a Test Email" msgstr "" -#: tournaments/templates/site_index.html:69 +#: tournaments/templates/site_index.html +msgid "Import DebateXML" +msgstr "" + +#: tournaments/templates/site_index.html #, python-format -msgid "Change Password (%(user)s)" +msgid "Get API Token / Change Password (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:79 +#: tournaments/templates/site_index.html msgid "Log In as Admin" msgstr "" -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." msgstr "" -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" msgstr "" -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." msgstr "" #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." msgstr "" -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." msgstr "" -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" +msgid "Mark participants as available to prepare a draw for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" msgstr "" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" +msgid "Go to the results area to enter ballots for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." msgstr "" -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" msgstr "" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" msgstr "" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" msgstr "" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" msgstr "" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" msgstr "echipa afirmatoare" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" msgstr "echipa negatoare" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" msgstr "" -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" msgstr "" -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" msgstr "guvern" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" msgstr "opoziție" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" msgstr "" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" msgstr "" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" msgstr "" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" msgstr "" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" msgstr "" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" msgstr "" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" msgstr "" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" msgstr "" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" msgstr "" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" msgstr "" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" msgstr "" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" msgstr "" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" msgstr "" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" msgstr "" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" msgstr "" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" msgstr "" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" msgstr "" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" msgstr "" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" msgstr "" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" msgstr "" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" msgstr "" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" msgstr "" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" msgstr "" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" msgstr "" -#: tournaments/views.py:154 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" msgstr "" -#: tournaments/views.py:160 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." msgstr "" -#: tournaments/views.py:173 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." msgstr "" -#: tournaments/views.py:179 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." msgstr "" -#: tournaments/views.py:187 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" msgstr "" -#: tournaments/views.py:216 -msgid "Whoops! It looks like someone's already created the first user account. Please log in." -msgstr "" - -#: tournaments/views.py:224 -#, python-format -msgid "Welcome! You've created an account for %s." -msgstr "" - -#: tournaments/views.py:239 +#: tournaments/views.py msgid "8-team generic dataset" msgstr "" -#: tournaments/views.py:240 +#: tournaments/views.py msgid "24-team Australs dataset" msgstr "" -#: tournaments/views.py:241 +#: tournaments/views.py msgid "88-team BP dataset" msgstr "" +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." +msgstr "" + diff --git a/tabbycat/utils/locale/ro/LC_MESSAGES/django.po b/tabbycat/utils/locale/ro/LC_MESSAGES/django.po index e53340c2a55..07eaf857f53 100644 --- a/tabbycat/utils/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:33\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -15,254 +15,245 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/utils/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "E-mail address" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "" + +#: utils/admin.py +msgid "Speaker" +msgstr "Vorbitor" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "" + +#: utils/admin.py +msgid "Confirmed" +msgstr "" + +#: utils/admin.py +msgid "Adjudicator" msgstr "" -#: utils/tables.py:43 +#: utils/tables.py msgid "No Data Available" msgstr "" -#: utils/tables.py:151 utils/tables.py:152 +#: utils/tables.py msgid "Ⓒ" msgstr "" -#: utils/tables.py:153 +#: utils/tables.py msgid "Ⓣ" msgstr "" -#: utils/tables.py:157 +#: utils/tables.py msgid "chair" msgstr "" -#: utils/tables.py:158 +#: utils/tables.py msgid "panellist" msgstr "" -#: utils/tables.py:159 +#: utils/tables.py msgid "trainee" msgstr "" -#: utils/tables.py:162 +#: utils/tables.py msgid "—" msgstr "" -#: utils/tables.py:226 utils/tables.py:232 +#: utils/tables.py +msgid "Redacted" +msgstr "" + +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" msgstr "" -#: utils/tables.py:242 utils/tables.py:247 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" msgstr "" -#: utils/tables.py:269 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" msgstr "" -#: utils/tables.py:271 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" msgstr "" -#: utils/tables.py:283 +#: utils/tables.py #, python-format msgid "%(team)s won" msgstr "" -#: utils/tables.py:288 +#: utils/tables.py #, python-format msgid "%(team)s lost" msgstr "" -#: utils/tables.py:293 utils/tables.py:321 utils/tables.py:339 +#: utils/tables.py #, python-format msgid "%(team)s—no result" msgstr "" -#: utils/tables.py:301 +#: utils/tables.py #, python-format -msgid "%(team)s took 1st" +msgid "%(team)s placed %(place)s" msgstr "" -#: utils/tables.py:306 +#: utils/tables.py #, python-format -msgid "%(team)s took 2nd" -msgstr "" - -#: utils/tables.py:311 -#, python-format -msgid "%(team)s took 3rd" +msgid "%(team)s is advancing" msgstr "" -#: utils/tables.py:316 +#: utils/tables.py #, python-format -msgid "%(team)s took 4th" +msgid "%(team)s was eliminated" msgstr "" -#: utils/tables.py:329 -#, python-format -msgid "%(team)s is advancing" +#: utils/tables.py +msgid "View/edit debate ballot" msgstr "" -#: utils/tables.py:334 -#, python-format -msgid "%(team)s was eliminated" +#: utils/tables.py +msgid "View debate ballot" msgstr "" -#: utils/tables.py:352 +#: utils/tables.py #, python-format msgid " vs %(opposition)s" msgstr "" -#: utils/tables.py:359 +#: utils/tables.py #, python-format msgid "Won against %(team)s" msgstr "" -#: utils/tables.py:361 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" msgstr "" -#: utils/tables.py:363 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" msgstr "" -#: utils/tables.py:371 utils/tables.py:450 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" msgstr "" -#: utils/tables.py:376 utils/tables.py:455 -msgid "View/edit debate ballot" -msgstr "" - -#: utils/tables.py:382 utils/tables.py:461 -msgid "View debate ballot" -msgstr "" - -#: utils/tables.py:403 +#: utils/tables.py msgid "Teams in debate:" msgstr "" -#: utils/tables.py:406 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "" -#: utils/tables.py:407 utils/tables.py:411 utils/tables.py:437 +#: utils/tables.py msgid "??" msgstr "" -#: utils/tables.py:425 +#: utils/tables.py msgid "advancing" msgstr "" -#: utils/tables.py:426 +#: utils/tables.py msgid "Advancing" msgstr "" -#: utils/tables.py:428 +#: utils/tables.py msgid "eliminated" msgstr "" -#: utils/tables.py:429 +#: utils/tables.py msgid "Eliminated" msgstr "" -#: utils/tables.py:432 utils/tables.py:442 +#: utils/tables.py msgid "No result for debate" msgstr "" -#: utils/tables.py:439 +#: utils/tables.py #, python-format msgid "Placed %(place)s" msgstr "" -#: utils/tables.py:470 -msgid "Tournament" -msgstr "" - -#: utils/tables.py:479 -msgid "Round" -msgstr "" - -#: utils/tables.py:497 utils/tables.py:683 +#: utils/tables.py msgid "Name" msgstr "" -#: utils/tables.py:503 utils/tables.py:665 +#: utils/tables.py msgid "Institution" msgstr "" -#: utils/tables.py:509 +#: utils/tables.py msgid "Member of the Adjudication Core" msgstr "" -#: utils/tables.py:516 +#: utils/tables.py msgid "Independent Adjudicator" msgstr "" -#: utils/tables.py:524 +#: utils/tables.py msgid "Always Trainee" msgstr "" -#: utils/tables.py:562 +#: utils/tables.py msgid "in minority" msgstr "" -#: utils/tables.py:595 +#: utils/tables.py msgid "Debate Adjudicators" msgstr "" -#: utils/tables.py:626 -msgid "Order as listed" -msgstr "" - -#: utils/tables.py:633 -msgid "?" -msgstr "" - -#: utils/tables.py:636 -msgid "Motion" -msgstr "" - -#: utils/tables.py:651 -msgid "Team" -msgstr "" - -#: utils/tables.py:656 utils/tables.py:705 +#: utils/tables.py msgid "Categories" msgstr "" -#: utils/tables.py:676 -msgid "Redacted" -msgstr "" - -#: utils/tables.py:703 +#: utils/tables.py msgid "Category" msgstr "" -#: utils/tables.py:730 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." msgstr "" -#: utils/tables.py:732 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." msgstr "" -#: utils/tables.py:747 +#: utils/tables.py msgid "Room" msgstr "" -#: utils/tables.py:763 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" @@ -270,65 +261,69 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: utils/tables.py:769 +#: utils/tables.py msgid "Teams are from the same institution" msgstr "" -#: utils/tables.py:775 +#: utils/tables.py msgid "Conflicts/Flags" msgstr "" -#: utils/tables.py:829 -msgid "The ballot you submitted" +#: utils/tables.py +msgid "The confirmed ballot" msgstr "" -#: utils/tables.py:833 -msgid "View/Edit Ballot" -msgstr "" - -#: utils/tables.py:842 +#: utils/tables.py msgid "No ballot" msgstr "" -#: utils/tables.py:844 -msgid "Elimination" +#: utils/tables.py +msgid "No scores" msgstr "" -#: utils/tables.py:847 utils/tables.py:859 +#: utils/tables.py msgid "View Ballot" msgstr "" -#: utils/tables.py:867 +#: utils/tables.py +msgid "The ballot you submitted" +msgstr "" + +#: utils/tables.py +msgid "View/Edit Ballot" +msgstr "" + +#: utils/tables.py msgid "Result" msgstr "" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:873 +#: utils/tables.py msgid "TBC" msgstr "" -#: utils/tables.py:874 -msgid "Side" +#: utils/tables.py +msgid "Team iron-personed this round and the last." msgstr "" -#: utils/tables.py:912 -msgid "Team iron-manned this round and the last." +#: utils/tables.py +msgid "Team iron-personed this round." msgstr "" -#: utils/tables.py:915 -msgid "Team iron-manned this round." +#: utils/tables.py +msgid "Team iron-personed last round." msgstr "" -#: utils/tables.py:918 -msgid "Team iron-manned last round." -msgstr "" - -#: utils/tables.py:935 utils/tables.py:936 +#: utils/tables.py #, python-format msgid "Team %(num)d" msgstr "" -#: utils/views.py:38 +#: utils/tables.py +msgid "Postpone" +msgstr "" + +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." msgstr "" diff --git a/tabbycat/venues/locale/ro/LC_MESSAGES/django.po b/tabbycat/venues/locale/ro/LC_MESSAGES/django.po index 8f8849bf15a..7f1114fc537 100644 --- a/tabbycat/venues/locale/ro/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:35\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" "Last-Translator: philip_tc\n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -15,171 +15,179 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /develop/tabbycat/venues/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 -msgid "Venues" +#: venues/apps.py +msgid "Rooms" msgstr "" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." msgstr "" -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." msgstr "" -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." msgstr "" -#: venues/models.py:9 venues/models.py:64 +#: venues/models.py msgid "name" msgstr "" -#: venues/models.py:11 venues/models.py:118 +#: venues/models.py msgid "priority" msgstr "" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" msgstr "" -#: venues/models.py:15 venues/models.py:76 +#: venues/models.py msgid "tournament" msgstr "" -#: venues/models.py:22 +#: venues/models.py +msgid "URL" +msgstr "" + +#: venues/models.py +msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" +msgstr "" + +#: venues/models.py msgid "room" msgstr "" -#: venues/models.py:23 venues/models.py:74 +#: venues/models.py msgid "rooms" msgstr "" -#: venues/models.py:59 +#: venues/models.py msgid "Don't display in room name" msgstr "" -#: venues/models.py:60 +#: venues/models.py msgid "Display as prefix" msgstr "" -#: venues/models.py:61 +#: venues/models.py msgid "Display as suffix" msgstr "" -#: venues/models.py:65 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." msgstr "" -#: venues/models.py:69 +#: venues/models.py msgid "description" msgstr "" -#: venues/models.py:70 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." msgstr "" -#: venues/models.py:80 +#: venues/models.py msgid "display in room name" msgstr "" -#: venues/models.py:81 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" msgstr "" -#: venues/models.py:83 +#: venues/models.py msgid "display in public tooltip" msgstr "" -#: venues/models.py:84 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." msgstr "" -#: venues/models.py:88 +#: venues/models.py msgid "room category" msgstr "" -#: venues/models.py:89 +#: venues/models.py msgid "room categories" msgstr "" -#: venues/models.py:117 +#: venues/models.py msgid "category" msgstr "" -#: venues/models.py:121 +#: venues/models.py msgid "subject content type" msgstr "" -#: venues/models.py:124 +#: venues/models.py msgid "subject ID" msgstr "" -#: venues/models.py:130 +#: venues/models.py msgid "room constraint" msgstr "" -#: venues/models.py:131 +#: venues/models.py msgid "room constraints" msgstr "" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" msgstr "" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." msgstr "" -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." msgstr "" -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" msgstr "" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" msgstr "" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." msgstr "" -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" msgstr "" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" msgstr "" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" msgstr "" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" msgstr "" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" msgstr "" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" msgstr "" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" @@ -187,26 +195,26 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." msgstr "" -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" msgstr "" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" msgstr "" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." From a556b67a5cf86a49c2d699ddfecffc20071f9d3c Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Sun, 5 Feb 2023 11:56:28 +1100 Subject: [PATCH 219/255] New translations django.po (Russian) --- .../actionlog/locale/ru/LC_MESSAGES/django.po | 156 ++-- .../locale/ru/LC_MESSAGES/django.po | 199 +++-- .../locale/ru/LC_MESSAGES/django.po | 452 +++++----- .../locale/ru/LC_MESSAGES/django.po | 164 ++-- .../breakqual/locale/ru/LC_MESSAGES/django.po | 254 +++--- tabbycat/draw/locale/ru/LC_MESSAGES/django.po | 636 +++++++------- .../importer/locale/ru/LC_MESSAGES/django.po | 227 +++-- tabbycat/locale/ru/LC_MESSAGES/django.po | 478 +++++----- .../motions/locale/ru/LC_MESSAGES/django.po | 199 +++-- .../locale/ru/LC_MESSAGES/django.po | 196 +++-- .../options/locale/ru/LC_MESSAGES/django.po | 813 +++++++++--------- .../locale/ru/LC_MESSAGES/django.po | 495 ++++++----- .../printing/locale/ru/LC_MESSAGES/django.po | 63 +- .../locale/ru/LC_MESSAGES/django.po | 87 +- .../results/locale/ru/LC_MESSAGES/django.po | 542 ++++++------ .../standings/locale/ru/LC_MESSAGES/django.po | 311 ++++--- .../locale/ru/LC_MESSAGES/django.po | 518 ++++++----- .../utils/locale/ru/LC_MESSAGES/django.po | 197 +++-- .../venues/locale/ru/LC_MESSAGES/django.po | 100 ++- 19 files changed, 3024 insertions(+), 3063 deletions(-) diff --git a/tabbycat/actionlog/locale/ru/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/ru/LC_MESSAGES/django.po index 27a76cbd311..35f3734d46b 100644 --- a/tabbycat/actionlog/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:08\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -17,307 +17,307 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" msgstr "Журнал Действий" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" msgstr "Отвергнутый набор бэллотов" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" msgstr "Зарегистрированный набор бэллотов" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" msgstr "Создан набор бэллотов" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" msgstr "Отредактирован набор бэллотов" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" msgstr "Подтвержден набор бэллотов" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" msgstr "Предоставлен набор бэллотов из публичной формы" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" msgstr "Представлена форма обратной связи из публичной формы" -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" msgstr "Сохраненная обратная связь" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" msgstr "Исходный рейтинг судьи отредактирован" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" msgstr "Установить примечание для судьи" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" msgstr "Сохраненная расстановка судей" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" msgstr "Автоматическая расстановка судей" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" msgstr "Сохраненное ручное редактирование аудиторий" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" msgstr "Автоматически распределенные аудитории" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" msgstr "Редактированы категории аудиторий" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" msgstr "Редактированы ограничения аудиторий" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" msgstr "Созданная сетка" -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" msgstr "Подтвержденная сетка" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" msgstr "Заново сгенерирированная сетка" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" msgstr "Опубликованная сетка" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" msgstr "Не опубликованная сетка" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" msgstr "Сохраненное ручное редактирование сочетаний команд" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" msgstr "Сохранить статус сторон в сочетании команд" -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "" -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" msgstr "Добавленная/отредактированная тема" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" msgstr "Опубликованные темы" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" msgstr "Не опубликованные темы" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" msgstr "Важность дебатов автоматически приоритезирована" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" msgstr "Отредактирована важность дебатов" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" msgstr "Изменен брейковый статус судьи" -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" msgstr "Отредактирована доступность для брейка" -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" msgstr "Отредактированные категории брейка" -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" msgstr "Создан командный брейк для всех категорий" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" msgstr "Изменены отметки брейкающихся команд, обновлены все командные брейки" -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" msgstr "Изменены отметки брейкающихся команд, обновлен этот командный брейк" -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" msgstr "Изменены отметки брейкающихся команд" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" msgstr "Установить время начала" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" msgstr "Текущий раунд продвинут к" -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" msgstr "Отметить раунд как завершенный" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" msgstr "Отредактирована доступность команд" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" msgstr "Отредактирована доступность судей" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" msgstr "Отредактирована доступность аудиторий" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" msgstr "Отредактированы опции турнира" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" msgstr "Отредактирована доступность категорий спикеров" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" msgstr "Отредактирована категории спикеров" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" msgstr "Клубы импортированы с помощью простого импортера" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" msgstr "Аудитории импортированы с помощью простого импортера" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" msgstr "Команды импортированы с помощью простого импортера" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" msgstr "Судьи импортированы с помощью простого импортера" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" msgstr "Судейские баллы обновлены в массовом порядке" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" msgstr "Отредактированы конфликты команд и судей" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" msgstr "Отредактированы конфликты между судьями" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" msgstr "Отредактированы конфликты между судьями и клубами" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" msgstr "Отредактированы конфликты между командами и клубами" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" msgstr "Сгенерированна проверка идентификаторов спикеров" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" msgstr "Сгенерированна проверка идентификаторов судей" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" msgstr "Сгенерированна проверка идентификаторов аудиторий" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" msgstr "Коллегии созданы" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" msgstr "Вес коллегий выставлен" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" msgstr "Важность коллегии изменена" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" msgstr "Судьи распределены по коллегиям" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" msgstr "Судья коллегии изменен (а)" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" msgstr "Коллегии распределены" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" msgstr "тип" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" msgstr "отметка времени" -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "пользователь" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "IP-адрес" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "турнир" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "раунд" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" msgstr "тип контента" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" msgstr "iD объекта" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" msgstr "журнал действий" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" msgstr "записи журнала действий" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." msgstr "Все записи журнала требуют хотя бы одного из пользователей и IP-адреса." -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" msgstr "анонимно" diff --git a/tabbycat/adjallocation/locale/ru/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/ru/LC_MESSAGES/django.po index 5c8c56ee4b0..b022e796e72 100644 --- a/tabbycat/adjallocation/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:08\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." msgstr "Нет доступных судей. Убедитесь, что есть судьи, которые были отмечены как доступные, перед автоматическим распределением судей." -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." @@ -30,7 +30,7 @@ msgstr[1] "Рейтинг %(count)s судей выше, чем максимал msgstr[2] "Рейтинг %(count)s судей выше, чем максимальный допустимый рейтинг судьи (%(score).1f)." msgstr[3] "Рейтинг %(count)s судей выше, чем максимальный допустимый рейтинг судьи (%(score).1f)." -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." @@ -39,50 +39,50 @@ msgstr[1] "Рейтинг %(count)s судей ниже, чем минималь msgstr[2] "Рейтинг %(count)s судей ниже, чем минимальный допустимый рейтинг судьи (%(score).1f)." msgstr[3] "Рейтинг %(count)s судей ниже, чем минимальный допустимый рейтинг судьи (%(score).1f)." -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." msgstr "Нет судей, имеющих право быть чэйром или вингом. Попробуйте изменить \"минимальные баллы по обратной связи, необходимые для того, чтобы быть чэйром или вингом\" на более низкие, чем текущие баллы кого-то из судей и попробуйте снова." -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" msgstr "Нет дебатов для этого раунда. Возможно, вы еще не создали сетку?" -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." msgstr "Есть %(debate_count)s дебатов, но только %(adj_count)s голосующих судей." -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." msgstr "Есть %(panel_debates)s дебатов, но только %(panellists)s доступных вингов (меньше чем %(needed)s)." -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." msgstr "Есть %(debates_count)s дебатов, но только %(voting_count)s голосующих судей." -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" msgstr "Расстановка судей" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." msgstr "Сетка уже опубликована, отмените публикацию для того, чтобы внести изменения в автоматическое распределение." -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." msgstr "Сетка не подтверждена, подтвердите сетку для автоматической расстановки судей." -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." msgstr "Нет заранее сформированных коллегий, которые можно распределить." -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." msgstr "Коллегии распределены." -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" @@ -91,15 +91,15 @@ msgstr[1] "Судьи успешно распределены по дебата msgstr[2] "Судьи успешно распределены по дебатам. Внимание! Предупреждения (%(count)d):" msgstr[3] "Судьи успешно распределены по дебатам. Внимание! Предупреждения (%(count)d):" -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." msgstr "Судьи распределены." -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." msgstr "Нет коллегий для заполнения. Сначала создайте коллегии." -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" @@ -108,261 +108,260 @@ msgstr[1] "Судьи распределены по коллегиям. Вним msgstr[2] "Судьи распределены по коллегиям. Внимание! %(count)d предупреждений:" msgstr[3] "Судьи распределены по коллегиям. Внимание! %(count)d предупреждений:" -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." msgstr "Судьи распределены по коллегиям." -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." msgstr "У вас нет брейковой категории, установленной как \"основная\", так что важность дебатов невозможно подсчитать." -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." msgstr "Приоритет комнат выставлен автоматически." -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." msgstr "У вас нет брейковой категории, установленной как \"основная\", так что важность коллегий невозможно подсчитать." -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." msgstr "Приоритет коллегий выставлен." -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." msgstr "Так как это первый раунд, распределение коллегий не связано с количеством баллов команд и брейковостью румов." -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." msgstr "Сетки на предыдущий раунд нет, поэтому невозможно распределить коллегии исходя из количества баллов команд и брейковости румов." -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." msgstr "Созданы новые коллегии на этот раунд." -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" msgstr "чэйр" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" msgstr "винг" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" msgstr "винг без права голоса" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "дебаты" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "судья" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" msgstr "тип" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" msgstr "доступно?" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" msgstr "судья дебатов" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" msgstr "судьи дебатов" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "команда" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" msgstr "конфликт команд и судей" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" msgstr "конфликты команд и судей" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "судья 1" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "судья 2" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" msgstr "конфликт между судьями" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" msgstr "конфликты между судьями" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" msgstr "клуб" -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" msgstr "конфликт между судьей и клубом" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" msgstr "конфликты между судьями и клубами" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" msgstr "конфликт между командой и клубом" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" msgstr "конфликты между командами и клубами" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "раунд" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" msgstr "значение" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" msgstr "минимальное значение баллов команд" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" msgstr "Установить минимальное значение баллов команд, при котором может судить эта коллегия" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" msgstr "максимальное значение баллов команд" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" msgstr "Установить максимальное значение баллов команд, при котором может судить эта коллегия" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" msgstr "ранг комнаты" -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" msgstr "Порядковый номер коллегии, не используемый в алгоритмах" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" msgstr "брейковость" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" msgstr "Количество категорий, для которых этот рум может быть брейковым" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" msgstr "заранее сформированная коллегия" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" msgstr "заранее сформированные коллегии" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" msgstr "коллегия" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" msgstr "судья коллегии" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" msgstr "судьи коллегии" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." msgstr "Предварительно сформированных коллегий нет. Вы распределяли коллегии для этого раунда? Если нет, попробуйте вместо этого использовать автораспределение судей." -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" msgstr "Заранее сформированные коллегии" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." msgstr "Заранее сформированная коллегия — это группа судей, которая задана для раунда до создания сетки. Вы можете вручную или автоматически распределить эти коллегии по комнатам при распределения судей. Это может ускорить распределение судей или позволить вам создать более сбалансированные коллегии." -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." msgstr "Обратите внимание, что только судьи, которые были отмечены как \"доступные\" для этого раунда, смогут быть распределены на это раунд, поэтому вам может потребоваться заранее отметить их как \"доступных\"." -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" msgstr "Редактировать коллегии для %(round)s" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" msgstr "Конфликт: %(adjudicator)s & %(team)s (личный)" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" msgstr "Конфликт: %(adjudicator)s & %(team)s с клубом %(institution)s" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" msgstr "Конфликт: %(adjudicator1)s & %(adjudicator2)s (личный)" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" msgstr "Конфликт: %(adjudicator1)s & %(adjudicator2)s с клубом %(institution)s" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "Мужской" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" msgstr "Женский" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "Другой" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" msgstr "Неизвестный" -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" msgstr "Редактировать распределение" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" msgstr "Редактировать коллегии судей" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" msgstr "Вернуться к обзору коллегий" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" msgstr "Конфликты команд и судей" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" msgstr "Сохранить конфликты команд и судей" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." @@ -371,7 +370,7 @@ msgstr[1] "Сохранены %(count)d конфликты между судья msgstr[2] "Сохранены %(count)d конфликты между судьями и командами." msgstr[3] "Сохранены %(count)d конфликты между судьями и командами." -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." @@ -380,19 +379,19 @@ msgstr[1] "Удалены %(count)d конфликты между судьями msgstr[2] "Удалены %(count)d конфликты между судьями и командами." msgstr[3] "Удалены %(count)d конфликты между судьями и командами." -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." msgstr "Не было внесено никаких изменений в конфликты между судьями и командами." -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" msgstr "Конфликты между судьями" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" msgstr "Сохранить конфликты между судьями" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." @@ -401,7 +400,7 @@ msgstr[1] "Сохранены %(count)d конфликты между судья msgstr[2] "Сохранены %(count)d конфликты между судьями." msgstr[3] "Сохранены %(count)d конфликты между судьями." -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." @@ -410,19 +409,19 @@ msgstr[1] "Удалены %(count)d конфликты между судьями msgstr[2] "Удалены %(count)d конфликты между судьями." msgstr[3] "Удалены %(count)d конфликты между судьями." -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." msgstr "Не было внесено никаких изменений в конфликты между судьями." -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" msgstr "Конфликты между судьями и клубами" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" msgstr "Сохранить конфликты между судьями и клубами" -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." @@ -431,7 +430,7 @@ msgstr[1] "Сохранено конфликтов между судьями и msgstr[2] "Сохранено конфликтов между судьями и клубами: %(count)d." msgstr[3] "Сохранено конфликтов между судьями и клубами: %(count)d." -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." @@ -440,19 +439,19 @@ msgstr[1] "Удалено конфликтов между судьями и кл msgstr[2] "Удалено конфликтов между судьями и клубами: %(count)d." msgstr[3] "Удалено конфликтов между судьями и клубами: %(count)d." -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." msgstr "Не было внесено никаких изменений в конфликты между судьями и клубами." -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" msgstr "Конфликты между командами и клубами" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" msgstr "Сохранить конфликты между командами и клубами" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." @@ -461,7 +460,7 @@ msgstr[1] "Сохранено конфликтов между командами msgstr[2] "Сохранено конфликтов между командами и клубами: %(count)d." msgstr[3] "Сохранено конфликтов между командами и клубами: %(count)d." -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." @@ -470,7 +469,7 @@ msgstr[1] "Удалено конфликтов между командами и msgstr[2] "Удалено конфликтов между командами и клубами: %(count)d." msgstr[3] "Удалено конфликтов между командами и клубами: %(count)d." -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." msgstr "Не было внесено никаких изменений в конфликты между командами и клубами." diff --git a/tabbycat/adjfeedback/locale/ru/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/ru/LC_MESSAGES/django.po index 8aa30a339eb..fdc051e1f22 100644 --- a/tabbycat/adjfeedback/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:47\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -17,40 +17,40 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:44 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" msgstr "Целые шкалы должны иметь минимум и максимум" -#: adjfeedback/admin.py:73 adjfeedback/admin.py:139 +#: adjfeedback/admin.py msgid "target" msgstr "цель" -#: adjfeedback/admin.py:74 adjfeedback/admin.py:140 adjfeedback/models.py:236 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" msgstr "судья-источник" -#: adjfeedback/admin.py:75 adjfeedback/admin.py:141 adjfeedback/models.py:238 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" msgstr "команда-источник" -#: adjfeedback/admin.py:91 -#, python-format -msgid "%(timestamp)s (version %(version)s)" -msgstr "" - -#: adjfeedback/admin.py:96 +#: adjfeedback/admin.py msgid "Target" msgstr "Цель" -#: adjfeedback/admin.py:97 adjfeedback/admin.py:162 +#: adjfeedback/admin.py msgid "Source" msgstr "Источник" -#: adjfeedback/admin.py:98 +#: adjfeedback/admin.py msgid "Feedback timestamp and version" msgstr "" -#: adjfeedback/admin.py:180 +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." @@ -59,7 +59,7 @@ msgstr[1] "%(count)d переданных форм обратной связи msgstr[2] "%(count)d переданных форм обратной связи не были отмечены как подтвержденные. Заметьте, что это может привести к тому, что остальные формы обратной связи не будут отмечены как подтвержденные." msgstr[3] "%(count)d переданных форм обратной связи не были отмечены как подтвержденные. Заметьте, что это может привести к тому, что остальные формы обратной связи не будут отмечены как подтвержденные." -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." @@ -68,7 +68,7 @@ msgstr[1] "%(count)d переданных форм обратной связи msgstr[2] "%(count)d переданных форм обратной связи не были отмечены как подтвержденные, возможно, потому, что были переданы противоречащие им формы обратной связи, которые были отмечены как подтвержденные." msgstr[3] "%(count)d переданных форм обратной связи не были отмечены как подтвержденные, возможно, потому, что были переданы противоречащие им формы обратной связи, которые были отмечены как подтвержденные." -#: adjfeedback/admin.py:205 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." @@ -77,7 +77,7 @@ msgstr[1] "%(count)d переданных форм обратной связи msgstr[2] "%(count)d переданных форм обратной связи были отмечены как неподтвержденные." msgstr[3] "%(count)d переданных форм обратной связи были отмечены как неподтвержденные." -#: adjfeedback/admin.py:215 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." @@ -86,7 +86,7 @@ msgstr[1] "%(count)d переданных форм обратной связи msgstr[2] "%(count)d переданных форм обратной связи теперь игнорируются." msgstr[3] "%(count)d переданных форм обратной связи теперь игнорируются." -#: adjfeedback/admin.py:225 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." @@ -95,399 +95,398 @@ msgstr[1] "%(count)d переданных форм обратной связи msgstr[2] "%(count)d переданных форм обратной связи теперь приняты." msgstr[3] "%(count)d переданных форм обратной связи теперь приняты." -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" msgstr "Форма обратной связи на судью" -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "chair" msgstr "чэйр" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "solo" msgstr "одиночно" -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "panellist" msgstr "винг" -#: adjfeedback/forms.py:29 +#: adjfeedback/forms.py msgid "trainee" msgstr "винг без права голоса" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:57 +#: adjfeedback/forms.py msgid "Yes" msgstr "Да" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:59 +#: adjfeedback/forms.py msgid "No" msgstr "Нет" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:74 adjfeedback/forms.py:83 +#: adjfeedback/forms.py msgid "This field is required." msgstr "Это поле является обязательным." -#: adjfeedback/forms.py:164 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" msgstr "Общий балл (%(min)d=минимальный, %(max)d=максимальный)*" -#: adjfeedback/forms.py:176 +#: adjfeedback/forms.py msgid "Ignored" msgstr "Проигнорированна" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:228 adjfeedback/forms.py:291 +#: adjfeedback/forms.py msgid "Submitted - " msgstr "" #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:229 adjfeedback/forms.py:296 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" msgstr "%(name)s (%(adjpos)s)" -#: adjfeedback/forms.py:252 adjfeedback/forms.py:326 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "-- Судьи --" -#: adjfeedback/forms.py:269 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" msgstr "Судья, на которого эта форма" -#: adjfeedback/forms.py:293 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "" -#: adjfeedback/forms.py:299 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" msgstr "%(name)s (чэйр дал устный разбор)" -#: adjfeedback/forms.py:301 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" msgstr "%(name)s (этот член коллегии давал разбор вместо чеира)" -#: adjfeedback/forms.py:392 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" msgstr "Эта строка (для %(adjudicator)s) не имеет балла" -#: adjfeedback/forms.py:397 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" msgstr "Эта строка (для %(adjudicator)s) имеет слишком много столбцов" -#: adjfeedback/forms.py:410 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." msgstr "Существует несколько судей, называемых \"%(adjudicator)s\", поэтому вы не можете использовать импортер для обновления их баллов. Пожалуйста, сделайте это на странице Обзор обратной связи." -#: adjfeedback/forms.py:416 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" msgstr "В этом турнире нет судьи с именем \"%(adjudicator)s\"" -#: adjfeedback/forms.py:424 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" msgstr "Балл для %(adjudicator)s, \"%(score)s\", не является числом" -#: adjfeedback/forms.py:439 +#: adjfeedback/forms.py msgid "There were no scores to import." msgstr "Не было баллов для импорта." -#: adjfeedback/models.py:13 adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator" msgstr "судья" -#: adjfeedback/models.py:16 +#: adjfeedback/models.py msgid "round" msgstr "раунд" -#: adjfeedback/models.py:17 adjfeedback/models.py:232 +#: adjfeedback/models.py msgid "score" msgstr "балл" -#: adjfeedback/models.py:18 +#: adjfeedback/models.py msgid "timestamp" msgstr "отметка времени" -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score history" msgstr "история изменений исходного рейтинга судьи" -#: adjfeedback/models.py:22 +#: adjfeedback/models.py msgid "adjudicator base score histories" msgstr "история изменений исходного рейтинга судей" -#: adjfeedback/models.py:30 +#: adjfeedback/models.py msgid "question" msgstr "вопрос" -#: adjfeedback/models.py:32 +#: adjfeedback/models.py msgid "feedback" msgstr "обратная связь" -#: adjfeedback/models.py:45 adjfeedback/models.py:55 adjfeedback/models.py:65 -#: adjfeedback/models.py:74 +#: adjfeedback/models.py msgid "answer" msgstr "ответ" -#: adjfeedback/models.py:48 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" msgstr "булевой ответ формы обратной связи на судью" -#: adjfeedback/models.py:49 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" msgstr "булевые ответы формы обратной связи на судью" -#: adjfeedback/models.py:58 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" msgstr "целый ответ формы обратной связи на судью" -#: adjfeedback/models.py:59 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" msgstr "целые ответы формы обратной связи на судей" -#: adjfeedback/models.py:68 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" msgstr "численный ответ формы обратной связи на судью" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" msgstr "численные ответы формы обратной связи на судью" -#: adjfeedback/models.py:77 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" msgstr "строчный ответ формы обратной связи на судью" -#: adjfeedback/models.py:78 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" msgstr "строчные ответ формы обратной связи на судью" -#: adjfeedback/models.py:86 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answer" msgstr "" -#: adjfeedback/models.py:87 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answers" msgstr "" -#: adjfeedback/models.py:106 +#: adjfeedback/models.py msgid "checkbox" msgstr "отметка" -#: adjfeedback/models.py:107 +#: adjfeedback/models.py msgid "yes/no (dropdown)" msgstr "да/нет (выпадающий список)" -#: adjfeedback/models.py:108 +#: adjfeedback/models.py msgid "integer (textbox)" msgstr "целое число (текстовое поле)" -#: adjfeedback/models.py:109 +#: adjfeedback/models.py msgid "integer scale" msgstr "целое число" -#: adjfeedback/models.py:110 +#: adjfeedback/models.py msgid "float" msgstr "десятичное число" -#: adjfeedback/models.py:111 adjfeedback/models.py:145 +#: adjfeedback/models.py msgid "text" msgstr "текст" -#: adjfeedback/models.py:112 +#: adjfeedback/models.py msgid "long text" msgstr "длинный текст" -#: adjfeedback/models.py:113 +#: adjfeedback/models.py msgid "select one" msgstr "выберите один" -#: adjfeedback/models.py:114 +#: adjfeedback/models.py msgid "select multiple" msgstr "выбрать несколько" -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "tournament" msgstr "турнир" -#: adjfeedback/models.py:143 +#: adjfeedback/models.py msgid "sequence number" msgstr "порядковый номер" -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" msgstr "Вопрос, который отображается участникам, например, \"Вы согласны с решением?\"" -#: adjfeedback/models.py:148 +#: adjfeedback/models.py msgid "name" msgstr "название" -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" msgstr "Краткое название вопроса, например, \"Согласие с решением\"" -#: adjfeedback/models.py:151 +#: adjfeedback/models.py msgid "reference" msgstr "ссылка" -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" msgstr "Совместимая с кодом ссылка, например, \"согласны__с_решением\"" -#: adjfeedback/models.py:155 +#: adjfeedback/models.py msgid "from adjudicator" msgstr "от судьи" -#: adjfeedback/models.py:156 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" msgstr "Судьям следует задавать этот вопрос (о других судьях)" -#: adjfeedback/models.py:158 +#: adjfeedback/models.py msgid "from team" msgstr "от команды" -#: adjfeedback/models.py:159 +#: adjfeedback/models.py msgid "Teams should be asked this question" msgstr "Командам нужно задать этот вопрос" -#: adjfeedback/models.py:162 +#: adjfeedback/models.py msgid "answer type" msgstr "тип ответа" -#: adjfeedback/models.py:164 +#: adjfeedback/models.py msgid "required" msgstr "обязательно" -#: adjfeedback/models.py:165 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" msgstr "Необходимо ли участникам заполнить это поле" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "minimum value" msgstr "минимальное значение" -#: adjfeedback/models.py:168 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "Минимальное допустимое значение для числовых полей (игнорируется для текстовых или булевых полей)" -#: adjfeedback/models.py:170 +#: adjfeedback/models.py msgid "maximum value" msgstr "максимальное значение" -#: adjfeedback/models.py:171 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "Максимальное допустимое значение для числовых полей (игнорируется для текстовых или булевых полей)" -#: adjfeedback/models.py:176 +#: adjfeedback/models.py msgid "choices" msgstr "выборы" -#: adjfeedback/models.py:177 +#: adjfeedback/models.py msgid "Permissible choices for select one/multiple fields (ignored for other fields)" msgstr "" -#: adjfeedback/models.py:182 +#: adjfeedback/models.py msgid "adjudicator feedback question" msgstr "вопрос обратной связи" -#: adjfeedback/models.py:183 +#: adjfeedback/models.py msgid "adjudicator feedback questions" msgstr "вопросы обратной связи" -#: adjfeedback/models.py:241 adjfeedback/views.py:768 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" msgstr "проигнорированна" -#: adjfeedback/models.py:242 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" msgstr "Должна ли обратная связь повлиять на оценку судьи" -#: adjfeedback/models.py:246 +#: adjfeedback/models.py msgid "adjudicator feedback" msgstr "форма обратной связи на судью" -#: adjfeedback/models.py:247 +#: adjfeedback/models.py msgid "adjudicator feedbacks" msgstr "формы обратной связи на судью" -#: adjfeedback/models.py:307 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." msgstr "Не указан либо судья-источник, либо команда-источник." -#: adjfeedback/models.py:310 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." msgstr "Есть и судья-источник и команда-источник." -#: adjfeedback/models.py:312 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" msgstr "В этой форме обратной связи ни указан ни один судья. Возможно, они были удалены?" -#: adjfeedback/models.py:314 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." msgstr "Судья не видел этих дебатов." -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" msgstr "Был ли судья отмечен как брейкающийся (нажмите чтобы отметить)" -#: adjfeedback/tables.py:35 +#: adjfeedback/tables.py msgid "N/A" msgstr "Н/Д" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py msgid "Current weighted score" msgstr "Текущий взвешенный балл" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." msgstr "Текущий рейтинг этого судьи." -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" msgstr "Исходный рейтинг" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" msgstr "Щелкните, чтобы изменить исходный рейтинг" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" msgstr "Исходный рейтинг" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" msgstr "Различие между исходным и текущим рейтингом судьи" -#: adjfeedback/tables.py:84 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" msgstr "Различие между исходным и текущим рейтингом этого судьи" -#: adjfeedback/tables.py:93 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." msgstr "Стандартное отклонение текущих оценок этого судьи; более большие числа означают менее последовательные оценки в обратной связи." -#: adjfeedback/tables.py:97 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" msgstr "Стандартное отклонение текущих оценок этого судьи" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Feedback Per Round" msgstr "Обратная связь за раунд" -#: adjfeedback/tables.py:107 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" msgstr "Наведите на числовые данных, чтобы показать средний результат, полученный в этом раунде" -#: adjfeedback/tables.py:125 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" @@ -496,220 +495,218 @@ msgstr[1] "Посмотреть%(count)s
    обратную связь" msgstr[2] "Посмотреть%(count)s
    обратную связь" msgstr[3] "Посмотреть%(count)s
    обратную связь" -#: adjfeedback/tables.py:148 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" msgstr "Не отправленные формы обратной связи" -#: adjfeedback/tables.py:172 +#: adjfeedback/tables.py msgid "View Missing Feedback" msgstr "Посмотреть, какие формы обратной связи отсутствуют" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" msgstr "От кого эта форма?" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" msgstr "Введите обратную связь" -#: adjfeedback/templates/enter_feedback.html:9 -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format msgid "Add Feedback from %(name)s" msgstr "Добавить обратную связь от %(name)s" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" msgstr "Добавить обратную связь" -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" msgstr "Нет возможностей сдать обратную связь, так как ни один раунд ни опубликован. Вернитесь сюда, когда они будут опубликованы!" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." msgstr "Этот турнир ожидает, что вы отправите обратную связь только на судью, который вынес решение. Не отправляйте обратную связь на других судей." -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." msgstr "Этот турнир ожидает, что вы представите обратную связь о всех судьях коллегии (включая вингов без права голоса)." -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." msgstr "Есть проблемы с отправкой этой формы обратной связи. Пожалуйста, проверьте и исправьте их." -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "При отправке этой формы ваш IP-адрес будет сохраняться в целях авторизации." -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" msgstr "Обзор" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" msgstr "Последние" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" msgstr "Неотправленные" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" msgstr "Важное" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" msgstr "Комментарии" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" msgstr "По источнику" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" msgstr "По цели" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" msgstr "Массово обновить рейтинг" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" msgstr "Обратная связь %(source_type)s %(source_name)s" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." msgstr "%(source_name)s ещё не оставил обратную связь." -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." msgstr "%(source_name)s ещё не получил обратную связь." -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." msgstr "Это скорее всего потому, что команда или судья, которая представила эту обратную связь, несколько раз представила её на одно и том же лицо; или потому, что команда представила обратную связь на нескольких членов судейской коллегии (а не только на того, кто давал разбор)." -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." msgstr "Не потверждено; не повлияет на оценку этого судьи." -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." msgstr "Обратная связь подсчитывается для этого судьи, но не учитывается при расчете баллов." -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." msgstr "Проигнорировано; не повлияет на оценку этого судьи." -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." msgstr "Эта форма обратной связи отправлена на судью, но, похоже, он был удален из этих дебатов. Возможно, вы должны перейти в область Редактировать базу данных и удалить этот отзыв." -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." msgstr "Оценка, указанная в этой части формы обратной связи." -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" msgstr "%(round)s %(score)s" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "On %(adjudicator)s" msgstr "На %(adjudicator)s" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" -msgstr " Получено как %(as)s" +msgid "Received as %(as_type)s" +msgstr "" -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" msgstr "От %(source)s их %(relationship)s" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" msgstr "От %(source)s %(relationship)s от %(side)s" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" msgstr "От неизвестного" -#: adjfeedback/templates/feedback_card.html:88 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "%(time)s" -#: adjfeedback/templates/feedback_card.html:93 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." msgstr "Не подтвержденная обратная связь не считается поданной и не влияет на оценку этого судьи." -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" msgstr "Отменить подтверждение" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" msgstr "Подтвердить" -#: adjfeedback/templates/feedback_card.html:103 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." msgstr "Игнорируемая обратная связь считается поданной, но не влияет на оценку этого судьи." -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" msgstr "Не игнорировать" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" msgstr "Игнорировать" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" msgstr "Ни одна форма обратной связи пока не отправлена" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" msgstr "%(c_breaking)s отмечен как брейкающийся" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." msgstr "Текущая настройка форм обратной связи позволяет только чэйрам предоставлять обратную связь (на их вингов и вингов без права голоса)." -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." msgstr "" -#: adjfeedback/templates/feedback_overview.html:18 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:22 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." msgstr "Текущая настройка форм обратной связи позволяет всем судьям (включая вингов без права голоса) предоставлять обратную связь на всех членов судейской коллегии (включая вингов без права голоса)." -#: adjfeedback/templates/feedback_overview.html:30 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." @@ -718,7 +715,7 @@ msgstr[1] "Есть %(nadjs_outside_range)s судей с ба msgstr[2] "Есть %(nadjs_outside_range)s судей с баллами выходящими за пределы разрешенного диапазона судейских баллов, который установлен от %(min_score)s до %(max_score)s. Это может привести к сбоям в автоматическом распределении судей. Если вы хотите использовать более широкий диапазон, вы можете настроить его в настройках обратной связи." msgstr[3] "Есть %(nadjs_outside_range)s судей с баллами выходящими за пределы разрешенного диапазона судейских баллов, который установлен от %(min_score)s до %(max_score)s. Это может привести к сбоям в автоматическом распределении судей. Если вы хотите использовать более широкий диапазон, вы можете настроить его в настройках обратной связи." -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." @@ -727,29 +724,29 @@ msgstr[1] "%(count)s судей имеют балл равный или боль msgstr[2] "%(count)s судей имеют балл равный или больший %(min)s и ниже %(max)s. Это %(percent)s %% судейского пула." msgstr[3] "%(count)s судей имеют балл равный или больший %(min)s и ниже %(max)s. Это %(percent)s %% судейского пула." -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" msgstr "Распределение баллов (диапазон: %(min_score)s–%(max_score)s)" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" msgstr "Обратная связь" -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." msgstr "Доля балла судьи, определяемая обратной связью и тестом, устанавливается на каждый раунд. Нажмите на эту ссылку и отредактируйте поле \"вес обратной связи\", чтобы изменить это соотношение для %(round)s." -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" msgstr "Рейтинг баллов" -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." @@ -758,7 +755,7 @@ msgstr[1] "Есть %(c_chairs)s дебатов в этом раунде, так msgstr[2] "Есть %(c_chairs)s дебатов в этом раунде, так что должно быть %(c_chairs)s чэйров." msgstr[3] "Есть %(c_chairs)s дебатов в этом раунде, так что должно быть %(c_chairs)s чэйров." -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." @@ -767,7 +764,7 @@ msgstr[1] "Есть %(c_debates)s дебатов в этом раунде, но msgstr[2] "Есть %(c_debates)s дебатов в этом раунде, но только %(c_chairs)s, имеющих балл выше минимально допустимого для голосования." msgstr[3] "Есть %(c_debates)s дебатов в этом раунде, но только %(c_chairs)s, имеющих балл выше минимально допустимого для голосования." -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" @@ -776,11 +773,11 @@ msgstr[1] "%(c_chairs)s чэйры" msgstr[2] "%(c_chairs)s чэйры" msgstr[3] "%(c_chairs)s чэйры" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." msgstr "Все судьи, чей рейтинг достаточен для того, чтобы иметь право голоса, но недостаточен, чтобы быть назначенным чэйром, буду автоматически назначены вингами." -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" @@ -789,12 +786,12 @@ msgstr[1] "%(c_panellists)s винги" msgstr[2] "%(c_panellists)s винги" msgstr[3] "%(c_panellists)s винги" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." msgstr "Судьи автоматически распределяются как винги без права голоса, если их балл меньше чем \"минимальный балл для права голоса\" (текущий %(min_voting)s установлен в настройках сетки этого турнира)." -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" @@ -803,77 +800,76 @@ msgstr[1] "%(c_trainees)s винги без права голоса" msgstr[2] "%(c_trainees)s винги без права голоса" msgstr[3] "%(c_trainees)s винги без права голоса" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" msgstr "Автораспределение (%(min_voting_score)s+для голосования)" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" msgstr "Изменить исходный рейтинг" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." msgstr "Диапазон баллов для судей между %(pref.adj_min_score)s и %(pref.adj_max_score)s. Десятичные оценки разрешены. Это можно настроить в настройках обратной связи." -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." msgstr "Минимальный балл, необходимый для того чтобы автоматически быть распределенным как винг или чэйр %(min_voting_score)s. Это может быть настроено в настройках сетки." -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" msgstr "Исходный рейтинг" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" msgstr "Сохранить исходный рейтинг" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" msgstr "Кто вы?" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" msgstr "нажмите на ваше имя или команду в этом списке" -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" msgstr "Обновить баллы для судей" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." msgstr "На этом турнире нет судей, поэтому вы не можете обновить какие-либо оценки. Вы можете сначала импортировать некоторых судей." -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" msgstr "Вставьте список имен судей и их новых оценок в формате: судья,балл. Например:" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." msgstr "Имена судей должны точно соответствовать их именам в тэбе." -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" msgstr "Есть некоторые проблемы с данными в этой форме:" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" msgstr "Отправить" -#: adjfeedback/views.py:118 +#: adjfeedback/views.py msgid "Feedback Overview" msgstr "Обзор обратной связи" -#: adjfeedback/views.py:142 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" msgstr "Найти обратную связь на судью" -#: adjfeedback/views.py:153 adjfeedback/views.py:177 adjfeedback/views.py:192 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" @@ -882,90 +878,90 @@ msgstr[1] "%(count)d обратная связь" msgstr[2] "%(count)d обратная связь" msgstr[3] "%(count)d обратная связь" -#: adjfeedback/views.py:156 adjfeedback/views.py:182 adjfeedback/views.py:197 +#: adjfeedback/views.py msgid "Feedbacks" msgstr "Обратная связь" -#: adjfeedback/views.py:163 +#: adjfeedback/views.py msgid "Find Feedback" msgstr "Найти обратную связь" -#: adjfeedback/views.py:171 adjfeedback/views.py:710 +#: adjfeedback/views.py msgid "From Teams" msgstr "От команд" -#: adjfeedback/views.py:186 adjfeedback/views.py:704 +#: adjfeedback/views.py msgid "From Adjudicators" msgstr "От судей" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "Latest Feedback" msgstr "Последняя обратная связь" -#: adjfeedback/views.py:272 +#: adjfeedback/views.py msgid "(30 most recent)" msgstr "(30 последних)" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "Only Comments" msgstr "Только комментарии" -#: adjfeedback/views.py:283 +#: adjfeedback/views.py msgid "(250 most recent)" msgstr "(250 последних)" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "Important Feedback" msgstr "Важная форма обратной связи" -#: adjfeedback/views.py:295 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" msgstr "(рейтинг был гораздо выше/ниже, чем ожидалось)" -#: adjfeedback/views.py:362 +#: adjfeedback/views.py msgid "A Team" msgstr "Команда" -#: adjfeedback/views.py:367 +#: adjfeedback/views.py msgid "Team" msgstr "Команда" -#: adjfeedback/views.py:374 adjfeedback/views.py:391 +#: adjfeedback/views.py msgid "Institution" msgstr "Клуб" -#: adjfeedback/views.py:377 +#: adjfeedback/views.py msgid "An Adjudicator" msgstr "Судья" -#: adjfeedback/views.py:384 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "Судьяя" -#: adjfeedback/views.py:511 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." msgstr "Обратная связь от %(source)s на %(target)s добавлена." -#: adjfeedback/views.py:541 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." msgstr "Спасибо, %(source)s! Ваша обратная связь на %(target)s была записана." -#: adjfeedback/views.py:625 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" msgstr "Упс! Я не узнал, этого судью: %(adjudicator)s" -#: adjfeedback/views.py:648 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." msgstr "Упс! Это значение исходного рейтинга не является допустимым." -#: adjfeedback/views.py:675 +#: adjfeedback/views.py msgid "Feedback Progress" msgstr "Прогресс отправки форм обратной связи" -#: adjfeedback/views.py:696 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" @@ -974,24 +970,24 @@ msgstr[1] "%(nmissing)d оправка отсутствующей обратно msgstr[2] "%(nmissing)d оправка отсутствующей обратной связи (%(fulfilled).1f%% возвращена)" msgstr[3] "%(nmissing)d оправка отсутствующей обратной связи (%(fulfilled).1f%% возвращена)" -#: adjfeedback/views.py:741 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." msgstr "Обратная связь на %(adjudicator)s от %(source)s составляет %(result)s." -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "confirmed" msgstr "подтвержденные" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "un-confirmed" msgstr "не подтверждено" -#: adjfeedback/views.py:768 +#: adjfeedback/views.py msgid "un-ignored" msgstr "не-игнорированно" -#: adjfeedback/views.py:804 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." diff --git a/tabbycat/availability/locale/ru/LC_MESSAGES/django.po b/tabbycat/availability/locale/ru/LC_MESSAGES/django.po index 9fc7a172c36..47567208de5 100644 --- a/tabbycat/availability/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:07\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -17,93 +17,85 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" msgstr "Доступность" -#: availability/models.py:15 +#: availability/models.py msgid "content type" msgstr "тип контента" -#: availability/models.py:16 +#: availability/models.py msgid "object id" msgstr "id объекта" -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "раунд" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" msgstr "доступность раунда" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" msgstr "доступности раунда" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" msgstr "Отметить всех брейкающихся судей как доступных" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" msgstr "Отметить всех как доступных" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" msgstr "Скопировать доступность из %(prev_round)s" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" msgstr "Посмотреть сетку" -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" msgstr "%(previous_unconfirmed)s дебаты из %(round)s не имею заполненного бэллота - это может привести к сбоям или неправильной сетке" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" msgstr "Создать сетку" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." msgstr "Сетка не может быть сгенерирована, пока какие-то команды не отмечены как доступные." -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." msgstr "Сетка не может быть сгенерирована, пока какие-то судьи не отмечены как доступные." -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." msgstr "Сетка не может быть сгенерирована, пока какие-то аудитории не отмечены как доступные." -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." msgstr "Недостаточно аудиторий, отмеченных как доступные - сетка не может быть сгенерирована." -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." msgstr "Недостаточно судей, отмеченных как доступные - сетка не может быть сгенерирована." -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." msgstr "Количество команд, отмеченных как доступные, некратное — сетка не может быть сгенерирована." -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." msgstr "Количество команд, отмеченных как доступные, некратно четырем — сетка не может быть сгенерирована." -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " @@ -112,98 +104,98 @@ msgstr[1] "%(previous_unconfirmed)s Дебаты %(prev_round)s не и msgstr[2] "%(previous_unconfirmed)s Дебаты %(prev_round)s не имеют заполненного бэллота. Это может привести к сбоям при создании сетки или её неточности, в зависимости от правил создания сетки. Введите результаты %(prev_round)s" msgstr[3] "%(previous_unconfirmed)s Дебаты %(prev_round)s не имеют заполненного бэллота. Это может привести к сбоям при создании сетки или её неточности, в зависимости от правил создания сетки. Введите результаты %(prev_round)s" -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " msgstr "Эта страница для %(round)s, но предыдущий раунд ещё не отмечен как завершенный. Возможно, вы забыли отметить %(prev_round)s как законченный?" -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." msgstr "Это первый раунд, но его тип сетки %(draw_type)s. Хотели бы вы, чтобы вместо этого он был случайным? Вы можете изменить тип сетки на этот раунд в области Редактировать базу данных." -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." msgstr "Это брейковый раунд, но для него не установлена брейковая категория. Брейковые раунды должны быть ассоциированы с брейковой категорией. Пожалуйста, установите брейковую категорию этого раунда в области Редактировать базу данных." -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." msgstr "Это брейковый раунд, но его сетка %(draw_type)s. Тип сетки на брейковые раунды должен быть \"Брейковые\". Пожалуйста, измените тип сетки для этого раунда в области в области Редактировать базу данных." -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" msgstr "Похоже, что в un %(break_category)s unnamed@@1 нет команд, которые брейкаются. Вы уже создали брейк для %(break_category)s ?" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." msgstr "Есть только одна команда, брейкающаяся в %(break_category)s брейке. Вы не можете создать сетку на брейковый раунд только с одной командой - возможно, вы захотите ещё раз посмотреть брейк %(break_category)s." -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." msgstr "Первенство положения команд пустует. Это означает, что команды не ранжированы ни по одной метрике, то есть все команды будут в одной группе. Если это не то, что вы хотели, установите первенство положения команд в области Положение настроек турнира до создания сетки. Для большинства турниров первой метрикой будет количество баллов или побед." -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" msgstr "Выбрать Все" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" msgstr "Сбросить выбор" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" msgstr "Регистрации" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" msgstr "Проверить во всех брейках" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" msgstr "Копировать из предыдущего" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" msgstr "Сохранить выбранное" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "Команды" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "Судьи" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" msgstr "Аудитории" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" msgstr "Отметить команду как доступную" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" msgstr "Не нужно устанавливать доступность команды" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." msgstr "Количество команд, отмеченных как доступные для этого раунда, некратное." -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." msgstr "Количество команд, отмеченных как доступные для этого раунда, некратное четырем." -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" msgstr "Редактировать доступность команд" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." @@ -212,7 +204,7 @@ msgstr[1] "%(count)s судей не привязаны к какому-либо msgstr[2] "%(count)s судей не привязаны к какому-либо турниру. Укажите турнир в поле \"Турнир\" в области Редактировать базу данных, если вы хотите отметить этих судей как доступных." msgstr[3] "%(count)s судей не привязаны к какому-либо турниру. Укажите турнир в поле \"Турнир\" в области Редактировать базу данных, если вы хотите отметить этих судей как доступных." -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." @@ -221,7 +213,7 @@ msgstr[1] "%(count)s судьи, которые были недоступны д msgstr[2] "%(count)s судьи, которые были недоступны для прошлого раунда, доступны для этого раунда." msgstr[3] "%(count)s судьи, которые были недоступны для прошлого раунда, доступны для этого раунда." -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" @@ -230,7 +222,7 @@ msgstr[1] "Следующие %(count)s судьи, который был нед msgstr[2] "Следующие %(count)s судьи, который был недоступны для прошлого раунда, доступны для этого раунда: %(adjs_list)s" msgstr[3] "Следующие %(count)s судьи, который был недоступны для прошлого раунда, доступны для этого раунда: %(adjs_list)s" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." @@ -239,7 +231,7 @@ msgstr[1] "%(count)s судьи, которые были доступны для msgstr[2] "%(count)s судьи, которые были доступны для прошлого раунда, недоступны для этого раунда." msgstr[3] "%(count)s судьи, которые были доступны для прошлого раунда, недоступны для этого раунда." -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" @@ -248,12 +240,12 @@ msgstr[1] "Следующие %(count)s судьи, которые были до msgstr[2] "Следующие %(count)s судьи, которые были доступны для прошлого раунда, недоступны для этого раунда: %(adjs_list)s" msgstr[3] "Следующие %(count)s судьи, которые были доступны для прошлого раунда, недоступны для этого раунда: %(adjs_list)s" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" msgstr "Отметить судей как доступных" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." @@ -262,11 +254,11 @@ msgstr[1] "Должно быть хотя бы %(required_count)s судей, о msgstr[2] "Должно быть хотя бы %(required_count)s судей, отмеченных как доступные, учитывая количество дебатов в этом раунде." msgstr[3] "Должно быть хотя бы %(required_count)s судей, отмеченных как доступные, учитывая количество дебатов в этом раунде." -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" msgstr "Редактировать доступность судей" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." @@ -275,7 +267,7 @@ msgstr[1] "%(count)s аудитории, которые были недосту msgstr[2] "%(count)s аудитории, которые были недоступны в прошлом раунде, доступны для этого раунда." msgstr[3] "%(count)s аудитории, которые были недоступны в прошлом раунде, доступны для этого раунда." -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" @@ -284,7 +276,7 @@ msgstr[1] "Следующие %(count)s аудитории, которая бы msgstr[2] "Следующие %(count)s аудитории, которая была недоступны в прошлом раунде, доступны для этого раунда: %(rooms_list)s" msgstr[3] "Следующие %(count)s аудитории, которая была недоступны в прошлом раунде, доступны для этого раунда: %(rooms_list)s" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." @@ -293,7 +285,7 @@ msgstr[1] "%(count)s аудитории, которые были доступн msgstr[2] "%(count)s аудитории, которые были доступны в прошлом раунде, недоступны для этого раунда." msgstr[3] "%(count)s аудитории, которые были доступны в прошлом раунде, недоступны для этого раунда." -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" @@ -302,7 +294,7 @@ msgstr[1] "Следующие %(count)s аудитории, которые бы msgstr[2] "Следующие %(count)s аудитории, которые были доступны в прошлом раунде, недоступны для этого раунда: %(rooms_list)s" msgstr[3] "Следующие %(count)s аудитории, которые были доступны в прошлом раунде, недоступны для этого раунда: %(rooms_list)s" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." @@ -311,12 +303,12 @@ msgstr[1] "%(count)s аудитории не привязаны какому-л msgstr[2] "%(count)s аудитории не привязаны какому-либо турниру. Укажите турнир в поле \"Турнир\" в области Редактировать базу данных, если вы хотите отметить эти аудитории как доступные." msgstr[3] "%(count)s аудитории не привязаны какому-либо турниру. Укажите турнир в поле \"Турнир\" в области Редактировать базу данных, если вы хотите отметить эти аудитории как доступные." -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" msgstr "Отметить аудитории как доступные" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." @@ -325,16 +317,16 @@ msgstr[1] "Должно быть хотя бы %(required_count)s аудитор msgstr[2] "Должно быть хотя бы %(required_count)s аудиторий, отмеченных как доступные учитывая количество дебатов в этом раунде." msgstr[3] "Должно быть хотя бы %(required_count)s аудиторий, отмеченных как доступные учитывая количество дебатов в этом раунде." -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" msgstr "Редактировать доступность аудиторий" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" msgstr "нет команд" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" @@ -344,7 +336,7 @@ msgstr[2] "%(nteams)d брейкающихся команд - дебаты не msgstr[3] "%(nteams)d брейкающихся команд - дебаты не могут произойти" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" @@ -356,7 +348,7 @@ msgstr[3] "%(ndebating)d брейкающихся команд играют в #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" @@ -366,7 +358,7 @@ msgstr[2] "%(nbypassing)d команды проходят его" msgstr[3] "%(nbypassing)d команды проходят его" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" @@ -375,60 +367,60 @@ msgstr[1] "%(nadvancing)s команд, которые могут пройти msgstr[2] "%(nadvancing)s команд, которые могут пройти дальше, играют в этом раунде" msgstr[3] "%(nadvancing)s команд, которые могут пройти дальше, играют в этом раунде" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" msgstr "Сейчас активны" -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" msgstr "Активно в %(prev_round)s" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" msgstr "Зарегистрированы" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" msgstr "Доступность команд" -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" msgstr "Доступность судей" -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" msgstr "Доступность аудиторий" -#: availability/views.py:260 +#: availability/views.py msgid "Room" msgstr "Аудитория" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" msgstr "Показать название (для сетки)" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" msgstr "Категории" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" msgstr "Приоритет" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." msgstr "Не удалось обновить некоторые или все доступные возможности из-за ошибки интегрированности. Вы должны повторить это действие или сделать индивидуальные обновления." -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." msgstr "Зарегистрированы все команды, судьи и аудитории." -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." msgstr "Зарегистрированы все брейкающиеся судьи." -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." msgstr "Зарегистрированы все команды, судьи и аудитории из предыдущего раунда." diff --git a/tabbycat/breakqual/locale/ru/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/ru/LC_MESSAGES/django.po index 2a7287df8ff..e9f0e29ec21 100644 --- a/tabbycat/breakqual/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:09\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -17,508 +17,508 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" msgstr "Квалификация в брейк" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "Правило квалификации в брейк %(rule)s требует, чтобы следующие метрики были использованы при определении первенства положения команд: %(required)s а следующие метрики отсутствовали %(missing)s." +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "турнир" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "название" -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" msgstr "Отображаемое название, например, \"ESL\"" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" msgstr "краткое название" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" msgstr "Краткое название для URL, например, \"esl\"" -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" msgstr "порядковый номер" -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" msgstr "Порядок, в котором демонстрируются категории" -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" msgstr "размер брейка" -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" msgstr "Количество брейкающихся команд в этой категории" -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" msgstr "общий" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" msgstr "Верно, если большинство команд имеют право на брейк в этой категории, например, основной брейк, неверно, если наоборот" -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" msgstr "приоритет" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" msgstr "Если команда брейкается в нескольких категориях, более высокие цифры приоритета категории дают этой категории приоритет; команда может брейкнуться в нескольких категориях, если и только если у всех категорий одинаковый приоритет" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" msgstr "лимит" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" msgstr "Такое максимальное количество команд будут показаны в публичном тэбе для этой категории или используйте 0 для отсутствия лимита" -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" msgstr "Стандарт" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "AIDA 1996" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "AIDA 2016 (Восточный)" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "AIDA 2016 (Австралийский)" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "AIDA 2019 (Австралийский, Динамичное ограничение)" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" msgstr "правило" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" msgstr "Правило для расчета брейка (большинство турниров должны использовать \"Стандарт\")" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" msgstr "брейкающиеся команды" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" msgstr "категория брейка" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" msgstr "категории брейка" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "команда" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "место" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" msgstr "брейковый ранг" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" msgstr "Записано" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" msgstr "Недоступна" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" msgstr "Другой брейк" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" msgstr "Дисквалифицирована" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" msgstr "Проиграла по броску монетки" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" msgstr "Отозвано" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" msgstr "комментарий" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" msgstr "Используется для объяснения того, почему не брейкнулась команда, набравшая необходимое количество очков" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" msgstr "брейкающаяся команда" -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" msgstr "" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." msgstr "" -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." msgstr "" -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" msgstr "" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." msgstr "Судьи могут быть помечены как брейкающиеся в разделе Обзор обратной связи." -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" msgstr "Брейки" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " -msgstr "У этого турнира не установлено никаких брейковых категорий. Вы можете почитать о том, как создавать брейк в нашей документации" +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +msgstr "" -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" msgstr "Доступность команд" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" msgstr "%(category)s Брейк" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " msgstr " %(size)s места " -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" msgstr "Доступные команды" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" msgstr "Брейкаются" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" msgstr "Исключены" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" msgstr "Доступны" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" msgstr "Отметить команду как доступную" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" msgstr "Генерировать этот брейк" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" msgstr "Посмотреть этот брейк" -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" msgstr "видим публично" -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" msgstr "не видим публично" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" msgstr "Удалить и создать заново все брейки" -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" msgstr "Создать брейк для всех категорий" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." msgstr "Еть 0 команд, отмеченных как доступные для этой категории - вам нужно добавить несколько доступных команд для того, чтобы правильно сгенерировать этот брейк." -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." msgstr "Этот брейк использует правило %(category)s — если вы хотите использовать другое правило, вы должны изменить правило для этой категории брейка в области Редактировать базу данных, а затем удалить и восстановить все брейки. Пожалуйста, проверьте это перед объявлением брейка или его опубликованием. Код, который генерирует брейк, не тестируется для крайних случаев." -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." msgstr "Чтобы отредактировать брейк, используйте комментарии в правой колонке. Любая команда с комментарием будет исключена из этого брейка (генератор брейка иногда вставляет собственные комментарии). Затем нажмите на соответствующую кнопку Сохранить Комментарии и Обновить ниже. Если у вас есть сложные правила брейка (например, если некоторым командам разрешено выбрать предпочтительную категорию брейка), то вам может потребоваться обновить замечания несколько раз, чтобы получить правильный брейк. В последнем случае вы можете изменить список брейкающихся непосредственно в области Редактировать базу данных." -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." msgstr "Включена настройка публичного объявления брейкающихся команд. Как только вы нажмете на кнопку, список брейкающихся команд будет публично виден на сайте без возможности его перепроверить! Очень рекомендуем отключить эту функцию на странице настроек турнира перед созданием командного брейка." -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." msgstr "Брейк ещё не был сгенерирован. Хотите сгенерировать брейк для всех категорий? Надежнее сгенерировать брейк до завершения всех отборочных раундов, если вам любопытно - вы можете сгенерировать его заново позже." -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." msgstr "Предупреждение! Опция \"публикация брейков\" включена, поэтому брейк виден публично. Если вы обновите брейки, изменения будут видны немедленно, без шанса изменить их." -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" msgstr "Сохранить комментарии и обновить все брейки" -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" msgstr "Сохранить комментарии и обновить брейк %(category)s" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" msgstr "Есть %(count)s команды, отмеченные как доступные для этой категории. Хотите добавить больше доступных команд?" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" msgstr "Обзор" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" msgstr "Брейк судей" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." msgstr "Похоже что не определены категории брейка. Если вы хотите создать новые категории для брейка, вам нужно сначала добавить их в область Редактировать базу данных, затем вернуться к этой странице, чтобы установить доступность команд." -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" msgstr "Брейк" -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "Судьи" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" msgstr "Основной финал" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" msgstr "Ф" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "Полуфиналы" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "ПФ" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "Четвертьфиналы" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "ЧФ" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "1/8 финала" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "1/8" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" msgstr "1/16 финала" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" msgstr "1/16" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" msgstr "1/32 финала" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" msgstr "1/32" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" msgstr "" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" msgstr "" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" msgstr "" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" msgstr "" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" msgstr "" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" msgstr "" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" msgstr "" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" msgstr "" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" msgstr "" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" msgstr "" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" msgstr "" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" msgstr "" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" msgstr "Неизвестный брейковый раунд" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" msgstr "UBR" -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" msgstr "Произошла ошибка при генерации брейка для категории %(category)s%(message)s" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" msgstr "Доступен для" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" msgstr "Редактировать комментарий" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." msgstr "Изменения в комментариях к брейковым командам сохранены и командный брейк обновлен для следующих брейковых категорий: %(categories)s." -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." msgstr "Изменения в комментариях к брейковым командам сохранены и командный брейк обновлен для брейковой категории %(category)s." -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." msgstr "Изменения в комментариях к брейковым командам сохранены." -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." msgstr "Брейк сгенерирован для следующих категорий команд: %(categories)s." -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" msgstr "Брейкающиеся судьи" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" msgstr "Доступность для брейка" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "%s Спикеры" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" diff --git a/tabbycat/draw/locale/ru/LC_MESSAGES/django.po b/tabbycat/draw/locale/ru/LC_MESSAGES/django.po index 00315963473..0b98dfd5e30 100644 --- a/tabbycat/draw/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:27\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -17,21 +17,7 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "%(count)d дебатов установлен статус %(status)s." -msgstr[1] "%(count)d дебатов установлен статус %(status)s." -msgstr[2] "%(count)d дебатов установлен статус %(status)s." -msgstr[3] "%(count)d дебатов установлен статус %(status)s." - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "Установить статус результата в %(status)s" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." @@ -40,7 +26,11 @@ msgstr[1] "%(count)d дебатов были отмечены как имеющ msgstr[2] "%(count)d дебатов были отмечены как имеющие подтвержденные стороны." msgstr[3] "%(count)d дебатов были отмечены как имеющие подтвержденные стороны." -#: draw/admin.py:93 +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." @@ -49,406 +39,406 @@ msgstr[1] "%(count)d дебаты были отмечены имеющими н msgstr[2] "%(count)d дебаты были отмечены имеющими неподтвержденные стороны." msgstr[3] "%(count)d дебаты были отмечены имеющими неподтвержденные стороны." -#: draw/apps.py:7 draw/views.py:452 draw/views.py:455 +#: draw/apps.py draw/views.py msgid "Draw" msgstr "Сетка" -#: draw/generator/__init__.py:14 +#: draw/generator/__init__.py msgid "Too many swaps" msgstr "Слишком много перестановок" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" msgstr "Одна вверх одна вниз (история)" -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" msgstr "Одна вверх, одна вниз (клуб)" -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" msgstr "Одна вверх одна вниз (для размещения)" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "Bubble up (history)" msgstr "Поднять вверх (история)" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble down (history)" msgstr "Опустить вниз (история)" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble up (institution)" msgstr "Поднять вверх (клуб)" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble down (institution)" msgstr "Опустить вниз (клуб)" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" msgstr "Поднять вверх (для удобства)" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" msgstr "Опустить вниз (для удобства)" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Can't bubble up/down" msgstr "Не удалось переместить вверх/вниз" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Pull-up team" msgstr "Команда, которая была пулл-апнута" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." msgstr "%d дебатов в предыдущем раунде не имеют результата." -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." msgstr "%d дебатов в предыдущем раунде не имеют двух проходящих дальше команд." -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." msgstr "Места в частичном брейковом раунде указывают на то, что нечетное количество команд (%(nbypassing)d) пропустили его." -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." -msgstr "Места в частичном брейковом раунде указывают, что %(nbypassing)d команды пропустили его, но %(advancing)d прошли его." +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." +msgstr "" -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." msgstr "Количество дебатов (%d) в этом раунде не кратно двум." -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." msgstr "Порядок Ренье не может быть отрицательным, и он в настоящее время установлен на %(alpha)f." -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." msgstr "Количество команд, представленных для сетки, не было множеством из %(num)d." -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." msgstr "Нет команд для создания сетки." -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." msgstr "В этой категории есть только %d брейкающихся команд, должны быть как минимум две, чтобы создать брейковый раунд." -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." msgstr "Количество команд (%d) в этом раунде не кратно двум." -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." msgstr "%(noninteger)d из %(total)d команд имеют не целое число первых показателей в положении команд. Для промежуточного ранжирования необходимо, чтобы первая метрика положения команд была целым числом (обычно баллы или победы)." -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." msgstr "Было %(aff_count)d команд утверждения, но %(neg_count)d команд отрицания." -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." msgstr "Одна или несколько команд получили сторону, которая не была утверждением или отрицанием." -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." msgstr "Тип сетки %(type)s не может быть использован в формате с двумя командами." -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." msgstr "Тип сетки %(type)s не может быть использован в Британском Парламентском Формате." -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" msgstr "Опция «команды в дебатах» не распознана: %(option)s" -#: draw/manager.py:276 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." msgstr "Размер брейка (%(size)d) для этой категории не валиден. Он должен быть либо шесть раз либо четыре раза в степени 2." -#: draw/models.py:29 draw/models.py:35 +#: draw/models.py msgid "none" msgstr "нет" -#: draw/models.py:30 +#: draw/models.py msgid "postponed" msgstr "отложен" -#: draw/models.py:31 draw/models.py:36 +#: draw/models.py msgid "draft" msgstr "черновик" -#: draw/models.py:32 draw/models.py:37 +#: draw/models.py msgid "confirmed" msgstr "подтвержденные" -#: draw/models.py:43 draw/models.py:375 +#: draw/models.py msgid "round" msgstr "раунд" -#: draw/models.py:45 +#: draw/models.py msgid "room" msgstr "аудитория" -#: draw/models.py:48 +#: draw/models.py msgid "bracket" msgstr "значение баллов команд" -#: draw/models.py:50 +#: draw/models.py msgid "room rank" msgstr "место команды" -#: draw/models.py:56 +#: draw/models.py msgid "importance" msgstr "значение" -#: draw/models.py:58 +#: draw/models.py msgid "result status" msgstr "статус результата" -#: draw/models.py:60 +#: draw/models.py msgid "sides confirmed" msgstr "стороны подтверждены" -#: draw/models.py:61 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." msgstr "Если не отмечено, то стороны, назначенные командам в этой дискуссии, являются просто заменителями." -#: draw/models.py:64 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "дебаты" -#: draw/models.py:65 +#: draw/models.py msgid "debates" msgstr "дебаты" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:84 draw/models.py:109 +#: draw/models.py msgid " (sides not confirmed)" msgstr " (стороны не подтверждены)" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:96 draw/models.py:113 +#: draw/models.py msgid " vs " msgstr " против " -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" msgstr "утверждение" -#: draw/models.py:263 +#: draw/models.py msgid "negative" msgstr "отрицание" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" msgstr "первое правительство" -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" msgstr "первая оппозиция" -#: draw/models.py:266 +#: draw/models.py msgid "closing government" msgstr "второе правительство" -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" msgstr "вторая оппозиция" -#: draw/models.py:274 draw/models.py:377 +#: draw/models.py msgid "team" msgstr "команда" -#: draw/models.py:276 draw/models.py:379 +#: draw/models.py msgid "side" msgstr "сторона" -#: draw/models.py:281 +#: draw/models.py msgid "debate team" msgstr "команда" -#: draw/models.py:282 +#: draw/models.py msgid "debate teams" msgstr "команды" -#: draw/models.py:303 +#: draw/models.py #, python-format msgid "placed %(place)s" msgstr "заняли %(place)s" -#: draw/models.py:305 draw/models.py:312 +#: draw/models.py msgid "result unknown" msgstr "результат неизвестен" -#: draw/models.py:308 +#: draw/models.py msgid "won" msgstr "выиграли" -#: draw/models.py:310 +#: draw/models.py msgid "lost" msgstr "проиграли" -#: draw/models.py:383 +#: draw/models.py msgid "team side allocation" msgstr "распределение команды на сторону" -#: draw/models.py:384 +#: draw/models.py msgid "team side allocations" msgstr "распределение команд по сторонам" #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" msgstr "%(side)s%(metric)s" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" msgstr "Команда %(num)d" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" msgstr "Ранг этой комнаты" -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" msgstr "Значение балов команд в этих дебатах" -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" msgstr "история сторон
    \n" "(количество раз, когда команда была на каждой стороне перед этим раундом)" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" msgstr "ИС" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" msgstr "Перешел от балансного к несбалансированному" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" msgstr "Перешел от несбалансированного к сбалансированному" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" msgstr "Лучшие возможные улучшения, но все ещё несбалансировано" -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" msgstr "Был несбалансированным и все еще остался несбалансированным" -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" msgstr "Нет метрик для определения первичности положения команд" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" msgstr "Сторона" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" msgstr "Позиция в этом раунде" -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" msgstr "До" -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" msgstr "История сторон перед этим раундом" -#: draw/tables.py:292 +#: draw/tables.py msgid "After" msgstr "После" -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" msgstr "История сторон после этого раунда" -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" msgstr "Стоимость" -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" msgstr "Стоимость позиции" -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" msgstr "Статус" -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" msgstr "Команды с таким количеством очков допустимы в этих дебатах
    (в скобках жирным шрифтом)" -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "%(team)s:%(metric)s" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" msgstr "история сторон перед этим раундом" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" msgstr "Стороны" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" msgstr "стоимость позиции" -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" msgstr "СТОП! Сначала прочитайте это! Удаление команд из базы данных может привести к сбою Tabbycat!" -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." msgstr "Tabbycat требует, чтобы все дебаты имели ровно одну команду для каждой стороны, и ни одной другой команды. Если вы удалите любые команды в дебатах, то вы должны либо заменить каждую из них новой командой в тех же дебатах, либо удалить связанные с ними дебаты. Если вы не смогли сделать это правильно, то многие страницы будут выдавать сбой." -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." msgstr "Это распространенный источник ошибок. Если это случится с вами, проверьте дебаты (в разделе «Сетка» в области Правка Базы Данных) и убедитесь, что все они имеют именно одну команду утверждения и одну команду отрицания." -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" msgstr "ПРЕДУПРЕЖДЕНИЕ! Если вы редактируете команды, сначала прочтите это!" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." msgstr "Tabbycat требует, чтобы в каждых дебатах была ровно одна команда на одной стороне и никаких других команд. Если вы редактируете команды в базе данных, убедитесь, что это всё ещё так. Если вы не сможете сделать все правильно, многие страницы будутвыдавать сбой." -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." @@ -457,7 +447,7 @@ msgstr[1] "%(ndebates)s дебатов нет чэйра." msgstr[2] "%(ndebates)s дебатов нет чэйра." msgstr[3] "%(ndebates)s дебатов нет чэйра." -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" @@ -466,7 +456,7 @@ msgstr[1] "Следующие %(nadjs)s судьи судят msgstr[2] "Следующие %(nadjs)s судьи судят несколько дебатов: %(adjudicators)s" msgstr[3] "Следующие %(nadjs)s судьи судят несколько дебатов: %(adjudicators)s" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." @@ -475,7 +465,7 @@ msgstr[1] "%(ndebates)s дебатов коллегия состоит из че msgstr[2] "%(ndebates)s дебатов коллегия состоит из четного числа судей." msgstr[3] "%(ndebates)s дебатов коллегия состоит из четного числа судей." -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." @@ -484,7 +474,7 @@ msgstr[1] "%(ndebates)s дебатов судейский конфликт." msgstr[2] "%(ndebates)s дебатов судейский конфликт." msgstr[3] "%(ndebates)s дебатов судейский конфликт." -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" @@ -493,7 +483,7 @@ msgstr[1] "Следующие %(nadjs)s судьи недост msgstr[2] "Следующие %(nadjs)s судьи недоступны для этого раунда, но распределены на дебаты: %(adjudicators)s" msgstr[3] "Следующие %(nadjs)s судьи недоступны для этого раунда, но распределены на дебаты: %(adjudicators)s" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." @@ -502,7 +492,7 @@ msgstr[1] "%(ndebates)s судей доступно, но не привязан msgstr[2] "%(ndebates)s судей доступно, но не привязано ни к один дебатам." msgstr[3] "%(ndebates)s судей доступно, но не привязано ни к один дебатам." -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" @@ -511,7 +501,7 @@ msgstr[1] "Следующие %(nteams)s команды игр msgstr[2] "Следующие %(nteams)s команды играют в нескольких дебатах: %(teams)s" msgstr[3] "Следующие %(nteams)s команды играют в нескольких дебатах: %(teams)s" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." @@ -520,7 +510,7 @@ msgstr[1] "%(ndebates)s дебатов нет аудитории." msgstr[2] "%(ndebates)s дебатов нет аудитории." msgstr[3] "%(ndebates)s дебатов нет аудитории." -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" @@ -529,7 +519,7 @@ msgstr[1] "В следующих %(ndebates)s аудитори msgstr[2] "В следующих %(ndebates)s аудиториях есть несколько дебатов:%(rooms)s" msgstr[3] "В следующих %(ndebates)s аудиториях есть несколько дебатов:%(rooms)s" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." @@ -538,81 +528,77 @@ msgstr[1] "%(ndebates)s дебатов есть нарушения ограни msgstr[2] "%(ndebates)s дебатов есть нарушения ограничений на аудитории." msgstr[3] "%(ndebates)s дебатов есть нарушения ограничений на аудитории." -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" msgstr "Доступность" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" msgstr "Изменить стороны/паросочетания" -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" msgstr "Переделать сетку" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" msgstr "Детали сетки" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" msgstr "Баланс позиций" -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" msgstr "Показать сетку" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" msgstr "Подтвердите регенерацию сетки" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" msgstr "Вернуться к сетке" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" msgstr "Подтвердить удаление сетки для %(round)s" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" msgstr "Вы действительно хотите заново создать сетку для %(round)s? Это удалит все дебаты в текущей сетке — включая их бэллоты и распределение судей — и не может быть отменено. Возможно, вы не захотите этого сделать, если какие-либо результаты уже были введены!" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" msgstr "Да, я хочу удалить текущую сетку для %(round)s" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" msgstr "Посмотреть сетку" -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" msgstr "Дебаты начинаются в %(start_time)s" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" msgstr "Добавить время начала" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" msgstr "Ввести результаты" -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" msgstr "Детали темы" -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." @@ -621,310 +607,321 @@ msgstr[1] "%(motions_count)s темы введены." msgstr[2] "%(motions_count)s темы введены." msgstr[3] "%(motions_count)s темы введены." -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "Редактировать темы" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" msgstr "Ваша конфигурация/формат требует, чтобы темы были указаны в качестве части введения бэллота. Убедитесь, что они добавлены до того, как будут поступать результаты!" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" -msgstr "Ввести темы" - -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." -msgstr "Тема введена." - -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "Редактировать тему" - -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." -msgstr "Тема должна быть добавлена, если вы хотите показать её аудитории или распечатать на бэллотах (используя ссылки ниже) или показать её (позже) на публичной странице с темами." +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." +msgstr "" -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "Ввести тему" +msgid_plural "Enter motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" msgstr "Опубликовать сетку" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." msgstr "Вы еще не создали сетку для этого раунда. Нет ничего, что можно опубликовать." -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." msgstr "Сетка на этот раунд все ещё в стадии создания. Подтвердите сетку перед опубликованием." -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" msgstr "Отменить публичную демонстрацию сетки" -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." msgstr "Сетка была опубликована." -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" msgstr "Посмотреть публичную страницу с сеткой" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in
    this tournament's configuration." msgstr "Вы выложили сетку, так что бэллоты и обратная связь могут быть отправлены через общедоступные формы (если доступно). Однако сама сетка не будет видна публично, если \"публичный просмотр сетки\" не включен в в настройках турнира." -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "Вы выложили сетку, но она не будет видна публично, если \"публичный просмотр сетки\" не включен в настройках турнира ." -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" msgstr "Показать сетку публично" -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "Ваш турнир позволяет отправлять бэллоты и формы обратной связи онлайн. Сетка должна быть опубликована прежде, чем они смогут сделать это." -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "Ваш турнир позволяет судьям отправлять бэллоты онлайн. Сетка должна быть опубликована прежде, чем они смогут сделать это." -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." msgstr "Ваш турнир позволяет участникам отправлять формы обратной связи онлайн. Сетка должна быть опубликована прежде, чем они смогут сделать это." -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." msgstr "Ваш турнир настроен на то, чтобы публично показывать сетку. После выпуска сетка появится на публичной странице." -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." msgstr "В ваших настройках нет публичной страницы для сетки или отправки бэллотов/форм обратной связи. Нет смысла выпускать сетку." -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "Опубликовать темы" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "Показать темы публично" - -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "Отменить публичную демонстрацию тем" - -#: draw/templates/draw_display_admin.html:200 -msgid "Release Motion" -msgstr "Опубликовать тему" - -#: draw/templates/draw_display_admin.html:201 +#: draw/templates/draw_display_admin.html msgid "Release motion to public" -msgstr "Показать тему публично" +msgid_plural "Release motions to public" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: draw/templates/draw_display_admin.html:202 +#: draw/templates/draw_display_admin.html msgid "Unrelease motion to public" -msgstr "Отменить публичную демонстрацию темы" +msgid_plural "Unrelease motions to public" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html +msgid "Release Motion" +msgid_plural "Release Motions" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." msgstr "Ваш турнир настроен для того, чтобы темы были указаны в бэллотах, а судьи могли отправлять бэллоты онлайн. Убедитесь, что вы публикуете темы до завершения дебатов, иначе бэллоты не могут быть отправлены." -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." msgstr "Ваш турнир настроен для того, чтобы разрешить право вето на темы и разрешить судьям отправлять бэллоты. Убедитесь, что вы публикуете темы до завершения дебатов, иначе бэллоты не смогут отражать вето." -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "Ваш турнир настроен для того, чтобы показывать тему каждого раунда публично на сайте. Вы должны сначала опубликовать тему, чтобы она появилась там." - -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "Ваш турнир не настроен для отображения тем каждого раунда публично на сайте. Нет необходимости публиковать тему." - -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "Темы были опубликованы." - -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "Тема была опубликована." +msgid_plural "Motions have been released publicly." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" msgstr "Посмотреть публичную страницу с темами" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." msgstr "Вы показали темы, но они не будут представлены публично, если параметр \"опубликование тем\" не включен в настройках этого турнира ." -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" msgstr "(для комнаты брифинга)" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" msgstr "Отобразить сетку в порядке по аудиториям" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" msgstr "Отобразить сетку в порядке по командам" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" msgstr "Показать сетку для всех текущих раундов по порядку аудиторий" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" msgstr "Показать сетку для всех текущих раундов по порядку команд" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" msgstr "Показать сетку %(round)s по порядку аудиторий" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" msgstr "Показать сетку %(round)s по порядку команд" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" msgstr "Показать темы" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" msgstr "Отправить темы по email" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" msgstr "Отправить тему по email" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" msgstr "Начать в" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" msgstr "(для печати)" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" msgstr "Посмотреть формы бэллотов" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" msgstr "Посмотреть формы обратной связи" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" msgstr "Скорость прокрутки" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" msgstr "Быстро" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" msgstr "Средне" -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" msgstr "Медленно" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" msgstr "Очень медленно" -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" msgstr "Размер текста" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" msgstr "Очень маленький" -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" msgstr "Маленький" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" msgstr "Большой" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" msgstr "Очень большой" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" msgstr "Остановить прокрутку" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." msgstr "Сетка для %(round)s ещё не опубликована." -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." msgstr "Сетка на следующий раунд ещё не опубликована." -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" msgstr "Расстановка судей" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." msgstr "В данный момент судей зарегистрировано меньше, чем румов." -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" msgstr "Распределить судей" -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" msgstr "Редактировать расстановку судей" -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" msgstr "Распределение аудиторий" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" msgstr "Распределить аудитории" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" msgstr "Редактировать распределение аудиторий" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" msgstr "Заранее сформированные коллегии" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." @@ -933,21 +930,20 @@ msgstr[1] "Количество коллегий для этого раунда: msgstr[2] "Количество коллегий для этого раунда: %(npanels)s." msgstr[3] "Количество коллегий для этого раунда: %(npanels)s." -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" msgstr "Для этого раунда нет заранее сформированных коллегий" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" msgstr "Редактировать коллегии для %(round)s" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" msgstr "Распределение по сторонам" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." @@ -956,92 +952,92 @@ msgstr[1] "В %(ndebates)s дебатах стороны не подтвержд msgstr[2] "В %(ndebates)s дебатах стороны не подтверждены." msgstr[3] "В %(ndebates)s дебатах стороны не подтверждены." -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" msgstr "Удалить сетку" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" msgstr "Подтвердить сетку" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." msgstr "Первенство положения команд пустует. Это означает, что команды не ранжированы ни по одной метрике, то есть все команды в одной группе. Если это не то, что вы хотели, установите первенство положения команд в области Положение настроек турнира , а затем удалите сетку и создайте её заново. Для большинства турниров первой метрикой будет количество баллов или побед." -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." msgstr "Сочетания команд формируются с использованием первой метрики первенства положения команд, которая в настоящее время установлен на %(metric)s, а не командные баллы, что является чаще применимой метрикой. Если это не то, что вы хотели, вы можете изменить первенство положения команд резервных позиций на странице настроек положения ." -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." msgstr "Тип сетки на этот раунд установлен ручным, так что Tabbycat просто создало пустую сетку. Перейдите на редактировать стороны/сочетания команд чтобы её заполнить." -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." msgstr "Балл этого судьи равен 0, и поэтому его оценки будут игнорироваться при распределении. можно изменить баллы этого судьи на странице настройки обратной связи." -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." msgstr "Tabbycat назначает стороны в брейковых раундах рандомно. Однако, так как в брейковых раундах многие турниры распределяют стороны перед аудиторией, стороны были отмечены как \"неподтвержденные\", чтобы не казалось, что стороны были назначены заранее. После того, как вы подтвердите сетку, вам нужно будет подтвердить стороны на странице \"Редактировать Стороны/Сочетания команд\", даже если вы хотите принять рандомную расстановку сторон Tabbycat." -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " msgstr "Выделенные ячейки связаны с изменениями в балансе позиций, а именно:
    • Красные ячейки указывают, что команда не может быть распределена на позицию, которая поддерживает баланс позиций.
    • Желтые ячейки указывают, что команда была ранее дисбалансирована, и имеет наилучшее положение, возможное в этой сетке, но тем не менее, все еще дисбалансированное.
    • Зеленые ячейки указывает, что предыдущий дисбаланс команды разрешен в этой сетке.
    " -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." msgstr "Сетка для %(round)s ещё не создана. Чтобы её создать, перейдите в раздел доступности ." -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." msgstr "Похоже, что стороны не подтверждены для некоторых дебатов в этом раунде. Этот отчет о балансе позиций генерируется с использованием \"неподтвержденных сторон\" в базе данных, и, как следствие, может не иметь особого смысла. Лучше всего подтвердить стороны во всех дебатах перед просмотром этого отчета." -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." -msgstr "Ваша текущая функция стоимости позиции составляет %(cost_func)s, возведенная в степень %(exponent)s. Прочтите больше о том, как работают функции стоимости позиции в нашей документации." +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgstr "" -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." msgstr "Отчеты о балансе позиций не составлены для брейковых раундов." -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." msgstr "Отчеты о балансе позиций доступны только для турниров британского парламентского формата." -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." msgstr "Отчет о балансе позиций не составлен для первого раунда турнира." -#: draw/views.py:68 draw/views.py:483 +#: draw/views.py msgid "No debates in this round" msgstr "Нет дебатов в этом раунде" -#: draw/views.py:76 +#: draw/views.py #, python-format msgid "Draw for %(round)s" msgstr "Сетка на %(round)s" -#: draw/views.py:78 +#: draw/views.py msgid "Draws for Current Rounds" msgstr "Сетка на текущий раунд" -#: draw/views.py:82 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" msgstr "дебаты начинаются в %(time)s (в %(time_zone)s)" -#: draw/views.py:86 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" msgstr "время начала в часовом поясе: %(time_zone)s" -#: draw/views.py:124 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" @@ -1050,128 +1046,128 @@ msgstr[1] "дебаты начнутся в %(time)s" msgstr[2] "дебаты начнутся в %(time)s" msgstr[3] "дебаты начнутся в %(time)s" -#: draw/views.py:171 +#: draw/views.py msgid "The draw for this round hasn't been released." msgstr "Сетка на этот раунд не была опубликована." -#: draw/views.py:224 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" msgstr "Все дебаты во всех раундов %(tournament)s" -#: draw/views.py:382 +#: draw/views.py msgid "Adjudicator Assignments" msgstr "Назначения судей" -#: draw/views.py:404 +#: draw/views.py msgid "Position" msgstr "" -#: draw/views.py:424 +#: draw/views.py msgid "Team Pairings" msgstr "Паросочетания команд" -#: draw/views.py:447 +#: draw/views.py msgid "No Draw" msgstr "Нет сетки" -#: draw/views.py:449 +#: draw/views.py msgid "Draft Draw" msgstr "Черновик сетки" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:541 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" msgstr "%(side)s Брейковый ранг" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:546 +#: draw/views.py msgid "BR" msgstr "БР" -#: draw/views.py:571 +#: draw/views.py msgid "Draw with Details" msgstr "Сетка с деталями" -#: draw/views.py:579 +#: draw/views.py msgid "Position Balance Report" msgstr "Отчет о балансе позиций" -#: draw/views.py:590 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" msgstr "Энтропия Реньи порядка %(order)s" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:593 +#: draw/views.py msgid " (i.e., Shannon entropy)" msgstr " (т.е., энтропия Шэннона)" -#: draw/views.py:623 +#: draw/views.py msgid "Teams with position imbalances" msgstr "Команды с дисбалансом позиции" -#: draw/views.py:624 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" msgstr "Нет команд с дисбалансом позиции! Ура!" -#: draw/views.py:627 +#: draw/views.py msgid "Annotated draw" msgstr "Аннотированная сетка" -#: draw/views.py:658 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" msgstr "Не удалось создать сетку для %(round)s, так как сетка уже была создана!" -#: draw/views.py:666 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " msgstr "

    Сетка не может быть создана по следующим причинам:%(message)s

    \n" "

    Пожалуйста, решите эту проблему перед тем как создавать сетку.

    " -#: draw/views.py:674 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " msgstr "

    Сетка не может быть создана, поскольку произошла следующая ошибка: %(message)s

    \n" "

    Если эта проблема повторяется и вы не знаете, как её решить, пожалуйста, свяжитесь с разработчиками.

    " -#: draw/views.py:683 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " msgstr "

    Положение команд не может быть сгенерировано, поскольку произошла следующая ошибка:%(message)s

    \n" "

    Поскольку генератор сетки использует текущее положение команд, это не дает сетке быть сгенерированной.

    " -#: draw/views.py:699 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "Аудитории не были автоматически распределены, так как существуют ограничения на аудитории, связанные с судьями. Распределите аудитории после распределения судей." -#: draw/views.py:726 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "Сетка удалена. Теперь вы можете создать её заново." -#: draw/views.py:746 +#: draw/views.py msgid "Released the draw." msgstr "Сетка опубликована." -#: draw/views.py:761 +#: draw/views.py msgid "Unreleased the draw." msgstr "Отменить опубликование сетки." -#: draw/views.py:774 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." msgstr "Извините, \"%(input)s\"не является корректным временем. Оно должно быть в 24-часовом формате, с двоеточием, например: \"13:57\"." -#: draw/views.py:793 +#: draw/views.py msgid "Side Pre-Allocations" msgstr "Предварительное распределение по сторонам" -#: draw/views.py:826 +#: draw/views.py msgid "Edit Matchups" msgstr "Изменить паросочетания" diff --git a/tabbycat/importer/locale/ru/LC_MESSAGES/django.po b/tabbycat/importer/locale/ru/LC_MESSAGES/django.po index 8078e2aa890..903be8d4925 100644 --- a/tabbycat/importer/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:46\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -17,26 +17,26 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" msgstr "строка %(lineno)d: %(message)s" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" msgstr "В этой строке (%(institution)s) нет кода" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" msgstr "В этой строке (%(institution)s) слишком много столбцов" -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." msgstr "Не было клубов для импорта." -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." @@ -45,11 +45,11 @@ msgstr[1] "Одновременно можно импортировать тол msgstr[2] "Одновременно можно импортировать только %(max_allowed)d клубов. Сейчас указано %(given)d.. Попробуйте импортировать клубы в несколько приёмов." msgstr[3] "Одновременно можно импортировать только %(max_allowed)d клубов. Сейчас указано %(given)d.. Попробуйте импортировать клубы в несколько приёмов." -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." msgstr "Не было аудиторий для импорта." -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." @@ -58,88 +58,88 @@ msgstr[1] "Извините, вы можете импортировать мак msgstr[2] "Извините, вы можете импортировать максимум %(max_allowed)d аудиторий за один раз. (Сейчас у вас есть %(given)d.) Попробуйте разбить ваш импорт на несколько очередей." msgstr[3] "Извините, вы можете импортировать максимум %(max_allowed)d аудиторий за один раз. (Сейчас у вас есть %(given)d.) Попробуйте разбить ваш импорт на несколько очередей." -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" msgstr "Имена спикеров" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" msgstr "Email адреса спикеров" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" msgstr "Необязательно, полезно включать при распределении линых URL, список в том же порядке, что и имена спикеров" -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" msgstr "Название (без названия клуба)" -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" msgstr "Указать название клуба перед названием команды?" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" msgstr "Не указывать название клуба (вместо поля \"Указать название клуба перед названием команды\")" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" msgstr "(Не применимо к неафиллированным командам)" -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" msgstr "Одно имя спикера на строчку" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" msgstr "Может быть разделен ярлыками, запятыми или новыми строками" -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "Спикер %d" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" msgstr "спикер %d @example.edu" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." msgstr "Должен быть хотя бы один спикер." -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." msgstr "%(email)s не является допустимым email." -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." msgstr "Адресов электронной почты больше чем спикеров." -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." msgstr "В рамках одного турнира у всех команд из одного клуба должны быть разные названия. Пожалуйста, исправьте повторяющиеся названия." -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" msgstr "Рейтинг" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." msgstr "Значение должно быть между %(min)d и %(max)d." -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" msgstr "Без клуба" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "%(name)s %(code)s)" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." @@ -148,7 +148,7 @@ msgstr[1] "Извините, вы можете импортировать мак msgstr[2] "Извините, вы можете импортировать максимум %(max_allowed)d команд за один раз (Эти числа сейчас добавляются к %(given)d.). Попробуйте разделить ваш импорт на несколько очередей." msgstr[3] "Извините, вы можете импортировать максимум %(max_allowed)d команд за один раз (Эти числа сейчас добавляются к %(given)d.). Попробуйте разделить ваш импорт на несколько очередей." -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." @@ -157,243 +157,232 @@ msgstr[1] "Извините, вы можете импортировать мак msgstr[2] "Извините, вы можете импортировать максимум %(max_allowed)d судей за один раз. (Эти числа сейчас добавляются к %(given)d.) Попробуйте разделить ваш импорт на несколько очередей." msgstr[3] "Извините, вы можете импортировать максимум %(max_allowed)d судей за один раз. (Эти числа сейчас добавляются к %(given)d.) Попробуйте разделить ваш импорт на несколько очередей." -#: importer/forms.py:396 +#: importer/forms.py msgid "XML" msgstr "" -#: importer/forms.py:397 +#: importer/forms.py msgid "The Debate XML archive to parse" msgstr "" -#: importer/templates/archive_export_index.html:4 -#: importer/templates/archive_export_index.html:5 +#: importer/templates/archive_export_index.html msgid "Export Tournament Archive" msgstr "" -#: importer/templates/archive_export_index.html:9 +#: importer/templates/archive_export_index.html msgid "Tournaments can be exported in an XML format for use outside Tabbycat." msgstr "" -#: importer/templates/archive_export_index.html:17 +#: importer/templates/archive_export_index.html msgid "Export all data" msgstr "" -#: importer/templates/archive_importer.html:6 -#: importer/templates/archive_importer.html:18 +#: importer/templates/archive_importer.html msgctxt "page title" msgid "Import Tournament Archive" msgstr "" -#: importer/templates/archive_importer.html:19 +#: importer/templates/archive_importer.html msgid "This form will create a tournament with the data provided as a Debate XML format." msgstr "" -#: importer/templates/archive_importer.html:24 +#: importer/templates/archive_importer.html msgid "Import" msgstr "" -#: importer/templates/archive_importer.html:25 +#: importer/templates/archive_importer.html msgid "Go back to the site home page" msgstr "Вернуться на домашнюю страницу" -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html msgctxt "page title" msgid "Add Adjudicators" msgstr "Добавить судей" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" msgstr "(Шаг %(step)s из %(count)s)" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" msgstr "Предыдущий шаг" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." msgstr "В настройках турнира , рейтинг судьи должен быть между %(min)s и %(max)s. Предоставление email адресов опционально, но может быть полезно при использовании личных URL для бэллотов и форм обратной связи." -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" msgstr "Судьи клуба %(institution)s" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" msgstr "Неафиллированные судьи" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" msgstr "Сохранить всех судей" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." msgstr "Перед добавлением судей необходимо добавить клубы." -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." msgstr "Укажите количество новых судей, относящихся к каждому клубу. На следующем этапе вы можете указать их имена и рейтинг." -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" -msgstr "Вы можете добавить до 198 судей за один раз. Если у вас есть более 198 судей, разделите их на очереди. (Пожалуйста, не пытайтесь добавить более 198 за один раз: система сбрасывается и вы потеряете данные.)" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" +msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" msgstr "Следующий шаг" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" msgstr "Простой импорт" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." msgstr "Есть несколько способов импорта данных в Tabbycat. Какой из них подойдет больше зависит от размера вашего турнира и ваших технических возможностей. Этот простой импортер является самым доступным в использовании и хорошо работает на маленьких и среднего размера турнирах." -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" msgstr "Добавить клубы" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" msgstr "Добавить команды" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" msgstr "Добавить судей" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" msgstr "Добавить аудитории" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" msgstr "Добавить/Изменить категории аудиторий" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" msgstr "Добавить/изменить ограничения аудиторий" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" msgstr "Добавить/изменить конфликты команд и судей" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" msgstr "Добавить/изменить конфликты между судьями" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" msgstr "Добавить/изменить конфликты между судьями и клубами" -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" msgstr "Добавить/редактировать конфликты между командами и клубами" -#: importer/templates/simple_import_index.html:66 +#: importer/templates/simple_import_index.html msgid "Add/Edit Break Categories" msgstr "" -#: importer/templates/simple_import_index.html:70 +#: importer/templates/simple_import_index.html msgid "Add/Edit Speaker Categories" msgstr "" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" msgstr "Добавить клубы" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" msgstr "Сохранить все клубы" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" msgstr "В форме указаны ошибочные данные:" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" msgstr "Следующий шаг" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" msgstr "Добавить команды" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" msgstr "Команды клуба %(institution)s" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" msgstr "Неафиллированные команды" -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" msgstr "Сохранить все команды" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." msgstr "Перед добавлением команд необходимо добавить клубы." -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." msgstr "Укажите количество новых команд, относящихся к каждому клубу. На следующем этапе вы сможете указать название команды и имена спикеров." -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" -msgstr "Вы можете добавить до 141 команды за один раз. Если у вас есть более 141 команды, разделите их на очереди. (Пожалуйста, не пытайтесь добавить более 141 за один раз: система сбрасывается и вы потеряете данные.)" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" +msgstr "" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" msgstr "Добавить аудитории" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." msgstr "Приоритеты указывают на то, насколько вы хотите использовать эту аудиторию. Большие числа указывают более высокий приоритет. Если у вас больше аудиторий, чем дебатов, места с самыми низкими приоритетами не будут использоваться." -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" msgstr "Сохранить все аудитории" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" msgstr "Вставьте список аудиторий с одной аудиторией на строку и следуйте формату: имя,приоритет. Например:" -#: importer/views.py:108 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." @@ -402,7 +391,7 @@ msgstr[1] "Количество добавленных клубов: %(count)d." msgstr[2] "Количество добавленных клубов: %(count)d." msgstr[3] "Количество добавленных клубов: %(count)d." -#: importer/views.py:129 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." @@ -411,7 +400,7 @@ msgstr[1] "Добавлены %(count)d аудитории." msgstr[2] "Добавлены %(count)d аудитории." msgstr[3] "Добавлены %(count)d аудитории." -#: importer/views.py:188 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." @@ -420,12 +409,12 @@ msgstr[1] "Добавлены %(count)d команды." msgstr[2] "Добавлены %(count)d команды." msgstr[3] "Добавлены %(count)d команды." -#: importer/views.py:209 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "Судья %(number)d" -#: importer/views.py:214 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." @@ -434,15 +423,15 @@ msgstr[1] "Добавлены %(count)d судьи." msgstr[2] "Добавлены %(count)d судьи." msgstr[3] "Добавлены %(count)d судьи." -#: importer/views.py:230 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " msgstr "" -#: importer/views.py:238 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." msgstr "" -#: importer/views.py:256 +#: importer/views.py msgid "Tournament archive has been imported." msgstr "" diff --git a/tabbycat/locale/ru/LC_MESSAGES/django.po b/tabbycat/locale/ru/LC_MESSAGES/django.po index 4e806cdf995..835720e822d 100644 --- a/tabbycat/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -17,321 +17,328 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" msgstr "" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:105 +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" msgstr "Регистрации" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" msgstr "Отправленный идентификатор регистрации не существует" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" msgstr "Регистрации" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" msgstr "Не существует идентификаторов регистрации для отправленных штрих-кодов" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." msgstr "Штрих-код должен содержать ровно шесть цифр." -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" msgstr "штрих-код" -#: checkins/models.py:37 +#: checkins/models.py msgid "" msgstr "" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "%(classname)s %(barcode)s" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" msgstr "человек" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" msgstr "идентификатор личности" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" msgstr "идентификатор личностей" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "дебаты" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" msgstr "индентификатор дебатера" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" msgstr "индентификаторы дебатера" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" msgstr "идентификатор аудитории" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" msgstr "идентификаторы аудиторий" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" msgstr "идентификатор" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" msgstr "время регистрации" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "турнир" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" msgstr "событие регистрации" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" msgstr "события регистрации" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" msgstr "С идентификаторами" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" msgstr "Просмотр как штрих-кодов" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" msgstr "Создать отсутствующие идентификаторы" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" msgstr "Создать все идентификаторы" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." msgstr "Нет доступных для просмотра идентификаторов. Администратору нужно будет сгенерировать их." -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." -msgstr "Каждый из штрих-кодов ниже является также файлом-картинкой, которую можно загрузить. Если вы хотите загрузить их всех одновременно, используйте плагин/расширение браузера \"массовая загрузка\", например, вот это (для Chrome). Чтобы загрузить их как список вы можете перейти в раздел Регистрации области Редактировать базу данных и скопировать/вставить их из соответствующей таблицы." +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +msgstr "" -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "Используйте Ctrl+P для распечатки или сохранения штрих кодов в PDF. Не забудьте установить нужное положение страницы, выключить верхние и нижние колонтитулы и включить фоновую графику. Лучше всего работает в Chrome." -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." msgstr "Для сканирования наберите число, указанное ниже (он автоматически будет отправляться). Вы также можете использовать сканер штрих-кода (настроенный на работу как клавиатура) или сканировать с веб-камеры или телефонной камеры с помощью кнопки ниже." -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" msgstr "Не зарегистрирован (штрих-код %(barcode)s)" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" msgstr "Не зарегистрирован; штрих-код не назначен" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" msgstr "зарегистрирован в %(time)s" -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." msgstr "%(speaker)s зарегистрирован в %(time)s." -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." msgstr "%(speaker)s отсутствует." -#: checkins/views.py:30 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" msgstr "Сканировать идентификаторы" -#: checkins/views.py:63 +#: checkins/views.py msgid "People's Check-In Statuses" msgstr "Статусы регистрации пользователей" -#: checkins/views.py:120 +#: checkins/views.py msgid "Rooms' Check-In Statuses" msgstr "Статус регистрации аудиторий" -#: checkins/views.py:169 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" msgstr "Создать идентификаторы" -#: checkins/views.py:176 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" msgstr "Спикеры" -#: checkins/views.py:181 templates/nav/public_nav.html:145 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "Судьи" -#: checkins/views.py:186 +#: checkins/views.py msgid "Rooms" msgstr "Аудитории" -#: checkins/views.py:227 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" msgstr "Сгенерированные идентификаторы для %s" -#: checkins/views.py:234 +#: checkins/views.py msgid "Identifiers" msgstr "Идентификаторы" -#: checkins/views.py:272 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." msgstr "Не удалось зарегистрировать вас, так как у вас нет идентифицирующего кода - возможно, необходимо чтобы тэбмастер сделал для вас идентификатор." -#: checkins/views.py:280 +#: checkins/views.py msgid "You have revoked your check-in." msgstr "Вы отозвали свою регистрацию." -#: checkins/views.py:282 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." msgstr "Упс! Похоже, ваша регистрация уже была отозвана." -#: checkins/views.py:286 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." msgstr "Упс! Похоже, вы уже зарегистрированы." -#: checkins/views.py:293 +#: checkins/views.py msgid "You are now checked in." msgstr "Вы зарегистрированы." -#: settings/core.py:67 +#: settings/core.py msgid "Arabic" msgstr "Арабский" -#: settings/core.py:68 +#: settings/core.py msgid "Bengali" msgstr "" -#: settings/core.py:69 +#: settings/core.py msgid "English" msgstr "Английский" -#: settings/core.py:70 +#: settings/core.py msgid "Spanish" msgstr "Испанский" -#: settings/core.py:71 +#: settings/core.py msgid "French" msgstr "Французский" -#: settings/core.py:72 +#: settings/core.py msgid "Indonesian" msgstr "" -#: settings/core.py:73 +#: settings/core.py msgid "Japanese" msgstr "Японский" -#: settings/core.py:74 +#: settings/core.py msgid "Malay" msgstr "" -#: settings/core.py:75 +#: settings/core.py msgid "Portuguese" msgstr "Португальский" -#: settings/core.py:76 +#: settings/core.py msgid "Russian" msgstr "Русский" -#: settings/core.py:77 +#: settings/core.py msgid "Simplified Chinese" msgstr "" -#: settings/core.py:78 +#: settings/core.py msgid "Translation" msgstr "" -#: templates/admin/delete_protected_message.html:4 +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." msgstr "Сначала необходимо удалить представленные выше объекты." -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." msgstr "Этот стиль информационной карты анонсирует критически важную информацию. Ссылка." -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." msgstr "Этот стиль информационной карты анонсирует общую информацию." -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" msgstr "Заголовок формы" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" msgstr "Подзаголовок" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" msgstr "Войти" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" msgstr "Я забыл свой пароль" -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "Tabbycat" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "Тэб для %(tournament)s ведется в Tabbycat - открытой системе тэба для разных форматов парламентских дебатов" -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "Тэб для ведется в Tabbycat - открытой системе тэба для разных форматов парламентских дебатов" -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." msgstr "Упс! Произошла ошибка с одним или несколькими полями." -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" msgstr "Сохранить и добавить ещё" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" msgstr "Доступ запрещен (403)" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." msgstr "Эта страница помощника не включена для этого турнира. Вернуться к домашней странице помощника." -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." @@ -340,619 +347,612 @@ msgstr[1] "На данный момент вы используете %(nrows)s msgstr[2] "На данный момент вы используете %(nrows)s строк в вашей базе данных. Если вы не обновили вашу базу данных Heroky до платного уровня, вы можете использовать до 10 000 строк. Если вы близки к этому лимиту, вам не стоит создавать новые урниры на этом сайте пока вы не обновите вашу базу данных до платного уровня." msgstr[3] "На данный момент вы используете %(nrows)s строк в вашей базе данных. Если вы не обновили вашу базу данных Heroky до платного уровня, вы можете использовать до 10 000 строк. Если вы близки к этому лимиту, вам не стоит создавать новые урниры на этом сайте пока вы не обновите вашу базу данных до платного уровня." -#: templates/errors/legacy_sendgrid_warning.html:11 +#: templates/errors/legacy_sendgrid_warning.html msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." msgstr "" -#: templates/errors/public_403.html:14 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." msgstr "Упс! Эти страница не включена для этого турнира. Вернуться к домашней странице турнира" -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." msgstr "Упс! Эти страница не включена для этого турнира. Вернуться к домашней странице" -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "%(tournament)s работает на Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "Этот сайт работает на Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." msgstr "Tabbycat - это проект с открытым исходным кодом, разработанный добровольцами, и свободно и бесплатно используемый для тэбмастеринга турниров." -#: templates/footer.html:24 +#: templates/footer.html #, python-format msgid "For a tournament of this size, we suggest a donation of $%(amount)s." msgstr "" -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." msgstr "Узнать больше о донатах." -#: templates/footer.html:31 +#: templates/footer.html msgid "Donations to Tabbycat from individuals or organisations are much appreciated." msgstr "" -#: templates/footer.html:39 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" msgstr "Все ещё используйте приложение-секундомер для тайминга дебатов?" -#: templates/footer.html:41 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." msgstr "Использование приложения, созданного для таймкиперов дебатов делает игру и судейство проще. Ознакомьтесь с Timekept (iPhone/iPad) или Debatekeeper (Android)." -#: templates/footer.html:50 +#: templates/footer.html msgid "Our Organisation" msgstr "" -#: templates/footer.html:52 -msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." msgstr "" -#: templates/footer.html:65 +#: templates/footer.html msgid "Language" msgstr "Язык" -#: templates/footer.html:72 +#: templates/footer.html msgid "GitHub" msgstr "GitHub" -#: templates/footer.html:78 +#: templates/footer.html msgid "Documentation" msgstr "Документация" -#: templates/footer.html:84 +#: templates/footer.html msgid "Support" msgstr "Поддержка" -#: templates/footer.html:90 +#: templates/footer.html msgid "Facebook" msgstr "Facebook" -#: templates/footer.html:96 +#: templates/footer.html msgid "Set Up A Copy" msgstr "Настроить копию" -#: templates/footer.html:110 +#: templates/footer.html msgid "Change Language" msgstr "Изменить язык" -#: templates/footer.html:127 +#: templates/footer.html msgid "Use this language" msgstr "Использовать этот язык" -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" msgstr "Логотип Tabbycat" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" msgstr "Домашняя страница сайта" -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" msgstr "Новый турнир" -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" msgstr "Изменить базу данных" -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" msgstr "Панель администрирования" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" msgstr "Панель помощника" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" msgstr "Публичная область" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" msgstr "Обзор" -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" msgstr "Установка" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" msgstr "Настройки" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" msgstr "Импорт данных" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:175 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" msgstr "Участники" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" msgstr "Личные URL" -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" msgstr "Адреса email" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" msgstr "Заранее сформированные коллегии" -#: templates/nav/admin_nav.html:97 +#: templates/nav/admin_nav.html msgid "Export XML" msgstr "" -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:160 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" msgstr "Стороны" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" msgstr "Статус людей" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" msgstr "Статус аудиторий" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" msgstr "Обратная связь" -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" msgstr "Последние" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" msgstr "Важное" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" msgstr "Комментарии" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" msgstr "Найти по источнику" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" msgstr "Найти по цели" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" msgstr "Неотправленные" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" msgstr "Добавить обратную связь" -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" msgstr "Массовое обновление" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:165 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" msgstr "Результаты" -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" msgstr "Все команды" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "Команды" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" msgstr "%(category)s команды" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" msgstr "Все спикеры" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" msgstr "%(category)s спикеры" -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" msgstr "Ответы" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:155 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "Темы" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:170 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" msgstr "Дайверсити" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" msgstr "Брейки" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" msgstr "" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" msgstr "" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" msgstr "" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" msgstr "Выйти" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" msgstr "Ввести результаты" -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:211 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" msgstr "Введите обратную связь" -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" msgstr "Список участников" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:180 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" msgstr "Клубы" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" msgstr "Кодовые имена" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" msgstr "Посмотреть идентификаторы" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" msgstr "Показать/Распечатать сетку" -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" msgstr "Командный тэб" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" msgstr "Спикерский тэб" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" msgstr "Вкладка ответов" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" msgstr "Тэб судей" -#: templates/nav/public_nav.html:53 templates/nav/public_nav.html:62 +#: templates/nav/public_nav.html msgid "Motions Tab" msgstr "Тэб тем" -#: templates/nav/public_nav.html:56 +#: templates/nav/public_nav.html msgid "By round" msgstr "" -#: templates/nav/public_nav.html:57 +#: templates/nav/public_nav.html msgid "Globally" msgstr "" -#: templates/nav/public_nav.html:72 +#: templates/nav/public_nav.html msgid "Draws" msgstr "Сетки" -#: templates/nav/public_nav.html:83 +#: templates/nav/public_nav.html msgid "No Draws Available" msgstr "Сетка недоступна" -#: templates/nav/public_nav.html:91 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" msgstr "Сетка на %(round)s" -#: templates/nav/public_nav.html:95 +#: templates/nav/public_nav.html msgid "Current Draws" msgstr "Текущая сетка" -#: templates/nav/public_nav.html:115 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" msgstr "Результаты" -#: templates/nav/public_nav.html:133 +#: templates/nav/public_nav.html msgid "Break" msgstr "Брейк" -#: templates/nav/public_nav.html:185 +#: templates/nav/public_nav.html msgid "Feedback Progress" msgstr "Прогресс отправки форм обратной связи" -#: templates/nav/public_nav.html:191 templates/nav/public_nav.html:197 +#: templates/nav/public_nav.html msgid "Enter Ballot" msgstr "Ввести бэллот" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" msgstr "Доступность" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" msgstr "Сетка" -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" msgstr "Показать" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" msgstr "Область администратора для %(tournament)s" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" msgstr "Область ассистентаа для %(tournament)s" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" msgstr "Публичная область для %(tournament)s" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" msgstr "Логин" -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" msgstr "До свидания" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" msgstr "Вы вышли из системы. Войти снова?" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" msgstr "Логин" -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" msgstr "Войти в Tabbycat" -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." msgstr "Ваше имя пользователя и пароль не совпадают." -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." msgstr "У вашей учетной записи нет доступа к этой странице. Чтобы продолжить, войдите в систему с учетной записью, имеющей доступ." -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." msgstr "Пожалуйста, войдите в систему, чтобы получить доступ к этой странице." -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" msgstr "Пароль изменен" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." msgstr "Ваш пароль изменен." -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" msgstr "Перейти на домашнюю страницу" -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:27 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" msgstr "Изменения пароля" -#: templates/registration/password_change_form.html:16 +#: templates/registration/password_change_form.html #, python-format msgid "API Token: %(api_token)s" msgstr "" -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgid "The API token will allow you to authorize external applications to access the site as staff." msgstr "" -#: templates/registration/password_change_form.html:28 +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." msgstr "Пожалуйста, введите старый пароль, а затем введите новый." -#: templates/registration/password_change_form.html:33 -#: templates/registration/password_reset_confirm.html:25 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" msgstr "Изменить мой пароль" -#: templates/registration/password_change_form.html:34 -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" msgstr "Отменить и вернуться на главную страницу сайта" -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "Изменение пароля прошло успешно" -#: templates/registration/password_reset_complete.html:11 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." msgstr "Пароль изменен." -#: templates/registration/password_reset_complete.html:14 -#: templates/registration/password_reset_done.html:15 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" msgstr "Перейти на страницу авторизации" -#: templates/registration/password_reset_confirm.html:4 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" msgstr "Подтверждение изменения пароля" -#: templates/registration/password_reset_confirm.html:16 -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html msgctxt "page title" msgid "Password Reset" msgstr "Восстановление пароля" -#: templates/registration/password_reset_confirm.html:18 +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" msgstr "Пожалуйста, введите новый пароль (дважды):" -#: templates/registration/password_reset_confirm.html:33 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." msgstr "Ссылка для изменения пароля была неверна, возможно, потому что она уже была использована. Пожалуйста, запросите новое изменение пароля." -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" msgid "Password reset email sent" msgstr "Отправлено электронное письмо об изменении пароля" -#: templates/registration/password_reset_done.html:11 +#: templates/registration/password_reset_done.html msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." msgstr "Мы выслали вам инструкцию для настройки пароля. Если учетная запись с указанным вами адресом электронной почты существует, вскоре вы получите инструкцию." -#: templates/registration/password_reset_done.html:12 +#: templates/registration/password_reset_done.html msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." msgstr "Если вы не получили инструкцию, убедитесь, что вы ввели тот адрес электронный почты, на который зарегистрирована учетная запись и проверьте папку со спамом." -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" msgstr "Здравствуйте, %(user)s!" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "Кто-то попросил изменить пароль для адреса электронной почты %(email)s на сайте Tabbycat на сайте %(protocol)s://%(domain)s." -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" msgstr "Если это были вы, воспользуйтесь ссылкой ниже чтобы изменить свой пароль:" -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "Если это были не вы, это, скорее всего, значит, что кто-то другой вбил ваш e-mail адрес в форму изменения пароля на сайте Tabbycat %(protocol)s//%(domain)s." -#: templates/registration/password_reset_form.html:27 +#: templates/registration/password_reset_form.html msgid "Enter your email address below, and we'll email you a password reset link." msgstr "Введите свой адрес электронной почты ниже, и мы отправим вам ссылку на восстановление пароля." -#: templates/registration/password_reset_form.html:34 +#: templates/registration/password_reset_form.html msgid "Please enter a valid email address." msgstr "Пожалуйста, введите действительный e-mail." -#: templates/registration/password_reset_form.html:39 users/forms.py:10 -#: users/forms.py:25 +#: templates/registration/password_reset_form.html users/forms.py msgid "Email address" msgstr "" -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" msgstr "Восстановить мой пароль" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" msgstr "Вернуться на страницу входа" -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" msgstr "Восстановление пароля на сайте Tabbycat на %(domain)s" -#: urls.py:102 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" msgstr "Привет, %(user)s - вы только что вошли!" -#: urls.py:105 +#: urls.py msgid "Welcome! You just logged in!" msgstr "Добро пожаловать! Вы только что вошли!" -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." msgstr "Пользователи со статусом персонала могут просматривать и редактировать область базы данных. Это потенциально опасно и должно быть зарезервировано только для фактического тэбмастера (ов)." -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." msgstr "Суперпользователи имеют полный доступ ко всем областям Tabbycat, необходимым для проведения турнира. Пользователи, не являющиеся суперпользователями, все еще могут выполнять задачи ввода данных, такие как добавление результатов и обратной связи, но не могут получить доступ к конфиденциальным областям, таким как Брейки и Обратная связь. Главным судьям и их заместителям, как правило, предоставляется статус суперпользователя, если они знают, что делают." -#: users/templates/admin/auth/delete_user_warning.html:6 +#: users/templates/admin/auth/delete_user_warning.html msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." msgstr "" -#: users/templates/signup.html:4 users/templates/signup.html:5 +#: users/templates/signup.html msgid "Sign-Up" msgstr "" -#: users/templates/signup.html:16 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Administrator Account" msgstr "" -#: users/templates/signup.html:18 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Assistant Account" msgstr "" -#: users/templates/signup.html:25 +#: users/templates/signup.html msgid "Create Account" msgstr "Создать учетную запись" -#: users/views.py:54 +#: users/views.py msgid "You have successfully created a new administrator account." msgstr "" -#: users/views.py:56 +#: users/views.py msgid "You have successfully created a new assistant account." msgstr "" -#: users/views.py:84 +#: users/views.py msgid "Whoops! It looks like someone's already created the first user account. Please log in." msgstr "" -#: users/views.py:92 +#: users/views.py #, python-format msgid "Welcome! You've created an account for %s." msgstr "" diff --git a/tabbycat/motions/locale/ru/LC_MESSAGES/django.po b/tabbycat/motions/locale/ru/LC_MESSAGES/django.po index 6ed3c5700d2..18c414637d0 100644 --- a/tabbycat/motions/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -17,149 +17,148 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "Темы" -#: motions/models.py:9 +#: motions/models.py msgid "text" msgstr "текст" -#: motions/models.py:10 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" msgstr "Тема полностью, например \"Эта палата выпрямит все бананы\"" -#: motions/models.py:12 +#: motions/models.py msgid "reference" msgstr "ссылка" -#: motions/models.py:13 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" msgstr "Краткое название темы, например \"Бананы\"" -#: motions/models.py:15 +#: motions/models.py msgid "info slide" msgstr "инфослайд" -#: motions/models.py:16 +#: motions/models.py msgid "The information slide for this topic; if it has one" msgstr "Информационный слайд для этой темы, если он есть" -#: motions/models.py:19 +#: motions/models.py msgid "tournament" msgstr "турнир" -#: motions/models.py:21 +#: motions/models.py msgid "rounds" msgstr "раунды" -#: motions/models.py:24 motions/models.py:37 motions/models.py:62 +#: motions/models.py msgid "motion" msgstr "тема" -#: motions/models.py:25 +#: motions/models.py msgid "motions" msgstr "темы" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" msgstr "команда" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" msgstr "предпочтения" -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" msgstr "отправка бэллота" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" msgstr "предпочтение тем командой" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" msgstr "предпочтения тем командой" -#: motions/models.py:64 +#: motions/models.py msgid "round" msgstr "раунд" -#: motions/models.py:67 +#: motions/models.py msgid "sequence number" msgstr "порядковый номер" -#: motions/models.py:68 +#: motions/models.py msgid "The order in which motions are displayed" msgstr "Порядок, в котором представлены темы" -#: motions/models.py:73 +#: motions/models.py msgid "round motion" msgstr "" -#: motions/models.py:74 +#: motions/models.py msgid "round motions" msgstr "" -#: motions/statistics.py:86 +#: motions/statistics.py msgid "extremely strong evidence" msgstr "очень сильное обоснование" -#: motions/statistics.py:87 +#: motions/statistics.py msgid "strong evidence" msgstr "сильное обоснование" -#: motions/statistics.py:88 +#: motions/statistics.py msgid "moderate evidence" msgstr "среднее обоснование" -#: motions/statistics.py:89 +#: motions/statistics.py msgid "weak evidence" msgstr "слабое обоснование" -#: motions/statistics.py:90 +#: motions/statistics.py msgid "very weak evidence" msgstr "очень слабое обоснование" -#: motions/statistics.py:91 +#: motions/statistics.py msgid "extremely weak evidence" msgstr "невероятно слабое обоснование" -#: motions/statistics.py:114 +#: motions/statistics.py msgid "balance inconclusive" msgstr "несовершенный баланс" -#: motions/statistics.py:115 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" msgstr "слишком мало дебатов, чтобы получить значимую статистику" -#: motions/statistics.py:123 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" msgstr "небалансная на %(level)s уровне" -#: motions/statistics.py:124 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." msgstr "статистика χ² %(chisq).3f, предоставляет %(evidence)s для того, чтобы предложить, что эта тема была небалансной — на уровне значения %(level)s." -#: motions/statistics.py:129 +#: motions/statistics.py msgid "probably balanced" msgstr "возможно балансная" -#: motions/statistics.py:130 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." msgstr "статистика χ² %(chisq).3f, предоставляет недостаточные доказательства, чтобы предположить, что эта тема было небалансной на любом уровне значений." -#: motions/templates/motion_global_statistics.html:22 -#: motions/templates/motion_round_statistics.html:31 -#: motions/templates/public_motions.html:32 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" msgstr "Посмотреть инфослайд" -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" @@ -168,7 +167,7 @@ msgstr[1] "результаты %(ndebates)s дебатов" msgstr[2] "результаты %(ndebates)s дебатов" msgstr[3] "результаты %(ndebates)s дебатов" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" @@ -177,7 +176,7 @@ msgstr[1] "%(advancing)s в %(ndebates)s команды на %(side)s (%(percent msgstr[2] "%(advancing)s в %(ndebates)s команды на %(side)s (%(percentage)s%%) прошли" msgstr[3] "%(advancing)s в %(ndebates)s команды на %(side)s (%(percentage)s%%) прошли" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" @@ -186,59 +185,59 @@ msgstr[1] "%(eliminated)s из %(ndebates)s команд на %(side)s (%(percen msgstr[2] "%(eliminated)s из %(ndebates)s команд на %(side)s (%(percentage)s%%) не прошли" msgstr[3] "%(eliminated)s из %(ndebates)s команд на %(side)s (%(percentage)s%%) не прошли" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" msgstr "прошедший" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." msgstr "преим." -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" msgstr "исключен" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." msgstr "искл." -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" msgstr "Распределение результатов %(side)s" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" msgstr "Нет результатов по этой теме" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" msgstr "Правительство" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" msgstr "Оппозиция" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" msgstr "Среднее количество баллов за сторону" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" msgstr "Первые" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" msgstr "Вторые" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" msgstr "Среднее количество баллов команд первых и вторых столов" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" @@ -247,7 +246,7 @@ msgstr[1] "среднее количество баллов за позицию msgstr[2] "среднее количество баллов за позицию в дебатах (%(ndebates)s" msgstr[3] "среднее количество баллов за позицию в дебатах (%(ndebates)s" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" @@ -256,13 +255,12 @@ msgstr[1] "%(count)s результаты для%(side)s(%(percentage)s%%) со msgstr[2] "%(count)s результаты для%(side)s(%(percentage)s%%) составили %(points)s баллов" msgstr[3] "%(count)s результаты для%(side)s(%(percentage)s%%) составили %(points)s баллов" -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" msgstr "%(side)s результаты" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" @@ -271,12 +269,11 @@ msgstr[1] "%(count)s %(side)s победы" msgstr[2] "%(count)s %(side)s победы" msgstr[3] "%(count)s %(side)s победы" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" msgstr "Нет команд, дебатировавших эту тему" -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" @@ -285,11 +282,11 @@ msgstr[1] "%(count)s %(side)s вето" msgstr[2] "%(count)s %(side)s вето" msgstr[3] "%(count)s %(side)s вето" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" msgstr "Нет команд, наложивших вето на эту тему" -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" msgstr[0] "Редактировать тему" @@ -297,23 +294,31 @@ msgstr[1] "Редактировать темы" msgstr[2] "Редактировать темы" msgstr[3] "Редактировать темы" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" msgstr "Показать сетку" -#: motions/templates/motions_edit.html:28 +#: motions/templates/motions_edit.html msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." msgstr "" -#: motions/templates/motions_edit.html:30 +#: motions/templates/motions_edit.html msgid "Reuse Motions from Last Round" msgstr "" -#: motions/templates/motions_edit.html:35 +#: motions/templates/motions_edit.html msgid "Use Existing Motions" msgstr "" -#: motions/templates/motions_edit.html:74 +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" msgstr[0] "Сохранить тему" @@ -321,23 +326,23 @@ msgstr[1] "Сохранить темы" msgstr[2] "Сохранить темы" msgstr[3] "Сохранить темы" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "Инфослайд" -#: motions/templates/public_motions.html:41 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." msgstr "Для этого раунда нет доступных тем." -#: motions/templates/public_motions.html:47 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." msgstr "Темы на этот раунд не опубликованы." -#: motions/templates/public_motions.html:52 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." msgstr "Темы на этот раунд не опубликованы." -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" @@ -346,7 +351,7 @@ msgstr[1] "Показать инфослайд для %(round)s" msgstr[2] "Показать инфослайд для %(round)s" msgstr[3] "Показать инфослайд для %(round)s" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" @@ -355,23 +360,23 @@ msgstr[1] "Показать темы для %(round)s" msgstr[2] "Показать темы для %(round)s" msgstr[3] "Показать темы для %(round)s" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." msgstr "Тема на этот раунд не введена в Tabbycat." -#: motions/utils.py:11 +#: motions/utils.py msgid "Not all latest ballots list the same motion, so could not be merged." msgstr "" -#: motions/utils.py:29 +#: motions/utils.py msgid "Motion vetos are inconsistent, so could not be merged." msgstr "" -#: motions/views.py:91 +#: motions/views.py msgid "The motion has been saved." msgstr "Тема сохранена." -#: motions/views.py:93 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." @@ -380,7 +385,7 @@ msgstr[1] "%(count)d темы сохранены." msgstr[2] "%(count)d темы сохранены." msgstr[3] "%(count)d темы сохранены." -#: motions/views.py:97 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." @@ -389,7 +394,11 @@ msgstr[1] "%(count)d темы удалены." msgstr[2] "%(count)d темы удалены." msgstr[3] "%(count)d темы удалены." -#: motions/views.py:140 +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "" + +#: motions/views.py #, python-format msgid "Reused the motion from the previous round." msgid_plural "Reused the %(count)d motions from the previous round." @@ -398,19 +407,27 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: motions/views.py:164 -msgid "Released the motion(s)." -msgstr "Опубликовать тему(ы)." +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: motions/views.py:171 -msgid "Unreleased the motion(s)." -msgstr "Отменить публикацию тем." +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: motions/views.py:195 +#: motions/views.py msgid "Round Motions" msgstr "Темы Раундов" -#: motions/views.py:209 +#: motions/views.py msgid "Motion Statistics" msgstr "Статистика по темам" diff --git a/tabbycat/notifications/locale/ru/LC_MESSAGES/django.po b/tabbycat/notifications/locale/ru/LC_MESSAGES/django.po index 0f2400e8af4..cea4a43c4ce 100644 --- a/tabbycat/notifications/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -18,366 +18,364 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" msgstr "Уведомления" -#: notifications/forms.py:12 +#: notifications/forms.py msgid "Recipient email address" msgstr "Email получателя" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" msgstr "Тестовый email от %(host)s" -#: notifications/forms.py:17 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" msgstr "Поздравляем! Если вы читаете это сообщение, с вашим почтовым бекэндрм на %(host)s все хорошо!" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Subject" msgstr "Тема письма" -#: notifications/forms.py:31 +#: notifications/forms.py msgid "Message" msgstr "Сообщение" -#: notifications/models.py:11 notifications/models.py:26 +#: notifications/models.py msgid "email" msgstr "email" -#: notifications/models.py:12 +#: notifications/models.py msgid "SMS" msgstr "СМС" -#: notifications/models.py:21 +#: notifications/models.py msgid "recipient" msgstr "получатель" -#: notifications/models.py:23 +#: notifications/models.py msgid "method" msgstr "метод" -#: notifications/models.py:28 notifications/models.py:134 +#: notifications/models.py msgid "context" msgstr "контекст" -#: notifications/models.py:31 +#: notifications/models.py msgid "notification" msgstr "уведомление" -#: notifications/models.py:33 notifications/models.py:74 -#: notifications/models.py:130 +#: notifications/models.py msgid "timestamp" msgstr "отметка времени" -#: notifications/models.py:36 +#: notifications/models.py msgid "sent message" msgstr "отправить сообщение" -#: notifications/models.py:37 +#: notifications/models.py msgid "sent messages" msgstr "отправить сообщения" -#: notifications/models.py:58 +#: notifications/models.py msgid "team points" msgstr "баллы команды" -#: notifications/models.py:59 +#: notifications/models.py msgid "ballot confirmed" msgstr "бэллот подтвержден" -#: notifications/models.py:60 +#: notifications/models.py msgid "feedback URL" msgstr "uRL обратной связи" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot URL" msgstr "URL бэллота" -#: notifications/models.py:62 +#: notifications/models.py msgid "landing page URL" msgstr "URL стартовой страницы" -#: notifications/models.py:63 +#: notifications/models.py msgid "adjudicator draw released" msgstr "сетка судей опубликована" -#: notifications/models.py:64 +#: notifications/models.py msgid "team registration" msgstr "регистрация команд" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator registration" msgstr "регистрация судей" -#: notifications/models.py:66 +#: notifications/models.py msgid "motion(s) released" msgstr "тема опубликована" -#: notifications/models.py:67 +#: notifications/models.py msgid "team draw released" msgstr "командная сетка опубликована" -#: notifications/models.py:68 +#: notifications/models.py msgid "custom message" msgstr "" -#: notifications/models.py:72 notifications/models.py:132 +#: notifications/models.py msgid "event" msgstr "мероприятие" -#: notifications/models.py:77 +#: notifications/models.py msgid "tournament" msgstr "турнир" -#: notifications/models.py:79 +#: notifications/models.py msgid "round" msgstr "раунд" -#: notifications/models.py:82 +#: notifications/models.py msgid "subject template" msgstr "" -#: notifications/models.py:84 +#: notifications/models.py msgid "body template" msgstr "" -#: notifications/models.py:87 +#: notifications/models.py msgid "bulk notification" msgstr "массовое уведомление" -#: notifications/models.py:88 +#: notifications/models.py msgid "bulk notifications" msgstr "массовые уведомления" -#: notifications/models.py:114 +#: notifications/models.py msgid "Processed" msgstr "Обрабатывается" -#: notifications/models.py:115 +#: notifications/models.py msgid "Dropped" msgstr "Сброшено" -#: notifications/models.py:116 +#: notifications/models.py msgid "Deferred" msgstr "Отложено" -#: notifications/models.py:117 +#: notifications/models.py msgid "Delivered" msgstr "Доставлено" -#: notifications/models.py:118 +#: notifications/models.py msgid "Bounced" msgstr "Возвращено" -#: notifications/models.py:119 +#: notifications/models.py msgid "Opened" msgstr "Открыто" -#: notifications/models.py:120 +#: notifications/models.py msgid "Clicked" msgstr "Кликнуто" -#: notifications/models.py:121 +#: notifications/models.py msgid "Unsubscribed" msgstr "Отписавшийся" -#: notifications/models.py:122 +#: notifications/models.py msgid "Marked as spam" msgstr "Помечено как спам" -#: notifications/models.py:123 +#: notifications/models.py msgid "Unsubscribed from group" msgstr "Отписан от группы" -#: notifications/models.py:124 +#: notifications/models.py msgid "Resubscribed to group" msgstr "Возобновлена подписка на группу" -#: notifications/models.py:128 +#: notifications/models.py msgid "email message" msgstr "отправить сообщение по email" -#: notifications/models.py:137 +#: notifications/models.py msgid "email status" msgstr "статус email" -#: notifications/models.py:138 +#: notifications/models.py msgid "email statuses" msgstr "статусы email" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." msgstr "Вы не указали адрес ответа. Это означает, что участники могут не ответить на сообщение, если у них есть вопросы. Пожалуйста, установите его в разделе Уведомления настроек." -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." msgstr "URL вебхука для использования в SendGrid %(notifications_webhook_url)s. Пожалуйста, укажите URL HTTP POST в SendGrid к этому." -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" msgstr "Отправить сообщение(я)" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." msgstr "Email могут быть отправлены Tabbycat для различных целей. Email отправляются, когда включены определенные настройки (например, включено Получение Бэллотов) или через действия, доступные на конкретных страницах (например страницы отображения сетки для сочетания команд; или страницы Участников для регистрации команды). Эта страница показывает статус ранее отправленных email." -#: notifications/templates/notifications_nav.html:5 notifications/views.py:75 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" msgstr "Статусы email" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:29 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" msgstr "Отправить тестовый email" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" msgstr "Отправить пользовательский email" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" msgstr "Отправить тестовый email" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." msgstr "Вы можете использовать эту форму для отправки тестового письма, чтобы проверить, что настройки бекэнда электронной почты работают, прежде чем вы попытаетесь отправить уведомления по электронной почте участникам." -#: notifications/templates/test_email.html:20 +#: notifications/templates/test_email.html #, python-format msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." msgstr "" -#: notifications/templates/test_email.html:30 +#: notifications/templates/test_email.html msgid "Go back to the site home page" msgstr "Вернуться на домашнюю страницу" -#: notifications/utils.py:26 +#: notifications/utils.py msgid "the chair" msgstr "чэйр" -#: notifications/utils.py:27 +#: notifications/utils.py msgid "the only" msgstr "только" -#: notifications/utils.py:28 +#: notifications/utils.py msgid "a panellist" msgstr "винг" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "a trainee" msgstr "винг без права голоса" -#: notifications/utils.py:59 +#: notifications/utils.py msgid "TBA" msgstr "Будет анонсировано" -#: notifications/utils.py:88 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "%(tournament)s %(round)s @ %(room)s" -#: notifications/utils.py:99 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" msgstr "
  • %(side)s: %(team)s (%(points)d баллов с %(speaks)s общим спикерским)" -#: notifications/utils.py:102 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" msgstr "
  • %(side)s:%(team)s (%(points)s - %(speaks)s общий спикерский)" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Win" msgstr "Победа" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Loss" msgstr "Поражение" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " msgstr "
  • %(pos)s: %(speaker)s (%(score)s)
  • " -#: notifications/utils.py:183 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " msgstr "
  • %(text)s (%(ref)s)
  • " -#: notifications/utils.py:206 notifications/utils.py:207 +#: notifications/utils.py msgid ", " msgstr ", " -#: notifications/views.py:47 +#: notifications/views.py #, python-format msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" msgstr "" -#: notifications/views.py:51 +#: notifications/views.py msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." msgstr "" -#: notifications/views.py:60 +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" msgstr "Произошла ошибка при отправке тестового email: %(error)s" -#: notifications/views.py:65 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." msgstr "Тестовый email отправлен на %(recipient)s." -#: notifications/views.py:81 +#: notifications/views.py msgid "N/A" msgstr "Н/Д" -#: notifications/views.py:82 +#: notifications/views.py msgid "Not known" msgstr "Неизвестен" -#: notifications/views.py:87 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" msgstr "%(status)s @ %(time)s" -#: notifications/views.py:133 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "@%s" -#: notifications/views.py:152 +#: notifications/views.py msgid "Timeline" msgstr "Временная шкала" -#: notifications/views.py:162 notifications/views.py:260 +#: notifications/views.py msgid "Participant" msgstr "Участник" -#: notifications/views.py:163 notifications/views.py:265 +#: notifications/views.py msgid "Email address" msgstr "" -#: notifications/views.py:164 +#: notifications/views.py msgid "Status" msgstr "Статус" -#: notifications/views.py:165 +#: notifications/views.py msgid "Time" msgstr "Время" -#: notifications/views.py:204 +#: notifications/views.py msgid "Email Participants" msgstr "Отправить email участникам" -#: notifications/views.py:233 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." @@ -386,35 +384,35 @@ msgstr[1] "%(email_count)s email адреса поставлены в очере msgstr[2] "%(email_count)s email адреса поставлены в очередь на отправку." msgstr[3] "%(email_count)s email адреса поставлены в очередь на отправку." -#: notifications/views.py:239 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." msgstr "Email не были отправлены— вероятно, потому что не были выбраны получатели." -#: notifications/views.py:250 +#: notifications/views.py msgid "Send Email" msgstr "Отправить email" -#: notifications/views.py:266 +#: notifications/views.py msgid "Not Provided" msgstr "Не предоставлено" -#: notifications/views.py:279 +#: notifications/views.py msgid "Role" msgstr "Роль" -#: notifications/views.py:280 +#: notifications/views.py msgid "Adjudicator" msgstr "Судья" -#: notifications/views.py:280 +#: notifications/views.py msgid "Speaker" msgstr "Спикер" -#: notifications/views.py:288 +#: notifications/views.py msgid "Speakers" msgstr "Спикеры" -#: notifications/views.py:289 +#: notifications/views.py msgid "Adjudicators" msgstr "Судьи" diff --git a/tabbycat/options/locale/ru/LC_MESSAGES/django.po b/tabbycat/options/locale/ru/LC_MESSAGES/django.po index f91563742ae..08056a4e46d 100644 --- a/tabbycat/options/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -18,1587 +18,1600 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" msgstr "" -#: options/models.py:13 +#: options/models.py msgid "instance" msgstr "экземпляр" -#: options/models.py:18 +#: options/models.py msgid "tournament preference" msgstr "предпочтение турнира" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" msgstr "предпочтения турнира" -#: options/preferences.py:19 options/templates/preferences_index.html:53 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" msgstr "Правила баллов" -#: options/preferences.py:25 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" msgstr "Минимальный допустимый балл для конструктивных речей" -#: options/preferences.py:28 +#: options/preferences.py msgid "Minimum speaker score" msgstr "Минимальный спикерский балл" -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum speaker score" msgstr "Максимальный спикерский балл" -#: options/preferences.py:35 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" msgstr "Максимальный допустимый балл для конструктивных речей" -#: options/preferences.py:43 +#: options/preferences.py msgid "Speaker score step" msgstr "Шаг спикерских баллов" -#: options/preferences.py:44 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" msgstr "Шаг баллов, допустимый для конструктивных речей, например полные баллы (1) или половины баллов (0,5)" -#: options/preferences.py:52 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" msgstr "Максимальное количество баллов, на которое одна команда может опередить другую (0 означает отсутствие предела)" -#: options/preferences.py:53 +#: options/preferences.py msgid "Maximum margin" msgstr "Максимальный предел" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" msgstr "Минимальный допустимый балл для заключительных речей" -#: options/preferences.py:63 +#: options/preferences.py msgid "Minimum reply score" msgstr "Минимальный балл заключительных речей" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" msgstr "Максимальный допустимый балл для заключительных речей" -#: options/preferences.py:72 +#: options/preferences.py msgid "Maximum reply score" msgstr "Максимальный балл заключительных речей" -#: options/preferences.py:80 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" msgstr "Шаг баллов, допустимый для заключительных речей, например полные баллы (1) или половины баллов (0,5)" -#: options/preferences.py:81 +#: options/preferences.py msgid "Reply score step" msgstr "Шаг баллов заключительных речей" -#: options/preferences.py:89 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" msgstr "Если выбрано, то поле выигравшей команды включает в себя не согласившихся судей" -#: options/preferences.py:90 +#: options/preferences.py msgid "Margin includes dissenters" msgstr "Поле включает не согласившихся" -#: options/preferences.py:98 +#: options/preferences.py msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" msgstr "" -#: options/preferences.py:99 +#: options/preferences.py msgid "Team score includes ghosts" msgstr "" -#: options/preferences.py:106 options/templates/preferences_index.html:58 +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" msgstr "Правила сетки" -#: options/preferences.py:112 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" msgstr "Автораспределение будет использовать как судей с правом голоса только тех, кто имеет этот балл или выше" -#: options/preferences.py:113 +#: options/preferences.py msgid "Minimum adjudicator score to vote" msgstr "Минимальный балл для судьи, чтобы иметь право голоса" -#: options/preferences.py:121 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" msgstr "Снижение, используемое при автораспределении судей в случае конфликтов" -#: options/preferences.py:122 +#: options/preferences.py msgid "Adjudicator conflict penalty" msgstr "Снижение при судейском конфликте" -#: options/preferences.py:130 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" msgstr "Снижение, используемое при автораспределении судей в случае истории" -#: options/preferences.py:131 +#: options/preferences.py msgid "Adjudicator history penalty" msgstr "Снижение при истории" -#: options/preferences.py:139 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" msgstr "Снижение, используемое при автоматическом распределении коллегии в связи с несоответствием приоритета" -#: options/preferences.py:140 +#: options/preferences.py msgid "Importance mismatch penalty" msgstr "Снижение при несоответствии приоритета" -#: options/preferences.py:148 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" msgstr "Снижение применимое при методе избежания конфликтов, чтобы команды не играли с представителями их же института" -#: options/preferences.py:149 +#: options/preferences.py msgid "Team institution penalty" msgstr "Отрицательный коэффициент при совпадении клубов" -#: options/preferences.py:157 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" msgstr "Снижение применимое при методе избежания конфликтов, чтобы команды не играли друг с другом два раза или больше" -#: options/preferences.py:158 +#: options/preferences.py msgid "Team history penalty" msgstr "Снижение командной истории" -#: options/preferences.py:166 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" msgstr "Если отмечено, система постарается не ставить команды из одного клуба играть друг против друга" -#: options/preferences.py:167 +#: options/preferences.py msgid "Avoid same institution" msgstr "Избегать тот же клуб" -#: options/preferences.py:175 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" msgstr "Если отмечено, при создании сетки команды, по возможности, не будут играть друг с другом второй раз" -#: options/preferences.py:176 +#: options/preferences.py msgid "Avoid team history" msgstr "Избегать историю команд" -#: options/preferences.py:184 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "Как разрешаются нечетные группы команд (смотри документацию для более подробной информации)" -#: options/preferences.py:185 +#: options/preferences.py msgid "Odd bracket resolution method" msgstr "Метод разрешения нечетных групп команд" -#: options/preferences.py:189 +#: options/preferences.py msgid "Pull up from top" msgstr "Пулл-ап сверху" -#: options/preferences.py:190 +#: options/preferences.py msgid "Pull up from bottom" msgstr "Пулл-ап снизу" -#: options/preferences.py:191 +#: options/preferences.py msgid "Pull up from middle" msgstr "Пулл-ап с середины" -#: options/preferences.py:192 +#: options/preferences.py msgid "Pull up at random" msgstr "Случайны пулл-ап" -#: options/preferences.py:193 +#: options/preferences.py msgid "Intermediate brackets" msgstr "Промежуточные группы команд" -#: options/preferences.py:194 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" msgstr "Промежуточные группы команд с перемещениями" -#: options/preferences.py:195 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" msgstr "Промежуточные 1 (предварительно распределенные стороны)" -#: options/preferences.py:196 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" msgstr "Промежуточные 2 (предварительно распределенные стороны)" -#: options/preferences.py:203 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" msgstr "Как распределяются позиции утверждения/отрицания (смотри документацию для дальнейших деталей)" -#: options/preferences.py:204 +#: options/preferences.py msgid "Side allocations method" msgstr "Метод распределения сторон" -#: options/preferences.py:208 options/preferences.py:225 +#: options/preferences.py msgid "Random" msgstr "Случайный" -#: options/preferences.py:209 +#: options/preferences.py msgid "Balance" msgstr "Баланс" -#: options/preferences.py:210 +#: options/preferences.py msgid "Pre-allocated" msgstr "Предварительно распределено" -#: options/preferences.py:211 +#: options/preferences.py msgid "Manually enter from ballot" msgstr "Вручную ввести из бэллота" -#: options/preferences.py:218 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." msgstr "Скольжение: 1 vs 6, 2 vs 7, …. Сворачивание: 1 vs 10, 2 vs 9, …. Примыкание: 1 vs 2, 3 vs 4, …." -#: options/preferences.py:219 +#: options/preferences.py msgid "Pairing method" msgstr "Метод паросочетания" -#: options/preferences.py:223 +#: options/preferences.py msgid "Slide" msgstr "Слайд" -#: options/preferences.py:224 +#: options/preferences.py msgid "Fold" msgstr "Сворачивание" -#: options/preferences.py:226 +#: options/preferences.py msgid "Adjacent" msgstr "Примыкание" -#: options/preferences.py:227 +#: options/preferences.py msgid "Fold top, adjacent rest" msgstr "Первый сворачиванием, остальные примыканием" -#: options/preferences.py:234 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" msgstr "Метод, который используется для того, чтобы команды не играли несколько раз против одних и тех же команд или против команд из своего клуба (см. документацию)" -#: options/preferences.py:236 +#: options/preferences.py msgid "Conflict avoidance method" msgstr "Метод избежания конфликтов" -#: options/preferences.py:240 +#: options/preferences.py msgid "Off" msgstr "Выкл" -#: options/preferences.py:241 +#: options/preferences.py msgid "One-up-one-down" msgstr "Одна вверх одна вниз" -#: options/preferences.py:248 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "Если использоаются пулл-апы, ограничите, какие команды можно пулл-апнуть. Это работает только на форматы с двумя командами и не влияет на БПФ или промежуточную расстановку." -#: options/preferences.py:250 +#: options/preferences.py msgid "Pullup restriction" msgstr "Ограничение на пулл-ап" -#: options/preferences.py:254 +#: options/preferences.py msgid "No restriction" msgstr "Нет ограничений" -#: options/preferences.py:255 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" msgstr "Выберите из команд, которые были пулл-апнуты меньшее количество раз на данный момент" -#: options/preferences.py:256 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" msgstr "Выбрать из команд с наименьшей силой сетки по победам на данный момент" -#: options/preferences.py:257 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" msgstr "Выберите из команд с наименьшей силой сетки по спикерским на данный момент" -#: options/preferences.py:264 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." msgstr "Как распределены пулл-апы в БПФ. Только \"Везде\" является совместимым с WUDC." -#: options/preferences.py:265 +#: options/preferences.py msgid "BP pullup distribution" msgstr "Распределение пулл-апов в БПФ" -#: options/preferences.py:269 +#: options/preferences.py msgid "Anywhere in bracket" msgstr "Где угодно в группе команд" -#: options/preferences.py:270 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" msgstr "Все в одной комнате (не совместимо с WUDC)" -#: options/preferences.py:277 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" msgstr "В БПФ, какую функцию стоимости позиции использовать (см. документацию для подробностей)" -#: options/preferences.py:278 +#: options/preferences.py msgid "BP position cost" msgstr "Стоимость позиции в БПФ" -#: options/preferences.py:282 +#: options/preferences.py msgid "Simple" msgstr "Простой" -#: options/preferences.py:283 +#: options/preferences.py msgid "Rényi entropy" msgstr "Энтропия Реньи" -#: options/preferences.py:284 +#: options/preferences.py msgid "Population variance" msgstr "Разница совокупностей" -#: options/preferences.py:291 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." msgstr "Порядок Реньи, если стоимость позиции в БПФ использует энтропию Реньи. У Шэннона a=1, у Хартли a=2. См. документацию для подробностей." -#: options/preferences.py:294 +#: options/preferences.py msgid "Rényi order (BP)" msgstr "Порядок Реньи (БПФ)" -#: options/preferences.py:303 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." msgstr "Стоимость позиции в БПФ повышается до этого числа; более высокие степени направлены на решение более крупных дисбалансов позиций, а не более мелких. Подробнее см. в документации." -#: options/preferences.py:306 +#: options/preferences.py msgid "BP position cost exponent" msgstr "Степень стоимости позиции в БПФ" -#: options/preferences.py:315 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." msgstr "В БПФ, какой метод использовать для решения проблемы назначений. Только Венгерский с перетасовкой совместим с WUDC." -#: options/preferences.py:317 +#: options/preferences.py msgid "BP assignment method" msgstr "Метод задания БПФ" -#: options/preferences.py:321 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" msgstr "Венгерский алгоритм (не совместимый с WUDC)" -#: options/preferences.py:322 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" msgstr "Венгерский алгоритм с перетасовкой" -#: options/preferences.py:329 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" msgstr "Автоматически сделать всех судей доступными для всех раундов" -#: options/preferences.py:330 +#: options/preferences.py msgid "Skip adjudicator check-ins" msgstr "Пропустить регистрацию судей" -#: options/preferences.py:338 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" msgstr "Скрыть позиции вингов в интерфейсе (и не выделять их)" -#: options/preferences.py:339 +#: options/preferences.py msgid "No panellist adjudicators" msgstr "Нет вингов" -#: options/preferences.py:347 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" msgstr "Скрыть позиции вингов без права голоса в интерфейсе (и не выделять их)" -#: options/preferences.py:348 +#: options/preferences.py msgid "No trainee adjudicators" msgstr "Нет вингов без права голоса" -#: options/preferences.py:355 options/templates/preferences_index.html:73 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" msgstr "Обратная связь" -#: options/preferences.py:361 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" msgstr "Минимальный балл для судьи" -#: options/preferences.py:362 +#: options/preferences.py msgid "Minimum adjudicator score" msgstr "Минимальный балл для судьи" -#: options/preferences.py:370 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" msgstr "Максимальный балл для судьи" -#: options/preferences.py:371 +#: options/preferences.py msgid "Maximum adjudicator score" msgstr "Максимальный балл для судьи" -#: options/preferences.py:379 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" msgstr "Используется для информирования о доступных вариантах обратной связи на судей (как в режиме онлайн, так и в печатном виде) и о прогрессе в отправке обратной связи" -#: options/preferences.py:380 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" msgstr "Разрешить и ожидать, что обратная связь будет представлена от" -#: options/preferences.py:384 +#: options/preferences.py msgid "Chairs on panellists and trainees" msgstr "Чэйров на вингов и вингов без права голоса" -#: options/preferences.py:385 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" msgstr "Винги на чэйров, чэйры на вингов и вингов без права голоса" -#: options/preferences.py:386 +#: options/preferences.py msgid "Panellists and trainees on chairs, vice-versa" msgstr "" -#: options/preferences.py:387 +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" msgstr "Все судьи (включая вингов без права голоса) друг на друга" -#: options/preferences.py:394 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "Ожидает обратную связь от команд на" -#: options/preferences.py:395 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" msgstr "Используется для информирования о доступных вариантах в форме обратной связи для команд (как онлайн, так и печатных) и о прогрессе обратной связи; этот вариант используется, например, на UADC" -#: options/preferences.py:399 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" msgstr "Только дающий разбор (разрешены голосающие винги, с запросом на выбор дающего разбор)" -#: options/preferences.py:400 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" msgstr "Все судьи в своих коллегиях (включая вингов без права голоса)" -#: options/preferences.py:407 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" msgstr "Показывать неожиданные формы обратной связи на страницах участников" -#: options/preferences.py:408 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" msgstr "Отображает неожиданную обратную связь с символом знака вопроса; работает только если одновременно включено публичное отображение участников и отслеживание прогресса обратной связи" -#: options/preferences.py:416 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" msgstr "Показывать, является ли судья вингом без права голоса" -#: options/preferences.py:417 +#: options/preferences.py msgid "Show unaccredited" msgstr "Показывать не прошедших тест" -#: options/preferences.py:425 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" msgstr "Любой пояснительный текст, необходимый для представления формы обратной связи" -#: options/preferences.py:426 +#: options/preferences.py msgid "Feedback introduction/explanation" msgstr "Введение/объяснение обратной связи" -#: options/preferences.py:435 options/templates/preferences_index.html:63 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" msgstr "Правила дебатов" -#: options/preferences.py:441 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" msgstr "Формат двух команд (например, австралийский или всемирный школьный) или БПФ" -#: options/preferences.py:442 +#: options/preferences.py msgid "Teams in debate" msgstr "Команды в дебатах" -#: options/preferences.py:446 +#: options/preferences.py msgid "Two-team format" msgstr "Формат двух команд" -#: options/preferences.py:447 +#: options/preferences.py msgid "British Parliamentary (four teams)" msgstr "Британский парламентский формат (4 команды)" -#: options/preferences.py:454 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." msgstr "Отправляют ли члены коллегии по бэллоту каждый или единый бэллот во время отборочных раундов. Примечания - в БПФ используется единый бэллот на одни дебаты." -#: options/preferences.py:455 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" msgstr "Бэллоты на одни дебаты, отборочные раунды" -#: options/preferences.py:459 options/preferences.py:472 +#: options/preferences.py msgid "One ballot per voting adjudicator" msgstr "Один бэллот на каждого голосующего судью" -#: options/preferences.py:460 options/preferences.py:473 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" msgstr "Консенсусный бэллот (один бэллот на одни дебаты)" -#: options/preferences.py:467 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." msgstr "Отправляют ли члены коллегии по бэллоту каждый или единый бэллот во время брейковых раундов. Примечания - в БПФ используется единый бэллот на одни дебаты." -#: options/preferences.py:468 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" msgstr "Бэллоты на одни дебаты, брейковые раунды" -#: options/preferences.py:480 +#: options/preferences.py msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." msgstr "" -#: options/preferences.py:481 +#: options/preferences.py msgid "Winner Declaration in ballot(s)" msgstr "" -#: options/preferences.py:485 +#: options/preferences.py msgid "Do not require separate winner selection" msgstr "" -#: options/preferences.py:486 +#: options/preferences.py msgid "Require separate winner selection as a check on correct scores" msgstr "" -#: options/preferences.py:487 +#: options/preferences.py msgid "Require winner selection to break tied-point debates" msgstr "" -#: options/preferences.py:488 +#: options/preferences.py msgid "Require winner selection, overriding scores" msgstr "" -#: options/preferences.py:495 +#: options/preferences.py msgid "When ballots should ask for speaker scores." msgstr "" -#: options/preferences.py:496 +#: options/preferences.py msgid "Require speaker scores" msgstr "" -#: options/preferences.py:500 +#: options/preferences.py msgid "Always require speaker scores" msgstr "" -#: options/preferences.py:501 +#: options/preferences.py msgid "Only require speaker scores in preliminary rounds" msgstr "" -#: options/preferences.py:502 +#: options/preferences.py msgid "Never require speaker scores" msgstr "" -#: options/preferences.py:509 +#: options/preferences.py msgid "How many substantive speakers on a team" msgstr "Сколько конструктивных спикеров в команде" -#: options/preferences.py:510 +#: options/preferences.py msgid "Substantive speakers" msgstr "Конструктивные спикеры" -#: options/preferences.py:518 +#: options/preferences.py msgid "What to call the teams" msgstr "Как назвать команды" -#: options/preferences.py:519 +#: options/preferences.py msgid "Side names" msgstr "Названия сторон" -#: options/preferences.py:528 +#: options/preferences.py msgid "Whether this style features scored reply speeches" msgstr "Есть ли в это формате оценка заключительных речей" -#: options/preferences.py:529 +#: options/preferences.py msgid "Reply scores" msgstr "Баллы за заключительные речи" -#: options/preferences.py:537 +#: options/preferences.py msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" msgstr "" -#: options/preferences.py:538 +#: options/preferences.py msgid "Require reply speaker to have given a substantive speech" msgstr "" -#: options/preferences.py:545 options/templates/preferences_index.html:68 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "Положение" -#: options/preferences.py:551 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" msgstr "Количество конструктивных речей, которые спикер может пропустить и все ещё быть в спикерском тэбе (-1 означает отсутствие лимита)" -#: options/preferences.py:552 +#: options/preferences.py msgid "Speeches missable for standings eligibility" msgstr "Речи, отсутствующие для доступности мест" -#: options/preferences.py:560 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" msgstr "Количество заключительных речей, которые спикер может пропустить и все ещё быть в спикерском тэбе (-1 означает отсутствие лимита)" -#: options/preferences.py:561 +#: options/preferences.py msgid "Replies missable for standings eligibility" msgstr "Заключительные речи, отсутствующие для доступности мест" -#: options/preferences.py:569 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" msgstr "Метрики, используемые для ранжирования команд (смотри документацию для дальнейших деталей)" -#: options/preferences.py:570 +#: options/preferences.py msgid "Team standings precedence" msgstr "Первенство положения команд" -#: options/preferences.py:586 options/preferences.py:621 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" msgstr "Следующие метрики не могут быть перечислены дважды: %(duplicates)s" -#: options/preferences.py:592 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" msgstr "Метрики для подсчета, но не используемые для ранжирования команд" -#: options/preferences.py:593 +#: options/preferences.py msgid "Team standings extra metrics" msgstr "Дополнительные метрики положения команд" -#: options/preferences.py:604 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" msgstr "Метрики, используемые для ранжирования спикеров (смотри документацию для дальнейших деталей)" -#: options/preferences.py:605 +#: options/preferences.py msgid "Speaker standings precedence" msgstr "Первенство положения спикеров" -#: options/preferences.py:627 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" msgstr "Метрики для подсчета, но не используемые для ранжирования спикеров" -#: options/preferences.py:628 +#: options/preferences.py msgid "Speaker standings extra metrics" msgstr "Дополнительные метрики положения спикеров" -#: options/preferences.py:638 options/templates/preferences_index.html:89 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" msgstr "Публикация тэба" -#: options/preferences.py:644 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." msgstr "Публично показать командный тэб. Предназначено для использования после турнира." -#: options/preferences.py:645 +#: options/preferences.py msgid "Release team tab to public" msgstr "Опубликовать командный тэб" -#: options/preferences.py:653 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." msgstr "Показывать только баллы топовых X команд в общедоступном тэбе (установите 0 для отображения всех команд)." -#: options/preferences.py:654 +#: options/preferences.py msgid "Top teams cutoff" msgstr "Отсечение лучших команд" -#: options/preferences.py:662 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." msgstr "Публично показать спикерский тэб. Предназначено для использования после турнира." -#: options/preferences.py:663 +#: options/preferences.py msgid "Release speaker tab to public" msgstr "Опубликовать спикерский тэб" -#: options/preferences.py:671 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." msgstr "Показывать только баллы топовых X спикеров в общедоступном тэбе (установите 0 для отображения всех спикеров)." -#: options/preferences.py:672 +#: options/preferences.py msgid "Top speakers cutoff" msgstr "Отсечение лучших спикеров" -#: options/preferences.py:680 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." msgstr "Публично показать тэб спикеров заключительных речей. Предназначено для использования после турнира." -#: options/preferences.py:681 +#: options/preferences.py msgid "Release replies tab to public" msgstr "Опубликовать тэб заключительных речей" -#: options/preferences.py:689 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." msgstr "Показывать только баллы топовых X спикеров заключительных речей в общедоступном тэбе (установите 0 для отображения всех спикеров)." -#: options/preferences.py:690 +#: options/preferences.py msgid "Top replies cutoff" msgstr "Отсечение лучших заключительных речей" -#: options/preferences.py:716 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." msgstr "Включить публичное отображение всех тем и информации о победах/поражениях/выборе. Это включает все темы - вне зависимости от того, были ли они опубликованы. Предназначено для использования после турнира." -#: options/preferences.py:719 +#: options/preferences.py msgid "Release motions tab to public" msgstr "Опубликовать тэб тем" -#: options/preferences.py:727 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" msgstr "Публично показать баллы обратной связи всех судей" -#: options/preferences.py:728 +#: options/preferences.py msgid "Release adjudicator tab to public" msgstr "Опубликовать судейский тэб" -#: options/preferences.py:736 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" msgstr "Что показывает судейский тэб (если опубликован)" -#: options/preferences.py:737 +#: options/preferences.py msgid "Adjudicator tab displays" msgstr "Судейский тэб отображает" -#: options/preferences.py:741 +#: options/preferences.py msgid "Only shows base score" msgstr "Показывает только исходный рейтинг" -#: options/preferences.py:742 +#: options/preferences.py msgid "Only shows final score" msgstr "Показывает только итоговый балл" -#: options/preferences.py:743 +#: options/preferences.py msgid "Shows base, final, and per-round scores" msgstr "Показывает исходный рейтинг, итоговый рейтинг и рейтинг за каждый раунд" -#: options/preferences.py:750 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." msgstr "Публично показать бэллоты каждого судьи. Предназначено для использования после турнира." -#: options/preferences.py:751 +#: options/preferences.py msgid "Release ballots to public" msgstr "Показать бэллоты публично" -#: options/preferences.py:759 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" msgstr "Это публикует все результаты всех раундов (включая закрытые и брейковые раунды). Сделайте это только после окончания турнира!" -#: options/preferences.py:760 +#: options/preferences.py msgid "Release all round results to public" msgstr "Опубликовать результаты всех раундов" -#: options/preferences.py:768 +#: options/preferences.py msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." msgstr "" -#: options/preferences.py:769 +#: options/preferences.py msgid "Release ballots through private URLs" msgstr "" -#: options/preferences.py:776 options/templates/preferences_index.html:94 +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" msgstr "Ввод данных" -#: options/preferences.py:782 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" msgstr "Могут ли судьи сами отправлять бэллоты и как они это делают" -#: options/preferences.py:783 +#: options/preferences.py msgid "Ballot submissions from adjudicators" msgstr "Представление судьями бэллотов" -#: options/preferences.py:787 options/preferences.py:801 +#: options/preferences.py msgid "Disabled (tab staff only)" msgstr "Отключено (только для тэбмастеров)" -#: options/preferences.py:788 options/preferences.py:802 +#: options/preferences.py msgid "Use private URLs" msgstr "Использовать личные URL" -#: options/preferences.py:789 options/preferences.py:803 +#: options/preferences.py msgid "Use publicly accessible form" msgstr "Использовать общедоступные формы" -#: options/preferences.py:796 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" msgstr "Могут ли участники сами отправлять формы обратной связи и как они это делают" -#: options/preferences.py:797 +#: options/preferences.py msgid "Feedback submissions from participants" msgstr "Предоставление форм обратной связи от участников" -#: options/preferences.py:810 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" msgstr "Если отмечено, пользователи должны ввести пароль при отправке форм обратной связи и бэллотов" -#: options/preferences.py:811 +#: options/preferences.py msgid "Require password for submission" msgstr "Запрашивать пароль для отправки" -#: options/preferences.py:819 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" msgstr "Значение пароля, требуемого для отправки, если требуется пароль" -#: options/preferences.py:820 +#: options/preferences.py msgid "Password for public submission" msgstr "Пароль для отправки" -#: options/preferences.py:828 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" msgstr "Избегает двойную проверку, устанавливая автоматическое подтверждение бэллотов" -#: options/preferences.py:829 +#: options/preferences.py msgid "Bypass double checking" msgstr "Избежать повторной проверки" -#: options/preferences.py:837 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." msgstr "" -#: options/preferences.py:838 +#: options/preferences.py msgid "Enforce blind confirmations" msgstr "" -#: options/preferences.py:846 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." msgstr "Допускаются ли помощники к страницам, которые могут раскрыть темы и сочетания команд до опубликования (эти страницы полезны для публичного отображения тем/сетки для печати бэллотов)." -#: options/preferences.py:849 +#: options/preferences.py msgid "Assistant user access" msgstr "Доступ помощника пользователя" -#: options/preferences.py:854 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" msgstr "Все области (введение результатов, отображение сетки и темы)" -#: options/preferences.py:855 +#: options/preferences.py msgid "Just results entry and draw display" msgstr "Только введение результатов и отображение сетки" -#: options/preferences.py:856 +#: options/preferences.py msgid "Only results entry" msgstr "Только ввод результатов" -#: options/preferences.py:862 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." msgstr "Могут ли участники подтвердить/отменить свою регистрацию через свой личный URL." -#: options/preferences.py:863 +#: options/preferences.py msgid "Participant self-checkin" msgstr "Самостоятельная регистрация участников" -#: options/preferences.py:871 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" msgstr "Время (в часах) до истечения срока регистрации спикера или судьи" -#: options/preferences.py:874 +#: options/preferences.py msgid "Check-In Window (People)" msgstr "Окно регистрации (люди)" -#: options/preferences.py:880 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" msgstr "Время (в часах) до истечения срока регистрации аудитории" -#: options/preferences.py:883 +#: options/preferences.py msgid "Check-In Window (Rooms)" msgstr "Окно регистрации (аудитории)" -#: options/preferences.py:889 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" msgstr "Должны ли печатные бэллоты показывать строку «обведите цифру», чтобы помочь распознать плохой почерк" -#: options/preferences.py:890 +#: options/preferences.py msgid "Ballot Digit Checks" msgstr "Проверка цифр в бэллотах" -#: options/preferences.py:898 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." msgstr "Место, куда можно сдать бэллоты, если они в печатной или предварительно-распечатанной форме. Установить \"TBA\" чтобы скрыть." -#: options/preferences.py:899 +#: options/preferences.py msgid "Score return location" msgstr "Место сдачи бэллотов" -#: options/preferences.py:907 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." msgstr "Место, куда можно сдать формы обратной связи, если они в печатной или предварительно-распечатанной форме. Установить \"TBA\" чтобы скрыть." -#: options/preferences.py:908 +#: options/preferences.py msgid "Feedback return location" msgstr "Место для сдачи обратной связи" -#: options/preferences.py:916 +#: options/preferences.py msgid "Lets debates have their status as postponed, as to not block draw generation." msgstr "" -#: options/preferences.py:917 +#: options/preferences.py msgid "Enable postponements" msgstr "" -#: options/preferences.py:925 +#: options/preferences.py msgid "Have each voting adjudicator submit a separate ballot." msgstr "" -#: options/preferences.py:926 +#: options/preferences.py msgid "Individual voting ballots" msgstr "" -#: options/preferences.py:933 options/templates/preferences_index.html:99 +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" msgstr "Публичные возможности" -#: options/preferences.py:939 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" msgstr "Публично показывать список всех участников турнира" -#: options/preferences.py:940 +#: options/preferences.py msgid "Enable public view of participants list" msgstr "Публично показывать список участников" -#: options/preferences.py:948 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" msgstr "Показывать список всех клубов на турнире в открытом доступе" -#: options/preferences.py:949 +#: options/preferences.py msgid "Enable public view of institutions list" msgstr "Показывать список клубов" -#: options/preferences.py:957 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" msgstr "Публично показывать статистику дайверсити" -#: options/preferences.py:958 +#: options/preferences.py msgid "Enable public view of diversity info" msgstr "Публично показывать информацию о дайверсити" -#: options/preferences.py:966 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." msgstr "Публично показывает присутствие участников, клубов и команд. На очень крупных турнирах эта страница может работать медленнее." -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of the checkin statuses" msgstr "Включить публичный просмотр статусов регистрации" -#: options/preferences.py:977 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" msgstr "Если список участников включен, отображает доступность для брейковых категорий на эту страницу" -#: options/preferences.py:978 +#: options/preferences.py msgid "Show break categories on participants page" msgstr "Показывать категории брейка на страницах участников" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" msgstr "Публично показать список с предварительно назначенными сторонами" -#: options/preferences.py:987 +#: options/preferences.py msgid "Show pre-allocated sides to public" msgstr "Показывать предварительно распределенные стороны публично" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing released draws" msgstr "Включить публичную страницу, показывающую выпущенные сетки" -#: options/preferences.py:996 +#: options/preferences.py msgid "Enable public view of draw" msgstr "Включить публичный просмотр сетки" -#: options/preferences.py:1000 +#: options/preferences.py msgid "Disabled" msgstr "Отключено" -#: options/preferences.py:1001 +#: options/preferences.py msgid "Show a single page for the current round's draw" msgstr "Показать отдельную страницу для сетки на текущий раунд" -#: options/preferences.py:1002 +#: options/preferences.py msgid "Show individual pages for all released draws" msgstr "Показывать отдельные страницы для всех опубликованных сеток" -#: options/preferences.py:1009 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" msgstr "Публично показать результаты открытых раундов" -#: options/preferences.py:1010 +#: options/preferences.py msgid "Enable public view of results" msgstr "Публично показывать результаты" -#: options/preferences.py:1018 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" msgstr "Публично показывать темы, которые были напрямую предоставлены для общего доступа" -#: options/preferences.py:1019 +#: options/preferences.py msgid "Enable public view of motions" msgstr "Публично показывать темы" -#: options/preferences.py:1027 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" msgstr "Публично показывать положение команд, включая только победы (не спикерские баллы или места)" -#: options/preferences.py:1028 +#: options/preferences.py msgid "Enable public view of team standings" msgstr "Публично показать положение команд" -#: options/preferences.py:1036 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" msgstr "Публично показывать результаты каждой команды и судьи" -#: options/preferences.py:1037 +#: options/preferences.py msgid "Enable public record pages" msgstr "Публично показывать результаты" -#: options/preferences.py:1045 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." msgstr "Публично показать брейкающиеся команды. Предназначено для использования после объявления брейка." -#: options/preferences.py:1046 +#: options/preferences.py msgid "Release team breaks to public" msgstr "Опубликовать командный брейк" -#: options/preferences.py:1054 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." msgstr "Публично показывать брейкнувшихся судей. Предназначена для использования после объявления брейка." -#: options/preferences.py:1055 +#: options/preferences.py msgid "Release adjudicators break to public" msgstr "Опубликовать судейский брейк" -#: options/preferences.py:1063 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" msgstr "Включить публичную страницу о том, кто не отправил обратную связь" -#: options/preferences.py:1064 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" msgstr "Включить публичный просмотр неотправленной обратной связи" -#: options/preferences.py:1072 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." msgstr "Список персонала турнира, который будет отображаться на главной странице турнира. Оставьте это поле пустым или с текстом по умолчанию, если вы хотите не показывать эту информацию." -#: options/preferences.py:1073 +#: options/preferences.py msgid "Tournament staff" msgstr "Персонал турнира" -#: options/preferences.py:1083 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" msgstr "Сообщение, которое будет отображаться на главной странице турнира" -#: options/preferences.py:1084 +#: options/preferences.py msgid "Welcome message" msgstr "Приветственное сообщение" -#: options/preferences.py:1093 options/templates/preferences_index.html:104 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" msgstr "Настройки UI" -#: options/preferences.py:1099 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" msgstr "Если показывать результаты публично, показывать сплитующих судей" -#: options/preferences.py:1100 +#: options/preferences.py msgid "Show splitting adjudicators" msgstr "Показывать сплитующих судей" -#: options/preferences.py:1108 +#: options/preferences.py msgid "Whether and how to use code names for teams" msgstr "Нужно или и каким образом использовать кодовые имена для команд" -#: options/preferences.py:1109 +#: options/preferences.py msgid "Team code names" msgstr "Кодовые имена команд" -#: options/preferences.py:1114 +#: options/preferences.py msgid "Do not use code names" msgstr "Не использовать кодовые имена" -#: options/preferences.py:1115 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" msgstr "Использовать настоящие имена везде и показывать кодовые имена в подсказках" -#: options/preferences.py:1116 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" msgstr "Публично использовать кодовые имена; настоящие названия с кодовыми именами в подсказках для администраторов" -#: options/preferences.py:1118 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" msgstr "Публично использовать кодовые имена; кодовые имена с настоящими названиями в подсказках для администраторов" -#: options/preferences.py:1120 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" msgstr "Везде использовать кодовые имена; не использовать подсказки (настоящие названия отображаются на некоторых страницах для администраторов)" -#: options/preferences.py:1126 +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" msgstr "Показывать командные эмодзи в публичных интерфейсах и интерфейсах администраторов" -#: options/preferences.py:1127 +#: options/preferences.py msgid "Show emoji" msgstr "Показать эмодзи" -#: options/preferences.py:1135 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" msgstr "Добавить в список команд колонку с их клубом" -#: options/preferences.py:1136 +#: options/preferences.py msgid "Show team institutions" msgstr "Показать клубы команд" -#: options/preferences.py:1144 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" msgstr "" -#: options/preferences.py:1145 +#: options/preferences.py msgid "Show adjudicator institutions" msgstr "Показать клубы судей" -#: options/preferences.py:1153 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" msgstr "Включает элемент, при котором наведение на название каждой команды, показывает её спикеров" -#: options/preferences.py:1154 +#: options/preferences.py msgid "Show speakers in draw" msgstr "Показывать спикеров в сетке" -#: options/preferences.py:1161 options/templates/preferences_index.html:109 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" msgstr "Уведомления" -#: options/preferences.py:1167 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "Имя организатора, которому поручено заниматься email (в случае ответов)" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Reply-to name" msgstr "Ответить на имя" -#: options/preferences.py:1176 +#: options/preferences.py msgid "The email address for handling replies" msgstr "Адрес электронной почты для обработки ответов" -#: options/preferences.py:1177 +#: options/preferences.py msgid "Reply-to address" msgstr "Ответить на адрес" -#: options/preferences.py:1185 +#: options/preferences.py msgid "A secret key to accept email status events" msgstr "Секретный ключ для принятия событий статуса электронной почты" -#: options/preferences.py:1186 +#: options/preferences.py msgid "Email status secret key" msgstr "Секретный ключ статуса электронной почты" -#: options/preferences.py:1196 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "Позволяет автоматически отправлять судьям копии их бэллота (по email) после их ввода в Тabbycat (для подтверждения или проверки)" -#: options/preferences.py:1197 +#: options/preferences.py msgid "Ballot receipts" msgstr "Получение бэллота" -#: options/preferences.py:1205 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "Строка темы для email, отправляемых судьям с их подтвержденным бэллотом. Используйте {{ DEBATE }} как заполнитель для привязанных дебатов" -#: options/preferences.py:1207 +#: options/preferences.py msgid "Ballot receipt subject line" msgstr "Строка темы получения бэллота" -#: options/preferences.py:1215 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "Тело письма для email, отправляемых судьям с их отправленным бэллотом." -#: options/preferences.py:1216 +#: options/preferences.py msgid "Ballot receipt message" msgstr "Сообщение о получении бэллота" -#: options/preferences.py:1232 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." msgstr "Строка темы для email отправляемых спикерам с их командными баллами." -#: options/preferences.py:1233 +#: options/preferences.py msgid "Team points subject line" msgstr "Строка темы командные баллы" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." msgstr "Тело письма для email отправляемых спикерам с их командными баллами." -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team points message" msgstr "Сообщение о командных баллах" -#: options/preferences.py:1250 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." msgstr "Строка темы для email отправляемых судьям с их назначениями на дебаты." -#: options/preferences.py:1251 +#: options/preferences.py msgid "Adjudicator draw subject line" msgstr "Строка темы для судейской сетки" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." msgstr "Тело письма для email отправляемых судьям с их назначениями на дебаты." -#: options/preferences.py:1259 +#: options/preferences.py msgid "Adjudicator draw message" msgstr "Сообщение о сетке судей" -#: options/preferences.py:1268 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." msgstr "Строка темы для email отправляемых командам с их сеткой." -#: options/preferences.py:1269 +#: options/preferences.py msgid "Team draw subject line" msgstr "Строка темы сетка команд" -#: options/preferences.py:1276 options/preferences.py:1294 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." msgstr "Тело письма для email отправляемых участникам с их личными URL." -#: options/preferences.py:1277 options/preferences.py:1295 +#: options/preferences.py msgid "Private URL notification message" msgstr "Уведомление о приватном URL" -#: options/preferences.py:1286 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." msgstr "Строка темы для email отправляемых участникам с их личными URL." -#: options/preferences.py:1287 +#: options/preferences.py msgid "Private URL notification subject line" msgstr "Строка темы уведомления о личном URL" -#: options/preferences.py:1308 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." msgstr "Строка темы для email отправляемых участникам об опубликовании темы." -#: options/preferences.py:1309 +#: options/preferences.py msgid "Motion release notification subject line" msgstr "Строка темы уведомления об опубликовании темы" -#: options/preferences.py:1316 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." msgstr "Тело сообщения для email, отправляемых участникам о публикации темы." -#: options/preferences.py:1317 +#: options/preferences.py msgid "Motion release notification message" msgstr "Сообщение о публикации темы" -#: options/preferences.py:1325 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." msgstr "Строка темы для email, отправляемых участникам об их командной регистрации." -#: options/preferences.py:1326 +#: options/preferences.py msgid "Team registration notification subject line" msgstr "Строка темы уведомления о командной регистрации" -#: options/preferences.py:1333 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." msgstr "Тело письма для email, отправляемых участникам об их командной регистрации." -#: options/preferences.py:1334 +#: options/preferences.py msgid "Team registration notification message" msgstr "Сообщение о регистрации команды" -#: options/preferences.py:1343 options/templates/preferences_index.html:78 +#: options/preferences.py options/templates/preferences_index.html msgid "Motions" msgstr "Темы" -#: options/preferences.py:1349 +#: options/preferences.py msgid "If checked, ballots require a motion to be entered" msgstr "" -#: options/preferences.py:1350 +#: options/preferences.py msgid "Enable motions" msgstr "" -#: options/preferences.py:1358 +#: options/preferences.py msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" msgstr "Должны ли распечатанные бэллоты скрывать текст тем (даже если они введены и опубликованы)" -#: options/preferences.py:1359 +#: options/preferences.py msgid "Ballot Hide Motions" msgstr "Скрыть тему в бэллотах" -#: options/preferences.py:1367 +#: options/preferences.py msgid "Enables the motion veto field on ballots, to track veto statistics" msgstr "Включить поле для вето в бэллоты чтобы отслеживать статистику вето" -#: options/preferences.py:1368 +#: options/preferences.py msgid "Motion vetoes" msgstr "Вето на темы" -#: options/preferences.py:1376 +#: options/preferences.py msgid "If showing results to public, show which motions were selected in the record" msgstr "Если публично показывать результаты, укажите какие темы были выбраны для записи" -#: options/preferences.py:1377 +#: options/preferences.py msgid "Show motions in results" msgstr "Показать темы в результатах" -#: options/preferences.py:1385 +#: options/preferences.py msgid "Order in which are listed by round in the public view" msgstr "Порядок, в котором раунды предоставлены для публичного просмотра" -#: options/preferences.py:1386 +#: options/preferences.py msgid "Order to display motions" msgstr "Порядок отображения тем" -#: options/preferences.py:1390 +#: options/preferences.py msgid "Earliest round first" msgstr "Сначала первые раунды" -#: options/preferences.py:1391 +#: options/preferences.py msgid "Latest round first" msgstr "Сначала последние раунды" -#: options/preferences.py:1398 +#: options/preferences.py msgid "Whether motions can be reused from one round to another." msgstr "" -#: options/preferences.py:1399 +#: options/preferences.py msgid "Allow motion reuse" msgstr "" -#: options/preferences.py:1406 options/templates/preferences_index.html:114 +#: options/preferences.py options/templates/preferences_index.html msgid "Global Settings" msgstr "" -#: options/preferences.py:1412 +#: options/preferences.py msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." msgstr "" -#: options/preferences.py:1413 +#: options/preferences.py msgid "Enable API access" msgstr "" -#: options/preferences.py:1421 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1422 +#: options/preferences.py msgid "Assistant account creation key" msgstr "" -#: options/preferences.py:1431 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1433 +#: options/preferences.py msgid "Administrator account creation key" msgstr "" -#: options/presets.py:32 options/presets.py:324 +#: options/presets.py msgid "Public Information Options" msgstr "" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" msgstr "" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" msgstr "" -#: options/presets.py:74 +#: options/presets.py msgid "Australs Rules" msgstr "" -#: options/presets.py:75 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:114 +#: options/presets.py msgid "British Parliamentary Rules" msgstr "" -#: options/presets.py:115 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." msgstr "" -#: options/presets.py:157 +#: options/presets.py msgid "Canadian Parliamentary Rules" msgstr "" -#: options/presets.py:159 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." msgstr "" -#: options/presets.py:182 +#: options/presets.py msgid "Australian Easters Rules" msgstr "" -#: options/presets.py:184 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:202 +#: options/presets.py msgid "2 vs 2 Impromptu" msgstr "" -#: options/presets.py:204 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." msgstr "" -#: options/presets.py:229 +#: options/presets.py msgid "3 vs 3 Prepared" msgstr "" -#: options/presets.py:231 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." msgstr "" -#: options/presets.py:258 +#: options/presets.py msgid "UADC Rules" msgstr "" -#: options/presets.py:260 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:296 +#: options/presets.py msgid "WSDC Rules" msgstr "" -#: options/presets.py:298 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:326 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "" -#: options/presets.py:338 +#: options/presets.py msgid "Tab Release Options" msgstr "Параметры публикации тэба" -#: options/presets.py:340 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" msgstr "Используйте если вы готовы опубликовать тэб. Будут опубликованы результаты всех раундов, командный тэб, спикерский тэб и т.д." -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html msgid "Configuration" msgstr "Настройки" -#: options/templates/preferences_index.html:11 +#: options/templates/preferences_index.html #, python-format msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." msgstr "" -#: options/templates/preferences_index.html:24 +#: options/templates/preferences_index.html #, python-format msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." msgstr "" -#: options/templates/preferences_index.html:35 +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." msgstr "У вас одновременно включено использование кодовых названий команд и отображение клубов, к которым они принадлежат. Кодовые названия обычно используются, чтобы скрыть клуб, к которому принадлежит команда, так что сейчас эта настройка не имеет смысла. Вы можете изменить эти настройки в разделе опции UI." -#: options/templates/preferences_index.html:54 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" msgstr "Диапазон баллов, которые могут быть присуждены речам, заключительным речам и командам" -#: options/templates/preferences_index.html:59 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" msgstr "Как команды сочетаются в сетке и как судьи автоматически распределяются" -#: options/templates/preferences_index.html:64 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" msgstr "Как много речей в дебатах, как определяются темы и используются ли заключительные речи" -#: options/templates/preferences_index.html:69 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" msgstr "Как команды и спикеры ранжированы в опубликованных тэбах" -#: options/templates/preferences_index.html:74 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" msgstr "Как ранжируются судьи и кто может предоставлять обратную связь" -#: options/templates/preferences_index.html:79 +#: options/templates/preferences_index.html msgid "How and where are motions used" msgstr "" -#: options/templates/preferences_index.html:90 +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" msgstr "Когда сделать тэб видимым для всех и какие данные он отображает" -#: options/templates/preferences_index.html:95 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" msgstr "Как вводятся бэллоты, формы обратной связи и регистрации, включая варианты с предоставлением онлайн" -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" msgstr "Какую информацию отображает сайт на общедоступных страницах" -#: options/templates/preferences_index.html:105 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" msgstr "Небольшие хитрости о том, какая информация представлена интерфейсом" -#: options/templates/preferences_index.html:110 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" msgstr "Настройка отправки уведомлений, таких как email, подтверждающие отправку бэллота или командные баллы" -#: options/templates/preferences_index.html:115 +#: options/templates/preferences_index.html msgid "Settings which can affect all tournaments on the site" msgstr "" -#: options/templates/preferences_index.html:127 +#: options/templates/preferences_index.html msgid "Manually Set Current Round" msgstr "Вручную установить текущий раунд" -#: options/templates/preferences_index.html:128 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." msgstr "Tabbycat будет побуждать вас продвинуть текущий раунд на странице результатов каждого раунда. Однако, если есть особые обстоятельства, которые требуют, чтобы вы переопределили его и установили текущий раунд на что-то другое, используйте эту страницу." -#: options/templates/preferences_index.html:132 -msgid "Set Round Weights" +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: options/templates/preferences_index.html:133 +#: options/templates/preferences_index.html msgid "Rounds can be weighted so that certain rounds are worth more team points." msgstr "" -#: options/templates/preferences_index.html:140 +#: options/templates/preferences_index.html msgid "Presets" msgstr "Настройки" -#: options/templates/preferences_index.html:141 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." msgstr "Это изменяет общие настройки для основных правил; внимательно ознакомьтесь с нашей документацией , чтобы убедиться, что они подходят для вашего турнира. Каждая ссылка покажет, какие настройки они изменяют перед их применением." -#: options/templates/preferences_index.html:152 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" msgstr "Применить %(preset)s" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" msgstr "Применены настройки: %(preset_title)s" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" msgstr "Вернуться к настройкам" -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" msgstr "Настройки, которые были изменены" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" msgstr "Подтвердите настройки: %(preset_title)s" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" msgstr "Настройки, которые не будут изменены" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" msgstr "Настройки, которые будут изменены" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" msgstr "Применить настройки: %(preset_title)s" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" msgstr "Настройки: %(section)s" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" msgstr "Изменить настройки: %(section)s" -#: options/views.py:65 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." msgstr "Опции турнира (%(section)s) сохранены." -#: options/views.py:111 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." msgstr "Опции турнира сохранены в соответствии с настройками %(name)s." diff --git a/tabbycat/participants/locale/ru/LC_MESSAGES/django.po b/tabbycat/participants/locale/ru/LC_MESSAGES/django.po index 2509021439f..99d16a6528d 100644 --- a/tabbycat/participants/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -18,12 +18,20 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 942\n" -#: participants/admin.py:96 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" msgstr "Команда не может быть в брейковой категории на другом турнире. Пожалуйста, удалите: %(category)s" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." @@ -32,11 +40,11 @@ msgstr[1] "%(count)d URL-ключ этих спикеров был удален. msgstr[2] "%(count)d URL-ключ этих спикеров был удален." msgstr[3] "%(count)d URL-ключ этих спикеров был удален." -#: participants/admin.py:152 participants/admin.py:233 -msgid "Delete URL key" -msgstr "Удалить ключ URL" +#: participants/admin.py +msgid "Reset emoji" +msgstr "" -#: participants/admin.py:160 +#: participants/admin.py #, python-format msgid "%(count)d team had their emoji reset." msgid_plural "%(count)d teams had their emojis reset." @@ -45,11 +53,11 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: participants/admin.py:164 -msgid "Reset emoji" +#: participants/admin.py +msgid "Reset code name" msgstr "" -#: participants/admin.py:170 +#: participants/admin.py #, python-format msgid "%(count)d team had their code name reset." msgid_plural "%(count)d teams had their code names reset." @@ -58,11 +66,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: participants/admin.py:174 -msgid "Reset code name" -msgstr "" - -#: participants/admin.py:228 +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." @@ -71,450 +75,436 @@ msgstr[1] "%(count)d URL-ключ этих судей был удален." msgstr[2] "%(count)d URL-ключ этих судей был удален." msgstr[3] "%(count)d URL-ключ этих судей был удален." -#: participants/apps.py:7 participants/views.py:41 +#: participants/apps.py participants/views.py msgid "Participants" msgstr "Участники" -#: participants/models.py:21 participants/models.py:37 -#: participants/models.py:66 participants/models.py:96 +#: participants/models.py msgid "name" msgstr "название" -#: participants/models.py:24 participants/models.py:45 +#: participants/models.py msgid "region" msgstr "регион" -#: participants/models.py:25 +#: participants/models.py msgid "regions" msgstr "регионы" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:39 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" msgstr "Полное название клуба, например \"Университет Кембриджа\" или \"Университет Виктории в Веллингтоне\"" -#: participants/models.py:41 +#: participants/models.py msgid "code" msgstr "код" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:43 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" msgstr "Как обычно кратко называют клуб, например \"Кембридж\" или \"Вик Веллингтон\"" -#: participants/models.py:55 participants/models.py:155 -#: participants/models.py:353 +#: participants/models.py msgid "institution" msgstr "клуб" -#: participants/models.py:56 +#: participants/models.py msgid "institutions" msgstr "клубы" -#: participants/models.py:64 participants/models.py:157 -#: participants/models.py:356 +#: participants/models.py msgid "tournament" msgstr "турнир" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:68 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" msgstr "Отображаемое название, например, \"ESL\", \"Новички\"" -#: participants/models.py:70 +#: participants/models.py msgid "slug" msgstr "краткое название" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:72 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" msgstr "Краткое название для URL, например, \"esl\", \"новички\"" -#: participants/models.py:74 +#: participants/models.py msgid "sequence number" msgstr "порядковый номер" -#: participants/models.py:75 +#: participants/models.py msgid "The order in which the categories are displayed" msgstr "Порядок, в котором демонстрируются категории" -#: participants/models.py:77 +#: participants/models.py msgid "limit" msgstr "лимит" -#: participants/models.py:78 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" msgstr "Такое максимальное количество спикеров будет показано в публичном тэбе для этой категории или используйте 0 для отсутствия лимита" -#: participants/models.py:80 +#: participants/models.py msgid "public" msgstr "публично" -#: participants/models.py:81 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" msgstr "При этом выборе эта категория будет включена в категории спикерских тэбов, которые будут показаны публично" -#: participants/models.py:87 +#: participants/models.py msgid "speaker category" msgstr "категория спикера" -#: participants/models.py:88 participants/models.py:330 +#: participants/models.py msgid "speaker categories" msgstr "категории спикеров" -#: participants/models.py:98 +#: participants/models.py msgid "email address" msgstr "" -#: participants/models.py:100 +#: participants/models.py msgid "phone" msgstr "номер телефона" -#: participants/models.py:102 +#: participants/models.py msgid "anonymous" msgstr "анонимно" -#: participants/models.py:103 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" msgstr "Имена анонимных людей и названия их команд будут отредактированы при публикации тэба" -#: participants/models.py:106 +#: participants/models.py +msgid "code name" +msgstr "кодовое имя" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py msgid "URL key" msgstr "Ключ URL" -#: participants/models.py:111 +#: participants/models.py msgid "male" msgstr "мужской" -#: participants/models.py:112 +#: participants/models.py msgid "female" msgstr "женский" -#: participants/models.py:113 +#: participants/models.py msgid "other" msgstr "другой" -#: participants/models.py:115 +#: participants/models.py msgid "gender" msgstr "гендер" -#: participants/models.py:116 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" msgstr "Гендер отображается в интерфейсе расстановки судей и больше нигде" -#: participants/models.py:118 +#: participants/models.py msgid "pronoun" msgstr "произношение" -#: participants/models.py:119 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" msgstr "Если печатать бэллоты с помощью Tabbycat, то есть возможность предварительно распечатать произношения" -#: participants/models.py:122 +#: participants/models.py msgid "person" msgstr "человек" -#: participants/models.py:123 +#: participants/models.py msgid "persons" msgstr "люди" -#: participants/models.py:138 +#: participants/models.py msgid "full name/suffix" msgstr "полное имя" -#: participants/models.py:139 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" msgstr "Не указывать название клуба (см. \"Клуб в названии команды\" ниже)" -#: participants/models.py:141 +#: participants/models.py msgid "short name/suffix" msgstr "краткое название" -#: participants/models.py:142 +#: participants/models.py msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:144 -msgid "code name" -msgstr "кодовое имя" - -#: participants/models.py:145 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" msgstr "Кодовое название, которое используется для того, чтобы скрыть, к какому клубу относится команда (на страницах в открытом доступе)" -#: participants/models.py:148 +#: participants/models.py msgid "short name" msgstr "краткое название" -#: participants/models.py:149 +#: participants/models.py msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:151 +#: participants/models.py msgid "long name" msgstr "длинное имя" -#: participants/models.py:152 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" msgstr "Полное название команды, включая название клуба (генерируется автоматически)" -#: participants/models.py:159 +#: participants/models.py msgid "Uses institutional prefix" msgstr "Клуб в названии команды" -#: participants/models.py:160 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" msgstr "Если стоит отметка, команда \"1\" из Виктории будет показана как \"Виктория 1\"" -#: participants/models.py:162 +#: participants/models.py msgid "break categories" msgstr "категории брейка" -#: participants/models.py:167 participants/models.py:364 +#: participants/models.py msgid "institution conflicts" msgstr "конфликты с клубами" -#: participants/models.py:178 +#: participants/models.py msgid "none" msgstr "нет" -#: participants/models.py:179 +#: participants/models.py msgid "swing" msgstr "свинг" -#: participants/models.py:180 +#: participants/models.py msgid "composite" msgstr "составной" -#: participants/models.py:181 +#: participants/models.py msgid "bye" msgstr "" -#: participants/models.py:184 +#: participants/models.py msgid "type" msgstr "тип" -#: participants/models.py:188 +#: participants/models.py msgid "emoji" msgstr "эмоджи" -#: participants/models.py:202 participants/models.py:328 +#: participants/models.py msgid "team" msgstr "команда" -#: participants/models.py:203 +#: participants/models.py msgid "teams" msgstr "команды" -#: participants/models.py:311 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." msgstr "Если в названии команды указывается название клуба, для таких команд должен быть указан клуб." -#: participants/models.py:313 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." msgstr "Если в названии команды не указывается название клуба, у команды должно быть полное название." -#: participants/models.py:315 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." msgstr "Если в названии команды не указывается название клуба, у команды должно быть краткое название." -#: participants/models.py:333 +#: participants/models.py msgid "speaker" msgstr "спикер" -#: participants/models.py:334 +#: participants/models.py msgid "speakers" msgstr "спикеры" -#: participants/models.py:357 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" msgstr "Аудитории, не привязанные ни к одному турниру, могут быть разделены между турнирами" -#: participants/models.py:359 +#: participants/models.py msgid "base score" msgstr "исходный рейтинг" -#: participants/models.py:368 +#: participants/models.py msgid "team conflicts" msgstr "конфликты команд" -#: participants/models.py:372 +#: participants/models.py msgid "adjudicator conflicts" msgstr "" -#: participants/models.py:375 +#: participants/models.py msgid "always trainee" msgstr "всегда винг без права голоса" -#: participants/models.py:376 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" msgstr "При этом выборе этот судья никогда не будет автоматически распределен на позицию с правом голоса, независимо от его балла" -#: participants/models.py:378 +#: participants/models.py msgid "breaking" msgstr "брейкающиеся" -#: participants/models.py:380 +#: participants/models.py msgid "independent" msgstr "независимый" -#: participants/models.py:382 +#: participants/models.py msgid "adjudication core" msgstr "судейский пул" -#: participants/models.py:391 +#: participants/models.py msgid "adjudicator" msgstr "судья" -#: participants/models.py:392 +#: participants/models.py msgid "adjudicators" msgstr "судьи" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" msgstr "Баллов после этого раунда" -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" msgstr "Побед после этого раунда" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" msgstr "Спикерские баллы
    (в порядке выступления)" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" msgstr "Спикерские" -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" msgstr "О %(name)s" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" msgstr "Независимый судья" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" msgstr "Член судейского пула" -#: participants/templates/adjudicator_registration_card.html:27 -#: participants/templates/team_registration_card.html:89 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" msgstr "Клуб:" -#: participants/templates/adjudicator_registration_card.html:31 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" msgstr "Неаффилированный" -#: participants/templates/adjudicator_registration_card.html:36 -#: participants/templates/team_registration_card.html:98 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "Регион:" -#: participants/templates/adjudicator_registration_card.html:43 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." msgstr "" -#: participants/templates/adjudicator_registration_card.html:50 -#: participants/templates/team_registration_card.html:109 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" msgstr "Конфликты с клубами:" -#: participants/templates/adjudicator_registration_card.html:52 -#: participants/templates/team_registration_card.html:111 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr "; " -#: participants/templates/adjudicator_registration_card.html:54 -#: participants/templates/adjudicator_registration_card.html:62 -#: participants/templates/adjudicator_registration_card.html:74 -#: participants/templates/adjudicator_registration_card.html:84 -#: participants/templates/team_registration_card.html:58 -#: participants/templates/team_registration_card.html:70 -#: participants/templates/team_registration_card.html:79 -#: participants/templates/team_registration_card.html:113 -#: participants/templates/team_registration_card.html:122 -#: participants/templates/team_registration_card.html:133 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" msgstr "Нет" -#: participants/templates/adjudicator_registration_card.html:58 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" msgstr "Конфликты команд:" -#: participants/templates/adjudicator_registration_card.html:60 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:71 -#: participants/templates/adjudicator_registration_card.html:82 -#: participants/templates/team_registration_card.html:56 -#: participants/templates/team_registration_card.html:68 -#: participants/templates/team_registration_card.html:77 -#: participants/templates/team_registration_card.html:120 -#: participants/templates/team_registration_card.html:131 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr ", " -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/team_registration_card.html:118 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" msgstr "Конфликты судей:" -#: participants/templates/adjudicator_registration_card.html:80 -#: participants/templates/team_registration_card.html:129 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" msgstr "Ограничения аудиторий:" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "Не забудьте: Если у этого судьи должен быть конфликт с его клубом, его нужно сейчас добавить на вкладке \"Конфликты между судьями и клубами\", поскольку эта форма не добавляет судье конфликт с его клубом автоматически." -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." msgstr "Предупреждение:Если в списке выше объекты \"команда\", вам, возможно, не стоит удалять это %(object_name)s." -#: participants/templates/admin/participants/delete_debateteam_warning.html:14 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." msgstr "Предупреждение:Если в списке выше объекты \"команда\", вам, возможно, не стоит удалять это %(objects_name)s." #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:21 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." msgstr "Это особенно важна в случаях, если какая-то команда, которая уже участвует в дебатах, будет удалена. Если результаты команды уже вбиты, удаление этой команды также удаляет эти результаты, что обычно приводит к сбоям тэба, даже если вы думаете, что вам больше не нужны эти результаты. Если команда дебатировала, но покинула турнир, вам не нужно её удалять. Просто отметьте эту команду как неактивную в секции \"Доступность\" в области администратора в Tabbycat." -#: participants/templates/admin/participants/delete_debateteam_warning.html:33 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." msgstr "Обратите внимание, что при удалении клуба также удаляются все команды из этого клуба." -#: participants/templates/admin/participants/delete_debateteam_warning.html:41 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "Если вы очень уверены, что хотите удалить это %(object_name)s, пожалуйста, сначала удалите вышеупомянутые объекты и будьте уверены, что вы увидите на странице «команда дебатов» объектов перед продолжением." -#: participants/templates/admin/participants/delete_debateteam_warning.html:47 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "Если вы точно уверены, что хотите удалить эти объекты %(objects_name)s, пожалуйста, сначала удалите объекты, расположенные выше и внимательно отнеситесь к предупреждению, которую вы увидите на странице объектов \"дебатирующие команды\" перед продолжением." -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "Не забудьте: Если у этой команды должен быть конфликт с её клубом, его нужно сейчас добавить на вкладке \"Конфликты между командами и клубами\", поскольку эта форма не добавляет команде конфликт с её клубом автоматически." -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" msgstr "Раунд начинается в %(start_time)s" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "Команды:" -#: participants/templates/current_round/common.html:28 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "Судья:" @@ -522,274 +512,272 @@ msgstr[1] "Судьи:" msgstr[2] "Судьи:" msgstr[3] "Судьи:" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" msgstr "Ⓒ" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" msgstr "Ⓣ" -#: participants/templates/current_round/common.html:44 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." msgstr "В этих дебатах нет вингов или вингов без права голоса." -#: participants/templates/current_round/common.html:54 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." msgstr "Темы не публикуются." -#: participants/templates/current_round/common.html:57 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "Тема:" -#: participants/templates/current_round/common.html:61 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "Тема %(seq)s:" -#: participants/templates/current_round/common.html:69 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." msgstr "Тема(ы) на этот раунд ещё не опубликованы." -#: participants/templates/current_round/round_adj.html:14 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s в качестве чэйра судит %(aff)s против %(neg)s в %(room)s." -#: participants/templates/current_round/round_adj.html:18 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s в качестве чэйра судит %(aff)s против %(neg)s в %(room)s." -#: participants/templates/current_round/round_adj.html:24 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Вы судитечэйром%(aff)s против %(neg)s в %(room)s." -#: participants/templates/current_round/round_adj.html:28 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Вы судитечэйром%(aff)s против %(neg)s в %(room)s." -#: participants/templates/current_round/round_adj.html:36 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s в качестве %(type)sсудит%(aff)s против %(neg)s в %(room)s." -#: participants/templates/current_round/round_adj.html:40 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s в качестве %(type)sсудит%(aff)s против %(neg)s в %(room)s." -#: participants/templates/current_round/round_adj.html:46 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Вы в качестве %(type)s судите %(aff)s против %(neg)s в %(room)s." -#: participants/templates/current_round/round_adj.html:50 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Вы в качестве %(type)s судите %(aff)s против %(neg)s в %(room)s." -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s судит %(aff)s против %(neg)s в %(room)s." -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s судит %(aff)s против %(neg)s в %(room)s." -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Вы судите %(aff)s против %(neg)s в %(room)s." -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "Вы судите %(aff)s против %(neg)s в %(room)s." -#: participants/templates/current_round/round_adj.html:85 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "%(adjudicator)s - чэйр в %(room)s." -#: participants/templates/current_round/round_adj.html:89 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "%(adjudicator)s - чэйр в %(room)s." -#: participants/templates/current_round/round_adj.html:95 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "Вы чэйр в %(room)s." -#: participants/templates/current_round/round_adj.html:99 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "Вы чэйрв%(room)s." -#: participants/templates/current_round/round_adj.html:107 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "%(adjudicator)s является%(type)sсудьей в %(room)s." -#: participants/templates/current_round/round_adj.html:111 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "%(adjudicator)s является%(type)sсудьей в %(room)s." -#: participants/templates/current_round/round_adj.html:117 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "Вы %(type)sсудите в %(room)s." -#: participants/templates/current_round/round_adj.html:121 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "Вы %(type)sсудите в %(room)s." -#: participants/templates/current_round/round_adj.html:129 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "%(adjudicator)s судит в %(room)s." -#: participants/templates/current_round/round_adj.html:133 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "%(adjudicator)s судит в %(room)s." -#: participants/templates/current_round/round_adj.html:139 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "Вы судите в %(room)s." -#: participants/templates/current_round/round_adj.html:143 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "Вы судите в %(room)s." -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team against %(opponent)s." msgstr "Вы играете на позиции %(side)s против %(opponent)s." -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:39 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:43 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:56 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:60 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:66 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:70 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." msgstr "Похоже что категории спикеров не были заданы. Если вы хотите создать отдельные спикерские тэбы для каждой категории, например, ESL-тэб или тэб молодых команд, используйте страницу Категории спикеров, чтобы задать их, а затем вернитесь на эту страницу, чтобы установить доступность спикеров." -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" msgstr "Возвраты обратной связи" -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" msgstr "Обратная связь отправлена на %(adjudicator)s" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" msgstr "Обратная связь не отправлена на одного из %(adjudicators)s (того, кто давал разбор)" -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" msgstr "Обратная связь не отправлена на %(adjudicator)s" -#: participants/templates/feedback_progress_panel.html:38 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" msgstr "Получено больше форм обратной связи, чем ожидалось для этих дебатов:" -#: participants/templates/feedback_progress_panel.html:46 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" msgstr "Непредвиденная форма обратной связи на %(adjudicator)s" -#: participants/templates/feedback_progress_panel.html:53 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." msgstr "%(name)s не имеет формы обратной связи для отправки." -#: participants/templates/in_this_round.html:9 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" msgstr "В этом раунде (%(round)s)" -#: participants/templates/in_this_round.html:13 +#: participants/templates/in_this_round.html msgid "In This Round" msgstr "" -#: participants/templates/in_this_round.html:16 +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" msgstr "(Не выпущено публично)" -#: participants/templates/in_this_round.html:23 +#: participants/templates/in_this_round.html msgid "Room TBA" msgstr "Аудитория будет анонсирована позже" -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." msgstr "%(adjudicator)s не судит этот раунд." -#: participants/templates/in_this_round.html:39 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." msgstr "Вы не судите этот раунд." -#: participants/templates/in_this_round.html:54 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." @@ -798,181 +786,180 @@ msgstr[1] "Похоже что %(team)s участвует в %(ndebates)s де msgstr[2] "Похоже что %(team)s участвует в %(ndebates)s дебатах в этом раунде." msgstr[3] "Похоже что %(team)s участвует в %(ndebates)s дебатах в этом раунде." -#: participants/templates/in_this_round.html:60 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." msgstr "Если это ошибка, немедленно свяжитесь с тэбмастером." -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." msgstr "%(team)s не дебатировала в этом раунде." -#: participants/templates/in_this_round.html:79 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." msgstr "В этом раунде нет дебатов." -#: participants/templates/in_this_round.html:91 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." msgstr "Сетка на этот раунд ещё не была опубликована." -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" msgstr "Список участников" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" msgstr "Список клубов" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." msgstr "Email уже были отправлены." -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" msgstr "Отправить регистрации команд по email" -#: participants/templates/participants_subnav.html:26 participants/views.py:135 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" msgstr "Кодовые имена" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" msgstr "Категории спикеров" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" msgstr "Доступность спикеров" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." msgstr "Категории спикеров позволяют создавать тэбы, специфичные для каждой категории например для ESL или молодых команд. На этой странице вы можете задать, какие будут категории спикеров. После задания категорий вы можете установить доступность спикеров для них на странице Доступность Спикеров." -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." msgstr "Если вы хотите удалить категории спикеров, используйте область Редактировать базу данных." -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" msgstr "Сохранить категории спикеров" -#: participants/templates/team_registration_card.html:16 +#: participants/templates/team_registration_card.html msgid "Team name:" msgstr "Название команды:" -#: participants/templates/team_registration_card.html:21 +#: participants/templates/team_registration_card.html msgid "Full team name:" msgstr "" -#: participants/templates/team_registration_card.html:25 +#: participants/templates/team_registration_card.html msgid "Short team name:" msgstr "" -#: participants/templates/team_registration_card.html:32 +#: participants/templates/team_registration_card.html msgid "Code name:" msgstr "Кодовое имя:" -#: participants/templates/team_registration_card.html:36 +#: participants/templates/team_registration_card.html msgid "No code name assigned" msgstr "" -#: participants/templates/team_registration_card.html:42 +#: participants/templates/team_registration_card.html msgid "Emoji:" msgstr "" -#: participants/templates/team_registration_card.html:46 +#: participants/templates/team_registration_card.html msgid "No emoji assigned" msgstr "" -#: participants/templates/team_registration_card.html:54 +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "Спикеры:" -#: participants/templates/team_registration_card.html:66 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" msgstr "Доступны для брейковых категорий:" -#: participants/templates/team_registration_card.html:75 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" msgstr "Категории спикеров:" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" msgstr "%(code_name)s(%(real_name)s)" -#: participants/views.py:46 +#: participants/views.py msgid "Adjudicators" msgstr "Судьи" -#: participants/views.py:55 +#: participants/views.py msgid "Speakers" msgstr "Спикеры" -#: participants/views.py:86 +#: participants/views.py msgid "Institutions" msgstr "Клубы" -#: participants/views.py:102 +#: participants/views.py msgid "Code" msgstr "Код" -#: participants/views.py:103 +#: participants/views.py msgid "Full name" msgstr "Полное имя" -#: participants/views.py:105 +#: participants/views.py msgid "Region" msgstr "Регион" -#: participants/views.py:107 +#: participants/views.py msgid "Teams" msgstr "Команды" -#: participants/views.py:107 +#: participants/views.py msgid "Number of teams" msgstr "Количество команд" -#: participants/views.py:109 +#: participants/views.py msgid "Adjs" msgstr "Судьи" -#: participants/views.py:110 +#: participants/views.py msgid "Number of adjudicators, excluding independents" msgstr "Количество судей, за исключением независимых" -#: participants/views.py:112 +#: participants/views.py msgid "IAs" msgstr "НС" -#: participants/views.py:113 +#: participants/views.py msgid "Number of independent adjudicators" msgstr "Количество независимых судей" -#: participants/views.py:143 +#: participants/views.py msgid "Code name" msgstr "Кодовое имя" -#: participants/views.py:163 +#: participants/views.py msgid "Team Registration" msgstr "Регистрация команд" -#: participants/views.py:231 +#: participants/views.py msgid "Results" msgstr "Результаты" -#: participants/views.py:239 participants/views.py:264 +#: participants/views.py #, python-format msgid "Record for %(name)s" msgstr "Запись для %(name)s" -#: participants/views.py:261 +#: participants/views.py msgid "Previous Rounds" msgstr "Предыдущие раунды" -#: participants/views.py:352 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" @@ -981,11 +968,11 @@ msgstr[1] "Сохранена категории: %(list)s" msgstr[2] "Сохранена категории: %(list)s" msgstr[3] "Сохранена категории: %(list)s" -#: participants/views.py:358 +#: participants/views.py msgid "No changes were made to the categories." msgstr "В категории не было внесено никаких изменений." -#: participants/views.py:371 +#: participants/views.py msgid "Speaker Category Eligibility" msgstr "Доступность спикера для категории" diff --git a/tabbycat/printing/locale/ru/LC_MESSAGES/django.po b/tabbycat/printing/locale/ru/LC_MESSAGES/django.po index 1fb7f9cffe2..eab914e6dd6 100644 --- a/tabbycat/printing/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-19 15:30\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -18,109 +18,108 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" msgstr "Формы обратной связи" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" msgstr "Доступные для печати формы обратной связи для %(round)s" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." msgstr "Не было добавлено никаких вопросов обратной связи, на которых команды или судьи могли бы ответить." -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." msgstr "Не было добавлено никаких вопросов обратной связи, на которые команды могли бы ответить." -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." msgstr "Не было добавлено никаких вопросов обратной связи, на которые судьи могли бы ответить." -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." -msgstr "%(first_sentence)s Ознакомьтесь с документацией чтобы получить информацию об их использовании (иначе эти формы будут довольно пустыми)." +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgstr "" -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" msgstr "Нет доступных форм обратной связи — возможно, судьи не были распределены?" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "Используйте Ctrl+P для распечатки или сохранения в PDF. Не забудьте установить нужное положение страницы, выключить верхние и нижние колонтитулы и включить фоновую графику. Лучше всего работает в Chrome." -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" msgstr "Доступные для печати URL-адреса %(sheet)s" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." -msgstr "Эта страница предназначена для печати в виде на двухсторонних листах A4, с указанием имени участника на внешней стороне и отображением URL на внутренней стороне. Используйте CTRL-P для печати; лучше всего использовать Chrome." +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +msgstr "" -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" msgstr "Личный URL для %(name)s %(group)s" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" msgstr "Пожалуйста, запомните этот URL, он будет использован для отправки форм в ходе турнира:" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" msgstr "Доступные для печати бэллоты" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" msgstr "для %(round)s" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" msgstr "Редактировать тему(ы)" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" msgstr "Нет доступных бэллотов - возможно, сетка на раунд не была сгенерирована?" -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" msgstr "Редактировать темы в бэллотах" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "×" -#: printing/templates/scoresheet_list.html:47 +#: printing/templates/scoresheet_list.html msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." msgstr "Редактирование тем не сохранит их на постоянной основе - они только обновятся в доступных для печати бэллотах. Это может быть полезно в темах, связанных с должностными лицами, когда вы хотите обеспечить конфиденциальность, но все ещё нуждаетесь в том, чтобы распечатать бэллоты с корректными темами." -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "Тема" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" msgstr "Изменения в темах будут автоматически обновляться в отображаемых бэллотах" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." msgstr "Речи по x минут, шкала спикерских от x до x. У вас x минут на принятие решения." -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" msgstr "Общий балл" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" msgstr "Неаффилированный" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "Команда" diff --git a/tabbycat/privateurls/locale/ru/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/ru/LC_MESSAGES/django.po index 1f70fda3c74..b18d774f06c 100644 --- a/tabbycat/privateurls/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:46\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -18,151 +18,144 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" msgstr "Управление личным URL" -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:145 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" msgstr "Личный URL" -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." msgstr "Личные URL для бэллотов и/или представления форм обратной связи от участников приведены ниже." -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" msgstr "Частные URL-адреса используются для того, чтобы участники могли отправлять бэллоты и/или формы обратной связи онлайн. Вам стоит использовать их, если у вас есть средства распространения странно выглядящих URL участникам, и вы слишком обеспокоены мошенничеством, чтобы использовать общедоступные страницы, где каждый может ввести любые данные. URL-адреса будут выглядеть вот так:" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." -msgstr "Любой, имеющий URL может получить доступ к соответствующей странице ввода данных. Идея заключается в том, что трудно угадать чужой ключ (выглядящий как случайный набор символов), поэтому вы должны сделать каждый URL доступным только для участника. Подробнее о частных URL." +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +msgstr "" -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." msgstr "Ни отправка бэллотов, и форм обратной связи от участников, ни самостоятельная регистрация участников не установлены доступными с личных URL. Любой созданный URL будет бесполезен если вы не измените эти настройки соответствующим образом на странице настроек турнира." -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." msgstr "Нет личных URL-адресов." -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" msgstr "Генерировать личные URL" -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" msgstr "Смотреть URL" -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." msgstr "Всем доступным участникам уже были отправлены их личные URL." -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" msgstr "Отправить URL по email" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." msgstr "Эта кнопка генерирует только личные URL для участников, которые еще их не имеют." -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" msgstr "Генерировать URL" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." msgstr "Все участники уже имеют личные URL." -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" msgstr "Личный URL" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" msgstr "для %(name)s" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "( %(team)s)" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "URL этой страницы персонализирован для вас, %(name)s. Не делитесь им ни с кем: любой, кто знает это URL может отправлять за вас результаты дебатов и/или фидбэк. Если вы запомните эту страницу, вы можете возвращаться после каждого раунда для доступных действий." -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" msgstr "Отменить регистрации с %(check_time)s" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" msgstr "Зарегистрироваться" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" msgstr "Вы были зарегистрированы в %(check_time)s" -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." msgstr "В настоящее время вы не зарегистрированы." -#: privateurls/templates/public_url_landing.html:62 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Submit Ballot for %(round)s" msgstr "" -#: privateurls/templates/public_url_landing.html:65 -msgid "There are no current rounds" -msgstr "" - -#: privateurls/templates/public_url_landing.html:71 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" msgstr "Отправить форму обратной связи" -#: privateurls/templates/public_url_landing.html:84 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" msgstr "Регистрация (%(name)s)" -#: privateurls/views.py:63 privateurls/views.py:164 +#: privateurls/views.py msgid "no URL" msgstr "нет URL" -#: privateurls/views.py:76 +#: privateurls/views.py msgid "URL" msgstr "URL" -#: privateurls/views.py:87 +#: privateurls/views.py msgid "Speakers" msgstr "Спикеры" -#: privateurls/views.py:97 +#: privateurls/views.py msgid "Adjudicators" msgstr "Судьи" -#: privateurls/views.py:119 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." msgstr "Все участники уже имеют личные URL. Если вы хотите удалить их, используйте область \"Редактировать базу данных\"." -#: privateurls/views.py:126 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." @@ -171,7 +164,7 @@ msgstr[1] "Личные URL были созданы для %(nblank_people)d." msgstr[2] "Личные URL были созданы для %(nblank_people)d." msgstr[3] "Личные URL были созданы для %(nblank_people)d." -#: privateurls/views.py:131 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." @@ -180,11 +173,11 @@ msgstr[1] "Уже существующие личные URL для %(nexisting_p msgstr[2] "Уже существующие личные URL для %(nexisting_people)d остались неиспользованными." msgstr[3] "Уже существующие личные URL для %(nexisting_people)d остались неиспользованными." -#: privateurls/views.py:172 +#: privateurls/views.py msgid "URL Key" msgstr "Ключ URL" -#: privateurls/views.py:181 +#: privateurls/views.py msgid "Debates" msgstr "Дебаты" diff --git a/tabbycat/results/locale/ru/LC_MESSAGES/django.po b/tabbycat/results/locale/ru/LC_MESSAGES/django.po index 833a9ffe283..c34382681c6 100644 --- a/tabbycat/results/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:14\n" "Last-Translator: philip_tc\n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -18,7 +18,11 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 948\n" -#: results/admin.py:44 +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py #, python-format msgid "Resaved results for %(count)d ballot submission." msgid_plural "Resaved results for %(count)d ballot submissions." @@ -27,73 +31,68 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: results/admin.py:47 -msgid "Resave results" -msgstr "" - -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:158 +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" msgstr "Результаты" -#: results/forms.py:39 +#: results/forms.py msgid "Tournament password" msgstr "" -#: results/forms.py:45 +#: results/forms.py msgid "That password isn't correct." msgstr "Неверный пароль." -#: results/forms.py:77 +#: results/forms.py msgid "Please enter a whole number." msgstr "Пожалуйста, введите полное число." -#: results/forms.py:79 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." msgstr "Пожалуйста, введите несколько %s." -#: results/forms.py:166 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." msgstr "Бэллот не может быть одновременно отклонен и подтвержден." -#: results/forms.py:173 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." msgstr "Статус дебатов не может быть подтвержден, если ни один набор бэллотов не подтвержден." -#: results/forms.py:302 results/forms.py:336 +#: results/forms.py msgid "---------" msgstr "-----------" -#: results/forms.py:304 results/forms.py:306 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" msgstr "%(aff_team)s в утверждении, %(neg_team)s в отрицании" -#: results/forms.py:323 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" msgstr "%(side)s вето на тему" -#: results/forms.py:332 results/forms.py:901 +#: results/forms.py #, python-format msgid "%(team)s (%(side)s)" msgstr "%(team)s (%(side)s)" -#: results/forms.py:335 +#: results/forms.py msgid "Winner" msgstr "" -#: results/forms.py:489 +#: results/forms.py msgid "Mark as a duplicate speech" msgstr "Отметить как дублирующую речь" -#: results/forms.py:549 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." msgstr "Спикер %(speaker)s, похоже, не из команды %(team)s." -#: results/forms.py:563 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." @@ -102,52 +101,52 @@ msgstr[1] "%(speaker)s, похоже, произнес %(count)d констру msgstr[2] "%(speaker)s, похоже, произнес %(count)d конструктивных речей." msgstr[3] "%(speaker)s, похоже, произнес %(count)d конструктивных речей." -#: results/forms.py:580 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." msgstr "Последний конструктивный спикер и заключительный спикер не могут совпадать." -#: results/forms.py:587 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." msgstr "Спикер, говоривший заключительную речь в этой команде нее давал конструктивную речь." -#: results/forms.py:719 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." msgstr "Общие баллы команд одинаковы (т.е. ничья)." -#: results/forms.py:724 +#: results/forms.py msgid "The declared winner does not correspond to the team with the highest score." msgstr "" -#: results/forms.py:733 +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" msgstr "Общая сумма баллов для следующих команд одинакова: %(teams)s" -#: results/forms.py:743 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "Предел (%(margin).1f) превышает максимально допустимый предел (%(max_margin).1f)." -#: results/forms.py:846 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." msgstr "Общие баллы команд одинаковы (т.е. ничья) у судьи %(adjudicator)s." -#: results/forms.py:851 +#: results/forms.py #, python-format msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:859 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "Предел (%(margin).1f) в бэллоте судьи %(adjudicator)s превышает максимально допустимый предел (%(max_margin).1f)." -#: results/forms.py:921 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." msgstr "Стороны в этих дебатах не подтверждены. Вы не можете сохранить результат этих дебатов, пока стороны не будут подтверждены в сетке." -#: results/forms.py:964 +#: results/forms.py #, python-format msgid "There must be exactly %(n)d team advancing." msgid_plural "There must be exactly %(n)d teams advancing." @@ -156,241 +155,242 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: results/forms.py:1007 +#: results/forms.py msgid "There must be exactly 1 team advancing." msgstr "" -#: results/models.py:33 +#: results/models.py msgid "Tab room" msgstr "Комната тэбмастеров" -#: results/models.py:34 +#: results/models.py msgid "Public" msgstr "Публично" -#: results/models.py:38 +#: results/models.py msgid "timestamp" msgstr "отметка времени" -#: results/models.py:40 +#: results/models.py msgid "version" msgstr "версия" -#: results/models.py:42 +#: results/models.py msgid "submitter type" msgstr "тип отправки" -#: results/models.py:44 +#: results/models.py msgid "confirmed" msgstr "подтвержденные" -#: results/models.py:48 +#: results/models.py msgid "from private URL" msgstr "" -#: results/models.py:51 +#: results/models.py msgid "from participant" msgstr "" -#: results/models.py:56 +#: results/models.py msgid "submitter" msgstr "отправитель" -#: results/models.py:59 +#: results/models.py msgid "confirmer" msgstr "подтверждающий" -#: results/models.py:61 +#: results/models.py msgid "confirm timestamp" msgstr "подтвердить временную отметку" -#: results/models.py:63 +#: results/models.py msgid "IP address" msgstr "IP-адрес" -#: results/models.py:103 +#: results/models.py msgid "A tab room ballot must have a user associated." msgstr "Бэллот тэбмастеров должен иметь привязанного пользователя." -#: results/models.py:111 +#: results/models.py msgid "debate" msgstr "дебаты" -#: results/models.py:113 +#: results/models.py msgid "motion" msgstr "тема" -#: results/models.py:115 +#: results/models.py msgid "discarded" msgstr "отклонено" -#: results/models.py:117 +#: results/models.py msgid "single adjudicator" msgstr "" -#: results/models.py:118 +#: results/models.py msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." msgstr "" -#: results/models.py:123 results/models.py:228 results/models.py:267 -#: results/models.py:305 results/models.py:347 +#: results/models.py msgid "ballot submission" msgstr "отправка бэллота" -#: results/models.py:124 +#: results/models.py msgid "ballot submissions" msgstr "отправки бэллота" -#: results/models.py:143 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" msgstr "Дебаты проводятся в раунде %(round)d, но тема (%(motion)s) из раунда %(motion_round)d" -#: results/models.py:150 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" msgstr "Бэллот не может быть одновременно подтвержден и отклонен!" -#: results/models.py:230 results/models.py:269 +#: results/models.py msgid "debate adjudicator" msgstr "судья дебатов" -#: results/models.py:232 results/models.py:271 results/models.py:307 -#: results/models.py:349 +#: results/models.py msgid "debate team" msgstr "команда" -#: results/models.py:235 results/models.py:312 +#: results/models.py msgid "win" msgstr "победа" -#: results/models.py:237 results/models.py:314 +#: results/models.py msgid "margin" msgstr "предел" -#: results/models.py:239 results/models.py:272 results/models.py:316 -#: results/models.py:352 +#: results/models.py msgid "score" msgstr "балл" -#: results/models.py:244 +#: results/models.py msgid "team score by adjudicator" msgstr "" -#: results/models.py:245 +#: results/models.py msgid "team scores by adjudicator" msgstr "" -#: results/models.py:260 results/models.py:294 +#: results/models.py msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." msgstr "Команды, судья и отправка бэллота должны относиться к одним и тем же дебатам." -#: results/models.py:273 results/models.py:353 +#: results/models.py msgid "position" msgstr "позиция" -#: results/models.py:279 +#: results/models.py msgid "speaker score by adjudicator" msgstr "спикерский балл по судье" -#: results/models.py:280 +#: results/models.py msgid "speaker scores by adjudicator" msgstr "спикерские баллы по судье" -#: results/models.py:310 +#: results/models.py msgid "points" msgstr "баллы" -#: results/models.py:318 +#: results/models.py msgid "votes given" msgstr "количество голосов" -#: results/models.py:320 +#: results/models.py msgid "votes possible" msgstr "возможное количество голосов" -#: results/models.py:324 +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py msgid "team score" msgstr "командный балл" -#: results/models.py:325 +#: results/models.py msgid "team scores" msgstr "командные баллы" -#: results/models.py:351 +#: results/models.py msgid "speaker" msgstr "спикер" -#: results/models.py:355 +#: results/models.py msgid "ghost" msgstr "призрак" -#: results/models.py:356 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." msgstr "Если стоит отметка, этот балл не идет в спикерский тэб. Обычно это устанавливают для случаев, когда кто-то говорил две речи (одну за отсутствующего тиммейта (известно как речь \"айрон-мена\")." -#: results/models.py:365 +#: results/models.py msgid "speaker score" msgstr "спикерский балл" -#: results/models.py:366 +#: results/models.py msgid "speaker scores" msgstr "спикерские баллы" -#: results/models.py:375 +#: results/models.py msgid "The debate team and speaker must be from the same team." msgstr "Команда и спикер должны быть из одной команды." -#: results/models.py:378 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." msgstr "Предоставление бэллота и команда должны относиться к одним и тем же дебатам." -#: results/tables.py:15 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" msgstr "Был ли бэллот этих дебатов проверен" -#: results/tables.py:36 +#: results/tables.py msgid "Status of this debate's ballot" msgstr "Статус бэллота этих дебатов" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" msgstr "Показать сетку" -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" msgstr "Проверить бэллоты" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" msgstr "Текущие айрон-мены" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" msgstr "Команды, которым не сейчас хватает спикера" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" msgstr "Спикер из %(team)s произнес несколько речей в предыдущем раунде" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the current round" msgstr "Спикер из %(team)s произнес несколько речей в текущем раунде" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" msgstr "Нет известных случаев в текущем или предыдущем раунде" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" msgstr "Завершить раунд" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." msgstr "Эта страница автоматически обновляется с новыми бэллотами и регистрациями по мере их появления. Однако, вам нужно будет перезагрузить её после поступления всех бэллотов для перехода на следующий раунд." -#: results/templates/admin_results.html:88 +#: results/templates/admin_results.html #, python-format msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." @@ -399,82 +399,84 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: results/templates/admin_results.html:94 +#: results/templates/admin_results.html #, python-format msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." msgstr "" -#: results/templates/admin_results.html:113 +#: results/templates/admin_results.html msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." msgstr "" -#: results/templates/admin_results.html:127 +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." msgstr "Настройки этого турнира установлены под Британский парламентский формат с одним бэллотом на одного судью с правом голоса. Такая комбинация не разрешена: турниры в БПФ должны использовать консенсусный бэллот. Результаты не могут быть введены при данных настройках. Пожалуйста, измените настройки турнира перед вводом результатов." -#: results/templates/admin_results.html:135 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." msgstr "В настоящее время для этого раунда не введена тема, поэтому результаты не могут быть введены. Добавить темы" -#: results/templates/admin_results.html:144 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." msgstr "Настройки вашего турнира позволяют судьям отправлять бэллоты онлайн. Сетка должна быть опубликованадо то, как судьи смогут сделать это в текущем раунде." -#: results/templates/admin_results.html:151 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." msgstr "Настройки вашего турнира позволяют игрокам отправлять обратную связь онлайн. Сетка должна быть опубликованадо то, как игроки смогут сделать это в текущем раунде." -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:12 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" msgstr "Назад кр всем результатам" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:17 -#: results/templates/ballot_entry_base.html:21 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" msgstr "Создать новый бэллот для этих дебатов" -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." msgstr "Вы не можете подтвердить этот набор бэллотов, потому что сами ввели его." -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html msgid "Confirm results" msgstr "Подтвердить результаты" -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" msgstr "Неверные результаты" -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:68 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." msgstr "Email будут отправлены судьям, когда бэллот будет подтвержден." -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 results/views.py:513 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" msgstr "Ввести результаты" -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "Эта страница автоматически обновляется с новыми бэллотами и регистрациями, по мере того как они приходят." -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." msgstr "Настройки этого турнира установлены под Британский парламентский формат с одним бэллотом на одного судью с правом голоса. Такая комбинация не разрешена: турниры в БПФ должны использовать консенсусный бэллот. Результаты не могут быть введены при данных настройках. Пожалуйста, свяжитесь с администратором для изменения этих настроек." -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "В настоящее время тема для этого раунда не введена, поэтому результаты дебатов не могут быть введены. Пожалуйста, попросите администратора добавить тему." -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." @@ -483,7 +485,7 @@ msgstr[1] "У %(ndebates)s дебатов не подтверждены стор msgstr[2] "У %(ndebates)s дебатов не подтверждены стороны. Результаты этих дебатов не могут быть введены, пока распределение сторон не отмечено как подтвержденное." msgstr[3] "У %(ndebates)s дебатов не подтверждены стороны. Результаты этих дебатов не могут быть введены, пока распределение сторон не отмечено как подтвержденное." -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." @@ -492,78 +494,78 @@ msgstr[1] "%(num_even_panel)s дебатов в коллегиях четное msgstr[2] "%(num_even_panel)s дебатов в коллегиях четное число судей с правом голоса. Если голоса судей распределятся поровну, победу получит команда, за которую проголосовал чэйр." msgstr[3] "%(num_even_panel)s дебатов в коллегиях четное число судей с правом голоса. Если голоса судей распределятся поровну, победу получит команда, за которую проголосовал чэйр." -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" msgstr "Информация о дебатах" -#: results/templates/ballot/ballot_debate_info.html:42 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" msgstr "Ни один спикер не говорил дважды (никто не \"айрон-менил\")" -#: results/templates/ballot/ballot_debate_info.html:45 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" msgstr "Спикер говорил дважды (играл айрон-меном)" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" msgstr "Результат" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "Место" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" msgstr "Предел" -#: results/templates/ballot/ballot_set.html:6 +#: results/templates/ballot/ballot_set.html msgid "There are some problems with this scoresheet. Please review and correct them." msgstr "Есть проблемы с этим бэллотом. Пожалуйста, проверьте и исправьте их." -#: results/templates/ballot/ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s (%(institution)s)" msgstr "Бэллот от %(name)s (%(institution)s" -#: results/templates/ballot/ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s" msgstr "Бэллот от %(name)s" -#: results/templates/ballot/ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html msgid "Scoresheet" msgstr "Бэллот" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Solo Chair" msgstr "Чэйр один" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Chair" msgstr "Чэйр" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Panellist" msgstr "Винг" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Trainee" msgstr "Винг без права голоса" -#: results/templates/ballot/ballot_set.html:44 +#: results/templates/ballot/ballot_set.html msgid "Assign sides before entering scores" msgstr "Назначить стороны перед вводом баллов" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." -msgstr "Дублирующие речи скрыты из спикерского тэба. Если спикер играет айрон-меном, то обычно только меньший из его баллов помечается как дублирующий." +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." +msgstr "" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "There is %(number)s existing ballot set for this debate." msgid_plural "There are %(number)s existing ballot sets for this debate." @@ -572,65 +574,65 @@ msgstr[1] "Есть %(number)s наборов бэллотов для этих msgstr[2] "Есть %(number)s наборов бэллотов для этих дебатов." msgstr[3] "Есть %(number)s наборов бэллотов для этих дебатов." -#: results/templates/ballot/other_ballots_list.html:21 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." msgstr "Этот набор бэллотов подтверждён." -#: results/templates/ballot/other_ballots_list.html:26 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." msgstr "Этот набор бэллотов отклонён." -#: results/templates/ballot/other_ballots_list.html:41 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" msgstr "ПРОСМАТРИВАЕТСЯ ПРЯМО СЕЙЧАС" -#: results/templates/ballot/other_ballots_list.html:45 +#: results/templates/ballot/other_ballots_list.html msgid "MERGING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:48 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," msgstr "Версия %(version)s," -#: results/templates/ballot/other_ballots_list.html:53 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," msgstr "введено %(submitter)s," -#: results/templates/ballot/other_ballots_list.html:58 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from %(adjudicator)s's private URL," msgstr "" -#: results/templates/ballot/other_ballots_list.html:62 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," msgstr "отправлено из публичной формы на %(ip_address)s," -#: results/templates/ballot/other_ballots_list.html:68 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," msgstr "%(timestamp)s (%(timeago)s назад)," -#: results/templates/ballot/other_ballots_list.html:73 +#: results/templates/ballot/other_ballots_list.html msgid "unknown" msgstr "" -#: results/templates/ballot/other_ballots_list.html:74 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "confirmed by %(confirmer)s" msgstr "подтверждено %(confirmer)s" -#: results/templates/ballot/other_ballots_list.html:78 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" msgstr "не потверждено" -#: results/templates/ballot/other_ballots_list.html:82 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" msgstr "(отклонено)" -#: results/templates/ballot/other_ballots_list.html:86 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" @@ -639,184 +641,176 @@ msgstr[1] "(идентичный версиям%(others)s)" msgstr[2] "(идентичный версиям%(others)s)" msgstr[3] "(идентичный версиям%(others)s)" -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." msgstr "Этот интерфейс введения бэллотов в бета-версии, если у вас есть какие-то проблемы с ним, старая версия интерфейса доступна здесь.." -#: results/templates/ballot_entry_base.html:30 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr "В этих дебатах коллегия состояла из четного числа судей с правом голоса. Если голоса распределились поровну, победителем станет команда, за которую голосовал чэйр." -#: results/templates/ballot_entry_base.html:41 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." msgstr "В %(team)s есть спикеры, которые произнесли несколько речей в последнем раунде - то есть были айрон-менами. Пожалуйста, внимательно проверьте бэллот, чтобы уточнить, будет ли это происходить и в текущем раунде тоже. Если да, убедитесь, что выбранные ниже спикеры отражают это." -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" msgstr "Бэллот от чэйра %(chair)s" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" msgstr "Бэллот, чэйр не установлен" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" msgstr "Ошибка в %(pos)s поле спикера: %(error)s" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" msgstr "Ошибка в %(pos)s поле дублирующего спикера: %(error)s" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" msgstr "Ошибка в %(pos)s поле баллов: %(error)s" -#: results/templates/debate_postponement_form.html:3 +#: results/templates/debate_postponement_form.html msgid "Postponed" msgstr "" -#: results/templates/debate_postponement_form.html:8 +#: results/templates/debate_postponement_form.html msgid "Postpone" msgstr "" -#: results/templates/enter_results.html:15 +#: results/templates/enter_results.html msgid "Ballot Status" msgstr "Статус бэллота" -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" msgstr "только подтвержденный набор бэллотовв повлияет на результат этих дебатов" -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" msgstr "Статус дебатов" -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" msgstr "все дебаты должны быть подтверждены для завершения раунда" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" msgstr "Сохранить бэллот" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" msgstr "Отменить ввод" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "URL этой страницы персонализирован для вас, %(name)s. Не делитесь им ни с кем: любой, кто знает это URL может отправлять за вас результаты дебатов и/или фидбэк. Если вы запомните эту страницу, вы можете возвращаться после каждого раунда для доступных действий." -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." msgstr "Эта страница позволяет вам, %(name)s, подтвердить ваш бэллот. Вы не должны ни с кем делиться этим URL. Если вы сообщите кому-то этот URL, другие лица получат доступ ковсемдействиям с вашей личной лэндинговой страницы." -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" msgstr "Бэллот не доступен" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." msgstr "Вернуться на свою личную страницу." -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" msgstr "Ввести бэлллот" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" msgstr "Кто вы?" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" msgstr "(нажмите на ваше имя в этом списке)" -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." msgstr "Сетка и/или темы для %(round)s ещё не опубликована." -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" msgstr "Бэллот для %(matchup)s" -#: results/templates/public_ballot_set.html:28 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" msgstr "%(round)s @ %(room)s" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" msgstr "Назад на лэндинговую страницу" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" msgstr "Вернуться к результатам за %(round)s" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "Тема" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" msgstr "От %(name)s (%(institution)s)" -#: results/templates/public_ballot_set.html:92 -#: results/templates/public_ballot_set.html:96 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" msgstr "Всего для %(name)s (%(side)s)" -#: results/templates/public_ballot_set.html:105 -#: results/templates/public_ballot_set.html:109 +#: results/templates/public_ballot_set.html #, python-format msgid "%(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Won" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Lost" msgstr "" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set_error.html #, python-format msgid "Back to the tournament home page." msgstr "Вернуться к домашней странице турнира." -#: results/templates/public_enter_results.html:9 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" msgstr "%(adjudicator)s, обратите внимание, что вы должны ввести все бэллотывашей коллегии, не только ваш личный!" -#: results/templates/public_enter_results.html:16 +#: results/templates/public_enter_results.html msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." msgstr "" -#: results/templates/public_enter_results.html:24 +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." @@ -825,102 +819,104 @@ msgstr[1] "Эта форма уже была отправлена %(nsu msgstr[2] "Эта форма уже была отправлена %(nsubmissions)s раз. Пожалуйста, свяжитесь с тэбмастером после отправки вашей формы." msgstr[3] "Эта форма уже была отправлена %(nsubmissions)s раз. Пожалуйста, свяжитесь с тэбмастером после отправки вашей формы." -#: results/templates/public_enter_results.html:63 -msgid "Submit Ballot(s)" -msgstr "Отправить бэллот(ы)" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: results/templates/public_enter_results.html:65 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "При отправке этой формы ваш IP-адрес будет сохраняться в целях авторизации." -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" msgstr "Нет результатов для ввода (%(adjudicator)s)" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" msgstr "Нет результатов для введения" -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" msgstr "Посмотреть по командам" -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" msgstr "Посмотреть по дебатам" -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" msgstr "Результаты %(round)s" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" msgstr "Результаты не доступны" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." msgstr "Результаты для %(round)s еще не доступны." -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." msgstr "%(round)s - это закрытый раунд." -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" msgstr "Нет бэллота" -#: results/utils.py:19 +#: results/utils.py msgid "Debate was Postponed" msgstr "" -#: results/utils.py:20 +#: results/utils.py msgid "Ballot is Unconfirmed" msgstr "Бэллот не подтвержден" -#: results/utils.py:21 +#: results/utils.py msgid "Ballot is Confirmed" msgstr "Бэллот подтвержден" #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:36 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" msgstr "%(team)s как %(side)s" -#: results/utils.py:43 +#: results/utils.py #, python-format msgid "%(team)s (%(side)s) won" msgstr "" #. Translators: The team here is the losing team -#: results/utils.py:45 +#: results/utils.py #, python-format msgid "vs %(team)s (%(side)s)" msgstr "" -#: results/utils.py:47 +#: results/utils.py #, python-format msgid "Advancing: %(advancing_list)s
    " msgstr "Проходят:%(advancing_list)s
    " -#: results/utils.py:50 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" msgstr "Не проходят: %(eliminated_list)s" -#: results/utils.py:58 +#: results/utils.py #, python-format msgid "1st: %(first_team)s
    " msgstr "1: %(first_team)s
    " -#: results/utils.py:59 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" @@ -929,190 +925,190 @@ msgstr "2-е: %(second_team)s
    \n" "3-е: %(third_team)s
    \n" "4-е: %(fourth_team)s" -#: results/utils.py:74 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" msgstr "Ошибка в результатах %(debate)s" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:134 +#: results/utils.py msgid "PM" msgstr "ПМ" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:136 +#: results/utils.py msgid "DPM" msgstr "ЗПМ" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:138 +#: results/utils.py msgid "LO" msgstr "ЛО" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:140 +#: results/utils.py msgid "DLO" msgstr "ЗЛО" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:142 +#: results/utils.py msgid "MG" msgstr "ЧП" #. Translators: Abbreviation for Government Whip -#: results/utils.py:144 +#: results/utils.py msgid "GW" msgstr "СП" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:146 +#: results/utils.py msgid "MO" msgstr "ЧО" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:148 +#: results/utils.py msgid "OW" msgstr "СО" -#: results/utils.py:168 +#: results/utils.py msgid "Reply" msgstr "Ответ" -#: results/views.py:270 results/views.py:272 +#: results/views.py msgid " vs " msgstr " против " -#: results/views.py:273 +#: results/views.py #, python-format msgid "%(matchup)s: %(round)s @ %(room)s" msgstr "" -#: results/views.py:275 +#: results/views.py msgid "N/A" msgstr "Н/Д" -#: results/views.py:408 +#: results/views.py msgid "New Ballot Set" msgstr "" -#: results/views.py:411 +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." msgstr "Набор бэллотов для %(debate)s добавлен." -#: results/views.py:413 results/views.py:480 +#: results/views.py msgid " Email receipts queued to be sent." msgstr " Email поставлены в очередь на отправку." -#: results/views.py:427 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." msgstr "Упс! У дебатов %(debate)s нет чэйра, так что вы не можете ввести для них результаты." -#: results/views.py:433 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." msgstr "Упс! У дебатов %(debate)s не подтверждены стороны, так что вы не можете ввести их результаты." -#: results/views.py:459 +#: results/views.py msgid "Edit Ballot Set" msgstr "" -#: results/views.py:473 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." msgstr "Набор бэллотов для %(matchup)s отклонён." -#: results/views.py:475 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." msgstr "Набор бэллотов для %(matchup)s подтвержден." -#: results/views.py:477 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." msgstr "Изменения в набор бэллотов %(matchup)s сохранены." -#: results/views.py:528 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." msgstr "Спасибо, %(user)s! Ваш бэллот %(debate)s записан." -#: results/views.py:535 +#: results/views.py msgid "The draw for this round hasn't been released yet." msgstr "Сетка на этот раунд не была опубликована." -#: results/views.py:539 +#: results/views.py msgid "The motions for this round haven't been released yet." msgstr "Темы на этот раунд не опубликованы." -#: results/views.py:544 +#: results/views.py msgid "It looks like you don't have a debate this round." msgstr "Похоже, что вы не участвуете в дебатах в этом раунде." -#: results/views.py:546 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." msgstr "Похоже, вы привязаны к двум или более дебатам в этом раунде. Пожалуйста, свяжитесь с тэбмастером." -#: results/views.py:573 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." msgstr "В этих дебатах нет чэйра, поэтому вы не можете ввести их результаты. Пожалуйста, свяжитесь с тэбмастером." -#: results/views.py:578 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." msgstr "Похоже, что стороны в этих дебатах ещё не подтверждены, так что вы не можете ввести их результаты. Пожалуйста, свяжитесь с тэбмастером." -#: results/views.py:689 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." msgstr "" -#: results/views.py:707 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." msgstr "Эти дебаты в %s, который является закрытым раундом." -#: results/views.py:710 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." msgstr "Эти дебаты находятся в %s, результаты которых пока не доступны." -#: results/views.py:714 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." msgstr "Результат для дебатов %s не подтвержден." -#: results/views.py:717 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." msgstr "У дебатов %s нет подтвержденного бэллота." -#: results/views.py:739 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." msgstr "Нет результатов для дебатов %s." -#: results/views.py:805 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" msgstr "Добавить результат от %(adjudicator)s" -#: results/views.py:809 +#: results/views.py msgid "Adjudicator" msgstr "Судья" -#: results/views.py:846 +#: results/views.py msgid "Merge Ballots" msgstr "" -#: results/views.py:877 +#: results/views.py msgid "The speaking order in the ballots is inconsistent, so could not be merged." msgstr "" -#: results/views.py:879 +#: results/views.py msgid "Duplicate speeches are marked inconsistently, so could not be merged." msgstr "" -#: results/views.py:880 +#: results/views.py #, python-format msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." msgstr "" diff --git a/tabbycat/standings/locale/ru/LC_MESSAGES/django.po b/tabbycat/standings/locale/ru/LC_MESSAGES/django.po index 6ca230c21e3..6f51ce85346 100644 --- a/tabbycat/standings/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-29 23:49-0400\n" -"PO-Revision-Date: 2020-12-30 04:11\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:01\n" "Last-Translator: philip_tc\n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -18,604 +18,595 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 950\n" -#: standings/base.py:297 +#: standings/base.py msgid "The same metric would be added twice:" msgstr "Эта же метрика будет добавлена дважды:" -#: standings/base.py:298 +#: standings/base.py msgid "The same ranking would be added twice:" msgstr "Тот же рейтинг будет добавлен дважды:" -#: standings/base.py:414 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" msgstr "Нераспознанный код метрики: \"%(code)s\"" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" msgstr "Все" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" msgstr "Брейкаются" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" msgstr "Не %(category)s" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" msgstr "Все спикеры" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" msgstr "НС" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "Чэйры" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" msgstr "Винги" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" msgstr "Винги без права голоса" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" msgstr "Средний рейтинг" -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" msgstr "Медианный рейтинг" -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" msgstr "Рейтинг верхней четверти" -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" msgstr "Рейтинг нижней четверти" -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" msgstr "Средний рейтинг от команд" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" msgstr "Средний рейтинг от чэйров" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" msgstr "Средний рейтинг от вингов" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" msgstr "Средний рейтинг от вингов без права голоса" -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" msgstr "Средний балл" -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" msgstr "Медианный балл" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" msgstr "Баллы верхней четверти" -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" msgstr "Баллы нижней четверти" -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" msgstr "Среднее заключительных спикеров" -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" msgstr "Спикерский %(num)d средний" -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" msgstr "Средний финальный балл" -#: standings/speakers.py:50 standings/speakers.py:106 +#: standings/speakers.py msgid "total" msgstr "всего" -#: standings/speakers.py:51 standings/speakers.py:107 +#: standings/speakers.py msgid "Total" msgstr "Всего" -#: standings/speakers.py:58 standings/speakers.py:116 +#: standings/speakers.py msgid "average" msgstr "среднее" -#: standings/speakers.py:59 standings/speakers.py:117 +#: standings/speakers.py msgid "Avg" msgstr "Ср" -#: standings/speakers.py:66 +#: standings/speakers.py msgid "team points" msgstr "баллы команды" -#: standings/speakers.py:67 +#: standings/speakers.py msgid "Team" msgstr "Команда" -#: standings/speakers.py:89 standings/speakers.py:126 +#: standings/speakers.py msgid "standard deviation" msgstr "стандартное отклонение" -#: standings/speakers.py:90 standings/speakers.py:127 +#: standings/speakers.py msgid "Stdev" msgstr "Stdev" -#: standings/speakers.py:98 +#: standings/speakers.py msgid "number of speeches given" msgstr "количество произнесенных речей" -#: standings/speakers.py:99 standings/speakers.py:138 +#: standings/speakers.py msgid "Num" msgstr "Число" -#: standings/speakers.py:137 +#: standings/speakers.py msgid "replies given" msgstr "ответов дано" -#: standings/speakers.py:147 +#: standings/speakers.py msgid "trimmed mean (high-low drop)" msgstr "обрезанное значение (исключены верхний и нижний балл)" -#: standings/speakers.py:148 +#: standings/speakers.py msgid "Trim" msgstr "Обрезка" -#: standings/teams.py:62 +#: standings/teams.py msgid "points" msgstr "баллов" -#: standings/teams.py:63 +#: standings/teams.py msgid "Pts" msgstr "Баллов" -#: standings/teams.py:76 +#: standings/teams.py msgid "wins" msgstr "побед" -#: standings/teams.py:77 standings/views.py:592 +#: standings/teams.py standings/views.py msgid "Wins" msgstr "Побед" -#: standings/teams.py:87 +#: standings/teams.py msgid "total speaker score" msgstr "общий спикерский балл" -#: standings/teams.py:88 +#: standings/teams.py msgid "Spk" msgstr "Спик" -#: standings/teams.py:97 +#: standings/teams.py msgid "average total speaker score" msgstr "средний общий спикерский балл" -#: standings/teams.py:98 +#: standings/teams.py msgid "ATSS" msgstr "ATSS" -#: standings/teams.py:107 +#: standings/teams.py msgid "speaker score standard deviation" msgstr "стандартное отклонение спикерских баллов" -#: standings/teams.py:108 +#: standings/teams.py msgid "SSD" msgstr "SSD" -#: standings/teams.py:118 +#: standings/teams.py msgid "sum of margins" msgstr "сумма пределов" -#: standings/teams.py:119 +#: standings/teams.py msgid "Marg" msgstr "Пред" -#: standings/teams.py:128 +#: standings/teams.py msgid "average margin" msgstr "средний предел" -#: standings/teams.py:129 +#: standings/teams.py msgid "AWM" msgstr "AWM" -#: standings/teams.py:138 +#: standings/teams.py msgid "average individual speaker score" msgstr "средний индивидуальный спикерский балл" -#: standings/teams.py:139 +#: standings/teams.py msgid "AISS" msgstr "СИСБ" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by wins" msgstr "сила сетки по победам" -#: standings/teams.py:212 +#: standings/teams.py msgid "DS" msgstr "DS" -#: standings/teams.py:219 +#: standings/teams.py msgid "draw strength by total speaker score" msgstr "сила сетки по общему спикерскому баллу" -#: standings/teams.py:220 +#: standings/teams.py msgid "DSS" msgstr "DSS" -#: standings/teams.py:231 +#: standings/teams.py msgid "number of pullups before this round" msgstr "количество пулл-апов перед этим раундом" -#: standings/teams.py:232 +#: standings/teams.py msgid "PU" msgstr "ПУ" -#: standings/teams.py:254 +#: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "количество судей, проголосовавших за эту команду" -#: standings/teams.py:255 +#: standings/teams.py msgid "Ballots" msgstr "Бэллоты" -#: standings/teams.py:256 +#: standings/teams.py msgid "votes/ballots carried" msgstr "голосов/бэллотов внесено" -#: standings/teams.py:280 +#: standings/teams.py msgid "number of firsts" msgstr "количество первых" -#: standings/teams.py:281 +#: standings/teams.py msgid "1sts" msgstr "1х" -#: standings/teams.py:290 +#: standings/teams.py msgid "number of seconds" msgstr "количество вторых" -#: standings/teams.py:291 +#: standings/teams.py msgid "2nds" msgstr "2х" -#: standings/teams.py:300 +#: standings/teams.py msgid "number of thirds" msgstr "" -#: standings/teams.py:301 +#: standings/teams.py msgid "3rds" msgstr "" -#: standings/teams.py:313 +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py msgid "Who-beat-whom" msgstr "Кто кого победил" -#: standings/teams.py:314 +#: standings/teams.py msgid "WBW" msgstr "Кто кого победил" -#: standings/teams.py:315 +#: standings/teams.py msgid "who-beat-whom" msgstr "кто кого победил" -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." msgstr "Оно также исключает результаты закрытых раундов (если таковые имеются) и текущего раунда." -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "Этот список сортируется по командным баллам, а затем по алфавиту по названию команды. Он не указывает рейтинг каждой команды в каждой строчке. %(silent_round_sentence)s" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "Этот список сортируется по количеству побед, потом по названию команд в алфавитном порядке. Он не отражает рейтинг каждой команды в каждой строчке. %(silent_round_sentence)s" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." msgstr "Нет раундов, для которых доступны результаты." -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." msgstr "Спикеры заключительных речей ранжированы по их среднему баллу за речь ." -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." msgstr "Спикеры могут пропустить до %(count)s заключительных речей, прежде чем они будут исключены из тэба заключительных спикеров." -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." msgstr "Все спикеры заключительных речей появляются в этой таблице, вне зависимости от того, сколько речей они пропустили." -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." msgstr "Эти настройки можно изменить в разделе « » конфигурации этого турнира." -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." msgstr "Первенство положения спикеров пустует. Это означает, что спикеры не ранжированы ни по одной метрике, то есть все спикеры будут равны. Если это не то, что вы хотели, установите первенство положения спикеров в области Положение настроек турнира . Для большинства турниров первой метрикой будет общий или средний балл." -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." msgstr "Спикеры ранжированы по их среднему баллу ." -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." msgstr "Спикеры ранжированы по их сумме баллов . Любой спикер, пропустивший хотя бы один раунд, будет сурово наказан таким ранжированием." -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." msgstr "Спикеры могут пропустить до %(count)s речей, прежде чем они будут исключены из спикерского тэба." -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." msgstr "Все спикеры появляются в этой таблице, вне зависимости от того, сколько раундов они пропустили." -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." msgstr "Включение лимита на количество пропущенных раундов требует, чтобы метрика \"количество произнесенных речей\" была включена в расчет положения спикеров, поэтому она была добавлена автоматически. Чтобы убрать это предупреждение, добавьте Количество произнесенных речей в дополнительные метрики Положения спикеров в разделе Положения настроек этого турнира." -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" msgstr "Обзор дайверсити" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." msgstr "Данные о результатах, представленные здесь, представлены без испытаний статистической значимости. Корреляции не должны автоматически рассматриваться как надежные; особенно на небольших турнирах. Регион является настраиваемой категорией, присвоенной набору институтов, и подсчитывается с использованием числа участников, связанных с этими институтами." -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" msgstr "Не идентифицирующие себя как цис-мужчины" -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" msgstr "Идентифицирующие себя как цис-мужчины" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" msgstr "Не определено/не зарегистрировано" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" msgstr "Положение" -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" msgstr "Самые высокие спикерские" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" msgstr "%(speaker)s в %(round)s" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:152 -#: standings/templates/standings_index.html:167 -#: standings/templates/standings_index.html:186 +#: standings/templates/standings_index.html msgid "No data yet" msgstr "Пока нет данных" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" msgstr "Самый низкие спикерские" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" msgstr "Крупнейший предел" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" msgstr "%(team)s против %(opp)s в %(round)s" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" msgstr "Ближайший предел" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" msgstr "Лучшие командные баллы" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" msgstr "%(team)s в %(round)s" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" msgstr "Худшие командные баллы" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" msgstr "Наиболее/наименее популярные темы" -#: standings/templates/standings_index.html:177 +#: standings/templates/standings_index.html msgid "Average Speaks" msgstr "Средние спикерские" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" msgstr "Обзор" -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "Команды" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" msgstr "Все" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" msgstr "Спикеры" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" msgstr "Конструктивные" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" msgstr "Все" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "Спикеры " -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" msgstr "Ответы" -#: standings/templates/standings_menu.html:63 -#: standings/templates/standings_menu.html:76 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "Темы" -#: standings/templates/standings_menu.html:66 +#: standings/templates/standings_menu.html msgid "By Round" msgstr "" -#: standings/templates/standings_menu.html:81 +#: standings/templates/standings_menu.html msgid "Diversity" msgstr "Дайверсити" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." msgstr "Первенство положения команд пустует. Это означает, что команды не ранжированы ни по одной метрике, то есть все команды будут в одной группе. Если это не то, что вы хотели, установите первенство положения команд в области Положение настроек турнира . Для большинства турниров первой метрикой будет количество баллов или побед." -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " msgstr "

    Произошла ошибка при создании положения команд:%(message)s

    " -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " msgstr "

    Вам может понадобиться дополнительная проверка настроек положения команд в разделе Установки. Если эта проблема повторяется и вы не знаете, как её решить, пожалуйста, свяжитесь с разработчиками.

    " -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " msgstr "

    Тэбмастер должен решить эту проблему.

    " -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" msgstr "с %(round)s" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" msgstr "%(title)s (только%(limit)d верхний)" -#: standings/views.py:208 standings/views.py:428 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." msgstr "Тэб не может быть отображен, так как все раунды на данный момент - закрытые." -#: standings/views.py:290 +#: standings/views.py msgid "Speaker Standings" msgstr "Положение спикеров" -#: standings/views.py:326 +#: standings/views.py msgid "Speaker Tab" msgstr "Спикерский тэб" -#: standings/views.py:341 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" msgstr "Положение спикеров %(category)s" -#: standings/views.py:359 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" msgstr "%(category)s Спикерский тэб" -#: standings/views.py:372 +#: standings/views.py msgid "Reply Speaker Standings" msgstr "Положение заключительный спикеров" -#: standings/views.py:380 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." msgstr "Заключительные речи не доступны на этот турнире." -#: standings/views.py:408 +#: standings/views.py msgid "Reply Speaker Tab" msgstr "Тэб заключительных спикеров" -#: standings/views.py:420 standings/views.py:669 +#: standings/views.py msgid "Team Standings" msgstr "Положение команд" -#: standings/views.py:499 +#: standings/views.py msgid "Team Tab" msgstr "Командный тэб" -#: standings/views.py:518 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" msgstr "Положение команд %(category)s" -#: standings/views.py:545 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" msgstr "Командный тэб %(category)s" -#: standings/views.py:556 +#: standings/views.py msgid "Current Team Standings" msgstr "Текущее положение команд" -#: standings/views.py:592 +#: standings/views.py msgid "Points" msgstr "Баллы" -#: standings/views.py:638 +#: standings/views.py msgid "Feedback Overview" msgstr "Обзор обратной связи" -#: standings/views.py:655 -msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." msgstr "" diff --git a/tabbycat/tournaments/locale/ru/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/ru/LC_MESSAGES/django.po index 90599f4d2d7..400dded3854 100644 --- a/tabbycat/tournaments/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -18,640 +18,635 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "Турниры" -#: tournaments/forms.py:29 +#: tournaments/forms.py msgid "Number of preliminary rounds" msgstr "Количество отборочных раундов" -#: tournaments/forms.py:34 +#: tournaments/forms.py msgid "Number of teams in the open break" msgstr "Количество команд в основном брейке" -#: tournaments/forms.py:35 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." msgstr "Оставьте пустым если нет брейковых раундов." -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Did you agree with their decision?" msgstr "Вы согласны с их решением?" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Agree?" msgstr "Согласны?" -#: tournaments/forms.py:47 +#: tournaments/forms.py msgid "Comments" msgstr "Комментарии" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:61 +#: tournaments/forms.py msgid "Open" msgstr "Открытый" -#: tournaments/forms.py:86 +#: tournaments/forms.py msgid "Format Configuration" msgstr "Конфигурация формата" -#: tournaments/forms.py:87 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" msgstr "Применить стандартные настройки для соответствия обычному формату дебатов" -#: tournaments/forms.py:91 +#: tournaments/forms.py msgid "Public Configuration" msgstr "Настройки публичности" -#: tournaments/forms.py:92 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" msgstr "Показывать не-персонализированную информацию на публичной странице этого сайта, такую как сетки (по мере опубликования) и темы предыдущих раундов" -#: tournaments/forms.py:99 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" -msgstr "Таблизация: [список тэбмастеров здесь]
    Организация: [список членов оргкомитета здесь]
    Судейство: [список главных судей здесь]" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +msgstr "" -#: tournaments/forms.py:195 +#: tournaments/forms.py msgid "Current preliminary round" msgstr "Нынешний отборочный раунд" -#: tournaments/forms.py:196 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" msgstr "Все отборочные раунды завершены" -#: tournaments/forms.py:208 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" msgstr "Текущий брейковый раунд в %(category)s (только отборочные раунды были завершены)" -#: tournaments/forms.py:214 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" msgstr "Все брейковые раунды в %(category)s завершены" -#: tournaments/forms.py:226 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." msgstr "Если текущий раунд является отборочным, то это поле должно быть пустым." -#: tournaments/forms.py:232 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." msgstr "Если все отборочные раунды завершены, то это поле необходимо." -#: tournaments/forms.py:267 +#: tournaments/forms.py #, python-format msgid "%(name)s (%(abbreviation)s)" msgstr "" -#: tournaments/mixins.py:109 +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." msgstr "Вы были перенаправлены на эту страницу, потому что турнир %(tournament)s не имеет раундов. Пожалуйста, создайте раунды перед возвращением на сайт администратора." -#: tournaments/mixins.py:117 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." msgstr "Возникла проблема с данными для турнира %(tournament)s. Пожалуйста, свяжитесь с тэбмастером и попросите его провести расследование." -#: tournaments/mixins.py:130 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." msgstr "Вы были перенаправлены на эту страницу из-за проблемы с распределением команд по сторонам дебатов." -#: tournaments/mixins.py:137 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." msgstr "Существует проблема с тем, как команды назначаются на стороны в дебатах. Тэбмастер должен будет решить эту проблему." -#: tournaments/mixins.py:236 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" msgstr "для %(round)s" -#: tournaments/mixins.py:437 +#: tournaments/mixins.py msgid "Return to Draw" msgstr "Вернуться к сетке" -#: tournaments/models.py:26 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." msgstr "Вы не можете использовать это как краткий адрес турнира, потому что он зарезервирован для URL системы Tabbycat. Пожалуйста, попробуйте другой." -#: tournaments/models.py:33 tournaments/models.py:320 +#: tournaments/models.py msgid "name" msgstr "название" -#: tournaments/models.py:34 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" msgstr "Полное название, например \"Австралоазиатский межвузовский дебатный чемпионат 2016\"" -#: tournaments/models.py:36 +#: tournaments/models.py msgid "short name" msgstr "краткое название" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" msgstr "Название, используемое в меню, например \"Australs 2016\"" -#: tournaments/models.py:39 tournaments/models.py:314 +#: tournaments/models.py msgid "sequence number" msgstr "порядковый номер" -#: tournaments/models.py:40 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." msgstr "Номер, определяющий относительный порядок отображения турниров на главной странице." -#: tournaments/models.py:42 +#: tournaments/models.py msgid "slug" msgstr "краткое название" -#: tournaments/models.py:43 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" msgstr "Суб-URL турнира, не может иметь пробелов, например \"australs2016\"" -#: tournaments/models.py:44 +#: tournaments/models.py msgid "active" msgstr "активный" -#: tournaments/models.py:47 tournaments/models.py:313 +#: tournaments/models.py msgid "tournament" msgstr "турнир" -#: tournaments/models.py:48 +#: tournaments/models.py msgid "tournaments" msgstr "турниры" -#: tournaments/models.py:285 +#: tournaments/models.py msgid "Random" msgstr "Случайный" -#: tournaments/models.py:286 +#: tournaments/models.py msgid "Manual" msgstr "Ручной" -#: tournaments/models.py:287 +#: tournaments/models.py msgid "Round-robin" msgstr "Раунд-Робин" -#: tournaments/models.py:288 +#: tournaments/models.py msgid "Power-paired" msgstr "Сочетание по силе команд" -#: tournaments/models.py:289 tournaments/models.py:296 +#: tournaments/models.py msgid "Elimination" msgstr "Брейковый" -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Preliminary" msgstr "Отборочные" -#: tournaments/models.py:305 +#: tournaments/models.py msgid "None" msgstr "Нет" -#: tournaments/models.py:306 +#: tournaments/models.py msgid "Draft" msgstr "Черновик" -#: tournaments/models.py:307 +#: tournaments/models.py msgid "Confirmed" msgstr "Подтвержденные" -#: tournaments/models.py:308 +#: tournaments/models.py msgid "Released" msgstr "Выпущено" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" msgstr "Число, определяющее номер раунда, должно рассчитывать последовательно от 1 для первого раунда" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "completed" msgstr "завершён" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" msgstr "Верно есть раунд завершен, что обычно означает, что все результаты были введены и подтверждены" -#: tournaments/models.py:320 +#: tournaments/models.py msgid "e.g. \"Round 1\"" msgstr "например, \"Раунд 1\"" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "abbreviation" msgstr "аббревиатура" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "e.g. \"R1\"" msgstr "например, \"R1\"" -#: tournaments/models.py:323 +#: tournaments/models.py msgid "stage" msgstr "стадия" -#: tournaments/models.py:324 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" msgstr "Отборочные=раунды до брейка, брейковые=раунды плей/офф" -#: tournaments/models.py:326 +#: tournaments/models.py msgid "draw type" msgstr "тип сетки" -#: tournaments/models.py:327 +#: tournaments/models.py msgid "Which draw method to use" msgstr "Какой метод составления сетки использовать" -#: tournaments/models.py:330 +#: tournaments/models.py msgid "break category" msgstr "категория брейка" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "If elimination round, which break category" msgstr "Если это брейковый раунд, то в какой категории" -#: tournaments/models.py:334 +#: tournaments/models.py msgid "draw status" msgstr "статус сетки" -#: tournaments/models.py:335 +#: tournaments/models.py msgid "The status of this round's draw" msgstr "Статус сетки на этот раунд" -#: tournaments/models.py:338 +#: tournaments/models.py msgid "feedback weight" msgstr "вес обратной связи" -#: tournaments/models.py:340 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." msgstr "Насколько рейтинг судьи зависит от обратной связи и исходного рейтинга. При значении \"0\" рейтинг судьи на 100% соответствует исходному рейтингу, при значении \"1\" он на 100% соответствует среднему значению обратной связи." #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:343 +#: tournaments/models.py msgid "silent" msgstr "закрытый" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." msgstr "Если раунд отмечен как закрытый, вся информация о нем (например, его результаты) не будет показана публично." -#: tournaments/models.py:346 +#: tournaments/models.py msgid "motions released" msgstr "темы опубликованы" -#: tournaments/models.py:347 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" msgstr "Будет ли появляться темы на сайте публично, если включить эту функцию" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "starts at" msgstr "начинается в" -#: tournaments/models.py:351 +#: tournaments/models.py msgid "weight" msgstr "" -#: tournaments/models.py:352 +#: tournaments/models.py msgid "A factor for the points received in the round. For example, if 2, all points are doubled." msgstr "" -#: tournaments/models.py:355 +#: tournaments/models.py msgid "round" msgstr "раунд" -#: tournaments/models.py:356 +#: tournaments/models.py msgid "rounds" msgstr "раунды" -#: tournaments/models.py:369 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." msgstr "На этапе брейковых раундов тип сетки должен быть установлен как \"брейковый\"." -#: tournaments/models.py:372 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." msgstr "На этапе отборочных раундов тип сетки не может быть установлен как \"брейковый\"." -#: tournaments/models.py:377 +#: tournaments/models.py msgid "Elimination rounds must have a break category." msgstr "Брейковые раунды должны иметь брейковую категорию." -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" msgstr "Панель мониторинга" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" msgstr "Обзор" -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" msgstr "текущий раунд:%(round)s, статус: %(status)s" -#: tournaments/templates/blank_site_start.html:7 -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" msgstr "Добро пожаловать в Tabbycat!" -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." msgstr "Для начала вам нужно создать первую учетную запись. Эта учетная запись \"суперпользователь\": под ней вы сможете редактировать что-либо на сайте. Поэтому вы должны использовать сложный пароль." -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." msgstr "Вы можете создать этот аккаунт только однажды, но при желании вы можете изменить логин и пароль после создания, или добавить новых супер-пользователей позднее." -#: tournaments/templates/blank_site_start.html:32 +#: tournaments/templates/blank_site_start.html msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." msgstr "Email-адрес используется для восстановления пароля. Вы можете не предоставлять его, но если не предоставите, вы не сможете восстановить пароль если вы его забыли." -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" msgstr "Создать учетную запись" -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" msgstr "Настройка турнира %(tournament)s" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "Tabbycat" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." msgstr "Для завершения создания турнира выберете опции базовых настроек. Заметьте, что они всего могут быть изменены позже (для более точного контроля) при необходимости." -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" msgstr "Настройка турнира" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" msgstr "Создать новый турнир" -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." -msgstr "Tabbycat - это бесплатная и некоммерческая программа для некоммерческих турниров (хотя донаты приветствуются). Если вы проводите коммерческий турнир (для получения прибыли), пожалуйста, заметьте, что есть обязательный платеж. Для дальнейших деталей ознакомьтесь с лицензионным соглашением Tabbycat ." +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgstr "" -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" msgstr "Просто пытаетесь опробовать Tabbycat?" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." msgstr "Если вы изучаете или пробуете Tabbycat, наиболее простым вариантом будет создание демо турнира, для которого будет создан фейковый (но типичный) набор команд, судей, аудиторий и так далее. Вы можете удалить этот демо-турнир позже или создать новый для настоящего турнира." -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" msgstr "Загрузить %(demo)s" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." msgstr "У вас уже есть турнир, созданный с помощью этого набора данных. Перезагрузка данных удалит все данные из этого турнира." -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" msgstr "Создать турнир" -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" msgstr "Отменить и вернуться на главную страницу сайта" -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" msgstr "Команда отсутствует" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." msgstr "Tabbycat всегда требует, чтобы в каждых дебатах одна и только одна команда была назначена на каждую сторону. Когда это не так, возникает эта ошибка. Обычно это результат того, что дебаты были отредактированы вручную." -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" msgstr "Список неправильно установленных дебатов представлен ниже. Чтобы их исправить, вам нужно сделать следующее:" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." msgstr "Нажмите на кнопку Исправить эти дебаты для этих дебатов." #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." msgstr "Убедитесь, что каждая сторона, которая должна присутствовать в дебатах, присутствует и имеет назначеннуюкоманду. Если команда отсутствует, найдите пустую строчку и используйте лупу для выбора команды. Затем установите для новой команды соответствующую сторону." #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." msgstr "Убедитесь, что каждая сторона не появляется в дебатах больше одного раза." #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." msgstr "Сохранить изменения." -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." msgstr "После того как вы исправили все дебаты, вы должны вернуться на любую страницу, на которой вы изначально находились без повторной ошибки." -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." msgstr "Вы можете видеть все дебаты в разделе Дебаты в области Редактировать базу данных." -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" msgstr "ID Дебатов" -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" -msgstr "Команда(ы) на %(side)s" +msgid "Teams on %(side)s" +msgstr "" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" msgstr "Ссылка для исправления этих дебатов" -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" msgstr "Нет команд" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" msgstr "Несколько команд" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" msgstr "Исправить эти дебаты" -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" msgstr "Похоже, со всеми дебатами все хорошо!" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." msgstr "Если вас продолжает перенаправлять на эту страницу и вы не знаете, почему, пожалуйста, свяжитесь с разработчиками Tabbycat." -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" msgstr "Добро пожаловать в %(tournament)s" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." msgstr "В настоящее время для этого турнира отсутствует общедоступная информация." -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" msgstr "Командный тэб" -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" msgstr "Командный тэб %(category)s" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" msgstr "Спикерский тэб" -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" msgstr "%(category)s Спикерский тэб" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" msgstr "Вкладка ответов" -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" msgstr "Тэб судей" -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" msgstr "Тэб тем" -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" msgstr "Стороны" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:203 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" msgstr "Сетка на %(round)s" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" msgstr "Сетка на текущий раунд" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" msgstr "сетка на %(round)s ещё не опубликована" -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" msgstr "Сетка на следующий раунд ещё не опубликована" -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" msgstr "Регистрации" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" msgstr "Результаты" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "Темы" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" msgstr "Положение команд" -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" msgstr "%(category)s Брейк" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" msgstr "Брейкающиеся судьи" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" msgstr "Дайверсити" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" msgstr "Участники" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" msgstr "Клубы" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" msgstr "Прогресс отправки форм обратной связи" -#: tournaments/templates/public_tournament_index.html:188 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Enter Ballot for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:195 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" msgstr "Введите форму обратной связи" -#: tournaments/templates/public_tournament_index.html:217 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" msgstr "Персонал турнира" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" msgstr "Подтвердить завершение раунда" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" msgstr "Ввести результаты" -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." msgstr "Email уже были отправлены." -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" msgstr "Отправить победы и поражения команды по email" -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" msgstr "Отправить командные баллы по email" -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" msgstr "Отметить %(round)s как завершенный" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" msgstr "Все равно отметить %(round)s как завершенный" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" msgstr "Перейти к %(round)s" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" msgstr "%(round)s уже отмечен как завершенный!" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." @@ -660,12 +655,12 @@ msgstr[1] "Эти предшествующие раунды ещё не заве msgstr[2] "Эти предшествующие раунды ещё не завершены: %(prior_rounds_not_completed)s. Вы должны завершить их прежде чем отметить текущий раунд как завершенный." msgstr[3] "Эти предшествующие раунды ещё не завершены: %(prior_rounds_not_completed)s. Вы должны завершить их прежде чем отметить текущий раунд как завершенный." -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" msgstr "Все бэллоты для %(round)s подтверждены. Вы можете продолжать!" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." @@ -674,374 +669,369 @@ msgstr[1] "Все ещё есть %(num_unconfirmed)s неподтвержден msgstr[2] "Все ещё есть %(num_unconfirmed)s неподтвержденных бэллотов. Вы не должны переходить к следующему раунду, пока все бэллоты не подтверждены." msgstr[3] "Все ещё есть %(num_unconfirmed)s неподтвержденных бэллотов. Вы не должны переходить к следующему раунду, пока все бэллоты не подтверждены." -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " msgstr "

    Этот раунд является закрытым.

    . Хотя публичный просмотр результатов включен, результаты этого раунда будут скрыты от публичного просмотра после завершения раунда.

    Вы можете изменить то, какие раунды являются закрытыми в области Редактировать базу данных .

    " -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "

    Результаты%(round)s будут опубликованы онлайн, как только вы отметите этот раунд как завершенный!

    . Этот раунд не закрытый раунд и публичный просмотр результатов включен.

    . Если вы хотите скрыть результаты этого раунда, вы можете отметить этот раунд как закрытый в области Редактировать базу данных.

    Если вы хотите отключить публичный просмотр результатов, вы можете сделать это в настройках турнира.

    " -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" msgstr "Установить текущий раунд" -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" msgstr "Вернуться к настройкам" -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." msgstr "Ни один из раундов в данный момент не задан. Чтобы Tabbycat мог работать, пожалуйста, настройте текущий раунд турнира %(tournament)s." -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." msgstr "На этой странице вы можете настроить текущий раунд турнира %(tournament)s." -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "В турнире %(tournament)s нет раундов. Вам нужно добавить раунды и связать их с этим турниром перед тем, как вы сможете настроить этот раунд." -#: tournaments/templates/set_round_weights.html:4 -#: tournaments/templates/set_round_weights.html:5 +#: tournaments/templates/set_round_weights.html msgctxt "page title" -msgid "Set Round Weights" +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: tournaments/templates/set_round_weights.html:8 +#: tournaments/templates/set_round_weights.html msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." msgstr "" -#: tournaments/templates/set_round_weights.html:41 +#: tournaments/templates/set_round_weights.html msgctxt "button" msgid "Set weights" msgstr "" -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:47 -msgid "Inactive Tournaments" -msgstr "" - -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/site_index.html msgid "Welcome!" msgstr "Добро пожаловать!" -#: tournaments/templates/site_index.html:21 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" msgstr "Похоже, на этом сайте нет турниров. Хотите создать турнир?" -#: tournaments/templates/site_index.html:30 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:34 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." msgstr "На данном сайте сейчас нет турниров." -#: tournaments/templates/site_index.html:55 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html msgid "New Tournament" msgstr "Новый турнир" -#: tournaments/templates/site_index.html:58 +#: tournaments/templates/site_index.html msgid "Edit Database Area" msgstr "Область Редактировать базу данных" -#: tournaments/templates/site_index.html:61 +#: tournaments/templates/site_index.html msgid "Send a Test Email" msgstr "Отправить пробный email" -#: tournaments/templates/site_index.html:64 +#: tournaments/templates/site_index.html msgid "Import DebateXML" msgstr "" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Get API Token / Change Password (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:77 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" msgstr "Выйти (%(user)s)" -#: tournaments/templates/site_index.html:83 +#: tournaments/templates/site_index.html msgid "Log In as Admin" msgstr "Войти как администратор" -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." msgstr "Надеюсь, вам понравилось использовать Tabbycat для вашего турнира. Мы будем благодарны если вы задонатите нашему проекту, чтобы поддержать его развитие и обслуживание. Для турнира вашего размера, мы предлагаем донат в размере %(amount)s. Заметьте, что если вы проводите коммерческий турнир ради извлечения прибыли, эта выплата является обязательны условием использования лицензии Tabbycat. Узнать больше о донатах. " -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" msgstr "Добро пожаловать в ваш новый турнир!" -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." msgstr "Следующий шаг — ввод исходных данных вашего турнира: клубов, команд, судей и аудиторий. Есть несколько способов сделать это. Для маленьких и средний турниров лучше всего подойдёт простой импортер." #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." msgstr "Для большей информации, пожалуйста, ознакомьтесь с документацией по импорту исходных данных ." -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." msgstr "Используйте простой импортер для добавления исходных данных." -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" -msgstr "Перейдите в область регистраций для создания сетки на %(round)s" +msgid "Mark participants as available to prepare a draw for %(round)s" +msgstr "" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" msgstr "Перейдите в область создания сетки для распределения судей на %(round)s" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" -msgstr "Перейдите в область результатов для введения бэллотов для %(round)s" +msgid "Go to the results area to enter ballots for %(round)s" +msgstr "" -#: tournaments/templates/tournament_index.html:74 +#: tournaments/templates/tournament_index.html msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." msgstr "" -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" msgstr "Область для администратора %(tn)s" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" msgstr "Область помощника для %(tn)s" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" msgstr "Публичная область для %(tn)s" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" msgstr "утверждение" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" msgstr "отрицание" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" msgstr "команда утверждения" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" msgstr "команда отрицатия" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" msgstr "Утв" -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" msgstr "Отр" -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" msgstr "правительство" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" msgstr "оппозиция" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" msgstr "команда правительства" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" msgstr "команда оппозиции" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" msgstr "Проп" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" msgstr "Опп" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" msgstr "утверждение" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" msgstr "команда утверждения" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" msgstr "Проп" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" msgstr "утв" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" msgstr "против" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" msgstr "команда за" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" msgstr "команда против" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" msgstr "За" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" msgstr "Против" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" msgstr "истец" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" msgstr "ответчик" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" msgstr "команда-истец" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" msgstr "команда-ответчик" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" msgstr "Ист" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" msgstr "Отв" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "первое правительство" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "первая оппозиция" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "второе правительство" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "вторая оппозиция" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" msgstr "команда первого правительства" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" msgstr "команда первой оппозиции" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" msgstr "команда второго правительства" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" msgstr "команда второй оппозиции" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "1П" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "1О" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "2П" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "2О" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "Раунд %(number)d" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" msgstr "Р%(number)d" -#: tournaments/views.py:151 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" msgstr "%(round)s отмечен как завершенный. Все раунды теперь завершены, так что вы завершили турнир! Поздравляем!" -#: tournaments/views.py:157 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." msgstr "%(round)s отмечен как завершенный. Это последний раунд в этой последовательности! Вернитесь к первому из раундов, не отмеченных как завершенные." -#: tournaments/views.py:170 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." msgstr "%(round)s отмечен как завершенный! Вы закончили все предварительные раунды! Поздравляем! Следующий шаг - это создание брейка." -#: tournaments/views.py:176 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." msgstr "%(round)s отмечен как завершенный. Это был последний отборочный раунд, однако один или несколько раундов все ещё не отмечены как завершенные. Вернитесь назад к первому из незавершенных отборочных раундов." -#: tournaments/views.py:184 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" msgstr "%(this_round)s был отмечен как завершенный. Переход на %(next_round)s. Ура! Продолжайте в том же духе!" -#: tournaments/views.py:201 +#: tournaments/views.py msgid "8-team generic dataset" msgstr "обычный 8-командный набор данных" -#: tournaments/views.py:202 +#: tournaments/views.py msgid "24-team Australs dataset" msgstr "24-командный набор данных австралийского формата" -#: tournaments/views.py:203 +#: tournaments/views.py msgid "88-team BP dataset" msgstr "88-командный набор данных БПФ" -#: tournaments/views.py:288 -msgid "Successfully set round weights." +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." msgstr "" diff --git a/tabbycat/utils/locale/ru/LC_MESSAGES/django.po b/tabbycat/utils/locale/ru/LC_MESSAGES/django.po index 40a75204265..691c980ae87 100644 --- a/tabbycat/utils/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:46\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -18,231 +18,242 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "Email address" -msgstr "" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "Раунд" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "Команда" + +#: utils/admin.py +msgid "Speaker" +msgstr "Спикер" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "Турнир" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "Сторона" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "Тема" + +#: utils/admin.py +msgid "Confirmed" +msgstr "Подтвержденные" + +#: utils/admin.py +msgid "Adjudicator" +msgstr "Судьяя" -#: utils/tables.py:47 +#: utils/tables.py msgid "No Data Available" msgstr "Нет доступной информации" -#: utils/tables.py:155 utils/tables.py:156 +#: utils/tables.py msgid "Ⓒ" msgstr "Ⓒ" -#: utils/tables.py:157 +#: utils/tables.py msgid "Ⓣ" msgstr "Ⓣ" -#: utils/tables.py:161 +#: utils/tables.py msgid "chair" msgstr "чэйр" -#: utils/tables.py:162 +#: utils/tables.py msgid "panellist" msgstr "винг" -#: utils/tables.py:163 +#: utils/tables.py msgid "trainee" msgstr "винг без права голоса" -#: utils/tables.py:166 +#: utils/tables.py msgid "—" msgstr "—" -#: utils/tables.py:167 +#: utils/tables.py msgid "Redacted" msgstr "Редактировано" -#: utils/tables.py:231 utils/tables.py:237 +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" msgstr "Посмотреть %(a)s %(d)s результаты" -#: utils/tables.py:247 utils/tables.py:252 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" msgstr "Посмотреть %(team)s результаты" -#: utils/tables.py:274 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" msgstr "Кодовое имя: %(name)s" -#: utils/tables.py:276 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" msgstr "Настоящее имя: %(name)s" -#: utils/tables.py:296 +#: utils/tables.py #, python-format msgid "%(team)s won" msgstr "%(team)s выиграла" -#: utils/tables.py:301 +#: utils/tables.py #, python-format msgid "%(team)s lost" msgstr "%(team)s проиграла" -#: utils/tables.py:306 utils/tables.py:318 utils/tables.py:342 +#: utils/tables.py #, python-format msgid "%(team)s—no result" msgstr "%(team)s - нет результатов" -#: utils/tables.py:323 +#: utils/tables.py #, python-format msgid "%(team)s placed %(place)s" msgstr "%(team)s заняла %(place)s" -#: utils/tables.py:332 +#: utils/tables.py #, python-format msgid "%(team)s is advancing" msgstr "%(team)s прошла" -#: utils/tables.py:337 +#: utils/tables.py #, python-format msgid "%(team)s was eliminated" msgstr "%(team)s не прошла" -#: utils/tables.py:350 +#: utils/tables.py msgid "View/edit debate ballot" msgstr "Просмотреть/изменить бэллот" -#: utils/tables.py:356 +#: utils/tables.py msgid "View debate ballot" msgstr "Посмотреть бэллот" -#: utils/tables.py:369 +#: utils/tables.py #, python-format msgid " vs %(opposition)s" msgstr " против %(opposition)s" -#: utils/tables.py:376 +#: utils/tables.py #, python-format msgid "Won against %(team)s" msgstr "Победа над %(team)s" -#: utils/tables.py:378 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" msgstr "Поражения от %(team)s" -#: utils/tables.py:380 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" msgstr "Нет результатов в дебатах против %(team)s" -#: utils/tables.py:405 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" msgstr "Общий спикерский балл %s" -#: utils/tables.py:412 +#: utils/tables.py msgid "Teams in debate:" msgstr "Команды в дебатах:" -#: utils/tables.py:415 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "%(team)s (%(side)s)" -#: utils/tables.py:416 utils/tables.py:420 utils/tables.py:446 -#: utils/tables.py:618 +#: utils/tables.py msgid "??" msgstr "??" -#: utils/tables.py:434 +#: utils/tables.py msgid "advancing" msgstr "проходящая дальше" -#: utils/tables.py:435 +#: utils/tables.py msgid "Advancing" msgstr "Проходящая дальше" -#: utils/tables.py:437 +#: utils/tables.py msgid "eliminated" msgstr "не прошла" -#: utils/tables.py:438 +#: utils/tables.py msgid "Eliminated" msgstr "Не прошедшая" -#: utils/tables.py:441 utils/tables.py:451 +#: utils/tables.py msgid "No result for debate" msgstr "Нет результатов этих дебатов" -#: utils/tables.py:448 +#: utils/tables.py #, python-format msgid "Placed %(place)s" msgstr "Заняли %(place)s" -#: utils/tables.py:463 -msgid "Tournament" -msgstr "Турнир" - -#: utils/tables.py:472 -msgid "Round" -msgstr "Раунд" - -#: utils/tables.py:495 utils/tables.py:672 +#: utils/tables.py msgid "Name" msgstr "Название" -#: utils/tables.py:501 utils/tables.py:650 +#: utils/tables.py msgid "Institution" msgstr "Клуб" -#: utils/tables.py:507 +#: utils/tables.py msgid "Member of the Adjudication Core" msgstr "Член судейского пула" -#: utils/tables.py:514 +#: utils/tables.py msgid "Independent Adjudicator" msgstr "Независимый судья" -#: utils/tables.py:522 +#: utils/tables.py msgid "Always Trainee" msgstr "Всегда винг без права голоса" -#: utils/tables.py:557 +#: utils/tables.py msgid "in minority" msgstr "в меньшинстве" -#: utils/tables.py:590 +#: utils/tables.py msgid "Debate Adjudicators" msgstr "Судьи дебатов" -#: utils/tables.py:621 -msgid "Motion" -msgstr "Тема" - -#: utils/tables.py:636 -msgid "Team" -msgstr "Команда" - -#: utils/tables.py:641 utils/tables.py:694 +#: utils/tables.py msgid "Categories" msgstr "Категории" -#: utils/tables.py:692 +#: utils/tables.py msgid "Category" msgstr "Категория" -#: utils/tables.py:719 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." msgstr "Эта аудитория %(predicate)s." -#: utils/tables.py:721 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." msgstr "Эта аудитория %(predicates)s, и %(last_predicate)s." -#: utils/tables.py:736 +#: utils/tables.py msgid "Room" msgstr "Аудитория" -#: utils/tables.py:754 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" @@ -251,73 +262,69 @@ msgstr[1] "Команды играли вместе %(count)d раз" msgstr[2] "Команды играли вместе %(count)d раз" msgstr[3] "Команды играли вместе %(count)d раз" -#: utils/tables.py:760 +#: utils/tables.py msgid "Teams are from the same institution" msgstr "Команды из одного клуба" -#: utils/tables.py:766 +#: utils/tables.py msgid "Conflicts/Flags" msgstr "Конфликты/отметки" -#: utils/tables.py:819 +#: utils/tables.py msgid "The confirmed ballot" msgstr "" -#: utils/tables.py:824 utils/tables.py:849 +#: utils/tables.py msgid "No ballot" msgstr "Нет бэллота" -#: utils/tables.py:826 utils/tables.py:851 +#: utils/tables.py msgid "No scores" msgstr "" -#: utils/tables.py:829 utils/tables.py:854 utils/tables.py:866 +#: utils/tables.py msgid "View Ballot" msgstr "Просмотреть бэллот" -#: utils/tables.py:836 +#: utils/tables.py msgid "The ballot you submitted" msgstr "Отправленный вами бэллот" -#: utils/tables.py:840 +#: utils/tables.py msgid "View/Edit Ballot" msgstr "Смотреть/изменить бэллот" -#: utils/tables.py:874 +#: utils/tables.py msgid "Result" msgstr "Результат" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:880 +#: utils/tables.py msgid "TBC" msgstr "TBC" -#: utils/tables.py:881 -msgid "Side" -msgstr "Сторона" - -#: utils/tables.py:919 -msgid "Team iron-manned this round and the last." -msgstr "Команда играла этот раунд и последний раунд айронменом." +#: utils/tables.py +msgid "Team iron-personed this round and the last." +msgstr "" -#: utils/tables.py:922 -msgid "Team iron-manned this round." -msgstr "Команда играла этот раунд айронменом." +#: utils/tables.py +msgid "Team iron-personed this round." +msgstr "" -#: utils/tables.py:925 -msgid "Team iron-manned last round." -msgstr "Команда играла последний раунд айронменом." +#: utils/tables.py +msgid "Team iron-personed last round." +msgstr "" -#: utils/tables.py:942 utils/tables.py:943 +#: utils/tables.py #, python-format msgid "Team %(num)d" msgstr "Команда %(num)d" -#: utils/tables.py:950 +#: utils/tables.py msgid "Postpone" msgstr "" -#: utils/views.py:38 +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." msgstr "Упс! Вы не должны вводить этот URL в ваш браузер." diff --git a/tabbycat/venues/locale/ru/LC_MESSAGES/django.po b/tabbycat/venues/locale/ru/LC_MESSAGES/django.po index 2482bcfb000..49cfefcc312 100644 --- a/tabbycat/venues/locale/ru/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-05 15:26-0300\n" -"PO-Revision-Date: 2020-07-10 17:00\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" "Last-Translator: philip_tc\n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -18,178 +18,176 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 +#: venues/apps.py msgid "Rooms" msgstr "Аудитории" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." msgstr "Сетка уже опубликована, отмените публикацию для распределения аудиторий." -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." msgstr "Сетка не подтверждена, подтвердите сетку для того, чтобы аудитории были распределены." -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." msgstr "Аудитории распределены." -#: venues/models.py:9 venues/models.py:66 +#: venues/models.py msgid "name" msgstr "название" -#: venues/models.py:11 venues/models.py:120 +#: venues/models.py msgid "priority" msgstr "приоритет" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" msgstr "При распределении аудиторий для дебатов боле предпочтительны будут аудитории с более высоким приоритетом" -#: venues/models.py:15 venues/models.py:78 +#: venues/models.py msgid "tournament" msgstr "турнир" -#: venues/models.py:16 +#: venues/models.py msgid "URL" msgstr "URL" -#: venues/models.py:17 +#: venues/models.py msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" msgstr "" -#: venues/models.py:24 +#: venues/models.py msgid "room" msgstr "аудитория" -#: venues/models.py:25 venues/models.py:76 +#: venues/models.py msgid "rooms" msgstr "аудитории" -#: venues/models.py:61 +#: venues/models.py msgid "Don't display in room name" msgstr "Не показывать в названии аудитории" -#: venues/models.py:62 +#: venues/models.py msgid "Display as prefix" msgstr "Отображать как префикс" -#: venues/models.py:63 +#: venues/models.py msgid "Display as suffix" msgstr "Отображать как суффикс" -#: venues/models.py:67 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." msgstr "Название категории, например, \"Фиолетовый\", \"Быстрый доступ\", \"Близко к аудитории тэбмастеров\". Это имя отображается, когда категория префиксована или суффиксована к названии аудитории в сетке, например, \"Фиолетовый - G05\"." -#: venues/models.py:71 +#: venues/models.py msgid "description" msgstr "описание" -#: venues/models.py:72 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." msgstr "Описание, являющееся частью предложения, например, \"имеет доступ для инвалидных колясок\", \"расположена близко к аудитории общего сбора\". Это описание идет за \"Эта аудитория...\" в подсказках, например \"Эта аудитория расположена близко к аудитории общего сбора\"." -#: venues/models.py:82 +#: venues/models.py msgid "display in room name" msgstr "показывать в названии аудитории" -#: venues/models.py:83 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" msgstr "Префикс: \"Фиолетовый - G05\", Суффикс: \"G05 - фиолетовый\"" -#: venues/models.py:85 +#: venues/models.py msgid "display in public tooltip" msgstr "отображать в общедоступных подсказках" -#: venues/models.py:86 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." msgstr "Отображает описание в подсказке для аудитории на публичных страницах. Описание, если оно не является пустым, всегда будет отображаться на страницах администратора." -#: venues/models.py:90 +#: venues/models.py msgid "room category" msgstr "категории аудиторий" -#: venues/models.py:91 +#: venues/models.py msgid "room categories" msgstr "категории аудиторий" -#: venues/models.py:119 +#: venues/models.py msgid "category" msgstr "категория" -#: venues/models.py:123 +#: venues/models.py msgid "subject content type" msgstr "тип субъективного контента" -#: venues/models.py:126 +#: venues/models.py msgid "subject ID" msgstr "iD субъекта" -#: venues/models.py:132 +#: venues/models.py msgid "room constraint" msgstr "ограничения аудиторий" -#: venues/models.py:133 +#: venues/models.py msgid "room constraints" msgstr "ограничения аудиторий" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" msgstr "Категории аудиторий" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." msgstr "Категории аудиторий позволяют вам группировать аудитории в \"зоны\" для того, чтобы отобразить их в сетке и упростить участникам навигацию; и/или указать ограничения на распределения аудиторий, которые потребуют, чтобы команды, судьи или институты были распределены в аудитории определенной категории." -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." msgstr "Если вы хотите удалить категории аудиторий, используйте область Редактировать базу данных." -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" msgstr "Сохранить категории аудиторий" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" msgstr "Ограничения аудиторий" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." msgstr "Ограничения аудиторий указывают распределителю аудиторий на то, что стоит попытаться расположить конкретную команду или судью или все команды (но не судей) из определенного института в аудитории определенной категории. Поле \"приоритет\" позволяет устранить конфликтующие ограничения: первичным будет ограничение с более высоким приоритетом. Вы также можете использовать поле приоритета, чтобы уточнить менее приоритетные ограничения, которые применяются когда более приоритетные ограничения не могут быть применены." -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" msgstr "Сохранить ограничения аудиторий" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" msgstr "Ограничение аудиторий %(name)s подходит под %(category)s)" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" msgstr "Аудитория не подходит ни под одно из ограничений из %(name)s" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" msgstr "Ограничение аудиторий для %(team)s соответсвуте (%(category)s через институт %(institution)s)" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" msgstr "Место не подходит ни под одно ограничение института %(institution)s (%(team)s)" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" msgstr "" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" @@ -198,26 +196,26 @@ msgstr[1] "Сохранены категории аудиторий %(list)s" msgstr[2] "Сохранены категории аудиторий %(list)s" msgstr[3] "Сохранены категории аудиторий %(list)s" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." msgstr "В категории аудиторий не было внесено никаких изменений." -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "%s (Судья)" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" msgstr "%s (Команда)" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" msgstr "%s (Институт)" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." From 09a1c8254ee15c302c49796a9cb7496c17bb588e Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Sun, 5 Feb 2023 11:56:19 +1100 Subject: [PATCH 220/255] New translations django.po (Spanish) --- .../actionlog/locale/es/LC_MESSAGES/django.po | 156 ++-- .../locale/es/LC_MESSAGES/django.po | 199 +++-- .../locale/es/LC_MESSAGES/django.po | 450 +++++----- .../locale/es/LC_MESSAGES/django.po | 164 ++-- .../breakqual/locale/es/LC_MESSAGES/django.po | 250 +++--- tabbycat/draw/locale/es/LC_MESSAGES/django.po | 606 +++++++------ .../importer/locale/es/LC_MESSAGES/django.po | 223 +++-- tabbycat/locale/es/LC_MESSAGES/django.po | 476 +++++----- .../motions/locale/es/LC_MESSAGES/django.po | 193 +++-- .../locale/es/LC_MESSAGES/django.po | 196 +++-- .../options/locale/es/LC_MESSAGES/django.po | 813 +++++++++--------- .../locale/es/LC_MESSAGES/django.po | 495 ++++++----- .../printing/locale/es/LC_MESSAGES/django.po | 61 +- .../locale/es/LC_MESSAGES/django.po | 85 +- .../results/locale/es/LC_MESSAGES/django.po | 538 ++++++------ .../standings/locale/es/LC_MESSAGES/django.po | 311 ++++--- .../locale/es/LC_MESSAGES/django.po | 514 ++++++----- .../utils/locale/es/LC_MESSAGES/django.po | 189 ++-- .../venues/locale/es/LC_MESSAGES/django.po | 100 ++- 19 files changed, 2977 insertions(+), 3042 deletions(-) diff --git a/tabbycat/actionlog/locale/es/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/es/LC_MESSAGES/django.po index b5a7f749771..7c03015a86c 100644 --- a/tabbycat/actionlog/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:08\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -17,307 +17,307 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" msgstr "Historial de cambios" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" msgstr "Ha descartado un conjunto de ballots" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" msgstr "Ha revisado un conjunto de ballots" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" msgstr "Ha creado un conjunto de ballots" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" msgstr "Ha editado un conjunto de ballots" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" msgstr "Ha confirmado un conjunto de ballots" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" msgstr "Ha entregado balotas desde el formulario publico" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" msgstr "Ha entregado feedback desde el formulario publico" -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" msgstr "Ha guardado feedback" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" msgstr "" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" msgstr "Ha puesto un puntaje al juez" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" msgstr "Asignación de jueces guardada" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" msgstr "Ha asignado a los jueces automáticamente" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" msgstr "Ha guardado la edición manual de una sala" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" msgstr "Ha asignado las salas automáticamente" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" msgstr "Ha editado las categorías de sala" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" msgstr "Editar las restricciones de sala" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" msgstr "Ha creado el cuadro" -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" msgstr "Ha confirmado el cuadro" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" msgstr "Ha regenerado el cuadro" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" msgstr "Ha publicado el cuadro" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" msgstr "Ha despublicado el cuadro" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" msgstr "Ha guardado la edición manual de un enfrentamiento" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" msgstr "Ha guardado el estatus de los lados de un enfrentamiento" -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "Ha guardado las divisiones" -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" msgstr "Ha añadido/editado la moción" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" msgstr "Ha publicado las mociones" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" msgstr "Ha despublicado las mociones" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" msgstr "Importancia del debate priorizada automáticamente" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" msgstr "Ha editado la importancia del debate" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" msgstr "Ha cambiado el estatus de break del juez" -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" msgstr "Ha editado la elegibilidad para el break" -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" msgstr "Ha editados las categorías del break" -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" msgstr "Ha generado el break de equipos para todas las categorías" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" msgstr "Ha editado los comentarios del equipo que pasa el break y ha actualizado el break de todos los equipos" -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" msgstr "Ha editado los comentarios del equipo que pasa el break y ha actualizado el break de este equipo" -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" msgstr "Ha editado los comentarios del equipo que pasa el break" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" msgstr "Ha configurado el tiempo de inicio" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" msgstr "Ha avanzado la ronda presente a" -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" msgstr "" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" msgstr "Ha editado la disponibilidad de los equipos" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" msgstr "Ha editado la disponibilidad de los jueces" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" msgstr "Ha editado la disponibilidad de salas" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" msgstr "Ha editado las opciones del torneo" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" msgstr "Ha editado la elegibilidad para las categorías de orador" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" msgstr "Ha editado las categorías de orador" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" msgstr "Importar las instituciones usando el importador simple" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" msgstr "Importar salas usando el importador simple" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" msgstr "Importar equipos usando el importador simple" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" msgstr "Importar jueces usando el importador simple" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" msgstr "Actualizar la calificación de jueces en masa" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" msgstr "Editar los conflictos juez-equipo" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" msgstr "Editar conflictos juez-juez" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" msgstr "Editar conflictos juez-institución" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" msgstr "" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" msgstr "Generar identificaciones para el check-in de los oradores" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" msgstr "Generar identificaciones para el check-in de los jueces" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" msgstr "Generar identificaciones para el check-in de las salas" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" msgstr "" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" msgstr "" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" msgstr "" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" msgstr "" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" msgstr "" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" msgstr "" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" msgstr "tipo" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" msgstr "marca de tiempo" -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "usuario" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "dirección IP" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "torneo" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "ronda" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" msgstr "tipo de contenido" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" msgstr "ID del objeto" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" msgstr "historial de cambios" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" msgstr "entradas en el historial de cambios" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." msgstr "Todos los registros requieren al menos uno de un usuario y una dirección IP." -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" msgstr "anónimo" diff --git a/tabbycat/adjallocation/locale/es/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/es/LC_MESSAGES/django.po index 7fa6fc735bb..d3e8366fef1 100644 --- a/tabbycat/adjallocation/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:08\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -17,436 +17,435 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." msgstr "No hay jueces disponibles. Asegúrese de que haya jueces que se hayan marcado como disponibles para esta ronda antes de la asignación automática." -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." msgstr[0] "" msgstr[1] "" -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." msgstr[0] "" msgstr[1] "" -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." msgstr "" -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" msgstr "No hay debates para esta ronda. Tal vez aún no haz creado el enfrentamiento de equipos aún." -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." msgstr "" -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." msgstr "" -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." msgstr "" -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" msgstr "Asignación de Jueces" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." msgstr "El cuadro ya fue publicado, despubliquelo para rehacer la asignación automática." -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." msgstr "El cuadro no ha sido confirmado, confirma el cuadro para hacer la asignación automática." -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." msgstr "" -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." msgstr "" -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" msgstr[0] "" msgstr[1] "" -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." msgstr "" -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." msgstr "" -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" msgstr[0] "" msgstr[1] "" -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." msgstr "" -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." msgstr "" -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." msgstr "" -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." msgstr "" -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." msgstr "" -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." msgstr "" -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." msgstr "" -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." msgstr "" -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" msgstr "principal" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" msgstr "panelista" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" msgstr "sombra" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "juez" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" msgstr "tipo" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" msgstr "disponible?" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" msgstr "juez del debate" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" msgstr "jueces de los debates" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "equipo" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" msgstr "conflicto juez-equipo" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" msgstr "conflictos juez-equipo" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "juez 1" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "juez 2" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" msgstr "conflicto juez-juez" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" msgstr "conflictos juez-juez" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" msgstr "institución" -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" msgstr "conflicto juez-institución" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" msgstr "conflictos juez-institución" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" msgstr "" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" msgstr "" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "ronda" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" msgstr "importancia" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" msgstr "" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" msgstr "" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" msgstr "" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" msgstr "" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" msgstr "ranking de sala" -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" msgstr "" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" msgstr "" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" msgstr "" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" msgstr "" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" msgstr "" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" msgstr "" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" msgstr "" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" msgstr "" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." msgstr "" -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" msgstr "" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." msgstr "" -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." msgstr "" -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" msgstr "" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" msgstr "" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" msgstr "" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" msgstr "" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" msgstr "" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" msgstr "" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" msgstr "" -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" msgstr "" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" msgstr "" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" msgstr "" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" msgstr "Incompatibilidad juez-equipo" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" msgstr "Guardar incompatibilidad juez-equipo" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." msgstr[0] "Se guardó %(count)dincompatibilidad juez-equipo." msgstr[1] "Se guardaron %(count)dincompatibilidades juez-equipo" -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." msgstr[0] "Se eliminó %(count)d incompatibilidad juez-equipo." msgstr[1] "Se eliminaron %(count)dincompatibilidades juez-equipo." -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." msgstr "No se hicieron cambios en las incompatibilidades juez-equipo." -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" msgstr "Incompatibilidades Juez-Juez" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" msgstr "Guardar incompatibilidades Juez-Juez" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." msgstr[0] "Se guardó %(count)d incompatibilidad juez-juez." msgstr[1] "Se guardaron %(count)d incompatibilidades juez-juez." -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." msgstr[0] "Se eliminó %(count)d incompatibilidad juez-juez." msgstr[1] "Se eliminaron %(count)d incompatibilidades juez-juez." -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." msgstr "No se hicieron cambios en las incompatibilidades juez-juez." -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" msgstr "Incompatibilidades Juez-Institución" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" msgstr "Guardar incompatibilidades Juez-Institución " -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." msgstr[0] "Guardar %(count)d incompatibilidad juez-institución." msgstr[1] "Guardar %(count)d incompatibilidades juez-institución" -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." msgstr[0] "Eliminar %(count)dincompatibilidad juez-institución" msgstr[1] "Eliminar %(count)dincompatibilidades juez-institución" -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." msgstr "No se hizo ningún cambio en las incompatibilidades juez-institución" -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" msgstr "" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." msgstr[0] "" msgstr[1] "" -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." msgstr "" diff --git a/tabbycat/adjfeedback/locale/es/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/es/LC_MESSAGES/django.po index 6b67893bf53..b05d48669e7 100644 --- a/tabbycat/adjfeedback/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:50\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -17,951 +17,947 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:44 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" msgstr "" -#: adjfeedback/admin.py:73 adjfeedback/admin.py:139 +#: adjfeedback/admin.py msgid "target" msgstr "" -#: adjfeedback/admin.py:74 adjfeedback/admin.py:140 adjfeedback/models.py:236 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" msgstr "juez fuente" -#: adjfeedback/admin.py:75 adjfeedback/admin.py:141 adjfeedback/models.py:238 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" msgstr "equipo fuente" -#: adjfeedback/admin.py:91 -#, python-format -msgid "%(timestamp)s (version %(version)s)" -msgstr "" - -#: adjfeedback/admin.py:96 +#: adjfeedback/admin.py msgid "Target" msgstr "" -#: adjfeedback/admin.py:97 adjfeedback/admin.py:162 +#: adjfeedback/admin.py msgid "Source" msgstr "Fuente" -#: adjfeedback/admin.py:98 +#: adjfeedback/admin.py msgid "Feedback timestamp and version" msgstr "" -#: adjfeedback/admin.py:180 +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgstr[0] " 1 envío de retroalimentación fue marcado como confirmado. Note que esto puede haber causado que otros envíos de retroalimentación se marquen como no confirmados." msgstr[1] "%(count)d envíos de retroalimentación fueron marcados como confirmados. Note que esto puede haber causado que otros envíos de retroalimentación se marquen como no confirmados." -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." msgstr[0] "1 envío de retroalimentación no fue marcado como confirmado, probablemente porque otros envíos de retroalimentación que entran en conflicto con este también fueron marcados como confirmados." msgstr[1] "%(count)d envíos de retroalimentación no fueron marcados como confirmados, probablemente porque otros envíos de retroalimentación que entran en conflicto con ellos también fueron marcados como confirmados." -#: adjfeedback/admin.py:205 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." msgstr[0] "1 envío de retroalimentación fue marcado como no confirmado." msgstr[1] "%(count)d envíos de retroalimentación fueron marcados como no confirmados." -#: adjfeedback/admin.py:215 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." msgstr[0] "" msgstr[1] "" -#: adjfeedback/admin.py:225 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." msgstr[0] "" msgstr[1] "" -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" msgstr "Retroalimentación del Juez" -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "chair" msgstr "principal" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "solo" msgstr "" -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "panellist" msgstr "panelista" -#: adjfeedback/forms.py:29 +#: adjfeedback/forms.py msgid "trainee" msgstr "sombra" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:57 +#: adjfeedback/forms.py msgid "Yes" msgstr "Sí" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:59 +#: adjfeedback/forms.py msgid "No" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:74 adjfeedback/forms.py:83 +#: adjfeedback/forms.py msgid "This field is required." msgstr "Este campo es necesario." -#: adjfeedback/forms.py:164 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" msgstr "Puntaje general (%(min)d=peor;%(max)d=mejor)*" -#: adjfeedback/forms.py:176 +#: adjfeedback/forms.py msgid "Ignored" msgstr "" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:228 adjfeedback/forms.py:291 +#: adjfeedback/forms.py msgid "Submitted - " msgstr "" #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:229 adjfeedback/forms.py:296 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" msgstr "%(name)s (%(adjpos)s)" -#: adjfeedback/forms.py:252 adjfeedback/forms.py:326 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "-- Jueces --" -#: adjfeedback/forms.py:269 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" msgstr "Juez, esta retroalimentación es sobre (?)" -#: adjfeedback/forms.py:293 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "" -#: adjfeedback/forms.py:299 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" msgstr "%(name)s(el juez principal dio retroalimentación oral)" -#: adjfeedback/forms.py:301 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" msgstr "" -#: adjfeedback/forms.py:392 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" msgstr "" -#: adjfeedback/forms.py:397 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" msgstr "" -#: adjfeedback/forms.py:410 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." msgstr "" -#: adjfeedback/forms.py:416 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" msgstr "" -#: adjfeedback/forms.py:424 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" msgstr "" -#: adjfeedback/forms.py:439 +#: adjfeedback/forms.py msgid "There were no scores to import." msgstr "" -#: adjfeedback/models.py:13 adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator" msgstr "juez" -#: adjfeedback/models.py:16 +#: adjfeedback/models.py msgid "round" msgstr "ronda" -#: adjfeedback/models.py:17 adjfeedback/models.py:232 +#: adjfeedback/models.py msgid "score" msgstr "puntaje" -#: adjfeedback/models.py:18 +#: adjfeedback/models.py msgid "timestamp" msgstr "marca de tiempo (?)" -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score history" msgstr "" -#: adjfeedback/models.py:22 +#: adjfeedback/models.py msgid "adjudicator base score histories" msgstr "" -#: adjfeedback/models.py:30 +#: adjfeedback/models.py msgid "question" msgstr "pregunta" -#: adjfeedback/models.py:32 +#: adjfeedback/models.py msgid "feedback" msgstr "retroalimentación" -#: adjfeedback/models.py:45 adjfeedback/models.py:55 adjfeedback/models.py:65 -#: adjfeedback/models.py:74 +#: adjfeedback/models.py msgid "answer" msgstr "respuesta" -#: adjfeedback/models.py:48 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" msgstr "retroalimentación del juez es respuesta boolean" -#: adjfeedback/models.py:49 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" msgstr "" -#: adjfeedback/models.py:58 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" msgstr "" -#: adjfeedback/models.py:59 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" msgstr "" -#: adjfeedback/models.py:68 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" msgstr "" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" msgstr "" -#: adjfeedback/models.py:77 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" msgstr "" -#: adjfeedback/models.py:78 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" msgstr "" -#: adjfeedback/models.py:86 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answer" msgstr "" -#: adjfeedback/models.py:87 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answers" msgstr "" -#: adjfeedback/models.py:106 +#: adjfeedback/models.py msgid "checkbox" msgstr "casilla de marcar" -#: adjfeedback/models.py:107 +#: adjfeedback/models.py msgid "yes/no (dropdown)" msgstr "si/no (desplegable)" -#: adjfeedback/models.py:108 +#: adjfeedback/models.py msgid "integer (textbox)" msgstr "entero (caja de texto)" -#: adjfeedback/models.py:109 +#: adjfeedback/models.py msgid "integer scale" msgstr "escala de enteros" -#: adjfeedback/models.py:110 +#: adjfeedback/models.py msgid "float" msgstr "" -#: adjfeedback/models.py:111 adjfeedback/models.py:145 +#: adjfeedback/models.py msgid "text" msgstr "texto" -#: adjfeedback/models.py:112 +#: adjfeedback/models.py msgid "long text" msgstr "texto largo" -#: adjfeedback/models.py:113 +#: adjfeedback/models.py msgid "select one" msgstr "escoja uno" -#: adjfeedback/models.py:114 +#: adjfeedback/models.py msgid "select multiple" msgstr "escoja varios" -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "tournament" msgstr "torneo" -#: adjfeedback/models.py:143 +#: adjfeedback/models.py msgid "sequence number" msgstr "número de secuencia" -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" msgstr "La pregunta mostrada a los participantes, ej., \"Está de acuerdo con la decisión?\"" -#: adjfeedback/models.py:148 +#: adjfeedback/models.py msgid "name" msgstr "nombre" -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" msgstr "Un nombre corto para la pregunta, ej., \"acuerdo con decisión\"" -#: adjfeedback/models.py:151 +#: adjfeedback/models.py msgid "reference" msgstr "referencia" -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" msgstr "Referencia compatible con el código, ej., \"acuerdo_con_decision\"" -#: adjfeedback/models.py:155 +#: adjfeedback/models.py msgid "from adjudicator" msgstr "del juez" -#: adjfeedback/models.py:156 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" msgstr "A los jueces debería preguntárseles esto (sobre otros jueces)" -#: adjfeedback/models.py:158 +#: adjfeedback/models.py msgid "from team" msgstr "del equipo" -#: adjfeedback/models.py:159 +#: adjfeedback/models.py msgid "Teams should be asked this question" msgstr "A los equipos debería preguntárseles esto" -#: adjfeedback/models.py:162 +#: adjfeedback/models.py msgid "answer type" msgstr "tipo de respuesta" -#: adjfeedback/models.py:164 +#: adjfeedback/models.py msgid "required" msgstr "necesario" -#: adjfeedback/models.py:165 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" msgstr "" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "minimum value" msgstr "valor mínimo" -#: adjfeedback/models.py:168 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "Valor mínimo permitido para campos numéricos (ignorar para campos de texto o boleanos)" -#: adjfeedback/models.py:170 +#: adjfeedback/models.py msgid "maximum value" msgstr "valor máximo" -#: adjfeedback/models.py:171 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "Valor máximo permitido para campos numéricos (ignorar para campos de texto o boleanos)" -#: adjfeedback/models.py:176 +#: adjfeedback/models.py msgid "choices" msgstr "elecciones" -#: adjfeedback/models.py:177 +#: adjfeedback/models.py msgid "Permissible choices for select one/multiple fields (ignored for other fields)" msgstr "" -#: adjfeedback/models.py:182 +#: adjfeedback/models.py msgid "adjudicator feedback question" msgstr "pregunta de retroalimentación del juez" -#: adjfeedback/models.py:183 +#: adjfeedback/models.py msgid "adjudicator feedback questions" msgstr "preguntas de retroalimentación del juez" -#: adjfeedback/models.py:241 adjfeedback/views.py:768 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" msgstr "" -#: adjfeedback/models.py:242 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" msgstr "" -#: adjfeedback/models.py:246 +#: adjfeedback/models.py msgid "adjudicator feedback" msgstr "retroalimentación del juez" -#: adjfeedback/models.py:247 +#: adjfeedback/models.py msgid "adjudicator feedbacks" msgstr "retroalimentaciones del juez" -#: adjfeedback/models.py:307 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." msgstr "Ni el juez fuente ni el equpo fuente fueron especificados. " -#: adjfeedback/models.py:310 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." msgstr "Hay un juez fuente y un equipo fuente." -#: adjfeedback/models.py:312 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" msgstr "" -#: adjfeedback/models.py:314 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." msgstr "El juez no vio este debate." -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" msgstr "" -#: adjfeedback/tables.py:35 +#: adjfeedback/tables.py msgid "N/A" msgstr "" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py msgid "Current weighted score" msgstr "" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." msgstr "" -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" msgstr "" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" msgstr "" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" msgstr "" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:84 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" msgstr "" -#: adjfeedback/tables.py:93 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." msgstr "" -#: adjfeedback/tables.py:97 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" msgstr "" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Feedback Per Round" msgstr "" -#: adjfeedback/tables.py:107 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" msgstr "" -#: adjfeedback/tables.py:125 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" msgstr[0] "" msgstr[1] "" -#: adjfeedback/tables.py:148 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" msgstr "" -#: adjfeedback/tables.py:172 +#: adjfeedback/tables.py msgid "View Missing Feedback" msgstr "" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" msgstr "" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" msgstr "" -#: adjfeedback/templates/enter_feedback.html:9 -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format msgid "Add Feedback from %(name)s" msgstr "" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" msgstr "" -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" msgstr "" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." msgstr "" -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." msgstr "" -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." msgstr "Hay algunos problemas con el envío de esta retroalimentación. Por favor revisela y corrijalos." -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" msgstr "" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" msgstr "" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" msgstr "" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" msgstr "" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" msgstr "" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" msgstr "" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" msgstr "" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" msgstr "" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." msgstr "%(source_name)sno ha enviado ninguna retroalimentación aún." -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." msgstr "%(source_name)s ha recibido ninguna retroalimentación aún." -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." msgstr "" -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." msgstr "" -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." msgstr "" -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "On %(adjudicator)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" +msgid "Received as %(as_type)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" msgstr "" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" msgstr "" -#: adjfeedback/templates/feedback_card.html:88 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:93 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" msgstr "" -#: adjfeedback/templates/feedback_card.html:103 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." msgstr "" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" msgstr "" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" msgstr "" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" msgstr "" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" msgstr "" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." msgstr "La configuración de retroalimentación actual permite y espera solo que jueces principales envíen retroalimentación (sobre sus panelistas y trainees)" -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." msgstr "" -#: adjfeedback/templates/feedback_overview.html:18 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." msgstr "" -#: adjfeedback/templates/feedback_overview.html:22 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." msgstr "La configuración de retroalimentación actual permite y espera que todos los jueces (incluyendo trainees) envíen retroalimentación sobre todos los miembros del panel (incluyendo trainees)." -#: adjfeedback/templates/feedback_overview.html:30 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgstr[0] "Hay %(nadjs_outside_range)s juez con un puntaje fuera del rango permitido para jueces, el cual actualmente está entre %(min_score)s y %(max_score)s. Esto puede causar que la ubicación automática de jueces se comporte de formas inesperadas. Si quisiera usar un rango de puntajes más amplio, puede configurarlo en la sección de configuración de retroalimentación." msgstr[1] "Hay %(nadjs_outside_range)s jueces con puntajes fuera del rango permitido para jueces, el cual actualmente está entre %(min_score)s y %(max_score)s. Esto puede causar que la ubicación automática de jueces se comporte de formas inesperadas. Si quisiera usar un rango de puntajes más amplio, puede configurarlo en la sección de configuración de retroalimentación." -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgstr[0] "%(count)s juez tiene, actualmente, un puntaje igual o mayor a %(min)s y menor a %(max)s. Eso es %(percent)s%% del grupo de jueces." msgstr[1] "%(count)s jueces tienen, actualmente, un puntaje igual o mayor a %(min)s y menor a %(max)s. Eso es %(percent)s%% del grupo de jueces." -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" msgstr "Distribución del Puntaje (el rango es %(min_score)s–%(max_score)s)" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" msgstr "Retroalimentación" -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." msgstr "" -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" msgstr "Razón de Puntaje" -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." msgstr[0] "Hay %(c_chairs)sdebate por ronda, entonces se necesita %(c_chairs)s juez principal." msgstr[1] "Hay %(c_chairs)s debates por ronda, entonces se necesitan %(c_chairs)s jueces principales" -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" msgstr[0] "%(c_chairs)s juez principal" msgstr[1] "%(c_chairs)s jueces principales" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." msgstr "Todos los jueces con un puntaje suficientemente alto para votar, pero que no se asignaron como jueces principales, son asignados como panelistas por el sistema de auto asignación." -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" msgstr[0] "%(c_panellists)s panelista" msgstr[1] "%(c_panellists)s panelistas" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." msgstr "Los jueces son asignados como trainees por el sistema de auto asignación si su puntaje es menor al 'puntaje mínimo para votar' (actualmente %(min_voting)s) configurado en las configuraciones de las Reglas de Enfrentamiento de este torneo." -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" msgstr[0] "" msgstr[1] "" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" msgstr "Distribuciones de Auto asignación (%(min_voting_score)s+ para votar)" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" msgstr "" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." msgstr "" -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" msgstr "" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" msgstr "" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" msgstr "" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" msgstr "" -#: adjfeedback/views.py:118 +#: adjfeedback/views.py msgid "Feedback Overview" msgstr "" -#: adjfeedback/views.py:142 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" msgstr "" -#: adjfeedback/views.py:153 adjfeedback/views.py:177 adjfeedback/views.py:192 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" msgstr[0] "%(count)d retroalimentación" msgstr[1] "%(count)d retroalimentaciones" -#: adjfeedback/views.py:156 adjfeedback/views.py:182 adjfeedback/views.py:197 +#: adjfeedback/views.py msgid "Feedbacks" msgstr "" -#: adjfeedback/views.py:163 +#: adjfeedback/views.py msgid "Find Feedback" msgstr "" -#: adjfeedback/views.py:171 adjfeedback/views.py:710 +#: adjfeedback/views.py msgid "From Teams" msgstr "" -#: adjfeedback/views.py:186 adjfeedback/views.py:704 +#: adjfeedback/views.py msgid "From Adjudicators" msgstr "" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "Latest Feedback" msgstr "" -#: adjfeedback/views.py:272 +#: adjfeedback/views.py msgid "(30 most recent)" msgstr "" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "Only Comments" msgstr "" -#: adjfeedback/views.py:283 +#: adjfeedback/views.py msgid "(250 most recent)" msgstr "" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "Important Feedback" msgstr "" -#: adjfeedback/views.py:295 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" msgstr "" -#: adjfeedback/views.py:362 +#: adjfeedback/views.py msgid "A Team" msgstr "" -#: adjfeedback/views.py:367 +#: adjfeedback/views.py msgid "Team" msgstr "" -#: adjfeedback/views.py:374 adjfeedback/views.py:391 +#: adjfeedback/views.py msgid "Institution" msgstr "" -#: adjfeedback/views.py:377 +#: adjfeedback/views.py msgid "An Adjudicator" msgstr "" -#: adjfeedback/views.py:384 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "" -#: adjfeedback/views.py:511 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." msgstr "" -#: adjfeedback/views.py:541 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." msgstr "" -#: adjfeedback/views.py:625 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" msgstr "" -#: adjfeedback/views.py:648 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." msgstr "" -#: adjfeedback/views.py:675 +#: adjfeedback/views.py msgid "Feedback Progress" msgstr "" -#: adjfeedback/views.py:696 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" msgstr[0] "" msgstr[1] "" -#: adjfeedback/views.py:741 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." msgstr "" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "confirmed" msgstr "confirmado " -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "un-confirmed" msgstr "" -#: adjfeedback/views.py:768 +#: adjfeedback/views.py msgid "un-ignored" msgstr "" -#: adjfeedback/views.py:804 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." diff --git a/tabbycat/availability/locale/es/LC_MESSAGES/django.po b/tabbycat/availability/locale/es/LC_MESSAGES/django.po index d3bc4edc253..e971fe48648 100644 --- a/tabbycat/availability/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:07\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -17,298 +17,290 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" msgstr "Disponibilidad" -#: availability/models.py:15 +#: availability/models.py msgid "content type" msgstr "tipo de contenido" -#: availability/models.py:16 +#: availability/models.py msgid "object id" msgstr "id del objeto" -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "ronda" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" msgstr "disponibilidad de la ronda" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" msgstr "disponibilidad de las rondas" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" msgstr "" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" msgstr "" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" msgstr "" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" msgstr "Ver Cuadro" -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" msgstr "" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" msgstr "Generar Cuadro" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." msgstr "" -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." msgstr "" -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." msgstr "" -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." msgstr "" -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgstr[0] "Un debate de %(prev_round)s no tiene la ballot completa. Esto puede llevar a un cuadro que falle o sea incorrecto, dependiendo de tus reglas del cuadro. Meter resultados de %(prev_round)s. " msgstr[1] "%(previous_unconfirmed)s debates de %(prev_round)s no tienen las ballots completan. Esto puede llevar a un cuadro que falle o que sea incorrecto, dependiendo de tus reglas de cuadro. Meter los resultados de %(prev_round)s. " -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " msgstr "" -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." msgstr "Esta es la primera ronda, pero el tipo de cuadro es %(draw_type)s. Era tut intención que fuera en cambio aleatorio? Puedes editar el tipo de cuadro de esta ronda en la parte de Editar la base de datos." -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." msgstr "Esta es una ronda eliminatoria, pero no tiene una categoría de break. Las rondas eliminatorias se deben relacionar con una categoría de break. Por favor configura la categoría de break de esta ronda en la parte de Editar la base de datos." -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." msgstr "Esta es una ronda eliminatoria, pero el tipo de cuadro es %(draw_type)s. El tipo de cuadro de todas las rondas eliminatorias debería ser \"Eliminatoria.\" Por favor cambia el tipo de cuadro de esta ronda en la parte de Editar la Base de Datos." -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" msgstr "Parece que no hay ningún equipo bromeando en la categoría de break %(break_category)s. Ya generaste el break para la categoría de break %(break_category)s?" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." msgstr "Solamente hay un equipo bromeando en la categoría de break %(break_category)s. No puedes generar una ronda eliminatoria con un solo equipo — tal vez te gustaría revisar el break de la categoría de break %(break_category)s ." -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" msgstr "Seleccionar todo" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" msgstr "Seleccionar ninguno" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" msgstr "Chequeo" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" msgstr "Chequear a todos los que breakean" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" msgstr "Copiar del anterior" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" msgstr "Guardar los seleccionados" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "Equipos" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "Jueces" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" msgstr "Salas" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" msgstr "" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" msgstr "" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." msgstr "" -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." msgstr "" -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" msgstr "" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" msgstr "" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" msgstr "" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." msgstr[0] "" msgstr[1] "" -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" msgstr "" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" msgstr "no hay equipos debatiendo" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" @@ -316,7 +308,7 @@ msgstr[0] "%(nteams)d equipo que breakea — no pueden hacerse los debates" msgstr[1] "%(nteams)d equipos que brekean — no pueden hacerse los debates" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" @@ -326,7 +318,7 @@ msgstr[1] "%(ndebating)d los equipos que breakean están debatiendo esta ronda" #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" @@ -334,67 +326,67 @@ msgstr[0] "; %(nbypassing)d equipos lo está eludiendo" msgstr[1] "%(nbypassing)d equipos lo están eludiendo" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" msgstr[0] "%(nadvancing)s equipo que avanza está debatiendo esta ronda" msgstr[1] "%(nadvancing)s equipos que avanzan están debatiendo esta ronda" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" msgstr "Activo" -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" msgstr "Activo en %(prev_round)s" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" msgstr "" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" msgstr "Disponibilidad de Equipos" -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" msgstr "Disponibilidad de Jueces" -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" msgstr "Disponibilidad de Salas" -#: availability/views.py:260 +#: availability/views.py msgid "Room" msgstr "Sala" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" msgstr "Mostrar nombre (para el cuadro)" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" msgstr "Categorías" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" msgstr "Prioridad" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." msgstr "" -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." msgstr "Se han chequeado todos los equipos, jueces y salas." -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." msgstr "Se han chequeado todos los jueces que breakean." -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." msgstr "Se han chequeado todos los equipos, jueces y salas de la ronda anterior." diff --git a/tabbycat/breakqual/locale/es/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/es/LC_MESSAGES/django.po index 3cb7e2ee3c0..f68233f1982 100644 --- a/tabbycat/breakqual/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-07-05 17:07\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -17,508 +17,506 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" msgstr "" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "" +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" +msgstr[1] "" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "torneo" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "nombre" -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" msgstr "" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" msgstr "" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" msgstr "" -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" msgstr "número de secuencia" -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" msgstr "" -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" msgstr "" -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" msgstr "" -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" msgstr "" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" msgstr "" -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" msgstr "" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" msgstr "" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" msgstr "" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" msgstr "" -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" msgstr "" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" msgstr "" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" msgstr "" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" msgstr "" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" msgstr "" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" msgstr "" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "equipo" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" msgstr "" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" msgstr "" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" msgstr "" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" msgstr "" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" msgstr "" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" msgstr "" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" msgstr "" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" msgstr "" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" msgstr "" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" msgstr "" -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" msgstr "" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." msgstr "" -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." msgstr "" -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" msgstr "" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." msgstr "" -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" msgstr "" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " msgstr "" -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" msgstr "" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" msgstr "Break de %(category)s" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " msgstr "" -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" msgstr "" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" msgstr "" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" msgstr "" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" msgstr "" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" msgstr "" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" msgstr "" -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" msgstr "" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" msgstr "" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." msgstr "" -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." msgstr "" -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." msgstr "" -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." msgstr "" -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." msgstr "" -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." msgstr "" -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" msgstr "" -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" msgstr "" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" msgstr "" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" msgstr "" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" msgstr "" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." msgstr "" -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" msgstr "" -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "Jueces" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" msgstr "Gran Final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" msgstr "" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "Semifinales" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "Cuartos de Final" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "CF" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "Octavos de Final" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" msgstr "Doble-Octavos de final" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" msgstr "Triple-Octavos de final" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" msgstr "" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" msgstr "%s Finales" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" msgstr "" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" msgstr "%s Semifinales" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" msgstr "" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" msgstr "%s Cuartos de Final" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" msgstr "" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" msgstr "%s Octavos de Final" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" msgstr "" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" msgstr "%s Doble-Octavos de final" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" msgstr "" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" msgstr "%s Triple-Octavos de final" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" msgstr "" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" msgstr "" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" msgstr "" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" msgstr "Ronda de break desconocida" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" msgstr "RBD" -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" msgstr "" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" msgstr "" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" msgstr "" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." msgstr "" -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." msgstr "" -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." msgstr "" -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" msgstr "" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" msgstr "" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" diff --git a/tabbycat/draw/locale/es/LC_MESSAGES/django.po b/tabbycat/draw/locale/es/LC_MESSAGES/django.po index a2d46365eac..8203ef80711 100644 --- a/tabbycat/draw/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:27\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -17,1124 +17,1104 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "%(count)d debate tenía su estatus ajustado a %(status)s. " -msgstr[1] "%(count)d debates tenían su estatus ajustado a %(status)s" - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "Configurar el status a %(status)s" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." msgstr[0] "%(count)d debate fue marcado teniendo sus lados confirmados." msgstr[1] "%(count)d debates fueron marcados teniendo sus lados confirmados." -#: draw/admin.py:93 +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." msgstr[0] "%(count)d debate fue marcado teniendo sus lados no confirmados" msgstr[1] "%(count)d debates fueron marcados teniendo sus lados no confirmados" -#: draw/apps.py:7 draw/views.py:452 draw/views.py:455 +#: draw/apps.py draw/views.py msgid "Draw" msgstr "Asignación de salas" -#: draw/generator/__init__.py:14 +#: draw/generator/__init__.py msgid "Too many swaps" msgstr "" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" msgstr "" -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" msgstr "" -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "Bubble up (history)" msgstr "" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble down (history)" msgstr "" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble up (institution)" msgstr "" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble down (institution)" msgstr "" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" msgstr "" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" msgstr "" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Can't bubble up/down" msgstr "" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Pull-up team" msgstr "" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." msgstr "%d debates en la ronda anterior no tienen un resultado" -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." msgstr "%d debates en la roda anterior no tienen exactamente dos equipos avanzando" -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." msgstr "El ranking de salas de la ronda de eliminación indica que un número impar de equipos (%(nbypassing)d) lo paso por alto." -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." -msgstr "El ranking de salas de la ronda de eliminiación parcial indica que %(nbypassing)d equipos lo paso por alto, pero %(advancing)d equipos avanzó de él." +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." +msgstr "" -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." msgstr "El número de debates (%d) en la última ronda no es un múltiplo de dos." -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." msgstr "El orden Rényi no puede ser negativo, y actualmente está ajustado a %(alpha)f" -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." msgstr "El número de equipos presentado para el enfrentamiento no era un múltiplo de %(num)d." -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." msgstr "No había equipos para el enfrentamiento." -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." msgstr "Solo hay %d equipos clasificando en esta categoría; necesitan ser al menos dos para generar un cuadro de ronda eliminatoria. " -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." msgstr "El número de equipos (%d) en esta ronda no es múltiplo de dos. " -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." msgstr "" -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." msgstr "Hubo %(aff_count)d equipos afirmativos pero %(neg_count)d equipos negativos." -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." msgstr "Uno o más equipos tenía un lado asignado que no era afirmativo o negativo." -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." msgstr "El enfrentamiento de tipo %(type)s no puede ser usado con formatos de dos equipos." -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." msgstr "El enfrentamiento de tipo %(type)s no puede ser usado con Parlamento Británico." -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" msgstr "" -#: draw/manager.py:276 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." msgstr "El tamaño de la clasificación (%(size)d) para esta categoría clasificatoria era invalido. Debe ser ya sea seis o cuatro veces dos." -#: draw/models.py:29 draw/models.py:35 +#: draw/models.py msgid "none" msgstr "ninguno" -#: draw/models.py:30 +#: draw/models.py msgid "postponed" msgstr "pospuesto" -#: draw/models.py:31 draw/models.py:36 +#: draw/models.py msgid "draft" msgstr "borrador" -#: draw/models.py:32 draw/models.py:37 +#: draw/models.py msgid "confirmed" msgstr "confirmado " -#: draw/models.py:43 draw/models.py:375 +#: draw/models.py msgid "round" msgstr "ronda" -#: draw/models.py:45 +#: draw/models.py msgid "room" msgstr "" -#: draw/models.py:48 +#: draw/models.py msgid "bracket" msgstr "" -#: draw/models.py:50 +#: draw/models.py msgid "room rank" msgstr "ranking de sala" -#: draw/models.py:56 +#: draw/models.py msgid "importance" msgstr "importancia" -#: draw/models.py:58 +#: draw/models.py msgid "result status" msgstr "estatus de resultados" -#: draw/models.py:60 +#: draw/models.py msgid "sides confirmed" msgstr "lados confirmados " -#: draw/models.py:61 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." msgstr "Si no está chequeado, los lados asignados a los equipos en este debate son solo ____" -#: draw/models.py:64 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "" -#: draw/models.py:65 +#: draw/models.py msgid "debates" msgstr "" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:84 draw/models.py:109 +#: draw/models.py msgid " (sides not confirmed)" msgstr "(lados no confirmados)" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:96 draw/models.py:113 +#: draw/models.py msgid " vs " msgstr " vs " -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" msgstr "afirmativo" -#: draw/models.py:263 +#: draw/models.py msgid "negative" msgstr "negativo" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" msgstr "alta de gobierno" -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" msgstr "alta de oposición " -#: draw/models.py:266 +#: draw/models.py msgid "closing government" msgstr "baja de gobierno " -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" msgstr "baja de oposición " -#: draw/models.py:274 draw/models.py:377 +#: draw/models.py msgid "team" msgstr "equipo" -#: draw/models.py:276 draw/models.py:379 +#: draw/models.py msgid "side" msgstr "do" -#: draw/models.py:281 +#: draw/models.py msgid "debate team" msgstr "equipo de debate" -#: draw/models.py:282 +#: draw/models.py msgid "debate teams" msgstr "equipos de debate" -#: draw/models.py:303 +#: draw/models.py #, python-format msgid "placed %(place)s" msgstr "en %(place)s lugar" -#: draw/models.py:305 draw/models.py:312 +#: draw/models.py msgid "result unknown" msgstr "resultado desconocido " -#: draw/models.py:308 +#: draw/models.py msgid "won" msgstr "ganó" -#: draw/models.py:310 +#: draw/models.py msgid "lost" msgstr "perdió " -#: draw/models.py:383 +#: draw/models.py msgid "team side allocation" msgstr "" -#: draw/models.py:384 +#: draw/models.py msgid "team side allocations" msgstr "" #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" msgstr "" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" msgstr "Equipo %(num)d" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" msgstr "Ranking de la sala de este debate " -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" msgstr "" -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" msgstr "" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" msgstr "" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" msgstr "" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" msgstr "" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" msgstr "" -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" msgstr "" -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" msgstr "" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" msgstr "Lado" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" msgstr "Posición esta ronda " -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" msgstr "Antes " -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" msgstr "" -#: draw/tables.py:292 +#: draw/tables.py msgid "After" msgstr "Después " -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" msgstr "" -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" msgstr "Costo " -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" msgstr "" -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" msgstr "Estatus " -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" msgstr "Equipos con esta cantidad de puntos son permitidos en este debate
    \n" "(__________)" -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" msgstr "" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" msgstr "Lados" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" msgstr "" -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" msgstr "¡¡¡ALTO!!!¡Lea primero!¡Borrar equipos de debate de la base de datos podría arruinar Tabbycat!" -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." msgstr "Tabbycat requiere que todos los debates tengan exactamente un equipo de debate por cada lado, y ningún otro equipo de debate, en todo momento. Si borrar cualquier equipo de debate, debe entonces reemplazar cada uno con un nuevo equipo de debate en el mismo debate, o borrar los objetos asociados al debate. Si no hace esto correctamente, muchas paginas se bloquearan." -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" msgstr "" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." msgstr "" -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" msgstr "Disponibilidad" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" msgstr "" -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" msgstr "" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" msgstr "" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" msgstr "" -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" msgstr "" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" msgstr "" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" msgstr "Ver Cuadro" -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" msgstr "" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" msgstr "" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" msgstr "" -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" msgstr "" -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" msgstr "" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." msgstr "" -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." -msgstr "" - -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "" +msgid_plural "Enter motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" msgstr "" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." msgstr "" -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." msgstr "" -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." msgstr "" -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" msgstr "" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" msgstr "" -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." msgstr "" -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." msgstr "" -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." msgstr "" -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:200 +#: draw/templates/draw_display_admin.html msgid "Release Motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:201 -msgid "Release motion to public" -msgstr "" +msgid_plural "Release Motions" +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:202 -msgid "Unrelease motion to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." msgstr "" -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." msgstr "" -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "" - -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "" +msgid_plural "Motions have been released publicly." +msgstr[0] "" +msgstr[1] "" -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" msgstr "" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." msgstr "" -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" msgstr "" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" msgstr "" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" msgstr "" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" msgstr "" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" msgstr "" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" msgstr "" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" msgstr "" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" msgstr "" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" msgstr "" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" msgstr "" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" msgstr "" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" msgstr "" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" msgstr "" -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" msgstr "" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" msgstr "" -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" msgstr "" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" msgstr "" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" msgstr "" -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" msgstr "" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" msgstr "" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" msgstr "" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" msgstr "" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." msgstr "" -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." msgstr "" -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." msgstr "" -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" msgstr "" -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" msgstr "" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" msgstr "" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" msgstr "" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" msgstr "" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" msgstr "" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" msgstr "" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." msgstr[0] "" msgstr[1] "" -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" msgstr "" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" msgstr "" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." msgstr "" -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." msgstr "" -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." msgstr "" -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." msgstr "" -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " msgstr "" -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." msgstr "" -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." msgstr "" -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." msgstr "" -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." msgstr "" -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." msgstr "" -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." msgstr "" -#: draw/views.py:68 draw/views.py:483 +#: draw/views.py msgid "No debates in this round" msgstr "" -#: draw/views.py:76 +#: draw/views.py #, python-format msgid "Draw for %(round)s" msgstr "Enfrentamientos para %(round)s" -#: draw/views.py:78 +#: draw/views.py msgid "Draws for Current Rounds" msgstr "" -#: draw/views.py:82 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" msgstr "" -#: draw/views.py:86 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" msgstr "" -#: draw/views.py:124 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" msgstr[0] "" msgstr[1] "" -#: draw/views.py:171 +#: draw/views.py msgid "The draw for this round hasn't been released." msgstr "" -#: draw/views.py:224 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" msgstr "" -#: draw/views.py:382 +#: draw/views.py msgid "Adjudicator Assignments" msgstr "" -#: draw/views.py:404 +#: draw/views.py msgid "Position" msgstr "" -#: draw/views.py:424 +#: draw/views.py msgid "Team Pairings" msgstr "" -#: draw/views.py:447 +#: draw/views.py msgid "No Draw" msgstr "" -#: draw/views.py:449 +#: draw/views.py msgid "Draft Draw" msgstr "" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:541 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" msgstr "" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:546 +#: draw/views.py msgid "BR" msgstr "" -#: draw/views.py:571 +#: draw/views.py msgid "Draw with Details" msgstr "" -#: draw/views.py:579 +#: draw/views.py msgid "Position Balance Report" msgstr "" -#: draw/views.py:590 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" msgstr "" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:593 +#: draw/views.py msgid " (i.e., Shannon entropy)" msgstr "" -#: draw/views.py:623 +#: draw/views.py msgid "Teams with position imbalances" msgstr "" -#: draw/views.py:624 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" msgstr "" -#: draw/views.py:627 +#: draw/views.py msgid "Annotated draw" msgstr "" -#: draw/views.py:658 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" msgstr "" -#: draw/views.py:666 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " msgstr "" -#: draw/views.py:674 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " msgstr "" -#: draw/views.py:683 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " msgstr "" -#: draw/views.py:699 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "" -#: draw/views.py:726 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "" -#: draw/views.py:746 +#: draw/views.py msgid "Released the draw." msgstr "" -#: draw/views.py:761 +#: draw/views.py msgid "Unreleased the draw." msgstr "" -#: draw/views.py:774 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." msgstr "" -#: draw/views.py:793 +#: draw/views.py msgid "Side Pre-Allocations" msgstr "" -#: draw/views.py:826 +#: draw/views.py msgid "Edit Matchups" msgstr "" diff --git a/tabbycat/importer/locale/es/LC_MESSAGES/django.po b/tabbycat/importer/locale/es/LC_MESSAGES/django.po index 2db7812c734..aa6bcec93b0 100644 --- a/tabbycat/importer/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:50\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -17,416 +17,405 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" msgstr "linea %(lineno)d: %(message)s" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" msgstr "Esta linea (para %(institution)s) no tiene un codigo" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" msgstr "Esta linea (para %(institution)s) tenia demasiadas columnas" -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." msgstr "No hubo instituciones para importar." -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." msgstr "No había salas para importar." -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" msgstr "Nombres de los oradores" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" msgstr "e-mail de los oradores" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" msgstr "" -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" msgstr "Nombre (excluyendo nombre de la institución) " -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" msgstr "¿Prefijo del nombre de equipo con nombre de la institución?" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" msgstr "No incluir nombre de la institución (ver el campo \"¿Prefijo del nombre de equipo con nombre de la institución?\" mejor)" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" msgstr "(No aplicable para equipos sin afiliación) " -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" msgstr "Un nombre de orador por línea" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" msgstr "Puede ser separado por nuevas líneas, tablas o comas " -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "Orador %d" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" msgstr "Orador%d@example.edu" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." msgstr "Debe haber al menos un orador" -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." msgstr "%(email)s no es un e-mail valido " -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." msgstr "Hay más e-mails que oradores" -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." msgstr "Cada equipo en un único torneo de una misma institución debe tener un nombre diferente. Por favor corrija la información duplicada." -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" msgstr "Puesto" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." msgstr "Este valor debe ser entre %(min)d y %(max)d" -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" msgstr "Sin afiliación (sin institución)" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "" msgstr[1] "" -#: importer/forms.py:396 +#: importer/forms.py msgid "XML" msgstr "" -#: importer/forms.py:397 +#: importer/forms.py msgid "The Debate XML archive to parse" msgstr "" -#: importer/templates/archive_export_index.html:4 -#: importer/templates/archive_export_index.html:5 +#: importer/templates/archive_export_index.html msgid "Export Tournament Archive" msgstr "" -#: importer/templates/archive_export_index.html:9 +#: importer/templates/archive_export_index.html msgid "Tournaments can be exported in an XML format for use outside Tabbycat." msgstr "" -#: importer/templates/archive_export_index.html:17 +#: importer/templates/archive_export_index.html msgid "Export all data" msgstr "" -#: importer/templates/archive_importer.html:6 -#: importer/templates/archive_importer.html:18 +#: importer/templates/archive_importer.html msgctxt "page title" msgid "Import Tournament Archive" msgstr "" -#: importer/templates/archive_importer.html:19 +#: importer/templates/archive_importer.html msgid "This form will create a tournament with the data provided as a Debate XML format." msgstr "" -#: importer/templates/archive_importer.html:24 +#: importer/templates/archive_importer.html msgid "Import" msgstr "" -#: importer/templates/archive_importer.html:25 +#: importer/templates/archive_importer.html msgid "Go back to the site home page" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html msgctxt "page title" msgid "Add Adjudicators" msgstr "Añadir jueces" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" msgstr "(Paso %(step)s de %(count)s)" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" msgstr "Paso anterior" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." msgstr "Segúnla configuración de este torneo, el puesto de un juez debe ser entre %(min)s y %(max)s. Proveer direcciones de e-mail es opcional pero puede ser util si se usan URLs privadas para el feedback y las ballots." -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" msgstr "Jueces sin afiliación" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" msgstr "Guardar Todos los Jueces" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." msgstr "Necesitan añadir instituciones antes de añadir jueces." -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." msgstr "Especifique el número de nuevos jueces a añadir por institución. En el siguiente paso puede especificar sus nombres y puestos." -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" msgstr "Siguiente paso" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" msgstr "Importador simple" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." msgstr "Existen diversas formas de importar datos a Tabbycat. Cual es mejor depende en el tamaño de su torneo y su conocimiento tecnico. Este importador simplees el más fácil de usar y funciona bien para torneos pequeños y medianos." -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" msgstr "Añadir instituciones" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" msgstr "Añadir equipos" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" msgstr "Añadir jueces" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" msgstr "Añadir salas" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" msgstr "Añadir/Editar Categoría de Salas" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" msgstr "Añadir/Editar Restricciones de Sala" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" msgstr "Añadir/Editar Conflictos Juez-Equipo" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" msgstr "Añadir/Editar Conflictos Juez-Juez" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" msgstr "Añadir/Editar Conflictos Juez-Institución " -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" msgstr "" -#: importer/templates/simple_import_index.html:66 +#: importer/templates/simple_import_index.html msgid "Add/Edit Break Categories" msgstr "" -#: importer/templates/simple_import_index.html:70 +#: importer/templates/simple_import_index.html msgid "Add/Edit Speaker Categories" msgstr "" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" msgstr "Añadir instituciones" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" msgstr "Guardar todas las instituciones" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" msgstr "Hay algunos problemas con los datos en esta forma:" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" msgstr "Siguiente pas" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" msgstr "Añadir Equipos" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" msgstr "Equipos para %(institution)s" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" msgstr "Equipos sin afiliación " -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" msgstr "Guardar Todos los Equipos" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." msgstr "Necesita añadir instituciones antes de añadir equipos." -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." msgstr "Especifique el número de nuevos equipos a añadir por institución. En el siguiente paso puede especificar los nombres de equipo y orador. " -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" msgstr "" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" msgstr "Añadir salas" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." msgstr "Las prioridades indican cuanto quiere usar una sala. Números más grandes indican mayor prioridad. Si tiene más salas que debates, las salas con prioridad más baja no serán usadas." -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" msgstr "Guardar Todas las Salas" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" msgstr "Pegue una lista de salas con una sala por línea y siguiendo el formato de: nombre,prioridad. Por ejemplo:" -#: importer/views.py:108 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." msgstr[0] "Institución añadida %(count)d." msgstr[1] "Instituciones añadidas %(count)d." -#: importer/views.py:129 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." msgstr[0] "Sala añadida %(count)d." msgstr[1] "Salas añadidas %(count)d." -#: importer/views.py:188 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." msgstr[0] "Equipo añadido %(count)d." msgstr[1] "Equipos añadidos %(count)d." -#: importer/views.py:209 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "Jueces %(number)d" -#: importer/views.py:214 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." msgstr[0] "Juez añadido %(count)d." msgstr[1] "Jueces añadidos %(count)d." -#: importer/views.py:230 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " msgstr "" -#: importer/views.py:238 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." msgstr "" -#: importer/views.py:256 +#: importer/views.py msgid "Tournament archive has been imported." msgstr "" diff --git a/tabbycat/locale/es/LC_MESSAGES/django.po b/tabbycat/locale/es/LC_MESSAGES/django.po index 727f45dc33e..486f79c9dee 100644 --- a/tabbycat/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2022-08-07 01:10\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -17,940 +17,940 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" msgstr "" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:105 +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" msgstr "Chequeo" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" msgstr "" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" msgstr "" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" msgstr "" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." msgstr "" -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" msgstr "código de barras" -#: checkins/models.py:37 +#: checkins/models.py msgid "" msgstr "" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" msgstr "persona" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" msgstr "identificador de persona" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" msgstr "identificadores de persona" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" msgstr "identificador de debate" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" msgstr "identificadores de debate" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" msgstr "identificador de sala" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" msgstr "identificadores de sala" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" msgstr "identificador" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" msgstr "" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "torneo" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" msgstr "" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" msgstr "" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" msgstr "" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" msgstr "" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." msgstr "" -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." msgstr "" -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." msgstr "" -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" msgstr "" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" msgstr "" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" msgstr "" -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." msgstr "" -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." msgstr "" -#: checkins/views.py:30 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" msgstr "" -#: checkins/views.py:63 +#: checkins/views.py msgid "People's Check-In Statuses" msgstr "" -#: checkins/views.py:120 +#: checkins/views.py msgid "Rooms' Check-In Statuses" msgstr "" -#: checkins/views.py:169 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" msgstr "" -#: checkins/views.py:176 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" msgstr "Oradores" -#: checkins/views.py:181 templates/nav/public_nav.html:145 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "Jueces" -#: checkins/views.py:186 +#: checkins/views.py msgid "Rooms" msgstr "Salas" -#: checkins/views.py:227 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" msgstr "" -#: checkins/views.py:234 +#: checkins/views.py msgid "Identifiers" msgstr "" -#: checkins/views.py:272 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." msgstr "" -#: checkins/views.py:280 +#: checkins/views.py msgid "You have revoked your check-in." msgstr "" -#: checkins/views.py:282 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." msgstr "" -#: checkins/views.py:286 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." msgstr "" -#: checkins/views.py:293 +#: checkins/views.py msgid "You are now checked in." msgstr "" -#: settings/core.py:67 +#: settings/core.py msgid "Arabic" msgstr "árabe" -#: settings/core.py:68 +#: settings/core.py msgid "Bengali" msgstr "" -#: settings/core.py:69 +#: settings/core.py msgid "English" msgstr "inglés" -#: settings/core.py:70 +#: settings/core.py msgid "Spanish" msgstr "español" -#: settings/core.py:71 +#: settings/core.py msgid "French" msgstr "francés" -#: settings/core.py:72 +#: settings/core.py msgid "Indonesian" msgstr "" -#: settings/core.py:73 +#: settings/core.py msgid "Japanese" msgstr "japonés" -#: settings/core.py:74 +#: settings/core.py msgid "Malay" msgstr "" -#: settings/core.py:75 +#: settings/core.py msgid "Portuguese" msgstr "portugués" -#: settings/core.py:76 +#: settings/core.py msgid "Russian" msgstr "Ruso" -#: settings/core.py:77 +#: settings/core.py msgid "Simplified Chinese" msgstr "" -#: settings/core.py:78 +#: settings/core.py msgid "Translation" msgstr "" -#: templates/admin/delete_protected_message.html:4 +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." msgstr "" -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." msgstr "" -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." msgstr "" -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" msgstr "" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" msgstr "" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" msgstr "Iniciar sesión" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" msgstr "Olvidé mi contraseña" -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "El tab de %(tournament)s funciona con Tabbycat, un sistema de código abierto de tab para una variedad de formatos de debate parlamentario" -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "Este tab funciona con Tabbycat, un sistema de código abierto de tab para una variedad de formatos de debate parlamentario" -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." msgstr "" -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" msgstr "" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" msgstr "Permiso denegado (403)" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." msgstr "" -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgstr[0] "" msgstr[1] "" -#: templates/errors/legacy_sendgrid_warning.html:11 +#: templates/errors/legacy_sendgrid_warning.html msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." msgstr "" -#: templates/errors/public_403.html:14 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." msgstr "" -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." msgstr "" -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "%(tournament)s funciona con Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "Este sitio funciona con Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." msgstr "Tabbycat es un proyecto de código abierto, desarrollado por voluntarios, y es gratis para utilizar para tabular los torneos sin fines de lucro y sin fines de recaudación de fondos." -#: templates/footer.html:24 +#: templates/footer.html #, python-format msgid "For a tournament of this size, we suggest a donation of $%(amount)s." msgstr "" -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." msgstr "Aprender más sobre las donaciones." -#: templates/footer.html:31 +#: templates/footer.html msgid "Donations to Tabbycat from individuals or organisations are much appreciated." msgstr "" -#: templates/footer.html:39 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" msgstr "" -#: templates/footer.html:41 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." msgstr "" -#: templates/footer.html:50 +#: templates/footer.html msgid "Our Organisation" msgstr "" -#: templates/footer.html:52 -msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." msgstr "" -#: templates/footer.html:65 +#: templates/footer.html msgid "Language" msgstr "Idioma" -#: templates/footer.html:72 +#: templates/footer.html msgid "GitHub" msgstr "" -#: templates/footer.html:78 +#: templates/footer.html msgid "Documentation" msgstr "Documentación" -#: templates/footer.html:84 +#: templates/footer.html msgid "Support" msgstr "Apoyo" -#: templates/footer.html:90 +#: templates/footer.html msgid "Facebook" msgstr "" -#: templates/footer.html:96 +#: templates/footer.html msgid "Set Up A Copy" msgstr "Instalar una copia" -#: templates/footer.html:110 +#: templates/footer.html msgid "Change Language" msgstr "Cambiar de idioma" -#: templates/footer.html:127 +#: templates/footer.html msgid "Use this language" msgstr "Utilizar este idioma" -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" msgstr "" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" msgstr "Inicio del sitio" -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" msgstr "Nuevo torneo" -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" msgstr "Editar el base de datos" -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" msgstr "Área de administrador" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" msgstr "Área de ayudantes" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" msgstr "Área pública" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" msgstr "Visión general" -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" msgstr "Configuración" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" msgstr "Parámetros" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" msgstr "" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:175 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" msgstr "Participantes" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" msgstr "URLs privadas" -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" msgstr "" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" msgstr "" -#: templates/nav/admin_nav.html:97 +#: templates/nav/admin_nav.html msgid "Export XML" msgstr "" -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:160 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" msgstr "Lados" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" msgstr "" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" msgstr "" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" msgstr "Retroalimentación" -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" msgstr "" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" msgstr "" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" msgstr "" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" msgstr "" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" msgstr "" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" msgstr "" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" msgstr "" -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" msgstr "" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:165 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" msgstr "Clasificación" -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" msgstr "" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "Equipos" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" msgstr "Equipos de %(category)s" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" msgstr "" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" msgstr "Oradores de %(category)s" -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" msgstr "" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:155 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "Mociones" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:170 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" msgstr "Diversidad" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" msgstr "Break" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" msgstr "" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" msgstr "" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" msgstr "" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" msgstr "Desconectarse" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" msgstr "Entrar resultados " -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:211 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" msgstr "Entrar retroalimentación" -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" msgstr "Lista de Participantes" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:180 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" msgstr "Instituciones" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" msgstr "Nombres en clave" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" msgstr "" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" msgstr "Mostrar los enfrentamientos" -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" msgstr "Tabla de equipos" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" msgstr "Tabla de oradores" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" msgstr "" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" msgstr "Tabla de jueces" -#: templates/nav/public_nav.html:53 templates/nav/public_nav.html:62 +#: templates/nav/public_nav.html msgid "Motions Tab" msgstr "Tabla de mociones" -#: templates/nav/public_nav.html:56 +#: templates/nav/public_nav.html msgid "By round" msgstr "" -#: templates/nav/public_nav.html:57 +#: templates/nav/public_nav.html msgid "Globally" msgstr "" -#: templates/nav/public_nav.html:72 +#: templates/nav/public_nav.html msgid "Draws" msgstr "Enfrentamientos" -#: templates/nav/public_nav.html:83 +#: templates/nav/public_nav.html msgid "No Draws Available" msgstr "" -#: templates/nav/public_nav.html:91 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" msgstr "Enfrentamientos para %(round)s" -#: templates/nav/public_nav.html:95 +#: templates/nav/public_nav.html msgid "Current Draws" msgstr "" -#: templates/nav/public_nav.html:115 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" msgstr "Resultados" -#: templates/nav/public_nav.html:133 +#: templates/nav/public_nav.html msgid "Break" msgstr "" -#: templates/nav/public_nav.html:185 +#: templates/nav/public_nav.html msgid "Feedback Progress" msgstr "" -#: templates/nav/public_nav.html:191 templates/nav/public_nav.html:197 +#: templates/nav/public_nav.html msgid "Enter Ballot" msgstr "" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" msgstr "Disponibilidad" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" msgstr "Enfrentamientos" -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" msgstr "" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" msgstr "Área de administrador para %(tournament)s" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" msgstr "Área de ayudantes para %(tournament)s" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" msgstr "Área pública para %(tournament)s" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" msgstr "Iniciar sesión" -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" msgstr "" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" msgstr "" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" msgstr "Iniciar sesión" -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" msgstr "Iniciar sesión para Tabbycat" -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." msgstr "" -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." msgstr "" -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." msgstr "" -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" msgstr "" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." msgstr "" -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" msgstr "" -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:27 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" msgstr "" -#: templates/registration/password_change_form.html:16 +#: templates/registration/password_change_form.html #, python-format msgid "API Token: %(api_token)s" msgstr "" -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgid "The API token will allow you to authorize external applications to access the site as staff." msgstr "" -#: templates/registration/password_change_form.html:28 +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." msgstr "" -#: templates/registration/password_change_form.html:33 -#: templates/registration/password_reset_confirm.html:25 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" msgstr "" -#: templates/registration/password_change_form.html:34 -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" msgstr "" -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "" -#: templates/registration/password_reset_complete.html:11 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." msgstr "" -#: templates/registration/password_reset_complete.html:14 -#: templates/registration/password_reset_done.html:15 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" msgstr "" -#: templates/registration/password_reset_confirm.html:4 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" msgstr "" -#: templates/registration/password_reset_confirm.html:16 -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html msgctxt "page title" msgid "Password Reset" msgstr "" -#: templates/registration/password_reset_confirm.html:18 +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" msgstr "" -#: templates/registration/password_reset_confirm.html:33 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." msgstr "" -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" msgid "Password reset email sent" msgstr "" -#: templates/registration/password_reset_done.html:11 +#: templates/registration/password_reset_done.html msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." msgstr "" -#: templates/registration/password_reset_done.html:12 +#: templates/registration/password_reset_done.html msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." msgstr "" -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" msgstr "" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" msgstr "" -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "" -#: templates/registration/password_reset_form.html:27 +#: templates/registration/password_reset_form.html msgid "Enter your email address below, and we'll email you a password reset link." msgstr "" -#: templates/registration/password_reset_form.html:34 +#: templates/registration/password_reset_form.html msgid "Please enter a valid email address." msgstr "" -#: templates/registration/password_reset_form.html:39 users/forms.py:10 -#: users/forms.py:25 +#: templates/registration/password_reset_form.html users/forms.py msgid "Email address" msgstr "" -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" msgstr "" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" msgstr "" -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" msgstr "" -#: urls.py:102 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" msgstr "" -#: urls.py:105 +#: urls.py msgid "Welcome! You just logged in!" msgstr "" -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." msgstr "" -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." msgstr "" -#: users/templates/admin/auth/delete_user_warning.html:6 +#: users/templates/admin/auth/delete_user_warning.html msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." msgstr "" -#: users/templates/signup.html:4 users/templates/signup.html:5 +#: users/templates/signup.html msgid "Sign-Up" msgstr "" -#: users/templates/signup.html:16 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Administrator Account" msgstr "" -#: users/templates/signup.html:18 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Assistant Account" msgstr "" -#: users/templates/signup.html:25 +#: users/templates/signup.html msgid "Create Account" msgstr "Crear cuenta" -#: users/views.py:54 +#: users/views.py msgid "You have successfully created a new administrator account." msgstr "" -#: users/views.py:56 +#: users/views.py msgid "You have successfully created a new assistant account." msgstr "" -#: users/views.py:84 +#: users/views.py msgid "Whoops! It looks like someone's already created the first user account. Please log in." msgstr "" -#: users/views.py:92 +#: users/views.py #, python-format msgid "Welcome! You've created an account for %s." msgstr "" diff --git a/tabbycat/motions/locale/es/LC_MESSAGES/django.po b/tabbycat/motions/locale/es/LC_MESSAGES/django.po index 53119d4680a..e093ab32009 100644 --- a/tabbycat/motions/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -17,372 +17,383 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "Mociones" -#: motions/models.py:9 +#: motions/models.py msgid "text" msgstr "texto" -#: motions/models.py:10 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" msgstr "La moción completa, ej: \"Esta Casa enderezaría todas las bananas\"" -#: motions/models.py:12 +#: motions/models.py msgid "reference" msgstr "referencia" -#: motions/models.py:13 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" msgstr "Palabra clave para la moción, ej: \"Bananas\"" -#: motions/models.py:15 +#: motions/models.py msgid "info slide" msgstr "diapositiva de info" -#: motions/models.py:16 +#: motions/models.py msgid "The information slide for this topic; if it has one" msgstr "La diapositiva de información para este tema; si tiene una" -#: motions/models.py:19 +#: motions/models.py msgid "tournament" msgstr "torneo" -#: motions/models.py:21 +#: motions/models.py msgid "rounds" msgstr "rondas" -#: motions/models.py:24 motions/models.py:37 motions/models.py:62 +#: motions/models.py msgid "motion" msgstr "moción" -#: motions/models.py:25 +#: motions/models.py msgid "motions" msgstr "mociones" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" msgstr "equipo de debate" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" msgstr "preferencia" -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" msgstr "" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" msgstr "" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" msgstr "" -#: motions/models.py:64 +#: motions/models.py msgid "round" msgstr "ronda" -#: motions/models.py:67 +#: motions/models.py msgid "sequence number" msgstr "número de sequencia" -#: motions/models.py:68 +#: motions/models.py msgid "The order in which motions are displayed" msgstr "El orden en que se muestran las mociones" -#: motions/models.py:73 +#: motions/models.py msgid "round motion" msgstr "" -#: motions/models.py:74 +#: motions/models.py msgid "round motions" msgstr "" -#: motions/statistics.py:86 +#: motions/statistics.py msgid "extremely strong evidence" msgstr "" -#: motions/statistics.py:87 +#: motions/statistics.py msgid "strong evidence" msgstr "" -#: motions/statistics.py:88 +#: motions/statistics.py msgid "moderate evidence" msgstr "" -#: motions/statistics.py:89 +#: motions/statistics.py msgid "weak evidence" msgstr "" -#: motions/statistics.py:90 +#: motions/statistics.py msgid "very weak evidence" msgstr "" -#: motions/statistics.py:91 +#: motions/statistics.py msgid "extremely weak evidence" msgstr "" -#: motions/statistics.py:114 +#: motions/statistics.py msgid "balance inconclusive" msgstr "" -#: motions/statistics.py:115 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" msgstr "" -#: motions/statistics.py:123 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" msgstr "" -#: motions/statistics.py:124 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." msgstr "" -#: motions/statistics.py:129 +#: motions/statistics.py msgid "probably balanced" msgstr "" -#: motions/statistics.py:130 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." msgstr "" -#: motions/templates/motion_global_statistics.html:22 -#: motions/templates/motion_round_statistics.html:31 -#: motions/templates/public_motions.html:32 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" msgstr "" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" msgstr "" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" msgstr "" -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" msgstr[0] "" msgstr[1] "" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" msgstr "" -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" msgstr[0] "" msgstr[1] "" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" msgstr "" -#: motions/templates/motions_edit.html:28 +#: motions/templates/motions_edit.html msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." msgstr "" -#: motions/templates/motions_edit.html:30 +#: motions/templates/motions_edit.html msgid "Reuse Motions from Last Round" msgstr "" -#: motions/templates/motions_edit.html:35 +#: motions/templates/motions_edit.html msgid "Use Existing Motions" msgstr "" -#: motions/templates/motions_edit.html:74 +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" +msgstr[1] "" + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" msgstr[0] "" msgstr[1] "" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "" -#: motions/templates/public_motions.html:41 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." msgstr "" -#: motions/templates/public_motions.html:47 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." msgstr "" -#: motions/templates/public_motions.html:52 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." msgstr "" -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" msgstr[0] "" msgstr[1] "" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" msgstr[0] "" msgstr[1] "" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." msgstr "" -#: motions/utils.py:11 +#: motions/utils.py msgid "Not all latest ballots list the same motion, so could not be merged." msgstr "" -#: motions/utils.py:29 +#: motions/utils.py msgid "Motion vetos are inconsistent, so could not be merged." msgstr "" -#: motions/views.py:91 +#: motions/views.py msgid "The motion has been saved." msgstr "" -#: motions/views.py:93 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." msgstr[0] "" msgstr[1] "" -#: motions/views.py:97 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." msgstr[0] "" msgstr[1] "" -#: motions/views.py:140 +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "" + +#: motions/views.py #, python-format msgid "Reused the motion from the previous round." msgid_plural "Reused the %(count)d motions from the previous round." msgstr[0] "" msgstr[1] "" -#: motions/views.py:164 -msgid "Released the motion(s)." -msgstr "" +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" +msgstr[1] "" -#: motions/views.py:171 -msgid "Unreleased the motion(s)." -msgstr "" +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" +msgstr[1] "" -#: motions/views.py:195 +#: motions/views.py msgid "Round Motions" msgstr "" -#: motions/views.py:209 +#: motions/views.py msgid "Motion Statistics" msgstr "" diff --git a/tabbycat/notifications/locale/es/LC_MESSAGES/django.po b/tabbycat/notifications/locale/es/LC_MESSAGES/django.po index a1469409d6e..027541c04f1 100644 --- a/tabbycat/notifications/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:15\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -18,401 +18,399 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" msgstr "" -#: notifications/forms.py:12 +#: notifications/forms.py msgid "Recipient email address" msgstr "" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" msgstr "" -#: notifications/forms.py:17 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" msgstr "" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Subject" msgstr "" -#: notifications/forms.py:31 +#: notifications/forms.py msgid "Message" msgstr "" -#: notifications/models.py:11 notifications/models.py:26 +#: notifications/models.py msgid "email" msgstr "" -#: notifications/models.py:12 +#: notifications/models.py msgid "SMS" msgstr "" -#: notifications/models.py:21 +#: notifications/models.py msgid "recipient" msgstr "" -#: notifications/models.py:23 +#: notifications/models.py msgid "method" msgstr "" -#: notifications/models.py:28 notifications/models.py:134 +#: notifications/models.py msgid "context" msgstr "" -#: notifications/models.py:31 +#: notifications/models.py msgid "notification" msgstr "" -#: notifications/models.py:33 notifications/models.py:74 -#: notifications/models.py:130 +#: notifications/models.py msgid "timestamp" msgstr "marca de tiempo" -#: notifications/models.py:36 +#: notifications/models.py msgid "sent message" msgstr "" -#: notifications/models.py:37 +#: notifications/models.py msgid "sent messages" msgstr "" -#: notifications/models.py:58 +#: notifications/models.py msgid "team points" msgstr "" -#: notifications/models.py:59 +#: notifications/models.py msgid "ballot confirmed" msgstr "" -#: notifications/models.py:60 +#: notifications/models.py msgid "feedback URL" msgstr "" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot URL" msgstr "" -#: notifications/models.py:62 +#: notifications/models.py msgid "landing page URL" msgstr "" -#: notifications/models.py:63 +#: notifications/models.py msgid "adjudicator draw released" msgstr "" -#: notifications/models.py:64 +#: notifications/models.py msgid "team registration" msgstr "" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator registration" msgstr "" -#: notifications/models.py:66 +#: notifications/models.py msgid "motion(s) released" msgstr "" -#: notifications/models.py:67 +#: notifications/models.py msgid "team draw released" msgstr "" -#: notifications/models.py:68 +#: notifications/models.py msgid "custom message" msgstr "" -#: notifications/models.py:72 notifications/models.py:132 +#: notifications/models.py msgid "event" msgstr "" -#: notifications/models.py:77 +#: notifications/models.py msgid "tournament" msgstr "torneo" -#: notifications/models.py:79 +#: notifications/models.py msgid "round" msgstr "ronda" -#: notifications/models.py:82 +#: notifications/models.py msgid "subject template" msgstr "" -#: notifications/models.py:84 +#: notifications/models.py msgid "body template" msgstr "" -#: notifications/models.py:87 +#: notifications/models.py msgid "bulk notification" msgstr "" -#: notifications/models.py:88 +#: notifications/models.py msgid "bulk notifications" msgstr "" -#: notifications/models.py:114 +#: notifications/models.py msgid "Processed" msgstr "" -#: notifications/models.py:115 +#: notifications/models.py msgid "Dropped" msgstr "" -#: notifications/models.py:116 +#: notifications/models.py msgid "Deferred" msgstr "" -#: notifications/models.py:117 +#: notifications/models.py msgid "Delivered" msgstr "" -#: notifications/models.py:118 +#: notifications/models.py msgid "Bounced" msgstr "" -#: notifications/models.py:119 +#: notifications/models.py msgid "Opened" msgstr "" -#: notifications/models.py:120 +#: notifications/models.py msgid "Clicked" msgstr "" -#: notifications/models.py:121 +#: notifications/models.py msgid "Unsubscribed" msgstr "" -#: notifications/models.py:122 +#: notifications/models.py msgid "Marked as spam" msgstr "" -#: notifications/models.py:123 +#: notifications/models.py msgid "Unsubscribed from group" msgstr "" -#: notifications/models.py:124 +#: notifications/models.py msgid "Resubscribed to group" msgstr "" -#: notifications/models.py:128 +#: notifications/models.py msgid "email message" msgstr "" -#: notifications/models.py:137 +#: notifications/models.py msgid "email status" msgstr "" -#: notifications/models.py:138 +#: notifications/models.py msgid "email statuses" msgstr "" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." msgstr "" -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." msgstr "" -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" msgstr "" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." msgstr "" -#: notifications/templates/notifications_nav.html:5 notifications/views.py:75 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" msgstr "" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:29 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" msgstr "" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" msgstr "" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" msgstr "" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." msgstr "" -#: notifications/templates/test_email.html:20 +#: notifications/templates/test_email.html #, python-format msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." msgstr "" -#: notifications/templates/test_email.html:30 +#: notifications/templates/test_email.html msgid "Go back to the site home page" msgstr "" -#: notifications/utils.py:26 +#: notifications/utils.py msgid "the chair" msgstr "" -#: notifications/utils.py:27 +#: notifications/utils.py msgid "the only" msgstr "" -#: notifications/utils.py:28 +#: notifications/utils.py msgid "a panellist" msgstr "" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "a trainee" msgstr "" -#: notifications/utils.py:59 +#: notifications/utils.py msgid "TBA" msgstr "" -#: notifications/utils.py:88 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "" -#: notifications/utils.py:99 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:102 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" msgstr "" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Win" msgstr "" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Loss" msgstr "" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " msgstr "" -#: notifications/utils.py:183 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " msgstr "" -#: notifications/utils.py:206 notifications/utils.py:207 +#: notifications/utils.py msgid ", " msgstr "" -#: notifications/views.py:47 +#: notifications/views.py #, python-format msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" msgstr "" -#: notifications/views.py:51 +#: notifications/views.py msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." msgstr "" -#: notifications/views.py:60 +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" msgstr "" -#: notifications/views.py:65 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." msgstr "" -#: notifications/views.py:81 +#: notifications/views.py msgid "N/A" msgstr "" -#: notifications/views.py:82 +#: notifications/views.py msgid "Not known" msgstr "" -#: notifications/views.py:87 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" msgstr "" -#: notifications/views.py:133 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "" -#: notifications/views.py:152 +#: notifications/views.py msgid "Timeline" msgstr "" -#: notifications/views.py:162 notifications/views.py:260 +#: notifications/views.py msgid "Participant" msgstr "" -#: notifications/views.py:163 notifications/views.py:265 +#: notifications/views.py msgid "Email address" msgstr "" -#: notifications/views.py:164 +#: notifications/views.py msgid "Status" msgstr "Estatus " -#: notifications/views.py:165 +#: notifications/views.py msgid "Time" msgstr "" -#: notifications/views.py:204 +#: notifications/views.py msgid "Email Participants" msgstr "" -#: notifications/views.py:233 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." msgstr[0] "" msgstr[1] "" -#: notifications/views.py:239 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." msgstr "" -#: notifications/views.py:250 +#: notifications/views.py msgid "Send Email" msgstr "" -#: notifications/views.py:266 +#: notifications/views.py msgid "Not Provided" msgstr "" -#: notifications/views.py:279 +#: notifications/views.py msgid "Role" msgstr "" -#: notifications/views.py:280 +#: notifications/views.py msgid "Adjudicator" msgstr "" -#: notifications/views.py:280 +#: notifications/views.py msgid "Speaker" msgstr "" -#: notifications/views.py:288 +#: notifications/views.py msgid "Speakers" msgstr "Oradores" -#: notifications/views.py:289 +#: notifications/views.py msgid "Adjudicators" msgstr "Jueces" diff --git a/tabbycat/options/locale/es/LC_MESSAGES/django.po b/tabbycat/options/locale/es/LC_MESSAGES/django.po index 1ee66cbda1c..b154b6b5f40 100644 --- a/tabbycat/options/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -18,1587 +18,1600 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" msgstr "" -#: options/models.py:13 +#: options/models.py msgid "instance" msgstr "" -#: options/models.py:18 +#: options/models.py msgid "tournament preference" msgstr "" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" msgstr "" -#: options/preferences.py:19 options/templates/preferences_index.html:53 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" msgstr "Reglas de puntuación" -#: options/preferences.py:25 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:28 +#: options/preferences.py msgid "Minimum speaker score" msgstr "Puntuación de orador mínima " -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum speaker score" msgstr "Puntuación de orador máxima" -#: options/preferences.py:35 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" msgstr "" -#: options/preferences.py:43 +#: options/preferences.py msgid "Speaker score step" msgstr "" -#: options/preferences.py:44 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:52 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" msgstr "La cantidad más grande por la cual un equipo puede vencer a otro (0 significa que no hay límite)" -#: options/preferences.py:53 +#: options/preferences.py msgid "Maximum margin" msgstr "Margen máximo" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" msgstr "Puntaje mínimo permitido para discursos de replica" -#: options/preferences.py:63 +#: options/preferences.py msgid "Minimum reply score" msgstr "Puntaje mínimo de replica" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" msgstr "Puntaje máximo permitido para discursos de replica" -#: options/preferences.py:72 +#: options/preferences.py msgid "Maximum reply score" msgstr "Puntaje máximo de replica" -#: options/preferences.py:80 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" msgstr "" -#: options/preferences.py:81 +#: options/preferences.py msgid "Reply score step" msgstr "" -#: options/preferences.py:89 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" msgstr "" -#: options/preferences.py:90 +#: options/preferences.py msgid "Margin includes dissenters" msgstr "" -#: options/preferences.py:98 +#: options/preferences.py msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" msgstr "" -#: options/preferences.py:99 +#: options/preferences.py msgid "Team score includes ghosts" msgstr "" -#: options/preferences.py:106 options/templates/preferences_index.html:58 +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" msgstr "" -#: options/preferences.py:112 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" msgstr "La auto-colocación solo tendrá en cuenta jueces con o por debajo de este puntaje como panelistas con voto " -#: options/preferences.py:113 +#: options/preferences.py msgid "Minimum adjudicator score to vote" msgstr "Puntaje de juez mínimo para votar" -#: options/preferences.py:121 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" msgstr "" -#: options/preferences.py:122 +#: options/preferences.py msgid "Adjudicator conflict penalty" msgstr "" -#: options/preferences.py:130 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" msgstr "" -#: options/preferences.py:131 +#: options/preferences.py msgid "Adjudicator history penalty" msgstr "" -#: options/preferences.py:139 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" msgstr "" -#: options/preferences.py:140 +#: options/preferences.py msgid "Importance mismatch penalty" msgstr "" -#: options/preferences.py:148 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" msgstr "" -#: options/preferences.py:149 +#: options/preferences.py msgid "Team institution penalty" msgstr "Precio equipo-institución " -#: options/preferences.py:157 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" msgstr "" -#: options/preferences.py:158 +#: options/preferences.py msgid "Team history penalty" msgstr "" -#: options/preferences.py:166 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" msgstr "" -#: options/preferences.py:167 +#: options/preferences.py msgid "Avoid same institution" msgstr "Evitar la misma institución " -#: options/preferences.py:175 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" msgstr "" -#: options/preferences.py:176 +#: options/preferences.py msgid "Avoid team history" msgstr "" -#: options/preferences.py:184 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "Como se resuelven los agrupamientos impares (ver la documentación para más detalles)" -#: options/preferences.py:185 +#: options/preferences.py msgid "Odd bracket resolution method" msgstr "Método de resolución de agrupamientos impares" -#: options/preferences.py:189 +#: options/preferences.py msgid "Pull up from top" msgstr "" -#: options/preferences.py:190 +#: options/preferences.py msgid "Pull up from bottom" msgstr "" -#: options/preferences.py:191 +#: options/preferences.py msgid "Pull up from middle" msgstr "" -#: options/preferences.py:192 +#: options/preferences.py msgid "Pull up at random" msgstr "" -#: options/preferences.py:193 +#: options/preferences.py msgid "Intermediate brackets" msgstr "Agrupamientos intermedios " -#: options/preferences.py:194 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" msgstr "" -#: options/preferences.py:195 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" msgstr "Intermedio 1 (equipos previamente ubicados)" -#: options/preferences.py:196 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" msgstr "Intermedio 2 (equipos previamente ubicados)" -#: options/preferences.py:203 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" msgstr "Como se asignan las posiciones afirmativo/negativo (ver la documentación para más detalles)" -#: options/preferences.py:204 +#: options/preferences.py msgid "Side allocations method" msgstr "Método de ubicación de equipos" -#: options/preferences.py:208 options/preferences.py:225 +#: options/preferences.py msgid "Random" msgstr "Al azar" -#: options/preferences.py:209 +#: options/preferences.py msgid "Balance" msgstr "" -#: options/preferences.py:210 +#: options/preferences.py msgid "Pre-allocated" msgstr "Previamente ubicados" -#: options/preferences.py:211 +#: options/preferences.py msgid "Manually enter from ballot" msgstr "Ingreso manual del sorteo" -#: options/preferences.py:218 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." msgstr "" -#: options/preferences.py:219 +#: options/preferences.py msgid "Pairing method" msgstr "Método de emparejamiento " -#: options/preferences.py:223 +#: options/preferences.py msgid "Slide" msgstr "" -#: options/preferences.py:224 +#: options/preferences.py msgid "Fold" msgstr "" -#: options/preferences.py:226 +#: options/preferences.py msgid "Adjacent" msgstr "" -#: options/preferences.py:227 +#: options/preferences.py msgid "Fold top, adjacent rest" msgstr "" -#: options/preferences.py:234 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" msgstr "Método usado para tratar de evitar equipos enfrentados entre ellos o a su propia institución varias veces (Ver la documentación para más detalles)" -#: options/preferences.py:236 +#: options/preferences.py msgid "Conflict avoidance method" msgstr "" -#: options/preferences.py:240 +#: options/preferences.py msgid "Off" msgstr "" -#: options/preferences.py:241 +#: options/preferences.py msgid "One-up-one-down" msgstr "" -#: options/preferences.py:248 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "" -#: options/preferences.py:250 +#: options/preferences.py msgid "Pullup restriction" msgstr "" -#: options/preferences.py:254 +#: options/preferences.py msgid "No restriction" msgstr "Sin restricción " -#: options/preferences.py:255 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" msgstr "" -#: options/preferences.py:256 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" msgstr "" -#: options/preferences.py:257 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" msgstr "" -#: options/preferences.py:264 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." msgstr "" -#: options/preferences.py:265 +#: options/preferences.py msgid "BP pullup distribution" msgstr "" -#: options/preferences.py:269 +#: options/preferences.py msgid "Anywhere in bracket" msgstr "" -#: options/preferences.py:270 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" msgstr "" -#: options/preferences.py:277 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" msgstr "" -#: options/preferences.py:278 +#: options/preferences.py msgid "BP position cost" msgstr "" -#: options/preferences.py:282 +#: options/preferences.py msgid "Simple" msgstr "" -#: options/preferences.py:283 +#: options/preferences.py msgid "Rényi entropy" msgstr "Entropía de Rényi" -#: options/preferences.py:284 +#: options/preferences.py msgid "Population variance" msgstr "" -#: options/preferences.py:291 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." msgstr "" -#: options/preferences.py:294 +#: options/preferences.py msgid "Rényi order (BP)" msgstr "" -#: options/preferences.py:303 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." msgstr "" -#: options/preferences.py:306 +#: options/preferences.py msgid "BP position cost exponent" msgstr "" -#: options/preferences.py:315 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." msgstr "" -#: options/preferences.py:317 +#: options/preferences.py msgid "BP assignment method" msgstr "" -#: options/preferences.py:321 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" msgstr "" -#: options/preferences.py:322 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" msgstr "" -#: options/preferences.py:329 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" msgstr "" -#: options/preferences.py:330 +#: options/preferences.py msgid "Skip adjudicator check-ins" msgstr "" -#: options/preferences.py:338 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:339 +#: options/preferences.py msgid "No panellist adjudicators" msgstr "" -#: options/preferences.py:347 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" msgstr "" -#: options/preferences.py:348 +#: options/preferences.py msgid "No trainee adjudicators" msgstr "" -#: options/preferences.py:355 options/templates/preferences_index.html:73 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" msgstr "Retroalimentación" -#: options/preferences.py:361 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:362 +#: options/preferences.py msgid "Minimum adjudicator score" msgstr "" -#: options/preferences.py:370 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" msgstr "" -#: options/preferences.py:371 +#: options/preferences.py msgid "Maximum adjudicator score" msgstr "" -#: options/preferences.py:379 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" msgstr "" -#: options/preferences.py:380 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" msgstr "" -#: options/preferences.py:384 +#: options/preferences.py msgid "Chairs on panellists and trainees" msgstr "" -#: options/preferences.py:385 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" msgstr "" -#: options/preferences.py:386 +#: options/preferences.py msgid "Panellists and trainees on chairs, vice-versa" msgstr "" -#: options/preferences.py:387 +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" msgstr "" -#: options/preferences.py:394 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "" -#: options/preferences.py:395 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" msgstr "" -#: options/preferences.py:399 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" msgstr "" -#: options/preferences.py:400 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" msgstr "" -#: options/preferences.py:407 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" msgstr "" -#: options/preferences.py:408 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" msgstr "" -#: options/preferences.py:416 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" msgstr "" -#: options/preferences.py:417 +#: options/preferences.py msgid "Show unaccredited" msgstr "" -#: options/preferences.py:425 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" msgstr "" -#: options/preferences.py:426 +#: options/preferences.py msgid "Feedback introduction/explanation" msgstr "" -#: options/preferences.py:435 options/templates/preferences_index.html:63 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" msgstr "" -#: options/preferences.py:441 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" msgstr "" -#: options/preferences.py:442 +#: options/preferences.py msgid "Teams in debate" msgstr "" -#: options/preferences.py:446 +#: options/preferences.py msgid "Two-team format" msgstr "" -#: options/preferences.py:447 +#: options/preferences.py msgid "British Parliamentary (four teams)" msgstr "" -#: options/preferences.py:454 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:455 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" msgstr "" -#: options/preferences.py:459 options/preferences.py:472 +#: options/preferences.py msgid "One ballot per voting adjudicator" msgstr "" -#: options/preferences.py:460 options/preferences.py:473 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" msgstr "" -#: options/preferences.py:467 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." msgstr "" -#: options/preferences.py:468 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" msgstr "" -#: options/preferences.py:480 +#: options/preferences.py msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." msgstr "" -#: options/preferences.py:481 +#: options/preferences.py msgid "Winner Declaration in ballot(s)" msgstr "" -#: options/preferences.py:485 +#: options/preferences.py msgid "Do not require separate winner selection" msgstr "" -#: options/preferences.py:486 +#: options/preferences.py msgid "Require separate winner selection as a check on correct scores" msgstr "" -#: options/preferences.py:487 +#: options/preferences.py msgid "Require winner selection to break tied-point debates" msgstr "" -#: options/preferences.py:488 +#: options/preferences.py msgid "Require winner selection, overriding scores" msgstr "" -#: options/preferences.py:495 +#: options/preferences.py msgid "When ballots should ask for speaker scores." msgstr "" -#: options/preferences.py:496 +#: options/preferences.py msgid "Require speaker scores" msgstr "" -#: options/preferences.py:500 +#: options/preferences.py msgid "Always require speaker scores" msgstr "" -#: options/preferences.py:501 +#: options/preferences.py msgid "Only require speaker scores in preliminary rounds" msgstr "" -#: options/preferences.py:502 +#: options/preferences.py msgid "Never require speaker scores" msgstr "" -#: options/preferences.py:509 +#: options/preferences.py msgid "How many substantive speakers on a team" msgstr "" -#: options/preferences.py:510 +#: options/preferences.py msgid "Substantive speakers" msgstr "" -#: options/preferences.py:518 +#: options/preferences.py msgid "What to call the teams" msgstr "" -#: options/preferences.py:519 +#: options/preferences.py msgid "Side names" msgstr "" -#: options/preferences.py:528 +#: options/preferences.py msgid "Whether this style features scored reply speeches" msgstr "" -#: options/preferences.py:529 +#: options/preferences.py msgid "Reply scores" msgstr "" -#: options/preferences.py:537 +#: options/preferences.py msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" msgstr "" -#: options/preferences.py:538 +#: options/preferences.py msgid "Require reply speaker to have given a substantive speech" msgstr "" -#: options/preferences.py:545 options/templates/preferences_index.html:68 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "Clasificación" -#: options/preferences.py:551 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" msgstr "" -#: options/preferences.py:552 +#: options/preferences.py msgid "Speeches missable for standings eligibility" msgstr "" -#: options/preferences.py:560 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" msgstr "" -#: options/preferences.py:561 +#: options/preferences.py msgid "Replies missable for standings eligibility" msgstr "" -#: options/preferences.py:569 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" msgstr "" -#: options/preferences.py:570 +#: options/preferences.py msgid "Team standings precedence" msgstr "" -#: options/preferences.py:586 options/preferences.py:621 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" msgstr "" -#: options/preferences.py:592 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" msgstr "" -#: options/preferences.py:593 +#: options/preferences.py msgid "Team standings extra metrics" msgstr "" -#: options/preferences.py:604 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" msgstr "" -#: options/preferences.py:605 +#: options/preferences.py msgid "Speaker standings precedence" msgstr "" -#: options/preferences.py:627 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" msgstr "" -#: options/preferences.py:628 +#: options/preferences.py msgid "Speaker standings extra metrics" msgstr "" -#: options/preferences.py:638 options/templates/preferences_index.html:89 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" msgstr "" -#: options/preferences.py:644 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:645 +#: options/preferences.py msgid "Release team tab to public" msgstr "" -#: options/preferences.py:653 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." msgstr "" -#: options/preferences.py:654 +#: options/preferences.py msgid "Top teams cutoff" msgstr "" -#: options/preferences.py:662 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:663 +#: options/preferences.py msgid "Release speaker tab to public" msgstr "" -#: options/preferences.py:671 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." msgstr "" -#: options/preferences.py:672 +#: options/preferences.py msgid "Top speakers cutoff" msgstr "" -#: options/preferences.py:680 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." msgstr "" -#: options/preferences.py:681 +#: options/preferences.py msgid "Release replies tab to public" msgstr "" -#: options/preferences.py:689 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." msgstr "" -#: options/preferences.py:690 +#: options/preferences.py msgid "Top replies cutoff" msgstr "" -#: options/preferences.py:716 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." msgstr "" -#: options/preferences.py:719 +#: options/preferences.py msgid "Release motions tab to public" msgstr "" -#: options/preferences.py:727 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" msgstr "" -#: options/preferences.py:728 +#: options/preferences.py msgid "Release adjudicator tab to public" msgstr "" -#: options/preferences.py:736 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" msgstr "" -#: options/preferences.py:737 +#: options/preferences.py msgid "Adjudicator tab displays" msgstr "" -#: options/preferences.py:741 +#: options/preferences.py msgid "Only shows base score" msgstr "" -#: options/preferences.py:742 +#: options/preferences.py msgid "Only shows final score" msgstr "" -#: options/preferences.py:743 +#: options/preferences.py msgid "Shows base, final, and per-round scores" msgstr "" -#: options/preferences.py:750 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." msgstr "" -#: options/preferences.py:751 +#: options/preferences.py msgid "Release ballots to public" msgstr "" -#: options/preferences.py:759 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" msgstr "" -#: options/preferences.py:760 +#: options/preferences.py msgid "Release all round results to public" msgstr "" -#: options/preferences.py:768 +#: options/preferences.py msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." msgstr "" -#: options/preferences.py:769 +#: options/preferences.py msgid "Release ballots through private URLs" msgstr "" -#: options/preferences.py:776 options/templates/preferences_index.html:94 +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" msgstr "" -#: options/preferences.py:782 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" msgstr "" -#: options/preferences.py:783 +#: options/preferences.py msgid "Ballot submissions from adjudicators" msgstr "" -#: options/preferences.py:787 options/preferences.py:801 +#: options/preferences.py msgid "Disabled (tab staff only)" msgstr "" -#: options/preferences.py:788 options/preferences.py:802 +#: options/preferences.py msgid "Use private URLs" msgstr "" -#: options/preferences.py:789 options/preferences.py:803 +#: options/preferences.py msgid "Use publicly accessible form" msgstr "" -#: options/preferences.py:796 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" msgstr "" -#: options/preferences.py:797 +#: options/preferences.py msgid "Feedback submissions from participants" msgstr "" -#: options/preferences.py:810 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" msgstr "" -#: options/preferences.py:811 +#: options/preferences.py msgid "Require password for submission" msgstr "" -#: options/preferences.py:819 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" msgstr "" -#: options/preferences.py:820 +#: options/preferences.py msgid "Password for public submission" msgstr "" -#: options/preferences.py:828 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" msgstr "" -#: options/preferences.py:829 +#: options/preferences.py msgid "Bypass double checking" msgstr "" -#: options/preferences.py:837 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." msgstr "" -#: options/preferences.py:838 +#: options/preferences.py msgid "Enforce blind confirmations" msgstr "" -#: options/preferences.py:846 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." msgstr "" -#: options/preferences.py:849 +#: options/preferences.py msgid "Assistant user access" msgstr "" -#: options/preferences.py:854 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" msgstr "" -#: options/preferences.py:855 +#: options/preferences.py msgid "Just results entry and draw display" msgstr "" -#: options/preferences.py:856 +#: options/preferences.py msgid "Only results entry" msgstr "" -#: options/preferences.py:862 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." msgstr "" -#: options/preferences.py:863 +#: options/preferences.py msgid "Participant self-checkin" msgstr "" -#: options/preferences.py:871 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" msgstr "" -#: options/preferences.py:874 +#: options/preferences.py msgid "Check-In Window (People)" msgstr "" -#: options/preferences.py:880 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" msgstr "" -#: options/preferences.py:883 +#: options/preferences.py msgid "Check-In Window (Rooms)" msgstr "" -#: options/preferences.py:889 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" msgstr "" -#: options/preferences.py:890 +#: options/preferences.py msgid "Ballot Digit Checks" msgstr "" -#: options/preferences.py:898 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:899 +#: options/preferences.py msgid "Score return location" msgstr "" -#: options/preferences.py:907 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." msgstr "" -#: options/preferences.py:908 +#: options/preferences.py msgid "Feedback return location" msgstr "" -#: options/preferences.py:916 +#: options/preferences.py msgid "Lets debates have their status as postponed, as to not block draw generation." msgstr "" -#: options/preferences.py:917 +#: options/preferences.py msgid "Enable postponements" msgstr "" -#: options/preferences.py:925 +#: options/preferences.py msgid "Have each voting adjudicator submit a separate ballot." msgstr "" -#: options/preferences.py:926 +#: options/preferences.py msgid "Individual voting ballots" msgstr "" -#: options/preferences.py:933 options/templates/preferences_index.html:99 +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" msgstr "" -#: options/preferences.py:939 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" msgstr "" -#: options/preferences.py:940 +#: options/preferences.py msgid "Enable public view of participants list" msgstr "" -#: options/preferences.py:948 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" msgstr "" -#: options/preferences.py:949 +#: options/preferences.py msgid "Enable public view of institutions list" msgstr "" -#: options/preferences.py:957 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" msgstr "" -#: options/preferences.py:958 +#: options/preferences.py msgid "Enable public view of diversity info" msgstr "" -#: options/preferences.py:966 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." msgstr "" -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of the checkin statuses" msgstr "" -#: options/preferences.py:977 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" msgstr "" -#: options/preferences.py:978 +#: options/preferences.py msgid "Show break categories on participants page" msgstr "" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" msgstr "" -#: options/preferences.py:987 +#: options/preferences.py msgid "Show pre-allocated sides to public" msgstr "" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing released draws" msgstr "" -#: options/preferences.py:996 +#: options/preferences.py msgid "Enable public view of draw" msgstr "" -#: options/preferences.py:1000 +#: options/preferences.py msgid "Disabled" msgstr "" -#: options/preferences.py:1001 +#: options/preferences.py msgid "Show a single page for the current round's draw" msgstr "" -#: options/preferences.py:1002 +#: options/preferences.py msgid "Show individual pages for all released draws" msgstr "" -#: options/preferences.py:1009 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" msgstr "" -#: options/preferences.py:1010 +#: options/preferences.py msgid "Enable public view of results" msgstr "" -#: options/preferences.py:1018 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" msgstr "" -#: options/preferences.py:1019 +#: options/preferences.py msgid "Enable public view of motions" msgstr "" -#: options/preferences.py:1027 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" msgstr "" -#: options/preferences.py:1028 +#: options/preferences.py msgid "Enable public view of team standings" msgstr "" -#: options/preferences.py:1036 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" msgstr "" -#: options/preferences.py:1037 +#: options/preferences.py msgid "Enable public record pages" msgstr "" -#: options/preferences.py:1045 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1046 +#: options/preferences.py msgid "Release team breaks to public" msgstr "" -#: options/preferences.py:1054 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." msgstr "" -#: options/preferences.py:1055 +#: options/preferences.py msgid "Release adjudicators break to public" msgstr "" -#: options/preferences.py:1063 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" msgstr "" -#: options/preferences.py:1064 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" msgstr "" -#: options/preferences.py:1072 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." msgstr "" -#: options/preferences.py:1073 +#: options/preferences.py msgid "Tournament staff" msgstr "" -#: options/preferences.py:1083 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" msgstr "" -#: options/preferences.py:1084 +#: options/preferences.py msgid "Welcome message" msgstr "" -#: options/preferences.py:1093 options/templates/preferences_index.html:104 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" msgstr "" -#: options/preferences.py:1099 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" msgstr "" -#: options/preferences.py:1100 +#: options/preferences.py msgid "Show splitting adjudicators" msgstr "" -#: options/preferences.py:1108 +#: options/preferences.py msgid "Whether and how to use code names for teams" msgstr "" -#: options/preferences.py:1109 +#: options/preferences.py msgid "Team code names" msgstr "" -#: options/preferences.py:1114 +#: options/preferences.py msgid "Do not use code names" msgstr "" -#: options/preferences.py:1115 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" msgstr "" -#: options/preferences.py:1116 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" msgstr "" -#: options/preferences.py:1118 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" msgstr "" -#: options/preferences.py:1120 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" msgstr "" -#: options/preferences.py:1126 +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" msgstr "" -#: options/preferences.py:1127 +#: options/preferences.py msgid "Show emoji" msgstr "" -#: options/preferences.py:1135 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" msgstr "" -#: options/preferences.py:1136 +#: options/preferences.py msgid "Show team institutions" msgstr "" -#: options/preferences.py:1144 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" msgstr "" -#: options/preferences.py:1145 +#: options/preferences.py msgid "Show adjudicator institutions" msgstr "" -#: options/preferences.py:1153 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" msgstr "" -#: options/preferences.py:1154 +#: options/preferences.py msgid "Show speakers in draw" msgstr "" -#: options/preferences.py:1161 options/templates/preferences_index.html:109 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" msgstr "" -#: options/preferences.py:1167 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Reply-to name" msgstr "" -#: options/preferences.py:1176 +#: options/preferences.py msgid "The email address for handling replies" msgstr "" -#: options/preferences.py:1177 +#: options/preferences.py msgid "Reply-to address" msgstr "" -#: options/preferences.py:1185 +#: options/preferences.py msgid "A secret key to accept email status events" msgstr "" -#: options/preferences.py:1186 +#: options/preferences.py msgid "Email status secret key" msgstr "" -#: options/preferences.py:1196 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "" -#: options/preferences.py:1197 +#: options/preferences.py msgid "Ballot receipts" msgstr "" -#: options/preferences.py:1205 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "" -#: options/preferences.py:1207 +#: options/preferences.py msgid "Ballot receipt subject line" msgstr "" -#: options/preferences.py:1215 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "" -#: options/preferences.py:1216 +#: options/preferences.py msgid "Ballot receipt message" msgstr "" -#: options/preferences.py:1232 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1233 +#: options/preferences.py msgid "Team points subject line" msgstr "" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." msgstr "" -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team points message" msgstr "" -#: options/preferences.py:1250 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1251 +#: options/preferences.py msgid "Adjudicator draw subject line" msgstr "" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." msgstr "" -#: options/preferences.py:1259 +#: options/preferences.py msgid "Adjudicator draw message" msgstr "" -#: options/preferences.py:1268 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." msgstr "" -#: options/preferences.py:1269 +#: options/preferences.py msgid "Team draw subject line" msgstr "" -#: options/preferences.py:1276 options/preferences.py:1294 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1277 options/preferences.py:1295 +#: options/preferences.py msgid "Private URL notification message" msgstr "" -#: options/preferences.py:1286 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." msgstr "" -#: options/preferences.py:1287 +#: options/preferences.py msgid "Private URL notification subject line" msgstr "" -#: options/preferences.py:1308 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1309 +#: options/preferences.py msgid "Motion release notification subject line" msgstr "" -#: options/preferences.py:1316 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." msgstr "" -#: options/preferences.py:1317 +#: options/preferences.py msgid "Motion release notification message" msgstr "" -#: options/preferences.py:1325 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1326 +#: options/preferences.py msgid "Team registration notification subject line" msgstr "" -#: options/preferences.py:1333 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." msgstr "" -#: options/preferences.py:1334 +#: options/preferences.py msgid "Team registration notification message" msgstr "" -#: options/preferences.py:1343 options/templates/preferences_index.html:78 +#: options/preferences.py options/templates/preferences_index.html msgid "Motions" msgstr "Mociones" -#: options/preferences.py:1349 +#: options/preferences.py msgid "If checked, ballots require a motion to be entered" msgstr "" -#: options/preferences.py:1350 +#: options/preferences.py msgid "Enable motions" msgstr "" -#: options/preferences.py:1358 +#: options/preferences.py msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" msgstr "" -#: options/preferences.py:1359 +#: options/preferences.py msgid "Ballot Hide Motions" msgstr "" -#: options/preferences.py:1367 +#: options/preferences.py msgid "Enables the motion veto field on ballots, to track veto statistics" msgstr "" -#: options/preferences.py:1368 +#: options/preferences.py msgid "Motion vetoes" msgstr "" -#: options/preferences.py:1376 +#: options/preferences.py msgid "If showing results to public, show which motions were selected in the record" msgstr "" -#: options/preferences.py:1377 +#: options/preferences.py msgid "Show motions in results" msgstr "" -#: options/preferences.py:1385 +#: options/preferences.py msgid "Order in which are listed by round in the public view" msgstr "" -#: options/preferences.py:1386 +#: options/preferences.py msgid "Order to display motions" msgstr "" -#: options/preferences.py:1390 +#: options/preferences.py msgid "Earliest round first" msgstr "" -#: options/preferences.py:1391 +#: options/preferences.py msgid "Latest round first" msgstr "" -#: options/preferences.py:1398 +#: options/preferences.py msgid "Whether motions can be reused from one round to another." msgstr "" -#: options/preferences.py:1399 +#: options/preferences.py msgid "Allow motion reuse" msgstr "" -#: options/preferences.py:1406 options/templates/preferences_index.html:114 +#: options/preferences.py options/templates/preferences_index.html msgid "Global Settings" msgstr "" -#: options/preferences.py:1412 +#: options/preferences.py msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." msgstr "" -#: options/preferences.py:1413 +#: options/preferences.py msgid "Enable API access" msgstr "" -#: options/preferences.py:1421 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1422 +#: options/preferences.py msgid "Assistant account creation key" msgstr "" -#: options/preferences.py:1431 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "" -#: options/preferences.py:1433 +#: options/preferences.py msgid "Administrator account creation key" msgstr "" -#: options/presets.py:32 options/presets.py:324 +#: options/presets.py msgid "Public Information Options" msgstr "" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" msgstr "" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" msgstr "" -#: options/presets.py:74 +#: options/presets.py msgid "Australs Rules" msgstr "" -#: options/presets.py:75 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:114 +#: options/presets.py msgid "British Parliamentary Rules" msgstr "" -#: options/presets.py:115 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." msgstr "" -#: options/presets.py:157 +#: options/presets.py msgid "Canadian Parliamentary Rules" msgstr "" -#: options/presets.py:159 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." msgstr "" -#: options/presets.py:182 +#: options/presets.py msgid "Australian Easters Rules" msgstr "" -#: options/presets.py:184 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." msgstr "" -#: options/presets.py:202 +#: options/presets.py msgid "2 vs 2 Impromptu" msgstr "" -#: options/presets.py:204 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." msgstr "" -#: options/presets.py:229 +#: options/presets.py msgid "3 vs 3 Prepared" msgstr "" -#: options/presets.py:231 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." msgstr "" -#: options/presets.py:258 +#: options/presets.py msgid "UADC Rules" msgstr "" -#: options/presets.py:260 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:296 +#: options/presets.py msgid "WSDC Rules" msgstr "" -#: options/presets.py:298 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "" -#: options/presets.py:326 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "" -#: options/presets.py:338 +#: options/presets.py msgid "Tab Release Options" msgstr "" -#: options/presets.py:340 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" msgstr "" -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html msgid "Configuration" msgstr "Parámetros" -#: options/templates/preferences_index.html:11 +#: options/templates/preferences_index.html #, python-format msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." msgstr "" -#: options/templates/preferences_index.html:24 +#: options/templates/preferences_index.html #, python-format msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." msgstr "" -#: options/templates/preferences_index.html:35 +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." msgstr "" -#: options/templates/preferences_index.html:54 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" msgstr "" -#: options/templates/preferences_index.html:59 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" msgstr "" -#: options/templates/preferences_index.html:64 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" msgstr "" -#: options/templates/preferences_index.html:69 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" msgstr "" -#: options/templates/preferences_index.html:74 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" msgstr "" -#: options/templates/preferences_index.html:79 +#: options/templates/preferences_index.html msgid "How and where are motions used" msgstr "" -#: options/templates/preferences_index.html:90 +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" msgstr "" -#: options/templates/preferences_index.html:95 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" msgstr "" -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" msgstr "" -#: options/templates/preferences_index.html:105 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" msgstr "" -#: options/templates/preferences_index.html:110 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" msgstr "" -#: options/templates/preferences_index.html:115 +#: options/templates/preferences_index.html msgid "Settings which can affect all tournaments on the site" msgstr "" -#: options/templates/preferences_index.html:127 +#: options/templates/preferences_index.html msgid "Manually Set Current Round" msgstr "" -#: options/templates/preferences_index.html:128 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." msgstr "" -#: options/templates/preferences_index.html:132 -msgid "Set Round Weights" +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: options/templates/preferences_index.html:133 +#: options/templates/preferences_index.html msgid "Rounds can be weighted so that certain rounds are worth more team points." msgstr "" -#: options/templates/preferences_index.html:140 +#: options/templates/preferences_index.html msgid "Presets" msgstr "" -#: options/templates/preferences_index.html:141 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." msgstr "" -#: options/templates/preferences_index.html:152 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" msgstr "" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" msgstr "" -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" msgstr "" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" msgstr "" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" msgstr "" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" msgstr "" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" msgstr "" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" msgstr "" -#: options/views.py:65 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." msgstr "" -#: options/views.py:111 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." msgstr "" diff --git a/tabbycat/participants/locale/es/LC_MESSAGES/django.po b/tabbycat/participants/locale/es/LC_MESSAGES/django.po index be68d32daaa..6ede92380c5 100644 --- a/tabbycat/participants/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -18,960 +18,947 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 942\n" -#: participants/admin.py:96 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" msgstr "El equipo no puede estar en una categoría de break en un torneo diferente. Por favor elimina: %(category)s" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." msgstr[0] "" msgstr[1] "" -#: participants/admin.py:152 participants/admin.py:233 -msgid "Delete URL key" -msgstr "Borrar clave URL" +#: participants/admin.py +msgid "Reset emoji" +msgstr "" -#: participants/admin.py:160 +#: participants/admin.py #, python-format msgid "%(count)d team had their emoji reset." msgid_plural "%(count)d teams had their emojis reset." msgstr[0] "" msgstr[1] "" -#: participants/admin.py:164 -msgid "Reset emoji" +#: participants/admin.py +msgid "Reset code name" msgstr "" -#: participants/admin.py:170 +#: participants/admin.py #, python-format msgid "%(count)d team had their code name reset." msgid_plural "%(count)d teams had their code names reset." msgstr[0] "" msgstr[1] "" -#: participants/admin.py:174 -msgid "Reset code name" -msgstr "" - -#: participants/admin.py:228 +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." msgstr[0] "a %(count)d juez se le ha quitado su clave URL" msgstr[1] "a %(count)d jueces se les han quitado sus claves URL" -#: participants/apps.py:7 participants/views.py:41 +#: participants/apps.py participants/views.py msgid "Participants" msgstr "Participantes" -#: participants/models.py:21 participants/models.py:37 -#: participants/models.py:66 participants/models.py:96 +#: participants/models.py msgid "name" msgstr "nombre" -#: participants/models.py:24 participants/models.py:45 +#: participants/models.py msgid "region" msgstr "región" -#: participants/models.py:25 +#: participants/models.py msgid "regions" msgstr "regiones" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:39 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" msgstr "El nombre completo de la institución, ej: \"Universidad del Rosario\", \"Universidad de Cambridge\"" -#: participants/models.py:41 +#: participants/models.py msgid "code" msgstr "código" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:43 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" msgstr "Cómo es llamada la institución típicamente, ej: \"El Rosario\", \"Cambridge\"" -#: participants/models.py:55 participants/models.py:155 -#: participants/models.py:353 +#: participants/models.py msgid "institution" msgstr "institución" -#: participants/models.py:56 +#: participants/models.py msgid "institutions" msgstr "instituciones" -#: participants/models.py:64 participants/models.py:157 -#: participants/models.py:356 +#: participants/models.py msgid "tournament" msgstr "torneo" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:68 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" msgstr "Nombre para mostrar, ej: \"Novato\", \"ESL\"" -#: participants/models.py:70 +#: participants/models.py msgid "slug" msgstr "" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:72 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" msgstr "" -#: participants/models.py:74 +#: participants/models.py msgid "sequence number" msgstr "número de secuencia" -#: participants/models.py:75 +#: participants/models.py msgid "The order in which the categories are displayed" msgstr "El orden en que se muestran las categorías" -#: participants/models.py:77 +#: participants/models.py msgid "limit" msgstr "limite" -#: participants/models.py:78 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" msgstr "Se mostrarán como máximo este número de oradores en el tab público, o use 0 para no poner un límite" -#: participants/models.py:80 +#: participants/models.py msgid "public" msgstr "público" -#: participants/models.py:81 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" msgstr "Si está marcada, esta categoría se incluirá en las pestañas de la categoría del orador que se muestran al público" -#: participants/models.py:87 +#: participants/models.py msgid "speaker category" msgstr "categoría del orador" -#: participants/models.py:88 participants/models.py:330 +#: participants/models.py msgid "speaker categories" msgstr "categorías del orador" -#: participants/models.py:98 +#: participants/models.py msgid "email address" msgstr "" -#: participants/models.py:100 +#: participants/models.py msgid "phone" msgstr "teléfono" -#: participants/models.py:102 +#: participants/models.py msgid "anonymous" msgstr "anónimo" -#: participants/models.py:103 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" msgstr "Las personas anónimas tendrán su nombre y equipo redactado en las publicaciones de tab públicas" -#: participants/models.py:106 +#: participants/models.py +msgid "code name" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py msgid "URL key" msgstr "clave URL" -#: participants/models.py:111 +#: participants/models.py msgid "male" msgstr "hombre" -#: participants/models.py:112 +#: participants/models.py msgid "female" msgstr "mujer" -#: participants/models.py:113 +#: participants/models.py msgid "other" msgstr "otro" -#: participants/models.py:115 +#: participants/models.py msgid "gender" msgstr "género" -#: participants/models.py:116 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" msgstr "El género solo se muestra en la interfaz de jueces, y en ningún otro lugar" -#: participants/models.py:118 +#: participants/models.py msgid "pronoun" msgstr "pronombre" -#: participants/models.py:119 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" msgstr "Si imprime las ballots usando Tabbycat, existe la opción de preimprimir pronombres" -#: participants/models.py:122 +#: participants/models.py msgid "person" msgstr "persona" -#: participants/models.py:123 +#: participants/models.py msgid "persons" msgstr "personas" -#: participants/models.py:138 +#: participants/models.py msgid "full name/suffix" msgstr "nombre/sufijo completo" -#: participants/models.py:139 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" msgstr "No incluya el nombre de la institución (consulte \"usos del prefijo institucional\" más adelante)" -#: participants/models.py:141 +#: participants/models.py msgid "short name/suffix" msgstr "nombre/sufijo corto" -#: participants/models.py:142 +#: participants/models.py msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" msgstr "" -#: participants/models.py:144 -msgid "code name" -msgstr "" - -#: participants/models.py:145 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" msgstr "" -#: participants/models.py:148 +#: participants/models.py msgid "short name" msgstr "nombre corto" -#: participants/models.py:149 +#: participants/models.py msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" msgstr "" -#: participants/models.py:151 +#: participants/models.py msgid "long name" msgstr "nombre largo" -#: participants/models.py:152 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" msgstr "El nombre completo del equipo, incluyendo el nombre de la institución. (Esto es autogenerado.)" -#: participants/models.py:159 +#: participants/models.py msgid "Uses institutional prefix" msgstr "Usos del prefijo institucional" -#: participants/models.py:160 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" msgstr "Si está marcado, un equipo llamado \"1\" de Victoria se mostrará como \"Victoria 1\"" -#: participants/models.py:162 +#: participants/models.py msgid "break categories" msgstr "categorias de break" -#: participants/models.py:167 participants/models.py:364 +#: participants/models.py msgid "institution conflicts" msgstr "conflictos de institución" -#: participants/models.py:178 +#: participants/models.py msgid "none" msgstr "ninguna" -#: participants/models.py:179 +#: participants/models.py msgid "swing" msgstr "" -#: participants/models.py:180 +#: participants/models.py msgid "composite" msgstr "compuesto" -#: participants/models.py:181 +#: participants/models.py msgid "bye" msgstr "adiós" -#: participants/models.py:184 +#: participants/models.py msgid "type" msgstr "tipo" -#: participants/models.py:188 +#: participants/models.py msgid "emoji" msgstr "" -#: participants/models.py:202 participants/models.py:328 +#: participants/models.py msgid "team" msgstr "equipo" -#: participants/models.py:203 +#: participants/models.py msgid "teams" msgstr "equipos" -#: participants/models.py:311 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." msgstr "Los equipos deben tener una institución si están usando el prefijo institucional." -#: participants/models.py:313 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." msgstr "Los equipos deben tener un nombre completo si no usan el prefijo institucional." -#: participants/models.py:315 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." msgstr "Los equipos deben tener un nombre corto si no usan el prefijo institucional." -#: participants/models.py:333 +#: participants/models.py msgid "speaker" msgstr "orador" -#: participants/models.py:334 +#: participants/models.py msgid "speakers" msgstr "oradores" -#: participants/models.py:357 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" msgstr "Los jueces que no están asignados a ningún torneo pueden compartirse entre torneos" -#: participants/models.py:359 +#: participants/models.py msgid "base score" msgstr "" -#: participants/models.py:368 +#: participants/models.py msgid "team conflicts" msgstr "conflictos de equipo" -#: participants/models.py:372 +#: participants/models.py msgid "adjudicator conflicts" msgstr "" -#: participants/models.py:375 +#: participants/models.py msgid "always trainee" msgstr "trainee siempre (a.k.a. PittaⓉ)" -#: participants/models.py:376 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" msgstr "Si se selecciona, este juez nunca se asignará automáticamente a un puesto con voto, independientemente de su puntaje" -#: participants/models.py:378 +#: participants/models.py msgid "breaking" msgstr "pasando el break" -#: participants/models.py:380 +#: participants/models.py msgid "independent" msgstr "independiente" -#: participants/models.py:382 +#: participants/models.py msgid "adjudication core" msgstr "adjudicación" -#: participants/models.py:391 +#: participants/models.py msgid "adjudicator" msgstr "juez" -#: participants/models.py:392 +#: participants/models.py msgid "adjudicators" msgstr "jueces" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" msgstr "Puntos luego de este debate" -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" msgstr "Rondas ganadas después de este debate" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" msgstr "Puntajes de orador
    (en orden de intervención)" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" msgstr "Discursos" -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" msgstr "Sobre %(name)s" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" msgstr "" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" msgstr "" -#: participants/templates/adjudicator_registration_card.html:27 -#: participants/templates/team_registration_card.html:89 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" msgstr "Institución:" -#: participants/templates/adjudicator_registration_card.html:31 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" msgstr "" -#: participants/templates/adjudicator_registration_card.html:36 -#: participants/templates/team_registration_card.html:98 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "Región:" -#: participants/templates/adjudicator_registration_card.html:43 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." msgstr "" -#: participants/templates/adjudicator_registration_card.html:50 -#: participants/templates/team_registration_card.html:109 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:52 -#: participants/templates/team_registration_card.html:111 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr "" -#: participants/templates/adjudicator_registration_card.html:54 -#: participants/templates/adjudicator_registration_card.html:62 -#: participants/templates/adjudicator_registration_card.html:74 -#: participants/templates/adjudicator_registration_card.html:84 -#: participants/templates/team_registration_card.html:58 -#: participants/templates/team_registration_card.html:70 -#: participants/templates/team_registration_card.html:79 -#: participants/templates/team_registration_card.html:113 -#: participants/templates/team_registration_card.html:122 -#: participants/templates/team_registration_card.html:133 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" msgstr "" -#: participants/templates/adjudicator_registration_card.html:58 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:60 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:71 -#: participants/templates/adjudicator_registration_card.html:82 -#: participants/templates/team_registration_card.html:56 -#: participants/templates/team_registration_card.html:68 -#: participants/templates/team_registration_card.html:77 -#: participants/templates/team_registration_card.html:120 -#: participants/templates/team_registration_card.html:131 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr "" -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/team_registration_card.html:118 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" msgstr "" -#: participants/templates/adjudicator_registration_card.html:80 -#: participants/templates/team_registration_card.html:129 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" msgstr "Limitaciones de sala:" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." msgstr "Alerta: si hay objetos que pertenezcan al grupo “equipo de debate”, tal vez no deberías borrar este%(object_name)s" -#: participants/templates/admin/participants/delete_debateteam_warning.html:14 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." msgstr "Alerta: si hay objetos que pertenezcan al grupo “equipo de debate”, tal vez no deberías borrar estos %(objects_name)s." #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:21 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." msgstr "" -#: participants/templates/admin/participants/delete_debateteam_warning.html:33 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." msgstr "Note que borrar una institución también borra todos los equipos de esta institución." -#: participants/templates/admin/participants/delete_debateteam_warning.html:41 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "Si está muy seguro de borrar este%(object_name)s, por favor borre los objetos de arriba primero, y asegúrese de prestar especial atención a la advertencia que verá la página de objetos “equipo de debate” antes de proceder. " -#: participants/templates/admin/participants/delete_debateteam_warning.html:47 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "Si está muy seguro de borrar estos %(objects_name)s, por favor borre los objetos de arriba primero, y asegúrese de prestar especial atención a la advertencia que verá la página de objetos “equipo de debate” antes de proceder. " -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "" -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" msgstr "La ronda empieza en %(start_time)s" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "Equipos:" -#: participants/templates/current_round/common.html:28 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "Juez" msgstr[1] "Jueces:" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" msgstr "" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" msgstr "" -#: participants/templates/current_round/common.html:44 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." msgstr "No hay jueces panelistas o trainees asignados a este debate." -#: participants/templates/current_round/common.html:54 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." msgstr "Las mociones no son liberadas al público" -#: participants/templates/current_round/common.html:57 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "Moción:" -#: participants/templates/current_round/common.html:61 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "Moción %(seq)s:" -#: participants/templates/current_round/common.html:69 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." msgstr "La moción (o mociones) para esta ronda no ha sido liberada." -#: participants/templates/current_round/round_adj.html:14 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s es el juez principal y adjudica a %(aff)s contra %(neg)s en %(room)s." -#: participants/templates/current_round/round_adj.html:18 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s es el juez principal y adjudica a %(aff)scontra%(neg)sen %(room)s." -#: participants/templates/current_round/round_adj.html:24 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:28 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:36 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s es juez %(type)s y adjudica a %(aff)s contra %(neg)s en %(room)s." -#: participants/templates/current_round/round_adj.html:40 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s es juez %(type)s y adjudica a %(aff)scontra%(neg)sen%(room)s." -#: participants/templates/current_round/round_adj.html:46 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:50 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s adjudica a %(aff)s contra %(neg)s en %(room)s." -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "%(adjudicator)s adjudica a %(aff)s contra %(neg)s en %(room)s." -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:85 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "%(adjudicator)s es el juez principal y adjudica en %(room)s." -#: participants/templates/current_round/round_adj.html:89 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "%(adjudicator)s es el juez principal y adjudica en %(room)s." -#: participants/templates/current_round/round_adj.html:95 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:99 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:107 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "%(adjudicator)s es juez %(type)s y adjudica en %(room)s." -#: participants/templates/current_round/round_adj.html:111 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "%(adjudicator)s es juez %(type)s y adjudica en %(room)s." -#: participants/templates/current_round/round_adj.html:117 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:121 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:129 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "%(adjudicator)s adjudica en %(room)s." -#: participants/templates/current_round/round_adj.html:133 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "%(adjudicator)s adjudica en %(room)s." -#: participants/templates/current_round/round_adj.html:139 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_adj.html:143 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating against %(opponent)s." msgstr "" -#: participants/templates/current_round/round_team.html:39 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:43 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team." msgstr "" -#: participants/templates/current_round/round_team.html:56 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:60 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:66 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/current_round/round_team.html:70 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "" -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." msgstr "Parece que no hay ninguna categoría de oradores definida. Si quisiera producir tabs por categorías de los oradores, tales como novato o ESL, use la página Categorías de Oradores para definirlas, lego regrese a esta página para configurar la elegibilidad del orador." -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" msgstr "Devoluciones de retroalimentación" -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" msgstr "Ha enviado retroalimentación para %(adjudicator)s" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" msgstr "No ha enviado retroalimentación para uno de: %(adjudicators)s(el que dio la retroalimentación oral)" -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" msgstr "No ha enviado retroalimentación para %(adjudicator)s" -#: participants/templates/feedback_progress_panel.html:38 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" msgstr "Hay más envíos de retroalimentación de los esperados para este debate:" -#: participants/templates/feedback_progress_panel.html:46 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" msgstr "envío de retroalimentación inesperado para %(adjudicator)s" -#: participants/templates/feedback_progress_panel.html:53 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." msgstr "%(name)s no tiene ninguna retroalimentación por enviar." -#: participants/templates/in_this_round.html:9 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" msgstr "En Esta Ronda (%(round)s)" -#: participants/templates/in_this_round.html:13 +#: participants/templates/in_this_round.html msgid "In This Round" msgstr "" -#: participants/templates/in_this_round.html:16 +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" msgstr "(No Lanzado al Público)" -#: participants/templates/in_this_round.html:23 +#: participants/templates/in_this_round.html msgid "Room TBA" msgstr "" -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." msgstr "%(adjudicator)s no adjudicará en esta ronda." -#: participants/templates/in_this_round.html:39 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." msgstr "" -#: participants/templates/in_this_round.html:54 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." msgstr[0] "" msgstr[1] "" -#: participants/templates/in_this_round.html:60 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." msgstr "" -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." msgstr "%(team)s no tiene debate esta ronda." -#: participants/templates/in_this_round.html:79 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." msgstr "" -#: participants/templates/in_this_round.html:91 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." msgstr "El enfrentamiento de esta ronda aún no se ha lanzado." -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" msgstr "Lista de Participantes" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" msgstr "" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." msgstr "" -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" msgstr "" -#: participants/templates/participants_subnav.html:26 participants/views.py:135 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" msgstr "Nombres en clave" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" msgstr "Categorías de Orador" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" msgstr "Elegibilidad del Orador" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." msgstr "Las categorías de orador permiten producir tabs específicos por categoría, ej., para las categorías novatos o ESL. En esta página, puede definir que categorías de orador existen. DEspués de definir las categorías, puede configurar la elegibilidad del orador en la página de Eligibilidad del Orador." -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." msgstr "Si quiere eliminar categorías de oradores, use la área Editar Base de Datos." -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" msgstr "Guardar Categorías de Orador" -#: participants/templates/team_registration_card.html:16 +#: participants/templates/team_registration_card.html msgid "Team name:" msgstr "" -#: participants/templates/team_registration_card.html:21 +#: participants/templates/team_registration_card.html msgid "Full team name:" msgstr "" -#: participants/templates/team_registration_card.html:25 +#: participants/templates/team_registration_card.html msgid "Short team name:" msgstr "" -#: participants/templates/team_registration_card.html:32 +#: participants/templates/team_registration_card.html msgid "Code name:" msgstr "" -#: participants/templates/team_registration_card.html:36 +#: participants/templates/team_registration_card.html msgid "No code name assigned" msgstr "" -#: participants/templates/team_registration_card.html:42 +#: participants/templates/team_registration_card.html msgid "Emoji:" msgstr "" -#: participants/templates/team_registration_card.html:46 +#: participants/templates/team_registration_card.html msgid "No emoji assigned" msgstr "" -#: participants/templates/team_registration_card.html:54 +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "Oradores:" -#: participants/templates/team_registration_card.html:66 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" msgstr "Elegible para categorías de break:" -#: participants/templates/team_registration_card.html:75 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" msgstr "" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" msgstr "" -#: participants/views.py:46 +#: participants/views.py msgid "Adjudicators" msgstr "Jueces" -#: participants/views.py:55 +#: participants/views.py msgid "Speakers" msgstr "Oradores" -#: participants/views.py:86 +#: participants/views.py msgid "Institutions" msgstr "Instituciones" -#: participants/views.py:102 +#: participants/views.py msgid "Code" msgstr "" -#: participants/views.py:103 +#: participants/views.py msgid "Full name" msgstr "" -#: participants/views.py:105 +#: participants/views.py msgid "Region" msgstr "" -#: participants/views.py:107 +#: participants/views.py msgid "Teams" msgstr "Equipos" -#: participants/views.py:107 +#: participants/views.py msgid "Number of teams" msgstr "" -#: participants/views.py:109 +#: participants/views.py msgid "Adjs" msgstr "" -#: participants/views.py:110 +#: participants/views.py msgid "Number of adjudicators, excluding independents" msgstr "" -#: participants/views.py:112 +#: participants/views.py msgid "IAs" msgstr "" -#: participants/views.py:113 +#: participants/views.py msgid "Number of independent adjudicators" msgstr "" -#: participants/views.py:143 +#: participants/views.py msgid "Code name" msgstr "" -#: participants/views.py:163 +#: participants/views.py msgid "Team Registration" msgstr "" -#: participants/views.py:231 +#: participants/views.py msgid "Results" msgstr "Resultados" -#: participants/views.py:239 participants/views.py:264 +#: participants/views.py #, python-format msgid "Record for %(name)s" msgstr "Registro para %(name)s" -#: participants/views.py:261 +#: participants/views.py msgid "Previous Rounds" msgstr "Rondas Previas" -#: participants/views.py:352 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" msgstr[0] "Categoría guardada: %(list)s" msgstr[1] "Categorías guardadas: %(list)s" -#: participants/views.py:358 +#: participants/views.py msgid "No changes were made to the categories." msgstr "Ningún cambio fue hecho a las categorías." -#: participants/views.py:371 +#: participants/views.py msgid "Speaker Category Eligibility" msgstr "Elegibilidad de Categorías de Oradores" diff --git a/tabbycat/printing/locale/es/LC_MESSAGES/django.po b/tabbycat/printing/locale/es/LC_MESSAGES/django.po index c9010ff3c6f..61d69ee486b 100644 --- a/tabbycat/printing/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:18\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -18,109 +18,108 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" msgstr "Formularios de Feedback" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" msgstr "Formularios de Feedback imprimibles para %(round)s" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." msgstr "Ninguna pregunta de feedback ha sido añadidas para que jueces o equipos respondan." -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." msgstr "Ninguna pregunta de feedback ha sido añadida para que equipos respondan." -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." msgstr "Ninguna pregunta de feedback ha sido añadida para que jueces respondan." -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." -msgstr "%(first_sentence)s Checkea la documentación para encontrar información sobre como añadir estas (de otra manera estos formularios estarán vacíos)." +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgstr "" -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" msgstr "" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" msgstr "" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." msgstr "" -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" msgstr "" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" msgstr "" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" msgstr "" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" msgstr "para %(round)s" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" msgstr "" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" msgstr "" -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" msgstr "" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "" -#: printing/templates/scoresheet_list.html:47 +#: printing/templates/scoresheet_list.html msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." msgstr "" -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" msgstr "" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." msgstr "" -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" msgstr "Puntaje general" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" msgstr "" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "Equipo" diff --git a/tabbycat/privateurls/locale/es/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/es/LC_MESSAGES/django.po index b27358006ab..fc7bdb9d6da 100644 --- a/tabbycat/privateurls/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:50\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -18,169 +18,162 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" msgstr "Manejo de links Privados" -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:145 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" msgstr "URLs privadas" -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." msgstr "" -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" msgstr "" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." msgstr "" -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." msgstr "" -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." msgstr "No hay URLs privadas asignadas." -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" msgstr "Generar URLs privadas" -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" msgstr "Ver URLs" -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." msgstr "" -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." msgstr "" -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" msgstr "" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." msgstr "" -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" msgstr "" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" msgstr "" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" msgstr "" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" msgstr "" -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." msgstr "" -#: privateurls/templates/public_url_landing.html:62 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Submit Ballot for %(round)s" msgstr "" -#: privateurls/templates/public_url_landing.html:65 -msgid "There are no current rounds" -msgstr "" - -#: privateurls/templates/public_url_landing.html:71 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" msgstr "" -#: privateurls/templates/public_url_landing.html:84 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" msgstr "" -#: privateurls/views.py:63 privateurls/views.py:164 +#: privateurls/views.py msgid "no URL" msgstr "" -#: privateurls/views.py:76 +#: privateurls/views.py msgid "URL" msgstr "" -#: privateurls/views.py:87 +#: privateurls/views.py msgid "Speakers" msgstr "Oradores" -#: privateurls/views.py:97 +#: privateurls/views.py msgid "Adjudicators" msgstr "Jueces" -#: privateurls/views.py:119 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." msgstr "" -#: privateurls/views.py:126 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." msgstr[0] "" msgstr[1] "" -#: privateurls/views.py:131 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." msgstr[0] "" msgstr[1] "" -#: privateurls/views.py:172 +#: privateurls/views.py msgid "URL Key" msgstr "" -#: privateurls/views.py:181 +#: privateurls/views.py msgid "Debates" msgstr "" diff --git a/tabbycat/results/locale/es/LC_MESSAGES/django.po b/tabbycat/results/locale/es/LC_MESSAGES/django.po index cfe4d22e8b4..b0ba7326d6d 100644 --- a/tabbycat/results/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:14\n" "Last-Translator: philip_tc\n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -18,892 +18,886 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 948\n" -#: results/admin.py:44 +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py #, python-format msgid "Resaved results for %(count)d ballot submission." msgid_plural "Resaved results for %(count)d ballot submissions." msgstr[0] "" msgstr[1] "" -#: results/admin.py:47 -msgid "Resave results" -msgstr "" - -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:158 +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" msgstr "Resultados" -#: results/forms.py:39 +#: results/forms.py msgid "Tournament password" msgstr "" -#: results/forms.py:45 +#: results/forms.py msgid "That password isn't correct." msgstr "La contraseña no es correcta." -#: results/forms.py:77 +#: results/forms.py msgid "Please enter a whole number." msgstr "Por favor ingrese un número entero" -#: results/forms.py:79 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." msgstr "Por favor ingrese un número múltiplo de %s." -#: results/forms.py:166 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." msgstr "La configuración de la ballot no puede ser descartada y confirmada al mismo tiempo." -#: results/forms.py:173 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." msgstr "El estatus del debate no puede ser confirmado sin que un conjunto de ballots este confirmado." -#: results/forms.py:302 results/forms.py:336 +#: results/forms.py msgid "---------" msgstr "" -#: results/forms.py:304 results/forms.py:306 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" msgstr "" -#: results/forms.py:323 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" msgstr "" -#: results/forms.py:332 results/forms.py:901 +#: results/forms.py #, python-format msgid "%(team)s (%(side)s)" msgstr "%(team)s(%(side)s)" -#: results/forms.py:335 +#: results/forms.py msgid "Winner" msgstr "" -#: results/forms.py:489 +#: results/forms.py msgid "Mark as a duplicate speech" msgstr "" -#: results/forms.py:549 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." msgstr "" -#: results/forms.py:563 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." msgstr[0] "" msgstr[1] "" -#: results/forms.py:580 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." msgstr "El último orador propositivo y el orador de replica no pueden ser el mismo" -#: results/forms.py:587 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." msgstr "El orador de replica de este equipo no dio un discurso propositivo" -#: results/forms.py:719 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." msgstr "Los puntajes de equipo para los equipos son el mismo (i.e hay un empate)" -#: results/forms.py:724 +#: results/forms.py msgid "The declared winner does not correspond to the team with the highest score." msgstr "" -#: results/forms.py:733 +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" msgstr "Los puntajes totales para los siguientes equipos son el mismo:\n" "%(teams)s" -#: results/forms.py:743 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "El margen (%(margin).1f) excede el margen máximo permitido (%(max_margin).1f)" -#: results/forms.py:846 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." msgstr "Los puntajes de equipo son los mismos (i.e. hay un empate) para el adjudicar %(adjudicator)s." -#: results/forms.py:851 +#: results/forms.py #, python-format msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." msgstr "" -#: results/forms.py:859 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "El margen (%(margin).1f) en la ballot del adjudicador %(adjudicator)s excede el margen máximo permitido (%(max_margin).1f)." -#: results/forms.py:921 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." msgstr "Los bancadas para este debate no están confirmadas. No pueden guardar los resultadas de este debate hasta que las bancadas hallan sido confirmadas en el enfrentamiento." -#: results/forms.py:964 +#: results/forms.py #, python-format msgid "There must be exactly %(n)d team advancing." msgid_plural "There must be exactly %(n)d teams advancing." msgstr[0] "" msgstr[1] "" -#: results/forms.py:1007 +#: results/forms.py msgid "There must be exactly 1 team advancing." msgstr "" -#: results/models.py:33 +#: results/models.py msgid "Tab room" msgstr "Sala de tabulación" -#: results/models.py:34 +#: results/models.py msgid "Public" msgstr "Publico" -#: results/models.py:38 +#: results/models.py msgid "timestamp" msgstr "marca de tiempo" -#: results/models.py:40 +#: results/models.py msgid "version" msgstr "verión " -#: results/models.py:42 +#: results/models.py msgid "submitter type" msgstr "" -#: results/models.py:44 +#: results/models.py msgid "confirmed" msgstr "confirmado" -#: results/models.py:48 +#: results/models.py msgid "from private URL" msgstr "" -#: results/models.py:51 +#: results/models.py msgid "from participant" msgstr "" -#: results/models.py:56 +#: results/models.py msgid "submitter" msgstr "" -#: results/models.py:59 +#: results/models.py msgid "confirmer" msgstr "" -#: results/models.py:61 +#: results/models.py msgid "confirm timestamp" msgstr "" -#: results/models.py:63 +#: results/models.py msgid "IP address" msgstr "Dirección IP" -#: results/models.py:103 +#: results/models.py msgid "A tab room ballot must have a user associated." msgstr "Una ballot de la sala de tabulación debe tener un usuario asociado." -#: results/models.py:111 +#: results/models.py msgid "debate" msgstr "" -#: results/models.py:113 +#: results/models.py msgid "motion" msgstr "moción" -#: results/models.py:115 +#: results/models.py msgid "discarded" msgstr "descartada" -#: results/models.py:117 +#: results/models.py msgid "single adjudicator" msgstr "" -#: results/models.py:118 +#: results/models.py msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." msgstr "" -#: results/models.py:123 results/models.py:228 results/models.py:267 -#: results/models.py:305 results/models.py:347 +#: results/models.py msgid "ballot submission" msgstr "Envío de la ballot" -#: results/models.py:124 +#: results/models.py msgid "ballot submissions" msgstr "Envíos de la ballor" -#: results/models.py:143 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" msgstr "El debate esta en la ronda %(round)d pero la moción (%(motion)s) es de la ronda %(motion_round)d" -#: results/models.py:150 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" msgstr "¡Una ballot no puede ser confirmada y descartada al mismo tiempo!" -#: results/models.py:230 results/models.py:269 +#: results/models.py msgid "debate adjudicator" msgstr "adjudicador del debate" -#: results/models.py:232 results/models.py:271 results/models.py:307 -#: results/models.py:349 +#: results/models.py msgid "debate team" msgstr "equipo de debate" -#: results/models.py:235 results/models.py:312 +#: results/models.py msgid "win" msgstr "ganar" -#: results/models.py:237 results/models.py:314 +#: results/models.py msgid "margin" msgstr "margen " -#: results/models.py:239 results/models.py:272 results/models.py:316 -#: results/models.py:352 +#: results/models.py msgid "score" msgstr "puntajes" -#: results/models.py:244 +#: results/models.py msgid "team score by adjudicator" msgstr "" -#: results/models.py:245 +#: results/models.py msgid "team scores by adjudicator" msgstr "" -#: results/models.py:260 results/models.py:294 +#: results/models.py msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." msgstr "El equipo de debate, adjudicador del debate y el envío de la ballot deben estar todos relacionados al mismo debate." -#: results/models.py:273 results/models.py:353 +#: results/models.py msgid "position" msgstr "posición" -#: results/models.py:279 +#: results/models.py msgid "speaker score by adjudicator" msgstr "puntaje de orador por el juez" -#: results/models.py:280 +#: results/models.py msgid "speaker scores by adjudicator" msgstr "puntajes de orador por el juez" -#: results/models.py:310 +#: results/models.py msgid "points" msgstr "puntos" -#: results/models.py:318 +#: results/models.py msgid "votes given" msgstr "votos dados" -#: results/models.py:320 +#: results/models.py msgid "votes possible" msgstr "votos posibles" -#: results/models.py:324 +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py msgid "team score" msgstr "puntaje de equipo" -#: results/models.py:325 +#: results/models.py msgid "team scores" msgstr "puntajes de equipo" -#: results/models.py:351 +#: results/models.py msgid "speaker" msgstr "orador" -#: results/models.py:355 +#: results/models.py msgid "ghost" msgstr "fantasma" -#: results/models.py:356 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." msgstr "Si se marca, este puntaje no contara para la tabla de oradores. Esto es usualmente marcado para discursos donde alguno habló dos veces cubrir un compañero de debate ausente (algunas veces conocido como discursos de \"iron-person o \"iron man\")." -#: results/models.py:365 +#: results/models.py msgid "speaker score" msgstr "puntaje de orador" -#: results/models.py:366 +#: results/models.py msgid "speaker scores" msgstr "puntajes de orador" -#: results/models.py:375 +#: results/models.py msgid "The debate team and speaker must be from the same team." msgstr "El equipo y el orador deben pertenecer al mismo equipo." -#: results/models.py:378 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." msgstr "El ingreso de la ballot y el debate deben estar relacionados con el mismo debate." -#: results/tables.py:15 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" msgstr "" -#: results/tables.py:36 +#: results/tables.py msgid "Status of this debate's ballot" msgstr "Estado de la ballot de este debate" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" msgstr "Mostrar el enfrentamiento " -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" msgstr "" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" msgstr "" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" msgstr "" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" msgstr "" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the current round" msgstr "" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" msgstr "" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" msgstr "" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." msgstr "" -#: results/templates/admin_results.html:88 +#: results/templates/admin_results.html #, python-format msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." msgstr[0] "" msgstr[1] "" -#: results/templates/admin_results.html:94 +#: results/templates/admin_results.html #, python-format msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." msgstr "" -#: results/templates/admin_results.html:113 +#: results/templates/admin_results.html msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." msgstr "" -#: results/templates/admin_results.html:127 +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." msgstr "La configuración de este torneo es Parlamento Británico con una ballot por juez con voto. Esta combinación no es permitida: los torneos con formato PB deben usar ballots por consenso. Los resultados no pueden ser introducidos mientras se mantenga esta configuración. Por favor revise la configuración de este torneo antes de intentar introducir resultados. " -#: results/templates/admin_results.html:135 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." msgstr "Actualmente no hay mociones para esta ronde, por lo que los resultados de debate no se pueden introducir. Añada mociones." -#: results/templates/admin_results.html:144 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/admin_results.html:151 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." msgstr "" -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:12 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" msgstr "Regresar a Resultados Generales" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:17 -#: results/templates/ballot_entry_base.html:21 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" msgstr "Crear nuevas ballots para este debate" -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." msgstr "No puede confirmar estas ballots porque usted las introdujo." -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html msgid "Confirm results" msgstr "Confirmar los resultados " -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" msgstr "Los resultados son incorrectos " -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:68 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." msgstr "" -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 results/views.py:513 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" msgstr "Entrar resultados " -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "" -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." msgstr "La configuración de este torneo está ajustada a Parlamentario Británico con una ballor por adjudicar con voto . Está combinación no está permitida: Los torneos BP deben usar ballots de consenso. Los resultados no pueden ser ingresados mientras esta configuración este. Por favor pregunte a un administrador para que cambie esta configuración." -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "Ahora no hay mociones ingresadas para esta ronda, entonces los resultados del debate no pueden ser ingresados. Por favor pregunte a un administrador que añada mociones." -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." msgstr[0] "" msgstr[1] "" -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr[0] "" msgstr[1] "" -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:42 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" msgstr "" -#: results/templates/ballot/ballot_debate_info.html:45 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" msgstr "" -#: results/templates/ballot/ballot_set.html:6 +#: results/templates/ballot/ballot_set.html msgid "There are some problems with this scoresheet. Please review and correct them." msgstr "" -#: results/templates/ballot/ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s (%(institution)s)" msgstr "" -#: results/templates/ballot/ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s" msgstr "" -#: results/templates/ballot/ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html msgid "Scoresheet" msgstr "" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Solo Chair" msgstr "" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Chair" msgstr "" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Panellist" msgstr "" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Trainee" msgstr "" -#: results/templates/ballot/ballot_set.html:44 +#: results/templates/ballot/ballot_set.html msgid "Assign sides before entering scores" msgstr "" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." msgstr "" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "There is %(number)s existing ballot set for this debate." msgid_plural "There are %(number)s existing ballot sets for this debate." msgstr[0] "" msgstr[1] "" -#: results/templates/ballot/other_ballots_list.html:21 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." msgstr "" -#: results/templates/ballot/other_ballots_list.html:26 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." msgstr "" -#: results/templates/ballot/other_ballots_list.html:41 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:45 +#: results/templates/ballot/other_ballots_list.html msgid "MERGING" msgstr "" -#: results/templates/ballot/other_ballots_list.html:48 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:53 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:58 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from %(adjudicator)s's private URL," msgstr "" -#: results/templates/ballot/other_ballots_list.html:62 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," msgstr "" -#: results/templates/ballot/other_ballots_list.html:68 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," msgstr "" -#: results/templates/ballot/other_ballots_list.html:73 +#: results/templates/ballot/other_ballots_list.html msgid "unknown" msgstr "" -#: results/templates/ballot/other_ballots_list.html:74 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "confirmed by %(confirmer)s" msgstr "" -#: results/templates/ballot/other_ballots_list.html:78 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" msgstr "" -#: results/templates/ballot/other_ballots_list.html:82 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" msgstr "" -#: results/templates/ballot/other_ballots_list.html:86 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" msgstr[0] "" msgstr[1] "" -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." msgstr "" -#: results/templates/ballot_entry_base.html:30 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr "" -#: results/templates/ballot_entry_base.html:41 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." msgstr "" -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" msgstr "" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" msgstr "" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" msgstr "" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" msgstr "" -#: results/templates/debate_postponement_form.html:3 +#: results/templates/debate_postponement_form.html msgid "Postponed" msgstr "" -#: results/templates/debate_postponement_form.html:8 +#: results/templates/debate_postponement_form.html msgid "Postpone" msgstr "" -#: results/templates/enter_results.html:15 +#: results/templates/enter_results.html msgid "Ballot Status" msgstr "" -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" msgstr "" -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" msgstr "" -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" msgstr "" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" msgstr "" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" msgstr "" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "" -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." msgstr "" -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" msgstr "" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." msgstr "" -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" msgstr "Entrar la ballot" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" msgstr "" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" msgstr "" -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." msgstr "" -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" msgstr "" -#: results/templates/public_ballot_set.html:28 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" msgstr "" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" msgstr "" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" msgstr "" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" msgstr "" -#: results/templates/public_ballot_set.html:92 -#: results/templates/public_ballot_set.html:96 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:105 -#: results/templates/public_ballot_set.html:109 +#: results/templates/public_ballot_set.html #, python-format msgid "%(name)s (%(side)s)" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Won" msgstr "" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Lost" msgstr "" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set_error.html #, python-format msgid "Back to the tournament home page." msgstr "" -#: results/templates/public_enter_results.html:9 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" msgstr "" -#: results/templates/public_enter_results.html:16 +#: results/templates/public_enter_results.html msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." msgstr "" -#: results/templates/public_enter_results.html:24 +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." msgstr[0] "" msgstr[1] "" -#: results/templates/public_enter_results.html:63 -msgid "Submit Ballot(s)" -msgstr "" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" +msgstr[1] "" -#: results/templates/public_enter_results.html:65 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "" -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" msgstr "" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" msgstr "No hay resultados que ingresar" -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" msgstr "Ver por equipo" -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" msgstr "Ver por Debate" -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" msgstr "Resultados ronda %(round)s" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" msgstr "" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." msgstr "" -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." msgstr "" -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" msgstr "No hay ballot" -#: results/utils.py:19 +#: results/utils.py msgid "Debate was Postponed" msgstr "" -#: results/utils.py:20 +#: results/utils.py msgid "Ballot is Unconfirmed" msgstr "La ballot está sin confirmar" -#: results/utils.py:21 +#: results/utils.py msgid "Ballot is Confirmed" msgstr "La ballot está confirmada" #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:36 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" msgstr "%(team)s como %(side)s" -#: results/utils.py:43 +#: results/utils.py #, python-format msgid "%(team)s (%(side)s) won" msgstr "" #. Translators: The team here is the losing team -#: results/utils.py:45 +#: results/utils.py #, python-format msgid "vs %(team)s (%(side)s)" msgstr "" -#: results/utils.py:47 +#: results/utils.py #, python-format msgid "Advancing: %(advancing_list)s
    " msgstr "" -#: results/utils.py:50 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" msgstr "Eliminado: %(eliminated_list)s" -#: results/utils.py:58 +#: results/utils.py #, python-format msgid "1st: %(first_team)s
    " msgstr "" -#: results/utils.py:59 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" @@ -912,190 +906,190 @@ msgstr "2do: %(second_team)s
    \n" "3ro: %(third_team)s
    \n" "4to: %(fourth_team)s" -#: results/utils.py:74 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" msgstr "Error con el resultado de %(debate)s" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:134 +#: results/utils.py msgid "PM" msgstr "" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:136 +#: results/utils.py msgid "DPM" msgstr "VPM" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:138 +#: results/utils.py msgid "LO" msgstr "" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:140 +#: results/utils.py msgid "DLO" msgstr "VLO" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:142 +#: results/utils.py msgid "MG" msgstr "" #. Translators: Abbreviation for Government Whip -#: results/utils.py:144 +#: results/utils.py msgid "GW" msgstr "LG" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:146 +#: results/utils.py msgid "MO" msgstr "" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:148 +#: results/utils.py msgid "OW" msgstr "LO" -#: results/utils.py:168 +#: results/utils.py msgid "Reply" msgstr "Respuesta" -#: results/views.py:270 results/views.py:272 +#: results/views.py msgid " vs " msgstr "vs" -#: results/views.py:273 +#: results/views.py #, python-format msgid "%(matchup)s: %(round)s @ %(room)s" msgstr "" -#: results/views.py:275 +#: results/views.py msgid "N/A" msgstr "" -#: results/views.py:408 +#: results/views.py msgid "New Ballot Set" msgstr "" -#: results/views.py:411 +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." msgstr "Configuración de la ballot para la sala %(debate)s agregada." -#: results/views.py:413 results/views.py:480 +#: results/views.py msgid " Email receipts queued to be sent." msgstr "" -#: results/views.py:427 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." msgstr "¡Upssss! El debate %(debate)s no tiene juez principal, por eso no pedes ingresar los resultados. Por favor contacta al equipo de tabulación. " -#: results/views.py:433 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." msgstr "¡Upsss! El debate %(debate)s no tiene asignaciones confirmadas, por eso no puedes ingresar los resultados." -#: results/views.py:459 +#: results/views.py msgid "Edit Ballot Set" msgstr "" -#: results/views.py:473 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." msgstr "Configuración de la ballot %(matchup)s descartada." -#: results/views.py:475 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." msgstr "Configuración de la ballot %(matchup)s confirmada." -#: results/views.py:477 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." msgstr "Modificaciones de la ballot %(matchup)s guardadas." -#: results/views.py:528 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." msgstr "Gracias, %(user)s Tu ballot de %(debate)s ha sido guardada." -#: results/views.py:535 +#: results/views.py msgid "The draw for this round hasn't been released yet." msgstr "La asignación de salas para esta ronda no ha sido anunciada aún." -#: results/views.py:539 +#: results/views.py msgid "The motions for this round haven't been released yet." msgstr "La moción para esta ronda no ha sido anunciada aún." -#: results/views.py:544 +#: results/views.py msgid "It looks like you don't have a debate this round." msgstr "Parece que no fuiste asignado a ningún debate en esta ronda." -#: results/views.py:546 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." msgstr "Parece que fuiste asignado a dos o más debates en esta ronda. Por favor contacta al equipo de tabulación." -#: results/views.py:573 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." msgstr "Tu debate no tiene juez principal, por eso no pedes ingresar los resultados. Por favor contacta al equipo de tabulación." -#: results/views.py:578 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." msgstr "Al parecer las asignaciones para este debate no han sido confirmadas, por eso no puedes ingresar los resultados. Por favor contacta al equipo de tabulación." -#: results/views.py:689 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." msgstr "" -#: results/views.py:707 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." msgstr "" -#: results/views.py:710 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." msgstr "" -#: results/views.py:714 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." msgstr "" -#: results/views.py:717 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." msgstr "" -#: results/views.py:739 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." msgstr "" -#: results/views.py:805 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" msgstr "" -#: results/views.py:809 +#: results/views.py msgid "Adjudicator" msgstr "" -#: results/views.py:846 +#: results/views.py msgid "Merge Ballots" msgstr "" -#: results/views.py:877 +#: results/views.py msgid "The speaking order in the ballots is inconsistent, so could not be merged." msgstr "" -#: results/views.py:879 +#: results/views.py msgid "Duplicate speeches are marked inconsistently, so could not be merged." msgstr "" -#: results/views.py:880 +#: results/views.py #, python-format msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." msgstr "" diff --git a/tabbycat/standings/locale/es/LC_MESSAGES/django.po b/tabbycat/standings/locale/es/LC_MESSAGES/django.po index 6454fcb30a8..ec16493bbb4 100644 --- a/tabbycat/standings/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-29 23:49-0400\n" -"PO-Revision-Date: 2020-12-30 04:09\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:01\n" "Last-Translator: philip_tc\n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -18,604 +18,595 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 950\n" -#: standings/base.py:297 +#: standings/base.py msgid "The same metric would be added twice:" msgstr "La misma métrica se agregaría dos veces:" -#: standings/base.py:298 +#: standings/base.py msgid "The same ranking would be added twice:" msgstr "" -#: standings/base.py:414 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" msgstr "Código de métrica no reconocido: \"%(code)s\"" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" msgstr "Todos" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" msgstr "" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" msgstr "" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" msgstr "Todos los oradores" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" msgstr "" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "Principales" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" msgstr "Panelistas" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" msgstr "Trainee" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" msgstr "Calificación promedio" -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" msgstr "Calificación mediana" -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" msgstr "Calificación del cuartil superior" -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" msgstr "Calificación del cuartil inferior" -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" msgstr "Calificación promedio de los equipos" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" msgstr "Calificación promedio de los principales" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" msgstr "Calificación promedio de los panelistas" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" msgstr "Calificación promedio de los trainee" -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" msgstr "Puntaje promedio" -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" msgstr "Puntaje mediano" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" msgstr "Puntaje del cuartil superior" -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" msgstr "Puntaje del cuartil inferior" -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" msgstr "" -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" msgstr "" -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" msgstr "Promedio puntajes finales" -#: standings/speakers.py:50 standings/speakers.py:106 +#: standings/speakers.py msgid "total" msgstr "" -#: standings/speakers.py:51 standings/speakers.py:107 +#: standings/speakers.py msgid "Total" msgstr "" -#: standings/speakers.py:58 standings/speakers.py:116 +#: standings/speakers.py msgid "average" msgstr "promedio" -#: standings/speakers.py:59 standings/speakers.py:117 +#: standings/speakers.py msgid "Avg" msgstr "Prom." -#: standings/speakers.py:66 +#: standings/speakers.py msgid "team points" msgstr "" -#: standings/speakers.py:67 +#: standings/speakers.py msgid "Team" msgstr "" -#: standings/speakers.py:89 standings/speakers.py:126 +#: standings/speakers.py msgid "standard deviation" msgstr "desviación estándar" -#: standings/speakers.py:90 standings/speakers.py:127 +#: standings/speakers.py msgid "Stdev" msgstr "Desv. est." -#: standings/speakers.py:98 +#: standings/speakers.py msgid "number of speeches given" msgstr "número de discursos dados" -#: standings/speakers.py:99 standings/speakers.py:138 +#: standings/speakers.py msgid "Num" msgstr "Num." -#: standings/speakers.py:137 +#: standings/speakers.py msgid "replies given" msgstr "respuestas dadas" -#: standings/speakers.py:147 +#: standings/speakers.py msgid "trimmed mean (high-low drop)" msgstr "media recortada" -#: standings/speakers.py:148 +#: standings/speakers.py msgid "Trim" msgstr "Recorte" -#: standings/teams.py:62 +#: standings/teams.py msgid "points" msgstr "puntos" -#: standings/teams.py:63 +#: standings/teams.py msgid "Pts" msgstr "Pts." -#: standings/teams.py:76 +#: standings/teams.py msgid "wins" msgstr "" -#: standings/teams.py:77 standings/views.py:592 +#: standings/teams.py standings/views.py msgid "Wins" msgstr "" -#: standings/teams.py:87 +#: standings/teams.py msgid "total speaker score" msgstr "" -#: standings/teams.py:88 +#: standings/teams.py msgid "Spk" msgstr "" -#: standings/teams.py:97 +#: standings/teams.py msgid "average total speaker score" msgstr "" -#: standings/teams.py:98 +#: standings/teams.py msgid "ATSS" msgstr "" -#: standings/teams.py:107 +#: standings/teams.py msgid "speaker score standard deviation" msgstr "" -#: standings/teams.py:108 +#: standings/teams.py msgid "SSD" msgstr "" -#: standings/teams.py:118 +#: standings/teams.py msgid "sum of margins" msgstr "" -#: standings/teams.py:119 +#: standings/teams.py msgid "Marg" msgstr "" -#: standings/teams.py:128 +#: standings/teams.py msgid "average margin" msgstr "" -#: standings/teams.py:129 +#: standings/teams.py msgid "AWM" msgstr "" -#: standings/teams.py:138 +#: standings/teams.py msgid "average individual speaker score" msgstr "" -#: standings/teams.py:139 +#: standings/teams.py msgid "AISS" msgstr "" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by wins" msgstr "" -#: standings/teams.py:212 +#: standings/teams.py msgid "DS" msgstr "" -#: standings/teams.py:219 +#: standings/teams.py msgid "draw strength by total speaker score" msgstr "" -#: standings/teams.py:220 +#: standings/teams.py msgid "DSS" msgstr "" -#: standings/teams.py:231 +#: standings/teams.py msgid "number of pullups before this round" msgstr "" -#: standings/teams.py:232 +#: standings/teams.py msgid "PU" msgstr "" -#: standings/teams.py:254 +#: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "" -#: standings/teams.py:255 +#: standings/teams.py msgid "Ballots" msgstr "" -#: standings/teams.py:256 +#: standings/teams.py msgid "votes/ballots carried" msgstr "" -#: standings/teams.py:280 +#: standings/teams.py msgid "number of firsts" msgstr "" -#: standings/teams.py:281 +#: standings/teams.py msgid "1sts" msgstr "" -#: standings/teams.py:290 +#: standings/teams.py msgid "number of seconds" msgstr "" -#: standings/teams.py:291 +#: standings/teams.py msgid "2nds" msgstr "" -#: standings/teams.py:300 +#: standings/teams.py msgid "number of thirds" msgstr "" -#: standings/teams.py:301 +#: standings/teams.py msgid "3rds" msgstr "" -#: standings/teams.py:313 +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py msgid "Who-beat-whom" msgstr "" -#: standings/teams.py:314 +#: standings/teams.py msgid "WBW" msgstr "" -#: standings/teams.py:315 +#: standings/teams.py msgid "who-beat-whom" msgstr "" -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." msgstr "" -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." msgstr "" -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." msgstr "" -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." msgstr "" -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." msgstr "" -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." msgstr "" -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." msgstr "" -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." msgstr "" -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." msgstr "" -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." msgstr "" -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." msgstr "" -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" msgstr "" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." msgstr "" -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" msgstr "" -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" msgstr "" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" msgstr "" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" msgstr "Clasificación" -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" msgstr "" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:152 -#: standings/templates/standings_index.html:167 -#: standings/templates/standings_index.html:186 +#: standings/templates/standings_index.html msgid "No data yet" msgstr "" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" msgstr "" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" msgstr "" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" msgstr "" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" msgstr "" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" msgstr "" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" msgstr "" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" msgstr "" -#: standings/templates/standings_index.html:177 +#: standings/templates/standings_index.html msgid "Average Speaks" msgstr "" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" msgstr "" -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "Equipos" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" msgstr "Todos" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" msgstr "Oradores" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" msgstr "" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" msgstr "Todos" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "" -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" msgstr "" -#: standings/templates/standings_menu.html:63 -#: standings/templates/standings_menu.html:76 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "Mociones" -#: standings/templates/standings_menu.html:66 +#: standings/templates/standings_menu.html msgid "By Round" msgstr "" -#: standings/templates/standings_menu.html:81 +#: standings/templates/standings_menu.html msgid "Diversity" msgstr "Diversidad" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." msgstr "" -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " msgstr "" -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " msgstr "" -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " msgstr "" -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" msgstr "" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" msgstr "" -#: standings/views.py:208 standings/views.py:428 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." msgstr "" -#: standings/views.py:290 +#: standings/views.py msgid "Speaker Standings" msgstr "" -#: standings/views.py:326 +#: standings/views.py msgid "Speaker Tab" msgstr "Tabla de oradores" -#: standings/views.py:341 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" msgstr "" -#: standings/views.py:359 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" msgstr "Tabla de oradores de %(category)s" -#: standings/views.py:372 +#: standings/views.py msgid "Reply Speaker Standings" msgstr "" -#: standings/views.py:380 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." msgstr "" -#: standings/views.py:408 +#: standings/views.py msgid "Reply Speaker Tab" msgstr "" -#: standings/views.py:420 standings/views.py:669 +#: standings/views.py msgid "Team Standings" msgstr "" -#: standings/views.py:499 +#: standings/views.py msgid "Team Tab" msgstr "Tabla de equipos" -#: standings/views.py:518 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" msgstr "" -#: standings/views.py:545 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" msgstr "Tabla de equipos de %(category)s" -#: standings/views.py:556 +#: standings/views.py msgid "Current Team Standings" msgstr "" -#: standings/views.py:592 +#: standings/views.py msgid "Points" msgstr "Puntos" -#: standings/views.py:638 +#: standings/views.py msgid "Feedback Overview" msgstr "" -#: standings/views.py:655 -msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." msgstr "" diff --git a/tabbycat/tournaments/locale/es/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/es/LC_MESSAGES/django.po index 42db69ea26d..19b29c52817 100644 --- a/tabbycat/tournaments/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -18,1026 +18,1016 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "Torneos" -#: tournaments/forms.py:29 +#: tournaments/forms.py msgid "Number of preliminary rounds" msgstr "Número de rondas preliminares" -#: tournaments/forms.py:34 +#: tournaments/forms.py msgid "Number of teams in the open break" msgstr "Número de equipos en el break del abierto" -#: tournaments/forms.py:35 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." msgstr "Dejar en blanco si no hay rondas después del break." -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Did you agree with their decision?" msgstr "" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Agree?" msgstr "" -#: tournaments/forms.py:47 +#: tournaments/forms.py msgid "Comments" msgstr "" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:61 +#: tournaments/forms.py msgid "Open" msgstr "Abierto" -#: tournaments/forms.py:86 +#: tournaments/forms.py msgid "Format Configuration" msgstr "Configuración del Formato" -#: tournaments/forms.py:87 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" msgstr "" -#: tournaments/forms.py:91 +#: tournaments/forms.py msgid "Public Configuration" msgstr "Configuración Pública" -#: tournaments/forms.py:92 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" msgstr "" -#: tournaments/forms.py:99 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" msgstr "" -#: tournaments/forms.py:195 +#: tournaments/forms.py msgid "Current preliminary round" msgstr "" -#: tournaments/forms.py:196 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" msgstr "" -#: tournaments/forms.py:208 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" msgstr "" -#: tournaments/forms.py:214 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" msgstr "" -#: tournaments/forms.py:226 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." msgstr "" -#: tournaments/forms.py:232 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." msgstr "" -#: tournaments/forms.py:267 +#: tournaments/forms.py #, python-format msgid "%(name)s (%(abbreviation)s)" msgstr "" -#: tournaments/mixins.py:109 +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." msgstr "" -#: tournaments/mixins.py:117 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." msgstr "" -#: tournaments/mixins.py:130 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." msgstr "Ha sido redirigido a esta página debido a un problema con la asignación de equipos de este debate." -#: tournaments/mixins.py:137 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." msgstr "Hay un problema sobre como los equipos que fueron asignados en este debate. El jefe de tabulación debe resolver este problema." -#: tournaments/mixins.py:236 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" msgstr "para %(round)s" -#: tournaments/mixins.py:437 +#: tournaments/mixins.py msgid "Return to Draw" msgstr "" -#: tournaments/models.py:26 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." msgstr "" -#: tournaments/models.py:33 tournaments/models.py:320 +#: tournaments/models.py msgid "name" msgstr "nombre" -#: tournaments/models.py:34 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" msgstr "" -#: tournaments/models.py:36 +#: tournaments/models.py msgid "short name" msgstr "nombre corto" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" msgstr "" -#: tournaments/models.py:39 tournaments/models.py:314 +#: tournaments/models.py msgid "sequence number" msgstr "número de secuencia" -#: tournaments/models.py:40 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." msgstr "" -#: tournaments/models.py:42 +#: tournaments/models.py msgid "slug" msgstr "" -#: tournaments/models.py:43 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" msgstr "" -#: tournaments/models.py:44 +#: tournaments/models.py msgid "active" msgstr "activo" -#: tournaments/models.py:47 tournaments/models.py:313 +#: tournaments/models.py msgid "tournament" msgstr "torneo" -#: tournaments/models.py:48 +#: tournaments/models.py msgid "tournaments" msgstr "torneos" -#: tournaments/models.py:285 +#: tournaments/models.py msgid "Random" msgstr "Al azar" -#: tournaments/models.py:286 +#: tournaments/models.py msgid "Manual" msgstr "" -#: tournaments/models.py:287 +#: tournaments/models.py msgid "Round-robin" msgstr "" -#: tournaments/models.py:288 +#: tournaments/models.py msgid "Power-paired" msgstr "" -#: tournaments/models.py:289 tournaments/models.py:296 +#: tournaments/models.py msgid "Elimination" msgstr "Eliminación" -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Preliminary" msgstr "Preliminar" -#: tournaments/models.py:305 +#: tournaments/models.py msgid "None" msgstr "" -#: tournaments/models.py:306 +#: tournaments/models.py msgid "Draft" msgstr "Borrador" -#: tournaments/models.py:307 +#: tournaments/models.py msgid "Confirmed" msgstr "Confirmado" -#: tournaments/models.py:308 +#: tournaments/models.py msgid "Released" msgstr "Publicado" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" msgstr "" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "completed" msgstr "" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" msgstr "" -#: tournaments/models.py:320 +#: tournaments/models.py msgid "e.g. \"Round 1\"" msgstr "ej: \"Ronda 1\"" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "abbreviation" msgstr "" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "e.g. \"R1\"" msgstr "ej: \"R1\"" -#: tournaments/models.py:323 +#: tournaments/models.py msgid "stage" msgstr "" -#: tournaments/models.py:324 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" msgstr "" -#: tournaments/models.py:326 +#: tournaments/models.py msgid "draw type" msgstr "" -#: tournaments/models.py:327 +#: tournaments/models.py msgid "Which draw method to use" msgstr "" -#: tournaments/models.py:330 +#: tournaments/models.py msgid "break category" msgstr "" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "If elimination round, which break category" msgstr "" -#: tournaments/models.py:334 +#: tournaments/models.py msgid "draw status" msgstr "" -#: tournaments/models.py:335 +#: tournaments/models.py msgid "The status of this round's draw" msgstr "" -#: tournaments/models.py:338 +#: tournaments/models.py msgid "feedback weight" msgstr "" -#: tournaments/models.py:340 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." msgstr "" #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:343 +#: tournaments/models.py msgid "silent" msgstr "" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." msgstr "" -#: tournaments/models.py:346 +#: tournaments/models.py msgid "motions released" msgstr "moción publicada" -#: tournaments/models.py:347 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" msgstr "" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "starts at" msgstr "comienza a las" -#: tournaments/models.py:351 +#: tournaments/models.py msgid "weight" msgstr "" -#: tournaments/models.py:352 +#: tournaments/models.py msgid "A factor for the points received in the round. For example, if 2, all points are doubled." msgstr "" -#: tournaments/models.py:355 +#: tournaments/models.py msgid "round" msgstr "ronda" -#: tournaments/models.py:356 +#: tournaments/models.py msgid "rounds" msgstr "rondas" -#: tournaments/models.py:369 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:372 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." msgstr "" -#: tournaments/models.py:377 +#: tournaments/models.py msgid "Elimination rounds must have a break category." msgstr "" -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" msgstr "" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" msgstr "Visión general" -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" msgstr "ronda actual: %(round)s, situación: %(status)s" -#: tournaments/templates/blank_site_start.html:7 -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" msgstr "Bienvenido a Tabbycat!" -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." msgstr "" -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." msgstr "" -#: tournaments/templates/blank_site_start.html:32 +#: tournaments/templates/blank_site_start.html msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." msgstr "" -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" msgstr "Crear cuenta" -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" msgstr "Configurar torneo %(tournament)s" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." msgstr "" -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" msgstr "Configurar Torneo" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" msgstr "Crear un Torneo Nuevo" -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." -msgstr "Tabbycat es gratis para utilizar para los torneos sin fines de lucro y sin fines de racaudación de fondos. Si su torneo tiene fines de lucro o racaudación de fondos, obsérverse que un pago es necesario. Para más detalles, ve el acuerdo de licencia de Tabbycat." +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgstr "" -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" msgstr "" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." msgstr "" -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" msgstr "" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." msgstr "" -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" msgstr "Crear Torneo" -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" msgstr "" -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" msgstr "" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." msgstr "" -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." msgstr "" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." msgstr "" -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." msgstr "" -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." msgstr "" -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" msgstr "ID del Debate" -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" +msgid "Teams on %(side)s" msgstr "" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" msgstr "" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" msgstr "" -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" msgstr "" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." msgstr "" -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" msgstr "Bienvenidos al %(tournament)s" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." msgstr "" -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" msgstr "Tabla de equipos" -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" msgstr "Tabla de equipos de %(category)s" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" msgstr "Tabla de oradores" -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" msgstr "Tabla de oradores de %(category)s" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" msgstr "" -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" msgstr "Tabla de jueces" -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" msgstr "Tabla de mociones" -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" msgstr "Lados" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:203 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" msgstr "Enfrentamientos para %(round)s" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" msgstr "" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" msgstr "" -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" msgstr "Chequeo" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" msgstr "Resultados" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "Mociones" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" msgstr "Clasificación de equipos" -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" msgstr "Break de %(category)s" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" msgstr "Jueces que pasan el break" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" msgstr "Diversidad" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" msgstr "Participantes" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" msgstr "Instituciones" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" msgstr "" -#: tournaments/templates/public_tournament_index.html:188 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Enter Ballot for %(round)s" msgstr "" -#: tournaments/templates/public_tournament_index.html:195 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" msgstr "" -#: tournaments/templates/public_tournament_index.html:217 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" msgstr "" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" msgstr "" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" msgstr "" -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." msgstr "" -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" msgstr "" -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" msgstr "" -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" msgstr "" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" msgstr "" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" msgstr "" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" msgstr "" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." msgstr[0] "" msgstr[1] "" -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" msgstr "" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." msgstr[0] "" msgstr[1] "" -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " msgstr "" -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "" -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" msgstr "Configurar ronda actual" -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" msgstr "" -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." msgstr "" -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "El torneo %(tournament)s no tiene rondas. Necesitas agregar rondas y asociarlas con este torneo antes de poder configurar la ronda actual." -#: tournaments/templates/set_round_weights.html:4 -#: tournaments/templates/set_round_weights.html:5 +#: tournaments/templates/set_round_weights.html msgctxt "page title" -msgid "Set Round Weights" +msgid "Set Round Weights for Tapered Scoring" msgstr "" -#: tournaments/templates/set_round_weights.html:8 +#: tournaments/templates/set_round_weights.html msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." msgstr "" -#: tournaments/templates/set_round_weights.html:41 +#: tournaments/templates/set_round_weights.html msgctxt "button" msgid "Set weights" msgstr "" -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:47 -msgid "Inactive Tournaments" -msgstr "" - -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/site_index.html msgid "Welcome!" msgstr "¡Bienvenido!" -#: tournaments/templates/site_index.html:21 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" msgstr "Parece que no hay ningún torneo en este sitio. ¿Te gustaría crear uno?" -#: tournaments/templates/site_index.html:30 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." msgstr "" -#: tournaments/templates/site_index.html:34 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." msgstr "Actualmente no hay torneos configurados en este sitio." -#: tournaments/templates/site_index.html:55 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html msgid "New Tournament" msgstr "Nuevo torneo" -#: tournaments/templates/site_index.html:58 +#: tournaments/templates/site_index.html msgid "Edit Database Area" msgstr "Editar area de base de datos" -#: tournaments/templates/site_index.html:61 +#: tournaments/templates/site_index.html msgid "Send a Test Email" msgstr "" -#: tournaments/templates/site_index.html:64 +#: tournaments/templates/site_index.html msgid "Import DebateXML" msgstr "" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Get API Token / Change Password (%(user)s)" msgstr "" -#: tournaments/templates/site_index.html:77 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" msgstr "Cerrar sesión %(user)s" -#: tournaments/templates/site_index.html:83 +#: tournaments/templates/site_index.html msgid "Log In as Admin" msgstr "Inicia sesión como Administrador" -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." msgstr "Esperamos que hayas disfrutado usando Tabbycat para tu torneo. Agradeceríamos que hiciera una donación al proyecto para apoyar su desarrollo y mantenimiento continuo. Para un torneo de este tamaño, sugerimos una donación de %(amount)s. Tenga en cuenta que si su torneo se ejecuta con fines de lucro o para la recaudar fondos, hacer este pago es una condición obligatoria de la licencia de software de Tabbycat. Más información sobre cómo donar.." -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" msgstr "¡Bienvenido a tu nuevo torneo!" -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." msgstr "El siguiente paso es importar los datos iniciales del torneo: las instituciones, los equipos, los adjudicadores y las salas del torneo. Hay muchas maneras de hacer esto. Para torneos pequeños y medianos, el importador simple es su mejor apuesta." #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." msgstr "Para más información, por favor consulta el documento en la sección importar datos iniciales." -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." msgstr "Usa la opción de importar para agregar los datos iniciales." -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" -msgstr "Ve al area de check in para empezar a generar la ronda %(round)s" +msgid "Mark participants as available to prepare a draw for %(round)s" +msgstr "" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" msgstr "Ve al area de generación de ronda para asignar a los jueces para la ronda %(round)s" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" -msgstr "Ve al area de resultados para empezar a ingresar las ballots de la ronda %(round)s" +msgid "Go to the results area to enter ballots for %(round)s" +msgstr "" -#: tournaments/templates/tournament_index.html:74 +#: tournaments/templates/tournament_index.html msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." msgstr "" -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" msgstr "Área de administrador para %(tn)s" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" msgstr "Área de ayudantes para %(tn)s" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" msgstr "Área pública para %(tn)s" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" msgstr "afirmativo" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" msgstr "negativo" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" msgstr "equipo afirmativo" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" msgstr "equipo negativo" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" msgstr "Afi" -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" msgstr "" -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" msgstr "gobierno" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" msgstr "oposición" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" msgstr "equipo de gobierno" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" msgstr "equipo de oposición" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" msgstr "Gob" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" msgstr "Opo" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" msgstr "proposición" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" msgstr "equipo de proposición" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" msgstr "" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" msgstr "" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" msgstr "" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" msgstr "equipo a favor" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" msgstr "equipo en contra" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" msgstr "" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" msgstr "" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" msgstr "" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" msgstr "" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" msgstr "" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" msgstr "" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" msgstr "" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" msgstr "" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "cámara alta de gobierno" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "cámara alta de oposición" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "cámara baja de gobierno" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "cámara baja de oposición" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" msgstr "equipo de cámara alta de gobierno" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" msgstr "equipo de cámara alta de oposición" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" msgstr "equipo de cámara baja de gobierno" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" msgstr "equipo de cámara baja de oposición" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "CAG" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "CAO" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "CBG" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "CBO" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "Ronda %(number)d" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" msgstr "" -#: tournaments/views.py:151 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" msgstr "" -#: tournaments/views.py:157 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." msgstr "" -#: tournaments/views.py:170 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." msgstr "" -#: tournaments/views.py:176 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." msgstr "La ronda actual ha sido avanzada a %(round)s. ¡Has llegado al final de las rondas preliminares! ¡Felicitaciones! El siguiente paso es generar el break." -#: tournaments/views.py:184 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" msgstr "" -#: tournaments/views.py:201 +#: tournaments/views.py msgid "8-team generic dataset" msgstr "" -#: tournaments/views.py:202 +#: tournaments/views.py msgid "24-team Australs dataset" msgstr "" -#: tournaments/views.py:203 +#: tournaments/views.py msgid "88-team BP dataset" msgstr "" -#: tournaments/views.py:288 -msgid "Successfully set round weights." +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." msgstr "" diff --git a/tabbycat/utils/locale/es/LC_MESSAGES/django.po b/tabbycat/utils/locale/es/LC_MESSAGES/django.po index d5c28ac2801..605ebb732d9 100644 --- a/tabbycat/utils/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:50\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -18,304 +18,311 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "Email address" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "" + +#: utils/admin.py +msgid "Speaker" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Tournament" msgstr "" -#: utils/tables.py:47 +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "Lado" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "" + +#: utils/admin.py +msgid "Confirmed" +msgstr "Confirmado" + +#: utils/admin.py +msgid "Adjudicator" +msgstr "" + +#: utils/tables.py msgid "No Data Available" msgstr "" -#: utils/tables.py:155 utils/tables.py:156 +#: utils/tables.py msgid "Ⓒ" msgstr "" -#: utils/tables.py:157 +#: utils/tables.py msgid "Ⓣ" msgstr "" -#: utils/tables.py:161 +#: utils/tables.py msgid "chair" msgstr "principal" -#: utils/tables.py:162 +#: utils/tables.py msgid "panellist" msgstr "panelista" -#: utils/tables.py:163 +#: utils/tables.py msgid "trainee" msgstr "sombras" -#: utils/tables.py:166 +#: utils/tables.py msgid "—" msgstr "" -#: utils/tables.py:167 +#: utils/tables.py msgid "Redacted" msgstr "" -#: utils/tables.py:231 utils/tables.py:237 +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" msgstr "" -#: utils/tables.py:247 utils/tables.py:252 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" msgstr "" -#: utils/tables.py:274 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" msgstr "" -#: utils/tables.py:276 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" msgstr "" -#: utils/tables.py:296 +#: utils/tables.py #, python-format msgid "%(team)s won" msgstr "" -#: utils/tables.py:301 +#: utils/tables.py #, python-format msgid "%(team)s lost" msgstr "" -#: utils/tables.py:306 utils/tables.py:318 utils/tables.py:342 +#: utils/tables.py #, python-format msgid "%(team)s—no result" msgstr "" -#: utils/tables.py:323 +#: utils/tables.py #, python-format msgid "%(team)s placed %(place)s" msgstr "" -#: utils/tables.py:332 +#: utils/tables.py #, python-format msgid "%(team)s is advancing" msgstr "" -#: utils/tables.py:337 +#: utils/tables.py #, python-format msgid "%(team)s was eliminated" msgstr "" -#: utils/tables.py:350 +#: utils/tables.py msgid "View/edit debate ballot" msgstr "" -#: utils/tables.py:356 +#: utils/tables.py msgid "View debate ballot" msgstr "" -#: utils/tables.py:369 +#: utils/tables.py #, python-format msgid " vs %(opposition)s" msgstr "" -#: utils/tables.py:376 +#: utils/tables.py #, python-format msgid "Won against %(team)s" msgstr "" -#: utils/tables.py:378 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" msgstr "" -#: utils/tables.py:380 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" msgstr "" -#: utils/tables.py:405 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" msgstr "" -#: utils/tables.py:412 +#: utils/tables.py msgid "Teams in debate:" msgstr "" -#: utils/tables.py:415 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "%(team)s(%(side)s)" -#: utils/tables.py:416 utils/tables.py:420 utils/tables.py:446 -#: utils/tables.py:618 +#: utils/tables.py msgid "??" msgstr "" -#: utils/tables.py:434 +#: utils/tables.py msgid "advancing" msgstr "" -#: utils/tables.py:435 +#: utils/tables.py msgid "Advancing" msgstr "" -#: utils/tables.py:437 +#: utils/tables.py msgid "eliminated" msgstr "" -#: utils/tables.py:438 +#: utils/tables.py msgid "Eliminated" msgstr "" -#: utils/tables.py:441 utils/tables.py:451 +#: utils/tables.py msgid "No result for debate" msgstr "" -#: utils/tables.py:448 +#: utils/tables.py #, python-format msgid "Placed %(place)s" msgstr "En %(place)s lugar" -#: utils/tables.py:463 -msgid "Tournament" -msgstr "" - -#: utils/tables.py:472 -msgid "Round" -msgstr "" - -#: utils/tables.py:495 utils/tables.py:672 +#: utils/tables.py msgid "Name" msgstr "" -#: utils/tables.py:501 utils/tables.py:650 +#: utils/tables.py msgid "Institution" msgstr "" -#: utils/tables.py:507 +#: utils/tables.py msgid "Member of the Adjudication Core" msgstr "" -#: utils/tables.py:514 +#: utils/tables.py msgid "Independent Adjudicator" msgstr "" -#: utils/tables.py:522 +#: utils/tables.py msgid "Always Trainee" msgstr "" -#: utils/tables.py:557 +#: utils/tables.py msgid "in minority" msgstr "" -#: utils/tables.py:590 +#: utils/tables.py msgid "Debate Adjudicators" msgstr "" -#: utils/tables.py:621 -msgid "Motion" -msgstr "" - -#: utils/tables.py:636 -msgid "Team" -msgstr "" - -#: utils/tables.py:641 utils/tables.py:694 +#: utils/tables.py msgid "Categories" msgstr "Categorías" -#: utils/tables.py:692 +#: utils/tables.py msgid "Category" msgstr "" -#: utils/tables.py:719 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." msgstr "" -#: utils/tables.py:721 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." msgstr "" -#: utils/tables.py:736 +#: utils/tables.py msgid "Room" msgstr "Sala" -#: utils/tables.py:754 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" msgstr[0] "" msgstr[1] "" -#: utils/tables.py:760 +#: utils/tables.py msgid "Teams are from the same institution" msgstr "" -#: utils/tables.py:766 +#: utils/tables.py msgid "Conflicts/Flags" msgstr "" -#: utils/tables.py:819 +#: utils/tables.py msgid "The confirmed ballot" msgstr "" -#: utils/tables.py:824 utils/tables.py:849 +#: utils/tables.py msgid "No ballot" msgstr "" -#: utils/tables.py:826 utils/tables.py:851 +#: utils/tables.py msgid "No scores" msgstr "" -#: utils/tables.py:829 utils/tables.py:854 utils/tables.py:866 +#: utils/tables.py msgid "View Ballot" msgstr "" -#: utils/tables.py:836 +#: utils/tables.py msgid "The ballot you submitted" msgstr "" -#: utils/tables.py:840 +#: utils/tables.py msgid "View/Edit Ballot" msgstr "" -#: utils/tables.py:874 +#: utils/tables.py msgid "Result" msgstr "" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:880 +#: utils/tables.py msgid "TBC" msgstr "" -#: utils/tables.py:881 -msgid "Side" -msgstr "Lado" - -#: utils/tables.py:919 -msgid "Team iron-manned this round and the last." +#: utils/tables.py +msgid "Team iron-personed this round and the last." msgstr "" -#: utils/tables.py:922 -msgid "Team iron-manned this round." +#: utils/tables.py +msgid "Team iron-personed this round." msgstr "" -#: utils/tables.py:925 -msgid "Team iron-manned last round." +#: utils/tables.py +msgid "Team iron-personed last round." msgstr "" -#: utils/tables.py:942 utils/tables.py:943 +#: utils/tables.py #, python-format msgid "Team %(num)d" msgstr "Equipo %(num)d" -#: utils/tables.py:950 +#: utils/tables.py msgid "Postpone" msgstr "" -#: utils/views.py:38 +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." msgstr "" diff --git a/tabbycat/venues/locale/es/LC_MESSAGES/django.po b/tabbycat/venues/locale/es/LC_MESSAGES/django.po index db44417e22c..c23f9b2115f 100644 --- a/tabbycat/venues/locale/es/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-05 15:26-0300\n" -"PO-Revision-Date: 2020-07-10 07:03\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" "Last-Translator: philip_tc\n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -18,204 +18,202 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 +#: venues/apps.py msgid "Rooms" msgstr "Salas" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." msgstr "" -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." msgstr "" -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." msgstr "" -#: venues/models.py:9 venues/models.py:66 +#: venues/models.py msgid "name" msgstr "nombre" -#: venues/models.py:11 venues/models.py:120 +#: venues/models.py msgid "priority" msgstr "prioridad" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" msgstr "Las salas con un mayor número de prioridad serán priorizadas cuando se asignen las salas de debate" -#: venues/models.py:15 venues/models.py:78 +#: venues/models.py msgid "tournament" msgstr "torneo" -#: venues/models.py:16 +#: venues/models.py msgid "URL" msgstr "" -#: venues/models.py:17 +#: venues/models.py msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" msgstr "" -#: venues/models.py:24 +#: venues/models.py msgid "room" msgstr "sala" -#: venues/models.py:25 venues/models.py:76 +#: venues/models.py msgid "rooms" msgstr "salas" -#: venues/models.py:61 +#: venues/models.py msgid "Don't display in room name" msgstr "" -#: venues/models.py:62 +#: venues/models.py msgid "Display as prefix" msgstr "Mostrar como prefijo" -#: venues/models.py:63 +#: venues/models.py msgid "Display as suffix" msgstr "Mostrar como sufijo" -#: venues/models.py:67 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." msgstr "Nombre de la categoría, ej: \"Morado\", \"Acceso sin escaleras\", \"Cerca a tabulación\". Este nombre se muestra cuando la categoría se muestra como prefijo o sufijo del nombre de la sala en el cuadro, ej: \"Morado – G05\"." -#: venues/models.py:71 +#: venues/models.py msgid "description" msgstr "descripción" -#: venues/models.py:72 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." msgstr "Descripción, como el predicado de una oración, ej: \"tiene acceso sin escaleras\", \"está cerca de la sala de anuncios\". La descripción le sigue a \"Esta sala\" cuando se muestra en tooltips, ej: \"Esta sala está cerca de la sala de anuncios\"." -#: venues/models.py:82 +#: venues/models.py msgid "display in room name" msgstr "" -#: venues/models.py:83 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" msgstr "Prefijo: \"Morado – G05\", Sufijo: \"G05 – Morado\"" -#: venues/models.py:85 +#: venues/models.py msgid "display in public tooltip" msgstr "mostrar en el tooltip público" -#: venues/models.py:86 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." msgstr "Muestra la descripción en el tooltip para la sala en las páginas públicas. La descripción, si no está en blanco, siempre se mostrará en las paginas de admin." -#: venues/models.py:90 +#: venues/models.py msgid "room category" msgstr "categoría de sala" -#: venues/models.py:91 +#: venues/models.py msgid "room categories" msgstr "categorias de sala" -#: venues/models.py:119 +#: venues/models.py msgid "category" msgstr "categoría" -#: venues/models.py:123 +#: venues/models.py msgid "subject content type" msgstr "Tipo de contenido del elemento" -#: venues/models.py:126 +#: venues/models.py msgid "subject ID" msgstr "ID del elemento" -#: venues/models.py:132 +#: venues/models.py msgid "room constraint" msgstr "limitación de sala" -#: venues/models.py:133 +#: venues/models.py msgid "room constraints" msgstr "limitaciones de sala" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" msgstr "Categorias de sala" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." msgstr "Las categorías de sala le permiten agrupar en \"zonas\" las salas para mostrarlas en el sorteo y facilitar la navegación de los participantes, y/o especificar restricciones en la asignación de salas que requieren que los equipos, adjudicadores o instituciones sean asignados en un lugar en una categoría particular." -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." msgstr "Si quieres eliminar alguna categoría de sala, utiliza el area de Editar Base de Datos." -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" msgstr "Guardar las categorías de sala" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" msgstr "Limitaciones de sala" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." msgstr "Las limitaciones de sala le dicen al asignador de salas que intente mantener al equipo o juez en específico, o a todos los equipos (pero no jueces) de una institución en específico, en una sala dentro de la categoría determinada. El campo de \"prioridad\" resuelve los conflictos en las limitaciones al momento de asignar: se prioridad las salas con mayor prioridad. También puedes usar el campo de prioridad para especificar limitaciones de menor preferencia que se tienen en cuenta si una limitación de mayor preferencia no se pudo cumplir." -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" msgstr "Guardar las limitaciones de sala" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" msgstr "Las (%(category)s) cumplen con las limitaciones de sala de %(name)s" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" msgstr "La sala no cumple con ninguna de las limitaciones de %(name)s" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" msgstr "Se cumplen las limitaciones de sala de %(team)s (%(category)s, vía la institución %(institution)s)" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" msgstr "La sala no cumple con ninguna de las limitaciones de la institución %(institution)s (%(team)s)" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" msgstr "" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" msgstr[0] "Categoría de sala guardada: %(list)s" msgstr[1] "Categorías de sala guardadas: %(list)s" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." msgstr "No se realizaron cambios a las categorías de sala." -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "%s(Juez)" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" msgstr "%s(Equipo)" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" msgstr "%s(Institución)" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." From 44cc3b543e62409aec49911c8e56a42a75112d0b Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Sun, 5 Feb 2023 11:56:35 +1100 Subject: [PATCH 221/255] New translations django.po (Talossan) --- .../locale/tzl/LC_MESSAGES/django.po | 156 ++-- .../locale/tzl/LC_MESSAGES/django.po | 199 +++-- .../locale/tzl/LC_MESSAGES/django.po | 452 +++++----- .../locale/tzl/LC_MESSAGES/django.po | 164 ++-- .../locale/tzl/LC_MESSAGES/django.po | 252 +++--- .../draw/locale/tzl/LC_MESSAGES/django.po | 610 +++++++------ .../importer/locale/tzl/LC_MESSAGES/django.po | 227 +++-- tabbycat/locale/tzl/LC_MESSAGES/django.po | 480 +++++------ .../motions/locale/tzl/LC_MESSAGES/django.po | 193 +++-- .../locale/tzl/LC_MESSAGES/django.po | 196 +++-- .../options/locale/tzl/LC_MESSAGES/django.po | 815 +++++++++--------- .../locale/tzl/LC_MESSAGES/django.po | 497 ++++++----- .../printing/locale/tzl/LC_MESSAGES/django.po | 63 +- .../locale/tzl/LC_MESSAGES/django.po | 87 +- .../results/locale/tzl/LC_MESSAGES/django.po | 540 ++++++------ .../locale/tzl/LC_MESSAGES/django.po | 313 ++++--- .../locale/tzl/LC_MESSAGES/django.po | 522 ++++++----- .../utils/locale/tzl/LC_MESSAGES/django.po | 197 +++-- .../venues/locale/tzl/LC_MESSAGES/django.po | 100 ++- 19 files changed, 2999 insertions(+), 3064 deletions(-) diff --git a/tabbycat/actionlog/locale/tzl/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/tzl/LC_MESSAGES/django.po index 4840f30d70a..3ca32ce5c58 100644 --- a/tabbycat/actionlog/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-11-18 21:01\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -17,307 +17,307 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" msgstr "crwdns29056:0crwdne29056:0" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" msgstr "crwdns29058:0crwdne29058:0" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" msgstr "crwdns29060:0crwdne29060:0" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" msgstr "crwdns29062:0crwdne29062:0" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" msgstr "crwdns29064:0crwdne29064:0" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" msgstr "crwdns29066:0crwdne29066:0" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" msgstr "crwdns29068:0crwdne29068:0" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" msgstr "crwdns29070:0crwdne29070:0" -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" msgstr "crwdns29072:0crwdne29072:0" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" msgstr "crwdns35552:0crwdne35552:0" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" msgstr "crwdns29076:0crwdne29076:0" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" msgstr "crwdns29078:0crwdne29078:0" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" msgstr "crwdns29080:0crwdne29080:0" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" msgstr "crwdns51038:0crwdne51038:0" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" msgstr "crwdns51040:0crwdne51040:0" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" msgstr "crwdns51042:0crwdne51042:0" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" msgstr "crwdns51044:0crwdne51044:0" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" msgstr "crwdns29090:0crwdne29090:0" -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" msgstr "crwdns29092:0crwdne29092:0" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" msgstr "crwdns29094:0crwdne29094:0" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" msgstr "crwdns29096:0crwdne29096:0" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" msgstr "crwdns29098:0crwdne29098:0" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" msgstr "crwdns29100:0crwdne29100:0" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" msgstr "crwdns29102:0crwdne29102:0" -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "crwdns29104:0crwdne29104:0" -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" msgstr "crwdns29106:0crwdne29106:0" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" msgstr "crwdns29108:0crwdne29108:0" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" msgstr "crwdns29110:0crwdne29110:0" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" msgstr "crwdns33800:0crwdne33800:0" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" msgstr "crwdns29112:0crwdne29112:0" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" msgstr "crwdns29114:0crwdne29114:0" -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" msgstr "crwdns29116:0crwdne29116:0" -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" msgstr "crwdns29118:0crwdne29118:0" -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" msgstr "crwdns29120:0crwdne29120:0" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" msgstr "crwdns29122:0crwdne29122:0" -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" msgstr "crwdns29124:0crwdne29124:0" -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" msgstr "crwdns29126:0crwdne29126:0" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" msgstr "crwdns29128:0crwdne29128:0" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" msgstr "crwdns29130:0crwdne29130:0" -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" msgstr "crwdns33802:0crwdne33802:0" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" msgstr "crwdns29132:0crwdne29132:0" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" msgstr "crwdns29134:0crwdne29134:0" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" msgstr "crwdns51046:0crwdne51046:0" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" msgstr "crwdns29138:0crwdne29138:0" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" msgstr "crwdns29140:0crwdne29140:0" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" msgstr "crwdns29142:0crwdne29142:0" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" msgstr "crwdns29144:0crwdne29144:0" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" msgstr "crwdns51048:0crwdne51048:0" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" msgstr "crwdns29148:0crwdne29148:0" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" msgstr "crwdns29150:0crwdne29150:0" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" msgstr "crwdns29152:0crwdne29152:0" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" msgstr "crwdns29154:0crwdne29154:0" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" msgstr "crwdns29156:0crwdne29156:0" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" msgstr "crwdns29158:0crwdne29158:0" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" msgstr "crwdns33804:0crwdne33804:0" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" msgstr "crwdns29160:0crwdne29160:0" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" msgstr "crwdns29162:0crwdne29162:0" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" msgstr "crwdns51050:0crwdne51050:0" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" msgstr "crwdns33806:0crwdne33806:0" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" msgstr "crwdns33808:0crwdne33808:0" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" msgstr "crwdns33810:0crwdne33810:0" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" msgstr "crwdns33812:0crwdne33812:0" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" msgstr "crwdns33814:0crwdne33814:0" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" msgstr "crwdns33816:0crwdne33816:0" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" msgstr "crwdns29166:0crwdne29166:0" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" msgstr "crwdns29168:0crwdne29168:0" -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "crwdns29170:0crwdne29170:0" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "crwdns29172:0crwdne29172:0" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "crwdns29174:0crwdne29174:0" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "crwdns29176:0crwdne29176:0" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" msgstr "crwdns29178:0crwdne29178:0" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" msgstr "crwdns29180:0crwdne29180:0" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" msgstr "crwdns29182:0crwdne29182:0" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" msgstr "crwdns29184:0crwdne29184:0" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." msgstr "crwdns29186:0crwdne29186:0" -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" msgstr "crwdns29188:0crwdne29188:0" diff --git a/tabbycat/adjallocation/locale/tzl/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/tzl/LC_MESSAGES/django.po index 1ca031ff8bc..84ef1599dd7 100644 --- a/tabbycat/adjallocation/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-11-18 21:01\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" "Last-Translator: \n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -17,436 +17,435 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." msgstr "crwdns29190:0crwdne29190:0" -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." msgstr[0] "crwdns35336:1%(count)scrwdnd35336:1%(score)crwdne35336:1" msgstr[1] "crwdns35336:5%(count)scrwdnd35336:5%(score)crwdne35336:5" -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." msgstr[0] "crwdns35338:1%(count)scrwdnd35338:1%(score)crwdne35338:1" msgstr[1] "crwdns35338:5%(count)scrwdnd35338:5%(score)crwdne35338:5" -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." msgstr "crwdns33822:0crwdne33822:0" -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" msgstr "crwdns29196:0crwdne29196:0" -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." msgstr "crwdns33824:0%(debate_count)scrwdnd33824:0%(adj_count)scrwdne33824:0" -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." msgstr "crwdns33826:0%(panel_debates)scrwdnd33826:0%(panellists)scrwdnd33826:0%(needed)scrwdne33826:0" -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." msgstr "crwdns33828:0%(debates_count)scrwdnd33828:0%(voting_count)scrwdne33828:0" -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" msgstr "crwdns29192:0crwdne29192:0" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." msgstr "crwdns29238:0crwdne29238:0" -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." msgstr "crwdns29240:0crwdne29240:0" -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." msgstr "crwdns33830:0crwdne33830:0" -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." msgstr "crwdns35340:0crwdne35340:0" -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" msgstr[0] "crwdns35342:1crwdne35342:1" msgstr[1] "crwdns35342:5%(count)dcrwdne35342:5" -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." msgstr "crwdns35344:0crwdne35344:0" -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." msgstr "crwdns33838:0crwdne33838:0" -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" msgstr[0] "crwdns35346:1crwdne35346:1" msgstr[1] "crwdns35346:5%(count)dcrwdne35346:5" -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." msgstr "crwdns35348:0crwdne35348:0" -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." msgstr "crwdns33844:0crwdne33844:0" -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." msgstr "crwdns33846:0crwdne33846:0" -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." msgstr "crwdns33848:0crwdne33848:0" -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." msgstr "crwdns33850:0crwdne33850:0" -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." msgstr "crwdns33852:0crwdne33852:0" -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." msgstr "crwdns33854:0crwdne33854:0" -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." msgstr "crwdns33856:0crwdne33856:0" -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" msgstr "crwdns29198:0crwdne29198:0" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" msgstr "crwdns29200:0crwdne29200:0" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" msgstr "crwdns29202:0crwdne29202:0" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "crwdns29204:0crwdne29204:0" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "crwdns29206:0crwdne29206:0" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" msgstr "crwdns29208:0crwdne29208:0" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" msgstr "crwdns29210:0crwdne29210:0" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" msgstr "crwdns29212:0crwdne29212:0" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" msgstr "crwdns29214:0crwdne29214:0" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "crwdns29216:0crwdne29216:0" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" msgstr "crwdns29218:0crwdne29218:0" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" msgstr "crwdns29220:0crwdne29220:0" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "crwdns29222:0crwdne29222:0" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "crwdns29224:0crwdne29224:0" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" msgstr "crwdns29226:0crwdne29226:0" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" msgstr "crwdns29228:0crwdne29228:0" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" msgstr "crwdns29230:0crwdne29230:0" -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" msgstr "crwdns29232:0crwdne29232:0" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" msgstr "crwdns29234:0crwdne29234:0" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" msgstr "crwdns33858:0crwdne33858:0" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" msgstr "crwdns33860:0crwdne33860:0" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "crwdns33862:0crwdne33862:0" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" msgstr "crwdns33864:0crwdne33864:0" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" msgstr "crwdns33866:0crwdne33866:0" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" msgstr "crwdns33868:0crwdne33868:0" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" msgstr "crwdns33870:0crwdne33870:0" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" msgstr "crwdns33872:0crwdne33872:0" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" msgstr "crwdns33874:0crwdne33874:0" -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" msgstr "crwdns33876:0crwdne33876:0" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" msgstr "crwdns33878:0crwdne33878:0" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" msgstr "crwdns33880:0crwdne33880:0" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" msgstr "crwdns33882:0crwdne33882:0" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" msgstr "crwdns33884:0crwdne33884:0" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" msgstr "crwdns33886:0crwdne33886:0" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" msgstr "crwdns33888:0crwdne33888:0" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" msgstr "crwdns33890:0crwdne33890:0" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." msgstr "crwdns33892:0crwdne33892:0" -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" msgstr "crwdns33894:0crwdne33894:0" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." msgstr "crwdns33896:0crwdne33896:0" -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." msgstr "crwdns33898:0crwdne33898:0" -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" msgstr "crwdns51052:0%(round)scrwdne51052:0" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" msgstr "crwdns51054:0%(adjudicator)scrwdnd51054:0%(team)scrwdne51054:0" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" msgstr "crwdns51056:0%(adjudicator)scrwdnd51056:0%(team)scrwdnd51056:0%(institution)scrwdne51056:0" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" msgstr "crwdns51058:0%(adjudicator1)scrwdnd51058:0%(adjudicator2)scrwdne51058:0" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" msgstr "crwdns51060:0%(adjudicator1)scrwdnd51060:0%(adjudicator2)scrwdnd51060:0%(institution)scrwdne51060:0" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "crwdns33910:0crwdne33910:0" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" msgstr "crwdns33912:0crwdne33912:0" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "crwdns33914:0crwdne33914:0" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" msgstr "crwdns33916:0crwdne33916:0" -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" msgstr "crwdns33918:0crwdne33918:0" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" msgstr "crwdns33920:0crwdne33920:0" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" msgstr "crwdns33922:0crwdne33922:0" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" msgstr "crwdns29244:0crwdne29244:0" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" msgstr "crwdns29246:0crwdne29246:0" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." msgstr[0] "crwdns29248:1%(count)dcrwdne29248:1" msgstr[1] "crwdns29248:5%(count)dcrwdne29248:5" -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." msgstr[0] "crwdns29250:1%(count)dcrwdne29250:1" msgstr[1] "crwdns29250:5%(count)dcrwdne29250:5" -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." msgstr "crwdns29252:0crwdne29252:0" -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" msgstr "crwdns29254:0crwdne29254:0" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" msgstr "crwdns29256:0crwdne29256:0" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." msgstr[0] "crwdns29258:1%(count)dcrwdne29258:1" msgstr[1] "crwdns29258:5%(count)dcrwdne29258:5" -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." msgstr[0] "crwdns29260:1%(count)dcrwdne29260:1" msgstr[1] "crwdns29260:5%(count)dcrwdne29260:5" -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." msgstr "crwdns29262:0crwdne29262:0" -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" msgstr "crwdns29264:0crwdne29264:0" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" msgstr "crwdns29266:0crwdne29266:0" -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." msgstr[0] "crwdns29268:1%(count)dcrwdne29268:1" msgstr[1] "crwdns29268:5%(count)dcrwdne29268:5" -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." msgstr[0] "crwdns29270:1%(count)dcrwdne29270:1" msgstr[1] "crwdns29270:5%(count)dcrwdne29270:5" -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." msgstr "crwdns29272:0crwdne29272:0" -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" msgstr "crwdns33924:0crwdne33924:0" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" msgstr "crwdns33926:0crwdne33926:0" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." msgstr[0] "crwdns33928:1%(count)dcrwdne33928:1" msgstr[1] "crwdns33928:5%(count)dcrwdne33928:5" -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." msgstr[0] "crwdns33930:1%(count)dcrwdne33930:1" msgstr[1] "crwdns33930:5%(count)dcrwdne33930:5" -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." msgstr "crwdns33932:0crwdne33932:0" diff --git a/tabbycat/adjfeedback/locale/tzl/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/tzl/LC_MESSAGES/django.po index 4d9697a3deb..fc785132ca3 100644 --- a/tabbycat/adjfeedback/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-11-29 01:58\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -17,951 +17,947 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:44 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" msgstr "crwdns29274:0crwdne29274:0" -#: adjfeedback/admin.py:73 adjfeedback/admin.py:139 +#: adjfeedback/admin.py msgid "target" msgstr "crwdns29276:0crwdne29276:0" -#: adjfeedback/admin.py:74 adjfeedback/admin.py:140 adjfeedback/models.py:236 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" msgstr "crwdns29278:0crwdne29278:0" -#: adjfeedback/admin.py:75 adjfeedback/admin.py:141 adjfeedback/models.py:238 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" msgstr "crwdns29280:0crwdne29280:0" -#: adjfeedback/admin.py:91 -#, python-format -msgid "%(timestamp)s (version %(version)s)" -msgstr "crwdns51564:0%(timestamp)scrwdnd51564:0%(version)scrwdne51564:0" - -#: adjfeedback/admin.py:96 +#: adjfeedback/admin.py msgid "Target" msgstr "crwdns29282:0crwdne29282:0" -#: adjfeedback/admin.py:97 adjfeedback/admin.py:162 +#: adjfeedback/admin.py msgid "Source" msgstr "crwdns29284:0crwdne29284:0" -#: adjfeedback/admin.py:98 +#: adjfeedback/admin.py msgid "Feedback timestamp and version" msgstr "crwdns51566:0crwdne51566:0" -#: adjfeedback/admin.py:180 +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "crwdns51564:0%(timestamp)scrwdnd51564:0%(version)scrwdne51564:0" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgstr[0] "crwdns29286:1crwdne29286:1" msgstr[1] "crwdns29286:5%(count)dcrwdne29286:5" -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." msgstr[0] "crwdns29288:1crwdne29288:1" msgstr[1] "crwdns29288:5%(count)dcrwdne29288:5" -#: adjfeedback/admin.py:205 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." msgstr[0] "crwdns29290:1crwdne29290:1" msgstr[1] "crwdns29290:5%(count)dcrwdne29290:5" -#: adjfeedback/admin.py:215 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." msgstr[0] "crwdns29292:1crwdne29292:1" msgstr[1] "crwdns29292:5%(count)dcrwdne29292:5" -#: adjfeedback/admin.py:225 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." msgstr[0] "crwdns29294:1crwdne29294:1" msgstr[1] "crwdns29294:5%(count)dcrwdne29294:5" -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" msgstr "crwdns29296:0crwdne29296:0" -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "chair" msgstr "crwdns29298:0crwdne29298:0" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "solo" msgstr "crwdns29300:0crwdne29300:0" -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "panellist" msgstr "crwdns29302:0crwdne29302:0" -#: adjfeedback/forms.py:29 +#: adjfeedback/forms.py msgid "trainee" msgstr "crwdns29304:0crwdne29304:0" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:57 +#: adjfeedback/forms.py msgid "Yes" msgstr "crwdns29306:0crwdne29306:0" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:59 +#: adjfeedback/forms.py msgid "No" msgstr "crwdns29308:0crwdne29308:0" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:74 adjfeedback/forms.py:83 +#: adjfeedback/forms.py msgid "This field is required." msgstr "crwdns29310:0crwdne29310:0" -#: adjfeedback/forms.py:164 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" msgstr "crwdns51062:0%(min)dcrwdnd51062:0%(max)dcrwdne51062:0" -#: adjfeedback/forms.py:176 +#: adjfeedback/forms.py msgid "Ignored" msgstr "crwdns29314:0crwdne29314:0" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:228 adjfeedback/forms.py:291 +#: adjfeedback/forms.py msgid "Submitted - " msgstr "crwdns51064:0crwdne51064:0" #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:229 adjfeedback/forms.py:296 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" msgstr "crwdns51066:0%(name)scrwdnd51066:0%(adjpos)scrwdne51066:0" -#: adjfeedback/forms.py:252 adjfeedback/forms.py:326 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "crwdns29318:0crwdne29318:0" -#: adjfeedback/forms.py:269 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" msgstr "crwdns29320:0crwdne29320:0" -#: adjfeedback/forms.py:293 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "crwdns51068:0%(name)scrwdne51068:0" -#: adjfeedback/forms.py:299 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" msgstr "crwdns51070:0%(name)scrwdne51070:0" -#: adjfeedback/forms.py:301 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" msgstr "crwdns51072:0%(name)scrwdne51072:0" -#: adjfeedback/forms.py:392 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" msgstr "crwdns29328:0%(adjudicator)scrwdne29328:0" -#: adjfeedback/forms.py:397 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" msgstr "crwdns29330:0%(adjudicator)scrwdne29330:0" -#: adjfeedback/forms.py:410 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." msgstr "crwdns29332:0%(adjudicator)scrwdne29332:0" -#: adjfeedback/forms.py:416 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" msgstr "crwdns29334:0%(adjudicator)scrwdne29334:0" -#: adjfeedback/forms.py:424 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" msgstr "crwdns29336:0%(adjudicator)scrwdnd29336:0%(score)scrwdne29336:0" -#: adjfeedback/forms.py:439 +#: adjfeedback/forms.py msgid "There were no scores to import." msgstr "crwdns29338:0crwdne29338:0" -#: adjfeedback/models.py:13 adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator" msgstr "crwdns29340:0crwdne29340:0" -#: adjfeedback/models.py:16 +#: adjfeedback/models.py msgid "round" msgstr "crwdns29342:0crwdne29342:0" -#: adjfeedback/models.py:17 adjfeedback/models.py:232 +#: adjfeedback/models.py msgid "score" msgstr "crwdns29344:0crwdne29344:0" -#: adjfeedback/models.py:18 +#: adjfeedback/models.py msgid "timestamp" msgstr "crwdns29346:0crwdne29346:0" -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score history" msgstr "crwdns35554:0crwdne35554:0" -#: adjfeedback/models.py:22 +#: adjfeedback/models.py msgid "adjudicator base score histories" msgstr "crwdns35556:0crwdne35556:0" -#: adjfeedback/models.py:30 +#: adjfeedback/models.py msgid "question" msgstr "crwdns29352:0crwdne29352:0" -#: adjfeedback/models.py:32 +#: adjfeedback/models.py msgid "feedback" msgstr "crwdns29354:0crwdne29354:0" -#: adjfeedback/models.py:45 adjfeedback/models.py:55 adjfeedback/models.py:65 -#: adjfeedback/models.py:74 +#: adjfeedback/models.py msgid "answer" msgstr "crwdns29356:0crwdne29356:0" -#: adjfeedback/models.py:48 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" msgstr "crwdns29358:0crwdne29358:0" -#: adjfeedback/models.py:49 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" msgstr "crwdns29360:0crwdne29360:0" -#: adjfeedback/models.py:58 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" msgstr "crwdns29362:0crwdne29362:0" -#: adjfeedback/models.py:59 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" msgstr "crwdns29364:0crwdne29364:0" -#: adjfeedback/models.py:68 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" msgstr "crwdns29366:0crwdne29366:0" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" msgstr "crwdns29368:0crwdne29368:0" -#: adjfeedback/models.py:77 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" msgstr "crwdns29370:0crwdne29370:0" -#: adjfeedback/models.py:78 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" msgstr "crwdns29372:0crwdne29372:0" -#: adjfeedback/models.py:86 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answer" msgstr "crwdns51702:0crwdne51702:0" -#: adjfeedback/models.py:87 +#: adjfeedback/models.py msgid "adjudicator feedback multiple select answers" msgstr "crwdns51704:0crwdne51704:0" -#: adjfeedback/models.py:106 +#: adjfeedback/models.py msgid "checkbox" msgstr "crwdns29374:0crwdne29374:0" -#: adjfeedback/models.py:107 +#: adjfeedback/models.py msgid "yes/no (dropdown)" msgstr "crwdns29376:0crwdne29376:0" -#: adjfeedback/models.py:108 +#: adjfeedback/models.py msgid "integer (textbox)" msgstr "crwdns29378:0crwdne29378:0" -#: adjfeedback/models.py:109 +#: adjfeedback/models.py msgid "integer scale" msgstr "crwdns29380:0crwdne29380:0" -#: adjfeedback/models.py:110 +#: adjfeedback/models.py msgid "float" msgstr "crwdns29382:0crwdne29382:0" -#: adjfeedback/models.py:111 adjfeedback/models.py:145 +#: adjfeedback/models.py msgid "text" msgstr "crwdns29384:0crwdne29384:0" -#: adjfeedback/models.py:112 +#: adjfeedback/models.py msgid "long text" msgstr "crwdns29386:0crwdne29386:0" -#: adjfeedback/models.py:113 +#: adjfeedback/models.py msgid "select one" msgstr "crwdns29388:0crwdne29388:0" -#: adjfeedback/models.py:114 +#: adjfeedback/models.py msgid "select multiple" msgstr "crwdns29390:0crwdne29390:0" -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "tournament" msgstr "crwdns29392:0crwdne29392:0" -#: adjfeedback/models.py:143 +#: adjfeedback/models.py msgid "sequence number" msgstr "crwdns29394:0crwdne29394:0" -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" msgstr "crwdns29396:0crwdne29396:0" -#: adjfeedback/models.py:148 +#: adjfeedback/models.py msgid "name" msgstr "crwdns29398:0crwdne29398:0" -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" msgstr "crwdns29400:0crwdne29400:0" -#: adjfeedback/models.py:151 +#: adjfeedback/models.py msgid "reference" msgstr "crwdns29402:0crwdne29402:0" -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" msgstr "crwdns29404:0crwdne29404:0" -#: adjfeedback/models.py:155 +#: adjfeedback/models.py msgid "from adjudicator" msgstr "crwdns29406:0crwdne29406:0" -#: adjfeedback/models.py:156 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" msgstr "crwdns29408:0crwdne29408:0" -#: adjfeedback/models.py:158 +#: adjfeedback/models.py msgid "from team" msgstr "crwdns29410:0crwdne29410:0" -#: adjfeedback/models.py:159 +#: adjfeedback/models.py msgid "Teams should be asked this question" msgstr "crwdns29412:0crwdne29412:0" -#: adjfeedback/models.py:162 +#: adjfeedback/models.py msgid "answer type" msgstr "crwdns29414:0crwdne29414:0" -#: adjfeedback/models.py:164 +#: adjfeedback/models.py msgid "required" msgstr "crwdns29416:0crwdne29416:0" -#: adjfeedback/models.py:165 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" msgstr "crwdns29418:0crwdne29418:0" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "minimum value" msgstr "crwdns29420:0crwdne29420:0" -#: adjfeedback/models.py:168 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "crwdns29422:0crwdne29422:0" -#: adjfeedback/models.py:170 +#: adjfeedback/models.py msgid "maximum value" msgstr "crwdns29424:0crwdne29424:0" -#: adjfeedback/models.py:171 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" msgstr "crwdns29426:0crwdne29426:0" -#: adjfeedback/models.py:176 +#: adjfeedback/models.py msgid "choices" msgstr "crwdns29428:0crwdne29428:0" -#: adjfeedback/models.py:177 +#: adjfeedback/models.py msgid "Permissible choices for select one/multiple fields (ignored for other fields)" msgstr "crwdns51914:0crwdne51914:0" -#: adjfeedback/models.py:182 +#: adjfeedback/models.py msgid "adjudicator feedback question" msgstr "crwdns29432:0crwdne29432:0" -#: adjfeedback/models.py:183 +#: adjfeedback/models.py msgid "adjudicator feedback questions" msgstr "crwdns29434:0crwdne29434:0" -#: adjfeedback/models.py:241 adjfeedback/views.py:768 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" msgstr "crwdns29436:0crwdne29436:0" -#: adjfeedback/models.py:242 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" msgstr "crwdns51074:0crwdne51074:0" -#: adjfeedback/models.py:246 +#: adjfeedback/models.py msgid "adjudicator feedback" msgstr "crwdns29440:0crwdne29440:0" -#: adjfeedback/models.py:247 +#: adjfeedback/models.py msgid "adjudicator feedbacks" msgstr "crwdns29442:0crwdne29442:0" -#: adjfeedback/models.py:307 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." msgstr "crwdns29444:0crwdne29444:0" -#: adjfeedback/models.py:310 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." msgstr "crwdns29446:0crwdne29446:0" -#: adjfeedback/models.py:312 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" msgstr "crwdns35160:0crwdne35160:0" -#: adjfeedback/models.py:314 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." msgstr "crwdns29450:0crwdne29450:0" -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" msgstr "crwdns33934:0crwdne33934:0" -#: adjfeedback/tables.py:35 +#: adjfeedback/tables.py msgid "N/A" msgstr "crwdns51568:0crwdne51568:0" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py msgid "Current weighted score" msgstr "crwdns33936:0crwdne33936:0" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." msgstr "crwdns33938:0crwdne33938:0" -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" msgstr "crwdns35558:0crwdne35558:0" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" msgstr "crwdns35560:0crwdne35560:0" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" msgstr "crwdns35562:0crwdne35562:0" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" msgstr "crwdns35564:0crwdne35564:0" -#: adjfeedback/tables.py:84 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" msgstr "crwdns35566:0crwdne35566:0" -#: adjfeedback/tables.py:93 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." msgstr "crwdns33950:0crwdne33950:0" -#: adjfeedback/tables.py:97 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" msgstr "crwdns33952:0crwdne33952:0" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Feedback Per Round" msgstr "crwdns29452:0crwdne29452:0" -#: adjfeedback/tables.py:107 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" msgstr "crwdns33954:0crwdne33954:0" -#: adjfeedback/tables.py:125 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" msgstr[0] "crwdns35162:1%(count)scrwdne35162:1" msgstr[1] "crwdns35162:5%(count)scrwdne35162:5" -#: adjfeedback/tables.py:148 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" msgstr "crwdns33960:0crwdne33960:0" -#: adjfeedback/tables.py:172 +#: adjfeedback/tables.py msgid "View Missing Feedback" msgstr "crwdns33962:0crwdne33962:0" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" msgstr "crwdns29454:0crwdne29454:0" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" msgstr "crwdns29456:0crwdne29456:0" -#: adjfeedback/templates/enter_feedback.html:9 -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format msgid "Add Feedback from %(name)s" msgstr "crwdns51698:0%(name)scrwdne51698:0" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" msgstr "crwdns29460:0crwdne29460:0" -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" msgstr "crwdns29462:0crwdne29462:0" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." msgstr "crwdns33964:0crwdne33964:0" -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." msgstr "crwdns33966:0crwdne33966:0" -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." msgstr "crwdns29464:0crwdne29464:0" -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "crwdns29466:0crwdne29466:0" -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" msgstr "crwdns29468:0crwdne29468:0" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" msgstr "crwdns29470:0crwdne29470:0" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" msgstr "crwdns29472:0crwdne29472:0" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" msgstr "crwdns29474:0crwdne29474:0" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" msgstr "crwdns33968:0crwdne33968:0" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" msgstr "crwdns33970:0crwdne33970:0" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" msgstr "crwdns33972:0crwdne33972:0" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" msgstr "crwdns29480:0crwdne29480:0" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" msgstr "crwdns29482:0%(source_type)scrwdnd29482:0%(source_name)scrwdne29482:0" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." msgstr "crwdns29484:0%(source_name)scrwdne29484:0" -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." msgstr "crwdns29486:0%(source_name)scrwdne29486:0" -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." msgstr "crwdns33974:0crwdne33974:0" -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." msgstr "crwdns29490:0crwdne29490:0" -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." msgstr "crwdns29492:0crwdne29492:0" -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." msgstr "crwdns29494:0crwdne29494:0" -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." msgstr "crwdns29496:0crwdne29496:0" -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." msgstr "crwdns29498:0crwdne29498:0" -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" msgstr "crwdns51076:0%(round)scrwdnd51076:0%(score)scrwdne51076:0" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "On %(adjudicator)s" msgstr "crwdns51794:0%(adjudicator)scrwdne51794:0" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" -msgstr "crwdns33980:0%(as)scrwdne33980:0" +msgid "Received as %(as_type)s" +msgstr "crwdns52153:0%(as_type)scrwdne52153:0" -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" msgstr "crwdns51080:0%(base)scrwdne51080:0" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" msgstr "crwdns33982:0%(source)scrwdnd33982:0%(relationship)scrwdne33982:0" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" msgstr "crwdns33984:0%(source)scrwdnd33984:0%(relationship)scrwdnd33984:0%(side)scrwdne33984:0" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" msgstr "crwdns29512:0crwdne29512:0" -#: adjfeedback/templates/feedback_card.html:88 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "crwdns33986:0%(time)scrwdne33986:0" -#: adjfeedback/templates/feedback_card.html:93 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." msgstr "crwdns35042:0crwdne35042:0" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" msgstr "crwdns33990:0crwdne33990:0" -#: adjfeedback/templates/feedback_card.html:98 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" msgstr "crwdns33992:0crwdne33992:0" -#: adjfeedback/templates/feedback_card.html:103 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." msgstr "crwdns35044:0crwdne35044:0" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" msgstr "crwdns29518:0crwdne29518:0" -#: adjfeedback/templates/feedback_card.html:108 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" msgstr "crwdns29520:0crwdne29520:0" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" msgstr "crwdns29522:0crwdne29522:0" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" msgstr "crwdns29524:0%(c_breaking)scrwdne29524:0" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." msgstr "crwdns29526:0%(option_url)scrwdne29526:0" -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." msgstr "crwdns51916:0%(option_url)scrwdne51916:0" -#: adjfeedback/templates/feedback_overview.html:18 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." msgstr "crwdns51918:0%(option_url)scrwdne51918:0" -#: adjfeedback/templates/feedback_overview.html:22 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." msgstr "crwdns29530:0%(option_url)scrwdne29530:0" -#: adjfeedback/templates/feedback_overview.html:30 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgstr[0] "crwdns29532:1%(nadjs_outside_range)scrwdnd29532:1%(min_score)scrwdnd29532:1%(max_score)scrwdnd29532:1%(feedback_settings_url)scrwdne29532:1" msgstr[1] "crwdns29532:5%(nadjs_outside_range)scrwdnd29532:5%(min_score)scrwdnd29532:5%(max_score)scrwdnd29532:5%(feedback_settings_url)scrwdne29532:5" -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgstr[0] "crwdns29534:1%(count)scrwdnd29534:1%(min)scrwdnd29534:1%(max)scrwdnd29534:1%(percent)scrwdne29534:1" msgstr[1] "crwdns29534:5%(count)scrwdnd29534:5%(min)scrwdnd29534:5%(max)scrwdnd29534:5%(percent)scrwdne29534:5" -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" msgstr "crwdns29536:0%(min_score)scrwdnd29536:0%(max_score)scrwdne29536:0" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" msgstr "crwdns51082:0crwdne51082:0" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" msgstr "crwdns29540:0crwdne29540:0" -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." msgstr "crwdns29542:0%(round)scrwdne29542:0" -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" msgstr "crwdns29544:0crwdne29544:0" -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." msgstr[0] "crwdns29546:1%(c_chairs)scrwdnd29546:1%(c_chairs)scrwdne29546:1" msgstr[1] "crwdns29546:5%(c_chairs)scrwdnd29546:5%(c_chairs)scrwdne29546:5" -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." msgstr[0] "crwdns29548:1%(c_debates)scrwdnd29548:1%(c_chairs)scrwdne29548:1" msgstr[1] "crwdns29548:5%(c_debates)scrwdnd29548:5%(c_chairs)scrwdne29548:5" -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" msgstr[0] "crwdns29550:1%(c_chairs)scrwdne29550:1" msgstr[1] "crwdns29550:5%(c_chairs)scrwdne29550:5" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." msgstr "crwdns29552:0crwdne29552:0" -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" msgstr[0] "crwdns29554:1%(c_panellists)scrwdne29554:1" msgstr[1] "crwdns29554:5%(c_panellists)scrwdne29554:5" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." msgstr "crwdns29556:0%(min_voting)scrwdne29556:0" -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" msgstr[0] "crwdns29558:1%(c_trainees)scrwdne29558:1" msgstr[1] "crwdns29558:5%(c_trainees)scrwdne29558:5" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" msgstr "crwdns29560:0%(min_voting_score)scrwdne29560:0" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" msgstr "crwdns35568:0crwdne35568:0" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." msgstr "crwdns29564:0%(pref.adj_min_score)scrwdnd29564:0%(pref.adj_max_score)scrwdnd29564:0%(feedback_options)scrwdne29564:0" -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." msgstr "crwdns29566:0%(min_voting_score)scrwdnd29566:0%(draw_rules)scrwdne29566:0" -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" msgstr "crwdns35570:0crwdne35570:0" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" msgstr "crwdns35572:0crwdne35572:0" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" msgstr "crwdns29576:0crwdne29576:0" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" msgstr "crwdns29578:0crwdne29578:0" -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" msgstr "crwdns29582:0crwdne29582:0" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." msgstr "crwdns29584:0%(import_url)scrwdne29584:0" -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" msgstr "crwdns29586:0crwdne29586:0" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." msgstr "crwdns29588:0crwdne29588:0" -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" msgstr "crwdns29590:0crwdne29590:0" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" msgstr "crwdns29592:0crwdne29592:0" -#: adjfeedback/views.py:118 +#: adjfeedback/views.py msgid "Feedback Overview" msgstr "crwdns29594:0crwdne29594:0" -#: adjfeedback/views.py:142 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" msgstr "crwdns29596:0crwdne29596:0" -#: adjfeedback/views.py:153 adjfeedback/views.py:177 adjfeedback/views.py:192 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" msgstr[0] "crwdns29598:1%(count)dcrwdne29598:1" msgstr[1] "crwdns29598:5%(count)dcrwdne29598:5" -#: adjfeedback/views.py:156 adjfeedback/views.py:182 adjfeedback/views.py:197 +#: adjfeedback/views.py msgid "Feedbacks" msgstr "crwdns29600:0crwdne29600:0" -#: adjfeedback/views.py:163 +#: adjfeedback/views.py msgid "Find Feedback" msgstr "crwdns29602:0crwdne29602:0" -#: adjfeedback/views.py:171 adjfeedback/views.py:710 +#: adjfeedback/views.py msgid "From Teams" msgstr "crwdns29604:0crwdne29604:0" -#: adjfeedback/views.py:186 adjfeedback/views.py:704 +#: adjfeedback/views.py msgid "From Adjudicators" msgstr "crwdns29606:0crwdne29606:0" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "Latest Feedback" msgstr "crwdns29608:0crwdne29608:0" -#: adjfeedback/views.py:272 +#: adjfeedback/views.py msgid "(30 most recent)" msgstr "crwdns29610:0crwdne29610:0" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "Only Comments" msgstr "crwdns33996:0crwdne33996:0" -#: adjfeedback/views.py:283 +#: adjfeedback/views.py msgid "(250 most recent)" msgstr "crwdns33998:0crwdne33998:0" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "Important Feedback" msgstr "crwdns29612:0crwdne29612:0" -#: adjfeedback/views.py:295 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" msgstr "crwdns29614:0crwdne29614:0" -#: adjfeedback/views.py:362 +#: adjfeedback/views.py msgid "A Team" msgstr "crwdns29616:0crwdne29616:0" -#: adjfeedback/views.py:367 +#: adjfeedback/views.py msgid "Team" msgstr "crwdns29618:0crwdne29618:0" -#: adjfeedback/views.py:374 adjfeedback/views.py:391 +#: adjfeedback/views.py msgid "Institution" msgstr "crwdns29620:0crwdne29620:0" -#: adjfeedback/views.py:377 +#: adjfeedback/views.py msgid "An Adjudicator" msgstr "crwdns29622:0crwdne29622:0" -#: adjfeedback/views.py:384 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "crwdns29624:0crwdne29624:0" -#: adjfeedback/views.py:511 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." msgstr "crwdns29626:0%(source)scrwdnd29626:0%(target)scrwdne29626:0" -#: adjfeedback/views.py:541 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." msgstr "crwdns29628:0%(source)scrwdnd29628:0%(target)scrwdne29628:0" -#: adjfeedback/views.py:625 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" msgstr "crwdns51084:0%(adjudicator)scrwdne51084:0" -#: adjfeedback/views.py:648 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." msgstr "crwdns35574:0crwdne35574:0" -#: adjfeedback/views.py:675 +#: adjfeedback/views.py msgid "Feedback Progress" msgstr "crwdns29636:0crwdne29636:0" -#: adjfeedback/views.py:696 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" msgstr[0] "crwdns34000:1%(nmissing)dcrwdnd34000:1%(fulfilled)crwdne34000:1" msgstr[1] "crwdns34000:5%(nmissing)dcrwdnd34000:5%(fulfilled)crwdne34000:5" -#: adjfeedback/views.py:741 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." msgstr "crwdns51086:0%(adjudicator)scrwdnd51086:0%(source)scrwdnd51086:0%(result)scrwdne51086:0" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "confirmed" msgstr "crwdns34002:0crwdne34002:0" -#: adjfeedback/views.py:755 +#: adjfeedback/views.py msgid "un-confirmed" msgstr "crwdns34004:0crwdne34004:0" -#: adjfeedback/views.py:768 +#: adjfeedback/views.py msgid "un-ignored" msgstr "crwdns34006:0crwdne34006:0" -#: adjfeedback/views.py:804 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." diff --git a/tabbycat/availability/locale/tzl/LC_MESSAGES/django.po b/tabbycat/availability/locale/tzl/LC_MESSAGES/django.po index 38b82fde7b2..6ff452ca9ba 100644 --- a/tabbycat/availability/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-11-18 21:01\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:57\n" "Last-Translator: \n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -17,298 +17,290 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" msgstr "crwdns29646:0crwdne29646:0" -#: availability/models.py:15 +#: availability/models.py msgid "content type" msgstr "crwdns29648:0crwdne29648:0" -#: availability/models.py:16 +#: availability/models.py msgid "object id" msgstr "crwdns29650:0crwdne29650:0" -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "crwdns29652:0crwdne29652:0" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" msgstr "crwdns29654:0crwdne29654:0" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" msgstr "crwdns29656:0crwdne29656:0" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" msgstr "crwdns29658:0crwdne29658:0" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" msgstr "crwdns29660:0crwdne29660:0" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" msgstr "crwdns29662:0%(prev_round)scrwdne29662:0" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" msgstr "crwdns29664:0crwdne29664:0" -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" msgstr "crwdns51088:0%(previous_unconfirmed)scrwdnd51088:0%(round)scrwdne51088:0" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" msgstr "crwdns29668:0crwdne29668:0" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." msgstr "crwdns29670:0crwdne29670:0" -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." msgstr "crwdns29672:0crwdne29672:0" -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." msgstr "crwdns51090:0crwdne51090:0" -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." msgstr "crwdns51092:0crwdne51092:0" -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." msgstr "crwdns29678:0crwdne29678:0" -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." msgstr "crwdns29680:0crwdne29680:0" -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." msgstr "crwdns29682:0crwdne29682:0" -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgstr[0] "crwdns29684:1%(prev_round)scrwdnd29684:1%(prev_round_results_url)scrwdnd29684:1%(prev_round)scrwdne29684:1" msgstr[1] "crwdns29684:5%(previous_unconfirmed)scrwdnd29684:5%(prev_round)scrwdnd29684:5%(prev_round_results_url)scrwdnd29684:5%(prev_round)scrwdne29684:5" -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " msgstr "crwdns51094:0%(round)scrwdnd51094:0%(complete_prev_round_url)scrwdnd51094:0%(prev_round)scrwdne51094:0" -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." msgstr "crwdns29688:0%(draw_type)scrwdnd29688:0%(change_round_url)scrwdne29688:0" -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." msgstr "crwdns29690:0%(change_round_url)scrwdne29690:0" -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." msgstr "crwdns29692:0%(draw_type)scrwdnd29692:0%(change_round_url)scrwdne29692:0" -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" msgstr "crwdns29694:0%(break_category)scrwdnd29694:0%(breakqual_teams_url)scrwdnd29694:0%(break_category)scrwdne29694:0" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." msgstr "crwdns29696:0%(break_category)scrwdnd29696:0%(breakqual_teams_url)scrwdnd29696:0%(break_category)scrwdne29696:0" -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." msgstr "crwdns35164:0%(standings_config_url)scrwdne35164:0" -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" msgstr "crwdns29698:0crwdne29698:0" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" msgstr "crwdns29700:0crwdne29700:0" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" msgstr "crwdns29702:0crwdne29702:0" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" msgstr "crwdns29704:0crwdne29704:0" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" msgstr "crwdns29706:0crwdne29706:0" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" msgstr "crwdns29708:0crwdne29708:0" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "crwdns29710:0crwdne29710:0" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "crwdns29712:0crwdne29712:0" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" msgstr "crwdns51096:0crwdne51096:0" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" msgstr "crwdns29716:0crwdne29716:0" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" msgstr "crwdns29718:0crwdne29718:0" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." msgstr "crwdns29720:0crwdne29720:0" -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." msgstr "crwdns29722:0crwdne29722:0" -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" msgstr "crwdns29724:0crwdne29724:0" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "crwdns34010:1crwdne34010:1" msgstr[1] "crwdns34010:5%(count)scrwdne34010:5" -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." msgstr[0] "crwdns34012:1%(count)scrwdne34012:1" msgstr[1] "crwdns34012:5%(count)scrwdne34012:5" -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" msgstr[0] "crwdns34014:1%(count)scrwdnd34014:1%(adjs_list)scrwdne34014:1" msgstr[1] "crwdns34014:5%(count)scrwdnd34014:5%(adjs_list)scrwdne34014:5" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." msgstr[0] "crwdns34016:1%(count)scrwdne34016:1" msgstr[1] "crwdns34016:5%(count)scrwdne34016:5" -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" msgstr[0] "crwdns34018:1%(count)scrwdnd34018:1%(adjs_list)scrwdne34018:1" msgstr[1] "crwdns34018:5%(count)scrwdnd34018:5%(adjs_list)scrwdne34018:5" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" msgstr "crwdns29726:0crwdne29726:0" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." msgstr[0] "crwdns29728:1crwdne29728:1" msgstr[1] "crwdns29728:5%(required_count)scrwdne29728:5" -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" msgstr "crwdns29730:0crwdne29730:0" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." msgstr[0] "crwdns51098:1%(count)scrwdne51098:1" msgstr[1] "crwdns51098:5%(count)scrwdne51098:5" -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" msgstr[0] "crwdns51100:1%(count)scrwdnd51100:1%(rooms_list)scrwdne51100:1" msgstr[1] "crwdns51100:5%(count)scrwdnd51100:5%(rooms_list)scrwdne51100:5" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." msgstr[0] "crwdns51102:1%(count)scrwdne51102:1" msgstr[1] "crwdns51102:5%(count)scrwdne51102:5" -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" msgstr[0] "crwdns51104:1%(count)scrwdnd51104:1%(rooms_list)scrwdne51104:1" msgstr[1] "crwdns51104:5%(count)scrwdnd51104:5%(rooms_list)scrwdne51104:5" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgstr[0] "crwdns51106:1crwdne51106:1" msgstr[1] "crwdns51106:5%(count)scrwdne51106:5" -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" msgstr "crwdns51108:0crwdne51108:0" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." msgstr[0] "crwdns51110:1crwdne51110:1" msgstr[1] "crwdns51110:5%(required_count)scrwdne51110:5" -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" msgstr "crwdns51112:0crwdne51112:0" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" msgstr "crwdns29742:0crwdne29742:0" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" @@ -316,7 +308,7 @@ msgstr[0] "crwdns29744:1%(nteams)dcrwdne29744:1" msgstr[1] "crwdns29744:5%(nteams)dcrwdne29744:5" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" @@ -326,7 +318,7 @@ msgstr[1] "crwdns29746:5%(ndebating)dcrwdne29746:5" #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" @@ -334,67 +326,67 @@ msgstr[0] "crwdns29748:1%(nbypassing)dcrwdne29748:1" msgstr[1] "crwdns29748:5%(nbypassing)dcrwdne29748:5" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" msgstr[0] "crwdns29750:1%(nadvancing)scrwdne29750:1" msgstr[1] "crwdns29750:5%(nadvancing)scrwdne29750:5" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" msgstr "crwdns29752:0crwdne29752:0" -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" msgstr "crwdns29754:0%(prev_round)scrwdne29754:0" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" msgstr "crwdns29756:0crwdne29756:0" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" msgstr "crwdns29758:0crwdne29758:0" -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" msgstr "crwdns29760:0crwdne29760:0" -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" msgstr "crwdns51114:0crwdne51114:0" -#: availability/views.py:260 +#: availability/views.py msgid "Room" msgstr "crwdns51116:0crwdne51116:0" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" msgstr "crwdns29766:0crwdne29766:0" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" msgstr "crwdns29768:0crwdne29768:0" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" msgstr "crwdns29770:0crwdne29770:0" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." msgstr "crwdns34030:0crwdne34030:0" -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." msgstr "crwdns51118:0crwdne51118:0" -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." msgstr "crwdns29774:0crwdne29774:0" -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." msgstr "crwdns51120:0crwdne51120:0" diff --git a/tabbycat/breakqual/locale/tzl/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/tzl/LC_MESSAGES/django.po index 3e431a95be6..0097ada0ea9 100644 --- a/tabbycat/breakqual/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-11-18 21:01\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" "Last-Translator: \n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -17,508 +17,506 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" msgstr "crwdns29778:0crwdne29778:0" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "crwdns29780:0%(rule)scrwdnd29780:0%(required)scrwdnd29780:0%(missing)scrwdne29780:0" +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "crwdns52255:1%(rule)scrwdnd52255:1%(missing)scrwdne52255:1" +msgstr[1] "crwdns52255:5%(rule)scrwdnd52255:5%(missing)scrwdne52255:5" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "crwdns29782:0crwdne29782:0" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "crwdns29784:0crwdne29784:0" -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" msgstr "crwdns29786:0crwdne29786:0" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" msgstr "crwdns29788:0crwdne29788:0" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" msgstr "crwdns29790:0crwdne29790:0" -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" msgstr "crwdns29792:0crwdne29792:0" -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" msgstr "crwdns29794:0crwdne29794:0" -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" msgstr "crwdns29796:0crwdne29796:0" -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" msgstr "crwdns29798:0crwdne29798:0" -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" msgstr "crwdns29800:0crwdne29800:0" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" msgstr "crwdns29802:0crwdne29802:0" -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" msgstr "crwdns29804:0crwdne29804:0" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" msgstr "crwdns29806:0crwdne29806:0" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" msgstr "crwdns29808:0crwdne29808:0" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" msgstr "crwdns29810:0crwdne29810:0" -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" msgstr "crwdns29812:0crwdne29812:0" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "crwdns29814:0crwdne29814:0" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "crwdns29816:0crwdne29816:0" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "crwdns29818:0crwdne29818:0" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "crwdns34032:0crwdne34032:0" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" msgstr "crwdns29824:0crwdne29824:0" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" msgstr "crwdns29826:0crwdne29826:0" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" msgstr "crwdns29828:0crwdne29828:0" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" msgstr "crwdns29830:0crwdne29830:0" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" msgstr "crwdns29832:0crwdne29832:0" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "crwdns29834:0crwdne29834:0" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "crwdns29836:0crwdne29836:0" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" msgstr "crwdns29838:0crwdne29838:0" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" msgstr "crwdns29840:0crwdne29840:0" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" msgstr "crwdns29842:0crwdne29842:0" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" msgstr "crwdns29844:0crwdne29844:0" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" msgstr "crwdns29846:0crwdne29846:0" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" msgstr "crwdns29848:0crwdne29848:0" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" msgstr "crwdns29850:0crwdne29850:0" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" msgstr "crwdns29852:0crwdne29852:0" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" msgstr "crwdns29854:0crwdne29854:0" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" msgstr "crwdns29856:0crwdne29856:0" -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" msgstr "crwdns51122:0crwdne51122:0" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." msgstr "crwdns51124:0%(eligibility_url)scrwdne51124:0" -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." msgstr "crwdns51126:0%(edit_db_url)scrwdne51126:0" -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" msgstr "crwdns51128:0crwdne51128:0" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." msgstr "crwdns29858:0%(feedback_url)scrwdne29858:0" -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" msgstr "crwdns29860:0crwdne29860:0" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " -msgstr "crwdns29862:0crwdne29862:0" +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +msgstr "crwdns52155:0crwdne52155:0" -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" msgstr "crwdns51130:0crwdne51130:0" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" msgstr "crwdns29922:0%(category)scrwdne29922:0" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " msgstr "crwdns29868:0%(size)scrwdne29868:0" -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" msgstr "crwdns29870:0crwdne29870:0" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" msgstr "crwdns29872:0crwdne29872:0" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" msgstr "crwdns29874:0crwdne29874:0" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" msgstr "crwdns29876:0crwdne29876:0" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" msgstr "crwdns29878:0crwdne29878:0" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" msgstr "crwdns29880:0crwdne29880:0" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" msgstr "crwdns29882:0crwdne29882:0" -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" msgstr "crwdns29884:0crwdne29884:0" -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" msgstr "crwdns29886:0crwdne29886:0" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" msgstr "crwdns29888:0crwdne29888:0" -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" msgstr "crwdns29890:0crwdne29890:0" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." msgstr "crwdns29892:0%(url)scrwdne29892:0" -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." msgstr "crwdns29894:0%(category)scrwdnd29894:0%(url)scrwdne29894:0" -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." msgstr "crwdns29896:0%(url)scrwdne29896:0" -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." msgstr "crwdns29898:0%(options_url)scrwdne29898:0" -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." msgstr "crwdns29900:0crwdne29900:0" -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." msgstr "crwdns29902:0crwdne29902:0" -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" msgstr "crwdns29904:0crwdne29904:0" -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" msgstr "crwdns51132:0%(category)scrwdne51132:0" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" msgstr "crwdns29908:0%(count)scrwdne29908:0" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" msgstr "crwdns34034:0crwdne34034:0" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" msgstr "crwdns29912:0crwdne29912:0" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." msgstr "crwdns29914:0%(categories_url)scrwdne29914:0" -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" msgstr "crwdns29916:0crwdne29916:0" -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "crwdns29920:0crwdne29920:0" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" msgstr "crwdns51134:0crwdne51134:0" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" msgstr "crwdns51136:0crwdne51136:0" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "crwdns51138:0crwdne51138:0" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "crwdns51140:0crwdne51140:0" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "crwdns51142:0crwdne51142:0" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "crwdns51144:0crwdne51144:0" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "crwdns51146:0crwdne51146:0" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "crwdns51148:0crwdne51148:0" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" msgstr "crwdns51150:0crwdne51150:0" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" msgstr "crwdns51152:0crwdne51152:0" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" msgstr "crwdns51154:0crwdne51154:0" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" msgstr "crwdns51156:0crwdne51156:0" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" msgstr "crwdns51158:0%scrwdne51158:0" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" msgstr "crwdns51160:0%scrwdne51160:0" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" msgstr "crwdns51162:0%scrwdne51162:0" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" msgstr "crwdns51164:0%scrwdne51164:0" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" msgstr "crwdns51166:0%scrwdne51166:0" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" msgstr "crwdns51168:0%scrwdne51168:0" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" msgstr "crwdns51170:0%scrwdne51170:0" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" msgstr "crwdns51172:0%scrwdne51172:0" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" msgstr "crwdns51174:0%scrwdne51174:0" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" msgstr "crwdns51176:0%scrwdne51176:0" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" msgstr "crwdns51178:0%scrwdne51178:0" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" msgstr "crwdns51180:0%scrwdne51180:0" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" msgstr "crwdns51182:0%scrwdne51182:0" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" msgstr "crwdns51184:0%scrwdne51184:0" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" msgstr "crwdns51186:0crwdne51186:0" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" msgstr "crwdns51188:0crwdne51188:0" -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" msgstr "crwdns29924:0%(category)scrwdnd29924:0%(message)scrwdne29924:0" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" msgstr "crwdns29926:0crwdne29926:0" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" msgstr "crwdns29928:0crwdne29928:0" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." msgstr "crwdns29930:0%(categories)scrwdne29930:0" -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." msgstr "crwdns29932:0%(category)scrwdne29932:0" -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." msgstr "crwdns29934:0crwdne29934:0" -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." msgstr "crwdns29936:0%(categories)scrwdne29936:0" -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" msgstr "crwdns29938:0crwdne29938:0" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" msgstr "crwdns29940:0crwdne29940:0" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "crwdns34036:0%scrwdne34036:0" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" diff --git a/tabbycat/draw/locale/tzl/LC_MESSAGES/django.po b/tabbycat/draw/locale/tzl/LC_MESSAGES/django.po index 6d4f126c4c9..eb8354d159d 100644 --- a/tabbycat/draw/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -17,1123 +17,1103 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "crwdns29942:1%(count)dcrwdnd29942:1%(status)scrwdne29942:1" -msgstr[1] "crwdns29942:5%(count)dcrwdnd29942:5%(status)scrwdne29942:5" - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "crwdns29944:0%(status)scrwdne29944:0" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." msgstr[0] "crwdns29946:1%(count)dcrwdne29946:1" msgstr[1] "crwdns29946:5%(count)dcrwdne29946:5" -#: draw/admin.py:93 +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "crwdns52157:0crwdne52157:0" + +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." msgstr[0] "crwdns29948:1%(count)dcrwdne29948:1" msgstr[1] "crwdns29948:5%(count)dcrwdne29948:5" -#: draw/apps.py:7 draw/views.py:452 draw/views.py:455 +#: draw/apps.py draw/views.py msgid "Draw" msgstr "crwdns29950:0crwdne29950:0" -#: draw/generator/__init__.py:14 +#: draw/generator/__init__.py msgid "Too many swaps" msgstr "crwdns29952:0crwdne29952:0" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" msgstr "crwdns29954:0crwdne29954:0" -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" msgstr "crwdns29956:0crwdne29956:0" -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" msgstr "crwdns29958:0crwdne29958:0" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "Bubble up (history)" msgstr "crwdns29960:0crwdne29960:0" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble down (history)" msgstr "crwdns29962:0crwdne29962:0" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble up (institution)" msgstr "crwdns29964:0crwdne29964:0" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble down (institution)" msgstr "crwdns29966:0crwdne29966:0" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" msgstr "crwdns29968:0crwdne29968:0" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" msgstr "crwdns29970:0crwdne29970:0" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Can't bubble up/down" msgstr "crwdns29972:0crwdne29972:0" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Pull-up team" msgstr "crwdns29974:0crwdne29974:0" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." msgstr "crwdns29976:0%dcrwdne29976:0" -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." msgstr "crwdns29978:0%dcrwdne29978:0" -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." msgstr "crwdns29980:0%(nbypassing)dcrwdne29980:0" -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." -msgstr "crwdns29982:0%(nbypassing)dcrwdnd29982:0%(advancing)dcrwdne29982:0" +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." +msgstr "crwdns52159:0%(nbypassing)dcrwdnd52159:0%(nadvancing)dcrwdne52159:0" -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." msgstr "crwdns29984:0%dcrwdne29984:0" -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." msgstr "crwdns29986:0%(alpha)crwdne29986:0" -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." msgstr "crwdns29988:0%(num)dcrwdne29988:0" -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." msgstr "crwdns29990:0crwdne29990:0" -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." msgstr "crwdns29992:0%dcrwdne29992:0" -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." msgstr "crwdns29994:0%dcrwdne29994:0" -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." msgstr "crwdns29996:0%(noninteger)dcrwdnd29996:0%(total)dcrwdne29996:0" -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." msgstr "crwdns29998:0%(aff_count)dcrwdnd29998:0%(neg_count)dcrwdne29998:0" -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." msgstr "crwdns30000:0crwdne30000:0" -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." msgstr "crwdns30002:0%(type)scrwdne30002:0" -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." msgstr "crwdns30004:0%(type)scrwdne30004:0" -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" msgstr "crwdns30006:0%(option)scrwdne30006:0" -#: draw/manager.py:276 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." msgstr "crwdns30008:0%(size)dcrwdne30008:0" -#: draw/models.py:29 draw/models.py:35 +#: draw/models.py msgid "none" msgstr "crwdns30010:0crwdne30010:0" -#: draw/models.py:30 +#: draw/models.py msgid "postponed" msgstr "crwdns30012:0crwdne30012:0" -#: draw/models.py:31 draw/models.py:36 +#: draw/models.py msgid "draft" msgstr "crwdns30014:0crwdne30014:0" -#: draw/models.py:32 draw/models.py:37 +#: draw/models.py msgid "confirmed" msgstr "crwdns30016:0crwdne30016:0" -#: draw/models.py:43 draw/models.py:375 +#: draw/models.py msgid "round" msgstr "crwdns30018:0crwdne30018:0" -#: draw/models.py:45 +#: draw/models.py msgid "room" msgstr "crwdns51656:0crwdne51656:0" -#: draw/models.py:48 +#: draw/models.py msgid "bracket" msgstr "crwdns30024:0crwdne30024:0" -#: draw/models.py:50 +#: draw/models.py msgid "room rank" msgstr "crwdns30026:0crwdne30026:0" -#: draw/models.py:56 +#: draw/models.py msgid "importance" msgstr "crwdns30032:0crwdne30032:0" -#: draw/models.py:58 +#: draw/models.py msgid "result status" msgstr "crwdns30034:0crwdne30034:0" -#: draw/models.py:60 +#: draw/models.py msgid "sides confirmed" msgstr "crwdns30036:0crwdne30036:0" -#: draw/models.py:61 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." msgstr "crwdns30038:0crwdne30038:0" -#: draw/models.py:64 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "crwdns30040:0crwdne30040:0" -#: draw/models.py:65 +#: draw/models.py msgid "debates" msgstr "crwdns30042:0crwdne30042:0" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:84 draw/models.py:109 +#: draw/models.py msgid " (sides not confirmed)" msgstr "crwdns30044:0crwdne30044:0" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:96 draw/models.py:113 +#: draw/models.py msgid " vs " msgstr "crwdns30046:0crwdne30046:0" -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" msgstr "crwdns30048:0crwdne30048:0" -#: draw/models.py:263 +#: draw/models.py msgid "negative" msgstr "crwdns30050:0crwdne30050:0" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" msgstr "crwdns30052:0crwdne30052:0" -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" msgstr "crwdns30054:0crwdne30054:0" -#: draw/models.py:266 +#: draw/models.py msgid "closing government" msgstr "crwdns30056:0crwdne30056:0" -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" msgstr "crwdns30058:0crwdne30058:0" -#: draw/models.py:274 draw/models.py:377 +#: draw/models.py msgid "team" msgstr "crwdns30060:0crwdne30060:0" -#: draw/models.py:276 draw/models.py:379 +#: draw/models.py msgid "side" msgstr "crwdns30062:0crwdne30062:0" -#: draw/models.py:281 +#: draw/models.py msgid "debate team" msgstr "crwdns30064:0crwdne30064:0" -#: draw/models.py:282 +#: draw/models.py msgid "debate teams" msgstr "crwdns30066:0crwdne30066:0" -#: draw/models.py:303 +#: draw/models.py #, python-format msgid "placed %(place)s" msgstr "crwdns51666:0%(place)scrwdne51666:0" -#: draw/models.py:305 draw/models.py:312 +#: draw/models.py msgid "result unknown" msgstr "crwdns30076:0crwdne30076:0" -#: draw/models.py:308 +#: draw/models.py msgid "won" msgstr "crwdns30078:0crwdne30078:0" -#: draw/models.py:310 +#: draw/models.py msgid "lost" msgstr "crwdns30080:0crwdne30080:0" -#: draw/models.py:383 +#: draw/models.py msgid "team side allocation" msgstr "crwdns30082:0crwdne30082:0" -#: draw/models.py:384 +#: draw/models.py msgid "team side allocations" msgstr "crwdns30084:0crwdne30084:0" #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" msgstr "crwdns51190:0%(side)scrwdnd51190:0%(metric)scrwdne51190:0" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" msgstr "crwdns30088:0%(num)dcrwdne30088:0" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" msgstr "crwdns30090:0crwdne30090:0" -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" msgstr "crwdns30092:0crwdne30092:0" -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" msgstr "crwdns30098:0crwdne30098:0" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" msgstr "crwdns30100:0crwdne30100:0" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" msgstr "crwdns30102:0crwdne30102:0" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" msgstr "crwdns30104:0crwdne30104:0" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" msgstr "crwdns30106:0crwdne30106:0" -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" msgstr "crwdns30108:0crwdne30108:0" -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" msgstr "crwdns35166:0crwdne35166:0" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" msgstr "crwdns30110:0crwdne30110:0" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" msgstr "crwdns30112:0crwdne30112:0" -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" msgstr "crwdns30114:0crwdne30114:0" -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" msgstr "crwdns30116:0crwdne30116:0" -#: draw/tables.py:292 +#: draw/tables.py msgid "After" msgstr "crwdns30118:0crwdne30118:0" -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" msgstr "crwdns30120:0crwdne30120:0" -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" msgstr "crwdns30122:0crwdne30122:0" -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" msgstr "crwdns30124:0crwdne30124:0" -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" msgstr "crwdns30126:0crwdne30126:0" -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" msgstr "crwdns30128:0crwdne30128:0" -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "crwdns30130:0%(team)scrwdnd30130:0%(metric)scrwdne30130:0" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" msgstr "crwdns30132:0crwdne30132:0" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" msgstr "crwdns30134:0crwdne30134:0" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" msgstr "crwdns30136:0crwdne30136:0" -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" msgstr "crwdns30138:0crwdne30138:0" -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." msgstr "crwdns30140:0crwdne30140:0" -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." msgstr "crwdns30142:0crwdne30142:0" -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" msgstr "crwdns30144:0crwdne30144:0" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." msgstr "crwdns30146:0crwdne30146:0" -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." msgstr[0] "crwdns30154:1crwdne30154:1" msgstr[1] "crwdns30154:5%(ndebates)scrwdne30154:5" -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" msgstr[0] "crwdns30156:1%(adjudicators)scrwdne30156:1" msgstr[1] "crwdns30156:5%(nadjs)scrwdnd30156:5%(adjudicators)scrwdne30156:5" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." msgstr[0] "crwdns30158:1crwdne30158:1" msgstr[1] "crwdns30158:5%(ndebates)scrwdne30158:5" -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." msgstr[0] "crwdns30160:1crwdne30160:1" msgstr[1] "crwdns30160:5%(ndebates)scrwdne30160:5" -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" msgstr[0] "crwdns34040:1%(adjudicators)scrwdne34040:1" msgstr[1] "crwdns34040:5%(nadjs)scrwdnd34040:5%(adjudicators)scrwdne34040:5" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." msgstr[0] "crwdns34042:1crwdne34042:1" msgstr[1] "crwdns34042:5%(ndebates)scrwdne34042:5" -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" msgstr[0] "crwdns30162:1%(teams)scrwdne30162:1" msgstr[1] "crwdns30162:5%(nteams)scrwdnd30162:5%(teams)scrwdne30162:5" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." msgstr[0] "crwdns51192:1crwdne51192:1" msgstr[1] "crwdns51192:5%(ndebates)scrwdne51192:5" -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" msgstr[0] "crwdns51194:1%(rooms)scrwdne51194:1" msgstr[1] "crwdns51194:5%(ndebates)scrwdnd51194:5%(rooms)scrwdne51194:5" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." msgstr[0] "crwdns51196:1crwdne51196:1" msgstr[1] "crwdns51196:5%(ndebates)scrwdne51196:5" -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" msgstr "crwdns34044:0crwdne34044:0" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" msgstr "crwdns30174:0crwdne30174:0" -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" msgstr "crwdns30176:0crwdne30176:0" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" msgstr "crwdns30178:0crwdne30178:0" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" msgstr "crwdns30180:0crwdne30180:0" -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" msgstr "crwdns30182:0crwdne30182:0" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" msgstr "crwdns30184:0crwdne30184:0" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" msgstr "crwdns30150:0crwdne30150:0" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" msgstr "crwdns51198:0%(round)scrwdne51198:0" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" msgstr "crwdns51200:0%(round)scrwdne51200:0" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" msgstr "crwdns51202:0%(round)scrwdne51202:0" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" msgstr "crwdns30192:0crwdne30192:0" -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" msgstr "crwdns30194:0%(start_time)scrwdne30194:0" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" msgstr "crwdns30196:0crwdne30196:0" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" msgstr "crwdns30200:0crwdne30200:0" -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" msgstr "crwdns30202:0crwdne30202:0" -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." msgstr[0] "crwdns30204:1%(motions_count)scrwdne30204:1" msgstr[1] "crwdns30204:5%(motions_count)scrwdne30204:5" -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "crwdns30206:0crwdne30206:0" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "crwdns52161:1crwdne52161:1" +msgstr[1] "crwdns52161:5crwdne52161:5" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" msgstr "crwdns30208:0crwdne30208:0" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" -msgstr "crwdns30210:0crwdne30210:0" - -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." -msgstr "crwdns30212:0crwdne30212:0" - -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "crwdns30214:0crwdne30214:0" +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." +msgstr "crwdns52163:0crwdne52163:0" -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." -msgstr "crwdns30216:0crwdne30216:0" - -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "crwdns30218:0crwdne30218:0" +msgid_plural "Enter motions" +msgstr[0] "crwdns52165:1crwdne52165:1" +msgstr[1] "crwdns52165:5crwdne52165:5" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" msgstr "crwdns30220:0crwdne30220:0" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." msgstr "crwdns30222:0crwdne30222:0" -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." msgstr "crwdns30224:0crwdne30224:0" -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" msgstr "crwdns30226:0crwdne30226:0" -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." msgstr "crwdns30228:0crwdne30228:0" -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" msgstr "crwdns30230:0crwdne30230:0" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "crwdns30232:0%(alert_link)scrwdne30232:0" -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." msgstr "crwdns30234:0%(alert_link)scrwdne30234:0" -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" msgstr "crwdns30236:0crwdne30236:0" -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "crwdns30240:0crwdne30240:0" -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." msgstr "crwdns30242:0crwdne30242:0" -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." msgstr "crwdns30244:0crwdne30244:0" -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." msgstr "crwdns30246:0crwdne30246:0" -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." msgstr "crwdns30248:0crwdne30248:0" -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "crwdns30250:0crwdne30250:0" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "crwdns30252:0crwdne30252:0" +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "crwdns52167:1crwdne52167:1" +msgstr[1] "crwdns52167:5crwdne52167:5" -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "crwdns30254:0crwdne30254:0" +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "crwdns52169:1crwdne52169:1" +msgstr[1] "crwdns52169:5crwdne52169:5" -#: draw/templates/draw_display_admin.html:200 +#: draw/templates/draw_display_admin.html msgid "Release Motion" -msgstr "crwdns30256:0crwdne30256:0" +msgid_plural "Release Motions" +msgstr[0] "crwdns52171:1crwdne52171:1" +msgstr[1] "crwdns52171:5crwdne52171:5" -#: draw/templates/draw_display_admin.html:201 -msgid "Release motion to public" -msgstr "crwdns30258:0crwdne30258:0" - -#: draw/templates/draw_display_admin.html:202 -msgid "Unrelease motion to public" -msgstr "crwdns30260:0crwdne30260:0" +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "crwdns52269:1crwdne52269:1" +msgstr[1] "crwdns52269:5crwdne52269:5" -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." msgstr "crwdns30262:0crwdne30262:0" -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." msgstr "crwdns30264:0crwdne30264:0" -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "crwdns30266:0crwdne30266:0" - -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "crwdns30268:0crwdne30268:0" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "crwdns52175:1crwdne52175:1" +msgstr[1] "crwdns52175:5crwdne52175:5" -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "crwdns30270:0crwdne30270:0" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "crwdns52177:1crwdne52177:1" +msgstr[1] "crwdns52177:5crwdne52177:5" -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "crwdns30272:0crwdne30272:0" +msgid_plural "Motions have been released publicly." +msgstr[0] "crwdns52179:1crwdne52179:1" +msgstr[1] "crwdns52179:5crwdne52179:5" -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" msgstr "crwdns30274:0crwdne30274:0" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." msgstr "crwdns30276:0%(alert_link)scrwdne30276:0" -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" msgstr "crwdns34050:0crwdne34050:0" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" msgstr "crwdns51204:0crwdne51204:0" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" msgstr "crwdns34054:0crwdne34054:0" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" msgstr "crwdns51206:0crwdne51206:0" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" msgstr "crwdns34058:0crwdne34058:0" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" msgstr "crwdns51208:0%(round)scrwdne51208:0" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" msgstr "crwdns51210:0%(round)scrwdne51210:0" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" msgstr "crwdns34064:0crwdne34064:0" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" msgstr "crwdns34066:0crwdne34066:0" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" msgstr "crwdns34068:0crwdne34068:0" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" msgstr "crwdns30278:0crwdne30278:0" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" msgstr "crwdns34070:0crwdne34070:0" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" msgstr "crwdns34072:0crwdne34072:0" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" msgstr "crwdns34074:0crwdne34074:0" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" msgstr "crwdns30280:0crwdne30280:0" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" msgstr "crwdns30282:0crwdne30282:0" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" msgstr "crwdns30284:0crwdne30284:0" -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" msgstr "crwdns30286:0crwdne30286:0" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" msgstr "crwdns30288:0crwdne30288:0" -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" msgstr "crwdns51212:0crwdne51212:0" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" msgstr "crwdns51214:0crwdne51214:0" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" msgstr "crwdns30290:0crwdne30290:0" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" msgstr "crwdns30292:0crwdne30292:0" -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" msgstr "crwdns30294:0crwdne30294:0" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" msgstr "crwdns30296:0crwdne30296:0" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" msgstr "crwdns30298:0crwdne30298:0" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" msgstr "crwdns30300:0crwdne30300:0" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." msgstr "crwdns51216:0%(round)scrwdne51216:0" -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." msgstr "crwdns34076:0crwdne34076:0" -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" msgstr "crwdns30312:0crwdne30312:0" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." msgstr "crwdns34078:0crwdne34078:0" -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" msgstr "crwdns30316:0crwdne30316:0" -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" msgstr "crwdns30318:0crwdne30318:0" -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" msgstr "crwdns51218:0crwdne51218:0" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" msgstr "crwdns51220:0crwdne51220:0" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" msgstr "crwdns51222:0crwdne51222:0" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" msgstr "crwdns35168:0crwdne35168:0" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." msgstr[0] "crwdns35170:1%(npanels)scrwdne35170:1" msgstr[1] "crwdns35170:5%(npanels)scrwdne35170:5" -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" msgstr "crwdns35172:0crwdne35172:0" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" msgstr "crwdns51224:0%(round)scrwdne51224:0" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" msgstr "crwdns30326:0crwdne30326:0" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." msgstr[0] "crwdns30328:1crwdne30328:1" msgstr[1] "crwdns30328:5%(ndebates)scrwdne30328:5" -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" msgstr "crwdns30330:0crwdne30330:0" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" msgstr "crwdns30332:0crwdne30332:0" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." msgstr "crwdns35176:0%(standings_config_url)scrwdne35176:0" -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." msgstr "crwdns30334:0%(metric)scrwdnd30334:0%(standings_config_url)scrwdne30334:0" -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." msgstr "crwdns30336:0%(edit_matchups_url)scrwdne30336:0" -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." msgstr "crwdns34088:0%(feedback_config_url)scrwdne34088:0" -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." msgstr "crwdns30338:0crwdne30338:0" -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " msgstr "crwdns30340:0crwdne30340:0" -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." msgstr "crwdns51226:0%(round)scrwdnd51226:0%(availability_url)scrwdne51226:0" -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." msgstr "crwdns30346:0crwdne30346:0" -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." -msgstr "crwdns30348:0%(cost_func)scrwdnd30348:0%(exponent)scrwdne30348:0" +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgstr "crwdns52181:0%(cost_func)scrwdnd52181:0%(exponent)scrwdne52181:0" -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." msgstr "crwdns30350:0crwdne30350:0" -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." msgstr "crwdns30352:0crwdne30352:0" -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." msgstr "crwdns30354:0crwdne30354:0" -#: draw/views.py:68 draw/views.py:483 +#: draw/views.py msgid "No debates in this round" msgstr "crwdns34090:0crwdne34090:0" -#: draw/views.py:76 +#: draw/views.py #, python-format msgid "Draw for %(round)s" msgstr "crwdns30374:0%(round)scrwdne30374:0" -#: draw/views.py:78 +#: draw/views.py msgid "Draws for Current Rounds" msgstr "crwdns34092:0crwdne34092:0" -#: draw/views.py:82 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" msgstr "crwdns30376:0%(time)scrwdnd30376:0%(time_zone)scrwdne30376:0" -#: draw/views.py:86 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" msgstr "crwdns34094:0%(time_zone)scrwdne34094:0" -#: draw/views.py:124 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" msgstr[0] "crwdns34096:1%(time)scrwdne34096:1" msgstr[1] "crwdns34096:5%(time)scrwdne34096:5" -#: draw/views.py:171 +#: draw/views.py msgid "The draw for this round hasn't been released." msgstr "crwdns34098:0crwdne34098:0" -#: draw/views.py:224 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" msgstr "crwdns30378:0%(tournament)scrwdne30378:0" -#: draw/views.py:382 +#: draw/views.py msgid "Adjudicator Assignments" msgstr "crwdns34100:0crwdne34100:0" -#: draw/views.py:404 +#: draw/views.py msgid "Position" msgstr "crwdns51708:0crwdne51708:0" -#: draw/views.py:424 +#: draw/views.py msgid "Team Pairings" msgstr "crwdns34102:0crwdne34102:0" -#: draw/views.py:447 +#: draw/views.py msgid "No Draw" msgstr "crwdns30380:0crwdne30380:0" -#: draw/views.py:449 +#: draw/views.py msgid "Draft Draw" msgstr "crwdns30382:0crwdne30382:0" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:541 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" msgstr "crwdns51228:0%(side)scrwdne51228:0" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:546 +#: draw/views.py msgid "BR" msgstr "crwdns30388:0crwdne30388:0" -#: draw/views.py:571 +#: draw/views.py msgid "Draw with Details" msgstr "crwdns30390:0crwdne30390:0" -#: draw/views.py:579 +#: draw/views.py msgid "Position Balance Report" msgstr "crwdns30392:0crwdne30392:0" -#: draw/views.py:590 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" msgstr "crwdns30394:0%(order)scrwdne30394:0" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:593 +#: draw/views.py msgid " (i.e., Shannon entropy)" msgstr "crwdns30396:0crwdne30396:0" -#: draw/views.py:623 +#: draw/views.py msgid "Teams with position imbalances" msgstr "crwdns30398:0crwdne30398:0" -#: draw/views.py:624 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" msgstr "crwdns30400:0crwdne30400:0" -#: draw/views.py:627 +#: draw/views.py msgid "Annotated draw" msgstr "crwdns30402:0crwdne30402:0" -#: draw/views.py:658 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" msgstr "crwdns30404:0%(round)scrwdne30404:0" -#: draw/views.py:666 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " msgstr "crwdns30406:0%(message)scrwdne30406:0" -#: draw/views.py:674 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " msgstr "crwdns35178:0%(message)scrwdne35178:0" -#: draw/views.py:683 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " msgstr "crwdns30410:0%(message)scrwdne30410:0" -#: draw/views.py:699 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "crwdns51230:0crwdne51230:0" -#: draw/views.py:726 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "crwdns30414:0crwdne30414:0" -#: draw/views.py:746 +#: draw/views.py msgid "Released the draw." msgstr "crwdns30422:0crwdne30422:0" -#: draw/views.py:761 +#: draw/views.py msgid "Unreleased the draw." msgstr "crwdns30424:0crwdne30424:0" -#: draw/views.py:774 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." msgstr "crwdns30426:0%(input)scrwdne30426:0" -#: draw/views.py:793 +#: draw/views.py msgid "Side Pre-Allocations" msgstr "crwdns30428:0crwdne30428:0" -#: draw/views.py:826 +#: draw/views.py msgid "Edit Matchups" msgstr "crwdns34104:0crwdne34104:0" diff --git a/tabbycat/importer/locale/tzl/LC_MESSAGES/django.po b/tabbycat/importer/locale/tzl/LC_MESSAGES/django.po index f55be22c15b..9621fec7b5f 100644 --- a/tabbycat/importer/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:55\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -17,416 +17,405 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" msgstr "crwdns30440:0%(lineno)dcrwdnd30440:0%(message)scrwdne30440:0" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" msgstr "crwdns30446:0%(institution)scrwdne30446:0" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" msgstr "crwdns30448:0%(institution)scrwdne30448:0" -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." msgstr "crwdns30450:0crwdne30450:0" -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "crwdns35180:1%(max_allowed)dcrwdnd35180:1%(given)dcrwdne35180:1" msgstr[1] "crwdns35180:5%(max_allowed)dcrwdnd35180:5%(given)dcrwdne35180:5" -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." msgstr "crwdns51232:0crwdne51232:0" -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "crwdns51234:1%(max_allowed)dcrwdnd51234:1%(given)dcrwdne51234:1" msgstr[1] "crwdns51234:5%(max_allowed)dcrwdnd51234:5%(given)dcrwdne51234:5" -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" msgstr "crwdns30454:0crwdne30454:0" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" msgstr "crwdns30456:0crwdne30456:0" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" msgstr "crwdns30458:0crwdne30458:0" -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" msgstr "crwdns30460:0crwdne30460:0" -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" msgstr "crwdns30462:0crwdne30462:0" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" msgstr "crwdns30464:0crwdne30464:0" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" msgstr "crwdns30466:0crwdne30466:0" -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" msgstr "crwdns30468:0crwdne30468:0" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" msgstr "crwdns30470:0crwdne30470:0" -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "crwdns30472:0%dcrwdne30472:0" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" msgstr "crwdns30474:0%dcrwdne30474:0" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." msgstr "crwdns30476:0crwdne30476:0" -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." msgstr "crwdns30478:0%(email)scrwdne30478:0" -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." msgstr "crwdns30480:0crwdne30480:0" -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." msgstr "crwdns30482:0crwdne30482:0" -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" msgstr "crwdns30484:0crwdne30484:0" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." msgstr "crwdns30486:0%(min)dcrwdnd30486:0%(max)dcrwdne30486:0" -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" msgstr "crwdns30442:0crwdne30442:0" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "crwdns30444:0%(name)scrwdnd30444:0%(code)scrwdne30444:0" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "crwdns35184:1%(max_allowed)dcrwdnd35184:1%(given)dcrwdne35184:1" msgstr[1] "crwdns35184:5%(max_allowed)dcrwdnd35184:5%(given)dcrwdne35184:5" -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgstr[0] "crwdns35186:1%(max_allowed)dcrwdnd35186:1%(given)dcrwdne35186:1" msgstr[1] "crwdns35186:5%(max_allowed)dcrwdnd35186:5%(given)dcrwdne35186:5" -#: importer/forms.py:396 +#: importer/forms.py msgid "XML" msgstr "crwdns51920:0crwdne51920:0" -#: importer/forms.py:397 +#: importer/forms.py msgid "The Debate XML archive to parse" msgstr "crwdns51922:0crwdne51922:0" -#: importer/templates/archive_export_index.html:4 -#: importer/templates/archive_export_index.html:5 +#: importer/templates/archive_export_index.html msgid "Export Tournament Archive" msgstr "crwdns51924:0crwdne51924:0" -#: importer/templates/archive_export_index.html:9 +#: importer/templates/archive_export_index.html msgid "Tournaments can be exported in an XML format for use outside Tabbycat." msgstr "crwdns51926:0crwdne51926:0" -#: importer/templates/archive_export_index.html:17 +#: importer/templates/archive_export_index.html msgid "Export all data" msgstr "crwdns51928:0crwdne51928:0" -#: importer/templates/archive_importer.html:6 -#: importer/templates/archive_importer.html:18 +#: importer/templates/archive_importer.html msgctxt "page title" msgid "Import Tournament Archive" msgstr "crwdns51930:0crwdne51930:0" -#: importer/templates/archive_importer.html:19 +#: importer/templates/archive_importer.html msgid "This form will create a tournament with the data provided as a Debate XML format." msgstr "crwdns51932:0crwdne51932:0" -#: importer/templates/archive_importer.html:24 +#: importer/templates/archive_importer.html msgid "Import" msgstr "crwdns51934:0crwdne51934:0" -#: importer/templates/archive_importer.html:25 +#: importer/templates/archive_importer.html msgid "Go back to the site home page" msgstr "crwdns51936:0crwdne51936:0" -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html msgctxt "page title" msgid "Add Adjudicators" msgstr "crwdns30488:0crwdne30488:0" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" msgstr "crwdns30490:0%(step)scrwdnd30490:0%(count)scrwdne30490:0" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" msgstr "crwdns30492:0crwdne30492:0" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." msgstr "crwdns30494:0%(options_feedback)scrwdnd30494:0%(min)scrwdnd30494:0%(max)scrwdnd30494:0%(privateurls_url)scrwdne30494:0" -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" msgstr "crwdns51236:0%(institution)scrwdne51236:0" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" msgstr "crwdns30500:0crwdne30500:0" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" msgstr "crwdns30502:0crwdne30502:0" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." msgstr "crwdns30504:0%(import_institutions_url)scrwdne30504:0" -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." msgstr "crwdns30506:0crwdne30506:0" -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" -msgstr "crwdns35188:0crwdne35188:0" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" +msgstr "crwdns52183:0crwdne52183:0" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" msgstr "crwdns30510:0crwdne30510:0" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" msgstr "crwdns30512:0crwdne30512:0" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." msgstr "crwdns30514:0crwdne30514:0" -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" msgstr "crwdns30516:0crwdne30516:0" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" msgstr "crwdns30518:0crwdne30518:0" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" msgstr "crwdns30520:0crwdne30520:0" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" msgstr "crwdns51238:0crwdne51238:0" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" msgstr "crwdns51240:0crwdne51240:0" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" msgstr "crwdns51242:0crwdne51242:0" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" msgstr "crwdns30528:0crwdne30528:0" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" msgstr "crwdns30530:0crwdne30530:0" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" msgstr "crwdns30532:0crwdne30532:0" -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" msgstr "crwdns34106:0crwdne34106:0" -#: importer/templates/simple_import_index.html:66 +#: importer/templates/simple_import_index.html msgid "Add/Edit Break Categories" msgstr "crwdns51938:0crwdne51938:0" -#: importer/templates/simple_import_index.html:70 +#: importer/templates/simple_import_index.html msgid "Add/Edit Speaker Categories" msgstr "crwdns51940:0crwdne51940:0" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" msgstr "crwdns30534:0crwdne30534:0" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" msgstr "crwdns30536:0crwdne30536:0" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" msgstr "crwdns30508:0crwdne30508:0" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" msgstr "crwdns30538:0crwdne30538:0" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" msgstr "crwdns30540:0crwdne30540:0" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" msgstr "crwdns51244:0%(institution)scrwdne51244:0" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" msgstr "crwdns30544:0crwdne30544:0" -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" msgstr "crwdns30546:0crwdne30546:0" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." msgstr "crwdns30548:0%(import_institutions_url)scrwdne30548:0" -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." msgstr "crwdns30550:0crwdne30550:0" -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" -msgstr "crwdns35190:0crwdne35190:0" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" +msgstr "crwdns52185:0crwdne52185:0" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" msgstr "crwdns51246:0crwdne51246:0" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." msgstr "crwdns51248:0crwdne51248:0" -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" msgstr "crwdns51250:0crwdne51250:0" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" msgstr "crwdns51252:0crwdne51252:0" -#: importer/views.py:108 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." msgstr[0] "crwdns30562:1%(count)dcrwdne30562:1" msgstr[1] "crwdns30562:5%(count)dcrwdne30562:5" -#: importer/views.py:129 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." msgstr[0] "crwdns51254:1%(count)dcrwdne51254:1" msgstr[1] "crwdns51254:5%(count)dcrwdne51254:5" -#: importer/views.py:188 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." msgstr[0] "crwdns30566:1%(count)dcrwdne30566:1" msgstr[1] "crwdns30566:5%(count)dcrwdne30566:5" -#: importer/views.py:209 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "crwdns30568:0%(number)dcrwdne30568:0" -#: importer/views.py:214 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." msgstr[0] "crwdns30570:1%(count)dcrwdne30570:1" msgstr[1] "crwdns30570:5%(count)dcrwdne30570:5" -#: importer/views.py:230 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " msgstr "crwdns35350:0crwdne35350:0" -#: importer/views.py:238 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." msgstr "crwdns35352:0crwdne35352:0" -#: importer/views.py:256 +#: importer/views.py msgid "Tournament archive has been imported." msgstr "crwdns51942:0crwdne51942:0" diff --git a/tabbycat/locale/tzl/LC_MESSAGES/django.po b/tabbycat/locale/tzl/LC_MESSAGES/django.po index ce17af3f954..b30c4986c8e 100644 --- a/tabbycat/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" "Last-Translator: \n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -17,940 +17,940 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" msgstr "crwdns51256:0crwdne51256:0" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:105 +#: checkins/admin.py +msgid "Type" +msgstr "crwdns52187:0crwdne52187:0" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "crwdns52189:0crwdne52189:0" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" msgstr "crwdns30572:0crwdne30572:0" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" msgstr "crwdns30574:0crwdne30574:0" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" msgstr "crwdns30576:0crwdne30576:0" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" msgstr "crwdns30578:0crwdne30578:0" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." msgstr "crwdns34108:0crwdne34108:0" -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" msgstr "crwdns30582:0crwdne30582:0" -#: checkins/models.py:37 +#: checkins/models.py msgid "" msgstr "crwdns34110:0crwdne34110:0" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "crwdns34112:0%(classname)scrwdnd34112:0%(barcode)scrwdne34112:0" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" msgstr "crwdns30584:0crwdne30584:0" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" msgstr "crwdns30586:0crwdne30586:0" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" msgstr "crwdns30588:0crwdne30588:0" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "crwdns30590:0crwdne30590:0" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" msgstr "crwdns30592:0crwdne30592:0" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" msgstr "crwdns30594:0crwdne30594:0" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" msgstr "crwdns51258:0crwdne51258:0" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" msgstr "crwdns51260:0crwdne51260:0" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" msgstr "crwdns30600:0crwdne30600:0" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" msgstr "crwdns30602:0crwdne30602:0" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "crwdns30604:0crwdne30604:0" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" msgstr "crwdns30606:0crwdne30606:0" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" msgstr "crwdns30608:0crwdne30608:0" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" msgstr "crwdns30610:0crwdne30610:0" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" msgstr "crwdns30612:0crwdne30612:0" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" msgstr "crwdns30614:0crwdne30614:0" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" msgstr "crwdns30616:0crwdne30616:0" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." msgstr "crwdns30618:0crwdne30618:0" -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." -msgstr "crwdns30620:0crwdne30620:0" +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +msgstr "crwdns52191:0crwdne52191:0" -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "crwdns30622:0crwdne30622:0" -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." msgstr "crwdns34114:0crwdne34114:0" -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" msgstr "crwdns34116:0%(barcode)scrwdne34116:0" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" msgstr "crwdns34118:0crwdne34118:0" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" msgstr "crwdns34120:0%(time)scrwdne34120:0" -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." msgstr "crwdns34122:0%(speaker)scrwdnd34122:0%(time)scrwdne34122:0" -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." msgstr "crwdns30634:0%(speaker)scrwdne30634:0" -#: checkins/views.py:30 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" msgstr "crwdns30636:0crwdne30636:0" -#: checkins/views.py:63 +#: checkins/views.py msgid "People's Check-In Statuses" msgstr "crwdns30638:0crwdne30638:0" -#: checkins/views.py:120 +#: checkins/views.py msgid "Rooms' Check-In Statuses" msgstr "crwdns51262:0crwdne51262:0" -#: checkins/views.py:169 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" msgstr "crwdns30642:0crwdne30642:0" -#: checkins/views.py:176 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" msgstr "crwdns30644:0crwdne30644:0" -#: checkins/views.py:181 templates/nav/public_nav.html:145 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "crwdns30646:0crwdne30646:0" -#: checkins/views.py:186 +#: checkins/views.py msgid "Rooms" msgstr "crwdns51264:0crwdne51264:0" -#: checkins/views.py:227 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" msgstr "crwdns30650:0%scrwdne30650:0" -#: checkins/views.py:234 +#: checkins/views.py msgid "Identifiers" msgstr "crwdns30652:0crwdne30652:0" -#: checkins/views.py:272 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." msgstr "crwdns30654:0crwdne30654:0" -#: checkins/views.py:280 +#: checkins/views.py msgid "You have revoked your check-in." msgstr "crwdns30656:0crwdne30656:0" -#: checkins/views.py:282 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." msgstr "crwdns30658:0crwdne30658:0" -#: checkins/views.py:286 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." msgstr "crwdns30660:0crwdne30660:0" -#: checkins/views.py:293 +#: checkins/views.py msgid "You are now checked in." msgstr "crwdns30662:0crwdne30662:0" -#: settings/core.py:67 +#: settings/core.py msgid "Arabic" msgstr "crwdns30684:0crwdne30684:0" -#: settings/core.py:68 +#: settings/core.py msgid "Bengali" msgstr "crwdns51570:0crwdne51570:0" -#: settings/core.py:69 +#: settings/core.py msgid "English" msgstr "crwdns30686:0crwdne30686:0" -#: settings/core.py:70 +#: settings/core.py msgid "Spanish" msgstr "crwdns30688:0crwdne30688:0" -#: settings/core.py:71 +#: settings/core.py msgid "French" msgstr "crwdns30690:0crwdne30690:0" -#: settings/core.py:72 +#: settings/core.py msgid "Indonesian" msgstr "crwdns51810:0crwdne51810:0" -#: settings/core.py:73 +#: settings/core.py msgid "Japanese" msgstr "crwdns30692:0crwdne30692:0" -#: settings/core.py:74 +#: settings/core.py msgid "Malay" msgstr "crwdns51572:0crwdne51572:0" -#: settings/core.py:75 +#: settings/core.py msgid "Portuguese" msgstr "crwdns30694:0crwdne30694:0" -#: settings/core.py:76 +#: settings/core.py msgid "Russian" msgstr "crwdns35540:0crwdne35540:0" -#: settings/core.py:77 +#: settings/core.py msgid "Simplified Chinese" msgstr "crwdns51574:0crwdne51574:0" -#: settings/core.py:78 +#: settings/core.py msgid "Translation" msgstr "crwdns51812:0crwdne51812:0" -#: templates/admin/delete_protected_message.html:4 +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." msgstr "crwdns30696:0crwdne30696:0" -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." msgstr "crwdns30698:0crwdne30698:0" -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." msgstr "crwdns30700:0crwdne30700:0" -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" msgstr "crwdns30702:0crwdne30702:0" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" msgstr "crwdns30704:0crwdne30704:0" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" msgstr "crwdns30706:0crwdne30706:0" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" msgstr "crwdns30708:0crwdne30708:0" -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "crwdns30710:0crwdne30710:0" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "crwdns51266:0%(tournament)scrwdne51266:0" -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" msgstr "crwdns51268:0crwdne51268:0" -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." msgstr "crwdns30716:0crwdne30716:0" -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" msgstr "crwdns30718:0crwdne30718:0" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" msgstr "crwdns30720:0crwdne30720:0" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." msgstr "crwdns30722:0%(url)scrwdne30722:0" -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgstr[0] "crwdns51270:1%(nrows)scrwdne51270:1" msgstr[1] "crwdns51270:5%(nrows)scrwdne51270:5" -#: templates/errors/legacy_sendgrid_warning.html:11 +#: templates/errors/legacy_sendgrid_warning.html msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." msgstr "crwdns52057:0crwdne52057:0" -#: templates/errors/public_403.html:14 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." msgstr "crwdns30724:0%(url)scrwdne30724:0" -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." msgstr "crwdns34124:0%(url)scrwdne34124:0" -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "crwdns30726:0%(tournament)scrwdnd30726:0%(tabbycat_version)scrwdnd30726:0%(tabbycat_codename)scrwdne30726:0" -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "crwdns30728:0%(tabbycat_version)scrwdnd30728:0%(tabbycat_codename)scrwdne30728:0" -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." msgstr "crwdns51272:0crwdne51272:0" -#: templates/footer.html:24 +#: templates/footer.html #, python-format msgid "For a tournament of this size, we suggest a donation of $%(amount)s." msgstr "crwdns52054:0%(amount)scrwdnd52054:0%(amount)scrwdne52054:0" -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." msgstr "crwdns30734:0crwdne30734:0" -#: templates/footer.html:31 +#: templates/footer.html msgid "Donations to Tabbycat from individuals or organisations are much appreciated." msgstr "crwdns52056:0crwdne52056:0" -#: templates/footer.html:39 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" msgstr "crwdns30738:0crwdne30738:0" -#: templates/footer.html:41 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." msgstr "crwdns30740:0%20crwdnd30740:0%3crwdnd30740:0%26crwdnd30740:0%3crwdne30740:0" -#: templates/footer.html:50 +#: templates/footer.html msgid "Our Organisation" msgstr "crwdns51944:0crwdne51944:0" -#: templates/footer.html:52 -msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." -msgstr "crwdns51814:0crwdne51814:0" +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +msgstr "crwdns52193:0crwdne52193:0" -#: templates/footer.html:65 +#: templates/footer.html msgid "Language" msgstr "crwdns35542:0crwdne35542:0" -#: templates/footer.html:72 +#: templates/footer.html msgid "GitHub" msgstr "crwdns30746:0crwdne30746:0" -#: templates/footer.html:78 +#: templates/footer.html msgid "Documentation" msgstr "crwdns30748:0crwdne30748:0" -#: templates/footer.html:84 +#: templates/footer.html msgid "Support" msgstr "crwdns30750:0crwdne30750:0" -#: templates/footer.html:90 +#: templates/footer.html msgid "Facebook" msgstr "crwdns30752:0crwdne30752:0" -#: templates/footer.html:96 +#: templates/footer.html msgid "Set Up A Copy" msgstr "crwdns30754:0crwdne30754:0" -#: templates/footer.html:110 +#: templates/footer.html msgid "Change Language" msgstr "crwdns30756:0crwdne30756:0" -#: templates/footer.html:127 +#: templates/footer.html msgid "Use this language" msgstr "crwdns30758:0crwdne30758:0" -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" msgstr "crwdns30760:0crwdne30760:0" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" msgstr "crwdns30882:0crwdne30882:0" -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" msgstr "crwdns35544:0crwdne35544:0" -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" msgstr "crwdns30780:0crwdne30780:0" -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" msgstr "crwdns30762:0crwdne30762:0" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" msgstr "crwdns30764:0crwdne30764:0" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" msgstr "crwdns30766:0crwdne30766:0" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" msgstr "crwdns30768:0crwdne30768:0" -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" msgstr "crwdns30770:0crwdne30770:0" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" msgstr "crwdns30772:0crwdne30772:0" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" msgstr "crwdns30774:0crwdne30774:0" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:175 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" msgstr "crwdns30776:0crwdne30776:0" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" msgstr "crwdns30778:0crwdne30778:0" -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" msgstr "crwdns34126:0crwdne34126:0" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" msgstr "crwdns34128:0crwdne34128:0" -#: templates/nav/admin_nav.html:97 +#: templates/nav/admin_nav.html msgid "Export XML" msgstr "crwdns51946:0crwdne51946:0" -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:160 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" msgstr "crwdns30782:0crwdne30782:0" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" msgstr "crwdns30786:0crwdne30786:0" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" msgstr "crwdns51278:0crwdne51278:0" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" msgstr "crwdns30790:0crwdne30790:0" -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" msgstr "crwdns30792:0crwdne30792:0" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" msgstr "crwdns34130:0crwdne34130:0" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" msgstr "crwdns34132:0crwdne34132:0" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" msgstr "crwdns30794:0crwdne30794:0" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" msgstr "crwdns30796:0crwdne30796:0" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" msgstr "crwdns30798:0crwdne30798:0" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" msgstr "crwdns30800:0crwdne30800:0" -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" msgstr "crwdns30802:0crwdne30802:0" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:165 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" msgstr "crwdns30804:0crwdne30804:0" -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" msgstr "crwdns30806:0crwdne30806:0" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "crwdns30808:0crwdne30808:0" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" msgstr "crwdns51280:0%(category)scrwdne51280:0" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" msgstr "crwdns30812:0crwdne30812:0" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" msgstr "crwdns51282:0%(category)scrwdne51282:0" -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" msgstr "crwdns30816:0crwdne30816:0" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:155 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "crwdns30818:0crwdne30818:0" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:170 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" msgstr "crwdns30820:0crwdne30820:0" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" msgstr "crwdns30822:0crwdne30822:0" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "crwdns51284:0%(category)scrwdne51284:0" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" msgstr "crwdns51286:0crwdne51286:0" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" msgstr "crwdns51288:0crwdne51288:0" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" msgstr "crwdns51290:0crwdne51290:0" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" msgstr "crwdns30826:0crwdne30826:0" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" msgstr "crwdns30828:0crwdne30828:0" -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:211 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" msgstr "crwdns30830:0crwdne30830:0" -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" msgstr "crwdns30832:0crwdne30832:0" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:180 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" msgstr "crwdns30834:0crwdne30834:0" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" msgstr "crwdns30836:0crwdne30836:0" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" msgstr "crwdns30838:0crwdne30838:0" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "crwdns51292:0crwdne51292:0" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" msgstr "crwdns30842:0crwdne30842:0" -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" msgstr "crwdns30844:0crwdne30844:0" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" msgstr "crwdns30846:0crwdne30846:0" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" msgstr "crwdns30848:0crwdne30848:0" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" msgstr "crwdns30850:0crwdne30850:0" -#: templates/nav/public_nav.html:53 templates/nav/public_nav.html:62 +#: templates/nav/public_nav.html msgid "Motions Tab" msgstr "crwdns30852:0crwdne30852:0" -#: templates/nav/public_nav.html:56 +#: templates/nav/public_nav.html msgid "By round" msgstr "crwdns51816:0crwdne51816:0" -#: templates/nav/public_nav.html:57 +#: templates/nav/public_nav.html msgid "Globally" msgstr "crwdns51818:0crwdne51818:0" -#: templates/nav/public_nav.html:72 +#: templates/nav/public_nav.html msgid "Draws" msgstr "crwdns30854:0crwdne30854:0" -#: templates/nav/public_nav.html:83 +#: templates/nav/public_nav.html msgid "No Draws Available" msgstr "crwdns30858:0crwdne30858:0" -#: templates/nav/public_nav.html:91 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" msgstr "crwdns51294:0%(round)scrwdne51294:0" -#: templates/nav/public_nav.html:95 +#: templates/nav/public_nav.html msgid "Current Draws" msgstr "crwdns34134:0crwdne34134:0" -#: templates/nav/public_nav.html:115 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" msgstr "crwdns30862:0crwdne30862:0" -#: templates/nav/public_nav.html:133 +#: templates/nav/public_nav.html msgid "Break" msgstr "crwdns30864:0crwdne30864:0" -#: templates/nav/public_nav.html:185 +#: templates/nav/public_nav.html msgid "Feedback Progress" msgstr "crwdns30866:0crwdne30866:0" -#: templates/nav/public_nav.html:191 templates/nav/public_nav.html:197 +#: templates/nav/public_nav.html msgid "Enter Ballot" msgstr "crwdns30868:0crwdne30868:0" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" msgstr "crwdns30870:0crwdne30870:0" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" msgstr "crwdns30872:0crwdne30872:0" -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" msgstr "crwdns30874:0crwdne30874:0" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" msgstr "crwdns30876:0%(tournament)scrwdne30876:0" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" msgstr "crwdns30878:0%(tournament)scrwdne30878:0" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" msgstr "crwdns30880:0%(tournament)scrwdne30880:0" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" msgstr "crwdns30884:0crwdne30884:0" -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" msgstr "crwdns34136:0crwdne34136:0" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" msgstr "crwdns34138:0%(login_url)scrwdne34138:0" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" msgstr "crwdns30886:0crwdne30886:0" -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" msgstr "crwdns30888:0crwdne30888:0" -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." msgstr "crwdns30890:0crwdne30890:0" -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." msgstr "crwdns30892:0crwdne30892:0" -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." msgstr "crwdns30894:0crwdne30894:0" -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" msgstr "crwdns30896:0crwdne30896:0" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." msgstr "crwdns30898:0crwdne30898:0" -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" msgstr "crwdns30900:0crwdne30900:0" -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:27 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" msgstr "crwdns30902:0crwdne30902:0" -#: templates/registration/password_change_form.html:16 +#: templates/registration/password_change_form.html #, python-format msgid "API Token: %(api_token)s" msgstr "crwdns51576:0%(api_token)scrwdne51576:0" -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgid "The API token will allow you to authorize external applications to access the site as staff." msgstr "crwdns51578:0crwdne51578:0" -#: templates/registration/password_change_form.html:28 +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." msgstr "crwdns30904:0crwdne30904:0" -#: templates/registration/password_change_form.html:33 -#: templates/registration/password_reset_confirm.html:25 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" msgstr "crwdns30906:0crwdne30906:0" -#: templates/registration/password_change_form.html:34 -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" msgstr "crwdns30908:0crwdne30908:0" -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "crwdns30910:0crwdne30910:0" -#: templates/registration/password_reset_complete.html:11 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." msgstr "crwdns30912:0crwdne30912:0" -#: templates/registration/password_reset_complete.html:14 -#: templates/registration/password_reset_done.html:15 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" msgstr "crwdns30914:0crwdne30914:0" -#: templates/registration/password_reset_confirm.html:4 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" msgstr "crwdns30916:0crwdne30916:0" -#: templates/registration/password_reset_confirm.html:16 -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html msgctxt "page title" msgid "Password Reset" msgstr "crwdns30938:0crwdne30938:0" -#: templates/registration/password_reset_confirm.html:18 +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" msgstr "crwdns30918:0crwdne30918:0" -#: templates/registration/password_reset_confirm.html:33 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." msgstr "crwdns30920:0crwdne30920:0" -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" msgid "Password reset email sent" msgstr "crwdns51580:0crwdne51580:0" -#: templates/registration/password_reset_done.html:11 +#: templates/registration/password_reset_done.html msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." msgstr "crwdns51582:0crwdne51582:0" -#: templates/registration/password_reset_done.html:12 +#: templates/registration/password_reset_done.html msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." msgstr "crwdns51584:0crwdne51584:0" -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" msgstr "crwdns51296:0%(user)scrwdne51296:0" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "crwdns51586:0%(email)scrwdnd51586:0%(protocol)scrwdnd51586:0%(domain)scrwdne51586:0" -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" msgstr "crwdns30934:0crwdne30934:0" -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." msgstr "crwdns51588:0%(protocol)scrwdnd51588:0%(domain)scrwdne51588:0" -#: templates/registration/password_reset_form.html:27 +#: templates/registration/password_reset_form.html msgid "Enter your email address below, and we'll email you a password reset link." msgstr "crwdns51590:0crwdne51590:0" -#: templates/registration/password_reset_form.html:34 +#: templates/registration/password_reset_form.html msgid "Please enter a valid email address." msgstr "crwdns51592:0crwdne51592:0" -#: templates/registration/password_reset_form.html:39 users/forms.py:10 -#: users/forms.py:25 +#: templates/registration/password_reset_form.html users/forms.py msgid "Email address" msgstr "crwdns51594:0crwdne51594:0" -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" msgstr "crwdns30946:0crwdne30946:0" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" msgstr "crwdns30948:0crwdne30948:0" -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" msgstr "crwdns30950:0%(domain)scrwdne30950:0" -#: urls.py:102 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" msgstr "crwdns51298:0%(user)scrwdne51298:0" -#: urls.py:105 +#: urls.py msgid "Welcome! You just logged in!" msgstr "crwdns30954:0crwdne30954:0" -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." msgstr "crwdns30956:0crwdne30956:0" -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." msgstr "crwdns30958:0crwdne30958:0" -#: users/templates/admin/auth/delete_user_warning.html:6 +#: users/templates/admin/auth/delete_user_warning.html msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." msgstr "crwdns51668:0crwdne51668:0" -#: users/templates/signup.html:4 users/templates/signup.html:5 +#: users/templates/signup.html msgid "Sign-Up" msgstr "crwdns52059:0crwdne52059:0" -#: users/templates/signup.html:16 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Administrator Account" msgstr "crwdns52061:0crwdne52061:0" -#: users/templates/signup.html:18 +#: users/templates/signup.html msgctxt "page title" msgid "Create a New Assistant Account" msgstr "crwdns52063:0crwdne52063:0" -#: users/templates/signup.html:25 +#: users/templates/signup.html msgid "Create Account" msgstr "crwdns52065:0crwdne52065:0" -#: users/views.py:54 +#: users/views.py msgid "You have successfully created a new administrator account." msgstr "crwdns52067:0crwdne52067:0" -#: users/views.py:56 +#: users/views.py msgid "You have successfully created a new assistant account." msgstr "crwdns52069:0crwdne52069:0" -#: users/views.py:84 +#: users/views.py msgid "Whoops! It looks like someone's already created the first user account. Please log in." msgstr "crwdns52071:0crwdne52071:0" -#: users/views.py:92 +#: users/views.py #, python-format msgid "Welcome! You've created an account for %s." msgstr "crwdns52073:0%scrwdne52073:0" diff --git a/tabbycat/motions/locale/tzl/LC_MESSAGES/django.po b/tabbycat/motions/locale/tzl/LC_MESSAGES/django.po index 62672c4a7e5..a3f27a9ed18 100644 --- a/tabbycat/motions/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:15\n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-02-12 06:28\n" "Last-Translator: \n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -17,372 +17,383 @@ msgstr "" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "crwdns30960:0crwdne30960:0" -#: motions/models.py:9 +#: motions/models.py msgid "text" msgstr "crwdns30966:0crwdne30966:0" -#: motions/models.py:10 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" msgstr "crwdns30968:0crwdne30968:0" -#: motions/models.py:12 +#: motions/models.py msgid "reference" msgstr "crwdns30970:0crwdne30970:0" -#: motions/models.py:13 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" msgstr "crwdns30972:0crwdne30972:0" -#: motions/models.py:15 +#: motions/models.py msgid "info slide" msgstr "crwdns30974:0crwdne30974:0" -#: motions/models.py:16 +#: motions/models.py msgid "The information slide for this topic; if it has one" msgstr "crwdns30976:0crwdne30976:0" -#: motions/models.py:19 +#: motions/models.py msgid "tournament" msgstr "crwdns51820:0crwdne51820:0" -#: motions/models.py:21 +#: motions/models.py msgid "rounds" msgstr "crwdns51822:0crwdne51822:0" -#: motions/models.py:24 motions/models.py:37 motions/models.py:62 +#: motions/models.py msgid "motion" msgstr "crwdns30986:0crwdne30986:0" -#: motions/models.py:25 +#: motions/models.py msgid "motions" msgstr "crwdns30988:0crwdne30988:0" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" msgstr "crwdns30990:0crwdne30990:0" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" msgstr "crwdns30992:0crwdne30992:0" -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" msgstr "crwdns30994:0crwdne30994:0" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" msgstr "crwdns30996:0crwdne30996:0" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" msgstr "crwdns30998:0crwdne30998:0" -#: motions/models.py:64 +#: motions/models.py msgid "round" msgstr "crwdns30982:0crwdne30982:0" -#: motions/models.py:67 +#: motions/models.py msgid "sequence number" msgstr "crwdns30962:0crwdne30962:0" -#: motions/models.py:68 +#: motions/models.py msgid "The order in which motions are displayed" msgstr "crwdns30964:0crwdne30964:0" -#: motions/models.py:73 +#: motions/models.py msgid "round motion" msgstr "crwdns51824:0crwdne51824:0" -#: motions/models.py:74 +#: motions/models.py msgid "round motions" msgstr "crwdns51826:0crwdne51826:0" -#: motions/statistics.py:86 +#: motions/statistics.py msgid "extremely strong evidence" msgstr "crwdns31000:0crwdne31000:0" -#: motions/statistics.py:87 +#: motions/statistics.py msgid "strong evidence" msgstr "crwdns31002:0crwdne31002:0" -#: motions/statistics.py:88 +#: motions/statistics.py msgid "moderate evidence" msgstr "crwdns31004:0crwdne31004:0" -#: motions/statistics.py:89 +#: motions/statistics.py msgid "weak evidence" msgstr "crwdns31006:0crwdne31006:0" -#: motions/statistics.py:90 +#: motions/statistics.py msgid "very weak evidence" msgstr "crwdns31008:0crwdne31008:0" -#: motions/statistics.py:91 +#: motions/statistics.py msgid "extremely weak evidence" msgstr "crwdns31010:0crwdne31010:0" -#: motions/statistics.py:114 +#: motions/statistics.py msgid "balance inconclusive" msgstr "crwdns31012:0crwdne31012:0" -#: motions/statistics.py:115 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" msgstr "crwdns31014:0crwdne31014:0" -#: motions/statistics.py:123 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" msgstr "crwdns31016:0%(level)scrwdne31016:0" -#: motions/statistics.py:124 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." msgstr "crwdns31018:0%(chisq)crwdnd31018:0%(evidence)scrwdnd31018:0%(level)scrwdne31018:0" -#: motions/statistics.py:129 +#: motions/statistics.py msgid "probably balanced" msgstr "crwdns31020:0crwdne31020:0" -#: motions/statistics.py:130 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." msgstr "crwdns31022:0%(chisq)crwdne31022:0" -#: motions/templates/motion_global_statistics.html:22 -#: motions/templates/motion_round_statistics.html:31 -#: motions/templates/public_motions.html:32 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" msgstr "crwdns31032:0crwdne31032:0" -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" msgstr[0] "crwdns31034:1%(ndebates)scrwdne31034:1" msgstr[1] "crwdns31034:5%(ndebates)scrwdne31034:5" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" msgstr[0] "crwdns31036:1%(advancing)scrwdnd31036:1%(ndebates)scrwdnd31036:1%(side)scrwdnd31036:1%(percentage)scrwdne31036:1" msgstr[1] "crwdns31036:5%(advancing)scrwdnd31036:5%(ndebates)scrwdnd31036:5%(side)scrwdnd31036:5%(percentage)scrwdne31036:5" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" msgstr[0] "crwdns31038:1%(eliminated)scrwdnd31038:1%(ndebates)scrwdnd31038:1%(side)scrwdnd31038:1%(percentage)scrwdne31038:1" msgstr[1] "crwdns31038:5%(eliminated)scrwdnd31038:5%(ndebates)scrwdnd31038:5%(side)scrwdnd31038:5%(percentage)scrwdne31038:5" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" msgstr "crwdns31040:0crwdne31040:0" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." msgstr "crwdns31042:0crwdne31042:0" -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" msgstr "crwdns31044:0crwdne31044:0" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." msgstr "crwdns31046:0crwdne31046:0" -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" msgstr "crwdns31048:0%(side)scrwdne31048:0" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" msgstr "crwdns31050:0crwdne31050:0" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" msgstr "crwdns34142:0crwdne34142:0" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" msgstr "crwdns34144:0crwdne34144:0" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" msgstr "crwdns34146:0crwdne34146:0" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" msgstr "crwdns34148:0crwdne34148:0" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" msgstr "crwdns34150:0crwdne34150:0" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" msgstr "crwdns34152:0crwdne34152:0" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" msgstr[0] "crwdns34154:1%(ndebates)scrwdne34154:1" msgstr[1] "crwdns34154:5%(ndebates)scrwdne34154:5" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" msgstr[0] "crwdns31054:1%(count)scrwdnd31054:1%(side)scrwdnd31054:1%(percentage)scrwdnd31054:1%(points)scrwdne31054:1" msgstr[1] "crwdns31054:5%(count)scrwdnd31054:5%(side)scrwdnd31054:5%(percentage)scrwdnd31054:5%(points)scrwdne31054:5" -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" msgstr "crwdns34156:0%(side)scrwdne34156:0" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" msgstr[0] "crwdns31072:1%(count)scrwdnd31072:1%(side)scrwdne31072:1" msgstr[1] "crwdns31072:5%(count)scrwdnd31072:5%(side)scrwdne31072:5" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" msgstr "crwdns31074:0crwdne31074:0" -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" msgstr[0] "crwdns31076:1%(count)scrwdnd31076:1%(side)scrwdne31076:1" msgstr[1] "crwdns31076:5%(count)scrwdnd31076:5%(side)scrwdne31076:5" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" msgstr "crwdns31078:0crwdne31078:0" -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" msgstr[0] "crwdns31080:1crwdne31080:1" msgstr[1] "crwdns31080:5crwdne31080:5" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" msgstr "crwdns31082:0crwdne31082:0" -#: motions/templates/motions_edit.html:28 +#: motions/templates/motions_edit.html msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." msgstr "crwdns51828:0crwdne51828:0" -#: motions/templates/motions_edit.html:30 +#: motions/templates/motions_edit.html msgid "Reuse Motions from Last Round" msgstr "crwdns51830:0crwdne51830:0" -#: motions/templates/motions_edit.html:35 +#: motions/templates/motions_edit.html msgid "Use Existing Motions" msgstr "crwdns51832:0crwdne51832:0" -#: motions/templates/motions_edit.html:74 +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "crwdns52271:1crwdne52271:1" +msgstr[1] "crwdns52271:5crwdne52271:5" + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" msgstr[0] "crwdns31086:1crwdne31086:1" msgstr[1] "crwdns31086:5crwdne31086:5" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "crwdns31088:0crwdne31088:0" -#: motions/templates/public_motions.html:41 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." msgstr "crwdns31106:0crwdne31106:0" -#: motions/templates/public_motions.html:47 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." msgstr "crwdns31108:0crwdne31108:0" -#: motions/templates/public_motions.html:52 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." msgstr "crwdns31110:0crwdne31110:0" -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" msgstr[0] "crwdns51300:1%(round)scrwdne51300:1" msgstr[1] "crwdns51300:5%(round)scrwdne51300:5" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" msgstr[0] "crwdns51302:1%(round)scrwdne51302:1" msgstr[1] "crwdns51302:5%(round)scrwdne51302:5" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." msgstr "crwdns31116:0crwdne31116:0" -#: motions/utils.py:11 +#: motions/utils.py msgid "Not all latest ballots list the same motion, so could not be merged." msgstr "crwdns52075:0crwdne52075:0" -#: motions/utils.py:29 +#: motions/utils.py msgid "Motion vetos are inconsistent, so could not be merged." msgstr "crwdns52077:0crwdne52077:0" -#: motions/views.py:91 +#: motions/views.py msgid "The motion has been saved." msgstr "crwdns31118:0crwdne31118:0" -#: motions/views.py:93 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." msgstr[0] "crwdns31120:1%(count)dcrwdne31120:1" msgstr[1] "crwdns31120:5%(count)dcrwdne31120:5" -#: motions/views.py:97 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." msgstr[0] "crwdns31122:1%(count)dcrwdne31122:1" msgstr[1] "crwdns31122:5%(count)dcrwdne31122:5" -#: motions/views.py:140 +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "crwdns52197:0crwdne52197:0" + +#: motions/views.py #, python-format msgid "Reused the motion from the previous round." msgid_plural "Reused the %(count)d motions from the previous round." msgstr[0] "crwdns51856:1crwdne51856:1" msgstr[1] "crwdns51856:5%(count)dcrwdne51856:5" -#: motions/views.py:164 -msgid "Released the motion(s)." -msgstr "crwdns31124:0crwdne31124:0" +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "crwdns52199:1crwdne52199:1" +msgstr[1] "crwdns52199:5crwdne52199:5" -#: motions/views.py:171 -msgid "Unreleased the motion(s)." -msgstr "crwdns31126:0crwdne31126:0" +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "crwdns52201:1crwdne52201:1" +msgstr[1] "crwdns52201:5crwdne52201:5" -#: motions/views.py:195 +#: motions/views.py msgid "Round Motions" msgstr "crwdns34158:0crwdne34158:0" -#: motions/views.py:209 +#: motions/views.py msgid "Motion Statistics" msgstr "crwdns31030:0crwdne31030:0" diff --git a/tabbycat/notifications/locale/tzl/LC_MESSAGES/django.po b/tabbycat/notifications/locale/tzl/LC_MESSAGES/django.po index e1665d5dc50..532eb3f7a3f 100644 --- a/tabbycat/notifications/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -18,401 +18,399 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" msgstr "crwdns31128:0crwdne31128:0" -#: notifications/forms.py:12 +#: notifications/forms.py msgid "Recipient email address" msgstr "crwdns34164:0crwdne34164:0" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" msgstr "crwdns34166:0%(host)scrwdne34166:0" -#: notifications/forms.py:17 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" msgstr "crwdns34168:0%(host)scrwdne34168:0" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Subject" msgstr "crwdns34170:0crwdne34170:0" -#: notifications/forms.py:31 +#: notifications/forms.py msgid "Message" msgstr "crwdns34172:0crwdne34172:0" -#: notifications/models.py:11 notifications/models.py:26 +#: notifications/models.py msgid "email" msgstr "crwdns31142:0crwdne31142:0" -#: notifications/models.py:12 +#: notifications/models.py msgid "SMS" msgstr "crwdns31144:0crwdne31144:0" -#: notifications/models.py:21 +#: notifications/models.py msgid "recipient" msgstr "crwdns31146:0crwdne31146:0" -#: notifications/models.py:23 +#: notifications/models.py msgid "method" msgstr "crwdns31152:0crwdne31152:0" -#: notifications/models.py:28 notifications/models.py:134 +#: notifications/models.py msgid "context" msgstr "crwdns31158:0crwdne31158:0" -#: notifications/models.py:31 +#: notifications/models.py msgid "notification" msgstr "crwdns34174:0crwdne34174:0" -#: notifications/models.py:33 notifications/models.py:74 -#: notifications/models.py:130 +#: notifications/models.py msgid "timestamp" msgstr "crwdns31150:0crwdne31150:0" -#: notifications/models.py:36 +#: notifications/models.py msgid "sent message" msgstr "crwdns31162:0crwdne31162:0" -#: notifications/models.py:37 +#: notifications/models.py msgid "sent messages" msgstr "crwdns31164:0crwdne31164:0" -#: notifications/models.py:58 +#: notifications/models.py msgid "team points" msgstr "crwdns31130:0crwdne31130:0" -#: notifications/models.py:59 +#: notifications/models.py msgid "ballot confirmed" msgstr "crwdns31132:0crwdne31132:0" -#: notifications/models.py:60 +#: notifications/models.py msgid "feedback URL" msgstr "crwdns31134:0crwdne31134:0" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot URL" msgstr "crwdns31136:0crwdne31136:0" -#: notifications/models.py:62 +#: notifications/models.py msgid "landing page URL" msgstr "crwdns31138:0crwdne31138:0" -#: notifications/models.py:63 +#: notifications/models.py msgid "adjudicator draw released" msgstr "crwdns34176:0crwdne34176:0" -#: notifications/models.py:64 +#: notifications/models.py msgid "team registration" msgstr "crwdns34178:0crwdne34178:0" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator registration" msgstr "crwdns34180:0crwdne34180:0" -#: notifications/models.py:66 +#: notifications/models.py msgid "motion(s) released" msgstr "crwdns34182:0crwdne34182:0" -#: notifications/models.py:67 +#: notifications/models.py msgid "team draw released" msgstr "crwdns34184:0crwdne34184:0" -#: notifications/models.py:68 +#: notifications/models.py msgid "custom message" msgstr "crwdns51836:0crwdne51836:0" -#: notifications/models.py:72 notifications/models.py:132 +#: notifications/models.py msgid "event" msgstr "crwdns31148:0crwdne31148:0" -#: notifications/models.py:77 +#: notifications/models.py msgid "tournament" msgstr "crwdns31154:0crwdne31154:0" -#: notifications/models.py:79 +#: notifications/models.py msgid "round" msgstr "crwdns31156:0crwdne31156:0" -#: notifications/models.py:82 +#: notifications/models.py msgid "subject template" msgstr "crwdns51838:0crwdne51838:0" -#: notifications/models.py:84 +#: notifications/models.py msgid "body template" msgstr "crwdns51840:0crwdne51840:0" -#: notifications/models.py:87 +#: notifications/models.py msgid "bulk notification" msgstr "crwdns34186:0crwdne34186:0" -#: notifications/models.py:88 +#: notifications/models.py msgid "bulk notifications" msgstr "crwdns34188:0crwdne34188:0" -#: notifications/models.py:114 +#: notifications/models.py msgid "Processed" msgstr "crwdns34190:0crwdne34190:0" -#: notifications/models.py:115 +#: notifications/models.py msgid "Dropped" msgstr "crwdns34192:0crwdne34192:0" -#: notifications/models.py:116 +#: notifications/models.py msgid "Deferred" msgstr "crwdns34194:0crwdne34194:0" -#: notifications/models.py:117 +#: notifications/models.py msgid "Delivered" msgstr "crwdns34196:0crwdne34196:0" -#: notifications/models.py:118 +#: notifications/models.py msgid "Bounced" msgstr "crwdns34198:0crwdne34198:0" -#: notifications/models.py:119 +#: notifications/models.py msgid "Opened" msgstr "crwdns34200:0crwdne34200:0" -#: notifications/models.py:120 +#: notifications/models.py msgid "Clicked" msgstr "crwdns34202:0crwdne34202:0" -#: notifications/models.py:121 +#: notifications/models.py msgid "Unsubscribed" msgstr "crwdns34204:0crwdne34204:0" -#: notifications/models.py:122 +#: notifications/models.py msgid "Marked as spam" msgstr "crwdns34206:0crwdne34206:0" -#: notifications/models.py:123 +#: notifications/models.py msgid "Unsubscribed from group" msgstr "crwdns34208:0crwdne34208:0" -#: notifications/models.py:124 +#: notifications/models.py msgid "Resubscribed to group" msgstr "crwdns34210:0crwdne34210:0" -#: notifications/models.py:128 +#: notifications/models.py msgid "email message" msgstr "crwdns34212:0crwdne34212:0" -#: notifications/models.py:137 +#: notifications/models.py msgid "email status" msgstr "crwdns34214:0crwdne34214:0" -#: notifications/models.py:138 +#: notifications/models.py msgid "email statuses" msgstr "crwdns34216:0crwdne34216:0" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." msgstr "crwdns34218:0%(notifications_options_url)scrwdne34218:0" -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." msgstr "crwdns34220:0%(notifications_webhook_url)scrwdnd34220:0%(notifications_webhook_url)scrwdne34220:0" -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" msgstr "crwdns34222:0crwdne34222:0" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." msgstr "crwdns34224:0crwdne34224:0" -#: notifications/templates/notifications_nav.html:5 notifications/views.py:75 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" msgstr "crwdns34226:0crwdne34226:0" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:29 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" msgstr "crwdns34228:0crwdne34228:0" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" msgstr "crwdns34230:0crwdne34230:0" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" msgstr "crwdns34232:0crwdne34232:0" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." msgstr "crwdns34234:0crwdne34234:0" -#: notifications/templates/test_email.html:20 +#: notifications/templates/test_email.html #, python-format msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." msgstr "crwdns52079:0%(default_from_email)scrwdne52079:0" -#: notifications/templates/test_email.html:30 +#: notifications/templates/test_email.html msgid "Go back to the site home page" msgstr "crwdns34236:0crwdne34236:0" -#: notifications/utils.py:26 +#: notifications/utils.py msgid "the chair" msgstr "crwdns34238:0crwdne34238:0" -#: notifications/utils.py:27 +#: notifications/utils.py msgid "the only" msgstr "crwdns34240:0crwdne34240:0" -#: notifications/utils.py:28 +#: notifications/utils.py msgid "a panellist" msgstr "crwdns34242:0crwdne34242:0" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "a trainee" msgstr "crwdns34244:0crwdne34244:0" -#: notifications/utils.py:59 +#: notifications/utils.py msgid "TBA" msgstr "crwdns34246:0crwdne34246:0" -#: notifications/utils.py:88 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "crwdns34248:0%(tournament)scrwdnd34248:0%(round)scrwdnd34248:0%(room)scrwdne34248:0" -#: notifications/utils.py:99 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" msgstr "crwdns51304:0%(side)scrwdnd51304:0%(team)scrwdnd51304:0%(points)dcrwdnd51304:0%(speaks)scrwdne51304:0" -#: notifications/utils.py:102 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" msgstr "crwdns51306:0%(side)scrwdnd51306:0%(team)scrwdnd51306:0%(points)scrwdnd51306:0%(speaks)scrwdne51306:0" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Win" msgstr "crwdns34254:0crwdne34254:0" -#: notifications/utils.py:103 +#: notifications/utils.py msgid "Loss" msgstr "crwdns34256:0crwdne34256:0" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " msgstr "crwdns34258:0%(pos)scrwdnd34258:0%(speaker)scrwdnd34258:0%(score)scrwdne34258:0" -#: notifications/utils.py:183 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " msgstr "crwdns34260:0%(text)scrwdnd34260:0%(ref)scrwdne34260:0" -#: notifications/utils.py:206 notifications/utils.py:207 +#: notifications/utils.py msgid ", " msgstr "crwdns34262:0crwdne34262:0" -#: notifications/views.py:47 +#: notifications/views.py #, python-format msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" msgstr "crwdns52081:0%(code)dcrwdnd52081:0%(error)scrwdne52081:0" -#: notifications/views.py:51 +#: notifications/views.py msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." msgstr "crwdns52083:0crwdne52083:0" -#: notifications/views.py:60 +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" msgstr "crwdns34264:0%(error)scrwdne34264:0" -#: notifications/views.py:65 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." msgstr "crwdns34266:0%(recipient)scrwdne34266:0" -#: notifications/views.py:81 +#: notifications/views.py msgid "N/A" msgstr "crwdns34272:0crwdne34272:0" -#: notifications/views.py:82 +#: notifications/views.py msgid "Not known" msgstr "crwdns35194:0crwdne35194:0" -#: notifications/views.py:87 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" msgstr "crwdns34268:0%(status)scrwdnd34268:0%(time)scrwdne34268:0" -#: notifications/views.py:133 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "crwdns34270:0%scrwdne34270:0" -#: notifications/views.py:152 +#: notifications/views.py msgid "Timeline" msgstr "crwdns34274:0crwdne34274:0" -#: notifications/views.py:162 notifications/views.py:260 +#: notifications/views.py msgid "Participant" msgstr "crwdns34276:0crwdne34276:0" -#: notifications/views.py:163 notifications/views.py:265 +#: notifications/views.py msgid "Email address" msgstr "crwdns51600:0crwdne51600:0" -#: notifications/views.py:164 +#: notifications/views.py msgid "Status" msgstr "crwdns34278:0crwdne34278:0" -#: notifications/views.py:165 +#: notifications/views.py msgid "Time" msgstr "crwdns34280:0crwdne34280:0" -#: notifications/views.py:204 +#: notifications/views.py msgid "Email Participants" msgstr "crwdns34282:0crwdne34282:0" -#: notifications/views.py:233 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." msgstr[0] "crwdns34284:1%(email_count)scrwdne34284:1" msgstr[1] "crwdns34284:5%(email_count)scrwdne34284:5" -#: notifications/views.py:239 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." msgstr "crwdns34286:0crwdne34286:0" -#: notifications/views.py:250 +#: notifications/views.py msgid "Send Email" msgstr "crwdns34288:0crwdne34288:0" -#: notifications/views.py:266 +#: notifications/views.py msgid "Not Provided" msgstr "crwdns34292:0crwdne34292:0" -#: notifications/views.py:279 +#: notifications/views.py msgid "Role" msgstr "crwdns34294:0crwdne34294:0" -#: notifications/views.py:280 +#: notifications/views.py msgid "Adjudicator" msgstr "crwdns34296:0crwdne34296:0" -#: notifications/views.py:280 +#: notifications/views.py msgid "Speaker" msgstr "crwdns34298:0crwdne34298:0" -#: notifications/views.py:288 +#: notifications/views.py msgid "Speakers" msgstr "crwdns34300:0crwdne34300:0" -#: notifications/views.py:289 +#: notifications/views.py msgid "Adjudicators" msgstr "crwdns34302:0crwdne34302:0" diff --git a/tabbycat/options/locale/tzl/LC_MESSAGES/django.po b/tabbycat/options/locale/tzl/LC_MESSAGES/django.po index acb5df0d586..4954b7a6338 100644 --- a/tabbycat/options/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:59\n" "Last-Translator: philip_tc\n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -18,1587 +18,1600 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" msgstr "crwdns51308:0crwdne51308:0" -#: options/models.py:13 +#: options/models.py msgid "instance" msgstr "crwdns31166:0crwdne31166:0" -#: options/models.py:18 +#: options/models.py msgid "tournament preference" msgstr "crwdns31168:0crwdne31168:0" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" msgstr "crwdns31170:0crwdne31170:0" -#: options/preferences.py:19 options/templates/preferences_index.html:53 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" msgstr "crwdns31172:0crwdne31172:0" -#: options/preferences.py:25 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" msgstr "crwdns31174:0crwdne31174:0" -#: options/preferences.py:28 +#: options/preferences.py msgid "Minimum speaker score" msgstr "crwdns31176:0crwdne31176:0" -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum speaker score" msgstr "crwdns31178:0crwdne31178:0" -#: options/preferences.py:35 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" msgstr "crwdns31180:0crwdne31180:0" -#: options/preferences.py:43 +#: options/preferences.py msgid "Speaker score step" msgstr "crwdns31182:0crwdne31182:0" -#: options/preferences.py:44 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" msgstr "crwdns31184:0crwdne31184:0" -#: options/preferences.py:52 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" msgstr "crwdns31186:0crwdne31186:0" -#: options/preferences.py:53 +#: options/preferences.py msgid "Maximum margin" msgstr "crwdns31188:0crwdne31188:0" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" msgstr "crwdns31190:0crwdne31190:0" -#: options/preferences.py:63 +#: options/preferences.py msgid "Minimum reply score" msgstr "crwdns31192:0crwdne31192:0" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" msgstr "crwdns31194:0crwdne31194:0" -#: options/preferences.py:72 +#: options/preferences.py msgid "Maximum reply score" msgstr "crwdns31196:0crwdne31196:0" -#: options/preferences.py:80 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" msgstr "crwdns31198:0crwdne31198:0" -#: options/preferences.py:81 +#: options/preferences.py msgid "Reply score step" msgstr "crwdns31200:0crwdne31200:0" -#: options/preferences.py:89 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" msgstr "crwdns31202:0crwdne31202:0" -#: options/preferences.py:90 +#: options/preferences.py msgid "Margin includes dissenters" msgstr "crwdns31204:0crwdne31204:0" -#: options/preferences.py:98 +#: options/preferences.py msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" msgstr "crwdns52085:0crwdne52085:0" -#: options/preferences.py:99 +#: options/preferences.py msgid "Team score includes ghosts" msgstr "crwdns52087:0crwdne52087:0" -#: options/preferences.py:106 options/templates/preferences_index.html:58 +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" msgstr "crwdns31206:0crwdne31206:0" -#: options/preferences.py:112 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" msgstr "crwdns31208:0crwdne31208:0" -#: options/preferences.py:113 +#: options/preferences.py msgid "Minimum adjudicator score to vote" msgstr "crwdns31210:0crwdne31210:0" -#: options/preferences.py:121 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" msgstr "crwdns34304:0crwdne34304:0" -#: options/preferences.py:122 +#: options/preferences.py msgid "Adjudicator conflict penalty" msgstr "crwdns34306:0crwdne34306:0" -#: options/preferences.py:130 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" msgstr "crwdns34308:0crwdne34308:0" -#: options/preferences.py:131 +#: options/preferences.py msgid "Adjudicator history penalty" msgstr "crwdns34310:0crwdne34310:0" -#: options/preferences.py:139 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" msgstr "crwdns35196:0crwdne35196:0" -#: options/preferences.py:140 +#: options/preferences.py msgid "Importance mismatch penalty" msgstr "crwdns35198:0crwdne35198:0" -#: options/preferences.py:148 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" msgstr "crwdns31220:0crwdne31220:0" -#: options/preferences.py:149 +#: options/preferences.py msgid "Team institution penalty" msgstr "crwdns31222:0crwdne31222:0" -#: options/preferences.py:157 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" msgstr "crwdns31224:0crwdne31224:0" -#: options/preferences.py:158 +#: options/preferences.py msgid "Team history penalty" msgstr "crwdns31226:0crwdne31226:0" -#: options/preferences.py:166 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" msgstr "crwdns31228:0crwdne31228:0" -#: options/preferences.py:167 +#: options/preferences.py msgid "Avoid same institution" msgstr "crwdns31230:0crwdne31230:0" -#: options/preferences.py:175 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" msgstr "crwdns31232:0crwdne31232:0" -#: options/preferences.py:176 +#: options/preferences.py msgid "Avoid team history" msgstr "crwdns31234:0crwdne31234:0" -#: options/preferences.py:184 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "crwdns31236:0crwdne31236:0" -#: options/preferences.py:185 +#: options/preferences.py msgid "Odd bracket resolution method" msgstr "crwdns31238:0crwdne31238:0" -#: options/preferences.py:189 +#: options/preferences.py msgid "Pull up from top" msgstr "crwdns31240:0crwdne31240:0" -#: options/preferences.py:190 +#: options/preferences.py msgid "Pull up from bottom" msgstr "crwdns31242:0crwdne31242:0" -#: options/preferences.py:191 +#: options/preferences.py msgid "Pull up from middle" msgstr "crwdns31244:0crwdne31244:0" -#: options/preferences.py:192 +#: options/preferences.py msgid "Pull up at random" msgstr "crwdns31246:0crwdne31246:0" -#: options/preferences.py:193 +#: options/preferences.py msgid "Intermediate brackets" msgstr "crwdns31248:0crwdne31248:0" -#: options/preferences.py:194 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" msgstr "crwdns31250:0crwdne31250:0" -#: options/preferences.py:195 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" msgstr "crwdns31252:0crwdne31252:0" -#: options/preferences.py:196 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" msgstr "crwdns31254:0crwdne31254:0" -#: options/preferences.py:203 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" msgstr "crwdns31256:0crwdne31256:0" -#: options/preferences.py:204 +#: options/preferences.py msgid "Side allocations method" msgstr "crwdns31258:0crwdne31258:0" -#: options/preferences.py:208 options/preferences.py:225 +#: options/preferences.py msgid "Random" msgstr "crwdns31260:0crwdne31260:0" -#: options/preferences.py:209 +#: options/preferences.py msgid "Balance" msgstr "crwdns31262:0crwdne31262:0" -#: options/preferences.py:210 +#: options/preferences.py msgid "Pre-allocated" msgstr "crwdns31264:0crwdne31264:0" -#: options/preferences.py:211 +#: options/preferences.py msgid "Manually enter from ballot" msgstr "crwdns31266:0crwdne31266:0" -#: options/preferences.py:218 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." msgstr "crwdns31268:0crwdne31268:0" -#: options/preferences.py:219 +#: options/preferences.py msgid "Pairing method" msgstr "crwdns31270:0crwdne31270:0" -#: options/preferences.py:223 +#: options/preferences.py msgid "Slide" msgstr "crwdns31272:0crwdne31272:0" -#: options/preferences.py:224 +#: options/preferences.py msgid "Fold" msgstr "crwdns31274:0crwdne31274:0" -#: options/preferences.py:226 +#: options/preferences.py msgid "Adjacent" msgstr "crwdns31276:0crwdne31276:0" -#: options/preferences.py:227 +#: options/preferences.py msgid "Fold top, adjacent rest" msgstr "crwdns31278:0crwdne31278:0" -#: options/preferences.py:234 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" msgstr "crwdns31280:0crwdne31280:0" -#: options/preferences.py:236 +#: options/preferences.py msgid "Conflict avoidance method" msgstr "crwdns31282:0crwdne31282:0" -#: options/preferences.py:240 +#: options/preferences.py msgid "Off" msgstr "crwdns31284:0crwdne31284:0" -#: options/preferences.py:241 +#: options/preferences.py msgid "One-up-one-down" msgstr "crwdns31286:0crwdne31286:0" -#: options/preferences.py:248 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "crwdns31288:0crwdne31288:0" -#: options/preferences.py:250 +#: options/preferences.py msgid "Pullup restriction" msgstr "crwdns31290:0crwdne31290:0" -#: options/preferences.py:254 +#: options/preferences.py msgid "No restriction" msgstr "crwdns31292:0crwdne31292:0" -#: options/preferences.py:255 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" msgstr "crwdns31294:0crwdne31294:0" -#: options/preferences.py:256 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" msgstr "crwdns35200:0crwdne35200:0" -#: options/preferences.py:257 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" msgstr "crwdns35202:0crwdne35202:0" -#: options/preferences.py:264 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." msgstr "crwdns31296:0crwdne31296:0" -#: options/preferences.py:265 +#: options/preferences.py msgid "BP pullup distribution" msgstr "crwdns31298:0crwdne31298:0" -#: options/preferences.py:269 +#: options/preferences.py msgid "Anywhere in bracket" msgstr "crwdns31300:0crwdne31300:0" -#: options/preferences.py:270 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" msgstr "crwdns31302:0crwdne31302:0" -#: options/preferences.py:277 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" msgstr "crwdns31304:0crwdne31304:0" -#: options/preferences.py:278 +#: options/preferences.py msgid "BP position cost" msgstr "crwdns31306:0crwdne31306:0" -#: options/preferences.py:282 +#: options/preferences.py msgid "Simple" msgstr "crwdns31308:0crwdne31308:0" -#: options/preferences.py:283 +#: options/preferences.py msgid "Rényi entropy" msgstr "crwdns31310:0crwdne31310:0" -#: options/preferences.py:284 +#: options/preferences.py msgid "Population variance" msgstr "crwdns31312:0crwdne31312:0" -#: options/preferences.py:291 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." msgstr "crwdns31314:0crwdne31314:0" -#: options/preferences.py:294 +#: options/preferences.py msgid "Rényi order (BP)" msgstr "crwdns31316:0crwdne31316:0" -#: options/preferences.py:303 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." msgstr "crwdns31318:0crwdne31318:0" -#: options/preferences.py:306 +#: options/preferences.py msgid "BP position cost exponent" msgstr "crwdns31320:0crwdne31320:0" -#: options/preferences.py:315 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." msgstr "crwdns31322:0crwdne31322:0" -#: options/preferences.py:317 +#: options/preferences.py msgid "BP assignment method" msgstr "crwdns31324:0crwdne31324:0" -#: options/preferences.py:321 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" msgstr "crwdns31326:0crwdne31326:0" -#: options/preferences.py:322 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" msgstr "crwdns31328:0crwdne31328:0" -#: options/preferences.py:329 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" msgstr "crwdns31330:0crwdne31330:0" -#: options/preferences.py:330 +#: options/preferences.py msgid "Skip adjudicator check-ins" msgstr "crwdns31332:0crwdne31332:0" -#: options/preferences.py:338 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" msgstr "crwdns31334:0crwdne31334:0" -#: options/preferences.py:339 +#: options/preferences.py msgid "No panellist adjudicators" msgstr "crwdns31336:0crwdne31336:0" -#: options/preferences.py:347 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" msgstr "crwdns31338:0crwdne31338:0" -#: options/preferences.py:348 +#: options/preferences.py msgid "No trainee adjudicators" msgstr "crwdns31340:0crwdne31340:0" -#: options/preferences.py:355 options/templates/preferences_index.html:73 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" msgstr "crwdns31342:0crwdne31342:0" -#: options/preferences.py:361 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" msgstr "crwdns31344:0crwdne31344:0" -#: options/preferences.py:362 +#: options/preferences.py msgid "Minimum adjudicator score" msgstr "crwdns31346:0crwdne31346:0" -#: options/preferences.py:370 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" msgstr "crwdns31348:0crwdne31348:0" -#: options/preferences.py:371 +#: options/preferences.py msgid "Maximum adjudicator score" msgstr "crwdns31350:0crwdne31350:0" -#: options/preferences.py:379 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" msgstr "crwdns31352:0crwdne31352:0" -#: options/preferences.py:380 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" msgstr "crwdns31354:0crwdne31354:0" -#: options/preferences.py:384 +#: options/preferences.py msgid "Chairs on panellists and trainees" msgstr "crwdns31356:0crwdne31356:0" -#: options/preferences.py:385 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" msgstr "crwdns31358:0crwdne31358:0" -#: options/preferences.py:386 +#: options/preferences.py msgid "Panellists and trainees on chairs, vice-versa" msgstr "crwdns51948:0crwdne51948:0" -#: options/preferences.py:387 +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" msgstr "crwdns31360:0crwdne31360:0" -#: options/preferences.py:394 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "crwdns31362:0crwdne31362:0" -#: options/preferences.py:395 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" msgstr "crwdns31364:0crwdne31364:0" -#: options/preferences.py:399 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" msgstr "crwdns31366:0crwdne31366:0" -#: options/preferences.py:400 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" msgstr "crwdns31368:0crwdne31368:0" -#: options/preferences.py:407 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" msgstr "crwdns31370:0crwdne31370:0" -#: options/preferences.py:408 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" msgstr "crwdns31372:0crwdne31372:0" -#: options/preferences.py:416 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" msgstr "crwdns31374:0crwdne31374:0" -#: options/preferences.py:417 +#: options/preferences.py msgid "Show unaccredited" msgstr "crwdns31376:0crwdne31376:0" -#: options/preferences.py:425 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" msgstr "crwdns31378:0crwdne31378:0" -#: options/preferences.py:426 +#: options/preferences.py msgid "Feedback introduction/explanation" msgstr "crwdns31380:0crwdne31380:0" -#: options/preferences.py:435 options/templates/preferences_index.html:63 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" msgstr "crwdns31382:0crwdne31382:0" -#: options/preferences.py:441 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" msgstr "crwdns31384:0crwdne31384:0" -#: options/preferences.py:442 +#: options/preferences.py msgid "Teams in debate" msgstr "crwdns31386:0crwdne31386:0" -#: options/preferences.py:446 +#: options/preferences.py msgid "Two-team format" msgstr "crwdns31388:0crwdne31388:0" -#: options/preferences.py:447 +#: options/preferences.py msgid "British Parliamentary (four teams)" msgstr "crwdns31390:0crwdne31390:0" -#: options/preferences.py:454 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." msgstr "crwdns31392:0crwdne31392:0" -#: options/preferences.py:455 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" msgstr "crwdns31394:0crwdne31394:0" -#: options/preferences.py:459 options/preferences.py:472 +#: options/preferences.py msgid "One ballot per voting adjudicator" msgstr "crwdns31396:0crwdne31396:0" -#: options/preferences.py:460 options/preferences.py:473 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" msgstr "crwdns31398:0crwdne31398:0" -#: options/preferences.py:467 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." msgstr "crwdns31400:0crwdne31400:0" -#: options/preferences.py:468 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" msgstr "crwdns31402:0crwdne31402:0" -#: options/preferences.py:480 +#: options/preferences.py msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." msgstr "crwdns51710:0crwdne51710:0" -#: options/preferences.py:481 +#: options/preferences.py msgid "Winner Declaration in ballot(s)" msgstr "crwdns51712:0crwdne51712:0" -#: options/preferences.py:485 +#: options/preferences.py msgid "Do not require separate winner selection" msgstr "crwdns51714:0crwdne51714:0" -#: options/preferences.py:486 +#: options/preferences.py msgid "Require separate winner selection as a check on correct scores" msgstr "crwdns51716:0crwdne51716:0" -#: options/preferences.py:487 +#: options/preferences.py msgid "Require winner selection to break tied-point debates" msgstr "crwdns51718:0crwdne51718:0" -#: options/preferences.py:488 +#: options/preferences.py msgid "Require winner selection, overriding scores" msgstr "crwdns51720:0crwdne51720:0" -#: options/preferences.py:495 +#: options/preferences.py msgid "When ballots should ask for speaker scores." msgstr "crwdns51722:0crwdne51722:0" -#: options/preferences.py:496 +#: options/preferences.py msgid "Require speaker scores" msgstr "crwdns51724:0crwdne51724:0" -#: options/preferences.py:500 +#: options/preferences.py msgid "Always require speaker scores" msgstr "crwdns51726:0crwdne51726:0" -#: options/preferences.py:501 +#: options/preferences.py msgid "Only require speaker scores in preliminary rounds" msgstr "crwdns51728:0crwdne51728:0" -#: options/preferences.py:502 +#: options/preferences.py msgid "Never require speaker scores" msgstr "crwdns51730:0crwdne51730:0" -#: options/preferences.py:509 +#: options/preferences.py msgid "How many substantive speakers on a team" msgstr "crwdns31404:0crwdne31404:0" -#: options/preferences.py:510 +#: options/preferences.py msgid "Substantive speakers" msgstr "crwdns31406:0crwdne31406:0" -#: options/preferences.py:518 +#: options/preferences.py msgid "What to call the teams" msgstr "crwdns31408:0crwdne31408:0" -#: options/preferences.py:519 +#: options/preferences.py msgid "Side names" msgstr "crwdns31410:0crwdne31410:0" -#: options/preferences.py:528 +#: options/preferences.py msgid "Whether this style features scored reply speeches" msgstr "crwdns31412:0crwdne31412:0" -#: options/preferences.py:529 +#: options/preferences.py msgid "Reply scores" msgstr "crwdns31414:0crwdne31414:0" -#: options/preferences.py:537 +#: options/preferences.py msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" msgstr "crwdns51792:0crwdne51792:0" -#: options/preferences.py:538 +#: options/preferences.py msgid "Require reply speaker to have given a substantive speech" msgstr "crwdns51734:0crwdne51734:0" -#: options/preferences.py:545 options/templates/preferences_index.html:68 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "crwdns31420:0crwdne31420:0" -#: options/preferences.py:551 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" msgstr "crwdns31422:0crwdne31422:0" -#: options/preferences.py:552 +#: options/preferences.py msgid "Speeches missable for standings eligibility" msgstr "crwdns31424:0crwdne31424:0" -#: options/preferences.py:560 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" msgstr "crwdns31426:0crwdne31426:0" -#: options/preferences.py:561 +#: options/preferences.py msgid "Replies missable for standings eligibility" msgstr "crwdns31428:0crwdne31428:0" -#: options/preferences.py:569 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" msgstr "crwdns31430:0crwdne31430:0" -#: options/preferences.py:570 +#: options/preferences.py msgid "Team standings precedence" msgstr "crwdns31432:0crwdne31432:0" -#: options/preferences.py:586 options/preferences.py:621 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" msgstr "crwdns31434:0%(duplicates)scrwdne31434:0" -#: options/preferences.py:592 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" msgstr "crwdns31438:0crwdne31438:0" -#: options/preferences.py:593 +#: options/preferences.py msgid "Team standings extra metrics" msgstr "crwdns31440:0crwdne31440:0" -#: options/preferences.py:604 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" msgstr "crwdns31442:0crwdne31442:0" -#: options/preferences.py:605 +#: options/preferences.py msgid "Speaker standings precedence" msgstr "crwdns31444:0crwdne31444:0" -#: options/preferences.py:627 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" msgstr "crwdns31446:0crwdne31446:0" -#: options/preferences.py:628 +#: options/preferences.py msgid "Speaker standings extra metrics" msgstr "crwdns31448:0crwdne31448:0" -#: options/preferences.py:638 options/templates/preferences_index.html:89 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" msgstr "crwdns31450:0crwdne31450:0" -#: options/preferences.py:644 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." msgstr "crwdns31452:0crwdne31452:0" -#: options/preferences.py:645 +#: options/preferences.py msgid "Release team tab to public" msgstr "crwdns31454:0crwdne31454:0" -#: options/preferences.py:653 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." msgstr "crwdns31456:0crwdne31456:0" -#: options/preferences.py:654 +#: options/preferences.py msgid "Top teams cutoff" msgstr "crwdns31458:0crwdne31458:0" -#: options/preferences.py:662 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." msgstr "crwdns31460:0crwdne31460:0" -#: options/preferences.py:663 +#: options/preferences.py msgid "Release speaker tab to public" msgstr "crwdns31462:0crwdne31462:0" -#: options/preferences.py:671 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." msgstr "crwdns31464:0crwdne31464:0" -#: options/preferences.py:672 +#: options/preferences.py msgid "Top speakers cutoff" msgstr "crwdns31466:0crwdne31466:0" -#: options/preferences.py:680 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." msgstr "crwdns31468:0crwdne31468:0" -#: options/preferences.py:681 +#: options/preferences.py msgid "Release replies tab to public" msgstr "crwdns31470:0crwdne31470:0" -#: options/preferences.py:689 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." msgstr "crwdns31472:0crwdne31472:0" -#: options/preferences.py:690 +#: options/preferences.py msgid "Top replies cutoff" msgstr "crwdns31474:0crwdne31474:0" -#: options/preferences.py:716 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." msgstr "crwdns31476:0crwdne31476:0" -#: options/preferences.py:719 +#: options/preferences.py msgid "Release motions tab to public" msgstr "crwdns31478:0crwdne31478:0" -#: options/preferences.py:727 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" msgstr "crwdns31480:0crwdne31480:0" -#: options/preferences.py:728 +#: options/preferences.py msgid "Release adjudicator tab to public" msgstr "crwdns31482:0crwdne31482:0" -#: options/preferences.py:736 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" msgstr "crwdns31484:0crwdne31484:0" -#: options/preferences.py:737 +#: options/preferences.py msgid "Adjudicator tab displays" msgstr "crwdns31486:0crwdne31486:0" -#: options/preferences.py:741 +#: options/preferences.py msgid "Only shows base score" msgstr "crwdns35578:0crwdne35578:0" -#: options/preferences.py:742 +#: options/preferences.py msgid "Only shows final score" msgstr "crwdns31490:0crwdne31490:0" -#: options/preferences.py:743 +#: options/preferences.py msgid "Shows base, final, and per-round scores" msgstr "crwdns35580:0crwdne35580:0" -#: options/preferences.py:750 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." msgstr "crwdns31494:0crwdne31494:0" -#: options/preferences.py:751 +#: options/preferences.py msgid "Release ballots to public" msgstr "crwdns31496:0crwdne31496:0" -#: options/preferences.py:759 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" msgstr "crwdns31498:0crwdne31498:0" -#: options/preferences.py:760 +#: options/preferences.py msgid "Release all round results to public" msgstr "crwdns31500:0crwdne31500:0" -#: options/preferences.py:768 +#: options/preferences.py msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." msgstr "crwdns51950:0crwdne51950:0" -#: options/preferences.py:769 +#: options/preferences.py msgid "Release ballots through private URLs" msgstr "crwdns51952:0crwdne51952:0" -#: options/preferences.py:776 options/templates/preferences_index.html:94 +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" msgstr "crwdns31502:0crwdne31502:0" -#: options/preferences.py:782 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" msgstr "crwdns31504:0crwdne31504:0" -#: options/preferences.py:783 +#: options/preferences.py msgid "Ballot submissions from adjudicators" msgstr "crwdns31506:0crwdne31506:0" -#: options/preferences.py:787 options/preferences.py:801 +#: options/preferences.py msgid "Disabled (tab staff only)" msgstr "crwdns31508:0crwdne31508:0" -#: options/preferences.py:788 options/preferences.py:802 +#: options/preferences.py msgid "Use private URLs" msgstr "crwdns31510:0crwdne31510:0" -#: options/preferences.py:789 options/preferences.py:803 +#: options/preferences.py msgid "Use publicly accessible form" msgstr "crwdns31512:0crwdne31512:0" -#: options/preferences.py:796 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" msgstr "crwdns31514:0crwdne31514:0" -#: options/preferences.py:797 +#: options/preferences.py msgid "Feedback submissions from participants" msgstr "crwdns31516:0crwdne31516:0" -#: options/preferences.py:810 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" msgstr "crwdns31518:0crwdne31518:0" -#: options/preferences.py:811 +#: options/preferences.py msgid "Require password for submission" msgstr "crwdns31520:0crwdne31520:0" -#: options/preferences.py:819 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" msgstr "crwdns31522:0crwdne31522:0" -#: options/preferences.py:820 +#: options/preferences.py msgid "Password for public submission" msgstr "crwdns31524:0crwdne31524:0" -#: options/preferences.py:828 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" msgstr "crwdns31526:0crwdne31526:0" -#: options/preferences.py:829 +#: options/preferences.py msgid "Bypass double checking" msgstr "crwdns31528:0crwdne31528:0" -#: options/preferences.py:837 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." msgstr "crwdns51310:0crwdne51310:0" -#: options/preferences.py:838 +#: options/preferences.py msgid "Enforce blind confirmations" msgstr "crwdns51312:0crwdne51312:0" -#: options/preferences.py:846 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." msgstr "crwdns31534:0crwdne31534:0" -#: options/preferences.py:849 +#: options/preferences.py msgid "Assistant user access" msgstr "crwdns31536:0crwdne31536:0" -#: options/preferences.py:854 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" msgstr "crwdns31538:0crwdne31538:0" -#: options/preferences.py:855 +#: options/preferences.py msgid "Just results entry and draw display" msgstr "crwdns31540:0crwdne31540:0" -#: options/preferences.py:856 +#: options/preferences.py msgid "Only results entry" msgstr "crwdns31542:0crwdne31542:0" -#: options/preferences.py:862 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." msgstr "crwdns31544:0crwdne31544:0" -#: options/preferences.py:863 +#: options/preferences.py msgid "Participant self-checkin" msgstr "crwdns31546:0crwdne31546:0" -#: options/preferences.py:871 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" msgstr "crwdns31548:0crwdne31548:0" -#: options/preferences.py:874 +#: options/preferences.py msgid "Check-In Window (People)" msgstr "crwdns31550:0crwdne31550:0" -#: options/preferences.py:880 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" msgstr "crwdns51314:0crwdne51314:0" -#: options/preferences.py:883 +#: options/preferences.py msgid "Check-In Window (Rooms)" msgstr "crwdns51316:0crwdne51316:0" -#: options/preferences.py:889 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" msgstr "crwdns31556:0crwdne31556:0" -#: options/preferences.py:890 +#: options/preferences.py msgid "Ballot Digit Checks" msgstr "crwdns31558:0crwdne31558:0" -#: options/preferences.py:898 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." msgstr "crwdns31564:0crwdne31564:0" -#: options/preferences.py:899 +#: options/preferences.py msgid "Score return location" msgstr "crwdns31566:0crwdne31566:0" -#: options/preferences.py:907 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." msgstr "crwdns31568:0crwdne31568:0" -#: options/preferences.py:908 +#: options/preferences.py msgid "Feedback return location" msgstr "crwdns31570:0crwdne31570:0" -#: options/preferences.py:916 +#: options/preferences.py msgid "Lets debates have their status as postponed, as to not block draw generation." msgstr "crwdns51736:0crwdne51736:0" -#: options/preferences.py:917 +#: options/preferences.py msgid "Enable postponements" msgstr "crwdns51738:0crwdne51738:0" -#: options/preferences.py:925 +#: options/preferences.py msgid "Have each voting adjudicator submit a separate ballot." msgstr "crwdns52089:0crwdne52089:0" -#: options/preferences.py:926 +#: options/preferences.py msgid "Individual voting ballots" msgstr "crwdns52091:0crwdne52091:0" -#: options/preferences.py:933 options/templates/preferences_index.html:99 +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" msgstr "crwdns31572:0crwdne31572:0" -#: options/preferences.py:939 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" msgstr "crwdns31574:0crwdne31574:0" -#: options/preferences.py:940 +#: options/preferences.py msgid "Enable public view of participants list" msgstr "crwdns31576:0crwdne31576:0" -#: options/preferences.py:948 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" msgstr "crwdns31578:0crwdne31578:0" -#: options/preferences.py:949 +#: options/preferences.py msgid "Enable public view of institutions list" msgstr "crwdns31580:0crwdne31580:0" -#: options/preferences.py:957 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" msgstr "crwdns31582:0crwdne31582:0" -#: options/preferences.py:958 +#: options/preferences.py msgid "Enable public view of diversity info" msgstr "crwdns31584:0crwdne31584:0" -#: options/preferences.py:966 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." msgstr "crwdns35208:0crwdne35208:0" -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of the checkin statuses" msgstr "crwdns31588:0crwdne31588:0" -#: options/preferences.py:977 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" msgstr "crwdns31590:0crwdne31590:0" -#: options/preferences.py:978 +#: options/preferences.py msgid "Show break categories on participants page" msgstr "crwdns31592:0crwdne31592:0" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" msgstr "crwdns31594:0crwdne31594:0" -#: options/preferences.py:987 +#: options/preferences.py msgid "Show pre-allocated sides to public" msgstr "crwdns31596:0crwdne31596:0" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing released draws" msgstr "crwdns31598:0crwdne31598:0" -#: options/preferences.py:996 +#: options/preferences.py msgid "Enable public view of draw" msgstr "crwdns31600:0crwdne31600:0" -#: options/preferences.py:1000 +#: options/preferences.py msgid "Disabled" msgstr "crwdns31602:0crwdne31602:0" -#: options/preferences.py:1001 +#: options/preferences.py msgid "Show a single page for the current round's draw" msgstr "crwdns31604:0crwdne31604:0" -#: options/preferences.py:1002 +#: options/preferences.py msgid "Show individual pages for all released draws" msgstr "crwdns31606:0crwdne31606:0" -#: options/preferences.py:1009 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" msgstr "crwdns31608:0crwdne31608:0" -#: options/preferences.py:1010 +#: options/preferences.py msgid "Enable public view of results" msgstr "crwdns31610:0crwdne31610:0" -#: options/preferences.py:1018 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" msgstr "crwdns31612:0crwdne31612:0" -#: options/preferences.py:1019 +#: options/preferences.py msgid "Enable public view of motions" msgstr "crwdns31614:0crwdne31614:0" -#: options/preferences.py:1027 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" msgstr "crwdns31616:0crwdne31616:0" -#: options/preferences.py:1028 +#: options/preferences.py msgid "Enable public view of team standings" msgstr "crwdns31618:0crwdne31618:0" -#: options/preferences.py:1036 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" msgstr "crwdns31620:0crwdne31620:0" -#: options/preferences.py:1037 +#: options/preferences.py msgid "Enable public record pages" msgstr "crwdns31622:0crwdne31622:0" -#: options/preferences.py:1045 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." msgstr "crwdns31624:0crwdne31624:0" -#: options/preferences.py:1046 +#: options/preferences.py msgid "Release team breaks to public" msgstr "crwdns31626:0crwdne31626:0" -#: options/preferences.py:1054 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." msgstr "crwdns31628:0crwdne31628:0" -#: options/preferences.py:1055 +#: options/preferences.py msgid "Release adjudicators break to public" msgstr "crwdns31630:0crwdne31630:0" -#: options/preferences.py:1063 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" msgstr "crwdns31632:0crwdne31632:0" -#: options/preferences.py:1064 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" msgstr "crwdns31634:0crwdne31634:0" -#: options/preferences.py:1072 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." msgstr "crwdns31636:0crwdne31636:0" -#: options/preferences.py:1073 +#: options/preferences.py msgid "Tournament staff" msgstr "crwdns31638:0crwdne31638:0" -#: options/preferences.py:1083 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" msgstr "crwdns31640:0crwdne31640:0" -#: options/preferences.py:1084 +#: options/preferences.py msgid "Welcome message" msgstr "crwdns31642:0crwdne31642:0" -#: options/preferences.py:1093 options/templates/preferences_index.html:104 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" msgstr "crwdns31644:0crwdne31644:0" -#: options/preferences.py:1099 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" msgstr "crwdns31646:0crwdne31646:0" -#: options/preferences.py:1100 +#: options/preferences.py msgid "Show splitting adjudicators" msgstr "crwdns31648:0crwdne31648:0" -#: options/preferences.py:1108 +#: options/preferences.py msgid "Whether and how to use code names for teams" msgstr "crwdns31654:0crwdne31654:0" -#: options/preferences.py:1109 +#: options/preferences.py msgid "Team code names" msgstr "crwdns31656:0crwdne31656:0" -#: options/preferences.py:1114 +#: options/preferences.py msgid "Do not use code names" msgstr "crwdns31658:0crwdne31658:0" -#: options/preferences.py:1115 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" msgstr "crwdns31660:0crwdne31660:0" -#: options/preferences.py:1116 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" msgstr "crwdns31662:0crwdne31662:0" -#: options/preferences.py:1118 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" msgstr "crwdns31664:0crwdne31664:0" -#: options/preferences.py:1120 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" msgstr "crwdns31666:0crwdne31666:0" -#: options/preferences.py:1126 +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "crwdns52203:0crwdne52203:0" + +#: options/preferences.py +msgid "Participant code names" +msgstr "crwdns52205:0crwdne52205:0" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" msgstr "crwdns31668:0crwdne31668:0" -#: options/preferences.py:1127 +#: options/preferences.py msgid "Show emoji" msgstr "crwdns31670:0crwdne31670:0" -#: options/preferences.py:1135 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" msgstr "crwdns31672:0crwdne31672:0" -#: options/preferences.py:1136 +#: options/preferences.py msgid "Show team institutions" msgstr "crwdns31674:0crwdne31674:0" -#: options/preferences.py:1144 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" msgstr "crwdns51318:0crwdne51318:0" -#: options/preferences.py:1145 +#: options/preferences.py msgid "Show adjudicator institutions" msgstr "crwdns31678:0crwdne31678:0" -#: options/preferences.py:1153 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" msgstr "crwdns31680:0crwdne31680:0" -#: options/preferences.py:1154 +#: options/preferences.py msgid "Show speakers in draw" msgstr "crwdns31682:0crwdne31682:0" -#: options/preferences.py:1161 options/templates/preferences_index.html:109 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" msgstr "crwdns31764:0crwdne31764:0" -#: options/preferences.py:1167 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "crwdns31766:0crwdne31766:0" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Reply-to name" msgstr "crwdns31768:0crwdne31768:0" -#: options/preferences.py:1176 +#: options/preferences.py msgid "The email address for handling replies" msgstr "crwdns31770:0crwdne31770:0" -#: options/preferences.py:1177 +#: options/preferences.py msgid "Reply-to address" msgstr "crwdns31772:0crwdne31772:0" -#: options/preferences.py:1185 +#: options/preferences.py msgid "A secret key to accept email status events" msgstr "crwdns35210:0crwdne35210:0" -#: options/preferences.py:1186 +#: options/preferences.py msgid "Email status secret key" msgstr "crwdns35212:0crwdne35212:0" -#: options/preferences.py:1196 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "crwdns35214:0crwdne35214:0" -#: options/preferences.py:1197 +#: options/preferences.py msgid "Ballot receipts" msgstr "crwdns31776:0crwdne31776:0" -#: options/preferences.py:1205 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "crwdns31778:0{{ DEBATE }}crwdne31778:0" -#: options/preferences.py:1207 +#: options/preferences.py msgid "Ballot receipt subject line" msgstr "crwdns31780:0crwdne31780:0" -#: options/preferences.py:1215 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "crwdns35216:0crwdne35216:0" -#: options/preferences.py:1216 +#: options/preferences.py msgid "Ballot receipt message" msgstr "crwdns31784:0crwdne31784:0" -#: options/preferences.py:1232 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." msgstr "crwdns35218:0crwdne35218:0" -#: options/preferences.py:1233 +#: options/preferences.py msgid "Team points subject line" msgstr "crwdns31788:0crwdne31788:0" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." msgstr "crwdns35220:0crwdne35220:0" -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team points message" msgstr "crwdns31792:0crwdne31792:0" -#: options/preferences.py:1250 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." msgstr "crwdns35222:0crwdne35222:0" -#: options/preferences.py:1251 +#: options/preferences.py msgid "Adjudicator draw subject line" msgstr "crwdns31804:0crwdne31804:0" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." msgstr "crwdns35224:0crwdne35224:0" -#: options/preferences.py:1259 +#: options/preferences.py msgid "Adjudicator draw message" msgstr "crwdns35226:0crwdne35226:0" -#: options/preferences.py:1268 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." msgstr "crwdns35228:0crwdne35228:0" -#: options/preferences.py:1269 +#: options/preferences.py msgid "Team draw subject line" msgstr "crwdns34346:0crwdne34346:0" -#: options/preferences.py:1276 options/preferences.py:1294 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." msgstr "crwdns35230:0crwdne35230:0" -#: options/preferences.py:1277 options/preferences.py:1295 +#: options/preferences.py msgid "Private URL notification message" msgstr "crwdns34350:0crwdne34350:0" -#: options/preferences.py:1286 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." msgstr "crwdns35232:0crwdne35232:0" -#: options/preferences.py:1287 +#: options/preferences.py msgid "Private URL notification subject line" msgstr "crwdns34354:0crwdne34354:0" -#: options/preferences.py:1308 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." msgstr "crwdns34356:0crwdne34356:0" -#: options/preferences.py:1309 +#: options/preferences.py msgid "Motion release notification subject line" msgstr "crwdns34358:0crwdne34358:0" -#: options/preferences.py:1316 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." msgstr "crwdns34360:0crwdne34360:0" -#: options/preferences.py:1317 +#: options/preferences.py msgid "Motion release notification message" msgstr "crwdns34362:0crwdne34362:0" -#: options/preferences.py:1325 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." msgstr "crwdns34364:0crwdne34364:0" -#: options/preferences.py:1326 +#: options/preferences.py msgid "Team registration notification subject line" msgstr "crwdns34366:0crwdne34366:0" -#: options/preferences.py:1333 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." msgstr "crwdns34368:0crwdne34368:0" -#: options/preferences.py:1334 +#: options/preferences.py msgid "Team registration notification message" msgstr "crwdns34370:0crwdne34370:0" -#: options/preferences.py:1343 options/templates/preferences_index.html:78 +#: options/preferences.py options/templates/preferences_index.html msgid "Motions" msgstr "crwdns51842:0crwdne51842:0" -#: options/preferences.py:1349 +#: options/preferences.py msgid "If checked, ballots require a motion to be entered" msgstr "crwdns51844:0crwdne51844:0" -#: options/preferences.py:1350 +#: options/preferences.py msgid "Enable motions" msgstr "crwdns51846:0crwdne51846:0" -#: options/preferences.py:1358 +#: options/preferences.py msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" msgstr "crwdns31560:0crwdne31560:0" -#: options/preferences.py:1359 +#: options/preferences.py msgid "Ballot Hide Motions" msgstr "crwdns31562:0crwdne31562:0" -#: options/preferences.py:1367 +#: options/preferences.py msgid "Enables the motion veto field on ballots, to track veto statistics" msgstr "crwdns31416:0crwdne31416:0" -#: options/preferences.py:1368 +#: options/preferences.py msgid "Motion vetoes" msgstr "crwdns31418:0crwdne31418:0" -#: options/preferences.py:1376 +#: options/preferences.py msgid "If showing results to public, show which motions were selected in the record" msgstr "crwdns31650:0crwdne31650:0" -#: options/preferences.py:1377 +#: options/preferences.py msgid "Show motions in results" msgstr "crwdns31652:0crwdne31652:0" -#: options/preferences.py:1385 +#: options/preferences.py msgid "Order in which are listed by round in the public view" msgstr "crwdns31684:0crwdne31684:0" -#: options/preferences.py:1386 +#: options/preferences.py msgid "Order to display motions" msgstr "crwdns31686:0crwdne31686:0" -#: options/preferences.py:1390 +#: options/preferences.py msgid "Earliest round first" msgstr "crwdns31688:0crwdne31688:0" -#: options/preferences.py:1391 +#: options/preferences.py msgid "Latest round first" msgstr "crwdns31690:0crwdne31690:0" -#: options/preferences.py:1398 +#: options/preferences.py msgid "Whether motions can be reused from one round to another." msgstr "crwdns51858:0crwdne51858:0" -#: options/preferences.py:1399 +#: options/preferences.py msgid "Allow motion reuse" msgstr "crwdns51860:0crwdne51860:0" -#: options/preferences.py:1406 options/templates/preferences_index.html:114 +#: options/preferences.py options/templates/preferences_index.html msgid "Global Settings" msgstr "crwdns51602:0crwdne51602:0" -#: options/preferences.py:1412 +#: options/preferences.py msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." msgstr "crwdns51604:0crwdne51604:0" -#: options/preferences.py:1413 +#: options/preferences.py msgid "Enable API access" msgstr "crwdns51606:0crwdne51606:0" -#: options/preferences.py:1421 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "crwdns52093:0crwdne52093:0" -#: options/preferences.py:1422 +#: options/preferences.py msgid "Assistant account creation key" msgstr "crwdns52095:0crwdne52095:0" -#: options/preferences.py:1431 +#: options/preferences.py msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" msgstr "crwdns52097:0crwdne52097:0" -#: options/preferences.py:1433 +#: options/preferences.py msgid "Administrator account creation key" msgstr "crwdns52099:0crwdne52099:0" -#: options/presets.py:32 options/presets.py:324 +#: options/presets.py msgid "Public Information Options" msgstr "crwdns35582:0crwdne35582:0" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" msgstr "crwdns35584:0crwdne35584:0" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" msgstr "crwdns35586:0crwdne35586:0" -#: options/presets.py:74 +#: options/presets.py msgid "Australs Rules" msgstr "crwdns35588:0crwdne35588:0" -#: options/presets.py:75 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." msgstr "crwdns35590:0crwdne35590:0" -#: options/presets.py:114 +#: options/presets.py msgid "British Parliamentary Rules" msgstr "crwdns35592:0crwdne35592:0" -#: options/presets.py:115 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." msgstr "crwdns35594:0crwdne35594:0" -#: options/presets.py:157 +#: options/presets.py msgid "Canadian Parliamentary Rules" msgstr "crwdns35596:0crwdne35596:0" -#: options/presets.py:159 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." msgstr "crwdns35598:0crwdne35598:0" -#: options/presets.py:182 +#: options/presets.py msgid "Australian Easters Rules" msgstr "crwdns35600:0crwdne35600:0" -#: options/presets.py:184 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." msgstr "crwdns35602:0crwdne35602:0" -#: options/presets.py:202 +#: options/presets.py msgid "2 vs 2 Impromptu" msgstr "crwdns35604:0crwdne35604:0" -#: options/presets.py:204 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." msgstr "crwdns35606:0crwdne35606:0" -#: options/presets.py:229 +#: options/presets.py msgid "3 vs 3 Prepared" msgstr "crwdns35608:0crwdne35608:0" -#: options/presets.py:231 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." msgstr "crwdns35610:0crwdne35610:0" -#: options/presets.py:258 +#: options/presets.py msgid "UADC Rules" msgstr "crwdns35612:0crwdne35612:0" -#: options/presets.py:260 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." msgstr "crwdns35614:0crwdne35614:0" -#: options/presets.py:296 +#: options/presets.py msgid "WSDC Rules" msgstr "crwdns35616:0crwdne35616:0" -#: options/presets.py:298 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "crwdns35618:0crwdne35618:0" -#: options/presets.py:326 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "crwdns35620:0crwdne35620:0" -#: options/presets.py:338 +#: options/presets.py msgid "Tab Release Options" msgstr "crwdns35622:0crwdne35622:0" -#: options/presets.py:340 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" msgstr "crwdns35624:0crwdne35624:0" -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "crwdns52207:0crwdne52207:0" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "crwdns52209:0crwdne52209:0" + +#: options/templates/preferences_index.html msgid "Configuration" msgstr "crwdns31810:0crwdne31810:0" -#: options/templates/preferences_index.html:11 +#: options/templates/preferences_index.html #, python-format msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." msgstr "crwdns51740:0%(options_url)scrwdne51740:0" -#: options/templates/preferences_index.html:24 +#: options/templates/preferences_index.html #, python-format msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." msgstr "crwdns51742:0%(options_url)scrwdne51742:0" -#: options/templates/preferences_index.html:35 +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." msgstr "crwdns31812:0%(ui_url)scrwdne31812:0" -#: options/templates/preferences_index.html:54 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" msgstr "crwdns31814:0crwdne31814:0" -#: options/templates/preferences_index.html:59 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" msgstr "crwdns31816:0crwdne31816:0" -#: options/templates/preferences_index.html:64 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" msgstr "crwdns31818:0crwdne31818:0" -#: options/templates/preferences_index.html:69 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" msgstr "crwdns31820:0crwdne31820:0" -#: options/templates/preferences_index.html:74 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" msgstr "crwdns31822:0crwdne31822:0" -#: options/templates/preferences_index.html:79 +#: options/templates/preferences_index.html msgid "How and where are motions used" msgstr "crwdns51852:0crwdne51852:0" -#: options/templates/preferences_index.html:90 +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" msgstr "crwdns31824:0crwdne31824:0" -#: options/templates/preferences_index.html:95 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" msgstr "crwdns31826:0crwdne31826:0" -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" msgstr "crwdns31828:0crwdne31828:0" -#: options/templates/preferences_index.html:105 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" msgstr "crwdns31830:0crwdne31830:0" -#: options/templates/preferences_index.html:110 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" msgstr "crwdns31832:0crwdne31832:0" -#: options/templates/preferences_index.html:115 +#: options/templates/preferences_index.html msgid "Settings which can affect all tournaments on the site" msgstr "crwdns51608:0crwdne51608:0" -#: options/templates/preferences_index.html:127 +#: options/templates/preferences_index.html msgid "Manually Set Current Round" msgstr "crwdns31836:0crwdne31836:0" -#: options/templates/preferences_index.html:128 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." msgstr "crwdns31838:0crwdne31838:0" -#: options/templates/preferences_index.html:132 -msgid "Set Round Weights" -msgstr "crwdns52101:0crwdne52101:0" +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" +msgstr "crwdns52211:0crwdne52211:0" -#: options/templates/preferences_index.html:133 +#: options/templates/preferences_index.html msgid "Rounds can be weighted so that certain rounds are worth more team points." msgstr "crwdns52103:0crwdne52103:0" -#: options/templates/preferences_index.html:140 +#: options/templates/preferences_index.html msgid "Presets" msgstr "crwdns31840:0crwdne31840:0" -#: options/templates/preferences_index.html:141 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." msgstr "crwdns31842:0crwdne31842:0" -#: options/templates/preferences_index.html:152 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" msgstr "crwdns51320:0%(preset)scrwdne51320:0" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" msgstr "crwdns31846:0%(preset_title)scrwdne31846:0" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" msgstr "crwdns31848:0crwdne31848:0" -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" msgstr "crwdns31850:0crwdne31850:0" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" msgstr "crwdns31852:0%(preset_title)scrwdne31852:0" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" msgstr "crwdns31854:0crwdne31854:0" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" msgstr "crwdns31856:0crwdne31856:0" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" msgstr "crwdns31858:0%(preset_title)scrwdne31858:0" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" msgstr "crwdns51322:0%(section)scrwdne51322:0" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" msgstr "crwdns51324:0%(section)scrwdne51324:0" -#: options/views.py:65 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." msgstr "crwdns31866:0%(section)scrwdne31866:0" -#: options/views.py:111 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." msgstr "crwdns31868:0%(name)scrwdne31868:0" diff --git a/tabbycat/participants/locale/tzl/LC_MESSAGES/django.po b/tabbycat/participants/locale/tzl/LC_MESSAGES/django.po index 28b167d567b..51b20699b79 100644 --- a/tabbycat/participants/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:16\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -18,960 +18,947 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 942\n" -#: participants/admin.py:96 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" msgstr "crwdns31870:0%(category)scrwdne31870:0" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Emoji & Code" +msgstr "crwdns52213:0crwdne52213:0" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "crwdns52215:0crwdne52215:0" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." msgstr[0] "crwdns34372:1%(count)dcrwdne34372:1" msgstr[1] "crwdns34372:5%(count)dcrwdne34372:5" -#: participants/admin.py:152 participants/admin.py:233 -msgid "Delete URL key" -msgstr "crwdns31874:0crwdne31874:0" +#: participants/admin.py +msgid "Reset emoji" +msgstr "crwdns51956:0crwdne51956:0" -#: participants/admin.py:160 +#: participants/admin.py #, python-format msgid "%(count)d team had their emoji reset." msgid_plural "%(count)d teams had their emojis reset." msgstr[0] "crwdns51954:1%(count)dcrwdne51954:1" msgstr[1] "crwdns51954:5%(count)dcrwdne51954:5" -#: participants/admin.py:164 -msgid "Reset emoji" -msgstr "crwdns51956:0crwdne51956:0" +#: participants/admin.py +msgid "Reset code name" +msgstr "crwdns51960:0crwdne51960:0" -#: participants/admin.py:170 +#: participants/admin.py #, python-format msgid "%(count)d team had their code name reset." msgid_plural "%(count)d teams had their code names reset." msgstr[0] "crwdns51958:1%(count)dcrwdne51958:1" msgstr[1] "crwdns51958:5%(count)dcrwdne51958:5" -#: participants/admin.py:174 -msgid "Reset code name" -msgstr "crwdns51960:0crwdne51960:0" - -#: participants/admin.py:228 +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." msgstr[0] "crwdns31876:1%(count)dcrwdne31876:1" msgstr[1] "crwdns31876:5%(count)dcrwdne31876:5" -#: participants/apps.py:7 participants/views.py:41 +#: participants/apps.py participants/views.py msgid "Participants" msgstr "crwdns31878:0crwdne31878:0" -#: participants/models.py:21 participants/models.py:37 -#: participants/models.py:66 participants/models.py:96 +#: participants/models.py msgid "name" msgstr "crwdns31880:0crwdne31880:0" -#: participants/models.py:24 participants/models.py:45 +#: participants/models.py msgid "region" msgstr "crwdns31882:0crwdne31882:0" -#: participants/models.py:25 +#: participants/models.py msgid "regions" msgstr "crwdns31884:0crwdne31884:0" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:39 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" msgstr "crwdns31886:0crwdne31886:0" -#: participants/models.py:41 +#: participants/models.py msgid "code" msgstr "crwdns31888:0crwdne31888:0" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:43 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" msgstr "crwdns31890:0crwdne31890:0" -#: participants/models.py:55 participants/models.py:155 -#: participants/models.py:353 +#: participants/models.py msgid "institution" msgstr "crwdns31892:0crwdne31892:0" -#: participants/models.py:56 +#: participants/models.py msgid "institutions" msgstr "crwdns31894:0crwdne31894:0" -#: participants/models.py:64 participants/models.py:157 -#: participants/models.py:356 +#: participants/models.py msgid "tournament" msgstr "crwdns31896:0crwdne31896:0" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:68 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" msgstr "crwdns31898:0crwdne31898:0" -#: participants/models.py:70 +#: participants/models.py msgid "slug" msgstr "crwdns31900:0crwdne31900:0" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:72 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" msgstr "crwdns31902:0crwdne31902:0" -#: participants/models.py:74 +#: participants/models.py msgid "sequence number" msgstr "crwdns31904:0crwdne31904:0" -#: participants/models.py:75 +#: participants/models.py msgid "The order in which the categories are displayed" msgstr "crwdns31906:0crwdne31906:0" -#: participants/models.py:77 +#: participants/models.py msgid "limit" msgstr "crwdns31908:0crwdne31908:0" -#: participants/models.py:78 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" msgstr "crwdns31910:0crwdne31910:0" -#: participants/models.py:80 +#: participants/models.py msgid "public" msgstr "crwdns31912:0crwdne31912:0" -#: participants/models.py:81 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" msgstr "crwdns31914:0crwdne31914:0" -#: participants/models.py:87 +#: participants/models.py msgid "speaker category" msgstr "crwdns31916:0crwdne31916:0" -#: participants/models.py:88 participants/models.py:330 +#: participants/models.py msgid "speaker categories" msgstr "crwdns31918:0crwdne31918:0" -#: participants/models.py:98 +#: participants/models.py msgid "email address" msgstr "crwdns51610:0crwdne51610:0" -#: participants/models.py:100 +#: participants/models.py msgid "phone" msgstr "crwdns31922:0crwdne31922:0" -#: participants/models.py:102 +#: participants/models.py msgid "anonymous" msgstr "crwdns31924:0crwdne31924:0" -#: participants/models.py:103 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" msgstr "crwdns31926:0crwdne31926:0" -#: participants/models.py:106 +#: participants/models.py +msgid "code name" +msgstr "crwdns31958:0crwdne31958:0" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "crwdns52217:0crwdne52217:0" + +#: participants/models.py msgid "URL key" msgstr "crwdns31928:0crwdne31928:0" -#: participants/models.py:111 +#: participants/models.py msgid "male" msgstr "crwdns31932:0crwdne31932:0" -#: participants/models.py:112 +#: participants/models.py msgid "female" msgstr "crwdns31934:0crwdne31934:0" -#: participants/models.py:113 +#: participants/models.py msgid "other" msgstr "crwdns31936:0crwdne31936:0" -#: participants/models.py:115 +#: participants/models.py msgid "gender" msgstr "crwdns31938:0crwdne31938:0" -#: participants/models.py:116 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" msgstr "crwdns31940:0crwdne31940:0" -#: participants/models.py:118 +#: participants/models.py msgid "pronoun" msgstr "crwdns31942:0crwdne31942:0" -#: participants/models.py:119 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" msgstr "crwdns31944:0crwdne31944:0" -#: participants/models.py:122 +#: participants/models.py msgid "person" msgstr "crwdns31946:0crwdne31946:0" -#: participants/models.py:123 +#: participants/models.py msgid "persons" msgstr "crwdns31948:0crwdne31948:0" -#: participants/models.py:138 +#: participants/models.py msgid "full name/suffix" msgstr "crwdns31950:0crwdne31950:0" -#: participants/models.py:139 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" msgstr "crwdns31952:0crwdne31952:0" -#: participants/models.py:141 +#: participants/models.py msgid "short name/suffix" msgstr "crwdns31954:0crwdne31954:0" -#: participants/models.py:142 +#: participants/models.py msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" msgstr "crwdns51804:0crwdne51804:0" -#: participants/models.py:144 -msgid "code name" -msgstr "crwdns31958:0crwdne31958:0" - -#: participants/models.py:145 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" msgstr "crwdns31960:0crwdne31960:0" -#: participants/models.py:148 +#: participants/models.py msgid "short name" msgstr "crwdns31962:0crwdne31962:0" -#: participants/models.py:149 +#: participants/models.py msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" msgstr "crwdns51806:0crwdne51806:0" -#: participants/models.py:151 +#: participants/models.py msgid "long name" msgstr "crwdns31966:0crwdne31966:0" -#: participants/models.py:152 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" msgstr "crwdns31968:0crwdne31968:0" -#: participants/models.py:159 +#: participants/models.py msgid "Uses institutional prefix" msgstr "crwdns31972:0crwdne31972:0" -#: participants/models.py:160 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" msgstr "crwdns31974:0crwdne31974:0" -#: participants/models.py:162 +#: participants/models.py msgid "break categories" msgstr "crwdns31976:0crwdne31976:0" -#: participants/models.py:167 participants/models.py:364 +#: participants/models.py msgid "institution conflicts" msgstr "crwdns32008:0crwdne32008:0" -#: participants/models.py:178 +#: participants/models.py msgid "none" msgstr "crwdns31978:0crwdne31978:0" -#: participants/models.py:179 +#: participants/models.py msgid "swing" msgstr "crwdns31980:0crwdne31980:0" -#: participants/models.py:180 +#: participants/models.py msgid "composite" msgstr "crwdns31982:0crwdne31982:0" -#: participants/models.py:181 +#: participants/models.py msgid "bye" msgstr "crwdns31984:0crwdne31984:0" -#: participants/models.py:184 +#: participants/models.py msgid "type" msgstr "crwdns31986:0crwdne31986:0" -#: participants/models.py:188 +#: participants/models.py msgid "emoji" msgstr "crwdns31988:0crwdne31988:0" -#: participants/models.py:202 participants/models.py:328 +#: participants/models.py msgid "team" msgstr "crwdns31990:0crwdne31990:0" -#: participants/models.py:203 +#: participants/models.py msgid "teams" msgstr "crwdns31992:0crwdne31992:0" -#: participants/models.py:311 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." msgstr "crwdns31994:0crwdne31994:0" -#: participants/models.py:313 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." msgstr "crwdns31996:0crwdne31996:0" -#: participants/models.py:315 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." msgstr "crwdns31998:0crwdne31998:0" -#: participants/models.py:333 +#: participants/models.py msgid "speaker" msgstr "crwdns32000:0crwdne32000:0" -#: participants/models.py:334 +#: participants/models.py msgid "speakers" msgstr "crwdns32002:0crwdne32002:0" -#: participants/models.py:357 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" msgstr "crwdns32004:0crwdne32004:0" -#: participants/models.py:359 +#: participants/models.py msgid "base score" msgstr "crwdns35628:0crwdne35628:0" -#: participants/models.py:368 +#: participants/models.py msgid "team conflicts" msgstr "crwdns32010:0crwdne32010:0" -#: participants/models.py:372 +#: participants/models.py msgid "adjudicator conflicts" msgstr "crwdns51612:0crwdne51612:0" -#: participants/models.py:375 +#: participants/models.py msgid "always trainee" msgstr "crwdns32012:0crwdne32012:0" -#: participants/models.py:376 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" msgstr "crwdns32014:0crwdne32014:0" -#: participants/models.py:378 +#: participants/models.py msgid "breaking" msgstr "crwdns32016:0crwdne32016:0" -#: participants/models.py:380 +#: participants/models.py msgid "independent" msgstr "crwdns32018:0crwdne32018:0" -#: participants/models.py:382 +#: participants/models.py msgid "adjudication core" msgstr "crwdns32020:0crwdne32020:0" -#: participants/models.py:391 +#: participants/models.py msgid "adjudicator" msgstr "crwdns32022:0crwdne32022:0" -#: participants/models.py:392 +#: participants/models.py msgid "adjudicators" msgstr "crwdns32024:0crwdne32024:0" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" msgstr "crwdns32026:0crwdne32026:0" -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" msgstr "crwdns32028:0crwdne32028:0" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" msgstr "crwdns32030:0crwdne32030:0" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" msgstr "crwdns32032:0crwdne32032:0" -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" msgstr "crwdns32074:0%(name)scrwdne32074:0" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" msgstr "crwdns34374:0crwdne34374:0" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" msgstr "crwdns35234:0crwdne35234:0" -#: participants/templates/adjudicator_registration_card.html:27 -#: participants/templates/team_registration_card.html:89 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" msgstr "crwdns35236:0crwdne35236:0" -#: participants/templates/adjudicator_registration_card.html:31 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" msgstr "crwdns35238:0crwdne35238:0" -#: participants/templates/adjudicator_registration_card.html:36 -#: participants/templates/team_registration_card.html:98 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "crwdns35240:0crwdne35240:0" -#: participants/templates/adjudicator_registration_card.html:43 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." msgstr "crwdns51326:0crwdne51326:0" -#: participants/templates/adjudicator_registration_card.html:50 -#: participants/templates/team_registration_card.html:109 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" msgstr "crwdns35242:0crwdne35242:0" -#: participants/templates/adjudicator_registration_card.html:52 -#: participants/templates/team_registration_card.html:111 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr "crwdns35244:0crwdne35244:0" -#: participants/templates/adjudicator_registration_card.html:54 -#: participants/templates/adjudicator_registration_card.html:62 -#: participants/templates/adjudicator_registration_card.html:74 -#: participants/templates/adjudicator_registration_card.html:84 -#: participants/templates/team_registration_card.html:58 -#: participants/templates/team_registration_card.html:70 -#: participants/templates/team_registration_card.html:79 -#: participants/templates/team_registration_card.html:113 -#: participants/templates/team_registration_card.html:122 -#: participants/templates/team_registration_card.html:133 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" msgstr "crwdns35246:0crwdne35246:0" -#: participants/templates/adjudicator_registration_card.html:58 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" msgstr "crwdns35248:0crwdne35248:0" -#: participants/templates/adjudicator_registration_card.html:60 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:71 -#: participants/templates/adjudicator_registration_card.html:82 -#: participants/templates/team_registration_card.html:56 -#: participants/templates/team_registration_card.html:68 -#: participants/templates/team_registration_card.html:77 -#: participants/templates/team_registration_card.html:120 -#: participants/templates/team_registration_card.html:131 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr "crwdns35250:0crwdne35250:0" -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/team_registration_card.html:118 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" msgstr "crwdns35252:0crwdne35252:0" -#: participants/templates/adjudicator_registration_card.html:80 -#: participants/templates/team_registration_card.html:129 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" msgstr "crwdns51328:0crwdne51328:0" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "crwdns32084:0crwdne32084:0" -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." msgstr "crwdns32086:0%(object_name)scrwdne32086:0" -#: participants/templates/admin/participants/delete_debateteam_warning.html:14 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." msgstr "crwdns51670:0%(objects_name)scrwdne51670:0" #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:21 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." msgstr "crwdns32090:0crwdne32090:0" -#: participants/templates/admin/participants/delete_debateteam_warning.html:33 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." msgstr "crwdns32092:0crwdne32092:0" -#: participants/templates/admin/participants/delete_debateteam_warning.html:41 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "crwdns32094:0%(object_name)scrwdne32094:0" -#: participants/templates/admin/participants/delete_debateteam_warning.html:47 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." msgstr "crwdns32096:0%(objects_name)scrwdne32096:0" -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." msgstr "crwdns34392:0crwdne34392:0" -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" msgstr "crwdns32050:0%(start_time)scrwdne32050:0" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "crwdns32052:0crwdne32052:0" -#: participants/templates/current_round/common.html:28 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "crwdns32054:1crwdne32054:1" msgstr[1] "crwdns32054:5crwdne32054:5" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" msgstr "crwdns32056:0crwdne32056:0" -#: participants/templates/current_round/common.html:37 -#: participants/templates/current_round/common.html:39 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" msgstr "crwdns32058:0crwdne32058:0" -#: participants/templates/current_round/common.html:44 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." msgstr "crwdns32060:0crwdne32060:0" -#: participants/templates/current_round/common.html:54 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." msgstr "crwdns32062:0crwdne32062:0" -#: participants/templates/current_round/common.html:57 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "crwdns32064:0crwdne32064:0" -#: participants/templates/current_round/common.html:61 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "crwdns32066:0%(seq)scrwdne32066:0" -#: participants/templates/current_round/common.html:69 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." msgstr "crwdns32068:0crwdne32068:0" -#: participants/templates/current_round/round_adj.html:14 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "crwdns51672:0%(adjudicator)scrwdnd51672:0%(aff)scrwdnd51672:0%(neg)scrwdnd51672:0%(url)scrwdnd51672:0%(room)scrwdne51672:0" -#: participants/templates/current_round/round_adj.html:18 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "crwdns51330:0%(adjudicator)scrwdnd51330:0%(aff)scrwdnd51330:0%(neg)scrwdnd51330:0%(room)scrwdne51330:0" -#: participants/templates/current_round/round_adj.html:24 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "crwdns51674:0%(aff)scrwdnd51674:0%(neg)scrwdnd51674:0%(url)scrwdnd51674:0%(room)scrwdne51674:0" -#: participants/templates/current_round/round_adj.html:28 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "crwdns51332:0%(aff)scrwdnd51332:0%(neg)scrwdnd51332:0%(room)scrwdne51332:0" -#: participants/templates/current_round/round_adj.html:36 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "crwdns51676:0%(adjudicator)scrwdnd51676:0%(type)scrwdnd51676:0%(aff)scrwdnd51676:0%(neg)scrwdnd51676:0%(url)scrwdnd51676:0%(room)scrwdne51676:0" -#: participants/templates/current_round/round_adj.html:40 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "crwdns51334:0%(adjudicator)scrwdnd51334:0%(type)scrwdnd51334:0%(aff)scrwdnd51334:0%(neg)scrwdnd51334:0%(room)scrwdne51334:0" -#: participants/templates/current_round/round_adj.html:46 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "crwdns51678:0%(type)scrwdnd51678:0%(aff)scrwdnd51678:0%(neg)scrwdnd51678:0%(url)scrwdnd51678:0%(room)scrwdne51678:0" -#: participants/templates/current_round/round_adj.html:50 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "crwdns51336:0%(type)scrwdnd51336:0%(aff)scrwdnd51336:0%(neg)scrwdnd51336:0%(room)scrwdne51336:0" -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "crwdns51680:0%(adjudicator)scrwdnd51680:0%(aff)scrwdnd51680:0%(neg)scrwdnd51680:0%(url)scrwdnd51680:0%(room)scrwdne51680:0" -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "crwdns51338:0%(adjudicator)scrwdnd51338:0%(aff)scrwdnd51338:0%(neg)scrwdnd51338:0%(room)scrwdne51338:0" -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "crwdns51682:0%(aff)scrwdnd51682:0%(neg)scrwdnd51682:0%(url)scrwdnd51682:0%(room)scrwdne51682:0" -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." msgstr "crwdns51340:0%(aff)scrwdnd51340:0%(neg)scrwdnd51340:0%(room)scrwdne51340:0" -#: participants/templates/current_round/round_adj.html:85 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "crwdns51684:0%(adjudicator)scrwdnd51684:0%(url)scrwdnd51684:0%(room)scrwdne51684:0" -#: participants/templates/current_round/round_adj.html:89 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." msgstr "crwdns51342:0%(adjudicator)scrwdnd51342:0%(room)scrwdne51342:0" -#: participants/templates/current_round/round_adj.html:95 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "crwdns51686:0%(url)scrwdnd51686:0%(room)scrwdne51686:0" -#: participants/templates/current_round/round_adj.html:99 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." msgstr "crwdns51344:0%(room)scrwdne51344:0" -#: participants/templates/current_round/round_adj.html:107 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "crwdns51688:0%(adjudicator)scrwdnd51688:0%(type)scrwdnd51688:0%(url)scrwdnd51688:0%(room)scrwdne51688:0" -#: participants/templates/current_round/round_adj.html:111 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." msgstr "crwdns51346:0%(adjudicator)scrwdnd51346:0%(type)scrwdnd51346:0%(room)scrwdne51346:0" -#: participants/templates/current_round/round_adj.html:117 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "crwdns51690:0%(type)scrwdnd51690:0%(url)scrwdnd51690:0%(room)scrwdne51690:0" -#: participants/templates/current_round/round_adj.html:121 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." msgstr "crwdns51348:0%(type)scrwdnd51348:0%(room)scrwdne51348:0" -#: participants/templates/current_round/round_adj.html:129 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "crwdns51692:0%(adjudicator)scrwdnd51692:0%(url)scrwdnd51692:0%(room)scrwdne51692:0" -#: participants/templates/current_round/round_adj.html:133 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." msgstr "crwdns51350:0%(adjudicator)scrwdnd51350:0%(room)scrwdne51350:0" -#: participants/templates/current_round/round_adj.html:139 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "crwdns51694:0%(url)scrwdnd51694:0%(room)scrwdne51694:0" -#: participants/templates/current_round/round_adj.html:143 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." msgstr "crwdns51352:0%(room)scrwdne51352:0" -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team against %(opponent)s." msgstr "crwdns51614:0%(team)scrwdnd51614:0%(side)scrwdnd51614:0%(opponent)scrwdne51614:0" -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team against %(opponent)s." msgstr "crwdns51616:0%(side)scrwdnd51616:0%(opponent)scrwdne51616:0" -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating against %(opponent)s." msgstr "crwdns51618:0%(team)scrwdnd51618:0%(opponent)scrwdne51618:0" -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating against %(opponent)s." msgstr "crwdns51620:0%(opponent)scrwdne51620:0" -#: participants/templates/current_round/round_team.html:39 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s is debating as the %(side)s team." msgstr "crwdns51622:0%(team)scrwdnd51622:0%(side)scrwdne51622:0" -#: participants/templates/current_round/round_team.html:43 +#: participants/templates/current_round/round_team.html #, python-format msgid "You are debating as the %(side)s team." msgstr "crwdns51624:0%(side)scrwdne51624:0" -#: participants/templates/current_round/round_team.html:56 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "crwdns51626:0%(team)scrwdnd51626:0%(url)scrwdnd51626:0%(room)scrwdne51626:0" -#: participants/templates/current_round/round_team.html:60 +#: participants/templates/current_round/round_team.html #, python-format msgid "%(team)s's debate is in %(room)s." msgstr "crwdns51628:0%(team)scrwdnd51628:0%(room)scrwdne51628:0" -#: participants/templates/current_round/round_team.html:66 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "crwdns51630:0%(url)scrwdnd51630:0%(room)scrwdne51630:0" -#: participants/templates/current_round/round_team.html:70 +#: participants/templates/current_round/round_team.html #, python-format msgid "Your debate is in %(room)s." msgstr "crwdns51632:0%(room)scrwdne51632:0" -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." msgstr "crwdns32102:0%(categories_url)scrwdne32102:0" -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" msgstr "crwdns32104:0crwdne32104:0" -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" msgstr "crwdns32106:0%(adjudicator)scrwdne32106:0" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" msgstr "crwdns32108:0%(adjudicators)scrwdne32108:0" -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" msgstr "crwdns32110:0%(adjudicator)scrwdne32110:0" -#: participants/templates/feedback_progress_panel.html:38 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" msgstr "crwdns32112:0crwdne32112:0" -#: participants/templates/feedback_progress_panel.html:46 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" msgstr "crwdns32114:0%(adjudicator)scrwdne32114:0" -#: participants/templates/feedback_progress_panel.html:53 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." msgstr "crwdns51370:0%(name)scrwdne51370:0" -#: participants/templates/in_this_round.html:9 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" msgstr "crwdns51372:0%(round)scrwdne51372:0" -#: participants/templates/in_this_round.html:13 +#: participants/templates/in_this_round.html msgid "In This Round" msgstr "crwdns51744:0crwdne51744:0" -#: participants/templates/in_this_round.html:16 +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" msgstr "crwdns32036:0crwdne32036:0" -#: participants/templates/in_this_round.html:23 +#: participants/templates/in_this_round.html msgid "Room TBA" msgstr "crwdns51374:0crwdne51374:0" -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." msgstr "crwdns51376:0%(adjudicator)scrwdne51376:0" -#: participants/templates/in_this_round.html:39 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." msgstr "crwdns34414:0crwdne34414:0" -#: participants/templates/in_this_round.html:54 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." msgstr[0] "crwdns51378:1%(team)scrwdnd51378:1%(ndebates)scrwdne51378:1" msgstr[1] "crwdns51378:5%(team)scrwdnd51378:5%(ndebates)scrwdne51378:5" -#: participants/templates/in_this_round.html:60 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." msgstr "crwdns32136:0crwdne32136:0" -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." msgstr "crwdns51380:0%(team)scrwdne51380:0" -#: participants/templates/in_this_round.html:79 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." msgstr "crwdns34416:0crwdne34416:0" -#: participants/templates/in_this_round.html:91 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." msgstr "crwdns32072:0crwdne32072:0" -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" msgstr "crwdns32118:0crwdne32118:0" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" msgstr "crwdns32120:0crwdne32120:0" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." msgstr "crwdns34418:0crwdne34418:0" -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" msgstr "crwdns34420:0crwdne34420:0" -#: participants/templates/participants_subnav.html:26 participants/views.py:135 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" msgstr "crwdns32122:0crwdne32122:0" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" msgstr "crwdns32124:0crwdne32124:0" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" msgstr "crwdns32126:0crwdne32126:0" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." msgstr "crwdns32128:0crwdne32128:0" -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." msgstr "crwdns32130:0%(edit_db_url)scrwdne32130:0" -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" msgstr "crwdns32132:0crwdne32132:0" -#: participants/templates/team_registration_card.html:16 +#: participants/templates/team_registration_card.html msgid "Team name:" msgstr "crwdns35270:0crwdne35270:0" -#: participants/templates/team_registration_card.html:21 +#: participants/templates/team_registration_card.html msgid "Full team name:" msgstr "crwdns52105:0crwdne52105:0" -#: participants/templates/team_registration_card.html:25 +#: participants/templates/team_registration_card.html msgid "Short team name:" msgstr "crwdns52107:0crwdne52107:0" -#: participants/templates/team_registration_card.html:32 +#: participants/templates/team_registration_card.html msgid "Code name:" msgstr "crwdns32152:0crwdne32152:0" -#: participants/templates/team_registration_card.html:36 +#: participants/templates/team_registration_card.html msgid "No code name assigned" msgstr "crwdns52109:0crwdne52109:0" -#: participants/templates/team_registration_card.html:42 +#: participants/templates/team_registration_card.html msgid "Emoji:" msgstr "crwdns52111:0crwdne52111:0" -#: participants/templates/team_registration_card.html:46 +#: participants/templates/team_registration_card.html msgid "No emoji assigned" msgstr "crwdns52113:0crwdne52113:0" -#: participants/templates/team_registration_card.html:54 +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "crwdns32154:0crwdne32154:0" -#: participants/templates/team_registration_card.html:66 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" msgstr "crwdns32158:0crwdne32158:0" -#: participants/templates/team_registration_card.html:75 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" msgstr "crwdns34424:0crwdne34424:0" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" msgstr "crwdns32160:0%(code_name)scrwdnd32160:0%(real_name)scrwdne32160:0" -#: participants/views.py:46 +#: participants/views.py msgid "Adjudicators" msgstr "crwdns32162:0crwdne32162:0" -#: participants/views.py:55 +#: participants/views.py msgid "Speakers" msgstr "crwdns32164:0crwdne32164:0" -#: participants/views.py:86 +#: participants/views.py msgid "Institutions" msgstr "crwdns32166:0crwdne32166:0" -#: participants/views.py:102 +#: participants/views.py msgid "Code" msgstr "crwdns32168:0crwdne32168:0" -#: participants/views.py:103 +#: participants/views.py msgid "Full name" msgstr "crwdns32170:0crwdne32170:0" -#: participants/views.py:105 +#: participants/views.py msgid "Region" msgstr "crwdns32172:0crwdne32172:0" -#: participants/views.py:107 +#: participants/views.py msgid "Teams" msgstr "crwdns32174:0crwdne32174:0" -#: participants/views.py:107 +#: participants/views.py msgid "Number of teams" msgstr "crwdns32176:0crwdne32176:0" -#: participants/views.py:109 +#: participants/views.py msgid "Adjs" msgstr "crwdns32178:0crwdne32178:0" -#: participants/views.py:110 +#: participants/views.py msgid "Number of adjudicators, excluding independents" msgstr "crwdns32180:0crwdne32180:0" -#: participants/views.py:112 +#: participants/views.py msgid "IAs" msgstr "crwdns32182:0crwdne32182:0" -#: participants/views.py:113 +#: participants/views.py msgid "Number of independent adjudicators" msgstr "crwdns32184:0crwdne32184:0" -#: participants/views.py:143 +#: participants/views.py msgid "Code name" msgstr "crwdns32186:0crwdne32186:0" -#: participants/views.py:163 +#: participants/views.py msgid "Team Registration" msgstr "crwdns34426:0crwdne34426:0" -#: participants/views.py:231 +#: participants/views.py msgid "Results" msgstr "crwdns32190:0crwdne32190:0" -#: participants/views.py:239 participants/views.py:264 +#: participants/views.py #, python-format msgid "Record for %(name)s" msgstr "crwdns32188:0%(name)scrwdne32188:0" -#: participants/views.py:261 +#: participants/views.py msgid "Previous Rounds" msgstr "crwdns32192:0crwdne32192:0" -#: participants/views.py:352 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" msgstr[0] "crwdns51382:1%(list)scrwdne51382:1" msgstr[1] "crwdns51382:5%(list)scrwdne51382:5" -#: participants/views.py:358 +#: participants/views.py msgid "No changes were made to the categories." msgstr "crwdns51384:0crwdne51384:0" -#: participants/views.py:371 +#: participants/views.py msgid "Speaker Category Eligibility" msgstr "crwdns32198:0crwdne32198:0" diff --git a/tabbycat/printing/locale/tzl/LC_MESSAGES/django.po b/tabbycat/printing/locale/tzl/LC_MESSAGES/django.po index bfaa2b4db3f..b58cdd44922 100644 --- a/tabbycat/printing/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 17:59-0400\n" -"PO-Revision-Date: 2020-11-18 22:18\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -18,109 +18,108 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" msgstr "crwdns32210:0crwdne32210:0" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" msgstr "crwdns51386:0%(round)scrwdne51386:0" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." msgstr "crwdns32214:0crwdne32214:0" -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." msgstr "crwdns32216:0crwdne32216:0" -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." msgstr "crwdns32218:0crwdne32218:0" -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." -msgstr "crwdns32220:0%(first_sentence)scrwdne32220:0" +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgstr "crwdns52219:0%(first_sentence)scrwdne52219:0" -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" msgstr "crwdns32222:0crwdne32222:0" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." msgstr "crwdns32252:0crwdne32252:0" -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" msgstr "crwdns32254:0%(sheet)scrwdne32254:0" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." -msgstr "crwdns35272:0crwdne35272:0" +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +msgstr "crwdns52221:0crwdne52221:0" -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" msgstr "crwdns32258:0%(name)scrwdnd32258:0%(group)scrwdne32258:0" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" msgstr "crwdns35274:0crwdne35274:0" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" msgstr "crwdns34436:0crwdne34436:0" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" msgstr "crwdns51388:0%(round)scrwdne51388:0" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" msgstr "crwdns34440:0crwdne34440:0" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" msgstr "crwdns32280:0crwdne32280:0" -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" msgstr "crwdns34442:0crwdne34442:0" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "crwdns34444:0crwdne34444:0" -#: printing/templates/scoresheet_list.html:47 +#: printing/templates/scoresheet_list.html msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." msgstr "crwdns51796:0crwdne51796:0" -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "crwdns34448:0crwdne34448:0" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" msgstr "crwdns34450:0crwdne34450:0" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." msgstr "crwdns34452:0crwdne34452:0" -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" msgstr "crwdns32282:0crwdne32282:0" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" msgstr "crwdns32284:0crwdne32284:0" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "crwdns32286:0crwdne32286:0" diff --git a/tabbycat/privateurls/locale/tzl/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/tzl/LC_MESSAGES/django.po index 0163d2ed540..37788397026 100644 --- a/tabbycat/privateurls/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:55\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:00\n" "Last-Translator: philip_tc\n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -18,169 +18,162 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" msgstr "crwdns32288:0crwdne32288:0" -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:145 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" msgstr "crwdns35276:0crwdne35276:0" -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." msgstr "crwdns32298:0crwdne32298:0" -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" msgstr "crwdns32300:0crwdne32300:0" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." -msgstr "crwdns32302:0crwdne32302:0" +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +msgstr "crwdns52223:0crwdne52223:0" -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." msgstr "crwdns32304:0%(data_entry_options_url)scrwdne32304:0" -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." msgstr "crwdns32306:0crwdne32306:0" -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" msgstr "crwdns32308:0crwdne32308:0" -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" msgstr "crwdns32310:0crwdne32310:0" -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" msgstr "crwdns51390:0crwdne51390:0" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" msgstr "crwdns51392:0crwdne51392:0" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." msgstr "crwdns34456:0crwdne34456:0" -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" msgstr "crwdns32314:0crwdne32314:0" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." msgstr "crwdns32316:0crwdne32316:0" -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" msgstr "crwdns32318:0crwdne32318:0" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." msgstr "crwdns32320:0crwdne32320:0" -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" msgstr "crwdns32322:0crwdne32322:0" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" msgstr "crwdns32324:0%(name)scrwdne32324:0" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "crwdns32326:0%(team)scrwdne32326:0" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "crwdns32328:0%(name)scrwdne32328:0" -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" msgstr "crwdns32330:0%(check_time)scrwdne32330:0" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" msgstr "crwdns32332:0crwdne32332:0" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" msgstr "crwdns51394:0%(check_time)scrwdne51394:0" -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." msgstr "crwdns51396:0crwdne51396:0" -#: privateurls/templates/public_url_landing.html:62 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Submit Ballot for %(round)s" msgstr "crwdns51962:0%(round)scrwdne51962:0" -#: privateurls/templates/public_url_landing.html:65 -msgid "There are no current rounds" -msgstr "crwdns51964:0crwdne51964:0" - -#: privateurls/templates/public_url_landing.html:71 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" msgstr "crwdns32336:0crwdne32336:0" -#: privateurls/templates/public_url_landing.html:84 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" msgstr "crwdns35282:0%(name)scrwdne35282:0" -#: privateurls/views.py:63 privateurls/views.py:164 +#: privateurls/views.py msgid "no URL" msgstr "crwdns32354:0crwdne32354:0" -#: privateurls/views.py:76 +#: privateurls/views.py msgid "URL" msgstr "crwdns32358:0crwdne32358:0" -#: privateurls/views.py:87 +#: privateurls/views.py msgid "Speakers" msgstr "crwdns32356:0crwdne32356:0" -#: privateurls/views.py:97 +#: privateurls/views.py msgid "Adjudicators" msgstr "crwdns32360:0crwdne32360:0" -#: privateurls/views.py:119 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." msgstr "crwdns32362:0crwdne32362:0" -#: privateurls/views.py:126 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." msgstr[0] "crwdns32364:1%(nblank_people)dcrwdne32364:1" msgstr[1] "crwdns32364:5%(nblank_people)dcrwdne32364:5" -#: privateurls/views.py:131 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." msgstr[0] "crwdns32366:1%(nexisting_people)dcrwdne32366:1" msgstr[1] "crwdns32366:5%(nexisting_people)dcrwdne32366:5" -#: privateurls/views.py:172 +#: privateurls/views.py msgid "URL Key" msgstr "crwdns35284:0crwdne35284:0" -#: privateurls/views.py:181 +#: privateurls/views.py msgid "Debates" msgstr "crwdns34466:0crwdne34466:0" diff --git a/tabbycat/results/locale/tzl/LC_MESSAGES/django.po b/tabbycat/results/locale/tzl/LC_MESSAGES/django.po index 09a9a8b3704..50fd7b7e3c0 100644 --- a/tabbycat/results/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:14\n" "Last-Translator: philip_tc\n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -18,1081 +18,1075 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 948\n" -#: results/admin.py:44 +#: results/admin.py +msgid "Resave results" +msgstr "crwdns51968:0crwdne51968:0" + +#: results/admin.py #, python-format msgid "Resaved results for %(count)d ballot submission." msgid_plural "Resaved results for %(count)d ballot submissions." msgstr[0] "crwdns51966:1%(count)dcrwdne51966:1" msgstr[1] "crwdns51966:5%(count)dcrwdne51966:5" -#: results/admin.py:47 -msgid "Resave results" -msgstr "crwdns51968:0crwdne51968:0" - -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:158 +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" msgstr "crwdns32384:0crwdne32384:0" -#: results/forms.py:39 +#: results/forms.py msgid "Tournament password" msgstr "crwdns51746:0crwdne51746:0" -#: results/forms.py:45 +#: results/forms.py msgid "That password isn't correct." msgstr "crwdns32386:0crwdne32386:0" -#: results/forms.py:77 +#: results/forms.py msgid "Please enter a whole number." msgstr "crwdns32388:0crwdne32388:0" -#: results/forms.py:79 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." msgstr "crwdns32390:0%scrwdne32390:0" -#: results/forms.py:166 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." msgstr "crwdns32392:0crwdne32392:0" -#: results/forms.py:173 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." msgstr "crwdns32394:0crwdne32394:0" -#: results/forms.py:302 results/forms.py:336 +#: results/forms.py msgid "---------" msgstr "crwdns32396:0crwdne32396:0" -#: results/forms.py:304 results/forms.py:306 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" msgstr "crwdns32398:0%(aff_team)scrwdnd32398:0%(neg_team)scrwdne32398:0" -#: results/forms.py:323 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" msgstr "crwdns51398:0%(side)scrwdne51398:0" -#: results/forms.py:332 results/forms.py:901 +#: results/forms.py #, python-format msgid "%(team)s (%(side)s)" msgstr "crwdns32424:0%(team)scrwdnd32424:0%(side)scrwdne32424:0" -#: results/forms.py:335 +#: results/forms.py msgid "Winner" msgstr "crwdns51748:0crwdne51748:0" -#: results/forms.py:489 +#: results/forms.py msgid "Mark as a duplicate speech" msgstr "crwdns32402:0crwdne32402:0" -#: results/forms.py:549 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." msgstr "crwdns32406:0%(speaker)scrwdnd32406:0%(team)scrwdne32406:0" -#: results/forms.py:563 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." msgstr[0] "crwdns32408:1%(speaker)scrwdnd32408:1%(count)dcrwdne32408:1" msgstr[1] "crwdns32408:5%(speaker)scrwdnd32408:5%(count)dcrwdne32408:5" -#: results/forms.py:580 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." msgstr "crwdns32410:0crwdne32410:0" -#: results/forms.py:587 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." msgstr "crwdns32412:0crwdne32412:0" -#: results/forms.py:719 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." msgstr "crwdns32414:0crwdne32414:0" -#: results/forms.py:724 +#: results/forms.py msgid "The declared winner does not correspond to the team with the highest score." msgstr "crwdns51750:0crwdne51750:0" -#: results/forms.py:733 +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" msgstr "crwdns32416:0%(teams)scrwdne32416:0" -#: results/forms.py:743 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "crwdns32418:0%(margin)crwdnd32418:0%(max_margin)crwdne32418:0" -#: results/forms.py:846 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." msgstr "crwdns51400:0%(adjudicator)scrwdne51400:0" -#: results/forms.py:851 +#: results/forms.py #, python-format msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." msgstr "crwdns51752:0%(adjudicator)scrwdne51752:0" -#: results/forms.py:859 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "crwdns51402:0%(margin)crwdnd51402:0%(adjudicator)scrwdnd51402:0%(max_margin)crwdne51402:0" -#: results/forms.py:921 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." msgstr "crwdns32426:0crwdne32426:0" -#: results/forms.py:964 +#: results/forms.py #, python-format msgid "There must be exactly %(n)d team advancing." msgid_plural "There must be exactly %(n)d teams advancing." msgstr[0] "crwdns51754:1%(n)dcrwdne51754:1" msgstr[1] "crwdns51754:5%(n)dcrwdne51754:5" -#: results/forms.py:1007 +#: results/forms.py msgid "There must be exactly 1 team advancing." msgstr "crwdns51756:0crwdne51756:0" -#: results/models.py:33 +#: results/models.py msgid "Tab room" msgstr "crwdns32434:0crwdne32434:0" -#: results/models.py:34 +#: results/models.py msgid "Public" msgstr "crwdns32436:0crwdne32436:0" -#: results/models.py:38 +#: results/models.py msgid "timestamp" msgstr "crwdns32438:0crwdne32438:0" -#: results/models.py:40 +#: results/models.py msgid "version" msgstr "crwdns32440:0crwdne32440:0" -#: results/models.py:42 +#: results/models.py msgid "submitter type" msgstr "crwdns32442:0crwdne32442:0" -#: results/models.py:44 +#: results/models.py msgid "confirmed" msgstr "crwdns32444:0crwdne32444:0" -#: results/models.py:48 +#: results/models.py msgid "from private URL" msgstr "crwdns52115:0crwdne52115:0" -#: results/models.py:51 +#: results/models.py msgid "from participant" msgstr "crwdns51758:0crwdne51758:0" -#: results/models.py:56 +#: results/models.py msgid "submitter" msgstr "crwdns32446:0crwdne32446:0" -#: results/models.py:59 +#: results/models.py msgid "confirmer" msgstr "crwdns32448:0crwdne32448:0" -#: results/models.py:61 +#: results/models.py msgid "confirm timestamp" msgstr "crwdns32450:0crwdne32450:0" -#: results/models.py:63 +#: results/models.py msgid "IP address" msgstr "crwdns32452:0crwdne32452:0" -#: results/models.py:103 +#: results/models.py msgid "A tab room ballot must have a user associated." msgstr "crwdns32454:0crwdne32454:0" -#: results/models.py:111 +#: results/models.py msgid "debate" msgstr "crwdns32456:0crwdne32456:0" -#: results/models.py:113 +#: results/models.py msgid "motion" msgstr "crwdns32458:0crwdne32458:0" -#: results/models.py:115 +#: results/models.py msgid "discarded" msgstr "crwdns32460:0crwdne32460:0" -#: results/models.py:117 +#: results/models.py msgid "single adjudicator" msgstr "crwdns52117:0crwdne52117:0" -#: results/models.py:118 +#: results/models.py msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." msgstr "crwdns52119:0crwdne52119:0" -#: results/models.py:123 results/models.py:228 results/models.py:267 -#: results/models.py:305 results/models.py:347 +#: results/models.py msgid "ballot submission" msgstr "crwdns32464:0crwdne32464:0" -#: results/models.py:124 +#: results/models.py msgid "ballot submissions" msgstr "crwdns32466:0crwdne32466:0" -#: results/models.py:143 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" msgstr "crwdns32468:0%(round)dcrwdnd32468:0%(motion)scrwdnd32468:0%(motion_round)dcrwdne32468:0" -#: results/models.py:150 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" msgstr "crwdns32470:0crwdne32470:0" -#: results/models.py:230 results/models.py:269 +#: results/models.py msgid "debate adjudicator" msgstr "crwdns32474:0crwdne32474:0" -#: results/models.py:232 results/models.py:271 results/models.py:307 -#: results/models.py:349 +#: results/models.py msgid "debate team" msgstr "crwdns32476:0crwdne32476:0" -#: results/models.py:235 results/models.py:312 +#: results/models.py msgid "win" msgstr "crwdns32490:0crwdne32490:0" -#: results/models.py:237 results/models.py:314 +#: results/models.py msgid "margin" msgstr "crwdns32492:0crwdne32492:0" -#: results/models.py:239 results/models.py:272 results/models.py:316 -#: results/models.py:352 +#: results/models.py msgid "score" msgstr "crwdns32478:0crwdne32478:0" -#: results/models.py:244 +#: results/models.py msgid "team score by adjudicator" msgstr "crwdns51760:0crwdne51760:0" -#: results/models.py:245 +#: results/models.py msgid "team scores by adjudicator" msgstr "crwdns51762:0crwdne51762:0" -#: results/models.py:260 results/models.py:294 +#: results/models.py msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." msgstr "crwdns32486:0crwdne32486:0" -#: results/models.py:273 results/models.py:353 +#: results/models.py msgid "position" msgstr "crwdns32480:0crwdne32480:0" -#: results/models.py:279 +#: results/models.py msgid "speaker score by adjudicator" msgstr "crwdns32482:0crwdne32482:0" -#: results/models.py:280 +#: results/models.py msgid "speaker scores by adjudicator" msgstr "crwdns32484:0crwdne32484:0" -#: results/models.py:310 +#: results/models.py msgid "points" msgstr "crwdns32488:0crwdne32488:0" -#: results/models.py:318 +#: results/models.py msgid "votes given" msgstr "crwdns32494:0crwdne32494:0" -#: results/models.py:320 +#: results/models.py msgid "votes possible" msgstr "crwdns32496:0crwdne32496:0" -#: results/models.py:324 +#: results/models.py +msgid "has ghost score" +msgstr "crwdns52225:0crwdne52225:0" + +#: results/models.py msgid "team score" msgstr "crwdns32498:0crwdne32498:0" -#: results/models.py:325 +#: results/models.py msgid "team scores" msgstr "crwdns32500:0crwdne32500:0" -#: results/models.py:351 +#: results/models.py msgid "speaker" msgstr "crwdns32502:0crwdne32502:0" -#: results/models.py:355 +#: results/models.py msgid "ghost" msgstr "crwdns32504:0crwdne32504:0" -#: results/models.py:356 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." msgstr "crwdns32506:0crwdne32506:0" -#: results/models.py:365 +#: results/models.py msgid "speaker score" msgstr "crwdns32508:0crwdne32508:0" -#: results/models.py:366 +#: results/models.py msgid "speaker scores" msgstr "crwdns32510:0crwdne32510:0" -#: results/models.py:375 +#: results/models.py msgid "The debate team and speaker must be from the same team." msgstr "crwdns32512:0crwdne32512:0" -#: results/models.py:378 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." msgstr "crwdns32514:0crwdne32514:0" -#: results/tables.py:15 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" msgstr "crwdns34468:0crwdne34468:0" -#: results/tables.py:36 +#: results/tables.py msgid "Status of this debate's ballot" msgstr "crwdns32528:0crwdne32528:0" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" msgstr "crwdns32548:0crwdne32548:0" -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" msgstr "crwdns32550:0crwdne32550:0" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" msgstr "crwdns34470:0crwdne34470:0" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" msgstr "crwdns34472:0crwdne34472:0" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" msgstr "crwdns34474:0%(team)scrwdne34474:0" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the current round" msgstr "crwdns51798:0%(team)scrwdne51798:0" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" msgstr "crwdns34478:0crwdne34478:0" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" msgstr "crwdns34480:0crwdne34480:0" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." msgstr "crwdns34482:0crwdne34482:0" -#: results/templates/admin_results.html:88 +#: results/templates/admin_results.html #, python-format msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." msgstr[0] "crwdns51634:1%(debates_list)scrwdne51634:1" msgstr[1] "crwdns51634:5%(ndebates)scrwdnd51634:5%(debates_list)scrwdne51634:5" -#: results/templates/admin_results.html:94 +#: results/templates/admin_results.html #, python-format msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." msgstr "crwdns51636:0%(editdb_speakerscorebyadj_url)scrwdne51636:0" -#: results/templates/admin_results.html:113 +#: results/templates/admin_results.html msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." msgstr "crwdns52121:0crwdne52121:0" -#: results/templates/admin_results.html:127 +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." msgstr "crwdns32554:0%(debate_rules_url)scrwdne32554:0" -#: results/templates/admin_results.html:135 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." msgstr "crwdns32556:0%(motions_url)scrwdne32556:0" -#: results/templates/admin_results.html:144 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." msgstr "crwdns32558:0%(display_url)scrwdne32558:0" -#: results/templates/admin_results.html:151 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." msgstr "crwdns32560:0%(display_url)scrwdne32560:0" -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:12 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" msgstr "crwdns32562:0crwdne32562:0" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:17 -#: results/templates/ballot_entry_base.html:21 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" msgstr "crwdns32564:0crwdne32564:0" -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." msgstr "crwdns32566:0crwdne32566:0" -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "crwdns52227:0crwdne52227:0" + +#: results/templates/assistant_enter_results.html msgid "Confirm results" msgstr "crwdns32568:0crwdne32568:0" -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" msgstr "crwdns32570:0crwdne32570:0" -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:68 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." msgstr "crwdns32572:0crwdne32572:0" -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 results/views.py:513 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" msgstr "crwdns32574:0crwdne32574:0" -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "crwdns35286:0crwdne35286:0" -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." msgstr "crwdns32576:0crwdne32576:0" -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "crwdns32578:0crwdne32578:0" -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." msgstr[0] "crwdns32580:1crwdne32580:1" msgstr[1] "crwdns32580:5%(ndebates)scrwdne32580:5" -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr[0] "crwdns32582:1crwdne32582:1" msgstr[1] "crwdns32582:5%(num_even_panel)scrwdne32582:5" -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" msgstr "crwdns32604:0crwdne32604:0" -#: results/templates/ballot/ballot_debate_info.html:42 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" msgstr "crwdns35288:0crwdne35288:0" -#: results/templates/ballot/ballot_debate_info.html:45 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" msgstr "crwdns35290:0crwdne35290:0" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" msgstr "crwdns32610:0crwdne32610:0" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "crwdns32612:0crwdne32612:0" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" msgstr "crwdns32614:0crwdne32614:0" -#: results/templates/ballot/ballot_set.html:6 +#: results/templates/ballot/ballot_set.html msgid "There are some problems with this scoresheet. Please review and correct them." msgstr "crwdns32618:0crwdne32618:0" -#: results/templates/ballot/ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s (%(institution)s)" msgstr "crwdns32650:0%(name)scrwdnd32650:0%(institution)scrwdne32650:0" -#: results/templates/ballot/ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format msgid "Ballot from %(name)s" msgstr "crwdns32652:0%(name)scrwdne32652:0" -#: results/templates/ballot/ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html msgid "Scoresheet" msgstr "crwdns32654:0crwdne32654:0" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Solo Chair" msgstr "crwdns32656:0crwdne32656:0" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Chair" msgstr "crwdns32658:0crwdne32658:0" -#: results/templates/ballot/ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html msgid "Panellist" msgstr "crwdns32660:0crwdne32660:0" -#: results/templates/ballot/ballot_set.html:35 +#: results/templates/ballot/ballot_set.html msgid "Trainee" msgstr "crwdns32662:0crwdne32662:0" -#: results/templates/ballot/ballot_set.html:44 +#: results/templates/ballot/ballot_set.html msgid "Assign sides before entering scores" msgstr "crwdns32664:0crwdne32664:0" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." -msgstr "crwdns32616:0crwdne32616:0" +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." +msgstr "crwdns52257:0crwdne52257:0" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "There is %(number)s existing ballot set for this debate." msgid_plural "There are %(number)s existing ballot sets for this debate." msgstr[0] "crwdns32622:1%(number)scrwdne32622:1" msgstr[1] "crwdns32622:5%(number)scrwdne32622:5" -#: results/templates/ballot/other_ballots_list.html:21 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." msgstr "crwdns32626:0crwdne32626:0" -#: results/templates/ballot/other_ballots_list.html:26 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." msgstr "crwdns32628:0crwdne32628:0" -#: results/templates/ballot/other_ballots_list.html:41 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" msgstr "crwdns32630:0crwdne32630:0" -#: results/templates/ballot/other_ballots_list.html:45 +#: results/templates/ballot/other_ballots_list.html msgid "MERGING" msgstr "crwdns52123:0crwdne52123:0" -#: results/templates/ballot/other_ballots_list.html:48 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," msgstr "crwdns32632:0%(version)scrwdne32632:0" -#: results/templates/ballot/other_ballots_list.html:53 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," msgstr "crwdns32634:0%(submitter)scrwdne32634:0" -#: results/templates/ballot/other_ballots_list.html:58 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from %(adjudicator)s's private URL," msgstr "crwdns51764:0%(adjudicator)scrwdne51764:0" -#: results/templates/ballot/other_ballots_list.html:62 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," msgstr "crwdns32636:0%(ip_address)scrwdne32636:0" -#: results/templates/ballot/other_ballots_list.html:68 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," msgstr "crwdns32638:0%(timestamp)scrwdnd32638:0%(timeago)scrwdne32638:0" -#: results/templates/ballot/other_ballots_list.html:73 +#: results/templates/ballot/other_ballots_list.html msgid "unknown" msgstr "crwdns51638:0crwdne51638:0" -#: results/templates/ballot/other_ballots_list.html:74 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "confirmed by %(confirmer)s" msgstr "crwdns32640:0%(confirmer)scrwdne32640:0" -#: results/templates/ballot/other_ballots_list.html:78 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" msgstr "crwdns32644:0crwdne32644:0" -#: results/templates/ballot/other_ballots_list.html:82 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" msgstr "crwdns32646:0crwdne32646:0" -#: results/templates/ballot/other_ballots_list.html:86 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" msgstr[0] "crwdns32648:1%(others)scrwdne32648:1" msgstr[1] "crwdns32648:5%(others)scrwdne32648:5" -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." msgstr "crwdns34490:0%(old_url)scrwdne34490:0" -#: results/templates/ballot_entry_base.html:30 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgstr "crwdns32674:0crwdne32674:0" -#: results/templates/ballot_entry_base.html:41 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." msgstr "crwdns51410:0%(team)scrwdne51410:0" -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" msgstr "crwdns35296:0%(chair)scrwdne35296:0" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" msgstr "crwdns34498:0crwdne34498:0" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" msgstr "crwdns34500:0%(pos)scrwdnd34500:0%(error)scrwdne34500:0" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" msgstr "crwdns34502:0%(pos)scrwdnd34502:0%(error)scrwdne34502:0" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" msgstr "crwdns34504:0%(pos)scrwdnd34504:0%(error)scrwdne34504:0" -#: results/templates/debate_postponement_form.html:3 +#: results/templates/debate_postponement_form.html msgid "Postponed" msgstr "crwdns51766:0crwdne51766:0" -#: results/templates/debate_postponement_form.html:8 +#: results/templates/debate_postponement_form.html msgid "Postpone" msgstr "crwdns51768:0crwdne51768:0" -#: results/templates/enter_results.html:15 +#: results/templates/enter_results.html msgid "Ballot Status" msgstr "crwdns32678:0crwdne32678:0" -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" msgstr "crwdns32680:0crwdne32680:0" -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" msgstr "crwdns32682:0crwdne32682:0" -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" msgstr "crwdns34506:0crwdne34506:0" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" msgstr "crwdns32686:0crwdne32686:0" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" msgstr "crwdns32688:0crwdne32688:0" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." msgstr "crwdns51700:0%(name)scrwdne51700:0" -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." msgstr "crwdns35500:0%(name)scrwdne35500:0" -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" msgstr "crwdns34512:0crwdne34512:0" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." msgstr "crwdns35502:0%(url)scrwdne35502:0" -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" msgstr "crwdns32542:0crwdne32542:0" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" msgstr "crwdns32692:0crwdne32692:0" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" msgstr "crwdns32694:0crwdne32694:0" -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." msgstr "crwdns51414:0%(round)scrwdne51414:0" -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" msgstr "crwdns32698:0%(matchup)scrwdne32698:0" -#: results/templates/public_ballot_set.html:28 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" msgstr "crwdns51416:0%(round)scrwdnd51416:0%(room)scrwdne51416:0" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" msgstr "crwdns34508:0crwdne34508:0" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" msgstr "crwdns51418:0%(round)scrwdne51418:0" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "crwdns32702:0crwdne32702:0" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" msgstr "crwdns32704:0%(name)scrwdnd32704:0%(institution)scrwdne32704:0" -#: results/templates/public_ballot_set.html:92 -#: results/templates/public_ballot_set.html:96 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" msgstr "crwdns34510:0%(name)scrwdnd34510:0%(side)scrwdne34510:0" -#: results/templates/public_ballot_set.html:105 -#: results/templates/public_ballot_set.html:109 +#: results/templates/public_ballot_set.html #, python-format msgid "%(name)s (%(side)s)" msgstr "crwdns51770:0%(name)scrwdnd51770:0%(side)scrwdne51770:0" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Won" msgstr "crwdns51772:0crwdne51772:0" -#: results/templates/public_ballot_set.html:117 +#: results/templates/public_ballot_set.html msgid "Lost" msgstr "crwdns51774:0crwdne51774:0" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set_error.html #, python-format msgid "Back to the tournament home page." msgstr "crwdns34514:0%(url)scrwdne34514:0" -#: results/templates/public_enter_results.html:9 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" msgstr "crwdns51422:0%(adjudicator)scrwdne51422:0" -#: results/templates/public_enter_results.html:16 +#: results/templates/public_enter_results.html msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." msgstr "crwdns52125:0crwdne52125:0" -#: results/templates/public_enter_results.html:24 +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." msgstr[0] "crwdns32712:1crwdne32712:1" msgstr[1] "crwdns32712:5%(nsubmissions)scrwdne32712:5" -#: results/templates/public_enter_results.html:63 -msgid "Submit Ballot(s)" -msgstr "crwdns34516:0crwdne34516:0" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "crwdns52259:1crwdne52259:1" +msgstr[1] "crwdns52259:5crwdne52259:5" -#: results/templates/public_enter_results.html:65 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." msgstr "crwdns32714:0crwdne32714:0" -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" msgstr "crwdns51424:0%(adjudicator)scrwdne51424:0" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" msgstr "crwdns32718:0crwdne32718:0" -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" msgstr "crwdns32722:0crwdne32722:0" -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" msgstr "crwdns32724:0crwdne32724:0" -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" msgstr "crwdns51426:0%(round)scrwdne51426:0" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" msgstr "crwdns34518:0crwdne34518:0" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." msgstr "crwdns51428:0%(round)scrwdne51428:0" -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." msgstr "crwdns51430:0%(round)scrwdne51430:0" -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" msgstr "crwdns32518:0crwdne32518:0" -#: results/utils.py:19 +#: results/utils.py msgid "Debate was Postponed" msgstr "crwdns51776:0crwdne51776:0" -#: results/utils.py:20 +#: results/utils.py msgid "Ballot is Unconfirmed" msgstr "crwdns32520:0crwdne32520:0" -#: results/utils.py:21 +#: results/utils.py msgid "Ballot is Confirmed" msgstr "crwdns32522:0crwdne32522:0" #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:36 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" msgstr "crwdns51432:0%(team)scrwdnd51432:0%(side)scrwdne51432:0" -#: results/utils.py:43 +#: results/utils.py #, python-format msgid "%(team)s (%(side)s) won" msgstr "crwdns51778:0%(team)scrwdnd51778:0%(side)scrwdne51778:0" #. Translators: The team here is the losing team -#: results/utils.py:45 +#: results/utils.py #, python-format msgid "vs %(team)s (%(side)s)" msgstr "crwdns51780:0%(team)scrwdnd51780:0%(side)scrwdne51780:0" -#: results/utils.py:47 +#: results/utils.py #, python-format msgid "Advancing: %(advancing_list)s
    " msgstr "crwdns51800:0%(advancing_list)scrwdne51800:0" -#: results/utils.py:50 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" msgstr "crwdns32738:0%(eliminated_list)scrwdne32738:0" -#: results/utils.py:58 +#: results/utils.py #, python-format msgid "1st: %(first_team)s
    " msgstr "crwdns51802:0%(first_team)scrwdne51802:0" -#: results/utils.py:59 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" "4th: %(fourth_team)s" msgstr "crwdns32742:0%(second_team)scrwdnd32742:0%(third_team)scrwdnd32742:0%(fourth_team)scrwdne32742:0" -#: results/utils.py:74 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" msgstr "crwdns32744:0%(debate)scrwdne32744:0" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:134 +#: results/utils.py msgid "PM" msgstr "crwdns32762:0crwdne32762:0" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:136 +#: results/utils.py msgid "DPM" msgstr "crwdns32764:0crwdne32764:0" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:138 +#: results/utils.py msgid "LO" msgstr "crwdns32766:0crwdne32766:0" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:140 +#: results/utils.py msgid "DLO" msgstr "crwdns32768:0crwdne32768:0" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:142 +#: results/utils.py msgid "MG" msgstr "crwdns32770:0crwdne32770:0" #. Translators: Abbreviation for Government Whip -#: results/utils.py:144 +#: results/utils.py msgid "GW" msgstr "crwdns32772:0crwdne32772:0" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:146 +#: results/utils.py msgid "MO" msgstr "crwdns32774:0crwdne32774:0" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:148 +#: results/utils.py msgid "OW" msgstr "crwdns32776:0crwdne32776:0" -#: results/utils.py:168 +#: results/utils.py msgid "Reply" msgstr "crwdns32778:0crwdne32778:0" -#: results/views.py:270 results/views.py:272 +#: results/views.py msgid " vs " msgstr "crwdns32786:0crwdne32786:0" -#: results/views.py:273 +#: results/views.py #, python-format msgid "%(matchup)s: %(round)s @ %(room)s" msgstr "crwdns52127:0%(matchup)scrwdnd52127:0%(round)scrwdnd52127:0%(room)scrwdne52127:0" -#: results/views.py:275 +#: results/views.py msgid "N/A" msgstr "crwdns51640:0crwdne51640:0" -#: results/views.py:408 +#: results/views.py msgid "New Ballot Set" msgstr "crwdns52129:0crwdne52129:0" -#: results/views.py:411 +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." msgstr "crwdns32788:0%(debate)scrwdne32788:0" -#: results/views.py:413 results/views.py:480 +#: results/views.py msgid " Email receipts queued to be sent." msgstr "crwdns34524:0crwdne34524:0" -#: results/views.py:427 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." msgstr "crwdns32792:0%(debate)scrwdne32792:0" -#: results/views.py:433 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." msgstr "crwdns32794:0%(debate)scrwdne32794:0" -#: results/views.py:459 +#: results/views.py msgid "Edit Ballot Set" msgstr "crwdns52131:0crwdne52131:0" -#: results/views.py:473 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." msgstr "crwdns32796:0%(matchup)scrwdne32796:0" -#: results/views.py:475 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." msgstr "crwdns32798:0%(matchup)scrwdne32798:0" -#: results/views.py:477 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." msgstr "crwdns32800:0%(matchup)scrwdne32800:0" -#: results/views.py:528 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." msgstr "crwdns32802:0%(user)scrwdnd32802:0%(debate)scrwdne32802:0" -#: results/views.py:535 +#: results/views.py msgid "The draw for this round hasn't been released yet." msgstr "crwdns32804:0crwdne32804:0" -#: results/views.py:539 +#: results/views.py msgid "The motions for this round haven't been released yet." msgstr "crwdns32806:0crwdne32806:0" -#: results/views.py:544 +#: results/views.py msgid "It looks like you don't have a debate this round." msgstr "crwdns32808:0crwdne32808:0" -#: results/views.py:546 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." msgstr "crwdns32810:0crwdne32810:0" -#: results/views.py:573 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." msgstr "crwdns32812:0crwdne32812:0" -#: results/views.py:578 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." msgstr "crwdns32814:0crwdne32814:0" -#: results/views.py:689 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." msgstr "crwdns35504:0crwdne35504:0" -#: results/views.py:707 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." msgstr "crwdns34526:0%scrwdne34526:0" -#: results/views.py:710 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." msgstr "crwdns34528:0%scrwdne34528:0" -#: results/views.py:714 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." msgstr "crwdns34530:0%scrwdne34530:0" -#: results/views.py:717 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." msgstr "crwdns34532:0%scrwdne34532:0" -#: results/views.py:739 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." msgstr "crwdns34534:0%scrwdne34534:0" -#: results/views.py:805 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" msgstr "crwdns32816:0%(adjudicator)scrwdne32816:0" -#: results/views.py:809 +#: results/views.py msgid "Adjudicator" msgstr "crwdns32818:0crwdne32818:0" -#: results/views.py:846 +#: results/views.py msgid "Merge Ballots" msgstr "crwdns52133:0crwdne52133:0" -#: results/views.py:877 +#: results/views.py msgid "The speaking order in the ballots is inconsistent, so could not be merged." msgstr "crwdns52135:0crwdne52135:0" -#: results/views.py:879 +#: results/views.py msgid "Duplicate speeches are marked inconsistently, so could not be merged." msgstr "crwdns52137:0crwdne52137:0" -#: results/views.py:880 +#: results/views.py #, python-format msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." msgstr "crwdns52139:0%(ballot_url)scrwdnd52139:0%(adjudicator)scrwdnd52139:0%(speaker)scrwdnd52139:0%(team)scrwdne52139:0" diff --git a/tabbycat/standings/locale/tzl/LC_MESSAGES/django.po b/tabbycat/standings/locale/tzl/LC_MESSAGES/django.po index e52e91024bc..3d9125177ea 100644 --- a/tabbycat/standings/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-29 23:49-0400\n" -"PO-Revision-Date: 2020-12-30 04:12\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:01\n" "Last-Translator: philip_tc\n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -18,604 +18,595 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 950\n" -#: standings/base.py:297 +#: standings/base.py msgid "The same metric would be added twice:" msgstr "crwdns32820:0crwdne32820:0" -#: standings/base.py:298 +#: standings/base.py msgid "The same ranking would be added twice:" msgstr "crwdns32822:0crwdne32822:0" -#: standings/base.py:414 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" msgstr "crwdns32824:0%(code)scrwdne32824:0" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" msgstr "crwdns32826:0crwdne32826:0" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" msgstr "crwdns32828:0crwdne32828:0" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" msgstr "crwdns32830:0%(category)scrwdne32830:0" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" msgstr "crwdns32832:0crwdne32832:0" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" msgstr "crwdns51434:0crwdne51434:0" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "crwdns32836:0crwdne32836:0" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" msgstr "crwdns32838:0crwdne32838:0" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" msgstr "crwdns32840:0crwdne32840:0" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" msgstr "crwdns32842:0crwdne32842:0" -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" msgstr "crwdns32844:0crwdne32844:0" -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" msgstr "crwdns32846:0crwdne32846:0" -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" msgstr "crwdns32848:0crwdne32848:0" -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" msgstr "crwdns32850:0crwdne32850:0" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" msgstr "crwdns32852:0crwdne32852:0" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" msgstr "crwdns32854:0crwdne32854:0" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" msgstr "crwdns32856:0crwdne32856:0" -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" msgstr "crwdns32858:0crwdne32858:0" -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" msgstr "crwdns32860:0crwdne32860:0" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" msgstr "crwdns32862:0crwdne32862:0" -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" msgstr "crwdns32864:0crwdne32864:0" -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" msgstr "crwdns32866:0crwdne32866:0" -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" msgstr "crwdns32868:0%(num)dcrwdne32868:0" -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" msgstr "crwdns32870:0crwdne32870:0" -#: standings/speakers.py:50 standings/speakers.py:106 +#: standings/speakers.py msgid "total" msgstr "crwdns32872:0crwdne32872:0" -#: standings/speakers.py:51 standings/speakers.py:107 +#: standings/speakers.py msgid "Total" msgstr "crwdns32874:0crwdne32874:0" -#: standings/speakers.py:58 standings/speakers.py:116 +#: standings/speakers.py msgid "average" msgstr "crwdns32876:0crwdne32876:0" -#: standings/speakers.py:59 standings/speakers.py:117 +#: standings/speakers.py msgid "Avg" msgstr "crwdns32878:0crwdne32878:0" -#: standings/speakers.py:66 +#: standings/speakers.py msgid "team points" msgstr "crwdns34536:0crwdne34536:0" -#: standings/speakers.py:67 +#: standings/speakers.py msgid "Team" msgstr "crwdns34538:0crwdne34538:0" -#: standings/speakers.py:89 standings/speakers.py:126 +#: standings/speakers.py msgid "standard deviation" msgstr "crwdns32884:0crwdne32884:0" -#: standings/speakers.py:90 standings/speakers.py:127 +#: standings/speakers.py msgid "Stdev" msgstr "crwdns32886:0crwdne32886:0" -#: standings/speakers.py:98 +#: standings/speakers.py msgid "number of speeches given" msgstr "crwdns32888:0crwdne32888:0" -#: standings/speakers.py:99 standings/speakers.py:138 +#: standings/speakers.py msgid "Num" msgstr "crwdns32890:0crwdne32890:0" -#: standings/speakers.py:137 +#: standings/speakers.py msgid "replies given" msgstr "crwdns32892:0crwdne32892:0" -#: standings/speakers.py:147 +#: standings/speakers.py msgid "trimmed mean (high-low drop)" msgstr "crwdns32880:0crwdne32880:0" -#: standings/speakers.py:148 +#: standings/speakers.py msgid "Trim" msgstr "crwdns32882:0crwdne32882:0" -#: standings/teams.py:62 +#: standings/teams.py msgid "points" msgstr "crwdns32894:0crwdne32894:0" -#: standings/teams.py:63 +#: standings/teams.py msgid "Pts" msgstr "crwdns32896:0crwdne32896:0" -#: standings/teams.py:76 +#: standings/teams.py msgid "wins" msgstr "crwdns32900:0crwdne32900:0" -#: standings/teams.py:77 standings/views.py:592 +#: standings/teams.py standings/views.py msgid "Wins" msgstr "crwdns32902:0crwdne32902:0" -#: standings/teams.py:87 +#: standings/teams.py msgid "total speaker score" msgstr "crwdns32904:0crwdne32904:0" -#: standings/teams.py:88 +#: standings/teams.py msgid "Spk" msgstr "crwdns32906:0crwdne32906:0" -#: standings/teams.py:97 +#: standings/teams.py msgid "average total speaker score" msgstr "crwdns32908:0crwdne32908:0" -#: standings/teams.py:98 +#: standings/teams.py msgid "ATSS" msgstr "crwdns32910:0crwdne32910:0" -#: standings/teams.py:107 +#: standings/teams.py msgid "speaker score standard deviation" msgstr "crwdns32912:0crwdne32912:0" -#: standings/teams.py:108 +#: standings/teams.py msgid "SSD" msgstr "crwdns32914:0crwdne32914:0" -#: standings/teams.py:118 +#: standings/teams.py msgid "sum of margins" msgstr "crwdns32916:0crwdne32916:0" -#: standings/teams.py:119 +#: standings/teams.py msgid "Marg" msgstr "crwdns32918:0crwdne32918:0" -#: standings/teams.py:128 +#: standings/teams.py msgid "average margin" msgstr "crwdns32920:0crwdne32920:0" -#: standings/teams.py:129 +#: standings/teams.py msgid "AWM" msgstr "crwdns32922:0crwdne32922:0" -#: standings/teams.py:138 +#: standings/teams.py msgid "average individual speaker score" msgstr "crwdns32924:0crwdne32924:0" -#: standings/teams.py:139 +#: standings/teams.py msgid "AISS" msgstr "crwdns32926:0crwdne32926:0" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by wins" msgstr "crwdns35302:0crwdne35302:0" -#: standings/teams.py:212 +#: standings/teams.py msgid "DS" msgstr "crwdns32930:0crwdne32930:0" -#: standings/teams.py:219 +#: standings/teams.py msgid "draw strength by total speaker score" msgstr "crwdns35304:0crwdne35304:0" -#: standings/teams.py:220 +#: standings/teams.py msgid "DSS" msgstr "crwdns35306:0crwdne35306:0" -#: standings/teams.py:231 +#: standings/teams.py msgid "number of pullups before this round" msgstr "crwdns35308:0crwdne35308:0" -#: standings/teams.py:232 +#: standings/teams.py msgid "PU" msgstr "crwdns35310:0crwdne35310:0" -#: standings/teams.py:254 +#: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "crwdns32932:0crwdne32932:0" -#: standings/teams.py:255 +#: standings/teams.py msgid "Ballots" msgstr "crwdns32934:0crwdne32934:0" -#: standings/teams.py:256 +#: standings/teams.py msgid "votes/ballots carried" msgstr "crwdns32936:0crwdne32936:0" -#: standings/teams.py:280 +#: standings/teams.py msgid "number of firsts" msgstr "crwdns32938:0crwdne32938:0" -#: standings/teams.py:281 +#: standings/teams.py msgid "1sts" msgstr "crwdns32940:0crwdne32940:0" -#: standings/teams.py:290 +#: standings/teams.py msgid "number of seconds" msgstr "crwdns32942:0crwdne32942:0" -#: standings/teams.py:291 +#: standings/teams.py msgid "2nds" msgstr "crwdns32944:0crwdne32944:0" -#: standings/teams.py:300 +#: standings/teams.py msgid "number of thirds" msgstr "crwdns51782:0crwdne51782:0" -#: standings/teams.py:301 +#: standings/teams.py msgid "3rds" msgstr "crwdns51784:0crwdne51784:0" -#: standings/teams.py:313 +#: standings/teams.py +msgid "number of times ironed" +msgstr "crwdns52229:0crwdne52229:0" + +#: standings/teams.py +msgid "Irons" +msgstr "crwdns52231:0crwdne52231:0" + +#: standings/teams.py msgid "Who-beat-whom" msgstr "crwdns32946:0crwdne32946:0" -#: standings/teams.py:314 +#: standings/teams.py msgid "WBW" msgstr "crwdns32948:0crwdne32948:0" -#: standings/teams.py:315 +#: standings/teams.py msgid "who-beat-whom" msgstr "crwdns32950:0crwdne32950:0" -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." msgstr "crwdns32958:0crwdne32958:0" -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "crwdns32960:0%(silent_round_sentence)scrwdne32960:0" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" msgstr "crwdns32962:0%(silent_round_sentence)scrwdne32962:0" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." msgstr "crwdns32964:0crwdne32964:0" -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." msgstr "crwdns32966:0crwdne32966:0" -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." msgstr "crwdns32968:0%(count)scrwdne32968:0" -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." msgstr "crwdns32970:0crwdne32970:0" -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." msgstr "crwdns32972:0%(standings_config_url)scrwdne32972:0" -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." msgstr "crwdns35312:0%(standings_config_url)scrwdne35312:0" -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." msgstr "crwdns32974:0crwdne32974:0" -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." msgstr "crwdns32976:0crwdne32976:0" -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." msgstr "crwdns32978:0%(count)scrwdne32978:0" -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." msgstr "crwdns32980:0crwdne32980:0" -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." msgstr "crwdns32982:0%(standings_config_url)scrwdne32982:0" -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" msgstr "crwdns32984:0crwdne32984:0" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." msgstr "crwdns35314:0crwdne35314:0" -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" msgstr "crwdns32988:0crwdne32988:0" -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" msgstr "crwdns34542:0crwdne34542:0" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" msgstr "crwdns32992:0crwdne32992:0" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" msgstr "crwdns32994:0crwdne32994:0" -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" msgstr "crwdns32996:0crwdne32996:0" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" msgstr "crwdns32998:0%(speaker)scrwdnd32998:0%(round)scrwdne32998:0" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:152 -#: standings/templates/standings_index.html:167 -#: standings/templates/standings_index.html:186 +#: standings/templates/standings_index.html msgid "No data yet" msgstr "crwdns33000:0crwdne33000:0" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" msgstr "crwdns33002:0crwdne33002:0" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" msgstr "crwdns33004:0crwdne33004:0" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" msgstr "crwdns34544:0%(team)scrwdnd34544:0%(opp)scrwdnd34544:0%(round)scrwdne34544:0" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" msgstr "crwdns33008:0crwdne33008:0" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" msgstr "crwdns33010:0crwdne33010:0" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" msgstr "crwdns33012:0%(team)scrwdnd33012:0%(round)scrwdne33012:0" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" msgstr "crwdns33014:0crwdne33014:0" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" msgstr "crwdns33016:0crwdne33016:0" -#: standings/templates/standings_index.html:177 +#: standings/templates/standings_index.html msgid "Average Speaks" msgstr "crwdns33020:0crwdne33020:0" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" msgstr "crwdns33022:0crwdne33022:0" -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "crwdns33026:0crwdne33026:0" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" msgstr "crwdns33028:0crwdne33028:0" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" msgstr "crwdns33030:0crwdne33030:0" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" msgstr "crwdns33032:0crwdne33032:0" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" msgstr "crwdns33034:0crwdne33034:0" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "crwdns33036:0crwdne33036:0" -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "crwdns51436:0%(category)scrwdne51436:0" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" msgstr "crwdns33040:0crwdne33040:0" -#: standings/templates/standings_menu.html:63 -#: standings/templates/standings_menu.html:76 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "crwdns33042:0crwdne33042:0" -#: standings/templates/standings_menu.html:66 +#: standings/templates/standings_menu.html msgid "By Round" msgstr "crwdns51854:0crwdne51854:0" -#: standings/templates/standings_menu.html:81 +#: standings/templates/standings_menu.html msgid "Diversity" msgstr "crwdns33044:0crwdne33044:0" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." msgstr "crwdns35316:0%(standings_config_url)scrwdne35316:0" -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " msgstr "crwdns33046:0%(message)scrwdne33046:0" -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " msgstr "crwdns33048:0%(standings_options_url)scrwdne33048:0" -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " msgstr "crwdns33050:0crwdne33050:0" -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" msgstr "crwdns33052:0%(round)scrwdne33052:0" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" msgstr "crwdns33054:0%(title)scrwdnd33054:0%(limit)dcrwdne33054:0" -#: standings/views.py:208 standings/views.py:428 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." msgstr "crwdns33056:0crwdne33056:0" -#: standings/views.py:290 +#: standings/views.py msgid "Speaker Standings" msgstr "crwdns33058:0crwdne33058:0" -#: standings/views.py:326 +#: standings/views.py msgid "Speaker Tab" msgstr "crwdns33060:0crwdne33060:0" -#: standings/views.py:341 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" msgstr "crwdns33062:0%(category)scrwdne33062:0" -#: standings/views.py:359 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" msgstr "crwdns33064:0%(category)scrwdne33064:0" -#: standings/views.py:372 +#: standings/views.py msgid "Reply Speaker Standings" msgstr "crwdns33066:0crwdne33066:0" -#: standings/views.py:380 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." msgstr "crwdns33068:0crwdne33068:0" -#: standings/views.py:408 +#: standings/views.py msgid "Reply Speaker Tab" msgstr "crwdns33070:0crwdne33070:0" -#: standings/views.py:420 standings/views.py:669 +#: standings/views.py msgid "Team Standings" msgstr "crwdns33072:0crwdne33072:0" -#: standings/views.py:499 +#: standings/views.py msgid "Team Tab" msgstr "crwdns33076:0crwdne33076:0" -#: standings/views.py:518 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" msgstr "crwdns33078:0%(category)scrwdne33078:0" -#: standings/views.py:545 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" msgstr "crwdns33080:0%(category)scrwdne33080:0" -#: standings/views.py:556 +#: standings/views.py msgid "Current Team Standings" msgstr "crwdns33082:0crwdne33082:0" -#: standings/views.py:592 +#: standings/views.py msgid "Points" msgstr "crwdns33084:0crwdne33084:0" -#: standings/views.py:638 +#: standings/views.py msgid "Feedback Overview" msgstr "crwdns51642:0crwdne51642:0" -#: standings/views.py:655 -msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." -msgstr "crwdns51644:0crwdne51644:0" +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +msgstr "crwdns52233:0crwdne52233:0" diff --git a/tabbycat/tournaments/locale/tzl/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/tzl/LC_MESSAGES/django.po index a21d75ea513..0d155bb4d6e 100644 --- a/tabbycat/tournaments/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-28 21:53-0400\n" -"PO-Revision-Date: 2021-11-29 02:17\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -18,1026 +18,1016 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "crwdns33086:0crwdne33086:0" -#: tournaments/forms.py:29 +#: tournaments/forms.py msgid "Number of preliminary rounds" msgstr "crwdns33088:0crwdne33088:0" -#: tournaments/forms.py:34 +#: tournaments/forms.py msgid "Number of teams in the open break" msgstr "crwdns33090:0crwdne33090:0" -#: tournaments/forms.py:35 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." msgstr "crwdns33092:0crwdne33092:0" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Did you agree with their decision?" msgstr "crwdns33094:0crwdne33094:0" -#: tournaments/forms.py:41 +#: tournaments/forms.py msgid "Agree?" msgstr "crwdns33096:0crwdne33096:0" -#: tournaments/forms.py:47 +#: tournaments/forms.py msgid "Comments" msgstr "crwdns33098:0crwdne33098:0" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:61 +#: tournaments/forms.py msgid "Open" msgstr "crwdns33100:0crwdne33100:0" -#: tournaments/forms.py:86 +#: tournaments/forms.py msgid "Format Configuration" msgstr "crwdns33102:0crwdne33102:0" -#: tournaments/forms.py:87 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" msgstr "crwdns33104:0crwdne33104:0" -#: tournaments/forms.py:91 +#: tournaments/forms.py msgid "Public Configuration" msgstr "crwdns33106:0crwdne33106:0" -#: tournaments/forms.py:92 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" msgstr "crwdns33108:0crwdne33108:0" -#: tournaments/forms.py:99 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" -msgstr "crwdns33110:0crwdne33110:0" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +msgstr "crwdns52235:0crwdne52235:0" -#: tournaments/forms.py:195 +#: tournaments/forms.py msgid "Current preliminary round" msgstr "crwdns34546:0crwdne34546:0" -#: tournaments/forms.py:196 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" msgstr "crwdns34548:0crwdne34548:0" -#: tournaments/forms.py:208 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" msgstr "crwdns34550:0%(category)scrwdne34550:0" -#: tournaments/forms.py:214 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" msgstr "crwdns34552:0%(category)scrwdne34552:0" -#: tournaments/forms.py:226 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." msgstr "crwdns34554:0crwdne34554:0" -#: tournaments/forms.py:232 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." msgstr "crwdns34556:0crwdne34556:0" -#: tournaments/forms.py:267 +#: tournaments/forms.py #, python-format msgid "%(name)s (%(abbreviation)s)" msgstr "crwdns52141:0%(name)scrwdnd52141:0%(abbreviation)scrwdne52141:0" -#: tournaments/mixins.py:109 +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." msgstr "crwdns51438:0%(tournament)scrwdne51438:0" -#: tournaments/mixins.py:117 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." msgstr "crwdns51440:0%(tournament)scrwdne51440:0" -#: tournaments/mixins.py:130 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." msgstr "crwdns33114:0crwdne33114:0" -#: tournaments/mixins.py:137 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." msgstr "crwdns33116:0crwdne33116:0" -#: tournaments/mixins.py:236 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" msgstr "crwdns33118:0%(round)scrwdne33118:0" -#: tournaments/mixins.py:437 +#: tournaments/mixins.py msgid "Return to Draw" msgstr "crwdns35320:0crwdne35320:0" -#: tournaments/models.py:26 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." msgstr "crwdns33120:0crwdne33120:0" -#: tournaments/models.py:33 tournaments/models.py:320 +#: tournaments/models.py msgid "name" msgstr "crwdns33122:0crwdne33122:0" -#: tournaments/models.py:34 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" msgstr "crwdns33124:0crwdne33124:0" -#: tournaments/models.py:36 +#: tournaments/models.py msgid "short name" msgstr "crwdns33126:0crwdne33126:0" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" msgstr "crwdns33128:0crwdne33128:0" -#: tournaments/models.py:39 tournaments/models.py:314 +#: tournaments/models.py msgid "sequence number" msgstr "crwdns33130:0crwdne33130:0" -#: tournaments/models.py:40 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." msgstr "crwdns33132:0crwdne33132:0" -#: tournaments/models.py:42 +#: tournaments/models.py msgid "slug" msgstr "crwdns33134:0crwdne33134:0" -#: tournaments/models.py:43 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" msgstr "crwdns33136:0crwdne33136:0" -#: tournaments/models.py:44 +#: tournaments/models.py msgid "active" msgstr "crwdns33142:0crwdne33142:0" -#: tournaments/models.py:47 tournaments/models.py:313 +#: tournaments/models.py msgid "tournament" msgstr "crwdns33144:0crwdne33144:0" -#: tournaments/models.py:48 +#: tournaments/models.py msgid "tournaments" msgstr "crwdns33146:0crwdne33146:0" -#: tournaments/models.py:285 +#: tournaments/models.py msgid "Random" msgstr "crwdns33148:0crwdne33148:0" -#: tournaments/models.py:286 +#: tournaments/models.py msgid "Manual" msgstr "crwdns33150:0crwdne33150:0" -#: tournaments/models.py:287 +#: tournaments/models.py msgid "Round-robin" msgstr "crwdns33152:0crwdne33152:0" -#: tournaments/models.py:288 +#: tournaments/models.py msgid "Power-paired" msgstr "crwdns33154:0crwdne33154:0" -#: tournaments/models.py:289 tournaments/models.py:296 +#: tournaments/models.py msgid "Elimination" msgstr "crwdns33156:0crwdne33156:0" -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Preliminary" msgstr "crwdns33158:0crwdne33158:0" -#: tournaments/models.py:305 +#: tournaments/models.py msgid "None" msgstr "crwdns33160:0crwdne33160:0" -#: tournaments/models.py:306 +#: tournaments/models.py msgid "Draft" msgstr "crwdns33162:0crwdne33162:0" -#: tournaments/models.py:307 +#: tournaments/models.py msgid "Confirmed" msgstr "crwdns33164:0crwdne33164:0" -#: tournaments/models.py:308 +#: tournaments/models.py msgid "Released" msgstr "crwdns33166:0crwdne33166:0" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" msgstr "crwdns33168:0crwdne33168:0" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "completed" msgstr "crwdns34564:0crwdne34564:0" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" msgstr "crwdns34566:0crwdne34566:0" -#: tournaments/models.py:320 +#: tournaments/models.py msgid "e.g. \"Round 1\"" msgstr "crwdns33170:0crwdne33170:0" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "abbreviation" msgstr "crwdns33172:0crwdne33172:0" -#: tournaments/models.py:321 +#: tournaments/models.py msgid "e.g. \"R1\"" msgstr "crwdns33174:0crwdne33174:0" -#: tournaments/models.py:323 +#: tournaments/models.py msgid "stage" msgstr "crwdns33176:0crwdne33176:0" -#: tournaments/models.py:324 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" msgstr "crwdns33178:0crwdne33178:0" -#: tournaments/models.py:326 +#: tournaments/models.py msgid "draw type" msgstr "crwdns33180:0crwdne33180:0" -#: tournaments/models.py:327 +#: tournaments/models.py msgid "Which draw method to use" msgstr "crwdns33182:0crwdne33182:0" -#: tournaments/models.py:330 +#: tournaments/models.py msgid "break category" msgstr "crwdns33184:0crwdne33184:0" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "If elimination round, which break category" msgstr "crwdns33186:0crwdne33186:0" -#: tournaments/models.py:334 +#: tournaments/models.py msgid "draw status" msgstr "crwdns33188:0crwdne33188:0" -#: tournaments/models.py:335 +#: tournaments/models.py msgid "The status of this round's draw" msgstr "crwdns33190:0crwdne33190:0" -#: tournaments/models.py:338 +#: tournaments/models.py msgid "feedback weight" msgstr "crwdns33192:0crwdne33192:0" -#: tournaments/models.py:340 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." msgstr "crwdns35630:0crwdne35630:0" #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:343 +#: tournaments/models.py msgid "silent" msgstr "crwdns33196:0crwdne33196:0" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." msgstr "crwdns33198:0crwdne33198:0" -#: tournaments/models.py:346 +#: tournaments/models.py msgid "motions released" msgstr "crwdns33200:0crwdne33200:0" -#: tournaments/models.py:347 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" msgstr "crwdns33202:0crwdne33202:0" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "starts at" msgstr "crwdns33204:0crwdne33204:0" -#: tournaments/models.py:351 +#: tournaments/models.py msgid "weight" msgstr "crwdns51786:0crwdne51786:0" -#: tournaments/models.py:352 +#: tournaments/models.py msgid "A factor for the points received in the round. For example, if 2, all points are doubled." msgstr "crwdns51788:0crwdne51788:0" -#: tournaments/models.py:355 +#: tournaments/models.py msgid "round" msgstr "crwdns33206:0crwdne33206:0" -#: tournaments/models.py:356 +#: tournaments/models.py msgid "rounds" msgstr "crwdns33208:0crwdne33208:0" -#: tournaments/models.py:369 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." msgstr "crwdns33210:0crwdne33210:0" -#: tournaments/models.py:372 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." msgstr "crwdns33212:0crwdne33212:0" -#: tournaments/models.py:377 +#: tournaments/models.py msgid "Elimination rounds must have a break category." msgstr "crwdns33214:0crwdne33214:0" -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" msgstr "crwdns33220:0crwdne33220:0" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" msgstr "crwdns33222:0crwdne33222:0" -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" msgstr "crwdns51442:0%(round)scrwdnd51442:0%(status)scrwdne51442:0" -#: tournaments/templates/blank_site_start.html:7 -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" msgstr "crwdns33228:0crwdne33228:0" -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." msgstr "crwdns33230:0crwdne33230:0" -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." msgstr "crwdns33232:0crwdne33232:0" -#: tournaments/templates/blank_site_start.html:32 +#: tournaments/templates/blank_site_start.html msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." msgstr "crwdns51646:0crwdne51646:0" -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" msgstr "crwdns33236:0crwdne33236:0" -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" msgstr "crwdns51444:0%(tournament)scrwdne51444:0" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "crwdns33240:0crwdne33240:0" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." msgstr "crwdns33242:0crwdne33242:0" -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" msgstr "crwdns33244:0crwdne33244:0" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" msgstr "crwdns33246:0crwdne33246:0" -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." -msgstr "crwdns33248:0%(donations_url)scrwdne33248:0" +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgstr "crwdns52237:0%(donations_url)scrwdne52237:0" -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" msgstr "crwdns33250:0crwdne33250:0" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." msgstr "crwdns51446:0crwdne51446:0" -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" msgstr "crwdns51448:0%(demo)scrwdne51448:0" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." msgstr "crwdns35532:0crwdne35532:0" -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" msgstr "crwdns33258:0crwdne33258:0" -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" msgstr "crwdns33260:0crwdne33260:0" -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" msgstr "crwdns33274:0crwdne33274:0" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." msgstr "crwdns33276:0crwdne33276:0" -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" msgstr "crwdns33278:0crwdne33278:0" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." msgstr "crwdns33280:0crwdne33280:0" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." msgstr "crwdns33282:0crwdne33282:0" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." msgstr "crwdns33284:0crwdne33284:0" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." msgstr "crwdns33286:0crwdne33286:0" -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." msgstr "crwdns33288:0crwdne33288:0" -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." msgstr "crwdns33290:0%(edit_debates_url)scrwdne33290:0" -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" msgstr "crwdns33292:0crwdne33292:0" -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" -msgstr "crwdns51450:0%(side)scrwdne51450:0" +msgid "Teams on %(side)s" +msgstr "crwdns52261:0%(side)scrwdne52261:0" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" msgstr "crwdns33296:0crwdne33296:0" -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" msgstr "crwdns33298:0crwdne33298:0" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" msgstr "crwdns33300:0crwdne33300:0" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" msgstr "crwdns33302:0crwdne33302:0" -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" msgstr "crwdns33304:0crwdne33304:0" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." msgstr "crwdns33306:0crwdne33306:0" -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" msgstr "crwdns51452:0%(tournament)scrwdne51452:0" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." msgstr "crwdns33310:0crwdne33310:0" -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" msgstr "crwdns33312:0crwdne33312:0" -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" msgstr "crwdns51454:0%(category)scrwdne51454:0" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" msgstr "crwdns33316:0crwdne33316:0" -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" msgstr "crwdns51456:0%(category)scrwdne51456:0" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" msgstr "crwdns33320:0crwdne33320:0" -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" msgstr "crwdns33322:0crwdne33322:0" -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" msgstr "crwdns33324:0crwdne33324:0" -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" msgstr "crwdns33326:0crwdne33326:0" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:203 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" msgstr "crwdns51458:0%(round)scrwdne51458:0" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" msgstr "crwdns34568:0crwdne34568:0" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" msgstr "crwdns51460:0%(round)scrwdne51460:0" -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" msgstr "crwdns34570:0crwdne34570:0" -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" msgstr "crwdns33332:0crwdne33332:0" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" msgstr "crwdns33334:0crwdne33334:0" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "crwdns33338:0crwdne33338:0" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" msgstr "crwdns33340:0crwdne33340:0" -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" msgstr "crwdns51462:0%(category)scrwdne51462:0" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" msgstr "crwdns33344:0crwdne33344:0" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" msgstr "crwdns34572:0crwdne34572:0" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" msgstr "crwdns33348:0crwdne33348:0" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" msgstr "crwdns33350:0crwdne33350:0" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" msgstr "crwdns33352:0crwdne33352:0" -#: tournaments/templates/public_tournament_index.html:188 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Enter Ballot for %(round)s" msgstr "crwdns51970:0%(round)scrwdne51970:0" -#: tournaments/templates/public_tournament_index.html:195 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" msgstr "crwdns33356:0crwdne33356:0" -#: tournaments/templates/public_tournament_index.html:217 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" msgstr "crwdns33360:0crwdne33360:0" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" msgstr "crwdns34574:0crwdne34574:0" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" msgstr "crwdns33366:0crwdne33366:0" -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." msgstr "crwdns33368:0crwdne33368:0" -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" msgstr "crwdns33370:0crwdne33370:0" -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" msgstr "crwdns33372:0crwdne33372:0" -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" msgstr "crwdns51464:0%(round)scrwdne51464:0" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" msgstr "crwdns51466:0%(round)scrwdne51466:0" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" msgstr "crwdns51468:0%(round)scrwdne51468:0" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" msgstr "crwdns51470:0%(round)scrwdne51470:0" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." msgstr[0] "crwdns34584:1%(prior_rounds_not_completed)scrwdne34584:1" msgstr[1] "crwdns34584:5%(prior_rounds_not_completed)scrwdne34584:5" -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" msgstr "crwdns51472:0%(round)scrwdne51472:0" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." msgstr[0] "crwdns33380:1%(num_unconfirmed)scrwdne33380:1" msgstr[1] "crwdns33380:5%(num_unconfirmed)scrwdne33380:5" -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " msgstr "crwdns35322:0%(round_changelist_url)scrwdne35322:0" -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "crwdns51474:0%(round)scrwdnd51474:0%(round_changelist_url)scrwdnd51474:0%(public_features_url)scrwdne51474:0" -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" msgstr "crwdns33386:0crwdne33386:0" -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" msgstr "crwdns33388:0crwdne33388:0" -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." msgstr "crwdns51476:0%(tournament)scrwdne51476:0" -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." msgstr "crwdns51478:0%(tournament)scrwdne51478:0" -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "crwdns51480:0%(tournament)scrwdnd51480:0%(round_changelist_url)scrwdne51480:0" -#: tournaments/templates/set_round_weights.html:4 -#: tournaments/templates/set_round_weights.html:5 +#: tournaments/templates/set_round_weights.html msgctxt "page title" -msgid "Set Round Weights" -msgstr "crwdns52143:0crwdne52143:0" +msgid "Set Round Weights for Tapered Scoring" +msgstr "crwdns52239:0crwdne52239:0" -#: tournaments/templates/set_round_weights.html:8 +#: tournaments/templates/set_round_weights.html msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." msgstr "crwdns52145:0crwdne52145:0" -#: tournaments/templates/set_round_weights.html:41 +#: tournaments/templates/set_round_weights.html msgctxt "button" msgid "Set weights" msgstr "crwdns52147:0crwdne52147:0" -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:47 -msgid "Inactive Tournaments" -msgstr "crwdns51482:0crwdne51482:0" - -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/site_index.html msgid "Welcome!" msgstr "crwdns33396:0crwdne33396:0" -#: tournaments/templates/site_index.html:21 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" msgstr "crwdns33404:0crwdne33404:0" -#: tournaments/templates/site_index.html:30 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." msgstr "crwdns51484:0crwdne51484:0" -#: tournaments/templates/site_index.html:34 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." msgstr "crwdns33406:0crwdne33406:0" -#: tournaments/templates/site_index.html:55 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "crwdns52241:0crwdne52241:0" + +#: tournaments/templates/site_index.html msgid "New Tournament" msgstr "crwdns33414:0crwdne33414:0" -#: tournaments/templates/site_index.html:58 +#: tournaments/templates/site_index.html msgid "Edit Database Area" msgstr "crwdns33416:0crwdne33416:0" -#: tournaments/templates/site_index.html:61 +#: tournaments/templates/site_index.html msgid "Send a Test Email" msgstr "crwdns34590:0crwdne34590:0" -#: tournaments/templates/site_index.html:64 +#: tournaments/templates/site_index.html msgid "Import DebateXML" msgstr "crwdns51972:0crwdne51972:0" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Get API Token / Change Password (%(user)s)" msgstr "crwdns51648:0%(user)scrwdne51648:0" -#: tournaments/templates/site_index.html:77 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" msgstr "crwdns33420:0%(user)scrwdne33420:0" -#: tournaments/templates/site_index.html:83 +#: tournaments/templates/site_index.html msgid "Log In as Admin" msgstr "crwdns33422:0crwdne33422:0" -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." msgstr "crwdns33424:0%(amount)scrwdnd33424:0%(url)scrwdne33424:0" -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" msgstr "crwdns33426:0crwdne33426:0" -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." msgstr "crwdns51486:0crwdne51486:0" #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." msgstr "crwdns33430:0%(readthedocs_version)scrwdne33430:0" -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." msgstr "crwdns33432:0crwdne33432:0" -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" -msgstr "crwdns51488:0%(round)scrwdne51488:0" +msgid "Mark participants as available to prepare a draw for %(round)s" +msgstr "crwdns52243:0%(round)scrwdne52243:0" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" msgstr "crwdns51490:0%(round)scrwdne51490:0" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" -msgstr "crwdns51492:0%(round)scrwdne51492:0" +msgid "Go to the results area to enter ballots for %(round)s" +msgstr "crwdns52245:0%(round)scrwdne52245:0" -#: tournaments/templates/tournament_index.html:74 +#: tournaments/templates/tournament_index.html msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." msgstr "crwdns52149:0crwdne52149:0" -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" msgstr "crwdns33398:0%(tn)scrwdne33398:0" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" msgstr "crwdns33400:0%(tn)scrwdne33400:0" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" msgstr "crwdns33402:0%(tn)scrwdne33402:0" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" msgstr "crwdns33464:0crwdne33464:0" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" msgstr "crwdns33466:0crwdne33466:0" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" msgstr "crwdns33468:0crwdne33468:0" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" msgstr "crwdns33470:0crwdne33470:0" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" msgstr "crwdns33472:0crwdne33472:0" -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" msgstr "crwdns33474:0crwdne33474:0" -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" msgstr "crwdns33476:0crwdne33476:0" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" msgstr "crwdns33478:0crwdne33478:0" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" msgstr "crwdns33480:0crwdne33480:0" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" msgstr "crwdns33482:0crwdne33482:0" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" msgstr "crwdns33484:0crwdne33484:0" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" msgstr "crwdns33486:0crwdne33486:0" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" msgstr "crwdns33488:0crwdne33488:0" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" msgstr "crwdns33490:0crwdne33490:0" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" msgstr "crwdns33492:0crwdne33492:0" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" msgstr "crwdns33494:0crwdne33494:0" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" msgstr "crwdns33496:0crwdne33496:0" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" msgstr "crwdns33498:0crwdne33498:0" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" msgstr "crwdns33500:0crwdne33500:0" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" msgstr "crwdns33502:0crwdne33502:0" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" msgstr "crwdns33504:0crwdne33504:0" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" msgstr "crwdns33506:0crwdne33506:0" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" msgstr "crwdns33508:0crwdne33508:0" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" msgstr "crwdns33510:0crwdne33510:0" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" msgstr "crwdns33512:0crwdne33512:0" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" msgstr "crwdns33514:0crwdne33514:0" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" msgstr "crwdns33516:0crwdne33516:0" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "crwdns33518:0crwdne33518:0" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "crwdns33520:0crwdne33520:0" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "crwdns33522:0crwdne33522:0" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "crwdns33524:0crwdne33524:0" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" msgstr "crwdns33526:0crwdne33526:0" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" msgstr "crwdns33528:0crwdne33528:0" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" msgstr "crwdns33530:0crwdne33530:0" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" msgstr "crwdns33532:0crwdne33532:0" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "crwdns33534:0crwdne33534:0" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "crwdns33536:0crwdne33536:0" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "crwdns33538:0crwdne33538:0" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "crwdns33540:0crwdne33540:0" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "crwdns33542:0%(number)dcrwdne33542:0" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" msgstr "crwdns33544:0%(number)dcrwdne33544:0" -#: tournaments/views.py:151 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" msgstr "crwdns35326:0%(round)scrwdne35326:0" -#: tournaments/views.py:157 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." msgstr "crwdns34594:0%(round)scrwdne34594:0" -#: tournaments/views.py:170 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." msgstr "crwdns35328:0%(round)scrwdne35328:0" -#: tournaments/views.py:176 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." msgstr "crwdns34598:0%(round)scrwdne34598:0" -#: tournaments/views.py:184 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" msgstr "crwdns34600:0%(this_round)scrwdnd34600:0%(next_round)scrwdne34600:0" -#: tournaments/views.py:201 +#: tournaments/views.py msgid "8-team generic dataset" msgstr "crwdns33560:0crwdne33560:0" -#: tournaments/views.py:202 +#: tournaments/views.py msgid "24-team Australs dataset" msgstr "crwdns33562:0crwdne33562:0" -#: tournaments/views.py:203 +#: tournaments/views.py msgid "88-team BP dataset" msgstr "crwdns33564:0crwdne33564:0" -#: tournaments/views.py:288 -msgid "Successfully set round weights." -msgstr "crwdns52151:0crwdne52151:0" +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." +msgstr "crwdns52247:0crwdne52247:0" diff --git a/tabbycat/utils/locale/tzl/LC_MESSAGES/django.po b/tabbycat/utils/locale/tzl/LC_MESSAGES/django.po index 69af6c0d44b..ed897f170eb 100644 --- a/tabbycat/utils/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-02 01:40-0300\n" -"PO-Revision-Date: 2021-04-02 04:56\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:15\n" "Last-Translator: philip_tc\n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -18,304 +18,311 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "Email address" -msgstr "crwdns51650:0crwdne51650:0" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "crwdns33648:0crwdne33648:0" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "crwdns33666:0crwdne33666:0" + +#: utils/admin.py +msgid "Speaker" +msgstr "crwdns52249:0crwdne52249:0" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "crwdns33646:0crwdne33646:0" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "crwdns33706:0crwdne33706:0" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "crwdns33664:0crwdne33664:0" + +#: utils/admin.py +msgid "Confirmed" +msgstr "crwdns52251:0crwdne52251:0" -#: utils/tables.py:47 +#: utils/admin.py +msgid "Adjudicator" +msgstr "crwdns52253:0crwdne52253:0" + +#: utils/tables.py msgid "No Data Available" msgstr "crwdns33570:0crwdne33570:0" -#: utils/tables.py:155 utils/tables.py:156 +#: utils/tables.py msgid "Ⓒ" msgstr "crwdns51494:0crwdne51494:0" -#: utils/tables.py:157 +#: utils/tables.py msgid "Ⓣ" msgstr "crwdns51496:0crwdne51496:0" -#: utils/tables.py:161 +#: utils/tables.py msgid "chair" msgstr "crwdns33576:0crwdne33576:0" -#: utils/tables.py:162 +#: utils/tables.py msgid "panellist" msgstr "crwdns33578:0crwdne33578:0" -#: utils/tables.py:163 +#: utils/tables.py msgid "trainee" msgstr "crwdns33580:0crwdne33580:0" -#: utils/tables.py:166 +#: utils/tables.py msgid "—" msgstr "crwdns35632:0crwdne35632:0" -#: utils/tables.py:167 +#: utils/tables.py msgid "Redacted" msgstr "crwdns33672:0crwdne33672:0" -#: utils/tables.py:231 utils/tables.py:237 +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" msgstr "crwdns33582:0%(a)scrwdnd33582:0%(d)scrwdne33582:0" -#: utils/tables.py:247 utils/tables.py:252 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" msgstr "crwdns33584:0%(team)scrwdne33584:0" -#: utils/tables.py:274 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" msgstr "crwdns33586:0%(name)scrwdne33586:0" -#: utils/tables.py:276 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" msgstr "crwdns33588:0%(name)scrwdne33588:0" -#: utils/tables.py:296 +#: utils/tables.py #, python-format msgid "%(team)s won" msgstr "crwdns33590:0%(team)scrwdne33590:0" -#: utils/tables.py:301 +#: utils/tables.py #, python-format msgid "%(team)s lost" msgstr "crwdns33592:0%(team)scrwdne33592:0" -#: utils/tables.py:306 utils/tables.py:318 utils/tables.py:342 +#: utils/tables.py #, python-format msgid "%(team)s—no result" msgstr "crwdns33594:0%(team)scrwdne33594:0" -#: utils/tables.py:323 +#: utils/tables.py #, python-format msgid "%(team)s placed %(place)s" msgstr "crwdns51696:0%(team)scrwdnd51696:0%(place)scrwdne51696:0" -#: utils/tables.py:332 +#: utils/tables.py #, python-format msgid "%(team)s is advancing" msgstr "crwdns33604:0%(team)scrwdne33604:0" -#: utils/tables.py:337 +#: utils/tables.py #, python-format msgid "%(team)s was eliminated" msgstr "crwdns33606:0%(team)scrwdne33606:0" -#: utils/tables.py:350 +#: utils/tables.py msgid "View/edit debate ballot" msgstr "crwdns33618:0crwdne33618:0" -#: utils/tables.py:356 +#: utils/tables.py msgid "View debate ballot" msgstr "crwdns33620:0crwdne33620:0" -#: utils/tables.py:369 +#: utils/tables.py #, python-format msgid " vs %(opposition)s" msgstr "crwdns33608:0%(opposition)scrwdne33608:0" -#: utils/tables.py:376 +#: utils/tables.py #, python-format msgid "Won against %(team)s" msgstr "crwdns33610:0%(team)scrwdne33610:0" -#: utils/tables.py:378 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" msgstr "crwdns33612:0%(team)scrwdne33612:0" -#: utils/tables.py:380 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" msgstr "crwdns33614:0%(team)scrwdne33614:0" -#: utils/tables.py:405 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" msgstr "crwdns33616:0%scrwdne33616:0" -#: utils/tables.py:412 +#: utils/tables.py msgid "Teams in debate:" msgstr "crwdns33622:0crwdne33622:0" -#: utils/tables.py:415 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "crwdns33624:0%(team)scrwdnd33624:0%(side)scrwdne33624:0" -#: utils/tables.py:416 utils/tables.py:420 utils/tables.py:446 -#: utils/tables.py:618 +#: utils/tables.py msgid "??" msgstr "crwdns35330:0crwdne35330:0" -#: utils/tables.py:434 +#: utils/tables.py msgid "advancing" msgstr "crwdns33626:0crwdne33626:0" -#: utils/tables.py:435 +#: utils/tables.py msgid "Advancing" msgstr "crwdns33628:0crwdne33628:0" -#: utils/tables.py:437 +#: utils/tables.py msgid "eliminated" msgstr "crwdns33630:0crwdne33630:0" -#: utils/tables.py:438 +#: utils/tables.py msgid "Eliminated" msgstr "crwdns33632:0crwdne33632:0" -#: utils/tables.py:441 utils/tables.py:451 +#: utils/tables.py msgid "No result for debate" msgstr "crwdns33634:0crwdne33634:0" -#: utils/tables.py:448 +#: utils/tables.py #, python-format msgid "Placed %(place)s" msgstr "crwdns33644:0%(place)scrwdne33644:0" -#: utils/tables.py:463 -msgid "Tournament" -msgstr "crwdns33646:0crwdne33646:0" - -#: utils/tables.py:472 -msgid "Round" -msgstr "crwdns33648:0crwdne33648:0" - -#: utils/tables.py:495 utils/tables.py:672 +#: utils/tables.py msgid "Name" msgstr "crwdns33650:0crwdne33650:0" -#: utils/tables.py:501 utils/tables.py:650 +#: utils/tables.py msgid "Institution" msgstr "crwdns33652:0crwdne33652:0" -#: utils/tables.py:507 +#: utils/tables.py msgid "Member of the Adjudication Core" msgstr "crwdns33654:0crwdne33654:0" -#: utils/tables.py:514 +#: utils/tables.py msgid "Independent Adjudicator" msgstr "crwdns33656:0crwdne33656:0" -#: utils/tables.py:522 +#: utils/tables.py msgid "Always Trainee" msgstr "crwdns33658:0crwdne33658:0" -#: utils/tables.py:557 +#: utils/tables.py msgid "in minority" msgstr "crwdns35332:0crwdne35332:0" -#: utils/tables.py:590 +#: utils/tables.py msgid "Debate Adjudicators" msgstr "crwdns33660:0crwdne33660:0" -#: utils/tables.py:621 -msgid "Motion" -msgstr "crwdns33664:0crwdne33664:0" - -#: utils/tables.py:636 -msgid "Team" -msgstr "crwdns33666:0crwdne33666:0" - -#: utils/tables.py:641 utils/tables.py:694 +#: utils/tables.py msgid "Categories" msgstr "crwdns33668:0crwdne33668:0" -#: utils/tables.py:692 +#: utils/tables.py msgid "Category" msgstr "crwdns33674:0crwdne33674:0" -#: utils/tables.py:719 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." msgstr "crwdns51498:0%(predicate)scrwdne51498:0" -#: utils/tables.py:721 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." msgstr "crwdns51500:0%(predicates)scrwdnd51500:0%(last_predicate)scrwdne51500:0" -#: utils/tables.py:736 +#: utils/tables.py msgid "Room" msgstr "crwdns51502:0crwdne51502:0" -#: utils/tables.py:754 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" msgstr[0] "crwdns33692:1crwdne33692:1" msgstr[1] "crwdns33692:5%(count)dcrwdne33692:5" -#: utils/tables.py:760 +#: utils/tables.py msgid "Teams are from the same institution" msgstr "crwdns33694:0crwdne33694:0" -#: utils/tables.py:766 +#: utils/tables.py msgid "Conflicts/Flags" msgstr "crwdns33696:0crwdne33696:0" -#: utils/tables.py:819 +#: utils/tables.py msgid "The confirmed ballot" msgstr "crwdns51974:0crwdne51974:0" -#: utils/tables.py:824 utils/tables.py:849 +#: utils/tables.py msgid "No ballot" msgstr "crwdns34604:0crwdne34604:0" -#: utils/tables.py:826 utils/tables.py:851 +#: utils/tables.py msgid "No scores" msgstr "crwdns51976:0crwdne51976:0" -#: utils/tables.py:829 utils/tables.py:854 utils/tables.py:866 +#: utils/tables.py msgid "View Ballot" msgstr "crwdns33700:0crwdne33700:0" -#: utils/tables.py:836 +#: utils/tables.py msgid "The ballot you submitted" msgstr "crwdns34602:0crwdne34602:0" -#: utils/tables.py:840 +#: utils/tables.py msgid "View/Edit Ballot" msgstr "crwdns33698:0crwdne33698:0" -#: utils/tables.py:874 +#: utils/tables.py msgid "Result" msgstr "crwdns33702:0crwdne33702:0" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:880 +#: utils/tables.py msgid "TBC" msgstr "crwdns33704:0crwdne33704:0" -#: utils/tables.py:881 -msgid "Side" -msgstr "crwdns33706:0crwdne33706:0" - -#: utils/tables.py:919 -msgid "Team iron-manned this round and the last." -msgstr "crwdns34608:0crwdne34608:0" +#: utils/tables.py +msgid "Team iron-personed this round and the last." +msgstr "crwdns52263:0crwdne52263:0" -#: utils/tables.py:922 -msgid "Team iron-manned this round." -msgstr "crwdns34610:0crwdne34610:0" +#: utils/tables.py +msgid "Team iron-personed this round." +msgstr "crwdns52265:0crwdne52265:0" -#: utils/tables.py:925 -msgid "Team iron-manned last round." -msgstr "crwdns34612:0crwdne34612:0" +#: utils/tables.py +msgid "Team iron-personed last round." +msgstr "crwdns52267:0crwdne52267:0" -#: utils/tables.py:942 utils/tables.py:943 +#: utils/tables.py #, python-format msgid "Team %(num)d" msgstr "crwdns33708:0%(num)dcrwdne33708:0" -#: utils/tables.py:950 +#: utils/tables.py msgid "Postpone" msgstr "crwdns51790:0crwdne51790:0" -#: utils/views.py:38 +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." msgstr "crwdns33710:0crwdne33710:0" diff --git a/tabbycat/venues/locale/tzl/LC_MESSAGES/django.po b/tabbycat/venues/locale/tzl/LC_MESSAGES/django.po index de06435d4c7..e50c8285a9d 100644 --- a/tabbycat/venues/locale/tzl/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/tzl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-05 15:26-0300\n" -"PO-Revision-Date: 2020-11-18 21:01\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" "Last-Translator: philip_tc\n" "Language-Team: Talossan\n" "Language: tzl_TZL\n" @@ -18,204 +18,202 @@ msgstr "" "X-Crowdin-Project-ID: 364715\n" "X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 +#: venues/apps.py msgid "Rooms" msgstr "crwdns51662:0crwdne51662:0" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." msgstr "crwdns51504:0crwdne51504:0" -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." msgstr "crwdns51506:0crwdne51506:0" -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." msgstr "crwdns51508:0crwdne51508:0" -#: venues/models.py:9 venues/models.py:66 +#: venues/models.py msgid "name" msgstr "crwdns33714:0crwdne33714:0" -#: venues/models.py:11 venues/models.py:120 +#: venues/models.py msgid "priority" msgstr "crwdns33716:0crwdne33716:0" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" msgstr "crwdns51510:0crwdne51510:0" -#: venues/models.py:15 venues/models.py:78 +#: venues/models.py msgid "tournament" msgstr "crwdns33720:0crwdne33720:0" -#: venues/models.py:16 +#: venues/models.py msgid "URL" msgstr "crwdns51652:0crwdne51652:0" -#: venues/models.py:17 +#: venues/models.py msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" msgstr "crwdns51664:0crwdne51664:0" -#: venues/models.py:24 +#: venues/models.py msgid "room" msgstr "crwdns51512:0crwdne51512:0" -#: venues/models.py:25 venues/models.py:76 +#: venues/models.py msgid "rooms" msgstr "crwdns51514:0crwdne51514:0" -#: venues/models.py:61 +#: venues/models.py msgid "Don't display in room name" msgstr "crwdns51516:0crwdne51516:0" -#: venues/models.py:62 +#: venues/models.py msgid "Display as prefix" msgstr "crwdns33730:0crwdne33730:0" -#: venues/models.py:63 +#: venues/models.py msgid "Display as suffix" msgstr "crwdns33732:0crwdne33732:0" -#: venues/models.py:67 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." msgstr "crwdns51518:0crwdne51518:0" -#: venues/models.py:71 +#: venues/models.py msgid "description" msgstr "crwdns33736:0crwdne33736:0" -#: venues/models.py:72 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." msgstr "crwdns51520:0crwdne51520:0" -#: venues/models.py:82 +#: venues/models.py msgid "display in room name" msgstr "crwdns51522:0crwdne51522:0" -#: venues/models.py:83 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" msgstr "crwdns33742:0crwdne33742:0" -#: venues/models.py:85 +#: venues/models.py msgid "display in public tooltip" msgstr "crwdns33744:0crwdne33744:0" -#: venues/models.py:86 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." msgstr "crwdns51524:0crwdne51524:0" -#: venues/models.py:90 +#: venues/models.py msgid "room category" msgstr "crwdns51526:0crwdne51526:0" -#: venues/models.py:91 +#: venues/models.py msgid "room categories" msgstr "crwdns51528:0crwdne51528:0" -#: venues/models.py:119 +#: venues/models.py msgid "category" msgstr "crwdns33752:0crwdne33752:0" -#: venues/models.py:123 +#: venues/models.py msgid "subject content type" msgstr "crwdns33754:0crwdne33754:0" -#: venues/models.py:126 +#: venues/models.py msgid "subject ID" msgstr "crwdns33756:0crwdne33756:0" -#: venues/models.py:132 +#: venues/models.py msgid "room constraint" msgstr "crwdns51530:0crwdne51530:0" -#: venues/models.py:133 +#: venues/models.py msgid "room constraints" msgstr "crwdns51532:0crwdne51532:0" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" msgstr "crwdns51534:0crwdne51534:0" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." msgstr "crwdns51536:0crwdne51536:0" -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." msgstr "crwdns51538:0%(edit_db_url)scrwdne51538:0" -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" msgstr "crwdns51540:0crwdne51540:0" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" msgstr "crwdns51542:0crwdne51542:0" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." msgstr "crwdns51544:0crwdne51544:0" -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" msgstr "crwdns51546:0crwdne51546:0" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" msgstr "crwdns51548:0%(name)scrwdnd51548:0%(category)scrwdne51548:0" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" msgstr "crwdns51550:0%(name)scrwdne51550:0" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" msgstr "crwdns51552:0%(team)scrwdnd51552:0%(category)scrwdnd51552:0%(institution)scrwdne51552:0" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" msgstr "crwdns51554:0%(institution)scrwdnd51554:0%(team)scrwdne51554:0" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" msgstr "crwdns51556:0crwdne51556:0" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" msgstr[0] "crwdns51558:1%(list)scrwdne51558:1" msgstr[1] "crwdns51558:5%(list)scrwdne51558:5" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." msgstr "crwdns51560:0crwdne51560:0" -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "crwdns33790:0%scrwdne33790:0" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" msgstr "crwdns33792:0%scrwdne33792:0" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" msgstr "crwdns33794:0%scrwdne33794:0" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." From 3fc529d8c01ae9eb023d630c6292fe8bffe04c0d Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Mon, 6 Jul 2020 03:03:54 +1000 Subject: [PATCH 222/255] New translations django.po (Turkish) --- docs/locale/tr/LC_MESSAGES/about/authors.po | 6 +- docs/locale/tr/LC_MESSAGES/about/changelog.po | 8 +- .../tr/LC_MESSAGES/about/contributing.po | 8 +- docs/locale/tr/LC_MESSAGES/about/licence.po | 6 +- docs/locale/tr/LC_MESSAGES/about/support.po | 8 +- .../LC_MESSAGES/about/tournament-history.po | 6 +- .../features/adjudicator-allocation.po | 8 +- .../features/adjudicator-feedback.po | 8 +- .../locale/tr/LC_MESSAGES/features/backups.po | 6 +- docs/locale/tr/LC_MESSAGES/features/breaks.po | 6 +- .../tr/LC_MESSAGES/features/check-ins.po | 8 +- .../tr/LC_MESSAGES/features/data-entry.po | 8 +- .../tr/LC_MESSAGES/features/data-importers.po | 6 +- .../features/draw-generation-bp.po | 12 +- .../LC_MESSAGES/features/draw-generation.po | 42 +- .../tr/LC_MESSAGES/features/notifications.po | 6 +- .../LC_MESSAGES/features/preformed-panels.po | 8 +- .../tr/LC_MESSAGES/features/printing.po | 6 +- .../LC_MESSAGES/features/standings-rules.po | 12 +- .../LC_MESSAGES/features/team-code-names.po | 16 +- .../tr/LC_MESSAGES/features/user-accounts.po | 8 +- .../LC_MESSAGES/features/venue-constraints.po | 6 +- .../tr/LC_MESSAGES/guide/comparisons.po | 6 +- docs/locale/tr/LC_MESSAGES/guide/scaling.po | 6 +- .../LC_MESSAGES/guide/tournament-logistics.po | 6 +- docs/locale/tr/LC_MESSAGES/guide/upgrading.po | 6 +- docs/locale/tr/LC_MESSAGES/index.po | 6 +- docs/locale/tr/LC_MESSAGES/install/docker.po | 6 +- docs/locale/tr/LC_MESSAGES/install/heroku.po | 6 +- docs/locale/tr/LC_MESSAGES/install/linux.po | 6 +- docs/locale/tr/LC_MESSAGES/install/local.po | 6 +- docs/locale/tr/LC_MESSAGES/install/osx.po | 6 +- docs/locale/tr/LC_MESSAGES/install/windows.po | 6 +- docs/locale/tr/LC_MESSAGES/install/wsl.po | 6 +- .../LC_MESSAGES/use/finishing-a-tournament.po | 14 +- .../tr/LC_MESSAGES/use/importing-data.po | 6 +- .../LC_MESSAGES/use/running-a-tournament.po | 8 +- .../LC_MESSAGES/use/starting-a-tournament.po | 6 +- .../actionlog/locale/tr/LC_MESSAGES/django.po | 302 +-- .../locale/tr/LC_MESSAGES/django.po | 401 ++-- .../locale/tr/LC_MESSAGES/django.po | 880 ++++----- .../locale/tr/LC_MESSAGES/django.po | 348 ++-- .../breakqual/locale/tr/LC_MESSAGES/django.po | 448 ++--- tabbycat/draw/locale/tr/LC_MESSAGES/django.po | 1110 ++++++----- .../importer/locale/tr/LC_MESSAGES/django.po | 408 ++-- tabbycat/locale/tr/LC_MESSAGES/django.po | 916 ++++----- tabbycat/locale/tr/LC_MESSAGES/djangojs.po | 256 +-- .../motions/locale/tr/LC_MESSAGES/django.po | 390 ++-- .../locale/tr/LC_MESSAGES/django.po | 378 ++-- .../options/locale/tr/LC_MESSAGES/django.po | 1647 +++++++++-------- .../locale/tr/LC_MESSAGES/django.po | 911 +++++---- .../printing/locale/tr/LC_MESSAGES/django.po | 112 +- .../locale/tr/LC_MESSAGES/django.po | 155 +- .../results/locale/tr/LC_MESSAGES/django.po | 1120 ++++++----- .../standings/locale/tr/LC_MESSAGES/django.po | 584 +++--- .../locale/tr/LC_MESSAGES/django.po | 988 +++++----- .../utils/locale/tr/LC_MESSAGES/django.po | 353 ++-- .../venues/locale/tr/LC_MESSAGES/django.po | 194 +- 58 files changed, 6425 insertions(+), 5790 deletions(-) diff --git a/docs/locale/tr/LC_MESSAGES/about/authors.po b/docs/locale/tr/LC_MESSAGES/about/authors.po index be86a09387d..992fffeb152 100644 --- a/docs/locale/tr/LC_MESSAGES/about/authors.po +++ b/docs/locale/tr/LC_MESSAGES/about/authors.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:31\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:22\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/authors.po\n" +"X-Crowdin-File-ID: 1259\n" "Language: tr_TR\n" #: ../../../AUTHORS.rst:3 diff --git a/docs/locale/tr/LC_MESSAGES/about/changelog.po b/docs/locale/tr/LC_MESSAGES/about/changelog.po index cdf2dbe0797..15190045e4b 100644 --- a/docs/locale/tr/LC_MESSAGES/about/changelog.po +++ b/docs/locale/tr/LC_MESSAGES/about/changelog.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 17:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/changelog.po\n" +"X-Crowdin-File-ID: 1261\n" "Language: tr_TR\n" #: ../../../CHANGELOG.rst:3 @@ -1684,7 +1686,7 @@ msgstr "" #: ../../../CHANGELOG.rst:628 msgid "Feedback" -msgstr "Geri Bildirim" +msgstr "Geri bildirim" #: ../../../CHANGELOG.rst:627 msgid "Changed Boolean fields in AdjudicatorFeedbackQuestion to reflect what they actually do" diff --git a/docs/locale/tr/LC_MESSAGES/about/contributing.po b/docs/locale/tr/LC_MESSAGES/about/contributing.po index 99af8e31454..ad803a365d4 100644 --- a/docs/locale/tr/LC_MESSAGES/about/contributing.po +++ b/docs/locale/tr/LC_MESSAGES/about/contributing.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:32\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/contributing.po\n" +"X-Crowdin-File-ID: 1263\n" "Language: tr_TR\n" #: ../../../CONTRIBUTING.rst:3 @@ -182,7 +184,7 @@ msgstr "" #: ../../../CONTRIBUTING.rst:96 msgid "Documentation" -msgstr "" +msgstr "Belgeler" #: ../../../CONTRIBUTING.rst:98 msgid "Documentation is created using `Sphinx `_ and hosted at `Read The Docs `_. Pushes to ``develop`` will update the *latest* documentation set, while pushes to ``master`` will update the *stable* documentation set." diff --git a/docs/locale/tr/LC_MESSAGES/about/licence.po b/docs/locale/tr/LC_MESSAGES/about/licence.po index b116b80acd8..b0fb299dc93 100644 --- a/docs/locale/tr/LC_MESSAGES/about/licence.po +++ b/docs/locale/tr/LC_MESSAGES/about/licence.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:32\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:18\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/licence.po\n" +"X-Crowdin-File-ID: 1265\n" "Language: tr_TR\n" #: ../../../LICENSE.rst:3 diff --git a/docs/locale/tr/LC_MESSAGES/about/support.po b/docs/locale/tr/LC_MESSAGES/about/support.po index 0857cf6a706..2581715730f 100644 --- a/docs/locale/tr/LC_MESSAGES/about/support.po +++ b/docs/locale/tr/LC_MESSAGES/about/support.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:32\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,13 +12,15 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/support.po\n" +"X-Crowdin-File-ID: 1267\n" "Language: tr_TR\n" #: ../../about/support.rst:3 msgid "Support" -msgstr "" +msgstr "Destek" #: ../../about/support.rst:5 msgid "There are a number of ways to report bugs, ask for help, or submit feedback." diff --git a/docs/locale/tr/LC_MESSAGES/about/tournament-history.po b/docs/locale/tr/LC_MESSAGES/about/tournament-history.po index f8da141d7b3..17aab62c5c4 100644 --- a/docs/locale/tr/LC_MESSAGES/about/tournament-history.po +++ b/docs/locale/tr/LC_MESSAGES/about/tournament-history.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:32\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:19\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/tournament-history.po\n" +"X-Crowdin-File-ID: 1335\n" "Language: tr_TR\n" #: ../../about/tournament-history.rst:3 diff --git a/docs/locale/tr/LC_MESSAGES/features/adjudicator-allocation.po b/docs/locale/tr/LC_MESSAGES/features/adjudicator-allocation.po index 8c9fd7874b3..e2f82025226 100644 --- a/docs/locale/tr/LC_MESSAGES/features/adjudicator-allocation.po +++ b/docs/locale/tr/LC_MESSAGES/features/adjudicator-allocation.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:32\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,13 +12,15 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-allocation.po\n" +"X-Crowdin-File-ID: 1271\n" "Language: tr_TR\n" #: ../../features/adjudicator-allocation.rst:5 msgid "Adjudicator Allocation" -msgstr "" +msgstr "Jüri Tahsisi" #: ../../features/adjudicator-allocation.rst:7 msgid "The adjudicator allocation screen offers the ability to automatically generate an allocation and/or allow you to create or edit an allocation manually. This interface is somewhat complex as it attempts to provide all of the information needed to inform allocation while also providing a number of automatic and manual tools for the allocation process itself." diff --git a/docs/locale/tr/LC_MESSAGES/features/adjudicator-feedback.po b/docs/locale/tr/LC_MESSAGES/features/adjudicator-feedback.po index d6bab579da1..ceba6529532 100644 --- a/docs/locale/tr/LC_MESSAGES/features/adjudicator-feedback.po +++ b/docs/locale/tr/LC_MESSAGES/features/adjudicator-feedback.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 17:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-feedback.po\n" +"X-Crowdin-File-ID: 1273\n" "Language: tr_TR\n" #: ../../features/adjudicator-feedback.rst:5 @@ -104,7 +106,7 @@ msgstr "" #: ../../features/adjudicator-feedback.rst:39 #: ../../features/adjudicator-feedback.rst:41 msgid "choices" -msgstr "" +msgstr "seçenekler" #: ../../features/adjudicator-feedback.rst:41 msgid "**select multiple**" diff --git a/docs/locale/tr/LC_MESSAGES/features/backups.po b/docs/locale/tr/LC_MESSAGES/features/backups.po index a3eb7d0acb6..35cedfbbfbb 100644 --- a/docs/locale/tr/LC_MESSAGES/features/backups.po +++ b/docs/locale/tr/LC_MESSAGES/features/backups.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:32\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:25\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/backups.po\n" +"X-Crowdin-File-ID: 1275\n" "Language: tr_TR\n" #: ../../features/backups.rst:5 diff --git a/docs/locale/tr/LC_MESSAGES/features/breaks.po b/docs/locale/tr/LC_MESSAGES/features/breaks.po index f495b0e0ebe..4391475a8f7 100644 --- a/docs/locale/tr/LC_MESSAGES/features/breaks.po +++ b/docs/locale/tr/LC_MESSAGES/features/breaks.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:31\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:26\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/breaks.po\n" +"X-Crowdin-File-ID: 1277\n" "Language: tr_TR\n" #: ../../features/breaks.rst:5 diff --git a/docs/locale/tr/LC_MESSAGES/features/check-ins.po b/docs/locale/tr/LC_MESSAGES/features/check-ins.po index f79b63c493e..714c646c10a 100644 --- a/docs/locale/tr/LC_MESSAGES/features/check-ins.po +++ b/docs/locale/tr/LC_MESSAGES/features/check-ins.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:31\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,13 +12,15 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/check-ins.po\n" +"X-Crowdin-File-ID: 1279\n" "Language: tr_TR\n" #: ../../features/check-ins.rst:5 msgid "Check-Ins" -msgstr "" +msgstr "Girişler" #: ../../features/check-ins.rst:7 msgid "A 'Check-in' is a record of a speaker, adjudicator, venue, or ballot's status at a particular point in time. Typically these are used at large tournaments to reliably track who is or is not present for the first round of each day." diff --git a/docs/locale/tr/LC_MESSAGES/features/data-entry.po b/docs/locale/tr/LC_MESSAGES/features/data-entry.po index 887e24b3f7c..a282d698663 100644 --- a/docs/locale/tr/LC_MESSAGES/features/data-entry.po +++ b/docs/locale/tr/LC_MESSAGES/features/data-entry.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:31\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-entry.po\n" +"X-Crowdin-File-ID: 1281\n" "Language: tr_TR\n" #: ../../features/data-entry.rst:5 @@ -118,7 +120,7 @@ msgstr "" #: ../../features/data-entry.rst:68 msgid "Private URLs" -msgstr "" +msgstr "Özel URL'ler" #: ../../features/data-entry.rst:70 msgid "The first method of data entry is using 'private URLs'. When this setting is enabled you can create a special URL that is unique to a participant. This link contains a number of random characters and is not displayed publicly; it is in effect a secret that only that a specific participant should know. Presuming people do not share these links to others, this provides a means to (relatively) securely identify who is submitting what information. Because Tabbycat knows which participant has which URL it will only allow them to submit feedback/ballots for debates that they were speakers/adjudicators in." diff --git a/docs/locale/tr/LC_MESSAGES/features/data-importers.po b/docs/locale/tr/LC_MESSAGES/features/data-importers.po index afdd00f8f3b..c91e8ae8a2e 100644 --- a/docs/locale/tr/LC_MESSAGES/features/data-importers.po +++ b/docs/locale/tr/LC_MESSAGES/features/data-importers.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:31\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:22\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-importers.po\n" +"X-Crowdin-File-ID: 1283\n" "Language: tr_TR\n" #: ../../features/data-importers.rst:5 diff --git a/docs/locale/tr/LC_MESSAGES/features/draw-generation-bp.po b/docs/locale/tr/LC_MESSAGES/features/draw-generation-bp.po index 8d42923ed59..da6e5f94f03 100644 --- a/docs/locale/tr/LC_MESSAGES/features/draw-generation-bp.po +++ b/docs/locale/tr/LC_MESSAGES/features/draw-generation-bp.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 17:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation-bp.po\n" +"X-Crowdin-File-ID: 1285\n" "Language: tr_TR\n" #: ../../features/draw-generation-bp.rst:5 @@ -71,7 +73,7 @@ msgstr "" #: ../../features/draw-generation-bp.rst:28 #: ../../features/draw-generation-bp.rst:179 msgid "Simple" -msgstr "" +msgstr "Basit" #: ../../features/draw-generation-bp.rst:29 msgid "**Rényi entropy**" @@ -80,7 +82,7 @@ msgstr "" #: ../../features/draw-generation-bp.rst:30 #: ../../features/draw-generation-bp.rst:254 msgid "Population variance" -msgstr "" +msgstr "Popülasyon varyansı" #: ../../features/draw-generation-bp.rst:31 msgid ":ref:`Rényi order `" @@ -448,7 +450,7 @@ msgstr "" #: ../../features/draw-generation-bp.rst:190 msgid "Rényi entropy" -msgstr "" +msgstr "Rényi entropisi" #: ../../features/draw-generation-bp.rst:192 msgid "Informally speaking, the `Rényi entropy `_ is a measure of the diversity of the positions in a team's history. A history consisting only of one position has *low* entropy, while a history that is perfectly evenly distributed has *high* entropy. The **Rényi entropy cost function** reverses this intuition, so that an even hypothetical history has low cost, while an uneven hypothetical history has high cost." diff --git a/docs/locale/tr/LC_MESSAGES/features/draw-generation.po b/docs/locale/tr/LC_MESSAGES/features/draw-generation.po index edbc415dc83..4f46805b8aa 100644 --- a/docs/locale/tr/LC_MESSAGES/features/draw-generation.po +++ b/docs/locale/tr/LC_MESSAGES/features/draw-generation.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation.po\n" +"X-Crowdin-File-ID: 1287\n" "Language: tr_TR\n" #: ../../features/draw-generation.rst:5 @@ -54,19 +56,19 @@ msgstr "" #: ../../features/draw-generation.rst:24 msgid "Pull up from top" -msgstr "" +msgstr "Yukarıdan yukarı çek" #: ../../features/draw-generation.rst:25 msgid "Pull up from bottom" -msgstr "" +msgstr "Alttan yukarı çek" #: ../../features/draw-generation.rst:26 msgid "Pull up from middle" -msgstr "" +msgstr "Ortadan yukarı çek" #: ../../features/draw-generation.rst:27 msgid "Pull up at random" -msgstr "" +msgstr "Rastgele yukarı çek" #: ../../features/draw-generation.rst:29 msgid "If sides are `Random` or `Balance`:" @@ -102,15 +104,15 @@ msgstr "" #: ../../features/draw-generation.rst:41 ../../features/draw-generation.rst:51 msgid "Random" -msgstr "" +msgstr "Rastgele" #: ../../features/draw-generation.rst:42 msgid "Balance" -msgstr "" +msgstr "Denge" #: ../../features/draw-generation.rst:43 msgid "Pre-allocated" -msgstr "" +msgstr "Önceden tahsis edilmiş" #: ../../features/draw-generation.rst:44 msgid "Manual ballot" @@ -126,15 +128,15 @@ msgstr "" #: ../../features/draw-generation.rst:48 msgid "Slide" -msgstr "" +msgstr "Kaydırma" #: ../../features/draw-generation.rst:49 msgid "Fold" -msgstr "" +msgstr "Katla" #: ../../features/draw-generation.rst:50 msgid "Adjacent" -msgstr "" +msgstr "Komşu" #: ../../features/draw-generation.rst:53 msgid ":ref:`Conflict avoidance method `" @@ -146,11 +148,11 @@ msgstr "" #: ../../features/draw-generation.rst:55 msgid "Off" -msgstr "" +msgstr "Kapalı" #: ../../features/draw-generation.rst:56 msgid "One-up-one-down" -msgstr "" +msgstr "Bir-yukarı-bir-aşağı" #: ../../features/draw-generation.rst:58 msgid ":ref:`Pullup restriction `" @@ -162,15 +164,15 @@ msgstr "" #: ../../features/draw-generation.rst:60 msgid "No restriction" -msgstr "" +msgstr "Kısıtlama yok" #: ../../features/draw-generation.rst:61 msgid "Choose from teams who have been pulled up the fewest times so far" -msgstr "" +msgstr "Şimdiye kadar en az kez yukarı çekilen takımlar arasından seçim yap" #: ../../features/draw-generation.rst:62 msgid "Choose from teams with the lowest draw strength by speaks so far" -msgstr "" +msgstr "Şimdiye kadarki en düşük kura gücüne sahip takımlar arasından seçim yap" #: ../../features/draw-generation.rst:64 msgid "The valid options for intermediate brackets change depending on whether sides are pre-allocated, but these are **not** checked for validity. If you choose an invalid combination, Tabbycat will just crash. This won't corrupt the database, but it might be momentarily annoying." @@ -334,7 +336,7 @@ msgstr "" #: ../../features/draw-generation.rst:153 msgid "Pairing method" -msgstr "" +msgstr "Eşleştirme yöntemi" #: ../../features/draw-generation.rst:154 msgid "It's easiest to describe these by example, using a ten-team bracket:" @@ -362,7 +364,7 @@ msgstr "" #: ../../features/draw-generation.rst:166 msgid "Conflict avoidance method" -msgstr "" +msgstr "Conflict kaçınma yöntemi" #: ../../features/draw-generation.rst:167 msgid "A **conflict** is when two teams would face each other that have seen each other before, or are from the same institutions. Some tournaments have a preference against allowing this if it's avoidable within certain limits. The **draw avoid conflicts** option allows you to specify how." @@ -402,7 +404,7 @@ msgstr "" #: ../../features/draw-generation.rst:187 msgid "Pullup restriction" -msgstr "" +msgstr "Yukarı çekme kısıtlaması" #: ../../features/draw-generation.rst:188 msgid "You can restrict which teams can be pulled up by configuring the draw generator to choose a pullup team from among only those teams who are the \"best off\" according to a given metric. If several teams are equally \"best off\" within the lower bracket, the draw generator chooses among them using the same **pull-up method** already specified (*e.g.*, \"pull up from top\")" diff --git a/docs/locale/tr/LC_MESSAGES/features/notifications.po b/docs/locale/tr/LC_MESSAGES/features/notifications.po index b2b8b24bd6c..dba5a3551a9 100644 --- a/docs/locale/tr/LC_MESSAGES/features/notifications.po +++ b/docs/locale/tr/LC_MESSAGES/features/notifications.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:13\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/notifications.po\n" +"X-Crowdin-File-ID: 1289\n" "Language: tr_TR\n" #: ../../features/notifications.rst:3 diff --git a/docs/locale/tr/LC_MESSAGES/features/preformed-panels.po b/docs/locale/tr/LC_MESSAGES/features/preformed-panels.po index ac48862542c..bcf536f0e4c 100644 --- a/docs/locale/tr/LC_MESSAGES/features/preformed-panels.po +++ b/docs/locale/tr/LC_MESSAGES/features/preformed-panels.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,13 +12,15 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/preformed-panels.po\n" +"X-Crowdin-File-ID: 1291\n" "Language: tr_TR\n" #: ../../features/preformed-panels.rst:5 msgid "Preformed Panels" -msgstr "" +msgstr "Önceden kurulmuş paneller" #: ../../features/preformed-panels.rst:7 msgid "Preformed panels, also known as a 'shadow draw', allow adjudicator panels to be created *before* a round has been drawn and then applied once its draw is ready. This means that panel formation can be done during periods outside the normal time pressure of finalising a draw for release. This can save a lot of time at large tournaments, or at tournaments where the adjudication core wants to carefully control the specific combination of adjudicators within panels." diff --git a/docs/locale/tr/LC_MESSAGES/features/printing.po b/docs/locale/tr/LC_MESSAGES/features/printing.po index ce9e6141dcd..0385c8baecb 100644 --- a/docs/locale/tr/LC_MESSAGES/features/printing.po +++ b/docs/locale/tr/LC_MESSAGES/features/printing.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:14\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/printing.po\n" +"X-Crowdin-File-ID: 1293\n" "Language: tr_TR\n" #: ../../features/printing.rst:3 diff --git a/docs/locale/tr/LC_MESSAGES/features/standings-rules.po b/docs/locale/tr/LC_MESSAGES/features/standings-rules.po index af8aa0f7c11..76c3efbfa2b 100644 --- a/docs/locale/tr/LC_MESSAGES/features/standings-rules.po +++ b/docs/locale/tr/LC_MESSAGES/features/standings-rules.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-05-15 06:08\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/standings-rules.po\n" +"X-Crowdin-File-ID: 1295\n" "Language: tr_TR\n" #: ../../features/standings-rules.rst:5 @@ -58,7 +60,7 @@ msgstr "" #: ../../features/standings-rules.rst:36 msgid "Wins" -msgstr "" +msgstr "Galibiyetler" #: ../../features/standings-rules.rst:37 msgid "How many debates the team has won." @@ -66,7 +68,7 @@ msgstr "" #: ../../features/standings-rules.rst:39 msgid "Points" -msgstr "Puanları" +msgstr "Puanlar" #: ../../features/standings-rules.rst:40 msgid "How many points the team has. For two-team formats, this is just a synonym for wins, and differs only in column labelling. For BP, this is 3 points for a first, 2 for a second, 1 for a third and 0 for a fourth." @@ -178,7 +180,7 @@ msgstr "" #: ../../features/standings-rules.rst:103 msgid "Who-beat-whom" -msgstr "" +msgstr "Kim kimi yendi" #: ../../features/standings-rules.rst:104 msgid "If there are exactly two teams tied on all metrics earlier in the precedence than this one, then check if the teams have faced each other. If they have, the team that won their encounter is ranked higher. If they have seen each other more than once, the team that has won more of their encounters is ranked higher." diff --git a/docs/locale/tr/LC_MESSAGES/features/team-code-names.po b/docs/locale/tr/LC_MESSAGES/features/team-code-names.po index eb6a00adebc..d6d69053163 100644 --- a/docs/locale/tr/LC_MESSAGES/features/team-code-names.po +++ b/docs/locale/tr/LC_MESSAGES/features/team-code-names.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/team-code-names.po\n" +"X-Crowdin-File-ID: 1297\n" "Language: tr_TR\n" #: ../../features/team-code-names.rst:5 @@ -62,23 +64,23 @@ msgstr "" #: ../../features/team-code-names.rst:49 msgid "Do not use code names" -msgstr "" +msgstr "Kod adlarını kullanma" #: ../../features/team-code-names.rst:50 msgid "Use real names everywhere, and show code names in tooltips" -msgstr "" +msgstr "Her yerde gerçek adları kullan ve araç ipuçlarında kod adlarını göster" #: ../../features/team-code-names.rst:51 msgid "Use code names for public; real names with code names in tooltips for admins" -msgstr "" +msgstr "Herkese açık olarak kod adları kullan; yöneticiler için araç ipuçlarında kod adları ve gerçek adları kullan" #: ../../features/team-code-names.rst:52 msgid "Use code names for public; code names with real names in tooltips for admins" -msgstr "" +msgstr "Herkese açık olarak kod adları kullan; Yöneticiler için araç ipuçlarında gerçek adları ve kod adlarını kullan" #: ../../features/team-code-names.rst:53 msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" -msgstr "" +msgstr "Kod adlarını her yerde kullan; araç ipuçları kullanma (gerçek adlar bazı yönetici görünümlerinde gösterilir)" #: ../../features/team-code-names.rst:55 msgid "\"Code names in tooltips\" means that the code name will display in the details box that appears when you roll over a team's name, and similarly for real names." diff --git a/docs/locale/tr/LC_MESSAGES/features/user-accounts.po b/docs/locale/tr/LC_MESSAGES/features/user-accounts.po index 33dd8b8ce00..4376865f9ac 100644 --- a/docs/locale/tr/LC_MESSAGES/features/user-accounts.po +++ b/docs/locale/tr/LC_MESSAGES/features/user-accounts.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/user-accounts.po\n" +"X-Crowdin-File-ID: 1299\n" "Language: tr_TR\n" #: ../../features/user-accounts.rst:5 @@ -42,7 +44,7 @@ msgstr "" #: ../../features/user-accounts.rst:19 msgid "Public" -msgstr "" +msgstr "Herkese açık" #: ../../features/user-accounts.rst:20 msgid "The public" diff --git a/docs/locale/tr/LC_MESSAGES/features/venue-constraints.po b/docs/locale/tr/LC_MESSAGES/features/venue-constraints.po index 4c60f906277..753377f8ebc 100644 --- a/docs/locale/tr/LC_MESSAGES/features/venue-constraints.po +++ b/docs/locale/tr/LC_MESSAGES/features/venue-constraints.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:12\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/venue-constraints.po\n" +"X-Crowdin-File-ID: 1301\n" "Language: tr_TR\n" #: ../../features/venue-constraints.rst:5 diff --git a/docs/locale/tr/LC_MESSAGES/guide/comparisons.po b/docs/locale/tr/LC_MESSAGES/guide/comparisons.po index b5a63438316..86e7d84806a 100644 --- a/docs/locale/tr/LC_MESSAGES/guide/comparisons.po +++ b/docs/locale/tr/LC_MESSAGES/guide/comparisons.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:11\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/comparisons.po\n" +"X-Crowdin-File-ID: 1303\n" "Language: tr_TR\n" #: ../../guide/comparisons.rst:5 diff --git a/docs/locale/tr/LC_MESSAGES/guide/scaling.po b/docs/locale/tr/LC_MESSAGES/guide/scaling.po index 9af8caf64f5..96000aa65ed 100644 --- a/docs/locale/tr/LC_MESSAGES/guide/scaling.po +++ b/docs/locale/tr/LC_MESSAGES/guide/scaling.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:17\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/scaling.po\n" +"X-Crowdin-File-ID: 1305\n" "Language: tr_TR\n" #: ../../guide/scaling.rst:5 diff --git a/docs/locale/tr/LC_MESSAGES/guide/tournament-logistics.po b/docs/locale/tr/LC_MESSAGES/guide/tournament-logistics.po index a7420c2a490..b7e3c005750 100644 --- a/docs/locale/tr/LC_MESSAGES/guide/tournament-logistics.po +++ b/docs/locale/tr/LC_MESSAGES/guide/tournament-logistics.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 17:40\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:16\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/tournament-logistics.po\n" +"X-Crowdin-File-ID: 1307\n" "Language: tr_TR\n" #: ../../guide/tournament-logistics.rst:5 diff --git a/docs/locale/tr/LC_MESSAGES/guide/upgrading.po b/docs/locale/tr/LC_MESSAGES/guide/upgrading.po index cdd07437663..2f4a0acdf42 100644 --- a/docs/locale/tr/LC_MESSAGES/guide/upgrading.po +++ b/docs/locale/tr/LC_MESSAGES/guide/upgrading.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:18\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/upgrading.po\n" +"X-Crowdin-File-ID: 1309\n" "Language: tr_TR\n" #: ../../guide/upgrading.rst:5 diff --git a/docs/locale/tr/LC_MESSAGES/index.po b/docs/locale/tr/LC_MESSAGES/index.po index fb24f4b33b6..b1436f360c2 100644 --- a/docs/locale/tr/LC_MESSAGES/index.po +++ b/docs/locale/tr/LC_MESSAGES/index.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:32\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:27\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/index.po\n" +"X-Crowdin-File-ID: 1311\n" "Language: tr_TR\n" #: ../../index.rst:18 diff --git a/docs/locale/tr/LC_MESSAGES/install/docker.po b/docs/locale/tr/LC_MESSAGES/install/docker.po index 5f605702376..fa7e7153c64 100644 --- a/docs/locale/tr/LC_MESSAGES/install/docker.po +++ b/docs/locale/tr/LC_MESSAGES/install/docker.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:17\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/docker.po\n" +"X-Crowdin-File-ID: 1313\n" "Language: tr_TR\n" #: ../../install/docker.rst:5 diff --git a/docs/locale/tr/LC_MESSAGES/install/heroku.po b/docs/locale/tr/LC_MESSAGES/install/heroku.po index ff8a7b13d53..468e46f49c3 100644 --- a/docs/locale/tr/LC_MESSAGES/install/heroku.po +++ b/docs/locale/tr/LC_MESSAGES/install/heroku.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:15\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/heroku.po\n" +"X-Crowdin-File-ID: 1315\n" "Language: tr_TR\n" #: ../../install/heroku.rst:5 diff --git a/docs/locale/tr/LC_MESSAGES/install/linux.po b/docs/locale/tr/LC_MESSAGES/install/linux.po index 18e4cb6aada..0700d1d934e 100644 --- a/docs/locale/tr/LC_MESSAGES/install/linux.po +++ b/docs/locale/tr/LC_MESSAGES/install/linux.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:14\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/linux.po\n" +"X-Crowdin-File-ID: 1317\n" "Language: tr_TR\n" #: ../../install/linux.rst:5 diff --git a/docs/locale/tr/LC_MESSAGES/install/local.po b/docs/locale/tr/LC_MESSAGES/install/local.po index 5299c2c461a..b4463a405da 100644 --- a/docs/locale/tr/LC_MESSAGES/install/local.po +++ b/docs/locale/tr/LC_MESSAGES/install/local.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:31\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:15\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/local.po\n" +"X-Crowdin-File-ID: 1319\n" "Language: tr_TR\n" #: ../../install/local.rst:5 diff --git a/docs/locale/tr/LC_MESSAGES/install/osx.po b/docs/locale/tr/LC_MESSAGES/install/osx.po index e4e2cd08c44..14912810005 100644 --- a/docs/locale/tr/LC_MESSAGES/install/osx.po +++ b/docs/locale/tr/LC_MESSAGES/install/osx.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:30\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:15\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/osx.po\n" +"X-Crowdin-File-ID: 1321\n" "Language: tr_TR\n" #: ../../install/osx.rst:5 diff --git a/docs/locale/tr/LC_MESSAGES/install/windows.po b/docs/locale/tr/LC_MESSAGES/install/windows.po index e3e5ab5febb..2707d71c5e5 100644 --- a/docs/locale/tr/LC_MESSAGES/install/windows.po +++ b/docs/locale/tr/LC_MESSAGES/install/windows.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:31\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:27\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/windows.po\n" +"X-Crowdin-File-ID: 1323\n" "Language: tr_TR\n" #: ../../install/windows.rst:5 diff --git a/docs/locale/tr/LC_MESSAGES/install/wsl.po b/docs/locale/tr/LC_MESSAGES/install/wsl.po index e041f10b058..c051abc4634 100644 --- a/docs/locale/tr/LC_MESSAGES/install/wsl.po +++ b/docs/locale/tr/LC_MESSAGES/install/wsl.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:31\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:27\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/wsl.po\n" +"X-Crowdin-File-ID: 1325\n" "Language: tr_TR\n" #: ../../install/wsl.rst:5 diff --git a/docs/locale/tr/LC_MESSAGES/use/finishing-a-tournament.po b/docs/locale/tr/LC_MESSAGES/use/finishing-a-tournament.po index a622ea596e5..e8e45a95e53 100644 --- a/docs/locale/tr/LC_MESSAGES/use/finishing-a-tournament.po +++ b/docs/locale/tr/LC_MESSAGES/use/finishing-a-tournament.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:31\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2023-05-25 23:55\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/finishing-a-tournament.po\n" +"X-Crowdin-File-ID: 1327\n" "Language: tr_TR\n" #: ../../use/finishing-a-tournament.rst:5 @@ -26,7 +28,7 @@ msgstr "" #: ../../use/finishing-a-tournament.rst:10 msgid "Tab Release" -msgstr "" +msgstr "Tab Yayınlama" #: ../../use/finishing-a-tournament.rst:12 msgid "Tabs can be released using the *Tab released* option under **Setup** > **Configuration**. Tabbycat offers the following system tabs:" @@ -34,7 +36,7 @@ msgstr "" #: ../../use/finishing-a-tournament.rst:14 msgid "Team Tab" -msgstr "" +msgstr "Takım Tabı" #: ../../use/finishing-a-tournament.rst:15 msgid "Speakers Tab" @@ -42,11 +44,11 @@ msgstr "" #: ../../use/finishing-a-tournament.rst:16 msgid "Replies Tab" -msgstr "" +msgstr "Özet Tabı" #: ../../use/finishing-a-tournament.rst:17 msgid "Motions Tab" -msgstr "" +msgstr "Önerge Tabı" #: ../../use/finishing-a-tournament.rst:19 msgid "You can configure the team, speakers and replies tab to display only a certain number of speakers, *e.g.*, to show only a \"Top 10 Speakers\" tab." diff --git a/docs/locale/tr/LC_MESSAGES/use/importing-data.po b/docs/locale/tr/LC_MESSAGES/use/importing-data.po index f376f53bd47..811cb124938 100644 --- a/docs/locale/tr/LC_MESSAGES/use/importing-data.po +++ b/docs/locale/tr/LC_MESSAGES/use/importing-data.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:31\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:28\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/importing-data.po\n" +"X-Crowdin-File-ID: 1329\n" "Language: tr_TR\n" #: ../../use/importing-data.rst:5 diff --git a/docs/locale/tr/LC_MESSAGES/use/running-a-tournament.po b/docs/locale/tr/LC_MESSAGES/use/running-a-tournament.po index 8c51746a7f8..40232dd2cf7 100644 --- a/docs/locale/tr/LC_MESSAGES/use/running-a-tournament.po +++ b/docs/locale/tr/LC_MESSAGES/use/running-a-tournament.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:31\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2023-05-25 23:55\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/running-a-tournament.po\n" +"X-Crowdin-File-ID: 1331\n" "Language: tr_TR\n" #: ../../use/running-a-tournament.rst:5 @@ -62,7 +64,7 @@ msgstr "" #: ../../use/running-a-tournament.rst:24 msgid "Availability" -msgstr "" +msgstr "Uygunluk" #: ../../use/running-a-tournament.rst:26 msgid "**Set availability.** For each round, you need to set the venue, team and adjudicator availability. If any of those are not marked as available they will not be used within the draw; so this feature is mostly useful for when adjudicators or venues are only available for certain rounds." diff --git a/docs/locale/tr/LC_MESSAGES/use/starting-a-tournament.po b/docs/locale/tr/LC_MESSAGES/use/starting-a-tournament.po index 8002440fb35..f3b56cb31b2 100644 --- a/docs/locale/tr/LC_MESSAGES/use/starting-a-tournament.po +++ b/docs/locale/tr/LC_MESSAGES/use/starting-a-tournament.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-12-31 10:38-0400\n" -"PO-Revision-Date: 2020-03-08 16:31\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-05 17:27\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -12,8 +12,10 @@ msgstr "" "Generated-By: Babel 2.7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/starting-a-tournament.po\n" +"X-Crowdin-File-ID: 1333\n" "Language: tr_TR\n" #: ../../use/starting-a-tournament.rst:5 diff --git a/tabbycat/actionlog/locale/tr/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/tr/LC_MESSAGES/django.po index fbc9abe9b2a..aff11648c65 100644 --- a/tabbycat/actionlog/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/actionlog/locale/tr/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:27\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" "MIME-Version: 1.0\n" @@ -12,310 +12,312 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 920\n" -#: actionlog/apps.py:7 +#: actionlog/apps.py msgid "Action Log" -msgstr "" +msgstr "Eylem Günlüğü" -#: actionlog/models.py:89 +#: actionlog/models.py msgid "Discarded ballot set" -msgstr "" +msgstr "Ballot grubu ıskarta edildi" -#: actionlog/models.py:90 +#: actionlog/models.py msgid "Checked in ballot set" -msgstr "" +msgstr "Ballot grubu teslim edildi" -#: actionlog/models.py:91 +#: actionlog/models.py msgid "Created ballot set" -msgstr "" +msgstr "Ballot grubu oluşturuldu" -#: actionlog/models.py:92 +#: actionlog/models.py msgid "Edited ballot set" -msgstr "" +msgstr "Ballot grubu düzenlendi" -#: actionlog/models.py:93 +#: actionlog/models.py msgid "Confirmed ballot set" -msgstr "" +msgstr "Ballot grubu onaylandı" -#: actionlog/models.py:94 +#: actionlog/models.py msgid "Submitted ballot set from the public form" -msgstr "" +msgstr "Seyirci formundan ballot grubu gönderildi" -#: actionlog/models.py:95 +#: actionlog/models.py msgid "Submitted feedback from the public form" -msgstr "" +msgstr "Seyirci formundan geri bildirim gönderildi" -#: actionlog/models.py:96 +#: actionlog/models.py msgid "Saved feedback" -msgstr "" +msgstr "Geri bildirim kaydedildi" -#: actionlog/models.py:97 +#: actionlog/models.py msgid "Edited adjudicator base score" -msgstr "" +msgstr "Jüri temel puanı düzelendi" -#: actionlog/models.py:98 +#: actionlog/models.py msgid "Set adjudicator note" -msgstr "" +msgstr "Jüri notu ayarlandı" -#: actionlog/models.py:99 +#: actionlog/models.py msgid "Saved adjudicator allocation" -msgstr "" +msgstr "Jüri tahsisi kaydedildi" -#: actionlog/models.py:100 +#: actionlog/models.py msgid "Auto-allocated adjudicators" -msgstr "" +msgstr "Jüriler otomatik atandı" -#: actionlog/models.py:101 +#: actionlog/models.py msgid "Saved a room manual edit" -msgstr "" +msgstr "Manuel düzenlemiş oda kaydedildi" -#: actionlog/models.py:102 +#: actionlog/models.py msgid "Auto-allocated rooms" -msgstr "" +msgstr "Odalar otomatik atıldı" -#: actionlog/models.py:103 +#: actionlog/models.py msgid "Edited room categories" -msgstr "" +msgstr "Oda kategorileri düzenlendi" -#: actionlog/models.py:104 +#: actionlog/models.py msgid "Edited room constraints" -msgstr "" +msgstr "Oda kısıtlamaları düzenlendi" -#: actionlog/models.py:105 +#: actionlog/models.py msgid "Created draw" -msgstr "" +msgstr "Kura oluşturuldu" -#: actionlog/models.py:106 +#: actionlog/models.py msgid "Confirmed draw" -msgstr "" +msgstr "Kura onaylandı" -#: actionlog/models.py:107 +#: actionlog/models.py msgid "Regenerated draw" -msgstr "" +msgstr "Kura yenilendi" -#: actionlog/models.py:108 +#: actionlog/models.py msgid "Released draw" -msgstr "" +msgstr "Kura yayınlandı" -#: actionlog/models.py:109 +#: actionlog/models.py msgid "Unreleased draw" -msgstr "" +msgstr "Kura yayından çekildi" -#: actionlog/models.py:110 +#: actionlog/models.py msgid "Saved a matchup manual edit" -msgstr "" +msgstr "Manuel eşleşme kaydedildi" -#: actionlog/models.py:111 +#: actionlog/models.py msgid "Saved the sides status of a matchup" -msgstr "" +msgstr "Eşleşmenin tarafları kaydedildi" -#: actionlog/models.py:112 +#: actionlog/models.py msgid "Saved divisions" msgstr "" -#: actionlog/models.py:113 +#: actionlog/models.py msgid "Added/edited motion" -msgstr "" +msgstr "Önerge eklendi/düzenlendi" -#: actionlog/models.py:114 +#: actionlog/models.py msgid "Released motions" -msgstr "" +msgstr "Önergeler yayınlandı" -#: actionlog/models.py:115 +#: actionlog/models.py msgid "Unreleased motions" -msgstr "" +msgstr "Önergeler yayından çekildi" -#: actionlog/models.py:116 +#: actionlog/models.py msgid "Auto-prioritized debate importance" -msgstr "" +msgstr "Maç önemi otomatik belirlendi" -#: actionlog/models.py:117 +#: actionlog/models.py msgid "Edited debate importance" -msgstr "" +msgstr "Maç önemi düzenlendi" -#: actionlog/models.py:118 +#: actionlog/models.py msgid "Changed adjudicator breaking status" -msgstr "" +msgstr "Jüri break olma durumu değiştirildi" -#: actionlog/models.py:119 +#: actionlog/models.py msgid "Edited break eligibility" -msgstr "" +msgstr "Break uygunluğu değiştirildi" -#: actionlog/models.py:120 +#: actionlog/models.py msgid "Edited break categories" -msgstr "" +msgstr "Break kategorileri düzenlendi" -#: actionlog/models.py:121 +#: actionlog/models.py msgid "Generated the team break for all categories" -msgstr "" +msgstr "Tüm kategoriler için takım breaki oluşturuldu" -#: actionlog/models.py:122 +#: actionlog/models.py msgid "Edited breaking team remarks and updated all team breaks" -msgstr "" +msgstr "Break olan takım açıklamaları düzenlendi ve tüm takım breakleri güncellendi" -#: actionlog/models.py:123 +#: actionlog/models.py msgid "Edited breaking team remarks and updated this team break" -msgstr "" +msgstr "Break olan takım açıklamaları düzenlendi ve bu takım breaki güncellendi" -#: actionlog/models.py:124 +#: actionlog/models.py msgid "Edited breaking team remarks" -msgstr "" +msgstr "Break olan takımların açıkmaları düzenlendi" -#: actionlog/models.py:125 +#: actionlog/models.py msgid "Set start time" -msgstr "" +msgstr "Başlangıç zamanını ayarlandı" -#: actionlog/models.py:126 +#: actionlog/models.py msgid "Advanced the current round to" -msgstr "" +msgstr "Mevcut tur belirtilen tura ilerletildi:" -#: actionlog/models.py:127 +#: actionlog/models.py msgid "Marked round as completed" -msgstr "" +msgstr "Tur tamamlandı olarak işaretledi" -#: actionlog/models.py:128 +#: actionlog/models.py msgid "Edited teams availability" -msgstr "" +msgstr "Ekiplerin kullanılabilirliği düzenlendi" -#: actionlog/models.py:129 +#: actionlog/models.py msgid "Edited adjudicators availability" -msgstr "" +msgstr "Jürilerin kullanılabilirliği düzenlendi" -#: actionlog/models.py:130 +#: actionlog/models.py msgid "Edited room availability" -msgstr "" +msgstr "Oda müsaitliği düzenlendi" -#: actionlog/models.py:131 +#: actionlog/models.py msgid "Edited tournament options" -msgstr "" +msgstr "Turnuva seçenekleri düzenlendi" -#: actionlog/models.py:132 +#: actionlog/models.py msgid "Edited speaker category eligibility" -msgstr "" +msgstr "Konuşmacı kategorisi uygunluğu düzenlendi" -#: actionlog/models.py:133 +#: actionlog/models.py msgid "Edited speaker categories" -msgstr "" +msgstr "Konuşmacı kategorileri düzenlendi" -#: actionlog/models.py:134 +#: actionlog/models.py msgid "Imported institutions using the simple importer" -msgstr "" +msgstr "Basit aktarma ile kurumlar içe aktarıldı" -#: actionlog/models.py:135 +#: actionlog/models.py msgid "Imported rooms using the simple importer" -msgstr "" +msgstr "Basit aktarma kullanılarak odalar içe aktarıldı" -#: actionlog/models.py:136 +#: actionlog/models.py msgid "Imported teams using the simple importer" -msgstr "" +msgstr "Basit aktarma kullanılarak takımlar içe aktarıldı" -#: actionlog/models.py:137 +#: actionlog/models.py msgid "Imported adjudicators using the simple importer" -msgstr "" +msgstr "Basit aktarma kullanılarak jüriler içe aktarıldı" -#: actionlog/models.py:138 +#: actionlog/models.py msgid "Updated adjudicator scores in bulk" -msgstr "" +msgstr "Jüri puanları toplu güncellendi" -#: actionlog/models.py:139 +#: actionlog/models.py msgid "Edited adjudicator-team conflicts" -msgstr "" +msgstr "Jüri-takım conflictleri düzenlendi" -#: actionlog/models.py:140 +#: actionlog/models.py msgid "Edited adjudicator-adjudicator conflicts" -msgstr "" +msgstr "Jüri-jüri conflictleri düzenlendi" -#: actionlog/models.py:141 +#: actionlog/models.py msgid "Edited adjudicator-institution conflicts" -msgstr "" +msgstr "Jüri-kurum conflictleri düzenlendi" -#: actionlog/models.py:142 +#: actionlog/models.py msgid "Edited team-institution conflicts" -msgstr "" +msgstr "Takım-kurum conflictleri düzenlendi" -#: actionlog/models.py:143 +#: actionlog/models.py msgid "Generated check in identifiers for speakers" -msgstr "" +msgstr "Konuşmacılar için giriş kimlikleri oluşturuldu" -#: actionlog/models.py:144 +#: actionlog/models.py msgid "Generated check in identifiers for adjudicators" -msgstr "" +msgstr "Jüriler için giriş kimlikleri oluşturuldu" -#: actionlog/models.py:145 +#: actionlog/models.py msgid "Generated check in identifiers for rooms" -msgstr "" +msgstr "Odalar için giriş kimlikleri oluşturuldu" -#: actionlog/models.py:146 +#: actionlog/models.py msgid "Created preformed panels" -msgstr "" +msgstr "Önceden kurulmuş paneller oluşturuldu" -#: actionlog/models.py:147 +#: actionlog/models.py msgid "Auto-prioritized preformed panels" -msgstr "" +msgstr "Önceden kurulmuş paneller otomatik önceliklendirildi" -#: actionlog/models.py:148 +#: actionlog/models.py msgid "Edited preformed panel importance" -msgstr "" +msgstr "Önceden kurulmuş panel önemi düzenlendi" -#: actionlog/models.py:149 +#: actionlog/models.py msgid "Auto-allocated adjudicators to preformed panels" -msgstr "" +msgstr "Önceden kurulmuş panellere otomatik jüriler atandı" -#: actionlog/models.py:150 +#: actionlog/models.py msgid "Edited preformed panel adjudicator" -msgstr "" +msgstr "Önceden kurulmuş panel jürileri düzenlendi" -#: actionlog/models.py:151 +#: actionlog/models.py msgid "Auto-allocated preformed panels to debates" -msgstr "" +msgstr "Önceden kurulmuş paneller maçlara otomatik atandı" -#: actionlog/models.py:155 +#: actionlog/models.py msgid "type" -msgstr "" +msgstr "tür" -#: actionlog/models.py:157 +#: actionlog/models.py msgid "timestamp" -msgstr "" +msgstr "Zaman damgası" -#: actionlog/models.py:160 +#: actionlog/models.py msgid "user" msgstr "kullanıcı" -#: actionlog/models.py:162 +#: actionlog/models.py msgid "IP address" msgstr "" -#: actionlog/models.py:166 +#: actionlog/models.py msgid "tournament" msgstr "turnuva" -#: actionlog/models.py:168 +#: actionlog/models.py msgid "round" msgstr "tur" -#: actionlog/models.py:172 +#: actionlog/models.py msgid "content type" -msgstr "" +msgstr "içerik türü" -#: actionlog/models.py:174 +#: actionlog/models.py msgid "object ID" -msgstr "" +msgstr "nesne kimliği" -#: actionlog/models.py:180 +#: actionlog/models.py msgid "action log" -msgstr "" +msgstr "eylem günlüğü" -#: actionlog/models.py:181 +#: actionlog/models.py msgid "action log entries" -msgstr "" +msgstr "eylem günlüğü girişleri" -#: actionlog/models.py:189 +#: actionlog/models.py msgid "All log entries require at least one of a user and an IP address." -msgstr "" +msgstr "Tüm günlük girişleri en az bir kullanıcı ve bir IP adresi gerektirir." -#: actionlog/models.py:228 +#: actionlog/models.py msgid "anonymous" -msgstr "" +msgstr "anonim" diff --git a/tabbycat/adjallocation/locale/tr/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/tr/LC_MESSAGES/django.po index d9bc8edff97..687f8ef63e0 100644 --- a/tabbycat/adjallocation/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/adjallocation/locale/tr/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:26\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" "MIME-Version: 1.0\n" @@ -12,439 +12,440 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 922\n" -#: adjallocation/allocators/base.py:34 +#: adjallocation/allocators/base.py msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." -msgstr "" +msgstr "Uygun jüri bulunmamaktadır. Otomatik atamadan önce bu tur için uygun olarak işaretlenmiş jüriler olduğundan emin olun." -#: adjallocation/allocators/hungarian.py:50 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)'un puanı, izin verilen maksimum jüri puanından (%(score).1f) büyük." +msgstr[1] "%(count)'un puanları, izin verilen maksimum jüri puanından (%(score).1f) büyük." -#: adjallocation/allocators/hungarian.py:59 +#: adjallocation/allocators/hungarian.py #, python-format msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)'un puanı, izin verilen minimum jüri puanından (%(score).1f) küçük." +msgstr[1] "%(count)'un puanları, izin verilen minimum jüri puanından (%(score).1f) küçük." -#: adjallocation/allocators/hungarian.py:111 +#: adjallocation/allocators/hungarian.py msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." -msgstr "" +msgstr "Başkan veya panelist olmaya uygun jüri yok. \"Başkan veya panelist olmak için minimum geri bildirim puanı\" ayarını, bazı jürilerin mevcut puanlarından daha düşük bir değerle değiştirin ve yeniden deneyin." -#: adjallocation/allocators/hungarian.py:119 +#: adjallocation/allocators/hungarian.py msgid "There are no debates for this round. Maybe you haven't created a draw yet?" -msgstr "" +msgstr "Bu tur için herhangi bir maç yok. Belki de henüz bir kura oluşturmadınız?" -#: adjallocation/allocators/hungarian.py:166 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." -msgstr "" +msgstr "%(debate_count) maç var, ancak sadece %(adj_count) oy veren jüri var." -#: adjallocation/allocators/hungarian.py:172 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." -msgstr "" +msgstr "%(panel_debates) panel maçı var, ancak yalnızca %(panellists) mevcut panelistleri vardır (less than %(needed)s)." -#: adjallocation/allocators/hungarian.py:282 +#: adjallocation/allocators/hungarian.py #, python-format msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." -msgstr "" +msgstr "%(debate_count) maç var, ancak sadece %(voting_count) oy veren jüri var." -#: adjallocation/apps.py:7 +#: adjallocation/apps.py msgid "Adjudicator Allocation" -msgstr "" +msgstr "Jüri Tahsisi" -#: adjallocation/consumers.py:59 +#: adjallocation/consumers.py msgid "Draw is already released, unrelease draw to redo auto-allocations." -msgstr "" +msgstr "Kura zaten yayınlanmıştır, otomatik tahsisleri yeniden yapmak için kurayı yayından kaldırın." -#: adjallocation/consumers.py:63 +#: adjallocation/consumers.py msgid "Draw is not confirmed, confirm draw to run auto-allocations." -msgstr "" +msgstr "Kura onaylanmadı, otomatik tahsisleri çalıştırmak için kurayı onaylayın." -#: adjallocation/consumers.py:69 +#: adjallocation/consumers.py msgid "There are no preformed panels available to allocate." -msgstr "" +msgstr "Tahsis edilebilecek önceden kurulmuş panel yok." -#: adjallocation/consumers.py:83 +#: adjallocation/consumers.py msgid "Successfully auto-allocated preformed panels to debates." -msgstr "" +msgstr "Önceden kurulmuş paneller maçlara başarıyla otomatik olarak tahsis edildi." -#: adjallocation/consumers.py:109 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Jüriler maçlara başarıyla otomatik olarak tahsis edildi. Ancak, bir uyarı var:" +msgstr[1] "Jüriler maçlara başarıyla otomatik olarak tahsis edildi. Ancak, %(count)d uyarı var:" -#: adjallocation/consumers.py:115 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to debates." -msgstr "" +msgstr "Jüriler maçlara başarıyla otomatik olarak tahsis edildi." -#: adjallocation/consumers.py:131 +#: adjallocation/consumers.py msgid "There aren't any panels to fill. Create panels first." -msgstr "" +msgstr "Doldurulacak panel yok. Önce panel oluşturun." -#: adjallocation/consumers.py:155 +#: adjallocation/consumers.py #, python-format msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Jüriler panellere başarıyla otomatik olarak tahsis edildi. Ancak, bir uyarı var:" +msgstr[1] "Jüriler panellere başarıyla otomatik olarak tahsis edildi. Ancak, %(count)d uyarı var:" -#: adjallocation/consumers.py:161 +#: adjallocation/consumers.py msgid "Successfully auto-allocated adjudicators to preformed panels." -msgstr "" +msgstr "Jüriler panellere başarıyla otomatik olarak tahsis edildi." -#: adjallocation/consumers.py:207 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so debate importances can't be calculated." -msgstr "" +msgstr "'Genel' olarak ayarlanmış bir break kategoriniz olmadığından maç önemleri hesaplanamıyor." -#: adjallocation/consumers.py:215 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised debates." -msgstr "" +msgstr "Maçlar otomatik önceliklendirildi." -#: adjallocation/consumers.py:237 +#: adjallocation/consumers.py msgid "You have no break category set as 'is general' so panel importances can't be calculated." -msgstr "" +msgstr "'Genel' olarak ayarlanmış bir break kategoriniz olmadığından panel önemleri hesaplanamıyor." -#: adjallocation/consumers.py:246 +#: adjallocation/consumers.py msgid "Succesfully auto-prioritised preformed panels." -msgstr "" +msgstr "Önceden kurulmuş paneller otomatik önceliklendirildi." -#: adjallocation/consumers.py:264 +#: adjallocation/consumers.py msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." -msgstr "" +msgstr "Bu ilk tur olduğundan, önceden kurulmuş panellerin aşama ve break ihtimali gösterilmiyor." -#: adjallocation/consumers.py:267 +#: adjallocation/consumers.py msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." -msgstr "" +msgstr "Önceki turun kurası yok, bu nedenle önceden kurulmuş panellerin aşama ve break ihtimali gösterilemiyor." -#: adjallocation/consumers.py:270 +#: adjallocation/consumers.py msgid "Succesfully created new preformed panels for this round." -msgstr "" +msgstr "Bu tur için yeni önceden kurulmuş paneller oluşturuldu." -#: adjallocation/models.py:18 +#: adjallocation/models.py msgid "chair" msgstr "başkan" -#: adjallocation/models.py:19 +#: adjallocation/models.py msgid "panellist" -msgstr "" +msgstr "panelist" -#: adjallocation/models.py:20 +#: adjallocation/models.py msgid "trainee" -msgstr "" +msgstr "acemi" -#: adjallocation/models.py:26 +#: adjallocation/models.py msgid "debate" msgstr "maç" -#: adjallocation/models.py:28 adjallocation/models.py:48 -#: adjallocation/models.py:80 adjallocation/models.py:169 +#: adjallocation/models.py msgid "adjudicator" msgstr "jüri" -#: adjallocation/models.py:30 adjallocation/models.py:171 +#: adjallocation/models.py msgid "type" -msgstr "" +msgstr "tür" -#: adjallocation/models.py:31 +#: adjallocation/models.py msgid "available?" -msgstr "" +msgstr "uygun mu?" -#: adjallocation/models.py:34 +#: adjallocation/models.py msgid "debate adjudicator" -msgstr "" +msgstr "Maç jürisi" -#: adjallocation/models.py:35 +#: adjallocation/models.py msgid "debate adjudicators" -msgstr "" +msgstr "Maç jürileri" -#: adjallocation/models.py:50 adjallocation/models.py:95 +#: adjallocation/models.py msgid "team" msgstr "takım" -#: adjallocation/models.py:53 +#: adjallocation/models.py msgid "adjudicator-team conflict" -msgstr "" +msgstr "jüri-takım conflicti" -#: adjallocation/models.py:54 +#: adjallocation/models.py msgid "adjudicator-team conflicts" -msgstr "" +msgstr "jüri-takım conflictleri" -#: adjallocation/models.py:64 +#: adjallocation/models.py msgid "adjudicator 1" msgstr "jüri 1" -#: adjallocation/models.py:67 +#: adjallocation/models.py msgid "adjudicator 2" msgstr "jüri 2" -#: adjallocation/models.py:70 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflict" -msgstr "" +msgstr "jüri-jüri conflicti" -#: adjallocation/models.py:71 +#: adjallocation/models.py msgid "adjudicator-adjudicator conflicts" -msgstr "" +msgstr "jüri-jüri conflictleri" -#: adjallocation/models.py:82 adjallocation/models.py:97 +#: adjallocation/models.py msgid "institution" -msgstr "" +msgstr "kurum" -#: adjallocation/models.py:85 +#: adjallocation/models.py msgid "adjudicator-institution conflict" -msgstr "" +msgstr "jüri-kurum conflicti" -#: adjallocation/models.py:86 +#: adjallocation/models.py msgid "adjudicator-institution conflicts" -msgstr "" +msgstr "jüri-kurum conflictileri" -#: adjallocation/models.py:100 +#: adjallocation/models.py msgid "team-institution conflict" -msgstr "" +msgstr "takım-kurum conflicti" -#: adjallocation/models.py:101 +#: adjallocation/models.py msgid "team-institution conflicts" -msgstr "" +msgstr "takım-kurum conflictileri" -#: adjallocation/models.py:114 +#: adjallocation/models.py msgid "round" msgstr "tur" -#: adjallocation/models.py:116 +#: adjallocation/models.py msgid "importance" -msgstr "" +msgstr "önem" -#: adjallocation/models.py:119 +#: adjallocation/models.py msgid "minimum bracket" -msgstr "" +msgstr "minimum aşama" -#: adjallocation/models.py:120 +#: adjallocation/models.py msgid "Estimate of the lowest bracket for which this panel might be" -msgstr "" +msgstr "Bu panelin mümkün en düşük aşamasının tahmini" -#: adjallocation/models.py:122 +#: adjallocation/models.py msgid "maximum bracket" -msgstr "" +msgstr "maksimum aşama" -#: adjallocation/models.py:123 +#: adjallocation/models.py msgid "Estimate of the highest bracket for which this panel might be" -msgstr "" +msgstr "Bu panelin mümkün en yüksek aşamasının tahmini" -#: adjallocation/models.py:125 +#: adjallocation/models.py msgid "room rank" -msgstr "" +msgstr "oda sıralaması" -#: adjallocation/models.py:126 +#: adjallocation/models.py msgid "Sequential number of panel, not used in any algorithms" -msgstr "" +msgstr "Sıralı panel sayısı, hiçbir algoritmada kullanılmaz" -#: adjallocation/models.py:128 +#: adjallocation/models.py msgid "liveness" -msgstr "" +msgstr "break ihtimali" -#: adjallocation/models.py:129 +#: adjallocation/models.py msgid "Number of categories this room is expected to be live for" -msgstr "" +msgstr "Bu odanın break ihtimali olması beklenen kategori sayısı" -#: adjallocation/models.py:132 +#: adjallocation/models.py msgid "preformed panel" -msgstr "" +msgstr "önceden kurulmuş panel" -#: adjallocation/models.py:133 +#: adjallocation/models.py msgid "preformed panels" -msgstr "" +msgstr "önceden kurulmuş paneller" -#: adjallocation/models.py:167 +#: adjallocation/models.py msgid "panel" msgstr "panel" -#: adjallocation/models.py:174 +#: adjallocation/models.py msgid "preformed panel adjudicator" -msgstr "" +msgstr "önceden kurulmuş panel jürisi" -#: adjallocation/models.py:175 +#: adjallocation/models.py msgid "preformed panel adjudicators" -msgstr "" +msgstr "önceden kurulmuş panel jürileri" -#: adjallocation/preformed/base.py:41 +#: adjallocation/preformed/base.py msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." -msgstr "" +msgstr "Kullanılacak önceden kurulmuş panel yok. Bu tur için önceden kurulmuş panel tahsis ettiniz mi? Etmediyseniz, bunun yerine yalnızca otomatik jüri tahsis etmeyi deneyin." -#: adjallocation/templates/preformed_index.html:5 adjallocation/views.py:128 +#: adjallocation/templates/preformed_index.html adjallocation/views.py msgid "Preformed Panels" -msgstr "" +msgstr "Önceden kurulmuş paneller" -#: adjallocation/templates/preformed_index.html:10 +#: adjallocation/templates/preformed_index.html msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." -msgstr "" +msgstr "Önceden kurulmuş panel, kura oluşturulmadan önce bir tur için belirtilen tanımlanmış bir jüri grubudur. Daha sonra normal jüri tahsis işlemi sırasında bu panelleri manuel veya otomatik olarak kullanabilirsiniz. Bu, tahsisleri daha hızlı hale getirebilir veya daha iyi hazırlanmış hakem panelleri oluşturmanıza olanak tanır." -#: adjallocation/templates/preformed_index.html:16 +#: adjallocation/templates/preformed_index.html msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." -msgstr "" +msgstr "Yalnızca o tur için \"kullanılabilir\" olarak işaretlenmiş jürilerin bir tur için tahsis edilebileceğini unutmayın, bu nedenle müsaitlik durumlarını önceden ayarlamanız gerekebilir." -#: adjallocation/templates/preformed_index.html:37 +#: adjallocation/templates/preformed_index.html #, python-format msgid "Edit Preformed Panels for %(round)s" -msgstr "" +msgstr "%(round)s için önceden kurulmuş panelleri düzenle" -#: adjallocation/utils.py:28 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s (personal)" -msgstr "" +msgstr "Conflict: %(adjudicator)s & %(team)s (personal)" -#: adjallocation/utils.py:34 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" -msgstr "" +msgstr "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" -#: adjallocation/utils.py:46 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" -msgstr "" +msgstr "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" -#: adjallocation/utils.py:52 +#: adjallocation/utils.py #, python-format msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" -msgstr "" +msgstr "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" -#: adjallocation/views.py:35 +#: adjallocation/views.py msgid "Male" msgstr "Erkek" -#: adjallocation/views.py:36 +#: adjallocation/views.py msgid "Female" -msgstr "Fişi" +msgstr "Kadın" -#: adjallocation/views.py:37 +#: adjallocation/views.py msgid "Other" msgstr "Diğer" -#: adjallocation/views.py:38 +#: adjallocation/views.py msgid "Unknown" -msgstr "" +msgstr "Bilinmeyen" -#: adjallocation/views.py:90 +#: adjallocation/views.py msgid "Edit Allocation" -msgstr "" +msgstr "Tahsisi Düzenle" -#: adjallocation/views.py:105 +#: adjallocation/views.py msgid "Edit Panels" -msgstr "" +msgstr "Panelleri Düzenle" -#: adjallocation/views.py:111 +#: adjallocation/views.py msgid "Return to Panels Overview" -msgstr "" +msgstr "Panellere Genel Bakış sayfasına geri dön" -#: adjallocation/views.py:172 +#: adjallocation/views.py msgid "Adjudicator-Team Conflicts" -msgstr "" +msgstr "jüri-takım conflictleri" -#: adjallocation/views.py:173 +#: adjallocation/views.py msgid "Save Adjudicator-Team Conflicts" -msgstr "" +msgstr "jüri-takım conflictlerini kaydet" -#: adjallocation/views.py:198 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-team conflict." msgid_plural "Saved %(count)d adjudicator-team conflicts." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d jüri-takım conflicti kaydedildi" +msgstr[1] "%(count)d jüri-takım conflictleri kaydedildi" -#: adjallocation/views.py:204 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-team conflict." msgid_plural "Deleted %(count)d adjudicator-team conflicts." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d jüri-takım conflicti silindi" +msgstr[1] "%(count)d jüri-takım conflictleri silindi" -#: adjallocation/views.py:209 +#: adjallocation/views.py msgid "No changes were made to adjudicator-team conflicts." -msgstr "" +msgstr "Jüri-takım conflictlerinde herhangi bir değişiklik yapılmamıştır." -#: adjallocation/views.py:216 +#: adjallocation/views.py msgid "Adjudicator-Adjudicator Conflicts" -msgstr "" +msgstr "jüri-jüri conflictleri" -#: adjallocation/views.py:217 +#: adjallocation/views.py msgid "Save Adjudicator-Adjudicator Conflicts" -msgstr "" +msgstr "jüri-jüri conflictlerini kaydet" -#: adjallocation/views.py:238 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-adjudicator conflict." msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d jüri-jüri conflicti kaydedildi." +msgstr[1] "%(count)d jüri-jüri conflictleri kaydedildi." -#: adjallocation/views.py:244 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-adjudicator conflict." msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d jüri-jüri conflicti silindi." +msgstr[1] "%(count)d jüri-jüri conflictileri silindi." -#: adjallocation/views.py:249 +#: adjallocation/views.py msgid "No changes were made to adjudicator-adjudicator conflicts." -msgstr "" +msgstr "Jüri-jüri conflictlerinde herhangi bir değişiklik yapılmamıştır." -#: adjallocation/views.py:256 +#: adjallocation/views.py msgid "Adjudicator-Institution Conflicts" -msgstr "" +msgstr "jüri-kurum conflictileri" -#: adjallocation/views.py:257 +#: adjallocation/views.py msgid "Save Adjudicator-Institution Conflicts" -msgstr "" +msgstr "jüri-kurum conflictilerini kaydet" -#: adjallocation/views.py:277 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d adjudicator-institution conflict." msgid_plural "Saved %(count)d adjudicator-institution conflicts." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d jüri-kurum conflicti kaydedildi." +msgstr[1] "%(count)d jüri-kurum conflictleri kaydedildi." -#: adjallocation/views.py:283 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d adjudicator-institution conflict." msgid_plural "Deleted %(count)d adjudicator-institution conflicts." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d jüri-kurum conflicti silindi." +msgstr[1] "%(count)d jüri-kurum conflictleri silindi." -#: adjallocation/views.py:288 +#: adjallocation/views.py msgid "No changes were made to adjudicator-institution conflicts." -msgstr "" +msgstr "jüri-kurum conflictlerinde herhangi bir değişiklik yapılmamıştır." -#: adjallocation/views.py:295 +#: adjallocation/views.py msgid "Team-Institution Conflicts" -msgstr "" +msgstr "takım-kurum conflictileri" -#: adjallocation/views.py:296 +#: adjallocation/views.py msgid "Save Team-Institution Conflicts" -msgstr "" +msgstr "takım-kurum conflictileri Kaydetme" -#: adjallocation/views.py:319 +#: adjallocation/views.py #, python-format msgid "Saved %(count)d team-institution conflict." msgid_plural "Saved %(count)d team-institution conflicts." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d takım-kurum conflicti kaydedildi." +msgstr[1] "%(count)d takım-kurum conflictleri kaydedildi." -#: adjallocation/views.py:325 +#: adjallocation/views.py #, python-format msgid "Deleted %(count)d team-institution conflict." msgid_plural "Deleted %(count)d team-institution conflicts." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d takım-kurum conflicti silindi." +msgstr[1] "%(count)d takım-kurum conflictleri silindi." -#: adjallocation/views.py:330 +#: adjallocation/views.py msgid "No changes were made to team-institution conflicts." -msgstr "" +msgstr "ekip-kurum conflictlerinde herhangi bir değişiklik yapılmamıştır." diff --git a/tabbycat/adjfeedback/locale/tr/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/tr/LC_MESSAGES/django.po index 51a61e8310b..bd8b63a8eb7 100644 --- a/tabbycat/adjfeedback/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/adjfeedback/locale/tr/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:26\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" "MIME-Version: 1.0\n" @@ -12,937 +12,955 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 924\n" -#: adjfeedback/admin.py:43 +#: adjfeedback/admin.py msgid "Integer scales must have a minimum and maximum" -msgstr "" +msgstr "Tamsayı ölçeklerinin minimum ve maksimumu olmalıdır" -#: adjfeedback/admin.py:68 adjfeedback/admin.py:126 +#: adjfeedback/admin.py msgid "target" -msgstr "" +msgstr "hedef" -#: adjfeedback/admin.py:69 adjfeedback/admin.py:127 adjfeedback/models.py:220 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source adjudicator" -msgstr "" +msgstr "kaynak jüri" -#: adjfeedback/admin.py:70 adjfeedback/admin.py:128 adjfeedback/models.py:222 +#: adjfeedback/admin.py adjfeedback/models.py msgid "source team" -msgstr "" +msgstr "kaynak ekip" -#: adjfeedback/admin.py:84 +#: adjfeedback/admin.py msgid "Target" -msgstr "" +msgstr "Hedef" -#: adjfeedback/admin.py:85 adjfeedback/admin.py:149 +#: adjfeedback/admin.py msgid "Source" -msgstr "" +msgstr "Kaynak" -#: adjfeedback/admin.py:167 +#: adjfeedback/admin.py +msgid "Feedback timestamp and version" +msgstr "Geri bildirim zaman damgası ve sürümü" + +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "%(timestamp)s (version %(version)s)" + +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "1 geri bildirim gönderimi onaylandı olarak işaretlendi. Bunun, diğer geri bildirim gönderimlerinin onaylanmadı olarak işaretlenmesine neden olabileceğini unutmayın." +msgstr[1] "%(count)d geri bildirim gönderimi onaylandı olarak işaretlendi. Bunun, diğer geri bildirim gönderimlerinin onaylanmadı olarak işaretlenmesine neden olabileceğini unutmayın." -#: adjfeedback/admin.py:179 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "1 geri bildirim gönderimi onaylandı olarak işaretlenmemiştir, çünkü muhtemelen onunla çakışan diğer geri bildirim gönderimleri de onaylandı olarak işaretlenmiştir." +msgstr[1] "%(count)d geri bildirim gönderimi onaylandı olarak işaretlenmemiştir, çünkü muhtemelen onunla çakışan diğer geri bildirim gönderimleri de onaylandı olarak işaretlenmiştir." -#: adjfeedback/admin.py:192 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission was marked as unconfirmed." msgid_plural "%(count)d feedback submissions were marked as unconfirmed." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "1 geri bildirim gönderimi onaylanmadı olarak işaretlendi." +msgstr[1] "%(count)d geri bildirim gönderimi onaylanmadı olarak işaretlendi." -#: adjfeedback/admin.py:202 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now ignored." msgid_plural "%(count)d feedback submissions are now ignored." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "1 geri bildirim artık gizli." +msgstr[1] "%(count)d geri bildirim artık gizli." -#: adjfeedback/admin.py:212 +#: adjfeedback/admin.py #, python-format msgid "1 feedback submission is now recognized." msgid_plural "%(count)d feedback submissions are now recognized." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "1 geri bildirim artık tanınıyor." +msgstr[1] "%(count)d geri bildirim artık tanınıyor." -#: adjfeedback/apps.py:7 +#: adjfeedback/apps.py msgid "Adjudicator Feedback" msgstr "Jüri Geri Bildirimi" -#: adjfeedback/forms.py:25 +#: adjfeedback/forms.py msgid "chair" msgstr "başkan" -#: adjfeedback/forms.py:26 +#: adjfeedback/forms.py msgid "solo" -msgstr "" +msgstr "Solo" -#: adjfeedback/forms.py:27 +#: adjfeedback/forms.py msgid "panellist" -msgstr "" +msgstr "panelist" -#: adjfeedback/forms.py:28 +#: adjfeedback/forms.py msgid "trainee" -msgstr "" +msgstr "acemi" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:56 +#: adjfeedback/forms.py msgid "Yes" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:58 +#: adjfeedback/forms.py msgid "No" msgstr "" #. Translators: Please leave this blank, it should be left for the base Django translations. -#: adjfeedback/forms.py:73 adjfeedback/forms.py:82 +#: adjfeedback/forms.py msgid "This field is required." msgstr "" -#: adjfeedback/forms.py:173 +#: adjfeedback/forms.py #, python-format msgid "Overall score (%(min)d=worst; %(max)d=best)*" -msgstr "" +msgstr "Genel puan (%(min)d=worst; %(max)d=best)*" -#: adjfeedback/forms.py:185 +#: adjfeedback/forms.py msgid "Ignored" -msgstr "" +msgstr "Gizli" #. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" -#: adjfeedback/forms.py:244 adjfeedback/forms.py:307 +#: adjfeedback/forms.py msgid "Submitted - " -msgstr "" +msgstr "- Gönderildi" #. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" -#: adjfeedback/forms.py:245 adjfeedback/forms.py:312 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (%(adjpos)s)" -msgstr "" +msgstr "%(name)s (%(adjpos)s)" -#: adjfeedback/forms.py:268 adjfeedback/forms.py:342 +#: adjfeedback/forms.py msgid "-- Adjudicators --" msgstr "-- Jüriler --" -#: adjfeedback/forms.py:285 +#: adjfeedback/forms.py msgid "Adjudicator this feedback is about" -msgstr "" +msgstr "Hakem bu geri bildirim şunu hakkında:" -#: adjfeedback/forms.py:309 +#: adjfeedback/forms.py #, python-format msgid "%(name)s" msgstr "" -#: adjfeedback/forms.py:315 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (chair gave oral)" -msgstr "" +msgstr "%(name)s (başkan karar sebebi açıkladı)" -#: adjfeedback/forms.py:317 +#: adjfeedback/forms.py #, python-format msgid "%(name)s (panellist gave oral as chair rolled)" -msgstr "" +msgstr "%(name)s (panelist başkanın verdiği rolle karar sebebi açıkladı)" -#: adjfeedback/forms.py:408 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) didn't have a score" -msgstr "" +msgstr "Bu satırın (% (adjudicator)s için) bir puanı yoktu" -#: adjfeedback/forms.py:413 +#: adjfeedback/forms.py #, python-format msgid "This line (for %(adjudicator)s) had too many columns" -msgstr "" +msgstr "Bu satırda (%(adjudicator)s için) çok fazla sütun vardı" -#: adjfeedback/forms.py:426 +#: adjfeedback/forms.py #, python-format msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." -msgstr "" +msgstr "\"%(adjudicator)s\" adında birkaç jüri var, bu nedenle puanlarını güncellemek için toplu dışa aktarım kullanamazsınız. Lütfen bunun yerine Geri Bildirim Genel Bakış sayfasını kullanın." -#: adjfeedback/forms.py:432 +#: adjfeedback/forms.py #, python-format msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" -msgstr "" +msgstr "Bu turnuvada \"%(adjudicator)s\" isimli bir jüri bulunmamaktadır." -#: adjfeedback/forms.py:440 +#: adjfeedback/forms.py #, python-format msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" -msgstr "" +msgstr "%(adjudicator)s'un puanı \"%(score)s\" bir sayı değildir." -#: adjfeedback/forms.py:455 +#: adjfeedback/forms.py msgid "There were no scores to import." -msgstr "" +msgstr "İçe aktarılacak puan yoktu." -#: adjfeedback/models.py:12 adjfeedback/models.py:215 +#: adjfeedback/models.py msgid "adjudicator" msgstr "jüri" -#: adjfeedback/models.py:15 +#: adjfeedback/models.py msgid "round" msgstr "tur" -#: adjfeedback/models.py:16 adjfeedback/models.py:216 +#: adjfeedback/models.py msgid "score" -msgstr "" +msgstr "Puan" -#: adjfeedback/models.py:17 +#: adjfeedback/models.py msgid "timestamp" -msgstr "" +msgstr "Zaman damgası" -#: adjfeedback/models.py:20 +#: adjfeedback/models.py msgid "adjudicator base score history" -msgstr "" +msgstr "hakem temel puan geçmişi" -#: adjfeedback/models.py:21 +#: adjfeedback/models.py msgid "adjudicator base score histories" -msgstr "" +msgstr "hakem taban puan geçmişleri" -#: adjfeedback/models.py:29 +#: adjfeedback/models.py msgid "question" msgstr "soru" -#: adjfeedback/models.py:31 +#: adjfeedback/models.py msgid "feedback" -msgstr "geri Bildirim" +msgstr "geri bildirim" -#: adjfeedback/models.py:42 adjfeedback/models.py:50 adjfeedback/models.py:58 -#: adjfeedback/models.py:66 +#: adjfeedback/models.py msgid "answer" msgstr "cevap" -#: adjfeedback/models.py:45 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answer" -msgstr "" +msgstr "jüri geri bildirimi mantıksal cevabı" -#: adjfeedback/models.py:46 +#: adjfeedback/models.py msgid "adjudicator feedback boolean answers" -msgstr "" +msgstr "jüri geri bildirimi mantıksal cevapları" -#: adjfeedback/models.py:53 +#: adjfeedback/models.py msgid "adjudicator feedback integer answer" -msgstr "" +msgstr "jüri geri bildirimi tamsayı cevabı" -#: adjfeedback/models.py:54 +#: adjfeedback/models.py msgid "adjudicator feedback integer answers" -msgstr "" +msgstr "jüri geri bildirimi tamsayı cevapları" -#: adjfeedback/models.py:61 +#: adjfeedback/models.py msgid "adjudicator feedback float answer" -msgstr "" +msgstr "jüri geri bildirimi float cevabı" -#: adjfeedback/models.py:62 +#: adjfeedback/models.py msgid "adjudicator feedback float answers" -msgstr "" +msgstr "jüri geri bildirimi float cevapları" -#: adjfeedback/models.py:69 +#: adjfeedback/models.py msgid "adjudicator feedback string answer" -msgstr "" +msgstr "jüri geri bildirimi dizi cevabı" -#: adjfeedback/models.py:70 +#: adjfeedback/models.py msgid "adjudicator feedback string answers" -msgstr "" +msgstr "jüri geri bildirimi dizi cevapları" + +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answer" +msgstr "jüri geri bildirimi çoklu seçim cevabı" -#: adjfeedback/models.py:89 +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answers" +msgstr "jüri geri bildirimi çoklu seçim cevapları" + +#: adjfeedback/models.py msgid "checkbox" -msgstr "" +msgstr "onay kutusu" -#: adjfeedback/models.py:90 +#: adjfeedback/models.py msgid "yes/no (dropdown)" -msgstr "" +msgstr "evet/hayır (açılır menü)" -#: adjfeedback/models.py:91 +#: adjfeedback/models.py msgid "integer (textbox)" -msgstr "" +msgstr "tamsayı (metin kutusu)" -#: adjfeedback/models.py:92 +#: adjfeedback/models.py msgid "integer scale" -msgstr "" +msgstr "tamsayı ölçeği" -#: adjfeedback/models.py:93 +#: adjfeedback/models.py msgid "float" -msgstr "" +msgstr "float" -#: adjfeedback/models.py:94 adjfeedback/models.py:127 +#: adjfeedback/models.py msgid "text" -msgstr "" +msgstr "metin" -#: adjfeedback/models.py:95 +#: adjfeedback/models.py msgid "long text" -msgstr "" +msgstr "uzun metin" -#: adjfeedback/models.py:96 +#: adjfeedback/models.py msgid "select one" -msgstr "" +msgstr "birini seçin" -#: adjfeedback/models.py:97 +#: adjfeedback/models.py msgid "select multiple" -msgstr "" +msgstr "birden fazla seç" -#: adjfeedback/models.py:123 +#: adjfeedback/models.py msgid "tournament" msgstr "turnuva" -#: adjfeedback/models.py:125 +#: adjfeedback/models.py msgid "sequence number" -msgstr "" +msgstr "sıra numarası" -#: adjfeedback/models.py:128 +#: adjfeedback/models.py msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" -msgstr "" +msgstr "Katılımcılara gösterilen soru, örneğin, \"Karara katıldınız mı?\"" -#: adjfeedback/models.py:130 +#: adjfeedback/models.py msgid "name" msgstr "isim" -#: adjfeedback/models.py:131 +#: adjfeedback/models.py msgid "A short name for the question, e.g., \"Agree with decision\"" -msgstr "" +msgstr "Sorunun kısa adı, örneğin, \"Karara katılıyorum\"" -#: adjfeedback/models.py:133 +#: adjfeedback/models.py msgid "reference" -msgstr "" +msgstr "referans" -#: adjfeedback/models.py:134 +#: adjfeedback/models.py msgid "Code-compatible reference, e.g., \"agree_with_decision\"" -msgstr "" +msgstr "Kod uyumlu referanslar, örneğin \"agree_with_decision\"" -#: adjfeedback/models.py:137 +#: adjfeedback/models.py msgid "from adjudicator" -msgstr "" +msgstr "jüriden" -#: adjfeedback/models.py:138 +#: adjfeedback/models.py msgid "Adjudicators should be asked this question (about other adjudicators)" -msgstr "" +msgstr "Bu soru jürilere sorulmalıdır (diğer jüriler hakkında)" -#: adjfeedback/models.py:140 +#: adjfeedback/models.py msgid "from team" -msgstr "" +msgstr "takımdan" -#: adjfeedback/models.py:141 +#: adjfeedback/models.py msgid "Teams should be asked this question" -msgstr "" +msgstr "Bu soru takımlara sorulmalıdır" -#: adjfeedback/models.py:144 +#: adjfeedback/models.py msgid "answer type" -msgstr "" +msgstr "yanıt türü" -#: adjfeedback/models.py:146 +#: adjfeedback/models.py msgid "required" -msgstr "" +msgstr "gerekli" -#: adjfeedback/models.py:147 +#: adjfeedback/models.py msgid "Whether participants are required to fill out this field" -msgstr "" +msgstr "Katılımcıların bu alanı doldurmaları gerekip gerekmediği" -#: adjfeedback/models.py:149 +#: adjfeedback/models.py msgid "minimum value" -msgstr "" +msgstr "minimum değer" -#: adjfeedback/models.py:150 +#: adjfeedback/models.py msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" -msgstr "" +msgstr "Sayısal alanlar için izin verilen minimum değer (metin veya mantıksal alanlar için yoksayılır)" -#: adjfeedback/models.py:152 +#: adjfeedback/models.py msgid "maximum value" -msgstr "" +msgstr "maksimum değer" -#: adjfeedback/models.py:153 +#: adjfeedback/models.py msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" -msgstr "" +msgstr "Sayısal alanlar için izin verilen maksimum değer (metin veya mantıksal alanları için yoksayılır)" -#: adjfeedback/models.py:160 +#: adjfeedback/models.py msgid "choices" -msgstr "" +msgstr "seçenekler" -#: adjfeedback/models.py:161 -msgid "Permissible choices for select one/multiple fields, separated by '//' (ignored for other fields)" -msgstr "" +#: adjfeedback/models.py +msgid "Permissible choices for select one/multiple fields (ignored for other fields)" +msgstr "Bir/birden fazla alan seçmek için izin verilen seçenekler (diğer alanlar için yoksayılır)" -#: adjfeedback/models.py:166 +#: adjfeedback/models.py msgid "adjudicator feedback question" -msgstr "" +msgstr "jüri geri bildirim sorusu" -#: adjfeedback/models.py:167 +#: adjfeedback/models.py msgid "adjudicator feedback questions" -msgstr "" +msgstr "jüri geri bildirim soruları" -#: adjfeedback/models.py:225 adjfeedback/views.py:761 +#: adjfeedback/models.py adjfeedback/views.py msgid "ignored" -msgstr "" +msgstr "gizli" -#: adjfeedback/models.py:226 +#: adjfeedback/models.py msgid "Whether the feedback should affect the adjudicator's score" -msgstr "" +msgstr "Geri bildirimin jürinin puanını etkileyip etkilemeyeceği" -#: adjfeedback/models.py:230 +#: adjfeedback/models.py msgid "adjudicator feedback" msgstr "jüri geri bildirimi" -#: adjfeedback/models.py:231 +#: adjfeedback/models.py msgid "adjudicator feedbacks" -msgstr "" +msgstr "jüri geri bildirimleri" -#: adjfeedback/models.py:278 +#: adjfeedback/models.py msgid "Either the source adjudicator or source team wasn't specified." -msgstr "" +msgstr "Kaynak jüri veya kaynak takım belirtilmedi." -#: adjfeedback/models.py:281 +#: adjfeedback/models.py msgid "There was both a source adjudicator and a source team." -msgstr "" +msgstr "Hem bir kaynak jüri hem de bir kaynak takımı vardı." -#: adjfeedback/models.py:283 +#: adjfeedback/models.py msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" -msgstr "" +msgstr "Bu geri bildirim için hedef olarak belirlenmiş bir jüri yok. Belki silindiler?" -#: adjfeedback/models.py:285 +#: adjfeedback/models.py msgid "Adjudicator did not see this debate." -msgstr "" +msgstr "Jüri bu maçı görmedi." -#: adjfeedback/tables.py:19 +#: adjfeedback/tables.py msgid "Whether the adj is marked as breaking (click to mark)" -msgstr "" +msgstr "Adj'nin break olarak işaretlenip işaretlenmediği (işaretlemek için tıklayın)" + +#: adjfeedback/tables.py +msgid "N/A" +msgstr "YOK" -#: adjfeedback/tables.py:45 +#: adjfeedback/tables.py msgid "Current weighted score" -msgstr "" +msgstr "Geçerli ağırlıklı puan" -#: adjfeedback/tables.py:50 +#: adjfeedback/tables.py msgid "This adjudicator's current rating." -msgstr "" +msgstr "Bu jürinin mevcut puanı" -#: adjfeedback/tables.py:58 +#: adjfeedback/tables.py msgid "Base score result" -msgstr "" +msgstr "Temel puan sonucu" -#: adjfeedback/tables.py:65 +#: adjfeedback/tables.py msgid "Click to edit base score" -msgstr "" +msgstr "Temel puanı düzenlemek için tıklayın" -#: adjfeedback/tables.py:70 +#: adjfeedback/tables.py msgid "Assigned base score" -msgstr "" +msgstr "Atanan temel puan" -#: adjfeedback/tables.py:79 +#: adjfeedback/tables.py msgid "The current difference between an adjudicator's base score and current score" -msgstr "" +msgstr "Bir jürinin temel puanı ile mevcut puanı arasındaki mevcut fark" -#: adjfeedback/tables.py:83 +#: adjfeedback/tables.py msgid "The difference between this adjudicator's base score and current score" -msgstr "" +msgstr "Bu jürinin taban puanı ile mevcut puanı arasındaki fark" -#: adjfeedback/tables.py:92 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." -msgstr "" +msgstr "Bu jürinin mevcut puanlarının standart sapması; daha büyük sayılar daha az tutarlı geri bildirim puanları anlamına gelir." -#: adjfeedback/tables.py:96 +#: adjfeedback/tables.py msgid "The standard deviation of this adjudicator's current scores" -msgstr "" +msgstr "Bu jürinin mevcut puanlarının standart sapması" -#: adjfeedback/tables.py:105 +#: adjfeedback/tables.py msgid "Feedback Per Round" -msgstr "" +msgstr "Tur Başı Geri Bildirim" -#: adjfeedback/tables.py:106 +#: adjfeedback/tables.py msgid "Hover over the data points to show the average score received in that round" -msgstr "" +msgstr "Turda alınan ortalama puanı göstermek için fareyi veri noktalarının üzerine getirin" -#: adjfeedback/tables.py:124 +#: adjfeedback/tables.py #, python-format msgid "View %(count)s
    feedback" msgid_plural "View %(count)s
    feedbacks" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)s
    geri bildirimi görüntüleyin" +msgstr[1] "%(count)s
    geri bildirimlerini görüntüleyin" -#: adjfeedback/tables.py:147 +#: adjfeedback/tables.py msgid "Unsubmitted feedback ballots" -msgstr "" +msgstr "Gönderilmemiş geri bildirim ballotları" -#: adjfeedback/tables.py:171 +#: adjfeedback/tables.py msgid "View Missing Feedback" -msgstr "" +msgstr "Eksik Geri Bildirim Görüntüle" -#: adjfeedback/templates/add_feedback.html:5 +#: adjfeedback/templates/add_feedback.html msgid "Who is the feedback from?" -msgstr "" +msgstr "Geri bildirim kimden geliyor?" -#: adjfeedback/templates/add_feedback.html:6 -#: adjfeedback/templates/enter_feedback.html:5 +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html msgid "Enter Feedback" -msgstr "" +msgstr "Geri Bildirim Girin" -#: adjfeedback/templates/enter_feedback.html:9 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html #, python-format -msgid "Add Feedback from %(source_name)s" -msgstr "" +msgid "Add Feedback from %(name)s" +msgstr "%(name)s'den geri bildirim ekle" -#: adjfeedback/templates/enter_feedback.html:13 -#: adjfeedback/templates/feedback_base.html:42 +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html msgid "Add Feedback" -msgstr "" +msgstr "Geri bildirim ekle" -#: adjfeedback/templates/enter_feedback.html:21 +#: adjfeedback/templates/enter_feedback.html msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" -msgstr "" +msgstr "Geri bildirim seçeneği yoktur, çünkü henüz açık bir tur yayınlanmamıştır. Yayınlanınca tekrar kontrol edin!" -#: adjfeedback/templates/enter_feedback.html:27 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." -msgstr "" +msgstr "Bu turnuvaya yalnızca kararı veren jüri hakkında geri bildirim göndermeniz gerekiyor. Diğer jüriler hakkında geri bildirim göndermeyin." -#: adjfeedback/templates/enter_feedback.html:29 +#: adjfeedback/templates/enter_feedback.html msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." -msgstr "" +msgstr "Bu turnuvada paneldeki tüm jürilere (acemiler dahil) geri bildirim göndermeniz gerekiyor." -#: adjfeedback/templates/enter_feedback.html:43 +#: adjfeedback/templates/enter_feedback.html msgid "There are some problems with this feedback submission. Please review and correct them." -msgstr "" +msgstr "Bu geri bildirimle ilgili bazı sorunlar vardır. Lütfen bunları gözden geçirin ve düzeltin." -#: adjfeedback/templates/enter_feedback.html:58 +#: adjfeedback/templates/enter_feedback.html msgid "When submitting this form your IP address will be stored for logging purposes." -msgstr "" +msgstr "Bu formu gönderirken IP adresiniz kayıt amaçlı saklanacaktır." -#: adjfeedback/templates/feedback_base.html:8 +#: adjfeedback/templates/feedback_base.html msgid "Overview" -msgstr "" +msgstr "Genel bakış" -#: adjfeedback/templates/feedback_base.html:12 +#: adjfeedback/templates/feedback_base.html msgid "Latest" -msgstr "" +msgstr "Sonuncu" -#: adjfeedback/templates/feedback_base.html:16 +#: adjfeedback/templates/feedback_base.html msgid "Unsubmitted" -msgstr "" +msgstr "Gönderilmemiş" -#: adjfeedback/templates/feedback_base.html:20 +#: adjfeedback/templates/feedback_base.html msgid "Important" -msgstr "" +msgstr "Önemli" -#: adjfeedback/templates/feedback_base.html:24 +#: adjfeedback/templates/feedback_base.html msgid "Comments" -msgstr "" +msgstr "Yorumlar" -#: adjfeedback/templates/feedback_base.html:28 +#: adjfeedback/templates/feedback_base.html msgid "By Source" -msgstr "" +msgstr "Kaynağa Göre" -#: adjfeedback/templates/feedback_base.html:32 +#: adjfeedback/templates/feedback_base.html msgid "By Target" -msgstr "" +msgstr "Hedefe Göre" -#: adjfeedback/templates/feedback_base.html:39 +#: adjfeedback/templates/feedback_base.html msgid "Bulk Update Scores" -msgstr "" +msgstr "Toplu Güncelleme Puanları" -#: adjfeedback/templates/feedback_by_source.html:4 -#: adjfeedback/templates/feedback_by_source.html:5 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "Feedback %(source_type)s %(source_name)s" -msgstr "" +msgstr "Geri bildirim %(source_type)s %(source_name)s" -#: adjfeedback/templates/feedback_by_source.html:12 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't submitted any feedback yet." -msgstr "" +msgstr "%(source_name)s henüz herhangi bir geri bildirim göndermedi." -#: adjfeedback/templates/feedback_by_source.html:17 +#: adjfeedback/templates/feedback_by_source.html #, python-format msgid "%(source_name)s hasn't received any feedback yet." -msgstr "" +msgstr "%(source_name)s henüz herhangi bir geri bildirim almadı." -#: adjfeedback/templates/feedback_card.html:8 +#: adjfeedback/templates/feedback_card.html msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." -msgstr "" +msgstr "Bunun nedeni büyük olasılıkla bu geri bildirimi gönderen ekibin veya jürinin aynı kişiye birkaç kez gönderimde bulunmuş olması veya bir ekibin sadece karar açıklayan jüri dışındaki panelistlere de geri bildirim göndermesi." -#: adjfeedback/templates/feedback_card.html:9 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed; will not affect this adjudicator's score." -msgstr "" +msgstr "Doğrulanmamış; hakemin puanını etkilemez." -#: adjfeedback/templates/feedback_card.html:14 +#: adjfeedback/templates/feedback_card.html msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." -msgstr "" +msgstr "Bu geri bildirim hakem için sayılır, ancak puanlar hesaplanırken dikkate alınmaz." -#: adjfeedback/templates/feedback_card.html:15 +#: adjfeedback/templates/feedback_card.html msgid "Ignored; will not affect this adjudicator's score." -msgstr "" +msgstr "Gizli; bu hakemin puanını etkilemeyecektir." -#: adjfeedback/templates/feedback_card.html:20 +#: adjfeedback/templates/feedback_card.html msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." -msgstr "" +msgstr "Bu geri bildirim bir jüriye verilmiş ancak jüri maçtan çıkartılmış. Veritabanını Düzenle alanına gitmeli ve bu geri bildirimi silmelisiniz." -#: adjfeedback/templates/feedback_card.html:29 +#: adjfeedback/templates/feedback_card.html msgid "The score given in this piece of feedback." -msgstr "" +msgstr "Bu geri bildirimde verilen puan." -#: adjfeedback/templates/feedback_card.html:30 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(round)s %(score)s" -msgstr "" +msgstr "%(round)s %(score)s" -#: adjfeedback/templates/feedback_card.html:34 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "\n" -" On %(adjudicator)s\n" -" " -msgstr "" +msgid "On %(adjudicator)s" +msgstr "%(adjudicator)s jürisi hakkında" -#: adjfeedback/templates/feedback_card.html:39 +#: adjfeedback/templates/feedback_card.html #, python-format -msgid "Received as %(as)s" -msgstr "" +msgid "Received as %(as_type)s" +msgstr " %(as_type)s olarak alındı." -#: adjfeedback/templates/feedback_card.html:43 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "Base %(base)s" -msgstr "" +msgstr "Taban %(base)s" -#: adjfeedback/templates/feedback_card.html:50 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (their %(relationship)s)" -msgstr "" +msgstr "%(source)s (their %(relationship)s)'den" -#: adjfeedback/templates/feedback_card.html:54 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "From %(source)s (%(relationship)s from %(side)s)" -msgstr "" +msgstr "%(source)s (%(relationship)s from %(side)s)'den" -#: adjfeedback/templates/feedback_card.html:58 +#: adjfeedback/templates/feedback_card.html msgid "From unknown" -msgstr "" +msgstr "Bilinmeyenden" -#: adjfeedback/templates/feedback_card.html:85 +#: adjfeedback/templates/feedback_card.html #, python-format msgid "%(time)s" msgstr "" -#: adjfeedback/templates/feedback_card.html:90 +#: adjfeedback/templates/feedback_card.html msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." -msgstr "" +msgstr "Onaylanmamış geri bildirimler gönderilmemiş sayılır ve jürinin puanını etkilemez." -#: adjfeedback/templates/feedback_card.html:95 +#: adjfeedback/templates/feedback_card.html msgid "Un-confirm" -msgstr "" +msgstr "Onayı kaldır" -#: adjfeedback/templates/feedback_card.html:95 +#: adjfeedback/templates/feedback_card.html msgid "Confirm" -msgstr "" +msgstr "Onayla" -#: adjfeedback/templates/feedback_card.html:100 +#: adjfeedback/templates/feedback_card.html msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." -msgstr "" +msgstr "Gizli geri bildirimler gönderilmiş sayılır, ancak jürinin puanını etkilemez." -#: adjfeedback/templates/feedback_card.html:105 +#: adjfeedback/templates/feedback_card.html msgid "Un-ignore" -msgstr "" +msgstr "Gizlemeyi Geri Al" -#: adjfeedback/templates/feedback_card.html:105 +#: adjfeedback/templates/feedback_card.html msgid "Ignore" -msgstr "" +msgstr "Gizle" -#: adjfeedback/templates/feedback_cards_list.html:17 +#: adjfeedback/templates/feedback_cards_list.html msgid "No feedback has been submitted yet" -msgstr "" +msgstr "Henüz geri bildirim gönderilmedi" -#: adjfeedback/templates/feedback_overview.html:4 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "%(c_breaking)s marked as breaking" -msgstr "" +msgstr "%(c_breaking)s break oldu olarak işaretlendi" -#: adjfeedback/templates/feedback_overview.html:10 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." -msgstr "" +msgstr "Mevcut Geri Bildirim Ayarları yalnızca başkanların (panelistleri ve acemileri hakkında) geri bildirim göndermesine izin verir." -#: adjfeedback/templates/feedback_overview.html:14 +#: adjfeedback/templates/feedback_overview.html #, python-format -msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit on trainees." -msgstr "" +msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." +msgstr "Mevcut Geri Bildirim Ayarları hem başkanların hem de panelistlerin birbirleri hakkında ve başkanların acemilere geri bildirim göndermelerine izin verir." + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." +msgstr "Mevcut Geri Bildirim Ayarları hem panelistlerin hem de acemilerin başkanlara ve başkanların panelin diğer tüm üyelerine (acemiler dahil) geri bildirim göndermelerine izin verir." -#: adjfeedback/templates/feedback_overview.html:20 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." -msgstr "" +msgstr "Mevcut Geri Bildirim Ayarları, tüm jürilerin (acemiler dahil) panelin diğer tüm üyelerine (acemiler dahil) geri bildirim göndermesine izin verir." -#: adjfeedback/templates/feedback_overview.html:31 +#: adjfeedback/templates/feedback_overview.html #, python-format msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Şuan %(nadjs_outside_range)s jüri jüri puanlarının izin verilen aralığı dışında. Şuan %(min_score)s ile %(max_score)s arası. Bu jüri otomatik tahsisinin çalışmasını etkileyebilir. Daha geniş bir puan aralığı ayarlamak için geri bildirim ayarları kullanabilirsiniz." +msgstr[1] "Şuan %(nadjs_outside_range)s jüri jüri puanlarının izin verilen aralığı dışında. Şuan %(min_score)s ile %(max_score)s arası. Bu jüri otomatik tahsisinin çalışmasını etkileyebilir. Daha geniş bir puan aralığı ayarlamak için geri bildirim ayarları kullanabilirsiniz." -#: adjfeedback/templates/overview_breakdowns.html:13 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)s jürisi şu anda %(min)s puana eşit veya üstünde ve %(max)s puanın altında bir puana sahiptir. Bu, jüri havuzunun %(percent)s%%'sidir." +msgstr[1] "%(count)s jürileri şu anda %(min)s puana eşit veya üstünde ve %(max)s puanın altında bir puana sahiptir. Bu, jüriler havuzunun %(percent)s%%'sidir." -#: adjfeedback/templates/overview_breakdowns.html:27 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" -msgstr "" +msgstr "Puan Dağılımları (range is %(min_score)s–%(max_score)s)" -#: adjfeedback/templates/overview_breakdowns.html:43 +#: adjfeedback/templates/overview_breakdowns.html msgid "Base" -msgstr "" +msgstr "Temel" -#: adjfeedback/templates/overview_breakdowns.html:49 +#: adjfeedback/templates/overview_breakdowns.html msgid "Feedback" -msgstr "Geri Bildirim" +msgstr "Geri bildirim" -#: adjfeedback/templates/overview_breakdowns.html:53 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." -msgstr "" +msgstr "Jürinin geri bildirimle ve testle belirlenen puanlarının oranı tur başına belirlenir. Bu bağlantıyı tıklayın ve %(round)s için bu oranı değiştirmek için \"Geri bildirim ağırlığı\" alanını düzenleyin." -#: adjfeedback/templates/overview_breakdowns.html:57 +#: adjfeedback/templates/overview_breakdowns.html msgid "Score Ratio" -msgstr "" +msgstr "Puan Oranı" -#: adjfeedback/templates/overview_breakdowns.html:72 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Tur başına %(c_chairs)s maç var, bu yüzden %(c_chairs)s başkan gerekli." +msgstr[1] "Tur başına %(c_chairs)s maç var, bu yüzden %(c_chairs)s başkan gerekli." -#: adjfeedback/templates/overview_breakdowns.html:78 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Tur başına %(c_chairs)s maç var, ancak minimum oy puanının üzerinde sadece %(c_chairs) var." +msgstr[1] "Tur başına %(c_chairs)s maç var, ancak minimum oy puanının üzerinde sadece %(c_chairs) var." -#: adjfeedback/templates/overview_breakdowns.html:85 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_chairs)s chair" msgid_plural "%(c_chairs)s chairs" msgstr[0] "%(c_chairs)s başkan" msgstr[1] "%(c_chairs)s başkanlar" -#: adjfeedback/templates/overview_breakdowns.html:95 +#: adjfeedback/templates/overview_breakdowns.html msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." -msgstr "" +msgstr "Oy kullanacak kadar yüksek bir puana sahip, ancak sandalye olarak tahsis edilmeyen tüm jüriler, otomatik tahsis tarafından panelist olarak tahsis edilir." -#: adjfeedback/templates/overview_breakdowns.html:99 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_panellists)s panellist" msgid_plural "%(c_panellists)s panellists" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(c_panellists)s panelist" +msgstr[1] "%(c_panellists)s panelistler" -#: adjfeedback/templates/overview_breakdowns.html:109 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." -msgstr "" +msgstr "Jüriler puanlarının bu turnuvanın Kura Kuralları yapılandırmasında belirlenen 'minimum oylama puanından' (%(min_voting)s) az olması durumunda otomatik tahsis tarafından acemi olarak tahsis edilir." -#: adjfeedback/templates/overview_breakdowns.html:114 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "%(c_trainees)s trainee" msgid_plural "%(c_trainees)s trainees" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(c_trainees)s acemi" +msgstr[1] "%(c_trainees)s acemiler" -#: adjfeedback/templates/overview_breakdowns.html:123 +#: adjfeedback/templates/overview_breakdowns.html #, python-format msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" -msgstr "" +msgstr "Otomatik Tahsis Dağıtımları (oy vermek için %(min_voting_score)s+)" -#: adjfeedback/templates/overview_modals.html:10 +#: adjfeedback/templates/overview_modals.html msgid "Change Base Score" -msgstr "" +msgstr "Temel Puan Değiştir" -#: adjfeedback/templates/overview_modals.html:17 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." -msgstr "" +msgstr "Jüri puan aralığı %(pref.adj_min_score)s ve %(pref.adj_max_score)s arasındadır. Ondalık sayılara izin verilir. Bu, Geri Bildirim Ayarları ile değiştirilebilir." -#: adjfeedback/templates/overview_modals.html:25 +#: adjfeedback/templates/overview_modals.html #, python-format msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." -msgstr "" +msgstr "Panelist veya başkan olarak tahsis edilmek içiin gereken minimum puan (otomatik tahsis kullanırken) %(min_voting_score)s. Bu, Kura Ayarları ile değiştirilebilir." -#: adjfeedback/templates/overview_modals.html:34 +#: adjfeedback/templates/overview_modals.html msgid "Base score" -msgstr "" +msgstr "temel puan" -#: adjfeedback/templates/overview_modals.html:41 +#: adjfeedback/templates/overview_modals.html msgid "Save Base Score" -msgstr "" +msgstr "temel puan kaydet" -#: adjfeedback/templates/public_add_feedback.html:4 +#: adjfeedback/templates/public_add_feedback.html msgid "Who are you?" -msgstr "" +msgstr "Kimsin?" -#: adjfeedback/templates/public_add_feedback.html:5 +#: adjfeedback/templates/public_add_feedback.html msgid "click your name or your team on this list" -msgstr "" - -#: adjfeedback/templates/public_add_feedback.html:13 -#: adjfeedback/templates/public_add_feedback.html:20 -#, python-format -msgid "Add feedback from %(name)s" -msgstr "" +msgstr "bu listede adınıza veya takımınıza tıklayın" -#: adjfeedback/templates/update_adjudicator_scores.html:4 -#: adjfeedback/templates/update_adjudicator_scores.html:6 +#: adjfeedback/templates/update_adjudicator_scores.html msgctxt "page title" msgid "Update Adjudicator Scores" -msgstr "" +msgstr "Jüri Puanlarını Güncelle" -#: adjfeedback/templates/update_adjudicator_scores.html:11 +#: adjfeedback/templates/update_adjudicator_scores.html #, python-format msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." -msgstr "" +msgstr "Bu turnuvada herhangi bir jüri yok, bu yüzden puan güncelleyemezsiniz. Önce jüri aktarmak isteyebilirsiniz." -#: adjfeedback/templates/update_adjudicator_scores.html:28 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" -msgstr "" +msgstr "Jüri adlarının ve yeni puanlarının bir listesini şu biçimde yapıştırın: jüri,puan. Mesela:" -#: adjfeedback/templates/update_adjudicator_scores.html:40 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "The adjudicators' names must match their names in the tab system exactly." -msgstr "" +msgstr "Jürilerin adları, tab sistemindeki adlarıyla tam olarak eşleşmelidir." -#: adjfeedback/templates/update_adjudicator_scores.html:47 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "There are some problems with the data on this form:" -msgstr "" +msgstr "Bu formdaki verilerle ilgili bazı sorunlar var:" -#: adjfeedback/templates/update_adjudicator_scores.html:58 +#: adjfeedback/templates/update_adjudicator_scores.html msgid "Submit" -msgstr "" +msgstr "Gönder" -#: adjfeedback/views.py:117 +#: adjfeedback/views.py msgid "Feedback Overview" -msgstr "" +msgstr "Geri bildirim genel bakış" -#: adjfeedback/views.py:141 +#: adjfeedback/views.py msgid "Find Feedback on Adjudicator" -msgstr "" +msgstr "Jüri hakkında geri bildirim ara" -#: adjfeedback/views.py:152 adjfeedback/views.py:176 adjfeedback/views.py:191 +#: adjfeedback/views.py #, python-format msgid "%(count)d feedback" msgid_plural "%(count)d feedbacks" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d geri bildirim" +msgstr[1] "%(count)d geri bildirimler" -#: adjfeedback/views.py:155 adjfeedback/views.py:181 adjfeedback/views.py:196 +#: adjfeedback/views.py msgid "Feedbacks" msgstr "Geri Bildirimler" -#: adjfeedback/views.py:162 +#: adjfeedback/views.py msgid "Find Feedback" -msgstr "" +msgstr "Geri Bildirim Bul" -#: adjfeedback/views.py:170 adjfeedback/views.py:706 +#: adjfeedback/views.py msgid "From Teams" -msgstr "" +msgstr "Ekiplerden" -#: adjfeedback/views.py:185 adjfeedback/views.py:700 +#: adjfeedback/views.py msgid "From Adjudicators" -msgstr "" +msgstr "Jürilerden" -#: adjfeedback/views.py:270 +#: adjfeedback/views.py msgid "Latest Feedback" -msgstr "" +msgstr "Son Geri Bildirim" -#: adjfeedback/views.py:271 +#: adjfeedback/views.py msgid "(30 most recent)" -msgstr "" +msgstr "(Son 30)" -#: adjfeedback/views.py:281 +#: adjfeedback/views.py msgid "Only Comments" -msgstr "" +msgstr "Sadece Yorumlar" -#: adjfeedback/views.py:282 +#: adjfeedback/views.py msgid "(250 most recent)" -msgstr "" +msgstr "(Son 250)" -#: adjfeedback/views.py:293 +#: adjfeedback/views.py msgid "Important Feedback" -msgstr "" +msgstr "Önemli Geri Bildirim" -#: adjfeedback/views.py:294 +#: adjfeedback/views.py msgid "(rating was much higher/lower than expected)" -msgstr "" +msgstr "(derecelendirme beklenenden çok daha yüksek/düşük)" -#: adjfeedback/views.py:361 +#: adjfeedback/views.py msgid "A Team" -msgstr "" +msgstr "Bir Takım" -#: adjfeedback/views.py:366 +#: adjfeedback/views.py msgid "Team" msgstr "Takım" -#: adjfeedback/views.py:373 adjfeedback/views.py:392 +#: adjfeedback/views.py msgid "Institution" -msgstr "" +msgstr "Kurum" -#: adjfeedback/views.py:378 +#: adjfeedback/views.py msgid "An Adjudicator" -msgstr "" +msgstr "Bir jüri" -#: adjfeedback/views.py:385 +#: adjfeedback/views.py msgid "Adjudicator" msgstr "Jüri" -#: adjfeedback/views.py:512 +#: adjfeedback/views.py #, python-format msgid "Feedback from %(source)s on %(target)s added." -msgstr "" +msgstr "%(target)s için %(source)s tarafından geri bildirim eklendi." -#: adjfeedback/views.py:542 +#: adjfeedback/views.py #, python-format msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." -msgstr "" +msgstr "Teşekkürler, %(source)s! %(target)s hakkındaki geri bildiriminiz kaydedildi." -#: adjfeedback/views.py:621 +#: adjfeedback/views.py #, python-format msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" -msgstr "" +msgstr "Tanınmayan juri: %(adjudicator)s" -#: adjfeedback/views.py:644 +#: adjfeedback/views.py msgid "Whoops! The value isn't a valid base score." -msgstr "" +msgstr "Değer geçerli bir temel puan değil." -#: adjfeedback/views.py:671 +#: adjfeedback/views.py msgid "Feedback Progress" -msgstr "" +msgstr "Geri Bildirim Durumu" -#: adjfeedback/views.py:692 +#: adjfeedback/views.py #, python-format msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(nmissing)d eksik geri bildirim gönderimi (%(fulfilled).1f%% returned)" +msgstr[1] "%(nmissing)d eksik geri bildirim gönderimleri (%(fulfilled).1f%% returned)" -#: adjfeedback/views.py:737 +#: adjfeedback/views.py #, python-format msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." -msgstr "" +msgstr "%(adjudicator)s için %(source)s'den gelen geri bildirim artık %(result)s şeklindedir." -#: adjfeedback/views.py:751 +#: adjfeedback/views.py msgid "confirmed" -msgstr "" +msgstr "onaylanmış" -#: adjfeedback/views.py:751 +#: adjfeedback/views.py msgid "un-confirmed" -msgstr "" +msgstr "onaylanmamış" -#: adjfeedback/views.py:761 +#: adjfeedback/views.py msgid "un-ignored" -msgstr "" +msgstr "gizlenmemiş" -#: adjfeedback/views.py:797 +#: adjfeedback/views.py #, python-format msgid "Updated base score for %(count)d adjudicator." msgid_plural "Updated base scores for %(count)d adjudicators." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d jürisi için temel puan güncellendi." +msgstr[1] "%(count)d jürileri için temel puanlar güncellendi." diff --git a/tabbycat/availability/locale/tr/LC_MESSAGES/django.po b/tabbycat/availability/locale/tr/LC_MESSAGES/django.po index 37e0c97774a..765a9ce6a97 100644 --- a/tabbycat/availability/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/tr/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:28\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" "MIME-Version: 1.0\n" @@ -12,387 +12,381 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 926\n" -#: availability/apps.py:7 availability/views.py:36 +#: availability/apps.py availability/views.py msgid "Availability" -msgstr "" +msgstr "Uygunluk" -#: availability/models.py:15 +#: availability/models.py msgid "content type" -msgstr "" +msgstr "içerik türü" -#: availability/models.py:16 +#: availability/models.py msgid "object id" -msgstr "" +msgstr "nesne kimliği" -#: availability/models.py:20 +#: availability/models.py msgid "round" msgstr "tur" -#: availability/models.py:24 +#: availability/models.py msgid "round availability" -msgstr "" +msgstr "maç kullanılabilirliği" -#: availability/models.py:25 +#: availability/models.py msgid "round availabilities" -msgstr "" +msgstr "maç kullanılabilirlikleri" -#: availability/templates/availability_index.html:11 +#: availability/templates/availability_index.html msgid "Mark All Breaking Adjs as Available" -msgstr "" +msgstr "Tüm Break Olmuş Jurileri Kullanılabilir İşaretle" -#: availability/templates/availability_index.html:18 +#: availability/templates/availability_index.html msgid "Mark Everything as Available" -msgstr "" +msgstr "Her Şeyi Kullanılabilir Olarak İşaretle" -#: availability/templates/availability_index.html:25 +#: availability/templates/availability_index.html #, python-format msgid "Copy Availability from %(prev_round)s" -msgstr "" +msgstr "%(prev_round)s kullanılabilirliğini kopyala" -#: availability/templates/availability_index.html:40 +#: availability/templates/availability_index.html msgid "View Draw" -msgstr "" +msgstr "Kurayı Görüntüle" -#: availability/templates/availability_index.html:45 +#: availability/templates/availability_index.html #, python-format msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" -msgstr "" +msgstr "%(round)s dan %(previous_unconfirmed) maçların ballotu eksik - bu, başarısız veya yanlış bir kuraya yol açabilir" -#: availability/templates/availability_index.html:47 -#: availability/templates/availability_index.html:52 -#: availability/templates/availability_index.html:57 -#: availability/templates/availability_index.html:62 -#: availability/templates/availability_index.html:67 -#: availability/templates/availability_index.html:72 -#: availability/templates/availability_index.html:77 -#: availability/templates/availability_index.html:82 -#: availability/templates/availability_index.html:86 +#: availability/templates/availability_index.html msgid "Generate Draw" -msgstr "" +msgstr "Kura Oluştur" -#: availability/templates/availability_index.html:51 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some teams have been marked as available." -msgstr "" +msgstr "Bazı takımlar müsait olarak işaretlenene kadar kura oluşturulamaz." -#: availability/templates/availability_index.html:56 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some adjudicators have been marked as available." -msgstr "" +msgstr "Bazı jüriler müsait olarak işaretlenene kadar kura oluşturulamaz." -#: availability/templates/availability_index.html:61 +#: availability/templates/availability_index.html msgid "The draw cannot be generated until some rooms have been marked as available." -msgstr "" +msgstr "Bazı odalar müsait olarak işaretlenene kadar kura oluşturulamaz." -#: availability/templates/availability_index.html:66 +#: availability/templates/availability_index.html msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." -msgstr "" +msgstr "Maç sayısı için uygun olarak işaretlenmiş yeterli oda yoktur - kura düzgün bir şekilde oluşturulmayabilir." -#: availability/templates/availability_index.html:71 +#: availability/templates/availability_index.html msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." -msgstr "" +msgstr "Maç sayısı için uygun olarak işaretlenmiş yeterli jüri yoktur - kura düzgün bir şekilde oluşturulmayabilir." -#: availability/templates/availability_index.html:76 +#: availability/templates/availability_index.html msgid "There is an uneven number of teams marked as available — the draw may not generate properly." -msgstr "" +msgstr "Kullanılabilir olarak işaretlenmiş eşit olmayan sayıda takım var - kura düzgün bir şekilde üretilemeyebilir." -#: availability/templates/availability_index.html:81 +#: availability/templates/availability_index.html msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." -msgstr "" +msgstr "Mevcut olarak işaretlenen takım sayısı 4'ün katı değildir - kura düzgün üretilemeyebilir." -#: availability/templates/availability_index.html:99 +#: availability/templates/availability_index.html #, python-format msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(prev_round)'nin ballotu tamamlanmamış bir maçı var. Bu, kura kurallarınıza bağlı olarak başarısız veya yanlış bir kuraya yol açabilir. %(prev_round)s. sonuçlarını gir. " +msgstr[1] "%(prev_round)'nin ballotu tamamlanmamış %(previous_unconfirmed)s maçı var. Bu, kura kurallarınıza bağlı olarak başarısız veya yanlış bir kuraya yol açabilir. %(prev_round)s. sonuçlarını gir. " -#: availability/templates/availability_index.html:121 +#: availability/templates/availability_index.html #, python-format msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " -msgstr "" +msgstr "Bu, %(round)s için bir sayfa ancak önceki tur hala tamamlandı olarak işaretlenmemiş. %(prev_round)s tamamlanmış olarak işaretlemyi unuttunuz mu?" -#: availability/templates/availability_index.html:137 +#: availability/templates/availability_index.html #, python-format msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." -msgstr "" +msgstr "Bu ilk turdur, ancak kura türü %(draw_type)s. Bunun yerine Rastgele olmasını mı istediniz? Veri Tabanı düzenle kısmından bu turun kura tipini değiştirebilirsiniz." -#: availability/templates/availability_index.html:150 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." -msgstr "" +msgstr "Bu bir eleme turudur, ancak bir break kategorisi yok. Eleme turları bir break kategorisiyle ilişkilendirilmelidir. Lütfen Veri Tabanı düzenle kısmından bu turun break ayarlarını değiştirin." -#: availability/templates/availability_index.html:162 +#: availability/templates/availability_index.html #, python-format msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." -msgstr "" +msgstr "Bu bir eleme turudur, ancak kura türü %(draw_type)s. Tüm eleme turlarının kura türü \"Eleme\" olmalıdır. Veri Tabanı düzenle kısmından bu turun kura tipini değiştirebilirsiniz." -#: availability/templates/availability_index.html:175 +#: availability/templates/availability_index.html #, python-format msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" -msgstr "" +msgstr "%(break_category)s Break'inde herhangi bir takım break olmuyor. %(break_category)s Breaki için break kategorisini belirlediniz mi?" -#: availability/templates/availability_index.html:187 +#: availability/templates/availability_index.html #, python-format msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." -msgstr "" +msgstr "%(break_category)s Break'inde sadece bir takım break oluyor. Sadece bir takımla eleme turu kurası oluşturamazsınız — %(break_category)s Breakinin break kurallarını incelemek isteyebilirsiniz.." -#: availability/templates/availability_index.html:199 +#: availability/templates/availability_index.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." -msgstr "" +msgstr "Takım sıralama önceliği boş. Bu, takımların herhangi bir metriğe göre sıralanmadığı anlamına gelir, bu nedenle tüm takımlar herkesi içeren tek bir aşamada olacaktır. İsteğiniz bu değilse, kurayı oluşturmadan önce Bu maçın ayarlarında sıralama önceliğininden takım sıralama önceliğini ayarlayın. Çoğu turnuvada, ilk metrik puan veya galibiyetdir." -#: availability/templates/base_availability.html:38 +#: availability/templates/base_availability.html msgid "Select All" -msgstr "" +msgstr "Tümünü Seç" -#: availability/templates/base_availability.html:39 +#: availability/templates/base_availability.html msgid "Select None" -msgstr "" +msgstr "Hiçbiri seçin" -#: availability/templates/base_availability.html:40 +#: availability/templates/base_availability.html msgid "Check-Ins" -msgstr "" +msgstr "Girişler" -#: availability/templates/base_availability.html:41 +#: availability/templates/base_availability.html msgid "Check In All Breaking" -msgstr "" +msgstr "Breal Olanları Giriş Yap" -#: availability/templates/base_availability.html:42 +#: availability/templates/base_availability.html msgid "Copy from Previous" -msgstr "" +msgstr "Öncekinden Kopyala" -#: availability/templates/base_availability.html:43 +#: availability/templates/base_availability.html msgid "Save Selected" -msgstr "" +msgstr "Seçilenleri Kaydet" -#: availability/templates/checkin_progress.html:7 +#: availability/templates/checkin_progress.html msgid "Teams" msgstr "Takımlar" -#: availability/templates/checkin_progress.html:8 +#: availability/templates/checkin_progress.html msgid "Adjudicators" msgstr "Jüriler" -#: availability/templates/checkin_progress.html:9 +#: availability/templates/checkin_progress.html msgid "Rooms" -msgstr "" +msgstr "Odalar" -#: availability/templates/checkin_progress.html:43 +#: availability/templates/checkin_progress.html msgid "Mark teams as available" -msgstr "" +msgstr "Takımlaı kullanılabilir olarak işaretle" -#: availability/templates/checkin_progress.html:46 +#: availability/templates/checkin_progress.html msgid "No need to set team availability" -msgstr "" +msgstr "Takım kullanılabilirliğini ayarlamanıza gerek yok" -#: availability/templates/checkin_progress.html:49 +#: availability/templates/checkin_progress.html msgid "There is an uneven number of teams marked as available for this round." -msgstr "" +msgstr "Bu tur için kullanılabilir olarak işaretlenmiş eşit olmayan sayıda takım var." -#: availability/templates/checkin_progress.html:53 +#: availability/templates/checkin_progress.html msgid "The number of teams marked as available for this round is not a multiple of 4." -msgstr "" +msgstr "Bu tur için kullanılabilir olarak işaretlenen takım sayısı 4'ün katı değildir." -#: availability/templates/checkin_progress.html:59 +#: availability/templates/checkin_progress.html msgid "Edit team availability" -msgstr "" +msgstr "Takım kullanılabilirliğini düzenleme" -#: availability/templates/checkin_progress.html:68 +#: availability/templates/checkin_progress.html #, python-format msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Bir jürinin ilişkili bir turnuvası yoktur. Kullanılabilir olarak işaretlenmelerini istiyorsanız, Veritabanını Düzenle alanında 'Turnuva' alanlarını ayarlayın." +msgstr[1] "%(count)s jürilerinin ilişkili bir turnuvası yoktur. Kullanılabilir olarak işaretlenmelerini istiyorsanız, Veritabanını Düzenle alanında 'Turnuva' alanlarını ayarlayın." -#: availability/templates/checkin_progress.html:77 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was not available last round, is available this round." msgid_plural "%(count)s adjudicators who were not available last round, are available this round." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Geçen turda müsait olmayan %(count)s jüri bu turda müsait." +msgstr[1] "Geçen turda müsait olmayan %(count)s jüri bu turda mevcuttur." -#: availability/templates/checkin_progress.html:84 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Geçen turda müsait olmayan aşağıdaki %(count)s jüri bu turda kullanılabilir: %(adjs_list)s" +msgstr[1] "Geçen turda müsait olmayan aşağıdaki %(count)s jüri bu turda kullanılabilir: %(adjs_list)s" -#: availability/templates/checkin_progress.html:93 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s adjudicator who was available last round, is not available this round." msgid_plural "%(count)s adjudicators who were available last round, are not available this round." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Geçen turda müsait olan %(count)s jüri bu turda mevcut değildir." +msgstr[1] "Geçen turda müsait olan %(count)s jüri bu turda mevcut değildir." -#: availability/templates/checkin_progress.html:100 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Geçen turda müsait olan aşağıdaki %(count)s jüri bu turda mevcut değildir: %(adjs_list)s" +msgstr[1] "Geçen turda müsait olan aşağıdaki %(count)s jüri bu turda mevcut değildir: %(adjs_list)s" -#: availability/templates/checkin_progress.html:108 +#: availability/templates/checkin_progress.html msgid "Mark adjudicators as available" -msgstr "" +msgstr "Jürileri mevcut olarak işaretle" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:111 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one adjudicator marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Maç sayısı göz önüne alındığında, mevcut olarak işaretlenmiş en az bir jüri olmalıdır." +msgstr[1] "Maç sayısı göz önüne alındığında, mevcut olarak işaretlenmiş en az %(required_count)s jüri olmalıdır." -#: availability/templates/checkin_progress.html:121 +#: availability/templates/checkin_progress.html msgid "Edit adjudicator availability" -msgstr "" +msgstr "Jüri kullanılabilirliğini düzenleme" -#: availability/templates/checkin_progress.html:130 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was not available last round, is available this round." msgid_plural "%(count)s rooms that were not available last round, are available this round." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Geçen turda mevcut olmayan %(count)s oda bu turda kullanılabilir." +msgstr[1] "Geçen turda mevcut olmayan %(count)s oda bu turda kullanılabilir." -#: availability/templates/checkin_progress.html:137 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Geçen turda mevcut olmayan aşağıdaki %(count)s oda bu turda kullanılabilir: %(rooms_list)s" +msgstr[1] "Geçen turda mevcut olmayan aşağıdaki %(count)s oda bu turda kullanılabilir: %(rooms_list)s" -#: availability/templates/checkin_progress.html:146 +#: availability/templates/checkin_progress.html #, python-format msgid "%(count)s room that was available last round, is not available this round." msgid_plural "%(count)s rooms that were available last round, are not available this round." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Geçen turda mevcut olan %(count)s oda bu turda mevcut değildir." +msgstr[1] "Geçen turda mevcut olan %(count)s oda bu turda mevcut değildir." -#: availability/templates/checkin_progress.html:153 +#: availability/templates/checkin_progress.html #, python-format msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Geçen turda mevcut olan aşağıdaki %(count)s oda bu turda değil: %(rooms_list)s" +msgstr[1] "Geçen turda mevcut olan aşağıdaki %(count)s oda bu turda değil: %(rooms_list)s" -#: availability/templates/checkin_progress.html:162 +#: availability/templates/checkin_progress.html #, python-format msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Odanın ilişkili bir turnuvası yok. Kullanılabilir olarak işaretlenmesini istiyorsanız Veritabanını Düzenle alanında 'Turnuva' alanını ayarlayın." +msgstr[1] "%(count)s odanın ilişkili bir turnuvası yok. Kullanılabilir olarak işaretlenmesini istiyorsanız Veritabanını Düzenle alanında 'Turnuva' alanını ayarlayın." -#: availability/templates/checkin_progress.html:170 +#: availability/templates/checkin_progress.html msgid "Mark rooms as available" -msgstr "" +msgstr "Odaları kullanılabilir olarak işaretle" #. Translators: required_count is a word for a number (e.g. "two", "three", etc.) -#: availability/templates/checkin_progress.html:173 +#: availability/templates/checkin_progress.html #, python-format msgid "There needs to be at least one room marked as available, given the number of debates." msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Maç sayısı göz önüne alındığında, mevcut olarak işaretlenmiş en az bir oda olmalıdır." +msgstr[1] "Maç sayısı göz önüne alındığında, mevcut olarak işaretlenmiş en az %(required_count)s oda olmalıdır." -#: availability/templates/checkin_progress.html:185 +#: availability/templates/checkin_progress.html msgid "Edit room availability" -msgstr "" +msgstr "Oda kullanılabilirliğini düzenle" -#: availability/views.py:95 +#: availability/views.py msgid "no teams are debating" -msgstr "" +msgstr "hiçbir takım maçta değil" #. Translators: nteams in this string can only be 0 or 1 -#: availability/views.py:105 +#: availability/views.py #, python-format msgid "%(nteams)d breaking team — no debates can happen" msgid_plural "%(nteams)d breaking teams — no debates can happen" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(nteams)d break olan takım — hiçbir maç olamaz" +msgstr[1] "%(nteams)d break olan takımlar — hiçbir maç olamaz" #. Translators: ndebating in this string is always at least 2 -#: availability/views.py:113 +#: availability/views.py #, python-format msgid "%(ndebating)d breaking team is debating this round" msgid_plural "%(ndebating)d breaking teams are debating this round" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(ndebating)d break olan takım bu tur maçta" +msgstr[1] "%(ndebating)d break olan takım bu tur maçta" #. Translators: This gets appended to the previous string (the one with #. ndebating in it) if (and only if) nbypassing is greater than 0. #. "It" refers to this round. -#: availability/views.py:121 +#: availability/views.py #, python-format msgid "; %(nbypassing)d team is bypassing it" msgid_plural "; %(nbypassing)d teams are bypassing it" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "; %(nbypassing)d takım atlıyor" +msgstr[1] "; %(nbypassing)d takım atlıyor" #. Translators: nadvancing in this string is always at least 2 -#: availability/views.py:140 +#: availability/views.py #, python-format msgid "%(nadvancing)s advancing team is debating this round" msgid_plural "%(nadvancing)s advancing teams are debating this round" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(nadvancing)s ilerleyen takım bu tur münazarada" +msgstr[1] "%(nadvancing)s ilerleyen takım bu tur münazarada" -#: availability/views.py:180 +#: availability/views.py msgid "Active Now" -msgstr "" +msgstr "Şuan Aktif" -#: availability/views.py:191 +#: availability/views.py #, python-format msgid "Active in %(prev_round)s" -msgstr "" +msgstr "%(prev_round)s'da Aktif" -#: availability/views.py:197 +#: availability/views.py msgid "Checked-In" -msgstr "" +msgstr "Girişli" -#: availability/views.py:208 +#: availability/views.py msgid "Team Availability" -msgstr "" +msgstr "Takım Kullanılabilirliği" -#: availability/views.py:227 +#: availability/views.py msgid "Adjudicator Availability" -msgstr "" +msgstr "Jüri Kullanılabilirliği" -#: availability/views.py:246 +#: availability/views.py msgid "Room Availability" -msgstr "" +msgstr "Oda Kullanılabilirliği" -#: availability/views.py:260 +#: availability/views.py msgid "Room" -msgstr "" +msgstr "Oda" -#: availability/views.py:262 +#: availability/views.py msgid "Display Name (for the draw)" -msgstr "" +msgstr "Görünen Ad (kura için)" -#: availability/views.py:265 +#: availability/views.py msgid "Categories" -msgstr "" +msgstr "Kategoriler" -#: availability/views.py:266 +#: availability/views.py msgid "Priority" -msgstr "" +msgstr "Öncelik" -#: availability/views.py:286 +#: availability/views.py msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." -msgstr "" +msgstr "Bir bütünlük hatası nedeniyle kullanılabilirliklerin bir kısmı veya tamamı güncelleştirilemedi. Bu eylemi yeniden denemeli veya tek tek güncelleştirmelisiniz." -#: availability/views.py:294 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms." -msgstr "" +msgstr "Tüm takımlar jüriler ve odalar giriş yapıldı." -#: availability/views.py:301 +#: availability/views.py msgid "Checked in all breaking adjudicators." -msgstr "" +msgstr "Tüm break olan jüriler giriş yapıldı." -#: availability/views.py:309 +#: availability/views.py msgid "Checked in all teams, adjudicators and rooms from previous round." -msgstr "" +msgstr "Tüm takımlar jüriler ve odalar giriş yapıldı." diff --git a/tabbycat/breakqual/locale/tr/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/tr/LC_MESSAGES/django.po index c55d2a646d5..9caa1123d9a 100644 --- a/tabbycat/breakqual/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/tr/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:27\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" "MIME-Version: 1.0\n" @@ -12,514 +12,514 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 928\n" -#: breakqual/apps.py:7 +#: breakqual/apps.py msgid "Break Qualification" -msgstr "" +msgstr "Break Olma Şartları" -#: breakqual/base.py:94 +#: breakqual/base.py #, python-format -msgid "The break qualification rule %(rule)s requires the following metric(s) to be in the team standings precedence in order to work: %(required)s; and the following are missing: %(missing)s." -msgstr "" +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "%(rule)s'ın break olma şartı kuralı takım sıralamaları önceliğinde aşağıdaki gerekli metrikten yoksun: %(missing)s" +msgstr[1] "%(rule)s'ın break olma şartı kuralı takım sıralamaları önceliğinde aşağıdaki gerekli metriklerden yoksun: %(missing)s" -#: breakqual/models.py:10 +#: breakqual/models.py msgid "tournament" msgstr "turnuva" -#: breakqual/models.py:12 +#: breakqual/models.py msgid "name" msgstr "isim" -#: breakqual/models.py:13 +#: breakqual/models.py msgid "Name to be displayed, e.g., \"ESL\"" -msgstr "" +msgstr "Görüntülenecek ad, örneğin, \"ESL\"" -#: breakqual/models.py:15 +#: breakqual/models.py msgid "slug" -msgstr "" +msgstr "jeton" -#: breakqual/models.py:16 +#: breakqual/models.py msgid "Slug for URLs, e.g., \"esl\"" -msgstr "" +msgstr "URL'ler için jeton, örneğin, \"esl\"" -#: breakqual/models.py:18 +#: breakqual/models.py msgid "sequence number" -msgstr "" +msgstr "sıra numarası" -#: breakqual/models.py:19 +#: breakqual/models.py msgid "The order in which the categories are displayed" -msgstr "" +msgstr "Kategorilerin görüntülenme sırası" -#: breakqual/models.py:21 +#: breakqual/models.py msgid "break size" -msgstr "" +msgstr "break olma boyutu" -#: breakqual/models.py:22 +#: breakqual/models.py msgid "Number of breaking teams in this category" -msgstr "" +msgstr "Bu kategoride break olan takım sayısı" -#: breakqual/models.py:24 +#: breakqual/models.py msgid "is general" -msgstr "" +msgstr "geneldir" -#: breakqual/models.py:25 +#: breakqual/models.py msgid "True if most teams eligible for this category, e.g. Open, False otherwise" -msgstr "" +msgstr "Çoğu takım bu kategoriye uygunsa doğrudur, örneğin Açık, Aksi takdirde Yanlış" -#: breakqual/models.py:27 +#: breakqual/models.py msgid "priority" -msgstr "" +msgstr "öncelik" -#: breakqual/models.py:28 +#: breakqual/models.py msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" -msgstr "" +msgstr "Bir takım birden fazla kategoride break olursa, daha yüksek öncelik numaraları öncelikli olur; takımlar ancak hepsi aynı önceliğe sahipse birden fazla kategoriye break olabilir" -#: breakqual/models.py:32 +#: breakqual/models.py msgid "limit" -msgstr "" +msgstr "sınır" -#: breakqual/models.py:33 +#: breakqual/models.py msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" -msgstr "" +msgstr "En fazla bu kadar çok takım bu kategori için herkese açık tabda gösterilecek. Sınır istemiyorsanız 0 kullanın." -#: breakqual/models.py:36 +#: breakqual/models.py msgid "Standard" -msgstr "" +msgstr "Standart" -#: breakqual/models.py:37 +#: breakqual/models.py msgid "AIDA 1996" msgstr "" -#: breakqual/models.py:38 +#: breakqual/models.py msgid "AIDA 2016 (Easters)" msgstr "" -#: breakqual/models.py:39 +#: breakqual/models.py msgid "AIDA 2016 (Australs)" msgstr "" -#: breakqual/models.py:40 +#: breakqual/models.py msgid "AIDA 2019 (Australs, Dynamic Cap)" msgstr "" -#: breakqual/models.py:44 +#: breakqual/models.py msgid "rule" -msgstr "" +msgstr "kural" -#: breakqual/models.py:45 +#: breakqual/models.py msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" -msgstr "" +msgstr "Break hesaplanması için kural (çoğu turnuvada \"Standart\" kullanılmalıdır)" -#: breakqual/models.py:48 breakqual/models.py:105 +#: breakqual/models.py msgid "breaking teams" -msgstr "" +msgstr "break olan takımlar" -#: breakqual/models.py:57 breakqual/models.py:76 +#: breakqual/models.py msgid "break category" -msgstr "" +msgstr "break kategorisi" -#: breakqual/models.py:58 +#: breakqual/models.py msgid "break categories" -msgstr "" +msgstr "break kategorileri" -#: breakqual/models.py:78 +#: breakqual/models.py msgid "team" msgstr "takım" -#: breakqual/models.py:80 +#: breakqual/models.py msgid "rank" msgstr "sıralama" -#: breakqual/models.py:82 +#: breakqual/models.py msgid "break rank" -msgstr "" +msgstr "Break sırası" -#: breakqual/models.py:91 +#: breakqual/models.py msgid "Capped" -msgstr "" +msgstr "Sınırlı" -#: breakqual/models.py:92 +#: breakqual/models.py msgid "Ineligible" -msgstr "" +msgstr "Uygun Değil" -#: breakqual/models.py:93 +#: breakqual/models.py msgid "Different break" -msgstr "" +msgstr "Farklı Break" -#: breakqual/models.py:94 +#: breakqual/models.py msgid "Disqualified" -msgstr "" +msgstr "Diskalifiye" -#: breakqual/models.py:95 +#: breakqual/models.py msgid "Lost coin toss" -msgstr "" +msgstr "Yazı tura kaybedildi" -#: breakqual/models.py:96 +#: breakqual/models.py msgid "Withdrawn" -msgstr "" +msgstr "Çekilmiş" -#: breakqual/models.py:99 +#: breakqual/models.py msgid "remark" -msgstr "" +msgstr "Açıklama" -#: breakqual/models.py:100 +#: breakqual/models.py msgid "Used to explain why an otherwise-qualified team didn't break" -msgstr "" +msgstr "Aksi takdirde kalifiye olmuş bir takımın neden break olmadığını açıklamak için kullanılır" -#: breakqual/models.py:104 +#: breakqual/models.py msgid "breaking team" -msgstr "" +msgstr "break olan takım" -#: breakqual/templates/break_categories_edit.html:4 -#: breakqual/templates/break_categories_edit.html:5 -#: breakqual/templates/breaking_index.html:30 +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html msgid "Break Categories" -msgstr "" +msgstr "break kategorileri" -#: breakqual/templates/break_categories_edit.html:17 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." -msgstr "" +msgstr "Break kategorileri, kategoriye özel break turları yapmanızı sağlar, örneğin acemi veya ESL kategorileri. Bu sayfada, hangi break kategorilerinin bulunduğunu tanımlayabilirsiniz. Kategorileri tanımladıktan sonra, break turları otomatik olarak oluşturulur ve Uygunluk sayfasında takım uygunluğunu ayarlayabilirsiniz." -#: breakqual/templates/break_categories_edit.html:25 +#: breakqual/templates/break_categories_edit.html #, python-format msgid "If you want to delete break categories, use the Edit Database area." -msgstr "" +msgstr "Ara kategorileri silmek istiyorsanız, Veritabanını Düzenle alanını kullanın." -#: breakqual/templates/break_categories_edit.html:31 +#: breakqual/templates/break_categories_edit.html msgid "Save Break Categories" -msgstr "" +msgstr "Break Kategorilerini Kaydet" -#: breakqual/templates/breaking_adjs.html:8 +#: breakqual/templates/breaking_adjs.html #, python-format msgid "Adjudicators can be marked as breaking in the Feedback Overview section." -msgstr "" +msgstr "Jürilerin break durumu Geribildirim Genel Bakış bölümünden işaretlenebilir." -#: breakqual/templates/breaking_index.html:4 -#: breakqual/templates/breaking_index.html:5 +#: breakqual/templates/breaking_index.html msgid "Breaks" -msgstr "" +msgstr "Breakler" -#: breakqual/templates/breaking_index.html:10 -msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " -msgstr "" +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +msgstr "Bu turnuvada herhangi bir break ayarlanmamıştır. Nasıl break oluşturabileceğinize buradan bakabilirsiniz. " -#: breakqual/templates/breaking_index.html:33 +#: breakqual/templates/breaking_index.html msgid "Team Eligibility" -msgstr "" +msgstr "Takım Uygunluğu" -#: breakqual/templates/breaking_index.html:49 -#: breakqual/templates/breaking_teams.html:4 -#: breakqual/templates/breaking_teams.html:14 -#: breakqual/templates/breakqual_subnav.html:9 -#: breakqual/templates/public_break_index.html:15 breakqual/views.py:73 +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py #, python-format msgid "%(category)s Break" -msgstr "" +msgstr "%(category)s Break" -#: breakqual/templates/breaking_index.html:52 +#: breakqual/templates/breaking_index.html #, python-format msgid " %(size)s Spots " -msgstr "" +msgstr " %(size)s Konumlar " -#: breakqual/templates/breaking_index.html:64 +#: breakqual/templates/breaking_index.html msgid "Teams Eligible" -msgstr "" +msgstr "Uygun Takımlar" -#: breakqual/templates/breaking_index.html:76 +#: breakqual/templates/breaking_index.html msgid "Breaking" -msgstr "" +msgstr "Break Olan" -#: breakqual/templates/breaking_index.html:84 +#: breakqual/templates/breaking_index.html msgid "Excluded" -msgstr "" +msgstr "Dahil Değil" -#: breakqual/templates/breaking_index.html:92 +#: breakqual/templates/breaking_index.html msgid "Eligible" -msgstr "" +msgstr "Uygun" -#: breakqual/templates/breaking_index.html:104 +#: breakqual/templates/breaking_index.html msgid "Mark teams as eligible" -msgstr "" +msgstr "Takımları uygun olarak işaretle" -#: breakqual/templates/breaking_index.html:109 +#: breakqual/templates/breaking_index.html msgid "Generate this break" -msgstr "" +msgstr "Bu breaki oluştur" -#: breakqual/templates/breaking_index.html:112 +#: breakqual/templates/breaking_index.html msgid "View this break" -msgstr "" +msgstr "Bu breaki görüntüle" -#: breakqual/templates/breaking_teams.html:9 +#: breakqual/templates/breaking_teams.html msgid "publicly visible" -msgstr "" +msgstr "herkese açık" -#: breakqual/templates/breaking_teams.html:11 +#: breakqual/templates/breaking_teams.html msgid "not publicly visible" -msgstr "" +msgstr "herkese açık değil" -#: breakqual/templates/breaking_teams.html:27 +#: breakqual/templates/breaking_teams.html msgid "Delete and Regenerate All Breaks" -msgstr "" +msgstr "Tüm breakleri Sil ve Yeniden Oluştur" -#: breakqual/templates/breaking_teams.html:36 +#: breakqual/templates/breaking_teams.html msgid "Generate the Break for All Categories" -msgstr "" +msgstr "Tüm Kategoriler için Break Oluştur" -#: breakqual/templates/breaking_teams.html:48 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." -msgstr "" +msgstr "Bu kategori için 0 takım uygun olarak işaretli. — bu breakin doğru şekilde oluşturulması için bazı uygun takımlar eklemeniz gerekir." -#: breakqual/templates/breaking_teams.html:60 +#: breakqual/templates/breaking_teams.html #, python-format msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." -msgstr "" +msgstr "Bu break %(category)s kuralını kullanır — farklı bir kural kullanmak isterseniz, bu break kategorisinin kuralını Veritabanını Düzenle, alanında düzenlemeniz ve ardından tüm breakleri silip yeniden oluşturmanız gerekir. Lütfen breaki duyurmadan veya açıklamadan önce bunu kontrol edin. Break oluşturan kod her zaman iyi çalışmayabilir." -#: breakqual/templates/breaking_teams.html:66 +#: breakqual/templates/breaking_teams.html #, python-format msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." -msgstr "" +msgstr "Breaki düzenlemek için sağ sütundaki açıklamaları kullanın. Bir yorumu olan herhangi bir takım bu breakin dışında tutulacaktır (break üreteci bazen kendi açıklamalarını ekler). Ardından, aşağıdaki uygun Yorumları Kaydet ve Güncelle düğmesine tıklayın. Karmaşık break kurallarınız varsa (örneğin, bazı takımların tercih ettikleri kategoriyi seçmelerine izin veriliyorsa), doğru breaki elde etmek için açıklamaları birkaç kez güncellemeniz gerekebilir. Son çare olarak, break olan takımlar listesini doğrudan Veritabanını Düzenle alanından ayarlayabilirsiniz." -#: breakqual/templates/breaking_teams.html:76 +#: breakqual/templates/breaking_teams.html #, python-format msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." -msgstr "" +msgstr "Dikkat! \"Herkese açık break olan ekipler\" seçeneği açıktır, break herkes tarafından görülebilir. Breakleri güncellerseniz, değişiklikler hemen görünür hale gelir bunları gözden geçirme şansınız olmaz. Breakleri oluşturmadan önce turnuva ayarlama sayfasından bu ayarı devre dışı bırakmanız önerilir." -#: breakqual/templates/breaking_teams.html:88 +#: breakqual/templates/breaking_teams.html msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." -msgstr "" +msgstr "Break henüz oluşturulmadı. Tüm kategoriler için break oluşturmak ister misiniz? Tüm ön turlar tamamlanmadan önce break oluşturmak güvenlidir - daha sonra yeniden oluşturabilirsiniz." -#: breakqual/templates/breaking_teams.html:107 +#: breakqual/templates/breaking_teams.html msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." -msgstr "" +msgstr "Dikkat! \"Herkese açık break olan ekipler\" seçeneği açıktır, break herkes tarafından görülebilir. Breakleri güncellerseniz, değişiklikler hemen görünür hale gelir bunları gözden geçirme şansınız olmaz." -#: breakqual/templates/breaking_teams.html:120 +#: breakqual/templates/breaking_teams.html msgid "Save Remarks and Update All Breaks" -msgstr "" +msgstr "Açıklamaları Kaydet ve Tüm Breakleri Güncelle" -#: breakqual/templates/breaking_teams.html:125 +#: breakqual/templates/breaking_teams.html #, python-format msgid "Save Remarks and Update the %(category)s Break" -msgstr "" +msgstr "Açıklamaları Kaydet ve %(category)s Breakini Güncelle" -#: breakqual/templates/breaking_teams.html:137 +#: breakqual/templates/breaking_teams.html #, python-format msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" -msgstr "" +msgstr "Bu kategori için%(count)s takım uygun olarak işaretlenmiş. Daha fazla uygun takım eklemek ister misiniz?" -#: breakqual/templates/breakqual_subnav.html:5 +#: breakqual/templates/breakqual_subnav.html msgid "Overview" -msgstr "" +msgstr "Genel bakış" -#: breakqual/templates/breakqual_subnav.html:15 +#: breakqual/templates/breakqual_subnav.html msgid "Adjudicators' Break" -msgstr "" +msgstr "Jüri Breaki" -#: breakqual/templates/edit_break_eligibility.html:7 +#: breakqual/templates/edit_break_eligibility.html #, python-format msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." -msgstr "" +msgstr "Herhangi bir break kategorisi tanımlanmamış. Yeni mola kategorileri oluşturmak istiyorsanız öncelikle veritabanı ayarla kısmında onları ekleyip ardından ekibin uygunluğunu ayarlamak için bu sayfaya dönün." -#: breakqual/templates/public_break_index.html:4 -#: breakqual/templates/public_break_index.html:5 breakqual/views.py:66 +#: breakqual/templates/public_break_index.html breakqual/views.py msgid "Break" -msgstr "" +msgstr "Break" -#: breakqual/templates/public_break_index.html:23 +#: breakqual/templates/public_break_index.html msgid "Adjudicators" msgstr "Jüriler" #. Translators: abbreviation for "grand final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "Grand Final" -msgstr "" +msgstr "Son Final" -#: breakqual/utils.py:129 +#: breakqual/utils.py msgid "GF" -msgstr "" +msgstr "SF" #. Translators: abbreviation for "semifinals" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "Semifinals" msgstr "Yarı Final" -#: breakqual/utils.py:131 +#: breakqual/utils.py msgid "SF" msgstr "YF" #. Translators: abbreviation for "quarterfinals" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "Quarterfinals" msgstr "Çeyrek Final" -#: breakqual/utils.py:133 +#: breakqual/utils.py msgid "QF" msgstr "ÇF" #. Translators: abbreviation for "octofinals" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "Octofinals" msgstr "Ön Çeyrek Final" -#: breakqual/utils.py:135 +#: breakqual/utils.py msgid "OF" msgstr "ÖF" #. Translators: abbreviation for "double-octofinals" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "Double-Octofinals" -msgstr "" +msgstr "Çift Ön Çeyrek Final" -#: breakqual/utils.py:137 +#: breakqual/utils.py msgid "DOF" -msgstr "" +msgstr "ÇÖF" #. Translators: abbreviation for "triple-octofinals" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "Triple-Octofinals" -msgstr "" +msgstr "Üçlü Ön Çeyrek Final" -#: breakqual/utils.py:139 +#: breakqual/utils.py msgid "TOF" -msgstr "" +msgstr "ÜÖF" #. Translators: abbreviation for "finals" - first character of category name -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%s Finals" -msgstr "" +msgstr "%s Final" -#: breakqual/utils.py:146 +#: breakqual/utils.py #, python-format msgid "%sF" -msgstr "" +msgstr "%sF" #. Translators: abbreviation for "semifinals" - first character of category name -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%s Semifinals" -msgstr "" +msgstr "%s Yarı Final" -#: breakqual/utils.py:148 +#: breakqual/utils.py #, python-format msgid "%sSF" -msgstr "" +msgstr "%sYF" #. Translators: abbreviation for "quarterfinals" - first character of category name -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%s Quarterfinals" -msgstr "" +msgstr "%s Çeyrek Final" -#: breakqual/utils.py:150 +#: breakqual/utils.py #, python-format msgid "%sQF" -msgstr "" +msgstr "%sÇF" #. Translators: abbreviation for "octofinals" - first character of category name -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%s Octofinals" -msgstr "" +msgstr "%s Ön Çeyrek Final" -#: breakqual/utils.py:152 +#: breakqual/utils.py #, python-format msgid "%sOF" -msgstr "" +msgstr "%sÖF" #. Translators: abbreviation for "double-octofinals" - first character of category name -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%s Double-Octofinals" -msgstr "" +msgstr "%s Çift Ön Çeyrek Final" -#: breakqual/utils.py:154 +#: breakqual/utils.py #, python-format msgid "%sDOF" -msgstr "" +msgstr "%sÇÖF" #. Translators: abbreviation for "triple-octofinals" - first character of category name -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%s Triple-Octofinals" -msgstr "" +msgstr "%s Üçlü Ön Çeyrek Final" -#: breakqual/utils.py:156 +#: breakqual/utils.py #, python-format msgid "%sTOF" -msgstr "" +msgstr "%sÜÖF" #. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "Unknown %s break round" -msgstr "" +msgstr "Bilinmeyen %s break turu" -#: breakqual/utils.py:168 +#: breakqual/utils.py #, python-format msgid "U%sBR" -msgstr "" +msgstr "B%sBT" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "Unknown break round" -msgstr "" +msgstr "Bilinmeyen break turu" -#: breakqual/utils.py:169 +#: breakqual/utils.py msgid "UBR" -msgstr "" +msgstr "BBT" -#: breakqual/views.py:97 +#: breakqual/views.py #, python-format msgid "There was an error generating the break for category %(category)s: %(message)s" -msgstr "" +msgstr "%(category)s kategorisi için break oluşturulurken bir hata oluştu: %(message)s" -#: breakqual/views.py:140 +#: breakqual/views.py msgid "Eligible for" -msgstr "" +msgstr "Uygun" -#: breakqual/views.py:144 +#: breakqual/views.py msgid "Edit Remark" -msgstr "" +msgstr "Açıklamayı Düzenle" -#: breakqual/views.py:160 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." -msgstr "" +msgstr "Break olan takım açıklamalarında yapılan değişiklikler kaydedilir ve takım breaki şu break kategorileri için güncelleştirilir: %(categories)s." -#: breakqual/views.py:167 +#: breakqual/views.py #, python-format msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." -msgstr "" +msgstr "Break olan takım açıklamalarında yapılan değişiklikler kaydedildi ve takım break kategorisi %(category)s için güncellendi." -#: breakqual/views.py:172 +#: breakqual/views.py msgid "Changes to breaking team remarks saved." -msgstr "" +msgstr "Break olan takım açıklamalarında yapılan değişiklikler kaydedildi." -#: breakqual/views.py:196 +#: breakqual/views.py #, python-format msgid "Teams break generated for the following break categories: %(categories)s." -msgstr "" +msgstr "Aşağıdaki break kategorileri için takım breakleri oluşturuldu: %(categories)s." -#: breakqual/views.py:209 +#: breakqual/views.py msgid "Breaking Adjudicators" -msgstr "" +msgstr "Break Olan Jüriler" -#: breakqual/views.py:274 +#: breakqual/views.py msgid "Break Eligibility" -msgstr "" +msgstr "Break Uygunluğu" -#: breakqual/views.py:303 +#: breakqual/views.py #, python-format msgid "%s Speakers" msgstr "%s Konuşmacılar" -#: breakqual/views.py:306 +#: breakqual/views.py #, python-format msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Takımın %(nspeakers)s tane %(category)s konuşmacı kategorisinden konuşmacısı var." +msgstr[1] "Takımın %(nspeakers)s tane %(category)s konuşmacı kategorisinden konuşmacısı var." diff --git a/tabbycat/draw/locale/tr/LC_MESSAGES/django.po b/tabbycat/draw/locale/tr/LC_MESSAGES/django.po index 4e846c863e8..9094babcb73 100644 --- a/tabbycat/draw/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/tr/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:27\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" "MIME-Version: 1.0\n" @@ -12,1133 +12,1113 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 930\n" -#: draw/admin.py:67 -#, python-format -msgid "%(count)d debate had its status set to %(status)s." -msgid_plural "%(count)d debates had their statuses set to %(status)s." -msgstr[0] "" -msgstr[1] "" - -#: draw/admin.py:74 -#, python-format -msgid "Set result status to %(status)s" -msgstr "" - -#: draw/admin.py:84 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides confirmed." msgid_plural "%(count)d debates were marked as having their sides confirmed." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d maçının tarafları onaylandı olarak işaretlendi." +msgstr[1] "%(count)d maçının tarafları onaylandı olarak işaretlendi." + +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "Tarafları onaylanmamış olarak işaretle" -#: draw/admin.py:93 +#: draw/admin.py #, python-format msgid "%(count)d debate was marked as having its sides not confirmed." msgid_plural "%(count)d debates were marked as having their sides not confirmed." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d maçının tarafları onaylanmadı olarak işaretlendi." +msgstr[1] "%(count)d maçının tarafları onaylanmadı olarak işaretlendi." -#: draw/apps.py:7 draw/views.py:429 draw/views.py:432 +#: draw/apps.py draw/views.py msgid "Draw" -msgstr "" +msgstr "Kura" -#: draw/generator/__init__.py:15 +#: draw/generator/__init__.py msgid "Too many swaps" -msgstr "" +msgstr "Çok fazla takas" -#: draw/generator/__init__.py:16 +#: draw/generator/__init__.py msgid "One-up-one-down (history)" -msgstr "" +msgstr "Bir-yukarı-bir-aşağı (tarihçe)" -#: draw/generator/__init__.py:17 +#: draw/generator/__init__.py msgid "One-up-one-down (institution)" -msgstr "" +msgstr "Bir-yukarı-bir-aşağı (kurum)" -#: draw/generator/__init__.py:18 +#: draw/generator/__init__.py msgid "One-up-one-down (to accommodate)" -msgstr "" +msgstr "Bir-yukarı-bir-aşağı (uyum sağlamak için)" -#: draw/generator/__init__.py:19 +#: draw/generator/__init__.py msgid "Bubble up (history)" -msgstr "" +msgstr "Yükselen Takımlar (tarihçe)" -#: draw/generator/__init__.py:20 +#: draw/generator/__init__.py msgid "Bubble down (history)" -msgstr "" +msgstr "Düşen Takımlar (geçmiş)" -#: draw/generator/__init__.py:21 +#: draw/generator/__init__.py msgid "Bubble up (institution)" -msgstr "" +msgstr "Yükselen Takımlar (kurum)" -#: draw/generator/__init__.py:22 +#: draw/generator/__init__.py msgid "Bubble down (institution)" -msgstr "" +msgstr "Düşen Takımlar (kurum)" -#: draw/generator/__init__.py:23 +#: draw/generator/__init__.py msgid "Bubble up (to accommodate)" -msgstr "" +msgstr "Yükselen Takımlar (uyum sağlamak için)" -#: draw/generator/__init__.py:24 +#: draw/generator/__init__.py msgid "Bubble down (to accommodate)" -msgstr "" +msgstr "Düşen Takımlar (uyum sağlamak için)" -#: draw/generator/__init__.py:25 +#: draw/generator/__init__.py msgid "Can't bubble up/down" -msgstr "" +msgstr "Yükselen/Düşen Takımlar yapılamıyor" -#: draw/generator/__init__.py:26 +#: draw/generator/__init__.py msgid "Pull-up team" -msgstr "" +msgstr "Çıkma Takımı" -#: draw/generator/bpelimination.py:36 draw/generator/elimination.py:68 +#: draw/generator/bpelimination.py draw/generator/elimination.py #, python-format msgid "%d debates in the previous round don't have a result." -msgstr "" +msgstr "Bir önceki turdaki %d maçın bir sonucu yok." -#: draw/generator/bpelimination.py:38 +#: draw/generator/bpelimination.py #, python-format msgid "%d debates in the previous round don't have exactly two teams advancing." -msgstr "" +msgstr "Bir önceki turdaki %d maçda tam iki takım ilerlemiyor." -#: draw/generator/bpelimination.py:71 +#: draw/generator/bpelimination.py #, python-format msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." -msgstr "" +msgstr "Kısmi eleme turunun oda sıralamaları, tek sayıda takımın (%(nbypassing)d) atladığını gösteriyor." -#: draw/generator/bpelimination.py:75 +#: draw/generator/bpelimination.py #, python-format -msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(advancing)d teams advanced from it." -msgstr "" +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." +msgstr "Kısmi eleme turunun oda sıralamaları, %(nbypassing)d takımın bunu atladığını, ancak %(nadvancing)d takımın ondan geçtiğini gösteriyor" -#: draw/generator/bpelimination.py:122 +#: draw/generator/bpelimination.py #, python-format msgid "The number of debates (%d) in the last round is not a power of two." -msgstr "" +msgstr "Son turdaki maçların sayısı (%d) ikinin katı değil." -#: draw/generator/bphungarian.py:171 +#: draw/generator/bphungarian.py #, python-format msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." -msgstr "" +msgstr "Rényi sırası negatif olamaz ve şu anda %(alpha)f olarak ayarlanmıştır." -#: draw/generator/common.py:51 +#: draw/generator/common.py #, python-format msgid "The number of teams presented for the draw was not a multiple of %(num)d." -msgstr "" +msgstr "Kura çekimi için sunulan takım sayısı %(num)d'nin katı değildi." -#: draw/generator/common.py:54 +#: draw/generator/common.py msgid "There were no teams for the draw." -msgstr "" +msgstr "Kura çekimi için takım yoktu." -#: draw/generator/elimination.py:43 +#: draw/generator/elimination.py #, python-format msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." -msgstr "" +msgstr "Bu kategoride kırılan sadece %d takım var; bir eleme turu kurası oluşturmak için en az iki tane olması gerekir." -#: draw/generator/elimination.py:75 +#: draw/generator/elimination.py #, python-format msgid "The number of teams (%d) in this round is not a power of two." -msgstr "" +msgstr "Bu turdaki takım sayısı (%d) ikinin katı değil." -#: draw/generator/powerpair.py:78 +#: draw/generator/powerpair.py #, python-format msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." -msgstr "" +msgstr "%(total)d takımdan %(noninteger)d takım sıralamalarında tamsayı olmayan bir ilk metriğe sahiptir. Ara aşamalar, ilk takım sıralamaları metriğinin bir tamsayı olmasını gerektirir (genellikle puan veya galibiyetler)." -#: draw/generator/random.py:97 +#: draw/generator/random.py #, python-format msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." -msgstr "" +msgstr "%(aff_count)d olumlu takım vardı ama %(neg_count)d negatif takım vardı." -#: draw/generator/random.py:100 +#: draw/generator/random.py msgid "One or more teams had an allocated side that wasn't affirmative or negative." -msgstr "" +msgstr "Bir veya daha fazla takımın olumlu veya olumsuz olmayan tahsis edilmiş bir tarafı vardı." -#: draw/manager.py:41 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with two-team formats." -msgstr "" +msgstr "%(type)s kura türü iki takımlı formatlarla kullanılamaz." -#: draw/manager.py:43 +#: draw/manager.py #, python-format msgid "The draw type %(type)s can't be used with British Parliamentary." -msgstr "" +msgstr "%(type)s kura türü British Parliamentary ile kullanılamaz." -#: draw/manager.py:45 +#: draw/manager.py #, python-format msgid "Unrecognised \"teams in debate\" option: %(option)s" -msgstr "" +msgstr "Tanınmayan \"maçdaki takımlar\" seçeneği: %(option)s" -#: draw/manager.py:269 +#: draw/manager.py #, python-format msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." -msgstr "" +msgstr "Bu break kategorisi için break boyutu (%(size)d) geçersizdi. İkinin katının ya altı ya da sekiz katı olmalıdır." -#: draw/models.py:27 +#: draw/models.py msgid "none" -msgstr "" +msgstr "hiçbiri" -#: draw/models.py:28 +#: draw/models.py msgid "postponed" -msgstr "" +msgstr "Ertelenen" -#: draw/models.py:29 +#: draw/models.py msgid "draft" -msgstr "" +msgstr "taslak" -#: draw/models.py:30 +#: draw/models.py msgid "confirmed" -msgstr "" +msgstr "onaylanmış" -#: draw/models.py:36 draw/models.py:389 +#: draw/models.py msgid "round" msgstr "tur" -#: draw/models.py:38 -msgid "venue" -msgstr "salon" +#: draw/models.py +msgid "room" +msgstr "oda" -#: draw/models.py:41 +#: draw/models.py msgid "bracket" -msgstr "" +msgstr "aşama" -#: draw/models.py:43 +#: draw/models.py msgid "room rank" -msgstr "" +msgstr "oda sıralaması" -#: draw/models.py:49 +#: draw/models.py msgid "importance" -msgstr "" +msgstr "önem" -#: draw/models.py:51 +#: draw/models.py msgid "result status" -msgstr "" +msgstr "sonuç durumu" -#: draw/models.py:53 +#: draw/models.py msgid "sides confirmed" -msgstr "" +msgstr "taraflar onaylandı" -#: draw/models.py:54 +#: draw/models.py msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." -msgstr "" +msgstr "İşaretlenmezse, bu tartışmada takımlara atanan taraflar sadece yer tutucudur." -#: draw/models.py:57 draw/models.py:272 +#: draw/models.py msgid "debate" msgstr "maç" -#: draw/models.py:58 +#: draw/models.py msgid "debates" -msgstr "" +msgstr "maçlar" #. Translators: This is appended to a list of teams, e.g. "Auckland #. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading #. space. -#: draw/models.py:77 draw/models.py:102 +#: draw/models.py msgid " (sides not confirmed)" -msgstr "" +msgstr " (taraflar onaylanmadı)" #. Translators: This goes between teams in a debate, e.g. "Auckland 1 #. vs Vic Wellington 1". Mind the leading and trailing spaces. -#: draw/models.py:89 draw/models.py:106 +#: draw/models.py msgid " vs " -msgstr "" +msgstr " Vs " -#: draw/models.py:262 +#: draw/models.py msgid "affirmative" -msgstr "" +msgstr "Olumlu" -#: draw/models.py:263 +#: draw/models.py msgid "negative" -msgstr "" +msgstr "muhalefet" -#: draw/models.py:264 +#: draw/models.py msgid "opening government" -msgstr "" +msgstr "hükümet açılış" -#: draw/models.py:265 +#: draw/models.py msgid "opening opposition" -msgstr "" +msgstr "muhalefet açılış" -#: draw/models.py:266 +#: draw/models.py msgid "closing government" -msgstr "" +msgstr "hükümet kapanış" -#: draw/models.py:267 +#: draw/models.py msgid "closing opposition" -msgstr "" +msgstr "muhalefet kapanış" -#: draw/models.py:274 draw/models.py:391 +#: draw/models.py msgid "team" msgstr "takım" -#: draw/models.py:276 draw/models.py:393 +#: draw/models.py msgid "side" -msgstr "" +msgstr "taraf" -#: draw/models.py:282 +#: draw/models.py msgid "debate team" -msgstr "" +msgstr "tartışma ekibi" -#: draw/models.py:283 +#: draw/models.py msgid "debate teams" -msgstr "" - -#: draw/models.py:311 -msgid "placed 1st" -msgstr "" - -#: draw/models.py:313 -msgid "placed 2nd" -msgstr "" +msgstr "tartışma ekipleri" -#: draw/models.py:315 -msgid "placed 3rd" -msgstr "" - -#: draw/models.py:317 -msgid "placed 4th" -msgstr "" +#: draw/models.py +#, python-format +msgid "placed %(place)s" +msgstr "%(place)s oldu" -#: draw/models.py:319 draw/models.py:326 +#: draw/models.py msgid "result unknown" -msgstr "" +msgstr "sonucu bilinmiyor" -#: draw/models.py:322 +#: draw/models.py msgid "won" -msgstr "" +msgstr "Galibiyet" -#: draw/models.py:324 +#: draw/models.py msgid "lost" -msgstr "" +msgstr "Mağlubiyet" -#: draw/models.py:397 +#: draw/models.py msgid "team side allocation" -msgstr "" +msgstr "takım taraf tahsisi" -#: draw/models.py:398 +#: draw/models.py msgid "team side allocations" -msgstr "" +msgstr "takım taraf tahsisleri" #. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", #. "Opening government: Total speaker score", "Closing opposition: Number of firsts" -#: draw/tables.py:33 +#: draw/tables.py #, python-format msgid "%(side)s: %(metric)s" -msgstr "" +msgstr "%(side)s: %(metric)s" -#: draw/tables.py:76 +#: draw/tables.py #, python-format msgid "Team %(num)d" msgstr "Takım %(num)d" -#: draw/tables.py:88 +#: draw/tables.py msgid "Room rank of this debate" -msgstr "" +msgstr "Bu maçın oda sıralaması" -#: draw/tables.py:96 +#: draw/tables.py msgid "Bracket of this debate" -msgstr "" +msgstr "Bu maçın aşamaları" -#: draw/tables.py:165 +#: draw/tables.py msgid "side history
    \n" "(number of times the team has been on each side before this round)" -msgstr "" +msgstr "Taraf tarihi
    \n" +" (takımın bu turdan önce her iki tarafta bulunma sayısı)" #. Translators: Abbreviation for "side history" -#: draw/tables.py:167 +#: draw/tables.py msgid "SH" -msgstr "" +msgstr "SH" -#: draw/tables.py:232 +#: draw/tables.py msgid "Went from balanced to imbalanced" -msgstr "" +msgstr "Dengeliden dengesizliğe geçti" -#: draw/tables.py:233 +#: draw/tables.py msgid "Went from imbalanced to balanced" -msgstr "" +msgstr "Dengesizden dengeliye geçti" -#: draw/tables.py:234 +#: draw/tables.py msgid "Best improvement possible, still imbalanced" -msgstr "" +msgstr "Mümkün olan en iyi geliştirme, hala dengesiz" -#: draw/tables.py:235 +#: draw/tables.py msgid "Was imbalanced and still imbalanced" -msgstr "" +msgstr "Dengesizdi ve hala dengesiz" -#: draw/tables.py:256 draw/tables.py:378 +#: draw/tables.py msgid "No metrics in the team standings precedence" -msgstr "" +msgstr "Takım sıralaması önceliğinde metrik yok" -#: draw/tables.py:282 +#: draw/tables.py msgid "Side" -msgstr "" +msgstr "Taraf" -#: draw/tables.py:283 +#: draw/tables.py msgid "Position this round" -msgstr "" +msgstr "Bu turu konumlandırın" -#: draw/tables.py:287 +#: draw/tables.py msgid "Before" -msgstr "" +msgstr "Önce" -#: draw/tables.py:288 +#: draw/tables.py msgid "Side history before this round" -msgstr "" +msgstr "Bu turdan önceki taraf tarihi" -#: draw/tables.py:292 +#: draw/tables.py msgid "After" -msgstr "" +msgstr "Sonra" -#: draw/tables.py:293 +#: draw/tables.py msgid "Side history after this round" -msgstr "" +msgstr "Bu turdan sonra taraf tarihi" -#: draw/tables.py:303 draw/tables.py:398 +#: draw/tables.py msgid "Cost" -msgstr "" +msgstr "Maliyet" -#: draw/tables.py:303 +#: draw/tables.py msgid "Position cost" -msgstr "" +msgstr "Pozisyon maliyeti" -#: draw/tables.py:316 +#: draw/tables.py msgid "Status" msgstr "Durum" -#: draw/tables.py:360 +#: draw/tables.py msgid "Teams with this many points are permitted in this debate
    \n" "(bracket in bold)" -msgstr "" +msgstr "Bu maça bu kadar puana sahip takımlara katılabilir
    \n" +"(aşama kalın)" -#: draw/tables.py:386 +#: draw/tables.py #, python-format msgid "%(team)s: %(metric)s" msgstr "%(team)s: %(metric)s" -#: draw/tables.py:393 +#: draw/tables.py msgid "side history before this round" -msgstr "" +msgstr "bu turdan önceki taraf tarihi" -#: draw/tables.py:393 +#: draw/tables.py msgid "Sides" -msgstr "" +msgstr "Taraflar" -#: draw/tables.py:398 +#: draw/tables.py msgid "position cost" -msgstr "" +msgstr "pozisyon maliyeti" -#: draw/templates/admin/draw/debateteam/delete_warning.html:5 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" -msgstr "" +msgstr "DURUN!!! Önce bunu okuyun! Tartışma ekiplerini veritabanından silmek Tabbycat'i çökertebilir!" -#: draw/templates/admin/draw/debateteam/delete_warning.html:10 +#: draw/templates/admin/draw/debateteam/delete_warning.html msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." -msgstr "" +msgstr "Tabbycat, tüm maçların her iki tarafı için sadece bir takımın olmasını ve başka hiçbir takımın asla olmamasını gerektirir. Herhangi bir takımı silerseniz, her birini ya aynı maçtaki yeni bir takımla değiştirmeniz veya ilişkili maç nesnelerini silmeniz gerekir. Bunu doğru bir şekilde yapmazsanız, birçok sayfa çökebilir." -#: draw/templates/admin/draw/debateteam/delete_warning.html:15 -#: draw/templates/admin/draw/debateteam/edit_warning.html:15 +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." -msgstr "" +msgstr "Bu sık sık hataya sebep olur. Başınıza gelirse, maçları kontrol edin (Veritabanını Düzenle alanındaki Çizim bölümünün altında) ve hepsinin tam olarak bir olumlu ve bir olumsuz ekibe sahip olduğundan emin olun." -#: draw/templates/admin/draw/debateteam/edit_warning.html:5 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "WARNING!!! If you are editing debate teams, read this first!" -msgstr "" +msgstr "UYARI!!! maç ekiplerini düzenliyorsanız, önce bunu okuyun!" -#: draw/templates/admin/draw/debateteam/edit_warning.html:10 +#: draw/templates/admin/draw/debateteam/edit_warning.html msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." -msgstr "" +msgstr "Tabbycat, tüm maçların her iki tarafı için sadece bir takımın olmasını ve başka hiçbir takımın asla olmamasını gerektirir. Herhangi bir takımı silerseniz bunun böyle kalmasını sağlamalısınız. Bunu doğru bir şekilde yapmazsanız, birçok sayfa çökebilir." -#: draw/templates/draw_alerts_adjudicators.html:6 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate does not have a chair." msgid_plural "%(ndebates)s debates do not have a chair." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "1 maçın başkanı yoktur." +msgstr[1] "%(ndebates)s maçın başkanı yoktur." -#: draw/templates/draw_alerts_adjudicators.html:15 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is adjudicating multiple debates." msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(adjudicators)s birden fazla maçta jürilik yapıyor." +msgstr[1] "Aşağıdaki %(nadjs)s birden fazla maçta jürilik yapıyor: %(adjudicators)s" -#: draw/templates/draw_alerts_adjudicators.html:24 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has a panel with an even number of adjudicators." msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "1 maçta çift sayıda jüriden oluşan bir panel var." +msgstr[1] "%(ndebates)s' maçta çift sayıda jüriden oluşan bir panel var." -#: draw/templates/draw_alerts_adjudicators.html:33 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 debate has an adjudicator conflict." msgid_plural "%(ndebates)s debates have adjudicator conflicts." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "1 maçta jüri conflicti var." +msgstr[1] "%(ndebates)s maçta jüri conflicti var." -#: draw/templates/draw_alerts_adjudicators.html:42 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(adjudicators)s bu turda kullanılamaz, ancak bir maça atanmış." +msgstr[1] "Aşağıdaki %(nadjs)s jüriler bu turda kullanılamaz, ancak maçlara atanmış: %(adjudicators)s" -#: draw/templates/draw_alerts_adjudicators.html:51 +#: draw/templates/draw_alerts_adjudicators.html #, python-format msgid "1 adjudicator is available but not assigned to a debate." msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "1 jüri uygun ancak bir maça atanmamış." +msgstr[1] "%(ndebates)s jüri uygun ancak bir maça atanmamış." -#: draw/templates/draw_alerts_teams.html:6 +#: draw/templates/draw_alerts_teams.html #, python-format msgid "%(teams)s is competing in multiple debates." msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(teams)s birden fazla maçta yarışıyor." +msgstr[1] "Aşağıdaki %(nteams)s takım birden fazla maçta yarışıyor: %(teams)s" -#: draw/templates/draw_alerts_venues.html:5 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate does not have a room." msgid_plural "%(ndebates)s debates do not have a room." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "1 maçın odası yok." +msgstr[1] "%(ndebates)s maçın odası yok." -#: draw/templates/draw_alerts_venues.html:14 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "There are multiple debates in %(rooms)s." msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(rooms)s odada birden fazla maç var." +msgstr[1] "Aşağıdaki %(rooms)s odada birden fazla maç var: %(rooms)s" -#: draw/templates/draw_alerts_venues.html:23 +#: draw/templates/draw_alerts_venues.html #, python-format msgid "1 debate has a room constraint violation." msgid_plural "%(ndebates)s debates have room constraint violations." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "1 maçta oda kısıtlaması ihlali var." +msgstr[1] "%(ndebates)s maçta oda kısıtlaması ihlali var." -#: draw/templates/draw_base.html:6 +#: draw/templates/draw_base.html msgid "Availability" -msgstr "" +msgstr "Uygunluk" -#: draw/templates/draw_base.html:11 draw/templates/draw_status_draft.html:9 +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html msgid "Edit Sides/Matchups" -msgstr "" +msgstr "Tarafları/Eşleşmeleri Düzenle" -#: draw/templates/draw_base.html:16 +#: draw/templates/draw_base.html msgid "Redo Draw" -msgstr "" +msgstr "Kurayı Yeniden Çek" -#: draw/templates/draw_base.html:19 +#: draw/templates/draw_base.html msgid "Draw Details" -msgstr "" +msgstr "Kura Detayları" -#: draw/templates/draw_base.html:23 +#: draw/templates/draw_base.html msgid "Position Balance" -msgstr "" +msgstr "Taraf Dengesi" -#: draw/templates/draw_base.html:31 draw/templates/draw_display_admin.html:4 -#: draw/templates/draw_display_admin.html:5 -#: draw/templates/draw_display_assistant.html:4 -#: draw/templates/draw_display_assistant.html:5 +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw" -msgstr "" +msgstr "Kurayı Göster" -#: draw/templates/draw_confirm_regeneration.html:5 +#: draw/templates/draw_confirm_regeneration.html msgid "Confirm draw regeneration" -msgstr "" +msgstr "Kura yeniden çekilmesini onayla" -#: draw/templates/draw_confirm_regeneration.html:10 -#: draw/templates/draw_subpage.html:6 +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html msgid "Back to Draw" -msgstr "" +msgstr "Kuraya geri dön" -#: draw/templates/draw_confirm_regeneration.html:16 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Confirm Draw Deletion for %(round)s" -msgstr "" +msgstr "%(round)s için Kura Silme İşlemini Onayla" -#: draw/templates/draw_confirm_regeneration.html:22 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" -msgstr "" +msgstr "%(round)s için kurayı yeniden oluşturmak istiyor musunuz? Bu, mevcut kuradaki tüm maçları ballotları ve jüri tahsisleri dahil siler ve geri alınamaz. Eğer sonuçlar girildiyse yüksek ihtimalle bunu yapmak istemiyorsunuz!" -#: draw/templates/draw_confirm_regeneration.html:33 +#: draw/templates/draw_confirm_regeneration.html #, python-format msgid "Yes, I want to delete the current draw for %(round)s" -msgstr "" +msgstr "Evet, %(round)s için geçerli kurayı silmek istiyorum" -#: draw/templates/draw_display_admin.html:17 +#: draw/templates/draw_display_admin.html msgid "View Draw" -msgstr "" +msgstr "Kurayı Görüntüle" -#: draw/templates/draw_display_admin.html:23 +#: draw/templates/draw_display_admin.html #, python-format msgid "Debates start at %(start_time)s" -msgstr "" +msgstr "Maçlar %(start_time)s'da başlar" -#: draw/templates/draw_display_admin.html:27 +#: draw/templates/draw_display_admin.html msgid "Add Start Time" -msgstr "" +msgstr "Başlangıç Saati Ekle" -#: draw/templates/draw_display_admin.html:34 +#: draw/templates/draw_display_admin.html msgid "Enter Results" -msgstr "" +msgstr "Sonuç Gir" -#: draw/templates/draw_display_admin.html:46 +#: draw/templates/draw_display_admin.html msgid "Motion Details" -msgstr "" +msgstr "Önerge Detayları" -#. Translators: Used when only one motion is expected, but there is more than one. -#: draw/templates/draw_display_admin.html:54 -#: draw/templates/draw_display_admin.html:80 +#: draw/templates/draw_display_admin.html #, python-format msgid "%(motions_count)s motion has been entered." msgid_plural "%(motions_count)s motions have been entered." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(motions_count)s önerge girildi." +msgstr[1] "%(motions_count)s önerge girildi." -#: draw/templates/draw_display_admin.html:60 -msgid "Edit motions" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "Önergeyi Düzenle" +msgstr[1] "Önergeleri Düzenle" -#: draw/templates/draw_display_admin.html:63 +#: draw/templates/draw_display_admin.html msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" -msgstr "" +msgstr "Yapılandırmanız/formatınız, önergelerin ballotun bir parçası olarak belirtilmesini gerektirir. Sonuçlar gelmeden önce eklendiğinden emin olun!" -#: draw/templates/draw_display_admin.html:65 -msgid "Enter motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:75 -msgid "The motion has been entered." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." +msgstr "Duyurular sırasında görüntülemek, ballotlara yazdırmak veya (daha sonra) herkese açık önergeler/istatistik sayfalarında görüntülemek istiyorsanız bir önerge eklenmelidir." -#: draw/templates/draw_display_admin.html:87 -msgid "Edit the motion" -msgstr "" - -#: draw/templates/draw_display_admin.html:90 -msgid "A motion should be added if you want to display it to the auditorium or print in on your ballots (using the links below) or to display it (later) on the public motions page." -msgstr "" - -#: draw/templates/draw_display_admin.html:92 +#: draw/templates/draw_display_admin.html msgid "Enter a motion" -msgstr "" +msgid_plural "Enter motions" +msgstr[0] "Önerge gir" +msgstr[1] "Önerge gir" -#: draw/templates/draw_display_admin.html:106 +#: draw/templates/draw_display_admin.html msgid "Release Draw" -msgstr "" +msgstr "Kurayı Yayınla" -#: draw/templates/draw_display_admin.html:112 +#: draw/templates/draw_display_admin.html msgid "You have not generated a draw for this round yet. There is nothing to release." -msgstr "" +msgstr "Bu tur için henüz bir kura oluşturmadınız. Yayınlanacak bir şey yok." -#: draw/templates/draw_display_admin.html:117 +#: draw/templates/draw_display_admin.html msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." -msgstr "" +msgstr "Bu tur için kura çekimi hala taslak halinde. Yayınlamadan önce kurayı onaylayın." -#: draw/templates/draw_display_admin.html:122 +#: draw/templates/draw_display_admin.html msgid "Unrelease draw to public" -msgstr "" +msgstr "Kurayı yayından kaldır" -#: draw/templates/draw_display_admin.html:127 +#: draw/templates/draw_display_admin.html msgid "The draw has been released publicly." -msgstr "" +msgstr "Kura çekimi herkese açıklandı." -#: draw/templates/draw_display_admin.html:130 +#: draw/templates/draw_display_admin.html msgid "View public draw page" -msgstr "" +msgstr "Herkese açık kura sayfasını görüntüle" -#: draw/templates/draw_display_admin.html:139 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." -msgstr "" +msgstr "Kurayı yayınladınız, böylece ballotlar ve/veya geri bildirimler açık formlardan gönderilebilir (etkinleştirilmişse). Ancak, bu turnuvanın ayarlarında \"Çekiliş Herkese Açık\" ayarı etkinleştirilmediği sürece çekilişin kendisi herkese gösterilmez." -#: draw/templates/draw_display_admin.html:144 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." -msgstr "" +msgstr "Kurayı yayınladınız ancak, bu turnuvanın ayarlarında \"Kura Herkese Açık\" ayarı etkinleştirilmediği sürece çekilişin kendisi herkese gösterilmez." -#: draw/templates/draw_display_admin.html:154 +#: draw/templates/draw_display_admin.html msgid "Release draw to public" -msgstr "" +msgstr "Kurayı Herkese Açık Yayınla" -#: draw/templates/draw_display_admin.html:160 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." -msgstr "" +msgstr "Turnuvanız, ballotların ve geri bildirimlerin jüriler tarafından çevrimiçi olarak gönderilmesine izin verir. Bunu yapabilmeleri için kuranın yayınlanması gerekir." -#: draw/templates/draw_display_admin.html:163 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." -msgstr "" +msgstr "Turnuvanız, ballotların jüriler tarafından çevrimiçi olarak gönderilmesine izin verir. Bunu yapabilmeleri için kuranın yayınlanması gerekir." -#: draw/templates/draw_display_admin.html:166 +#: draw/templates/draw_display_admin.html msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." -msgstr "" +msgstr "Turnuvanız, geri bildirimin katılımcılar tarafından çevrimiçi olarak gönderilmesine izin verir. Bunu yapabilmeleri için kuranın yayınlanması gerekir." -#: draw/templates/draw_display_admin.html:170 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." -msgstr "" +msgstr "Turnuvanız, kurayı herkese açık olarak gösterecek şekilde ayarlıdır. Bir kuranın yayınlanması, genel sayfada gösterilmesine izin verecektir." -#: draw/templates/draw_display_admin.html:178 +#: draw/templates/draw_display_admin.html msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." -msgstr "" +msgstr "Ayarlarınızda herkese açık bir kura sayfası veya geri bildirim/ballot gönderimi yok. Kurayı yayınlamak için hiçbir neden yok." -#: draw/templates/draw_display_admin.html:196 -msgid "Release Motions" -msgstr "" - -#: draw/templates/draw_display_admin.html:197 -msgid "Release motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "Önergeyi halka açık hale getirin" +msgstr[1] "Önergeleri halka açık hale getirin" -#: draw/templates/draw_display_admin.html:198 -msgid "Unrelease motions to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "Önergeyi halka açık halden çıkartın" +msgstr[1] "Önergeleri halka açık halden çıkartın" -#: draw/templates/draw_display_admin.html:200 +#: draw/templates/draw_display_admin.html msgid "Release Motion" -msgstr "" +msgid_plural "Release Motions" +msgstr[0] "Önergeyi Yayınla" +msgstr[1] "Önergeleri Yayınla" -#: draw/templates/draw_display_admin.html:201 -msgid "Release motion to public" -msgstr "" - -#: draw/templates/draw_display_admin.html:202 -msgid "Unrelease motion to public" -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "Bu tur için herhangi bir önerge belirlenmemiştir." +msgstr[1] "Bu tur için herhangi bir önerge belirlenmemiştir." -#: draw/templates/draw_display_admin.html:216 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." -msgstr "" +msgstr "Turnuvanız, ballotlarda önergelerin seçilmesi zorunlu ve ballotların jüriler tarafından gönderilebileceği şekilde ayarlanmıştır. Maçlar bitmeden önce önergeleri yayınladığınızdan emin olun, aksi takdirde ballotlar gönderilemez." -#: draw/templates/draw_display_admin.html:220 +#: draw/templates/draw_display_admin.html msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." -msgstr "" - -#: draw/templates/draw_display_admin.html:224 -msgid "Your tournament is configured to show the motion(s) for each round on the public site. You'll need to first release the motion(s) for it to show there." -msgstr "" +msgstr "Turnuvanız, önergelerin veto edilebileceği ve ballotların jüriler tarafından gönderilebileceği şekilde ayarlanmıştır. Maçlar bitmeden önce önergeleri yayınladığınızdan emin olun, aksi takdirde ballotlar veto hakkı veremez." -#: draw/templates/draw_display_admin.html:228 -msgid "Your tournament is not configured to show the motion(s) for each round on the public site. There's no need to release the motion(s)." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "Turnuvanız, herkese açık sitede her turun önergesini gösterecek şekilde ayarlanmıştır. Orada gösterilmesi için önce önergeyi yayınlamanız gerekir." +msgstr[1] "Turnuvanız, herkese açık sitede her turun önergesini gösterecek şekilde ayarlanmıştır. Orada gösterilmesi için önce önergeyi yayınlamanız gerekir." -#: draw/templates/draw_display_admin.html:240 -msgid "Motions have been released publicly." -msgstr "" +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "Turnuvanız, herkese açık sitede her turun önergesini gösterilmeyecek şekilde ayarlanmıştır. Önergeyi yayınlamaya gerek yok." +msgstr[1] "Turnuvanız, herkese açık sitede her turun önergesini gösterilmeyecek şekilde ayarlanmıştır. Önergeleri yayınlamaya gerek yok." -#: draw/templates/draw_display_admin.html:242 +#: draw/templates/draw_display_admin.html msgid "The motion has been released publicly." -msgstr "" +msgid_plural "Motions have been released publicly." +msgstr[0] "Önerge herkese açık yayınlandı." +msgstr[1] "Önergeler herkese açık yayınlandı." -#: draw/templates/draw_display_admin.html:245 +#: draw/templates/draw_display_admin.html msgid "View public motions page" -msgstr "" +msgstr "Açık önergeler sayfasını görüntüle" -#: draw/templates/draw_display_admin.html:250 +#: draw/templates/draw_display_admin.html #, python-format msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." -msgstr "" +msgstr "Önergeleri yayınladınız, ancak bu turnuvanın ayarlarında \"önergelerin herkese açık görünümü\" ayarı etkinleştirilmediği sürece herkese gösterilmez." -#: draw/templates/draw_display_admin.html:272 -#: draw/templates/draw_display_assistant.html:13 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "(for the briefing room)" -msgstr "" +msgstr "(brifing odası için)" -#: draw/templates/draw_display_admin.html:277 -#: draw/templates/draw_display_assistant.html:18 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Room" -msgstr "" +msgstr "Kuraları odaya göre sıralı göster" -#: draw/templates/draw_display_admin.html:281 -#: draw/templates/draw_display_assistant.html:22 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draw ordered by Team" -msgstr "" +msgstr "Kuraları takıma göre sıralı göster" -#: draw/templates/draw_display_admin.html:287 -#: draw/templates/draw_display_assistant.html:28 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Room" -msgstr "" +msgstr "Tüm Maçların Kuralarını odaya göre sıralı göster" -#: draw/templates/draw_display_admin.html:291 -#: draw/templates/draw_display_assistant.html:32 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Draws for All Current Rounds ordered by Team" -msgstr "" +msgstr "Tüm Maçların Kuralarını takıma göre sıralı göster" -#: draw/templates/draw_display_admin.html:295 -#: draw/templates/draw_display_assistant.html:38 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Room" -msgstr "" +msgstr "%(round)s İçin Kuraları odaya göre sıralı göster" -#: draw/templates/draw_display_admin.html:301 -#: draw/templates/draw_display_assistant.html:44 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html #, python-format msgid "Display Draw for %(round)s ordered by Team" -msgstr "" +msgstr "%(round)s İçin Kuraları takıma göre sıralı göster" -#: draw/templates/draw_display_admin.html:309 -#: draw/templates/draw_display_assistant.html:55 +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html msgid "Display Motions" -msgstr "" +msgstr "Önergeleri Görüntüle" -#: draw/templates/draw_display_admin.html:328 +#: draw/templates/draw_display_admin.html msgid "Email Motions" -msgstr "" +msgstr "Önergeleri E-postala" -#: draw/templates/draw_display_admin.html:330 +#: draw/templates/draw_display_admin.html msgid "Email Motion" -msgstr "" +msgstr "Önergeyi E-postala" -#: draw/templates/draw_display_admin.html:350 +#: draw/templates/draw_display_admin.html msgid "Start at" -msgstr "" +msgstr "Şuradan başla:" -#: draw/templates/draw_display_assistant.html:62 +#: draw/templates/draw_display_assistant.html msgid "(for printing)" -msgstr "" +msgstr "(baskı için)" -#: draw/templates/draw_display_assistant.html:66 +#: draw/templates/draw_display_assistant.html msgid "View Ballot Forms" -msgstr "" +msgstr "Ballot Formlarını Görüntüle" -#: draw/templates/draw_display_assistant.html:71 +#: draw/templates/draw_display_assistant.html msgid "View Feedback Forms" -msgstr "" +msgstr "Geri bildirim formlarını görüntüle" -#: draw/templates/draw_display_by.html:17 +#: draw/templates/draw_display_by.html msgid "Scroll Speed" -msgstr "" +msgstr "Kaydırma Hızı" -#: draw/templates/draw_display_by.html:20 +#: draw/templates/draw_display_by.html msgid "Fast" -msgstr "" +msgstr "Hızlı" -#: draw/templates/draw_display_by.html:23 -#: draw/templates/draw_display_by.html:53 +#: draw/templates/draw_display_by.html msgid "Medium" -msgstr "" +msgstr "Orta" -#: draw/templates/draw_display_by.html:26 +#: draw/templates/draw_display_by.html msgid "Slow" -msgstr "" +msgstr "Yavaş" -#: draw/templates/draw_display_by.html:29 +#: draw/templates/draw_display_by.html msgid "Extra Slow" -msgstr "" +msgstr "Ekstra Yavaş" -#: draw/templates/draw_display_by.html:35 +#: draw/templates/draw_display_by.html msgid "Hide Adjudicators" -msgstr "" +msgstr "Jürileri Gizle" -#: draw/templates/draw_display_by.html:38 +#: draw/templates/draw_display_by.html msgid "Show Adjudicators" -msgstr "" +msgstr "Jürileri Göster" -#: draw/templates/draw_display_by.html:44 +#: draw/templates/draw_display_by.html msgid "Text Size" -msgstr "" +msgstr "Metin Boyutu" -#: draw/templates/draw_display_by.html:47 +#: draw/templates/draw_display_by.html msgid "Tiny" -msgstr "" +msgstr "Küçücük" -#: draw/templates/draw_display_by.html:50 +#: draw/templates/draw_display_by.html msgid "Small" -msgstr "" +msgstr "Küçük" -#: draw/templates/draw_display_by.html:56 +#: draw/templates/draw_display_by.html msgid "Large" -msgstr "" +msgstr "Büyük" -#: draw/templates/draw_display_by.html:59 +#: draw/templates/draw_display_by.html msgid "Huge" -msgstr "" +msgstr "Kocaman" -#: draw/templates/draw_display_by.html:65 +#: draw/templates/draw_display_by.html msgid "Stop Scroll" -msgstr "" +msgstr "Kaydırmayı Durdur" -#: draw/templates/draw_not_released.html:7 +#: draw/templates/draw_not_released.html #, python-format msgid "The draw for %(round)s has yet to be released." -msgstr "" +msgstr "%(round)s için kura henüz açıklanmadı." -#: draw/templates/draw_not_released.html:11 +#: draw/templates/draw_not_released.html msgid "The draw for the next round has yet to be released." -msgstr "" +msgstr "Bir sonraki tur için kura henüz açıklanmadı." -#: draw/templates/draw_status_confirmed.html:18 +#: draw/templates/draw_status_confirmed.html msgid "Adjudicator Allocations" -msgstr "" +msgstr "Hakem Tahsisleri" -#: draw/templates/draw_status_confirmed.html:26 +#: draw/templates/draw_status_confirmed.html msgid "There are currently fewer adjudicators checked in than there are rooms." -msgstr "" +msgstr "Şu anda giriş yapılan jürilerin sayısı odalardan daha azdır." -#: draw/templates/draw_status_confirmed.html:37 +#: draw/templates/draw_status_confirmed.html msgid "Allocate adjudicators" -msgstr "" +msgstr "Jürileri tahsis et" -#: draw/templates/draw_status_confirmed.html:40 +#: draw/templates/draw_status_confirmed.html msgid "Edit adjudicator allocation" -msgstr "" +msgstr "Jüri tahsisini düzenle" -#: draw/templates/draw_status_confirmed.html:54 +#: draw/templates/draw_status_confirmed.html msgid "Room Allocations" -msgstr "" +msgstr "Oda Tahsisleri" -#: draw/templates/draw_status_confirmed.html:62 +#: draw/templates/draw_status_confirmed.html msgid "Allocate rooms" -msgstr "" +msgstr "Oda tahsis et" -#: draw/templates/draw_status_confirmed.html:65 +#: draw/templates/draw_status_confirmed.html msgid "Edit room allocation" -msgstr "" +msgstr "Oda tahsisini düzenle" -#: draw/templates/draw_status_confirmed.html:78 +#: draw/templates/draw_status_confirmed.html msgid "Preformed Panels" -msgstr "" +msgstr "Önceden kurulmuş paneller" -#: draw/templates/draw_status_confirmed.html:84 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "There is %(npanels)s preformed panel available for this round." msgid_plural "There are %(npanels)s preformed panels available for this round." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Bu tur için %(npanels)s önceden kurulmuş panel var." +msgstr[1] "Bu tur için %(npanels)s önceden kurulmuş panel var." -#: draw/templates/draw_status_confirmed.html:91 +#: draw/templates/draw_status_confirmed.html msgid "There are no preformed panels available for this round" -msgstr "" +msgstr "Bu tur için önceden kurulmuş panel yok" -#: draw/templates/draw_status_confirmed.html:96 -#: draw/templates/draw_status_confirmed.html:103 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "Edit preformed panels for %(round)s" -msgstr "" +msgstr "%(round)s için önceden kurulmuş panelleri düzenle" -#: draw/templates/draw_status_confirmed.html:120 +#: draw/templates/draw_status_confirmed.html msgid "Side Allocations" -msgstr "" +msgstr "Taraf Tahsisleri" -#: draw/templates/draw_status_confirmed.html:125 +#: draw/templates/draw_status_confirmed.html #, python-format msgid "1 debate does not have its sides confirmed." msgid_plural "%(ndebates)s debates do not have their sides confirmed." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "1 maçın tarafları doğrulanmamıştır." +msgstr[1] "%(ndebates)s maçın tarafları doğrulanmamıştır." -#: draw/templates/draw_status_draft.html:6 +#: draw/templates/draw_status_draft.html msgid "Delete Draw" -msgstr "" +msgstr "Kurayı Sil" -#: draw/templates/draw_status_draft.html:17 +#: draw/templates/draw_status_draft.html msgid "Confirm Draw" -msgstr "" +msgstr "Kurayı Onayla" -#: draw/templates/draw_status_draft.html:25 +#: draw/templates/draw_status_draft.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." -msgstr "" +msgstr "Takım sıralama önceliği girilmemiş. Bu, takımların herhangi bir metriğe göre sıralanmadığı anlamına gelir, bu nedenle tüm takımlar herkesi içeren tek bir aşamadadır. Bunu istemiyorsanız, bu turuvananın ayarlarının sıralama kısmından takım sıralama önceliklerini girebilirsiniz, ardından kurayı silin ve yeniden oluşturun. Çoğu turnuvada, ilk metrik puan veya galibiyet olmalıdır." -#: draw/templates/draw_status_draft.html:41 +#: draw/templates/draw_status_draft.html #, python-format msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." -msgstr "" +msgstr "Aşamalar daha sık kullanılan takım puanları yerine takım sıralama önceliğindeki ilk metriğe göre, şuan %(metric)s, hazırlanır. Eğer bunu istemiyorsanız sıralama ayarlama sayfasında takım sıralama önceliğini. değiştirebilirsiniz." -#: draw/templates/draw_status_draft.html:53 +#: draw/templates/draw_status_draft.html #, python-format msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." -msgstr "" +msgstr "Bu tur için kura türü manuel olarak ayarlandı, bu nedenle Tabbycat kurayı doldurmadı. Doldurmak için Taraf/Karşılaşmalar Ayarla adresine gidin." -#: draw/templates/draw_status_draft.html:64 +#: draw/templates/draw_status_draft.html #, python-format msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." -msgstr "" +msgstr "Jüri puan aralığı 0 ve bu nedenle tahsis sırasında jüri puanları göz ardı edilir. geri bildirim düzenleme sayfasında jüri puan aralığını değiştirebilirsiniz.." -#: draw/templates/draw_status_draft.html:74 +#: draw/templates/draw_status_draft.html msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." -msgstr "" +msgstr "Tabbycat, eleme turlarında rastgele taraflar atar. Bununla birlikte, eleme turlarında, birçok turnuva bir izleyicinin önünde taraflar için kura çektiğinden, taraflar \"onaylanmamış\" olarak işaretlenir, böylece taraflar önceden atanmış gibi görünmez. Kurayı onayladıktan sonra, Tabbycat'in rastgele atamasını kabul etmek isteseniz bile, \"Tarafları / Eşleşmeleri Düzenle\" sayfasında tarafları onaylamanız gerekir." -#: draw/templates/draw_status_draft.html:81 +#: draw/templates/draw_status_draft.html msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " -msgstr "" +msgstr "Hücreler pozisyon dengesindeki değişikliklere göre şu şekilde işaretlidir:
    • Kırmızı hücreler takıma pozisyon dengesini koruyan bir pozisyon tahsis edilemediğini gösterir.
    • Sarı hücreler takımın pozisyonunun daha önce dengesiz olduğunu ve bu çekilişte mümkün olan en iyi pozisyonun verildiğini ancak yine de dengesiz kaldığını gösterir.
    • Yeşil hücreler, takımın önceki dengesizliğinin bu kurada çözüldüğünü gösterir.
    " -#: draw/templates/draw_status_none.html:6 +#: draw/templates/draw_status_none.html #, python-format msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." -msgstr "" +msgstr "%(round)s için bir kura henüz oluşturulmadı. Oluşturmak için uygunluk bölümüne gidin." -#: draw/templates/position_balance.html:6 +#: draw/templates/position_balance.html msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." -msgstr "" +msgstr "Bu turdaki bazı maçlar için taraflar doğrulanmamış. Bu pozisyon dengesi raporu, veritabanındaki \"onaylanmamış taraflar\" kullanılarak oluşturulur ve sonuç olarak çok mantıklı olmayabilir. Bu rapora bakmadan önce tüm maçlardaki tarafların onaylanması tavsiye edilir." -#: draw/templates/position_balance.html:15 +#: draw/templates/position_balance.html #, python-format -msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." -msgstr "" +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgstr "Mevcut pozisyon maliyet fonksiyonunuz %(exponent)s üssüne yükseltilmiş %(cost_func)sdir. Pozisyon maliyeti işlevlerinin nasıl çalıştığı hakkında daha fazla bilgi edinmek için tıklayın." -#: draw/templates/position_balance_break.html:6 +#: draw/templates/position_balance_break.html msgid "Position balance reports aren't computed for elimination rounds." -msgstr "" +msgstr "Pozisyon dengesi raporları eleme turları için hesaplanmaz." -#: draw/templates/position_balance_nonbp.html:6 +#: draw/templates/position_balance_nonbp.html msgid "Position balance reports are only available for British Parliamentary tournaments." -msgstr "" +msgstr "Pozisyon dengesi raporları sadece İngiliz Parlamento turnuvalarında bulunur." -#: draw/templates/position_balance_round1.html:6 +#: draw/templates/position_balance_round1.html msgid "Position balance reports aren't computed for the first round of a tournament." -msgstr "" +msgstr "Pozisyon dengesi raporları bir turnuvanın ilk turu için hesaplanmaz." -#: draw/views.py:66 draw/views.py:460 +#: draw/views.py msgid "No debates in this round" -msgstr "" +msgstr "Bu turda maç yok" -#: draw/views.py:74 +#: draw/views.py #, python-format msgid "Draw for %(round)s" -msgstr "" +msgstr "%(round)s için kura" -#: draw/views.py:76 +#: draw/views.py msgid "Draws for Current Rounds" -msgstr "" +msgstr "Mevcut Turlar için Kuralar" -#: draw/views.py:80 +#: draw/views.py #, python-format msgid "debates start at %(time)s (in %(time_zone)s)" -msgstr "" +msgstr "maçlar %(time)s saatinde (%(time_zone)s zaman dilimi) başlar" -#: draw/views.py:84 +#: draw/views.py #, python-format msgid "start times in time zone: %(time_zone)s" -msgstr "" +msgstr "belirtilen zaman diliminde başlangıç saatleri: %(time_zone)s" -#: draw/views.py:122 +#: draw/views.py #, python-format msgid "debate starts at %(time)s" msgid_plural "debates start at %(time)s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "maç %(time)s'da başlar" +msgstr[1] "maçlar %(time)s'da başlar" -#: draw/views.py:169 +#: draw/views.py msgid "The draw for this round hasn't been released." -msgstr "" +msgstr "Bu turun kurası henüz açıklanmadı." -#: draw/views.py:222 +#: draw/views.py #, python-format msgid "All Debates for All Rounds of %(tournament)s" -msgstr "" +msgstr "%(tournament)s'ın tüm turları için tüm maçlar" -#: draw/views.py:380 +#: draw/views.py msgid "Adjudicator Assignments" -msgstr "" +msgstr "Jüri Tahsisleri" -#: draw/views.py:400 +#: draw/views.py +msgid "Position" +msgstr "Konum" + +#: draw/views.py msgid "Team Pairings" -msgstr "" +msgstr "Takım Eşleştirmeleri" -#: draw/views.py:424 +#: draw/views.py msgid "No Draw" -msgstr "" +msgstr "Kura Yok" -#: draw/views.py:426 +#: draw/views.py msgid "Draft Draw" -msgstr "" +msgstr "Taslak Kura" #. Translators: e.g. "Affirmative: Break rank" -#: draw/views.py:518 +#: draw/views.py #, python-format msgid "%(side)s: Break rank" -msgstr "" +msgstr "%(side)s: Break olan taraf" #. Translators: "BR" stands for "Break rank" -#: draw/views.py:523 +#: draw/views.py msgid "BR" -msgstr "" +msgstr "BT" -#: draw/views.py:548 +#: draw/views.py msgid "Draw with Details" -msgstr "" +msgstr "Detaylı Kura" -#: draw/views.py:556 +#: draw/views.py msgid "Position Balance Report" -msgstr "" +msgstr "Pozisyon Denge Raporu" -#: draw/views.py:567 +#: draw/views.py #, python-format msgid "Rényi entropy of order %(order)s" -msgstr "" +msgstr "%(order)s düzeninin Rényi entropisi" #. Translators: This is appended to the string "Rényi entropy of order 1.0" -#: draw/views.py:570 +#: draw/views.py msgid " (i.e., Shannon entropy)" -msgstr "" +msgstr " (yani., Shannon entropisi)" -#: draw/views.py:600 +#: draw/views.py msgid "Teams with position imbalances" -msgstr "" +msgstr "Pozisyon dengesizlikleri olan takımlar" -#: draw/views.py:601 +#: draw/views.py msgid "No teams with position imbalances! Hooray!" -msgstr "" +msgstr "Pozisyon dengesizliği olan takım yok! Yaşasın!" -#: draw/views.py:604 +#: draw/views.py msgid "Annotated draw" -msgstr "" +msgstr "Açıklamalı çizim" -#: draw/views.py:635 +#: draw/views.py #, python-format msgid "Could not create draw for %(round)s, there was already a draw!" -msgstr "" +msgstr "%(round)s için kura oluşturamadı, zaten kura oluşturulmuş!" -#: draw/views.py:643 +#: draw/views.py #, python-format msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" "

    Please fix this issue before attempting to create the draw.

    " -msgstr "" +msgstr "

    Aşağıdaki nedenlerden dolayı kura oluşturulamadı:%(message)s

    \n" +"

    Kurayı oluşturmayı denemeden önce lütfen problemi cözün.

    " -#: draw/views.py:651 +#: draw/views.py #, python-format msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" "

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " -msgstr "" +msgstr "

    Aşağıdaki hatadan dolayı kura oluşturulamadı:%(message)s

    \n" +"

    Sorun devam ederse ve nasıl çözeceğinizden emin değilseniz yapımcılar ile iletişime geçin.

    " -#: draw/views.py:660 +#: draw/views.py #, python-format msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" "

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " -msgstr "" +msgstr "

    Aşağıdaki hatadan dolayı takım sıralamaları oluşturulamadı:%(message)s

    \n" +"

    Kura güncel takım sıralamalarını kullandığı için üretilemiyor.

    " -#: draw/views.py:676 +#: draw/views.py msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." -msgstr "" +msgstr "Odalar otomatik olarak tahsis edilmedi çünkü bir veya daha fazla jüri odası kısıtlaması var. Oda tahsislerini jüri tahsis ettikten sonra yapmalısınız." -#: draw/views.py:703 +#: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." -msgstr "" +msgstr "Kura silindi. Normal şekilde yeniden oluşturabilirsiniz." -#: draw/views.py:723 +#: draw/views.py msgid "Released the draw." -msgstr "" +msgstr "Kura yayınlandı." -#: draw/views.py:738 +#: draw/views.py msgid "Unreleased the draw." -msgstr "" +msgstr "Kura yayınlanmadı." -#: draw/views.py:751 +#: draw/views.py #, python-format msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." -msgstr "" +msgstr "Maalesef, \"%(input)s\" geçerli bir zaman değil. 24 saat biçiminde, ortasında iki nokta ile formatlanmalıdır. Örneğin: \"13:57\"." -#: draw/views.py:770 +#: draw/views.py msgid "Side Pre-Allocations" -msgstr "" +msgstr "Taraf Ön Tahsis" -#: draw/views.py:803 +#: draw/views.py msgid "Edit Matchups" -msgstr "" +msgstr "Eşleşmeleri Düzenle" diff --git a/tabbycat/importer/locale/tr/LC_MESSAGES/django.po b/tabbycat/importer/locale/tr/LC_MESSAGES/django.po index 060a70642c9..a19d59e4d2a 100644 --- a/tabbycat/importer/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/tr/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:27\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" "MIME-Version: 1.0\n" @@ -12,368 +12,410 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 932\n" -#: importer/forms.py:24 +#: importer/forms.py #, python-format msgid "line %(lineno)d: %(message)s" -msgstr "" +msgstr "satır %(lineno)d: %(message)s" -#: importer/forms.py:51 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) didn't have a code" -msgstr "" +msgstr "Bu satırın (%(institution)s için) kodu yoktu" -#: importer/forms.py:56 +#: importer/forms.py #, python-format msgid "This line (for %(institution)s) had too many columns" -msgstr "" +msgstr "Bu satırın (%(institution)s için) çok fazla sütun vardı." -#: importer/forms.py:66 +#: importer/forms.py msgid "There were no institutions to import." -msgstr "" +msgstr "Dışa aktarılacak kurum yoktu." -#: importer/forms.py:71 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Üzgünüz, bir seferde yalnızca %(max_allowed)d kurum içe aktarabilirsiniz. (Şu anda %(given)d tane var.) İçe aktarma işleminizi daha küçük parçalara ayırmayı deneyin." +msgstr[1] "Üzgünüz, bir seferde yalnızca %(max_allowed)d kurum içe aktarabilirsiniz. (Şu anda %(given)d tane var.) İçe aktarma işleminizi daha küçük parçalara ayırmayı deneyin." -#: importer/forms.py:103 +#: importer/forms.py msgid "There were no rooms to import." -msgstr "" +msgstr "Dışa aktarılacak oda yoktu." -#: importer/forms.py:108 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Üzgünüz, bir seferde yalnızca %(max_allowed)d tane oda içe aktarabilirsiniz. (Şu anda %(given)d tane var.) İçe aktarma işleminizi daha küçük parçalara bölmeyi deneyin." +msgstr[1] "Üzgünüz, bir seferde yalnızca %(max_allowed)d tane oda içe aktarabilirsiniz. (Şu anda %(given)d tane var.) İçe aktarma işleminizi daha küçük parçalara bölmeyi deneyin." -#: importer/forms.py:191 +#: importer/forms.py msgid "Speakers' names" -msgstr "" +msgstr "Konuşmacıların isimleri" -#: importer/forms.py:192 +#: importer/forms.py msgid "Speakers' email addresses" -msgstr "" +msgstr "Konuşmacıların e-posta adresleri" -#: importer/forms.py:193 +#: importer/forms.py msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" -msgstr "" +msgstr "İsteğe bağlı, özel URL'ler veya konuşmacıların adlarıyla aynı sırada listeler dağıtılıyorsa kullanışlı." -#: importer/forms.py:200 +#: importer/forms.py msgid "Name (excluding institution name)" -msgstr "" +msgstr "Ad (kurum adı hariç)" -#: importer/forms.py:201 +#: importer/forms.py msgid "Prefix team name with institution name?" -msgstr "" +msgstr "Takım adının önüne kurum adı eklemek istiyor musunuz?" -#: importer/forms.py:204 +#: importer/forms.py msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" -msgstr "" +msgstr "Kurum adını eklemeyin (bunun yerine \"Takım adının önüne kurum adı eklemek istiyor musunuz?\" alanını işaretleyin)" -#: importer/forms.py:213 +#: importer/forms.py msgid "(Not applicable to unaffiliated teams)" -msgstr "" +msgstr "(Bağlı olmayan takımlar için geçerli değildir)" -#: importer/forms.py:218 +#: importer/forms.py msgid "One speaker's name per line" -msgstr "" +msgstr "Her satırda sadece bir konuşmacı adı" -#: importer/forms.py:219 +#: importer/forms.py msgid "Can be separated by newlines, tabs or commas" -msgstr "" +msgstr "Yeni satırlar, tablar veya virgüllerle ayrılabilir" -#: importer/forms.py:221 +#: importer/forms.py #, python-format msgid "Speaker %d" msgstr "Konuşmacı %d" -#: importer/forms.py:223 +#: importer/forms.py #, python-format msgid "speaker%d@example.edu" -msgstr "" +msgstr "speaker%d@ornek.edu" -#: importer/forms.py:237 +#: importer/forms.py msgid "There must be at least one speaker." -msgstr "" +msgstr "En az bir konuşmacı olmalıdır." -#: importer/forms.py:246 +#: importer/forms.py #, python-format msgid "%(email)s is not a valid email address." -msgstr "" +msgstr "%(email)s geçerli bir e-posta adresi değil." -#: importer/forms.py:259 +#: importer/forms.py msgid "There are more email addresses than speakers." -msgstr "" +msgstr "Konuşmacılardan daha fazla e-posta adresi var." -#: importer/forms.py:297 +#: importer/forms.py msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." -msgstr "" +msgstr "Aynı kurumdan tek bir turnuvadaki her takımın farklı bir adı olmalıdır. Lütfen yinelenen verileri düzeltin." -#: importer/forms.py:309 +#: importer/forms.py msgid "Rating" -msgstr "" +msgstr "Puan" -#: importer/forms.py:317 +#: importer/forms.py #, python-format msgid "This value must be between %(min)d and %(max)d." -msgstr "" +msgstr "Bu değer %(min)d ile %(max)d arasında olmalıdır." -#: importer/forms.py:339 +#: importer/forms.py msgid "Unaffiliated (no institution)" -msgstr "" +msgstr "Bağımsız (kurumsuz)" -#: importer/forms.py:351 +#: importer/forms.py #, python-format msgid "%(name)s (%(code)s)" msgstr "" -#: importer/forms.py:372 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Üzgünüz, bir seferde yalnızca %(max_allowed)d tane takımı içe aktarabilirsiniz. (Şu anda %(given)d tane var.) İçe aktarma işleminizi daha küçük parçalara bölmeyi deneyin." +msgstr[1] "Üzgünüz, bir seferde yalnızca %(max_allowed)d tane takımı içe aktarabilirsiniz. (Şu anda %(given)d tane var.) İçe aktarma işleminizi daha küçük parçalara bölmeyi deneyin." -#: importer/forms.py:385 +#: importer/forms.py #, python-format msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Üzgünüz, bir seferde yalnızca %(max_allowed)d tane jüriyi içe aktarabilirsiniz. (Şu anda %(given)d tane var.) İçe aktarma işleminizi daha küçük parçalara bölmeyi deneyin." +msgstr[1] "Üzgünüz, bir seferde yalnızca %(max_allowed)d tane jüriyi içe aktarabilirsiniz. (Şu anda %(given)d tane var.) İçe aktarma işleminizi daha küçük parçalara bölmeyi deneyin." -#: importer/templates/simple_import_adjudicators_details.html:4 -#: importer/templates/simple_import_adjudicators_details.html:6 -#: importer/templates/simple_import_adjudicators_numbers.html:4 -#: importer/templates/simple_import_adjudicators_numbers.html:6 -msgctxt "page title" -msgid "Add Adjudicators" +#: importer/forms.py +msgid "XML" msgstr "" -#: importer/templates/simple_import_adjudicators_details.html:5 -#: importer/templates/simple_import_adjudicators_numbers.html:5 -#: importer/templates/simple_import_institutions_details.html:5 -#: importer/templates/simple_import_institutions_raw.html:5 -#: importer/templates/simple_import_teams_details.html:5 -#: importer/templates/simple_import_teams_numbers.html:5 -#: importer/templates/simple_import_venues_details.html:5 -#: importer/templates/simple_import_venues_raw.html:5 +#: importer/forms.py +msgid "The Debate XML archive to parse" +msgstr "Ayrıştırılacak Debate XML arşivi" + +#: importer/templates/archive_export_index.html +msgid "Export Tournament Archive" +msgstr "Turnuva Arşivini Dışa Aktar" + +#: importer/templates/archive_export_index.html +msgid "Tournaments can be exported in an XML format for use outside Tabbycat." +msgstr "Turnuvalar, Tabbycat dışında kullanılmak üzere XML formatında dışa aktarılabilir." + +#: importer/templates/archive_export_index.html +msgid "Export all data" +msgstr "Tüm verileri dışa aktar" + +#: importer/templates/archive_importer.html +msgctxt "page title" +msgid "Import Tournament Archive" +msgstr "Turnuva Arşivi İçe Aktar" + +#: importer/templates/archive_importer.html +msgid "This form will create a tournament with the data provided as a Debate XML format." +msgstr "Bu form, Münazara XML formatında sağlanan verilerle bir turnuva oluşturacaktır." + +#: importer/templates/archive_importer.html +msgid "Import" +msgstr "İçe Aktar" + +#: importer/templates/archive_importer.html +msgid "Go back to the site home page" +msgstr "Site giriş sayfasına geri dön" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +msgctxt "page title" +msgid "Add Adjudicators" +msgstr "Jüri Ekle" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html #, python-format msgid "(Step %(step)s of %(count)s)" -msgstr "" +msgstr "( %(count)s adımın %(step)s. adımı)" -#: importer/templates/simple_import_adjudicators_details.html:13 -#: importer/templates/simple_import_institutions_details.html:17 -#: importer/templates/simple_import_teams_details.html:17 -#: importer/templates/simple_import_venues_details.html:13 +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html msgid "Previous Step" -msgstr "" +msgstr "Önceki Adım" -#: importer/templates/simple_import_adjudicators_details.html:18 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." -msgstr "" +msgstr "bu turnuvanın ayarlarından dolayı jürilerin puanı <%(min)s ile %(max)s arasında olmalıdır. E-posta adresi girmek isteğe bağlıdır, ancak geri bildirim veya ballotlar için özel URL'ler kullanılıyorsa yararlı olabilir." -#: importer/templates/simple_import_adjudicators_details.html:48 +#: importer/templates/simple_import_adjudicators_details.html #, python-format msgid "Adjudicators for %(institution)s" -msgstr "" +msgstr "%(institution)s Jürileri" -#: importer/templates/simple_import_adjudicators_details.html:52 +#: importer/templates/simple_import_adjudicators_details.html msgid "Unaffiliated Adjudicators" -msgstr "" +msgstr "Bağımsız Jüriler" -#: importer/templates/simple_import_adjudicators_details.html:72 +#: importer/templates/simple_import_adjudicators_details.html msgid "Save All Adjudicators" -msgstr "" +msgstr "Tüm Jürileri Kaydet" -#: importer/templates/simple_import_adjudicators_numbers.html:14 +#: importer/templates/simple_import_adjudicators_numbers.html #, python-format msgid "You need to add institutions before adding adjudicators." -msgstr "" +msgstr "Jürileri eklemeden önce kurumları eklemeniz gerekir." -#: importer/templates/simple_import_adjudicators_numbers.html:23 +#: importer/templates/simple_import_adjudicators_numbers.html msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." -msgstr "" +msgstr "Kurum başına eklenecek yeni jüri sayısını belirtin. Bir sonraki adımda isim ve puanlarını belirleyebilirsiniz." -#: importer/templates/simple_import_adjudicators_numbers.html:27 -msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash and you will lose data.)" -msgstr "" +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" +msgstr "Bir seferde en fazla 198 jüri ekleyebilirsiniz. 198'den fazla jüri eklemek istiyorsanız, parça parça ekleyin. (Lütfen tek seferde 198'den fazla eklemeye çalışmayın; sistem çöker ve veri kaybedersiniz.)" -#: importer/templates/simple_import_adjudicators_numbers.html:59 -#: importer/templates/simple_import_teams_numbers.html:60 +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "button" msgid "Next Step" -msgstr "" +msgstr "Sonraki Adım" -#: importer/templates/simple_import_index.html:4 -#: importer/templates/simple_import_index.html:5 +#: importer/templates/simple_import_index.html msgid "Simple Importer" -msgstr "" +msgstr "Basit Dışa Aktarıcı" -#: importer/templates/simple_import_index.html:9 +#: importer/templates/simple_import_index.html msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." -msgstr "" +msgstr "Tabbycat'e veri aktarmanın birkaç yolu vardır. Hangisinin en uygun olduğu turnuvanızın büyüklüğüne ve teknik bilginize bağlıdır. Basit aktarıcı kullanımı en kolay olanıdır ve küçük ve orta ölçekli turnuvalar için iyi çalışır." -#: importer/templates/simple_import_index.html:16 +#: importer/templates/simple_import_index.html msgid "Add Institutions" -msgstr "" +msgstr "Kurum Ekle" -#: importer/templates/simple_import_index.html:21 +#: importer/templates/simple_import_index.html msgid "Add Teams" -msgstr "" +msgstr "Takım Ekle" -#: importer/templates/simple_import_index.html:25 +#: importer/templates/simple_import_index.html msgid "Add Adjudicators" -msgstr "" +msgstr "Jüri Ekle" -#: importer/templates/simple_import_index.html:29 +#: importer/templates/simple_import_index.html msgid "Add Rooms" -msgstr "" +msgstr "Oda Ekle" -#: importer/templates/simple_import_index.html:36 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Categories" -msgstr "" +msgstr "Oda Kategorileri Ekle/Düzenle" -#: importer/templates/simple_import_index.html:40 +#: importer/templates/simple_import_index.html msgid "Add/Edit Room Constraints" -msgstr "" +msgstr "Oda Kısıtlamaları Ekle/Düzenle" -#: importer/templates/simple_import_index.html:47 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Team Conflicts" -msgstr "" +msgstr "Jüri-Takım Conflictleri Ekle/Düzenle" -#: importer/templates/simple_import_index.html:51 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Adjudicator Conflicts" -msgstr "" +msgstr "Jüri-Jüri Conflictleri Ekle/Düzenle" -#: importer/templates/simple_import_index.html:55 +#: importer/templates/simple_import_index.html msgid "Add/Edit Adjudicator-Institution Conflicts" -msgstr "" +msgstr "Jüri-Kurum Conflictleri Ekle/Düzenle" -#: importer/templates/simple_import_index.html:59 +#: importer/templates/simple_import_index.html msgid "Add/Edit Team-Institution Conflicts" -msgstr "" +msgstr "Takım-Kurum Conflictleri Ekle/Düzenle" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Break Categories" +msgstr "Break Kategorileri Ekle/Düzenle" -#: importer/templates/simple_import_institutions_details.html:4 -#: importer/templates/simple_import_institutions_details.html:6 -#: importer/templates/simple_import_institutions_raw.html:4 -#: importer/templates/simple_import_institutions_raw.html:6 +#: importer/templates/simple_import_index.html +msgid "Add/Edit Speaker Categories" +msgstr "Konuşmacı Kategorileri Ekle/Düzenle" + +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html msgctxt "page title" msgid "Add Institutions" -msgstr "" +msgstr "Kurum Ekle" -#: importer/templates/simple_import_institutions_details.html:37 +#: importer/templates/simple_import_institutions_details.html msgid "Save All Institutions" -msgstr "" +msgstr "Tüm Kurumları Kaydet" -#: importer/templates/simple_import_institutions_raw.html:30 -#: importer/templates/simple_import_venues_raw.html:30 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "There are some problems with the data on this form:" -msgstr "" +msgstr "Bu formdaki verilerle ilgili bazı sorunlar var:" -#: importer/templates/simple_import_institutions_raw.html:41 -#: importer/templates/simple_import_venues_raw.html:41 +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html msgid "Next Step" -msgstr "" +msgstr "Sonraki Adım" -#: importer/templates/simple_import_teams_details.html:4 -#: importer/templates/simple_import_teams_details.html:6 -#: importer/templates/simple_import_teams_numbers.html:4 -#: importer/templates/simple_import_teams_numbers.html:6 +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html msgctxt "page title" msgid "Add Teams" -msgstr "" +msgstr "Takım Ekle" -#: importer/templates/simple_import_teams_details.html:33 +#: importer/templates/simple_import_teams_details.html #, python-format msgid "Teams for %(institution)s" -msgstr "" +msgstr "%(institution)s için takımlar" -#: importer/templates/simple_import_teams_details.html:37 +#: importer/templates/simple_import_teams_details.html msgid "Unaffiliated Teams" -msgstr "" +msgstr "Bağımsız Takımlar" -#: importer/templates/simple_import_teams_details.html:51 +#: importer/templates/simple_import_teams_details.html msgid "Save All Teams" -msgstr "" +msgstr "Tüm Takımları Kaydet" -#: importer/templates/simple_import_teams_numbers.html:15 +#: importer/templates/simple_import_teams_numbers.html #, python-format msgid "You need to add institutions before adding teams." -msgstr "" +msgstr "Takım eklemeden önce kurum eklemeniz gerekir." -#: importer/templates/simple_import_teams_numbers.html:24 +#: importer/templates/simple_import_teams_numbers.html msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." -msgstr "" +msgstr "Kurum başına eklenecek yeni takım sayısını belirtin. Bir sonraki adımda takım ve konuşmacı adlarını belirtebilirsiniz." -#: importer/templates/simple_import_teams_numbers.html:28 -msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash and you will lose data.)" -msgstr "" +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" +msgstr "Bir seferde en fazla 141 jüri ekleyebilirsiniz. 141'den fazla jüri eklemek istiyorsanız, parça parça ekleyin. (Lütfen tek seferde 141'den fazla eklemeye çalışmayın; sistem çöker ve veri kaybedersiniz.)" -#: importer/templates/simple_import_venues_details.html:4 -#: importer/templates/simple_import_venues_details.html:6 -#: importer/templates/simple_import_venues_raw.html:4 -#: importer/templates/simple_import_venues_raw.html:6 +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html msgctxt "page title" msgid "Add Rooms" -msgstr "" +msgstr "Oda Ekle" -#: importer/templates/simple_import_venues_details.html:16 +#: importer/templates/simple_import_venues_details.html msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." -msgstr "" +msgstr "Öncelikler, odayı ne kadar kullanmak istediğinizi gösterir. Daha büyük sayılar daha yüksek önceliğe işaret eder. Maçtan daha fazla odanız varsa, en düşük önceliğe sahip odalar kullanılmaz." -#: importer/templates/simple_import_venues_details.html:33 +#: importer/templates/simple_import_venues_details.html msgid "Save All Rooms" -msgstr "" +msgstr "Tüm Odaları Kaydet" -#: importer/templates/simple_import_venues_raw.html:15 +#: importer/templates/simple_import_venues_raw.html msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" -msgstr "" +msgstr "Her satırda bir oda bulunacak şekilde odaların listesini yapıştırın ve şu biçimi izleyin: name,priority. Örnek:" -#: importer/views.py:102 +#: importer/views.py #, python-format msgid "Added %(count)d institution." msgid_plural "Added %(count)d institutions." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d kurumu eklendi." +msgstr[1] "%(count)d kurumları eklendi." -#: importer/views.py:123 +#: importer/views.py #, python-format msgid "Added %(count)d room." msgid_plural "Added %(count)d rooms." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d oda eklendi." +msgstr[1] "%(count)d odaları eklendi." -#: importer/views.py:182 +#: importer/views.py #, python-format msgid "Added %(count)d team." msgid_plural "Added %(count)d teams." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d takımı eklendi." +msgstr[1] "%(count)d takımları eklendi." -#: importer/views.py:203 +#: importer/views.py #, python-format msgid "Adjudicator %(number)d" msgstr "Jüri %(number)d" -#: importer/views.py:208 +#: importer/views.py #, python-format msgid "Added %(count)d adjudicator." msgid_plural "Added %(count)d adjudicators." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d jürisi eklendi." +msgstr[1] "%(count)d jürileri eklendi." -#: importer/views.py:224 +#: importer/views.py msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " -msgstr "" +msgstr "

    Demo turnuvasını oluştururken bir veya daha fazla hata oluştu. Yeniden denemeden önce, lütfen mevcut demo turnuvasını ve veritabanı düzenleme alanındaki kurumları silin.

    Teknik bilgiler: Karşılaşılan hatalar:

    " -#: importer/views.py:232 +#: importer/views.py msgid "Created new demo tournament. You can now configure it below." -msgstr "" +msgstr "Yeni demo turnuvası oluşturuldu. Aşağıda yapılandırabilirsiniz." + +#: importer/views.py +msgid "Tournament archive has been imported." +msgstr "Turnuva arşivi aktarıldı." diff --git a/tabbycat/locale/tr/LC_MESSAGES/django.po b/tabbycat/locale/tr/LC_MESSAGES/django.po index b4dc1c46520..c1ba5b023ed 100644 --- a/tabbycat/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/locale/tr/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:33\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" "MIME-Version: 1.0\n" @@ -12,872 +12,946 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 934\n" -#: api/apps.py:7 +#: api/apps.py msgid "Application Programming Interface" -msgstr "" +msgstr "Uygulama Programlama Arayüzü" + +#: checkins/admin.py +msgid "Type" +msgstr "Tür" -#: checkins/apps.py:7 templates/nav/admin_nav.html:117 -#: templates/nav/assistant_nav.html:38 templates/nav/public_nav.html:92 +#: checkins/admin.py +msgid "Checkin time" +msgstr "Giriş zamanı" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Check-Ins" -msgstr "" +msgstr "Girişler" -#: checkins/consumers.py:73 +#: checkins/consumers.py msgid "Sent checkin identifier doesn't exist" -msgstr "" +msgstr "Gönderilen giriş tanımlayıcısı mevcut değil" -#: checkins/consumers.py:74 checkins/consumers.py:79 +#: checkins/consumers.py msgid "Checkins" -msgstr "" +msgstr "Giriş işlemleri" -#: checkins/consumers.py:78 +#: checkins/consumers.py msgid "No checkin identifiers exist for sent barcodes" -msgstr "" +msgstr "Gönderilen barkodlar için giriş tanımlayıcısı yok" -#: checkins/models.py:29 +#: checkins/models.py msgid "The barcode must contain exactly six digits." -msgstr "" +msgstr "Barkod tam altı basamaktan oluşmalıdır." -#: checkins/models.py:32 +#: checkins/models.py msgid "barcode" -msgstr "" +msgstr "barkod" -#: checkins/models.py:37 +#: checkins/models.py msgid "" -msgstr "" +msgstr "" -#: checkins/models.py:41 +#: checkins/models.py #, python-format msgid "%(classname)s %(barcode)s" msgstr "" -#: checkins/models.py:52 +#: checkins/models.py msgid "person" -msgstr "" +msgstr "kişi" -#: checkins/models.py:55 +#: checkins/models.py msgid "person identifier" -msgstr "" +msgstr "kişi tanımlayıcı" -#: checkins/models.py:56 +#: checkins/models.py msgid "person identifiers" -msgstr "" +msgstr "kişi tanımlayıcıları" -#: checkins/models.py:64 +#: checkins/models.py msgid "debate" msgstr "maç" -#: checkins/models.py:67 +#: checkins/models.py msgid "debate identifier" -msgstr "" +msgstr "maç tanımlayıcısı" -#: checkins/models.py:68 +#: checkins/models.py msgid "debate identifiers" -msgstr "" +msgstr "maç tanımlayıcıları" -#: checkins/models.py:79 +#: checkins/models.py msgid "room identifier" -msgstr "" +msgstr "oda tanımlayıcı" -#: checkins/models.py:80 +#: checkins/models.py msgid "room identifiers" -msgstr "" +msgstr "oda tanımlayıcıları" -#: checkins/models.py:87 +#: checkins/models.py msgid "identifier" -msgstr "" +msgstr "Tanımlayıcı" -#: checkins/models.py:90 +#: checkins/models.py msgid "check-in time" -msgstr "" +msgstr "giriş saati" -#: checkins/models.py:92 +#: checkins/models.py msgid "tournament" msgstr "turnuva" -#: checkins/models.py:95 +#: checkins/models.py msgid "check-in event" -msgstr "" +msgstr "giriş etkinliği" -#: checkins/models.py:96 +#: checkins/models.py msgid "check-in events" -msgstr "" +msgstr "giriş etkinlikleri" -#: checkins/templates/checkin_ids.html:18 +#: checkins/templates/checkin_ids.html msgid "With identifiers" -msgstr "" +msgstr "Tanımlayıcılarla" -#: checkins/templates/checkin_ids.html:30 +#: checkins/templates/checkin_ids.html msgid "View as barcodes" -msgstr "" +msgstr "Barkod olarak görüntüle" -#: checkins/templates/checkin_ids.html:36 +#: checkins/templates/checkin_ids.html msgid "Generate missing identifiers" -msgstr "" +msgstr "Eksik tanımlayıcıları oluştur" -#: checkins/templates/checkin_ids.html:38 +#: checkins/templates/checkin_ids.html msgid "Generate all identifiers" -msgstr "" +msgstr "Tüm tanımlayıcıları oluştur" -#: checkins/templates/checkin_ids.html:49 +#: checkins/templates/checkin_ids.html msgid "There are no identifiers available to view. An admin will need to generate them." -msgstr "" +msgstr "Görüntülenebilecek tanımlayıcı yok. Bir yöneticinin bunları oluşturması gerekli." -#: checkins/templates/checkin_printables.html:10 -msgid "Each of the barcodes below is also an image file that can be download individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." -msgstr "" +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +msgstr "Aşağıdaki barkodların her biri aynı zamanda ayrı ayrı indirilebilen bir görüntü dosyasıdır. Hepsini bir kerede indirmek istiyorsanız, tarayıcınız için bunun gibi (Chrome için) bir toplu indirici uzantısı/eklentisi kullanmayı deneyin. Bunları liste olarak indirmek için Veritabanını Düzenle alanının giriş bölümüne gidebilir ve ilgili tablodan kopyalayıp yapıştırabilirsiniz." -#: checkins/templates/checkin_printables.html:15 +#: checkins/templates/checkin_printables.html msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." -msgstr "" +msgstr "Barkodlar PDF olarak yazdırmak veya kaydetmek için Ctrl+P'yi kullanabilirsiniz. üstbilgiler/altbilgileri kapatmayı, doğru sayfa yönünü kullanmayı ve arkaplan görsellerini açmayı unutmayın. En iyi Chrome'da çalışır." -#: checkins/templates/checkin_scan.html:18 +#: checkins/templates/checkin_scan.html msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." -msgstr "" +msgstr "Bir tanımlayıcıyı taramak için aşağıdaki numarayı yazın (Otomatik gönderilir). Ayrıca bir barkod tarayıcı (klavye olarak çalışacak şekilde ayarladıysa) kullanabilir veya aşağıdaki düğmeyi kullanarak bir webcam veya telefon kamerasından tarama yapabilirsiniz." -#: checkins/utils.py:61 +#: checkins/utils.py #, python-format msgid "Not checked in (barcode %(barcode)s)" -msgstr "" +msgstr "Giriş yapılmadı (barkod %(barcode)s)" -#: checkins/utils.py:65 +#: checkins/utils.py msgid "Not checked in; no barcode assigned" -msgstr "" +msgstr "Giriş yapılmadı; barkod atanmamış" -#: checkins/utils.py:72 +#: checkins/utils.py #, python-format msgid "checked in at %(time)s" -msgstr "" +msgstr "Giriş zamamı: %(time)s " -#: checkins/utils.py:84 +#: checkins/utils.py #, python-format msgid "%(speaker)s checked in at %(time)s." -msgstr "" +msgstr "%(speaker)s giriş zamanı %(time)s." -#: checkins/utils.py:86 +#: checkins/utils.py #, python-format msgid "%(speaker)s is missing." -msgstr "" +msgstr "%(speaker)s eksik." -#: checkins/views.py:29 templates/nav/admin_nav.html:128 -#: templates/nav/assistant_nav.html:42 +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html msgid "Scan Identifiers" -msgstr "" +msgstr "Tanımlayıcıları Tara" -#: checkins/views.py:62 +#: checkins/views.py msgid "People's Check-In Statuses" -msgstr "" +msgstr "Kişilerin Giriş Durumları" -#: checkins/views.py:119 +#: checkins/views.py msgid "Rooms' Check-In Statuses" -msgstr "" +msgstr "Odaların Giriş Durumları" -#: checkins/views.py:168 templates/nav/admin_nav.html:124 +#: checkins/views.py templates/nav/admin_nav.html msgid "Make Identifiers" -msgstr "" +msgstr "Tanımlayıcılar Oluştur" -#: checkins/views.py:175 templates/nav/admin_nav.html:210 +#: checkins/views.py templates/nav/admin_nav.html msgid "Speakers" msgstr "Konuşmacılar" -#: checkins/views.py:180 templates/nav/public_nav.html:132 +#: checkins/views.py templates/nav/public_nav.html msgid "Adjudicators" msgstr "Jüriler" -#: checkins/views.py:185 +#: checkins/views.py msgid "Rooms" -msgstr "" +msgstr "Odalar" -#: checkins/views.py:226 +#: checkins/views.py #, python-format msgid "Generated identifiers for %s" -msgstr "" +msgstr "%s için tanımlayıcılar oluşturuldu" -#: checkins/views.py:233 +#: checkins/views.py msgid "Identifiers" -msgstr "" +msgstr "Tanımlayıcı" -#: checkins/views.py:269 +#: checkins/views.py msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." -msgstr "" +msgstr "Tanımlayıcı kodunuz olmadığı için giriş yapılamadı — tab yöneticinizin sizi bir tanımlayıcı yapması gerekebilir." -#: checkins/views.py:276 +#: checkins/views.py msgid "You have revoked your check-in." -msgstr "" +msgstr "Giriş işleminizi iptal ettiniz." -#: checkins/views.py:278 +#: checkins/views.py msgid "Whoops! Looks like your check-in was already revoked." -msgstr "" +msgstr "Giriş işleminiz zaten iptal edilmiş." -#: checkins/views.py:281 +#: checkins/views.py msgid "Whoops! Looks like you're already checked in." -msgstr "" +msgstr "Zaten giriş yapmışsınız." -#: checkins/views.py:283 +#: checkins/views.py msgid "You are now checked in." -msgstr "" +msgstr "Artık giriş yaptınız." -#: settings/core.py:45 +#: settings/core.py msgid "Arabic" msgstr "" -#: settings/core.py:46 +#: settings/core.py +msgid "Bengali" +msgstr "Bengal Dili" + +#: settings/core.py msgid "English" msgstr "" -#: settings/core.py:47 +#: settings/core.py msgid "Spanish" msgstr "" -#: settings/core.py:48 +#: settings/core.py msgid "French" msgstr "" -#: settings/core.py:49 +#: settings/core.py +msgid "Indonesian" +msgstr "Endonezya dili" + +#: settings/core.py msgid "Japanese" msgstr "" -#: settings/core.py:50 +#: settings/core.py +msgid "Malay" +msgstr "" + +#: settings/core.py msgid "Portuguese" msgstr "" -#: settings/core.py:51 +#: settings/core.py msgid "Russian" msgstr "" -#: templates/admin/delete_protected_message.html:4 +#: settings/core.py +msgid "Simplified Chinese" +msgstr "Basitleştirilmiş Çince" + +#: settings/core.py +msgid "Translation" +msgstr "Çeviri" + +#: templates/admin/delete_protected_message.html msgid "You need to delete the above objects first." -msgstr "" +msgstr "Önce yukarıdaki nesneleri silmeniz gerekir." -#: templates/admin/style_guide.html:30 +#: templates/admin/style_guide.html msgid "This style of info card announces critical information. Link." -msgstr "" +msgstr "Bu bilgi kartı stili kritik bilgileri bildirir. Link." -#: templates/admin/style_guide.html:33 +#: templates/admin/style_guide.html msgid "This style of info card announces general information." -msgstr "" +msgstr "Bu bilgi kartı stili genel information bildirir." -#: templates/admin/style_guide.html:160 +#: templates/admin/style_guide.html msgctxt "page title" msgid "Form Title" -msgstr "" +msgstr "Form Başlığı" -#: templates/admin/style_guide.html:161 +#: templates/admin/style_guide.html msgid "Sub Title Title" -msgstr "" +msgstr "Alt Başlık Başlığı" -#: templates/admin/style_guide.html:197 templates/registration/login.html:61 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "Log In" -msgstr "Giriş Yap" +msgstr "Oturum Aç" -#: templates/admin/style_guide.html:198 templates/registration/login.html:62 +#: templates/admin/style_guide.html templates/registration/login.html msgctxt "button" msgid "I forgot my password" -msgstr "" +msgstr "Parolamı unuttum" -#: templates/base.html:10 +#: templates/base.html msgid "Tabbycat" msgstr "" -#: templates/base.html:13 +#: templates/base.html #, python-format msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" -msgstr "" +msgstr "%(tournament)s için tab, çeşitli parlamenter tartışma biçimleri için kullanılabilen açık kaynaklı bir tab sistemi Tabbycat kullanıyor." -#: templates/base.html:17 +#: templates/base.html msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" -msgstr "" +msgstr "Bu tab, çeşitli parlamenter tartışma biçimleri için kullanılabilen açık kaynaklı bir tab sistemi Tabbycat ikullanıyor." -#: templates/components/form-errors.html:4 +#: templates/components/form-errors.html msgid "Whoops! There was an error with one or more fields." -msgstr "" +msgstr "Bir veya daha fazla alanda hata oluştu." -#: templates/components/formset.html:23 +#: templates/components/formset.html msgid "Save and Add More" -msgstr "" +msgstr "Kaydet ve Daha Fazla Ekle" -#: templates/errors/assistant_403.html:4 templates/errors/assistant_403.html:6 -#: templates/errors/public_403.html:4 templates/errors/public_403.html:6 +#: templates/errors/assistant_403.html templates/errors/public_403.html msgid "Permission Denied (403)" -msgstr "" +msgstr "Erişim Red Edildi (403)" -#: templates/errors/assistant_403.html:13 +#: templates/errors/assistant_403.html #, python-format msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." -msgstr "" +msgstr "Bu asistan sayfası bu turnuva için etkinleştirilmemiştir. Asistan ana sayfasina geri dön." -#: templates/errors/database_limit_warning.html:9 +#: templates/errors/database_limit_warning.html #, python-format msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Şu anda veritabanınızda %(nrows) satır kullanıyorsunuz. Heroku veritabanınızı henüz ücretli bir seviyeye yükseltmediyseniz, en fazla 10.000 satı kullanabilirsiniz. Bu sınıra yakın olduğunuz için, veritabanınızı ücretli bir seviyeye yükseltmediğiniz sürece yeni turnuvalar oluşturmamalısınız." +msgstr[1] "Şu anda veritabanınızda %(nrows) satır kullanıyorsunuz. Heroku veritabanınızı henüz ücretli bir seviyeye yükseltmediyseniz, en fazla 10.000 satı kullanabilirsiniz. Bu sınıra yakın olduğunuz için, veritabanınızı ücretli bir seviyeye yükseltmediğiniz sürece yeni turnuvalar oluşturmamalısınız." + +#: templates/errors/legacy_sendgrid_warning.html +msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." +msgstr "Eski Heroku SendGrid config değişkenlerini (SENDGRID_USERNAME ve SENDGRID_PASSWORD.) kullanıyorsunuz gibi duruyor. Bunlar artık kullanımdan kaldırılmıştır (sürüm 2.6'dan itibaren) ve Tabbycat'in gelecekteki bir sürümünde çalışmayı durduracaktır. Lütfen yapılandırma değişkenlerinizi bunun yerine SENDGRID_API_KEY kullanacak şekilde değiştirin. Daha fazla bilgi için lütfen bu linke bakın.." -#: templates/errors/public_403.html:14 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." -msgstr "" +msgstr "Bu sayfa bu turnuva için etkinleştirilmemiştir. Turnuva ana sayfasına geri dön." -#: templates/errors/public_403.html:20 +#: templates/errors/public_403.html #, python-format msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." -msgstr "" +msgstr "Bu sayfa bu turnuva için etkinleştirilmemiştir. Ana sayfaya geri dön." -#: templates/footer.html:14 +#: templates/footer.html #, python-format msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" -msgstr "" +msgstr "%(tournament)s Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s) kullanıyor." -#: templates/footer.html:16 +#: templates/footer.html #, python-format msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" -msgstr "" +msgstr "Bu site Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s) kullanıyor." -#: templates/footer.html:20 +#: templates/footer.html msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." -msgstr "" +msgstr "Tabbycat, gönüllüler tarafından geliştirilmiş ve açık kaynak bir projedir ve kar amacı gütmeyen, bağış toplama amaçı olmayan turnuvalada kullanımı ücretsizdir." -#: templates/footer.html:24 +#: templates/footer.html #, python-format -msgid "For a tournament of this size, we suggest a donation of $%(amount)s." -msgstr "" +msgid "For a tournament of this size, we suggest a donation of $%(amount)s." +msgstr "Bu büyüklükte bir turnuva için $%(amount)s kadar bir bağış yapmanızı öneriyoruz.." -#: templates/footer.html:28 +#: templates/footer.html msgid "Learn more about donating." -msgstr "" +msgstr "Bağış yapma hakkında daha fazla bilgi edinin." -#: templates/footer.html:32 -#, python-format -msgid "Donations to Tabbycat from individuals or organisations are much appreciated." -msgstr "" +#: templates/footer.html +msgid "Donations to Tabbycat from individuals or organisations are much appreciated." +msgstr " Bireylerden veya kurumlardan Tabbycat'e yapılan bağışlar çok takdir edilmektedir." -#: templates/footer.html:40 +#: templates/footer.html msgid "Still timing debates with the stopwatch app?" -msgstr "" +msgstr "Hala kronometre ile mi zaman tutuyorsunuz?" -#: templates/footer.html:42 +#: templates/footer.html #, python-format msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." -msgstr "" +msgstr "Tartışma zaman işleyişi için tasarlanmış bir uygulama kullanmak, konuşmayı ve karar vermeyi kolaylaştırır! href=\"https://itunes.apple.com/app/apple-store/id1156065589?pt=814172&ct=Tabbycat%%20Installs&mt=8\">Timekept (iPhone/iPad) veya Debatekeeper (Android)." -#: templates/footer.html:51 -msgid "Need ballots?" -msgstr "" +#: templates/footer.html +msgid "Our Organisation" +msgstr "Kurumumuz" -#: templates/footer.html:53 -msgid "You can customise and print great ballots from your browser." -msgstr "" +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +msgstr "Tabbycat, açık kaynaklı tartışma teknolojisini ilerletmek için kar amacı gütmeyen bir kuruluş olan Tabbycat Tartışma Derneği tarafından desteklenmektedir." -#: templates/footer.html:66 +#: templates/footer.html msgid "Language" msgstr "Dil" -#: templates/footer.html:73 +#: templates/footer.html msgid "GitHub" msgstr "" -#: templates/footer.html:79 +#: templates/footer.html msgid "Documentation" -msgstr "" +msgstr "Belgeler" -#: templates/footer.html:85 +#: templates/footer.html msgid "Support" -msgstr "" +msgstr "Destek" -#: templates/footer.html:91 +#: templates/footer.html msgid "Facebook" msgstr "" -#: templates/footer.html:97 +#: templates/footer.html msgid "Set Up A Copy" -msgstr "" +msgstr "Kopyasını Yap" -#: templates/footer.html:111 +#: templates/footer.html msgid "Change Language" -msgstr "" +msgstr "Dili Değiştir" -#: templates/footer.html:128 +#: templates/footer.html msgid "Use this language" -msgstr "" +msgstr "Bu dili kullan" -#: templates/nav/admin_nav.html:9 templates/nav/top_nav_base.html:6 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Tabbycat Logo" -msgstr "" +msgstr "Tabbycat Logosu" -#: templates/nav/admin_nav.html:28 templates/nav/top_nav_base.html:59 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Site Home" -msgstr "" +msgstr "Site Ana Sayfası" -#: templates/nav/admin_nav.html:31 +#: templates/nav/admin_nav.html msgid "New Tournament" -msgstr "" +msgstr "Yeni Turnuva" -#: templates/nav/admin_nav.html:34 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Edit Database" -msgstr "" +msgstr "Veritabanını Düzenle" -#: templates/nav/admin_nav.html:42 +#: templates/nav/admin_nav.html msgid "Admin Area" -msgstr "" +msgstr "Yönetici Alanı" -#: templates/nav/admin_nav.html:46 +#: templates/nav/admin_nav.html msgid "Assistant Area" -msgstr "" +msgstr "Asistan Alanı" -#: templates/nav/admin_nav.html:50 +#: templates/nav/admin_nav.html msgid "Public Area" -msgstr "" +msgstr "Genel Alan" -#: templates/nav/admin_nav.html:60 templates/nav/admin_nav.html:150 -#: templates/nav/admin_nav.html:190 templates/nav/admin_nav.html:249 +#: templates/nav/admin_nav.html msgid "Overview" -msgstr "" +msgstr "Genel bakış" -#: templates/nav/admin_nav.html:67 +#: templates/nav/admin_nav.html msgid "Setup" -msgstr "" +msgstr "Kurulum" -#: templates/nav/admin_nav.html:74 +#: templates/nav/admin_nav.html msgid "Configuration" -msgstr "" +msgstr "Ayarlama" -#: templates/nav/admin_nav.html:77 +#: templates/nav/admin_nav.html msgid "Import Data" -msgstr "" +msgstr "İçe Veri Aktar" -#: templates/nav/admin_nav.html:81 templates/nav/assistant_nav.html:18 -#: templates/nav/public_nav.html:162 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html msgid "Participants" -msgstr "" +msgstr "Katılımcılar" -#: templates/nav/admin_nav.html:85 +#: templates/nav/admin_nav.html msgid "Private URLs" -msgstr "" +msgstr "Özel URL'ler" -#: templates/nav/admin_nav.html:89 +#: templates/nav/admin_nav.html msgid "Emails" msgstr "E-postalar" -#: templates/nav/admin_nav.html:93 +#: templates/nav/admin_nav.html msgid "Preformed Panels" -msgstr "" +msgstr "Önceden kurulmuş paneller" -#: templates/nav/admin_nav.html:96 -msgid "It\\" -msgstr "" +#: templates/nav/admin_nav.html +msgid "Export XML" +msgstr "Dışa XML Aktar" -#: templates/nav/admin_nav.html:97 -msgid "Where's Edit Database?" -msgstr "" - -#: templates/nav/admin_nav.html:107 templates/nav/public_nav.html:147 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Sides" -msgstr "" +msgstr "Taraflar" -#: templates/nav/admin_nav.html:132 templates/nav/assistant_nav.html:48 +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html msgid "People's Status" -msgstr "" +msgstr "Kişilerin Durumu" -#: templates/nav/admin_nav.html:136 +#: templates/nav/admin_nav.html msgid "Rooms' Status" -msgstr "" +msgstr "Odaların Durumu" -#: templates/nav/admin_nav.html:144 +#: templates/nav/admin_nav.html msgid "Feedback" -msgstr "Geri Bildirim" +msgstr "Geri bildirim" -#: templates/nav/admin_nav.html:153 +#: templates/nav/admin_nav.html msgid "Latest" -msgstr "" +msgstr "Sonuncu" -#: templates/nav/admin_nav.html:156 +#: templates/nav/admin_nav.html msgid "Important" -msgstr "" +msgstr "Önemli" -#: templates/nav/admin_nav.html:159 +#: templates/nav/admin_nav.html msgid "Comments" -msgstr "" +msgstr "Yorumlar" -#: templates/nav/admin_nav.html:162 +#: templates/nav/admin_nav.html msgid "Find by Source" -msgstr "" +msgstr "Kaynağa Göre Bul" -#: templates/nav/admin_nav.html:165 +#: templates/nav/admin_nav.html msgid "Find by Target" -msgstr "" +msgstr "Hedefe Göre Bul" -#: templates/nav/admin_nav.html:168 +#: templates/nav/admin_nav.html msgid "Unsubmitted" -msgstr "" +msgstr "Gönderilmemiş" -#: templates/nav/admin_nav.html:171 +#: templates/nav/admin_nav.html msgid "Add Feedback" -msgstr "" +msgstr "Geri bildirim ekle" -#: templates/nav/admin_nav.html:174 +#: templates/nav/admin_nav.html msgid "Bulk Update" -msgstr "" +msgstr "Toplu Güncelleme" -#: templates/nav/admin_nav.html:183 templates/nav/public_nav.html:152 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Standings" -msgstr "" +msgstr "Sıralamalar" -#: templates/nav/admin_nav.html:194 +#: templates/nav/admin_nav.html msgid "All Teams" -msgstr "" +msgstr "Tüm Takımlar" -#: templates/nav/admin_nav.html:196 +#: templates/nav/admin_nav.html msgid "Teams" msgstr "Takımlar" -#: templates/nav/admin_nav.html:201 templates/nav/public_nav.html:13 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Teams" -msgstr "" +msgstr "%(category)s Takımlar" -#: templates/nav/admin_nav.html:208 +#: templates/nav/admin_nav.html msgid "All Speakers" -msgstr "" +msgstr "Tüm Konuşmacılar" -#: templates/nav/admin_nav.html:215 templates/nav/public_nav.html:30 +#: templates/nav/admin_nav.html templates/nav/public_nav.html #, python-format msgid "%(category)s Speakers" -msgstr "" +msgstr "%(category)s Konuşmacılar" -#: templates/nav/admin_nav.html:223 +#: templates/nav/admin_nav.html msgid "Replies" -msgstr "" +msgstr "Yanıtlar" -#: templates/nav/admin_nav.html:227 templates/nav/public_nav.html:142 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Motions" msgstr "Önergeler" -#: templates/nav/admin_nav.html:230 templates/nav/public_nav.html:157 +#: templates/nav/admin_nav.html templates/nav/public_nav.html msgid "Diversity" -msgstr "" +msgstr "Çeşitlilik" -#: templates/nav/admin_nav.html:243 +#: templates/nav/admin_nav.html msgid "Breaks" -msgstr "" +msgstr "Breakler" -#: templates/nav/admin_nav.html:253 +#: templates/nav/admin_nav.html #, python-format msgid "%(category)s" msgstr "" -#: templates/nav/admin_nav.html:257 +#: templates/nav/admin_nav.html msgid "Adjudicators'" -msgstr "" +msgstr "Jürilerin" -#: templates/nav/admin_nav.html:260 +#: templates/nav/admin_nav.html msgid "Edit Categories" -msgstr "" +msgstr "Kategorileri Düzenle" -#: templates/nav/admin_nav.html:263 +#: templates/nav/admin_nav.html msgid "Edit Eligibility" -msgstr "" +msgstr "Uygunluğu Düzenle" -#: templates/nav/admin_nav.html:278 templates/nav/top_nav_base.html:101 +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html msgid "Log Out" -msgstr "" +msgstr "Oturumu Kapat" -#: templates/nav/assistant_nav.html:5 +#: templates/nav/assistant_nav.html msgid "Enter Results" -msgstr "" +msgstr "Sonuç Gir" -#: templates/nav/assistant_nav.html:11 templates/nav/public_nav.html:182 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Enter Feedback" -msgstr "" +msgstr "Geri Bildirim Girin" -#: templates/nav/assistant_nav.html:22 +#: templates/nav/assistant_nav.html msgid "Participants List" -msgstr "" +msgstr "Katılımcı Listesi" -#: templates/nav/assistant_nav.html:25 templates/nav/public_nav.html:167 +#: templates/nav/assistant_nav.html templates/nav/public_nav.html msgid "Institutions" -msgstr "" +msgstr "Kurumlar" -#: templates/nav/assistant_nav.html:29 +#: templates/nav/assistant_nav.html msgid "Code Names" -msgstr "" +msgstr "Kod İsimler" -#: templates/nav/assistant_nav.html:45 +#: templates/nav/assistant_nav.html msgid "View Identifiers" -msgstr "" +msgstr "Tanımlayıcıları Görüntüle" -#: templates/nav/assistant_nav.html:51 +#: templates/nav/assistant_nav.html msgid "Room's Status" msgstr "" -#: templates/nav/assistant_nav.html:59 +#: templates/nav/assistant_nav.html msgid "Display/Print Draw" -msgstr "" +msgstr "Kurayı Göster/Yazdır" -#: templates/nav/public_nav.html:6 +#: templates/nav/public_nav.html msgid "Team Tab" -msgstr "" +msgstr "Takım Tabı" -#: templates/nav/public_nav.html:22 +#: templates/nav/public_nav.html msgid "Speaker Tab" -msgstr "" +msgstr "Konuşmacı Tabı" -#: templates/nav/public_nav.html:40 +#: templates/nav/public_nav.html msgid "Replies Tab" -msgstr "" +msgstr "Özet Tabı" -#: templates/nav/public_nav.html:45 +#: templates/nav/public_nav.html msgid "Adjudicator Tab" -msgstr "" +msgstr "Jüri Tabı" -#: templates/nav/public_nav.html:50 +#: templates/nav/public_nav.html msgid "Motions Tab" -msgstr "" +msgstr "Önerge Tabı" -#: templates/nav/public_nav.html:59 +#: templates/nav/public_nav.html +msgid "By round" +msgstr "Tura göre" + +#: templates/nav/public_nav.html +msgid "Globally" +msgstr "Evrensel" + +#: templates/nav/public_nav.html msgid "Draws" -msgstr "" +msgstr "Kuralar" -#: templates/nav/public_nav.html:70 +#: templates/nav/public_nav.html msgid "No Draws Available" -msgstr "" +msgstr "Kura Yok" -#: templates/nav/public_nav.html:78 +#: templates/nav/public_nav.html #, python-format msgid "Draw for %(round)s" -msgstr "" +msgstr "%(round)s için kura" -#: templates/nav/public_nav.html:82 +#: templates/nav/public_nav.html msgid "Current Draws" -msgstr "" +msgstr "Şuanki Kuralar" -#: templates/nav/public_nav.html:102 templates/nav/round_panel.html:57 +#: templates/nav/public_nav.html templates/nav/round_panel.html msgid "Results" -msgstr "" +msgstr "Sonuçlar" -#: templates/nav/public_nav.html:120 +#: templates/nav/public_nav.html msgid "Break" -msgstr "" +msgstr "Break" -#: templates/nav/public_nav.html:172 +#: templates/nav/public_nav.html msgid "Feedback Progress" -msgstr "" +msgstr "Geri Bildirim Durumu" -#: templates/nav/public_nav.html:177 +#: templates/nav/public_nav.html msgid "Enter Ballot" -msgstr "" +msgstr "Ballot Gir" -#: templates/nav/round_panel.html:27 +#: templates/nav/round_panel.html msgid "Availability" -msgstr "" +msgstr "Uygunluk" -#: templates/nav/round_panel.html:37 +#: templates/nav/round_panel.html msgid "Draw" -msgstr "" +msgstr "Kura" -#: templates/nav/round_panel.html:48 +#: templates/nav/round_panel.html msgid "Display" -msgstr "" +msgstr "Göster" -#: templates/nav/top_nav_base.html:29 +#: templates/nav/top_nav_base.html #, python-format msgid "Administrator area for %(tournament)s" -msgstr "" +msgstr " %(tournament)s için yönetici alanı" -#: templates/nav/top_nav_base.html:38 +#: templates/nav/top_nav_base.html #, python-format msgid "Assistant area for %(tournament)s" -msgstr "" +msgstr " %(tournament)s için asistan alanı" -#: templates/nav/top_nav_base.html:47 +#: templates/nav/top_nav_base.html #, python-format msgid "Public area for %(tournament)s" -msgstr "" +msgstr " %(tournament)s için ortak alan" -#: templates/nav/top_nav_base.html:105 +#: templates/nav/top_nav_base.html msgid "Login" -msgstr "Giriş yapmak" +msgstr "Oturum Aç" -#: templates/registration/logged_out.html:5 +#: templates/registration/logged_out.html msgid "Goodbye" -msgstr "" +msgstr "Hoşçakalın" -#: templates/registration/logged_out.html:12 +#: templates/registration/logged_out.html #, python-format msgid "You have been logged out. Log in again?" -msgstr "" +msgstr "Oturumunuz kapatıldı. Tekrar oturum aç?" -#: templates/registration/login.html:4 +#: templates/registration/login.html msgctxt "page title" msgid "Login" -msgstr "Giriş yapmak" +msgstr "Oturum Aç" -#: templates/registration/login.html:29 +#: templates/registration/login.html msgctxt "page title" msgid "Log in to Tabbycat" -msgstr "" +msgstr "Tabbycat'te oturum aç." -#: templates/registration/login.html:37 +#: templates/registration/login.html msgid "Your username and password didn't match." -msgstr "" +msgstr "Kullanıcı adınız veya parolanız yanlış." -#: templates/registration/login.html:46 +#: templates/registration/login.html msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." -msgstr "" +msgstr "Hesabınızın bu sayfaya erişimi yok. Devam etmek için lütfen erişimi olan bir hesapla oturum açın." -#: templates/registration/login.html:49 +#: templates/registration/login.html msgid "Please log in to see this page." -msgstr "" +msgstr "Bu sayfayı görmek için lütfen oturum açın." -#: templates/registration/password_change_done.html:4 -#: templates/registration/password_change_done.html:5 +#: templates/registration/password_change_done.html msgctxt "page title" msgid "Password changed" -msgstr "" +msgstr "Parola değiştirildi" -#: templates/registration/password_change_done.html:11 +#: templates/registration/password_change_done.html msgid "Your password has been changed." -msgstr "" +msgstr "Parolanız değiştirildi." -#: templates/registration/password_change_done.html:14 +#: templates/registration/password_change_done.html msgid "Go to the home page" -msgstr "" +msgstr "Ana sayfaya git" -#: templates/registration/password_change_form.html:4 -#: templates/registration/password_change_form.html:19 +#: templates/registration/password_change_form.html msgctxt "page title" msgid "Password Change" -msgstr "" +msgstr "Parola Değiştirme" + +#: templates/registration/password_change_form.html +#, python-format +msgid "API Token: %(api_token)s" +msgstr "API Token: %(api_token)s" + +#: templates/registration/password_change_form.html +msgid "The API token will allow you to authorize external applications to access the site as staff." +msgstr "API Tokeni, harici uygulamaları siteye personel olarak erişmeleri için yetkilendirmenize olanak tanır." -#: templates/registration/password_change_form.html:20 +#: templates/registration/password_change_form.html msgid "Please enter your old password, then enter a new one." -msgstr "" +msgstr "Lütfen eski parolanızı girin, ardından yeni bir parola girin." -#: templates/registration/password_change_form.html:25 -#: templates/registration/password_reset_confirm.html:38 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgctxt "button" msgid "Change my password" -msgstr "" +msgstr "Parolamı değiştir" -#: templates/registration/password_change_form.html:26 +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html msgid "Cancel and go back to the site home page" -msgstr "" +msgstr "İptal et ve site ana sayfasına geri dön" -#: templates/registration/password_reset_complete.html:4 -#: templates/registration/password_reset_complete.html:5 +#: templates/registration/password_reset_complete.html msgctxt "page title" msgid "Password reset complete" msgstr "" -#: templates/registration/password_reset_complete.html:16 +#: templates/registration/password_reset_complete.html msgid "Your password has been reset." -msgstr "" +msgstr "Parolanız sıfırlandı." -#. Translators: This text appears on a button that takes the user to the login page after a password reset. -#: templates/registration/password_reset_complete.html:23 +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html msgid "Go to the login page" -msgstr "" +msgstr "Oturum açma sayfasına git" -#: templates/registration/password_reset_confirm.html:4 -#: templates/registration/password_reset_confirm.html:14 +#: templates/registration/password_reset_confirm.html msgctxt "page title" msgid "Password Reset Confirmation" -msgstr "" +msgstr "Parola Sıfırlama Onayı" -#: templates/registration/password_reset_confirm.html:26 +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html +msgctxt "page title" +msgid "Password Reset" +msgstr "Parola Sıfırlama" + +#: templates/registration/password_reset_confirm.html msgid "Please enter a new password (twice):" -msgstr "" +msgstr "Lütfen yeni parola girin (iki kez):" -#: templates/registration/password_reset_confirm.html:44 +#: templates/registration/password_reset_confirm.html msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." -msgstr "" +msgstr "Parola sıfırlama bağlantısı, büyük olasılıkla zaten kullanılmış olması nedeniyle geçersizdi. Lütfen yeni bir parola sıfırlama isteğinde bulunun." -#: templates/registration/password_reset_done.html:4 -#: templates/registration/password_reset_done.html:5 +#: templates/registration/password_reset_done.html msgctxt "page title" -msgid "Password reset e-mail sent" -msgstr "" +msgid "Password reset email sent" +msgstr "Parola sıfırlama e-postası gönderildi" -#: templates/registration/password_reset_done.html:16 -msgid "We've e-mailed you instructions for setting your password, if an account exists with the e-mail address you entered. You should receive them shortly." -msgstr "" +#: templates/registration/password_reset_done.html +msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." +msgstr "Girdiğiniz e-posta adresiyle bir hesap varsa, parolanızı ayarlamayla ilgili talimatları size e-postayla gönderdik. Kısa sürede size aktarılacaktır." -#: templates/registration/password_reset_done.html:19 -msgid "If you don't receive an e-mail, please make sure you've entered the address you registered with, and check your spam folder." -msgstr "" - -#. Translators: This text appears on a button that takes the user back to the login page from the password reset page. -#: templates/registration/password_reset_done.html:26 -msgid "Return to the login page" -msgstr "" +#: templates/registration/password_reset_done.html +msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." +msgstr "E-posta ulaşmazsa, lütfen kaydolduğunuz adresi girdiğinizden emin olun ve spam klasörünüzü kontrol edin." -#: templates/registration/password_reset_email.html:2 +#: templates/registration/password_reset_email.html #, python-format msgid "Hi, %(user)s!" -msgstr "" +msgstr "Merhaba, %(user)s!" -#: templates/registration/password_reset_email.html:6 +#: templates/registration/password_reset_email.html #, python-format -msgid "Someone asked for a password reset for the e-mail address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." -msgstr "" +msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." +msgstr "Birisi Tabbycat sitesindeki %(protocol)s://%(domain)s adresindeki %(email)s e-posta adresi için parola sıfırlama istedi." -#: templates/registration/password_reset_email.html:10 +#: templates/registration/password_reset_email.html msgid "If this was you, follow the link below to reset your password:" -msgstr "" +msgstr "Bu sizseniz, parolanızı sıfırlamak için aşağıdaki bağlantıyı izleyin:" -#: templates/registration/password_reset_email.html:13 +#: templates/registration/password_reset_email.html #, python-format -msgid "If this wasn't you, that probably means someone else typed your e-mail address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." -msgstr "" +msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." +msgstr "Bu siz değilseniz, bu muhtemelen başka birinin e-posta adresinizi %(protocol)s://%(domain)s adresindeki Tabbycat sitesindeki parola sıfırlama formuna yazdığı anlamına gelir." -#: templates/registration/password_reset_form.html:4 -#: templates/registration/password_reset_form.html:24 -msgctxt "page title" -msgid "Password Reset" -msgstr "" +#: templates/registration/password_reset_form.html +msgid "Enter your email address below, and we'll email you a password reset link." +msgstr "Aşağıya e-posta adresinizi girin, size bir parola sıfırlama bağlantısı e-postayla gönderelim." -#: templates/registration/password_reset_form.html:27 -msgid "Enter your e-mail address below, and we'll e-mail you a password reset link." -msgstr "" - -#: templates/registration/password_reset_form.html:34 -msgid "Please enter a valid e-mail address." -msgstr "" +#: templates/registration/password_reset_form.html +msgid "Please enter a valid email address." +msgstr "Lütfen geçerli bir e-posta adresi girin." -#: templates/registration/password_reset_form.html:39 -msgid "E-mail address" +#: templates/registration/password_reset_form.html users/forms.py +msgid "Email address" msgstr "" -#: templates/registration/password_reset_form.html:50 +#: templates/registration/password_reset_form.html msgctxt "button" msgid "Reset my password" -msgstr "" +msgstr "Parolamı sıfırla" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html msgid "Back to the login page" -msgstr "" +msgstr "Oturum açma sayfasına geri dön" -#: templates/registration/password_reset_subject.txt:2 +#: templates/registration/password_reset_subject.txt #, python-format msgid "Password reset on Tabbycat site at %(domain)s" -msgstr "" +msgstr "Parola sıfırlama konumu Tabbycat sitesinde: %(domain)s" -#: urls.py:101 +#: urls.py #, python-format msgid "Hi, %(user)s — you just logged in!" -msgstr "" +msgstr "Merhaba, %(user)s — az önce oturum açtınız!" -#: urls.py:104 +#: urls.py msgid "Welcome! You just logged in!" -msgstr "" +msgstr "Hoş geldin! Oturum açtınız!" -#: users/admin.py:19 +#: users/admin.py msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." -msgstr "" +msgstr "Çalışan durumuna sahip kullanıcılar Veritabanını Düzenle alanını görüntüleyebilir ve düzenleyebilir. Bu tehlikeli olabilir ve puanlama yönetmenleri hariç kullanılmamalıdır." -#: users/admin.py:22 +#: users/admin.py msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." -msgstr "" +msgstr "Süper kullanıcılar, Tabbycat'in bir turnuva düzenlemek için gerekli olan tüm alanlarına tam erişime sahiptir. Süper kullanıcı olmayan kullanıcılar, sonuç ve geri bildirim ekleme gibi veri girişi görevlerini gerçekleştirmeye devam edebilir, ancak Aralar ve Geri Bildirim bölümleri gibi gizli alanlara erişemez. Baş jüri ve yardımcılarına, ne yaptıklarını biliyorlarsa, genellikle süper kullanıcı statüsü verilir." + +#: users/templates/admin/auth/delete_user_warning.html +msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." +msgstr "Uyarı: Bir şey yaptıktan sonra kullanıcıları veritabanından silmemelisiniz, çünkü veritabanı bu kullanıcılar tarafından gerçekleştirilen eylemleri günlüğe kaydeder ve kullanıcıları silmek ilgili günlükleri de siler. Bir kullanıcı hesabını devre dışı bırakmak istiyorsanız, kullanıcıyı düzenlemek için geri dönün, \"İzinler\" sekmesine tıklayın, \"Etkin\" kutusunun işaretini kaldırın ve kullanıcıyı kaydedin." + +#: users/templates/signup.html +msgid "Sign-Up" +msgstr "Kayıt Ol" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Administrator Account" +msgstr "Yeni Yönetici Hesabı Oluşturma" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Assistant Account" +msgstr "Yeni Asistan Hesabı Oluşturma" + +#: users/templates/signup.html +msgid "Create Account" +msgstr "Hesap Oluştur" + +#: users/views.py +msgid "You have successfully created a new administrator account." +msgstr "Başarıyla yeni bir yönetici hesabı oluşturdunuz." + +#: users/views.py +msgid "You have successfully created a new assistant account." +msgstr "Başarıyla yeni bir asistan hesabı oluşturdunuz." + +#: users/views.py +msgid "Whoops! It looks like someone's already created the first user account. Please log in." +msgstr "Birisi ilk kullanıcı hesabını zaten oluşturmuş gibi görünüyor. Lütfen oturum açın." + +#: users/views.py +#, python-format +msgid "Welcome! You've created an account for %s." +msgstr "Hoş geldin! %s için bir hesap oluşturdunuz." diff --git a/tabbycat/locale/tr/LC_MESSAGES/djangojs.po b/tabbycat/locale/tr/LC_MESSAGES/djangojs.po index 47217fee660..dc2ba7bbbc1 100644 --- a/tabbycat/locale/tr/LC_MESSAGES/djangojs.po +++ b/tabbycat/locale/tr/LC_MESSAGES/djangojs.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-01-14 04:50+1100\n" -"PO-Revision-Date: 2020-03-08 17:40\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" "MIME-Version: 1.0\n" @@ -12,194 +12,196 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/djangojs.po\n" +"X-Crowdin-File-ID: 962\n" #: checkins/templates/CheckInScanContainer.vue: msgid "Scan Using Camera" -msgstr "" +msgstr "Kamera Kullanarak Tara" #: checkins/templates/CheckInScanContainer.vue: msgid "Stop Camera Scan" -msgstr "" +msgstr "Kamera Taramasını Durdur" #: checkins/templates/CheckInScanContainer.vue: msgid "Turn On Sounds" -msgstr "" +msgstr "Sesleri Aç" #. Translators: %1: Time of checkin, %2: Barcode number, %3: Name of "owner" #: checkins/templates/CheckInScanContainer.vue: msgid "%1 checked in %2: %3" -msgstr "" +msgstr "%1 %2'ye giriş yaptı: %3" #: checkins/templates/CheckInStatusContainer.vue: msgid "All" -msgstr "" +msgstr "Tüm" #. Translators: %1: Option name #: checkins/templates/CheckInStatusContainer.vue: msgid "By %1" -msgstr "" +msgstr "%1'e göre" #: checkins/templates/CheckInStatusContainer.vue: -msgid "No matching venues found." -msgstr "" +msgid "No matching rooms found." +msgstr "Eşleşen oda bulunamadı." #: checkins/templates/CheckInStatusContainer.vue: msgid "No matching people found." -msgstr "" +msgstr "Eşleşen kişi bulunamadı." #: checkins/templates/CheckInStatusContainer.vue: msgid "This page will live-update with new check-ins as they occur although the initial list may be up to a minute old." -msgstr "" +msgstr "Bu sayfa, ilk liste en fazla bir dakika gecikmeli olsa da, gerçekleştikleri anda yeni girişlerle canlı olarak güncellenecektir." #: checkins/templates/CheckInStatusContainer.vue: msgid " All" -msgstr "" +msgstr " Tümü" #: checkins/templates/CheckInStatusContainer.vue: msgid " All" -msgstr "" +msgstr " Tümü" #: checkins/templates/CheckInStatusContainer.vue: msgid "Click to check-in manually" -msgstr "" +msgstr "Elle giriş yapmak için tıklayın" #: checkins/templates/CheckInStatusContainer.vue: msgid "saving..." -msgstr "" +msgstr "kaydediliyor..." #: checkins/templates/CheckInStatusContainer.vue: msgid "This person does not have a check-in identifier so they can't be checked in" -msgstr "" +msgstr "Bu kişinin bir giriş tanımlayıcısı yok, bu nedenle giriş yapamıyor" #: checkins/templates/CheckInStatusContainer.vue: msgid "If you want to view this page without the sidebar (i.e. for displaying to an auditorium) you can use the assistant version." -msgstr "" +msgstr "Bu sayfayı kenar çubuğu olmadan görüntülemek istiyorsanız (yani bir oditoryumda görüntülemek için) yardımcı sürümü kullanabilirsiniz." #: checkins/templates/CheckInStatusContainer.vue: msgid "Open the assistant version." -msgstr "" +msgstr "Yardımcı sürümünü açın." #: checkins/templates/CheckInStatusContainer.vue: msgid "Click to undo a check-in" -msgstr "" +msgstr "Girişi geri almak için tıklayın" #: checkins/templates/PeopleStatusMixin.vue: msgid "%1, a %2 of no institutional affiliation with identifier of %3" -msgstr "" +msgstr "%1, %3 tanımlayıcısı ile kurumsal bağlantısı olmayan %2'si" #: checkins/templates/PeopleStatusMixin.vue: msgid "%1, a %2 of no institutional affiliation with no assigned identifier" -msgstr "" +msgstr "%1, atanmış tanımlayıcısı olmayan kurumsal bir ilişkinin %2'si" #: checkins/templates/PeopleStatusMixin.vue: msgid "%1, a %2 from %3 with identifier of %4" -msgstr "" +msgstr "%1, %3'ten %4 tanımlayıcılı bir %2" #: checkins/templates/PeopleStatusMixin.vue: msgid "%1, a %2 from %3 with no assigned identifier" -msgstr "" +msgstr "%1, atanmış tanımlayıcı olmadan %3'ten bir %2" #: checkins/templates/PeopleStatusMixin.vue: msgid "%1 (Present; id=%2)" -msgstr "" +msgstr "%1 (Mevcut; id=%2)" #: checkins/templates/PeopleStatusMixin.vue: msgid "%1 (Absent; id=%2)" -msgstr "" +msgstr "%1 (Yok; id=%2)" #: checkins/templates/PeopleStatusMixin.vue: msgid "%1, a team with speakers %2" -msgstr "" +msgstr "%1, konuşmacılı bir ekip %2" #: checkins/templates/PeopleStatusMixin.vue: msgid "%1, a %2" -msgstr "" +msgstr "%1, bir %2" #: checkins/templates/PeopleStatusMixin.vue: msgid "Anonymous (due to team codes)" -msgstr "" +msgstr "Anonim (takım kodları nedeniyle)" #: checkins/templates/PeopleStatusMixin.vue: msgid "Anon" -msgstr "" +msgstr "Anon" #: checkins/templates/PeopleStatusMixin.vue: msgid "Independent" -msgstr "" +msgstr "Bağımsız" #: checkins/templates/VenuesStatusMixin.vue: msgid "%1 (%2) with identifier of %3" -msgstr "" +msgstr "%1 (%2), %3 tanımlayıcısı ile" #: checkins/templates/VenuesStatusMixin.vue: msgid "%1 (no category) with identifier of %2" -msgstr "" +msgstr "%1 (kategori yok) ve %2 tanımlayıcısı" #: checkins/templates/VenuesStatusMixin.vue: msgid "%1 (%2) with no assigned identifier" -msgstr "" +msgstr "%1 (%2) atanmış tanımlayıcı yok" #: checkins/templates/VenuesStatusMixin.vue: msgid "%1 (no category) with no assigned identifier" -msgstr "" +msgstr "%1 (kategori yok) atanmış tanımlayıcı yok" #: checkins/templates/VenuesStatusMixin.vue: msgid "Uncategorised" -msgstr "" +msgstr "Kategorize edilmemiş" #: checkins/templates/VenuesStatusMixin.vue: msgid "No Category" -msgstr "" +msgstr "Kategori Yok" #: checkins/templates/VenuesStatusMixin.vue: msgid "Priority %1" -msgstr "" +msgstr "Öncelik %1" #: printing/templates/PrintableBallotHeader.vue: msgid "%1 %2 from %3" -msgstr "" +msgstr "%1 %2'den %3" #: printing/templates/PrintableBallotHeader.vue: msgid "%1 %2 from %3 %4" -msgstr "" +msgstr "%1 %2'den %3 %4" #: printing/templates/PrintableBallotHeader.vue: msgid "%1 %2 from %3 on %4 (Chair)" -msgstr "" +msgstr "%1 %2'den %3'e %4 (Başkan)" #: printing/templates/PrintableBallotHeader.vue: msgid "%1 %2 from %3 on %4 (Panellist)" -msgstr "" +msgstr "%1 %2'den %3'e kadar% 4 (Panelist)" #: printing/templates/PrintableBallotHeader.vue: msgid "%1 %2 from %3 on %4 (Trainee)" -msgstr "" +msgstr "%1 %2'den %3'e %4 (Acem,)" #: printing/templates/PrintableBallotHeader.vue: msgid "ID %1," -msgstr "" +msgstr "Kimlik %1," #: printing/templates/PrintableBallotHeader.vue: -msgid "Venue:" -msgstr "" +msgid "Room:" +msgstr "Oda:" #: printing/templates/PrintableBallotHeader.vue: msgid "Chair for Panel of %1" -msgstr "" +msgstr "%1 Paneli Başkanı" #: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: msgid "Solo Chair" -msgstr "" +msgstr "Tek Başkan" #: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: msgid "Panellist" -msgstr "" +msgstr "Panelist" #: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: msgid "Trainee" -msgstr "" +msgstr "Acemi" #: printing/templates/PrintableBallotHeader.vue: msgid "Team" @@ -207,27 +209,27 @@ msgstr "Takım" #: printing/templates/PrintableDebateInfo.vue: msgid "Mark speeches %1 to %2; %3." -msgstr "" +msgstr "Konuşmaları %1 ila %2 arasında puanlayın;%3." #: printing/templates/PrintableDebateInfo.vue: msgid "Mark replies %1 to %2; %3." -msgstr "" +msgstr "Yanıtları %1 ile %2 arası puanlayın; %3." #: printing/templates/PrintableDebateInfo.vue: msgid "Return ballots to %1." -msgstr "" +msgstr "Ballotları %1'e döndürün." #: printing/templates/PrintableDebateInfo.vue: msgid "The motion is %1" -msgstr "" +msgstr "Önerge %1" #: printing/templates/PrintableDebateInfo.vue: msgid "Debated" -msgstr "" +msgstr "Tartışılan" #: printing/templates/PrintableDebateInfo.vue: msgid "Circle %1" -msgstr "" +msgstr "%1 yuvarlak içine al" #: printing/templates/PrintableDebateInfo.vue: msgid "%1: %2" @@ -235,11 +237,11 @@ msgstr "%1: %2" #: printing/templates/PrintableDebateInfo.vue: msgid "Aff Veto" -msgstr "" +msgstr "Hükumet Veto" #: printing/templates/PrintableDebateInfo.vue: msgid "Neg Veto" -msgstr "" +msgstr "Muhalefet Veto" #: printing/templates/PrintableDebateInfo.vue: printing/templates/PrintableTeamScores.vue: msgid "%1:" @@ -247,27 +249,27 @@ msgstr "%1:" #: printing/templates/PrintableDebateInfo.vue: msgid "tab entry" -msgstr "" +msgstr "tab girişi" #: printing/templates/PrintableDebateInfo.vue: msgid "tab check" -msgstr "" +msgstr "tab kontrolü" #: printing/templates/PrintableDebateInfo.vue: checkins/templates/PeopleStatusMixin.vue: msgid "Unaffiliated" -msgstr "" +msgstr "Bağımsız" #: printing/templates/PrintableDebateInfo.vue: msgid "no ½ marks" -msgstr "" +msgstr "yarım puan yok" #: printing/templates/PrintableDebateInfo.vue: msgid "½ marks are allowed" -msgstr "" +msgstr "yarım puan var" #: printing/templates/PrintableDebateInfo.vue: msgid "decimal marks are allowed" -msgstr "" +msgstr "ondalık işaretlere izin verilir" #: printing/templates/PrintableDebateInfo.vue: msgid "%1 (%2, %3)" @@ -275,7 +277,7 @@ msgstr "%1 (%2, %3)" #: printing/templates/PrintableDebateInfo.vue: msgid "Adjudicating with %1." -msgstr "" +msgstr "%1 ile jüri görevinde" #: printing/templates/PrintableDebateInfo.vue: msgid "; " @@ -283,51 +285,51 @@ msgstr "; " #: printing/templates/PrintableFeedback.vue: msgid "Did %1 deliver the adjudication?" -msgstr "" +msgstr "%1'i kararı verdi mi?" #: printing/templates/PrintableFeedback.vue: printing/templates/PrintableFeedbackQuestion.vue: msgid "Yes" -msgstr "" +msgstr "Evet" #: printing/templates/PrintableFeedback.vue: msgid "No, I am submitting feedback on:" -msgstr "" +msgstr "Hayır, aşağıdakilerle ilgili geri bildirim gönderiyorum:" #: printing/templates/PrintableFeedbackQuestion.vue: msgid "Unsure" -msgstr "" +msgstr "Emin değilim" #: printing/templates/PrintableFeedbackQuestion.vue: msgid "No" -msgstr "" +msgstr "Hayır" #: printing/templates/PrintableScoresheet.vue: msgid "Which team won the debate:" -msgstr "" +msgstr "Tartışmayı hangi takımın kazandığı:" #: printing/templates/PrintableScoresheet.vue: msgid "By how many points did they win:" -msgstr "" +msgstr "Kaç puanla kazandığı:" #: printing/templates/PrintableTeamScores.vue: msgid "%1, %2" -msgstr "" +msgstr "%1, %2" #: printing/templates/PrintableTeamScores.vue: msgid "IMPORTANT: Check and explicitly note if a speaker gives multiple speeches" -msgstr "" +msgstr "ÖNEMLİ: Bir konuşmacının birden fazla konuşma yapıp yapmadığını kontrol edin ve açıkça not edin" #: printing/templates/PrintableTeamScores.vue: msgid "Score:" -msgstr "" +msgstr "Puan:" #: printing/templates/PrintableTeamScores.vue: msgid "Circle the last digit of the %1's score:" -msgstr "" +msgstr "%1'in puanının son basamağını daire içine alın:" #: printing/templates/PrintableTeamScores.vue: msgid "Circle Rank:" -msgstr "" +msgstr "Daire Sıralaması:" #: printing/templates/PrintableTeamScores.vue: msgid "Total:" @@ -335,179 +337,179 @@ msgstr "Toplam:" #: printing/templates/PrintableTeamScores.vue: msgid "Circle the last digit of the team's total:" -msgstr "" +msgstr "Takımın toplamının son basamağını daire içine alın:" #: templates/tables/TablesContainer.vue:8 msgid "Find in Table" -msgstr "" +msgstr "Tabloda Bul" #: templates/tables/CheckboxTables.vue:30 msgid "Set All Breaking as Available" -msgstr "" +msgstr "Tüm Break'leri Kullanılabilir Olarak Ayarla" #: templates/tables/CheckboxTables.vue:36 msgid "Set all the availabilities to exactly match what they were in the previous round." -msgstr "" +msgstr "Tüm kullanılabilirlikleri bir önceki turdakiyle tam olarak eşleşecek şekilde ayarla." #: templates/tables/CheckboxTables.vue:37 msgid "Match" -msgstr "" +msgstr "Eşleştir" #: templates/tables/CheckboxTables.vue:41 msgid "Set all availabilities to exactly match check-ins." -msgstr "" +msgstr "Tüm kullanılabilirlikleri girişlerle tam olarak eşleşecek şekilde ayarlayın." #: templates/tables/CheckboxTables.vue:44 msgid "Match Check-Ins" -msgstr "" +msgstr "Girişlerle Eşleştir" #: templates/tables/CheckboxTables.vue: msgid "Set people as available only if they have a check-in and are currently unavailable — i.e. it will not overwrite any existing availabilities." -msgstr "" +msgstr "Kişileri yalnızca bir giriş işlemi varsa ve şu anda kullanılamıyorsa kullanılabilir olarak ayarlayın - yani mevcut kullanılabilirlikleri silmez." #: templates/tables/CheckboxTables.vue:47 msgid "Copy From Check-Ins" -msgstr "" +msgstr "Girişlerdem Kopyala" #: tournaments/templates/TournamentOverviewContainer.vue: msgid "Ballots Status" -msgstr "" +msgstr "Ballotların Durumu" #: tournaments/templates/TournamentOverviewContainer.vue: msgid "Latest Actions" -msgstr "" +msgstr "Son Eylemler" #: tournaments/templates/TournamentOverviewContainer.vue: msgid "No Actions Yet" -msgstr "" +msgstr "Henüz İşlem Yok" #: tournaments/templates/TournamentOverviewContainer.vue: msgid "Latest Results" -msgstr "" +msgstr "Son Sonuçlar" #: tournaments/templates/TournamentOverviewContainer.vue: msgid "No Confirmed Results Yet" -msgstr "" +msgstr "Henüz Doğrulanmış Sonuç Yok" #: participants/templates/DiversityContainer.vue:6 msgid "Speaker Demographics" -msgstr "" +msgstr "Konuşmacı Demografisi" #: participants/templates/DiversityContainer.vue:11 msgid "No Gender Information" -msgstr "" +msgstr "Cinsiyet Bilgisi Yok" #: participants/templates/DiversityContainer.vue:18 msgid "No Speaker Categories Information" -msgstr "" +msgstr "Konuşmacı Kategorisi Bilgisi Yok" #: participants/templates/DiversityContainer.vue:33 msgid "Speaker Results" -msgstr "" +msgstr "Konuşmacı Sonuçları" #: participants/templates/DiversityContainer.vue:36 msgid "speakers with gender data" -msgstr "" +msgstr "cinsiyet verileri olan konuşmacılar" #: participants/templates/DiversityContainer.vue:38 msgid "speaker scores total" -msgstr "" +msgstr "konuşmacı puanları toplamı" #: participants/templates/DiversityContainer.vue:49 msgid "No Region Information" -msgstr "" +msgstr "Bölge Bilgisi Yok" #: participants/templates/DiversityContainer.vue:56 msgid "Adjudicator Demographics" -msgstr "" +msgstr "Jüri Demografisi" #: participants/templates/DiversityContainer.vue:68 msgid "No Position Information" -msgstr "" +msgstr "Pozisyon bilgisi yok" #: participants/templates/DiversityContainer.vue:83 msgid "Adjudicator Results" -msgstr "" +msgstr "Jüri Sonuçları" #: participants/templates/DiversityContainer.vue:86 msgid "adjudicators with gender data" -msgstr "" +msgstr "cinsiyet verilerine sahip jüriler" #: participants/templates/DiversityContainer.vue:88 msgid "feedback scores total" -msgstr "" +msgstr "geri bildirim puanları toplamı" #: participants/templates/DiversityContainer.vue:94 msgid "No Adjudicator Ratings Information" -msgstr "" +msgstr "Jüri Derecelendirme Bilgileri Yok" #: participants/templates/DiversityContainer.vue:99 msgid "No Adjudicator-Adjudicator Feedback Information" -msgstr "" +msgstr "Jüri-Jüri Geri Bildirim Bilgisi Yok" #: results/templates/ResultsStats.vue:10 msgid "Checked-In" -msgstr "" +msgstr "Girişli" #: results/templates/ResultsStats.vue:15 msgid "Not Checked-In" -msgstr "" +msgstr "Giriş Yapılmadı" #: results/templates/ResultsStats.vue:19 msgid "Ballot Check-Ins" -msgstr "" +msgstr "Ballot Girişi" #: results/templates/ResultsStats.vue:26 msgid "Unknown" -msgstr "" +msgstr "Bilinmeyen" #: results/templates/ResultsStats.vue:31 msgid "Unconfirmed" -msgstr "" +msgstr "Onaylanmamış" #: results/templates/ResultsStats.vue:36 msgid "Confirmed" -msgstr "" +msgstr "Onaylanmış" #: results/templates/ResultsStats.vue:40 msgid "Ballot Statuses" -msgstr "" +msgstr "Ballot Durumları" #: results/templates/BallotsCell.vue:18 msgid "You cannot confirm this ballot because you entered it" -msgstr "" +msgstr "Bu ballotu girdiğiniz için onaylayamazsınız" #: results/templates/BallotsCell.vue:34 msgid "Add Ballot" -msgstr "" +msgstr "Ballot ekle" #: results/templates/BallotsCell.vue:79 msgid "Re-Edit" -msgstr "" +msgstr "Yeniden Düzenle" #: results/templates/BallotsCell.vue:81 msgid "Review" -msgstr "" +msgstr "İncele" #: utils/templates/AutoSaveCounter.vue:4 msgid "No changes" -msgstr "" +msgstr "Değişiklik yok" #: utils/templates/DragAndDropActions.vue:8 msgid "Return to Draw" -msgstr "" +msgstr "Kuraya Dön" #: utils/templates/DragAndDropActions.vue:15 msgid "Auto-Prioritise" -msgstr "" +msgstr "Otomatik Önceliklendirme" #: utils/templates/DragAndDropActions.vue:17 msgid "Auto-Allocate" -msgstr "" +msgstr "Otomatik Tahsis" #: utils/templates/DragAndDropActions.vue:65 msgid "Break" -msgstr "" +msgstr "Break" #: utils/templates/DragAndDropActions.vue:65 msgid "Gender" @@ -528,25 +530,25 @@ msgstr "Kategori" #: utils/templates/DragAndDropDebate.vue:5 msgid "The debate's bracket" -msgstr "" +msgstr "Bu maçın aşaması" #: utils/templates/DragAndDropDebate.vue:9 msgid "The bracket range of the hypothetical debate" -msgstr "" +msgstr "Varsayımsal maçın aşama aralığı" #: utils/templates/DragAndDropDebate.vue:20 msgid "The total number of live break categories across all teams" -msgstr "" +msgstr "Tüm takımlardaki mümkün break kategorilerinin toplam sayısı" #: utils/templates/DragAndDropDebate.vue:26 msgid "The estimated total number of live break categories across all teams of the hypothetical debate" -msgstr "" +msgstr "Varsayımsal tartışmada tüm takımlardaki mümkün break kategorilerinin toplam sayısı" #: utils/templates/DragAndDropDebate.vue:33 msgid "This debate's priority" -msgstr "" +msgstr "Bu maçın önceliği" #: draw/templates/InlineTeam.vue:41 msgid "No code name set" -msgstr "" +msgstr "Kod adı ayarlanmadı" diff --git a/tabbycat/motions/locale/tr/LC_MESSAGES/django.po b/tabbycat/motions/locale/tr/LC_MESSAGES/django.po index ef3f97a24d7..c1cd2c11294 100644 --- a/tabbycat/motions/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/tr/LC_MESSAGES/django.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:32\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" +"Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" "MIME-Version: 1.0\n" @@ -12,336 +12,388 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 936\n" -#: motions/apps.py:7 motions/templates/public_motions.html:4 -#: motions/templates/public_motions.html:5 +#: motions/apps.py motions/templates/public_motions.html msgid "Motions" msgstr "Önergeler" -#: motions/models.py:9 -msgid "sequence number" -msgstr "" - -#: motions/models.py:10 -msgid "The order in which motions are displayed" -msgstr "" - -#: motions/models.py:12 +#: motions/models.py msgid "text" -msgstr "" +msgstr "metin" -#: motions/models.py:13 +#: motions/models.py msgid "The full motion e.g., \"This House would straighten all bananas\"" -msgstr "" +msgstr "Önergenin tamamı örneğin, \"Bu Ev tüm muzları düzeltir.\"" -#: motions/models.py:15 +#: motions/models.py msgid "reference" -msgstr "" +msgstr "referans" -#: motions/models.py:16 +#: motions/models.py msgid "Shortcode for the motion, e.g., \"Bananas\"" -msgstr "" +msgstr "Önergenin kısa kodu, örneğin \"Muzlar\"" -#: motions/models.py:18 +#: motions/models.py msgid "info slide" msgstr "bilgi Slaydı" -#: motions/models.py:19 +#: motions/models.py msgid "The information slide for this topic; if it has one" -msgstr "" +msgstr "Eğer varsa bu konu için bilgi slaytı:" -#: motions/models.py:21 -msgid "round" -msgstr "tur" +#: motions/models.py +msgid "tournament" +msgstr "turnuva" -#: motions/models.py:25 motions/models.py:37 +#: motions/models.py +msgid "rounds" +msgstr "turlar" + +#: motions/models.py msgid "motion" msgstr "önerge" -#: motions/models.py:26 +#: motions/models.py msgid "motions" msgstr "önergeler" -#: motions/models.py:35 +#: motions/models.py msgid "debate team" -msgstr "" +msgstr "tartışma ekibi" -#: motions/models.py:39 +#: motions/models.py msgid "preferences" -msgstr "" +msgstr "tercihler" -#: motions/models.py:41 +#: motions/models.py msgid "ballot submission" -msgstr "" +msgstr "ballot teslimi" -#: motions/models.py:45 +#: motions/models.py msgid "debate team motion preference" -msgstr "" +msgstr "tartışma ekibi önerge tercihi" -#: motions/models.py:46 +#: motions/models.py msgid "debate team motion preferences" -msgstr "" +msgstr "tartışma ekibi önerge tercihleri" + +#: motions/models.py +msgid "round" +msgstr "tur" + +#: motions/models.py +msgid "sequence number" +msgstr "sıra numarası" + +#: motions/models.py +msgid "The order in which motions are displayed" +msgstr "Önergelerin görüntülenme sırası" + +#: motions/models.py +msgid "round motion" +msgstr "tur önergesi" + +#: motions/models.py +msgid "round motions" +msgstr "tur önergeleri" -#: motions/statistics.py:88 +#: motions/statistics.py msgid "extremely strong evidence" -msgstr "" +msgstr "çok güçlü kanıt" -#: motions/statistics.py:89 +#: motions/statistics.py msgid "strong evidence" -msgstr "" +msgstr "güçlü kanıt" -#: motions/statistics.py:90 +#: motions/statistics.py msgid "moderate evidence" -msgstr "" +msgstr "orta güçlü kanıt" -#: motions/statistics.py:91 +#: motions/statistics.py msgid "weak evidence" -msgstr "" +msgstr "zayıf kanıt" -#: motions/statistics.py:92 +#: motions/statistics.py msgid "very weak evidence" -msgstr "" +msgstr "çok zayıf kanıt" -#: motions/statistics.py:93 +#: motions/statistics.py msgid "extremely weak evidence" -msgstr "" +msgstr "çok zayıf kanıt" -#: motions/statistics.py:116 +#: motions/statistics.py msgid "balance inconclusive" -msgstr "" +msgstr "denge sonuçsuz" -#: motions/statistics.py:117 +#: motions/statistics.py msgid "too few debates to get a meaningful statistic" -msgstr "" +msgstr "anlamlı bir istatistik elde etmek için çok az maç" -#: motions/statistics.py:125 +#: motions/statistics.py #, python-format msgid "imbalanced at %(level)s level" -msgstr "" +msgstr "%(level)s seviyesinde dengesiz" -#: motions/statistics.py:126 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." -msgstr "" +msgstr "χ² istatistiği %(chisq).3f ve bu önergenin dengesiz olduğunu gösteren %(level)s anlamlılık seviyesinde %(evidence)s sağlar." -#: motions/statistics.py:131 +#: motions/statistics.py msgid "probably balanced" -msgstr "" +msgstr "muhtemelen dengeli" -#: motions/statistics.py:132 +#: motions/statistics.py #, python-format msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." -msgstr "" +msgstr "χ² istatistiği %(chisq).3f ve bu önergenin dengesiz olduğunu herhangi bir önemlilikle göstermek için yetersiz." -#: motions/templates/motion_statistics.html:4 -#: motions/templates/motion_statistics.html:5 motions/views.py:165 -msgid "Motion Statistics" -msgstr "" - -#: motions/templates/motion_statistics.html:12 -msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments and during elimination rounds." -msgstr "" - -#: motions/templates/motion_statistics.html:39 -#: motions/templates/public_motions.html:31 +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html msgid "View Info Slide" -msgstr "" +msgstr "Bilgi Slaytını Görüntüle" -#: motions/templates/motion_statistics_bp_elim.html:10 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "results from %(ndebates)s debate" msgid_plural "results from %(ndebates)s debates" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(ndebates)s tartışmasından elde edilen sonuçlar" +msgstr[1] "%(ndebates)s tartışmalarından elde edilen sonuçlar" -#: motions/templates/motion_statistics_bp_elim.html:26 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(side)sdan %(ndebates)s takımdan %(advancing)s ilerledi. (%(percentage)s%%)" +msgstr[1] "%(side)sdan %(ndebates)s takımdan %(advancing)s ilerledi. (%(percentage)s%%)" -#: motions/templates/motion_statistics_bp_elim.html:31 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(side)sdan %(ndebates)s takımdan %(advancing)s elendi. (%(percentage)s%%)" +msgstr[1] "%(side)sdan %(ndebates)s takımdan %(advancing)s elendi. (%(percentage)s%%)" -#: motions/templates/motion_statistics_bp_elim.html:41 +#: motions/templates/motion_statistics_bp_elim.html msgid "advanced" -msgstr "" +msgstr "ilerleyen" -#: motions/templates/motion_statistics_bp_elim.html:43 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'advanced', used when not enough space" msgid "adv." -msgstr "" +msgstr "ile." -#: motions/templates/motion_statistics_bp_elim.html:50 +#: motions/templates/motion_statistics_bp_elim.html msgid "eliminated" -msgstr "" +msgstr "elenen" -#: motions/templates/motion_statistics_bp_elim.html:52 +#: motions/templates/motion_statistics_bp_elim.html msgctxt "abbreviation for 'eliminated', used when not enough space" msgid "elim." -msgstr "" +msgstr "ele." -#: motions/templates/motion_statistics_bp_elim.html:58 +#: motions/templates/motion_statistics_bp_elim.html #, python-format msgid "%(side)s results distribution" -msgstr "" +msgstr "%(side)s sonuç dağılımı" -#: motions/templates/motion_statistics_bp_elim.html:72 -#: motions/templates/motion_statistics_bp_prelim.html:115 +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html msgid "No results for this motion" -msgstr "" +msgstr "Bu önerge için sonuç yok" -#: motions/templates/motion_statistics_bp_prelim.html:13 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Government" -msgstr "" +msgstr "Hükümet" -#: motions/templates/motion_statistics_bp_prelim.html:17 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opposition" -msgstr "" +msgstr "Muhalefet" -#: motions/templates/motion_statistics_bp_prelim.html:21 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per bench" -msgstr "" +msgstr "Kürsü başına ortalama puan" -#: motions/templates/motion_statistics_bp_prelim.html:29 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Opening" -msgstr "" +msgstr "Açılış" -#: motions/templates/motion_statistics_bp_prelim.html:33 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Closing" -msgstr "" +msgstr "Kapanış" -#: motions/templates/motion_statistics_bp_prelim.html:37 +#: motions/templates/motion_statistics_bp_prelim.html msgid "Average Points per half" -msgstr "" +msgstr "Yarım başına ortalama puan" -#: motions/templates/motion_statistics_bp_prelim.html:60 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "average points per position (%(ndebates)s debate)" msgid_plural "average points per position (%(ndebates)s debates)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "pozisyon başına ortalama puan (%(ndebates)s maç)" +msgstr[1] "pozisyon başına ortalama puan (%(ndebates)s maç)" -#: motions/templates/motion_statistics_bp_prelim.html:78 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(side)s için %(count)s sonuç (%(percentage)s%%) %(points)s puandı." +msgstr[1] "%(side)s için %(count)s sonuç (%(percentage)s%%) %(points)s puandı." -#: motions/templates/motion_statistics_bp_prelim.html:101 +#: motions/templates/motion_statistics_bp_prelim.html #, python-format msgid "%(side)s results" -msgstr "" +msgstr "%(side)s sonuçları" -#: motions/templates/motion_statistics_twoteam.html:31 -#: motions/templates/motion_statistics_twoteam.html:38 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s win" msgid_plural "%(count)s %(side)s wins" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)s %(side)s galibiyet" +msgstr[1] "%(count)s %(side)s galibiyet" -#: motions/templates/motion_statistics_twoteam.html:53 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams debated this motion" -msgstr "" +msgstr "Hiçbir takım bu önergeyi tartışmadı" -#: motions/templates/motion_statistics_twoteam.html:91 -#: motions/templates/motion_statistics_twoteam.html:98 +#: motions/templates/motion_statistics_twoteam.html #, python-format msgid "%(count)s %(side)s veto" msgid_plural "%(count)s %(side)s vetoes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)s %(side)s veto" +msgstr[1] "%(count)s %(side)s veto" -#: motions/templates/motion_statistics_twoteam.html:113 +#: motions/templates/motion_statistics_twoteam.html msgid "No teams vetoed this motion" -msgstr "" +msgstr "Hiçbir takım bu önergeyi veto etmedi" -#: motions/templates/motions_edit.html:4 motions/templates/motions_edit.html:10 +#: motions/templates/motions_edit.html msgid "Edit Motion" msgid_plural "Edit Motions" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Önergeyi Düzenle" +msgstr[1] "Önergeleri Düzenle" -#: motions/templates/motions_edit.html:18 +#: motions/templates/motions_edit.html msgid "Display Draw" -msgstr "" +msgstr "Kurayı Göster" + +#: motions/templates/motions_edit.html +msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." +msgstr "Bu, bu tur için mevcut tüm önergelerin yerini alacak. Önergeler veritabanında kalacaktır." + +#: motions/templates/motions_edit.html +msgid "Reuse Motions from Last Round" +msgstr "Geçen Turdaki Önergeleri Yeniden Kullan" + +#: motions/templates/motions_edit.html +msgid "Use Existing Motions" +msgstr "Mevcut Önergeleri Kullan" -#: motions/templates/motions_edit.html:55 +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "Bu turun önergesi şu anda herkese açık gösteriliyor, çünkü yayınlandı. Burada yapılan tüm değişiklikler, kaydedildikleri anda herkes tarafından görülebilir." +msgstr[1] "Bu turun önergeleri şu anda herkese açık gösteriliyor, çünkü yayınlandı. Burada yapılan tüm değişiklikler, kaydedildikleri anda herkes tarafından görülebilir." + +#: motions/templates/motions_edit.html msgid "Save Motion" msgid_plural "Save Motions" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Önergeyi Kaydet" +msgstr[1] "Önergeleri Kaydet" -#: motions/templates/motions_info.html:8 +#: motions/templates/motions_info.html msgid "Info Slide" msgstr "Bilgi Slaydı" -#: motions/templates/public_motions.html:39 +#: motions/templates/public_motions.html msgid "There are no motions available for this round." -msgstr "" +msgstr "Bu tur için herhangi bir önerge bulunmamaktadır." -#: motions/templates/public_motions.html:45 +#: motions/templates/public_motions.html msgid "The motions for this round have not been released." -msgstr "" +msgstr "Bu turun önergeleri henüz yayınlanmadı." -#: motions/templates/public_motions.html:50 +#: motions/templates/public_motions.html msgid "The motion for this round has not been released." -msgstr "" +msgstr "Bu turun önergesi henüz yayınlanmadı." -#: motions/templates/show.html:16 +#: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" msgid_plural "Reveal Info Slides for %(round)s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(round)s için Bilgi Slaytını Göster" +msgstr[1] "%(round)s için Bilgi Slaytlarını Göster" -#: motions/templates/show.html:24 +#: motions/templates/show.html #, python-format msgid "Reveal Motion for %(round)s" msgid_plural "Reveal Motions for %(round)s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(round)s için Önerge Yayınla" +msgstr[1] "%(round)s için Önergeleri Yayınla" -#: motions/templates/show.html:41 +#: motions/templates/show.html msgid "There are no motions for this round entered into Tabbycat." -msgstr "" +msgstr "Bu tur için Tabbycat'e girilmiş herhangi bir önerge yoktur." -#: motions/views.py:87 +#: motions/utils.py +msgid "Not all latest ballots list the same motion, so could not be merged." +msgstr "En son ballotların hepsinde aynı önerge yok, bu nedenle birleştirilemezler." + +#: motions/utils.py +msgid "Motion vetos are inconsistent, so could not be merged." +msgstr "Önerge vetoları tutarsızdır, bu nedenle birleştirilemez." + +#: motions/views.py msgid "The motion has been saved." -msgstr "" +msgstr "Önerge kaydedildi." -#: motions/views.py:89 +#: motions/views.py #, python-format msgid "%(count)d motion has been saved." msgid_plural "%(count)d motions have been saved." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d önerge kaydedildi." +msgstr[1] "%(count)d önerge kaydedildi." -#: motions/views.py:94 +#: motions/views.py #, python-format msgid "%(count)d motion has been deleted." msgid_plural "%(count)d motions have been deleted." -msgstr[0] "" -msgstr[1] "" - -#: motions/views.py:118 -msgid "Released the motion(s)." -msgstr "" +msgstr[0] "%(count)d önerge silindi." +msgstr[1] "%(count)d önerge silindi." -#: motions/views.py:125 -msgid "Unreleased the motion(s)." -msgstr "" +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "Önergeler ilk tura kopyalanamaz." -#: motions/views.py:149 +#: motions/views.py +#, python-format +msgid "Reused the motion from the previous round." +msgid_plural "Reused the %(count)d motions from the previous round." +msgstr[0] "Önceki turdaki önerge yeniden kullandı." +msgstr[1] "Önceki turdaki %(count)d önerge yeniden kullanıldı." + +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "Önerge yayınlandı." +msgstr[1] "Önergeler yayınlandı." + +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "Önerge yayından kaldırıldı." +msgstr[1] "Önergeler yayından kaldırıldı." + +#: motions/views.py msgid "Round Motions" -msgstr "" +msgstr "tur önergeleri" + +#: motions/views.py +msgid "Motion Statistics" +msgstr "Önerge İstatistikleri" diff --git a/tabbycat/notifications/locale/tr/LC_MESSAGES/django.po b/tabbycat/notifications/locale/tr/LC_MESSAGES/django.po index 6b4ffa7e80e..24f5d576996 100644 --- a/tabbycat/notifications/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/notifications/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:33\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" "Last-Translator: philip_tc\n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -15,388 +15,402 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/notifications/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 938\n" -#: notifications/apps.py:7 +#: notifications/apps.py msgid "Notifications" -msgstr "" - -#: notifications/consumers.py:37 -msgid "Failed to send e-mails." -msgstr "" +msgstr "Bildirimler" -#: notifications/consumers.py:40 -msgid "Connection error sending e-mails." -msgstr "" - -#: notifications/forms.py:11 +#: notifications/forms.py msgid "Recipient email address" -msgstr "" +msgstr "Alıcının e-posta adresi" -#: notifications/forms.py:15 +#: notifications/forms.py #, python-format msgid "Test email from %(host)s" -msgstr "" +msgstr "%(host)s adresinden gelen e-postayı test edin" -#: notifications/forms.py:16 +#: notifications/forms.py #, python-format msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" -msgstr "" +msgstr "Tebrikler! Bu mesajı okuyorsanız, %(host)s üzerindeki e-posta sisteminiz çalışıyor!" -#: notifications/forms.py:29 +#: notifications/forms.py msgid "Subject" -msgstr "" +msgstr "Konu" -#: notifications/forms.py:30 +#: notifications/forms.py msgid "Message" msgstr "Mesaj" -#: notifications/models.py:12 notifications/models.py:27 +#: notifications/models.py msgid "email" msgstr "e-posta" -#: notifications/models.py:13 +#: notifications/models.py msgid "SMS" -msgstr "" +msgstr "SMS" -#: notifications/models.py:22 +#: notifications/models.py msgid "recipient" -msgstr "" +msgstr "alıcı" -#: notifications/models.py:24 +#: notifications/models.py msgid "method" -msgstr "" +msgstr "yöntem" -#: notifications/models.py:29 notifications/models.py:130 +#: notifications/models.py msgid "context" -msgstr "" - -#: notifications/models.py:31 -msgid "message" -msgstr "mesaj" +msgstr "Bağlam" -#: notifications/models.py:34 +#: notifications/models.py msgid "notification" -msgstr "" +msgstr "bildirim" -#: notifications/models.py:36 notifications/models.py:75 -#: notifications/models.py:126 +#: notifications/models.py msgid "timestamp" -msgstr "" +msgstr "Zaman damgası" -#: notifications/models.py:39 +#: notifications/models.py msgid "sent message" -msgstr "" +msgstr "mesaj gönderildi" -#: notifications/models.py:40 +#: notifications/models.py msgid "sent messages" -msgstr "" +msgstr "gönderilen mesajlar" -#: notifications/models.py:60 +#: notifications/models.py msgid "team points" -msgstr "" +msgstr "takım puanları" -#: notifications/models.py:61 +#: notifications/models.py msgid "ballot confirmed" -msgstr "" +msgstr "ballot onaylandı" -#: notifications/models.py:62 +#: notifications/models.py msgid "feedback URL" -msgstr "" +msgstr "geri bildirim URL'si" -#: notifications/models.py:63 +#: notifications/models.py msgid "ballot URL" -msgstr "" +msgstr "ballot URL'si" -#: notifications/models.py:64 +#: notifications/models.py msgid "landing page URL" -msgstr "" +msgstr "açılış sayfası URL'si" -#: notifications/models.py:65 +#: notifications/models.py msgid "adjudicator draw released" -msgstr "" +msgstr "jüri kurası yayınlandı" -#: notifications/models.py:66 +#: notifications/models.py msgid "team registration" -msgstr "" +msgstr "takım kaydı" -#: notifications/models.py:67 +#: notifications/models.py msgid "adjudicator registration" -msgstr "" +msgstr "jüri kaydı" -#: notifications/models.py:68 +#: notifications/models.py msgid "motion(s) released" -msgstr "" +msgstr "yayınlanan jüri(ler)" -#: notifications/models.py:69 +#: notifications/models.py msgid "team draw released" -msgstr "" +msgstr "takım kurası yayınlandı" -#: notifications/models.py:73 notifications/models.py:128 +#: notifications/models.py +msgid "custom message" +msgstr "özel mesaj" + +#: notifications/models.py msgid "event" -msgstr "" +msgstr "olay" -#: notifications/models.py:78 +#: notifications/models.py msgid "tournament" msgstr "turnuva" -#: notifications/models.py:80 +#: notifications/models.py msgid "round" msgstr "tur" -#: notifications/models.py:83 +#: notifications/models.py +msgid "subject template" +msgstr "konu şablonu" + +#: notifications/models.py +msgid "body template" +msgstr "vücut şablonu" + +#: notifications/models.py msgid "bulk notification" -msgstr "" +msgstr "toplu bildirim" -#: notifications/models.py:84 +#: notifications/models.py msgid "bulk notifications" -msgstr "" +msgstr "toplu bildirimler" -#: notifications/models.py:110 +#: notifications/models.py msgid "Processed" -msgstr "" +msgstr "Işlenmiş" -#: notifications/models.py:111 +#: notifications/models.py msgid "Dropped" -msgstr "" +msgstr "Düşürülmüş" -#: notifications/models.py:112 +#: notifications/models.py msgid "Deferred" -msgstr "" +msgstr "Ertelenmiş" -#: notifications/models.py:113 +#: notifications/models.py msgid "Delivered" -msgstr "" +msgstr "Teslim Edilmiş" -#: notifications/models.py:114 +#: notifications/models.py msgid "Bounced" -msgstr "" +msgstr "Zıplatılmiş" -#: notifications/models.py:115 +#: notifications/models.py msgid "Opened" -msgstr "" +msgstr "Açılmış" -#: notifications/models.py:116 +#: notifications/models.py msgid "Clicked" -msgstr "" +msgstr "Tıklanmış" -#: notifications/models.py:117 +#: notifications/models.py msgid "Unsubscribed" -msgstr "" +msgstr "Abonelikten Çıkıldı" -#: notifications/models.py:118 +#: notifications/models.py msgid "Marked as spam" -msgstr "" +msgstr "Spam olarak işaretlendi" -#: notifications/models.py:119 +#: notifications/models.py msgid "Unsubscribed from group" -msgstr "" +msgstr "Grup aboneliğinden çıkıldı" -#: notifications/models.py:120 +#: notifications/models.py msgid "Resubscribed to group" -msgstr "" +msgstr "Gruba yeniden abone oldu" -#: notifications/models.py:124 +#: notifications/models.py msgid "email message" -msgstr "" +msgstr "e-posta iletisi" -#: notifications/models.py:133 +#: notifications/models.py msgid "email status" -msgstr "" +msgstr "e-posta durumu" -#: notifications/models.py:134 +#: notifications/models.py msgid "email statuses" -msgstr "" +msgstr "e-posta durumları" -#: notifications/templates/email_participants.html:12 +#: notifications/templates/email_participants.html #, python-format msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." -msgstr "" +msgstr "Bir yanıt adresi belirtmediniz. Bu, katılımcıların soruları varsa mesaja yanıt vermeyebilecekleri anlamına gelir. Lütfen tercihlerinBildirimler bölümünde bir tane ayarlayın." -#: notifications/templates/email_participants.html:20 +#: notifications/templates/email_participants.html #, python-format msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." -msgstr "" +msgstr "SendGrid'de kullanılacak webhook URL'si %(notifications_webhook_url)s şeklindedir. Lütfen SendGrid'te HTTP POST URL'sini bu linke yönlendirin." -#: notifications/templates/email_participants.html:50 +#: notifications/templates/email_participants.html msgid "Send Message(s)" -msgstr "" +msgstr "Mesaj Gönder" -#: notifications/templates/email_statuses.html:10 +#: notifications/templates/email_statuses.html msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." -msgstr "" +msgstr "E-postalar Tabbycat tarafından çeşitli amaçlar için gönderilebilir. E-postalar, belirli tercihler etkinleştirildiğinde (Ballot Makbuzlarını etkinleştirme gibi) veya belirli sayfalarda bulunan eylemler aracılığıyla (örneğin, eşleşmeler için Çekiliş Görüntüleme sayfası; veya takım kaydı için Katılımcılar sayfası) gönderilir. Bu sayfada daha önce gönderilen e-postaların durumu gösterilmektedir." -#: notifications/templates/notifications_nav.html:5 notifications/views.py:47 +#: notifications/templates/notifications_nav.html notifications/views.py msgid "Email Statuses" -msgstr "" +msgstr "e-posta durumları" -#: notifications/templates/notifications_nav.html:11 -#: notifications/templates/test_email.html:24 +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html msgid "Send Test Email" -msgstr "" +msgstr "Test E-postası Gönder" -#: notifications/templates/notifications_nav.html:14 +#: notifications/templates/notifications_nav.html msgid "Send Custom Email" -msgstr "" +msgstr "Özel E-posta Gönder" -#: notifications/templates/test_email.html:5 -#: notifications/templates/test_email.html:18 +#: notifications/templates/test_email.html msgctxt "page title" msgid "Send Test Email" -msgstr "" +msgstr "Test E-postası Gönder" -#: notifications/templates/test_email.html:19 +#: notifications/templates/test_email.html msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." -msgstr "" +msgstr "Katılımcılara e-posta bildirimleri göndermeyi denemeden önce test e-postası göndererek, e-posta sisteminizin ayarların çalışıp çalışmadığını kontrol etmek için bu formu kullanabilirsiniz." + +#: notifications/templates/test_email.html +#, python-format +msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." +msgstr "E-posta şu adresten gönderilecektir: %(default_from_email)s. Bu doğru değilse, Heroku'daki DEFAULT_FROM_EMAILconfig veya ortam değişkenini değiştirin." -#: notifications/templates/test_email.html:25 +#: notifications/templates/test_email.html msgid "Go back to the site home page" -msgstr "" +msgstr "Site giriş sayfasına geri dön" -#: notifications/utils.py:29 +#: notifications/utils.py msgid "the chair" -msgstr "" +msgstr "başkan" -#: notifications/utils.py:30 +#: notifications/utils.py msgid "the only" -msgstr "" +msgstr "tek" -#: notifications/utils.py:31 +#: notifications/utils.py msgid "a panellist" -msgstr "" +msgstr "bir panelist" -#: notifications/utils.py:32 +#: notifications/utils.py msgid "a trainee" -msgstr "" +msgstr "bir acemi" -#: notifications/utils.py:55 +#: notifications/utils.py msgid "TBA" -msgstr "" +msgstr "Duyurulacak" -#: notifications/utils.py:101 +#: notifications/utils.py #, python-format msgid "%(tournament)s %(round)s @ %(room)s" msgstr "" -#: notifications/utils.py:112 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" -msgstr "" +msgstr "
  • %(side)s: %(team)s (%(points)d puanlı %(speaks)s toplam konuşmacı)" -#: notifications/utils.py:115 +#: notifications/utils.py #, python-format msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" -msgstr "" +msgstr "
  • %(side)s: %(team)s (%(points)d - %(speaks)s toplam konuşmacı)" -#: notifications/utils.py:116 +#: notifications/utils.py msgid "Win" -msgstr "" +msgstr "Galibiyet" -#: notifications/utils.py:116 +#: notifications/utils.py msgid "Loss" -msgstr "" +msgstr "Mağlubiyet" -#: notifications/utils.py:128 +#: notifications/utils.py #, python-format msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " -msgstr "" +msgstr "
  • %(pos)s: %(speaker)s (%(score)s)
  • " -#: notifications/utils.py:202 +#: notifications/utils.py #, python-format msgid "
  • %(text)s (%(ref)s)
  • " -msgstr "" +msgstr "
  • %(text)s (%(ref)s)
  • " -#: notifications/utils.py:237 notifications/utils.py:238 +#: notifications/utils.py msgid ", " msgstr ", " -#: notifications/views.py:39 +#: notifications/views.py +#, python-format +msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" +msgstr "E-posta (SMTP) sunucusu sınama e-postasını gönderirken bir hatayla karşılaştı: [SMTP kodu %(code)d] %(error)s" + +#: notifications/views.py +msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." +msgstr "İpucu: Hata SendGrid'deki gönderen kimliği doğrulamasıyla ilgiliyse ve SendGrid'deki adımları zaten tamamladıysanız, doğrulanmış gönderen kimliğinizle eşleşmesi için Heroku'daki DEFAULT_FROM_EMAIL yapılandırma değişkenini güncellemeniz gerekebilir." + +#: notifications/views.py #, python-format msgid "There was an error sending the test email: %(error)s" -msgstr "" +msgstr "Test e-postası gönderilirken bir hata oluştu: %(error)s" -#: notifications/views.py:42 +#: notifications/views.py #, python-format msgid "A test email has been sent to %(recipient)s." -msgstr "" +msgstr "%(recipient)s bir test e-postası gönderildi." -#: notifications/views.py:53 +#: notifications/views.py msgid "N/A" -msgstr "" +msgstr "YOK" -#: notifications/views.py:54 +#: notifications/views.py msgid "Not known" -msgstr "" +msgstr "Bilinmiyor" -#: notifications/views.py:59 +#: notifications/views.py #, python-format msgid "%(status)s @ %(time)s" -msgstr "" +msgstr "%(status)s @ %(time)s" -#: notifications/views.py:102 +#: notifications/views.py #, python-format msgid "@ %s" msgstr "" -#: notifications/views.py:119 +#: notifications/views.py msgid "Timeline" -msgstr "" +msgstr "Zaman çizelgesi" -#: notifications/views.py:129 notifications/views.py:220 +#: notifications/views.py msgid "Participant" +msgstr "Katılımcı" + +#: notifications/views.py +msgid "Email address" msgstr "" -#: notifications/views.py:130 +#: notifications/views.py msgid "Status" msgstr "Durum" -#: notifications/views.py:131 +#: notifications/views.py msgid "Time" msgstr "Zaman" -#: notifications/views.py:170 +#: notifications/views.py msgid "Email Participants" -msgstr "" +msgstr "Katılımcılara E-posta Gönder" -#: notifications/views.py:196 +#: notifications/views.py #, python-format msgid "%(email_count)s email has been queued for sending." msgid_plural "%(email_count)s emails have been queued for sending." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(email_count)s e-posta gönderilmek üzere sıraya alındı." +msgstr[1] "%(email_count)s e-posta gönderilmek üzere sıraya alındı." -#: notifications/views.py:202 +#: notifications/views.py msgid "No emails were sent — likely because no recipients were selected." -msgstr "" +msgstr "Hiçbir e-posta gönderilmedi — büyük olasılıkla hiçbir alıcı seçilmediği için." -#: notifications/views.py:210 +#: notifications/views.py msgid "Send Email" -msgstr "" - -#: notifications/views.py:225 -msgid "Email Address" -msgstr "" +msgstr "E-posta Gönder" -#: notifications/views.py:226 +#: notifications/views.py msgid "Not Provided" -msgstr "" +msgstr "Sağlanmadı" -#: notifications/views.py:239 +#: notifications/views.py msgid "Role" -msgstr "" +msgstr "Rol" -#: notifications/views.py:240 +#: notifications/views.py msgid "Adjudicator" msgstr "Jüri" -#: notifications/views.py:240 +#: notifications/views.py msgid "Speaker" msgstr "Konuşmacı" -#: notifications/views.py:248 +#: notifications/views.py msgid "Speakers" msgstr "Konuşmacılar" -#: notifications/views.py:249 +#: notifications/views.py msgid "Adjudicators" msgstr "Jüriler" diff --git a/tabbycat/options/locale/tr/LC_MESSAGES/django.po b/tabbycat/options/locale/tr/LC_MESSAGES/django.po index 0812ffab92f..e3bda725b51 100644 --- a/tabbycat/options/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:32\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" "Last-Translator: philip_tc\n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -15,1439 +15,1604 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/options/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 940\n" -#: options/apps.py:10 +#: options/apps.py msgid "Tournament Options" -msgstr "" +msgstr "Turnuva Seçenekleri" -#: options/models.py:13 +#: options/models.py msgid "instance" -msgstr "" +msgstr "örnek" -#: options/models.py:18 +#: options/models.py msgid "tournament preference" -msgstr "" +msgstr "turnuva tercihi" -#: options/models.py:19 +#: options/models.py msgid "tournament preferences" -msgstr "" +msgstr "turnuva tercihleri" -#: options/preferences.py:18 options/templates/preferences_index.html:28 +#: options/preferences.py options/templates/preferences_index.html msgid "Score Rules" -msgstr "" +msgstr "Puan Kuralları" -#: options/preferences.py:24 +#: options/preferences.py msgid "Minimum allowed score for substantive speeches" -msgstr "" +msgstr "Ana konuşmalar için izin verilen minimum puan" -#: options/preferences.py:27 +#: options/preferences.py msgid "Minimum speaker score" -msgstr "" +msgstr "Minimum konuşmacı puanı" -#: options/preferences.py:33 +#: options/preferences.py msgid "Maximum speaker score" -msgstr "" +msgstr "Maksimum konuşmacı puanı" -#: options/preferences.py:34 +#: options/preferences.py msgid "Maximum allowed score for substantive speeches" -msgstr "" +msgstr "Ana konuşmalar için izin verilen maksimum puan" -#: options/preferences.py:42 +#: options/preferences.py msgid "Speaker score step" -msgstr "" +msgstr "Konuşmacı puanı adımı" -#: options/preferences.py:43 +#: options/preferences.py msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" -msgstr "" +msgstr "Ana konuşmalar için izin verilen puan adımları, örneğin tam puan (1) veya yarım puan (0,5)" -#: options/preferences.py:51 +#: options/preferences.py msgid "The largest amount by which one team can beat another (0 means no limit)" -msgstr "" +msgstr "Bir takımın diğerini yenebileceği en büyük miktar (0, sınır olmadığı anlamına gelir)" -#: options/preferences.py:52 +#: options/preferences.py msgid "Maximum margin" -msgstr "" +msgstr "Maksimum marj" -#: options/preferences.py:61 +#: options/preferences.py msgid "Minimum allowed score for reply speeches" -msgstr "" +msgstr "Özet konuşmalar için izin verilen minimum puan" -#: options/preferences.py:62 +#: options/preferences.py msgid "Minimum reply score" -msgstr "" +msgstr "Minimum özet puanı" -#: options/preferences.py:70 +#: options/preferences.py msgid "Maximum allowed score for reply speeches" -msgstr "" +msgstr "Özet konuşmaları için izin verilen maksimum puan" -#: options/preferences.py:71 +#: options/preferences.py msgid "Maximum reply score" -msgstr "" +msgstr "Maksimum özet puanı" -#: options/preferences.py:79 +#: options/preferences.py msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" -msgstr "" +msgstr "Özet konuşmaları için izin verilen puan adımları, örneğin tam puan (1) veya yarım puan (0,5)" -#: options/preferences.py:80 +#: options/preferences.py msgid "Reply score step" -msgstr "" +msgstr "Özet puanı adımı" -#: options/preferences.py:88 +#: options/preferences.py msgid "If checked, a team's winning margin includes dissenting adjudicators" -msgstr "" +msgstr "İşaretlenirse, bir takımın kazanma marjı splitleyen jürileri içerir" -#: options/preferences.py:89 +#: options/preferences.py msgid "Margin includes dissenters" -msgstr "" +msgstr "Marj, splitleyenleri içerir" -#: options/preferences.py:96 options/templates/preferences_index.html:33 +#: options/preferences.py +msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" +msgstr "İşaretlenirse, yinelenen konuşmalar da dahil olmak üzere tüm konuşmacı puanları takım puanlarına dahil olur." + +#: options/preferences.py +msgid "Team score includes ghosts" +msgstr "Takım puanına gölgeler dahil." + +#: options/preferences.py options/templates/preferences_index.html msgid "Draw Rules" -msgstr "" +msgstr "Kura Kuralları" -#: options/preferences.py:102 +#: options/preferences.py msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" -msgstr "" +msgstr "Otomatik tahsis, yalnızca bu puandaki veya bu puanın üzerindeki jürileri oylayan panelist olarak alacaktır." -#: options/preferences.py:103 +#: options/preferences.py msgid "Minimum adjudicator score to vote" -msgstr "" +msgstr "Oy kullanmak için gerekli minimum jüri puanı" -#: options/preferences.py:111 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for conflicts" -msgstr "" +msgstr "Conflictler için jüri otomatik tahsisi tarafından ceza uygulandı" -#: options/preferences.py:112 +#: options/preferences.py msgid "Adjudicator conflict penalty" -msgstr "" +msgstr "Jüri conflict cezası" -#: options/preferences.py:120 +#: options/preferences.py msgid "Penalty applied by adjudicator auto-allocator for history" -msgstr "" +msgstr "Geçmiş için jüri otomatik tahsisi tarafından ceza uygulandı" -#: options/preferences.py:121 +#: options/preferences.py msgid "Adjudicator history penalty" -msgstr "" +msgstr "Hakem geçmiş cezası" -#: options/preferences.py:129 +#: options/preferences.py msgid "Penality applied by preformed panel auto-allocator for priority mismatch" -msgstr "" +msgstr "Öncelik uyuşmazlığı için önceden kurulmuş panel otomatik tahsisi tarafından uygulanan ceza" -#: options/preferences.py:130 +#: options/preferences.py msgid "Importance mismatch penalty" -msgstr "" +msgstr "Önem uyuşmazlığı cezası" -#: options/preferences.py:138 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" -msgstr "" +msgstr "Kendi kurumunu gören ekipler için conflict kaçınma yöntemi tarafından uygulanan ceza" -#: options/preferences.py:139 +#: options/preferences.py msgid "Team institution penalty" -msgstr "" +msgstr "Takım kurum cezası" -#: options/preferences.py:147 +#: options/preferences.py msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" -msgstr "" +msgstr "Birbirini iki veya daha fazla kez gören takımlar için conflict kaçınma yöntemi tarafından uygulanan ceza" -#: options/preferences.py:148 +#: options/preferences.py msgid "Team history penalty" -msgstr "" +msgstr "Takım geçmişi cezası" -#: options/preferences.py:156 +#: options/preferences.py msgid "If checked, the draw will try to avoid pairing teams against their own institution" -msgstr "" +msgstr "Eğer işaretlenirse, kura takımları kendi kurumlarıyla eşleştirmeyi önlemeye çalışacaktır." -#: options/preferences.py:157 +#: options/preferences.py msgid "Avoid same institution" -msgstr "" +msgstr "Aynı Kurumu Önle" -#: options/preferences.py:165 +#: options/preferences.py msgid "If checked, the draw will try to avoid having teams see each other twice" -msgstr "" +msgstr "Eğer işaretlenirse, Kura takımların birbirlerini iki kez görmesini önlemeye çalışacaktır." -#: options/preferences.py:166 +#: options/preferences.py msgid "Avoid team history" -msgstr "" +msgstr "Takım Geçmişini Önle" -#: options/preferences.py:174 +#: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" -msgstr "" +msgstr "Tek sayılı aşamalar nasıl çözülür (daha fazla ayrıntı için belgelere bakın)" -#: options/preferences.py:175 +#: options/preferences.py msgid "Odd bracket resolution method" -msgstr "" +msgstr "Tek sayılı aşama çözümleme yöntemi" -#: options/preferences.py:179 +#: options/preferences.py msgid "Pull up from top" -msgstr "" +msgstr "Yukarıdan yukarı çek" -#: options/preferences.py:180 +#: options/preferences.py msgid "Pull up from bottom" -msgstr "" +msgstr "Alttan yukarı çek" -#: options/preferences.py:181 +#: options/preferences.py msgid "Pull up from middle" -msgstr "" +msgstr "Ortadan yukarı çek" -#: options/preferences.py:182 +#: options/preferences.py msgid "Pull up at random" -msgstr "" +msgstr "Rastgele yukarı çek" -#: options/preferences.py:183 +#: options/preferences.py msgid "Intermediate brackets" -msgstr "" +msgstr "Ara aşamalar" -#: options/preferences.py:184 +#: options/preferences.py msgid "Intermediate brackets with bubble-up-bubble-down" -msgstr "" +msgstr "yükselen/alçalan takımlar olan ara aşamalar" -#: options/preferences.py:185 +#: options/preferences.py msgid "Intermediate 1 (pre-allocated sides)" -msgstr "" +msgstr "Ara 1 (önceden tahsis edilmiş taraflar)" -#: options/preferences.py:186 +#: options/preferences.py msgid "Intermediate 2 (pre-allocated sides)" -msgstr "" +msgstr "Ara 2 (önceden tahsis edilmiş taraflar)" -#: options/preferences.py:193 +#: options/preferences.py msgid "How affirmative/negative positions are assigned (see documentation for further details)" -msgstr "" +msgstr "Olumlu/olumsuz pozisyonlar nasıl atanır (daha fazla ayrıntı için belgelere bakın)" -#: options/preferences.py:194 +#: options/preferences.py msgid "Side allocations method" -msgstr "" +msgstr "Taraf tahsisat yöntemi" -#: options/preferences.py:198 options/preferences.py:215 +#: options/preferences.py msgid "Random" -msgstr "" +msgstr "Rastgele" -#: options/preferences.py:199 +#: options/preferences.py msgid "Balance" -msgstr "" +msgstr "Denge" -#: options/preferences.py:200 +#: options/preferences.py msgid "Pre-allocated" -msgstr "" +msgstr "Önceden tahsis edilmiş" -#: options/preferences.py:201 +#: options/preferences.py msgid "Manually enter from ballot" -msgstr "" +msgstr "Ballottan manuel olarak girme" -#: options/preferences.py:208 +#: options/preferences.py msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." -msgstr "" +msgstr "Kaydırma: 1 vs 6, 2 vs 7, .... Katla: 1'e 10, 2'ye karşı 9, .... Komşu: 1'e karşı 2, 3'e karşı 4, ...." -#: options/preferences.py:209 +#: options/preferences.py msgid "Pairing method" -msgstr "" +msgstr "Eşleştirme yöntemi" -#: options/preferences.py:213 +#: options/preferences.py msgid "Slide" -msgstr "" +msgstr "Kaydırma" -#: options/preferences.py:214 +#: options/preferences.py msgid "Fold" -msgstr "" +msgstr "Katla" -#: options/preferences.py:216 +#: options/preferences.py msgid "Adjacent" -msgstr "" +msgstr "Komşu" -#: options/preferences.py:217 +#: options/preferences.py msgid "Fold top, adjacent rest" -msgstr "" +msgstr "Tepeyi katla, kalanı komşu" -#: options/preferences.py:224 +#: options/preferences.py msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" -msgstr "" +msgstr "Takımların birbirleriyle veya kendi kurumlarıyla birden çok kez karşılaşmasını önlemek için kullanılan yöntem (daha fazla ayrıntı için belgelere bakın)" -#: options/preferences.py:226 +#: options/preferences.py msgid "Conflict avoidance method" -msgstr "" +msgstr "Conflict kaçınma yöntemi" -#: options/preferences.py:230 +#: options/preferences.py msgid "Off" -msgstr "" +msgstr "Kapalı" -#: options/preferences.py:231 +#: options/preferences.py msgid "One-up-one-down" -msgstr "" +msgstr "Bir-yukarı-bir-aşağı" -#: options/preferences.py:238 +#: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." -msgstr "" +msgstr "Yukarı çekme kullanıyorsanız, hangi takımların yukarı çekilebileceğini kısıtlayın. Yalnızca iki takımlı formatlar kullanın. İP veya ara aşamalar üzerinde hiçbir etkisi yoktur." -#: options/preferences.py:240 +#: options/preferences.py msgid "Pullup restriction" -msgstr "" +msgstr "Yukarı çekme kısıtlaması" -#: options/preferences.py:244 +#: options/preferences.py msgid "No restriction" -msgstr "" +msgstr "Kısıtlama yok" -#: options/preferences.py:245 +#: options/preferences.py msgid "Choose from teams who have been pulled up the fewest times so far" -msgstr "" +msgstr "Şimdiye kadar en az kez yukarı çekilen takımlar arasından seçim yap" -#: options/preferences.py:246 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by wins so far" -msgstr "" +msgstr "Şimdiye kadarki galibiyetlere göre en düşük kura gücüne sahip takımlar arasından seçim yap" -#: options/preferences.py:247 +#: options/preferences.py msgid "Choose from teams with the lowest draw strength by speaks so far" -msgstr "" +msgstr "Şimdiye kadarki en düşük kura gücüne sahip takımlar arasından seçim yap" -#: options/preferences.py:254 +#: options/preferences.py msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." -msgstr "" +msgstr "İP'de, yukarı çekmelerin nasıl dağıtıldığı. Yalnızca \"Her Yerde\" WUDC uyumludur." -#: options/preferences.py:255 +#: options/preferences.py msgid "BP pullup distribution" -msgstr "" +msgstr "İP yukarı çekim dağıtımı" -#: options/preferences.py:259 +#: options/preferences.py msgid "Anywhere in bracket" -msgstr "" +msgstr "Aşama içinde her yerde" -#: options/preferences.py:260 +#: options/preferences.py msgid "All in the same room (not WUDC-compliant)" -msgstr "" +msgstr "Hepsi aynı odada (WUDC uyumlu değil)" -#: options/preferences.py:267 +#: options/preferences.py msgid "In BP, which position cost function to use (see documentation for details)" -msgstr "" +msgstr "İP'de, hangi pozisyon maliyeti fonksiyonunun kullanılacağı (ayrıntılar için belgelere bakın)" -#: options/preferences.py:268 +#: options/preferences.py msgid "BP position cost" -msgstr "" +msgstr "İP pozisyon maliyeti" -#: options/preferences.py:272 +#: options/preferences.py msgid "Simple" -msgstr "" +msgstr "Basit" -#: options/preferences.py:273 +#: options/preferences.py msgid "Rényi entropy" -msgstr "" +msgstr "Rényi entropisi" -#: options/preferences.py:274 +#: options/preferences.py msgid "Population variance" -msgstr "" +msgstr "Popülasyon varyansı" -#: options/preferences.py:281 +#: options/preferences.py msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." -msgstr "" +msgstr "Rényi düzen α, eğer İP pozisyon maliyeti Rényi entropisi kullanıyorsa. Shannon α = 1, Hartley α = 0, çarpışma α = 2'dir. Ayrıntılar için belgelere bakın." -#: options/preferences.py:284 +#: options/preferences.py msgid "Rényi order (BP)" -msgstr "" +msgstr "Rényi düzeni (İP)" -#: options/preferences.py:293 +#: options/preferences.py msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." -msgstr "" +msgstr "İP pozisyon maliyeti bu üsse yükseltilir; daha yüksek üsler, daha küçük olanlara göre daha az büyük pozisyon dengesizliğini çözmeye yöneliktir. Ayrıntılar için belgelere bakın." -#: options/preferences.py:296 +#: options/preferences.py msgid "BP position cost exponent" -msgstr "" +msgstr "İP pozisyon maliyeti üssü" -#: options/preferences.py:305 +#: options/preferences.py msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." -msgstr "" +msgstr "İP'de, atama problemini çözmek için hangi yöntemin kullanılacağı. Yalnızca ön karıştırmalı Macar WUDC uyumludur." -#: options/preferences.py:307 +#: options/preferences.py msgid "BP assignment method" -msgstr "" +msgstr "İP atama yöntemi" -#: options/preferences.py:311 +#: options/preferences.py msgid "Hungarian algorithm (not WUDC-compliant)" -msgstr "" +msgstr "Macar algoritması (WUDC uyumlu değil)" -#: options/preferences.py:312 +#: options/preferences.py msgid "Hungarian algorithm with preshuffling" -msgstr "" +msgstr "Ön karıştırmalı Macar algoritması" -#: options/preferences.py:319 +#: options/preferences.py msgid "Automatically make all adjudicators available for all rounds" -msgstr "" +msgstr "Tüm jürileri otomatik olarak tüm turlar için kullanılabilir hale getirin" -#: options/preferences.py:320 +#: options/preferences.py msgid "Skip adjudicator check-ins" -msgstr "" +msgstr "Jüri girişlerini atla" -#: options/preferences.py:328 +#: options/preferences.py msgid "Hide panellist positions in the UI (and don't allocate them)" -msgstr "" +msgstr "Kullanıcı arayüzünde panelist konumlarını gizle (ve tahsis etme)" -#: options/preferences.py:329 +#: options/preferences.py msgid "No panellist adjudicators" -msgstr "" +msgstr "Panelist jüri yok" -#: options/preferences.py:337 +#: options/preferences.py msgid "Hide trainee positions in the UI (and don't allocate them)" -msgstr "" +msgstr "Kullanıcı arayüzünde acemi pozisyonlarını gizle (ve tahsis etme)" -#: options/preferences.py:338 +#: options/preferences.py msgid "No trainee adjudicators" -msgstr "" +msgstr "Acemi hakem yok" -#: options/preferences.py:345 options/templates/preferences_index.html:48 +#: options/preferences.py options/templates/preferences_index.html msgid "Feedback" -msgstr "Geri Bildirim" +msgstr "Geri bildirim" -#: options/preferences.py:351 +#: options/preferences.py msgid "Minimum possible adjudicator score that can be given" -msgstr "" +msgstr "Verilebilecek minimum olası jüri puanı" -#: options/preferences.py:352 +#: options/preferences.py msgid "Minimum adjudicator score" -msgstr "" +msgstr "Minimum jüri puanı" -#: options/preferences.py:360 +#: options/preferences.py msgid "Maximum possible adjudicator score that can be given" -msgstr "" +msgstr "Verilebilecek maksimum jüri puanı" -#: options/preferences.py:361 +#: options/preferences.py msgid "Maximum adjudicator score" -msgstr "" +msgstr "Maksimum jüri puanı" -#: options/preferences.py:369 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" -msgstr "" +msgstr "Jüriler için geri bildirim formlarındaki mevcut seçenekleri (hem çevrimiçi hem de basılı) ve geri bildirim ilerlemesini bildirmek için kullanılır" -#: options/preferences.py:370 +#: options/preferences.py msgid "Allow and expect feedback to be submitted by" -msgstr "" +msgstr "Geri bildirimin şu kişi tarafından gönderilmesine izin ver ve gönderilmesini bekle" -#: options/preferences.py:374 +#: options/preferences.py msgid "Chairs on panellists and trainees" -msgstr "" +msgstr "Başkanlar panelist ve acemilerle" -#: options/preferences.py:375 +#: options/preferences.py msgid "Panellists on chairs, chairs on panellists and trainees" -msgstr "" +msgstr "Panelistler başkanlara, başkanlar panelistler ve kursiyerlere" + +#: options/preferences.py +msgid "Panellists and trainees on chairs, vice-versa" +msgstr "Panelist ve acemiler başkanlara ve tam tersi" -#: options/preferences.py:376 +#: options/preferences.py msgid "All adjudicators (including trainees) on each other" -msgstr "" +msgstr "Tüm jürilşer (acemiler dahil) birbirlerine" -#: options/preferences.py:383 +#: options/preferences.py msgid "Expect feedback to be submitted by teams on" -msgstr "" +msgstr "Takımlar tarafından geri bildirim gönderilmesi beklenenler:" -#: options/preferences.py:384 +#: options/preferences.py msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" -msgstr "" +msgstr "Takımlar için geri bildirim formlarındaki mevcut seçenekleri (hem çevrimiçi hem de basılı) ve geri bildirim ilerlemesini bildirmek için kullanılır; Bu seçenek, UADC vb. tarafından kullanılır." -#: options/preferences.py:388 +#: options/preferences.py msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" -msgstr "" +msgstr "Yalnızca karar sebebini açıklayan jüriler (oylayan panelistlerine izin verilir, karar sebebini açıklayanı seçme istemi bulunur)" -#: options/preferences.py:389 +#: options/preferences.py msgid "All adjudicators in their panels (including trainees)" -msgstr "" +msgstr "Panellerindeki tüm jüriler (acemiler dahil)" -#: options/preferences.py:396 +#: options/preferences.py msgid "Show unexpected feedback submissions in participants pages" -msgstr "" +msgstr "Katılımcıların sayfalarında beklenmeyen geri bildirim gönderimlerini göster" -#: options/preferences.py:397 +#: options/preferences.py msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" -msgstr "" +msgstr "Beklenmeyen geri bildirimleri soru işareti simgesiyle görüntüler; yalnızca herkese açık katılımcılar ve geri bildirim ilerlemesinin her ikisi de etkinleştirilmişse geçerlidir" -#: options/preferences.py:405 +#: options/preferences.py msgid "Show if an adjudicator is a trainee (unaccredited)" -msgstr "" +msgstr "Bir jürinin acemi olup olmadığını göster (akredite edilmemiş)" -#: options/preferences.py:406 +#: options/preferences.py msgid "Show unaccredited" -msgstr "" +msgstr "Akredite edilmemiş göster" -#: options/preferences.py:414 +#: options/preferences.py msgid "Any explanatory text needed to introduce the feedback form" -msgstr "" +msgstr "Geri bildirim formunu tanıtmak için gereken açıklayıcı metinler" -#: options/preferences.py:415 +#: options/preferences.py msgid "Feedback introduction/explanation" -msgstr "" +msgstr "Geri bildirim tanıtımı/açıklaması" -#: options/preferences.py:423 options/templates/preferences_index.html:38 +#: options/preferences.py options/templates/preferences_index.html msgid "Debate Rules" -msgstr "" +msgstr "Maç Kuralları" -#: options/preferences.py:429 +#: options/preferences.py msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" -msgstr "" +msgstr "İki takımlı format (örneğin Australs, WSDC) veya İngiliz Parlamentosu" -#: options/preferences.py:430 +#: options/preferences.py msgid "Teams in debate" -msgstr "" +msgstr "Maçtaki Takımlar" -#: options/preferences.py:434 +#: options/preferences.py msgid "Two-team format" -msgstr "" +msgstr "İki takımlı format" -#: options/preferences.py:435 +#: options/preferences.py msgid "British Parliamentary (four teams)" -msgstr "" +msgstr "İngiliz Parlamentosu (dört takım)" -#: options/preferences.py:442 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." -msgstr "" +msgstr "Panellerin ön turlarda bir tartışma için her biri veya toplu ballot sunup sunmadığı. Not: İP maç başına bir tane kullanmalıdır." -#: options/preferences.py:443 +#: options/preferences.py msgid "Ballots per debate, preliminary rounds" -msgstr "" +msgstr "Maç başına ballotlar, ön turlar" -#: options/preferences.py:447 options/preferences.py:460 +#: options/preferences.py msgid "One ballot per voting adjudicator" -msgstr "" +msgstr "Oylayan jüri başına bir ballot" -#: options/preferences.py:448 options/preferences.py:461 +#: options/preferences.py msgid "Consensus ballot (one ballot per debate)" -msgstr "" +msgstr "Konsensüs oylaması (maç başına bir ballot)" -#: options/preferences.py:455 +#: options/preferences.py msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." -msgstr "" +msgstr "Panellerin ön turlarda bir tartışma için her biri veya toplu ballot sunup sunmadığı. Not: İP maç başına bir tane kullanmalıdır." -#: options/preferences.py:456 +#: options/preferences.py msgid "Ballots per debate, elimination rounds" -msgstr "" +msgstr "Tartışma başına ballot, eleme turları" + +#: options/preferences.py +msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." +msgstr "Jüri(ler)in ballotda kazanan takımı seçmesi gerekip gerekmediği ve nasıl ele alınması gerektiği. Not: İP'de desteklenmez." + +#: options/preferences.py +msgid "Winner Declaration in ballot(s)" +msgstr "Ballotlarda Kazanan Beyanı" + +#: options/preferences.py +msgid "Do not require separate winner selection" +msgstr "Ayrı bir kazanan seçimi gerektirme" + +#: options/preferences.py +msgid "Require separate winner selection as a check on correct scores" +msgstr "Doğru puanları kontrol etmek için ayrı bir kazanan seçimi zorunlu kıl" + +#: options/preferences.py +msgid "Require winner selection to break tied-point debates" +msgstr "Bağlantılı nokta tartışmalarını kırmak için kazanan seçimini zorunlu kıl" -#: options/preferences.py:468 +#: options/preferences.py +msgid "Require winner selection, overriding scores" +msgstr "Kazanan seçimini zorunlu, puanları geçersiz kıl" + +#: options/preferences.py +msgid "When ballots should ask for speaker scores." +msgstr "Ballotlar ne zaman konuşmacı puanı istemeli." + +#: options/preferences.py +msgid "Require speaker scores" +msgstr "Konuşmacı puanları gerektir" + +#: options/preferences.py +msgid "Always require speaker scores" +msgstr "Her zaman konuşmacı puanları gerektirir" + +#: options/preferences.py +msgid "Only require speaker scores in preliminary rounds" +msgstr "Sadece ön turlarda konuşmacı puanları gerektirir" + +#: options/preferences.py +msgid "Never require speaker scores" +msgstr "Asla konuşmacı puanları gerektirme" + +#: options/preferences.py msgid "How many substantive speakers on a team" -msgstr "" +msgstr "Bir takımda kaç ana konuşmacı var" -#: options/preferences.py:469 +#: options/preferences.py msgid "Substantive speakers" -msgstr "" +msgstr "Ana konuşmacılar" -#: options/preferences.py:477 +#: options/preferences.py msgid "What to call the teams" -msgstr "" +msgstr "Takımların adları" -#: options/preferences.py:478 +#: options/preferences.py msgid "Side names" -msgstr "" +msgstr "Yan adlar" -#: options/preferences.py:487 +#: options/preferences.py msgid "Whether this style features scored reply speeches" -msgstr "" +msgstr "Bu stilin puanlanmış özetlere sahip olup olmadığı" -#: options/preferences.py:488 +#: options/preferences.py msgid "Reply scores" -msgstr "" +msgstr "Özet puanları" -#: options/preferences.py:496 -msgid "Enables the motion veto field on ballots, to track veto statistics" -msgstr "" +#: options/preferences.py +msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" +msgstr "Özetlerin tartışmada ana konuşma yapan konuşmacılarla sınırlandırılıp sınırlandırılmayacağı" -#: options/preferences.py:497 -msgid "Motion vetoes" -msgstr "" +#: options/preferences.py +msgid "Require reply speaker to have given a substantive speech" +msgstr "Özet konuşmacının ana konuşma yapmasını zorunlu kıl" -#: options/preferences.py:504 options/templates/preferences_index.html:43 +#: options/preferences.py options/templates/preferences_index.html msgid "Standings" -msgstr "" +msgstr "Sıralamalar" -#: options/preferences.py:510 +#: options/preferences.py msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" -msgstr "" +msgstr "Bir konuşmacının kaçırabileceği ve hala konuşmacı tabında olabileceği ana konuşma sayısı (-1, sınır olmadığı anlamına gelir)" -#: options/preferences.py:511 +#: options/preferences.py msgid "Speeches missable for standings eligibility" -msgstr "" +msgstr "Sıralama için kaçırılabilecek maksimum konuşma" -#: options/preferences.py:519 +#: options/preferences.py msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" -msgstr "" +msgstr "Bir konuşmacının kaçırabileceği ve hala konuşmacı tabında olabileceği özet sayısı (-1, sınır olmadığı anlamına gelir)" -#: options/preferences.py:520 +#: options/preferences.py msgid "Replies missable for standings eligibility" -msgstr "" +msgstr "Sıralama için kaçırılabilecek maksimum özet" -#: options/preferences.py:528 +#: options/preferences.py msgid "Metrics to use to rank teams (see documentation for further details)" -msgstr "" +msgstr "Takımları sıralamak için kullanılacak metrikler (daha fazla ayrıntı için belgelere bakın)" -#: options/preferences.py:529 +#: options/preferences.py msgid "Team standings precedence" -msgstr "" +msgstr "Takım sıralaması önceliği" -#: options/preferences.py:545 options/preferences.py:580 +#: options/preferences.py #, python-format msgid "The following metrics can't be listed twice: %(duplicates)s" -msgstr "" +msgstr "Aşağıdaki metrikler iki kez listelenemez: %(duplicates)s" -#: options/preferences.py:551 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank teams" -msgstr "" +msgstr "Hesaplanacak ancak takımları sıralamak için kullanılmayacak metrikler" -#: options/preferences.py:552 +#: options/preferences.py msgid "Team standings extra metrics" -msgstr "" +msgstr "Takım sıralaması ekstra metrikler" -#: options/preferences.py:563 +#: options/preferences.py msgid "Metrics to use to rank speakers (see documentation for further details)" -msgstr "" +msgstr "Konuşmacıları sıralamak için kullanılacak metrikler (daha fazla ayrıntı için belgelere bakın)" -#: options/preferences.py:564 +#: options/preferences.py msgid "Speaker standings precedence" -msgstr "" +msgstr "Konuşmacı puan durumu önceliği" -#: options/preferences.py:586 +#: options/preferences.py msgid "Metrics to calculate, but not used to rank speakers" -msgstr "" +msgstr "Hesaplanacak ancak konuşmacıları sıralamak için kullanılmayacak metrikler" -#: options/preferences.py:587 +#: options/preferences.py msgid "Speaker standings extra metrics" -msgstr "" +msgstr "Konuşmacı sıralaması ekstra metrikler" -#: options/preferences.py:597 options/templates/preferences_index.html:59 +#: options/preferences.py options/templates/preferences_index.html msgid "Tab Release" -msgstr "" +msgstr "Tab Yayınlama" -#: options/preferences.py:603 +#: options/preferences.py msgid "Enables public display of the team tab. Intended for use after the tournament." -msgstr "" +msgstr "Takım tabının herkese açık görüntülenmesini sağlar. Turnuvadan sonra kullanılmak üzere tasarlanmıştır." -#: options/preferences.py:604 +#: options/preferences.py msgid "Release team tab to public" -msgstr "" +msgstr "Takım tabını herkese açık olarak yayınla" -#: options/preferences.py:612 +#: options/preferences.py msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." -msgstr "" +msgstr "Herkese açık tabda yalnızca en iyi X takımın puanını göster (tüm takımları göstermek için 0 olarak ayarlayın)." -#: options/preferences.py:613 +#: options/preferences.py msgid "Top teams cutoff" -msgstr "" +msgstr "En iyi x takım göster" -#: options/preferences.py:621 +#: options/preferences.py msgid "Enables public display of the speaker tab. Intended for use after the tournament." -msgstr "" +msgstr "Konuşmacı tabının herkese açık olarak görüntülenmesini sağlar. Turnuvadan sonra kullanılmak üzere tasarlanmıştır." -#: options/preferences.py:622 +#: options/preferences.py msgid "Release speaker tab to public" -msgstr "" +msgstr "Konuşmacı tabını herkese açık olarak yayınla" -#: options/preferences.py:630 +#: options/preferences.py msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." -msgstr "" +msgstr "Ortak tabda yalnızca en iyi X konuşmacının puanlarını göster (tüm konuşmacıları göstermek için 0 olarak ayarlayın)." -#: options/preferences.py:631 +#: options/preferences.py msgid "Top speakers cutoff" -msgstr "" +msgstr "En iyi x konuşmacı göster" -#: options/preferences.py:639 +#: options/preferences.py msgid "Enables public display of the replies tab. Intended for use after the tournament." -msgstr "" +msgstr "Özet tabının herkese açık olarak görüntülenmesini sağlar. Turnuvadan sonra kullanılmak üzere tasarlanmıştır." -#: options/preferences.py:640 +#: options/preferences.py msgid "Release replies tab to public" -msgstr "" +msgstr "Özetleri herkese açık olarak yayınla" -#: options/preferences.py:648 +#: options/preferences.py msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." -msgstr "" +msgstr "Genel sekmede yalnızca en iyi X özet konuşmacının puanını göster (hepsinş göstermek için 0 olarak ayarlayın)." -#: options/preferences.py:649 +#: options/preferences.py msgid "Top replies cutoff" -msgstr "" +msgstr "En iyi x özet konuşmacı göster" -#: options/preferences.py:675 +#: options/preferences.py msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." -msgstr "" +msgstr "Tüm önergelerin ve galibiyet/mağlubiyet/seçim bilgilerinin herkese açık olarak görüntülenmesini sağlar. Bu yayınlanmayanlar dahil tüm önergeleri içerir. Turnuvadan sonra kullanılmak üzere tasarlanmıştır." -#: options/preferences.py:678 +#: options/preferences.py msgid "Release motions tab to public" -msgstr "" +msgstr "Önergeleri herkese açık olarak yayınla" -#: options/preferences.py:686 +#: options/preferences.py msgid "Enables public display of the feedback scores of all adjudicators" -msgstr "" +msgstr "Tüm jürilerin geri bildirim puanlarının herkese açık olarak görüntülenmesini sağlar" -#: options/preferences.py:687 +#: options/preferences.py msgid "Release adjudicator tab to public" -msgstr "" +msgstr "Jüri tabını herkese açık olarak yayınla" -#: options/preferences.py:695 +#: options/preferences.py msgid "What (if released) the adjudicator tab shows" -msgstr "" +msgstr "Jüri tabının (serbest bırakılırsa) ne gösterdiği" -#: options/preferences.py:696 +#: options/preferences.py msgid "Adjudicator tab displays" -msgstr "" +msgstr "Jüri tabının gösterdikleri" -#: options/preferences.py:700 +#: options/preferences.py msgid "Only shows base score" -msgstr "" +msgstr "Sadece temel puanı gösterir" -#: options/preferences.py:701 +#: options/preferences.py msgid "Only shows final score" -msgstr "" +msgstr "Sadece final puanını gösterir" -#: options/preferences.py:702 +#: options/preferences.py msgid "Shows base, final, and per-round scores" -msgstr "" +msgstr "Taban, final ve tur başına puanları gösterir" -#: options/preferences.py:709 +#: options/preferences.py msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." -msgstr "" +msgstr "Her jürinin ballotunun herkese açık olarak gösterilmesini sağlar. Turnuvadan sonra kullanılmak üzere tasarlanmıştır." -#: options/preferences.py:710 +#: options/preferences.py msgid "Release ballots to public" -msgstr "" +msgstr "Ballotları herkese yayınla" -#: options/preferences.py:718 +#: options/preferences.py msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" -msgstr "" +msgstr "Bu, tüm turlar için tüm sonuçları yayınlar (sessiz ve break turları dahil). Bunu sadece turnuva bittikten sonra yapın!" -#: options/preferences.py:719 +#: options/preferences.py msgid "Release all round results to public" -msgstr "" +msgstr "Tüm tur sonuçları herkese açık yayınla" + +#: options/preferences.py +msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." +msgstr "Onaylanmış ballotların özel URL'ler aracılığıyla görüntülenmesini sağlar. Turnuvadan sonra kullanılmak üzere tasarlanmıştır." -#: options/preferences.py:726 options/templates/preferences_index.html:64 +#: options/preferences.py +msgid "Release ballots through private URLs" +msgstr "Özel URL'ler aracılığıyla ballotları yayınla" + +#: options/preferences.py options/templates/preferences_index.html msgid "Data Entry" -msgstr "" +msgstr "Veri Girişi" -#: options/preferences.py:732 +#: options/preferences.py msgid "Whether adjudicators can submit ballots themselves, and how they do so" -msgstr "" +msgstr "Jürilerin ballotlarını kendilerinin gönderip gönderemeyecekleri ve nasıl yapabilecekleri" -#: options/preferences.py:733 +#: options/preferences.py msgid "Ballot submissions from adjudicators" -msgstr "" +msgstr "Jüri ballot teslimi" -#: options/preferences.py:737 options/preferences.py:751 +#: options/preferences.py msgid "Disabled (tab staff only)" -msgstr "" +msgstr "Kapalı (yalnızca tab personeli kullanabilir)" -#: options/preferences.py:738 options/preferences.py:752 +#: options/preferences.py msgid "Use private URLs" -msgstr "" +msgstr "Özel URL'ler kullan" -#: options/preferences.py:739 options/preferences.py:753 +#: options/preferences.py msgid "Use publicly accessible form" -msgstr "" +msgstr "Genel erişime açık formu kullan" -#: options/preferences.py:746 +#: options/preferences.py msgid "Whether participants can submit feedback themselves, and how they do so" -msgstr "" +msgstr "Katılımcıların kendilerinin geri bildirim gönderip gönderemeyecekleri ve nasıl yapabilecekleri" -#: options/preferences.py:747 +#: options/preferences.py msgid "Feedback submissions from participants" -msgstr "" +msgstr "Katılımcı geri bildirim gönderimi" -#: options/preferences.py:760 +#: options/preferences.py msgid "If checked, users must enter a password when submitting public feedback and ballots" -msgstr "" +msgstr "İşaretliyse, kullanıcılar herkese açık geri bildirim ve ballot gönderirken bir parola girmelidir" -#: options/preferences.py:761 +#: options/preferences.py msgid "Require password for submission" -msgstr "" +msgstr "Gönderim için parola iste" -#: options/preferences.py:769 +#: options/preferences.py msgid "Value of the password required for public submissions, if passwords are required" -msgstr "" +msgstr "Parolalar gerekliyse, herkese açık gönderimler için gereken parola" -#: options/preferences.py:770 +#: options/preferences.py msgid "Password for public submission" -msgstr "" +msgstr "Herkese açık gönderim için parola" -#: options/preferences.py:778 +#: options/preferences.py msgid "Bypasses double checking by setting ballots to be automatically confirmed" -msgstr "" +msgstr "Ballotları otomatik olarak onaylanacak şekilde ayarlayarak çift kontrolü atlar" -#: options/preferences.py:779 +#: options/preferences.py msgid "Bypass double checking" -msgstr "" +msgstr "Çift kontrolü atla" -#: options/preferences.py:787 +#: options/preferences.py msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." -msgstr "" +msgstr "Taslak ballotların puanlarının onay aşamasının bir parçası olarak yeniden girilmesini gerektirir (daha sıkı kontrol oluşturmak için). Yalnızca İP biçimleri için geçerlidir." -#: options/preferences.py:788 +#: options/preferences.py msgid "Enforce blind confirmations" -msgstr "" - -#: options/preferences.py:796 -msgid "If checked, ballots require a motion to be selected from a list of options. " -msgstr "" +msgstr "Kör onay uygula" -#: options/preferences.py:797 -msgid "Enable motion selection" -msgstr "" - -#: options/preferences.py:805 +#: options/preferences.py msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." -msgstr "" +msgstr "Asistanların, eşleşmeleri ve hareketleri herkese açıklanmadan önce ortaya çıkarabilecek sayfalara erişip erişemeyeceği (bu sayfalar, kura/önergeleri yayınlama ve ballotları yazdırmak için kullanılır)." -#: options/preferences.py:808 +#: options/preferences.py msgid "Assistant user access" -msgstr "" +msgstr "Yardımcı kullanıcı erişimi" -#: options/preferences.py:813 +#: options/preferences.py msgid "All areas (results entry, draw display, and motions)" -msgstr "" +msgstr "Tüm alanlar (sonuç girişi, kura ekranı ve önergeler)" -#: options/preferences.py:814 +#: options/preferences.py msgid "Just results entry and draw display" -msgstr "" +msgstr "Sadece sonuç girişi ve kura ekranı" -#: options/preferences.py:815 +#: options/preferences.py msgid "Only results entry" -msgstr "" +msgstr "Yalnızca sonuç girişi" -#: options/preferences.py:821 +#: options/preferences.py msgid "Whether participants can check themselves in/out through their private URL." -msgstr "" +msgstr "Katılımcıların özel URL'leri üzerinden kendilerini giriş çıkış yapıp yapamayacakları." -#: options/preferences.py:822 +#: options/preferences.py msgid "Participant self-checkin" -msgstr "" +msgstr "Katılımcı kendi kendine giriş" -#: options/preferences.py:830 +#: options/preferences.py msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" -msgstr "" +msgstr "Bir konuşmacının veya jürinin giriş vaktinin sona ermesinden önceki süre (saat cinsinden)" -#: options/preferences.py:833 +#: options/preferences.py msgid "Check-In Window (People)" -msgstr "" +msgstr "Giriş aralığı (Kişi)" -#: options/preferences.py:839 +#: options/preferences.py msgid "The amount of time (in hours) before a room's check-in event expires" -msgstr "" +msgstr "Bir odanın giriş vaktinin sona ermesinden önceki süre (saat cinsinden)" -#: options/preferences.py:842 +#: options/preferences.py msgid "Check-In Window (Rooms)" -msgstr "" +msgstr "Giriş aralığı (Oda)" -#: options/preferences.py:848 +#: options/preferences.py msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" -msgstr "" +msgstr "Yazdırılan sonuç kağıtlarının kötü el yazısını denetlemeye yardımcı olmak için 'basamakları işaretle' istemini gösterip göstermemesi" -#: options/preferences.py:849 +#: options/preferences.py msgid "Ballot Digit Checks" -msgstr "" - -#: options/preferences.py:857 -msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" -msgstr "" - -#: options/preferences.py:858 -msgid "Ballot Hide Motions" -msgstr "" +msgstr "Ballot basamak kontrolü" -#: options/preferences.py:866 +#: options/preferences.py msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." -msgstr "" +msgstr "Önceden basılmış ballotlara basılmış sonuç kağıtlarının iade edileceği yer. Gizlemek için 'TBA' olarak ayarlayın." -#: options/preferences.py:867 +#: options/preferences.py msgid "Score return location" -msgstr "" +msgstr "Puan iade yeri" -#: options/preferences.py:875 +#: options/preferences.py msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." -msgstr "" +msgstr "Önceden basılmış geri bildirim formlarına yazdırılmış, geri bildirimin iade edileceği yer. Gizlemek için 'TBA' olarak ayarlayın." -#: options/preferences.py:876 +#: options/preferences.py msgid "Feedback return location" -msgstr "" +msgstr "Geri bildirim iade yeri" + +#: options/preferences.py +msgid "Lets debates have their status as postponed, as to not block draw generation." +msgstr "Tartışmaların, kura üretimini engellememek için ertelenmiş olarak gözükmesine izin verir." + +#: options/preferences.py +msgid "Enable postponements" +msgstr "Ertelemeleri etkinleştir" -#: options/preferences.py:883 options/templates/preferences_index.html:69 +#: options/preferences.py +msgid "Have each voting adjudicator submit a separate ballot." +msgstr "Her oylayan jürinin ayrı bir ballot sunup sunmadığı." + +#: options/preferences.py +msgid "Individual voting ballots" +msgstr "Bireysel oylama ballotları" + +#: options/preferences.py options/templates/preferences_index.html msgid "Public Features" -msgstr "" +msgstr "Herkese Açık Özellikler" -#: options/preferences.py:889 +#: options/preferences.py msgid "Enables the public page listing all participants in the tournament" -msgstr "" +msgstr "Turnuvadaki tüm katılımcıları listeleyen herkese açık sayfayı etkinleştirir" -#: options/preferences.py:890 +#: options/preferences.py msgid "Enable public view of participants list" -msgstr "" +msgstr "Katılımcı listesini herkese göster" -#: options/preferences.py:898 +#: options/preferences.py msgid "Enables the public page listing all institutions in the tournament" -msgstr "" +msgstr "Turnuvadaki tüm kurumları listeleyen herkese açık sayfayı etkinleştirir" -#: options/preferences.py:899 +#: options/preferences.py msgid "Enable public view of institutions list" -msgstr "" +msgstr "Kurumlar listesini herkese göster" -#: options/preferences.py:907 +#: options/preferences.py msgid "Enables the public page listing diversity statistics" -msgstr "" +msgstr "Çeşitlilik istatistiklerini listeleyen herkese açık sayfayı etkinleştirir" -#: options/preferences.py:908 +#: options/preferences.py msgid "Enable public view of diversity info" -msgstr "" +msgstr "Çeşitlilik bilgilerini herkese göster" -#: options/preferences.py:916 +#: options/preferences.py msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." -msgstr "" +msgstr "Bireyler, kurumlar ve takımlar için iade durumlarını gösteren herkese açık sayfayı etkinleştirir. Bu sayfanın çok büyük turnuvalarda yavaş çalışabileceğini unutmayın." -#: options/preferences.py:919 +#: options/preferences.py msgid "Enable public view of the checkin statuses" -msgstr "" +msgstr "İade durumlarını herkese göster" -#: options/preferences.py:927 +#: options/preferences.py msgid "If the participants list is enabled, displays break category eligibility on that page" -msgstr "" +msgstr "Katılımcı listesi etkinse, bu sayfada break kategorisi uygunluğu görüntülenir" -#: options/preferences.py:928 +#: options/preferences.py msgid "Show break categories on participants page" -msgstr "" +msgstr "Katılımcılar sayfasında breaka kategorilerini göster" -#: options/preferences.py:936 +#: options/preferences.py msgid "Enables the public page listing pre-allocated sides" -msgstr "" +msgstr "Önceden ayrılmış tarafları listeleyen herkese açık sayfayı etkinleştirir" -#: options/preferences.py:937 +#: options/preferences.py msgid "Show pre-allocated sides to public" -msgstr "" +msgstr "Önceden ayrılmış tarafları herkese göster" -#: options/preferences.py:945 +#: options/preferences.py msgid "Enables the public page showing released draws" -msgstr "" +msgstr "Yayınlanan kuraları gösteren herkese açık sayfayı etkinleştirir" -#: options/preferences.py:946 +#: options/preferences.py msgid "Enable public view of draw" -msgstr "" +msgstr "Kurayı herkese göster" -#: options/preferences.py:950 +#: options/preferences.py msgid "Disabled" -msgstr "" +msgstr "Kapalı" -#: options/preferences.py:951 +#: options/preferences.py msgid "Show a single page for the current round's draw" -msgstr "" +msgstr "Geçerli turun kurası için tek bir sayfa göster" -#: options/preferences.py:952 +#: options/preferences.py msgid "Show individual pages for all released draws" -msgstr "" +msgstr "Yayınlanan tüm kuralar için tek tek sayfa göster" -#: options/preferences.py:959 +#: options/preferences.py msgid "Enables the public page showing results of non-silent rounds" -msgstr "" +msgstr "Sessiz olmayan turların sonuçlarını gösteren herkese açık sayfayı etkinleştirir" -#: options/preferences.py:960 +#: options/preferences.py msgid "Enable public view of results" -msgstr "" +msgstr "Sonuçları herkese göster" -#: options/preferences.py:968 +#: options/preferences.py msgid "Enables the public page showing motions that have been explicitly released to the public" -msgstr "" +msgstr "Herkese yayınlanan önergeleri gösteren genel sayfayı etkinleştirir" -#: options/preferences.py:969 +#: options/preferences.py msgid "Enable public view of motions" -msgstr "" +msgstr "Önergeleri herkese göster" -#: options/preferences.py:977 +#: options/preferences.py msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" -msgstr "" +msgstr "Takım sıralamalarını gösteren (yalnızca galibiyetleri gösterir) herkese açık sayfayı etkinleştirir (konuşmacı puanlarını veya sıralamasını değil)" -#: options/preferences.py:978 +#: options/preferences.py msgid "Enable public view of team standings" -msgstr "" +msgstr "Takım sıralamalarını herkese göster" -#: options/preferences.py:986 +#: options/preferences.py msgid "Enables the public page for each team and adjudicator showing their records" -msgstr "" +msgstr "Her takım ve jürinin kayıtlarını gösteren herkese açık sayfayı etkinleştirir" -#: options/preferences.py:987 +#: options/preferences.py msgid "Enable public record pages" -msgstr "" +msgstr "Genel kayıt sayfaları herkese göster" -#: options/preferences.py:995 +#: options/preferences.py msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." -msgstr "" +msgstr "Takım breaklerini gösteren herkese açık sayfayı etkinleştirir. Break duyurusundan sonra kullanılmak üzere tasarlanmıştır." -#: options/preferences.py:996 +#: options/preferences.py msgid "Release team breaks to public" -msgstr "" +msgstr "Takım breaklerini herkese göster" -#: options/preferences.py:1004 +#: options/preferences.py msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." -msgstr "" +msgstr "Break olan jürileri gösteren herkese açık sayfayı etkinleştirir. Break duyurusundan sonra kullanılmak üzere tasarlanmıştır." -#: options/preferences.py:1005 +#: options/preferences.py msgid "Release adjudicators break to public" -msgstr "" +msgstr "Jüri breakini herkese göster" -#: options/preferences.py:1013 +#: options/preferences.py msgid "Enables the public page detailing who has unsubmitted feedback" -msgstr "" +msgstr "Kimin gönderilmemiş geri bildirimi olduğunu gösteren herkese açık sayfayı etkinleştirir" -#: options/preferences.py:1014 +#: options/preferences.py msgid "Enable public view of unsubmitted feedback" -msgstr "" +msgstr "Gönderilmemiş geri bildirimleri herkese göster" -#: options/preferences.py:1022 +#: options/preferences.py msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." -msgstr "" +msgstr "Turnuva ana sayfasında görüntülenecek turnuva personelinin listesi. Bu bilgileri göstermemek istiyorsanız bunu boş veya varsayılan metinle bırakın." -#: options/preferences.py:1023 +#: options/preferences.py msgid "Tournament staff" -msgstr "" +msgstr "Turnuva personeli" -#: options/preferences.py:1033 +#: options/preferences.py msgid "Message to be displayed on the tournament home page" -msgstr "" +msgstr "Turnuva ana sayfasında görüntülenecek mesaj" -#: options/preferences.py:1034 +#: options/preferences.py msgid "Welcome message" -msgstr "" +msgstr "Hoş geldiniz mesajı" -#: options/preferences.py:1043 options/templates/preferences_index.html:74 +#: options/preferences.py options/templates/preferences_index.html msgid "UI Options" -msgstr "" +msgstr "Kullanıcı Arayüzü Seçenekleri" -#: options/preferences.py:1049 +#: options/preferences.py msgid "If showing results to public, show splitting adjudicators in them" -msgstr "" +msgstr "Sonuçları herkese gösteriyorsanız, içlerinde splitleyen jürileri gösterir" -#: options/preferences.py:1050 +#: options/preferences.py msgid "Show splitting adjudicators" -msgstr "" +msgstr "Splitleyen jürileri göster" -#: options/preferences.py:1058 -msgid "If showing results to public, show which motions were selected in the record" -msgstr "" - -#: options/preferences.py:1059 -msgid "Show motions in results" -msgstr "" - -#: options/preferences.py:1067 +#: options/preferences.py msgid "Whether and how to use code names for teams" -msgstr "" +msgstr "Takımların kod adlarının nasıl kullanılacağı" -#: options/preferences.py:1068 +#: options/preferences.py msgid "Team code names" -msgstr "" +msgstr "Takım kod adları" -#: options/preferences.py:1073 +#: options/preferences.py msgid "Do not use code names" -msgstr "" +msgstr "Kod adlarını kullanma" -#: options/preferences.py:1074 +#: options/preferences.py msgid "Use real names everywhere, and show code names in tooltips" -msgstr "" +msgstr "Her yerde gerçek adları kullan ve araç ipuçlarında kod adlarını göster" -#: options/preferences.py:1075 +#: options/preferences.py msgid "Use code names for public; real names with code names in tooltips for admins" -msgstr "" +msgstr "Herkese açık olarak kod adları kullan; yöneticiler için araç ipuçlarında kod adları ve gerçek adları kullan" -#: options/preferences.py:1077 +#: options/preferences.py msgid "Use code names for public; code names with real names in tooltips for admins" -msgstr "" +msgstr "Herkese açık olarak kod adları kullan; Yöneticiler için araç ipuçlarında gerçek adları ve kod adlarını kullan" -#: options/preferences.py:1079 +#: options/preferences.py msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" -msgstr "" +msgstr "Kod adlarını her yerde kullan; araç ipuçları kullanma (gerçek adlar bazı yönetici görünümlerinde gösterilir)" + +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "Katılımcıların kod adlarının nasıl kullanılacağı" -#: options/preferences.py:1085 +#: options/preferences.py +msgid "Participant code names" +msgstr "Katılımcı kod adları" + +#: options/preferences.py msgid "Display team emoji in the public and admin interfaces" -msgstr "" +msgstr "Takım emojilerini herkese açık ve yönetici arayüzlerinde görüntüle" -#: options/preferences.py:1086 +#: options/preferences.py msgid "Show emoji" -msgstr "" +msgstr "Emoji göster" -#: options/preferences.py:1094 +#: options/preferences.py msgid "In tables listing teams, adds a column showing their institutions" -msgstr "" +msgstr "Takımları listeleyen tablolarda, kurumlarını gösteren bir sütun ekler" -#: options/preferences.py:1095 +#: options/preferences.py msgid "Show team institutions" -msgstr "" +msgstr "Takım kurumlarını göster" -#: options/preferences.py:1103 +#: options/preferences.py msgid "Hide the institutions of adjudicators on public pages and on printed ballots" -msgstr "" +msgstr "Jürilerin kurumlarını herkese açık sayfalarda ve basılı ballotlarda gizle" -#: options/preferences.py:1104 +#: options/preferences.py msgid "Show adjudicator institutions" -msgstr "" +msgstr "Jüri kurumlarını göster" -#: options/preferences.py:1112 +#: options/preferences.py msgid "Enables a hover element on every team's name showing that team's speakers" -msgstr "" +msgstr "Her takımın adında, o takımın konuşmacılarını gösteren bir vurgulu öğe etkinleştirir" -#: options/preferences.py:1113 +#: options/preferences.py msgid "Show speakers in draw" -msgstr "" +msgstr "Kurada konuşmacıları göster" -#: options/preferences.py:1121 -msgid "Order in which are listed by round in the public view" -msgstr "" - -#: options/preferences.py:1122 -msgid "Order to display motions" -msgstr "" - -#: options/preferences.py:1126 -msgid "Earliest round first" -msgstr "" - -#: options/preferences.py:1127 -msgid "Latest round first" -msgstr "" - -#: options/preferences.py:1133 options/templates/preferences_index.html:79 +#: options/preferences.py options/templates/preferences_index.html msgid "Notifications" -msgstr "" +msgstr "Bildirimler" -#: options/preferences.py:1139 +#: options/preferences.py msgid "The name of the organizer tasked with managing emails (in case of replies)" -msgstr "" +msgstr "E-postaları yönetmekle görevli düzenleyicinin adı (yanıt durumunda)" -#: options/preferences.py:1140 +#: options/preferences.py msgid "Reply-to name" -msgstr "" +msgstr "Yanıt adı" -#: options/preferences.py:1148 +#: options/preferences.py msgid "The email address for handling replies" -msgstr "" +msgstr "Yanıtları işlemek için e-posta adresi" -#: options/preferences.py:1149 +#: options/preferences.py msgid "Reply-to address" -msgstr "" +msgstr "Yanıt adresi" -#: options/preferences.py:1157 +#: options/preferences.py msgid "A secret key to accept email status events" -msgstr "" +msgstr "E-posta durumu olaylarını kabul etmek için gizli anahtar" -#: options/preferences.py:1158 +#: options/preferences.py msgid "Email status secret key" -msgstr "" +msgstr "E-posta durumu gizli anahtarı" -#: options/preferences.py:1168 +#: options/preferences.py msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" -msgstr "" +msgstr "Jürilerin ballotlarının bir kopyasının, Tabbycat'e girildikten sonra (onay veya kontrol için) otomatik olarak (e-posta ile) gönderilmesini sağlar" -#: options/preferences.py:1169 +#: options/preferences.py msgid "Ballot receipts" -msgstr "" +msgstr "Ballot makbuzları" -#: options/preferences.py:1177 +#: options/preferences.py msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" -msgstr "" +msgstr "jürilere gönderilen ballotların birlikte gönderilen e-postaların konu satırı. İlişkili maç için yer tutucu olarak '{{ DEBATE }}' kullanın" -#: options/preferences.py:1179 +#: options/preferences.py msgid "Ballot receipt subject line" -msgstr "" +msgstr "Ballot makbuzu konu satırı" -#: options/preferences.py:1187 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their submitted ballot." -msgstr "" +msgstr "Jüri gönderilen ballotlarla birlikte gönderilen e-postaların mesaj gövdesi." -#: options/preferences.py:1188 +#: options/preferences.py msgid "Ballot receipt message" -msgstr "" +msgstr "Ballot alındı mesajı" -#: options/preferences.py:1204 +#: options/preferences.py msgid "The subject line for emails sent to speakers with their team points." -msgstr "" +msgstr "Konuşmacılara takım puanlarıyla birlikte gönderilen e-postaların konu satırı." -#: options/preferences.py:1205 +#: options/preferences.py msgid "Team points subject line" -msgstr "" +msgstr "Takım puanları konu satırı" -#: options/preferences.py:1212 +#: options/preferences.py msgid "The message body for emails sent to speakers with their team points." -msgstr "" +msgstr "Konuşmacılara takım puanlarıyla birlikte gönderilen e-postaların mesaj gövdesi." -#: options/preferences.py:1213 +#: options/preferences.py msgid "Team points message" -msgstr "" +msgstr "Takım puanları mesajı" -#: options/preferences.py:1222 +#: options/preferences.py msgid "The subject-line for emails sent to adjudicators with their assignments." -msgstr "" +msgstr "Jürilere görevleriyle birlikte gönderilen e-postaların konu satırı." -#: options/preferences.py:1223 +#: options/preferences.py msgid "Adjudicator draw subject line" -msgstr "" +msgstr "Jüri kurası konu satırı" -#: options/preferences.py:1230 +#: options/preferences.py msgid "The message body for emails sent to adjudicators with their assignments." -msgstr "" +msgstr "Jürilere görevleriyle birlikte gönderilen e-postaların mesaj gövdesi." -#: options/preferences.py:1231 +#: options/preferences.py msgid "Adjudicator draw message" -msgstr "" +msgstr "Jüri kura mesajı" -#: options/preferences.py:1240 +#: options/preferences.py msgid "The subject-line for emails sent to teams with their draw." -msgstr "" +msgstr "Kura ile birlikte takımlara gönderilen e-postaların konu satırı." -#: options/preferences.py:1241 +#: options/preferences.py msgid "Team draw subject line" -msgstr "" +msgstr "Takım kurası konu satırı" -#: options/preferences.py:1248 options/preferences.py:1266 +#: options/preferences.py msgid "The message body for emails sent to participants with their private URLs." -msgstr "" +msgstr "Katılımcılara özel URL'leriyle gönderilen e-postaların mesaj gövdesi." -#: options/preferences.py:1249 options/preferences.py:1267 +#: options/preferences.py msgid "Private URL notification message" -msgstr "" +msgstr "Özel URL bildiri mesajı" -#: options/preferences.py:1258 +#: options/preferences.py msgid "The subject-line for emails sent to participants with their private URLs." -msgstr "" +msgstr "Katılımcılara özel URL'leriyle gönderilen e-postaların konu satırı." -#: options/preferences.py:1259 +#: options/preferences.py msgid "Private URL notification subject line" -msgstr "" +msgstr "Özel URL bildiri konu satırı" -#: options/preferences.py:1280 +#: options/preferences.py msgid "The subject-line for emails sent to participants on motion release." -msgstr "" +msgstr "Önerge yayınlama sırasında katılımcılara gönderilen e-postaların konu satırı." -#: options/preferences.py:1281 +#: options/preferences.py msgid "Motion release notification subject line" -msgstr "" +msgstr "Önerge yayınlama bildirimi konu satırı" -#: options/preferences.py:1288 +#: options/preferences.py msgid "The message body for emails sent to participants on motion release." -msgstr "" +msgstr "Önerge yayınlama sırasında katılımcılara gönderilen e-postaların mesaj gövdesi." -#: options/preferences.py:1289 +#: options/preferences.py msgid "Motion release notification message" -msgstr "" +msgstr "Önerge yayınlama bildirimi mesajı" -#: options/preferences.py:1297 +#: options/preferences.py msgid "The subject-line for emails sent to participants informing them of their team registration." -msgstr "" +msgstr "Katılımcılara gönderilen ve takım kayıtlarını bildiren e-postaların konu satırı." -#: options/preferences.py:1298 +#: options/preferences.py msgid "Team registration notification subject line" -msgstr "" +msgstr "Takım kaydı bildirimi konu satırı" -#: options/preferences.py:1305 +#: options/preferences.py msgid "The message body for emails sent to participants informing them of their team registration." -msgstr "" +msgstr "Katılımcılara gönderilen ve takım kayıtlarını bildiren e-postaların mesaj gövdesi." -#: options/preferences.py:1306 +#: options/preferences.py msgid "Team registration notification message" -msgstr "" +msgstr "Takım kaydı bildirim mesajı" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Motions" +msgstr "Önergeler" + +#: options/preferences.py +msgid "If checked, ballots require a motion to be entered" +msgstr "İşaretlenirse, ballotlar önerge girilmesini gerektirir" + +#: options/preferences.py +msgid "Enable motions" +msgstr "Önergeleri etkinleştir" + +#: options/preferences.py +msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" +msgstr "Yazdırılan sonuç kağıtlarının önergelerin metnini gizlemesinin gerekip gerekmediği (girilmiş ve serbest bırakılmış olsalar bile)" + +#: options/preferences.py +msgid "Ballot Hide Motions" +msgstr "Ballot Önerge Gizle" + +#: options/preferences.py +msgid "Enables the motion veto field on ballots, to track veto statistics" +msgstr "Veto istatistiklerini izlemek için ballotda önerge vetosu alanını etkinleştirir" + +#: options/preferences.py +msgid "Motion vetoes" +msgstr "Önerge vetosu" + +#: options/preferences.py +msgid "If showing results to public, show which motions were selected in the record" +msgstr "Sonuçları herkese gösteriyorsanız, kayıta hangi önergelerin alındığını göster" -#: options/presets.py:32 options/presets.py:351 +#: options/preferences.py +msgid "Show motions in results" +msgstr "Sonuçlarda önergeleri göster" + +#: options/preferences.py +msgid "Order in which are listed by round in the public view" +msgstr "Herkese açık görünümde tura göre listelendiği sıra" + +#: options/preferences.py +msgid "Order to display motions" +msgstr "Önerge görüntüleme sırası" + +#: options/preferences.py +msgid "Earliest round first" +msgstr "Önce ilk tur" + +#: options/preferences.py +msgid "Latest round first" +msgstr "Önce son tur" + +#: options/preferences.py +msgid "Whether motions can be reused from one round to another." +msgstr "Önergelerin bir turdan diğerine kullanılıp kullanılamayacağı." + +#: options/preferences.py +msgid "Allow motion reuse" +msgstr "Önergelerin yeniden kullanılmasına izin ver" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Global Settings" +msgstr "Genel Ayarlar" + +#: options/preferences.py +msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." +msgstr "Harici uygulamaların, bilgi ayarlarına tabi olarak siteye özel bir arayüz üzerinden erişmesini sağlar." + +#: options/preferences.py +msgid "Enable API access" +msgstr "API erişimini etkinleştir" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "Ziyaretçilerin kendi asistan kullanıcı hesaplarını oluşturmalarına olanak tanıyan gizli bir URL'yi etkinleştiren bir anahtar. URL şu şekildedir: SİTENİZİN_URLSİ/accounts/signup/KEY/" + +#: options/preferences.py +msgid "Assistant account creation key" +msgstr "Asistan hesabı oluşturma anahtarı" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "Ziyaretçilerin kendi yönetici kullanıcı hesaplarını oluşturmalarına olanak tanıyan gizli bir URL'yi etkinleştiren bir anahtar. URL şu şekildedir: SİTENİZİN_URLSİ/accounts/signup/KEY/" + +#: options/preferences.py +msgid "Administrator account creation key" +msgstr "Yönetici hesabı oluşturma anahtarı" + +#: options/presets.py msgid "Public Information Options" -msgstr "" +msgstr "Açık Bilgi Seçenekleri" -#: options/presets.py:32 +#: options/presets.py msgid "Enable Public Information" -msgstr "" +msgstr "Açık Bilgileri Etkinleştir" -#: options/presets.py:33 +#: options/presets.py msgid "Disable Public Information" -msgstr "" +msgstr "Açık Bilgileri Devre Dışı Bırak" -#: options/presets.py:67 +#: options/presets.py msgid "Australs Rules" -msgstr "" +msgstr "Australs Kuralları" -#: options/presets.py:68 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." -msgstr "" +msgstr "Cevaplar, seçilen önergeler, ara aşamalar, bir-yukarı-bir-aşağı-ile 3'e 3. AIDA kurallarına uygundur." -#: options/presets.py:107 +#: options/presets.py msgid "British Parliamentary Rules" -msgstr "" +msgstr "İngiliz Parlamenter Kuralları" -#: options/presets.py:108 +#: options/presets.py msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." -msgstr "" +msgstr "2'ye karşı 2'ye karşı 2'ye karşı 2. WUDC kurallarıyla uyumludur." -#: options/presets.py:148 +#: options/presets.py msgid "Canadian Parliamentary Rules" -msgstr "" +msgstr "Kanada Parlamenter Kuralları" -#: options/presets.py:150 +#: options/presets.py msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." -msgstr "" +msgstr "Özetler (puanlanmamış) ve İÇN'lerle 2'ye 2. Bölgesel farklılıklara bağlı olarak ek yapılandırma gerektirebilir." -#: options/presets.py:173 +#: options/presets.py msgid "Australian Easters Rules" -msgstr "" +msgstr "Avustralya Paskalya Kuralları" -#: options/presets.py:175 +#: options/presets.py msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." -msgstr "" +msgstr "Özetsiz 3'e 3, belirli önergeler, acemiler, ara baloncuklar, bir-yukarı-bir-aşağı. AIDA kurallarına uygundur." -#: options/presets.py:193 +#: options/presets.py msgid "2 vs 2 Impromptu" -msgstr "" +msgstr "Doğaçlama 2'e 2" -#: options/presets.py:195 +#: options/presets.py msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." -msgstr "" +msgstr "özetler, belirli önergeler, belirli taraflar ve acemi durumları ile 2'ye 2." -#: options/presets.py:220 +#: options/presets.py msgid "3 vs 3 Prepared" -msgstr "" +msgstr "Hazırlıklı 3'e 3" -#: options/presets.py:222 +#: options/presets.py msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." -msgstr "" +msgstr "Önceden belirlenmiş taraflar, halka açık olarak görüntülenen taraflar ve önergeler ve acemi statüleri ile 3'e 3." -#: options/presets.py:249 +#: options/presets.py msgid "UADC Rules" -msgstr "" +msgstr "UADC Kuralları" -#: options/presets.py:251 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." -msgstr "" +msgstr "Özet, belirli önergeler ve tüm jüriler takımlardan geri bildirim alabilir." -#: options/presets.py:287 +#: options/presets.py msgid "WSDC Rules" -msgstr "" +msgstr "WSDC Kuralları" -#: options/presets.py:289 +#: options/presets.py msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." -msgstr "" +msgstr "Özetler, belirli önergeler, prop / opp taraf etiketleri ile 3'e 3 ve tüm jüriler takımlardan geri bildirim alabilir." -#: options/presets.py:353 +#: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." -msgstr "" +msgstr "Çevrimiçi olarak düzenlenen turnuvalar için: Bu, insanların kuraya ve diğer genel olarak yararlı bilgilere tab sitesi üzerinden erişebilmeleri sağlar." -#: options/presets.py:365 +#: options/presets.py msgid "Tab Release Options" -msgstr "" +msgstr "Tab Yayınlama Seçenekleri" -#: options/presets.py:367 +#: options/presets.py msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" -msgstr "" +msgstr "Bir tab yayınlanmaya hazır olduğunda kullanılır. Bu, tüm turların sonuçlarını, takım tabını, konuşmacı tabını vb. herkese açık olarak gösterir." -#: options/templates/preferences_index.html:4 -#: options/templates/preferences_index.html:5 +#: options/presets.py +msgid "Use Private URLs" +msgstr "Özel URL'ler kullan" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "Özel URL'ler üzerinden katılımcı veri girişe olanak tanır." + +#: options/templates/preferences_index.html msgid "Configuration" -msgstr "" +msgstr "Ayarlama" + +#: options/templates/preferences_index.html +#, python-format +msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." +msgstr "Kura kurallarınız tartışma başına dört takım belirtir, ancak ballot ayarınız jürilerin bağımsız ballot gönderdiğini belirtir. Bu ayarlar uyumlu değildir ve sonuç girişinin çökmesine neden olur. Tartışma Kuralları bölümüne geri dönmeniz ve yapılandırmanızı konsensüs oylarını kullanacak şekilde değiştirmeniz gerekir." + +#: options/templates/preferences_index.html +#, python-format +msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." +msgstr "Önceden ayrılmış taraf kullanmıyorsunuz, ancak tek aşama çözümleme yöntemi önceden ayrılmış taraflar kullanır. Bu, kura oluşturmanın başarısız olmasına neden olur. Tek aşama çözümünü, Orta 1 ve Orta 2 kullanmadan Kura kuralları kısmından ayarlamanız gereklidir." -#: options/templates/preferences_index.html:10 +#: options/templates/preferences_index.html #, python-format msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." -msgstr "" +msgstr "Hem takım kod adları hem de takım kurumları herkese açık sayfalarda gösterilir. Takım kod adlarını etkinleştirmedeki amacınız takım kurumlarını gizlemekse, bu muhtemelen kod adlarının amacını ortadan kaldırır. Bu ayarları UI Seçenekleri bölümünden düzenleyebilirsiniz." -#: options/templates/preferences_index.html:29 +#: options/templates/preferences_index.html msgid "The range of scores that can awarded to speeches, replies, and teams" -msgstr "" +msgstr "Konuşmalara, özetlere ve takımlara verilebilecek puan aralığı" -#: options/templates/preferences_index.html:34 +#: options/templates/preferences_index.html msgid "How teams are paired in the draw and how adjudicators are auto-allocated" -msgstr "" +msgstr "Kurada takımların nasıl eşleştirileceği ve jürilerin nasıl otomatik olarak tahsis edileceği" -#: options/templates/preferences_index.html:39 +#: options/templates/preferences_index.html msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" -msgstr "" +msgstr "Bir maçta kaç konuşma olduğu, önergelerin nasıl kararlaştırıldığı ve özetlerin kullanılıp kullanılmadığı" -#: options/templates/preferences_index.html:44 +#: options/templates/preferences_index.html msgid "How teams and speakers are ranked in the released tabs" -msgstr "" +msgstr "Takımlar ve konuşmacıların yayınlanan tablarda nasıl sıralandığı" -#: options/templates/preferences_index.html:49 +#: options/templates/preferences_index.html msgid "How adjudicators are ranked and who can submit feedback" -msgstr "" +msgstr "Jürilerin nasıl sıralandığı ve kimlerin geri bildirim gönderebildiği" -#: options/templates/preferences_index.html:60 +#: options/templates/preferences_index.html +msgid "How and where are motions used" +msgstr "Önergelerin nasıl ve nerede kullanıldığı" + +#: options/templates/preferences_index.html msgid "When to release a public tab is made visible and what data it shows" -msgstr "" +msgstr "Herkese açık tabın ne zaman yayınlanacağı ve hangi verilerin gösterileceği görünür hale gelir" -#: options/templates/preferences_index.html:65 +#: options/templates/preferences_index.html msgid "How ballots, feedback, and check-ins are entered, including online submission options" -msgstr "" +msgstr "Çevrimiçi gönderim seçenekleri de dahil olmak üzere ballotların, geri bildirimlerin ve girişlerin nasıl girildiği" -#: options/templates/preferences_index.html:70 +#: options/templates/preferences_index.html msgid "What information the site displays on the publicly accessible pages" -msgstr "" +msgstr "Sitenin herkese açık sayfalarda görüntülediği bilgiler" -#: options/templates/preferences_index.html:75 +#: options/templates/preferences_index.html msgid "Small tweaks in what information is presented by the interface" -msgstr "" +msgstr "Arayüz tarafından hangi bilgilerin sunulduğu konusunda ince ayarlar" -#: options/templates/preferences_index.html:80 +#: options/templates/preferences_index.html msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" -msgstr "" +msgstr "Ballot gönderimlerini veya takım puanlarını onaylayan e-postalar gibi gönderme bildirimlerini ayarlar" + +#: options/templates/preferences_index.html +msgid "Settings which can affect all tournaments on the site" +msgstr "Sitedeki tüm turnuvaları etkileyebilecek ayarlar" -#: options/templates/preferences_index.html:92 +#: options/templates/preferences_index.html msgid "Manually Set Current Round" -msgstr "" +msgstr "Geçerli Turu El İle Ayarla" -#: options/templates/preferences_index.html:93 +#: options/templates/preferences_index.html msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." -msgstr "" +msgstr "Tabbycat, her turun sonuç sayfasında geçerli turu ilerletmenizi isteyecektir. Ancak, bunu geçersiz kılmanızı ve geçerli turu başka bir şeye ayarlamanızı gerektiren özel durumlar varsa, bu sayfayı kullanın." + +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" +msgstr "Konik Puanlama için Tur Ağırlıkları Ayarla" + +#: options/templates/preferences_index.html +msgid "Rounds can be weighted so that certain rounds are worth more team points." +msgstr "Turlar, belirli turların daha fazla takım puanı değerinde olacak şekilde ağırlıklandırılabilir." -#: options/templates/preferences_index.html:100 +#: options/templates/preferences_index.html msgid "Presets" -msgstr "" +msgstr "Önayarlar" -#: options/templates/preferences_index.html:101 +#: options/templates/preferences_index.html msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." -msgstr "" +msgstr "Bunlar, temel kurallar için ortak ayarları değiştirir; Turnuvanız için doğru olduklarından emin olmak için belgelerimizi kontrol edin. Her bağlantı, uygulanmadan önce hangi ayarların değiştiğini görüntüler." -#: options/templates/preferences_index.html:112 +#: options/templates/preferences_index.html #, python-format msgid "Apply %(preset)s" -msgstr "" +msgstr "%(preset)s uygula" -#: options/templates/preferences_presets_complete.html:4 -#: options/templates/preferences_presets_complete.html:5 +#: options/templates/preferences_presets_complete.html #, python-format msgid "Presets Applied: %(preset_title)s" -msgstr "" +msgstr "Uygulanan Hazır Ayarlar: %(preset_title)s" -#: options/templates/preferences_presets_complete.html:10 -#: options/templates/preferences_presets_confirm.html:10 -#: options/templates/preferences_section_set.html:19 +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html msgid "Back to Configuration" -msgstr "" +msgstr "Yapılandırmaya Geri Dön" -#: options/templates/preferences_presets_complete.html:16 +#: options/templates/preferences_presets_complete.html msgid "Preferences that were changed" -msgstr "" +msgstr "Değiştirilen tercihler" -#: options/templates/preferences_presets_confirm.html:4 -#: options/templates/preferences_presets_confirm.html:5 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Confirm Presets: %(preset_title)s" -msgstr "" +msgstr "Ön Ayarları Onayla: %(preset_title)s" -#: options/templates/preferences_presets_confirm.html:18 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will not change" -msgstr "" +msgstr "Değişmeyecek tercihler" -#: options/templates/preferences_presets_confirm.html:23 +#: options/templates/preferences_presets_confirm.html msgid "Preferences that will change" -msgstr "" +msgstr "Değişecek tercihler" -#: options/templates/preferences_presets_confirm.html:30 +#: options/templates/preferences_presets_confirm.html #, python-format msgid "Apply Presets: %(preset_title)s" -msgstr "" +msgstr "Ön Ayarları Uygula: %(preset_title)s" -#: options/templates/preferences_section_set.html:6 +#: options/templates/preferences_section_set.html #, python-format msgid "Configuration: %(section)s" -msgstr "" +msgstr "Yapılandırma: %(section)s" -#: options/templates/preferences_section_set.html:10 +#: options/templates/preferences_section_set.html #, python-format msgid "Edit Configuration: %(section)s" -msgstr "" - -#: options/views.py:43 -msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules settings and change your configuration to use consensus ballots." -msgstr "" +msgstr "Yapılandırmayı Düzenle: %(section)s" -#: options/views.py:63 +#: options/views.py #, python-format msgid "Tournament options (%(section)s) saved." -msgstr "" +msgstr "Turnuva seçenekleri (%(section)s) kaydedildi." -#: options/views.py:113 +#: options/views.py #, python-format msgid "Tournament options saved according to preset %(name)s." -msgstr "" +msgstr "Turnuva seçenekleri önceden ayarlanmış %(name)s'e göre kaydedildi." diff --git a/tabbycat/participants/locale/tr/LC_MESSAGES/django.po b/tabbycat/participants/locale/tr/LC_MESSAGES/django.po index 48fc0446259..30c729e86ac 100644 --- a/tabbycat/participants/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:33\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" "Last-Translator: philip_tc\n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -15,845 +15,950 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/participants/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 942\n" -#: participants/admin.py:94 +#: participants/admin.py #, python-format msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" -msgstr "" +msgstr "Takım farklı bir turnuvanın break kategorisinde olamaz. Lütfen şunu kaldırın: %(category)s" + +#: participants/admin.py +msgid "Emoji & Code" +msgstr "Emoji ve Kod" -#: participants/admin.py:148 +#: participants/admin.py +msgid "Delete URL Key" +msgstr "URL Anahtarını Sil" + +#: participants/admin.py #, python-format msgid "%(count)d speaker had their URL key removed." msgid_plural "%(count)d speakers had their URL keys removed." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d konuşmacısının URL anahtarı kaldırılmıştır." +msgstr[1] "%(count)d konuşmacılarının URL anahtarları kaldırıldı." -#: participants/admin.py:152 participants/admin.py:211 -msgid "Delete URL key" -msgstr "" +#: participants/admin.py +msgid "Reset emoji" +msgstr "Emojiyi sıfırla" + +#: participants/admin.py +#, python-format +msgid "%(count)d team had their emoji reset." +msgid_plural "%(count)d teams had their emojis reset." +msgstr[0] "%(count)d takımının emojisi sıfırlandı." +msgstr[1] "%(count)d takımlarının emojileri sıfırlandı." + +#: participants/admin.py +msgid "Reset code name" +msgstr "Kod ad sıfırla" -#: participants/admin.py:206 +#: participants/admin.py +#, python-format +msgid "%(count)d team had their code name reset." +msgid_plural "%(count)d teams had their code names reset." +msgstr[0] "%(count)d takımının kod adı sıfırlandı." +msgstr[1] "%(count)d takımlarının kod adları sıfırlandı." + +#: participants/admin.py #, python-format msgid "%(count)d adjudicator had their URL key removed." msgid_plural "%(count)d adjudicators had their URL keys removed." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d jürisinin URL anahtarı kaldırılmıştır." +msgstr[1] "%(count)d jürilerinin URL anahtarları kaldırıldı." -#: participants/apps.py:7 participants/views.py:40 +#: participants/apps.py participants/views.py msgid "Participants" -msgstr "" +msgstr "Katılımcılar" -#: participants/models.py:20 participants/models.py:36 -#: participants/models.py:65 participants/models.py:95 +#: participants/models.py msgid "name" msgstr "isim" -#: participants/models.py:23 participants/models.py:44 +#: participants/models.py msgid "region" msgstr "bölge" -#: participants/models.py:24 +#: participants/models.py msgid "regions" msgstr "bölgeler" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:38 +#: participants/models.py msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" -msgstr "" +msgstr "Kurumun tam adı, örneğin, \"Cambridge Üniversitesi\", \"Wellington Victoria Üniversitesi\"" -#: participants/models.py:40 +#: participants/models.py msgid "code" -msgstr "" +msgstr "kod" #. Translators: Change the examples to institutions native to your language; keep consistent between strings -#: participants/models.py:42 +#: participants/models.py msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" -msgstr "" +msgstr "Kurumun tipik olarak kısa adı, örneğin, \"Cambridge\", \"Vic Wellington\"" -#: participants/models.py:54 participants/models.py:154 -#: participants/models.py:340 +#: participants/models.py msgid "institution" -msgstr "" +msgstr "kurum" -#: participants/models.py:55 +#: participants/models.py msgid "institutions" -msgstr "" +msgstr "kurumlar" -#: participants/models.py:63 participants/models.py:156 -#: participants/models.py:343 +#: participants/models.py msgid "tournament" msgstr "turnuva" #. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:67 +#: participants/models.py msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" -msgstr "" +msgstr "Görüntülenecek ad, örneğin \"Acemi\", \"ESL\"" -#: participants/models.py:69 +#: participants/models.py msgid "slug" -msgstr "" +msgstr "jeton" #. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" -#: participants/models.py:71 +#: participants/models.py msgid "Slug for URLs, e.g., \"novice\", \"esl\"" -msgstr "" +msgstr "URL'ler için jeton, örneğin \"acemi\", \"esl\"" -#: participants/models.py:73 +#: participants/models.py msgid "sequence number" -msgstr "" +msgstr "sıra numarası" -#: participants/models.py:74 +#: participants/models.py msgid "The order in which the categories are displayed" -msgstr "" +msgstr "Kategorilerin görüntülenme sırası" -#: participants/models.py:76 +#: participants/models.py msgid "limit" -msgstr "" +msgstr "sınır" -#: participants/models.py:77 +#: participants/models.py msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" -msgstr "" +msgstr "En fazla bu kadar konuşmacı bu kategorinin herkese açık tabında gösterilir veya sınır olmaması için 0 kullanın" -#: participants/models.py:79 +#: participants/models.py msgid "public" -msgstr "" +msgstr "herkese açık" -#: participants/models.py:80 +#: participants/models.py msgid "If checked, this category will be included in the speaker category tabs shown to the public" -msgstr "" +msgstr "İşaretlenirse, bu kategori herkese gösterilen konuşmacı kategorisi tablarına dahil edilecektir." -#: participants/models.py:86 +#: participants/models.py msgid "speaker category" -msgstr "" +msgstr "konuşmacı kategorisi" -#: participants/models.py:87 participants/models.py:321 +#: participants/models.py msgid "speaker categories" -msgstr "" +msgstr "konuşmacı kategorileri" -#: participants/models.py:97 -msgid "e-mail address" +#: participants/models.py +msgid "email address" msgstr "" -#: participants/models.py:99 +#: participants/models.py msgid "phone" -msgstr "" +msgstr "Telefon" -#: participants/models.py:101 +#: participants/models.py msgid "anonymous" -msgstr "" +msgstr "anonim" -#: participants/models.py:102 +#: participants/models.py msgid "Anonymous persons will have their name and team redacted on public tab releases" -msgstr "" +msgstr "Anonim kişilerin adları ve takımları herkese açık tab yayınlamalarında redakte edilecektir" -#: participants/models.py:105 +#: participants/models.py +msgid "code name" +msgstr "kod ad" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "Herkese açık sayfalarda gerçek adı gizlemek için kullanılan ad" + +#: participants/models.py msgid "URL key" -msgstr "" +msgstr "URL anahtarı" -#: participants/models.py:110 +#: participants/models.py msgid "male" msgstr "erkek" -#: participants/models.py:111 +#: participants/models.py msgid "female" -msgstr "fişi" +msgstr "kadın" -#: participants/models.py:112 +#: participants/models.py msgid "other" msgstr "diğer" -#: participants/models.py:114 +#: participants/models.py msgid "gender" msgstr "cinsiyet" -#: participants/models.py:115 +#: participants/models.py msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" -msgstr "" +msgstr "Cinsiyet, jüri tahsisat arayüzünde görüntülenir ve başka hiçbir yerde görüntülenmez" -#: participants/models.py:117 +#: participants/models.py msgid "pronoun" -msgstr "" +msgstr "zamir" -#: participants/models.py:118 +#: participants/models.py msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" -msgstr "" +msgstr "Tabbycat kullanarak ballot yazdırıyorsanız, zamirleri önceden yazdırma seçeneği vardır." -#: participants/models.py:121 +#: participants/models.py msgid "person" -msgstr "" +msgstr "kişi" -#: participants/models.py:122 +#: participants/models.py msgid "persons" -msgstr "" +msgstr "kişi" -#: participants/models.py:137 +#: participants/models.py msgid "full name/suffix" -msgstr "" +msgstr "tam ad/sonek" -#: participants/models.py:138 +#: participants/models.py msgid "Do not include institution name (see \"uses institutional prefix\" below)" -msgstr "" +msgstr "Kurum adını eklemeyin (aşağıdaki \"kurumsal önek kullan\" bölümüne bakın)" -#: participants/models.py:140 +#: participants/models.py msgid "short name/suffix" -msgstr "" +msgstr "kısa ad/sonek" -#: participants/models.py:141 -msgid "The name shown in the draw. Do not include institution name (see \"uses institutional prefix\" below)" -msgstr "" +#: participants/models.py +msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" +msgstr "Kurada gösterilen kodsuz ad, kurum adını içermez (aşağıdaki \"kurumsal önek kullan\" bölümüne bakın)" -#: participants/models.py:143 -msgid "code name" -msgstr "" - -#: participants/models.py:144 +#: participants/models.py msgid "Name used to obscure institutional identity on public-facing pages" -msgstr "" +msgstr "Herkese açık sayfalarda kurumsal kimliği gizlemek için kullanılan ad" -#: participants/models.py:147 +#: participants/models.py msgid "short name" -msgstr "" +msgstr "kısa ad" -#: participants/models.py:148 -msgid "The name shown in the draw, including institution name. (This is autogenerated.)" -msgstr "" +#: participants/models.py +msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" +msgstr "Kurum adı da dahil olmak üzere kurada gösterilen kodsuz ad. (Bu otomatik olarak oluşturulur.)" -#: participants/models.py:150 +#: participants/models.py msgid "long name" -msgstr "" +msgstr "uzun isim" -#: participants/models.py:151 +#: participants/models.py msgid "The full name of the team, including institution name. (This is autogenerated.)" -msgstr "" +msgstr "Kurum adı da dahil olmak üzere takımın tam adı. (Bu otomatik olarak oluşturulur.)" -#: participants/models.py:158 +#: participants/models.py msgid "Uses institutional prefix" -msgstr "" +msgstr "Kurumsal önek kullan" -#: participants/models.py:159 +#: participants/models.py msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" -msgstr "" +msgstr "İşaretlenirse, Victoria'dan \"1\" adlı bir takım \"Victoria 1\" olarak gösterilecektir." -#: participants/models.py:161 +#: participants/models.py msgid "break categories" -msgstr "" +msgstr "break kategorileri" + +#: participants/models.py +msgid "institution conflicts" +msgstr "kurum conflictleri" -#: participants/models.py:172 +#: participants/models.py msgid "none" -msgstr "" +msgstr "hiçbiri" -#: participants/models.py:173 +#: participants/models.py msgid "swing" -msgstr "" +msgstr "swing" -#: participants/models.py:174 +#: participants/models.py msgid "composite" -msgstr "" +msgstr "terkip" -#: participants/models.py:175 +#: participants/models.py msgid "bye" msgstr "" -#: participants/models.py:178 +#: participants/models.py msgid "type" -msgstr "" +msgstr "tür" -#: participants/models.py:182 +#: participants/models.py msgid "emoji" -msgstr "" +msgstr "emoji" -#: participants/models.py:196 participants/models.py:319 +#: participants/models.py msgid "team" msgstr "takım" -#: participants/models.py:197 +#: participants/models.py msgid "teams" msgstr "takımlar" -#: participants/models.py:302 +#: participants/models.py msgid "Teams must have an institution if they are using the institutional prefix." -msgstr "" +msgstr "Kurumsal önek kullanan takımların bir kurumu olmalıdır." -#: participants/models.py:304 +#: participants/models.py msgid "Teams must have a full name if they don't use the institutional prefix." -msgstr "" +msgstr "Kurumsal önek kullanmayan takımların tam adı olmalıdır." -#: participants/models.py:306 +#: participants/models.py msgid "Teams must have a short name if they don't use the institutional prefix." -msgstr "" +msgstr "Kurumsal önek kullanmayan takımların kısa adı olmalıdır." -#: participants/models.py:324 +#: participants/models.py msgid "speaker" msgstr "konuşmacı" -#: participants/models.py:325 +#: participants/models.py msgid "speakers" msgstr "konuşmacılar" -#: participants/models.py:344 +#: participants/models.py msgid "Adjudicators not assigned to any tournament can be shared between tournaments" -msgstr "" +msgstr "Herhangi bir turnuvaya atanmayan jüriler turnuvalar arasında paylaşılabilir" -#: participants/models.py:346 +#: participants/models.py msgid "base score" -msgstr "" +msgstr "temel puan" -#: participants/models.py:352 -msgid "institution conflicts" -msgstr "" - -#: participants/models.py:356 +#: participants/models.py msgid "team conflicts" -msgstr "" +msgstr "takım conflictleri" -#: participants/models.py:359 +#: participants/models.py +msgid "adjudicator conflicts" +msgstr "jüri conflictleri" + +#: participants/models.py msgid "always trainee" -msgstr "" +msgstr "her zaman acemi" -#: participants/models.py:360 +#: participants/models.py msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" -msgstr "" +msgstr "İşaretlenirse, bu jüriye, puanlarından bağımsız olarak asla otomatik olarak bir oy pozisyonu tahsis edilmeyecektir." -#: participants/models.py:362 +#: participants/models.py msgid "breaking" -msgstr "" +msgstr "break olan" -#: participants/models.py:364 +#: participants/models.py msgid "independent" -msgstr "" +msgstr "bağımsız" -#: participants/models.py:366 +#: participants/models.py msgid "adjudication core" -msgstr "" +msgstr "jüri komitesi" -#: participants/models.py:375 +#: participants/models.py msgid "adjudicator" msgstr "jüri" -#: participants/models.py:376 +#: participants/models.py msgid "adjudicators" msgstr "jüriler" -#: participants/tables.py:28 +#: participants/tables.py msgid "Points after this debate" -msgstr "" +msgstr "Bu tartışmadan sonra puanlar" -#: participants/tables.py:30 +#: participants/tables.py msgid "Wins after this debate" -msgstr "" +msgstr "Bu tartışmadan sonra galibiyetler" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaker scores
    (in speaking order)" -msgstr "" +msgstr "Konuşmacı puanları
    (konuşma sırasına göre)" -#: participants/tables.py:39 +#: participants/tables.py msgid "Speaks" -msgstr "" +msgstr "Konuşuyor" -#: participants/templates/adjudicator_record.html:17 -#: participants/templates/team_record.html:19 +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html #, python-format msgid "About %(name)s" -msgstr "" +msgstr "%(name)s hakkında" -#: participants/templates/adjudicator_registration_card.html:15 +#: participants/templates/adjudicator_registration_card.html msgid "Independent adjudicator" -msgstr "" +msgstr "Bağımsız jüri" -#: participants/templates/adjudicator_registration_card.html:18 +#: participants/templates/adjudicator_registration_card.html msgid "Member of the adjudication core" -msgstr "" +msgstr "jüri komitesi üyesi" -#: participants/templates/adjudicator_registration_card.html:26 -#: participants/templates/team_registration_card.html:57 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institution:" -msgstr "" +msgstr "Kurum:" -#: participants/templates/adjudicator_registration_card.html:30 -#: participants/templates/team_registration_card.html:61 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Unaffiliated" -msgstr "" +msgstr "Bağımsız" -#: participants/templates/adjudicator_registration_card.html:34 -#: participants/templates/team_registration_card.html:65 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Region:" msgstr "Bölge:" -#: participants/templates/adjudicator_registration_card.html:40 +#: participants/templates/adjudicator_registration_card.html msgid "The institutional affiliations of adjudicators are not public at this tournament." -msgstr "" +msgstr "Jürilerim kurumsal bağlantıları bu turnuvada herkese açık değildir." -#: participants/templates/adjudicator_registration_card.html:47 -#: participants/templates/team_registration_card.html:74 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Institutional Conflicts:" -msgstr "" +msgstr "Kurumsal Conflictler:" -#: participants/templates/adjudicator_registration_card.html:49 -#: participants/templates/team_registration_card.html:76 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "; " msgstr "; " -#: participants/templates/adjudicator_registration_card.html:51 -#: participants/templates/adjudicator_registration_card.html:58 -#: participants/templates/adjudicator_registration_card.html:69 -#: participants/templates/adjudicator_registration_card.html:79 -#: participants/templates/team_registration_card.html:30 -#: participants/templates/team_registration_card.html:41 -#: participants/templates/team_registration_card.html:49 -#: participants/templates/team_registration_card.html:78 -#: participants/templates/team_registration_card.html:85 -#: participants/templates/team_registration_card.html:95 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "None" -msgstr "" +msgstr "Hiçbiri" -#: participants/templates/adjudicator_registration_card.html:54 +#: participants/templates/adjudicator_registration_card.html msgid "Team Conflicts:" -msgstr "" +msgstr "Takım Conflictleri:" -#: participants/templates/adjudicator_registration_card.html:56 -#: participants/templates/adjudicator_registration_card.html:64 -#: participants/templates/adjudicator_registration_card.html:66 -#: participants/templates/adjudicator_registration_card.html:77 -#: participants/templates/team_registration_card.html:28 -#: participants/templates/team_registration_card.html:39 -#: participants/templates/team_registration_card.html:47 -#: participants/templates/team_registration_card.html:83 -#: participants/templates/team_registration_card.html:93 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid ", " msgstr ", " -#: participants/templates/adjudicator_registration_card.html:61 -#: participants/templates/team_registration_card.html:81 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Adjudicator Conflicts:" -msgstr "" +msgstr "Hakem Conflictleri:" -#: participants/templates/adjudicator_registration_card.html:75 -#: participants/templates/team_registration_card.html:91 +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html msgid "Room Constraints:" -msgstr "" +msgstr "Oda Kısıtlamaları:" -#: participants/templates/admin/participants/adjudicator/change_form.html:8 +#: participants/templates/admin/participants/adjudicator/change_form.html msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." -msgstr "" +msgstr "Unutmayın: Bu jürinin kendi kurumuyla conflictli olması gerekiyorsa, bu conflicti şimdi yukarıdaki Jüri-kurum conflictleri sekmesine eklemelisiniz, çünkü kendi kurum conflicti bu formu kullanırken otomatik olarak yaratılmamıştır." -#: participants/templates/admin/participants/delete_debateteam_warning.html:7 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." -msgstr "" +msgstr "Uyarı: Yukarıdaki listede \"tartışma takımı\" nesneleri varsa, muhtemelen bu %(object_name)s öğesini silmemelisiniz." -#: participants/templates/admin/participants/delete_debateteam_warning.html:13 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format -msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete these %(objects_name)s." -msgstr "" +msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." +msgstr "Uyarı: Yukarıdaki listede \"tartışma takımı\" nesneleri varsa, muhtemelen seçili %(object_name)s öğesini silmemelisiniz." #. Translators: This follows the above sentence in the same paragraph. -#: participants/templates/admin/participants/delete_debateteam_warning.html:20 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." -msgstr "" +msgstr "Bu, özellikle silinecek herhangi bir takım önceden bir maça katılmışsa geçerlidir. Bir takımın önceden girilmiş bir sonucu varsa, takımı silmek, artık bu sonuçlara ihtiyacınız olmadığını düşünseniz bile, bu sonuçları da siler, normalde tabı bozar. Bir takım tartıştıysa ve turnuvadan çekiliyorsa, silmemelisiniz. Tabbycat yönetici alanının \"Kullanılabilirlik\" bölümünün altında takımı etkin değil olarak işaretlemeniz yeterlidir." -#: participants/templates/admin/participants/delete_debateteam_warning.html:32 +#: participants/templates/admin/participants/delete_debateteam_warning.html msgid "Note that deleting an institution also deletes all teams from that institution." -msgstr "" +msgstr "Bir kurumu silmenin, o kurumdaki tüm takımları da sileceğini unutmayın." -#: participants/templates/admin/participants/delete_debateteam_warning.html:40 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." -msgstr "" +msgstr "Bu %(object_name)s'i silme konusunda kararlıysanız, lütfen önce yukarıdaki nesneleri silin ve devam etmeden önce \"tartışma takımı\" nesneleri sayfasında göreceğiniz uyarıyı dikkate aldığınızdan emin olun." -#: participants/templates/admin/participants/delete_debateteam_warning.html:46 +#: participants/templates/admin/participants/delete_debateteam_warning.html #, python-format msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." -msgstr "" +msgstr "Bu %(object_name)s'i silme konusunda kararlıysanız, lütfen önce yukarıdaki nesneleri silin ve devam etmeden önce \"tartışma takımı\" nesneleri sayfasında göreceğiniz uyarıyı dikkate aldığınızdan emin olun." -#: participants/templates/admin/participants/team/change_form.html:8 +#: participants/templates/admin/participants/team/change_form.html msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." -msgstr "" +msgstr "Unutmayın: Bu takımın kendi kurumuyla conflictli olması gerekiyorsa, bu conflicti şimdi yukarıdaki takım-kurum conflictleri sekmesine eklemelisiniz, çünkü kendi kurum conflicti bu formu kullanırken otomatik olarak yaratılmamıştır." -#: participants/templates/current_round/common.html:6 +#: participants/templates/current_round/common.html #, python-format msgid "The round begins at %(start_time)s" -msgstr "" +msgstr "Tur %(start_time)s saatinde başlar" -#: participants/templates/current_round/common.html:15 +#: participants/templates/current_round/common.html msgid "Teams:" msgstr "Takımlar:" -#: participants/templates/current_round/common.html:30 +#: participants/templates/current_round/common.html msgid "Adjudicator:" msgid_plural "Adjudicators:" msgstr[0] "Jüri:" msgstr[1] "Jüriler:" -#: participants/templates/current_round/common.html:39 -#: participants/templates/current_round/common.html:41 +#: participants/templates/current_round/common.html msgctxt "chair icon" msgid "Ⓒ" -msgstr "Ⓑ" +msgstr "Ⓒ" -#: participants/templates/current_round/common.html:39 -#: participants/templates/current_round/common.html:41 +#: participants/templates/current_round/common.html msgctxt "trainee icon" msgid "Ⓣ" -msgstr "" +msgstr "Ⓣ" -#: participants/templates/current_round/common.html:46 +#: participants/templates/current_round/common.html msgid "There are no panellists or trainees assigned to this debate." -msgstr "" +msgstr "Bu maça atanmış panelist veya acemi yoktur." -#: participants/templates/current_round/common.html:56 +#: participants/templates/current_round/common.html msgid "Motions are not released to public." -msgstr "" +msgstr "Önergeler herkese yayınlanmaz." -#: participants/templates/current_round/common.html:59 +#: participants/templates/current_round/common.html msgid "Motion:" msgstr "Önerge:" -#: participants/templates/current_round/common.html:63 +#: participants/templates/current_round/common.html #, python-format msgid "Motion %(seq)s:" msgstr "Önerge %(seq)s:" -#: participants/templates/current_round/common.html:71 +#: participants/templates/current_round/common.html msgid "The motion(s) for this round haven't yet been released." -msgstr "" +msgstr "Bu tur için önerge(ler) henüz yayınlanmadı." -#: participants/templates/current_round/round_adj.html:13 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "%(adjudicator)s %(aff)s vs %(neg)s için %(room)s odada jürilik yapak başkandır." + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." -msgstr "" +msgstr "%(adjudicator)s %(aff)s vs %(neg)s için %(room)s odada jürilik yapak başkandır." -#: participants/templates/current_round/round_adj.html:17 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "Siz %(aff)s vs %(neg)s için %(room)s odada jürilik yapak başkandır." + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." -msgstr "" +msgstr "Siz %(aff)s vs %(neg)s için %(room)s odada jürilik yapan başkansinız." -#: participants/templates/current_round/round_adj.html:23 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "%(adjudicator)s, /strong< >strong(aff)s ile %(neg)s%(room)s. karar veren bir s'dir." + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." -msgstr "" +msgstr "%(adjudicator)s, /strong< >strong(aff)s ile %(neg)s /strong< > karar veren bir s'dir." + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "Siz %(room)s odasında %(aff)s vs %(neg)s maçında jüri olarak göver alan bir %(type)s" -#: participants/templates/current_round/round_adj.html:27 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." -msgstr "" +msgstr "Siz %(room)s odasında %(aff)s vs %(neg)s maçında jüri olarak göver alan bir %(type)s" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "%(adjudicator)s %(room)s odasındaki %(aff)s vs %(neg)s maçında görev alıyor" -#: participants/templates/current_round/round_adj.html:33 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." -msgstr "" +msgstr "%(adjudicator)s (room)s odasındaki %(aff)s vs %(neg)s maçında görev alıyor" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "Siz %(room)s odasındaki %(aff)s vs %(neg)s maçında görevlisiniz." -#: participants/templates/current_round/round_adj.html:37 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." -msgstr "" +msgstr "Siz (room)s odasındaki %(aff)s vs %(neg)s maçında görevlisiniz." + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating in %(room)s." +msgstr "%(adjudicator)s %(room)s odasında başkan olarak görev alıyor." -#: participants/templates/current_round/round_adj.html:48 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is the chair adjudicating in %(room)s." -msgstr "" +msgstr "%(adjudicator)s %(room)s odasında başkan olarak görev alıyor." + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating in %(room)s." +msgstr "%(room)s odasında başkan olarak görev alıyorsunuz." -#: participants/templates/current_round/round_adj.html:52 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are the chair adjudicating in %(room)s." -msgstr "" +msgstr "%(room)s odasında başkan olarak görev alıyorsunuz." + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." +msgstr "%(adjudicator)s bir %(type)s olarak %(room)s odasında görevli." -#: participants/templates/current_round/round_adj.html:58 +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." -msgstr "" +msgstr "%(adjudicator)s bir %(type)s olarak %(room)s odasında görevli." + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating in %(room)s." +msgstr "Siz bir %(type)s olarak %(room)s odasında görevlisiniz." -#: participants/templates/current_round/round_adj.html:62 +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are a %(type)s adjudicating in %(room)s." -msgstr "" +msgstr "Siz bir %(type)s olarak %(room)s odasında görevlisiniz." -#: participants/templates/current_round/round_adj.html:68 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating in %(room)s." +msgstr "%(adjudicator)s %(room)s odasında görevli." + +#: participants/templates/current_round/round_adj.html #, python-format msgid "%(adjudicator)s is adjudicating in %(room)s." -msgstr "" +msgstr "%(adjudicator)s %(room)s odasında görevli." -#: participants/templates/current_round/round_adj.html:72 +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating in %(room)s." +msgstr "%(room)s odasında görevlisiniz." + +#: participants/templates/current_round/round_adj.html #, python-format msgid "You are adjudicating in %(room)s." -msgstr "" +msgstr "%(room)s odasında görevlisiniz." -#: participants/templates/current_round/round_team.html:12 +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating as the %(side)s team against %(opponent)s in %(room)s." -msgstr "" +msgid "%(team)s is debating as the %(side)s team against %(opponent)s." +msgstr "%(team)s takımı maçında %(side)s takımı olarak %(opponent)s takımına karşı." -#: participants/templates/current_round/round_team.html:16 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating as the %(side)s team against %(opponent)s in %(room)s." -msgstr "" +msgid "You are debating as the %(side)s team against %(opponent)s." +msgstr "Siz maçınızda %(side)s takımı olarak %(opponent)s takımına karşısınız." -#: participants/templates/current_round/round_team.html:22 +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating against %(opponent)s in %(room)s." -msgstr "" +msgid "%(team)s is debating against %(opponent)s." +msgstr "%(team)s maçta %(opponent)s rakibine karşı." -#: participants/templates/current_round/round_team.html:26 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating against %(opponent)s in %(room)s." -msgstr "" +msgid "You are debating against %(opponent)s." +msgstr "Maçınız %(opponent)s rakibine karşı." -#: participants/templates/current_round/round_team.html:37 +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating as the %(side)s team in %(room)s." -msgstr "" +msgid "%(team)s is debating as the %(side)s team." +msgstr "%(team)s takımı %(side)s takımı olarak maçta." -#: participants/templates/current_round/round_team.html:41 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating as the %(side)s team in %(room)s." -msgstr "" +msgid "You are debating as the %(side)s team." +msgstr "%(side)s olarak maçtasınız." -#: participants/templates/current_round/round_team.html:47 +#: participants/templates/current_round/round_team.html #, python-format -msgid "%(team)s is debating in %(room)s." -msgstr "" +msgid "%(team)s's debate is in %(room)s." +msgstr "%(team)s takımının maçı %(room)s odasında." -#: participants/templates/current_round/round_team.html:51 +#: participants/templates/current_round/round_team.html #, python-format -msgid "You are debating in %(room)s." -msgstr "" +msgid "%(team)s's debate is in %(room)s." +msgstr "%(team)s takımının tartışması %(room)s odasında." + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "Your debate is in %(room)s." +msgstr "Tartışmanız %(room)s odasında." + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "Your debate is in %(room)s." +msgstr "Tartışmanız %(room)s odasında." -#: participants/templates/edit_speaker_eligibility.html:7 +#: participants/templates/edit_speaker_eligibility.html #, python-format msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." -msgstr "" +msgstr "Herhangi bir konuşmacı kategorisi tanımlanmamış gibi görünüyor. Acemi veya ESL tabı gibi kategoriye özgü konuşmacı tabları oluşturmak istiyorsanız bunları tanımlamak için Konuşmacı Kategorileri sayfasını kullanın, ardından konuşmacı uygunluğunu ayarlamak için bu sayfaya dönün." -#: participants/templates/feedback_progress_panel.html:10 +#: participants/templates/feedback_progress_panel.html msgid "Feedback Returns" -msgstr "" +msgstr "Geri Bildirim İadeleri" -#: participants/templates/feedback_progress_panel.html:17 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has submitted feedback for %(adjudicator)s" -msgstr "" +msgstr "%(adjudicator)s için geri bildirim gönderdi" -#: participants/templates/feedback_progress_panel.html:25 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" -msgstr "" +msgstr "Aşağıdakilerden biri için geri bildirim göndermedi: %(adjudicators)s (sözlü kararı kim verdiyse)" -#: participants/templates/feedback_progress_panel.html:30 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Has not submitted feedback for %(adjudicator)s" -msgstr "" +msgstr "strong>%(adjudicator)s
    için geri bildirim göndermedi" -#: participants/templates/feedback_progress_panel.html:39 +#: participants/templates/feedback_progress_panel.html msgid "More feedback submissions than expected for this debate:" -msgstr "" +msgstr "Bu tartışma için beklenenden daha fazla geri bildirim gönderilidi:" -#: participants/templates/feedback_progress_panel.html:48 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "Unexpected feedback submission for %(adjudicator)s" -msgstr "" +msgstr "%(adjudicator)s için beklenmeyen geri bildirim gönderimi" -#: participants/templates/feedback_progress_panel.html:55 +#: participants/templates/feedback_progress_panel.html #, python-format msgid "%(name)s doesn't have any feedback to submit." -msgstr "" +msgstr "%(name)s'in gönderecek herhangi bir geri bildirimi yok." -#: participants/templates/in_this_round.html:8 +#: participants/templates/in_this_round.html #, python-format msgid "In This Round (%(round)s)" -msgstr "" +msgstr "Bu Tur (%(round)s)" + +#: participants/templates/in_this_round.html +msgid "In This Round" +msgstr "Bu Tur" -#: participants/templates/in_this_round.html:12 +#: participants/templates/in_this_round.html msgid "(Not Released to Public)" -msgstr "" +msgstr "(Halka Yayınlanmadı)" -#: participants/templates/in_this_round.html:19 +#: participants/templates/in_this_round.html msgid "Room TBA" -msgstr "" +msgstr "Oda Belirlenmedi" -#: participants/templates/in_this_round.html:31 +#: participants/templates/in_this_round.html #, python-format msgid "%(adjudicator)s is not adjudicating this round." -msgstr "" +msgstr "%(adjudicator)s bu tura dahil değil." -#: participants/templates/in_this_round.html:35 +#: participants/templates/in_this_round.html msgid "You are not adjudicating this round." -msgstr "" +msgstr "Bu tur jürisiniz." -#: participants/templates/in_this_round.html:50 +#: participants/templates/in_this_round.html #, python-format msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Görünüşe göre %(team)s, bu tur %(ndebates)s tartışmada yarışıyor." +msgstr[1] "Görünüşe göre %(team)s, bu tur %(ndebates)s tartışmada yarışıyor." -#: participants/templates/in_this_round.html:56 +#: participants/templates/in_this_round.html msgid "If this is an error, please contact a tab director immediately." -msgstr "" +msgstr "Bu bir hataysa, lütfen hemen bir tab yöneticisiyle iletişime geçin." -#: participants/templates/in_this_round.html:71 +#: participants/templates/in_this_round.html #, python-format msgid "%(team)s does not have a debate this round." -msgstr "" +msgstr "%(team)s'ın bu turda maçı yok." -#: participants/templates/in_this_round.html:75 +#: participants/templates/in_this_round.html msgid "You do not have a debate this round." -msgstr "" +msgstr "Bu tur maçınız yok." -#: participants/templates/in_this_round.html:87 +#: participants/templates/in_this_round.html msgid "The draw for this round hasn't yet been released." -msgstr "" +msgstr "Bu turun kurası henüz açıklanmadı." -#: participants/templates/participants_subnav.html:6 +#: participants/templates/participants_subnav.html msgid "Participants List" -msgstr "" +msgstr "Katılımcı Listesi" -#: participants/templates/participants_subnav.html:10 +#: participants/templates/participants_subnav.html msgid "Institutions List" -msgstr "" +msgstr "Kurum Listesi" -#: participants/templates/participants_subnav.html:15 +#: participants/templates/participants_subnav.html msgid "Emails have already been sent." -msgstr "" +msgstr "E-postalar zaten gönderildi." -#: participants/templates/participants_subnav.html:19 +#: participants/templates/participants_subnav.html msgid "Email Team Registrations" -msgstr "" +msgstr "Ekip Kayıtlarını E-postayla Gönder" -#: participants/templates/participants_subnav.html:26 participants/views.py:134 +#: participants/templates/participants_subnav.html participants/views.py msgid "Code Names" -msgstr "" +msgstr "Kod İsimler" -#: participants/templates/participants_subnav.html:31 -#: participants/templates/speaker_categories_edit.html:4 -#: participants/templates/speaker_categories_edit.html:5 +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html msgid "Speaker Categories" -msgstr "" +msgstr "konuşmacı kategorileri" -#: participants/templates/participants_subnav.html:35 +#: participants/templates/participants_subnav.html msgid "Speaker Eligibility" -msgstr "" +msgstr "Konuşmacı Uygunluğu" -#: participants/templates/speaker_categories_edit.html:16 +#: participants/templates/speaker_categories_edit.html msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." -msgstr "" +msgstr "Konuşmacı kategorileri, acemi veya ESL gibi kategoriye özgü konuşmacı tablarının üretilmesini sağlar. Bu sayfada, hangi konuşmacı kategorilerinin bulunduğunu tanımlayabilirsiniz. Kategorileri tanımladıktan sonra, Konuşmacı Uygunluğu sayfasından konuşmacı uygunluğunu ayarlayabilirsiniz." -#: participants/templates/speaker_categories_edit.html:23 +#: participants/templates/speaker_categories_edit.html #, python-format msgid "If you want to delete speaker categories, use the Edit Database area." -msgstr "" +msgstr "Konuşmacı kategorilerini silmek istiyorsanız, Edit Database alanını kullanın." -#: participants/templates/speaker_categories_edit.html:29 +#: participants/templates/speaker_categories_edit.html msgid "Save Speaker Categories" -msgstr "" +msgstr "Konuşmacı Kategorilerini Kaydet" -#: participants/templates/team_registration_card.html:14 +#: participants/templates/team_registration_card.html msgid "Team name:" -msgstr "" +msgstr "Takım adı:" -#: participants/templates/team_registration_card.html:14 -msgid "Full name:" -msgstr "" +#: participants/templates/team_registration_card.html +msgid "Full team name:" +msgstr "Tam takım adı:" + +#: participants/templates/team_registration_card.html +msgid "Short team name:" +msgstr "Kısa takım adı:" -#: participants/templates/team_registration_card.html:18 +#: participants/templates/team_registration_card.html msgid "Code name:" -msgstr "" +msgstr "Kod ad:" + +#: participants/templates/team_registration_card.html +msgid "No code name assigned" +msgstr "Kod adı yok" -#: participants/templates/team_registration_card.html:26 +#: participants/templates/team_registration_card.html +msgid "Emoji:" +msgstr "Emoji:" + +#: participants/templates/team_registration_card.html +msgid "No emoji assigned" +msgstr "Emoji yok" + +#: participants/templates/team_registration_card.html msgid "Speakers:" msgstr "Konuşmacılar:" -#: participants/templates/team_registration_card.html:37 +#: participants/templates/team_registration_card.html msgid "Eligible for break categories:" -msgstr "" +msgstr "Break kategorileri için uygun:" -#: participants/templates/team_registration_card.html:45 +#: participants/templates/team_registration_card.html msgid "Speaker categories:" -msgstr "" +msgstr "Konuşmacı kategorileri:" -#: participants/templatetags/team_name_for_data_entry.py:18 +#: participants/templatetags/team_name_for_data_entry.py #, python-format msgid "%(code_name)s (%(real_name)s)" -msgstr "" +msgstr "%(code_name)s (%(real_name)s)" -#: participants/views.py:45 +#: participants/views.py msgid "Adjudicators" msgstr "Jüriler" -#: participants/views.py:54 +#: participants/views.py msgid "Speakers" msgstr "Konuşmacılar" -#: participants/views.py:85 +#: participants/views.py msgid "Institutions" -msgstr "" +msgstr "Kurumlar" -#: participants/views.py:101 +#: participants/views.py msgid "Code" -msgstr "" +msgstr "Kod" -#: participants/views.py:102 +#: participants/views.py msgid "Full name" -msgstr "" +msgstr "Tam ad" -#: participants/views.py:104 +#: participants/views.py msgid "Region" msgstr "Bölge" -#: participants/views.py:106 +#: participants/views.py msgid "Teams" msgstr "Takımlar" -#: participants/views.py:106 +#: participants/views.py msgid "Number of teams" -msgstr "" +msgstr "Takım sayısı" -#: participants/views.py:108 +#: participants/views.py msgid "Adjs" -msgstr "" +msgstr "Jüriler" -#: participants/views.py:109 +#: participants/views.py msgid "Number of adjudicators, excluding independents" -msgstr "" +msgstr "Bağımsızlar hariç Jüri sayısı" -#: participants/views.py:111 +#: participants/views.py msgid "IAs" -msgstr "" +msgstr "BJ'ler" -#: participants/views.py:112 +#: participants/views.py msgid "Number of independent adjudicators" -msgstr "" +msgstr "Bağımsız Jüri sayısı" -#: participants/views.py:142 +#: participants/views.py msgid "Code name" -msgstr "" +msgstr "Kod ad" -#: participants/views.py:162 +#: participants/views.py msgid "Team Registration" -msgstr "" +msgstr "takım kaydı" -#: participants/views.py:208 +#: participants/views.py msgid "Results" -msgstr "" +msgstr "Sonuçlar" -#: participants/views.py:213 participants/views.py:247 +#: participants/views.py #, python-format msgid "Record for %(name)s" -msgstr "" +msgstr "%(name)s için kayıtlar" -#: participants/views.py:244 +#: participants/views.py msgid "Previous Rounds" -msgstr "" +msgstr "Önceki Turlar" -#: participants/views.py:333 +#: participants/views.py #, python-format msgid "Saved category: %(list)s" msgid_plural "Saved categories: %(list)s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Kaydedilen kategori: %(list)s" +msgstr[1] "Kaydedilen kategoriler: %(list)s" -#: participants/views.py:339 +#: participants/views.py msgid "No changes were made to the categories." -msgstr "" +msgstr "Kategorilerde herhangi bir değişiklik yapılmadı." -#: participants/views.py:352 +#: participants/views.py msgid "Speaker Category Eligibility" -msgstr "" +msgstr "Konuşmacı Kategori Uygunluğu" diff --git a/tabbycat/printing/locale/tr/LC_MESSAGES/django.po b/tabbycat/printing/locale/tr/LC_MESSAGES/django.po index 5c1b14d9334..7ef2b55c6dd 100644 --- a/tabbycat/printing/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/printing/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:36\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" "Last-Translator: philip_tc\n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -15,115 +15,111 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/printing/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 944\n" -#: printing/templates/feedback_list.html:5 +#: printing/templates/feedback_list.html msgid "Feedback Forms" -msgstr "" +msgstr "Geri Bildirim Formları" -#: printing/templates/feedback_list.html:7 +#: printing/templates/feedback_list.html #, python-format msgid "Printable Feedback Forms for %(round)s" -msgstr "" +msgstr "%(round)s için yazdırılabilir geri bildirim formları" -#: printing/templates/feedback_list.html:14 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for either teams or adjudicators to answer." -msgstr "" +msgstr "Ne takımların ne de jürilerin yanıtlaması için herhangi bir geri bildirim sorusu eklenmemiştir." -#: printing/templates/feedback_list.html:16 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for teams to answer." -msgstr "" +msgstr "Takımların yanıtlaması için herhangi bir geri bildirim sorusu eklenmemiştir." -#: printing/templates/feedback_list.html:18 +#: printing/templates/feedback_list.html msgid "No feedback questions have been added for adjudicators to answer." -msgstr "" +msgstr "Jürilerin yanıtlaması için herhangi bir geri bildirim sorusu eklenmemiştir." -#: printing/templates/feedback_list.html:20 +#: printing/templates/feedback_list.html #, python-format -msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." -msgstr "" +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgstr "%(first_sentence)s Bunların nasıl ekleneceği hakkında bilgi için belgeleri kontrol edin (aksi takdirde bu formlar oldukça boş kalır)." -#: printing/templates/feedback_list.html:41 +#: printing/templates/feedback_list.html msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" -msgstr "" +msgstr "Geri bildirim sayfası yok - belki de jüriler tahsis edilmedi?" -#: printing/templates/printables_list.html:9 +#: printing/templates/printables_list.html msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." -msgstr "" +msgstr "PDF'ye yazdırmak veya kaydetmek için Ctrl+P tuşlarını kullanın. üstbilgiler/altbilgiler'i kapatmak ve arka plan grafikleri'ni açmak için uygun sayfa yönü ayarladığınızdan emin olun. En iyi Chrome'da çalışır." -#: printing/templates/randomised_url_sheets.html:4 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Printable %(sheet)s URLs" -msgstr "" +msgstr "Yazdırılabilir %(sheet)s URL'leri" -#: printing/templates/randomised_url_sheets.html:13 -msgid "This page is designed to be printed as double sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." -msgstr "" +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +msgstr "Bu sayfa, dışa bakan tarafı katılımcı adını, iç tarafı URL'yi gösterecek şekilde çift taraflı A4 sayfaları olarak yazdırılacak şekilde tasarlanmıştır. Yazdırmak için CTRL-P tuşlarını kullanın; en iyi sonuçlar için Chrome'u kullanın." -#: printing/templates/randomised_url_sheets.html:27 -#: printing/templates/randomised_url_sheets.html:31 +#: printing/templates/randomised_url_sheets.html #, python-format msgid "Private URL for %(name)s (%(group)s)" -msgstr "" +msgstr "%(name)s (%(group)s) için özel URL" -#: printing/templates/randomised_url_sheets.html:38 +#: printing/templates/randomised_url_sheets.html msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" -msgstr "" +msgstr "Lütfen aşağıdaki URL'yi yer imlerine ekleyin, turnuva boyunca form göndermek için kullanacaksınız:" -#: printing/templates/scoresheet_list.html:7 +#: printing/templates/scoresheet_list.html msgid "Printable Scoresheets" -msgstr "" +msgstr "Yazdırılabilir Sonuç Kağıtları" -#: printing/templates/scoresheet_list.html:8 +#: printing/templates/scoresheet_list.html #, python-format msgid "for %(round)s" -msgstr "" +msgstr "%(round)s için" -#: printing/templates/scoresheet_list.html:14 +#: printing/templates/scoresheet_list.html msgid "Edit Motion(s)" -msgstr "" +msgstr "Önergeleri Düzenle" -#: printing/templates/scoresheet_list.html:33 +#: printing/templates/scoresheet_list.html msgid "There are no scoresheets available — perhaps the round has not been drawn?" -msgstr "" +msgstr "Mevcut sonuç kağıdı yok - belki de kura çekilmedi?" -#: printing/templates/scoresheet_list.html:40 +#: printing/templates/scoresheet_list.html msgid "Edit Ballot Motions" -msgstr "" +msgstr "Ballot Önergelerini Düzenle" -#: printing/templates/scoresheet_list.html:42 +#: printing/templates/scoresheet_list.html msgid "×" msgstr "" -#: printing/templates/scoresheet_list.html:47 -msgid "\n" -" Editing motions here will not save them permanently — it will only\n" -" update the text used in the printed ballots below. This can be useful if using\n" -" placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print\n" -" ballots with correct motions.\n" -" " -msgstr "" +#: printing/templates/scoresheet_list.html +msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." +msgstr "Burada önergeleri düzenlemek onları kalıcı olarak kaydetmez - yalnızca aşağıdaki basılı ballotlarda kullanılan metni günceller. Bu, Tabbycat'te yer tutucu önergeler (gizliliği sağlamak için) kullanıyorsanız, ancak yine de doğru önergelerle ballotları yazdırmak istiyorsanız yararlı olabilir." -#: printing/templates/scoresheet_list.html:55 +#: printing/templates/scoresheet_list.html msgid "Motion" msgstr "Önerge" -#: printing/templates/scoresheet_list.html:59 +#: printing/templates/scoresheet_list.html msgid "Changes to motions will update in the displayed ballots automatically" -msgstr "" +msgstr "Önergelerdeki değişiklikler, görüntülenen ballotlarda otomatik olarak güncellenecektir" -#: printing/templates/scoresheet_list.html:96 +#: printing/templates/scoresheet_list.html msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." -msgstr "" +msgstr "Konuşmalar x dakikadır, konuşmacı puan aralığı x'ten x'e kadardır. Bir karar oluşturmak için x dakikanız var." -#: printing/views.py:40 +#: printing/views.py msgid "Overall Score" -msgstr "" +msgstr "Genel Skor" -#: printing/views.py:67 printing/views.py:177 printing/views.py:197 +#: printing/views.py msgid "Unaffiliated" -msgstr "" +msgstr "Bağımsız" -#: printing/views.py:80 printing/views.py:84 +#: printing/views.py msgid "Team" msgstr "Takım" diff --git a/tabbycat/privateurls/locale/tr/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/tr/LC_MESSAGES/django.po index 3bea657fad3..347176abc6b 100644 --- a/tabbycat/privateurls/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/privateurls/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:36\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" "Last-Translator: philip_tc\n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -15,166 +15,165 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/privateurls/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 946\n" -#: privateurls/apps.py:7 +#: privateurls/apps.py msgid "Private URL Management" -msgstr "" +msgstr "Özel URL Yönetimi" -#: privateurls/templates/private_urls.html:4 -#: privateurls/templates/private_urls.html:5 privateurls/views.py:144 +#: privateurls/templates/private_urls.html privateurls/views.py msgid "Private URLs" -msgstr "" +msgstr "Özel URL'ler" -#: privateurls/templates/private_urls.html:17 +#: privateurls/templates/private_urls.html msgid "The private URLs for ballot and/or feedback submission from participants are given below." -msgstr "" +msgstr "Ballot ve/veya katılımcılardan geri bildirim gönderimi için özel URL'ler aşağıda verilmiştir." -#: privateurls/templates/private_urls.html:19 +#: privateurls/templates/private_urls.html msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" -msgstr "" +msgstr "Özel URL'ler, katılımcıların çevrimiçi ballot ve/veya geri bildirim göndermelerine izin vermek için kullanılır. Katılımcılara garip görünümlü URL'ler dağıtmanın bir yolu varsa ve sahtekarlık konusunda herkesin herhangi bir gönderimini girebileceği herkese açık bir sayfa kullanmak için çok endişeliyseniz bunları kullanmalısınız. URL'ler şuna benzer şekilde görünür:" -#: privateurls/templates/private_urls.html:31 -msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." -msgstr "" +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +msgstr "URL'ye sahip olan herkes ilgili veri giriş sayfasına erişebilir. Buradaki fikir, başka bir anahtarı (rastgele görünen dize) tahmin etmenin zor olmasıdır, bu nedenle her URL'yi yalnızca söz konusu katılımcı için erişilebilir hale getirmelisiniz. Özel URL'ler hakkında daha fazla bilgi edinin." -#: privateurls/templates/private_urls.html:47 +#: privateurls/templates/private_urls.html #, python-format msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." -msgstr "" +msgstr "katılımcı ballot gönderimleri, katılımcı geri bildirim gönderimleri ve katılımcı kendi başına girişleri özel URL'lerden olacak şekilde yapılandırılmamıştır. Oluşturulan URL'ler, bu ayarları turnuva ayarlama sayfasında uygun şekilde yapılandırmadığınız sürece yararlı olmayacaktır." -#: privateurls/templates/private_urls.html:67 +#: privateurls/templates/private_urls.html msgid "There are no private URLs assigned." -msgstr "" +msgstr "Atanmış özel URL yoktur." -#: privateurls/templates/private_urls.html:73 +#: privateurls/templates/private_urls.html msgid "Generate Private URLs" -msgstr "" +msgstr "Özel URL'ler oluştur" -#: privateurls/templates/private_urls_nav.html:6 +#: privateurls/templates/private_urls_nav.html msgid "View URLs" -msgstr "" +msgstr "URL'leri görüntüle" -#: privateurls/templates/private_urls_nav.html:11 +#: privateurls/templates/private_urls_nav.html msgid "Print Teams' URLs" -msgstr "" +msgstr "Takımların URL'lerini yazdır" -#: privateurls/templates/private_urls_nav.html:15 +#: privateurls/templates/private_urls_nav.html msgid "Print Adjudicators' URLs" -msgstr "" +msgstr "Jürilerin URL'lerini yazdır" -#: privateurls/templates/private_urls_nav.html:22 +#: privateurls/templates/private_urls_nav.html msgid "All reachable participants have already been sent their private URLs." -msgstr "" +msgstr "Ulaşılabilir tüm katılımcılara özel URL'leri zaten gönderildi." -#: privateurls/templates/private_urls_nav.html:24 +#: privateurls/templates/private_urls_nav.html msgid "Email URLs" -msgstr "" +msgstr "URL'leri e-postala" -#: privateurls/templates/private_urls_nav.html:31 +#: privateurls/templates/private_urls_nav.html msgid "This button only generates private URLs for participants who do not already have one." -msgstr "" +msgstr "Bu yalnızca henüz özel URL'si olmayan katılımcılar için özel URL oluşturur." -#: privateurls/templates/private_urls_nav.html:32 -#: privateurls/templates/private_urls_nav.html:39 +#: privateurls/templates/private_urls_nav.html msgid "Generate URLs" -msgstr "" +msgstr "URL'ler oluştur" -#: privateurls/templates/private_urls_nav.html:38 +#: privateurls/templates/private_urls_nav.html msgid "All participants already have private URLs." -msgstr "" +msgstr "Tüm katılımcıların zaten özel URL'leri var." -#: privateurls/templates/public_url_landing.html:4 -#: privateurls/templates/public_url_landing.html:5 +#: privateurls/templates/public_url_landing.html msgid "Private URL" -msgstr "" +msgstr "Özel URL" -#: privateurls/templates/public_url_landing.html:10 +#: privateurls/templates/public_url_landing.html #, python-format msgid "for %(name)s" -msgstr "" +msgstr "%(name)s için" -#: privateurls/templates/public_url_landing.html:12 +#: privateurls/templates/public_url_landing.html #, python-format msgid "(%(team)s)" msgstr "(%(team)s)" -#: privateurls/templates/public_url_landing.html:18 +#: privateurls/templates/public_url_landing.html #, python-format msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." -msgstr "" +msgstr "Bu sayfanın URL'si sizin için kişiseldir, %(name)s. Kimseyle paylaşmayın; bu URL'yi bilen herkes tartışmalarınız için sonuç ve/veya geri bildirim gönderebilir. Bu sayfayı yer imlerine ekleyebilir ve mevcut eylemler için her maçtan sonra buraya dönebilirsiniz." -#: privateurls/templates/public_url_landing.html:37 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Revoke check-in from %(check_time)s" -msgstr "" +msgstr "%(check_time)s'den itibaren girişleri iptal et" -#: privateurls/templates/public_url_landing.html:42 +#: privateurls/templates/public_url_landing.html msgid "Check in" -msgstr "" +msgstr "Giriş" #. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. -#: privateurls/templates/public_url_landing.html:49 +#: privateurls/templates/public_url_landing.html #, python-format msgid "You have been checked in at %(check_time)s" -msgstr "" +msgstr "%(check_time)s zamanında giriş yaptınız." -#: privateurls/templates/public_url_landing.html:54 +#: privateurls/templates/public_url_landing.html msgid "You are not currently checked in." -msgstr "" +msgstr "Şu anda giriş yapmadınız." -#: privateurls/templates/public_url_landing.html:61 -msgid "Submit Ballot" -msgstr "" +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Submit Ballot for %(round)s" +msgstr "%(round)s için ballot gönder" -#: privateurls/templates/public_url_landing.html:67 -#: privateurls/templates/public_url_landing.html:73 +#: privateurls/templates/public_url_landing.html msgid "Submit Feedback" msgstr "Geri Bildirim Yolla" -#: privateurls/templates/public_url_landing.html:82 +#: privateurls/templates/public_url_landing.html #, python-format msgid "Registration (%(name)s)" -msgstr "" +msgstr "Kayıt (%(name)s)" -#: privateurls/views.py:62 +#: privateurls/views.py msgid "no URL" -msgstr "" +msgstr "URL yok" -#: privateurls/views.py:75 +#: privateurls/views.py msgid "URL" -msgstr "" +msgstr "URL" -#: privateurls/views.py:86 +#: privateurls/views.py msgid "Speakers" msgstr "Konuşmacılar" -#: privateurls/views.py:96 +#: privateurls/views.py msgid "Adjudicators" msgstr "Jüriler" -#: privateurls/views.py:118 +#: privateurls/views.py msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." -msgstr "" +msgstr "Tüm katılımcıların zaten özel URL'leri var. Bunları silmek istiyorsanız, Veritabanını Düzenle alanını kullanın." -#: privateurls/views.py:125 +#: privateurls/views.py #, python-format msgid "A private URL was generated for %(nblank_people)d person." msgid_plural "Private URLs were generated for all %(nblank_people)d people." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(nblank_people)d kişisi için özel bir URL oluşturuldu." +msgstr[1] "Özel URL'ler tüm %(nblank_people)d kişileri için oluşturulmuştur." -#: privateurls/views.py:130 +#: privateurls/views.py #, python-format msgid "The already-existing private URL for %(nexisting_people)d person was left intact." msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(nexisting_people)d kişinin zaten var olan özel URL'si olduğu gibi bırakılmıştır." +msgstr[1] "%(nexisting_people)d kişilerinin zaten var olan özel URL'si olduğu gibi bırakılmıştır." -#: privateurls/views.py:161 +#: privateurls/views.py msgid "URL Key" -msgstr "" +msgstr "URL anahtarı" -#: privateurls/views.py:174 +#: privateurls/views.py msgid "Debates" -msgstr "" +msgstr "Maçlar" diff --git a/tabbycat/results/locale/tr/LC_MESSAGES/django.po b/tabbycat/results/locale/tr/LC_MESSAGES/django.po index 17bfbc64f6d..445e7b964c1 100644 --- a/tabbycat/results/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:33\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" "Last-Translator: philip_tc\n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -15,971 +15,1081 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/results/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 948\n" -#: results/apps.py:7 results/templates/public_results_index.html:4 -#: results/templates/public_results_index.html:5 results/views.py:112 +#: results/admin.py +msgid "Resave results" +msgstr "Sonuçları yeniden kaydet" + +#: results/admin.py +#, python-format +msgid "Resaved results for %(count)d ballot submission." +msgid_plural "Resaved results for %(count)d ballot submissions." +msgstr[0] "%(count)d ballot gönderimi için sonuçlar yeniden kaydedildi." +msgstr[1] "%(count)d ballot gönderimi için sonuçlar yeniden kaydedildi." + +#: results/apps.py results/templates/public_results_index.html results/views.py msgid "Results" -msgstr "" +msgstr "Sonuçlar" + +#: results/forms.py +msgid "Tournament password" +msgstr "Turnuva Parolası" -#: results/forms.py:44 +#: results/forms.py msgid "That password isn't correct." -msgstr "" +msgstr "Bu parola doğru değil." -#: results/forms.py:76 +#: results/forms.py msgid "Please enter a whole number." -msgstr "" +msgstr "Lütfen bir tam sayı girin." -#: results/forms.py:78 +#: results/forms.py #, python-format msgid "Please enter a multiple of %s." -msgstr "" +msgstr "Lütfen %s'in katını girin." -#: results/forms.py:157 +#: results/forms.py msgid "The ballot set can't be both discarded and confirmed." -msgstr "" +msgstr "Ballotlar aynı anda hem ıskarta edilip hem de onaylanamaz." -#: results/forms.py:163 +#: results/forms.py msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." -msgstr "" +msgstr "Ballotların biri onaylanmadıkça maç durumu onaylanamaz." -#: results/forms.py:299 +#: results/forms.py msgid "---------" msgstr "" -#: results/forms.py:301 results/forms.py:303 +#: results/forms.py #, python-format msgid "%(aff_team)s affirmed, %(neg_team)s negated" -msgstr "" +msgstr "%(aff_team)s onaylandı, %(neg_team)s reddedildi" -#: results/forms.py:320 +#: results/forms.py #, python-format msgid "%(side)s's motion veto" -msgstr "" +msgstr "%(side)s tarafının önerge vetosu" + +#: results/forms.py +#, python-format +msgid "%(team)s (%(side)s)" +msgstr "%(team)s (%(side)s)" + +#: results/forms.py +msgid "Winner" +msgstr "Galip" -#: results/forms.py:337 +#: results/forms.py msgid "Mark as a duplicate speech" -msgstr "" +msgstr "Yinelenen konuşma olarak işaretle" -#: results/forms.py:472 +#: results/forms.py #, python-format msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." -msgstr "" +msgstr "Konuşmacı %(speaker)s, %(team)s takımında görünmüyor." -#: results/forms.py:486 +#: results/forms.py #, python-format msgid "%(speaker)s appears to have given %(count)d substantive speech." msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(speaker)s, %(count)d tane ana konuşma vermiş gibi görünüyor." +msgstr[1] "%(speaker)s, %(count)d tane ana konuşma vermiş gibi görünüyor." -#: results/forms.py:503 +#: results/forms.py msgid "The last substantive speaker and reply speaker can't be the same." -msgstr "" +msgstr "Son ana konuşmacı ve özet konuşmacı aynı olamaz." -#: results/forms.py:510 +#: results/forms.py msgid "The reply speaker for this team did not give a substantive speech." -msgstr "" +msgstr "Bu takımın özet konuşmacısı ana konuşma yapmadı." -#: results/forms.py:663 +#: results/forms.py msgid "The total scores for the teams are the same (i.e. a draw)." -msgstr "" +msgstr "Takımların toplam puanları aynı(yani beraberlik)." + +#: results/forms.py +msgid "The declared winner does not correspond to the team with the highest score." +msgstr "İlan edilen kazanan, en yüksek puana sahip takıma karşılık değil." -#: results/forms.py:672 +#: results/forms.py #, python-format msgid "The total scores for the following teams are the same: %(teams)s" -msgstr "" +msgstr "Aşağıdaki takımların toplam puanları aynıdır: %(teams)s" -#: results/forms.py:682 +#: results/forms.py #, python-format msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." -msgstr "" +msgstr "Kenar boşluğu (%(margin).1f), izin verilen maksimum marjı (%(max_margin).1f) aşıyor." -#: results/forms.py:759 +#: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." -msgstr "" +msgstr "Jürilerin toplam puanları, %(adjudicator)s jürileri için aynıdır (yani beraberlik)." -#: results/forms.py:767 +#: results/forms.py #, python-format -msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." -msgstr "" +msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." +msgstr "İlan edilen kazanan, en yüksek jüri %(adjudicator)s puanına sahip takıma karşılık değil." -#: results/forms.py:799 +#: results/forms.py #, python-format -msgid "%(team)s (%(side)s)" -msgstr "%(team)s (%(side)s)" +msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." +msgstr "adjudicator %(adjudicator)s'ın ballotundaki kenar boşluğu (%(margin).1f), izin verilen maksimum marjı (%(max_margin).1f) aşıyor." -#: results/forms.py:813 +#: results/forms.py msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." -msgstr "" +msgstr "Bu tartışmanın tarafları doğrulanmadı. Taraflar kurada onaylanana kadar bu tartışma için bir sonuç kaydedemezsiniz." -#: results/forms.py:820 -msgid "There must be exactly two teams advancing." -msgstr "" +#: results/forms.py +#, python-format +msgid "There must be exactly %(n)d team advancing." +msgid_plural "There must be exactly %(n)d teams advancing." +msgstr[0] "Tam olarak %(n)d takım ilerlemelidir." +msgstr[1] "Tam olarak %(n)d takım ilerlemelidir." + +#: results/forms.py +msgid "There must be exactly 1 team advancing." +msgstr "Tam olarak 1 takım ilerlemeli." -#: results/models.py:32 +#: results/models.py msgid "Tab room" -msgstr "" +msgstr "Tab odası" -#: results/models.py:33 +#: results/models.py msgid "Public" -msgstr "" +msgstr "Herkese açık" -#: results/models.py:37 +#: results/models.py msgid "timestamp" -msgstr "" +msgstr "Zaman damgası" -#: results/models.py:39 +#: results/models.py msgid "version" -msgstr "" +msgstr "Sürüm" -#: results/models.py:41 +#: results/models.py msgid "submitter type" -msgstr "" +msgstr "gönderen türü" -#: results/models.py:43 +#: results/models.py msgid "confirmed" -msgstr "" +msgstr "onaylanmış" + +#: results/models.py +msgid "from private URL" +msgstr "özel URL'den" -#: results/models.py:48 +#: results/models.py +msgid "from participant" +msgstr "katılımcıdan" + +#: results/models.py msgid "submitter" -msgstr "" +msgstr "gönderen" -#: results/models.py:51 +#: results/models.py msgid "confirmer" -msgstr "" +msgstr "onaylayan" -#: results/models.py:53 +#: results/models.py msgid "confirm timestamp" -msgstr "" +msgstr "zaman damgasını onayla" -#: results/models.py:55 +#: results/models.py msgid "IP address" msgstr "" -#: results/models.py:92 +#: results/models.py msgid "A tab room ballot must have a user associated." -msgstr "" +msgstr "Bir tab odası ballotunın ilişkili bir kullanıcısı bulunmalıdır." -#: results/models.py:100 +#: results/models.py msgid "debate" msgstr "maç" -#: results/models.py:102 +#: results/models.py msgid "motion" msgstr "önerge" -#: results/models.py:104 +#: results/models.py msgid "discarded" -msgstr "" +msgstr "ıskarta edilmiş" + +#: results/models.py +msgid "single adjudicator" +msgstr "tek jüri" -#: results/models.py:108 results/models.py:188 results/models.py:226 -#: results/models.py:268 +#: results/models.py +msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." +msgstr "Bu gönderimin, bireysel jüri ballotları etkinleştirildiğinde, bir panelde yalnızca gönderen jüriyi temsil edip etmediği." + +#: results/models.py msgid "ballot submission" -msgstr "" +msgstr "ballot teslimi" -#: results/models.py:109 +#: results/models.py msgid "ballot submissions" -msgstr "" +msgstr "ballot başvuruları" -#: results/models.py:128 +#: results/models.py #, python-format msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" -msgstr "" +msgstr "Tartışma %(tur)d turundadır, ancak önerge (%(motion)s) %(motion_round)d turdan." -#: results/models.py:135 +#: results/models.py msgid "A ballot can't be both confirmed and discarded!" -msgstr "" +msgstr "Bir ballot aynı anda hem onaylanıp hem de ıskarta edilemez!" -#: results/models.py:190 +#: results/models.py msgid "debate adjudicator" -msgstr "" +msgstr "Maç jürisi" -#: results/models.py:192 results/models.py:228 results/models.py:270 +#: results/models.py msgid "debate team" -msgstr "" +msgstr "tartışma ekibi" + +#: results/models.py +msgid "win" +msgstr "galibiyet" -#: results/models.py:193 results/models.py:237 results/models.py:273 +#: results/models.py +msgid "margin" +msgstr "marj" + +#: results/models.py msgid "score" -msgstr "" +msgstr "Puan" + +#: results/models.py +msgid "team score by adjudicator" +msgstr "jüriye göre takım skoru" + +#: results/models.py +msgid "team scores by adjudicator" +msgstr "jüriye göre takım skorları" -#: results/models.py:194 results/models.py:274 +#: results/models.py +msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." +msgstr "Maç takımı, maç jürisi ve ballot gönderimi aynı maçla ilgili olmalıdır." + +#: results/models.py msgid "position" -msgstr "" +msgstr "konum" -#: results/models.py:200 +#: results/models.py msgid "speaker score by adjudicator" -msgstr "" +msgstr "jüriye göre konuşmacı puanı" -#: results/models.py:201 +#: results/models.py msgid "speaker scores by adjudicator" -msgstr "" +msgstr "jüriye göre konuşmacı puanları" -#: results/models.py:215 -msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." -msgstr "" - -#: results/models.py:231 +#: results/models.py msgid "points" -msgstr "puanları" - -#: results/models.py:233 -msgid "win" -msgstr "" - -#: results/models.py:235 -msgid "margin" -msgstr "" +msgstr "puanlar" -#: results/models.py:239 +#: results/models.py msgid "votes given" -msgstr "" +msgstr "verilen oylar" -#: results/models.py:241 +#: results/models.py msgid "votes possible" -msgstr "" +msgstr "olası oylar" + +#: results/models.py +msgid "has ghost score" +msgstr "gölge puanı var" -#: results/models.py:245 +#: results/models.py msgid "team score" -msgstr "" +msgstr "takım puanı" -#: results/models.py:246 +#: results/models.py msgid "team scores" -msgstr "" +msgstr "takım puanları" -#: results/models.py:272 +#: results/models.py msgid "speaker" msgstr "konuşmacı" -#: results/models.py:276 +#: results/models.py msgid "ghost" -msgstr "" +msgstr "gölge" -#: results/models.py:277 +#: results/models.py msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." -msgstr "" +msgstr "İşaretlenirse, bu puan konuşmacı tabına dahil edilmez. Bu genellikle birinin eksik bir takım arkadaşını telafi etmek için iki kez konuştuğu konuşmalar için kullanılır (bazen \"demir kişi\" veya \"demir adam\" konuşmaları olarak da bilinir)." -#: results/models.py:286 +#: results/models.py msgid "speaker score" -msgstr "" +msgstr "konuşmacı puanı" -#: results/models.py:287 +#: results/models.py msgid "speaker scores" -msgstr "" +msgstr "konuşmacı puanları" -#: results/models.py:296 +#: results/models.py msgid "The debate team and speaker must be from the same team." -msgstr "" +msgstr "Tartışma takımı ve konuşmacı aynı takımdan olmalıdır." -#: results/models.py:299 +#: results/models.py msgid "The ballot submission and debate team must relate to the same debate." -msgstr "" +msgstr "Ballot teslimi ve tartışma takımı aynı maçla ilgili olmalıdır." -#: results/tables.py:17 +#: results/tables.py msgid "Whether this debate's ballot has been checked in" -msgstr "" +msgstr "Bu maçın ballotlarının kontrol edilip edilmediği" -#: results/tables.py:38 +#: results/tables.py msgid "Status of this debate's ballot" -msgstr "" +msgstr "Bu maçın ballot durumu" -#: results/templates/admin_results.html:6 +#: results/templates/admin_results.html msgid "Display Draw" -msgstr "" +msgstr "Kurayı Göster" -#: results/templates/admin_results.html:9 +#: results/templates/admin_results.html msgid "Check-In Ballots" -msgstr "" +msgstr "Ballotları Giriş Yap" -#: results/templates/admin_results.html:12 +#: results/templates/admin_results.html msgid "Recent 'Iron-Persons'" -msgstr "" +msgstr "Yakın zamanlardaki 'Demir Kişiler'" -#: results/templates/admin_results.html:20 +#: results/templates/admin_results.html msgid "Teams who have recently missed a speaker" -msgstr "" +msgstr "Yakın zamanda bir konuşmacıyı kaçıran takımlar" -#: results/templates/admin_results.html:36 +#: results/templates/admin_results.html #, python-format msgid "A speaker from %(team)s gave multiple speeches in the previous round" -msgstr "" +msgstr "%(team)s takımından bir konuşmacı bir önceki tur birden fazla konuşma yaptı" -#: results/templates/admin_results.html:43 +#: results/templates/admin_results.html #, python-format -msgid "\n" -" A speaker from %(team)s gave multiple speeches in the current round\n" -" " -msgstr "" +msgid "A speaker from %(team)s gave multiple speeches in the current round" +msgstr "%(team)s takımından bir konuşmacı bu tur birden fazla konuşma yaptı" -#: results/templates/admin_results.html:52 +#: results/templates/admin_results.html msgid "No known cases in the current or previous round" -msgstr "" +msgstr "Mevcut veya önceki turda bilinen vaka yok" -#: results/templates/admin_results.html:66 +#: results/templates/admin_results.html msgid "Complete Round" -msgstr "" +msgstr "Turu Tamamla" -#: results/templates/admin_results.html:76 +#: results/templates/admin_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." -msgstr "" +msgstr "Bu sayfa, yeni ballot girişleri ve iadeler gerçekleştikçe otomatik olarak güncellenir. Bununla birlikte, turu ilerletmek için tüm ballotları tamamlandıktan sonra yeniden yüklemeniz gerekecektir." + +#: results/templates/admin_results.html +#, python-format +msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." +msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." +msgstr[0] "Aşağıdaki tartışmada acemilerin sonuç kağıtları var gibi görünüyor: %(debates_list)s." +msgstr[1] "Aşağıdaki %(ndebates)s tartışmalarında stajyerlerin puan tabloları var gibi görünüyor: %(debates_list)s." -#: results/templates/admin_results.html:81 +#: results/templates/admin_results.html +#, python-format +msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." +msgstr "Bu durum, bir panelisti bu tartışma için bir sonuç gönderildikten sonra acemi seviyesine indirirseniz gerçekleşebilir. Bu, sonuç verilerinde beklenmeyen sonuçlara (veya çökmelere) neden olabilecek bir tutarsızlık olduğunu gösterebilir. Lütfen Veritabanı Düzenle alanına gidip problem yaratan \"jüri tarafından konuşmacı paunları\" nesnelerini silmeyi ve ardından sonucu burada açıp yeniden kaydetmeyi düşünün." + +#: results/templates/admin_results.html +msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." +msgstr "Bu turdaki bir veya daha fazla maçta birden fazla onaylanmış ballot gönderimi var gibi görünüyor. Bu, beklenmedik sonuçlara (veya çökmelere) neden olabilir, çünkü Tabbycat her maçın en fazla bir onaylanmış ballot gönderimine sahip olduğunu varsayar. Bu tutarsızlık genellikle yalnızca veritabanını doğrudan SQL sorgularıyla işlerseniz ortaya çıkabilir. Sıkıntı yaratan maçları ve ballot gönderimlerini Veritabanını Düzenle alanında kendiniz bulmanız gerekir veya bu işe yaramazsa, bunları doğrudan SQL sorgularını kullanarak bulmanız gerekebilir." + +#: results/templates/admin_results.html #, python-format msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." -msgstr "" +msgstr "Bu turnuvanın yapılandırması İngiliz Parlamenteri ve oy veren jüri başına bir ballot olarak ayarlanmıştır. Bu kombinasyona izin verilmez: İP turnuvaları konsensüs oylarını kullanmalıdır. Bu yapılandırma yürürlükteyken sonuçlar girilemez. Lütfen sonuçları girmeye çalışmadan önce Bu turnuvanın yapılandırmasını revize edin." -#: results/templates/admin_results.html:89 +#: results/templates/admin_results.html #, python-format msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." -msgstr "" +msgstr "Şu anda bu tur için herhangi bir önerge girilmemiştir, bu nedenle maç sonuçları girilemez. Önerge Ekle." -#: results/templates/admin_results.html:98 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." -msgstr "" +msgstr "Turnuva yapılandırmanız, ballotların jüriler tarafından çevrimiçi olarak gönderilmesine izin verir. Bu turda kura yayınlanmalıdır." -#: results/templates/admin_results.html:105 +#: results/templates/admin_results.html #, python-format msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." -msgstr "" +msgstr "Turnuva yapılandırmanız, geri bildirimlerin katılımcılar tarafından çevrimiçi olarak gönderilmesine izin verir. Bu turda kura yayınlanmalıdır." -#: results/templates/assistant_enter_results.html:7 -#: results/templates/ballot_entry_base.html:30 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Back to All Results" -msgstr "" +msgstr "Tüm Sonuçlara Geri Dön" -#: results/templates/assistant_enter_results.html:11 -#: results/templates/ballot_entry_base.html:35 -#: results/templates/ballot_entry_base.html:39 +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html msgid "Create a new ballot set for this debate" -msgstr "" +msgstr "Bu tartışma için yeni bir ballot seti oluştur" -#: results/templates/assistant_enter_results.html:33 +#: results/templates/assistant_enter_results.html msgid "You can't confirm this ballot set because you entered it." -msgstr "" +msgstr "Bu ballot setini girdiğiniz için onaylayamazsınız." -#: results/templates/assistant_enter_results.html:41 +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "Bu ballot setini onaylayamazsınız çünkü tek bir jüri için. Birleştirme işlevini kullanın." + +#: results/templates/assistant_enter_results.html msgid "Confirm results" -msgstr "" +msgstr "Sonuçları onayla" -#: results/templates/assistant_enter_results.html:44 +#: results/templates/assistant_enter_results.html msgid "Results are incorrect" -msgstr "" +msgstr "Sonuçlar yanlış" -#: results/templates/assistant_enter_results.html:49 -#: results/templates/enter_results.html:53 -#: results/templates/public_enter_results.html:74 +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html msgid "Emails will be sent to adjudicators when the ballot is confirmed." -msgstr "" +msgstr "Ballot onaylandığında jürilere e-posta gönderilecektir." -#: results/templates/assistant_results.html:4 -#: results/templates/assistant_results.html:5 +#: results/templates/assistant_results.html results/views.py msgid "Enter Results" -msgstr "" +msgstr "Sonuç Gir" -#: results/templates/assistant_results.html:12 +#: results/templates/assistant_results.html msgid "This page automatically updates with the new ballot entries and checkins as they occur." -msgstr "" +msgstr "Bu sayfa, yeni ballot verileri ve girişler gerçekleştikçe otomatik olarak güncellenir." -#: results/templates/assistant_results.html:16 +#: results/templates/assistant_results.html msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." -msgstr "" +msgstr "Bu turnuvanın yapılandırması İngiliz Parlamenteri ve oy veren jüri başına bir ballot olarak ayarlanmıştır. Bu kombinasyona izin verilmez: İP turnuvaları konsensüs oylarını kullanmalıdır. Bu yapılandırma yürürlükteyken sonuçlar girilemez. Lütfen bir yöneticiye danışın." -#: results/templates/assistant_results.html:23 +#: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." -msgstr "" +msgstr "Şu anda bu tur için herhangi bir önerge girilmemiştir, bu nedenle maç sonuçları girilemez. Lütfen bir yöneticiye danışın." -#: results/templates/assistant_results.html:33 +#: results/templates/assistant_results.html #, python-format msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Bir tartışmanın tarafları doğrulanmamıştır. Bu tartışmanın sonuçları, taraf tahsisleri onaylandı olarak işaretlenene kadar girilemez." +msgstr[1] "%(ndebates)s tartışmasının tarafları doğrulanmamıştır. Bu tartışmanın sonuçları, taraf tahsisleri onaylandı olarak işaretlenene kadar girilemez." -#: results/templates/assistant_results.html:44 +#: results/templates/assistant_results.html #, python-format msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Bir maçta, eşit sayıda oylayan jürinin bulunduğu bir panel var. Jüriler eşit olarak bölünürse, başkanın oy kullandığı takım kazanır." +msgstr[1] "%(num_even_panel)s maçta, eşit sayıda oylayan jürinin bulunduğu bir panel var. Jüriler eşit olarak bölünürse, başkanın oy kullandığı takım kazanır." -#: results/templates/ballot/ballot_debate_info.html:6 +#: results/templates/ballot/ballot_debate_info.html msgid "Debate Information" -msgstr "" +msgstr "Maç Bilgileri" -#: results/templates/ballot/ballot_debate_info.html:41 +#: results/templates/ballot/ballot_debate_info.html msgid "No speakers spoke twice (no 'iron-person' speeches)" -msgstr "" +msgstr "Hiçbir konuşmacı iki kez konuşmadı ('demir kişi' konuşması yok)" -#: results/templates/ballot/ballot_debate_info.html:44 +#: results/templates/ballot/ballot_debate_info.html msgid "A speaker spoke twice (an 'iron-person' speech)" -msgstr "" +msgstr "Bir konuşmacı iki kez konuştu ('demir kişi' konuşması)" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Result" -msgstr "" +msgstr "Sonuç" -#: results/templates/ballot/ballot_scoresheet.html:28 +#: results/templates/ballot/ballot_scoresheet.html msgid "Rank" msgstr "Sıralama" -#: results/templates/ballot/ballot_scoresheet.html:34 +#: results/templates/ballot/ballot_scoresheet.html msgid "Margin" -msgstr "" +msgstr "Marj" -#: results/templates/ballot/ballot_speaks.html:19 -msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-manning' you would typically mark only the lesser of their scores as a duplicate." -msgstr "" - -#: results/templates/ballot/bp_elimination_ballot.html:6 -#: results/templates/ballot/standard_ballot_set.html:6 +#: results/templates/ballot/ballot_set.html msgid "There are some problems with this scoresheet. Please review and correct them." -msgstr "" +msgstr "Bu sonuç kağıdında bazı sorunlar var. Lütfen bunları gözden geçirin ve düzeltin." -#: results/templates/ballot/bp_elimination_ballot.html:12 -msgid "Advancing Teams" -msgstr "" +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s (%(institution)s)" +msgstr "%(name)s (%(institution)s) ballotu" -#: results/templates/ballot/other_ballots_list.html:9 +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html #, python-format -msgid "There is %(number)s existing ballot set for this debate." -msgid_plural "There are %(number)s existing ballot sets for this debate." -msgstr[0] "" -msgstr[1] "" +msgid "Ballot from %(name)s" +msgstr "%(name)s ballotu" + +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html +msgid "Scoresheet" +msgstr "Sonuç kağıdı" + +#: results/templates/ballot/ballot_set.html +msgid "Solo Chair" +msgstr "Tek Başkan" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Chair" +msgstr "Başkan" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Panellist" +msgstr "Panelist" + +#: results/templates/ballot/ballot_set.html +msgid "Trainee" +msgstr "Acemi" -#: results/templates/ballot/other_ballots_list.html:19 +#: results/templates/ballot/ballot_set.html +msgid "Assign sides before entering scores" +msgstr "Puanları girmeden önce taraf atayın" + +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." +msgstr "Yinelenen konuşmalar konuşmacı tabından gizlenir. Bir konuşmacı 'demir kişilik' ise, genellikle puanlarının daha az olanını yineleme olarak işaretlersiniz." + +#: results/templates/ballot/other_ballots_list.html #, python-format -msgid "There are %(number)s ballot sets for this debate." -msgstr "" +msgid "There is %(number)s existing ballot set for this debate." +msgid_plural "There are %(number)s existing ballot sets for this debate." +msgstr[0] "Bu tartışma için %(number)s mevcut ballot seti var." +msgstr[1] "Bu tartışma için %(number)s mevcut ballot seti var." -#: results/templates/ballot/other_ballots_list.html:29 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is confirmed." -msgstr "" +msgstr "Bu ballot seti onaylanmış." -#: results/templates/ballot/other_ballots_list.html:34 +#: results/templates/ballot/other_ballots_list.html msgid "This ballot set is discarded." -msgstr "" +msgstr "Bu ballot seti ıskarta." -#: results/templates/ballot/other_ballots_list.html:49 +#: results/templates/ballot/other_ballots_list.html msgid "CURRENTLY VIEWING" -msgstr "" +msgstr "ŞU ANDA GÖRÜNTÜLENİYOR" -#: results/templates/ballot/other_ballots_list.html:52 +#: results/templates/ballot/other_ballots_list.html +msgid "MERGING" +msgstr "BİRLEŞTİRİLİYOR" + +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "Version %(version)s," -msgstr "" +msgstr "Sürüm %(version)s," -#: results/templates/ballot/other_ballots_list.html:57 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "entered by %(submitter)s," -msgstr "" +msgstr "%(submitter)s tarafından girilmiş," + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "submitted from %(adjudicator)s's private URL," +msgstr "%(adjudicator)s özel URL'sinden gönderilen," -#: results/templates/ballot/other_ballots_list.html:61 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "submitted from the public form on %(ip_address)s," -msgstr "" +msgstr "%(ip_address)s üzerinde herkese açık formdan gönderilen," -#: results/templates/ballot/other_ballots_list.html:66 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "%(timestamp)s (%(timeago)s ago)," -msgstr "" +msgstr "%(timestamp)s (%(timeago)s önce)," + +#: results/templates/ballot/other_ballots_list.html +msgid "unknown" +msgstr "bilinmeyen" -#: results/templates/ballot/other_ballots_list.html:71 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "confirmed by %(confirmer)s" -msgstr "" +msgstr "%(confirmer)s tarafından onaylanmış" -#: results/templates/ballot/other_ballots_list.html:75 -msgid "confirmed by unknown confirmer" -msgstr "" - -#: results/templates/ballot/other_ballots_list.html:77 +#: results/templates/ballot/other_ballots_list.html msgid "unconfirmed" -msgstr "" +msgstr "Onaylanmamış" -#: results/templates/ballot/other_ballots_list.html:81 +#: results/templates/ballot/other_ballots_list.html msgid "(discarded)" -msgstr "" +msgstr "(ıskarta)" -#: results/templates/ballot/other_ballots_list.html:85 +#: results/templates/ballot/other_ballots_list.html #, python-format msgid "(identical to version %(others)s)" msgid_plural "(identical to versions %(others)s)" -msgstr[0] "" -msgstr[1] "" - -#: results/templates/ballot/standard_ballot_set.html:19 -#: results/templates/ballot_entry_form.html:23 -#, python-format -msgid "Ballot from %(name)s (%(institution)s)" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:23 -#: results/templates/ballot_entry_form.html:27 -#, python-format -msgid "Ballot from %(name)s" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:31 -#: results/templates/public_ballot_set.html:71 -msgid "Scoresheet" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -msgid "Solo Chair" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -#: results/templates/ballot_entry_form.html:32 -msgid "Chair" -msgstr "Başkan" - -#: results/templates/ballot/standard_ballot_set.html:35 -#: results/templates/ballot_entry_form.html:34 -msgid "Panellist" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:35 -msgid "Trainee" -msgstr "" - -#: results/templates/ballot/standard_ballot_set.html:44 -msgid "Assign sides before entering scores" -msgstr "" +msgstr[0] "(%(others)s sürümüyle aynı)" +msgstr[1] "(%(others)s sürümleriyle aynı)" -#: results/templates/ballot_entry.html:21 +#: results/templates/ballot_entry.html #, python-format msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." -msgstr "" - -#: results/templates/ballot_entry_base.html:8 -#, python-format -msgid "New Ballot Set for %(debate)s" -msgstr "" +msgstr "Bu ballot giriş arayüzü beta sürümündedir, herhangi bir sorunla karşılaşırsanız, arayüzün eski sürümü burada kullanılabilir." -#: results/templates/ballot_entry_base.html:12 -#, python-format -msgid "Edit Ballot Set for %(debate)s" -msgstr "" - -#: results/templates/ballot_entry_base.html:19 -#, python-format -msgid "%(room)s: %(debate)s" -msgstr "" - -#: results/templates/ballot_entry_base.html:48 +#: results/templates/ballot_entry_base.html msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." -msgstr "" - -#: results/templates/ballot_entry_base.html:58 -#, python-format -msgid "In the grand-final rounds of a British Parliamentary format this form will not let you nominate a single winner. To work around this, you need to first nominate a second 'fake' winner in this ballot and save/complete the ballot as normal. To then correct this result, you go to the Team Scores page of the Edit Database area, click the Team Score of the 'fake' winner of this debate, set the Win field to No, and then Save the change." -msgstr "" +msgstr "Bu maçta, eşit sayıda oylayan jürinin bulunduğu bir panel var. Jüriler eşit olarak bölünürse, başkanın oy kullandığı takım kazanır." -#: results/templates/ballot_entry_base.html:72 +#: results/templates/ballot_entry_base.html #, python-format msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." -msgstr "" +msgstr "%(team)s son turda birden fazla kez konuşan konuşmacılara sahip - yani 'demir kişi' konuşmasına. Lütfen bu tur için hala geçerli olup olmadığını görmek için ballotları dikkatlice kontrol edin. Öyleyse, aşağıda seçilen konuşmacıların bunu yansıttığından emin olun." -#: results/templates/ballot_entry_form.html:38 +#: results/templates/ballot_entry_form.html #, python-format msgid "Scoresheet from chair %(chair)s" -msgstr "" +msgstr "%(chair)s başkandan sonuç kağıdı" -#: results/templates/ballot_entry_form.html:42 +#: results/templates/ballot_entry_form.html msgid "Scoresheet, no chair set" -msgstr "" +msgstr "sonuç kağıdı, başkan seti yok" -#: results/templates/ballot_entry_form.html:63 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's speaker field: %(error)s" -msgstr "" +msgstr "%(pos)s'un konuşmacı alanıyla ilgili hata: %(error)s" -#: results/templates/ballot_entry_form.html:69 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's duplicate speaker field: %(error)s" -msgstr "" +msgstr "%(pos)s'un yinelenen konuşmacı alanıyla ilgili hata: %(error)s" -#: results/templates/ballot_entry_form.html:75 +#: results/templates/ballot_entry_form.html #, python-format msgid "Error with %(pos)s's score field: %(error)s" -msgstr "" +msgstr "%(pos)s'un puan alanıyla ilgili hata: %(error)s" + +#: results/templates/debate_postponement_form.html +msgid "Postponed" +msgstr "Ertelenen" -#: results/templates/enter_results.html:15 +#: results/templates/debate_postponement_form.html +msgid "Postpone" +msgstr "Ertele" + +#: results/templates/enter_results.html msgid "Ballot Status" -msgstr "" +msgstr "Ballot Durumu" -#: results/templates/enter_results.html:16 +#: results/templates/enter_results.html msgid "only the confirmed ballot set will affect this debate's result" -msgstr "" +msgstr "sadece onaylanmış ballot setleri bu maçın sonucunu etkileyecektir." -#: results/templates/enter_results.html:32 +#: results/templates/enter_results.html msgid "Debate Status" -msgstr "" +msgstr "Maç Durumu" -#: results/templates/enter_results.html:35 +#: results/templates/enter_results.html msgid "all debates must be confirmed to complete the round" -msgstr "" +msgstr "turu tamamlamak için tüm maçlar onaylanmalıdır" -#: results/templates/enter_results.html:45 +#: results/templates/enter_results.html msgid "Save Ballot" -msgstr "" +msgstr "Ballotu kaydet" -#: results/templates/enter_results.html:48 +#: results/templates/enter_results.html msgid "Cancel Entry" -msgstr "" +msgstr "Girişi İptal Et" -#: results/templates/includes/public_enter_results_info.html:4 +#: results/templates/includes/public_enter_results_info.html #, python-format -msgid "The URL of this page is personalised to you, %(adjudicator)s. Do not share it with anyone: anyone who knows this URL can submit results for your debates. If you bookmark this page and return here after each debate, it will always show the debate that you just adjudicated." -msgstr "" +msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." +msgstr "Bu sayfanın URL'si sizin için kişiseldir, %(name)s. Kimseyle paylaşmayın; bu URL'yi bilen herkes tartışmalarınız için sonuç ve/veya geri bildirim gönderebilir. Bu sayfayı yer imlerine ekleyebilir ve mevcut eylemler için her maçtan sonra buraya dönebilirsiniz." -#: results/templates/privateurl_ballot_set.html:7 -#: results/templates/privateurl_ballot_set_error.html:12 +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." -msgstr "" +msgstr "Bu sayfa sizin (%(name)s) kendi sonuç kağıdınızı doğrulamanıza izin vermek için sağlanmıştır. Bu URL'yi kimseyle paylaşmamalısınız. URL'yi paylaşmak, başkalarının kişisel açılış sayfanızdan tüm eylemlere erişmesine olanak tanır." -#: results/templates/privateurl_ballot_set_error.html:4 -#: results/templates/privateurl_ballot_set_error.html:6 -#: results/templates/public_ballot_set_error.html:4 -#: results/templates/public_ballot_set_error.html:6 +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html msgid "Ballot Not Available" -msgstr "" +msgstr "Ballot Mevcut Değil" -#: results/templates/privateurl_ballot_set_error.html:27 +#: results/templates/privateurl_ballot_set_error.html #, python-format msgid "Back to your private landing page." -msgstr "" +msgstr "Özel açılış sayfanıza geri dönün." -#: results/templates/public_add_ballot.html:4 -#: results/templates/public_add_ballot_unreleased.html:4 -#: results/templates/public_add_ballot_unreleased.html:5 +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html msgid "Enter Ballot" -msgstr "" +msgstr "Ballot Gir" -#: results/templates/public_add_ballot.html:5 +#: results/templates/public_add_ballot.html msgid "Who are you?" -msgstr "" +msgstr "Kimsin?" -#: results/templates/public_add_ballot.html:6 +#: results/templates/public_add_ballot.html msgid "(click your name on this list)" -msgstr "" +msgstr "(Bu listede adınıza tıklayın)" -#: results/templates/public_add_ballot_unreleased.html:8 +#: results/templates/public_add_ballot_unreleased.html #, python-format msgid "The draw and/or motions for %(round)s have yet to be released." -msgstr "" +msgstr "%(round)s için kura ve/veya önergeler henüz yayınlanmadı." -#: results/templates/public_ballot_set.html:6 -#: results/templates/public_ballot_set.html:10 -#: results/templates/public_ballot_set.html:17 -#: results/templates/public_ballot_set.html:21 +#: results/templates/public_ballot_set.html #, python-format msgid "Ballot for %(matchup)s" -msgstr "" +msgstr "%(matchup)s için ballot" -#: results/templates/public_ballot_set.html:28 -#: results/templates/public_enter_results.html:14 +#: results/templates/public_ballot_set.html #, python-format msgid "%(round)s @ %(room)s" -msgstr "" +msgstr "%(round)s @ %(room)s" -#: results/templates/public_ballot_set.html:37 +#: results/templates/public_ballot_set.html msgid "Return to landing page" -msgstr "" +msgstr "Açılış sayfasına geri dön" -#: results/templates/public_ballot_set.html:42 +#: results/templates/public_ballot_set.html #, python-format msgid "Return to Results for %(round)s" -msgstr "" +msgstr "%(round)s için Sonuçlara Dön" -#: results/templates/public_ballot_set.html:54 +#: results/templates/public_ballot_set.html msgid "Motion" msgstr "Önerge" -#: results/templates/public_ballot_set.html:67 +#: results/templates/public_ballot_set.html #, python-format msgid "From %(name)s (%(institution)s)" -msgstr "" +msgstr "%(name)s (%(institution)s) kaynağından" -#: results/templates/public_ballot_set.html:91 -#: results/templates/public_ballot_set.html:95 +#: results/templates/public_ballot_set.html #, python-format msgid "Total for %(name)s (%(side)s)" -msgstr "" +msgstr "%(name)s (%(side)s) için toplam" -#: results/templates/public_ballot_set_error.html:14 +#: results/templates/public_ballot_set.html #, python-format -msgid "Back to the tournament home page." -msgstr "" +msgid "%(name)s (%(side)s)" +msgstr "%(name)s (%(side)s)" + +#: results/templates/public_ballot_set.html +msgid "Won" +msgstr "Galibiyet" -#: results/templates/public_enter_results.html:5 -#: results/templates/public_enter_results.html:8 +#: results/templates/public_ballot_set.html +msgid "Lost" +msgstr "Mağlubiyet" + +#: results/templates/public_ballot_set_error.html #, python-format -msgid "Enter Results for %(debate)s" -msgstr "" +msgid "Back to the tournament home page." +msgstr "Turnuva ana sayfasına geri dön." -#: results/templates/public_enter_results.html:22 +#: results/templates/public_enter_results.html #, python-format msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" -msgstr "" +msgstr "%(adjudicator)s, sadece kendi ballotunuzu değil, tüm ballotları girmeniz gerektiğini unutmayın!" + +#: results/templates/public_enter_results.html +msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." +msgstr "Gösterilen konuşmacı sırası gibi bazı bilgiler önceki bir ballota dayanmaktadır. Bir şey yanlışsa, lütfen düzeltin ve tab ekibiyle iletişime geçin." -#: results/templates/public_enter_results.html:30 +#: results/templates/public_enter_results.html #, python-format msgid "This form has already been submitted once. Please contact a tab official after submitting your form." msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Bu form daha önce bir kez gönderilmiştir. Lütfen formunuzu gönderdikten sonra bir tab yetkilisiyle iletişime geçin." +msgstr[1] "Bu form daha önce %(nsubmissions)s kez gönderilmiştir. Lütfen formunuzu gönderdikten sonra bir tab yetkilisiyle iletişime geçin." -#: results/templates/public_enter_results.html:69 -msgid "Submit Ballot(s)" -msgstr "" +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "Ballotu Gönder" +msgstr[1] "Ballotları Gönder" -#: results/templates/public_enter_results.html:71 +#: results/templates/public_enter_results.html msgid "When submitting this form your IP address will be stored for logging purposes." -msgstr "" +msgstr "Bu formu gönderirken IP adresiniz kayıt amaçlı saklanacaktır." -#: results/templates/public_enter_results_error.html:4 +#: results/templates/public_enter_results_error.html #, python-format msgid "No Result to Enter (%(adjudicator)s)" -msgstr "" +msgstr "Girilecek Sonuç Yok (%(adjudicator)s)" -#: results/templates/public_enter_results_error.html:7 +#: results/templates/public_enter_results_error.html msgid "No Result to Enter" -msgstr "" +msgstr "Girilecek Sonuç Yok" -#: results/templates/public_results_for_round.html:7 +#: results/templates/public_results_for_round.html msgid "View by Team" -msgstr "" +msgstr "Takıma Göre Görüntüle" -#: results/templates/public_results_for_round.html:10 +#: results/templates/public_results_for_round.html msgid "View by Debate" -msgstr "" +msgstr "Maça Göre Görüntüle" -#: results/templates/public_results_index.html:12 +#: results/templates/public_results_index.html #, python-format msgid "Results for %(round)s" -msgstr "" +msgstr "%(tur)s için sonuçlar" -#: results/templates/public_results_not_available.html:4 -#: results/templates/public_results_not_available.html:6 -#: results/templates/public_results_silent.html:4 -#: results/templates/public_results_silent.html:6 +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html msgid "Results Not Available" -msgstr "" +msgstr "Sonuçlar Mevcut Değil" -#: results/templates/public_results_not_available.html:12 +#: results/templates/public_results_not_available.html #, python-format msgid "The results for %(round)s aren't yet available." -msgstr "" +msgstr "%(round)s için sonuçlar henüz mevcut değil." -#: results/templates/public_results_silent.html:12 +#: results/templates/public_results_silent.html #, python-format msgid "%(round)s is a silent round." -msgstr "" +msgstr "%(round)s sessiz bir turdur." -#: results/utils.py:18 +#: results/utils.py msgid "No Ballot" -msgstr "" +msgstr "Ballot yok" -#: results/utils.py:20 +#: results/utils.py +msgid "Debate was Postponed" +msgstr "Maç ertelendi" + +#: results/utils.py msgid "Ballot is Unconfirmed" -msgstr "" +msgstr "Ballot Onaylanmamış" -#: results/utils.py:22 +#: results/utils.py msgid "Ballot is Confirmed" -msgstr "" +msgstr "Ballot onaylandı" #. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" -#: results/utils.py:32 +#: results/utils.py #, python-format msgid "%(team)s as %(side)s" -msgstr "" +msgstr "%(side)s olarak %(team)s" -#: results/utils.py:51 +#: results/utils.py #, python-format -msgid "%(winner)s (%(winner_side)s) won" -msgstr "" +msgid "%(team)s (%(side)s) won" +msgstr "%(team)s (%(side)s) kazandı" -#: results/utils.py:56 +#. Translators: The team here is the losing team +#: results/utils.py #, python-format -msgid "vs %(loser)s (%(loser_side)s)" -msgstr "" +msgid "vs %(team)s (%(side)s)" +msgstr "%(team)s (%(side)s)'e karşı" -#: results/utils.py:71 +#: results/utils.py #, python-format -msgid "Advancing: %(advancing_list)s
    \n" -msgstr "" +msgid "Advancing: %(advancing_list)s
    " +msgstr "İlerleyenler: %(advancing_list)s
    " -#: results/utils.py:75 +#: results/utils.py #, python-format msgid "Eliminated: %(eliminated_list)s" -msgstr "" +msgstr "Elenenler: %(eliminated_list)s" -#: results/utils.py:85 +#: results/utils.py #, python-format -msgid "1st: %(first_team)s
    \n" -msgstr "" +msgid "1st: %(first_team)s
    " +msgstr "1.: %(first_team)s
    " -#: results/utils.py:87 +#: results/utils.py #, python-format msgid "2nd: %(second_team)s
    \n" "3rd: %(third_team)s
    \n" "4th: %(fourth_team)s" -msgstr "" +msgstr "2.: %(second_team)s
    \n" +"3.: %(third_team)s
    \n" +"4.: %(fourth_team)s" -#: results/utils.py:102 +#: results/utils.py #, python-format msgid "Error with result for %(debate)s" -msgstr "" +msgstr "%(debate)s için sonuçla ilgili hata" #. Translators: Abbreviation for Prime Minister -#: results/utils.py:162 +#: results/utils.py msgid "PM" -msgstr "" +msgstr "PM" #. Translators: Abbreviation for Deputy Prime Minister -#: results/utils.py:164 +#: results/utils.py msgid "DPM" -msgstr "" +msgstr "DPM" #. Translators: Abbreviation for Leader of the Opposition -#: results/utils.py:166 +#: results/utils.py msgid "LO" -msgstr "" +msgstr "LO" #. Translators: Abbreviation for Deputy Leader of the Opposition -#: results/utils.py:168 +#: results/utils.py msgid "DLO" -msgstr "" +msgstr "DLO" #. Translators: Abbreviation for Member for the Government -#: results/utils.py:170 +#: results/utils.py msgid "MG" -msgstr "" +msgstr "MG" #. Translators: Abbreviation for Government Whip -#: results/utils.py:172 +#: results/utils.py msgid "GW" -msgstr "" +msgstr "GW" #. Translators: Abbreviation for Member for the Opposition -#: results/utils.py:174 +#: results/utils.py msgid "MO" -msgstr "" +msgstr "MO" #. Translators: Abbreviation for Opposition Whip -#: results/utils.py:176 +#: results/utils.py msgid "OW" -msgstr "" +msgstr "OW" -#: results/utils.py:196 +#: results/utils.py msgid "Reply" -msgstr "" +msgstr "Özet" -#: results/views.py:224 results/views.py:226 +#: results/views.py msgid " vs " -msgstr "" +msgstr " Vs " -#: results/views.py:359 +#: results/views.py +#, python-format +msgid "%(matchup)s: %(round)s @ %(room)s" +msgstr "%(matchup)s: %(round)s @ %(room)s" + +#: results/views.py +msgid "N/A" +msgstr "YOK" + +#: results/views.py +msgid "New Ballot Set" +msgstr "Yeni Ballot Seti" + +#: results/views.py #, python-format msgid "Ballot set for %(debate)s added." -msgstr "" +msgstr "%(debate)s için ballot seti eklendi." -#: results/views.py:361 results/views.py:428 +#: results/views.py msgid " Email receipts queued to be sent." -msgstr "" +msgstr " E-posta makbuzları gönderilmek üzere sıraya alındı." -#: results/views.py:375 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." -msgstr "" +msgstr "%(debate)s maçının başkanı yok, bu yüzden sonuçlarını giremezsiniz." -#: results/views.py:381 +#: results/views.py #, python-format msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." -msgstr "" +msgstr "%(debate)s maçının tarafları doğrulanmamıştır, bu nedenle sonuçlarını giremezsiniz." -#: results/views.py:421 +#: results/views.py +msgid "Edit Ballot Set" +msgstr "Ballot Setini Düzenle" + +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s discarded." -msgstr "" +msgstr "%(matchup)s için ballot seti ıskarta edildi." -#: results/views.py:423 +#: results/views.py #, python-format msgid "Ballot set for %(matchup)s confirmed." -msgstr "" +msgstr "%(matchup)s için ballot seti onaylandı." -#: results/views.py:425 +#: results/views.py #, python-format msgid "Edits to ballot set for %(matchup)s saved." -msgstr "" +msgstr "%(matchup)s için ballotda yapılan düzenlemeler kaydedildi." -#: results/views.py:469 +#: results/views.py #, python-format msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." -msgstr "" +msgstr "Teşekkürler, %(user)! %(debate)s için ballotunuz kaydedildi." -#: results/views.py:477 +#: results/views.py msgid "The draw for this round hasn't been released yet." -msgstr "" +msgstr "Bu turun kura çekimi henüz yayınlanmadı." -#: results/views.py:481 +#: results/views.py msgid "The motions for this round haven't been released yet." -msgstr "" +msgstr "Bu tur için önergeler henüz yayınlanmadı." -#: results/views.py:486 +#: results/views.py msgid "It looks like you don't have a debate this round." -msgstr "" +msgstr "Bu turda maçınız yok." -#: results/views.py:488 +#: results/views.py msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." -msgstr "" +msgstr "Bu turda iki veya daha fazla maça atanmışsınız. Lütfen bir tab odası yetkilisiyle iletişime geçin." -#: results/views.py:496 +#: results/views.py msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." -msgstr "" +msgstr "Maçın başkanı yok, bu yüzden sonuçlarını giremezsiniz. Lütfen bir tab odası yetkilisiyle iletişime geçin." -#: results/views.py:501 +#: results/views.py msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." -msgstr "" +msgstr "Bu maçın tarafları henüz onaylanmamış bu yüzden bunun için sonuç giremezsiniz. Lütfen bir tab odası yetkilisiyle iletişime geçin." -#: results/views.py:588 +#: results/views.py msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." -msgstr "" +msgstr "İki veya daha fazla maça atanmışsınız. Lütfen bir tab odası yetkilisiyle iletişime geçin." -#: results/views.py:606 +#: results/views.py #, python-format msgid "This debate is in %s, which is a silent round." -msgstr "" +msgstr "Bu maç sessiz bir tur olan %s turunda." -#: results/views.py:609 +#: results/views.py #, python-format msgid "This debate is in %s, the results for which aren't available yet." -msgstr "" +msgstr "Bu maç %s turunda ve sonuçları henüz mevcut değil." -#: results/views.py:613 +#: results/views.py #, python-format msgid "The result for debate %s is not confirmed." -msgstr "" +msgstr "%s maçının sonucu doğrulanmadı." -#: results/views.py:616 +#: results/views.py #, python-format msgid "The debate %s does not have a confirmed ballot." -msgstr "" +msgstr "%s maçının onaylanmış bir ballotu yok." -#: results/views.py:638 +#: results/views.py #, python-format msgid "There is no result yet for debate %s." -msgstr "" +msgstr "%s maçı için henüz bir sonuç yok." -#: results/views.py:694 +#: results/views.py #, python-format msgid "Add result from %(adjudicator)s" -msgstr "" +msgstr "%(adjudicator)s öğesinden sonuç ekle" -#: results/views.py:698 +#: results/views.py msgid "Adjudicator" msgstr "Jüri" +#: results/views.py +msgid "Merge Ballots" +msgstr "Ballotları Birleştir" + +#: results/views.py +msgid "The speaking order in the ballots is inconsistent, so could not be merged." +msgstr "Ballotlardaki konuşma sırası tutarsız, bu yüzden birleştirilemedi." + +#: results/views.py +msgid "Duplicate speeches are marked inconsistently, so could not be merged." +msgstr "Yinelenen konuşmalar tutarsız bir şekilde işaretli, bu nedenle birleştirilemez." + +#: results/views.py +#, python-format +msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." +msgstr " Bu hata %(adjudicator)s'ın %(speaker)s (%(team)s) için olan ballotunda bulundu." + diff --git a/tabbycat/standings/locale/tr/LC_MESSAGES/django.po b/tabbycat/standings/locale/tr/LC_MESSAGES/django.po index d13ef40288b..2f2b2ab7431 100644 --- a/tabbycat/standings/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:34\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" "Last-Translator: philip_tc\n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -15,590 +15,598 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/standings/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 950\n" -#: standings/base.py:283 +#: standings/base.py msgid "The same metric would be added twice:" -msgstr "" +msgstr "Aynı metrik iki kez eklenmiş olur:" -#: standings/base.py:284 +#: standings/base.py msgid "The same ranking would be added twice:" -msgstr "" +msgstr "Aynı sıralama iki kez eklenmiş olur:" -#: standings/base.py:358 +#: standings/base.py #, python-format msgid "Unrecognized metric code: \"%(code)s\"" -msgstr "" +msgstr "Tanınmayan metrik kodu: \"%(code)s\"" -#: standings/diversity.py:136 standings/diversity.py:166 -#: standings/diversity.py:187 +#: standings/diversity.py msgid "All" -msgstr "" +msgstr "Tüm" -#: standings/diversity.py:140 standings/diversity.py:155 -#: standings/diversity.py:173 standings/diversity.py:191 +#: standings/diversity.py msgid "Breaking" -msgstr "" +msgstr "Break Olan" -#: standings/diversity.py:147 +#: standings/diversity.py #, python-format msgid "Not %(category)s" -msgstr "" +msgstr "%(category)s değil" -#: standings/diversity.py:151 +#: standings/diversity.py msgid "All Speakers" -msgstr "" +msgstr "Tüm Konuşmacılar" -#: standings/diversity.py:169 +#: standings/diversity.py msgid "IAs" -msgstr "" +msgstr "BJ'ler" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Chairs" msgstr "Başkanlar" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Panellists" -msgstr "" +msgstr "Panelistler" -#: standings/diversity.py:177 +#: standings/diversity.py msgid "Trainees" -msgstr "" +msgstr "Acemiler" -#: standings/diversity.py:209 +#: standings/diversity.py msgid "Average Rating" -msgstr "" +msgstr "Ortalama Puan" -#: standings/diversity.py:210 +#: standings/diversity.py msgid "Median Rating" -msgstr "" +msgstr "Medyan Puan" -#: standings/diversity.py:211 +#: standings/diversity.py msgid "Upper Quartile Rating" -msgstr "" +msgstr "Üst Çeyrek Puanı" -#: standings/diversity.py:212 +#: standings/diversity.py msgid "Lower Quartile Rating" -msgstr "" +msgstr "Alt Çeyrek Puanı" -#: standings/diversity.py:218 +#: standings/diversity.py msgid "Average Rating From Teams" -msgstr "" +msgstr "Takımlardan Ortalama Puan" -#: standings/diversity.py:219 +#: standings/diversity.py msgid "Average Rating From Chairs" -msgstr "" +msgstr "Başkanlardan Ortalama Puan" -#: standings/diversity.py:220 +#: standings/diversity.py msgid "Average Rating From Panellists" -msgstr "" +msgstr "Panelistlerden Ortalama Puan" -#: standings/diversity.py:221 +#: standings/diversity.py msgid "Average Rating From Trainees" -msgstr "" +msgstr "Acemilerden Ortalama Puan" -#: standings/diversity.py:246 +#: standings/diversity.py msgid "Average Score" -msgstr "" +msgstr "Ortalama Puan" -#: standings/diversity.py:247 +#: standings/diversity.py msgid "Median Score" -msgstr "" +msgstr "Medyan Puan" -#: standings/diversity.py:248 +#: standings/diversity.py msgid "Upper Quartile Score" -msgstr "" +msgstr "Üst Çeyrek Puanı" -#: standings/diversity.py:249 +#: standings/diversity.py msgid "Lower Quartile Score" -msgstr "" +msgstr "Alt Çeyrek Puanı" -#: standings/diversity.py:256 +#: standings/diversity.py msgid "Reply Speaker Average" -msgstr "" +msgstr "Özet Konuşmacı Ortalaması" -#: standings/diversity.py:257 +#: standings/diversity.py #, python-format msgid "Speaker %(num)d Average" -msgstr "" +msgstr "Konuşmacı %(num)d Ortalaması" -#: standings/diversity.py:265 +#: standings/diversity.py msgid "Average Finals Score" -msgstr "" +msgstr "Ortalama Final Puanı" -#: standings/speakers.py:50 standings/speakers.py:136 +#: standings/speakers.py msgid "total" msgstr "toplam" -#: standings/speakers.py:51 standings/speakers.py:137 +#: standings/speakers.py msgid "Total" msgstr "Toplam" -#: standings/speakers.py:58 standings/speakers.py:146 +#: standings/speakers.py msgid "average" -msgstr "" +msgstr "ortalama" -#: standings/speakers.py:59 standings/speakers.py:147 +#: standings/speakers.py msgid "Avg" -msgstr "" +msgstr "Ort." -#: standings/speakers.py:66 -msgid "trimmed mean (high-low drop)" -msgstr "" - -#: standings/speakers.py:67 -msgid "Trim" -msgstr "" - -#: standings/speakers.py:99 +#: standings/speakers.py msgid "team points" -msgstr "" +msgstr "takım puanları" -#: standings/speakers.py:100 +#: standings/speakers.py msgid "Team" msgstr "Takım" -#: standings/speakers.py:119 standings/speakers.py:156 +#: standings/speakers.py msgid "standard deviation" -msgstr "" +msgstr "standart sapma" -#: standings/speakers.py:120 standings/speakers.py:157 +#: standings/speakers.py msgid "Stdev" -msgstr "" +msgstr "StSap" -#: standings/speakers.py:128 +#: standings/speakers.py msgid "number of speeches given" -msgstr "" +msgstr "yapılan konuşma sayısı" -#: standings/speakers.py:129 standings/speakers.py:168 +#: standings/speakers.py msgid "Num" -msgstr "" +msgstr "Sayı" -#: standings/speakers.py:167 +#: standings/speakers.py msgid "replies given" -msgstr "" +msgstr "yapılan özetler" + +#: standings/speakers.py +msgid "trimmed mean (high-low drop)" +msgstr "kesilmiş ortalama (yüksek-düşük damla)" -#: standings/teams.py:64 +#: standings/speakers.py +msgid "Trim" +msgstr "Kes" + +#: standings/teams.py msgid "points" -msgstr "puanları" +msgstr "puanlar" -#: standings/teams.py:65 +#: standings/teams.py msgid "Pts" -msgstr "" +msgstr "Puan" -#: standings/teams.py:74 +#: standings/teams.py msgid "wins" -msgstr "" +msgstr "galibiyetler" -#: standings/teams.py:75 standings/views.py:596 +#: standings/teams.py standings/views.py msgid "Wins" -msgstr "" +msgstr "Galibiyetler" -#: standings/teams.py:85 +#: standings/teams.py msgid "total speaker score" -msgstr "" +msgstr "toplam konuşmacı puanı" -#: standings/teams.py:86 +#: standings/teams.py msgid "Spk" -msgstr "" +msgstr "Konuşmacı" -#: standings/teams.py:95 +#: standings/teams.py msgid "average total speaker score" -msgstr "" +msgstr "ortalama toplam konuşmacı puanı" -#: standings/teams.py:96 +#: standings/teams.py msgid "ATSS" -msgstr "" +msgstr "OTKP" -#: standings/teams.py:105 +#: standings/teams.py msgid "speaker score standard deviation" -msgstr "" +msgstr "konuşmacı puanı standart sapması" -#: standings/teams.py:106 +#: standings/teams.py msgid "SSD" -msgstr "" +msgstr "KPSS" -#: standings/teams.py:116 +#: standings/teams.py msgid "sum of margins" -msgstr "" +msgstr "marjların toplamı" -#: standings/teams.py:117 +#: standings/teams.py msgid "Marg" -msgstr "" +msgstr "Marj" -#: standings/teams.py:126 +#: standings/teams.py msgid "average margin" -msgstr "" +msgstr "ortalama marj" -#: standings/teams.py:127 +#: standings/teams.py msgid "AWM" -msgstr "" +msgstr "OMJ" -#: standings/teams.py:136 +#: standings/teams.py msgid "average individual speaker score" -msgstr "" +msgstr "ortalama bireysel konuşmacı puanı" -#: standings/teams.py:137 +#: standings/teams.py msgid "AISS" -msgstr "" +msgstr "OBKP" -#: standings/teams.py:203 +#: standings/teams.py msgid "draw strength by wins" -msgstr "" +msgstr "galibiyete göre kura gücü" -#: standings/teams.py:204 +#: standings/teams.py msgid "DS" -msgstr "" +msgstr "KG" -#: standings/teams.py:211 +#: standings/teams.py msgid "draw strength by total speaker score" -msgstr "" +msgstr "toplam konuşmacı puanı ile kura gücü" -#: standings/teams.py:212 +#: standings/teams.py msgid "DSS" -msgstr "" +msgstr "KPKG" -#: standings/teams.py:223 +#: standings/teams.py msgid "number of pullups before this round" -msgstr "" +msgstr "Bu turdan önceki yukarı taşıma sayısı" -#: standings/teams.py:224 +#: standings/teams.py msgid "PU" -msgstr "" +msgstr "YT" -#: standings/teams.py:246 +#: standings/teams.py msgid "number of adjudicators who voted for this team" -msgstr "" +msgstr "Bu takıma oy veren jüri sayısı" -#: standings/teams.py:247 +#: standings/teams.py msgid "Ballots" -msgstr "" +msgstr "Ballotlar" -#: standings/teams.py:248 +#: standings/teams.py msgid "votes/ballots carried" -msgstr "" +msgstr "taşınan oylar/ballotlar" -#: standings/teams.py:273 +#: standings/teams.py msgid "number of firsts" -msgstr "" +msgstr "ilkler sayısı" -#: standings/teams.py:274 +#: standings/teams.py msgid "1sts" -msgstr "" +msgstr "1.ler" -#: standings/teams.py:283 +#: standings/teams.py msgid "number of seconds" -msgstr "" +msgstr "ikinciler sayısı" -#: standings/teams.py:284 +#: standings/teams.py msgid "2nds" -msgstr "" +msgstr "2.ler" -#: standings/teams.py:296 +#: standings/teams.py +msgid "number of thirds" +msgstr "üçüncüler sayısı" + +#: standings/teams.py +msgid "3rds" +msgstr "3.ler" + +#: standings/teams.py +msgid "number of times ironed" +msgstr "demir konuşma sayısı" + +#: standings/teams.py +msgid "Irons" +msgstr "Demirler" + +#: standings/teams.py msgid "Who-beat-whom" -msgstr "" +msgstr "Kim kimi yendi" -#: standings/teams.py:297 +#: standings/teams.py msgid "WBW" -msgstr "" +msgstr "KKY" -#: standings/teams.py:298 +#: standings/teams.py msgid "who-beat-whom" -msgstr "" +msgstr "kim kimi yendi" -#: standings/templates/current_standings.html:6 +#: standings/templates/current_standings.html msgid "It also excludes results from silent rounds (if any) and from the current round." -msgstr "" +msgstr "Ayrıca, sessiz turlardan (varsa) ve geçerli turdan gelen sonuçları da hariç tutar." -#: standings/templates/current_standings.html:9 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" -msgstr "" +msgstr "Bu liste takım puanlarına göre, ardından takım adına göre alfabetik olarak sıralanır. Her takımın parantez içindeki sıralamasını göstermez. %(silent_round_sentence)s" -#: standings/templates/current_standings.html:15 +#: standings/templates/current_standings.html #, python-format msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" -msgstr "" +msgstr "Bu liste galibiyet sayısına, ardından takım adına göre alfabetik olarak sıralanır. Her takımın parantez içindeki sıralamasını göstermez. %(silent_round_sentence)s" -#: standings/templates/current_standings_no_round.html:6 +#: standings/templates/current_standings_no_round.html msgid "There aren't any rounds for which results are available." -msgstr "" +msgstr "Sonuçların mevcut olduğu herhangi bir tur yoktur." -#: standings/templates/reply_standings.html:6 +#: standings/templates/reply_standings.html msgid "Reply speakers are ranked by their average reply score." -msgstr "" +msgstr "Özet konuşmacılar ortalama yanıt puanına göre sıralanır." -#: standings/templates/reply_standings.html:9 +#: standings/templates/reply_standings.html #, python-format msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." -msgstr "" +msgstr "Konuşmacılar, özet tabından çıkarılmadan önce en fazla %(count)s özet konuşma kaçırabilir." -#: standings/templates/reply_standings.html:14 +#: standings/templates/reply_standings.html msgid "All reply speakers appear in these standings, no matter how many replies they've missed." -msgstr "" +msgstr "Tüm özet konuşmacıları, kaç özet kaçırmış olurlarsa olsunlar, bu sıralamalarda görünürler." -#: standings/templates/reply_standings.html:18 -#: standings/templates/speaker_standings.html:40 +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html #, python-format msgid "These settings can be changed in the Standings section of this tournament's configuration." -msgstr "" +msgstr "Bu ayarlar turnuva ayarlarının sıralamalar kısmından değiştirilebilir." -#: standings/templates/speaker_standings.html:11 +#: standings/templates/speaker_standings.html #, python-format msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." -msgstr "" +msgstr "Konuşmacı sıralama önceliği yok. Bu, konuşmacıların herhangi bir metriğe göre sıralanmadığı anlamına gelir, bu nedenle herkes eşit başlar. Amaçladığınız bu değilse, konuşmacı sıralama önceliğini turnuva ayarlarının sıralamalar kısmından ayarlayın. Çoğu turnuvada, ilk metrik toplam veya ortalama olmalıdır." -#: standings/templates/speaker_standings.html:23 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their average score." -msgstr "" +msgstr "Konuşmacılar ortalama puanlarına göre sıralanır." -#: standings/templates/speaker_standings.html:25 +#: standings/templates/speaker_standings.html msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." -msgstr "" +msgstr "Konuşmacılar toplam puanlarına göre sıralanır. Tek bir tartışmayı kaçıran herhangi bir konuşmacı bu sıralamalarda ciddi şekilde cezalandırılacaktır." -#: standings/templates/speaker_standings.html:32 +#: standings/templates/speaker_standings.html #, python-format msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." -msgstr "" +msgstr "Konuşmacılar, konuşmacı tabından çıkarılmadan önce %(count)s tane maç kaçırabilir." -#: standings/templates/speaker_standings.html:37 +#: standings/templates/speaker_standings.html msgid "All speakers appear in these standings, no matter how many debates they've missed." -msgstr "" +msgstr "Tüm konuşmacılar, kaç tartışmayı kaçırmış olurlarsa olsunlar, bu sıralamalarda görünürler." -#: standings/templates/speaker_standings.html:48 +#: standings/templates/speaker_standings.html #, python-format msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." -msgstr "" +msgstr "Kaçırılan tartışmaların sayısına ilişkin sınırın uygulanması, \"verilen konuşma sayısı\" metriğinin konuşmacı sıralama hesaplamalarına dahil edilmesini gerektirir, bu nedenle otomatik olarak eklenir. Bu uyarı mesajını kaldırmak için bu turnuva ayarlarının sıralama kısmından yapılan konuşma sayısını konuşmacı sıralaması ekstra metriklerine ekleyin." -#: standings/templates/standings_diversity.html:4 -#: standings/templates/standings_diversity.html:5 +#: standings/templates/standings_diversity.html msgid "Diversity Overview" -msgstr "" +msgstr "Çeşitliliğe Genel Bakış" -#: standings/templates/standings_diversity.html:22 +#: standings/templates/standings_diversity.html msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." -msgstr "" +msgstr "Burada görüntülenen sonuç verileri, istatistiksel anlamlılık testleri yapılmadan sunulmaktadır. Korelasyonlar otomatik olarak güvenilir olarak kabul edilmemelidir; özellikle küçük turnuvalarda. \"Bölge\", bir dizi kuruma atanan özelleştirilebilir bir kategoridir ve bu kurumlara atanan katılımcı sayısı kullanılarak sayılır." -#: standings/templates/standings_diversity.html:37 +#: standings/templates/standings_diversity.html msgid "Non-cis male identifying" -msgstr "" +msgstr "Cis olmayan erkek olarak tanımlıyor" -#: standings/templates/standings_diversity.html:40 +#: standings/templates/standings_diversity.html msgid "Cis-male identifying" -msgstr "" +msgstr "Cis-erkek olarak tanımlıyor" -#: standings/templates/standings_diversity.html:43 +#: standings/templates/standings_diversity.html msgid "Unspecified/unrecorded" -msgstr "" +msgstr "Belirtilmemiş/kaydedilmemiş" -#: standings/templates/standings_index.html:5 -#: standings/templates/standings_index.html:6 +#: standings/templates/standings_index.html msgid "Standings" -msgstr "" +msgstr "Sıralamalar" -#: standings/templates/standings_index.html:18 +#: standings/templates/standings_index.html msgid "Top Speaks" -msgstr "" +msgstr "En İyi Konuşmacı Puanları" -#: standings/templates/standings_index.html:22 -#: standings/templates/standings_index.html:41 +#: standings/templates/standings_index.html #, python-format msgid "%(speaker)s in %(round)s" -msgstr "" +msgstr "%(round)s içindeki %(speaker)s" -#: standings/templates/standings_index.html:28 -#: standings/templates/standings_index.html:47 -#: standings/templates/standings_index.html:66 -#: standings/templates/standings_index.html:87 -#: standings/templates/standings_index.html:108 -#: standings/templates/standings_index.html:129 -#: standings/templates/standings_index.html:150 -#: standings/templates/standings_index.html:163 -#: standings/templates/standings_index.html:182 +#: standings/templates/standings_index.html msgid "No data yet" -msgstr "" +msgstr "Henüz veri yok" -#: standings/templates/standings_index.html:37 +#: standings/templates/standings_index.html msgid "Bottom Speaks" -msgstr "" +msgstr "Alt Konuşmacı Puanları" -#: standings/templates/standings_index.html:56 +#: standings/templates/standings_index.html msgid "Largest Margins" -msgstr "" +msgstr "En Büyük Marjlar" -#: standings/templates/standings_index.html:60 -#: standings/templates/standings_index.html:81 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s vs %(opp)s in %(round)s" -msgstr "" +msgstr "%(round)s turunda %(team)s vs %(opp)s" -#: standings/templates/standings_index.html:77 +#: standings/templates/standings_index.html msgid "Closest Margins" -msgstr "" +msgstr "En Yakın Marjlar" -#: standings/templates/standings_index.html:98 +#: standings/templates/standings_index.html msgid "Top Team Scores" -msgstr "" +msgstr "En İyi Takım Puanları" -#: standings/templates/standings_index.html:102 -#: standings/templates/standings_index.html:123 +#: standings/templates/standings_index.html #, python-format msgid "%(team)s in %(round)s" -msgstr "" +msgstr "%(round)s içindeki %(team)s" -#: standings/templates/standings_index.html:119 +#: standings/templates/standings_index.html msgid "Bottom Team Scores" -msgstr "" +msgstr "En Düşük Takım Puanları" -#: standings/templates/standings_index.html:140 +#: standings/templates/standings_index.html msgid "Most/Least Popular Motions" -msgstr "" +msgstr "En Çok/En Az Popüler Önergeler" -#: standings/templates/standings_index.html:144 -#: standings/templates/standings_index.html:157 -#, python-format -msgid "%(reference)s in %(abbreviation)s" -msgstr "" - -#: standings/templates/standings_index.html:173 +#: standings/templates/standings_index.html msgid "Average Speaks" -msgstr "" +msgstr "Ortalama Konuşma Puanları" -#: standings/templates/standings_menu.html:6 +#: standings/templates/standings_menu.html msgid "Overview" -msgstr "" +msgstr "Genel bakış" -#: standings/templates/standings_menu.html:12 -#: standings/templates/standings_menu.html:19 +#: standings/templates/standings_menu.html msgid "Teams" msgstr "Takımlar" -#: standings/templates/standings_menu.html:17 +#: standings/templates/standings_menu.html msgctxt "All [Teams]" msgid "All" -msgstr "" +msgstr "Tüm" -#: standings/templates/standings_menu.html:32 +#: standings/templates/standings_menu.html msgid "Speakers" msgstr "Konuşmacılar" -#: standings/templates/standings_menu.html:37 +#: standings/templates/standings_menu.html msgctxt "Substantive speeches" msgid "Substantives" -msgstr "" +msgstr "Ana Konuşmalar" -#: standings/templates/standings_menu.html:39 +#: standings/templates/standings_menu.html msgctxt "All [Speakers]" msgid "All" -msgstr "" +msgstr "Tüm" -#: standings/templates/standings_menu.html:41 +#: standings/templates/standings_menu.html msgid "Speakers " msgstr "Konuşmacılar " -#: standings/templates/standings_menu.html:47 +#: standings/templates/standings_menu.html #, python-format msgid "%(category)s" msgstr "" -#: standings/templates/standings_menu.html:55 +#: standings/templates/standings_menu.html msgid "Replies" -msgstr "" +msgstr "Yanıtlar" -#: standings/templates/standings_menu.html:64 +#: standings/templates/standings_menu.html msgid "Motions" msgstr "Önergeler" -#: standings/templates/standings_menu.html:68 +#: standings/templates/standings_menu.html +msgid "By Round" +msgstr "Tura göre" + +#: standings/templates/standings_menu.html msgid "Diversity" -msgstr "" +msgstr "Çeşitlilik" -#: standings/templates/team_standings.html:10 +#: standings/templates/team_standings.html #, python-format msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." -msgstr "" +msgstr "Takım sıralama önceliği yok. Bu, takımların herhangi bir metriğe göre sıralanmadığı anlamına gelir, bu nedenle herkes eşit başlar. Amaçladığınız bu değilse, konuşmacı sıralama önceliğini turnuva ayarlarının sıralamalar kısmından ayarlayın. Çoğu turnuvada, ilk metrik puanlar veya galibiyetler olmalıdır." -#: standings/views.py:99 +#: standings/views.py #, python-format msgid "

    There was an error generating the standings: %(message)s

    " -msgstr "" +msgstr "

    Sıralamaları oluştururken bir hata oluştu: %(message)s

    " -#: standings/views.py:104 +#: standings/views.py #, python-format msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " -msgstr "" +msgstr "

    Ayarlar bölümününde turnuva ayarlarının sıralamalar kısmını kontrol etmeniz gerekebilir. Bu sorun devam ederse ve nasıl düzelteceğinizden emin değilseniz lütfen geliştiricilerle iletişime geçin.

    " -#: standings/views.py:112 +#: standings/views.py msgid "

    The tab director will need to resolve this issue.

    " -msgstr "" +msgstr "

    Tab yöneticisinin bu sorunu çözmesi gerekir.

    " -#: standings/views.py:116 +#: standings/views.py #, python-format msgid "as of %(round)s" -msgstr "" +msgstr "%(round)s itibariyle" #. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix -#: standings/views.py:181 +#: standings/views.py #, python-format msgid "%(title)s (Top %(limit)d Only)" -msgstr "" +msgstr "%(title)s (yalnızca en yüksek %(limit)d)" -#: standings/views.py:206 standings/views.py:432 +#: standings/views.py msgid "The tab can't be displayed because all rounds so far in this tournament are silent." -msgstr "" +msgstr "Bu turnuvada şimdiye kadarki tüm turlar sessiz olduğundan tab görüntülenemiyor." -#: standings/views.py:282 +#: standings/views.py msgid "Speaker Standings" -msgstr "" +msgstr "Konuşmacı Sıralamaları" -#: standings/views.py:324 +#: standings/views.py msgid "Speaker Tab" -msgstr "" +msgstr "Konuşmacı Tabı" -#: standings/views.py:339 +#: standings/views.py #, python-format msgid "%(category)s Speaker Standings" -msgstr "" +msgstr "%(category)s Konuşmacı Sıralamaları" -#: standings/views.py:357 +#: standings/views.py #, python-format msgid "%(category)s Speaker Tab" -msgstr "" +msgstr "%(category)s Konuşmacı Tabı" -#: standings/views.py:370 +#: standings/views.py msgid "Reply Speaker Standings" -msgstr "" +msgstr "Özet Konuşmacı Sıralamaları" -#: standings/views.py:375 +#: standings/views.py msgid "Reply speeches aren't enabled in this tournament." -msgstr "" +msgstr "Özet konuşmaları bu turnuvada yoktur." -#: standings/views.py:412 +#: standings/views.py msgid "Reply Speaker Tab" -msgstr "" +msgstr "Özet Konuşmacı Tabı" -#: standings/views.py:424 standings/views.py:673 +#: standings/views.py msgid "Team Standings" -msgstr "" +msgstr "Takım Sıralamaları" -#: standings/views.py:503 +#: standings/views.py msgid "Team Tab" -msgstr "" +msgstr "Takım Tabı" -#: standings/views.py:522 +#: standings/views.py #, python-format msgid "%(category)s Team Standings" -msgstr "" +msgstr "%(category)s Takım Sıralamaları" -#: standings/views.py:549 +#: standings/views.py #, python-format msgid "%(category)s Team Tab" -msgstr "" +msgstr "%(category)s Takım Tabı" -#: standings/views.py:560 +#: standings/views.py msgid "Current Team Standings" -msgstr "" +msgstr "Mevcut Takım Sıralamaları" -#: standings/views.py:596 +#: standings/views.py msgid "Points" -msgstr "Puanları" +msgstr "Puanlar" + +#: standings/views.py +msgid "Feedback Overview" +msgstr "Geri bildirim genel bakış" + +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +msgstr "Bir jürinin puanı, temel puanlarının ve geri bildirim derecelendirmelerinin ayarlanabilir bir karışımıyla belirlenir. Geçerli karışım aşağıda 'Puan Bileşenleri' olarak belirtilmiştir. Geri bildirim derecelendirmeleri, tüm turlardaki tüm bireysel geri bildirim parçalarının sonuçlarının ortalaması alınarak belirlenir. Daha fazla bilgi." diff --git a/tabbycat/tournaments/locale/tr/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/tr/LC_MESSAGES/django.po index 8b5f9c9e223..e4a705d6e3f 100644 --- a/tabbycat/tournaments/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:37\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" "Last-Translator: philip_tc\n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -15,1025 +15,1019 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/tournaments/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 952\n" -#: tournaments/apps.py:7 +#: tournaments/apps.py msgid "Tournaments" msgstr "Turnuvalar" -#: tournaments/forms.py:27 +#: tournaments/forms.py msgid "Number of preliminary rounds" -msgstr "" +msgstr "Ön eleme turlarının sayısı" -#: tournaments/forms.py:32 +#: tournaments/forms.py msgid "Number of teams in the open break" -msgstr "" +msgstr "Açık Breakteki takım sayısı" -#: tournaments/forms.py:33 +#: tournaments/forms.py msgid "Leave blank if there are no break rounds." -msgstr "" +msgstr "Break turu yoksa boş bırakın." -#: tournaments/forms.py:39 +#: tournaments/forms.py msgid "Did you agree with their decision?" -msgstr "" +msgstr "Kararlarına katılıyor musunuz?" -#: tournaments/forms.py:39 +#: tournaments/forms.py msgid "Agree?" -msgstr "" +msgstr "Kabul et?" -#: tournaments/forms.py:45 +#: tournaments/forms.py msgid "Comments" -msgstr "" +msgstr "Yorumlar" #. Translators: This is the name given to the 'Open Break'. -#: tournaments/forms.py:59 +#: tournaments/forms.py msgid "Open" -msgstr "" +msgstr "Açık" -#: tournaments/forms.py:84 +#: tournaments/forms.py msgid "Format Configuration" -msgstr "" +msgstr "Biçim Yapılandırması" -#: tournaments/forms.py:85 +#: tournaments/forms.py msgid "Apply a standard set of settings to match a common debate format" -msgstr "" +msgstr "Ortak bir tartışma biçimiyle eşleşmesi için standart bir ayar kümesi uygula" -#: tournaments/forms.py:89 +#: tournaments/forms.py msgid "Public Configuration" -msgstr "" +msgstr "Açık Yapılandırma" -#: tournaments/forms.py:90 +#: tournaments/forms.py msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" -msgstr "" +msgstr "Sitenin herkese açık tarafında, kuralar (bir kez yayınlandıktan sonra) ve önceki turların hareketleri gibi hassas olmayan bilgileri gösterir" -#: tournaments/forms.py:96 -msgid "Tabulation: [list tabulation staff here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" -msgstr "" +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +msgstr "Tablama: [tablama personelini burada listele]
    Eşitlik: [eşitlik personelini burda listele]
    Organizasyon: [organizasyon komite üyelerini burda listele]
    Jürilik: [baş jürileri burda listele]" -#: tournaments/forms.py:186 +#: tournaments/forms.py msgid "Current preliminary round" -msgstr "" +msgstr "Mevcut ön eleme turu" -#: tournaments/forms.py:187 +#: tournaments/forms.py msgid "All preliminary rounds have been completed" -msgstr "" +msgstr "Tüm ön eleme turları tamamlandı" -#: tournaments/forms.py:199 +#: tournaments/forms.py #, python-format msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" -msgstr "" +msgstr "Mevcut eleme turu %(category)s (sadece tüm ön eleme turları tamamlanmışsa)" -#: tournaments/forms.py:205 +#: tournaments/forms.py #, python-format msgid "All elimination rounds in %(category)s have been completed" -msgstr "" +msgstr "%(category)s cinsinden tüm eleme turları tamamlandı" -#: tournaments/forms.py:217 +#: tournaments/forms.py msgid "If the current round is a preliminary round, this field must be blank." -msgstr "" +msgstr "Mevcut tur bir ön tur ise, bu alan boş bırakılmalıdır." -#: tournaments/forms.py:223 +#: tournaments/forms.py msgid "If all preliminary rounds have been completed, this field is required." -msgstr "" +msgstr "Tüm ön eleme turları tamamlanmışsa, bu alan gereklidir." + +#: tournaments/forms.py +#, python-format +msgid "%(name)s (%(abbreviation)s)" +msgstr "%(name)s (%(abbreviation)s)" -#: tournaments/mixins.py:108 +#: tournaments/mixins.py #, python-format msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." -msgstr "" +msgstr "%(tournament)s turnuvasının turu olmadığı için bu sayfaya yönlendirildiniz. Lütfen yönetici sitesine dönmeden önce tur oluşturun." -#: tournaments/mixins.py:116 +#: tournaments/mixins.py #, python-format msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." -msgstr "" +msgstr "%(tournament)s turnuvasının verileriyle ilgili bir sorun var. Lütfen bir tab yöneticisiyle iletişime geçin ve araştırmalarını isteyin." -#: tournaments/mixins.py:129 +#: tournaments/mixins.py msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." -msgstr "" +msgstr "Bir maçda takımlarının taraflara nasıl atandığıyla ilgili bir sorun nedeniyle bu sayfaya yönlendirildiniz." -#: tournaments/mixins.py:136 +#: tournaments/mixins.py msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." -msgstr "" +msgstr "Bir maçda takımların taraflara nasıl atandığı ile ilgili bir sorun var. Tab yöneticisinin bu sorunu çözmesi gerekir." -#: tournaments/mixins.py:231 tournaments/templates/round_complete_check.html:8 +#: tournaments/mixins.py tournaments/templates/round_complete_check.html #, python-format msgid "for %(round)s" -msgstr "" +msgstr "%(round)s için" -#: tournaments/mixins.py:431 +#: tournaments/mixins.py msgid "Return to Draw" -msgstr "" +msgstr "Kuraya Dön" -#: tournaments/models.py:27 +#: tournaments/models.py msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." -msgstr "" +msgstr "Bunu bir turnuva jetonu olarak kullanamazsınız, çünkü Tabbycat sistem URL'si için ayrılmıştır. Lütfen başka bir tane deneyin." -#: tournaments/models.py:34 tournaments/models.py:330 +#: tournaments/models.py msgid "name" msgstr "isim" -#: tournaments/models.py:35 +#: tournaments/models.py msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" -msgstr "" +msgstr "Tam adı, örneğin \"Australasian Intervarsity Debating Championships 2016\"" -#: tournaments/models.py:37 +#: tournaments/models.py msgid "short name" -msgstr "" +msgstr "kısa ad" -#: tournaments/models.py:38 +#: tournaments/models.py msgid "The name used in the menu, e.g. \"Australs 2016\"" -msgstr "" +msgstr "Menüde kullanılan ad, örneğin \"Australs 2016\"" -#: tournaments/models.py:40 tournaments/models.py:324 +#: tournaments/models.py msgid "sequence number" -msgstr "" +msgstr "sıra numarası" -#: tournaments/models.py:41 +#: tournaments/models.py msgid "A number that determines the relative order in which tournaments are displayed on the homepage." -msgstr "" +msgstr "Turnuvaların ana sayfada görüntüleneceği göreli sırayı belirleyen bir sayıdır." -#: tournaments/models.py:43 +#: tournaments/models.py msgid "slug" -msgstr "" +msgstr "jeton" -#: tournaments/models.py:44 +#: tournaments/models.py msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" -msgstr "" +msgstr "Turnuvanın alt URL'sinde boşluk bulunamaz, örneğin \"australs2016\"" -#: tournaments/models.py:45 +#: tournaments/models.py msgid "active" msgstr "aktif" -#: tournaments/models.py:48 tournaments/models.py:323 +#: tournaments/models.py msgid "tournament" msgstr "turnuva" -#: tournaments/models.py:49 +#: tournaments/models.py msgid "tournaments" msgstr "turnuvalar" -#: tournaments/models.py:295 +#: tournaments/models.py msgid "Random" -msgstr "" +msgstr "Rastgele" -#: tournaments/models.py:296 +#: tournaments/models.py msgid "Manual" -msgstr "" +msgstr "El ile" -#: tournaments/models.py:297 +#: tournaments/models.py msgid "Round-robin" -msgstr "" +msgstr "Hepsini bir kez deneme" -#: tournaments/models.py:298 +#: tournaments/models.py msgid "Power-paired" -msgstr "" +msgstr "Güç eşleştirilmiş" -#: tournaments/models.py:299 tournaments/models.py:306 +#: tournaments/models.py msgid "Elimination" -msgstr "" +msgstr "Eleme" -#: tournaments/models.py:305 +#: tournaments/models.py msgid "Preliminary" -msgstr "" +msgstr "Ön" -#: tournaments/models.py:315 +#: tournaments/models.py msgid "None" -msgstr "" +msgstr "Hiçbiri" -#: tournaments/models.py:316 +#: tournaments/models.py msgid "Draft" -msgstr "" +msgstr "Taslak" -#: tournaments/models.py:317 +#: tournaments/models.py msgid "Confirmed" -msgstr "" +msgstr "Onaylanmış" -#: tournaments/models.py:318 +#: tournaments/models.py msgid "Released" -msgstr "" +msgstr "Yayınlanan" -#: tournaments/models.py:325 +#: tournaments/models.py msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" -msgstr "" +msgstr "Turun sırasını belirleyen sayı. İlk tur için 1'den ardışık olarak sayılmalıdır." -#: tournaments/models.py:327 +#: tournaments/models.py msgid "completed" -msgstr "" +msgstr "tamamlandı" -#: tournaments/models.py:328 +#: tournaments/models.py msgid "True if the round is over, which normally means all results have been entered and confirmed" -msgstr "" +msgstr "Tur bittiyse doğrudur, bu normalde tüm sonuçların girildiği ve onaylandığı anlamına gelir." -#: tournaments/models.py:330 +#: tournaments/models.py msgid "e.g. \"Round 1\"" -msgstr "" +msgstr "örneğin \"1. Tur\"" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "abbreviation" msgstr "kısaltma" -#: tournaments/models.py:331 +#: tournaments/models.py msgid "e.g. \"R1\"" -msgstr "" +msgstr "örneğin \"T1\"" -#: tournaments/models.py:333 +#: tournaments/models.py msgid "stage" -msgstr "" +msgstr "aşama" -#: tournaments/models.py:334 +#: tournaments/models.py msgid "Preliminary = inrounds, elimination = outrounds" -msgstr "" +msgstr "Ön eleme = iç turlar, eleme = dış turlar" -#: tournaments/models.py:336 +#: tournaments/models.py msgid "draw type" -msgstr "" +msgstr "kura türü" -#: tournaments/models.py:337 +#: tournaments/models.py msgid "Which draw method to use" -msgstr "" +msgstr "Hangi kura yönteminin kullanılacağı" -#: tournaments/models.py:340 +#: tournaments/models.py msgid "break category" -msgstr "" +msgstr "break kategorisi" -#: tournaments/models.py:341 +#: tournaments/models.py msgid "If elimination round, which break category" -msgstr "" +msgstr "Eleme turu ise, hangi break kategorisi olduğu" -#: tournaments/models.py:344 +#: tournaments/models.py msgid "draw status" -msgstr "" +msgstr "kura durumu" -#: tournaments/models.py:345 +#: tournaments/models.py msgid "The status of this round's draw" -msgstr "" +msgstr "Bu turun kurasının durumu" -#: tournaments/models.py:348 +#: tournaments/models.py msgid "feedback weight" -msgstr "" +msgstr "Geri bildirim ağırlığı" -#: tournaments/models.py:350 +#: tournaments/models.py #, no-python-format msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." -msgstr "" +msgstr "Her bir jürinin genel puanının ne ölçüde geri bildirime ve temel puanlarına bağlı olduğu. 0'da, tamamen temel puanlarından, 1'de tamamen geri bildirimden çekilir." #. Translators: A silent round is a round for which results are not disclosed once the round is over. -#: tournaments/models.py:353 +#: tournaments/models.py msgid "silent" -msgstr "" +msgstr "sessiz" -#: tournaments/models.py:354 +#: tournaments/models.py msgid "If marked silent, information about this round (such as its results) will not be shown publicly." -msgstr "" +msgstr "Sessiz olarak işaretlenirse, bu turla ilgili bilgiler (sonuçları gibi) herkese açık olarak gösterilmez." -#: tournaments/models.py:356 +#: tournaments/models.py msgid "motions released" -msgstr "" +msgstr "yayınlanan önergeler" -#: tournaments/models.py:357 +#: tournaments/models.py msgid "Whether motions will appear on the public website, assuming that feature is turned on" -msgstr "" +msgstr "Önergelerin özelliğin açık olduğu varsayılarsa herkese açık sitede görünüp görünmeyeceği." -#: tournaments/models.py:358 +#: tournaments/models.py msgid "starts at" -msgstr "" +msgstr "başlangıç:" -#: tournaments/models.py:361 +#: tournaments/models.py +msgid "weight" +msgstr "ağırlık" + +#: tournaments/models.py +msgid "A factor for the points received in the round. For example, if 2, all points are doubled." +msgstr "Turda alınan puanlar için faktör. Örneğin, 2 ise, tüm puanlar iki katına çıkar." + +#: tournaments/models.py msgid "round" msgstr "tur" -#: tournaments/models.py:362 +#: tournaments/models.py msgid "rounds" msgstr "turlar" -#: tournaments/models.py:375 +#: tournaments/models.py msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." -msgstr "" +msgstr "Eleme aşamasındaki bir turun kura türü \"Eleme\" olarak ayarlanmalıdır." -#: tournaments/models.py:378 +#: tournaments/models.py msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." -msgstr "" +msgstr "Ön eleme aşamasındaki bir turun kura türü \"Eleme\" olarak ayarlanamaz." -#: tournaments/models.py:383 +#: tournaments/models.py msgid "Elimination rounds must have a break category." -msgstr "" +msgstr "Eleme turlarının bir break kategorisi olmalıdır." -#: tournaments/templates/assistant_tournament_index.html:4 +#: tournaments/templates/assistant_tournament_index.html msgid "Dashboard" -msgstr "" +msgstr "Tablo" -#: tournaments/templates/assistant_tournament_index.html:5 +#: tournaments/templates/assistant_tournament_index.html msgid "Overview" -msgstr "" +msgstr "Genel bakış" -#: tournaments/templates/assistant_tournament_index.html:8 +#: tournaments/templates/assistant_tournament_index.html #, python-format msgid "current round: %(round)s, status: %(status)s" -msgstr "" +msgstr "mevcut tur: %(round)s, durum: %(status)s" -#: tournaments/templates/blank_site_start.html:7 -msgid "Welcome to Tabbycat" -msgstr "" - -#: tournaments/templates/blank_site_start.html:20 +#: tournaments/templates/blank_site_start.html msgid "Welcome to Tabbycat!" -msgstr "" +msgstr "Tabbycat'e hoş geldiniz!" -#: tournaments/templates/blank_site_start.html:23 +#: tournaments/templates/blank_site_start.html msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." -msgstr "" +msgstr "Başlamak için kullanıcı hesabını oluşturmanız gerekir. Bu hesap bir \"süper kullanıcı\" hesabıdır: sitedeki her şeyi düzenleyebilir. Bu nedenle, güçlü bir parola kullanmalısınız." -#: tournaments/templates/blank_site_start.html:28 +#: tournaments/templates/blank_site_start.html msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." -msgstr "" +msgstr "Bu hesabı yalnızca bir kez oluşturabilirsiniz, ancak isterseniz, oluşturulduktan sonra kullanıcı adını ve parolayı değiştirebilir veya daha sonra yeni süper kullanıcılar ekleyebilirsiniz." -#: tournaments/templates/blank_site_start.html:32 -msgid "The e-mail address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." -msgstr "" +#: tournaments/templates/blank_site_start.html +msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." +msgstr "E-posta adresi parola sıfırlamak için kullanılır. Sağlamanız gerekmez, ancak bunu yapmazsanız, unutursanız parolanızı sıfırlayamazsınız." -#: tournaments/templates/blank_site_start.html:40 +#: tournaments/templates/blank_site_start.html msgid "Create Account" -msgstr "" +msgstr "Hesap Oluştur" -#: tournaments/templates/configure_tournament.html:5 +#: tournaments/templates/configure_tournament.html #, python-format msgid "Configure Tournament %(tournament)s" -msgstr "" +msgstr "%(tournament)s Turnuvasını Yapılandır" -#: tournaments/templates/configure_tournament.html:9 -#: tournaments/templates/create_tournament.html:5 +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html msgid "Tabbycat" msgstr "" -#: tournaments/templates/configure_tournament.html:20 +#: tournaments/templates/configure_tournament.html msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." -msgstr "" +msgstr "Turnuvanızı oluşturmayı tamamlamak için temel yapılandırma seçeneklerini belirleyin. Gerekirse bunların daha sonra (ve daha hassas kontrolle) her zaman değiştirilebileceğini unutmayın." -#: tournaments/templates/configure_tournament.html:25 +#: tournaments/templates/configure_tournament.html msgid "Configure Tournament" -msgstr "" +msgstr "Turnuvayı Yapılandır" -#: tournaments/templates/create_tournament.html:4 +#: tournaments/templates/create_tournament.html msgid "Create New Tournament" -msgstr "" +msgstr "Yeni Turnuva Oluştur" -#: tournaments/templates/create_tournament.html:15 +#: tournaments/templates/create_tournament.html #, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." -msgstr "" +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgstr "Tabbycat, kar amacı gütmeyen ve bağış toplama amaçlı olmayan turnuvalarda kullanmakta serbesttir (Ancak Tabbycat'e bağışlar teşvik edilir). Turnuvanız kâr amacı veya bağış toplama amacıyla düzenleniyorsa, lütfen ödeneme yapmanız gerektiğini unutmayın. Daha fazla ayrıntı için Tabbycat lisans sözleşmesini inceleyin." -#: tournaments/templates/create_tournament.html:27 +#: tournaments/templates/create_tournament.html msgid "Just trying out Tabbycat?" -msgstr "" +msgstr "Tabbycat'ı sadece deniyor musunuz?" -#: tournaments/templates/create_tournament.html:28 +#: tournaments/templates/create_tournament.html msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." -msgstr "" +msgstr "Tabbycat ile öğreniyor veya oynuyorsanız, sahte (ancak tipik) bir takım seti, hakemler, odalar ve benzerleriyle önceden doldurulmuş bir demo turnuvası oluşturmak en kolay yoldur. Daha sonra bu demo turnuvayı silebilir veya gerçek turnuvanız için yeniden yapabilirsiniz." -#: tournaments/templates/create_tournament.html:42 +#: tournaments/templates/create_tournament.html #, python-format msgid "Load %(demo)s" -msgstr "" +msgstr "%(demo)s Yükle" -#: tournaments/templates/create_tournament.html:49 +#: tournaments/templates/create_tournament.html msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." -msgstr "" +msgstr "Bu veri kümesini kullanarak ayarlanmış bir turnuvanız zaten var. Verilerin yeniden yüklenmesi, o turnuvadaki tüm verileri siler." -#: tournaments/templates/create_tournament.html:69 +#: tournaments/templates/create_tournament.html msgid "Create Tournament" -msgstr "" +msgstr "Turnuva Oluştur" -#: tournaments/templates/create_tournament.html:70 +#: tournaments/templates/create_tournament.html msgid "Cancel and go back to the site home page" -msgstr "" +msgstr "İptal et ve site ana sayfasına geri dön" -#: tournaments/templates/donations.html:4 -#: tournaments/templates/donations.html:5 -msgctxt "title" -msgid "Donate to Tabbycat" -msgstr "" - -#: tournaments/templates/donations.html:11 -msgid "Tabbycat is a volunteer effort. Since 2012, its maintainers have spent thousands of hours working on it." -msgstr "" - -#: tournaments/templates/donations.html:17 -msgid "Donating to Tabbycat helps the maintainers to meet recurring costs and justify our ongoing contributions in responding to support enquiries, keeping the software up to date, fixing bugs, and developing new features." -msgstr "" - -#: tournaments/templates/donations.html:24 -msgid "We suggest that tournaments budget for a donation of A$1 (Australian dollar) per team. For tournaments run for fundraising or for profit, whether partly or solely, this payment is required and your licence to use Tabbycat is conditional upon it. General donations from individuals or organisations are of course also much appreciated." -msgstr "" - -#: tournaments/templates/donations.html:34 -#, python-format -msgid "Our suggested donation from %(tournament)s, based on its size, is A$%(nteams)s. The easiest way to donate is via Paypal, but please don’t hesitate to email us if other methods would work better for you. Also, feel free to get in touch if you require an invoice or receipt for the payment." -msgstr "" - -#: tournaments/templates/donations.html:46 -msgid "The easiest way to donate is via Paypal. Please contact us if you require other options." -msgstr "" - -#: tournaments/templates/fix_debate_teams.html:6 +#: tournaments/templates/fix_debate_teams.html msgid "Debate Team Missing" -msgstr "" +msgstr "Tartışma Takımı Eksik" -#: tournaments/templates/fix_debate_teams.html:16 +#: tournaments/templates/fix_debate_teams.html msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." -msgstr "" +msgstr "Tabbycat her zaman, her maçda, her tarafa bir ve sadece bir takım atanmasını gerektirir. Durum böyle olmadığında, bu hata oluşur. Genellikle bu, manuel olarak düzenlenmiş maçların sonucudur." -#: tournaments/templates/fix_debate_teams.html:24 +#: tournaments/templates/fix_debate_teams.html msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" -msgstr "" +msgstr "Probleme sebep olan maçların listesi aşağıdadır. Bunları düzeltmek için aşağıdakileri yapmanız gerekir:" #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:33 +#: tournaments/templates/fix_debate_teams.html msgid "Click the Fix this debate button for that debate." -msgstr "" +msgstr "Maç için Bu maçı düzelt düğmesine tıklayın." #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:39 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." -msgstr "" +msgstr "Tartışmada bulunması gereken her tarafın mevcut olduğundan ve atanmış bir takım olduğundan emin olun. Bir takım eksikse, boş bir satır bulun ve bir takım seçmek için büyüteç kullanın. Ardından yeni takımın taraf ayarını buna göre ayarlayın." #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:48 +#: tournaments/templates/fix_debate_teams.html msgid "Ensure that no side appears more than once in the debate." -msgstr "" +msgstr "Tartışmada hiçbir tarafın birden fazla olmadığından emin olun." #. Translators: This is in a list of instructions. -#: tournaments/templates/fix_debate_teams.html:55 +#: tournaments/templates/fix_debate_teams.html msgid "Save the changes." -msgstr "" +msgstr "Değişiklikleri kaydedin." -#: tournaments/templates/fix_debate_teams.html:62 +#: tournaments/templates/fix_debate_teams.html msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." -msgstr "" +msgstr "Tüm tartışmaları düzelttikten sonra, hata tekrarlanmadan orijinal olarak bulunduğunuz sayfaya geri dönebilmeniz gerekir." -#: tournaments/templates/fix_debate_teams.html:68 +#: tournaments/templates/fix_debate_teams.html #, python-format msgid "You can also see all the debates in the Debates section of the Edit Database Area." -msgstr "" +msgstr "Tüm maçları veritabanı düzenle kısmının maçlar kısmında da görebilirsiniz." -#: tournaments/templates/fix_debate_teams.html:82 +#: tournaments/templates/fix_debate_teams.html msgid "Debate ID" -msgstr "" +msgstr "Tartışma Kimliği" -#: tournaments/templates/fix_debate_teams.html:85 +#: tournaments/templates/fix_debate_teams.html #, python-format -msgid "Team(s) on %(side)s" -msgstr "" +msgid "Teams on %(side)s" +msgstr "%(side)s tarafındaki takımlar" -#: tournaments/templates/fix_debate_teams.html:90 +#: tournaments/templates/fix_debate_teams.html msgid "Link to fix this debate" -msgstr "" +msgstr "Bu tartışmayı düzeltmek için link" -#: tournaments/templates/fix_debate_teams.html:101 +#: tournaments/templates/fix_debate_teams.html msgid "No teams" -msgstr "" +msgstr "Takım yok" -#: tournaments/templates/fix_debate_teams.html:109 +#: tournaments/templates/fix_debate_teams.html msgid "Multiple teams" -msgstr "" +msgstr "Birden fazla takım" -#: tournaments/templates/fix_debate_teams.html:120 +#: tournaments/templates/fix_debate_teams.html msgctxt "button label" msgid "Fix this debate" -msgstr "" +msgstr "Bu tartışmayı düzelt" -#: tournaments/templates/fix_debate_teams.html:127 +#: tournaments/templates/fix_debate_teams.html msgid "It looks like all debates are in good shape!" -msgstr "" +msgstr "Tüm tartışmalar iyi gibi görünüyor!" -#: tournaments/templates/fix_debate_teams.html:128 +#: tournaments/templates/fix_debate_teams.html msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." -msgstr "" +msgstr "Bu sayfaya yönlendirilmeye devam ediyorsanız ve nedenini bilmiyorsanız, lütfen Tabbycat'in geliştiricileriyle iletişime geçin." -#: tournaments/templates/public_tournament_index.html:5 -#: tournaments/templates/public_tournament_index.html:9 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Welcome to %(tournament)s" -msgstr "" +msgstr "%(tournament)s turnuvasına hoş geldiniz!" -#: tournaments/templates/public_tournament_index.html:18 +#: tournaments/templates/public_tournament_index.html msgid "There is currently no public information available for this tournament." -msgstr "" +msgstr "Şu anda bu turnuva için herkese açık bir bilgi bulunmamaktadır." -#: tournaments/templates/public_tournament_index.html:36 +#: tournaments/templates/public_tournament_index.html msgid "Team Tab" -msgstr "" +msgstr "Takım Tabı" -#: tournaments/templates/public_tournament_index.html:43 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Team Tab" -msgstr "" +msgstr "%(category)s Takım Tabı" -#: tournaments/templates/public_tournament_index.html:52 +#: tournaments/templates/public_tournament_index.html msgid "Speaker Tab" -msgstr "" +msgstr "Konuşmacı Tabı" -#: tournaments/templates/public_tournament_index.html:60 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Speaker Tab" -msgstr "" +msgstr "%(category)s Konuşmacı Tabı" -#: tournaments/templates/public_tournament_index.html:70 +#: tournaments/templates/public_tournament_index.html msgid "Replies Tab" -msgstr "" +msgstr "Özet Tabı" -#: tournaments/templates/public_tournament_index.html:76 +#: tournaments/templates/public_tournament_index.html msgid "Adjudicator Tab" -msgstr "" +msgstr "Jüri Tabı" -#: tournaments/templates/public_tournament_index.html:82 +#: tournaments/templates/public_tournament_index.html msgid "Motions Tab" -msgstr "" +msgstr "Önerge Tabı" -#: tournaments/templates/public_tournament_index.html:88 -#: tournaments/templates/public_tournament_index.html:135 +#: tournaments/templates/public_tournament_index.html msgid "Sides" -msgstr "" +msgstr "Taraflar" -#: tournaments/templates/public_tournament_index.html:97 -#: tournaments/templates/public_tournament_index.html:201 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "Draw for %(round)s" -msgstr "" +msgstr "%(round)s için kura" -#: tournaments/templates/public_tournament_index.html:101 +#: tournaments/templates/public_tournament_index.html msgid "Draws for Current Rounds" -msgstr "" +msgstr "Mevcut Turlar için Kuralar" -#: tournaments/templates/public_tournament_index.html:106 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(round)s's draw has yet to be released" -msgstr "" +msgstr "%(round)s'un kurası henüz açıklanmadı." -#: tournaments/templates/public_tournament_index.html:110 +#: tournaments/templates/public_tournament_index.html msgid "The draw for the next round has yet to be released" -msgstr "" +msgstr "Bir sonraki tur için kura çekimi henüz açıklanmadı." -#: tournaments/templates/public_tournament_index.html:117 +#: tournaments/templates/public_tournament_index.html msgid "Check-Ins" -msgstr "" +msgstr "Girişler" -#: tournaments/templates/public_tournament_index.html:123 +#: tournaments/templates/public_tournament_index.html msgid "Results" -msgstr "" +msgstr "Sonuçlar" -#: tournaments/templates/public_tournament_index.html:129 +#: tournaments/templates/public_tournament_index.html msgid "Motions" msgstr "Önergeler" -#: tournaments/templates/public_tournament_index.html:141 +#: tournaments/templates/public_tournament_index.html msgid "Team Standings" -msgstr "" +msgstr "Takım Sıralamaları" -#: tournaments/templates/public_tournament_index.html:148 +#: tournaments/templates/public_tournament_index.html #, python-format msgid "%(category)s Break" -msgstr "" +msgstr "%(category)s Break" -#: tournaments/templates/public_tournament_index.html:157 +#: tournaments/templates/public_tournament_index.html msgid "Breaking Adjudicators" -msgstr "" +msgstr "Break Olan Jüriler" -#: tournaments/templates/public_tournament_index.html:163 +#: tournaments/templates/public_tournament_index.html msgid "Diversity" -msgstr "" +msgstr "Çeşitlilik" -#: tournaments/templates/public_tournament_index.html:169 +#: tournaments/templates/public_tournament_index.html msgid "Participants" -msgstr "" +msgstr "Katılımcılar" -#: tournaments/templates/public_tournament_index.html:175 +#: tournaments/templates/public_tournament_index.html msgid "Institutions" -msgstr "" +msgstr "Kurumlar" -#: tournaments/templates/public_tournament_index.html:181 +#: tournaments/templates/public_tournament_index.html msgid "Feedback Progress" -msgstr "" +msgstr "Geri Bildirim Durumu" -#: tournaments/templates/public_tournament_index.html:187 -msgid "Enter Ballot" -msgstr "" +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Enter Ballot for %(round)s" +msgstr "%(round)s İçin Ballot Gir" -#: tournaments/templates/public_tournament_index.html:193 +#: tournaments/templates/public_tournament_index.html msgid "Enter Feedback" -msgstr "" +msgstr "Geri Bildirim Girin" -#: tournaments/templates/public_tournament_index.html:215 +#: tournaments/templates/public_tournament_index.html msgid "Tournament Staff" -msgstr "" +msgstr "Turnuva personeli" -#: tournaments/templates/round_complete_check.html:4 -#: tournaments/templates/round_complete_check.html:6 +#: tournaments/templates/round_complete_check.html msgid "Confirm Round Completion" -msgstr "" +msgstr "Tur Tamamlanmasını Onayla" -#: tournaments/templates/round_complete_check.html:13 +#: tournaments/templates/round_complete_check.html msgid "Enter Results" -msgstr "" +msgstr "Sonuç Gir" -#: tournaments/templates/round_complete_check.html:18 +#: tournaments/templates/round_complete_check.html msgid "Emails have already been sent." -msgstr "" +msgstr "E-postalar zaten gönderildi." -#: tournaments/templates/round_complete_check.html:23 +#: tournaments/templates/round_complete_check.html msgid "Email Team Wins/Losses" -msgstr "" +msgstr "Takım galibiyet ve mağlubiyetlerini e-postala." -#: tournaments/templates/round_complete_check.html:25 +#: tournaments/templates/round_complete_check.html msgid "Email Team Points" -msgstr "" +msgstr "Takım puanlarını e-postala." -#: tournaments/templates/round_complete_check.html:34 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" -msgstr "" +msgstr "%(round)s turunu tamamlandı olarak işaretle" -#: tournaments/templates/round_complete_check.html:41 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed Anyway" -msgstr "" +msgstr "%(round)s turunu yinede tamamlandı olarak işaretle" -#: tournaments/templates/round_complete_check.html:50 +#: tournaments/templates/round_complete_check.html #, python-format msgid "Go to %(round)s" -msgstr "" +msgstr "%(round)s konumuna git" -#: tournaments/templates/round_complete_check.html:62 +#: tournaments/templates/round_complete_check.html #, python-format msgid "%(round)s has already been marked as completed!" -msgstr "" +msgstr "%(round)s zaten tamamlandı olarak işaretlenmiş!" -#: tournaments/templates/round_complete_check.html:67 +#: tournaments/templates/round_complete_check.html #, python-format msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Belirtilen önceki tur henüz tamamlanmadı: %(prior_rounds_not_completed)s. Bu turu tamamlandı olarak işaretlemeden önce tamamlamalısınız." +msgstr[1] "Belirtilen önceki turlar henüz tamamlanmadı: %(prior_rounds_not_completed)s. Bu turu tamamlandı olarak işaretlemeden önce tamamlamalısınız." -#: tournaments/templates/round_complete_check.html:77 +#: tournaments/templates/round_complete_check.html #, python-format msgid "All ballots from %(round)s are confirmed. You should be good to go!" -msgstr "" +msgstr "%(round)s için gelen tüm ballotlar onaylandı. Herşey yolunda!" -#: tournaments/templates/round_complete_check.html:83 +#: tournaments/templates/round_complete_check.html #, python-format msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Hala onaylanmamış %(num_unconfirmed) ballot var. Tüm ballotlar onaylanana kadar bir sonraki tura geçmemelisiniz. " +msgstr[1] "Hala onaylanmamış %(num_unconfirmed) ballot var. Tüm ballotlar onaylanana kadar bir sonraki tura geçmemelisiniz. " -#: tournaments/templates/round_complete_check.html:99 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " -msgstr "" +msgstr "

    Bu tur sessiz bir turdur.

    Sonuçların herkese açık görünümü etkinleştirilse bile, bu turun sonuçları, bu tur tamamlandıktan sonra da herkese açık görünümden gizlenecektir.

    Veritabanı Düzenle bölgesinden hangi turların sessiz olacağını değiştirebilirsiniz.

    " -#: tournaments/templates/round_complete_check.html:113 +#: tournaments/templates/round_complete_check.html #, python-format msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " -msgstr "" +msgstr "

    %(round)s sonuçları, bu turu tamamlandı olarak işaretlediğinizde çevrimiçi olarak yayınlanacaktır!

    Bu tur sessiz bir tur değildir ve sonuçların herkese açık görünümü etkinleştirilir.

    Yalnızca bu turun sonuçlarını gizli tutmak istiyorsanız, bu turu Veritabanı düzenle bölümünden sessiz olarak işaretleyebilirsiniz.

    Sonuçların herkese açık görünümünü devre dışı bırakmak istiyorsanız, bunu turnuva ayarları bölümünden yapabilirsiniz.

    " -#: tournaments/templates/set_current_round.html:5 -#: tournaments/templates/set_current_round.html:7 -#: tournaments/templates/set_current_round.html:72 +#: tournaments/templates/set_current_round.html msgid "Set Current Round" -msgstr "" +msgstr "Geçerli Turu Ayarla" -#: tournaments/templates/set_current_round.html:14 +#: tournaments/templates/set_current_round.html msgid "Back to Configuration" -msgstr "" +msgstr "Yapılandırmaya Geri Dön" -#: tournaments/templates/set_current_round.html:33 +#: tournaments/templates/set_current_round.html #, python-format msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." -msgstr "" +msgstr "Şu anda hiçbir tur ayarlanmamıştır. Tabbycat'in çalışması için lütfen %(tournament)s turnuvasının geçerli turu olacak şekilde ayarlayın." -#: tournaments/templates/set_current_round.html:42 +#: tournaments/templates/set_current_round.html #, python-format msgid "On this page, you can set the current round of the tournament %(tournament)s." -msgstr "" +msgstr "Bu sayfada, %(tournament)s turnuvasının geçerli turunu ayarlayabilirsiniz." -#: tournaments/templates/set_current_round.html:53 +#: tournaments/templates/set_current_round.html #, python-format msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." -msgstr "" +msgstr "%(tournament)s turnuvasının turu yok. Geçerli turu ayarlayabilmeniz için tur eklemeniz ve bunları bu turnuvayla ilişkilendirmeniz gerekir." -#: tournaments/templates/site_inactive_tournaments.html:4 -#: tournaments/templates/site_inactive_tournaments.html:5 -#: tournaments/templates/site_index.html:46 -msgid "Inactive Tournaments" -msgstr "" +#: tournaments/templates/set_round_weights.html +msgctxt "page title" +msgid "Set Round Weights for Tapered Scoring" +msgstr "Konik Puanlama için Tur Ağırlıkları Ayarla" + +#: tournaments/templates/set_round_weights.html +msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." +msgstr "Tur ağırlıkları, her turda alınan puanların katsayılarıdır. Bir takım, 3 ağırlığında bir turda elde ettiği takım puanlarının üç katını alır." -#: tournaments/templates/site_index.html:4 +#: tournaments/templates/set_round_weights.html +msgctxt "button" +msgid "Set weights" +msgstr "Ağırlıkları ayarla" + +#: tournaments/templates/site_index.html msgid "Welcome!" -msgstr "" +msgstr "Hoş geldiniz!" -#: tournaments/templates/site_index.html:20 +#: tournaments/templates/site_index.html msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" -msgstr "" +msgstr "Bu sitede herhangi bir turnuva yok gibi görünüyor. Oluşturmak ister misiniz?" -#: tournaments/templates/site_index.html:29 +#: tournaments/templates/site_index.html msgid "There are currently no active tournaments set up on this site." -msgstr "" +msgstr "Şu anda bu sitede kurulmuş aktif bir turnuva bulunmamaktadır." -#: tournaments/templates/site_index.html:33 +#: tournaments/templates/site_index.html msgid "There are currently no tournaments set up on this site." -msgstr "" +msgstr "Şu anda bu sitede herhangi bir turnuva düzenlenmemiştir." -#: tournaments/templates/site_index.html:54 +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "(etkin değil)" + +#: tournaments/templates/site_index.html msgid "New Tournament" -msgstr "" +msgstr "Yeni Turnuva" -#: tournaments/templates/site_index.html:57 +#: tournaments/templates/site_index.html msgid "Edit Database Area" -msgstr "" +msgstr "Veritabanı Alanını Düzenle" -#: tournaments/templates/site_index.html:60 +#: tournaments/templates/site_index.html msgid "Send a Test Email" -msgstr "" +msgstr "Test E-postası Gönder" -#: tournaments/templates/site_index.html:69 +#: tournaments/templates/site_index.html +msgid "Import DebateXML" +msgstr "DebateXML'i İçe Aktar" + +#: tournaments/templates/site_index.html #, python-format -msgid "Change Password (%(user)s)" -msgstr "" +msgid "Get API Token / Change Password (%(user)s)" +msgstr "API Belirteci Al / Parola Değiştir (%(user)s)" -#: tournaments/templates/site_index.html:73 +#: tournaments/templates/site_index.html #, python-format msgid "Log Out (%(user)s)" -msgstr "" +msgstr "Oturumu Kapat (%(user)s)" -#: tournaments/templates/site_index.html:79 +#: tournaments/templates/site_index.html msgid "Log In as Admin" -msgstr "" +msgstr "Yönetici olarak oturum aç" -#: tournaments/templates/tournament_index.html:8 +#: tournaments/templates/tournament_index.html #, python-format msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." -msgstr "" +msgstr "Umarız turnuvanız için Tabbycat'i kullanmaktan keyif almışsınızdır. Devam eden gelişimini ve bakımını desteklemek için projeyemize bağışta bulunursanız seviniriz. Bu büyüklükte bir turnuva için %(amount)s$ bağış yapmanızı öneririz. Turnuvanız kâr amacı gütmek veya bağış toplamak için yapılıyorsa, bu ödemeyi yapmanın Tabbycat'in yazılım lisansının zorunlu bir koşulu olduğunu unutmayın. Bağış yapma hakkında daha fazla bilgi edinin." -#: tournaments/templates/tournament_index.html:24 +#: tournaments/templates/tournament_index.html msgid "Welcome to your new tournament!" -msgstr "" +msgstr "Yeni turnuvanıza hoş geldiniz!" -#: tournaments/templates/tournament_index.html:26 +#: tournaments/templates/tournament_index.html msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." -msgstr "" +msgstr "Bir sonraki adım, ilk turnuva verilerinizi içe aktarmaktır: turnuvanızdaki kurumlar, takımlar, jüriler ve odalar. Bunu yapmanın birkaç yolu vardır. Küçük ve orta ölçekli turnuvalar için, basit aktarıcı en iyisidir." #. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. -#: tournaments/templates/tournament_index.html:33 +#: tournaments/templates/tournament_index.html #, python-format msgid "For more information, please consult our documentation on importing initial data." -msgstr "" +msgstr "Daha fazla bilgi için lütfen ilk ker içe veri aktarma belgelerimize bakın." -#: tournaments/templates/tournament_index.html:43 +#: tournaments/templates/tournament_index.html msgid "Use the simple importer to add your initial data." -msgstr "" +msgstr "İlk verilerinizi eklemek için basit aktarıcıyı kullanın." -#: tournaments/templates/tournament_index.html:49 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the checkins area to begin creating a draw for %(round)s" -msgstr "" +msgid "Mark participants as available to prepare a draw for %(round)s" +msgstr "%(round)s için kura hazırlamak üzere katılımcıları uygun olarak işaretleyin" -#: tournaments/templates/tournament_index.html:57 +#: tournaments/templates/tournament_index.html #, python-format msgid "Go to the draw area to allocate adjudicators for %(round)s" -msgstr "" +msgstr "%(round)s için jüri tahsis etmek üzere kura alanına git" -#: tournaments/templates/tournament_index.html:65 +#: tournaments/templates/tournament_index.html #, python-format -msgid "Go to the results area to begin entering ballots for %(round)s" -msgstr "" +msgid "Go to the results area to enter ballots for %(round)s" +msgstr "%(round)s için ballot girmek üzere sonuçlar alanına git" + +#: tournaments/templates/tournament_index.html +msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." +msgstr "Kullanıcıların yeni hesaplar oluşturmasına izin veren bir URL'yi etkinleştirdiniz. Turnuva başladıktan sonra devre dışı bırakmalısınız." -#: tournaments/templates/tournament_index_links.html:10 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Administrator area for %(tn)s" -msgstr "" +msgstr "%(tn)s için yönetici alanı" -#: tournaments/templates/tournament_index_links.html:17 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Assistant area for %(tn)s" -msgstr "" +msgstr "%(tn)s için asistan alanı" -#: tournaments/templates/tournament_index_links.html:22 +#: tournaments/templates/tournament_index_links.html #, python-format msgid "Public area for %(tn)s" -msgstr "" +msgstr "%(tn)s için ortak alan" -#: tournaments/utils.py:12 +#: tournaments/utils.py msgid "affirmative" -msgstr "" +msgstr "Olumlu" -#: tournaments/utils.py:13 +#: tournaments/utils.py msgid "negative" -msgstr "" +msgstr "muhalefet" -#: tournaments/utils.py:14 +#: tournaments/utils.py msgid "affirmative team" -msgstr "" +msgstr "hükümet" -#: tournaments/utils.py:15 +#: tournaments/utils.py msgid "negative team" -msgstr "" +msgstr "muhalefet" -#: tournaments/utils.py:16 +#: tournaments/utils.py msgid "Aff" -msgstr "" +msgstr "HÜK" -#: tournaments/utils.py:17 +#: tournaments/utils.py msgid "Neg" -msgstr "" +msgstr "MUH" -#: tournaments/utils.py:20 +#: tournaments/utils.py msgid "government" -msgstr "" +msgstr "hükümet" -#: tournaments/utils.py:21 tournaments/utils.py:29 +#: tournaments/utils.py msgid "opposition" -msgstr "" +msgstr "muhalefet" -#: tournaments/utils.py:22 +#: tournaments/utils.py msgid "government team" -msgstr "" +msgstr "hükümet takımı" -#: tournaments/utils.py:23 tournaments/utils.py:31 +#: tournaments/utils.py msgid "opposition team" -msgstr "" +msgstr "muhalefet takımı" -#: tournaments/utils.py:24 +#: tournaments/utils.py msgid "Gov" -msgstr "" +msgstr "HÜK" -#: tournaments/utils.py:25 tournaments/utils.py:33 +#: tournaments/utils.py msgid "Opp" -msgstr "" +msgstr "MUH" -#: tournaments/utils.py:28 +#: tournaments/utils.py msgid "proposition" -msgstr "" +msgstr "Teklif" -#: tournaments/utils.py:30 +#: tournaments/utils.py msgid "proposition team" -msgstr "" +msgstr "teklif ekibi" -#: tournaments/utils.py:32 +#: tournaments/utils.py msgid "Prop" -msgstr "" +msgstr "TKLF" -#: tournaments/utils.py:36 +#: tournaments/utils.py msgid "pro" -msgstr "" +msgstr "lehinde" -#: tournaments/utils.py:37 +#: tournaments/utils.py msgid "con" -msgstr "" +msgstr "alehinde" -#: tournaments/utils.py:38 +#: tournaments/utils.py msgid "pro team" -msgstr "" +msgstr "lehinde takım" -#: tournaments/utils.py:39 +#: tournaments/utils.py msgid "con team" -msgstr "" +msgstr "alehinde takım" -#: tournaments/utils.py:40 +#: tournaments/utils.py msgid "Pro" -msgstr "" +msgstr "Lehinde" -#: tournaments/utils.py:41 +#: tournaments/utils.py msgid "Con" -msgstr "" +msgstr "Alehinde" -#: tournaments/utils.py:44 +#: tournaments/utils.py msgid "appellant" -msgstr "" +msgstr "temyiz eden" -#: tournaments/utils.py:45 +#: tournaments/utils.py msgid "respondent" -msgstr "" +msgstr "yanıtlayan" -#: tournaments/utils.py:46 +#: tournaments/utils.py msgid "appellant team" -msgstr "" +msgstr "temyiz eden takım" -#: tournaments/utils.py:47 +#: tournaments/utils.py msgid "respondent team" -msgstr "" +msgstr "yanıtlayan takım" -#: tournaments/utils.py:48 +#: tournaments/utils.py msgid "App" -msgstr "" +msgstr "TEM" -#: tournaments/utils.py:49 +#: tournaments/utils.py msgid "Res" -msgstr "" +msgstr "YAN" -#: tournaments/utils.py:54 +#: tournaments/utils.py msgid "opening government" msgstr "hükümet açılış" -#: tournaments/utils.py:55 +#: tournaments/utils.py msgid "opening opposition" msgstr "muhalefet açılış" -#: tournaments/utils.py:56 +#: tournaments/utils.py msgid "closing government" msgstr "hükümet kapanış" -#: tournaments/utils.py:57 +#: tournaments/utils.py msgid "closing opposition" msgstr "muhalefet kapanış" -#: tournaments/utils.py:58 +#: tournaments/utils.py msgid "opening government team" -msgstr "" +msgstr "hükümet açılış takımı" -#: tournaments/utils.py:59 +#: tournaments/utils.py msgid "opening opposition team" -msgstr "" +msgstr "muhalefet açılış takımı" -#: tournaments/utils.py:60 +#: tournaments/utils.py msgid "closing government team" -msgstr "" +msgstr "hükümet kapanış takımı" -#: tournaments/utils.py:61 +#: tournaments/utils.py msgid "closing opposition team" -msgstr "" +msgstr "muhalefet kapanış takımı" -#: tournaments/utils.py:62 +#: tournaments/utils.py msgctxt "BP position" msgid "OG" msgstr "HA" -#: tournaments/utils.py:63 +#: tournaments/utils.py msgctxt "BP position" msgid "OO" msgstr "MA" -#: tournaments/utils.py:64 +#: tournaments/utils.py msgctxt "BP position" msgid "CG" msgstr "HK" -#: tournaments/utils.py:65 +#: tournaments/utils.py msgctxt "BP position" msgid "CO" msgstr "MK" -#: tournaments/utils.py:78 +#: tournaments/utils.py #, python-format msgid "Round %(number)d" msgstr "Tur %(number)d" #. Translators: This stands for "Round %(number)d". -#: tournaments/utils.py:80 +#: tournaments/utils.py #, python-format msgid "R%(number)d" -msgstr "" +msgstr "T%(number)d" -#: tournaments/views.py:154 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" -msgstr "" +msgstr "%(round)s tamamlandı olarak işaretlendi. Tüm turlar artık tamamlandı, bu yüzden turnuvayı bitirdiniz! Tebrikler!" -#: tournaments/views.py:160 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." -msgstr "" +msgstr "%(round)s tamamlandı olarak işaretlendi. Bu sekanstaki son tur! Tamamlandı olarak işaretlenmemiş ilk tura geri dönülüyor." -#: tournaments/views.py:173 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." -msgstr "" +msgstr "%(round)s tamamlandı olarak işaretlendi. Ön eleme turlarının sonuna geldiniz! Tebrikler! Bir sonraki adım, break oluşturmaktır." -#: tournaments/views.py:179 +#: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." -msgstr "" +msgstr "%(round)s tamamlandı olarak işaretlendi. Bu son ön eleme turuydu, ancak bir veya daha fazla ön tur hala tamamlanmadı. İlk tamamlanmamış ön tura geri dönülüyor." -#: tournaments/views.py:187 +#: tournaments/views.py #, python-format msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" -msgstr "" - -#: tournaments/views.py:216 -msgid "Whoops! It looks like someone's already created the first user account. Please log in." -msgstr "" +msgstr "%(this_round)s tamamlandı olarak işaretlendi. %(next_round)s tura geçiyoruz!" -#: tournaments/views.py:224 -#, python-format -msgid "Welcome! You've created an account for %s." -msgstr "" - -#: tournaments/views.py:239 +#: tournaments/views.py msgid "8-team generic dataset" -msgstr "" +msgstr "8 takımlı genel veri kümesi" -#: tournaments/views.py:240 +#: tournaments/views.py msgid "24-team Australs dataset" -msgstr "" +msgstr "24 takımlı Australs veri kümesi" -#: tournaments/views.py:241 +#: tournaments/views.py msgid "88-team BP dataset" -msgstr "" +msgstr "88 takımlı İP veri kümesi" + +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." +msgstr "Konik puanlama için tur ağırlıkları başarıyla ayarlandı." diff --git a/tabbycat/utils/locale/tr/LC_MESSAGES/django.po b/tabbycat/utils/locale/tr/LC_MESSAGES/django.po index ac4c27c5924..614ef24ab31 100644 --- a/tabbycat/utils/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/utils/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:33\n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" "Last-Translator: philip_tc\n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -15,319 +15,314 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/utils/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 954\n" -#: utils/forms.py:25 -msgid "E-mail address" -msgstr "" +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "Tur" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "Takım" + +#: utils/admin.py +msgid "Speaker" +msgstr "Konuşmacı" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "Turnuva" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "Taraf" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "Önerge" -#: utils/tables.py:43 +#: utils/admin.py +msgid "Confirmed" +msgstr "Onaylanmış" + +#: utils/admin.py +msgid "Adjudicator" +msgstr "Jüri" + +#: utils/tables.py msgid "No Data Available" -msgstr "" +msgstr "Veri Yok" -#: utils/tables.py:151 utils/tables.py:152 +#: utils/tables.py msgid "Ⓒ" -msgstr "Ⓑ" +msgstr "Ⓒ" -#: utils/tables.py:153 +#: utils/tables.py msgid "Ⓣ" -msgstr "" +msgstr "Ⓣ" -#: utils/tables.py:157 +#: utils/tables.py msgid "chair" msgstr "başkan" -#: utils/tables.py:158 +#: utils/tables.py msgid "panellist" -msgstr "" +msgstr "panelist" -#: utils/tables.py:159 +#: utils/tables.py msgid "trainee" -msgstr "" +msgstr "acemi" -#: utils/tables.py:162 +#: utils/tables.py msgid "—" msgstr "" -#: utils/tables.py:226 utils/tables.py:232 +#: utils/tables.py +msgid "Redacted" +msgstr "Düzeltilmiş" + +#: utils/tables.py #, python-format msgid "View %(a)s's %(d)s Record" -msgstr "" +msgstr "%(a)s'nin %(d)s Kaydını Görüntüle" -#: utils/tables.py:242 utils/tables.py:247 +#: utils/tables.py #, python-format msgid "View %(team)s's Record" -msgstr "" +msgstr "%(team)s'in Kaydını Görüntüle" -#: utils/tables.py:269 +#: utils/tables.py #, python-format msgid "Code name: %(name)s" -msgstr "" +msgstr "Kod adı: %(name)s" -#: utils/tables.py:271 +#: utils/tables.py #, python-format msgid "Real name: %(name)s" -msgstr "" +msgstr "Gerçek adı: %(name)s" -#: utils/tables.py:283 +#: utils/tables.py #, python-format msgid "%(team)s won" -msgstr "" +msgstr "%(team)s galip" -#: utils/tables.py:288 +#: utils/tables.py #, python-format msgid "%(team)s lost" -msgstr "" +msgstr "%(team)s mağlup" -#: utils/tables.py:293 utils/tables.py:321 utils/tables.py:339 +#: utils/tables.py #, python-format msgid "%(team)s—no result" -msgstr "" +msgstr "%(team)s—sonuç yok" -#: utils/tables.py:301 +#: utils/tables.py #, python-format -msgid "%(team)s took 1st" -msgstr "" - -#: utils/tables.py:306 -#, python-format -msgid "%(team)s took 2nd" -msgstr "" +msgid "%(team)s placed %(place)s" +msgstr "%(team)s (place)s oldu" -#: utils/tables.py:311 -#, python-format -msgid "%(team)s took 3rd" -msgstr "" - -#: utils/tables.py:316 -#, python-format -msgid "%(team)s took 4th" -msgstr "" - -#: utils/tables.py:329 +#: utils/tables.py #, python-format msgid "%(team)s is advancing" -msgstr "" +msgstr "%(team)s ilerliyor" -#: utils/tables.py:334 +#: utils/tables.py #, python-format msgid "%(team)s was eliminated" -msgstr "" +msgstr "%(team)s elendi" -#: utils/tables.py:352 +#: utils/tables.py +msgid "View/edit debate ballot" +msgstr "Tartışma ballotunu görüntüle/düzenle" + +#: utils/tables.py +msgid "View debate ballot" +msgstr "Tartışma ballotunu görüntüle" + +#: utils/tables.py #, python-format msgid " vs %(opposition)s" -msgstr "" +msgstr " vs %(opposition)s" -#: utils/tables.py:359 +#: utils/tables.py #, python-format msgid "Won against %(team)s" -msgstr "" +msgstr "%(team)s karşı kazandı" -#: utils/tables.py:361 +#: utils/tables.py #, python-format msgid "Lost to %(team)s" -msgstr "" +msgstr "%(team)s karşı kaybetti" -#: utils/tables.py:363 +#: utils/tables.py #, python-format msgid "No result for debate against %(team)s" -msgstr "" +msgstr "%(team)s karşı maç için sonuç yok" -#: utils/tables.py:371 utils/tables.py:450 +#: utils/tables.py #, python-format msgid "Total speaker score: %s" -msgstr "" - -#: utils/tables.py:376 utils/tables.py:455 -msgid "View/edit debate ballot" -msgstr "" +msgstr "Toplam konuşmacı puanı: %s" -#: utils/tables.py:382 utils/tables.py:461 -msgid "View debate ballot" -msgstr "" - -#: utils/tables.py:403 +#: utils/tables.py msgid "Teams in debate:" -msgstr "" +msgstr "Maçtaki takımlar:" -#: utils/tables.py:406 +#: utils/tables.py #, python-format msgid "%(team)s (%(side)s)" msgstr "%(team)s (%(side)s)" -#: utils/tables.py:407 utils/tables.py:411 utils/tables.py:437 +#: utils/tables.py msgid "??" msgstr "??" -#: utils/tables.py:425 +#: utils/tables.py msgid "advancing" -msgstr "" +msgstr "ilerleyen" -#: utils/tables.py:426 +#: utils/tables.py msgid "Advancing" -msgstr "" +msgstr "İlerleyen" -#: utils/tables.py:428 +#: utils/tables.py msgid "eliminated" -msgstr "" +msgstr "elenen" -#: utils/tables.py:429 +#: utils/tables.py msgid "Eliminated" -msgstr "" +msgstr "Elenen" -#: utils/tables.py:432 utils/tables.py:442 +#: utils/tables.py msgid "No result for debate" -msgstr "" +msgstr "Maç için sonuç yok" -#: utils/tables.py:439 +#: utils/tables.py #, python-format msgid "Placed %(place)s" -msgstr "" - -#: utils/tables.py:470 -msgid "Tournament" -msgstr "Turnuva" +msgstr "%(place)s oldu" -#: utils/tables.py:479 -msgid "Round" -msgstr "Tur" - -#: utils/tables.py:497 utils/tables.py:683 +#: utils/tables.py msgid "Name" -msgstr "" +msgstr "İsim" -#: utils/tables.py:503 utils/tables.py:665 +#: utils/tables.py msgid "Institution" -msgstr "" +msgstr "Kurum" -#: utils/tables.py:509 +#: utils/tables.py msgid "Member of the Adjudication Core" -msgstr "" +msgstr "jüri komitesi üyesi" -#: utils/tables.py:516 +#: utils/tables.py msgid "Independent Adjudicator" -msgstr "" +msgstr "Bağımsız jüri" -#: utils/tables.py:524 +#: utils/tables.py msgid "Always Trainee" -msgstr "" +msgstr "her zaman acemi" -#: utils/tables.py:562 +#: utils/tables.py msgid "in minority" -msgstr "" +msgstr "azınlıkta" -#: utils/tables.py:595 +#: utils/tables.py msgid "Debate Adjudicators" -msgstr "" - -#: utils/tables.py:626 -msgid "Order as listed" -msgstr "" - -#: utils/tables.py:633 -msgid "?" -msgstr "" +msgstr "Maç jürileri" -#: utils/tables.py:636 -msgid "Motion" -msgstr "Önerge" - -#: utils/tables.py:651 -msgid "Team" -msgstr "Takım" - -#: utils/tables.py:656 utils/tables.py:705 +#: utils/tables.py msgid "Categories" -msgstr "" +msgstr "Kategoriler" -#: utils/tables.py:676 -msgid "Redacted" -msgstr "" - -#: utils/tables.py:703 +#: utils/tables.py msgid "Category" msgstr "Kategori" -#: utils/tables.py:730 +#: utils/tables.py #, python-format msgid "This room %(predicate)s." -msgstr "" +msgstr "Bu oda %(predicate)s." -#: utils/tables.py:732 +#: utils/tables.py #, python-format msgid "This room %(predicates)s, and %(last_predicate)s." -msgstr "" +msgstr "Bu oda %(predicates)s, ve %(last_predicate)s." -#: utils/tables.py:747 +#: utils/tables.py msgid "Room" -msgstr "" +msgstr "Oda" -#: utils/tables.py:763 +#: utils/tables.py #, python-format msgid "Teams have met once" msgid_plural "Teams have met %(count)d times" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Takımlar bir kez karşılaştı" +msgstr[1] "Takımlar %(count)d kez karşılaştı" -#: utils/tables.py:769 +#: utils/tables.py msgid "Teams are from the same institution" -msgstr "" +msgstr "Takımlar aynı kurumdan" -#: utils/tables.py:775 +#: utils/tables.py msgid "Conflicts/Flags" -msgstr "" +msgstr "Conflictler/Bayraklar" -#: utils/tables.py:829 -msgid "The ballot you submitted" -msgstr "" - -#: utils/tables.py:833 -msgid "View/Edit Ballot" -msgstr "" +#: utils/tables.py +msgid "The confirmed ballot" +msgstr "Onaylanan ballot" -#: utils/tables.py:842 +#: utils/tables.py msgid "No ballot" -msgstr "" +msgstr "Ballot yok" -#: utils/tables.py:844 -msgid "Elimination" -msgstr "" +#: utils/tables.py +msgid "No scores" +msgstr "Puan yok" -#: utils/tables.py:847 utils/tables.py:859 +#: utils/tables.py msgid "View Ballot" -msgstr "" +msgstr "Ballotu görüntüle" -#: utils/tables.py:867 +#: utils/tables.py +msgid "The ballot you submitted" +msgstr "Gönderdiğiniz ballot" + +#: utils/tables.py +msgid "View/Edit Ballot" +msgstr "Ballot görüntüleme/düzenleme" + +#: utils/tables.py msgid "Result" -msgstr "" +msgstr "Sonuç" #. Translators: "TBC" stands for "to be confirmed". -#: utils/tables.py:873 +#: utils/tables.py msgid "TBC" -msgstr "" - -#: utils/tables.py:874 -msgid "Side" -msgstr "" +msgstr "Belli Değil" -#: utils/tables.py:912 -msgid "Team iron-manned this round and the last." -msgstr "" +#: utils/tables.py +msgid "Team iron-personed this round and the last." +msgstr "Takım bu ve geçen tur demir kişi konuşması yaptı." -#: utils/tables.py:915 -msgid "Team iron-manned this round." -msgstr "" +#: utils/tables.py +msgid "Team iron-personed this round." +msgstr "Takım bu tur demir kişi konuşması yaptı." -#: utils/tables.py:918 -msgid "Team iron-manned last round." -msgstr "" +#: utils/tables.py +msgid "Team iron-personed last round." +msgstr "Takım son tur demir kişi konuşması yaptı." -#: utils/tables.py:935 utils/tables.py:936 +#: utils/tables.py #, python-format msgid "Team %(num)d" msgstr "Takım %(num)d" -#: utils/views.py:38 +#: utils/tables.py +msgid "Postpone" +msgstr "Ertele" + +#: utils/views.py msgid "Whoops! You're not meant to type that URL into your browser." -msgstr "" +msgstr "Bu URL'yi tarayıcınıza yazmamanız lazım." diff --git a/tabbycat/venues/locale/tr/LC_MESSAGES/django.po b/tabbycat/venues/locale/tr/LC_MESSAGES/django.po index 968a948b9be..e9f6125fb1d 100644 --- a/tabbycat/venues/locale/tr/LC_MESSAGES/django.po +++ b/tabbycat/venues/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-24 04:15-0300\n" -"PO-Revision-Date: 2020-05-24 07:35\n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-05-25 23:54\n" "Last-Translator: philip_tc\n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -15,200 +15,208 @@ msgstr "" "X-Crowdin-Project: tabbycat\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /develop/tabbycat/venues/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 956\n" -#: venues/apps.py:7 -msgid "Venues" -msgstr "Salonlar" +#: venues/apps.py +msgid "Rooms" +msgstr "Odalar" -#: venues/consumers.py:18 +#: venues/consumers.py msgid "Draw is already released, unrelease draw to assign rooms." -msgstr "" +msgstr "Kura zaten yayınlandı, odaları atamak için kurayı yayından kaldırın." -#: venues/consumers.py:21 +#: venues/consumers.py msgid "Draw is not confirmed, confirm draw to assign rooms." -msgstr "" +msgstr "Kura onaylanmadı, oda atamak için kurayı onaylayın." -#: venues/consumers.py:28 +#: venues/consumers.py msgid "Successfully auto-allocated rooms to debates." -msgstr "" +msgstr "Maçlara odalar başarıyla otomatik tahsis edidi." -#: venues/models.py:9 venues/models.py:64 +#: venues/models.py msgid "name" msgstr "isim" -#: venues/models.py:11 venues/models.py:118 +#: venues/models.py msgid "priority" -msgstr "" +msgstr "öncelik" -#: venues/models.py:12 +#: venues/models.py msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" -msgstr "" +msgstr "Tartışmalara oda tahsis edilirken öncelik numarası daha yüksek olan odalar tercih edilecektir" -#: venues/models.py:15 venues/models.py:76 +#: venues/models.py msgid "tournament" msgstr "turnuva" -#: venues/models.py:22 +#: venues/models.py +msgid "URL" +msgstr "URL" + +#: venues/models.py +msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" +msgstr "Bu oda hakkında ek bilgi içeren bir URL, ör. harita veya toplantı bağlantısı (çevrimiçi turnuvalar için)" + +#: venues/models.py msgid "room" -msgstr "" +msgstr "oda" -#: venues/models.py:23 venues/models.py:74 +#: venues/models.py msgid "rooms" -msgstr "" +msgstr "odalar" -#: venues/models.py:59 +#: venues/models.py msgid "Don't display in room name" -msgstr "" +msgstr "Oda adında gösterme" -#: venues/models.py:60 +#: venues/models.py msgid "Display as prefix" -msgstr "" +msgstr "Önek olarak görüntüle" -#: venues/models.py:61 +#: venues/models.py msgid "Display as suffix" -msgstr "" +msgstr "Son ek olarak görüntüle" -#: venues/models.py:65 +#: venues/models.py msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." -msgstr "" +msgstr "Kategorinin adı, örneğin, \"Mor\", \"Adımsız erişim\", \"Sekme odasına yakın\". Bu ad, kategori kuradaki bir oda adının önüne veya sonekine eklendiğinde gösterilir, örneğin, \"Mor – G05\"." -#: venues/models.py:69 +#: venues/models.py msgid "description" -msgstr "" +msgstr "açıklama" -#: venues/models.py:70 +#: venues/models.py msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." -msgstr "" +msgstr "Bir cümlenin yüklemi olarak açıklama, örneğin \"adımsız erişime sahip\", \"brifing salonuna yakın\". Bu açıklama, araç ipuçlarında gösterildiğinde \"Bu oda\"yı izler, örneğin, \"Bu oda brifing salonuna yakındır.\"" -#: venues/models.py:80 +#: venues/models.py msgid "display in room name" -msgstr "" +msgstr "oda adında görüntüle" -#: venues/models.py:81 +#: venues/models.py msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" -msgstr "" +msgstr "Önek: \"Mor – G05\", Son Ek: \"G05 – Mor\"" -#: venues/models.py:83 +#: venues/models.py msgid "display in public tooltip" -msgstr "" +msgstr "genel araç ipucunda görüntüle" -#: venues/models.py:84 +#: venues/models.py msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." -msgstr "" +msgstr "Genel sayfalarda odanın araç ipucundaki açıklamayı görüntüler. Açıklama, boş değilse, her zaman yönetici sayfalarında gösterilir." -#: venues/models.py:88 +#: venues/models.py msgid "room category" -msgstr "" +msgstr "oda kategorisi" -#: venues/models.py:89 +#: venues/models.py msgid "room categories" -msgstr "" +msgstr "oda kategorileri" -#: venues/models.py:117 +#: venues/models.py msgid "category" msgstr "kategori" -#: venues/models.py:121 +#: venues/models.py msgid "subject content type" -msgstr "" +msgstr "konu içerik türü" -#: venues/models.py:124 +#: venues/models.py msgid "subject ID" -msgstr "" +msgstr "konu kimliği" -#: venues/models.py:130 +#: venues/models.py msgid "room constraint" -msgstr "" +msgstr "oda kısıtlaması" -#: venues/models.py:131 +#: venues/models.py msgid "room constraints" -msgstr "" +msgstr "oda kısıtlamaları" -#: venues/templates/venue_categories_edit.html:4 -#: venues/templates/venue_categories_edit.html:5 +#: venues/templates/venue_categories_edit.html msgid "Room Categories" -msgstr "" +msgstr "oda kategorileri" -#: venues/templates/venue_categories_edit.html:9 +#: venues/templates/venue_categories_edit.html msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." -msgstr "" +msgstr "Oda kategorileri, kurada görüntülemek ve katılımcılar için gezinmeyi kolaylaştırmak için odaları birlikte \"bölgeler\" halinde gruplandırmanıza ve/veya takımların, jürilerin veya kurumların belirli bir kategorideki bir odaya yerleştirilmesini gerektiren oda tahsisi kısıtlamalarını belirtmenize olanak tanır." -#: venues/templates/venue_categories_edit.html:14 +#: venues/templates/venue_categories_edit.html #, python-format msgid "If you want to delete room categories, use the Edit Database area." -msgstr "" +msgstr "Oda kategorilerini silmek istiyorsanız, veritabanı düzenle alanını kullanın." -#: venues/templates/venue_categories_edit.html:20 +#: venues/templates/venue_categories_edit.html msgid "Save Room Categories" -msgstr "" +msgstr "Oda Kategorilerini Kaydet" -#: venues/templates/venue_constraints_edit.html:4 -#: venues/templates/venue_constraints_edit.html:5 +#: venues/templates/venue_constraints_edit.html msgid "Room Constraints" -msgstr "" +msgstr "oda kısıtlamaları" -#: venues/templates/venue_constraints_edit.html:9 +#: venues/templates/venue_constraints_edit.html msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." -msgstr "" +msgstr "Oda kısıtlamaları, oda tahsis edene, belirtilen takımı veya jüriyi veya belirtilen kurumdaki tüm takımları (ancak jürileri değil) verilen kategorideki bir odada tutmaya çalışmasını söyler. \"Öncelik\" alanı çakışan conflictleri çözer: daha yüksek öncelik önceliklidir. Öncelik alanını, daha yüksek öncelikli bir kısıtlama karşılanamadığında alınan \"düşük tercihli\" kısıtlamaları belirtmek için de kullanabilirsiniz." -#: venues/templates/venue_constraints_edit.html:20 +#: venues/templates/venue_constraints_edit.html msgid "Save Room Constraints" -msgstr "" +msgstr "Oda Kısıtlamalarını Kaydet" -#: venues/utils.py:38 venues/utils.py:50 +#: venues/utils.py #, python-format msgid "Room constraint of %(name)s met (%(category)s)" -msgstr "" +msgstr "%(name)s'nin oda kısıtlaması karşılandı. (%(category)s)" -#: venues/utils.py:39 venues/utils.py:51 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of %(name)s" -msgstr "" +msgstr "Oda %(name)s'nın herhangi bir kısıtlamasını karşılamıyor" -#: venues/utils.py:44 +#: venues/utils.py #, python-format msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" -msgstr "" +msgstr "%(team)s'nin oda kısıtlaması karşılandı. (%(institution)s kurumunundan %(category)s)" -#: venues/utils.py:45 +#: venues/utils.py #, python-format msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" -msgstr "" +msgstr "Oda %(institution)s kurumunun herhangi bir kısıtlamasını karşılamıyor. (%(team)s)" -#: venues/views.py:27 +#: venues/views.py msgid "Edit Rooms" -msgstr "" +msgstr "Odaları Düzenle" -#: venues/views.py:82 +#: venues/views.py #, python-format msgid "Saved room category: %(list)s" msgid_plural "Saved venue categories: %(list)s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Oda kategorisi kaydedildi: %(list)s" +msgstr[1] "Mekan kategorileri kaydedildi: %(list)s" -#: venues/views.py:88 +#: venues/views.py msgid "No changes were made to the room categories." -msgstr "" +msgstr "Oda kategorilerinde herhangi bir değişiklik yapılmamıştır." -#: venues/views.py:138 +#: venues/views.py #, python-format msgid "%s (Adjudicator)" msgstr "%s (Jüri)" -#: venues/views.py:141 +#: venues/views.py #, python-format msgid "%s (Team)" -msgstr "" +msgstr "%s (Takım)" -#: venues/views.py:144 +#: venues/views.py #, python-format msgid "%s (Institution)" -msgstr "" +msgstr "%s (Kurum)" -#: venues/views.py:152 +#: venues/views.py #, python-format msgid "Saved %(count)d room constraint." msgid_plural "Saved %(count)d room constraints." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)d oda kısıtlaması kaydedildi." +msgstr[1] "%(count)d oda kısıtlamaları kaydedildi." From 2cbffcaa97547d0308ccb00e60253c1ab08725d1 Mon Sep 17 00:00:00 2001 From: Tabbycat's Translations Bot <52809203+tabbycat-translations@users.noreply.github.com> Date: Mon, 21 Nov 2022 04:41:54 +1100 Subject: [PATCH 223/255] New translations django.po (Vietnamese) --- docs/locale/vi/LC_MESSAGES/about/authors.po | 72 + docs/locale/vi/LC_MESSAGES/about/changelog.po | 1922 +++++++++++++++++ .../vi/LC_MESSAGES/about/contributing.po | 352 +++ docs/locale/vi/LC_MESSAGES/about/licence.po | 80 + docs/locale/vi/LC_MESSAGES/about/support.po | 56 + .../LC_MESSAGES/about/tournament-history.po | 248 +++ .../features/adjudicator-allocation.po | 160 ++ .../features/adjudicator-feedback.po | 258 +++ .../locale/vi/LC_MESSAGES/features/backups.po | 120 + docs/locale/vi/LC_MESSAGES/features/breaks.po | 212 ++ .../vi/LC_MESSAGES/features/check-ins.po | 136 ++ .../vi/LC_MESSAGES/features/data-entry.po | 168 ++ .../vi/LC_MESSAGES/features/data-importers.po | 272 +++ .../features/draw-generation-bp.po | 598 +++++ .../LC_MESSAGES/features/draw-generation.po | 436 ++++ .../vi/LC_MESSAGES/features/notifications.po | 257 +++ .../LC_MESSAGES/features/preformed-panels.po | 176 ++ .../vi/LC_MESSAGES/features/printing.po | 68 + .../LC_MESSAGES/features/standings-rules.po | 272 +++ .../LC_MESSAGES/features/team-code-names.po | 104 + .../vi/LC_MESSAGES/features/user-accounts.po | 196 ++ .../LC_MESSAGES/features/venue-constraints.po | 168 ++ .../vi/LC_MESSAGES/guide/comparisons.po | 338 +++ docs/locale/vi/LC_MESSAGES/guide/scaling.po | 252 +++ .../LC_MESSAGES/guide/tournament-logistics.po | 1394 ++++++++++++ docs/locale/vi/LC_MESSAGES/guide/upgrading.po | 60 + docs/locale/vi/LC_MESSAGES/index.po | 48 + docs/locale/vi/LC_MESSAGES/install/docker.po | 173 ++ docs/locale/vi/LC_MESSAGES/install/heroku.po | 445 ++++ docs/locale/vi/LC_MESSAGES/install/linux.po | 249 +++ docs/locale/vi/LC_MESSAGES/install/local.po | 156 ++ docs/locale/vi/LC_MESSAGES/install/osx.po | 216 ++ docs/locale/vi/LC_MESSAGES/install/windows.po | 317 +++ docs/locale/vi/LC_MESSAGES/install/wsl.po | 100 + .../LC_MESSAGES/use/finishing-a-tournament.po | 80 + .../vi/LC_MESSAGES/use/importing-data.po | 236 ++ .../LC_MESSAGES/use/running-a-tournament.po | 196 ++ .../LC_MESSAGES/use/starting-a-tournament.po | 196 ++ .../actionlog/locale/vi/LC_MESSAGES/django.po | 323 +++ .../locale/vi/LC_MESSAGES/django.po | 439 ++++ .../locale/vi/LC_MESSAGES/django.po | 950 ++++++++ .../locale/vi/LC_MESSAGES/django.po | 375 ++++ .../breakqual/locale/vi/LC_MESSAGES/django.po | 523 +++++ tabbycat/draw/locale/vi/LC_MESSAGES/django.po | 1094 ++++++++++ .../importer/locale/vi/LC_MESSAGES/django.po | 413 ++++ tabbycat/locale/vi/LC_MESSAGES/django.po | 956 ++++++++ tabbycat/locale/vi/LC_MESSAGES/djangojs.po | 554 +++++ .../motions/locale/vi/LC_MESSAGES/django.po | 382 ++++ .../locale/vi/LC_MESSAGES/django.po | 415 ++++ .../options/locale/vi/LC_MESSAGES/django.po | 1618 ++++++++++++++ .../locale/vi/LC_MESSAGES/django.po | 957 ++++++++ .../printing/locale/vi/LC_MESSAGES/django.po | 125 ++ .../locale/vi/LC_MESSAGES/django.po | 177 ++ .../results/locale/vi/LC_MESSAGES/django.po | 1083 ++++++++++ .../standings/locale/vi/LC_MESSAGES/django.po | 612 ++++++ .../locale/vi/LC_MESSAGES/django.po | 1031 +++++++++ .../utils/locale/vi/LC_MESSAGES/django.po | 327 +++ .../venues/locale/vi/LC_MESSAGES/django.po | 220 ++ 58 files changed, 23361 insertions(+) create mode 100644 docs/locale/vi/LC_MESSAGES/about/authors.po create mode 100644 docs/locale/vi/LC_MESSAGES/about/changelog.po create mode 100644 docs/locale/vi/LC_MESSAGES/about/contributing.po create mode 100644 docs/locale/vi/LC_MESSAGES/about/licence.po create mode 100644 docs/locale/vi/LC_MESSAGES/about/support.po create mode 100644 docs/locale/vi/LC_MESSAGES/about/tournament-history.po create mode 100644 docs/locale/vi/LC_MESSAGES/features/adjudicator-allocation.po create mode 100644 docs/locale/vi/LC_MESSAGES/features/adjudicator-feedback.po create mode 100644 docs/locale/vi/LC_MESSAGES/features/backups.po create mode 100644 docs/locale/vi/LC_MESSAGES/features/breaks.po create mode 100644 docs/locale/vi/LC_MESSAGES/features/check-ins.po create mode 100644 docs/locale/vi/LC_MESSAGES/features/data-entry.po create mode 100644 docs/locale/vi/LC_MESSAGES/features/data-importers.po create mode 100644 docs/locale/vi/LC_MESSAGES/features/draw-generation-bp.po create mode 100644 docs/locale/vi/LC_MESSAGES/features/draw-generation.po create mode 100644 docs/locale/vi/LC_MESSAGES/features/notifications.po create mode 100644 docs/locale/vi/LC_MESSAGES/features/preformed-panels.po create mode 100644 docs/locale/vi/LC_MESSAGES/features/printing.po create mode 100644 docs/locale/vi/LC_MESSAGES/features/standings-rules.po create mode 100644 docs/locale/vi/LC_MESSAGES/features/team-code-names.po create mode 100644 docs/locale/vi/LC_MESSAGES/features/user-accounts.po create mode 100644 docs/locale/vi/LC_MESSAGES/features/venue-constraints.po create mode 100644 docs/locale/vi/LC_MESSAGES/guide/comparisons.po create mode 100644 docs/locale/vi/LC_MESSAGES/guide/scaling.po create mode 100644 docs/locale/vi/LC_MESSAGES/guide/tournament-logistics.po create mode 100644 docs/locale/vi/LC_MESSAGES/guide/upgrading.po create mode 100644 docs/locale/vi/LC_MESSAGES/index.po create mode 100644 docs/locale/vi/LC_MESSAGES/install/docker.po create mode 100644 docs/locale/vi/LC_MESSAGES/install/heroku.po create mode 100644 docs/locale/vi/LC_MESSAGES/install/linux.po create mode 100644 docs/locale/vi/LC_MESSAGES/install/local.po create mode 100644 docs/locale/vi/LC_MESSAGES/install/osx.po create mode 100644 docs/locale/vi/LC_MESSAGES/install/windows.po create mode 100644 docs/locale/vi/LC_MESSAGES/install/wsl.po create mode 100644 docs/locale/vi/LC_MESSAGES/use/finishing-a-tournament.po create mode 100644 docs/locale/vi/LC_MESSAGES/use/importing-data.po create mode 100644 docs/locale/vi/LC_MESSAGES/use/running-a-tournament.po create mode 100644 docs/locale/vi/LC_MESSAGES/use/starting-a-tournament.po create mode 100644 tabbycat/actionlog/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/adjallocation/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/adjfeedback/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/availability/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/breakqual/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/draw/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/importer/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/locale/vi/LC_MESSAGES/djangojs.po create mode 100644 tabbycat/motions/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/notifications/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/options/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/participants/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/printing/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/privateurls/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/results/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/standings/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/tournaments/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/utils/locale/vi/LC_MESSAGES/django.po create mode 100644 tabbycat/venues/locale/vi/LC_MESSAGES/django.po diff --git a/docs/locale/vi/LC_MESSAGES/about/authors.po b/docs/locale/vi/LC_MESSAGES/about/authors.po new file mode 100644 index 00000000000..bfce8dee7ed --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/about/authors.po @@ -0,0 +1,72 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/authors.po\n" +"X-Crowdin-File-ID: 1259\n" +"Language: vi_VN\n" + +#: ../../../AUTHORS.rst:3 +msgid "Authors & Acknowledgements" +msgstr "" + +#: ../../../AUTHORS.rst:6 +msgid "Authors" +msgstr "" + +#: ../../../AUTHORS.rst:8 +msgid "Tabbycat was authored by Qi-Shan Lim for Auckland Australs 2010. The current active maintainers are:" +msgstr "" + +#: ../../../AUTHORS.rst:10 +msgid "Philip Belesky (`pb-e-mail `_)" +msgstr "" + +#: ../../../AUTHORS.rst:11 +msgid "Chuan-Zheng Lee (`cz-e-mail `_)" +msgstr "" + +#: ../../../AUTHORS.rst:13 +msgid "Please don't hesitate to contact us with any suggestions, expressions of interest or generally anything relating to Tabbycat." +msgstr "" + +#: ../../../AUTHORS.rst:16 +msgid "Contributors" +msgstr "" + +#: ../../../AUTHORS.rst:18 +msgid "Étienne Beaulé has contributed many features, fixes, and suggestions across many aspects of Tabbycat." +msgstr "" + +#: ../../../AUTHORS.rst:19 +msgid "Thevesh Theva contributed the algorithm for calculating the liveness of teams within a particular break category." +msgstr "" + +#: ../../../AUTHORS.rst:20 +msgid "Viran Weerasekera contributed the statistical tests used to estimate the degree to which a motion's results and vetoes are balanced." +msgstr "" + +#: ../../../AUTHORS.rst:21 +msgid "Viran Weerasekera, Valerie Tierney, Molly Dale, Madeline Schultz, and Vail Bromberger contributed to the \"Tournament Logistics\" section of our documentation." +msgstr "" + +#: ../../../AUTHORS.rst:24 +msgid "Sponsors" +msgstr "" + +#: ../../../AUTHORS.rst:26 +msgid "Thanks to the Western Australian Debating League for sponsoring various features related to organising division-based tournaments and round-robin based draw methods." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/about/changelog.po b/docs/locale/vi/LC_MESSAGES/about/changelog.po new file mode 100644 index 00000000000..71d8437541d --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/about/changelog.po @@ -0,0 +1,1922 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-21 18:31\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/changelog.po\n" +"X-Crowdin-File-ID: 1261\n" +"Language: vi_VN\n" + +#: ../../../CHANGELOG.rst:3 +msgid "Change Log" +msgstr "" + +#: ../../../CHANGELOG.rst:6 +msgid "2.4.0 (Maine)" +msgstr "" + +#: ../../../CHANGELOG.rst:7 +msgid "*Release date: ?*" +msgstr "" + +#: ../../../CHANGELOG.rst:9 +msgid "Added support for Russian, and shortened the language selector" +msgstr "" + +#: ../../../CHANGELOG.rst:10 +msgid "Renamed 'test score' to 'base score'" +msgstr "" + +#: ../../../CHANGELOG.rst:11 +msgid "Divisions-specific features have been deprecated and removed" +msgstr "" + +#: ../../../CHANGELOG.rst:12 +msgid "Moved the 'Edit Database' menu item to the dropdown with the logo in the admin navigation" +msgstr "" + +#: ../../../CHANGELOG.rst:13 +msgid "Pull-ups can now be restricted to teams with the lowest draw strength (by speaker or team points) of their bracket" +msgstr "" + +#: ../../../CHANGELOG.rst:14 +msgid "The number of pull-ups and draw strength by speaker score are now available as team standing metrics" +msgstr "" + +#: ../../../CHANGELOG.rst:15 +msgid "Added the new emoji that come along with Unicode 11 — thanks to Viran Weerasekera for this addition!" +msgstr "" + +#: ../../../CHANGELOG.rst:16 +msgid "The 'Show adjudicator institutions' preference now covers a wider range of cases; meaning that if it is unchecked then all adjudicator's institutional affiliations should be hidden from the public" +msgstr "" + +#: ../../../CHANGELOG.rst:20 +msgid "2.3.2" +msgstr "" + +#: ../../../CHANGELOG.rst:21 +msgid "*Release date: 19 October 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:23 +msgid "Fixed issue where teams would appear to be unavailable in break rounds" +msgstr "" + +#: ../../../CHANGELOG.rst:24 ../../../CHANGELOG.rst:294 +#: ../../../CHANGELOG.rst:302 ../../../CHANGELOG.rst:314 +msgid "Other minor fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:28 +msgid "2.3.1" +msgstr "" + +#: ../../../CHANGELOG.rst:29 +msgid "*Release date: 6 October 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:31 +msgid "Fixed issue where the institutions list would count teams/adjudicators outside of the tournament" +msgstr "" + +#: ../../../CHANGELOG.rst:32 +msgid "Fixed issue where a rejected ballot form would crash rather than providing an error message" +msgstr "" + +#: ../../../CHANGELOG.rst:33 +msgid "Fixed issue where the javascript bundle would not build on a local windows install" +msgstr "" + +#: ../../../CHANGELOG.rst:34 +msgid "Fixed issue where the adjudicator record pages would show an unreleased motion if that round's draw was released" +msgstr "" + +#: ../../../CHANGELOG.rst:38 +msgid "2.3.0 (LaPerm)" +msgstr "" + +#: ../../../CHANGELOG.rst:39 +msgid "*Release date: 27 September 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:44 +msgid "Added a preformed panel system which provides a powerful take on a 'shadow draw' workflow" +msgstr "" + +#: ../../../CHANGELOG.rst:42 +msgid "Shadow draw systems allow an adjudication core to form panels prior to a round being drawn. For example, the panels for Round 4 could be formed while Round 3 is taking place. Most implementations do so by having the tab system create a copy of the Round 3 draw, form new panels on top of it, and then transpose these panels onto Round 4. In large tournaments this workflow allows an adjudication core much more time to consider panel formation" +msgstr "" + +#: ../../../CHANGELOG.rst:43 +msgid "Tabbycat's preformed panels are formed per-round under a section available under the Setup menu. This interface looks like the standard Edit Adjudicators interface, but the 'debates' shown are based on a simulation of that round's results. These fake debates can then be prioritised" +msgstr "" + +#: ../../../CHANGELOG.rst:44 +msgid "Adjudicators can then be allocated to those fake debates in order to create a pre-formed panel. When the real draw is ready to be created, the priority of each preformed panel will be matched to the priority of the real debates" +msgstr "" + +#: ../../../CHANGELOG.rst:45 +msgid "By using the existing per-debate priority system, and by giving pre-formed panels their own priority, this workflow allows for very fine amounts of control over exactly how preformed panels are allocated as compared to a more simple top-down transposition of panels. Adjudication cores can easily target general areas of the draw (e.g. break-threshold brackets); control adjudicator strength within and across panels; and still account for special cases where a debate requires a particularly strong panel. At the same time, our existing options for automatic prioritisation and automatic allocation apply to all steps of this process so that preformed panels can be created and deployed rapidly" +msgstr "" + +#: ../../../CHANGELOG.rst:50 +msgid "Rewrote the Edit Adjudication, Venues, and Teams pages to enable a number of enhancements" +msgstr "" + +#: ../../../CHANGELOG.rst:47 +msgid "These pages now live-update changes that were made on other instances of that page. As a result, users on different computers can each open the Edit Adjudicators page and see the changes made by the other users. This feature, along with sharding, should make it easier than ever to distribute the task of adjudicator allocation across an entire adjudication core" +msgstr "" + +#: ../../../CHANGELOG.rst:48 +msgid "A new interface layout should better maximise space, particularly in BP settings, while also increasing the font size of key information" +msgstr "" + +#: ../../../CHANGELOG.rst:49 +msgid "The unused panel is now able to sort adjudicators by name, score, or drag order" +msgstr "" + +#: ../../../CHANGELOG.rst:50 +msgid "Average scores for all adjudicators, and a voting majority, are now shown next to the panel" +msgstr "" + +#: ../../../CHANGELOG.rst:51 +msgid "Various allocation-relevant settings, such as the minimum feedback score needed for a voting position, are now available inline on the allocation page itself. This should enable much faster tweaks/iterations of these values" +msgstr "" + +#: ../../../CHANGELOG.rst:52 +msgid "The ballot entry page will now indicate which teams have currently or recently given 'iron person' speeches so that these can be easily tracked, audited, and confirmed. It does show by showing both a text-highlight/icon in the table and in a dedicated modal window. Thanks to Étienne Beaulé for contributing this feature!" +msgstr "" + +#: ../../../CHANGELOG.rst:54 +msgid "Split up the Django settings files. Note that this means if you are upgrading a local install of Tabbycat to this version you will need to:" +msgstr "" + +#: ../../../CHANGELOG.rst:54 +msgid "Copy ``tabbycat/settings/local.example`` to become ``local.py`` (and fill in your original database details)" +msgstr "" + +#: ../../../CHANGELOG.rst:55 +msgid "Optional: repeat the same copying procedure for ``development.example`` and set the ``LOCAL_DEVELOPMENT`` environmental variable to ``True`` if you would like to use the settings designed to aid local development" +msgstr "" + +#: ../../../CHANGELOG.rst:61 +msgid "A range of improvements to the email notifications contributed by Étienne Beaulé:" +msgstr "" + +#: ../../../CHANGELOG.rst:57 +msgid "Ballot receipt emails now provide more information about team scores/points" +msgstr "" + +#: ../../../CHANGELOG.rst:58 +msgid "Emails are now in a rich-text format" +msgstr "" + +#: ../../../CHANGELOG.rst:59 +msgid "Custom emails may be sent out to select participants through the web-interface" +msgstr "" + +#: ../../../CHANGELOG.rst:60 +msgid "Participants can be specifically included or excluded from receiving a notification before sending with checks for duplicate messages" +msgstr "" + +#: ../../../CHANGELOG.rst:61 +msgid "Teams can be sent emails with their draw details" +msgstr "" + +#: ../../../CHANGELOG.rst:62 +msgid "Emails can be tracked to determine if sent or read (SendGrid-specific)" +msgstr "" + +#: ../../../CHANGELOG.rst:65 +msgid "Expanded the use of private URLs (Encore Étienne Beaulé):" +msgstr "" + +#: ../../../CHANGELOG.rst:64 +msgid "QR codes are now included in addition to the URL when printing private URLs" +msgstr "" + +#: ../../../CHANGELOG.rst:65 +msgid "Private landing pages will now display check-in status (if check-ins are used) along with further details regarding break categories, regions, etc." +msgstr "" + +#: ../../../CHANGELOG.rst:66 +msgid "Current and former draw assignments will display along with submitted ballots (for adjudicators) on landing pages" +msgstr "" + +#: ../../../CHANGELOG.rst:70 +msgid "Reworked how conflicts are determined to support double-past institutional conflicts:" +msgstr "" + +#: ../../../CHANGELOG.rst:68 +msgid "Added a \"team-institution conflict\" model" +msgstr "" + +#: ../../../CHANGELOG.rst:69 +msgid "Like adjudicator-institution conflicts, team-institution conflicts are automatically created if you use the simple importer or the command-line importer; but if you edit the database, it's your responsibility to add/edit them" +msgstr "" + +#: ../../../CHANGELOG.rst:70 +msgid "Institutional affiliations no longer matter for determining conflicts for either teams or adjudicators; only institutions listed in the team's or adjudicator's conflicts matter" +msgstr "" + +#: ../../../CHANGELOG.rst:71 +msgid "An adjudicator/team now conflicts with an adjudicator if *any* institution appears as an institutional conflict for both parties" +msgstr "" + +#: ../../../CHANGELOG.rst:72 +msgid "When printing scoresheets you can now edit the motions display just on that printing page. This allows you to use placeholder motions in Tabbycat (in order to prevent leaks) while still producing ballots with the correct motions" +msgstr "" + +#: ../../../CHANGELOG.rst:73 +msgid "Tabbycat no longer tracks which round is the 'current' round and instead tracks the completion of individual rounds. This change does not alter any existing workflows, but makes it easier to run simultaneous draws in out-rounds" +msgstr "" + +#: ../../../CHANGELOG.rst:74 +msgid "Info-slides can now be split into paragraphs" +msgstr "" + +#: ../../../CHANGELOG.rst:75 +msgid "Check-in pages now differentiate between teams with 1 and 2 checked-in people in two-team formats" +msgstr "" + +#: ../../../CHANGELOG.rst:76 +msgid "Institutional caps in breaks can be based on the number of teams in the break. Thanks to Viran Weerasekera for this feature!" +msgstr "" + +#: ../../../CHANGELOG.rst:77 +msgid "Several Tabbycat functions, adjudicator/venue allocation and email notifications, have been shifted to worker processes to help make them more reliable. If you are upgrading a Tabbycat instance that you will continue to use for new tournaments you will need to install the Heroku toolbelt and run ``heroku ps:scale worker=1``" +msgstr "" + +#: ../../../CHANGELOG.rst:78 +msgid "Upgraded to Python 3.6, dropped support for Python 3.5 and below. Note that this will require you to upgrade your python versions if running locally." +msgstr "" + +#: ../../../CHANGELOG.rst:82 +msgid "2.2.10" +msgstr "" + +#: ../../../CHANGELOG.rst:83 +msgid "*Release date: 10 February 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:85 +msgid "Fixed the display of feedback quantities on the Feedback Overview Page" +msgstr "" + +#: ../../../CHANGELOG.rst:86 +msgid "Fixed issue where 'ignored' feedback would hide the result from the feedback graph but not affect an adjudicator's current score. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:90 +msgid "2.2.9" +msgstr "" + +#: ../../../CHANGELOG.rst:91 +msgid "*Release date: 24 January 2019*" +msgstr "" + +#: ../../../CHANGELOG.rst:93 +msgid "Fixed an issue that could cause errors for tournaments when using an atypical number of rounds and break sizes. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:94 +msgid "Fixed an issue where the display of adjudicator's record links would display their name twice" +msgstr "" + +#: ../../../CHANGELOG.rst:98 +msgid "2.2.8" +msgstr "" + +#: ../../../CHANGELOG.rst:99 +msgid "*Release date: 14 December 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:101 +msgid "Fix issue where the check-in buttons were always disabled on admin and assistant pages" +msgstr "" + +#: ../../../CHANGELOG.rst:102 +msgid "Other minor fixes. Thanks to Étienne for these and for the check-in button fix!" +msgstr "" + +#: ../../../CHANGELOG.rst:106 +msgid "2.2.7" +msgstr "" + +#: ../../../CHANGELOG.rst:107 +msgid "*Release date: 16 November 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:109 +msgid "Lock redis-py version to 2.10.6, as workaround for `compatibility issue between django-redis and redis-py `_" +msgstr "" + +#: ../../../CHANGELOG.rst:110 +msgid "Fix login link on page shown after a user logs out" +msgstr "" + +#: ../../../CHANGELOG.rst:114 +msgid "2.2.6" +msgstr "" + +#: ../../../CHANGELOG.rst:115 +msgid "*Release date: 14 November 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:117 +msgid "Fix issue where check-ins could not be revoked" +msgstr "" + +#: ../../../CHANGELOG.rst:118 +msgid "Fix issue where the standings overview 'dashboard' included scores from elimination rounds. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:119 +msgid "Fix issue where the Average Individual Speaker Score metric would fail to calculate in some circumstances. Thanks to Étienne for this fix" +msgstr "" + +#: ../../../CHANGELOG.rst:120 +msgid "Fix issue where draw emails would crash if venues were unspecified. Thanks, again, to Étienne for this fix!" +msgstr "" + +#: ../../../CHANGELOG.rst:124 +msgid "2.2.5" +msgstr "" + +#: ../../../CHANGELOG.rst:125 +msgid "*Release date: 21 October 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:127 +msgid "Remove the buttons from the public check-ins page (as these do nothing unless the user is logged in)" +msgstr "" + +#: ../../../CHANGELOG.rst:128 +msgid "Hopefully fixed error that could cause Team- and Adjudicator- Institutional conflicts to not show properly on Allocation pages" +msgstr "" + +#: ../../../CHANGELOG.rst:129 +msgid "Thanks to Étienne for pull requests fixing rare bugs in the user creation form and break generation when rounds are not present" +msgstr "" + +#: ../../../CHANGELOG.rst:133 +msgid "2.2.4" +msgstr "" + +#: ../../../CHANGELOG.rst:134 +msgid "*Release date: 9 October 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:136 +msgid "Small fixes for functions related to email sending, conflict highlighting, and certain configurations of standings metrics" +msgstr "" + +#: ../../../CHANGELOG.rst:140 +msgid "2.2.3" +msgstr "" + +#: ../../../CHANGELOG.rst:141 +msgid "*Release date: 28 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:143 +msgid "*Literally* fix the issue causing public views of released scoresheets to throw errors (thanks for the pull request Étienne)" +msgstr "" + +#: ../../../CHANGELOG.rst:144 +msgid "Fix minor spacing issues in printed ballots (thanks for the pull request Étienne)" +msgstr "" + +#: ../../../CHANGELOG.rst:145 +msgid "Fix issue where institution-less adjudicators would cause some draw views to crash (thanks for the pull request Étienne)" +msgstr "" + +#: ../../../CHANGELOG.rst:149 +msgid "2.2.2" +msgstr "" + +#: ../../../CHANGELOG.rst:150 +msgid "*Release date: 22 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:152 +msgid "*Actually* fix the issue causing public views of released scoresheets to throw errors" +msgstr "" + +#: ../../../CHANGELOG.rst:156 +msgid "2.2.1" +msgstr "" + +#: ../../../CHANGELOG.rst:157 +msgid "*Release date: 21 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:159 +msgid "Fix issue causing public views of released scoresheets to throw errors" +msgstr "" + +#: ../../../CHANGELOG.rst:163 +msgid "2.2.0 (Khao Manee)" +msgstr "" + +#: ../../../CHANGELOG.rst:164 +msgid "*Release date: 20 September 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:167 +msgid "Implemented a new server architecture on Heroku along with other optimisation that should significantly improve the performance of sites receiving lots of traffic. Note that if you are upgrading an existing Heroku instance this requires a few tweaks before you deploy the update:" +msgstr "" + +#: ../../../CHANGELOG.rst:167 +msgid "Add the `https://github.com/heroku/heroku-buildpack-nginx.git` build pack under the Settings area of the Heroku Dashboard and positioning it first" +msgstr "" + +#: ../../../CHANGELOG.rst:168 +msgid "If your Heroku Stack is not \"heroku-16\" (noted under that same Settings page) it will need to be set as such using the Heroku CLI and the ``heroku stack:set heroku-16 --app APP_NAME`` command" +msgstr "" + +#: ../../../CHANGELOG.rst:169 +msgid "Added a page to the documentation that details how to scale a Tabbycat site that is receiving large amounts of traffic; and another page that documents how to upgrade a Tabbycat site to a new version" +msgstr "" + +#: ../../../CHANGELOG.rst:170 +msgid "Added support for Japanese and Portuguese. Let us know if you'd like to help contribute translations for either language (or a new one)!" +msgstr "" + +#: ../../../CHANGELOG.rst:171 +msgid "The results-entry page now updates its data live, giving you a more up to date look at data entry progress and reducing the cases of old data leading people to enter new ballots when they meant to confirm them" +msgstr "" + +#: ../../../CHANGELOG.rst:178 +msgid "A huge thanks to Étienne Beaulé for contributing a number of major new features and bug fixes. Notably:" +msgstr "" + +#: ../../../CHANGELOG.rst:173 +msgid "Added a means to mark feedback as 'ignored' so that it still is recorded as having been submitted, but does not affect the targeted-adjudicator's feedback score" +msgstr "" + +#: ../../../CHANGELOG.rst:174 +msgid "Added email notification to adjudicators on round release" +msgstr "" + +#: ../../../CHANGELOG.rst:175 +msgid "Implemented participant self-check-in through the use of their private URLs" +msgstr "" + +#: ../../../CHANGELOG.rst:176 +msgid "Gave all participants to a tournament a private URL key rather than being by team, and added a landing page for the participants using this key" +msgstr "" + +#: ../../../CHANGELOG.rst:177 +msgid "Implemented templated email notifications with ballot submission and round advance with the messages in a new settings panel. Private URL emails are now also customizable" +msgstr "" + +#: ../../../CHANGELOG.rst:178 +msgid "Added the \"average individual speaker score\" metric which averages the scores of all substantive speeches by the team within preliminary rounds. The old \"average speaker score\" metric has been renamed to to \"average total speaker score\"" +msgstr "" + +#: ../../../CHANGELOG.rst:179 +msgid "Reworked the ballots status graph to be an area chart" +msgstr "" + +#: ../../../CHANGELOG.rst:180 +msgid "Added the ability to hide motions on printed ballots (even if they have been entered). Thanks to Github user 0zlw for the feature request!" +msgstr "" + +#: ../../../CHANGELOG.rst:181 +msgid "Added the ability to unconfirm feedback from any of the views that show it" +msgstr "" + +#: ../../../CHANGELOG.rst:182 +msgid "BP motion statistics now also show average points split by bench and half" +msgstr "" + +#: ../../../CHANGELOG.rst:183 +msgid "Added a warning when users are close to their free-tier database limit on Heroku that makes it clear not to create new tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:184 +msgid "Added ``exportconfig`` and ``importconfig`` management commands to export and import tournament configurations to a JSON file" +msgstr "" + +#: ../../../CHANGELOG.rst:185 +msgid "Upgraded `django-dynamic-preferences `_ to version 1.6" +msgstr "" + +#: ../../../CHANGELOG.rst:187 +msgid "This won't affect most users, but advanced users previously having problems with a stray ``dynamic_preferences_users_userpreferencemodel`` table who are upgrading an existing instance may wish to run the SQL command ``DROP TABLE dynamic_preferences_users_userpreferencemodel;`` to remove this stray table. When this table was present, it caused an inconsistency between migration state and database schema that in turned caused the ``python manage.py flush`` command to fail. More information is available in the `django-dynamic-preferences changelog `_" +msgstr "" + +#: ../../../CHANGELOG.rst:191 +msgid "2.1.3" +msgstr "" + +#: ../../../CHANGELOG.rst:192 +msgid "*Release date: 21 August 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:194 +msgid "Added an alert for British Parliamentary format grand-final ballots that explains the workaround needed to nominate a sole winner" +msgstr "" + +#: ../../../CHANGELOG.rst:195 +msgid "Improved display of images shown when sharing Tabbycat links on social media" +msgstr "" + +#: ../../../CHANGELOG.rst:196 +msgid "Optimised the performance of several commonly-loaded pages. Thanks to Étienne Beaulé for the pull request!" +msgstr "" + +#: ../../../CHANGELOG.rst:197 +msgid "Prevented the entry of integer-scale feedback questions without the required min/max attributes" +msgstr "" + +#: ../../../CHANGELOG.rst:198 +msgid "Provided a shortcut link to editing a round's feedback weight" +msgstr "" + +#: ../../../CHANGELOG.rst:199 +msgid "Prevented standings from crashing when only a single standings metric is set" +msgstr "" + +#: ../../../CHANGELOG.rst:203 +msgid "2.1.2" +msgstr "" + +#: ../../../CHANGELOG.rst:204 +msgid "*Release date: 14 July 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:206 +msgid "Fixed an error caused when calculating breaks including teams without institutions" +msgstr "" + +#: ../../../CHANGELOG.rst:207 +msgid "Improved display of long motions and info slides" +msgstr "" + +#: ../../../CHANGELOG.rst:208 +msgid "Fixed bug in feedback progress tracking with UADC-style adjudication" +msgstr "" + +#: ../../../CHANGELOG.rst:209 +msgid "Fixed bug where the public checks page would cause large amounts of failing requests" +msgstr "" + +#: ../../../CHANGELOG.rst:210 +msgid "Fixed visual issue with adjudicator lists wrapping poorly on mobile devices" +msgstr "" + +#: ../../../CHANGELOG.rst:211 +msgid "Limited the time it takes to serve requests to match Heroku's in-built limit; this may help improve the performance of sites under heavy load" +msgstr "" + +#: ../../../CHANGELOG.rst:215 +msgid "2.1.1" +msgstr "" + +#: ../../../CHANGELOG.rst:216 +msgid "*Release date: 19 May 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:218 +msgid "The Scan Identifiers page now orders check-ins from top to bottom" +msgstr "" + +#: ../../../CHANGELOG.rst:219 +msgid "The Scan Identifiers now plays different sounds for failed check-ins" +msgstr "" + +#: ../../../CHANGELOG.rst:220 +msgid "The Scan Identifiers now has a toggle for sounds; allowing it to work in browsers like Safari that block auto-playing audio" +msgstr "" + +#: ../../../CHANGELOG.rst:224 +msgid "2.1.0 (Japanese Bobtail)" +msgstr "" + +#: ../../../CHANGELOG.rst:225 +msgid "*Release date: 7 May 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:227 +msgid "Added an introductory modal for the adjudicator allocation page to help outline how the features and workflow operate" +msgstr "" + +#: ../../../CHANGELOG.rst:228 +msgid "Added an automated method for assigning importances to debates using their bracket or 'liveness'. This should allow smaller tournaments to more easily assign importances and save time for larger tournaments that do so" +msgstr "" + +#: ../../../CHANGELOG.rst:230 +msgid "Added the ability to switch between using 'team codes' and standard team names" +msgstr "" + +#: ../../../CHANGELOG.rst:230 +msgid "By default team codes are set to match that team's emoji, but team codes are editable and can be imported like standard data" +msgstr "" + +#: ../../../CHANGELOG.rst:231 +msgid "Team codes can be swapped in an out for standard team names at will, with precise control over the contexts in which either is used — i.e. in public-facing pages, in admin-facing pages, in tooltips, *etc.*" +msgstr "" + +#: ../../../CHANGELOG.rst:235 +msgid "Added a range of 'check-in' functionality" +msgstr "" + +#: ../../../CHANGELOG.rst:233 +msgid "This includes barcode assignment, printing, and scanning. Scanning methods are optimised both for manual entry, entry with barcodes scanners, and for a 'live' scanning view that uses your phone's camera!" +msgstr "" + +#: ../../../CHANGELOG.rst:234 +msgid "This includes new people and venue status pages that show an overview of check-in status and allow for easy manual check-ins; ideal for a roll-calls!. This page can also be made public" +msgstr "" + +#: ../../../CHANGELOG.rst:235 +msgid "Ballot check-ins have been converted to this new method, and now all printed ballots will contain the barcodes needed to scan them" +msgstr "" + +#: ../../../CHANGELOG.rst:236 +msgid "Venue check-ins have been added alongside the standard 'person' check-ins to allow you to track a room's status at the start of the day or round-by-round" +msgstr "" + +#: ../../../CHANGELOG.rst:239 +msgid "Added (partial) translations in French, Spanish and Arabic" +msgstr "" + +#: ../../../CHANGELOG.rst:238 +msgid "Users can now use a link in the footer to switch the site's language into French, Spanish, or Arabic. By default Tabbycat should also match your browser's language and so automatically apply those languages if it matches" +msgstr "" + +#: ../../../CHANGELOG.rst:239 +msgid "Our translations are generously provided by volunteers, but (so far) do not cover all of the interface text within Tabbycat. If you're interested in helping to translate new or existing languages please get in touch!" +msgstr "" + +#: ../../../CHANGELOG.rst:240 +msgid "Thanks to the excellent team at QatarDebate for contributing the Arabic translations, and to Alejandro, Hernando, Julian and Zoe for contributing the Spanish translations." +msgstr "" + +#: ../../../CHANGELOG.rst:242 +msgid "Added a new (beta) feature: allocation 'sharding'" +msgstr "" + +#: ../../../CHANGELOG.rst:242 +msgid "Sharding allows you to split up the Adjudicator Allocation screen into a defined subset of the draw. This has been designed so that you can have multiple computers doing allocations simultaneously; allowing the adjudication core to split itself and tackle allocations in parallel." +msgstr "" + +#: ../../../CHANGELOG.rst:243 +msgid "Shards can be assigned into defined fractions (i.e. halves or fifths) according to specific criteria (i.e. bracket or priority) and following either a top-to-bottom sorting or a mixed sorting that ensures each bracket has an even proportion of each criteria." +msgstr "" + +#: ../../../CHANGELOG.rst:244 +msgid "Added an option to show a \"Confirm Digits\" option to pre-printed ballots that asks adjudicators to confirm their scores in a manner that may help clarify instances or bad handwriting. This can be enabled in the \"Data Entry\" settings area." +msgstr "" + +#: ../../../CHANGELOG.rst:245 +msgid "Added a 'liveness' calculator for BP that will estimate whether each team has, can, or can't break in each of their categories (as previously existed for 2-team formats)" +msgstr "" + +#: ../../../CHANGELOG.rst:246 +msgid "Added draw pull-up option: pull up from middle" +msgstr "" + +#: ../../../CHANGELOG.rst:247 +msgid "Added new draw option: choose pull-up from teams who have been pulled up the fewest times so far" +msgstr "" + +#: ../../../CHANGELOG.rst:248 +msgid "Added the ability to have different 'ballots-per-debates' for in/out rounds; accommodating tournaments like Australian Easters that use consensus for preliminary rounds but voting for elimination rounds." +msgstr "" + +#: ../../../CHANGELOG.rst:249 +msgid "Added time zone support to the locations where times are displayed" +msgstr "" + +#: ../../../CHANGELOG.rst:250 +msgid "Administrators can now view pages as if they were Assistants; allowing them to (for example) use the data entry forms that enforce double-checking without needed to create a separate account" +msgstr "" + +#: ../../../CHANGELOG.rst:251 +msgid "Fixed χ² test in motion statistics, and refactored the motion statistics page" +msgstr "" + +#: ../../../CHANGELOG.rst:252 +msgid "Teams, like adjudicators, no longer need to have an institution" +msgstr "" + +#: ../../../CHANGELOG.rst:253 +msgid "Added a page allowing for bulk updates to adjudicator scores" +msgstr "" + +#: ../../../CHANGELOG.rst:254 +msgid "Added break categories to team standings, and new team standings pages for break categories" +msgstr "" + +#: ../../../CHANGELOG.rst:259 +msgid "Made speaker standings more configurable" +msgstr "" + +#: ../../../CHANGELOG.rst:256 +msgid "Second-order metrics can now be specified" +msgstr "" + +#: ../../../CHANGELOG.rst:257 +msgid "Added trimmed mean (also known as high-low drop)" +msgstr "" + +#: ../../../CHANGELOG.rst:258 +msgid "Added ability to set no limit for number of missed debates" +msgstr "" + +#: ../../../CHANGELOG.rst:259 +msgid "Standard deviation is now the population standard deviation (was previously sample), and ranks in ascending order if used to rank speakers." +msgstr "" + +#: ../../../CHANGELOG.rst:273 ../../../CHANGELOG.rst:386 +msgid "Quality of life improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:262 +msgid "Added a \"☆\" indicator to more obviously liveness in the adjudicator allocation screen" +msgstr "" + +#: ../../../CHANGELOG.rst:263 +msgid "Added WYSIWYG editor for tournament welcome message, and moved it to tournament configuration" +msgstr "" + +#: ../../../CHANGELOG.rst:264 +msgid "Added \"appellant\" and \"respondent\" to the side name options" +msgstr "" + +#: ../../../CHANGELOG.rst:265 +msgid "Added a two new columns to the feedback overview page: one that displays the current difference between an adjudicator's test score and their current weighted score; another the displays the standard deviation of an adjudicator's feedback scores" +msgstr "" + +#: ../../../CHANGELOG.rst:266 +msgid "Added an 'important feedback' page that highlights feedback significantly above or below an adjudicator's test score" +msgstr "" + +#: ../../../CHANGELOG.rst:267 +msgid "Added a means to bulk-import adjudicator scores (for example from a CSV) to make it easier to work with external feedback processing" +msgstr "" + +#: ../../../CHANGELOG.rst:268 +msgid "Speakers and speaker's emails in the simple importer can now be separated by commas or tabs in addition to new lines" +msgstr "" + +#: ../../../CHANGELOG.rst:269 +msgid "The \"shared\" checkbox in the simple importer is now hidden unless the relevant tournament option is enabled" +msgstr "" + +#: ../../../CHANGELOG.rst:270 +msgid "Current team standings page now shows silent round results if \"Release all round results to public\" is set" +msgstr "" + +#: ../../../CHANGELOG.rst:271 +msgid "The Consensus vs Voting options for how ballots work has now been split into two settings: one option for preliminary rounds and one option for elimination rounds" +msgstr "" + +#: ../../../CHANGELOG.rst:272 +msgid "Speaker scores now show as integers (without decimals) where the tournament format would not allow decimals" +msgstr "" + +#: ../../../CHANGELOG.rst:273 +msgid "Added a page showing a list of institutions in the tournament" +msgstr "" + +#: ../../../CHANGELOG.rst:274 +msgid "On the assistant \"enter results\" page, pressing \"/\" jumps to the \"Find in Table\" box, so data entry can be done entirely from your keyboard" +msgstr "" + +#: ../../../CHANGELOG.rst:276 +msgid "Switched to using a Websockets/Channels based infrastructure to better allow for asynchronous updates. This should also ameliorate cases where the Memcachier plugin expired due to inactivity which would then crash a site. Notes for those upgrading:" +msgstr "" + +#: ../../../CHANGELOG.rst:276 +msgid "On Heroku: You should remove the Memcachier plugin and instead add 'heroku-redis' to any instances being upgraded" +msgstr "" + +#: ../../../CHANGELOG.rst:277 +msgid "Locally: You should recreate your `local_settings.py` from the `local_settings.example` file" +msgstr "" + +#: ../../../CHANGELOG.rst:280 +msgid "Upgraded to Django 2.0" +msgstr "" + +#: ../../../CHANGELOG.rst:279 +msgid "Converted most raw SQL queries to use the new ``filter`` keyword in annotations" +msgstr "" + +#: ../../../CHANGELOG.rst:283 +msgid "2.0.7" +msgstr "" + +#: ../../../CHANGELOG.rst:284 +msgid "*Release date: 13 April 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:286 +msgid "Fixed an issue preventing draws with pre-allocate sides generating" +msgstr "" + +#: ../../../CHANGELOG.rst:290 +msgid "2.0.6" +msgstr "" + +#: ../../../CHANGELOG.rst:291 +msgid "*Release date: 20 March 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:293 +msgid "Added reminder to add own-institution conflicts in the Edit Database area" +msgstr "" + +#: ../../../CHANGELOG.rst:298 +msgid "2.0.5" +msgstr "" + +#: ../../../CHANGELOG.rst:299 +msgid "*Release date: 7 February 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:301 +msgid "Improved the printing of scoresheets and feedback forms on Chrome." +msgstr "" + +#: ../../../CHANGELOG.rst:306 +msgid "2.0.4" +msgstr "" + +#: ../../../CHANGELOG.rst:307 +msgid "*Release date: 22 January 2018*" +msgstr "" + +#: ../../../CHANGELOG.rst:309 +msgid "Add alert for users who try to do voting ballots on BP-configured tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:310 +msgid "Fixed issue where draws of the \"manual\" type would not generate correctly" +msgstr "" + +#: ../../../CHANGELOG.rst:311 +msgid "Fixed issue where a ballot's speaker names dropdown would contain both team's speakers when using formats with side selection" +msgstr "" + +#: ../../../CHANGELOG.rst:312 +msgid "Fixed issue where scoresheets would not show correctly under some configurations" +msgstr "" + +#: ../../../CHANGELOG.rst:313 +msgid "Improved display of really long motions when using the inbuilt motion-showing page" +msgstr "" + +#: ../../../CHANGELOG.rst:318 +msgid "2.0.3" +msgstr "" + +#: ../../../CHANGELOG.rst:319 +msgid "*Release date: 3 December 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:321 +msgid "Fixed issue where the 'prefix team name with institution name' checkbox would not be correctly saved when using the Simple Importer" +msgstr "" + +#: ../../../CHANGELOG.rst:322 +msgid "Removed the scroll speed / text size buttons on mobile draw views that were making it difficult to view the table" +msgstr "" + +#: ../../../CHANGELOG.rst:323 +msgid "Improved the display of the motions tab page on mobile devices and fixed an issue where it appeared as if only half the vetoes were made" +msgstr "" + +#: ../../../CHANGELOG.rst:327 +msgid "2.0.2" +msgstr "" + +#: ../../../CHANGELOG.rst:328 +msgid "*Release date: 27 November 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:333 +msgid "Fixes and improvements to diversity overview" +msgstr "" + +#: ../../../CHANGELOG.rst:331 +msgid "Fixed average feedback rating from teams, it was previously (incorrectly) showing the average feedback rating from all adjudicators" +msgstr "" + +#: ../../../CHANGELOG.rst:332 +msgid "Gender splits for average feedback rating now go by target adjudicator; this was previously source adjudicator" +msgstr "" + +#: ../../../CHANGELOG.rst:333 +msgid "Persons with unknown gender are now shown in counts (but not score/rating averages); a bug had previously caused them to be incorrectly counted as zero" +msgstr "" + +#: ../../../CHANGELOG.rst:334 +msgid "Improved query efficiency of the page" +msgstr "" + +#: ../../../CHANGELOG.rst:335 +msgid "Improved the BP motions tab for out-rounds by specifying advancing teams as \"top/bottom ½\" rather than as 1st/4th and removed the average-points-per-position graphs that were misleading" +msgstr "" + +#: ../../../CHANGELOG.rst:336 +msgid "Improved handling of long motions in the motion display interface" +msgstr "" + +#: ../../../CHANGELOG.rst:337 +msgid "Fixed issue where creating BP tournaments using the wizard would create an extra break round given the size of the break specified" +msgstr "" + +#: ../../../CHANGELOG.rst:338 +msgid "Fixed auto-allocation in consensus panels where there are fewer judges than debates in the round" +msgstr "" + +#: ../../../CHANGELOG.rst:339 +msgid "Fixed reply speaker validity check when speeches are marked as duplicate" +msgstr "" + +#: ../../../CHANGELOG.rst:340 +msgid "Prohibit assignment of teams to break categories of other tournaments in Edit Database area" +msgstr "" + +#: ../../../CHANGELOG.rst:344 +msgid "2.0.1" +msgstr "" + +#: ../../../CHANGELOG.rst:345 +msgid "*Release date: 21 November 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:347 +msgid "Fixed issue where results submission would crash if sides are unconfirmed" +msgstr "" + +#: ../../../CHANGELOG.rst:348 +msgid "Fixed issue where scoresheets would not display properly for adjudicators who lack institutions" +msgstr "" + +#: ../../../CHANGELOG.rst:349 +msgid "Fixed issue where the round history indicators in the Edit Adjudicators page would sometimes omit the \"rounds ago\" indicator" +msgstr "" + +#: ../../../CHANGELOG.rst:353 +msgid "2.0.0 (Iberian Lynx)" +msgstr "" + +#: ../../../CHANGELOG.rst:354 +msgid "*Release date: 13 November 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:358 +msgid "British Parliamentary support" +msgstr "" + +#: ../../../CHANGELOG.rst:357 +msgid "Full support for British Parliamentary format has been added and we're incredibly excited to see Tabbycat's unique features and design (finally) available as an option for those tabbing in the predominant global format" +msgstr "" + +#: ../../../CHANGELOG.rst:358 +msgid "As part of the implementation of this format we've made significant improvements over existing tab software on how sides are allocated within BP draws. This means that teams are less likely to have 'imbalanced' proportions of side allocations (for example having many more debates as Opening Government than Closing Opposition)" +msgstr "" + +#: ../../../CHANGELOG.rst:359 +msgid "We've added a new \"Comparisons\" page added to the documentation to outline some of the key differences between Tabbycat and other software in the context of BP tabbing" +msgstr "" + +#: ../../../CHANGELOG.rst:365 +msgid "Refreshed interface design" +msgstr "" + +#: ../../../CHANGELOG.rst:361 +msgid "The basic graphic elements of Tabbycat have had a their typography, icons, colours, forms, and more redesign for a more distinctive and clear look. We also now have an official logo!" +msgstr "" + +#: ../../../CHANGELOG.rst:362 +msgid "The \"Motions\" stage of the per-round workflow has now been rolled into the Display area to better accommodate BP formats and consolidate the Draw/Motion 'release' process" +msgstr "" + +#: ../../../CHANGELOG.rst:363 +msgid "Sidebar menu items now display all sub-items within a section, such as for Feedback, Standings, and Breaks" +msgstr "" + +#: ../../../CHANGELOG.rst:364 +msgid "Better tablet and mobile interfaces; including a fully responsive sidebar for the admin area that maximises the content area" +msgstr "" + +#: ../../../CHANGELOG.rst:365 +msgid "More explicit and obvious calls-to-action for the key tasks necessary to running a round, with better interface alerts and text to help users understand when and why to perform crucial actions" +msgstr "" + +#: ../../../CHANGELOG.rst:366 +msgid "Redesigned motions tab page that gives a better idea of the sample size and distribution of results in both two- and four- team formats" +msgstr "" + +#: ../../../CHANGELOG.rst:368 +msgid "Improved handling of Break Rounds ballots and sides allocation" +msgstr "" + +#: ../../../CHANGELOG.rst:368 +msgid "The positions of teams within a break round are now created by the initial draw generation in an 'unset' state in recognition that most tournaments assign these manually (through say a coin toss). This should help clarify when showing break rounds draws when sides are or are not finalised" +msgstr "" + +#: ../../../CHANGELOG.rst:369 +msgid "Break rounds ballots for formats where scores are not typically entered (i.e. BP) will only specify that you nominate the teams advancing rather than enter in all of the speakers' scores" +msgstr "" + +#: ../../../CHANGELOG.rst:370 +msgid "Now, like Break Categories, you can define arbitrary Categories such as 'Novice' or 'ESL' to create custom Speaker tabs for groups of Speakers" +msgstr "" + +#: ../../../CHANGELOG.rst:371 +msgid "You can now release an Adjudicators Tab showing test scores, final scores, and/or per-round feedback averages" +msgstr "" + +#: ../../../CHANGELOG.rst:372 +msgid "Information Slides can now be added to the system; either for showing to an auditorium within Tabbycat or for displaying alongside the public list of motions and/or the motions tab" +msgstr "" + +#: ../../../CHANGELOG.rst:373 +msgid "Teams and adjudicators are no longer required to have institutions; something that should be very useful when setting up small IVs and the like" +msgstr "" + +#: ../../../CHANGELOG.rst:374 +msgid "Private URLs can now be incrementally generated. Records of sent mail are now also kept by Tabbycat, so that emails can be incrementally sent to participants as registration data changes" +msgstr "" + +#: ../../../CHANGELOG.rst:376 +msgid "After creating a new tournament you will now be prompted to apply a basic rules and public information preset" +msgstr "" + +#: ../../../CHANGELOG.rst:377 +msgid "Better handling of errors that arise when a debate team is missing or where two teams have been assigned the same side" +msgstr "" + +#: ../../../CHANGELOG.rst:378 +msgid "Fixed issue where the adjudicator feedback graphs would not sort along with their table" +msgstr "" + +#: ../../../CHANGELOG.rst:379 +msgid "The Feedback Overview page now makes it more clear how the score is determined, the current distribution of scores, and how scores affect the distribution of chairs, panellists, and trainees" +msgstr "" + +#: ../../../CHANGELOG.rst:380 +msgid "Speaker tabs now default to sorting by average, except for formats where we are certain that they must be sorted by total. The speaker tab page itself now prominently notes which setting is is currently using" +msgstr "" + +#: ../../../CHANGELOG.rst:381 +msgid "'Feedback paths' now default to a more permissive setting (rather than only allowing Chairs to submit feedback) and the Feedback Overview page will note that current configuration" +msgstr "" + +#: ../../../CHANGELOG.rst:382 +msgid "Emails can be assigned to adjudicators and teams in the Simple Importer" +msgstr "" + +#: ../../../CHANGELOG.rst:383 +msgid "More of the tables that allow you to set or edit data (such as the check-in tables for adjudicators, teams and venues) now automatically save changes" +msgstr "" + +#: ../../../CHANGELOG.rst:384 +msgid "When adding/editing users extraneous fields have been hidden and the \"Staff\" and \"Superuser\" roles have new sub-text clarifying what they mean for users with those permissions" +msgstr "" + +#: ../../../CHANGELOG.rst:385 +msgid "Team record pages now show cumulative team points, and if the speaker tab is fully released, speaker scores for that team in each debate" +msgstr "" + +#: ../../../CHANGELOG.rst:389 +msgid "1.4.6" +msgstr "" + +#: ../../../CHANGELOG.rst:390 +msgid "*Release date: 23 October 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:392 +msgid "Fixed issue where speaker standings with a large amount of non-ranking speakers would cause the page to load slowly or time-out." +msgstr "" + +#: ../../../CHANGELOG.rst:396 +msgid "1.4.5" +msgstr "" + +#: ../../../CHANGELOG.rst:397 +msgid "*Release date: 14 October 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:399 +msgid "Added warning message when adjudicator scores are outside the expected range" +msgstr "" + +#: ../../../CHANGELOG.rst:400 +msgid "Fixed handling of uniqueness failure in simple importer for teams" +msgstr "" + +#: ../../../CHANGELOG.rst:404 +msgid "1.4.4" +msgstr "" + +#: ../../../CHANGELOG.rst:405 +msgid "*Release date: 27 September 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:407 +msgid "Fixed Vue dependency issue preventing Heroku installs after a dependency release" +msgstr "" + +#: ../../../CHANGELOG.rst:408 +msgid "Fixed issue with formatting non-numeric standings metrics" +msgstr "" + +#: ../../../CHANGELOG.rst:409 +msgid "Fixed behaviour of public tabs when all rounds are silent" +msgstr "" + +#: ../../../CHANGELOG.rst:413 +msgid "1.4.3" +msgstr "" + +#: ../../../CHANGELOG.rst:414 +msgid "*Release date: 9 September 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:416 +msgid "A number of improvements to error handling and logging" +msgstr "" + +#: ../../../CHANGELOG.rst:417 +msgid "Changed the \"previous round\" of an elimination round to point to the last one in the same break category" +msgstr "" + +#: ../../../CHANGELOG.rst:418 +msgid "Other minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:422 +msgid "1.4.2" +msgstr "" + +#: ../../../CHANGELOG.rst:423 +msgid "*Release date: 23 August 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:425 +msgid "Minor bug fixes and error logging improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:429 +msgid "1.4.1" +msgstr "" + +#: ../../../CHANGELOG.rst:430 +msgid "*Release date: 2 August 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:432 +msgid "Fixed bug that prevented edited matchups from being saved" +msgstr "" + +#: ../../../CHANGELOG.rst:433 +msgid "Added flag to prevent retired sites from using the database for sessions" +msgstr "" + +#: ../../../CHANGELOG.rst:437 +msgid "1.4.0 (Havana Brown)" +msgstr "" + +#: ../../../CHANGELOG.rst:438 +msgid "*Release date: 26 July 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:444 +msgid "Overhauled the adjudicator allocation, venue allocation, and matchups editing pages, including:" +msgstr "" + +#: ../../../CHANGELOG.rst:441 +msgid "Upgraded to Vue 2.0 and refactored the code so that each page better shares methods for displaying the draw, showing additional information, and dragging/dropping" +msgstr "" + +#: ../../../CHANGELOG.rst:442 +msgid "When dragging/dropping, the changed elements now 'lock' in place to indicate that their saving is in-progress" +msgstr "" + +#: ../../../CHANGELOG.rst:443 +msgid "Added conflicts and recent histories to the slideovers shown for teams/adjudicators" +msgstr "" + +#: ../../../CHANGELOG.rst:444 +msgid "Added 'ranking' toggles to visibly highlight adjudicator strengths and more easily identify unbalanced panels" +msgstr "" + +#: ../../../CHANGELOG.rst:445 +msgid "Each interface's table is now sortable by a debate's importance, bracket, liveness, etc." +msgstr "" + +#: ../../../CHANGELOG.rst:446 +msgid "Added a new \"Tournament Logistics\" guide to the documentation that outlines some general best practices for tabbing tournaments. Thanks to Viran Weerasekera, Valerie Tierney, Molly Dale, Madeline Schultz, and Vail Bromberger for contributing to this document" +msgstr "" + +#: ../../../CHANGELOG.rst:447 +msgid "Added (basic) support for the Canadian Parliamentary format by allowing for consensus ballots and providing a preset. However note that only some of the common draw rules are supported (check our documentation for more information)" +msgstr "" + +#: ../../../CHANGELOG.rst:448 +msgid "Added an ESL/EFL tab release option and status field" +msgstr "" + +#: ../../../CHANGELOG.rst:449 +msgid "Added a chi-squared test to measure motion balance in the motion standings/balance. Thanks to Viran Weerasekera for contributing this" +msgstr "" + +#: ../../../CHANGELOG.rst:450 +msgid "The Auto Allocate function for adjudicators will now also allocate trainees to solo-chaired debates" +msgstr "" + +#: ../../../CHANGELOG.rst:451 +msgid "Added a 'Tab Release' preset for easily releasing all standings/results pages after a tournament is finished" +msgstr "" + +#: ../../../CHANGELOG.rst:452 +msgid "Added 'Average Speaks by Round' to the standings overview page" +msgstr "" + +#: ../../../CHANGELOG.rst:453 +msgid "Fixed issue where the Auto Allocator was forming panels of incorrect strengths in debates identified as less important" +msgstr "" + +#: ../../../CHANGELOG.rst:454 +msgid "Fixed issue where toggling iron-person speeches on and off wouldn't hide/unset the relevant checkboxes" +msgstr "" + +#: ../../../CHANGELOG.rst:455 +msgid "Fixed issue where VenueCategories could not be edited if they did not have Venues set" +msgstr "" + +#: ../../../CHANGELOG.rst:456 +msgid "Various other small fixes and improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:460 +msgid "1.3.1" +msgstr "" + +#: ../../../CHANGELOG.rst:461 +msgid "*Release date: 26 May 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:463 +msgid "Fixed bug that allowed duplicate emoji to be occasionally generated" +msgstr "" + +#: ../../../CHANGELOG.rst:467 +msgid "1.3.0 (Genetta)" +msgstr "" + +#: ../../../CHANGELOG.rst:468 +msgid "*Release date: 9 May 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:470 +msgid "Added the ability to mark speeches as duplicates when entering ballots so that they will not show in speaker tabs, intended for use with 'iron-man' speeches and swing speakers" +msgstr "" + +#: ../../../CHANGELOG.rst:471 +msgid "Reworked venue constraints and venue display options by streamlining \"venue groups\" and \"venue constraint categories\" into a single \"venue category\" type, with options for how they are used and displayed" +msgstr "" + +#: ../../../CHANGELOG.rst:472 +msgid "Relocated the Random (now renamed 'Private') URL pages to the Setup section and added pages for printing/emailing out the ballot submission URLs" +msgstr "" + +#: ../../../CHANGELOG.rst:473 +msgid "Reworked the simple data importer (formerly the visual importer) to improve its robustness" +msgstr "" + +#: ../../../CHANGELOG.rst:474 +msgid "Improved guards against having no current round set, and added a new page for manually overriding the current round (under Configuration)" +msgstr "" + +#: ../../../CHANGELOG.rst:475 +msgid "Added a preference for controlling whether assistant users have access to pages that can reveal draw or motions information ahead of their public release" +msgstr "" + +#: ../../../CHANGELOG.rst:476 +msgid "Added the ability to limit tab releases to a given number of ranks (*i.e.* only show the top 10 speakers)" +msgstr "" + +#: ../../../CHANGELOG.rst:477 +msgid "Added the ability to redact individual person's identifying details from speaker tabs" +msgstr "" + +#: ../../../CHANGELOG.rst:478 +msgid "Added the ability for user passwords to be easily reset" +msgstr "" + +#: ../../../CHANGELOG.rst:479 +msgid "Added a minimal set of default feedback questions to newly created Tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:480 +msgid "When a tournament's current round is set, redirect to a page where it can be set, rather than crashing" +msgstr "" + +#: ../../../CHANGELOG.rst:481 +msgid "A number of other minor bug fixes and enhancements" +msgstr "" + +#: ../../../CHANGELOG.rst:485 +msgid "1.2.3" +msgstr "" + +#: ../../../CHANGELOG.rst:486 +msgid "*Release date: 17 March 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:488 +msgid "Improved the display of the admin ballot entry form on mobile devices" +msgstr "" + +#: ../../../CHANGELOG.rst:489 ../../../CHANGELOG.rst:497 +#: ../../../CHANGELOG.rst:505 +msgid "A number of other minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:493 +msgid "1.2.2" +msgstr "" + +#: ../../../CHANGELOG.rst:494 +msgid "*Release date: 4 March 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:496 +msgid "Protected debate-team objects from cascaded deletion, and added warning messages with guidance when users would otherwise do this" +msgstr "" + +#: ../../../CHANGELOG.rst:501 +msgid "1.2.1" +msgstr "" + +#: ../../../CHANGELOG.rst:502 +msgid "*Release date: 25 February 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:504 +msgid "Printable feedback forms will now display the default rating scale, any configured introduction text, and better prompt you to add additional questions" +msgstr "" + +#: ../../../CHANGELOG.rst:509 +msgid "1.2.0 (Foldex)" +msgstr "" + +#: ../../../CHANGELOG.rst:510 +msgid "*Release date: 15 February 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:512 +msgid "Changed the core workflow by splitting display- and motion- related activities into separate pages to simplify each stage of running a round" +msgstr "" + +#: ../../../CHANGELOG.rst:513 +msgid "Added support for Docker-based installations to make local/offline installations much more simple" +msgstr "" + +#: ../../../CHANGELOG.rst:514 +msgid "Added a \"Tabbykitten\" version of Tabbycat that can be deployed to Heroku without a needing a credit/debit card" +msgstr "" + +#: ../../../CHANGELOG.rst:515 +msgid "Added button to load a demo tournament on the 'New Tournament' page so it is easier to test-run Tabbycat" +msgstr "" + +#: ../../../CHANGELOG.rst:516 +msgid "Changed venue groups to be separate to venue constraint categories" +msgstr "" + +#: ../../../CHANGELOG.rst:517 +msgid "Modified the licence to clarify that donations are required for some tournaments and added a more explicit donations link and explanation page" +msgstr "" + +#: ../../../CHANGELOG.rst:518 +msgid "Added information about autosave status to the adjudicator allocations page" +msgstr "" + +#: ../../../CHANGELOG.rst:519 +msgid "Added configurable side names so that tournaments can use labels like \"Proposition\"/\"Opposition\" instead of \"Affirmative\"/\"Negative\"" +msgstr "" + +#: ../../../CHANGELOG.rst:520 +msgid "Started work on basic infrastructure for translations" +msgstr "" + +#: ../../../CHANGELOG.rst:524 +msgid "1.1.7" +msgstr "" + +#: ../../../CHANGELOG.rst:525 +msgid "*Release date: 31 January 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:527 +msgid "Yet more minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:528 +msgid "The auto-allocation UI will now detail your minimum rating setting better" +msgstr "" + +#: ../../../CHANGELOG.rst:529 +msgid "Added guidance on database backups to documentation" +msgstr "" + +#: ../../../CHANGELOG.rst:533 +msgid "1.1.6" +msgstr "" + +#: ../../../CHANGELOG.rst:534 +msgid "*Release date: 19 January 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:536 +msgid "A number of minor bug fixes" +msgstr "" + +#: ../../../CHANGELOG.rst:537 +msgid "Added basic infrastructure for creating tabbycat translations" +msgstr "" + +#: ../../../CHANGELOG.rst:541 +msgid "1.1.5" +msgstr "" + +#: ../../../CHANGELOG.rst:542 +msgid "*Release date: 12 January 2017*" +msgstr "" + +#: ../../../CHANGELOG.rst:544 +msgid "A number of minor bug fixes and improvements to documentation" +msgstr "" + +#: ../../../CHANGELOG.rst:548 +msgid "1.1.4" +msgstr "" + +#: ../../../CHANGELOG.rst:549 +msgid "*Release date: 25 November 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:551 +msgid "Redesigned the footer area to better describe Tabbycat and to promote donations and related projects" +msgstr "" + +#: ../../../CHANGELOG.rst:552 +msgid "Slight tweaks to the site homepage and main menus to better accommodate the login/log out links" +msgstr "" + +#: ../../../CHANGELOG.rst:553 +msgid "A few minor bug fixes and improvements to error reporting" +msgstr "" + +#: ../../../CHANGELOG.rst:557 +msgid "1.1.3" +msgstr "" + +#: ../../../CHANGELOG.rst:558 +msgid "*Release date: 15 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:560 +msgid "Fixed bug affecting some migrations from earlier versions" +msgstr "" + +#: ../../../CHANGELOG.rst:561 +msgid "Made latest results show question mark rather than crash if a team is missing" +msgstr "" + +#: ../../../CHANGELOG.rst:562 +msgid "Fixed bug affecting the ability to save motions" +msgstr "" + +#: ../../../CHANGELOG.rst:563 +msgid "Fixed bug preventing draw flags from being displayed" +msgstr "" + +#: ../../../CHANGELOG.rst:567 +msgid "1.1.2" +msgstr "" + +#: ../../../CHANGELOG.rst:568 +msgid "*Release date: 14 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:570 +msgid "Allow panels with even number of adjudicators (with warnings), by giving chair the casting vote" +msgstr "" + +#: ../../../CHANGELOG.rst:571 +msgid "Removed defunct person check-in, which hasn't been used since 2010" +msgstr "" + +#: ../../../CHANGELOG.rst:572 +msgid "Collapsed availability database models into a single model with Django content types" +msgstr "" + +#: ../../../CHANGELOG.rst:573 +msgid "Collapsed optional fields in action log entries into a single generic field using Django content types" +msgstr "" + +#: ../../../CHANGELOG.rst:574 +msgid "Added better warnings when attempting to create an elimination round draw with fewer than two teams" +msgstr "" + +#: ../../../CHANGELOG.rst:575 +msgid "Added warnings in Edit Database view when editing debate teams" +msgstr "" + +#: ../../../CHANGELOG.rst:576 +msgid "Renamed \"AIDA pre-2015\" break rule to \"AIDA 1996\"" +msgstr "" + +#: ../../../CHANGELOG.rst:580 +msgid "1.1.1" +msgstr "" + +#: ../../../CHANGELOG.rst:581 +msgid "*Release date: 8 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:583 +msgid "Fixed a bug where the team standings and team tab would crash when some emoji were not set" +msgstr "" + +#: ../../../CHANGELOG.rst:587 +msgid "1.1.0 (Egyptian Mau)" +msgstr "" + +#: ../../../CHANGELOG.rst:588 +msgid "*Release date: 3 September 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:590 +msgid "Added support for the United Asian Debating Championships style" +msgstr "" + +#: ../../../CHANGELOG.rst:591 +msgid "Added support for the World Schools Debating Championships style" +msgstr "" + +#: ../../../CHANGELOG.rst:592 +msgid "Made Windows 8+ Emoji more colourful" +msgstr "" + +#: ../../../CHANGELOG.rst:593 +msgid "Fixed an incompatability between Vue and IE 10-11 which caused tables to not render" +msgstr "" + +#: ../../../CHANGELOG.rst:594 +msgid "Minor bug fixes and dependency updates" +msgstr "" + +#: ../../../CHANGELOG.rst:598 +msgid "1.0.1" +msgstr "" + +#: ../../../CHANGELOG.rst:599 +msgid "*Release date: 19 August 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:601 +msgid "Fixed a minor bug with the visual importer affecting similarly named institutions" +msgstr "" + +#: ../../../CHANGELOG.rst:602 +msgid "Fixed error message when user tries to auto-allocate adjudicators on unconfirmed or released draw" +msgstr "" + +#: ../../../CHANGELOG.rst:603 +msgid "Minor docs edits" +msgstr "" + +#: ../../../CHANGELOG.rst:607 +msgid "1.0.0 (Devon Rex)" +msgstr "" + +#: ../../../CHANGELOG.rst:608 +msgid "*Release date: 16 August 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:613 +msgid "Redesigned and redeveloped adjudicator allocation page" +msgstr "" + +#: ../../../CHANGELOG.rst:611 +msgid "Redesigned interface, featuring clearer displays of conflict and diversity information" +msgstr "" + +#: ../../../CHANGELOG.rst:612 +msgid "Changes to importances and panels are now automatically saved" +msgstr "" + +#: ../../../CHANGELOG.rst:613 +msgid "Added debate \"liveness\" to help identify critical rooms—many thanks to Thevesh Theva" +msgstr "" + +#: ../../../CHANGELOG.rst:614 +msgid "Panel score calculations performed live to show strength of voting majorities" +msgstr "" + +#: ../../../CHANGELOG.rst:616 +msgid "New features" +msgstr "" + +#: ../../../CHANGELOG.rst:616 +msgid "Added record pages for teams and adjudicators" +msgstr "" + +#: ../../../CHANGELOG.rst:617 +msgid "Added a diversity tab to display demographic information about participants and scoring" +msgstr "" + +#: ../../../CHANGELOG.rst:619 +msgid "Significant general improvements" +msgstr "" + +#: ../../../CHANGELOG.rst:619 +msgid "Shifted most table rendering to Vue.js to improve performance and design" +msgstr "" + +#: ../../../CHANGELOG.rst:620 +msgid "Drastically reduced number of SQL queries in large tables, *e.g.* draw, results, tab" +msgstr "" + +#: ../../../CHANGELOG.rst:624 +msgid "Break round management" +msgstr "" + +#: ../../../CHANGELOG.rst:622 +msgid "Completed support for break round draws" +msgstr "" + +#: ../../../CHANGELOG.rst:623 +msgid "Simplified procedure for adding remarks to teams and updating break" +msgstr "" + +#: ../../../CHANGELOG.rst:624 +msgid "Reworked break generation code to be class-based, to improve future extensibility" +msgstr "" + +#: ../../../CHANGELOG.rst:625 +msgid "Added support for break qualification rules: AIDA Australs, AIDA Easters, WADL" +msgstr "" + +#: ../../../CHANGELOG.rst:628 +msgid "Feedback" +msgstr "Phản hồi" + +#: ../../../CHANGELOG.rst:627 +msgid "Changed Boolean fields in AdjudicatorFeedbackQuestion to reflect what they actually do" +msgstr "" + +#: ../../../CHANGELOG.rst:628 +msgid "Changed \"panellist feedback enabled\" option to \"feedback paths\", a choice of three options" +msgstr "" + +#: ../../../CHANGELOG.rst:630 +msgid "Dropped \"/t/\" from tournament URLs and moved \"/admin/\" to \"/database/\", with 301 redirects" +msgstr "" + +#: ../../../CHANGELOG.rst:631 +msgid "Added basic code linting to the continuous integration tests" +msgstr "" + +#: ../../../CHANGELOG.rst:632 +msgid "Many other small bug fixes, refactors, optimisations, and documentation updates" +msgstr "" + +#: ../../../CHANGELOG.rst:636 +msgid "0.9.0 (Chartreux)" +msgstr "" + +#: ../../../CHANGELOG.rst:637 +msgid "*Release date: 13 June 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:639 +msgid "Added a beta implementation of the break rounds workflow" +msgstr "" + +#: ../../../CHANGELOG.rst:640 +msgid "Added venue constraints, to allow participants or divisions to preferentially be given venues from predefined groups" +msgstr "" + +#: ../../../CHANGELOG.rst:641 +msgid "Added a button to regenerate draws" +msgstr "" + +#: ../../../CHANGELOG.rst:642 +msgid "Refactored speaker standings implementation to match team standings implementation" +msgstr "" + +#: ../../../CHANGELOG.rst:643 +msgid "New standings metrics, draw methods, and interface settings for running small tournaments and division-based tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:644 +msgid "Improved support for multiple tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:645 +msgid "Improved user-facing error messages in some scenarios" +msgstr "" + +#: ../../../CHANGELOG.rst:646 +msgid "Most frontend dependencies now handled by Bower" +msgstr "" + +#: ../../../CHANGELOG.rst:647 +msgid "Static file compilation now handled by Gulp" +msgstr "" + +#: ../../../CHANGELOG.rst:648 ../../../CHANGELOG.rst:660 +msgid "Various bug fixes, optimisations, and documentation edits" +msgstr "" + +#: ../../../CHANGELOG.rst:652 +msgid "0.8.3" +msgstr "" + +#: ../../../CHANGELOG.rst:653 +msgid "*Release date: 4 April 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:655 +msgid "Restored and reworking printing functionality for scoresheets/feedback" +msgstr "" + +#: ../../../CHANGELOG.rst:656 +msgid "Restored Edit Venues and Edit Matchups on the draw pages" +msgstr "" + +#: ../../../CHANGELOG.rst:657 +msgid "Reworked tournament data importers to use csv.DictReader, so that column order in files doesn't matter" +msgstr "" + +#: ../../../CHANGELOG.rst:658 +msgid "Improved dashboard and feedback graphs" +msgstr "" + +#: ../../../CHANGELOG.rst:659 +msgid "Add separate pro speakers tab" +msgstr "" + +#: ../../../CHANGELOG.rst:664 +msgid "0.8.2" +msgstr "" + +#: ../../../CHANGELOG.rst:665 +msgid "*Release date: 20 March 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:667 +msgid "Fixed issue where scores from individual ballots would be deleted when any other panel in the round was edited" +msgstr "" + +#: ../../../CHANGELOG.rst:668 +msgid "Fixed issue where page crashes for URLs with \"tab\" in it but that aren't recognized tab pages" +msgstr "" + +#: ../../../CHANGELOG.rst:672 +msgid "0.8.1" +msgstr "" + +#: ../../../CHANGELOG.rst:673 +msgid "*Release date: 15 March 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:675 +msgid "Fixed a bug where editing a Team in the admin section could cause an error" +msgstr "" + +#: ../../../CHANGELOG.rst:676 +msgid "Added instructions on how to account for speakers speaking twice to docs" +msgstr "" + +#: ../../../CHANGELOG.rst:677 +msgid "Venues Importer wont show VenueGroup import info unless that option is enabled" +msgstr "" + +#: ../../../CHANGELOG.rst:681 +msgid "0.8.0 (Bengal)" +msgstr "" + +#: ../../../CHANGELOG.rst:682 +msgid "*Release date: 29 February 2016*" +msgstr "" + +#: ../../../CHANGELOG.rst:684 +msgid "Upgraded to Python 3.4, dropped support for Python 2" +msgstr "" + +#: ../../../CHANGELOG.rst:685 +msgid "Restructured directories and, as a consequence, changed database schema" +msgstr "" + +#: ../../../CHANGELOG.rst:686 +msgid "Added Django migrations to the release (they were previously generated by the user)" +msgstr "" + +#: ../../../CHANGELOG.rst:687 +msgid "Migrated documentation to `Read The Docs `_" +msgstr "" + +#: ../../../CHANGELOG.rst:688 +msgid "New user interface design and workflow" +msgstr "" + +#: ../../../CHANGELOG.rst:689 +msgid "Overhauled tournament preferences to use `django-dynamic-preferences `_" +msgstr "" + +#: ../../../CHANGELOG.rst:690 +msgid "Added new visual data importer" +msgstr "" + +#: ../../../CHANGELOG.rst:691 +msgid "Improved flexibility of team standings rules" +msgstr "" + +#: ../../../CHANGELOG.rst:692 +msgid "Moved data utility scripts to Django management commands" +msgstr "" + +#: ../../../CHANGELOG.rst:693 +msgid "Changed emoji to Unicode characters" +msgstr "" + +#: ../../../CHANGELOG.rst:694 +msgid "Various other fixes and refinements" +msgstr "" + +#: ../../../CHANGELOG.rst:698 +msgid "0.7.0 (Abyssinian)" +msgstr "" + +#: ../../../CHANGELOG.rst:699 +msgid "*Release date: 31 July 2015*" +msgstr "" + +#: ../../../CHANGELOG.rst:701 +msgid "Support for multiple tournaments" +msgstr "" + +#: ../../../CHANGELOG.rst:702 +msgid "Improved and extensible tournament data importer" +msgstr "" + +#: ../../../CHANGELOG.rst:703 +msgid "Display gender, region, and break category in adjudicator allocation" +msgstr "" + +#: ../../../CHANGELOG.rst:704 +msgid "New views for online adjudicator feedback" +msgstr "" + +#: ../../../CHANGELOG.rst:705 +msgid "Customisable adjudicator feedback forms" +msgstr "" + +#: ../../../CHANGELOG.rst:706 +msgid "Randomised URLs for public submission" +msgstr "" + +#: ../../../CHANGELOG.rst:707 +msgid "Customisable break categories" +msgstr "" + +#: ../../../CHANGELOG.rst:708 +msgid "Computerised break generation (break round draws not supported)" +msgstr "" + +#: ../../../CHANGELOG.rst:709 +msgid "Lots of fixes, interface touch-ups and performance enhancements" +msgstr "" + +#: ../../../CHANGELOG.rst:710 +msgid "Now requires Django 1.8 (and other package upgrades)" +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/about/contributing.po b/docs/locale/vi/LC_MESSAGES/about/contributing.po new file mode 100644 index 00000000000..105d4eaa57d --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/about/contributing.po @@ -0,0 +1,352 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-25 02:58\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/contributing.po\n" +"X-Crowdin-File-ID: 1263\n" +"Language: vi_VN\n" + +#: ../../../CONTRIBUTING.rst:3 +msgid "Contributing" +msgstr "" + +#: ../../../CONTRIBUTING.rst:5 +msgid "Contributions are welcome, and are greatly appreciated! Every little bit helps, and credit will be given. While at its core Tabbycat is a software project, you do not need to know how to code or use Git in order to help. We welcome feedback and ideas based on your tabbing experience and appreciate suggestions or proposals for how to improve the wording, translation, and design of our interface and documentation." +msgstr "" + +#: ../../../CONTRIBUTING.rst:7 +msgid "Feel free to `join our Facebook group `_ if you have any questions about how to get started." +msgstr "" + +#: ../../../CONTRIBUTING.rst:10 +msgid "Feedback and ideas" +msgstr "" + +#: ../../../CONTRIBUTING.rst:12 +msgid "These can be added as issues in the `GitHub repository `_; posts in our `Facebook group `_; or as an :ref:`email to the developers `." +msgstr "" + +#: ../../../CONTRIBUTING.rst:15 +msgid "Bug reports" +msgstr "" + +#: ../../../CONTRIBUTING.rst:17 +msgid "Please report bugs by opening a new issue in our `GitHub repository `_. It is most helpful if you can include:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:19 +msgid "How Tabbycat was installed (on Heroku, locally on macOS, `etc.`)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:20 +msgid "Any details about your tournament and setup that might be helpful in troubleshooting" +msgstr "" + +#: ../../../CONTRIBUTING.rst:21 +msgid "Detailed steps for how to reproduce the bug" +msgstr "" + +#: ../../../CONTRIBUTING.rst:24 +msgid "Getting started with development" +msgstr "" + +#: ../../../CONTRIBUTING.rst:26 +msgid "To easily test your changes to Tabbycat you probably want a working :ref:`local install ` (without using Docker)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:27 +msgid "Please submit pull requests for features and bug fixes against `develop` (but not `master`)." +msgstr "" + +#: ../../../CONTRIBUTING.rst:28 +msgid "We broadly use the `git-flow workflow `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:29 +msgid "We use Django's testing tools — adding unit tests to new features is greatly appreciated" +msgstr "" + +#: ../../../CONTRIBUTING.rst:31 +msgid "A number of our tests use `Selenium `_ and `ChromeDriver `_ to simulate in-browser functionality. They will fail if you do not have the Chrome browser and ChromeDriver installed." +msgstr "" + +#: ../../../CONTRIBUTING.rst:33 +msgid "A number of extra dependencies are required for running tests, linting, and serving the documentation. These can be installed with::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:37 +msgid "Our ``package.json`` provides a convenience command that runs a standard set of development tools simultaneously, such as the Django server and the automatic recompilation with live injecting of javascript and CSS. Once you have set ``USE_WEBPACK_SERVER=True`` in your ``settings_local.py`` you can then run this with::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:42 +msgid "Generating test data" +msgstr "" + +#: ../../../CONTRIBUTING.rst:44 +msgid "There are management commands to help developers quickly generate data for use in testing, including results and feedback. A list of all commands can be found from ``dj help``, but the most useful in this context are:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:46 +msgid "``dj importtournament ( minimal8team | australs24team | bp88team )``, which imports participant data for the 8-team (``minimal8team``), 24-team Australs (``australs24team``) and 88-team BP (``bp88team``) demonstration tournaments respectively." +msgstr "" + +#: ../../../CONTRIBUTING.rst:47 +msgid "``dj simulaterounds ROUND [ROUND ROUND ...]``, which simulates all of the rounds specified, generating a draw, an adjudicator allocation and a complete set of random results (but not feedback)." +msgstr "" + +#: ../../../CONTRIBUTING.rst:48 +msgid "``dj generatefeedback ROUND [ROUND ROUND ...]``, which randomly generates feedback for all existing debates in the specified rounds." +msgstr "" + +#: ../../../CONTRIBUTING.rst:49 +msgid "``dj generateresults ROUND [ROUND ROUND ...]``, which randomly generates results for all existing debates in the specified rounds. (You don't need to run this if you ran ``simulaterounds``, because that already does it.)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:51 +msgid "Rounds can be specified by sequence number (``seq``) or abbreviation. You can find more information about each of them by adding ``--help`` after the command name." +msgstr "" + +#: ../../../CONTRIBUTING.rst:54 +msgid "Database schema changes" +msgstr "" + +#: ../../../CONTRIBUTING.rst:56 +msgid "When adding new features, it may be necessary to modify the database schema to support these new additions. After the changes are made, the migration files made by ``python manage.py makemigrations`` must also be committed. The migration files should also contain methods fill the new fields based on existing data if possible." +msgstr "" + +#: ../../../CONTRIBUTING.rst:58 +msgid "Fixture files (found under ``data/fixtures/``) may also need to be updated, which can be done by running the ``migrate_fixtures.py`` script under a unmigrated database, then committing the result. ::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:64 +msgid "Style guide" +msgstr "" + +#: ../../../CONTRIBUTING.rst:66 +msgid "For the front end interface design there is a style guide available at \"/style/\" once a tournament has been setup." +msgstr "" + +#: ../../../CONTRIBUTING.rst:68 +msgid "For python code, we use `flake8 `_ to check for a non-strict series of style rules. Warnings will trigger a Travis CI build to fail. The entire codebase can be checked by using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:72 +msgid "For stylesheets, we use `stylelint `_. The relevant code can be checked by using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:76 +msgid "For javascript, we use `eslint `_ to enforce the `standardJS `_ style and the standard recommendation of the vue plugin for eslint. The relevant code can be checked by using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:81 +msgid "Versioning convention" +msgstr "" + +#: ../../../CONTRIBUTING.rst:83 +msgid "Our convention is to increment the minor version whenever we add new functionality, and to increment the major version whenever:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:85 +msgid "the database can't be migrated forwards using ``python manage.py migrate --no-input``, or" +msgstr "" + +#: ../../../CONTRIBUTING.rst:86 +msgid "there is a major change to how the tournament workflow goes, or" +msgstr "" + +#: ../../../CONTRIBUTING.rst:87 +msgid "we make some other change that is, in our opinion, significant enough to warrant a milestone." +msgstr "" + +#: ../../../CONTRIBUTING.rst:89 +msgid "We write `data migrations `_ to allow existing systems to be upgraded easily. However, we don't always support backward database migrations. Our expectation is that long-lived installations keep up with our latest version." +msgstr "" + +#: ../../../CONTRIBUTING.rst:91 +msgid "One day, we hope to have a public API in place to facilitate the integration with other debating tournament software, like registration or adjudicator feedback systems. If and when that happens, we'll probably revise this convention to be more in line with `Semantic Versioning `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:93 +msgid "Starting from version 0.7.0, we use cat breeds as the code names for major versions." +msgstr "" + +#: ../../../CONTRIBUTING.rst:96 +msgid "Documentation" +msgstr "Tài liệu hướng dẫn" + +#: ../../../CONTRIBUTING.rst:98 +msgid "Documentation is created using `Sphinx `_ and hosted at `Read The Docs `_. Pushes to ``develop`` will update the *latest* documentation set, while pushes to ``master`` will update the *stable* documentation set." +msgstr "" + +#: ../../../CONTRIBUTING.rst:100 +msgid "To preview the documentation locally, install the development dependencies and then start the server::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:104 +msgid "You should then be able to preview the docs at `127.0.0.1:7999 `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:107 +msgid "Project structure" +msgstr "" + +#: ../../../CONTRIBUTING.rst:109 +msgid "``bin`` contains a number of convenience scripts for starting/stopping Docker, and the webserver/asset pipeline." +msgstr "" + +#: ../../../CONTRIBUTING.rst:110 +msgid "``data`` contains the sample data sets and fixtures used to setup demo tournaments and in automated tests respectively" +msgstr "" + +#: ../../../CONTRIBUTING.rst:111 +msgid "``docs`` contains our document source files and images (although some are linked from the root directory)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:115 +msgid "``tabbycat`` is the main directory containing the Django project" +msgstr "" + +#: ../../../CONTRIBUTING.rst:113 +msgid "``locale`` contains translation strings for shared templates (others are in respective app directories)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:114 +msgid "``templates`` contains shared html templates, stylesheets, javascript source files, and Vue.js components/mixins." +msgstr "" + +#: ../../../CONTRIBUTING.rst:115 +msgid "``utils`` contains shared utilities" +msgstr "" + +#: ../../../CONTRIBUTING.rst:116 +msgid "All other folders are the Django apps that contain specific views, models, and templates for functions such as ``draw`` generation/display, or recording ``results``. Each has sub-folders for tests and templates." +msgstr "" + +#: ../../../CONTRIBUTING.rst:117 +msgid "In the root directory there are a number of files defining our python and javascript dependencies, core configuration files, and key documents like the ``README``" +msgstr "" + +#: ../../../CONTRIBUTING.rst:120 +msgid "Internationalization/Localization" +msgstr "" + +#: ../../../CONTRIBUTING.rst:122 +msgid "The `gettext `_ framework is used to enable the translation of strings in Python files and Django templates. Backend in this context signifies these types of files." +msgstr "" + +#: ../../../CONTRIBUTING.rst:124 +msgid "The backend's translation files can be updated from the ``tabbycat`` directory using one or more of the supporting language codes (see settings.py)::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:128 +msgid "To do more than one language, just specify ``-l`` multiple times, _e.g._ ``-les -lar``." +msgstr "" + +#: ../../../CONTRIBUTING.rst:130 +msgid "These can then be compiled using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:134 +msgid "As it stands Heroku needs the .mo files pre-compiled (see `issue in Heroku Python buildpack `_, so these are committed to Git. Note that the English (``en``) language files should not be compiled; their sole purpose is to provide a source language for `Crowdin `_." +msgstr "" + +#: ../../../CONTRIBUTING.rst:136 +msgid "Strings defined in Vue files must similarily be marked with ``gettext`` but must be added manually to ``tabbycat/locale/LANGUAGE_CODE/djangojs.po``, for each language supported. These can then compiled to javascript bundles using::" +msgstr "" + +#: ../../../CONTRIBUTING.rst:141 +msgid "These are then also committed to git to save users needing to run `compilejsi18n` during setup. The resulting files are then bundled as part of the npm build task. Updating these translations in development (live-reload) requires the use of the ``cp-i18n`` npm task." +msgstr "" + +#: ../../../CONTRIBUTING.rst:144 +msgid "Release checklist" +msgstr "" + +#: ../../../CONTRIBUTING.rst:146 +msgid "Check that all migrations have been generated and committed into Git" +msgstr "" + +#: ../../../CONTRIBUTING.rst:147 +msgid "Merge translations from the Crowdin pull request and compile messages" +msgstr "" + +#: ../../../CONTRIBUTING.rst:148 +msgid "Bump version number in ``docs/conf.py``" +msgstr "" + +#: ../../../CONTRIBUTING.rst:149 +msgid "Bump version number and (if applicable) codename in ``tabbycat/settings/core.py``" +msgstr "" + +#: ../../../CONTRIBUTING.rst:150 +msgid "Update the main ``CHANGELOG.rst`` file (including release date)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:155 +msgid "Check the major current deployment options, including:" +msgstr "" + +#: ../../../CONTRIBUTING.rst:152 +msgid "The ``deploy_heroku.py`` script" +msgstr "" + +#: ../../../CONTRIBUTING.rst:153 +msgid "The Tabbykitten version" +msgstr "" + +#: ../../../CONTRIBUTING.rst:154 +msgid "Docker (macOS, Windows 10*) and Docker Toolbox (Windows 10 Home) methods" +msgstr "" + +#: ../../../CONTRIBUTING.rst:155 +msgid "Using Bash and Powershell on Windows" +msgstr "" + +#: ../../../CONTRIBUTING.rst:156 +msgid "Using Terminal on macOS (at least test out a fresh install of the npm/pip dependencies)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:157 +msgid "Check that the last Travis CI build passed and run the full local test suite (this will include the Selenium tests that are not on Travis)" +msgstr "" + +#: ../../../CONTRIBUTING.rst:158 +msgid "Shift remaining issues from the Github Milestone" +msgstr "" + +#: ../../../CONTRIBUTING.rst:159 +msgid "Create and finish the release branch as per git-flow" +msgstr "" + +#: ../../../CONTRIBUTING.rst:160 +msgid "Ensure the tag is correct (``vX.Y.Z``) and published to GitHub" +msgstr "" + +#: ../../../CONTRIBUTING.rst:161 +msgid "Back-merge ``master`` to the ``kitten`` branch" +msgstr "" + +#: ../../../CONTRIBUTING.rst:162 +msgid "Back-merge ``develop`` to the in-progress feature branches" +msgstr "" + +#: ../../../CONTRIBUTING.rst:163 +msgid "Issue a formal release with change notes on GitHub" +msgstr "" + +#: ../../../CONTRIBUTING.rst:164 +msgid "Post change notes on the Facebook page/group" +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/about/licence.po b/docs/locale/vi/LC_MESSAGES/about/licence.po new file mode 100644 index 00000000000..940edbb3753 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/about/licence.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/licence.po\n" +"X-Crowdin-File-ID: 1265\n" +"Language: vi_VN\n" + +#: ../../../LICENSE.rst:3 +msgid "Licence Information" +msgstr "" + +#: ../../../LICENSE.rst:5 +msgid "We haven't released Tabbycat under an open-source licence, so there is no formal and general right to use this software. Nonetheless, you're welcome to freely use Tabbycat to help run a debating tournament if it is a not-for-profit and not-for-fundraising activity. A voluntary donation of A$1 (Australian dollar) per team would be greatly appreciated, and would help us meet costs and justify our ongoing work and support for Tabbycat users. (A donation link is in the footer of your Tabbycat site.)" +msgstr "" + +#: ../../../LICENSE.rst:8 +msgid "Use at for-profit or fundraising tournaments" +msgstr "" + +#: ../../../LICENSE.rst:10 +msgid "If you use Tabbycat at a tournament where any individual or organisation is making a profit or raising funds (other than to cover the direct costs of the tournament), you or your tournament **must** make a donation of A$1 (Australian dollar) per team to the Tabbycat maintenance team, as outlined in each tournament’s donation page (the link is in the footer of your Tabbycat site). This includes instances where organisations run tournaments partly as fundraising activities and applies even if the organisation itself is a non-profit." +msgstr "" + +#: ../../../LICENSE.rst:12 +msgid "While we suggest that non-profit, non-fundraising tournaments budget for a donation of A$1 per team, it is not required in order for such tournaments to use Tabbycat." +msgstr "" + +#: ../../../LICENSE.rst:15 +msgid "Modifications to and redistributions of Tabbycat" +msgstr "" + +#: ../../../LICENSE.rst:17 +msgid "We grant you permission to modify and/or redistribute Tabbycat, provided that" +msgstr "" + +#: ../../../LICENSE.rst:19 +msgid "you do not receive any payment for this modification and/or redistribution," +msgstr "" + +#: ../../../LICENSE.rst:20 +msgid "if you modify Tabbycat, you add prominent notices stating that you modified it," +msgstr "" + +#: ../../../LICENSE.rst:21 +msgid "all references and functionality relating to donations are kept intact, and" +msgstr "" + +#: ../../../LICENSE.rst:22 +msgid "this licence page and all attributions of authorship are included as-is." +msgstr "" + +#: ../../../LICENSE.rst:24 +msgid "Modifying Tabbycat for payment, or using a version of Tabbycat that has been modified for payment, is strictly prohibited without our express permission." +msgstr "" + +#: ../../../LICENSE.rst:26 +msgid "If you use a version of Tabbycat that has been modified by you or a third party to run a for-profit or fundraising tournament, the abovementioned donation of A$1 per team is still required." +msgstr "" + +#: ../../../LICENSE.rst:29 +msgid "Disclaimer of warranty and liability" +msgstr "" + +#: ../../../LICENSE.rst:31 +msgid "We work on this software in our spare time and make it available for not-for-profit use in the hope that it will benefit the debating community. **It is provided \"as is\", without any warranty of any kind, express or implied, including without limitation any warranties of merchantability and fitness for a particular purpose, and we disclaim all legal liability. By using Tabbycat, you agree that none of its contributors will be held liable for any loss or claim arising directly or indirectly from using the software, or for any loss or claim otherwise in connection with the software.**" +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/about/support.po b/docs/locale/vi/LC_MESSAGES/about/support.po new file mode 100644 index 00000000000..9fa446c18aa --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/about/support.po @@ -0,0 +1,56 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-25 02:58\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/support.po\n" +"X-Crowdin-File-ID: 1267\n" +"Language: vi_VN\n" + +#: ../../about/support.rst:3 +msgid "Support" +msgstr "Hỗ trợ" + +#: ../../about/support.rst:5 +msgid "There are a number of ways to report bugs, ask for help, or submit feedback." +msgstr "" + +#: ../../about/support.rst:8 +msgid "Facebook" +msgstr "" + +#: ../../about/support.rst:10 +msgid "`Our Facebook group `_ is a good place to ask for help. It's also a good place to keep up with new releases and participate in more general discussions of features and ideas." +msgstr "" + +#: ../../about/support.rst:13 +msgid "GitHub" +msgstr "" + +#: ../../about/support.rst:15 +msgid "Adding an issue to our `GitHub repository `_ is a great way to let us know about bugs or writeup suggestions for how to improve Tabbycat. Pull requests are also encouraged!" +msgstr "" + +#: ../../about/support.rst:17 +msgid "When submitting bugs or reporting errors please let us know your site address (if installed online) or operating system (if local) along with a complete description of the problem along with any error messages." +msgstr "" + +#: ../../about/support.rst:20 +msgid "Email" +msgstr "" + +#: ../../about/support.rst:22 +msgid "Feel free to :ref:`contact the maintainers directly ` if you are not able to access Facebook or GitHub." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/about/tournament-history.po b/docs/locale/vi/LC_MESSAGES/about/tournament-history.po new file mode 100644 index 00000000000..9774c228227 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/about/tournament-history.po @@ -0,0 +1,248 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/about/tournament-history.po\n" +"X-Crowdin-File-ID: 1335\n" +"Language: vi_VN\n" + +#: ../../about/tournament-history.rst:3 +msgid "Tournament History" +msgstr "" + +#: ../../about/tournament-history.rst:5 +msgid "A partial list of major national and international tournaments (that we know of) which have used Tabbycat." +msgstr "" + +#: ../../about/tournament-history.rst:8 +msgid "2017" +msgstr "" + +#: ../../about/tournament-history.rst:10 +msgid "`APU Philosophy CHallenge `_" +msgstr "" + +#: ../../about/tournament-history.rst:11 +msgid "`ANU Spring IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:12 +msgid "`Australian British Parliamentary Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:13 +msgid "`Australasian Wom*ns Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:14 +msgid "Asia World Schools Debating Championship" +msgstr "" + +#: ../../about/tournament-history.rst:15 +msgid "`Asia British Parliamentary Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:16 +msgid "`Borneo British Parliamentary Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:17 +msgid "`Canadian British Parliamentary Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:18 +msgid "`Cambridge Asian Schools BP Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:19 +msgid "Cambodia United Asian Debating Championship" +msgstr "" + +#: ../../about/tournament-history.rst:20 +msgid "`China British Parliamentary Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:21 +msgid "`Japan British Parliamentary Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:22 +msgid "`Kings College London IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:23 +msgid "`Kuala Lumpur Open Challenge `_" +msgstr "" + +#: ../../about/tournament-history.rst:24 +msgid "`KPU Pro Ams `_" +msgstr "" + +#: ../../about/tournament-history.rst:25 +msgid "`Malaysian National Intervarsity Debating Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:26 +msgid "`Melbourne Mini `_" +msgstr "" + +#: ../../about/tournament-history.rst:27 +msgid "`New Zealand Easters 2017 `_" +msgstr "" + +#: ../../about/tournament-history.rst:28 +msgid "`New Zealand British Parliamentary Debating Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:29 +msgid "`North East Asia Open `_" +msgstr "" + +#: ../../about/tournament-history.rst:30 +msgid "`Swords Mini-Gong `_" +msgstr "" + +#: ../../about/tournament-history.rst:31 +msgid "`Shanghai Asian Schools British Parliamentary Debate Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:32 +msgid "`UCD Law Society IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:33 +msgid "`UCD Vice President's Cup `_" +msgstr "" + +#: ../../about/tournament-history.rst:34 +msgid "`UQ Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:35 +msgid "`UT MARA Open `_" +msgstr "" + +#: ../../about/tournament-history.rst:36 +msgid "`Victoria Cup IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:37 +msgid "`Western Sydney BP Championship `_" +msgstr "" + +#: ../../about/tournament-history.rst:38 +msgid "`Wollongong Easters `_" +msgstr "" + +#: ../../about/tournament-history.rst:39 +msgid "`Yale IV `_" +msgstr "" + +#: ../../about/tournament-history.rst:42 +msgid "2016" +msgstr "" + +#: ../../about/tournament-history.rst:44 +msgid "`Sydney Easters `_" +msgstr "" + +#: ../../about/tournament-history.rst:45 +msgid "`Joynt Scroll 2016 `_" +msgstr "" + +#: ../../about/tournament-history.rst:46 +msgid "`Malaysia Debate Open 2016 `_" +msgstr "" + +#: ../../about/tournament-history.rst:47 +msgid "`New Zealand Easters 2016 `_" +msgstr "" + +#: ../../about/tournament-history.rst:48 +msgid "`Perth Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:49 +msgid "`Thailand United Asian Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:50 ../../about/tournament-history.rst:61 +msgid "The National Law School Debate" +msgstr "" + +#: ../../about/tournament-history.rst:51 +msgid "The Khazak National Schools Debating Championship" +msgstr "" + +#: ../../about/tournament-history.rst:54 +msgid "2015" +msgstr "" + +#: ../../about/tournament-history.rst:56 +msgid "`Bali United Asian Debating Championships `_" +msgstr "" + +#: ../../about/tournament-history.rst:57 +msgid "`Daejeon Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:58 +msgid "`Joynt Scroll `_" +msgstr "" + +#: ../../about/tournament-history.rst:59 +msgid "`Malaysia Debate Open 2015 `_" +msgstr "" + +#: ../../about/tournament-history.rst:60 +msgid "`New Zealand Easters 2015 `_" +msgstr "" + +#: ../../about/tournament-history.rst:62 +msgid "`UNSW/UTS Easters `_" +msgstr "" + +#: ../../about/tournament-history.rst:65 +msgid "2014" +msgstr "" + +#: ../../about/tournament-history.rst:67 +msgid "`Joynt Scroll 2014 `_" +msgstr "" + +#: ../../about/tournament-history.rst:68 +msgid "NTU United Asian Debating Championships" +msgstr "" + +#: ../../about/tournament-history.rst:69 +msgid "`Otago Australs `_" +msgstr "" + +#: ../../about/tournament-history.rst:72 +msgid "2012" +msgstr "" + +#: ../../about/tournament-history.rst:74 +msgid "Wellington Australs" +msgstr "" + +#: ../../about/tournament-history.rst:77 +msgid "2010" +msgstr "" + +#: ../../about/tournament-history.rst:79 +msgid "Auckland Australs" +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/features/adjudicator-allocation.po b/docs/locale/vi/LC_MESSAGES/features/adjudicator-allocation.po new file mode 100644 index 00000000000..e5cd4d4de72 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/features/adjudicator-allocation.po @@ -0,0 +1,160 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 18:40\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-allocation.po\n" +"X-Crowdin-File-ID: 1271\n" +"Language: vi_VN\n" + +#: ../../features/adjudicator-allocation.rst:5 +msgid "Adjudicator Allocation" +msgstr "Phân bổ giám khảo" + +#: ../../features/adjudicator-allocation.rst:7 +msgid "The adjudicator allocation screen offers the ability to automatically generate an allocation and/or allow you to create or edit an allocation manually. This interface is somewhat complex as it attempts to provide all of the information needed to inform allocation while also providing a number of automatic and manual tools for the allocation process itself." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:10 +msgid "Assigning Debate Priority" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:12 +msgid "For tournaments with more than a few debates you generally want to begin the allocation process by applying a priority value to your debates. A debate's priority value is used by the automatic adjudicator allocator (or the preformed panel indicator) to match the strongest panels to the debates that need them most." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:16 +msgid "The prioritise button in the top-left allows you to assign a priority value automatically based on a debate's bracket or its 'liveness'. Remember that in early rounds there are usually not enough results for the liveness of each debate to be distinct and that Tabbycat measures liveness based on the sum of all live break categories — a debate can have more liveness points than it has teams if there are teams that are live in multiple categories." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:18 +msgid "The automatic prioritiser never uses the 'highest' priority value so that you can easily use this to highlight the debates that need the strongest panels without needing to redistribute the priority of other debates." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:20 +msgid "Regardless of whether you automatically assign priority, there are sliders to the left of each team that can be used to manually specify priority. These are usually used to override the automatic priority of a debate if that matchup needs and especially strong/weak/mediocre panel for reasons that are not reflected in its bracket/liveness." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:24 +msgid "If each debate's priority is the same, the automatic adjudicator will fall-back on using the debate's bracket as a substitute for priority. Thus, you can skip the prioritisation process (or only prioritise the most/least important debates) if you want a relatively even spread of panellists (e.g. during Round 1)." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:27 +msgid "Automatic Adjudicator Allocation" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:29 +msgid "Once you are happy with your priorities you can begin assigning adjudicators. This also has an (optional) automatic process that will create panels for you. In creating these panels automatically, the allocator will:" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:31 +msgid "Avoid creating 'hard' conflicts (i.e. personal or institutional clashes) between adjudicators and teams while also trying to avoid 'soft' conflicts (i.e. avoiding an adjudicator seeing the same team again)." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:32 +msgid "Form panels whose relative average voting score matches the relative priority you assigned to each debate." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:33 +msgid "Allocate trainees (unless disabled or none are under the threshold) to panels (allocated first to the highest-strength panels)." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:34 +msgid "Violate the above intents in cases where there are inescapable constraints — e.g. if there are too many soft or hard conflicts to avoid creating panels that do not trigger them." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:36 +msgid "Remember that Tabbycat will only automatically allocate adjudicators that have been marked as available for this round." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:38 +msgid "To begin this process, click the *Allocate* button in the top-left. If you have :ref:`formed preformed panels ` for this round, the modal will first ask whether you want to assign adjudicators using those panels; otherwise the modal will contain a number of options that can be used to control the allocation. In general, the *minimum feedback score* value is the most important setting to consider as it determines the threshold needed for adjudicators to not be allocated as trainees." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:42 +msgid "Once you click *Auto-Allocate* the modal should disappear and your panels should appear. At large tournaments, and in the later rounds, it is not unheard of for this process to take a minute or longer." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:44 +msgid "You can re-run the automatic allocation process on top of an existing allocation. Thus it is worth tweaking your priorities or allocation settings if the allocation does not seem optimal to you. Also note that the allocation process is not deterministic — if you rerun it the panels will be different." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:46 +msgid "Once your adjudicators have been allocated you can drag and drop them on to different panels. You can also drag and drop them to the 'unused area' (the gray bar at the bottom of the page) if you wish to store them temporarily or remove them from the draw. Dropping an adjudicator into the chair position will 'swap' that adjudicator into the previous position of the new chair." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:49 +msgid "Saving, Live Updates, and Sharing" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:51 +msgid "Changes to your panels save automatically and you can exit the allocation page whenever you wish." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:53 +msgid "In addition, the allocation pages maintain a 'live' connection to the server that shows updates made by other users who are viewing/using the same page. That is to say, if two people on two computers are both viewing the allocation page they should see each other's changes in real-time. This allows you to 'distribute' the task of allocation across individual people (rather than sharing a screen/projector) if desired." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:55 +msgid "It is possible to have users 'undo' or 'overwrite' each others changes despite this live system, e.g. if both users drag and adjudicator somewhere at the same time." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:57 +msgid "If you are dividing the task of allocation across multiple people, the *Sharding* system can help by allowing individuals to limit their view of the draw. The use case here is usually to divide the draw up into mutually-exclusive subsets so that individuals (or groups) of the adjudication core can focus on creating panels across the draw in parallel." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:61 +msgid "To activate sharding, click the small icon to the right of the \"Allocate\" button. This then presents a number of options for how the draw is divide up into distinct sets. If you want to ensure that each person opens a completely distinct set of the draw, you will need to coordinate the options that each user selects here. They will need to set the **same** options for *Shard Mix*, *Shard Split* and *Shard Sort* but select a **different** *Open* option (i.e. opt-in to viewing a different shard from the other users). The ability to exit a sharded view is available in the same dialogue." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:64 +msgid "In-Place Highlights" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:66 +msgid "Adjudicators and teams may have borders of varying colors. These borders indicate that there is a clash — soft or hard — within a debate and highlights the teams/adjudicators that have triggered this. There is a key for these colors available at the top of the page — e.g. orange means *institutional conflict* while blue means *this adjudicator has seen this adjudicator/team before*." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:70 +msgid "In general, you want to be on the lookout for red borders ('hard conflicts') and for teams with orange borders (institutional conflicts). Blue borders on teams/adjudicators and orange borders between adjudicators are usually of lesser concern." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:72 +msgid "There are two 'special' types of highlight — a gray background in the chair position (no chair) or in the panellist position (the panel is not an odd-size). Adjudicators may also have a black background if they have not been marked as available." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:75 +msgid "Hover Highlights" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:77 +msgid "When you hover over an adjudicator or team, they will take on a purple background and other adjudicators or teams may suddenly have different colored backgrounds. These indicate the conflicts that this team/adjudicator has with those other teams/adjudicators. By showing this information you can avoid swapping that adjudicator into a new debate which they have a conflict with." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:81 +msgid "When you hover over an adjudicator or team the top-most area of the screen will show additional information about them, such as all of their previous institutions, their conflicts, their break category, their team members, their region, and who they saw in the last few rounds." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:84 +msgid "Toggle Highlights" +msgstr "" + +#: ../../features/adjudicator-allocation.rst:86 +msgid "In the top-right of the interface are a number of toggles that changes the color of adjudicators and teams to more easily check specific types of information. For example, selecting the gender toggle will color-code teams and adjudicators with the gender that has been recorded in Tabbycat. Note that when a toggle is active, the color key will update to show the meaning of these new colors." +msgstr "" + +#: ../../features/adjudicator-allocation.rst:90 +msgid "When finalising an adjudication you may want to ensure you have turned off any toggle highlights — often they make it more difficult to see the border colors that indicate conflicts." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/features/adjudicator-feedback.po b/docs/locale/vi/LC_MESSAGES/features/adjudicator-feedback.po new file mode 100644 index 00000000000..905df347ed6 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/features/adjudicator-feedback.po @@ -0,0 +1,258 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-21 18:31\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/adjudicator-feedback.po\n" +"X-Crowdin-File-ID: 1273\n" +"Language: vi_VN\n" + +#: ../../features/adjudicator-feedback.rst:5 +msgid "Adjudicator Feedback" +msgstr "Phản hồi của giám khảo" + +#: ../../features/adjudicator-feedback.rst:7 +msgid "You can set the questions that are used on adjudicator feedback forms. The only field that is permanently there is the ``score`` field, which is an overall score assessing the adjudicator. All other questions (including a generic comments section) must be defined if you want them to be on the form." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:9 +msgid "Currently, there are two methods of setting questions:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:11 +msgid "Through the :ref:`edit database area `. Go to **Setup** > **Edit Database**, then click **Change** next to *Adjudicator feedback questions*. You can add questions here." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:14 +msgid "Using the :ref:`importtournament command `." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:16 +msgid "Most of what you need to know is explained in help text in the edit database area. (Even if you're using ``importtournament``, you might find the field descriptions in the edit database area helpful.) Some more details are here." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:20 +msgid "Answer types and options" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:23 +msgid "Type" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:23 +msgid "Relevant options" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:23 +msgid "Appearance" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:25 +msgid "**checkbox**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:25 +#: ../../features/adjudicator-feedback.rst:27 +#: ../../features/adjudicator-feedback.rst:35 +#: ../../features/adjudicator-feedback.rst:37 +msgid "\\-" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:27 +msgid "**yes/no (dropdown)**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:29 +msgid "**integer (textbox)**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:29 +#: ../../features/adjudicator-feedback.rst:31 +#: ../../features/adjudicator-feedback.rst:33 +msgid "min_value, max_value" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:31 +msgid "**integer scale**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:33 +msgid "**float**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:35 +msgid "**text**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:37 +msgid "**long text**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:39 +msgid "**select one**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:39 +#: ../../features/adjudicator-feedback.rst:41 +msgid "choices" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:41 +msgid "**select multiple**" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:44 +msgid "Options:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:46 +msgid "**min_value** and **max_value** specify the minimum and maximum allowable values in the field. Mandatory for \"integer scale\" types and optional for \"integer (textbox)\" and \"float\" types." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:47 +msgid "**choices** is used with \"select one\" and \"select multiple\" types, and is a ``//``-delimited list of possible answers, *e.g.* ``biased//clear//concise//rambly//attentive//inattentive``" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:48 +msgid "**required** specifies whether users must fill out the field before clicking \"submit\". This requirement is only enforced on public submission forms. It is not enforced on forms entered by tab room assistants." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:50 +msgid "The exception to this is the \"checkbox\" type. For checkboxes, \"required\" means that the user cannot submit the form unless the box is checked. Think of it like an \"I agree to the terms\" checkbox. This isn't a deliberate design decision—it's just a quirk of how checkboxes work on web forms." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:53 +msgid "Want another answer type?" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:55 +msgid "We don't really intend to add any further complexity to the built-in feedback system. If the above answer types don't cover your needs, we suggest using a third-party feedback system. You might be able to adapt `SurveyMonkey `_, `Google Forms `_ or `Qualtrics `_ to your needs." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:60 +msgid "We may be persuaded to make an exception if the new question type you have in mind is easy to add: that is, if it is straightforward to implement using standard web page elements and fits into the existing questionnaire framework (see :ref:`feedback-questionnaires` below). If you think there is such a case, please contact us using the contact details in the :ref:`authors` section." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:69 +msgid "Different questionnaires" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:71 +msgid "Tabbycat allows you to specify two questionnaires: one for feedback submitted by teams, and one for feedback submitted by adjudicators. You must specify in each question whether to include the question in each questionnaire." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:75 +msgid "**from_team**, if checked, includes the question in feedback submitted by teams" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:77 +msgid "**from_adj**, if checked, includes the question in feedback submitted by adjudicators" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:81 +msgid "Who gives feedback on whom?" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:82 +msgid "Tabbycat allows for three choices for which adjudicators give feedback on which other adjudicators:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:85 +msgid "Chairs give feedback on panellists and trainees" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:86 +msgid "Chairs give feedback on panellists and trainees, and panellists give feedback on chairs" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:88 +msgid "All adjudicators, including trainees, give feedback on all other adjudicators they have adjudicated with" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:91 +msgid "You can set this in the **feedback paths** option under *Setup* > *Configuration* > *Feedback*. Your choice affects each of the following:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:94 +msgid "The options presented to adjudicators in the online feedback form" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:95 +msgid "The printable feedback forms" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:96 +msgid "The submissions expected when calculating feedback progress and highlighting missing feedback" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:99 +msgid "The feedback paths option only affects feedback from adjudicators. Teams are always assumed to give feedback on the orallist, and they are encouraged to do so through hints on the online and printable feedback forms, but there is nothing technically preventing them from submitting feedback from any adjudicator on their panel." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:105 +msgid "Advanced users" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:108 +msgid "If you need a different setting, you need to edit the source code. Specifically, you should edit the function ``expected_feedback_targets`` in tabbycat/adjfeedback/utils.py." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:112 +msgid "Unless we can be convinced that they are very common, we don't intend to add any further choices to the feedback paths option. If your needs are specific enough that you need to differ from the available settings, they are probably also beyond what is sensible for a built-in feedback system, and we recommend using a third-party feedback system instead." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:119 +msgid "How is an adjudicator's score determined?" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:121 +msgid "For the purpose of the automated allocation, an adjudicator's overall score is a function of their base score, the current round's feedback weight, and their average feedback score. This number is calculated according to the following formula:" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:126 +msgid "\\textrm{score} = (1-w)\\times\\textrm{base score} + w\\times\\textrm{average feedback score}" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:130 +msgid "where :math:`w` is the feedback weight for the round. Note that because the feedback score is averaged across all pieces of feedback (rather than on a per-round total) rounds in which a person receives feedback from many sources (say from all teams and all panellists) could impact their average score much more than a round in which they only receive feedback from one or two sources." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:132 +msgid "Under this formula, each round's feedback weight can be used to determine the relative influence of the base score vs feedback in determining the overall score. As an example, say that an adjudicator received 5.0 as their base score, but their average feedback rating has thus far been 2.0. If the current rounds' feedback weight is set to 0.75, then their overall score would be 2.75. If the current round's feedback weight is set to 0.5 their score would be 3.5. If the weight was 0, their score will always be their base score; if the weight was 1 it will always be their average feedback value." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:141 +msgid "To change the weight of a round you will need to go to the Edit Database area, open the round in question, and change its *Feedback weight* value. It is common to set rounds with a low feedback weight value early on in the tournament (when feedback is scant) and to increase the feedback weight as the tournament progresses." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:143 +msgid "A participant's base score can, in conjunction with feedback weight, also be used as a manual override for an adjudicator's overall ranking. At several tournaments, adjudication cores have set every round's feedback weight to 0, and manually adjusted an adjudicator's base score in response to feedback they have received and reviewed. In this way complete control over every adjudicator's overall score can be exerted." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:145 +msgid "If feedback from trainee adjudicators is enabled, any scores that they submit in their feedback are not counted towards that adjudicator's overall score." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:148 +msgid "Ignoring/Discarding feedback" +msgstr "" + +#: ../../features/adjudicator-feedback.rst:150 +msgid "There are some cases where feedback should be discarded or ignored, but there are some differences between the two. Discarded feedback is mostly due to having another piece of feedback that supersedes the discarded ones. Ignored feedback is different as it still counts the affected feedback as submitted, just inconsequential, ignored in the adjudicator's score calculation." +msgstr "" + +#: ../../features/adjudicator-feedback.rst:152 +msgid "Feedback can be marked as discarded in the database view, under the ``confirmed`` field. It can also be marked as ignored in the same view. Controls to reverse these designations are also available there. To mark feedback as ignored, an option is available in the administrator's and assistant's feedback adding form, as well in the form of a toggle link at the bottom of each card." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/features/backups.po b/docs/locale/vi/LC_MESSAGES/features/backups.po new file mode 100644 index 00000000000..07fb4ec576f --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/features/backups.po @@ -0,0 +1,120 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/backups.po\n" +"X-Crowdin-File-ID: 1275\n" +"Language: vi_VN\n" + +#: ../../features/backups.rst:5 +msgid "Backups" +msgstr "" + +#: ../../features/backups.rst:7 +msgid "Tabbycat doesn't provide an in-built backup system; instead you should create copies of your database directly. Heroku provides a very good backup utility for all sites hosted on Heroku which makes this easy, and for Heroku-based Tabbycat sites, we strongly recommend it." +msgstr "" + +#: ../../features/backups.rst:12 +msgid "You should **always** back up the database before deleting *any* data while in the Edit Database area, because deleting data cannot be undone. It is also a good idea to back up the database before doing anything in the Edit Database area, unless you're very familiar and confident with editing the Tabbycat database directly." +msgstr "" + +#: ../../features/backups.rst:18 +msgid "You may, as a matter of standard practice at large tournaments, wish to back up the database twice per round: Once just after you've generated the draw and allocated adjudicators, and once just after you've finished entering results." +msgstr "" + +#: ../../features/backups.rst:22 +msgid "If you're using an online version of Tabbycat, it's a good idea to download the backups. While it's extremely rare to lose internet access or have an outage in a critical web service (*i.e.*, Heroku), having a local copy of your backups allows you to :ref:`restore your tab to a local installation ` if this ever happens." +msgstr "" + +#: ../../features/backups.rst:29 +msgid "Installations on Heroku" +msgstr "" + +#: ../../features/backups.rst:31 +msgid "Heroku provides a utility to easily back up and restore the entire site database." +msgstr "" + +#: ../../features/backups.rst:35 +msgid "If you don't have the Heroku CLI" +msgstr "" + +#: ../../features/backups.rst:36 +msgid "You can capture backups from the Heroku Dashboard:" +msgstr "" + +#: ../../features/backups.rst:38 +msgid "Go to the `Heroku Dashboard `_ and click on your app." +msgstr "" + +#: ../../features/backups.rst:40 +msgid "Under *Installed add-ons*, go to **Heroku Postgres**." +msgstr "" + +#: ../../features/backups.rst:41 +msgid "Scroll down, and click on the **Capture Backup** button." +msgstr "" + +#: ../../features/backups.rst:42 +msgid "Once the capture has finished, a **Download** button will be available." +msgstr "" + +#: ../../features/backups.rst:44 +msgid "You can't restore a backup without the Heroku Command Line Interface (CLI), so if you end up needing your backup, you'll need to install the `Heroku CLI `_, and then follow the instructions below." +msgstr "" + +#: ../../features/backups.rst:50 +msgid "If you have the Heroku CLI" +msgstr "" + +#: ../../features/backups.rst:52 +msgid "The best guide to backing up databases is the `Heroku Dev Center's PGBackups guide `_." +msgstr "" + +#: ../../features/backups.rst:55 +msgid "To capture a backup::" +msgstr "" + +#: ../../features/backups.rst:59 +msgid "To download the most recently captured backup::" +msgstr "" + +#: ../../features/backups.rst:63 +msgid "To restore a backup::" +msgstr "" + +#: ../../features/backups.rst:67 +msgid "If you have multiple Tabbycat sites, you'll need to specify which one by adding ``--app mytournamentname`` to the end of the command." +msgstr "" + +#: ../../features/backups.rst:71 +msgid "Local installations" +msgstr "" + +#: ../../features/backups.rst:73 +msgid "There are lots of ways to back up local PostgreSQL databases, but we'd suggest using the `pg_dump `_ and `pg_restore `_ commands." +msgstr "" + +#: ../../features/backups.rst:83 +msgid "Restoring a Heroku backup to a local installation" +msgstr "" + +#: ../../features/backups.rst:85 +msgid "As detailed in the `Heroku Dev Center `_, you can restore a downloaded Heroku backup to a local installation. This might be useful if, say, your internet connection breaks irrecoverably in the middle of a tournament and you need to run offline. Of course, for this to work, you need to have downloaded your backup before your internet connection broke---a good reason to download a copy of your backups as soon as you make them." +msgstr "" + +#: ../../features/backups.rst:92 +msgid "Assuming your download is called ``latest.dump`` (this is the default name), your PostgreSQL username is ``tabbycat``, and you wish to call your local database ``fromheroku`` (if not, replace arguments as appropriate)::" +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/features/breaks.po b/docs/locale/vi/LC_MESSAGES/features/breaks.po new file mode 100644 index 00000000000..c0b390c7b3f --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/features/breaks.po @@ -0,0 +1,212 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:41\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/breaks.po\n" +"X-Crowdin-File-ID: 1277\n" +"Language: vi_VN\n" + +#: ../../features/breaks.rst:5 +msgid "Breaks and Break Rounds" +msgstr "" + +#: ../../features/breaks.rst:7 +msgid "In Tabbycat, elimination rounds (sometimes called *outrounds* or the *final series*) are called \"break rounds\", and the qualification of teams to compete in the elimination phase of a tournament is called the \"break\"." +msgstr "" + +#: ../../features/breaks.rst:12 +msgid "About break categories" +msgstr "" + +#: ../../features/breaks.rst:14 +msgid "Tabbycat supports multiple and arbitrarily-named break categories. Most tournaments will have just one category, typically called \"Open\", leading to the grand final. Some tournaments also have restricted-eligibility break categories, for example, for novice teams or teams for whom English is a second language." +msgstr "" + +#: ../../features/breaks.rst:19 +msgid "Having multiple break categories is intended for tournaments where multiple *parallel* elimination phases derive from the *same* preliminary rounds (inrounds). It's not for parallel but distinct competitions---for those, you should create distinct tournaments." +msgstr "" + +#: ../../features/breaks.rst:27 +msgid "Break qualification rules" +msgstr "" + +#: ../../features/breaks.rst:29 +msgid "Tabbycat supports several break qualification rules, and each break category must be configured to use one of them. Most tournaments will use \"Standard\", which is the default." +msgstr "" + +#: ../../features/breaks.rst:38 +msgid "Rule name (string to use in ``importtournament`` CSV files)" +msgstr "" + +#: ../../features/breaks.rst:39 +msgid "Descrption" +msgstr "" + +#: ../../features/breaks.rst:41 +msgid "Standard (``standard``)" +msgstr "" + +#: ../../features/breaks.rst:42 +msgid "The top *n* teams break. This is the default, and most tournaments use this rule." +msgstr "" + +#: ../../features/breaks.rst:45 +msgid "AIDA 1996 (``aida-1996``)" +msgstr "" + +#: ../../features/breaks.rst:46 +msgid "The top *n* teams that are also in the top three teams from their institution break." +msgstr "" + +#: ../../features/breaks.rst:49 +msgid "AIDA 2016 (Australs) (``aida-2016-australs``)" +msgstr "" + +#: ../../features/breaks.rst:50 +msgid "The top *n* teams that fulfil either of these criteria break:" +msgstr "" + +#: ../../features/breaks.rst:53 +msgid "They are in the top *n* teams overall, and in the top three teams from their institution." +msgstr "" + +#: ../../features/breaks.rst:55 +msgid "They have at least as many wins as the *n*\\ th-ranked team, and they are the top team from their institution." +msgstr "" + +#: ../../features/breaks.rst:58 +msgid "If fewer than *n* teams fulfil either criterion, then the best teams not fulfilling the criteria are added to make *n* teams." +msgstr "" + +#: ../../features/breaks.rst:62 +msgid "AIDA 2016 (Easters) (``aida-2016-easters``)" +msgstr "" + +#: ../../features/breaks.rst:63 +msgid "As for AIDA 2016 (Australs), except that if fewer than *n* teams fulfil either criterion, then only the best teams who are in the top three teams from their institution are added to make *n* teams." +msgstr "" + +#: ../../features/breaks.rst:68 +msgid "The break generators are somewhat more complex than described in the above table: among other things, they also handle cases where there is a tie for the last place in the break, and for those break categories marked \"general\", they will show where ineligible teams would have broken, had they been eligible." +msgstr "" + +#: ../../features/breaks.rst:75 +msgid "Setting up break categories and rounds" +msgstr "" + +#: ../../features/breaks.rst:77 +msgid "For each break category in your tournament, you need to do two things:" +msgstr "" + +#: ../../features/breaks.rst:79 +msgid "Create (and name) a break category" +msgstr "" + +#: ../../features/breaks.rst:80 +msgid "Create break rounds for the category" +msgstr "" + +#: ../../features/breaks.rst:81 +msgid "Set the eligibility of teams to compete in the category" +msgstr "" + +#: ../../features/breaks.rst:83 +msgid "If you only have one break category (open) and you create your tournament using the \"Create New Tournament\" page, simply enter the number of teams in the break (*e.g.*, 8 if you're breaking to quarterfinals). Tabbycat will create the break category and break rounds for you. For any further break categories, you'll need to go to the **Breaks** item in the left-hand menu for a particular tournament and then click **Break Categories**. Fill out the forms for the number of new break categories and save. Rounds will be created automatically. You'll still need to set the eligibility of teams though, as in (3) below." +msgstr "" + +#: ../../features/breaks.rst:92 +msgid "If you create your tournament using the `importtournament` command or in **Edit Database**, you'll need to do all three steps above yourself. You may also want to edit the break rounds (2) to change their names." +msgstr "" + +#: ../../features/breaks.rst:97 +msgid "1. Creating break categories" +msgstr "" + +#: ../../features/breaks.rst:99 +msgid "If using the `importtournament` command, there is an example file, *break_categories.csv*, that you can copy and adjust. If using **Edit Database**, add categories under **Break Qualification > Break categories**." +msgstr "" + +#: ../../features/breaks.rst:103 +msgid "Most of the fields are self-explanatory or described on the Edit Database form, except for one: \"rule\", which sets the break qualification rule. Permissible values are described in :ref:`breakqual-rules` above. If using `importtournament`, be sure to use the correct string (in brackets in the table). The rule defaults to \"Standard\" (``standard``)." +msgstr "" + +#: ../../features/breaks.rst:109 +msgid "The \"institution cap\" field was removed in Tabbycat 1.0. All Australs break qualification rules are now hard-coded to a cap of three teams per institution." +msgstr "" + +#: ../../features/breaks.rst:114 +msgid "2. Creating break rounds" +msgstr "" + +#: ../../features/breaks.rst:116 +msgid "You should create a round for every break round you intend to hold, including it in *rounds.csv* if using `importtournament`, or adding them under **Tournaments > Rounds** if using **Edit Database**. Be careful to set the following fields correctly:" +msgstr "" + +#: ../../features/breaks.rst:121 +msgid "*Break category* must be set to the relevant break category." +msgstr "" + +#: ../../features/breaks.rst:122 +msgid "*Stage* and *draw type* must both be set to \"Elimination\"." +msgstr "" + +#: ../../features/breaks.rst:125 +msgid "3. Setting break eligibility" +msgstr "" + +#: ../../features/breaks.rst:127 +msgid "Once a break category has been created it will not have any teams eligible for it, even if it was marked as \"Is general\". To edit the eligibility of teams for any break round go to the **Breaks** item in the left-hand menu for a particular tournament and then click **Team Eligiblity**." +msgstr "" + +#: ../../features/breaks.rst:132 +msgid "Here you can select \"all\" or \"none\" to toggle all team eligiblities or edit them using the tick boxes. Once you **save** it should return you to the main break page which will display the number of teams marked eligible." +msgstr "" + +#: ../../features/breaks.rst:136 +msgid "Adjudicators can be marked as \"breaking\" on the **Feedback** page; clicking **Adjudicators** on the breaks page will take you straight there." +msgstr "" + +#: ../../features/breaks.rst:140 +msgid "Generating the break" +msgstr "" + +#: ../../features/breaks.rst:142 +msgid "Unlike team or speaker standings, each category's break (and the break ranks of teams) are not determined automatically and updated continuously. Instead each can be generated (and regenerated) as desired." +msgstr "" + +#: ../../features/breaks.rst:146 +msgid "To do so go to the **Breaks** item in the left-hand menu and then click the white button that corresponds to the break category you'd like to determine the rankings for. When prompted, select **Generate the break for all categories** to display the list of breaking teams." +msgstr "" + +#: ../../features/breaks.rst:151 +msgid "From this page you can update the breaking teams list for this break category (or all categories) as well as view and edit 'remarks' that account for cases in which a team may not break (such as being capped or losing a coin toss)." +msgstr "" + +#: ../../features/breaks.rst:155 +msgid "Please double-check the generated break before announcing or releasing it. Although the break generation code is designed to handle edge cases, we don't test the code for such cases." +msgstr "" + +#: ../../features/breaks.rst:160 +msgid "Creating draws for break rounds" +msgstr "" + +#: ../../features/breaks.rst:162 +msgid "Creating a draw for a break round proceeds as normal, except that the team availability process is skipped. Instead, when you visit the availability page for that round it will have automatically determined which teams should be debating based upon the determined break for that category. Once a draw has been generated it will then use the relevant break ranks to create the matchups (ie 1st-breaking vs 16th-breaking, 2nd vs 15th, *etc.*). Subsequent break rounds will then also automatically determine matchups based on the previous round's results and room ranks." +msgstr "" + +#: ../../features/breaks.rst:171 +msgid "If the \"break size\" of a break category is not a power of 2, it will treat the first break round as a partial-elimination draw and only create a draw for the teams not skipping the partial-elimination round. Subsequent break rounds will then process as described above." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/features/check-ins.po b/docs/locale/vi/LC_MESSAGES/features/check-ins.po new file mode 100644 index 00000000000..397e1abaaa9 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/features/check-ins.po @@ -0,0 +1,136 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:41\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/check-ins.po\n" +"X-Crowdin-File-ID: 1279\n" +"Language: vi_VN\n" + +#: ../../features/check-ins.rst:5 +msgid "Check-Ins" +msgstr "" + +#: ../../features/check-ins.rst:7 +msgid "A 'Check-in' is a record of a speaker, adjudicator, venue, or ballot's status at a particular point in time. Typically these are used at large tournaments to reliably track who is or is not present for the first round of each day." +msgstr "" + +#: ../../features/check-ins.rst:9 +msgid "Check-ins serve a similar purpose to the :ref:`availability ` system. However availabilities are tied to a particular round rather than to a particular time — they are generally used to record instances where you know ahead of time whether a person should or should not be included in a draw. In contrast, check-ins are useful for when you *don't* know ahead of time whether a person will be able to be put into the draw and so want to be able to confirm their presence with a high degree of confidence. That said the two systems interact — the standard availability pages allow you to easily set all adjudicators or teams who have checked-in as available for a given round." +msgstr "" + +#: ../../features/check-ins.rst:12 +msgid "Check-In Identifiers" +msgstr "" + +#: ../../features/check-ins.rst:14 +msgid "Check-ins are associated with a 'identifier' — a number that is unique to each speaker and adjudicator. To generate these numbers go to the *Identifiers* section under the Check-Ins menu. From here you generate identifiers for Speakers, Adjudicators, and Venues as needed. Note also that Identifiers can be manually added or edited in the *Edit Database* area if necessary." +msgstr "" + +#: ../../features/check-ins.rst:18 +msgid "Once this number has been generated it can be transformed into a barcode so that it can be easily included on tournament badges or otherwise printed and disbursed. On the same *Identifiers* page you can use the *View barcodes* option to open up a page that lists all the barcodes for the speakers, adjudicators, or venues." +msgstr "" + +#: ../../features/check-ins.rst:22 +msgid "The identifiers for ballots are automatically generated when printing ballots." +msgstr "" + +#: ../../features/check-ins.rst:25 +msgid "Recording Check-Ins" +msgstr "" + +#: ../../features/check-ins.rst:27 +msgid "On the *Scanning* section of Check-ins you can record a particular check-in. This can be done in a few different ways:" +msgstr "" + +#: ../../features/check-ins.rst:29 +msgid "You can type in the Identifier number into the box. Once five numbers have been identified it will automatically issue the check-in and clear the input field for the next number." +msgstr "" + +#: ../../features/check-ins.rst:31 +msgid "If you have purchased barcode scanners and configured them as USB keyboards they should then be compatible with this page: upon page load the cursor should be positioned in the input field, and any scanned barcodes should populate it with the specified number, issue the check-in, and then clear the box for the next scan." +msgstr "" + +#: ../../features/check-ins.rst:33 +msgid "Barcode scanners are probably cheaper than you think. A perfectly serviceable model should be around $20 USD or less although a cursory Google search might at first turn up models that are many times that amount. If you are a curious tab director, or are involved in a tournament with a little spare money, having just one or two around for critical tasks can be highly valuable." +msgstr "" + +#: ../../features/check-ins.rst:35 +msgid "If your device has a (web)cam you can use the Scan Using Camera button. Any barcodes put in front of the camera's video stream will be scanned into the form. A sound will play when a barcode has been identified — so be aware that turning sound on or using headphones can help identify when a scan has been made." +msgstr "" + +#: ../../features/check-ins.rst:39 +msgid "Camera scanning works on most modern browsers although it will only work with Safari 11 or higher (iOS 11+ and macOS 10.13+). Camera scanning may also not work when using a local-installation of Tabbycat in all browsers, *except* Firefox where it seems to. Depending on the quality of your camera barcodes that are less than 4cm wide may not be recognised — ideally barcodes should be at least 5cm if using this method as your main way of checking-in things." +msgstr "" + +#: ../../features/check-ins.rst:41 +msgid "The Check-in status page (described below) allows assistants and administrators to manually check-in particular people or entire institutions without needing to know their identifiers." +msgstr "" + +#: ../../features/check-ins.rst:44 +msgid "The Check-In 'Window'" +msgstr "" + +#: ../../features/check-ins.rst:46 +msgid "Because Check-In events are not explicitly linked to rounds there is essentially a 'window' or time period in which a check-in is still considered valid. The time of this 'window' in hours can be set in *Setup* > *Configuration* > *Data Entry*." +msgstr "" + +#: ../../features/check-ins.rst:48 +msgid "At tournaments the run check-ins during the start of each day the check-in 'window' (i.e. the time before check-ins expire) you can leave this window setting at the default time (12 hours) which should give enough time to distinguish between the first check-ins of that day as compared to the last check-ins of the previous day. At tournaments where you want to run a check-in process at the start of every round you may want to set the time to around 2 hours or something much shorter." +msgstr "" + +#: ../../features/check-ins.rst:51 +msgid "Viewing Check-Ins" +msgstr "" + +#: ../../features/check-ins.rst:53 +msgid "On the *People Statuses* section of Check-ins you can view who has or has not been checked-in. This page will live-update with the latest check-ins so you should be able to leave it open to monitor income attendances." +msgstr "" + +#: ../../features/check-ins.rst:57 +msgid "The blue \"tick\" boxes allow you to manually check-in people and/or entire institutions (for *People*) or venues and/or venue groups (for *Venues*) , without the need to scan their identifiers. This style of check-in is designed for use an auditorium roll-call type situation where you might be running through a list of people to the room or identifying absences on a per-institution basis." +msgstr "" + +#: ../../features/check-ins.rst:59 +msgid "A public version of this check-in status page can be enabled under *Setup* > *Configuration* > *Public Features* which can be useful for allowing people to self-police check-ins and/or validate their check-in worked." +msgstr "" + +#: ../../features/check-ins.rst:62 +msgid "Check-Ins for Ballots" +msgstr "" + +#: ../../features/check-ins.rst:64 +msgid "Ballots can be checked-in to quickly validate which ballots are physically present in the tab room. This can help more quickly identify ballots that are missing. Which ballots have or have not been checked-in will show up on the Results page. Ballots can be scanned using the standard 'Scan Identifiers' page." +msgstr "" + +#: ../../features/check-ins.rst:66 +msgid "Barcodes are automatically assigned and included to ballots when they are printed. Barcodes have no check-in window — any relevant check-in event counts regardless of how long ago it was." +msgstr "" + +#: ../../features/check-ins.rst:69 +msgid "Check-Ins for Venues" +msgstr "" + +#: ../../features/check-ins.rst:71 +msgid "Venues can be checked-in, but what a 'venue check-in' means is a bit more flexible. It might be used to validate which rooms are debate-ready at the start of a day (i.e. unlocked; has a desk) or it could be used during the rounds to record which rooms have returned their ballots." +msgstr "" + +#: ../../features/check-ins.rst:73 +msgid "Venues have a separate check-in window setting to that of people." +msgstr "" + +#: ../../features/check-ins.rst:75 +msgid "Venues have their own Status page (like people) and can be checked-in there manually. Like speakers and adjudicators their barcodes can also be printed off." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/features/data-entry.po b/docs/locale/vi/LC_MESSAGES/features/data-entry.po new file mode 100644 index 00000000000..1e528971535 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/features/data-entry.po @@ -0,0 +1,168 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:41\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-entry.po\n" +"X-Crowdin-File-ID: 1281\n" +"Language: vi_VN\n" + +#: ../../features/data-entry.rst:5 +msgid "Entering Ballots and Feedback" +msgstr "" + +#: ../../features/data-entry.rst:8 +msgid "Ballot check-in" +msgstr "" + +#: ../../features/data-entry.rst:10 +msgid "For tournaments that require it, there is a \"ballot check-in\" page that can be used to record the arrival of ballots to the tab room. When there's a missing ballot, it can help establish whether the ballot never made it to the tab room, or whether it's probably floating around in the room forgotten. Also, it can help enforce early checks that panels return the correct number of ballots to the room." +msgstr "" + +#: ../../features/data-entry.rst:12 +msgid "To get to the ballot check-in, click the relevant round in the menu of the admin area, and then click \"Results\" and then \"Ballot Check-In\". This requires superuser privileges." +msgstr "" + +#: ../../features/data-entry.rst:14 +msgid "There's no adverse effect from not using the ballot check-in. Data enterers will still be able to enter and confirmed ballots, even if not checked in." +msgstr "" + +#: ../../features/data-entry.rst:18 +msgid "Since the ballot check-in tends to require a dedicated computer or two, it can be worth creating a separate superuser account for ballot check-in, so that it doesn't appear on the action logs as being by a particular person." +msgstr "" + +#: ../../features/data-entry.rst:19 +msgid "Don't forget to provision a computer or two for this if you're planning to use it." +msgstr "" + +#: ../../features/data-entry.rst:20 +msgid "Ballot check-ins can be a bottleneck, so you might decide they're not worth using. Alternatively, you might have multiple computers for this purpose, or you might dedicate a tab room helper to driving the process (since this is probably faster than runners doing the typing in turn)." +msgstr "" + +#: ../../features/data-entry.rst:23 +msgid "Ballot entry" +msgstr "" + +#: ../../features/data-entry.rst:27 +msgid "Most tab rooms run some sort of check system to ensure data is entered accurately. In Tabbycat, this is built into the system, which also helps speed it up." +msgstr "" + +#: ../../features/data-entry.rst:29 +msgid "As a general principle, Tabbycat requires all ballots to be looked at by two people. The first person enters the data from the ballot, and the second person checks it. The second person isn't allowed to modify the data—they either confirm it or reject it, and if they reject it, then the whole process starts again. This is by design: to be confirmed, the *same* data must have been seen by at least two people." +msgstr "" + +#: ../../features/data-entry.rst:31 +msgid "The administrator area does **not** work like this. It's designed to be flexible, so allows you to edit, confirm or unconfirm any ballot at any time. For this reason, you should use the **assistant** area to enter ballots, even if you have a superuser account." +msgstr "" + +#: ../../features/data-entry.rst:35 +msgid "Don't forget to check the totals against the ballot—they're a useful integrity check too." +msgstr "" + +#: ../../features/data-entry.rst:36 +msgid "Don't forget to check the winner against the ballot! If the adjudicator gets it wrong, it's worth asking to clarify." +msgstr "" + +#: ../../features/data-entry.rst:37 +msgid "It can be helpful to think about the room layout to maximize efficiency." +msgstr "" + +#: ../../features/data-entry.rst:38 +msgid "Some tab rooms like to assign some to data entry and some to verification. This isn't really necessary, since Tabbycat doesn't let the same person enter and verify the same ballot. (This is one of many reasons why every person should have their own account.)" +msgstr "" + +#: ../../features/data-entry.rst:39 +msgid "Emails can be configured to be sent to adjudicators as a receipt of their ballot once confirmed." +msgstr "" + +#: ../../features/data-entry.rst:42 +msgid "Duplicate/Swing Speeches" +msgstr "" + +#: ../../features/data-entry.rst:46 +msgid "When entering the ballots there is a toggle label *'Iron' speeches*. When set to \"yes\" this allows you to have the same speaker deliver multiple speeches provided their extra speeches are labelled on the form as 'duplicates'. Typically, most tournaments require that lesser 'iron man' speech is discarded from the tab, which would mean that you would mark the lower speaker of the two scores as the duplicate (note that this may require you to check each score's average across a panel)." +msgstr "" + +#: ../../features/data-entry.rst:48 +msgid "Speeches marked as duplicates are not included in the speaker tab. This means that they can also be used to exclude swing speakers from the tab as needed; even if they do not actually speak twice. To do so, change the name of the swing speaker to be that of an existing team member and ensure that that speech is marked as a duplicate." +msgstr "" + +#: ../../features/data-entry.rst:50 +msgid "There is also an option under **Standings** in the **Configuration** section that specifies the number of debates a speaker can miss before you will not show on the tab. By default there is no limit, but if need be this can be set to hide swing speakers from the final speaker tab." +msgstr "" + +#: ../../features/data-entry.rst:53 +msgid "Feedback entry" +msgstr "" + +#: ../../features/data-entry.rst:57 +msgid "Feedback doesn't have the same verification process as ballots. Feedback that is entered by the tab room is assumed to be confirmed. If feedback is entered multiple times, all copies are retained but only the last one \"counts\" (is considered confirmed)." +msgstr "" + +#: ../../features/data-entry.rst:60 +msgid "Online entry" +msgstr "" + +#: ../../features/data-entry.rst:62 +msgid "There are two methods of allowing ballots and feedback to be submitted online. Both are set in the **Data Entry** page of each tournament's **Configuration** section and can be set independently; both in whether each can be submitted online at all and in which method of online submission are available." +msgstr "" + +#: ../../features/data-entry.rst:68 +msgid "Private URLs" +msgstr "" + +#: ../../features/data-entry.rst:70 +msgid "The first method of data entry is using 'private URLs'. When this setting is enabled you can create a special URL that is unique to a participant. This link contains a number of random characters and is not displayed publicly; it is in effect a secret that only that a specific participant should know. Presuming people do not share these links to others, this provides a means to (relatively) securely identify who is submitting what information. Because Tabbycat knows which participant has which URL it will only allow them to submit feedback/ballots for debates that they were speakers/adjudicators in." +msgstr "" + +#: ../../features/data-entry.rst:72 +msgid "Private URLs should provide more than adequate security for almost all tournaments' purposes, but they aren't foolproof. Anyone with access to the URL for a participant can submit feedback or ballots on their behalf, so it's important that participants not share their URLs. This also means participants need to be careful when submitting from devices they do not own, because the URL will be logged in that device's browser history." +msgstr "" + +#: ../../features/data-entry.rst:74 +msgid "These links must be generated within Tabbycat after the preference is enabled. To do so go to the **Feedback** section and then the **Private URLs** area. Once there you will be prompted to generate those URLs for all participants, which — once generated — will be presented in separate tables (one for teams; one for adjudicators)." +msgstr "" + +#: ../../features/data-entry.rst:78 +msgid "These URLs can then be distributed to each person in a number of ways. There are pages within Tabbycat for printing them out (one URL per page labelled by recipient) or emailing them out (providing participants have been assigned email addresses). In the past tournaments have also used data from this table to send out SMSs by bulk, or distributed them to institutional representatives to disburse." +msgstr "" + +#: ../../features/data-entry.rst:82 +msgid "You can assign email address to participants using the :ref:`importtournament command ` when importing your registration data, or by going to the *Edit Data* area and looking up each Speaker/Adjudicator." +msgstr "" + +#: ../../features/data-entry.rst:83 +msgid "If, after generating the private URLs, you add additional Teams or Adjudicators you can go to the *Edit Database* area , look up each Speaker/Adjudicator, and type in a bunch of random characters as their *Url key* to assign them a private URL." +msgstr "" + +#: ../../features/data-entry.rst:84 +msgid "You can delete the current set of URLs by running this command in a shell on your server (replacing TOURNAMENT_SLUG with the appropriate value): ``python manage.py privateurls delete --tournament TOURNAMENT_SLUG``" +msgstr "" + +#: ../../features/data-entry.rst:89 +msgid "Public URLs" +msgstr "" + +#: ../../features/data-entry.rst:91 +msgid "The second method of data entry is using 'normal URLs'. This essentially means that any users visiting the public version of the site is able to submit a ballot or feedback (as specified by their respective settings). They do so by self-selecting which Team or Adjudicator they are then entering in a form as normal." +msgstr "" + +#: ../../features/data-entry.rst:93 +msgid "This is, rather obviously, not a particularly secure method of data entry — nothing is stopping anyone on the site from entering data as someone else. The data can be checked, verified, and edited as normal by admins however. As such, this method is only recommended for small tournaments where you can trust those present to enter accurate information (or where accuracy is not crucial)." +msgstr "" + +#: ../../features/data-entry.rst:95 +msgid "There is an additional setting to set a 'tournament password' that needs to be submitted to enable the form. It is imagined, that if enabled, this password would only be distributed to tournament participants. However this only helps (at best) prevent non-participants from entering information; the fundamental problem of not verifying who is submitting what information is still present." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/features/data-importers.po b/docs/locale/vi/LC_MESSAGES/features/data-importers.po new file mode 100644 index 00000000000..2e82d9773bf --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/features/data-importers.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:41\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/data-importers.po\n" +"X-Crowdin-File-ID: 1283\n" +"Language: vi_VN\n" + +#: ../../features/data-importers.rst:5 +msgid "Tournament Data Importers" +msgstr "" + +#: ../../features/data-importers.rst:7 +msgid "This page describes how to write your own tournament data importer. It is aimed at an audience that is familiar with programming in Python, and may be willing to get their head around the Django model if necessary." +msgstr "" + +#: ../../features/data-importers.rst:9 +msgid "The **tournament data importer** is the class that imports data from one or more files (usually CSV files) into the database. A base class ``BaseTournamentDataImporter`` is in `importer/base.py `_. An example of a data importer is in `importer/anorak.py `_." +msgstr "" + +#: ../../features/data-importers.rst:11 +msgid "Todo" +msgstr "" + +#: ../../features/data-importers.rst:11 +msgid "This page is incomplete. If you're finding this information insufficient, please contact Chuan-Zheng using the contact details in the :ref:`authors` section." +msgstr "" + +#: ../../features/data-importers.rst:14 +msgid "Why write your own?" +msgstr "" + +#: ../../features/data-importers.rst:16 +msgid "While Tabbycat has standard import formats, you might find that none of them fit the data that you need to import." +msgstr "" + +#: ../../features/data-importers.rst:18 +msgid "It's not possible to devise a single, universally-convenient import file format. Tabbycat supports way too many permutations of configurations for this to be workable. Instead, we provide the ones that have been useful before and are therefore likely to be useful again—but if your tournament has different needs, you might decide that it's easier to write an importer to conform to you, rather than conform to the importer." +msgstr "" + +#: ../../features/data-importers.rst:20 +msgid "A base importer class abstracts away most of the nitty-gritty of parsing files, allowing new importers to focus on their interpretation with as little code as possible." +msgstr "" + +#: ../../features/data-importers.rst:22 +msgid "To allow new importers to be written with as little code as possible, most of the work is abstracted to the base class. The flipside of this abstraction is that it induces a learning curve." +msgstr "" + +#: ../../features/data-importers.rst:25 +msgid "Basic workflow" +msgstr "" + +#: ../../features/data-importers.rst:27 +msgid "Choose a name. We name importers after items of clothing in alphabetical order (starting at 'Anorak')." +msgstr "" + +#: ../../features/data-importers.rst:28 +msgid "Write a subclass of ``BaseTournamentDataImporter``." +msgstr "" + +#: ../../features/data-importers.rst:29 +msgid "Write the front-end interface. This will probably be a `Django management command `_." +msgstr "" + +#: ../../features/data-importers.rst:32 +msgid "A basic example" +msgstr "" + +#: ../../features/data-importers.rst:34 +msgid "It's easiest to start with an example. Here's a basic importer with just one import method, which imports adjudicators." +msgstr "" + +#: ../../features/data-importers.rst:60 +msgid "Let's break this down. The method ``import_adjudicators()`` takes a single argument, a file object representing the CSV file. Most of the work is passed off to ``self._import()``. This helper method is defined in ``BaseTournamentDataImporter`` and is where most of the intelligence lies." +msgstr "" + +#: ../../features/data-importers.rst:65 +msgid "When called, ``self._import(f, model, interpreter)`` does the following:" +msgstr "" + +#: ../../features/data-importers.rst:67 +msgid "It reads the CSV file using a `csv.DictReader `_. A ``DictReader`` iterates through the CSV file, yielding a dict for each line, whose keys are given by the column header names in the first row of the file." +msgstr "" + +#: ../../features/data-importers.rst:72 +msgid "On each line:" +msgstr "" + +#: ../../features/data-importers.rst:74 +msgid "It passes the dict given by the ``DictReader`` to ``interpreter``. The interpreter modifies the dict (or creates a new one) to prepare it for the model constructor, and returns it." +msgstr "" + +#: ../../features/data-importers.rst:78 +msgid "The dict returned by ``interpreter`` is then passed as keyword arguments to the ``model`` constructor." +msgstr "" + +#: ../../features/data-importers.rst:81 +msgid "So in very simplified form, ``self._import(f, model, interpreter)`` does this:" +msgstr "" + +#: ../../features/data-importers.rst:92 +msgid "(There's a lot more to it than that, but that's the basic idea.)" +msgstr "" + +#: ../../features/data-importers.rst:94 +msgid "A consequence of relying on column headers to identify fields is that the header names in CSV files must match model field names exactly, unless they are deleted by the interpreter using the ``DELETE`` keyword (see below)." +msgstr "" + +#: ../../features/data-importers.rst:100 +msgid "Interpreters" +msgstr "" + +#: ../../features/data-importers.rst:101 +msgid "The main task of an importer, then, is to provide interpreters so that ``self._import`` knows how to interpret the data in a CSV file. An interpreter takes a dict and returns a dict. For example:" +msgstr "" + +#: ../../features/data-importers.rst:113 +msgid "This interpreter does the following:" +msgstr "" + +#: ../../features/data-importers.rst:115 +msgid "Replaces ``line['institution']`` with an Institution object, by looking up the original value by name." +msgstr "" + +#: ../../features/data-importers.rst:117 +msgid "Replaces ``line['gender']`` with a ``Person.GENDER_*`` constant. We'll come back to how this works later." +msgstr "" + +#: ../../features/data-importers.rst:119 +msgid "Adds a new ``line['tournament']`` entry to the dict, being the Tournament object represented by ``self.tournament``, the tournament that was passed to the importer's constructor." +msgstr "" + +#: ../../features/data-importers.rst:122 +msgid "Leaves all other entries in the dict unchanged." +msgstr "" + +#: ../../features/data-importers.rst:124 +msgid "This looks simple enough, but it's very robust. What if a cell in the CSV file is blank, or what if the file omits a column? (For example, some tournaments might not collect information about participant gender, so Tabbycat doesn't require it.) We could deal with these scenarios on a case-by-case basis, but that's cumbersome." +msgstr "" + +#: ../../features/data-importers.rst:130 +msgid "Instead, we provide a ``make_interpreter`` method that returns an interpreter method which, in turn, takes care of all these details. This way, all you have to do is provide the functions that transform fields. So the following is equivalent to the above, but better:" +msgstr "" + +#: ../../features/data-importers.rst:143 +msgid "Notice that we provided a callable in two of these keyword arguments, and a (non-callable) Tournament object to the third. ``make_interpreter`` is smart enough to tell the difference, and treat them differently. What it does with each field depends on (a) whether a value exists in the CSV file and (b) what transformation function was provided, as summarised in the following table:" +msgstr "" + +#: ../../features/data-importers.rst:150 +msgid "Value in CSV file" +msgstr "" + +#: ../../features/data-importers.rst:150 +msgid "Transformation" +msgstr "" + +#: ../../features/data-importers.rst:150 +msgid "Action" +msgstr "" + +#: ../../features/data-importers.rst:152 +msgid "provided and not callable" +msgstr "" + +#: ../../features/data-importers.rst:152 +msgid "populate model field with interpreter value" +msgstr "" + +#: ../../features/data-importers.rst:155 +msgid "does not exist or blank" +msgstr "" + +#: ../../features/data-importers.rst:155 +msgid "callable or not provided" +msgstr "" + +#: ../../features/data-importers.rst:155 +msgid "do not pass to model constructor" +msgstr "" + +#: ../../features/data-importers.rst:158 ../../features/data-importers.rst:161 +msgid "exists and not blank" +msgstr "" + +#: ../../features/data-importers.rst:158 +msgid "callable" +msgstr "" + +#: ../../features/data-importers.rst:158 +msgid "call interpreter on column value, pass result to model constructor" +msgstr "" + +#: ../../features/data-importers.rst:161 +msgid "not provided" +msgstr "" + +#: ../../features/data-importers.rst:161 +msgid "pass column value directly to model constructor" +msgstr "" + +#: ../../features/data-importers.rst:169 +msgid "If a transformation isn't an existing method, you might find `lambda functions `_ useful. For example: ``lambda x: Speaker.objects.get(name=x)``." +msgstr "" + +#: ../../features/data-importers.rst:173 +msgid "You shouldn't check for mandatory fields. If a mandatory field is omitted, the model constructor will throw an error, and ``self._import()`` will catch the error and pass a useful message on to the caller. On the other hand, if it's an optional field in the model, it should optional in the importer, too. Similarly, interpreters generally shouldn't specify defaults; these should be left to model definitions." +msgstr "" + +#: ../../features/data-importers.rst:180 +msgid "You don't need to include interpreter transformations for things like converting strings to integers, floats or booleans. Django converts strings to appropriate values when it instantiates models. So, for example, adding ``test_score=float`` to the above interpreter would be redundant." +msgstr "" + +#: ../../features/data-importers.rst:186 +msgid "More complicated interpreters" +msgstr "" + +#: ../../features/data-importers.rst:188 +msgid "If you have a column in the CSV file that shouldn't be passed to the model constructor, you can tell the interpreter to remove it by using the special ``DELETE`` argument:" +msgstr "" + +#: ../../features/data-importers.rst:199 +msgid "The ``make_interpreter`` can only deal with modifications where each field is modified separately of the others (or not at all). If you want to combine information from multiple fields, you need to write your interpreter the long way (perhaps calling a function returned by ``make_interpreter`` to do some of the work)." +msgstr "" + +#: ../../features/data-importers.rst:205 +msgid "On the other hand, if you don't need to do any transformations involving some sort of object or constant lookup, then you can just omit the ``interpreter`` argument of ``self._lookup()``, and it'll just leave the fields as-is." +msgstr "" + +#: ../../features/data-importers.rst:210 +msgid "Lookup functions" +msgstr "" + +#: ../../features/data-importers.rst:211 +msgid "In the above example, we used a function ``self.lookup_gender`` to convert from the text in the CSV file to a ``Person.GENDER_*`` constant. To make this easier, the importer provides a convenience function to define such lookup functions. Let's look at the relevant lines again:" +msgstr "" + +#: ../../features/data-importers.rst:224 +msgid "This should be a member of your subclass, in our case, ``ExampleTournamentDataImporter``. It generates a function that looks something like:" +msgstr "" + +#: ../../features/data-importers.rst:241 +msgid "The ``make_lookup`` function takes two arguments. The first is a text description of what it's looking up; this is used for the error message if the value in the CSV file isn't recognised. The second is a dict mapping tuples of valid strings to constants." +msgstr "" + +#: ../../features/data-importers.rst:247 +msgid "Debugging output" +msgstr "" + +#: ../../features/data-importers.rst:249 +msgid "The ``BaseTournamentDataImporter`` constructor accepts a ``loglevel`` argument:" +msgstr "" + +#: ../../features/data-importers.rst:255 +msgid "If ``loglevel`` is set to ``logging.DEBUG``, the importer will print information about every instance it creates." +msgstr "" + +#: ../../features/data-importers.rst:258 +msgid "You can also pass in a logger for it to use (instead of the default one) with the ``logger`` argument." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/features/draw-generation-bp.po b/docs/locale/vi/LC_MESSAGES/features/draw-generation-bp.po new file mode 100644 index 00000000000..eb2d372235a --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/features/draw-generation-bp.po @@ -0,0 +1,598 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-25 04:13\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation-bp.po\n" +"X-Crowdin-File-ID: 1285\n" +"Language: vi_VN\n" + +#: ../../features/draw-generation-bp.rst:5 +msgid "Draw Generation (BP)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:7 +msgid "The draw generator for British Parliamentary tournaments tries to rotate teams through positions by assigning them positions they've been in less often before the current round." +msgstr "" + +#: ../../features/draw-generation-bp.rst:10 +msgid "Summary of options" +msgstr "" + +#: ../../features/draw-generation-bp.rst:12 +msgid "Options are set in the **Configuration** page as described in :ref:`starting a tournament `. Options in `italics` with an asterisk are not WUDC-compliant. The recommended options are shown in **bold**." +msgstr "" + +#: ../../features/draw-generation-bp.rst:19 +msgid "Option" +msgstr "" + +#: ../../features/draw-generation-bp.rst:20 +msgid "Description" +msgstr "" + +#: ../../features/draw-generation-bp.rst:21 +msgid "Allowable values" +msgstr "" + +#: ../../features/draw-generation-bp.rst:22 +msgid ":ref:`Pullup distribution `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:23 +msgid "Where pullup teams get placed" +msgstr "" + +#: ../../features/draw-generation-bp.rst:24 +msgid "**Anywhere in bracket**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:25 +msgid "*All in the same room*\\*" +msgstr "" + +#: ../../features/draw-generation-bp.rst:26 +msgid ":ref:`Position cost `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:27 +msgid "Which cost function to use to indicate which position profiles are preferred" +msgstr "" + +#: ../../features/draw-generation-bp.rst:28 +#: ../../features/draw-generation-bp.rst:179 +msgid "Simple" +msgstr "" + +#: ../../features/draw-generation-bp.rst:29 +msgid "**Rényi entropy**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:30 +#: ../../features/draw-generation-bp.rst:254 +msgid "Population variance" +msgstr "" + +#: ../../features/draw-generation-bp.rst:31 +msgid ":ref:`Rényi order `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:32 +msgid "Order of Rényi entropy" +msgstr "" + +#: ../../features/draw-generation-bp.rst:33 +msgid "Any non-negative number (default: **1**, *i.e.* Shannon entropy)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:34 +msgid ":ref:`Position cost exponent `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:35 +msgid "Degree to which large position imbalances should be prioritised" +msgstr "" + +#: ../../features/draw-generation-bp.rst:36 +msgid "Any non-negative number (default: **4**)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:37 +msgid ":ref:`Assignment method `" +msgstr "" + +#: ../../features/draw-generation-bp.rst:38 +msgid "Algorithm used to assign positions" +msgstr "" + +#: ../../features/draw-generation-bp.rst:39 +msgid "*Hungarian*\\*" +msgstr "" + +#: ../../features/draw-generation-bp.rst:40 +msgid "**Hungarian with preshuffling**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:45 +msgid "The big picture" +msgstr "" + +#: ../../features/draw-generation-bp.rst:47 +msgid "To try to achieve position balance, Tabbycat treats the allocation of teams to debates as an `assignment problem `_. That is, it computes the \"cost\" of assigning each team to each position in each debate, and finds an assignment of all teams to a position in a debate that minimises the total cost (the sum over all teams)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:50 +msgid "A simple example" +msgstr "" + +#: ../../features/draw-generation-bp.rst:52 +msgid "Here's a small example, to illustrate the idea. Say you have a tournament with 16 teams, and you're about to draw round 4. There are sixteen \"places\" in the draw: four positions in each of four rooms. Tabbycat calculates the \"cost\" of putting each team in each place, and puts them in a matrix, like this:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Room" +msgstr "Phòng" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Top" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Second" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Third" +msgstr "" + +#: ../../features/draw-generation-bp.rst:61 +msgid "Bottom" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "Position" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "OG" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "OO" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "CG" +msgstr "" + +#: ../../features/draw-generation-bp.rst:63 +msgid "CO" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +msgid "**A (8)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +#: ../../features/draw-generation-bp.rst:67 +#: ../../features/draw-generation-bp.rst:69 +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:77 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:81 +#: ../../features/draw-generation-bp.rst:83 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:93 +#: ../../features/draw-generation-bp.rst:95 +msgid "16" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +#: ../../features/draw-generation-bp.rst:67 +#: ../../features/draw-generation-bp.rst:69 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:77 +#: ../../features/draw-generation-bp.rst:81 +#: ../../features/draw-generation-bp.rst:83 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:93 +msgid ":q:`0`" +msgstr "" + +#: ../../features/draw-generation-bp.rst:65 +#: ../../features/draw-generation-bp.rst:67 +#: ../../features/draw-generation-bp.rst:69 +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:77 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:81 +#: ../../features/draw-generation-bp.rst:83 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:93 +#: ../../features/draw-generation-bp.rst:95 +msgid "∞" +msgstr "" + +#: ../../features/draw-generation-bp.rst:67 +msgid "**B (7)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:69 +msgid "**C (7)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:71 +msgid "**D (6)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:73 +#: ../../features/draw-generation-bp.rst:75 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:85 +#: ../../features/draw-generation-bp.rst:87 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:91 +#: ../../features/draw-generation-bp.rst:95 +msgid "0" +msgstr "" + +#: ../../features/draw-generation-bp.rst:71 +#: ../../features/draw-generation-bp.rst:79 +#: ../../features/draw-generation-bp.rst:89 +#: ../../features/draw-generation-bp.rst:95 +msgid ":q:`16`" +msgstr "" + +#: ../../features/draw-generation-bp.rst:73 +msgid "**E (6)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:75 +msgid "**F (6)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:77 +msgid "**G (5)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:79 +msgid "**H (5)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:81 +msgid "**I (4)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:83 +msgid "**J (4)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:85 +msgid "**K (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:87 +msgid "**L (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:89 +msgid "**M (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:91 +msgid "**N (3)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:93 +msgid "**O (1)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:95 +msgid "**P (1)**" +msgstr "" + +#: ../../features/draw-generation-bp.rst:98 +msgid "Each \"16\" is the cost of putting a team in a position it's seen once; each \"0\" is the cost of putting a team in the position it hasn't. (Details of how this is calculated are :ref:`below `.) For example, team A (on 8 points) has been in every position except CO. The ∞'s indicate places where the team isn't allowed to go, because the room isn't in their bracket. For example, the three teams on 6 points (D, E, F) can go in either the top or second room, because any of them can be the pullup team." +msgstr "" + +#: ../../features/draw-generation-bp.rst:100 +msgid "The algorithm then chooses entries so that one is selected from each row and one is selected from each column, in a way that minimises the sum of the selected entries. In this case, the selected entries are highlighted in blue. For example, the top room comprises teams E (OG), B (OO), C (CG) and A (CO)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:102 +msgid "Sometimes, particularly in round 4, it simply isn't possible to \"satisfy\" everyone. For example, among the top eight teams, five haven't been in OO, but only two can be accommodated within those brackets. In this case, teams B and G got lucky; there are also many other draws that would have incurred the same total cost." +msgstr "" + +#: ../../features/draw-generation-bp.rst:104 +msgid "More generally, in most cases, there will be many optimal solutions. To randomise the selection among them, Tabbycat (under default settings) randomly permutes the rows and columns of the matrix before starting the assignment algorithm." +msgstr "" + +#: ../../features/draw-generation-bp.rst:107 +msgid "Explanations of options" +msgstr "" + +#: ../../features/draw-generation-bp.rst:112 +msgid "Pullup distribution" +msgstr "" + +#: ../../features/draw-generation-bp.rst:114 +msgid "If the number of teams in a bracket is not a multiple of four, it pulls up teams from the next bracket down. The pullup distribution then governs how those teams are paired into the upper bracket." +msgstr "" + +#: ../../features/draw-generation-bp.rst:116 +msgid "The available options are as follows:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:120 +msgid "**Anywhere in bracket:** The pullup teams are treated as if they were any other team in their new bracket. For example, if there are 17 teams in a 10-point bracket, then the three 9-point teams that get pulled up may be paired anywhere in the 10-point bracket, independently of each other. Chance might put them in the same room, but more likely, they will not all be in the same room, so there will be multiple pullup rooms in the 10-point bracket." +msgstr "" + +#: ../../features/draw-generation-bp.rst:122 +msgid "**All in the same room:** All of the pullup teams will be paired into the same room. This means that there will be at most one pullup room per bracket, effectively creating an \"intermediate bracket\"." +msgstr "" + +#: ../../features/draw-generation-bp.rst:124 +msgid "While it can be argued that the `All in the same room` setting is fairer, it is prohibited by the WUDC constitution. If your tournament follows WUDC rules, you cannot use this setting." +msgstr "" + +#: ../../features/draw-generation-bp.rst:126 +msgid "The teams that get pulled up aren't specifically chosen---they're just assigned as part of the algorithm described :ref:`above `, which optimises for position balance. Tabbycat doesn't support taking anything else into account when choosing pullup teams. (WUDC rules wouldn't allow it, either.)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:131 +msgid "Position cost options" +msgstr "" + +#: ../../features/draw-generation-bp.rst:133 +msgid "The `position cost function` is a function that indicates how \"bad\" it would be if a team were to be allocated a certain position (OG, OO, CG, CO) in a debate. When generating a draw, Tabbycat chooses from among the draws that minimise the sum of the position costs for each team." +msgstr "" + +#: ../../features/draw-generation-bp.rst:135 +msgid "More formally:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:139 +msgid "A `position history` or just `history` :math:`\\mathbf{h}` is a 4-tuple where each element is the number of times a team has already been in the corresponding position. For example, :math:`\\mathbf{h} = (0, 2, 1, 1)` means that a team has been in OO twice, CG and CO once each, and hasn't been in OG." +msgstr "" + +#: ../../features/draw-generation-bp.rst:140 +msgid "A cost function :math:`C(\\mathbf{h},s)` is a function specifying how \"bad\" it would be if a team with position history :math:`\\mathbf{h}` were assigned the position :math:`s` in the next round." +msgstr "" + +#: ../../features/draw-generation-bp.rst:142 +msgid "Tabbycat allows you to choose from a number of different **position cost functions**, as well as a **position cost exponent** :math:`\\beta`. Then, when allocating teams to debates, Tabbycat allocates teams to positions :math:`(s_t, t \\in\\mathcal{T})` to minimise" +msgstr "" + +#: ../../features/draw-generation-bp.rst:144 +msgid "\\sum_{t \\in \\mathcal{T}} [C(\\mathbf{h}_t,s_t)]^\\beta" +msgstr "" + +#: ../../features/draw-generation-bp.rst:148 +msgid "where :math:`\\mathcal{T}` is the set of all teams, :math:`\\mathbf{h}_t` is the position history of team :math:`t` and :math:`s_t` is the position to which team :math:`t` would be allocated." +msgstr "" + +#: ../../features/draw-generation-bp.rst:153 +msgid "Position cost exponent" +msgstr "" + +#: ../../features/draw-generation-bp.rst:155 +msgid "The **position cost exponent** :math:`\\beta` controls how different teams trade off with each other." +msgstr "" + +#: ../../features/draw-generation-bp.rst:159 +msgid "The **larger** :math:`\\beta` is, the more concerned it is with preventing *very* bad situations. That is, it will give more teams some slight unevenness in order to prevent one team from getting a `very` uneven history." +msgstr "" + +#: ../../features/draw-generation-bp.rst:161 +msgid "The **smaller** :math:`\\beta` is, the more concerned it is with preventing *any* unevenness. That is, it will try to keep more teams from being uneven *at all*, at the cost of possibly letting just one team get a very uneven history." +msgstr "" + +#: ../../features/draw-generation-bp.rst:163 +msgid "At the large extreme, as :math:`\\beta\\rightarrow\\infty`, it will do everything it can to minimise the plight of the *worst-off* team, and it won't care for *any* team other than the worst-off." +msgstr "" + +#: ../../features/draw-generation-bp.rst:165 +msgid "At the small extreme, as :math:`\\beta\\rightarrow 0`, it will do everything it can to minimise the number of teams with a non-optimal profile---but if it's impossible to protect a team from sub-optimality, it won't care *how* uneven the unlucky team gets." +msgstr "" + +#: ../../features/draw-generation-bp.rst:167 +msgid "The \"balanced\" approach would be :math:`\\beta = 1`, which just takes the cost function as-is. This doesn't mean that this is the best idea, however---you'd typically want to bias towards preventing very uneven histories a bit more. Most tournaments will probably want :math:`\\beta` to be somewhere between 2 and 5. (Note that :math:`\\beta` need not be an integer.)" +msgstr "" + +#: ../../features/draw-generation-bp.rst:172 +msgid "Position cost functions" +msgstr "" + +#: ../../features/draw-generation-bp.rst:174 +msgid "Tabbycat allows you to choose between three position cost functions :math:`C(\\mathbf{h},s)`: **Simple**, **Rényi entropy** and **Population variance**." +msgstr "" + +#: ../../features/draw-generation-bp.rst:176 +msgid "In the descriptions that follow, :math:`\\mathcal{S} = \\{\\texttt{OG}, \\texttt{OO}, \\texttt{CG}, \\texttt{CO}\\}`, the set of all BP positions." +msgstr "" + +#: ../../features/draw-generation-bp.rst:181 +msgid "The simple cost function :math:`C_\\textrm{simple}(\\mathbf{h},s)` returns the number of times the team has already been in position :math:`s`, less the number of times the team has been in its least frequent position. That is," +msgstr "" + +#: ../../features/draw-generation-bp.rst:183 +msgid "C_\\mathrm{simple}(\\mathbf{h},s) = \\mathbf{h}[s] - \\min_{s' \\in\\mathcal{S}} \\mathbf{h}[s']" +msgstr "" + +#: ../../features/draw-generation-bp.rst:187 +msgid "where :math:`\\mathbf{h}[s]` is the element of :math:`\\mathbf{h}` corresponding to position :math:`s`." +msgstr "" + +#: ../../features/draw-generation-bp.rst:190 +msgid "Rényi entropy" +msgstr "" + +#: ../../features/draw-generation-bp.rst:192 +msgid "Informally speaking, the `Rényi entropy `_ is a measure of the diversity of the positions in a team's history. A history consisting only of one position has *low* entropy, while a history that is perfectly evenly distributed has *high* entropy. The **Rényi entropy cost function** reverses this intuition, so that an even hypothetical history has low cost, while an uneven hypothetical history has high cost." +msgstr "" + +#: ../../features/draw-generation-bp.rst:194 +msgid "The Rényi entropy takes one parameter, known as its *order*, :math:`\\alpha`, which will be further discussed below." +msgstr "" + +#: ../../features/draw-generation-bp.rst:196 +msgid "More formally, the Rényi entropy cost function :math:`C_\\textrm{R\\'enyi}(\\mathbf{h},s)` is defined as" +msgstr "" + +#: ../../features/draw-generation-bp.rst:198 +msgid "C_\\textrm{R\\'enyi}(\\mathbf{h},s) = n_\\mathbf{h} [2 - H_\\alpha(\\hat{p}_{\\mathbf{h},s})]" +msgstr "" + +#: ../../features/draw-generation-bp.rst:202 +msgid "where" +msgstr "" + +#: ../../features/draw-generation-bp.rst:206 +msgid ":math:`n_\\mathbf{h} = \\sum_{s'} \\mathbf{h}[s']` is the number of rounds the team has competed in so far." +msgstr "" + +#: ../../features/draw-generation-bp.rst:207 +msgid ":math:`\\hat{p}_{\\mathbf{h},s}` is the *normalised hypothetical* position history that would arise if a team with history :math:`\\mathbf{h}` were to be allocated position :math:`s` in the next round; that is," +msgstr "" + +#: ../../features/draw-generation-bp.rst:209 +msgid "\\hat{p}_{\\mathbf{h},s}[s'] = \\begin{cases} \\frac{1}{n_\\mathbf{h} + 1} (\\mathbf{h}[s'] + 1), &\\text{ if } s = s', \\\\ \\frac{1}{n_\\mathbf{h} + 1} \\mathbf{h}[s'], &\\text{ if } s \\ne s'. \\end{cases}" +msgstr "" + +#: ../../features/draw-generation-bp.rst:216 +msgid "Note that :math:`\\hat{p}_{\\mathbf{h},s}` is a probability distribution (that is, its elements sum to 1)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:218 +msgid ":math:`H_\\alpha(\\cdot)` is the `Rényi entropy `_ of order :math:`\\alpha` of a probability distribution, defined as" +msgstr "" + +#: ../../features/draw-generation-bp.rst:220 +msgid "H_\\alpha(p) = \\frac{1}{1-\\alpha} \\log_2 \\left( \\sum_{s\\in\\mathcal{S}} (p[s])^\\alpha \\right), \\qquad \\alpha \\ne 1." +msgstr "" + +#: ../../features/draw-generation-bp.rst:224 +msgid "In the special (limiting) case where :math:`\\alpha=1`, it reduces to the `Shannon entropy `_," +msgstr "" + +#: ../../features/draw-generation-bp.rst:226 +msgid "H_1(p) =-\\sum_{s\\in\\mathcal{S}} p[s] \\log_2 p[s]." +msgstr "" + +#: ../../features/draw-generation-bp.rst:230 +msgid "Note that for all :math:`\\alpha`, :math:`0 \\le H_\\alpha(p) \\le \\log_2(4) = 2` (since there are four positions in BP)." +msgstr "" + +#: ../../features/draw-generation-bp.rst:234 +msgid "The **Rényi order** is the parameter :math:`\\alpha` above, and it controls *what it means to be \"even among positions\"* for a team. Note that \"evenness\" is not easily defined. After round 8, which position history is more even: (0, 2, 3, 3) or (1, 1, 1, 5)? The Rényi order allows us to tune this definition." +msgstr "" + +#: ../../features/draw-generation-bp.rst:238 +msgid "The **smaller** :math:`\\alpha` is, the more it cares that teams compete in every position *at least* once, favouring (1, 1, 1, 5) over (0, 2, 3, 3): it's worse to have never OGed, than it is to have COed five times." +msgstr "" + +#: ../../features/draw-generation-bp.rst:240 +msgid "The **larger** :math:`\\alpha` is, the more it cares that teams do not compete in *any* (one) position too many times, favouring (0, 2, 3, 3) over (1, 1, 1, 5): it's worse to have COed five times, than it is to have never OGed." +msgstr "" + +#: ../../features/draw-generation-bp.rst:242 +msgid "At the small extreme, as :math:`\\alpha\\rightarrow0`, it *only* counts how many positions a team has seen at least once, and doesn't care about the distribution among them so long as a team has been in each position once." +msgstr "" + +#: ../../features/draw-generation-bp.rst:244 +msgid "At the large extreme, as :math:`\\alpha\\rightarrow\\infty`, it *only* looks at how many times each team has seen its *most frequent* position, and tries to keep this number even among all teams." +msgstr "" + +#: ../../features/draw-generation-bp.rst:246 +msgid "The \"balanced\" approach would be :math:`\\alpha=1` (the `Shannon entropy `_), though of course it's arguable what \"balanced\" means. Tabbycat defaults to this value." +msgstr "" + +#: ../../features/draw-generation-bp.rst:248 +msgid "To give some intuition for the useful range: In round 9, a strict ordering by number of positions seen at least once occurs for approximately :math:`\\alpha < 0.742`. A strict ordering by number of times in the most frequent position occurs for :math:`\\alpha>3`. Changing :math:`\\alpha` outside the range :math:`[0.742, 3]` will still affect the relative (cardinal) weighting *between teams*, but will not affect the *ordinal* ranking of possible histories." +msgstr "" + +#: ../../features/draw-generation-bp.rst:250 +msgid "The purpose of weighting costs by :math:`n_\\mathbf{h}` is to prioritise those teams who have competed in every round over those who have competed in fewer rounds." +msgstr "" + +#: ../../features/draw-generation-bp.rst:256 +msgid "The **population variance** cost function is just the population variance of the history 4-tuple," +msgstr "" + +#: ../../features/draw-generation-bp.rst:258 +msgid "C_\\textrm{popvar}(\\mathbf{h},s) = \\frac14 \\sum_{s'\\in\\mathcal{S}} \\left(\\mathbf{\\hat{h}}_s[s'] - \\mu_{\\mathbf{\\hat{h}}_s} \\right)^2," +msgstr "" + +#: ../../features/draw-generation-bp.rst:262 +msgid "where :math:`\\mathbf{\\hat{h}}_s` is the *hypothetical* position history that would arise if a team with history :math:`\\mathbf{h}` were to be allocated position :math:`s` in the next round; that is," +msgstr "" + +#: ../../features/draw-generation-bp.rst:264 +msgid "\\mathbf{\\hat{h}}_s[s'] = \\begin{cases} \\mathbf{h}[s'] + 1, &\\text{ if } s = s', \\\\ \\mathbf{h}[s'], &\\text{ if } s \\ne s'. \\end{cases}" +msgstr "" + +#: ../../features/draw-generation-bp.rst:271 +msgid "and where :math:`\\mu_{\\mathbf{\\hat{h}}_s}` is the mean of :math:`\\mathbf{\\hat{h}}_s`," +msgstr "" + +#: ../../features/draw-generation-bp.rst:273 +msgid "\\mu_{\\mathbf{\\hat{h}}_s} = \\frac14 \\sum_{s'\\in\\mathcal{S}} \\mathbf{\\hat{h}}_s[s']." +msgstr "" + +#: ../../features/draw-generation-bp.rst:277 +msgid "At the extremes, a team that has seen all positions evenly will have a population variance of zero, while a team that has seen just one position :math:`n` times will have a population variance of :math:`\\frac{3n^2}{16}`." +msgstr "" + +#: ../../features/draw-generation-bp.rst:282 +msgid "Assignment method" +msgstr "" + +#: ../../features/draw-generation-bp.rst:284 +msgid "Tabbycat uses the `Hungarian algorithm `_ to solve the `assignment problem `_ of assigning teams to positions in debates. This can be run with or without preshuffling:" +msgstr "" + +#: ../../features/draw-generation-bp.rst:288 +msgid "**Hungarian algorithm** just runs the Hungarian algorithm as-is, with no randomness. This probably isn't what you want." +msgstr "" + +#: ../../features/draw-generation-bp.rst:290 +msgid "**Hungarian algorithm with preshuffling** also runs the Hungarian algorithm on the position cost matrix, but shuffles the input so that the draw is randomised, subject to having optimal position allocations." +msgstr "" + +#: ../../features/draw-generation-bp.rst:292 +msgid "Preshuffling doesn't compromise the optimality of position allocations: It simply shuffles the order in which teams and debates appear in the input to the algorithm, by randomly permuting the rows and columns of the position cost matrix. The Hungarian algorithm still guarantees an optimal position assignment, according to the chosen position cost function." +msgstr "" + +#: ../../features/draw-generation-bp.rst:294 +msgid "Running the Hungarian algorithm *without* preshuffling has the side effect of grouping teams with similar speaker scores in to the same room, and is therefore prohibited by WUDC rules. Its inclusion as an option is mainly academic; most tournaments will not want to use it in practice." +msgstr "" + +#: ../../features/draw-generation-bp.rst:296 +msgid "No other assignment methods are currently supported. For example, Tabbycat can't run fold (high-low) or adjacent (high-high) pairing *within* brackets." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/features/draw-generation.po b/docs/locale/vi/LC_MESSAGES/features/draw-generation.po new file mode 100644 index 00000000000..4aff565ac37 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/features/draw-generation.po @@ -0,0 +1,436 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/draw-generation.po\n" +"X-Crowdin-File-ID: 1287\n" +"Language: vi_VN\n" + +#: ../../features/draw-generation.rst:5 +msgid "Draw Generation" +msgstr "" + +#: ../../features/draw-generation.rst:7 +msgid "The draw generator is quite flexible. You can specify a number of settings to suit different tournaments' rules." +msgstr "" + +#: ../../features/draw-generation.rst:10 +msgid "Summary of options" +msgstr "" + +#: ../../features/draw-generation.rst:11 +msgid "Options are set in the **Configuration** page as described in :ref:`starting a tournament `." +msgstr "" + +#: ../../features/draw-generation.rst:18 +msgid "Option" +msgstr "" + +#: ../../features/draw-generation.rst:19 +msgid "Description" +msgstr "" + +#: ../../features/draw-generation.rst:20 +msgid "Allowable values" +msgstr "" + +#: ../../features/draw-generation.rst:22 +msgid ":ref:`Odd bracket resolution method `" +msgstr "" + +#: ../../features/draw-generation.rst:23 +msgid "How to resolve odd brackets" +msgstr "" + +#: ../../features/draw-generation.rst:24 +msgid "Pull up from top" +msgstr "" + +#: ../../features/draw-generation.rst:25 +msgid "Pull up from bottom" +msgstr "" + +#: ../../features/draw-generation.rst:26 +msgid "Pull up from middle" +msgstr "" + +#: ../../features/draw-generation.rst:27 +msgid "Pull up at random" +msgstr "" + +#: ../../features/draw-generation.rst:29 +msgid "If sides are `Random` or `Balance`:" +msgstr "" + +#: ../../features/draw-generation.rst:31 +msgid "Intermediate" +msgstr "" + +#: ../../features/draw-generation.rst:32 +msgid "Intermediate with bubble-up-bubble-down" +msgstr "" + +#: ../../features/draw-generation.rst:34 +msgid "If sides are `Pre-allocated`:" +msgstr "" + +#: ../../features/draw-generation.rst:36 +msgid "Intermediate 1" +msgstr "" + +#: ../../features/draw-generation.rst:37 +msgid "Intermediate 2" +msgstr "" + +#: ../../features/draw-generation.rst:39 +msgid ":ref:`Side allocations method `" +msgstr "" + +#: ../../features/draw-generation.rst:40 +msgid "How to allocate aff/neg" +msgstr "" + +#: ../../features/draw-generation.rst:41 ../../features/draw-generation.rst:51 +msgid "Random" +msgstr "" + +#: ../../features/draw-generation.rst:42 +msgid "Balance" +msgstr "" + +#: ../../features/draw-generation.rst:43 +msgid "Pre-allocated" +msgstr "" + +#: ../../features/draw-generation.rst:44 +msgid "Manual ballot" +msgstr "" + +#: ../../features/draw-generation.rst:46 +msgid ":ref:`Pairing method `" +msgstr "" + +#: ../../features/draw-generation.rst:47 +msgid "How to pair teams within brackets" +msgstr "" + +#: ../../features/draw-generation.rst:48 +msgid "Slide" +msgstr "" + +#: ../../features/draw-generation.rst:49 +msgid "Fold" +msgstr "" + +#: ../../features/draw-generation.rst:50 +msgid "Adjacent" +msgstr "" + +#: ../../features/draw-generation.rst:53 +msgid ":ref:`Conflict avoidance method `" +msgstr "" + +#: ../../features/draw-generation.rst:54 +msgid "How to avoid history/institution conflicts" +msgstr "" + +#: ../../features/draw-generation.rst:55 +msgid "Off" +msgstr "" + +#: ../../features/draw-generation.rst:56 +msgid "One-up-one-down" +msgstr "" + +#: ../../features/draw-generation.rst:58 +msgid ":ref:`Pullup restriction `" +msgstr "" + +#: ../../features/draw-generation.rst:59 +msgid "Whether and how to restrict pullups" +msgstr "" + +#: ../../features/draw-generation.rst:60 +msgid "No restriction" +msgstr "" + +#: ../../features/draw-generation.rst:61 +msgid "Choose from teams who have been pulled up the fewest times so far" +msgstr "" + +#: ../../features/draw-generation.rst:62 +msgid "Choose from teams with the lowest draw strength by speaks so far" +msgstr "" + +#: ../../features/draw-generation.rst:64 +msgid "The valid options for intermediate brackets change depending on whether sides are pre-allocated, but these are **not** checked for validity. If you choose an invalid combination, Tabbycat will just crash. This won't corrupt the database, but it might be momentarily annoying." +msgstr "" + +#: ../../features/draw-generation.rst:67 +msgid "The big picture" +msgstr "" + +#: ../../features/draw-generation.rst:68 +msgid "When generating a power-paired draw, Tabbycat goes through five steps:" +msgstr "" + +#: ../../features/draw-generation.rst:70 +msgid "First, it divides teams into \"raw brackets\", grouping them by the number of wins." +msgstr "" + +#: ../../features/draw-generation.rst:71 +msgid "Second, it resolves odd brackets, applying the odd brackets rule to make sure there is an even number of teams in each bracket. This is often called \"pulling up\" teams." +msgstr "" + +#: ../../features/draw-generation.rst:72 +msgid "Third, within each bracket, it pairs teams into debates using the pairing method." +msgstr "" + +#: ../../features/draw-generation.rst:73 +msgid "Fourth, if enabled, it adjusts pairings to avoid history or institution conflicts." +msgstr "" + +#: ../../features/draw-generation.rst:74 +msgid "Finally, it assigns sides to teams in each debate." +msgstr "" + +#: ../../features/draw-generation.rst:76 +msgid "For each of these steps except the first, Tabbycat allows you to choose between a number of different methods." +msgstr "" + +#: ../../features/draw-generation.rst:80 +msgid "Explanations of options" +msgstr "" + +#: ../../features/draw-generation.rst:85 +msgid "Odd bracket resolution" +msgstr "" + +#: ../../features/draw-generation.rst:86 +msgid "The **draw odd brackets** option specifies what you do when a bracket has an odd number of teams. (Obviously you have to do something, otherwise you can't pair off teams within the bracket.) There are two groups of methods: pull-up and intermediate brackets." +msgstr "" + +#: ../../features/draw-generation.rst:90 +msgid "**Pull-up methods** take one or more teams from the next bracket down, and move them into the odd bracket to fill the bracket." +msgstr "" + +#: ../../features/draw-generation.rst:92 +msgid "**Intermediate brackets** take the excess teams from the odd bracket and move them down into a new bracket, which sits between the odd bracket and the next one down (the \"intermediate bracket\"). It then takes teams from the next bracket down and moves them up to fill the new intermediate bracket." +msgstr "" + +#: ../../features/draw-generation.rst:94 +msgid "The exact mechanics depend on whether or not sides are pre-allocated." +msgstr "" + +#: ../../features/draw-generation.rst:97 +msgid "When sides are not pre-allocated" +msgstr "" + +#: ../../features/draw-generation.rst:101 +msgid "**Pull-up methods:** Take a team from the next bracket down, and add them to the odd bracket to form an even bracket. You can choose to pull up the top team from the next bracket, or the bottom team, or the middle team, or a randomly chosen team. (If you pull up the middle team, and the bracket has an even number of teams, then it will choose randomly from the two middle teams.)" +msgstr "" + +#: ../../features/draw-generation.rst:103 +msgid "**Intermediate brackets:** Take the bottom team from the odd bracket and match them against the top team from the next bracket. An intermediate bracket always has two teams." +msgstr "" + +#: ../../features/draw-generation.rst:105 +msgid "If you're using conflict avoidance and intermediate brackets, you will probably want to use **Intermediate with bubble-up-bubble-down** instead. This uses the \"bubble-up-bubble-down\" rule to swap teams out of an intermediate bracket if there is a history or institution conflict. This is defined in the Australs constitution and is analogous to the \"one-up-one-down\" rule." +msgstr "" + +#: ../../features/draw-generation.rst:107 +msgid "Using `Intermediate` with `One-up-one-down` does **not** imply `Intermediate with bubble-up-bubble-down`. You must enable `Intermediate with bubble-up-bubble-down` specifically." +msgstr "" + +#: ../../features/draw-generation.rst:110 +msgid "When sides are pre-allocated" +msgstr "" + +#: ../../features/draw-generation.rst:111 +msgid "When sides are pre-allocated, an \"odd bracket\" is one that has an uneven number of affirmative and negative teams. (So odd brackets can have an even number of teams, *e.g.* 4 affs and 2 negs.)" +msgstr "" + +#: ../../features/draw-generation.rst:115 +msgid "**Pull-up methods:** Take as many teams from the next bracket down as necessary to fill the bracket. If there aren't enough teams in the next bracket down, take teams from the bracket after that, and so on, until the (original) odd bracket is filled. Higher brackets are always filled first. You can choose to pull up the top teams from the next bracket, the bottom teams, or a random selection of teams." +msgstr "" + +#: ../../features/draw-generation.rst:117 +msgid "**Intermediate brackets:** Take the unpaired teams in a bracket, and move them down to a new intermediate bracket. Then, take the number of teams necessary from the opposite side, from the next bracket down, to fill the next bracket." +msgstr "" + +#: ../../features/draw-generation.rst:119 +msgid "**Intermediate 1** and **Intermediate 2** differ only in what happens if there aren't enough teams in the next bracket to fill the intermediate bracket. In **Intermediate 1**, it will just take teams from the bracket after that, and so on, until the intermediate bracket is filled. In **Intermediate 2**, it will split the intermediate bracket: the teams that can be paired with the next bracket form the first intermediate bracket, and then the teams that aren't form a new (unfilled) intermediate bracket, to be filled from teams from the bracket after that. This keeps going, splitting into as many intermediate brackets as necessary, until all excess teams from the original odd bracket are paired." +msgstr "" + +#: ../../features/draw-generation.rst:124 +msgid "Side allocations" +msgstr "" + +#: ../../features/draw-generation.rst:125 +msgid "There are four methods:" +msgstr "" + +#: ../../features/draw-generation.rst:129 +msgid "**Random** allocates randomly. Some tournaments might like this, but most will probably want to use Balance, because Random doesn't guarantee that a team won't be (say) affirming the entire tournament." +msgstr "" + +#: ../../features/draw-generation.rst:130 +msgid "**Balance** assigns the team that has affirmed less so far the affirmative side (and, therefore, the team that has negated less the negative side). If both teams have affirmed the same number of times, it assigns sides randomly." +msgstr "" + +#: ../../features/draw-generation.rst:131 +msgid "**Preallocated** is used for pre-allocated sides. If used, you must enter data for pre-allocated sides into the database, as specified below." +msgstr "" + +#: ../../features/draw-generation.rst:132 +msgid "**Manually enter from ballot** is used for tournaments where the sides of the teams involved are not assigned in advance, but are instead determined by the teams themselves" +msgstr "" + +#: ../../features/draw-generation.rst:135 +msgid "Pre-allocated sides" +msgstr "" + +#: ../../features/draw-generation.rst:136 +msgid "There isn't currently any way to edit side allocations from the front end. To do so from the back end, you need to create one ``TeamPositionAllocation`` entry for each team in each round. All teams must have an allocation for every round. There are a few ways to do this, take your pick:" +msgstr "" + +#: ../../features/draw-generation.rst:140 +msgid "If you're using the :ref:`importtournament command `, it reads sides from the file sides.csv." +msgstr "" + +#: ../../features/draw-generation.rst:141 +msgid "You can do this from the Django admin interface (under Setup > Edit Database) by going to the relevant team and adding a **team position allocation** entry. That is:" +msgstr "" + +#: ../../features/draw-generation.rst:143 +msgid "Click **Admin** on the bottom right of any page after logging into an account with :ref:`superuser access `." +msgstr "" + +#: ../../features/draw-generation.rst:144 +msgid "Next to **Teams**, click **Change**." +msgstr "" + +#: ../../features/draw-generation.rst:145 +msgid "Click on the name of the team you want to edit side allocations for." +msgstr "" + +#: ../../features/draw-generation.rst:146 +msgid "Add or edit the entry or entries in the **Team position allocations** table at the bottom." +msgstr "" + +#: ../../features/draw-generation.rst:148 +msgid "You can also do this by writing a script that creates ``TeamPositionAllocation`` objects and saves them. Have a look at `draw/management/commands/generatesideallocations.py `_ for an example." +msgstr "" + +#: ../../features/draw-generation.rst:153 +msgid "Pairing method" +msgstr "" + +#: ../../features/draw-generation.rst:154 +msgid "It's easiest to describe these by example, using a ten-team bracket:" +msgstr "" + +#: ../../features/draw-generation.rst:156 +msgid "**Fold**: 1 vs 10, 2 vs 9, 3 vs 8, 4 vs 7, 5 vs 6. (Also known as high-low pairing.)" +msgstr "" + +#: ../../features/draw-generation.rst:157 +msgid "**Slide**: 1 vs 6, 2 vs 7, 3 vs 8, 4 vs 9, 5 vs 10." +msgstr "" + +#: ../../features/draw-generation.rst:158 +msgid "**Adjacent**: 1 vs 2, 3 vs 4, 5 vs 6, 7 vs 8, 9 vs 10. (Also known as high-high pairing.)" +msgstr "" + +#: ../../features/draw-generation.rst:159 +msgid "**Random**: paired at random within bracket." +msgstr "" + +#: ../../features/draw-generation.rst:161 +msgid "Teams are always paired within their brackets, after resolving odd brackets." +msgstr "" + +#: ../../features/draw-generation.rst:166 +msgid "Conflict avoidance method" +msgstr "" + +#: ../../features/draw-generation.rst:167 +msgid "A **conflict** is when two teams would face each other that have seen each other before, or are from the same institutions. Some tournaments have a preference against allowing this if it's avoidable within certain limits. The **draw avoid conflicts** option allows you to specify how." +msgstr "" + +#: ../../features/draw-generation.rst:169 +msgid "You can turn this off by using **Off**. Other than this, there is currently one conflict avoidance method implemented." +msgstr "" + +#: ../../features/draw-generation.rst:171 +msgid "**One-up-one-down** is the method specified in the Australs constitution. Broadly speaking, if there is a debate with a conflict:" +msgstr "" + +#: ../../features/draw-generation.rst:173 +msgid "It tries to swap teams with the debate \"one up\" from it in the draw." +msgstr "" + +#: ../../features/draw-generation.rst:174 +msgid "If that doesn't work, it tries to swap teams with the debate \"one down\" from it in the draw." +msgstr "" + +#: ../../features/draw-generation.rst:175 +msgid "If neither of those works, it accepts the original conflicted debate." +msgstr "" + +#: ../../features/draw-generation.rst:177 +msgid "It's a bit more complicated than that, for two reasons:" +msgstr "" + +#: ../../features/draw-generation.rst:181 +msgid "History conflicts are prioritised over (*i.e.*, \"worse than\") institution conflicts. So it's fine to resolve a history conflict by creating an institution conflict, but not the vice versa." +msgstr "" + +#: ../../features/draw-generation.rst:182 +msgid "Each swap obviously affects the debates around it, so it's not legal to have two adjacent swaps. (Otherwise, in theory, a team could \"one down\" all the way to the bottom of the draw!) So there is an optimization algorithm that finds the best combination of swaps, *i.e.* the one that minimises conflict, and if there are two profiles that have the same least conflict, then it chooses the one with fewer swaps." +msgstr "" + +#: ../../features/draw-generation.rst:187 +msgid "Pullup restriction" +msgstr "" + +#: ../../features/draw-generation.rst:188 +msgid "You can restrict which teams can be pulled up by configuring the draw generator to choose a pullup team from among only those teams who are the \"best off\" according to a given metric. If several teams are equally \"best off\" within the lower bracket, the draw generator chooses among them using the same **pull-up method** already specified (*e.g.*, \"pull up from top\")" +msgstr "" + +#: ../../features/draw-generation.rst:192 +msgid "You can **choose from teams who have been pulled up the fewest times so far**, that is, in rounds before the current round. Most of the time, this is equivalent to saying that a team cannot be pulled up more than once. But if *all* teams in a bracket have been pulled up at least once, it then chooses from among teams who have been pulled up *only* once (if any), and so on." +msgstr "" + +#: ../../features/draw-generation.rst:194 +msgid "You can **choose from teams with the lowest draw strength so far**, by **wins** or **speaks**." +msgstr "" + +#: ../../features/draw-generation.rst:196 +msgid "If you choose speaks, it's unlikely that two teams will have the same draw strength by speaks, so most of the time this will just choose the team in the lower bracket that's had the easiest draw so far (as measured by their opponents' speaker scores)." +msgstr "" + +#: ../../features/draw-generation.rst:198 +msgid "Pullup restrictions only apply when the :ref:`odd bracket resolution method ` is a pullup method. They have no effect on intermediate brackets." +msgstr "" + +#: ../../features/draw-generation.rst:201 +msgid "What do I do if the draw looks wrong?" +msgstr "" + +#: ../../features/draw-generation.rst:203 +msgid "You can edit match-ups directly from the draw page. Functionally, you can do anything you want. Of course, operationally, you should only edit the draw when you *know* that the draw algorithm got something wrong. If you need to do this, even just once, please file a bug report by creating a new issue on `our issues page on GitHub `_." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/features/notifications.po b/docs/locale/vi/LC_MESSAGES/features/notifications.po new file mode 100644 index 00000000000..92166de129c --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/features/notifications.po @@ -0,0 +1,257 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/notifications.po\n" +"X-Crowdin-File-ID: 1289\n" +"Language: vi_VN\n" + +#: ../../features/notifications.rst:3 +msgid "Sending Notifications" +msgstr "" + +#: ../../features/notifications.rst:5 +msgid "Tabbycat offers integrations with email delivery services to send notifications to participants on certain enumerated events. For sending these emails, `SendGrid `_ is readily available as an add-on in Heroku. It may be necessary to install the `SendGrid add-on `_ manually. Other integrations may also be used in its place by changing the relevant environment variables." +msgstr "" + +#: ../../features/notifications.rst:8 +msgid "Events" +msgstr "" + +#: ../../features/notifications.rst:10 +msgid "Tabbycat includes a number of templated notifications that can be sent in various times. Variables which are included between curly brackets which are substituted for personalized information passed by email. Links to email will redirect to a page where the message can be changed and the participants selected." +msgstr "" + +#: ../../features/notifications.rst:12 +msgid "All emails have the ``{{ USER }}`` and ``{{ TOURN }}`` variables to indicate who the email is sent to, and the tournament it relates to. The \"From\" in the emails will also be the tournament's name." +msgstr "" + +#: ../../features/notifications.rst:17 +msgid "Email content and description" +msgstr "" + +#: ../../features/notifications.rst:18 +msgid "Variables" +msgstr "" + +#: ../../features/notifications.rst:20 +msgid "**Adjudicator draw notification**" +msgstr "" + +#: ../../features/notifications.rst:22 +msgid "Email to adjudicators indicating their room assignment." +msgstr "" + +#: ../../features/notifications.rst:24 ../../features/notifications.rst:36 +#: ../../features/notifications.rst:74 +msgid "Available through the admin draw page." +msgstr "" + +#: ../../features/notifications.rst:25 ../../features/notifications.rst:37 +msgid "``{{ ROUND }}``: The round name" +msgstr "" + +#: ../../features/notifications.rst:26 ../../features/notifications.rst:38 +msgid "``{{ VENUE }}``: The venue of the assigned debate" +msgstr "" + +#: ../../features/notifications.rst:27 ../../features/notifications.rst:39 +msgid "``{{ PANEL }}``: A list of all the adjudicators assigned to the venue (with positions)" +msgstr "" + +#: ../../features/notifications.rst:28 ../../features/notifications.rst:40 +msgid "``{{ DRAW }}``: A list of the team matchup with their roles" +msgstr "" + +#: ../../features/notifications.rst:29 +msgid "``{{ POSITION }}``: The target adjudicator's position in the panel" +msgstr "" + +#: ../../features/notifications.rst:30 +msgid "``{{ URL }}``: A link to the adjudicator's private URL page" +msgstr "" + +#: ../../features/notifications.rst:32 +msgid "**Team draw notification**" +msgstr "" + +#: ../../features/notifications.rst:34 +msgid "Email to teams indicating their pairing." +msgstr "" + +#: ../../features/notifications.rst:41 +msgid "``{{ TEAM }}``: The team's code or short name" +msgstr "" + +#: ../../features/notifications.rst:42 +msgid "``{{ SIDE }}``: The team's side" +msgstr "" + +#: ../../features/notifications.rst:44 +msgid "**Private URL distribution**" +msgstr "" + +#: ../../features/notifications.rst:46 +msgid "Email to participants giving them their private URL for electronic forms." +msgstr "" + +#: ../../features/notifications.rst:48 +msgid "Available through the private URLs page." +msgstr "" + +#: ../../features/notifications.rst:49 +msgid "``{{ URL }}``: The personalized URL" +msgstr "" + +#: ../../features/notifications.rst:50 +msgid "``{{ KEY }}``: The private code in the URL" +msgstr "" + +#: ../../features/notifications.rst:52 +msgid "**Ballot submission receipt**" +msgstr "" + +#: ../../features/notifications.rst:54 +msgid "Email to adjudicators of their ballot after tabroom confirmation." +msgstr "" + +#: ../../features/notifications.rst:56 +msgid "Sent automatically when their ballot's result status becomes confirmed, if enabled in the \"Notifications\" section of the tournament options." +msgstr "" + +#: ../../features/notifications.rst:58 +msgid "``{{ DEBATE }}``: The name (with round & venue) of the relevent debate" +msgstr "" + +#: ../../features/notifications.rst:59 +msgid "``{{ SCORES }}``: The submitted ballot with speaker scores ands team names" +msgstr "" + +#: ../../features/notifications.rst:61 +msgid "**Current team standings**" +msgstr "" + +#: ../../features/notifications.rst:63 +msgid "Email to speakers with their point total." +msgstr "" + +#: ../../features/notifications.rst:65 +msgid "Available through the \"Confirm Round Completion\" page." +msgstr "" + +#: ../../features/notifications.rst:66 +msgid "``{{ URL }}``: The URL of the team standings page (if public)" +msgstr "" + +#: ../../features/notifications.rst:67 +msgid "``{{ TEAM }}``: The team's name" +msgstr "" + +#: ../../features/notifications.rst:68 +msgid "``{{ POINTS }}``: The team's number of points" +msgstr "" + +#: ../../features/notifications.rst:70 +msgid "**Motion release**" +msgstr "" + +#: ../../features/notifications.rst:72 +msgid "Email to speakers with the motion(s) of the current round." +msgstr "" + +#: ../../features/notifications.rst:75 +msgid "``{{ ROUND }}``: The name of the round" +msgstr "" + +#: ../../features/notifications.rst:76 +msgid "``{{ MOTIONS }}``: A list of the motions released" +msgstr "" + +#: ../../features/notifications.rst:78 +msgid "**Team information**" +msgstr "" + +#: ../../features/notifications.rst:80 +msgid "Email to speakers with information pertaining to their team, such as eligibility and codes." +msgstr "" + +#: ../../features/notifications.rst:82 +msgid "Available through the Participants page." +msgstr "" + +#: ../../features/notifications.rst:83 +msgid "``{{ SHORT }}``: The team's short name" +msgstr "" + +#: ../../features/notifications.rst:84 +msgid "``{{ LONG }}``: The team's long name" +msgstr "" + +#: ../../features/notifications.rst:85 +msgid "``{{ CODE }}``: The team's code name" +msgstr "" + +#: ../../features/notifications.rst:86 +msgid "``{{ EMOJI }}``: The team's assigned emoji" +msgstr "" + +#: ../../features/notifications.rst:87 +msgid "``{{ DIVISION }}``: The team's division if applicable" +msgstr "" + +#: ../../features/notifications.rst:88 +msgid "``{{ BREAK }}``: Break categories which the team is a member" +msgstr "" + +#: ../../features/notifications.rst:89 +msgid "``{{ SPEAKERS }}``: A list of the speakers in the team" +msgstr "" + +#: ../../features/notifications.rst:90 +msgid "``{{ INSTITUTION }}``: The team's affiliation" +msgstr "" + +#: ../../features/notifications.rst:93 +msgid "Event Webhook" +msgstr "" + +#: ../../features/notifications.rst:95 +msgid "With SendGrid, the status of sent emails can be sent to Tabbycat to be displayed, giving an indication of failures and whether participants have opened the messages. To activate this feature, setup must be done both in your SendGrid account and in Tabbycat." +msgstr "" + +#: ../../features/notifications.rst:97 +msgid "Set a secret key in the Email section of the tournament's preferences. This key must be alphanumeric without any spaces." +msgstr "" + +#: ../../features/notifications.rst:98 +msgid "Copy the \"web-hook\" link presented in a box at the top of the \"email participants\" page." +msgstr "" + +#: ../../features/notifications.rst:99 +msgid "Go to https://app.sendgrid.com/settings/mail_settings and select \"Event Notifications\"" +msgstr "" + +#: ../../features/notifications.rst:100 +msgid "Enable the feature and paste the Tabbycat URL under \"HTTP POST URL\"." +msgstr "" + +#: ../../features/notifications.rst:101 +msgid "Select the notifications to keep track (or all of them)." +msgstr "" + +#: ../../features/notifications.rst:103 +msgid "Each email and change in status sent to Tabbycat will add a row to the database. If the number of rows is limited, as is for free Heroku apps, enabling the webhook may use up a significant number of rows. Be selective in the events to keep track." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/features/preformed-panels.po b/docs/locale/vi/LC_MESSAGES/features/preformed-panels.po new file mode 100644 index 00000000000..daa86eff377 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/features/preformed-panels.po @@ -0,0 +1,176 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-27 04:16\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/preformed-panels.po\n" +"X-Crowdin-File-ID: 1291\n" +"Language: vi_VN\n" + +#: ../../features/preformed-panels.rst:5 +msgid "Preformed Panels" +msgstr "Bàn giám khảo chỉ định" + +#: ../../features/preformed-panels.rst:7 +msgid "Preformed panels, also known as a 'shadow draw', allow adjudicator panels to be created *before* a round has been drawn and then applied once its draw is ready. This means that panel formation can be done during periods outside the normal time pressure of finalising a draw for release. This can save a lot of time at large tournaments, or at tournaments where the adjudication core wants to carefully control the specific combination of adjudicators within panels." +msgstr "" + +#: ../../features/preformed-panels.rst:9 +msgid "Tabbycat's implementation of preformed panels is more powerful, but less simple, than many others. The chief difference is that our workflow does not simply transpose a linear set of preformed panels atop a draw. Instead we employ Tabbycat's existing allocation tools, primarily the notion of a debate's *priority*, to allow for a non-linear matching of preformed panels that avoids adjudicator conflicts and better adapts to a given draw — particularly when the most important debates do not strictly follow the highest debate brackets." +msgstr "" + +#: ../../features/preformed-panels.rst:11 +msgid "The central concept is that each preformed panel has a priority value. When applying preformed panels to a draw, the allocator ties to best match the priority value of each preformed panel to the priority of each actual debate. This is similar to how Tabbycat's normal auto-allocator matches the strength of each panel (as measured by adjudicators' ratings) to the priority of each debate." +msgstr "" + +#: ../../features/preformed-panels.rst:14 +msgid "Step 1: Create preformed panels" +msgstr "" + +#: ../../features/preformed-panels.rst:16 +msgid "You can find the preformed panels section either" +msgstr "" + +#: ../../features/preformed-panels.rst:18 +msgid "under the **Setup** menu (for all rounds), or" +msgstr "" + +#: ../../features/preformed-panels.rst:19 +msgid "on the **Draw** page (for the current and next round)." +msgstr "" + +#: ../../features/preformed-panels.rst:21 +msgid "Initially, the preformed panels page will have no panels. Click the **Create Panels** button in the top left to make some. The panels it creates are based upon a projection of that round's general results using the results of the previous round. As a result, each preformed panel will have a *bracket range*, the lowest and highest brackets that debate might be in, and a *liveness range*, the maximum number of teams that could be live in that room." +msgstr "" + +#: ../../features/preformed-panels.rst:25 +msgid "Like the normal adjudicator allocation interface, the preformed panel interfaces will indicate when an adjudicator has not been marked as available. If using preformed panels, you may want to set adjudicator availability earlier than you would otherwise." +msgstr "" + +#: ../../features/preformed-panels.rst:27 +msgid "Liveness in the anticipated draw only pertains to the open category (the first break category that is marked as a \"general\" category). It's not possible to meaningfully predict where teams open-dead but live in other categories will end up." +msgstr "" + +#: ../../features/preformed-panels.rst:30 +msgid "Step 2: Assign priorities to preformed panels" +msgstr "" + +#: ../../features/preformed-panels.rst:32 +msgid "By default the priority slider for all preformed panels is in the neutral position. You can use the \"Prioritise\" button in the top left to assign priority values automatically, based upon their brackets or liveness. Before or after this step you can alter the priorities as usual — even after you have allocated adjudicators." +msgstr "" + +#: ../../features/preformed-panels.rst:34 +msgid "It's important to remember to assign a range of priorities to the panels. Without distinct priority values, the application of your preformed panels to the actual draw will be essentially random. If allocating priorities manually, it is a good idea to keep a relatively even distribution of priorities — use the range!" +msgstr "" + +#: ../../features/preformed-panels.rst:36 +msgid "In Round 1, each debate has a liveness and bracket of 0. If you are using preformed panels in this instance you may need to manually-differentiate their priorities." +msgstr "" + +#: ../../features/preformed-panels.rst:39 +msgid "Step 3: Allocate adjudicators to preformed panels" +msgstr "" + +#: ../../features/preformed-panels.rst:43 +msgid "Now that your panels have a priority, you can begin allocating adjudicators. You can do this manually, but do note that the normal auto-allocator for adjudicators also works in this context (the \"Allocate\" button). Even if you want to tweak your panels extensively, the auto-allocator can provide a good first-pass collection of panels, because it will give stronger adjudicators to the panels that you have marked as important." +msgstr "" + +#: ../../features/preformed-panels.rst:45 +msgid "The created panels all auto-save, so you can leave the page and return to pick up where you left. Like the main allocation interface, changes should appear 'live' across different computers and the sharding system is available to divide up each person's view of the draw." +msgstr "" + +#: ../../features/preformed-panels.rst:48 +msgid "Step 4: Generate the draw" +msgstr "" + +#: ../../features/preformed-panels.rst:50 +msgid "Proceed with the creation of the draw as usual. Open up the normal adjudicator allocation page for that round." +msgstr "" + +#: ../../features/preformed-panels.rst:53 +msgid "Step 5: Assign priorities to debates" +msgstr "" + +#: ../../features/preformed-panels.rst:55 +msgid "When allocating preformed panels, the priority levels are what connects the preformed panels to the actual debates. It is thus crucial that you assign priorities to the debates in the actual draw using automatic prioritisation or the manual sliders. Because the automatic prioritiser does not employ the highest priority value, it is worth having a look at the draw and seeing if any debates justify this before proceeding." +msgstr "" + +#: ../../features/preformed-panels.rst:58 +msgid "Step 6: Allocate preformed panels to debates" +msgstr "" + +#: ../../features/preformed-panels.rst:60 +msgid "To allocate preformed panels to your debates, click the normal \"Allocate\" button and then select the *Preformed Panels* option." +msgstr "" + +#: ../../features/preformed-panels.rst:64 +msgid "This will then allocate the preformed panels to debates." +msgstr "" + +#: ../../features/preformed-panels.rst:68 +msgid "You can the edit the allocation as normal. If needed, you can redo the allocation of the preformed panels at any point." +msgstr "" + +#: ../../features/preformed-panels.rst:71 +msgid "How does the allocator work?" +msgstr "" + +#: ../../features/preformed-panels.rst:73 +msgid "Roughly speaking, the allocator tries to match panel priorities to debate priorities, while avoiding conflicts. It'll mostly try to swap panels within priority levels in order to avoid conflicts. If there aren't exactly as many panels at each priority level as there are debates, it'll do its best to match what it can." +msgstr "" + +#: ../../features/preformed-panels.rst:75 +msgid "More formally, it treats the allocation of preformed panels to debates as an `assignment problem `_, with a cost of assigning each panel :math:`p` to each debate :math:`d` given by" +msgstr "" + +#: ../../features/preformed-panels.rst:77 +msgid "C(p,d) = w_\\mathrm{mism} [\\mathrm{importance}(p) - \\mathrm{importance(d)}]^2 + w_\\mathrm{conf} \\, \\mathrm{conflicts}(p,d) + w_\\mathrm{hist} \\, \\mathrm{history}(p,d)" +msgstr "" + +#: ../../features/preformed-panels.rst:81 +msgid "where" +msgstr "" + +#: ../../features/preformed-panels.rst:83 +msgid ":math:`w_\\mathrm{mism}` is the \"Importance mismatch penalty\" in the \"Draw rules\" settings," +msgstr "" + +#: ../../features/preformed-panels.rst:84 +msgid ":math:`w_\\mathrm{hist}` is the \"Adjudicator conflict penalty\" in the \"Draw rules\" settings," +msgstr "" + +#: ../../features/preformed-panels.rst:85 +msgid ":math:`w_\\mathrm{conf}` is the \"Adjudicator history penalty\" in the \"Draw rules\" settings," +msgstr "" + +#: ../../features/preformed-panels.rst:86 +msgid ":math:`\\mathrm{importance}(p)` is the importance of panel :math:`p`," +msgstr "" + +#: ../../features/preformed-panels.rst:87 +msgid ":math:`\\mathrm{importance}(d)` is the importance of debate :math:`d`," +msgstr "" + +#: ../../features/preformed-panels.rst:88 +msgid ":math:`\\mathrm{conflicts}(p,d)` is the number of adjudicator-team conflicts between panel :math:`p` and debate :math:`d`, and" +msgstr "" + +#: ../../features/preformed-panels.rst:89 +msgid ":math:`\\mathrm{history}(p,d)` is the number of adjudicators and teams who have seen each other between panel :math:`p` and debate :math:`d`." +msgstr "" + +#: ../../features/preformed-panels.rst:91 +msgid "It then uses the `Hungarian algorithm `_ to find the assignment of panels to debates that minimizes the total cost of the pairings." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/features/printing.po b/docs/locale/vi/LC_MESSAGES/features/printing.po new file mode 100644 index 00000000000..4de17d1477e --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/features/printing.po @@ -0,0 +1,68 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/printing.po\n" +"X-Crowdin-File-ID: 1293\n" +"Language: vi_VN\n" + +#: ../../features/printing.rst:3 +msgid "Printing Ballots and Feedback" +msgstr "" + +#: ../../features/printing.rst:5 +msgid "Tabbycat offers the ability to print scoresheets and feedback sheets on a per-round basis. This means that each scoresheet is customised to match the draw, and so will display:" +msgstr "" + +#: ../../features/printing.rst:7 +msgid "The motion or possible motions that could have been chosen from" +msgstr "" + +#: ../../features/printing.rst:8 +msgid "The teams, and a list of speakers for each team" +msgstr "" + +#: ../../features/printing.rst:9 +msgid "The room number, and name of the adjudicators present" +msgstr "" + +#: ../../features/printing.rst:11 +msgid "Feedback sheets will also be customised in this manner; displaying:" +msgstr "" + +#: ../../features/printing.rst:13 +msgid "A 'from' source. Sheet will be printed for each possible piece of feedback in that room: ie adjudicators will each get a sheet for their panellists and trainees while teams and panellists will get sheets for the chair." +msgstr "" + +#: ../../features/printing.rst:14 +msgid "The specific questions you established when configuring the :ref:`adjudicator feedback questions `" +msgstr "" + +#: ../../features/printing.rst:15 +msgid "The room number" +msgstr "" + +#: ../../features/printing.rst:17 +msgid "To print the ballots for each round, you would go to the **Display** page for that round, the click one of the two relevant print links. This opens a new window. In each window, you then use your browser's print function (CTRL-P). In the resulting print interface (from your browser) you'll want to turn background graphics on, header/footers off, and set the layout to portrait (feedback sheets) or landscape (score sheets)." +msgstr "" + +#: ../../features/printing.rst:19 +msgid "Typically you'd save these to PDF for printing, although you should be able to print straight from this dialogue box." +msgstr "" + +#: ../../features/printing.rst:21 +msgid "Printing works best in Safari and Firefox; use those if possible." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/features/standings-rules.po b/docs/locale/vi/LC_MESSAGES/features/standings-rules.po new file mode 100644 index 00000000000..dfa76ee7534 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/features/standings-rules.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2023-03-25 13:46\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/standings-rules.po\n" +"X-Crowdin-File-ID: 1295\n" +"Language: vi_VN\n" + +#: ../../features/standings-rules.rst:5 +msgid "Standings Rules" +msgstr "" + +#: ../../features/standings-rules.rst:8 +msgid "Team standings rules" +msgstr "" + +#: ../../features/standings-rules.rst:10 +msgid "In Tabbycat, you can choose how teams are ranked in the team standings. For example, at Australs, teams are ranked first on the number of wins, and second on their total speaker score. The setting that specifies how teams are ranked is called the **team standings precedence**. The team standings precedence is used:" +msgstr "" + +#: ../../features/standings-rules.rst:15 +msgid "When displaying the team tab," +msgstr "" + +#: ../../features/standings-rules.rst:16 +msgid "Whenever a power-paired draw is generated, and" +msgstr "" + +#: ../../features/standings-rules.rst:17 +msgid "When computing which teams are in the break." +msgstr "" + +#: ../../features/standings-rules.rst:19 +msgid "When you choose the team standings precedence, you choose from a list of *metrics*. Then, in the standings, teams will be sorted first by the first metric, then by the second metric, and so on. You must choose at least one metric, and you can choose up to eight. Teams tied on all metrics will have the same rank." +msgstr "" + +#: ../../features/standings-rules.rst:25 +msgid "If you like, you can also choose **team standings extra metrics**, which are metrics that will be shown in the team standings, but not used to rank teams." +msgstr "" + +#: ../../features/standings-rules.rst:33 ../../features/standings-rules.rst:132 +msgid "Metric" +msgstr "" + +#: ../../features/standings-rules.rst:34 ../../features/standings-rules.rst:133 +msgid "Description" +msgstr "" + +#: ../../features/standings-rules.rst:36 +msgid "Wins" +msgstr "" + +#: ../../features/standings-rules.rst:37 +msgid "How many debates the team has won." +msgstr "" + +#: ../../features/standings-rules.rst:39 +msgid "Points" +msgstr "Điểm" + +#: ../../features/standings-rules.rst:40 +msgid "How many points the team has. For two-team formats, this is just a synonym for wins, and differs only in column labelling. For BP, this is 3 points for a first, 2 for a second, 1 for a third and 0 for a fourth." +msgstr "" + +#: ../../features/standings-rules.rst:44 +msgid "Total speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:45 +msgid "The sum of all speaker scores attained in all debates." +msgstr "" + +#: ../../features/standings-rules.rst:47 +msgid "Average total speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:48 ../../features/standings-rules.rst:157 +msgid "The average total speaker score over all debates the team has had, not counting debates where they or their opponents forfeited." +msgstr "" + +#: ../../features/standings-rules.rst:51 +msgid "Average individual speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:52 +msgid "The total substantive speaker score, over all debates the team has had and the number of speakers. Provides an equivalent metric to average total speaker score in no-reply formats, but within the substantive speech scoring range." +msgstr "" + +#: ../../features/standings-rules.rst:57 +msgid "Speaker score standard deviation" +msgstr "" + +#: ../../features/standings-rules.rst:58 +msgid "The standard deviation of total speaker scores over all debates the team has had, not counting debates where they or their opponents forfeited. This metric is ranked in ascending order (smaller standard deviations ranked higher)." +msgstr "" + +#: ../../features/standings-rules.rst:63 +msgid "Sum of margins" +msgstr "" + +#: ../../features/standings-rules.rst:64 +msgid "The sum of all margins. Wins are positive, losses are negative." +msgstr "" + +#: ../../features/standings-rules.rst:66 +msgid "Average margin" +msgstr "" + +#: ../../features/standings-rules.rst:67 +msgid "The average margin over all debates the team has had, not counting debates where they or their opponents forfeited." +msgstr "" + +#: ../../features/standings-rules.rst:70 +msgid "Draw strength by wins" +msgstr "" + +#: ../../features/standings-rules.rst:71 +msgid "The sum of the number of wins of every team this team has faced so far." +msgstr "" + +#: ../../features/standings-rules.rst:73 +msgid "This is also known in some circuits as *win points*, *opponent wins* or *opponent strength*." +msgstr "" + +#: ../../features/standings-rules.rst:76 +msgid "Draw strength by speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:77 +msgid "The sum of speaker scores of every team this team has faced so far." +msgstr "" + +#: ../../features/standings-rules.rst:79 +msgid "Votes/ballots carried" +msgstr "" + +#: ../../features/standings-rules.rst:80 +msgid "The number of adjudicators that gave this team a win across all of their debates. Also known as the number of *ballots* or *judges* a team has." +msgstr "" + +#: ../../features/standings-rules.rst:83 +msgid "In cases where the panel is smaller or larger than 3, this number is normalised to be out of 3. For example, if a panel of five splits 3--2, then the winning team is recorded as gaining 1.8 votes, and the losing team is recorded as gaining 1.2. This also means that solo adjudicators are always worth three votes." +msgstr "" + +#: ../../features/standings-rules.rst:89 +msgid "Number of firsts" +msgstr "" + +#: ../../features/standings-rules.rst:90 +msgid "The number of debates in which the team came first. Only makes sense for British Parliamentary." +msgstr "" + +#: ../../features/standings-rules.rst:93 +msgid "Number of seconds" +msgstr "" + +#: ../../features/standings-rules.rst:94 +msgid "The number of debates in which the team came second. Only makes sense for British Parliamentary." +msgstr "" + +#: ../../features/standings-rules.rst:97 +msgid "Number of pullups before this round" +msgstr "" + +#: ../../features/standings-rules.rst:98 +msgid "The number of times the team has been pulled up as part of :ref:`draw generation `. You probably wouldn't use this as a metric to rank teams, but you may wish to display it as an \"extra metric\" in the team standings for transparency." +msgstr "" + +#: ../../features/standings-rules.rst:103 +msgid "Who-beat-whom" +msgstr "" + +#: ../../features/standings-rules.rst:104 +msgid "If there are exactly two teams tied on all metrics earlier in the precedence than this one, then check if the teams have faced each other. If they have, the team that won their encounter is ranked higher. If they have seen each other more than once, the team that has won more of their encounters is ranked higher." +msgstr "" + +#: ../../features/standings-rules.rst:110 +msgid "If there are more than two teams tied, this metric is not applied." +msgstr "" + +#: ../../features/standings-rules.rst:112 +msgid "This metric can be specified multiple times. Each time who-beat-whom occurs, it applies to all the metrics earlier in the precedence than the occurrence in question." +msgstr "" + +#: ../../features/standings-rules.rst:118 +msgid "Speaker standings rules" +msgstr "" + +#: ../../features/standings-rules.rst:120 +msgid "The speaker standings precedence is only used in speaker standings (*i.e.*, it doesn't affect the operation of the tournament). As for team standings, the **speaker standings precedence** specifies which metrics are used to rank speakers, with the second metric tie-breaking the first, the third tie-breaking the second, and so on. The **speaker standings extra metrics** are metrics that will be shown in the speaker standings, but won't be used to rank speakers." +msgstr "" + +#: ../../features/standings-rules.rst:135 +msgid "Total" +msgstr "" + +#: ../../features/standings-rules.rst:136 +msgid "The sum of all speaker scores attained by the speaker. Note that if a speaker misses a round, they'll typically be relegated to the bottom of the speaker standings by this metric." +msgstr "" + +#: ../../features/standings-rules.rst:140 +msgid "Average" +msgstr "" + +#: ../../features/standings-rules.rst:141 +msgid "The average of all speaker scores attained by the speaker." +msgstr "" + +#: ../../features/standings-rules.rst:143 +msgid "Trimmed mean" +msgstr "" + +#: ../../features/standings-rules.rst:144 +msgid "The average speaker score after excluding their highest and lowest speaker scores. Also known as the *high-low drop*, *truncated mean* or *Olympic average*." +msgstr "" + +#: ../../features/standings-rules.rst:148 +msgid "If the speaker has only one or two scores, this metric just returns the average of those scores, without excluding any." +msgstr "" + +#: ../../features/standings-rules.rst:151 +msgid "Standard deviation" +msgstr "" + +#: ../../features/standings-rules.rst:152 +msgid "The standard deviation of all speaker scores attained by the speaker. This metric is ranked in ascending order (smaller standard deviations ranked higher)." +msgstr "" + +#: ../../features/standings-rules.rst:156 +msgid "Average speaker score" +msgstr "" + +#: ../../features/standings-rules.rst:160 +msgid "Number of speeches given" +msgstr "" + +#: ../../features/standings-rules.rst:161 +msgid "The number of speaker scores associated with the speaker. (In tournaments where teams can rotate speakers, this may not be all rounds.) This metric is normally used as an \"extra\" (unranked) metric, because it'd be weird to rank by number of speeches given, but you can if you want to." +msgstr "" + +#: ../../features/standings-rules.rst:168 +msgid "Motion balance" +msgstr "" + +#: ../../features/standings-rules.rst:170 +msgid "The motion balance page applies a statistical test to estimate the degree to which a motion is imbalanced. This is calculated by first making an underlying assumption that a motion is generally fair. This will be our null hypothesis: that, for a given motion, affirmative teams won the same number of times as negative teams." +msgstr "" + +#: ../../features/standings-rules.rst:172 +msgid "Our chi-squared test will then be centred around disproving this hypothesis. If we disprove the hypothesis, we say that, in the context of this tournament and this draw, the motion ended up being unbalanced. However (technically speaking) if we fail to reject the null hypothesis, we would conclude that there is insufficient evidence to suggest that the motion was unbalanced in the context of this tournament." +msgstr "" + +#: ../../features/standings-rules.rst:174 +msgid "The test proceeds by `calculating the chi-squared stat, then running a series of tests `_. The tests are where we go a little off-book with respect to statistical methodology. Normally we would test at a single \"level of significance\" (ie. with a certain degree of certainty), but that's insufficient in telling us how bad a motion ended up being. So, instead, we conduct a range of tests with a range of levels of significance, and calculate the minimum level of significance that causes our null hypothesis to be rejected. Using the minimum level of significance that rejects our null hypothesis, we can then grade the fairness of the motion on a scale. Motions whose tests fall below a certain threshold will be considered fair, while others will be graded based on the minimum." +msgstr "" + +#: ../../features/standings-rules.rst:176 +msgid "For formats with topic selection, the same test is applied using the number of affirmative and negative vetoes in place of wins. The assumption here is that, during the time allotted for motion selection, teams estimate how appealing a motion is from their position, and then veto the topic that they feel is least favourable. Thus, the null hypothesis is that a motion that is perceived of as fair would be vetoed by affirmative and negative teams to an equal degree." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/features/team-code-names.po b/docs/locale/vi/LC_MESSAGES/features/team-code-names.po new file mode 100644 index 00000000000..e0589f38e93 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/features/team-code-names.po @@ -0,0 +1,104 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/team-code-names.po\n" +"X-Crowdin-File-ID: 1297\n" +"Language: vi_VN\n" + +#: ../../features/team-code-names.rst:5 +msgid "Team Code Names" +msgstr "" + +#: ../../features/team-code-names.rst:7 +msgid "Some tournaments use \"code names\" to obscure the institutional affiliations of teams. For example, rather than calling a team \"Harvard DK\", they would be presented in the draw as \"Butterfly\". A natural way to do this would be just to change the name of every team, but then the team's \"real name\" would be hidden from tournament staff, too." +msgstr "" + +#: ../../features/team-code-names.rst:13 +msgid "Instead, Tabbycat allows you to assign code names to teams, alongside their real names. This way, you can have code names show to participants, while real team names show in administrative views (*e.g.* allocating adjudicators). It also allows you to \"decode\" team names for elimination rounds or final tab release easily, without having to actually change every team's name." +msgstr "" + +#: ../../features/team-code-names.rst:19 +msgid "While the most frequently-used public views have been checked to ensure that they show only code names, not all views have been checked thoroughly. Please check views using demonstration data on a test site, configured in the same way that you would use it at your tournament, before using code names at a real tournament." +msgstr "" + +#: ../../features/team-code-names.rst:26 +msgid "Assigning code names" +msgstr "" + +#: ../../features/team-code-names.rst:28 +msgid "Most methods of importing teams, including the simple importer and the ``importtournament`` command, automatically assign code names to teams. The code name is the name of the emoji that is automatically assigned at the same time. For example, the team assigned 🦋 will be code-named \"Butterfly\"." +msgstr "" + +#: ../../features/team-code-names.rst:33 +msgid "If you wish to use your own code names, you need to set the \"code name\" field of each team. Here are two ways to do this:" +msgstr "" + +#: ../../features/team-code-names.rst:36 +msgid "**Edit Database area:** Enter the Edit Database area, and under **Participants > Teams**, click **Change**. Modify each team one by one, entering a new code name then saving." +msgstr "" + +#: ../../features/team-code-names.rst:39 +msgid "``importtournament`` **command:** If you imported a tournament from CSV files, you can just add a ``code_name`` column to your teams CSV file." +msgstr "" + +#: ../../features/team-code-names.rst:43 +msgid "Displaying code names" +msgstr "" + +#: ../../features/team-code-names.rst:45 +msgid "Code names are disabled by default; to enable then, go to **Setup > Configuration > Public Options**, and change the **Team code names** option. You can choose between the following options:" +msgstr "" + +#: ../../features/team-code-names.rst:49 +msgid "Do not use code names" +msgstr "" + +#: ../../features/team-code-names.rst:50 +msgid "Use real names everywhere, and show code names in tooltips" +msgstr "" + +#: ../../features/team-code-names.rst:51 +msgid "Use code names for public; real names with code names in tooltips for admins" +msgstr "" + +#: ../../features/team-code-names.rst:52 +msgid "Use code names for public; code names with real names in tooltips for admins" +msgstr "" + +#: ../../features/team-code-names.rst:53 +msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" +msgstr "" + +#: ../../features/team-code-names.rst:55 +msgid "\"Code names in tooltips\" means that the code name will display in the details box that appears when you roll over a team's name, and similarly for real names." +msgstr "" + +#: ../../features/team-code-names.rst:58 +msgid "One typical use is as follows:" +msgstr "" + +#: ../../features/team-code-names.rst:60 +msgid "Before the tournament, set the team code names setting to *Use code names for public; real names with code names in tooltips for admins*. This hides real names from anything participants would see, but continues to refer to teams in administrative views by real names." +msgstr "" + +#: ../../features/team-code-names.rst:64 +msgid "After the break is announced, set it to *Use real names everywhere, and show code names in tooltips*. This basically decodes all team names, while still allowing people to look up the (now former) code name of a team." +msgstr "" + +#: ../../features/team-code-names.rst:68 +msgid "If you're enabling team codes, you probably want to disable the **Show team institutions** option too." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/features/user-accounts.po b/docs/locale/vi/LC_MESSAGES/features/user-accounts.po new file mode 100644 index 00000000000..ea14fd68176 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/features/user-accounts.po @@ -0,0 +1,196 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/user-accounts.po\n" +"X-Crowdin-File-ID: 1299\n" +"Language: vi_VN\n" + +#: ../../features/user-accounts.rst:5 +msgid "User Accounts" +msgstr "" + +#: ../../features/user-accounts.rst:7 +msgid "For obvious reasons, user logins are required to data entry and administrative functions. Conceptually, there are four levels of access:" +msgstr "" + +#: ../../features/user-accounts.rst:14 +msgid "Access" +msgstr "" + +#: ../../features/user-accounts.rst:15 +msgid "Should be used by" +msgstr "" + +#: ../../features/user-accounts.rst:16 +msgid "Grants access to" +msgstr "" + +#: ../../features/user-accounts.rst:17 +msgid "Is capable of" +msgstr "" + +#: ../../features/user-accounts.rst:19 +msgid "Public" +msgstr "" + +#: ../../features/user-accounts.rst:20 +msgid "The public" +msgstr "" + +#: ../../features/user-accounts.rst:21 +msgid "Publicly available information." +msgstr "" + +#: ../../features/user-accounts.rst:22 +msgid "Viewing things, and submitting new ballots/feedback if electronic submission is permitted by the tournament." +msgstr "" + +#: ../../features/user-accounts.rst:24 +msgid "Assistant" +msgstr "" + +#: ../../features/user-accounts.rst:25 +msgid "Data entry helpers" +msgstr "" + +#: ../../features/user-accounts.rst:26 +msgid "The assistant area" +msgstr "" + +#: ../../features/user-accounts.rst:27 +msgid "Entering, confirming and printing ballots and feedback, checking in ballots and people, and displaying the draw." +msgstr "" + +#: ../../features/user-accounts.rst:29 +msgid "Superuser" +msgstr "" + +#: ../../features/user-accounts.rst:30 +msgid "Chief adjudicators" +msgstr "" + +#: ../../features/user-accounts.rst:31 +msgid "The administrator and assistant areas" +msgstr "" + +#: ../../features/user-accounts.rst:32 +msgid "Generating draws, allocating adjudicators and venues, and editing ballots, feedback and adjudicator scores." +msgstr "" + +#: ../../features/user-accounts.rst:34 +msgid "Staff and superuser" +msgstr "" + +#: ../../features/user-accounts.rst:35 +msgid "Tab director" +msgstr "" + +#: ../../features/user-accounts.rst:36 +msgid "The administrator, assistant and Edit Database areas" +msgstr "" + +#: ../../features/user-accounts.rst:37 +msgid "Editing the database directly." +msgstr "" + +#: ../../features/user-accounts.rst:39 +msgid "If a user account on the tab system belongs to someone who is also a participant in the tournament (*e.g.*, a chief adjudicator), these two capacities are completely separate. User accounts are only used to regulate access to administrative functions. Tabbycat doesn't know about any relationship between user accounts, and who is participating in the tournament." +msgstr "" + +#: ../../features/user-accounts.rst:42 +msgid "Account roles" +msgstr "" + +#: ../../features/user-accounts.rst:44 +msgid "You should create an account for each person who needs to access the tab system. When you create an account in the Edit Database area, there are checkboxes for **Superuser status** and **Staff access**. Superusers have access to the administrator area, and staff have access to the Edit Database area. You should grant permissions as follows:" +msgstr "" + +#: ../../features/user-accounts.rst:46 +msgid "Tab directors should get both superuser and staff status." +msgstr "" + +#: ../../features/user-accounts.rst:47 +msgid "Chief adjudicators and their deputies should get superuser status, but not staff status." +msgstr "" + +#: ../../features/user-accounts.rst:48 +msgid "Tab assistants (helping only with data entry) should get neither superuser nor staff status." +msgstr "" + +#: ../../features/user-accounts.rst:50 +msgid "Tournament participants (other than tab staff) do not need an account. Everything they need to know can be accessed without an account. If you're using electronic ballots or electronic feedback, they access these using a URL that only they know (see :ref:`private-urls`)." +msgstr "" + +#: ../../features/user-accounts.rst:52 +msgid "When doing data entry, users with superuser status should use the **assistant area**. The administrator area is intended for managing the tournament, and doesn't include someand should **not** in general be used for data entry. Specifically, the administrator area lacks checks that are important for data integrity assurance. It should be used only to override the normal :ref:`data entry ` procedure, for example, to unconfirm or modify a ballot." +msgstr "" + +#: ../../features/user-accounts.rst:54 +msgid "The **Edit Database** interface should not be used except where it is actually necessary. There are a few functions which require this, but as a principle, it shouldn't be used as a matter of course." +msgstr "" + +#: ../../features/user-accounts.rst:56 +msgid "In theory, you could grant an account staff status but not superuser status. But then they'd be allowed to edit the database, but not run the tournament, which would be weird." +msgstr "" + +#: ../../features/user-accounts.rst:59 +msgid "Adding accounts" +msgstr "" + +#: ../../features/user-accounts.rst:61 +msgid "To add an account:" +msgstr "" + +#: ../../features/user-accounts.rst:63 +msgid "Go to the Edit Database area of the site." +msgstr "" + +#: ../../features/user-accounts.rst:65 +msgid "Under **Authentication and Authorization**, click the **Add** link next to **Users**." +msgstr "" + +#: ../../features/user-accounts.rst:67 +msgid "Ask the user to enter a username, password and possibly email address." +msgstr "" + +#: ../../features/user-accounts.rst:69 +msgid "Only they should know what the password is." +msgstr "" + +#: ../../features/user-accounts.rst:70 +msgid "If you're hosting on the internet, all passwords should be at least moderately strong!" +msgstr "" + +#: ../../features/user-accounts.rst:71 +msgid "Passwords are not stored as raw passwords, so you can't figure out what their password is." +msgstr "" + +#: ../../features/user-accounts.rst:72 +msgid "The email address is optional." +msgstr "" + +#: ../../features/user-accounts.rst:73 +msgid "This email address is only used to reset their password if they forget it, and has nothing to do with the email address that Tabbycat uses to send emails to tournament participants (*e.g.* private URL links)." +msgstr "" + +#: ../../features/user-accounts.rst:75 +msgid "If they are being assigned superuser and/or staff status, check the relevant boxes." +msgstr "" + +#: ../../features/user-accounts.rst:77 +msgid "Click \"Save\" or \"Save and add another\"." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/features/venue-constraints.po b/docs/locale/vi/LC_MESSAGES/features/venue-constraints.po new file mode 100644 index 00000000000..f52b27a842f --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/features/venue-constraints.po @@ -0,0 +1,168 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/features/venue-constraints.po\n" +"X-Crowdin-File-ID: 1301\n" +"Language: vi_VN\n" + +#: ../../features/venue-constraints.rst:5 +msgid "Venue Constraints" +msgstr "" + +#: ../../features/venue-constraints.rst:7 +msgid "Tabbycat supports a basic form of venue constraints. A **venue constraint** is a requirement that a particular **team, adjudicator, institution** or **division** be assigned to a venue in a particular **venue category**. Typical uses would include:" +msgstr "" + +#: ../../features/venue-constraints.rst:12 +msgid "Meeting venue accessibility requirements of particular teams (*e.g.* step-free access)" +msgstr "" + +#: ../../features/venue-constraints.rst:14 +msgid "Placing adjudication core and tab team members close to the tab room" +msgstr "" + +#: ../../features/venue-constraints.rst:15 +msgid "Keeping all debates in a division in one location" +msgstr "" + +#: ../../features/venue-constraints.rst:17 +msgid "Constraints apply to **venue categories**, not individual venues. That is, you specify that (say) a team should be given a venue from a particular *list* of venues. Of course, it's permissible for a venue category to have only one venue in it." +msgstr "" + +#: ../../features/venue-constraints.rst:22 +msgid "The algorithm used to satisfy venue constraints is not guaranteed to be optimal. In some rare cases, it may propose an allocation that fails some constraints, even though some other allocation would have satisfied all (or more) constraints. In almost all practical circumstances, however, it should work, and save human effort (and time) in specially allocating rooms." +msgstr "" + +#: ../../features/venue-constraints.rst:29 +msgid "Adding venue categories" +msgstr "" + +#: ../../features/venue-constraints.rst:31 +msgid "Before you add venue constraints, you first need to add venue categories. Each venue category is a list of venues, typically satisfying a particular need. For example, you might have a category for each of the following:" +msgstr "" + +#: ../../features/venue-constraints.rst:35 +msgid "Venues with step-free access" +msgstr "" + +#: ../../features/venue-constraints.rst:36 +msgid "Venues that are close to general assembly (the briefing room)" +msgstr "" + +#: ../../features/venue-constraints.rst:37 +msgid "Venues that are close to the tab room" +msgstr "" + +#: ../../features/venue-constraints.rst:38 +msgid "Venues that are, or venues that are not, being live-streamed" +msgstr "" + +#: ../../features/venue-constraints.rst:40 +msgid "Each venue can be in as many categories as you like (or none at all)." +msgstr "" + +#: ../../features/venue-constraints.rst:44 +msgid "To add or edit venue categories, go to the **Import Data** area (under Setup) then select **Add/Edit Venue Categories**. Note that this page will show all existing Venue Categories first before showing the blank forms that allow you to create new categories. Give your category a name (like \"Step-free access\"), assign it some venues, then click the \"Save Venue Categories\" button at the bottom of the page." +msgstr "" + +#: ../../features/venue-constraints.rst:47 +msgid "Alternately you can add or edit a venue category by going to the **Edit Database** area (under Setup), scroll down to \"Venues\" and click \"Venue categories\". Then click the **+ Add venue category** button in the top-right of the page or click an existing item." +msgstr "" + +#: ../../features/venue-constraints.rst:50 +msgid "Adding venue constraints" +msgstr "" + +#: ../../features/venue-constraints.rst:52 +msgid "To add or edit venue constraints, go to the **Import Data** area (under Setup) then select **Add/Edit Venue Constraints**. Note that this page will show all existing Venue Constraints first before showing the blank forms that allow you to create new categories. Note that the \"Constrainee ID\" field should let you select from a dropdown or type in the name of an adjudicator, institution, or team (rather than having to lookup the exact ID)." +msgstr "" + +#: ../../features/venue-constraints.rst:57 +msgid "Alternately you can add or edit a venue category by going to the **Edit Database** area (under Setup), scroll down to \"Venues\" and click \"Venue constraints\". Then click the **+ Add venue category** button in the top-right of the page or click an existing item." +msgstr "" + +#: ../../features/venue-constraints.rst:59 +msgid "For each constraint, you need to specify four things:" +msgstr "" + +#: ../../features/venue-constraints.rst:62 +msgid "**Category**" +msgstr "" + +#: ../../features/venue-constraints.rst:62 +msgid "The venue category to which the subject of this constraint should be locked." +msgstr "" + +#: ../../features/venue-constraints.rst:65 +msgid "**Priority**" +msgstr "" + +#: ../../features/venue-constraints.rst:65 +msgid "This is a number used to resolve conflicts between constraints. Constraints with higher priority (greater number) take precedence over those with lower priority. If none of your constraints will ever conflict, then the priority is arbitrary (but it must still be specified)." +msgstr "" + +#: ../../features/venue-constraints.rst:72 +msgid "**Subject content** **type**" +msgstr "" + +#: ../../features/venue-constraints.rst:72 +msgid "The type of subject to which this constraint relates: adjudicator, team, institution or division." +msgstr "" + +#: ../../features/venue-constraints.rst:75 +msgid "**Subject ID**" +msgstr "" + +#: ../../features/venue-constraints.rst:75 +msgid "Which adjudicator, team, institution or division the constraint relates to. The textbox takes a number (the ID of the object in the database), but you can search for the subject by clicking on the search icon next to it. This will bring up a table of objects of the type specified in \"subject content type\" for you to choose from. (You need to select the subject content type first.)" +msgstr "" + +#: ../../features/venue-constraints.rst:86 +msgid "Applying venue constraints" +msgstr "" + +#: ../../features/venue-constraints.rst:88 +msgid "If you don't have any venue constraints for adjudicators, venue constraints are applied automatically when the draw is generated." +msgstr "" + +#: ../../features/venue-constraints.rst:91 +msgid "However, if you have one or more venue constraints for adjudicators, it's not possible to take adjudicator venue constraints into account during draw generation, because the adjudicator allocation isn't known then. You'll need to run the venue allocation yourself after you've allocated adjudicators." +msgstr "" + +#: ../../features/venue-constraints.rst:96 +msgid "To run venue allocation, go to **Edit Venues** (while looking at the draw), then in the screen where you can edit venues, click the **Auto Allocate** button. You can also do this at any other point (say, after adding a new venue constraint) if, for whatever reason, you would like to re-run the venue allocation algorithm." +msgstr "" + +#: ../../features/venue-constraints.rst:102 +msgid "If a venue constraint couldn't be met, a message will show in the \"conflicts/flags\" column of the draw. A constraint might not be met for a number of reasons:" +msgstr "" + +#: ../../features/venue-constraints.rst:106 +msgid "It could be that constraints of different parties (say, one team and one adjudicator) conflicted, so only one could be fulfilled." +msgstr "" + +#: ../../features/venue-constraints.rst:108 +msgid "It could be that all available rooms in the relevant category were already taken by other, higher-priority constraints." +msgstr "" + +#: ../../features/venue-constraints.rst:110 +msgid "It could just be one of those edge cases that's too hard for the naïve algorithm to handle." +msgstr "" + +#: ../../features/venue-constraints.rst:113 +msgid "Currently, Tabbycat doesn't tell you which of these happened, so if the venue allocation fails to meet all your constraints, it's on you to figure out why. In most scenarios, we imagine you'll have few enough constraints that this will be obvious; for example, if the chief adjudicator is judging a team with accessibility requirements, it might be obvious that the latter's constraint took priority. We might in future add support for more useful guidance on conflicting constraints, but we currently consider this to be of low priority." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/guide/comparisons.po b/docs/locale/vi/LC_MESSAGES/guide/comparisons.po new file mode 100644 index 00000000000..c12ee2abd77 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/guide/comparisons.po @@ -0,0 +1,338 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/comparisons.po\n" +"X-Crowdin-File-ID: 1303\n" +"Language: vi_VN\n" + +#: ../../guide/comparisons.rst:5 +msgid "Tab Software Comparisons" +msgstr "" + +#: ../../guide/comparisons.rst:7 +msgid "If you're reading this, you're probably interested in using Tabbycat, and wondering how it compares to other options. Perhaps you're a long-time user of another tab system, and wondering what Tabbycat can do better. This page is our effort to help answer this. Tabbycat's been around since 2010, but since BP support is a recent addition (2017), we thought it would be useful to outline the differences between Tabbycat and other BP software." +msgstr "" + +#: ../../guide/comparisons.rst:9 +msgid "Obviously, this page is written by the developers of Tabbycat, and naturally, we have our biases. But rarely is there a single best option for everyone and every situation: different tab programs imagine the tabbing process in a different ways and have made unique trade-offs in their development process and design decisions. So we've tried to be as fair and accurate as we can, and we've consulted experienced tab directors (other than us!) and chief adjudicators to help provide a balanced overview." +msgstr "" + +#: ../../guide/comparisons.rst:11 +msgid "At present, this guide just focuses on the major options available for the British Parliamentary format, although we'd like to expand this to incorporate the other formats that Tabbycat supports at some point in the future. As with all of our documentation, the source for this page `is on GitHub `_, and we welcome feedback and contributions." +msgstr "" + +#: ../../guide/comparisons.rst:14 +msgid "On feature lists" +msgstr "" + +#: ../../guide/comparisons.rst:16 +msgid "In the first draft of this document, we had a table that listed every feature we could think of, along with which software does and doesn't support it. This ended up not being a great idea, for a couple of reasons." +msgstr "" + +#: ../../guide/comparisons.rst:18 +msgid "Firstly, the largest feature disparities are for relatively niche features. All of the software discussed can do the basics necessary to run a tournament: generate draws, allocate adjudicators, enter results, etc. As a result, we will — like a good whip speech — be comparative and note key feature disparities when discussing each alternative software directly." +msgstr "" + +#: ../../guide/comparisons.rst:20 +msgid "Secondly, we felt that the 'checklist' approach to comparing tab software would do a disservice to the reasons you would actually choose one software over another. Except where a niche capability is essential, raw technical specifications rarely define the experience of using a product such as a phone, a car, or indeed, tabbing software. With Tabbycat, we've spent eight years continuously refining the tabbing workflow and smoothing out rough edges, and we believe you'll find the result extremely user-friendly and robust. As always, the best way to check this out is by :ref:`setting up a demo site and taking it for a spin `!" +msgstr "" + +#: ../../guide/comparisons.rst:23 +msgid "Comparison with Tabbie2" +msgstr "" + +#: ../../guide/comparisons.rst:26 +msgid "Centralised site vs individual sites" +msgstr "" + +#: ../../guide/comparisons.rst:28 +msgid "Tabbie2 and Tabbycat are both internet-based systems. Tabbie2 hosts all tournaments on a single site. However, when using Tabbycat, each tournament or organisation sets up its own site. Each model has its advantages and disadvantages in different areas:" +msgstr "" + +#: ../../guide/comparisons.rst:30 +msgid "**User identification**. Tabbie2's centralised model allows for site-wide user accounts for all tournament participants. This means that they can use the same login information for all tournaments, and perform tasks such as submitting ballots and feedback through that unified account. If you're in an established circuit, most of your participants probably already have user accounts which are identified and collected (via e-mail addresses) during registration. If you're in a newer circuit, or one where Tabbie2 is rarely used, most of your participants will probably need to create an account — a process which Tabbie2 handles by e-mailing them a request to do so when that person is added to your tournament." +msgstr "" + +#: ../../guide/comparisons.rst:32 +msgid "In Tabbycat's decentralised model, there is no persistent 'account' for tournament participants on each tab site or across different tab sites. Indeed, the only people who can log in to the site are those who have been given accounts by the tab director, such as tab staff and members of the adjudication core." +msgstr "" + +#: ../../guide/comparisons.rst:34 +msgid "For secure e-ballot and e-feedback submissions, Tabbycat assigns a \"private URL\" to each adjudicator or team. This is essentially a password that allows a participant to only submit data that they should have access to in that specific tournament. This means participants don't need user accounts and you don't need to collect user account information; however if your tournament uses e-ballots or e-feedback you will need to distribute those private URLs to participants. Tabbycat can e-mail these to participants for you, or print them to give them to participants, or you could distribute the URLs using your own means." +msgstr "" + +#: ../../guide/comparisons.rst:36 +msgid "**Control over data**. Some participant information in Tabbie2 is shared between tournaments, like their names and conflicts (discussed below). This means participants can manage it directly through their user accounts, without needing to go through you. On the other hand, this requires your participants to co-operate in keeping their accounts up to date, and to provide the correct e-mail address during registration (you'd be surprised how many don't). Furthermore, participants may look to you for assistance, and your ability to help is limited to directing them through Tabbie2 channels—easy enough if they forget their password, but not so much if they forget their account's e-mail address." +msgstr "" + +#: ../../guide/comparisons.rst:38 +msgid "Because each Tabbycat site is its own, you'll need to collect and import all participant details yourself. This might seem like more to do, but it also means there's no need to match your data to existing accounts, which can be time-consuming and prone to participant error. It also means you can freely change data, for example, to correct a participant's name or institution, or to add data like conflicts on an ad-hoc basis." +msgstr "" + +#: ../../guide/comparisons.rst:40 +msgid "**Data privacy**. Conflicts are typically entered into the tab, and are sensitive information. Tabbie2's centralisation allows for conflicts to be self-nominated by users and stored in their user accounts. This, in theory, saves the need for users to report conflicts to tab directors and other tournament staff. In practice, however, only special \"super\" users on Tabbie2 have access to the stored conflicts of users (otherwise anyone could access a user's conflicts by creating a new tournament and adding that user as a participant), so many tournaments need to collect this information from participants anyway." +msgstr "" + +#: ../../guide/comparisons.rst:42 +msgid "Tabbycat's decentralised model means that no-one will have access to conflict information except for the tab staff of each individual instance of Tabbycat. Unlike Tabbie2, Tabbycat's developers do not have any access to your tournament's data — conflicts or otherwise. However, to help us continually improve the software, Tabbycat does send error reports to its developers if there is a serious bug or crash in the code, which could potentially contain confidential information depending on which page triggered the report. As a result of Tabbycat's decentralised data storage, each tournament does need to collect and enter conflicts as part of their registration process." +msgstr "" + +#: ../../guide/comparisons.rst:44 +msgid "**When things go wrong**. In our view, this is probably the most important factor. Obviously, we all hope you never have to fix things. But no software is perfect, and software developed by volunteers in their spare time (as both Tabbie2 and Tabbycat are) is especially imperfect. On occasion, glitches or edge cases occur, and fixing them requires you to directly edit the offending data in the database. Being able to do this without assistance can be the difference between a delay of minutes and a delay of hours." +msgstr "" + +#: ../../guide/comparisons.rst:46 +msgid "In Tabbycat, because it's your site, you have full control of the database, and can edit it through Tabbycat's \"Edit Database\" area. This allows you to fix things (or break things, if you're not careful!). Tabbie2's centralisation prevents this—for obvious reasons, only Tabbie2's developers have direct database access, which makes their intervention necessary if direct database access is required to resolve a problem." +msgstr "" + +#: ../../guide/comparisons.rst:49 ../../guide/comparisons.rst:138 +msgid "Running your tournament" +msgstr "" + +#: ../../guide/comparisons.rst:51 +msgid "Tabbie2 and Tabbycat have broadly similar workflows for running rounds; at least on paper. Key differences are discussed below:" +msgstr "" + +#: ../../guide/comparisons.rst:53 +msgid "**Data import**. Tabbie2 takes CSV files for import. Tabbycat has a CSV file importer, but it's (for now) only accessible through a command-line interface and is only expected to be used for large tournaments by experienced tab directors. As a more user-friendly alternative, Tabbycat also has an import wizard that's designed to make it easy to copy and paste CSV data. This works well for small and medium scale tournaments, but is cumbersome for large ones." +msgstr "" + +#: ../../guide/comparisons.rst:55 +msgid "**Public interface**. Tabbycat can optionally publish the entire draw, as well as current team point standings and results of previous rounds, online. Tabbie2 shows to a logged-in user information about the debate that user is in for that round, but doesn't allow people to check up on people who are not themselves." +msgstr "" + +#: ../../guide/comparisons.rst:57 +msgid "**Position rotation**. Tabbie2 uses an algorithm known as the \"Silver Line algorithm\", which keeps swapping pairs of teams until no further improvement is found. Because it stops at any 'local optimum', this method isn't guaranteed to be the best possible distribution of positions, and for large tournaments it often isn't. Tabbycat instead uses the `Hungarian algorithm `_, an well-known algorithm that finds the (globally) optimal allocation of positions. (One might describe this algorithm, in technical terms, as 'powerful'.) Tabbycat also produces a position balance report, so that in every round you can see which teams have unbalanced position histories." +msgstr "" + +#: ../../guide/comparisons.rst:59 +msgid "**Venue allocations**. Both Tabbie2 and Tabbycat allow for debate venues to be automatically assigned and manually edited. Tabbycat also allows you to specify 'venue constraints' that can automatically match particular participants with their accessibility requirements, or alternatively allow for tournament staff, such as a convenor or chief adjudicator, to be allocated rooms close to the briefing hall or tab room." +msgstr "" + +#: ../../guide/comparisons.rst:61 +msgid "**Ballot entry**. Both Tabbie2 and Tabbycat support entering ballots online ('e-ballots') and entering ballots from paper from the tab room. Tabbie2 was built with e-ballots in mind, while Tabbycat was originally built for tab room staff, and the ballot entry paradigms reflect that. Both are flexible, just a little different—the best way to understand the difference is to try a demo of each. Also, Tabbycat takes note of the order in which speakers in a team spoke (i.e. who was PM and who was DPM), whereas Tabbie2 just records scores." +msgstr "" + +#: ../../guide/comparisons.rst:63 +msgid "As discussed earlier in *User identification*; Tabbie2's e-ballots are tied to unified user accounts, whereas Tabbycat's e-ballots are tied to per-tournament and per-adjudicator 'private URLs'." +msgstr "" + +#: ../../guide/comparisons.rst:65 +msgid "**Break and speaker categories**. Tabbie2 has ESL, EFL and novice markers, which you can enable in a tournament's settings. Tabbycat supports user-defined break and speaker categories, so if your tournament has ESL, EFL, novice or any other form of category, you can define and customise those categories as needed." +msgstr "" + +#: ../../guide/comparisons.rst:67 +msgid "**Adjudicator allocation algorithm**. Both Tabbie2 and Tabbycat use an algorithm to recommend an initial allocation of adjudicators to debates. In principle, they both work by assigning \"costs\" to allocations, and trying to find the minimum-cost assignment. Some notable differences:" +msgstr "" + +#: ../../guide/comparisons.rst:69 +msgid "Tabbie2 uses simulated annealing, which is not guaranteed to be optimal and technically needs to be tuned to be effective (which you're probably not doing). Tabbycat uses the Hungarian algorithm, which guarantees an optimal solution." +msgstr "" + +#: ../../guide/comparisons.rst:70 +msgid "On the other hand, the Hungarian algorithm can't account for relationships between adjudicators on a panel, so adjudicator-adjudicator conflicts aren't considered by Tabbycat's algorithm (though they are highlighted in the interface)." +msgstr "" + +#: ../../guide/comparisons.rst:71 +msgid "Tabbycat's cost function is simpler and more naive. On the other hand, Tabbie2's is more complicated and can be rather opaque (even if you read its source code)." +msgstr "" + +#: ../../guide/comparisons.rst:72 +msgid "Tabbie2 allows for single-gender panels to be charged an additional cost. Tabbycat's algorithm doesn't, but the interface does provide a way to easily check for this visually." +msgstr "" + +#: ../../guide/comparisons.rst:73 +msgid "Tabbie2 automatically calculates the importance of a room based on its bracket (team points). In Tabbycat, debate importance can be assigned for all debates automatically based on on a room's bracket or the quantity of live break categories inside it. Instead of — or subsequent to — automatic classification any importance value can be manually tweaked as desired. These options mean there is a greater flexibility in determining which debates the allocation algorithm should prioritise." +msgstr "" + +#: ../../guide/comparisons.rst:75 +msgid "**Adjudicator allocation interface**. While both interfaces use drag and drop interactions, and allow for color highlights to help identify adjudicators by gender, region, and feedback rating, Tabbycat's allocation interface was designed to be usable on both small screens and projectors, and has a number of extra features that can help inform allocations. These features include:" +msgstr "" + +#: ../../guide/comparisons.rst:77 +msgid "Clashes are shown directly in the interface when they apply, but dragging an adjudicator will also show you the potential conflicts that would occur if they were relocated in a new panel. This can make it much easier to avoid creating new clashes when shifting adjudicators around the draw." +msgstr "" + +#: ../../guide/comparisons.rst:78 +msgid "An inline display of an estimate of whether a team is 'live' for each of their break categories — i.e. whether they are 'safe' (have enough points to break); 'dead' (cannot gain enough points to break); or 'live' (still in contention)." +msgstr "" + +#: ../../guide/comparisons.rst:79 +msgid "'History' conflicts (where an adjudicator has seen a team before, or previously was on a panel with another judge) are displayed so they can be avoided." +msgstr "" + +#: ../../guide/comparisons.rst:80 +msgid "Each adjudicator is present as occupying a particular position (chair, panellist, trainee) rather than having those positions calculated automatically." +msgstr "" + +#: ../../guide/comparisons.rst:81 +msgid "Chairs can be 'swapped' by dragging adjudicators on top of each other, and an 'unallocated' area can be used to view and store adjudicators that have not been allocated." +msgstr "" + +#: ../../guide/comparisons.rst:83 +msgid "**Adjudicator feedback customisation**. Both Tabbie2 and Tabbycat have built-in adjudicator feedback forms, and allow you to specify the questions on the feedback form. Notable differences:" +msgstr "" + +#: ../../guide/comparisons.rst:85 +msgid "Setting up questions is painless on neither system. Tabbycat requires you to use the Edit Database area; Tabbie2 makes you click through a slightly more opaque maze of pages and forms." +msgstr "" + +#: ../../guide/comparisons.rst:86 +msgid "Tabbycat allows for a richer range of types of questions than Tabbie2 does." +msgstr "" + +#: ../../guide/comparisons.rst:87 +msgid "Tabbie2 allows you to specify different questionnaires for team-on-chair, chair-on-panellist and panellist-on-chair. Tabbycat only differentiates between team-on-adjudicator and adjudicator-on-adjudicator." +msgstr "" + +#: ../../guide/comparisons.rst:88 +msgid "Tabbycat gives you more control over who is expected to submit feedback on whom; e.g. whether teams submit on panellists, and whether panellists submit on each other. In Tabbie2, you can effect this with blank questionnaires, but only for the three options listed above." +msgstr "" + +#: ../../guide/comparisons.rst:89 +msgid "Tabbycat can, optionally, automatically incorporate feedback into adjudicator scores using a naive weighted average with the adjudicator base score. This can be disabled by simply setting feedback weight to zero, as some adjudication cores prefer. Tabbie2 has no ability to automatically incorporate feedback." +msgstr "" + +#: ../../guide/comparisons.rst:90 +msgid "Tabbycat produces a \"shame list\" of unsubmitted feedback, which you can optionally publish on the public-facing site to try to incentivise submission." +msgstr "" + +#: ../../guide/comparisons.rst:92 +msgid "(How participants access adjudicator feedback submission is discussed in *User identification* above.)" +msgstr "" + +#: ../../guide/comparisons.rst:95 ../../guide/comparisons.rst:149 +msgid "Other considerations" +msgstr "" + +#: ../../guide/comparisons.rst:97 +msgid "**Offline availability**. If you like, you can also install Tabbycat on your own computer, rather than host it as website on a server. This means that you can use it offline. However installing Tabbycat in this manner will require the (at least brief) use of a command line interface." +msgstr "" + +#: ../../guide/comparisons.rst:99 +msgid "**Cost**. Tabbie2 is free to use. Tabbycat is free to use for not-for-profit, not-for-fundraising tournaments; tournaments for profit or fundraising must make a donation of A$1 per team. In addition, larger tournaments that run on Tabbycat's recommended web host (Heroku) may need to purchase an upgraded database service (the free tier has storage limits) which will cost around ~US$3 to use for the duration of a week-long tournament." +msgstr "" + +#: ../../guide/comparisons.rst:101 +msgid "**Documentation**. Tabbycat has `relatively extensive documentation `_ that can be useful for learning how to use a particular feature or understanding what is happening at a technical level." +msgstr "" + +#: ../../guide/comparisons.rst:103 +#, python-format +msgid "**Hosting location**. Tabbycat recommends using Heroku, an established cloud platform service for deploying web applications. Heroku is in turn hosted on Amazon Web Services (AWS). Both Heroku and AWS are highly reliable and widely used; downtime for both has historically been (at worst) less than 0.05% over an annual period. Tabbie2 is hosted on `Uberspace `_; a pay-what-you-want web hosting service. To the best of our knowledge, uptime statistics are not available." +msgstr "" + +#: ../../guide/comparisons.rst:105 +msgid "**Multi-format support**. If you are interested in tabbing both four- and two- team formats there may be some value in using and learning Tabbycat as it will let you use the same software in both settings." +msgstr "" + +#: ../../guide/comparisons.rst:108 +msgid "Comparison with Tournaman" +msgstr "" + +#: ../../guide/comparisons.rst:111 +msgid "Native app vs web app" +msgstr "" + +#: ../../guide/comparisons.rst:113 +msgid "The crucial strength — and limitation — of Tournaman is that it is a Windows desktop application. Naturally, being a desktop app limits the features it can offer, relative to web apps like Tabbycat or Tabbie2, since it can't offer any online access. On the other hand, working with a desktop app can often be simpler than a web app." +msgstr "" + +#: ../../guide/comparisons.rst:115 +msgid "**Installation**. You'll need to run (or emulate) a Windows machine to run Tournaman. Assuming you're using Windows, Tournaman's installation process is easy and familiar." +msgstr "" + +#: ../../guide/comparisons.rst:117 +#, python-format +msgid "Tabbycat has a simple one-click installation process if you're deploying online (:ref:`to Heroku `). However, if you want to run Tabbycat on your own computer rather than a website, this is substantially more complicated. Local installations of Tabbycat work by having your computer emulate a web server, and while we've tried to make this as accessible as possible, a technical background is definitely helpful for this. Using our :ref:`Docker-based method ` should be simple, but it's not 100% reliable, and if it fails it can be difficult to figure out why. If internet access is available, we recommend running Tabbycat on Heroku." +msgstr "" + +#: ../../guide/comparisons.rst:119 +msgid "**Online features**. Because Tournaman runs fully offline, it naturally can't support many internet-based features: electronic ballots, online publication of draws and live team standings, and integrated tab release. Typically, if you wanted to publish anything online from Tournaman, you'd do so by publishing the files that Tournaman generates locally. In Tabbycat, all of these are built in, so there's a single website for all tab information." +msgstr "" + +#: ../../guide/comparisons.rst:121 +msgid "**Multi-user access**. Tournaman can be configured to allow networked ballot entry, but in order to set it up, you need to be comfortable with basic computer networking. This works best on small isolated networks that you control directly, e.g. a dedicated router set up in the tab room. It's not a great idea to set this up on computers connected to a university-wide network: many IT departments won't permit it, and even if they do, it's insecure, since anyone on the network can access it." +msgstr "" + +#: ../../guide/comparisons.rst:123 +msgid "Tournaman's multi-user access is designed primarily to allow tab assistants to enter data. Key administrative tasks, such as draw generation and adjudicator allocation, must still be done on the computer on which Tournaman is installed. In contrast, web-based systems like Tabbycat and Tabbie2 allow users to login from any internet-connected device to access the functionality permitted by their account. This is often extremely useful if, say, you want to log in to a lectern computer, or have tab assistants work on mobile devices that they have with them." +msgstr "" + +#: ../../guide/comparisons.rst:125 +msgid "If you choose to install Tabbycat offline (rather than on Heroku), it's also possible to have the computer on which the local installation resides serve the website to other computers on the same network. This then permits anyone on the same network to access the \"local\" installation as if it were hosted on the internet. However, like Tournaman, such a configuration requires at least basic networking experience, and for security reasons is only advisable on small isolated networks that you control." +msgstr "" + +#: ../../guide/comparisons.rst:127 +msgid "**Backups and portability**. Both Tournaman and Tabbycat (unlike Tabbie2) store data in a way that is completely accessible to you. Tournaman does this by saving files on your computer's hard drive, while Tabbycat stores data in a SQL database that belongs to you." +msgstr "" + +#: ../../guide/comparisons.rst:129 +msgid "It should be emphasized that in both Tournaman and Tabbycat, actually needing to revert to a backup is extremely rare. Almost always, any glitch or error that breaks the tab can be resolved by editing data directly, without needing to \"roll back\" to a previous state. In Tournaman, this is done by editing the files that it writes to your hard drive (they're just XML files). In Tabbycat, this is done through the \"Edit Database\" area." +msgstr "" + +#: ../../guide/comparisons.rst:131 +msgid "Tournaman's storage of data as XML files makes backups easy, although effort should be made to have backups stored on other computers or the cloud (e.g. on Dropbox) in case the tab computer breaks or is lost. Restoring data from those backups (or transferring the tab to a different computer) is typically a simple process of copying the files back to the original location." +msgstr "" + +#: ../../guide/comparisons.rst:133 +msgid "As for Tabbycat, in online installations, backups can be taken easily using Heroku's `database backup capability `_. However, restoring backups requires you to have the Heroku command line interface installed. In offline installations, PostgreSQL's \"dump\" and \"restore\" commands are recommended, and may require some perseverance to get going reliability, particularly if you don't have prior SQL experience." +msgstr "" + +#: ../../guide/comparisons.rst:135 +msgid "Generally there is no need for data portability when working with an online copy of Tabbycat — the website can be accessed anywhere. However if working with an offline/local copy, a tab can be transferred between machines by creating a backup of the database and restoring it to the other machine's database (doing so requires technical knowledge)." +msgstr "" + +#: ../../guide/comparisons.rst:140 +msgid "**Adjudicator feedback**. Tournaman lets you assign judges rankings, however it does not directly manage or assist the process of collecting judge feedback. As such tab directors generally need to run a parallel feedback system, and then manually copy over changes to an adjudicator's ranking into Tournaman itself. In contrast, Tabbycat has integrated methods for collecting judge feedback that allow it to be more easily issued, collected, viewed, and automatically translated into modifications to an adjudicator's rank." +msgstr "" + +#: ../../guide/comparisons.rst:142 +msgid "**Adjudicator allocation**. Tournaman has a fixed judge ranking scale and (from what we understand) has a relatively fixed procedure for allocating panels according to their absolute ranks. We are unsure about the exact mechanics of how this works, but broad details are `available here `_." +msgstr "" + +#: ../../guide/comparisons.rst:144 +msgid "As with the discussion of allocation interfaces vis-à-vis Tabbie2, there are a number of features in the Tabbycat allocation interface that mean it is more easily used in a collaborative setting and can display additional information to inform draws." +msgstr "" + +#: ../../guide/comparisons.rst:146 +msgid "**Flexibility in draw rules**. As we've said, all major tab systems are WUDC-compliant. But if you want to deviate from WUDC rules, Tournaman has a few more options. Whereas Tabbycat allows you to use intermediate brackets (rather than pull-ups), Tournaman allows you to sacrifice power-pairing integrity for position balance (though this generally isn't necessary to achieve position balance), fold within brackets and avoid teams hitting their own institution. On the other hand, Tabbycat allows you to tune how position balance trades off between teams (which the WUDC constitution doesn't precisely specify)." +msgstr "" + +#: ../../guide/comparisons.rst:151 +msgid "**Stability and development**. Tournaman has been in use for over a decade and is generally considered to be stable and reliable. However, new features are relatively rarely added, and its being a native app means that it doesn't boast as many features as Tabbycat or Tabbie2." +msgstr "" + +#: ../../guide/comparisons.rst:153 +msgid "**Cost**. Tournaman is free to use. Tabbycat is free to use for not-for-profit, not-for-fundraising tournaments; tournaments for profit or fundraising must make a donation of A$1 per team. In addition, larger tournaments that run on Tabbycat's recommended web host (Heroku) may need to purchase an upgraded database service (the free tier has storage limits) which will cost around ~US$3 to use for the duration of a week-long tournament." +msgstr "" + +#: ../../guide/comparisons.rst:155 +msgid "**Availability of source code**. Tournaman's code is closed-source, meaning it is not publicly available. If you do not have any coding experience this is probably not relevant to you, but if you do, having access to the source of Tabbycat can help you understand how the program works and customise it as needed." +msgstr "" + +#: ../../guide/comparisons.rst:158 +msgid "Comparison with hand tabbing" +msgstr "" + +#: ../../guide/comparisons.rst:160 +msgid "Hand tabbing is easy, until it isn't. Traditionally, using a spreadsheet has been the go-to option for smallish tournaments because, hey, you're pretty handy with Excel, right? Making draws in spreadsheets (or on paper) seems like a pretty approachable task; ultimately it's all cells and formulae and numbers unlike the more arcane underpinnings of actual tab software." +msgstr "" + +#: ../../guide/comparisons.rst:162 +msgid "However, hand tabbing does require you to have a good working knowledge of how your format's rules work and how your spreadsheet software of choice can be made to work them. That process might be easy for you, or it might not be. But, either way, we'd like to think that Tabbycat offers a better alternative to hand-tabbing; regardless of how well you can actually hand-tab. The setup costs of creating a copy of Tabbycat are pretty low and you can speed through the process of draw creation, adjudicator allocation, and result entry at a pace. It's still not going to be as fast a spreadsheet for a small tournament, but we think it's getting pretty close. And in exchange for a little speed you get a much stronger guarantee of your draws being correct, options for online data entry, a more comprehensive and shareable final tab, and much more. Give it a shot!" +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/guide/scaling.po b/docs/locale/vi/LC_MESSAGES/guide/scaling.po new file mode 100644 index 00000000000..583f5a0134a --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/guide/scaling.po @@ -0,0 +1,252 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/scaling.po\n" +"X-Crowdin-File-ID: 1305\n" +"Language: vi_VN\n" + +#: ../../guide/scaling.rst:5 +msgid "Scaling & Performance on Heroku" +msgstr "" + +#: ../../guide/scaling.rst:7 +msgid "If you expect your Tabbycat site to gain lots of traffic — either because it has lots of participants or will be followed by lots of people online — there are a number of strategies to ensure that it will remain fast despite this attention. This is typically only necessary for very large tournaments that will display information on the public-facing version of your Tabbycat site; and even then only minor amounts of 'scaling' are needed at particular moments. However, if your site does become slow you want to know what to do and how to do it ahead of time in order to prevent disruptions." +msgstr "" + +#: ../../guide/scaling.rst:9 +msgid "By default, a Tabbycat installation runs on Heroku's free tier. This is a resource-constrained environment and improving performance will typically require paying for higher levels of Heroku services. These services are billed on a per-minute (not monthly) basis, meaning that if you make use of any upgrades mentioned below, you will only be billed for the actual duration used — i.e. if an upgrade is listed at $100/month, but you only use it for 4 hours, the final bill will be around $0.50. As such you can make use of high-performing resources just when they are needed, without needing to pay the full monthly price to maintain the resource indefinitely." +msgstr "" + +#: ../../guide/scaling.rst:13 +msgid "This page was largely written before a number of improvements in the ``2.2`` release of Tabbycat that have significantly increased traffic capacity. Its recommendations may be overly cautious given these improvements." +msgstr "" + +#: ../../guide/scaling.rst:17 +msgid "Scaling for performance reasons is a separate issue to that of `upgrading the database capacity `_ of your tab which just provides the ability to store data. That said, typically only tournaments that are large enough to need an upgraded database will be the ones that ever need to consider scaling for performance anyway." +msgstr "" + +#: ../../guide/scaling.rst:20 +msgid "Introduction to Scaling" +msgstr "" + +#: ../../guide/scaling.rst:22 +msgid "Heroku's primary resource is that of a 'dyno'. Each dyno can be thought of as running a copy of Tabbycat. Following the 'many hands make light work' principle, running a greater number of dynos will generally improve the ability of your site to serve lots of pages simultaneously because traffic is divided up amongst all of the available dynos. In normal circumstances most Tabbycat pages on the public site are served by Heroku in under a second; however they can take noticeably longer than that when the quantity of incoming traffic exceeds the capacity of the existing dyno(s) to serve it. In such cases the delay accrues because the excess page loads need to first wait for an available dyno in addition to the standard wait for a page to be processed and transferred to the user." +msgstr "" + +#: ../../guide/scaling.rst:24 +msgid "Thus scaling is almost always a process of increasing *throughput* in order to decrease the chance that any page load needs to wait in order to be served by a dyno. On the flip side, having extra dynos or upgraded dynos won't make Tabbycat itself run any faster in general — they are essentially wasted unless there is sufficient large amounts of traffic that a single dyno cannot serve all of it without creating a queue." +msgstr "" + +#: ../../guide/scaling.rst:26 +msgid "Dynos can be scaled by adding more dynos ('horizontally') or by adding upgraded dynos ('vertically'). In general, horizontal scaling should be the first and most effective strategy — the problem traffic causes is due to *concurrency* or lots of people loading lots of pages all at once. The traffic on Tabbycat sites typically fluctuates a lot, with moments of high intensity clustering around draw releases, round advances, and the final tab release. As such you generally only need to scale your dynos for very short periods of time." +msgstr "" + +#: ../../guide/scaling.rst:28 +msgid "In order to increase the number of dynos you first need to be using at least the **Standard 1X** level of dyno. Once set the Heroku Dashboard will show you a slider that can be used to increase the dyno count. While dynos higher than the **Standard 1X** level may help serve pages a tiny bit faster, having *more* dynos is far more effective than having *upgraded* dynos. Upgrading beyond **Standard 1X** is generally only required if you need additional memory (as described below) or want to use auto-scaling (also described below)." +msgstr "" + +#: ../../guide/scaling.rst:32 +msgid "There should be no need to increase the number of 'worker' dynos. While 'web' dynos are responsible for serving traffic, the worker only handles a few rare tasks such as serving email and creating allocations." +msgstr "" + +#: ../../guide/scaling.rst:34 +msgid "At large tournaments you should always upgrade your existing '**Free**' dyno to a '**Hobby**'-level dyno. This upgrade is crucial as it will enable a \"Metrics\" tab on your Heroku dashboard that provides statistics which are crucial to understanding how your site is performing and how to improve said performance. If you are at all unsure about how your site will perform it is a good idea to do this pre-emptively and keep an eye on these metrics over the course of the tournament." +msgstr "" + +#: ../../guide/scaling.rst:38 +msgid "If pages are not loading it could be due to two things: your site being overloaded with traffic, or a bug in Tabbycat itself. Generally, if you see a generic or Heroku-branded 'application error' page that means it is the former problem, whereas a Tabbycat-branded page indicates the latter." +msgstr "" + +#: ../../guide/scaling.rst:41 +msgid "Scaling Dynos" +msgstr "" + +#: ../../guide/scaling.rst:43 +msgid "Once you have upgraded your dyno to the **Hobby** level, the metrics tab provides a number of graphs that can be used to help identify how your site is performing. The first graph, **Events** provides an overview of any problems that are occurring:" +msgstr "" + +#: ../../guide/scaling.rst:47 +msgid "Red marks, or those labelled *Critical* typically indicate some sort of problem. H13 errors are a good measure of the amount of pages failing to load during heavy traffic, however they can be triggered under normal conditions — you want to check how many are occurring within a given time period and ensure its more than a handful." +msgstr "" + +#: ../../guide/scaling.rst:50 +msgid "Response Time & Throughput" +msgstr "" + +#: ../../guide/scaling.rst:54 +msgid "The response time is the amount of time it takes a dyno to load a page and serve it to your users. Smaller response times are thus good, and long response times (over fifteen seconds) indicate that a site is struggling to serve its content due to a large amount of queueing." +msgstr "" + +#: ../../guide/scaling.rst:56 +msgid "Heroku dynos have a maximum response time of 30 seconds, at which point they will stop serving the request. To users this appears as an error page or as a page that never loads. Thus if you see the graph is at or approaching 30 seconds at any point you need to try and diagnose what is causing this and add more resources to reduce the response time." +msgstr "" + +#: ../../guide/scaling.rst:60 +msgid "You can toggle the percentiles in this graph. Problems are much more severe if it affects the 50th percentile which represents a site that is probably not loading for the majority of its users. There are also a couple of Tabbycat functions (like automatic adjudicator allocation) that naturally take 10-20 seconds which means that the maximum or 99th percentile metrics are not very reflective of general traffic." +msgstr "" + +#: ../../guide/scaling.rst:62 +msgid "Closely related to this is the **Throughput** graph (further down) which shows how many pages your site is serving per second. Normally this is not particularly interesting, however note that the red part of the bar graph shows the amount of failed page requests. Like the **Response Time** graph, this can indicate issues with the site — normally this red portion should be well below 1rps (and ideally 0rps). If it is above 0.5 it represents a site that is producing a significant number of failed page loads." +msgstr "" + +#: ../../guide/scaling.rst:64 +msgid "You can verify if pages are not being served to users by checking the **Events** graph and looking for H12 errors, although occasionally they are not reported properly. A large amount of H13 errors can also be a cause for concern." +msgstr "" + +#: ../../guide/scaling.rst:67 +msgid "Dyno Load" +msgstr "" + +#: ../../guide/scaling.rst:71 +msgid "This graph shows how well your dynos are being utilised. It is scaled relative to the total number of dynos you are running (or have run previously). So if you have 10 dynos and the bar graph is near the '10' this shows that each dyno is being utilised 100% (either on average over a 1-minute period or as the maximum use over a 1-minute period)." +msgstr "" + +#: ../../guide/scaling.rst:73 +msgid "If this bar graph is hitting the top it will usually mean that a site that is slow or failing to load pages — if each dyno is busy it can't serve a new page until it is finished. This issue can often compound, with more traffic coming in than it is possible to serve and clear." +msgstr "" + +#: ../../guide/scaling.rst:75 +msgid "If your average, rather than maximum, dyno load is approaching the upper limit of however many dynos you are running now (remember the y-axis will often exceed however many dynos you are currently running) that is a very good sign that you should increase the quantity of dynos being run. Continue adding dynos and evaluate how this effects load so that the bar is not hitting its limit." +msgstr "" + +#: ../../guide/scaling.rst:77 +msgid "If you are consistently needing to scale things (or having previously had issues and are expecting a very heavy burst of traffic) it may be worth upgrading to the **Performance-M** dyno type, which will then allow you to enable the *Auto-scaling* feature. This will automatically add dynos as needed to cope with traffic, and remove them when they become unnecessary. This is very effective; however, note that this dyno-type is $250/month per dyno and will self-add dynos (within an upper limit you can specify). While this is not a huge price on a per hour/minute basis (even running 10 for an hour is only $4) you definitely want to ensure you keep a close eye on it and turn it off when it is not necessary. Note that it also tends to be quite aggressive in how many dynos it 'thinks' you need — you may want to increase the default response time threshold to prevent it scaling so quickly." +msgstr "" + +#: ../../guide/scaling.rst:80 +msgid "Memory Usage" +msgstr "" + +#: ../../guide/scaling.rst:84 +msgid "It is very rare that Tabbycat sites will hit the memory limits of the Free or Hobby level dynos — its almost always hovering around 256MB of the (standard dyno) limit of 512MB. However, if the graph is approaching the dashed line you may want to first restart the dynos (in the *More* dropdown in the upper-right) and see if that resolves it." +msgstr "" + +#: ../../guide/scaling.rst:86 +msgid "You can also confirm that memory limits are causing the app to fail by checking for the presence of R14 errors in the Events chart. If your site continues to come very close to that memory limit you will want to upgrade your dynos to the higher level dynos which have increased memory." +msgstr "" + +#: ../../guide/scaling.rst:89 +msgid "Alerts" +msgstr "" + +#: ../../guide/scaling.rst:91 +msgid "If the site is really struggling to perform its usually relatively obvious. However, if you want to be pre-warned of this, or just ensure things are as fast as possible, you can use the \"Configure Alerts\" feature on the Metrics page to receive emails when things are getting slow. We would recommend creating a Response Time Threshold warning of ``15000ms`` and a Response Requests Percentage Threshold of ``5%``." +msgstr "" + +#: ../../guide/scaling.rst:94 +msgid "Understanding Caching" +msgstr "" + +#: ../../guide/scaling.rst:96 +msgid "When a page is 'cached' it means that Tabbycat has stored a copy of the final output of the page. It can then send that copy directly to a user who is loading that page without needing to go through the normal process of fetching the data from the database, running any calculations, and formatting the results. Pages that are cached will serve quickly — if a page is taking more than a few seconds to load it usually means that page has not been cached (or your site is having too much traffic to serve pages quickly in general). The downside is that changes to the underlying data won't update until the cache has 'expired' and is regenerated. So, for example, a cached copy of the draw will not immediately reflect change to panels and a newly-release motion or tab page will not show up in the menu immediately." +msgstr "" + +#: ../../guide/scaling.rst:98 +msgid "By default Tabbycat caches public pages according to three levels: a 1-minute timeout, a 3.5-minute timeout, and a 2-hour timeout. The only pages on the 2-hour timeout are those that come with a full tab release — such as speaker standings, the motions tab, etc. Public pages that need to update quickly, such as the draw and homepage, are on the 1-minute timeout to ensure data is up to date. Public pages that update less frequently such as Standings, Results, Participants, and Breaks are on the 3.5-minute timeout." +msgstr "" + +#: ../../guide/scaling.rst:100 +msgid "Caching means that a Tabbycat site should actually perform *faster* when it is being viewed by many people at once, as the caches are constantly up-to-date and can be used to serve the majority of requests. When there is less traffic the caches are more likely to be regenerated each time someone goes to a page resulting in slower page loads. Most often performance problems come when a popular page, such as a newly-released draw gains a large amount of traffic suddenly (such as by people constantly refreshing the draw). If the page hasn't finished caching it has to do a full page calculation for each of those new loads, which will spike the amount of resource use until the page load queue is cleared." +msgstr "" + +#: ../../guide/scaling.rst:102 +msgid "One way to help mitigate this is to try and load those pages first yourself to ensuring the cache is populated before other people access it. To do so you would generally open a new private browsing tab, and navigate to the specific page(s) immediately after you have enabled them. This may require going to the URL directly rather than relying on the homepage or menu (which may not have been updated to show the new information). In the case of draw releases, this can also be mitigated by not release online draws until they have been first shown on a projector (so that people aren't trying to get draw information ahead of time)." +msgstr "" + +#: ../../guide/scaling.rst:104 +msgid "You can also increase the 1-minute timeout for the pages that are popular during the in-rounds, by going to the **Settings** section of your Heroku dashboard, clicking *Reveal Config Vars*, and creating a new key/value of ``PUBLIC_FAST_CACHE_TIMEOUT`` and ``180`` (to set the timeout to be 3 minutes i.e. 180 seconds). This should only be necessary as a last resort. Turning off public pages is also an option." +msgstr "" + +#: ../../guide/scaling.rst:106 +msgid "If you ever need to clear the cache (say to force the site to quickly show an update to the speaker tab) you can install `Heroku's Command Line Interface `_ and run the following command, replacing ``YOUR_APP`` with your site's name in the Heroku dashboard::" +msgstr "" + +#: ../../guide/scaling.rst:111 +msgid "Postgres Limits" +msgstr "" + +#: ../../guide/scaling.rst:113 +msgid "The free tier of the Postgres database services has a limit of 20 'connections'. As with Redis, it is rare that a Tabbycat site will exceed this limit; most Australs-sized tournaments will see a maximum of 12 connections at any point in time." +msgstr "" + +#: ../../guide/scaling.rst:117 +msgid "You can monitor this in your Heroku Dashboard by going to the **Resources** tab and clicking on the purple Postgres link. The **Connections** graph here will show you how close you are to the limit. The first tier up from the 'free' Hobby tiers (i.e. ``Standard-0``) has a connection limit of 120 which can be used to overcome these limits if you do encounter them." +msgstr "" + +#: ../../guide/scaling.rst:120 +msgid "Mirror Admin Sites" +msgstr "" + +#: ../../guide/scaling.rst:122 +msgid "If you *really* want to be safe, or are unable to resolve traffic issues and unable to quickly complete tasks on the admin site, it is possible to create a 'mirror' of the tab site just for admin use. This site can be configured to share the same database as the primary site — meaning it is in effect always identical — but because it is at a separate URL it won't have to respond to public traffic and so can't be swamped with a large page load queue." +msgstr "" + +#: ../../guide/scaling.rst:124 +msgid "This requires some technical knowledge to setup and hasn't been rigorously tested. It works fine in our experience but we haven't tested it extensively. If using this make sure you backup (and now how to restore backups) before setting one up." +msgstr "" + +#: ../../guide/scaling.rst:126 +msgid "To do so you would deploy a new copy of Tabbycat on Heroku as you normally would. Once the site has been setup, go to it in the Heroku Dashboard, click through to the **Resources** tab and remove the Postgres and Redis Add-ons. Using the `Heroku Command Line Interface `_ run this command, substituting ``YOUR_APP`` with your *primary* tab site's name (i.e. the app that you had initially setup before this)::" +msgstr "" + +#: ../../guide/scaling.rst:130 +msgid "Here, make a copy of the ``DATABASE_URL`` and ``REDIS_URL`` values. They should look like ``postgres://`` or ``redis://`` followed by a long set of numbers and characters. Once you have those, go to the *Settings* tab of the Heroku dashboard for your *mirror* tab site. Click **Reveal Config Vars**. There should be no set ``DATABASE_URL`` or ``REDIS_URL`` values here — if there are check you are on the right app and that the add-ons were removed as instructed earlier. If they are not set, then add in those values, with ``DATABASE_URL`` on the left, and that Postgres URL from earlier on the right. Do the same for ``REDIS_URL`` and the Redis URL. Then restart the app using the link under **More** in the top right." +msgstr "" + +#: ../../guide/scaling.rst:132 +msgid "Once you visit the mirror site it should be setup just like the original one, with changes made to one site also affecting the other as if they were just a single site." +msgstr "" + +#: ../../guide/scaling.rst:135 +msgid "Estimated Costs" +msgstr "" + +#: ../../guide/scaling.rst:137 +msgid "As a quick and rough benchmark, here is a list of typical prices you would encounter if scaling to meet the performance needs of a high-team-count high-traffic tournament at the approximate scale of an Australs (~100 teams) or above. This is a probably an overly-conservative estimate in that it is based on tournaments run on the ``2.1`` version of Tabbycat. Versions ``2.2`` and above should perform dramatically better and thus have less need to scale using Standard and Performance dynos." +msgstr "" + +#: ../../guide/scaling.rst:139 +msgid "1x ``Hobby Basic Postgres Plan`` ($9/month) run all day for 14 days = ~$4" +msgstr "" + +#: ../../guide/scaling.rst:140 +msgid "A tournament of this size will require an upgraded database tier for the time when you are adding new data; i.e. during registration and rounds. Once the tab is released (and no further data changes needed) however you can downgrade it back to the ``Hobby Dev`` tier." +msgstr "" + +#: ../../guide/scaling.rst:141 +msgid "1x ``Hobby Dyno`` ($7/month each) run all day for 7 days = ~$2" +msgstr "" + +#: ../../guide/scaling.rst:142 +msgid "As recommended, 1 hobby dyno should be run as a baseline in order to see the metrics dashboard; but this can be downgraded a day or so after the tab has been released and traffic is sparse." +msgstr "" + +#: ../../guide/scaling.rst:143 +msgid "3x ``Standard 1X Dyno`` ($25/month each) run 10 hours a day for 4 days = ~$4" +msgstr "" + +#: ../../guide/scaling.rst:144 +msgid "This higher quantity of dynos should only be necessary during traffic spikes (i.e. draw releases, immediately after round advances, and tab release) but unless you want to be constantly turning things on/off its usually easier just to upgrade them at the start of each day of in-rounds (or when the tab is published) and downgrade them at the end of each day. As mentioned earlier, you should occasionally check the *Dyno Load* in the Metrics area and adjust the number of dynos as needed." +msgstr "" + +#: ../../:1 +msgid "``Autoscaled Performance M Dynos`` ($250/month each) average of 5 run for 1 hour = ~$2" +msgstr "" + +#: ../../guide/scaling.rst:146 +msgid "For just round 1 it is a good idea to upgrade to the ``Performance M`` tier so you can enable auto-scaling and thus have the site automatically adjust the number of dynos to the amount of traffic it's getting (rather than having to guess the number of dynos needed ahead of time). Doing so ensures that the first round runs smoothly and means that you can then review the Metrics graphs to see what your 'peak' load looks like and resume using whatever quantity of ``Standard 1X Dyno`` will accommodate this peak load in future rounds." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/guide/tournament-logistics.po b/docs/locale/vi/LC_MESSAGES/guide/tournament-logistics.po new file mode 100644 index 00000000000..c9c133d7496 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/guide/tournament-logistics.po @@ -0,0 +1,1394 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-29 23:38\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/tournament-logistics.po\n" +"X-Crowdin-File-ID: 1307\n" +"Language: vi_VN\n" + +#: ../../guide/tournament-logistics.rst:5 +msgid "Tournament Logistics" +msgstr "" + +#: ../../guide/tournament-logistics.rst:7 +msgid "Unlike the rest of our documentation, this section does not deal with particular features or technical concerns with Tabbycat itself. Instead it is an attempt to outline the logistics of tab direction and aims to be of general relevance for people running major tournaments. At present, it is organised by the various ‘stages' of tabbing a tournament, and most of the content takes the form of check-lists or comments designed to highlight and provide guidance on common issues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:9 +msgid "Whilst it aims for general relevance, we should note that this guide is relatively opinionated and mostly written from the perspective of people whose primary experience is tabbing at Australasian tournaments using Tabbycat. That said, we welcome feedback and additions that can account for different format and regional considerations. In the future, if the guide becomes more general and more extensive, it could be spun off into a separate project." +msgstr "" + +#: ../../guide/tournament-logistics.rst:11 +msgid "As with the rest of our documentation, this page is source-available and we welcome :ref:`feedback and contributions `. Note also that we've formatted this guide a single page to reduce clutter, but the sub-sections in the sidebar can be used to help navigate across sections." +msgstr "" + +#: ../../guide/tournament-logistics.rst:14 +msgid "Planning and Preparation" +msgstr "" + +#: ../../guide/tournament-logistics.rst:16 +msgid "This section aims to outline concerns that occur in the months before the tournament: after you have agreed to help with tabbing and while the organising committee and adjudication core are deciding how they want to run key processes such as registration and feedback. It is organised in terms of who you should coordinate with in order to plan for a well-tabbed tournament." +msgstr "" + +#: ../../guide/tournament-logistics.rst:19 +msgid "General Notes" +msgstr "" + +#: ../../guide/tournament-logistics.rst:21 +msgid "You should avoid being the sole person responsible for that tab unless it is a small tournament. There are many cases where you want to be in several places at once and the easiest way to accommodate that is by having co-directors or trusted assistants. Few tab decisions require a single source of authority; it is far better to have multiple people available to share responsibilities around." +msgstr "" + +#: ../../guide/tournament-logistics.rst:23 +msgid "In a similar manner, it is worth considering how you can use the tournament to help train other people. Typically, knowledge of tabbing is concentrated in relatively few people and gained mostly through on-the-ground experience; meaning that every tournament should be approached as rare opportunity to help spread knowledge about tabbing more widely in a circuit. Consider reaching out to institutions or the tournament as a whole to see if they have anyone who would be interested in helping out." +msgstr "" + +#: ../../guide/tournament-logistics.rst:26 +msgid "Convenors" +msgstr "" + +#: ../../guide/tournament-logistics.rst:28 +msgid "It might sound obvious but it will pay to have a very thorough conversation about the tab process (more or less the contents of this document) with the convenors a few months out from the tournament. Do this even if you know the convenors to be knowledgeable or experienced debaters. Key concerns are:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:32 +msgid "Whether internet access will be available and whether participants can be presumed to have smart phones. This has an obvious impact on how online feedback, ballots, and draw release is done. Note that Eduroam is not necessarily a reliable guarantee of access; many participants will come from universities who don't have access to it or will need to follow a setup process that is onerous or requires them to be at their home institution." +msgstr "" + +#: ../../guide/tournament-logistics.rst:33 +msgid "What kind of room is the tab room going to be? Is it possible to optimize its placement when the bookings for rooms are made? Key details include: How large is it? Does it have a sufficient amount of desk space (for data entry)? Does it have a good projector (for allocations)?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:34 +msgid "If they have the resources, having an adjacent room available for just the adjudication core to use can also be useful. While you want to work closely with the adjudication core, they may want to discuss sensitive information (motions, equity) in a space without volunteers present; or they might at times get in the way of things, such as by eating lunch in the middle of a frenetic ballot entry process." +msgstr "" + +#: ../../guide/tournament-logistics.rst:35 +msgid "Ensure that plans are made for food to be brought to tab room. Otherwise you will starve and the adjudication core will swan off to lunch. Having regular access to caffeine can also be similarly essential to some adjudication and tab teams." +msgstr "" + +#: ../../guide/tournament-logistics.rst:36 +msgid "What kind of printers will be available? Can the tournament buy/borrow one? This is obviously a key consideration for pre-printed ballots. Also try and ensure there are back-up printing options if possible. Clearly stipulate your need for ink and paper; and try and opt for a black/white laserjet, over an inkjet, if possible." +msgstr "" + +#: ../../guide/tournament-logistics.rst:37 +msgid "What kind of volunteers will be available? How many, and what is their experience level? As a very broad recommendation, you probably want around 1 volunteer for every 10 rooms, assuming volunteers are performing a dual role as data-enterers and ballot-collectors." +msgstr "" + +#: ../../guide/tournament-logistics.rst:38 +msgid "Will the tournament make a donation to whoever maintains the tabbing software you are using? Depending on the license of your tabbing software and the nature of your tournament (for profit vs not for profit) this may be required. Also, if your tab is self-hosted or independently hosted (such as how Tabbycat is generally deployed on Heroku) accounting officers should also be aware that there will be some costs associated with hosting the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:39 +msgid "You should also ensure that people helping with the tab are fairly compensated for their flights, registration, etc and that any volunteers are invited along to socials and/or given some other recompense." +msgstr "" + +#: ../../guide/tournament-logistics.rst:40 +msgid "Will Swing teams be available? You should plan to have at least one more than you need. For example, with 39 teams, you should have both an 40th swing team to fill in the draw, and the option to easily assemble an 41st swing team in case a team goes missing. At very large tournaments (say over 150 teams) you should plan for even more swing team capacity — it's not unheard of for say three teams to vanish all in a single round. In these cases, you should try and ensure that the swing teams are always ready to go — i.e. that that they are pre-formed, you have a clear communication channel with them, and that they distributed/waiting near the debating rooms so they can fill in at a moment's notice (often you will only find out that teams are missing right as debates are scheduled to start)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:41 +msgid "How will critical information be communicated to participants? Consider that in general, Facebook announcements do not reach many people, although paying to boost the posts is often a very cheap way of dramatically raising their effectiveness. In particular also ensure or check how you manage to get in touch with teams or adjudicators who go missing: will they have reliable phone numbers? Can you get a list of institutional reps who can be reliably called? You want to have processes in place for chasing up adjudicators who do things such as make scoring mistakes as soon as possible in order to minimise delays." +msgstr "" + +#: ../../guide/tournament-logistics.rst:42 +msgid "How will critical information be shared between the tab team, adjudication core, and logistics/convening teams? For smaller/medium sized tournaments a group chat augmented by phone calls (assuming everyone knows everyone else's number) can be sufficient, but even then, you need to ensure that any critical information conveyed privately (i.e. in a call or in person) is conveyed back to the group channel. At very large tournaments (or if you have the resources) walkie-talkies are an excellent way to manage communication — just make sure you have (ahead of time) reserve the different channels to a distinct and known purpose (i.e. general discussion; just the tab team & adjudication core; just convenors)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:43 +msgid "As part of this it is ideal if the organising committees can procure local SIM cards for members of the tab team and adjudication core who are not local. These should be relatively generous in their plans — you don't want to worry about running out of minutes or data if on a critical call or using a hotspot to make critical allocation adjustments." +msgstr "" + +#: ../../guide/tournament-logistics.rst:44 +msgid "At major tournaments you want to arrive at least a day before check-in; and ideally whenever it is that the adjudication core is arriving for their own preparation." +msgstr "" + +#: ../../guide/tournament-logistics.rst:47 +msgid "Registration" +msgstr "" + +#: ../../guide/tournament-logistics.rst:49 +msgid "Having effective registration systems and processes is one of the most important aspects of preparing to tab a large tournament. Bad registration data *will* make setting up a tab extremely painful and introduces the chance for mistakes or inconsistencies in tab data that will only come to light in the first round. As such:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:53 +msgid "You should check in with the registration team and see what they plan to do as soon as possible after being brought on-board. As part of this you should make it clear that you should be consulted on any decisions they make about what data to collect, when to collect it, and how to collect it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:54 +msgid "Registration data should be collected into a shared and live-updating source, such as a Google Sheet. There should be as few canonical sources (ideally one) of data as possible; i.e. there should be a single sheet for individual details, a single sheet for team details, etc; and these should be maintained all the way through to check-in. For both you, and the registration team, having multiple conflicting or outdated copies of data will lead to errors. However, for the registration team these errors can usually be easily sorted out in person (at check-in) but for you that information always needs to be reliable and up to date otherwise what is imported into the tab cannot be trusted." +msgstr "" + +#: ../../guide/tournament-logistics.rst:56 +msgid "At this point our recommendation is to, in most cases, not use specialised registration systems as they are somewhat less intuitive and less flexible than setting up good Google Forms/Sheets." +msgstr "" + +#: ../../guide/tournament-logistics.rst:58 +msgid "If, for whatever reason, the registration team are not able to give you 'live' access to the data they have on hand, make sure they send you copies of it (even if it is incomplete) well before you need it to setup the tab itself. You want to be able to verify what data is actually being collected and how it is formatted well in advance." +msgstr "" + +#: ../../guide/tournament-logistics.rst:60 +msgid "You should have access to *all* of the data collected; often registration teams will make (false) assumptions about what you do or do not need. It is better to have everything and then selectively filter out what is not relevant to the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:61 +msgid "It is critical that the registration team should check in with you before setting up forms asking for information. Every additional time that registration asks for data there will be less and less participation in the process, so you should aim to gather all that you need at the first opportunity; typically during the canonical individual registration phase. Particular information that should not be overlooked for tab purposes:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:63 +msgid "Individual registration should ask whether a participant is a speaker or an adjudicator." +msgstr "" + +#: ../../guide/tournament-logistics.rst:64 +msgid "If that person is a speaker it should ask for their team name/number (reconciling these later is painful)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:65 +msgid "Individual registration should ask for any accessibility requirements of both adjudicators and speakers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:66 +msgid "Individual registration should ask for the previous institutions of both adjudicators and speakers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:67 +msgid "Individual registration should ask for the email addresses of all participants." +msgstr "" + +#: ../../guide/tournament-logistics.rst:68 +msgid "Individual registration should ask for the phone numbers of adjudicators." +msgstr "" + +#: ../../guide/tournament-logistics.rst:69 +msgid "Individual registration should ask for the gender identity of both adjudicators and speakers. Even if you are not *planning* on using this to inform processes, such as adjudicator allocations, you want it on hand in case plans change." +msgstr "" + +#: ../../guide/tournament-logistics.rst:71 +msgid "Independent adjudicators and the adjudication core should follow normal registration procedures. Having them not go through the normal process makes it easy to overlook their data or not get a complete picture of it. For example, adjudication core members might forget to nominate conflicts, or neglect to provide their previous institutions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:72 +msgid "You should confirm how the registration team plans to manage how people check-in to the accommodation in particular. Check-in is when issues with registration data come to light and it is vital that these changes are noted and recorded. Some form of validation of registration data *must* occur at check-in — in particular all adjudicators should be (individually) verified as present and all members of a team should confirm their presence along with their team's name/number and speakers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:73 +msgid "After check-in you need to have a definitive list of who is physically present at the tournament so you can run a first-round draw with confidence. Registration must know this and have processes in place for recording people individually as they arrive, and for that data to filter back to you." +msgstr "" + +#: ../../guide/tournament-logistics.rst:75 +msgid "If you are using Tabbycat's secret links for feedback or ballots these are best distributed at check-in. The registration team should know about this, prepare for it, and be provided with the pdfs to print and distribute." +msgstr "" + +#: ../../guide/tournament-logistics.rst:78 +msgid "Adjudication cores" +msgstr "" + +#: ../../guide/tournament-logistics.rst:80 +msgid "If there is a group chat for the adjudication core you probably want to be part of it; even if you don't contribute much. There are lots of small things that end up being discussed without consideration of how they will affect tab issues and it is also a chance to get to know — ahead of time — the people you will be working with closely over the tournament." +msgstr "" + +#: ../../guide/tournament-logistics.rst:82 +msgid "Members of the adjudication core will often leave tab-relevant decisions until the days prior to the first round or whenever it is that they can first meet with the tab team in person. This often wastes critical time and forces rushed decisions. Many considerations can instead be raised and discussed prior to the tournament. These could include:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:86 +msgid "How to manage the feedback process. This typically benefits from foresight and pre-planning, rather than being decided on the ground. Key considerations are:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:90 +msgid "Who submits feedback on whom? Do trainees do so on their chairs? Do panellists do so on each other? (Presuming your tab software supports these options)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:91 +msgid "Is feedback mandatory? If so, how will this be enforced exactly?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:92 +msgid "How much weight does each adjudicator's test or CV score have over the course of the tournament? By Round 3, or by Round 8, what proportion of an adjudicator's score is derived from their test and what proportion is derived from their feedback?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:93 +msgid "Will the adjudication core tweak an adjudicator's score to 'artificially' increase or decrease it to where they think it should be. For example, this could be done by adjusting a test/CV score upwards in order to compensate for bad feedback that (for whatever reason) they did not think was reliable or fair? Depending on your adjudication core's preferences and your tab software's allowances it is not unheard of for them to maintain full manual control over scores by reading/processing feedback results but only ever manually adjusting scores as a result (rather than having it automatically adjust due to the ratings in the feedback)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:94 +msgid "What is the score scale going to be? What do each of those numbers represent? How will this be communicated to participants so they can score accurately and consistently?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:95 +msgid "What kind of questions will feedback forms ask? If using :ref:`customisable printed or online forms ` consider how these questions be used tactically to identify key issues (say discriminatory scoring) or more easily identify people who should be promoted/demoted. While managing feedback is often a messy and subjective task, it can often be improved by being more targeted in what data it collects." +msgstr "" + +#: ../../guide/tournament-logistics.rst:96 +msgid "How will feedback be monitored, and how will this information feed back into the scores and allocations? At large tournaments it is not unusual for an adjudication core member to sit off each round to review and process feedback — there isn't really a good stretch of available time to do so otherwise. However even if doing this note that there are communication issues to manage here, as each adjudication core member will each end up with a relatively incomplete overview of the total volume of feedback." +msgstr "" + +#: ../../guide/tournament-logistics.rst:98 +msgid "If possible it's nice to plan in advance for when the tab will be released (i.e. on the last night; the day after; etc.) as this often gets left to the last minute to be decided. Also the possibility of whether people can redact themselves from tabs should be raised, as that might be useful to inform participants of during online registration or tournament briefings. In a similar fashion, some adjudication cores might also want to limit speaker tabs to only a certain number of places, particularly at novice-centric tournaments." +msgstr "" + +#: ../../guide/tournament-logistics.rst:99 +msgid "How to handle conflict collection; see the following section." +msgstr "" + +#: ../../guide/tournament-logistics.rst:100 +msgid "How to handle the submission of scoresheets and feedback, primarily in terms of which parts of the process should be done online and offline. Some adjudication cores will have strong thoughts here; others will happily follow whatever you recommend. Key considerations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:104 +msgid "Paper-based feedback is much more taxing to enter than paper-based scoresheets — typically there is much more of it; it asks for a greater variety of data; and it is submitted at inconsistent times. The one advantage is that it is easier to make feedback mandatory with paper, as you can ensure all teams and adjudicators have done so prior to leaving the room. Thus, in most cases, a good online feedback system is much more preferable than paper. If using paper be aware that you will need a lot of volunteers to ensure the feedback is collected promptly. If internet or smartphone access is limited at your tournament it is probably best to accommodate both paper-based and online methods." +msgstr "" + +#: ../../guide/tournament-logistics.rst:105 +msgid "The consequences of having incorrect or missing ballots are much more severe than for feedback. As such major tournaments use paper ballots in some form as the final stage in a checking process to ensure that the results of a debate are definitely correct — adjudicators will always make mistakes and while digital ballots can catch/prevent some types of error (i.e. a low point win) they can't catch others (assigning the wrong scores to the wrong speaker, nominating the wrong winning team, etc.). Assuming your software supports both options, the choice is thus whether to use a hybrid approach (online submission followed by paper verification) or to rely entirely on paper. A fully-paper based approach will be simpler for both yourself and adjudicators, and can be almost as efficient if you have a sufficient number of volunteers. In contrast, a hybrid approach will be potentially much faster if you are short of volunteers and if you expect that almost all adjudicators will have access to the internet, a smartphone, and are capable of following instructions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:107 +msgid "In some circuits, and when using some particular tab software, tournaments might run a 'dual tab' where there is a second, independent, version of the tab software and database into which all data is *also* entered. From what we understand this performs a dual role, as both a backup system that can take over from the main one (say if internet access drops) and as a way of verifying ballot data (by comparing draws or databases between software rather than having a two-step entry process operating for a single tab). This practice seems obsolete when working with modern web-based tab software that is capable of backing up and restoring to an offline system, but we would like to hear your feedback if you think that is not the case." +msgstr "" + +#: ../../guide/tournament-logistics.rst:110 +msgid "Conflicts/Clashes (registration/equity/adjudication core)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:114 +msgid "There should always be a *single* means of collecting conflicts (i.e. a single Google Sheet/Form) and all conflicts should go through it. Because the nature of this data is sensitive and evolving, there must be a single location where it can be easily captured and verified as having been entered into the tab. Conflicts data should never be spread across a loose collection of emails/personal messages/spreadsheets; otherwise keeping track and knowing which ones have been entered into the system will be painful and error prone. Get in touch in with equity and registration in advance and make it clear that they should not make their own conflicts form; or if they've already made one, make sure you adopt it and have access/control of it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:115 +msgid "Conflicts should, ideally, *only be collected after a participants list has been published* and requests for people to nominate conflicts should also be sent out as few times as possible. Most people will only fill this form in once, so it is vital that when asked to nominate conflicts they have as much information as they need to do so comprehensively. Without a public and reasonably-complete participants list people will either nominate conflicts that are not present (wasting your time in cross-referencing data) or not realise someone is present and raise the conflict at a latter, less opportune time." +msgstr "" + +#: ../../guide/tournament-logistics.rst:116 +msgid "In some circuits only adjudicators are allowed to nominate conflicts because of the risk of teams using conflicts 'tactically' to block adjudicators that they think are terrible judges. However, having teams nominate conflicts can be useful: adjudicators may overlook a conflict or there may be equity-based reasons that a conflict is non-symmetrical. This trade-off can be handled in two ways:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:120 +msgid "Not allow teams to nominate conflicts during registration; but allow them to approach equity teams before, or during, the tournament to identify the conflict. Equity can then raise the issue with the tab team and adjudication core and it can be added to the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:121 +msgid "Allow teams to nominate conflicts during registration; but have the adjudication core review the data for 'tactical' conflicts. These are usually relatively easily identified, although can be overlooked if the adjudication core does not know the participants or their region/circuit well. The adjudication core can then override the conflict, discuss it with the teams, or raise it with equity. However, if going down this route, the tab team should discuss with the adjudication core how to manage this process well-ahead of the tournament, and ensure they actually do review the conflicts prior to the first round — otherwise it will likely surface during an allocation and become a major distraction during a critical time period." +msgstr "" + +#: ../../guide/tournament-logistics.rst:123 +msgid "As mentioned in the previous section, the adjudication core (possibly with equity) should provide some degree of guidance about what kinds of debating-related conflicts should be provided. People should be able to self-define what constitutes a conflict, but there are circumstances where they are overly cautious and can be reassured that it is not necessary. The opposite problem may occur also, where many people may have a very high bar for what defines a conflict which could lead to perceptions of bias from other participants." +msgstr "" + +#: ../../guide/tournament-logistics.rst:124 +msgid "Generally, it is preferable that each form nominates a single conflict, and people are asked to re-submit for each conflict they are adding." +msgstr "" + +#: ../../guide/tournament-logistics.rst:126 +msgid "To save you some hassle the conflict form should make this very clear (i.e. that one conflict = one submission; ensure the field labels reinforce this)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:127 +msgid "The conflict form should also make clear that you shouldn't use the form if you don't have any conflicts (i.e. people will submit 'None', 'None' etc)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:128 +msgid "The conflicts form should also make clear that adjudicator's don't need to submit a conflict for their current institution and that team's don't need to submit conflicts for adjudicators from their current institution." +msgstr "" + +#: ../../guide/tournament-logistics.rst:130 +msgid "In poorly-structured conflict forms, identifying exactly who is doing the conflicting and who is being conflicted is a nightmare. You want to structure the questions to minimise this ambiguity. A form should definitely ask:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:132 +msgid "Who are you (the conflict-specifier)?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:133 +msgid "Are you a team or an adjudicator?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:134 +msgid "Which institution are you from?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:135 +msgid "If part of a team, which team are you in?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:136 +msgid "Who are you conflicting?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:137 +msgid "Are they a team or an adjudicator?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:138 +msgid "Which institution are they from?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:139 +msgid "If they are in a team, which team is it?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:140 +msgid "Have previously attended any other institutions; or have other reasons to conflict entire institutions? If so, specify those institutions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:142 +msgid "Note that this last question can be tricky to deal with; good tab software will let you conflict an adjudicator from an institution other than their own, but it is harder to mark an individual team as having members previously attending another institution. These circumstances are rare and typically very 'soft' conflicts but are probably best handled by creating individual conflicts between that team and adjudicators from the previous institution in question." +msgstr "" + +#: ../../guide/tournament-logistics.rst:143 +msgid "Adjudication core members will often not nominate their own conflicts; presuming that they will notice and correct them during allocations. They often forget or overlook this. Their conflicts should be entered as per normal." +msgstr "" + +#: ../../guide/tournament-logistics.rst:146 +msgid "Scheduling (convenors / venue organisers)" +msgstr "" + +#: ../../guide/tournament-logistics.rst:148 +msgid "One of the easiest ways to have things run late is to set an unrealistic schedule. As much as possible the timing allocated to rounds (inclusive of events such as lunch or committee forums) should conform to an even distribution of how long it takes to process results and create a draw/allocation — you don't want to be in a position where particular rounds have too much time and others too little time to spend on allocations and other crucial tasks. This is something that should definitely be working on in conjunction with convenors and other critical parties before they lock down timing details with food suppliers or the operators of the debating venues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:150 +msgid "Note also that in most circumstances it is preferable to create a draw and allocation for the first day of the next round at the night before. This time should be built in to the schedule of the previous day, and raised with the adjudication core so they don't expect to be able to immediately depart after the day's rounds are done." +msgstr "" + +#: ../../guide/tournament-logistics.rst:152 +msgid "Below is the time taken within each round at Australs 2017. For context, this was neither a particular efficiently or inefficiently tabbed tournament. Notable details:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:156 +msgid "The tournament was ~40 rooms each round and had access to 3-6 runners and data enterers. Paper ballots were pre-printed and distributed by runners to rooms prior to the debates starting, then collected sometime after the 15 minute deliberation period. Feedback was submitted online. At Australs all adjudicators (excluding trainees) submit their own ballots." +msgstr "" + +#: ../../guide/tournament-logistics.rst:157 +msgid "The adjudication core were neither particular slow nor fast in allocating adjudicators compared to other adjudication cores. At Australs most adjudication cores will create allocations by using first running an automatic allocation then extensively tweak the results." +msgstr "" + +#: ../../guide/tournament-logistics.rst:158 +msgid "There were no serious issues that delayed the tabbing of any particular round beyond the routine and expected issues of last-minute draw changes, adjudicators producing incomprehensible ballots, etc." +msgstr "" + +#: ../../guide/tournament-logistics.rst:159 +msgid "Whilst the tab ran relatively quickly, there were minor delays because of mismatches between the planned schedule and the optimal schedule from a tab perspective." +msgstr "" + +#: ../../guide/tournament-logistics.rst:160 +msgid "A round at Australs takes around 2 hours from a debater's perspective: 30m of prep, ~60m for a debate, ~15m for deliberation, and ~15m for the oral adjudication and feedback." +msgstr "" + +#: ../../guide/tournament-logistics.rst:161 +msgid "We didn't note the timing of data-entry in Round 8 as there was no time pressure. After data entry was finished, finalising and double-checking the breaks took through to ~7-8pm." +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "Day" +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "One" +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "Two" +msgstr "" + +#: ../../guide/tournament-logistics.rst:164 +msgid "Three" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "Round" +msgstr "Vòng" + +#: ../../guide/tournament-logistics.rst:166 +msgid "1" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "2" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "3" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "4" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "5" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "6" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "7" +msgstr "" + +#: ../../guide/tournament-logistics.rst:166 +msgid "8" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "Draw generated" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +#: ../../guide/tournament-logistics.rst:169 +msgid "*Night prior**" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "12:43" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "16:12" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "19:17*" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "12:05" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "15:46" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "19:10*" +msgstr "" + +#: ../../guide/tournament-logistics.rst:168 +msgid "12:07" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "Allocation finished" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "13:17 ``+34m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "16:36 ``+24m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "20:28* ``+71m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "12:58 ``+53m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "16:24 ``+38m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "21:30* ``+140m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:169 +msgid "13:25 ``+78m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "Motions released" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "09:28" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "13:50 ``+33m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "16:47 ``+11m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "09:22" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "13:14 ``+16m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "16:40 ``+16m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "9:30" +msgstr "" + +#: ../../guide/tournament-logistics.rst:170 +msgid "14:18 ``+53m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "First ballot received" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "11:51 ``+143m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "15:46 ``+116m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "18:52 ``+125m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "11:18 ``+116m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "15:13 ``+119m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "18:40 ``+120m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +msgid "11:35 ``+125m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:171 +#: ../../guide/tournament-logistics.rst:172 +msgid "?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "Last ballot confirmed" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "12:38 ``+47m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "16:07 ``+21m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "19:15 ``+23m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "12:05 ``+47m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "15:44 ``+31m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "19:09 ``+29m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:172 +msgid "12:06 ``+31m``" +msgstr "" + +#: ../../guide/tournament-logistics.rst:176 +msgid "Tab Setup" +msgstr "" + +#: ../../guide/tournament-logistics.rst:178 +msgid "Setting up a tab site is the most technically challenging (or at least annoying) part of tabbing. It is where you need to reconcile large amounts of data and configure a variety of settings to ensure everything will run without issues during rounds. While this is often done a day or two before the tournament, ideally you should look to do as much as possible in the week or two beforehand where there is much less time pressure." +msgstr "" + +#: ../../guide/tournament-logistics.rst:181 +msgid "Importing data: workflow" +msgstr "" + +#: ../../guide/tournament-logistics.rst:185 +msgid "First check with registration people if their data is complete, and if not who is missing. If it's only a few people it's viable (for tab purposes) to use place-holders for them, as long as you remember to follow up and edit their data manually later." +msgstr "" + +#: ../../guide/tournament-logistics.rst:186 +msgid "Familiarise yourself with the different methods for importing data into your tabbing program. Typically, these include options for bulk-importing spreadsheets, for adding information piece-by-piece through a graphical interface, or a hybrid systems. Depending on your tabbing software it may be easiest to first setup your tournament on a local copy of the tab (where it will be faster to rectify mistakes) and transfer the data to the live site when everything is mostly complete." +msgstr "" + +#: ../../guide/tournament-logistics.rst:188 +msgid "If you are using Tabbycat our spreadsheet importer is definitely easiest to use on a local copy; however using the visual importer is perfectly viable for larger tournaments if you are not comfortable with the command line. When using the spreadsheet importer note that it will likely take several iterations to get the data to import cleanly as there will typically be small mismatches in speaker/institution names and the like." +msgstr "" + +#: ../../guide/tournament-logistics.rst:190 +msgid "If the tournament (or the host society) has their own domain name and your tab software is self-hosted consider whether you want to setup the tab site on their domain so that the URL is nicer and/or easier to type." +msgstr "" + +#: ../../guide/tournament-logistics.rst:192 +msgid "If you are using Tabbycat, and deploying to Heroku, be sure to read our documentation about the size of Postgres database your tournament will require. Setting up the correct size of database from the start is the best way to go, as transferring information at a later stage is a hassle and could delay the tab at inopportune times." +msgstr "" + +#: ../../guide/tournament-logistics.rst:195 +msgid "Importing data: regions/societies" +msgstr "" + +#: ../../guide/tournament-logistics.rst:199 +msgid "Societies will often have special names that they like to use in draws (that are not the same as their institution's name or acronym). These can be gathered from institutional reps or from prior tabs. When in doubt err on the colloquial / most recognisable name; particularly for formats where teams need to find each other prior to the debate." +msgstr "" + +#: ../../guide/tournament-logistics.rst:200 +msgid "If your tabbing software has methods for assigning region information to teams and adjudicators (for diversity purposes) determine with the adjudication core the types of regions that will be used." +msgstr "" + +#: ../../guide/tournament-logistics.rst:203 +msgid "Importing data: participants" +msgstr "" + +#: ../../guide/tournament-logistics.rst:207 +msgid "Check you have emails/phone numbers included in your data that will be imported (presuming your tabbing software supports this) there are useful to have on hand later for either emailing out information or quickly following up errant adjudicators." +msgstr "" + +#: ../../guide/tournament-logistics.rst:208 +msgid "Often, the easiest way to prepare registration data for tab imports is to create new tabs in the registration spreadsheet, and use referencing to automatically order and arrange their data into the format your tab software wants. If the registration data changes significantly this will also make it easier to re-import things." +msgstr "" + +#: ../../guide/tournament-logistics.rst:209 +msgid "Often some adjudicators, typically local independents, may not be available for all rounds. Try and find out who this affects and when; once data has been imported you can :ref:`pre-check these adjudicators in and out of rounds ` (if your tab software supports this; otherwise note it for later)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:210 +msgid "Remember that the swing team(s) probably also need to be imported into the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:213 +msgid "Data import: rooms" +msgstr "" + +#: ../../guide/tournament-logistics.rst:217 +msgid "Ideally you want not just a list of rooms, but also of their types and categories — i.e. what building a room is in and/or it will be coded so that participants can find it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:218 +msgid "You want to know if access to some rooms is conditional; i.e. if some rooms are only available for some rounds. Again, if your tab software supports it you can :ref:`record this availability information into the system ` (once data is imported) otherwise you can note it for later." +msgstr "" + +#: ../../guide/tournament-logistics.rst:219 +msgid "Registration should have collected information about accessibility requirements; they should be imported into your tab software (if it :ref:`supports automatically matching accessibility requirements `) or note for later. In general you will also want to use a similar process to ensure that members of the adjudication core are assigned rooms that are close to the tab room." +msgstr "" + +#: ../../guide/tournament-logistics.rst:220 +msgid "You also want some idea of priority; that is to say if some rooms are inconvenient (and you have more rooms than you need) they should be marked as a low priority so they will be allocated only if needed. Again, this might be automatically done by your tab software or something you will need to note and manually change after each draw is made." +msgstr "" + +#: ../../guide/tournament-logistics.rst:223 +msgid "Data import: adjudicator test/CV scores" +msgstr "" + +#: ../../guide/tournament-logistics.rst:225 +msgid "Ideally the adjudication core should do this themselves as they are marking the test or scoring CVs. If they won't, or you don't trust them with full tab access, be prepared to do so yourself." +msgstr "" + +#: ../../guide/tournament-logistics.rst:228 +msgid "Data import: tab access" +msgstr "" + +#: ../../guide/tournament-logistics.rst:230 +msgid "Set up user accounts for the adjudication core with dummy passwords (they can change them later)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:231 +msgid "Set up user accounts for runners/assistants with dummy passwords (they can change them later)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:233 +msgid "If using Tabbycat and using online ballots or feedback with the private URLs method, participants should be emailed out their private URLs before they start travelling to arrive at the tournament (i.e. when they have a reasonable chance of checking their email). This can be done using the inbuilt pages on Tabbycat, or by importing participants data into a service such as Mailchimp." +msgstr "" + +#: ../../guide/tournament-logistics.rst:236 +msgid "Pre-Rounds Setup" +msgstr "" + +#: ../../guide/tournament-logistics.rst:239 +msgid "Setting up the tab room" +msgstr "" + +#: ../../guide/tournament-logistics.rst:241 +msgid "This is typically the first order of business, as all future pre-round setup tasks (i.e. training the adjudication core, testing printing, etc.) are better for being done in the same space that will be used throughout the rounds. Once you're in the space there are a couple of small checks to run through before the larger question of how to arrange and use the space should be tackled:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:245 +msgid "Check with convenors whether things can be left in the tab room overnight. If they can't you'll need to make plans for how to move any big items (printers; ballot stacks) to and from the tab room each day." +msgstr "" + +#: ../../guide/tournament-logistics.rst:246 +msgid "Check that the internet access in the tab room is reliable." +msgstr "" + +#: ../../guide/tournament-logistics.rst:247 +msgid "Check that the projector system works, both with whatever wired-in computer is in the room and when connected to your laptop." +msgstr "" + +#: ../../guide/tournament-logistics.rst:248 +msgid "Check what items either yourself, or the organisers, have at hand and check if anything needs to be acquired before the next day. Critical items for tab rooms are typically:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:252 +msgid "An extension cord with multi box; ideally a pair of each." +msgstr "" + +#: ../../guide/tournament-logistics.rst:253 +msgid "Whiteboard markers (assuming there is a whiteboard) otherwise permanent markers and large sheets of paper (i.e. A2) can suffice." +msgstr "" + +#: ../../guide/tournament-logistics.rst:254 +msgid "Boxes. Lots of boxes. Loose ballots are a source of confusion and error, so you want some way of temporarily storing ballots as they proceed through the entering and checking process. You probably want at least three large boxes (for ballots to-enter, ballots to-check, and finished ballots) but more will be useful." +msgstr "" + +#: ../../guide/tournament-logistics.rst:255 +msgid "Spare printing ink/toner, and paper for the printer. Ideally your paper would be multi-coloured, with each colour being used for a different round. Pastel colours are ideal, and you ideally want at least three different colours so that you don't have to repeat a colour within the same day. Be sure to calculate how many sheets you will need per round and ensure you have a generous number of spares." +msgstr "" + +#: ../../guide/tournament-logistics.rst:256 +msgid "If tabbing a format that can produce multiple ballots per-debate, staplers are essential to keep those ballots organised. Buy at least two sturdy ones." +msgstr "" + +#: ../../guide/tournament-logistics.rst:258 +msgid "Non-essential, but often useful to have items:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:262 +msgid "Whatever dongles/adapters you need to connect your laptop to the projectors, both in the tab room and in the briefing room." +msgstr "" + +#: ../../guide/tournament-logistics.rst:263 +msgid "An Ethernet cable (or two) as a backup option if WiFi drops or is overloaded." +msgstr "" + +#: ../../guide/tournament-logistics.rst:264 +msgid "Post-it notes are a great way to temporarily mark ballots with information; typically used to indicate ballots that need correcting." +msgstr "" + +#: ../../guide/tournament-logistics.rst:265 +msgid "You'll often need to make impromptu signs; sticky tape and/or blu-tack are good here" +msgstr "" + +#: ../../guide/tournament-logistics.rst:266 +msgid "Spare pens for the people doing data entry to use" +msgstr "" + +#: ../../guide/tournament-logistics.rst:267 +msgid "Trash bags for collecting rubbish as it accumulates" +msgstr "" + +#: ../../guide/tournament-logistics.rst:268 +msgid "A Chrome Cast can occasionally be very useful if a projector or screen doesn't have accessible input cables or so that you can use a projector without having your laptop tethered to a particular podium and desk." +msgstr "" + +#: ../../guide/tournament-logistics.rst:270 +msgid "If you haven't already it's a good idea to check your printing setup by printing off a bunch of generic ballots and feedback forms to have on hand if the need arises (i.e. a ballot is missing and needs to go out ASAP; or if someone can't do feedback online and needs to do so on paper). At worst, the blank ballots you print can be used for the out-rounds. While printing these off, time how long it takes the printer to print say 25 ballots and extrapolate from that to figure out how long it will take to print the entire round's worth of ballots. Note that if printing off a round's ballots is relatively quick it can be useful to delay it in order to better accommodate any last-minute changes to the draw that happen post-announcement. It's also worth thinking about how you (or at least who will) group up the printed ballots in order to distribute them to runners." +msgstr "" + +#: ../../guide/tournament-logistics.rst:272 +msgid "At this point you should also setup whatever process you need for managing runners and the ballot collection process. At a minimum, this should probably be a spreadsheet or a list on a whiteboard outlining the different groups of rooms with spaces to mark in which runners are delivering/collecting ballots for each location. Who is running where might change from day to day and should be kept updated. It should also have some method for contacting each runner (i.e. a cell phone number)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:274 +msgid "The question of how to arrange the actual room is one with many answers, and is obviously shaped by the peculiarities of the space itself. However there needs to be some system behind it so that people know exactly where to go and what to do when there is time pressure." +msgstr "" + +#: ../../guide/tournament-logistics.rst:276 +msgid "The key consideration behind this system is typically the 'flow' of ballots: what happens after they are brought back from runners, but before they are completely entered into the system. Think through how you want this process to operate and how the space can be arranged to make each step as smooth as possible. Considerations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:280 +msgid "When runners initially return a big stack of ballots, what happens? They could be transferred directly to the data-enterers to start on, but it is often useful to have preliminary checks here in order to keep the job of the data-enterers as simple as possible. These checks could include:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:284 +msgid "For formats with multiple ballots per-debate, you typically want to identify and staple together all the ballots from a given panel." +msgstr "" + +#: ../../guide/tournament-logistics.rst:285 +msgid "For tournaments where ballots are liable to go missing (or for when you have plenty of data-enterers and want peace of mind) it is worth using the :ref:`ballot 'check-in' system of your tab software ` (if it has one) to mark off ballots as physically present in the tab room. This allows you to quickly identify which ballots are missing and begin tracking them down earlier than you would do otherwise if just waiting for the 'to enter' pile to be exhausted." +msgstr "" + +#: ../../guide/tournament-logistics.rst:286 +msgid "Depending on your preferences and resources, ballots could at this stage be checked for errors. This could include a basic sweep for missing information (i.e. totals) or a comprehensive sweep that includes checking math errors, ambiguous handwriting, low-point wins, etc.). While this will delay the time between ballots arriving and being entered, it will mean that you can start correcting ballots sooner, and lessens the burden on (potentially inexperienced) data-enterers to check and catch these. If you have many runners, and they are familiar with how debating scoring works, this is recommended." +msgstr "" + +#: ../../guide/tournament-logistics.rst:288 +msgid "Once this preliminary step has occurred the next task is actually entering the ballots. The number of steps here is dependent on your tab software and tab settings; you might have had the 'draft' ballot be submitted online by chairs or you might have the whole two-step process of a 'draft' ballot entry and the 'confirmed' ballot entry taking place within the tab room. Considerations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:292 +msgid "Regardless of whether you are working with a one-step or a two-step process, you want to arrange the tables where data-enterers are sitting such that their need to move is minimised. That might mean either have a central inbox of ballots to enter in the centre of the tables (such that everyone can reach it) or having multiple 'clusters' of enterers around boxes." +msgstr "" + +#: ../../guide/tournament-logistics.rst:293 +msgid "If work with a two-step process you want those two steps to be an active part of the spatial arrangement. That is to say, typically there will be a grouping of enterers who are working on the initial ballot entry (clustered around a box or boxes) and then a separate 'downstream' grouping of enterers that work on confirming/validating those entries. Depending on the size of tournament and quantity of runners, you either want it so that individuals from the first group can easily pass their ballots to the box of the second group; i.e. by reaching across the table or walking a short distance. At huge tournaments, you might want a dedicated person to transfer ballots between boxes to prevent enterers having to get up." +msgstr "" + +#: ../../guide/tournament-logistics.rst:294 +msgid "In a two-step process people may need to transfer roles, as generally you want to prioritise entry and then validation. Often this isn't necessarily much more efficient, but if 'rebalancing' the roles make sure that the spaces assigned to each role can accommodate extra people, and that people physically move to occupy each role." +msgstr "" + +#: ../../guide/tournament-logistics.rst:295 +msgid "In general, you want to minimise the number of ballots that each enterer feels the need to 'hoard' to work through to keep the work evenly distributed. If people are taking a large number of ballots to process, at the final stages of entering some people will have a bunch to work through while others will be finished. Making it easy to collect and pass on ballots in the space itself helps cut down on this while keeping entry efficient." +msgstr "" + +#: ../../guide/tournament-logistics.rst:296 +msgid "While the exact spatial arrangement depends on your numbers and what furniture is available, a long rectangle is a good starting point as the ballot process is in general linear (check, enter, validate, finish). Typically, this might look like a series of tables in a row with enterers sitting on either side and with the various ballot boxes in the middle." +msgstr "" + +#: ../../guide/tournament-logistics.rst:297 +msgid "When ballots have finished being enter/validated there definitely should be some sort of final 'done' box. Take care how ballots are put here, a common source of error is people putting ballots there before they are fully finished." +msgstr "" + +#: ../../guide/tournament-logistics.rst:298 +msgid "When ballots need to be corrected you generally want to 'extract' them from this process and hand them off to a tab-director or assistant to chase up and collect. There should be a forethought process for managing this; and ideally a dedicated space for it to prevent ballots being lost and to make it easy to identify ongoing issues. This might look like a process of sticking a post-it note (outlining the error) to the ballot, and then pulling it from entry/validation and placing it on a desk. Ideally you also want one of the tab directors always *not* doing data entry so that they are immediately available to manage this process." +msgstr "" + +#: ../../guide/tournament-logistics.rst:301 +msgid "Training volunteers" +msgstr "" + +#: ../../guide/tournament-logistics.rst:303 +msgid "If at all feasible you want to train that volunteers acting as runners and/or data enterers the day *before* the tournament starts otherwise the first round will be rough. It's generally a good idea for this training session to generally mirror the process of running a round. It's also generally a good idea that — even if you have enough people for dedicated runner and data-enterer roles — to train all volunteers so that they are familiar with each role and can fill in if needed. This has a couple of stages:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:307 +msgid "Introductions and details" +msgstr "" + +#: ../../guide/tournament-logistics.rst:311 +msgid "Volunteering is typically thankless and often stressful. It's also quite a dull and mechanical process: deliver paper; collect paper; enter numbers; check numbers. Given the rather unglamorous nature of their role you want your volunteers to feel welcome and a crucial part of a wider team. When meeting everyone for the first time try and run the introductions in a non-perfunctory manner and get to know people's background/interests and outline how valuable they are to the tournament." +msgstr "" + +#: ../../guide/tournament-logistics.rst:312 +msgid "As part of this process you should, note their cell phone numbers or whatever means you will use to coordinate communication between the team." +msgstr "" + +#: ../../guide/tournament-logistics.rst:313 +msgid "Figure out what will be happening during downtime and how you can make it more enjoyable. Would volunteers like to watch debates, work in the tab room, etc. Is there anything they would like during those down times (music, snacks, coffee, etc.)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:315 +msgid "Rooms and Running" +msgstr "" + +#: ../../guide/tournament-logistics.rst:319 +msgid "If runners are unfamiliar with debating in general, outline the basics of what draws are, what ballots are actually for, and what this process looks like from a debater's perspective." +msgstr "" + +#: ../../guide/tournament-logistics.rst:320 +msgid "Outline how/when the printing process occurs and who will sort/assign the ballots. Now is a good time to assign different runners to the different groups/rooms that they will be working with." +msgstr "" + +#: ../../guide/tournament-logistics.rst:321 +msgid "It is critical that, as a group, you actually go to everyone one of the venue groups and identify all of the venue rooms that are listed so that everyone knows exactly where to go. This may take some time. But it is a good chance to both check those rooms actually exist and pre-identify any problems that might occur with runners and debaters finding them." +msgstr "" + +#: ../../guide/tournament-logistics.rst:322 +msgid "Outline in general what happens during ballot collecting: when to do it, how to approach chairs, what do to if they are slow or delaying. You should raise the chance of chairs being belligerent and outline how they (and you) should deal with this." +msgstr "" + +#: ../../guide/tournament-logistics.rst:323 +msgid "If you are having runners pre-check ballots it's a good idea to fill out a few 'bad' ballots to demonstrate the kinds of checking required. If you are using any communication systems (i.e. having runners mark of buildings as 'done' in an online system) go through that now also." +msgstr "" + +#: ../../guide/tournament-logistics.rst:325 +msgid "Data entry and checking" +msgstr "" + +#: ../../guide/tournament-logistics.rst:329 +msgid "Before starting, setup logins for everyone and show them how to login. Also get an idea of what devices they will be using, or can bring, for data entry purposes. Check/ensure that they will have internet access on those devices." +msgstr "" + +#: ../../guide/tournament-logistics.rst:330 +msgid "Run through this in the actual tab room; illustrating examples with actual ballots and going through the roles in the actual spots which they will occur." +msgstr "" + +#: ../../guide/tournament-logistics.rst:331 +msgid "Run through how the seating/table/box arrangement works and the types of roles at different positions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:332 +msgid "Emphasise that in general, any ambiguities should be raised with the tab directors/assistants; i.e. that you should never guess about ballots but instead always delegate resolving issues to someone else." +msgstr "" + +#: ../../guide/tournament-logistics.rst:333 +msgid "Run through the different edge cases and things to check during entry. For example Iron Person speeches, mismatched totals, entering the wrong ballot for the wrong panellist, etc (see section below). Be sure to also go through what happens when the validation step fails; i.e. when a ballot needs to be re-entered." +msgstr "" + +#: ../../guide/tournament-logistics.rst:336 +msgid "Training the adjudication core" +msgstr "" + +#: ../../guide/tournament-logistics.rst:338 +msgid "Typically making the first-round's draw and allocation is the best time to really run through how your tab software and processes work in a 'real' environment as well as the expectations surrounding their and your role. Generous amounts of time should be budgeted for this; it's not uncommon for it to take up most of an evening. It's also worth having an older tab, or a tab full of fake data handy in order to show them how, say, the feedback or allocation interfaces look like when full of data." +msgstr "" + +#: ../../guide/tournament-logistics.rst:340 +msgid "To kick off you should probably setup tab logins for the adjudication core as necessary, outline what kinds of access they have, and (particularly if they haven't used your tab software before) outline broadly what pages they should and shouldn't access. In particular, show them how to find and parse feedback as that is often the interface where they will be spending most of their time individually. As part of this tour outline (if you haven't already) how feedback will work, as well as the means by which the adjudication core can use the tab software to keep track of feedback as it comes in. Ideally some sort of general strategy should be formed for this, so that particular people sit out rounds, or are delegated the task of catching up on feedback at other points." +msgstr "" + +#: ../../guide/tournament-logistics.rst:342 +msgid "Depending on how many runners you have it may be necessary, or beneficial, if the adjudication core helps out with data entry. However, if you go down this route the adjudication core need to be highly trained; they are often much more likely than volunteers (who are less self-confident and have more experience) to make errors. Whether you do or don't do this, ensure that adjudication core members know to come to the tab room ASAP after they have finished adjudications rather than swanning around socialising or going to lunch. Draws will often be held up just by the fact that not enough adjudication core members are present to start or finish an allocation." +msgstr "" + +#: ../../guide/tournament-logistics.rst:344 +msgid "The first-round allocation is the last thing you want to cover. It is typically your only change to slowly and comprehensively walk the adjudication core through the allocation interface and the allocation system." +msgstr "" + +#: ../../guide/tournament-logistics.rst:346 +msgid "Allocation interfaces, while often complex, should be stepped through so that the adjudication core knows precisely how to operate it themselves (if needed). They should know what it can (and can't do) and how the different features can be used and activated. For example, diversity highlights might be an optional toggle (in which case you explain how to active it, when to do so, and what it represents) or there might be parts of the interface that detail information such as a room's liveness, energy, or bracket which should be highlighted and explained (i.e. how 'liveness' is determined)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:348 +msgid "Secondly, and most importantly, is outlining how the automated process of adjudicator allocation operates, and how this can be made to match the adjudication core's preferences. Typically, you want to rely on automatic adjudicator allocations as much as possible in order to decrease the time taken to do an allocation; however every adjudication core has a different philosophy on what their perfect allocation looks like, and it is your job to try and align that ideal with what the automated system produces as much as is possible. The precursor to this is yourself knowing how your tab system allocation works: what is the relationship between a debate's bracket (or assigned priority/energy) and the numeric ranking of the automatically generated panel? Does the software optimise panel strength for a voting majority, or across all panellists? When does the software allocate solo chairs over panels? How does it avoid conflicts? Does it have (and enforce) particular expectations for a given adjudicator's score; or does it rely on a more relative comparison? The answers to the questions will often be dramatically different between different programs and you should know them in advance." +msgstr "" + +#: ../../guide/tournament-logistics.rst:350 +msgid "Most tab software will have at least some options for you to configure those automated processes — either by changing the automatic allocation's parameters directly or by controlling the ranking and feedback systems that feed into it. The first round is the prime opportunity to configure these options so that they align as close as possible with what the priorities of the adjudication core. If your feedback ranking system is mismatched with how you expect the automatic allocation to place adjudicators, or if the distribution of adjudicators across the draw is not what you expect, the adjudication core will end up wasting significant amounts of time adjusting allocations. Even if things work well using the default settings, ensure you experiment and demonstrate the consequences of changing the settings just to show that it can be done, what the general effects are, and to see if there are even-better configurations." +msgstr "" + +#: ../../guide/tournament-logistics.rst:352 +msgid "This process of tweaking the automatic allocation settings is one you should also revisit as the rounds progress." +msgstr "" + +#: ../../guide/tournament-logistics.rst:354 +msgid "How to approach diversity (typically in terms of region and gender) across an allocation in particular is something that some members of an adjudication core will not have had to consider in the context of a large tournament with time pressure or in terms of having to make explicit trade-offs. Again, you should make it clear how the software can accommodate this, and get the adjudication core to plan for how (in general) they want to approach this. Often it will form the final phase of the allocation process, and so can easily be forgotten or skipped over; or people will have different philosophies of how to approach this which are only raised at critical points." +msgstr "" + +#: ../../guide/tournament-logistics.rst:356 +msgid "Outline that there will usually be a trade-off between the quality of each allocations and the speed at which the tournament runs. When time is not a factor, many adjudication cores will often take an hour or more in order to create a perfect allocation; but they should know though that aiming for perfect during many rounds will break the schedule. You should try and get them to set some sort of time goal for allocations, and (during the rounds) ensure that they are aware of when they are going too fast or too slow. Depending on your personal preferences and the norms surrounding tab direction in your circuit you may want to actual enforce these time limits." +msgstr "" + +#: ../../guide/tournament-logistics.rst:358 +msgid "Finally, outline how you will all communicate. Again, there should be a single medium for this so that everyone knows what is going on; and this is ideally something that has been planned out beforehand with them and the organising committee. But at this point the tab team may have expanded, or there may be better options than what was being used previously. It's also worth outlining which parts of the tab team will generally be doing what roles and where — i.e. who will be rolling the draw, who will be chasing up people, etc." +msgstr "" + +#: ../../guide/tournament-logistics.rst:361 +msgid "Preparing a briefing" +msgstr "" + +#: ../../guide/tournament-logistics.rst:365 +msgid "At large tournaments there should be some form of briefing covering ballots and feedback process, even if it is just quick one. Usually you will want to be the person to design and deliver this; other people less-familiar with the system may miss details." +msgstr "" + +#: ../../guide/tournament-logistics.rst:366 +msgid "Liaise with convenors and the other people doing briefings to ensure (a) they know you're doing one; and (b) you are not overlapping in terms of content." +msgstr "" + +#: ../../guide/tournament-logistics.rst:367 +msgid "See the last section of this document for notes on what can be useful to include here" +msgstr "" + +#: ../../guide/tournament-logistics.rst:370 +msgid "Final checks" +msgstr "" + +#: ../../guide/tournament-logistics.rst:374 +msgid "Check if the convenors have made a map that clearly outlines where the rooms are. Ensure it's clear and post it to either the tab site (ideally) or somewhere like Facebook." +msgstr "" + +#: ../../guide/tournament-logistics.rst:375 +msgid "Check that convenors have some sort of way-finding system in place, i.e. chalked directions or colour-coded signs. Check these colour codes match the names of your venues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:376 +msgid "Check that the draw types are correct for each round in the tab system." +msgstr "" + +#: ../../guide/tournament-logistics.rst:377 +msgid "Check with adjudication core if/when there are secret rounds and that these are correct in the edit data base area." +msgstr "" + +#: ../../guide/tournament-logistics.rst:378 +msgid "Check how the draw will be displayed and managed. Is the projector good; how big does the text size need to be? How fast is the scroll?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:379 +msgid "If you will pre-print ballots check that you've set the \"return ballots to\" configuration setting; even if it just says \"to runners\"." +msgstr "" + +#: ../../guide/tournament-logistics.rst:382 +msgid "Managing Rounds" +msgstr "" + +#: ../../guide/tournament-logistics.rst:384 +msgid "Once everything has been setup and everyone knows what they should do, the actual process of running each round should go smoothly. It probably won't though. The earlier sections should have laid out what the ideal process for managing data entry and allocations, so this section will instead focus on what can go wrong and what to keep an eye out for." +msgstr "" + +#: ../../guide/tournament-logistics.rst:387 +msgid "Disaster scenarios" +msgstr "" + +#: ../../guide/tournament-logistics.rst:389 +msgid "There are two broad classes of disaster scenario here. The first, and more rare case is when either internet access at the venue goes out or if a web service that your tab software depends on has an outage (for example, both Tabbie 2 and Heroku-deployed Tabbycat instances depend on Amazon Web Services). The first can at least be solved temporarily if tethering is available, but if that is not possible (or the latter case occurs) you may need to switch to using an offline copy of that tab by restoring from a backup if the outage is non-transient." +msgstr "" + +#: ../../guide/tournament-logistics.rst:391 +msgid "Obviously, for this to work, you should be taking regular backups using whatever mechanism your tab software allows. Key times to do so are critical events such as finishing entering a round's data or finalising an adjudication allocation as these are especially difficult to recreate. Importantly, these backups are only useful to you if you have a downloaded copy of them; ideally download to a Dropbox or some other cloud service that will spread them across multiple computers and an online service." +msgstr "" + +#: ../../guide/tournament-logistics.rst:393 +msgid "Having an outage of internet access or a key web service go down to the point of having to switch to an offline tab is an exceedingly rare event, but one worth planning for at large tournaments. That is to say you should have ideally have an offline copy of your tabbing software setup on your local machine, and know how to restore a backup to it if necessary." +msgstr "" + +#: ../../guide/tournament-logistics.rst:395 +msgid "Backups are also useful as guards against a much more common source of error: data loss caused by user error. It is not unheard of for even experienced tab directors (or inexperienced adjudication core members) to accidentally delete an entire allocation, delete a round, or some other form of destructive action that would require a lot of work to redo. Taking backups at key points, and knowing how to restore them (to the online copy of the tab) is a useful — and occasionally essential — skill." +msgstr "" + +#: ../../guide/tournament-logistics.rst:397 +msgid "The much more common source of a major tab disruption is a major user-error or a bug within your tab software itself. Fixing these will be highly-context dependent and the best way you can prepare for them is to know your tab software well enough to understand what might have caused it or be able to contact someone else who does. That said, having backups on hand can also allow you to restore your database to before the bug or user-error occurred and try to proceed without re-triggering it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:400 +msgid "Expected problems" +msgstr "" + +#: ../../guide/tournament-logistics.rst:402 +msgid "Incorrect ballots are an inevitable tragedy. Many more optimistic tab directors will imagine that these can be prevented through sufficiently detailed briefings, recurring public shamings, or fool-proof ballot designs. While these might help in cutting down the number of errors, eliminating them entirely seems to be an unachievable goal. Note that this is particularly true at international tournaments and/or at tournaments that draw participants from circuits which have more than one predominant format." +msgstr "" + +#: ../../guide/tournament-logistics.rst:404 +msgid "While debaters as a whole display astonishing levels of innovation in discovering new ways to incorrectly fill in a ballot, there are a couple of broad cases that you should look out for an prepare people to deal with:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:408 +msgid "Not adding up score correctly. Pretty much everyone who does this will note that this is the first time that it has ever happened to them." +msgstr "" + +#: ../../guide/tournament-logistics.rst:409 +msgid "Omitting some information. Most common are not filling in total scores, the nominating winner, or the margin. Having omitted an entire team's scores or speaker names is not uncommon." +msgstr "" + +#: ../../guide/tournament-logistics.rst:410 +msgid "Scores that are outside the range." +msgstr "" + +#: ../../guide/tournament-logistics.rst:411 +msgid "Low-point wins, or tied-point wins. Typically occurs in conjunction with (1)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:412 +msgid "Poor handwriting rendering numbers illegible. While one could 'guess' whether a number is in fact a 6 or a 5 based on a team's total score, doing so is dangerous as it assumes that the person hasn't also done (1)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:413 +msgid "'Correcting' information in an ambiguous way. For example, using arrows to swap a speaker's order (which is typically circular/ambiguous) or drawing numbers over other numbers in a way that makes it unclear which is the original and which is the replacement." +msgstr "" + +#: ../../guide/tournament-logistics.rst:414 +msgid "Ballots just going entirely missing because either a runner missed the room, the chair forgot to return it, or the chair just left it in the room." +msgstr "" + +#: ../../guide/tournament-logistics.rst:416 +msgid "Ballots aside, there are a number of other common occurrences that will necessitate changes to the drawn and allocations:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:420 +msgid "Teams will not turn up to debates, or turn up to debates extremely late. In both cases they will often not notifying anyone. Aside from needing to swap in a swing team in their place in the draw, it's worth keeping in mind that the necessity of a swing team might not be known until right when debates are about to start (which can lead to issues if you assume trainees or runners will be filling up the 'spare' swing team)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:421 +msgid "Adjudicators will also go missing. As with teams this can usually be caught during roll call; but might also not be known up until debates start. If the adjudication core is available they can make adjustments, but often you will need to make a call as to whether to form an even-sized panel or to redistribute adjudicators from elsewhere." +msgstr "" + +#: ../../guide/tournament-logistics.rst:422 +msgid "When a draw is released there will often be conflicts that were unknown to the tab system, and will necessitate making changes to the draw post-release. It's important that when making these changes you keep a clear record of what needs to change (if there are multiple swaps needed it can get tricky to keep track of) and ensure that all parties involved know about where they are being swapped to." +msgstr "" + +#: ../../guide/tournament-logistics.rst:425 +msgid "Ongoing checks" +msgstr "" + +#: ../../guide/tournament-logistics.rst:427 +msgid "You will have a decent amount of downtime during rounds when debates are happening. A couple of things its worth keeping an eye on during that time:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:431 +msgid "Ensuring your backups have been taken and downloaded." +msgstr "" + +#: ../../guide/tournament-logistics.rst:432 +msgid "Ensuring the tab room isn't devolving into mess." +msgstr "" + +#: ../../guide/tournament-logistics.rst:433 +msgid "If you can be bothered (and if no adjudication core member is doing so) reviewing feedback for critical issues (i.e. comments highlighting severe issues, or chairs getting very low scores) is a good way to be useful. If using paper-based feedback this can look like physically separating out these feedback forms for the attention of the adjudication core; while if using online feedback systems you may want to keep a collection of browser tabs to show." +msgstr "" + +#: ../../guide/tournament-logistics.rst:434 +msgid "Chasing up the language committee (if one exists for this tournament) to confirm which teams are in which category and what their break preferences are (if multiple breaks are not allowed). You want to have this information confirmed as soon as possible as it becomes of critical value to allocations once the draw starts segmenting into live/dead rooms." +msgstr "" + +#: ../../guide/tournament-logistics.rst:435 +msgid "Reviewing how efficiently things are running and whether there are any bottlenecks that can be better addressed in the next round. It's generally a good idea to (on a whiteboard or a spreadsheet) keep track of how long each stage of a round is taking (running, data-entry, allocation) and what (if anything) is causing delays." +msgstr "" + +#: ../../guide/tournament-logistics.rst:437 +msgid "If hosting Tabbycat on Heroku keep an eye on the metrics section of the dashboard area, noting if there are 'timeout errors' and what the average response times are. Adding more dynos should help with both." +msgstr "" + +#: ../../guide/tournament-logistics.rst:440 +msgid "Breaks and Break Rounds" +msgstr "" + +#: ../../guide/tournament-logistics.rst:443 +msgid "Generating the adjudicator's break" +msgstr "" + +#: ../../guide/tournament-logistics.rst:445 +msgid "Determining the adjudicator break generally involves a complex set of considerations rather than strictly ranking based on feedback. As such most adjudication cores will use whiteboards or Google docs to draft and discuss the possible options. One thing to note here is that breaking adjudicators will need to be marked as such in the tab at some point (both so they can be on future draws, and for publication) so you want to be careful that the tab is the final source of authority here — it is easy for information to get out of sync between what the adjudication core is using to draft the break and the system." +msgstr "" + +#: ../../guide/tournament-logistics.rst:447 +msgid "When the adjudication core is determining the break ensure that they have an idea of the *quantity* of adjudicators needed (breaking too few or too many will cause issues) and whether there are any special considerations (such as having conflicts with large portions of the draw, or leaving at a given point) that involve a specific adjudicator being considered." +msgstr "" + +#: ../../guide/tournament-logistics.rst:450 +msgid "Generating the team break" +msgstr "" + +#: ../../guide/tournament-logistics.rst:452 +msgid "Before doing so in an automated fashion, first check in your tab software whether all teams are assigned to the right break categories. Depending on whether your software supports multiple formats you probably also want to check that each break category is using the right 'rule' specified by the tournament (i.e. a WUDC- or Australs- compliant break ranking). Also double check the break size itself is correct in the software." +msgstr "" + +#: ../../guide/tournament-logistics.rst:454 +msgid "Hopefully the automated system will generate a correct break, but this should always be checked against what you'd expect the results to be from standings. Note also that there are cases, such as when a team has to leave, or when teams are or are not double-breaking, that mean the automated break results need to be overridden (typically in Tabbycat you would add a marker or note to include their ranking, but exclude them from having a break rank)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:457 +msgid "Announcing the break" +msgstr "" + +#: ../../guide/tournament-logistics.rst:459 +msgid "Mistakes are made surprisingly often during results announcements. Again, this is often a problem with incomplete or out of sync data, where print-outs, slides, or the tab site itself might not reflect (for example) last minute changes about breaks or have potentially mixed up teams or adjudicators with similar names. Things that can help:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:463 +msgid "Have a single source for what is being read out — i.e. a printed list (recommended) or the tab site itself — but don't mix and match. If making slides (often a good idea for large/crowded venues) copy the data from the canonical source being announced." +msgstr "" + +#: ../../guide/tournament-logistics.rst:464 +msgid "Double check what is being read out against the tab site, and/or whatever draft lists were used to determine the adjudicator's break. Verify with the adjudication core that everyone who should be there is, and that nobody is missing." +msgstr "" + +#: ../../guide/tournament-logistics.rst:465 +msgid "Clarify what information should be on the print-outs and the general order in which things are read. For example, it might be easy to omit breaking adjudicator's institutions, to use ambiguous abbreviations over full institution names, or to have an inconsistent approach to how the information is read (i.e. whether it is read as *wins* then *team points* then *team name*)." +msgstr "" + +#: ../../guide/tournament-logistics.rst:466 +msgid "Without revealing any details try and get at least some guidance on how to pronounce names that people are not familiar with pronounce." +msgstr "" + +#: ../../guide/tournament-logistics.rst:467 +msgid "Have backup copies of whatever is being read from and clarify who is reading off what portions." +msgstr "" + +#: ../../guide/tournament-logistics.rst:468 +msgid "Try to publish the break list on the tab website (or via some other online method) shortly after it is announced in order to minimise the chance of misinformation spreading." +msgstr "" + +#: ../../guide/tournament-logistics.rst:471 +msgid "Managing the out-rounds" +msgstr "" + +#: ../../guide/tournament-logistics.rst:473 +msgid "Out-rounds are generally under less time pressure and can be managed by just one or two members of the tab team. However, they tend to be run in a more haphazard fashion, so there are a couple of things to keep on top of:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:477 +msgid "You should keep track of which adjudicators have or have not been used throughout the finals allocations. It is easy for adjudication cores to forget to allocate someone and have to either drop them or promote them beyond what they had originally intended." +msgstr "" + +#: ../../guide/tournament-logistics.rst:478 +msgid "It is very easy for ballots to get lost in break rounds as chairs have less defined roles and processes in what they do with their ballots. While having correct speaker scores correctly entered for break rounds isn't a strict necessity, it is nice to have and the alternative (using fake speaks just to record the winner) can cause confusion. Closely manage distributing ballots to the chairs and collecting them as soon as possible afterwards; especially if there is any time pressure. Generally it is not worth printing off per-debate ballots; just print a stack of generic ballots at the start of the out-rounds and distribute as needed." +msgstr "" + +#: ../../guide/tournament-logistics.rst:479 +msgid "You should know, in addition to when the break rounds are, when the results announcements are. Often these announcements are saved (for suspense or logistics reasons) until particular points of time (i.e. until the evening social; or until other out-rounds are finished). Obviously it's important not to accidentally release results; but often convenors and the adjudication core will often have different ideas about when results are meant to be released." +msgstr "" + +#: ../../guide/tournament-logistics.rst:481 +msgid "If using Tabbycat to manage out-rounds with multiple break categories, note that the round progression is no longer strictly linear. So be careful with when/if results are released online and note that often you can't rely on online interface to release draws publicly." +msgstr "" + +#: ../../guide/tournament-logistics.rst:484 +msgid "Preparing for tab release" +msgstr "" + +#: ../../guide/tournament-logistics.rst:486 +msgid "At some point, if you haven't already, have a discussion with the adjudication core about when the tab itself will be released and what data will be released. Well before the tab is due to be released you want to check that anonymisations and any speaker flags (i.e. Novice, ESL) are up to date in your tab software." +msgstr "" + +#: ../../guide/tournament-logistics.rst:489 +msgid "Managing the tab release" +msgstr "" + +#: ../../guide/tournament-logistics.rst:491 +msgid "Almost there!" +msgstr "" + +#: ../../guide/tournament-logistics.rst:493 +msgid "If hosting Tabbycat on Heroku it's worth increasing the resources available to the server for the ~12 hour period following tab release; it's by far the most concentrated burst of traffic the site will receive. Because Heroku bills by the hour, even going to a relatively expensive option, such as performance dynos with auto-scaling, will be very cheap if run just for this period. That said the site should be relatively resilient even in the face of large amounts of traffic; even running with the most basic resources allocated, at worst pages will be temporarily slow or not load." +msgstr "" + +#: ../../guide/tournament-logistics.rst:495 +msgid "To get an idea of how the site is performing in the Heroku dashboard keep an eye on the average request time number and adjust the number of dynos to try and keep it under say two seconds; ideally just one. When you first turn on the tab release settings, make sure you go through and load every page before announcing it to the public, doing so will trigger the caching mechanism that means potentially complex pages (say the speaker tab) don't need to be calculated from scratch each time someone loads the page." +msgstr "" + +#: ../../guide/tournament-logistics.rst:498 +msgid "Post-tournament" +msgstr "" + +#: ../../guide/tournament-logistics.rst:500 +msgid "Once you have sufficiently recovered, consider writing up and sharing a post-script about how things went; noting things that did or didn't go well. Next year's tab directors would certainly appreciate it, and it would be great to see this kind of knowledge spread more widely. The developers of your tab software would also appreciate hearing your feedback; particularly if there were issues that could have been prevented or ameliorated by the software itself." +msgstr "" + +#: ../../guide/tournament-logistics.rst:503 +msgid "Appendix: Briefing Notes" +msgstr "" + +#: ../../guide/tournament-logistics.rst:505 +msgid "This is a very loose, but not exhaustive, collection of things that are useful to communicate to speakers and adjudicators in a tab briefing. While briefing fatigue is real, having clear expectations about how things like ballots and feedback work are highly valuable uses of the tournament's time if they can at all help cut down the kinds of problems that delay the tab." +msgstr "" + +#: ../../guide/tournament-logistics.rst:508 +msgid "How feedback works" +msgstr "" + +#: ../../guide/tournament-logistics.rst:510 +msgid "Is it online, or offline? If online did people receive links? What do they do if they have lost it?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:511 +msgid "Is feedback mandatory? What accountability mechanisms are there? Will you publish the shame list online or raise it in between rounds?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:512 +msgid "Who will be submitting feedback on who? Do trainees do so?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:513 +msgid "Remind teams that only one of their feedbacks count; they should coordinate who is doing it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:514 +msgid "What is the feedback scale? What does it correspond to? Common sources of confusion:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:516 +msgid "Feedback scales are not like Uber. You do not get five stars for being adequate and generic." +msgstr "" + +#: ../../guide/tournament-logistics.rst:517 +msgid "Feedback scales are not relative to position; it is an absolute scale. That is to say, if your trainee was good, they probably do not deserve the highest rating; they get whatever rating indicates they should be a panellist or low-chair." +msgstr "" + +#: ../../guide/tournament-logistics.rst:518 +msgid "Consider accompanying the score/scale with a statement characterising how these numbers correspond to positions - e.g. a 4.0 means 'should continue on good panels, should chair low rooms'" +msgstr "" + +#: ../../guide/tournament-logistics.rst:520 +msgid "If using online submission options, what should people without phones or internet access do?" +msgstr "" + +#: ../../guide/tournament-logistics.rst:523 +msgid "How ballots work" +msgstr "" + +#: ../../guide/tournament-logistics.rst:525 +msgid "This part of the presentation will be condescending. It is also necessary. The two causes of delays in the draw running late, and thus the tournament running late are (1) people not filling out ballots correctly or (2) people's ballots going missing. Emphasise that this should be taken seriously; minutes spent chasing bad ballots are often minutes that delay every single person at the tournament from doing what they are actually here to do. You should highlight, ideally with illustrated examples:" +msgstr "" + +#: ../../guide/tournament-logistics.rst:529 +msgid "Which parts of the ballot *must* be filled in; people will often overlook margins, or special fields such as motion vetoes." +msgstr "" + +#: ../../guide/tournament-logistics.rst:530 +msgid "That people must specify the full names of speakers; not nicknames or just-first names. Often names will be written poorly or have ambiguities (i.e. two speakers on a team called James) and having the full name is the only way to resolve it." +msgstr "" + +#: ../../guide/tournament-logistics.rst:531 +msgid "That people should **not draw arrows to swap the order of speakers** as these are impossible to decipher. Here, and in other areas, always *cross-out* information clearly and write it again rather than using arrows or drawing over what is there." +msgstr "" + +#: ../../guide/tournament-logistics.rst:532 +msgid "That people should try and write numbers in a manner that makes them crystal clear. Put cross-bars in 7s; bases on 1's. Make 8's actually look like two circles. If people know they have poor handwriting maybe consider writing the literal words — *seventy-one* below the numbers." +msgstr "" + +#: ../../guide/tournament-logistics.rst:533 +msgid "That for styles that do not have a single ballot for a panel, reiterate that everyone fills in their own ballots. At Australs, if this isn't made absolutely clear someone will average their panels ballots in order to try and 'help' you." +msgstr "" + +#: ../../guide/tournament-logistics.rst:534 +msgid "That runners do not fill out ballots. In BP, remind them that only chairs should fill out ballots (i.e. it cannot be deputised to a wing). In formats with individual ballots, remind chairs to make sure their wings have actually filled out a ballot, and get them to check for errors or ambiguities." +msgstr "" + +#: ../../guide/tournament-logistics.rst:535 +msgid "That everyone is bad at math. People who think they are good at math just haven't messed up their ballot *yet*. Emphasize that people should always use their phone's calculators to check totals. At typical tournaments using exclusively paper ballots math errors happen multiple times a round, almost every round." +msgstr "" + +#: ../../guide/tournament-logistics.rst:536 +msgid "How long people have to fill out their ballots. Suggest that chairs actually keep track of this time during a stopwatch, and start moving towards critical steps (i.e. scoring) well *before* the time is up, not *once* it is up." +msgstr "" + +#: ../../guide/tournament-logistics.rst:537 +msgid "Outline what chairs should do to return ballots. If ballots are being run by runners, outline what they should do if a runner doesn't appear. If they are not being run by runners remind people that returning ballots should be there number one priority, over say giving a lengthy adjudication or team feedback. Or getting lunch." +msgstr "" + +#: ../../guide/tournament-logistics.rst:538 +msgid "Remind people to *be nice to runners* and that being mean to runners will have serious consequences." +msgstr "" + +#: ../../guide/tournament-logistics.rst:539 +msgid "Remind people that the tab team and adjudication core will not, except for absolutely exceptional circumstances, accept photos or messaged descriptions of ballots; that all results must be on paper and handled in the same manner. The adjudication core should also be reminded of this." +msgstr "" + +#: ../../guide/tournament-logistics.rst:542 +msgid "How to locate the tab room" +msgstr "" + +#: ../../guide/tournament-logistics.rst:544 +msgid "People should know how to get to the tab room, either to raise issues with the adjudication core or to correct ballot errors. Make it crystal clear where it is and how to get there. Also ensure people know not to barge in; that they should knock and wait." +msgstr "" + +#: ../../guide/tournament-logistics.rst:546 +msgid "Clearly communicate the contact details of the tab directors and get people to take them down. In most cases you do not want people going through convenors or the adjudication core for any tab-related issues." +msgstr "" + +#: ../../guide/tournament-logistics.rst:549 +msgid "Misc" +msgstr "" + +#: ../../guide/tournament-logistics.rst:551 +msgid "Now is a good time to encourage people to consider getting involved with tabbing and tab-development. Emphasize that both do not necessarily require technical skills and that tabbers are (or should be) open to feedback and ideas from the wider community. Tell people to come find you and chat if they are interested and put up a link to the `Facebook tabbing group `_." +msgstr "" + +#: ../../guide/tournament-logistics.rst:553 +msgid "If you appreciated this guide we'd appreciate a slide promoting `Timekept `_ and `Debatekeeper `_. This would also be a good point to remind people that their timekeeping apps shouldn't be making noise *unless* they have been explicitly assigned to keep time by the chair." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/guide/upgrading.po b/docs/locale/vi/LC_MESSAGES/guide/upgrading.po new file mode 100644 index 00000000000..5d93ea601ef --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/guide/upgrading.po @@ -0,0 +1,60 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/guide/upgrading.po\n" +"X-Crowdin-File-ID: 1309\n" +"Language: vi_VN\n" + +#: ../../guide/upgrading.rst:5 +msgid "Upgrading Tabbycat" +msgstr "" + +#: ../../guide/upgrading.rst:7 +msgid "Generally only want to upgrade copies of tab sites that are used on an ongoing basis for multiple tournaments, or if there is a bugfix release between when you setup your site and when the tournament is running." +msgstr "" + +#: ../../guide/upgrading.rst:11 +msgid "Going from any version of Tabbycat 1 to any version of Tabbycat 2 won't work with the below instructions — check out the CHANGELOG for the 2.0 version for details of how to perform this upgrade." +msgstr "" + +#: ../../guide/upgrading.rst:14 +msgid "Upgrading a Local Copy" +msgstr "" + +#: ../../guide/upgrading.rst:16 +msgid "Assuming you haven't made any changes to the Tabbycat code, upgrading a locally installed copy should just be a matter of `downloading the latest source code `_ and replacing the existing files with the new ones. If you used git to download these files initially you can just pull down the latest copy of the master branch to do this." +msgstr "" + +#: ../../guide/upgrading.rst:18 +msgid "You would then repeat the \"Install Tabbycat\" instructions for your original installation method." +msgstr "" + +#: ../../guide/upgrading.rst:21 +msgid "Upgrading on Heroku" +msgstr "" + +#: ../../guide/upgrading.rst:23 +msgid "The easiest way to upgrade a Heroku site is to create an account on Github and then to `'fork' `_ the `Tabbycat repository `_." +msgstr "" + +#: ../../guide/upgrading.rst:25 +msgid "Once you have done this you can login to your Heroku Dashboard, go to your app, and then navigate to the Deploy tab. In this tab, adjacent to *Deployment method* select the GitHub option. This will bring up a new 'Connect to GitHub' section where you can search for 'Tabbycat' to find the copy of the repository you made earlier and connect it." +msgstr "" + +#: ../../guide/upgrading.rst:29 +msgid "Once connected a new *Manual deploy* section will appear. Make sure you select the *master* branch (not develop) and then click *Deploy Branch*. This will then show the app deploying and notify you when it has finished; which may take several minutes." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/index.po b/docs/locale/vi/LC_MESSAGES/index.po new file mode 100644 index 00000000000..5ae5edbad64 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/index.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/index.po\n" +"X-Crowdin-File-ID: 1311\n" +"Language: vi_VN\n" + +#: ../../index.rst:18 +msgid "Installation" +msgstr "" + +#: ../../index.rst:32 +msgid "Using Tabbycat" +msgstr "" + +#: ../../index.rst:41 +msgid "Tabbing Guide" +msgstr "" + +#: ../../index.rst:52 +msgid "Feature notes" +msgstr "" + +#: ../../index.rst:75 +msgid "About" +msgstr "" + +#: ../../index.rst:8 +msgid "Tabbycat User Guide" +msgstr "" + +#: ../../index.rst:10 +msgid "Tabbycat is a draw tabulation system for parliamentary debate tournaments. It supports two-team formats such as Australs, World Schools, Asians, Australian Easters and all New Zealand formats, as well as British Parliamentary (WUDC). It is also highly configurable, supporting many custom variations of the above formats too. If you're looking for a general overview of the software, check out our `README on Github `_." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/install/docker.po b/docs/locale/vi/LC_MESSAGES/install/docker.po new file mode 100644 index 00000000000..9b58bc9b47e --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/install/docker.po @@ -0,0 +1,173 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/docker.po\n" +"X-Crowdin-File-ID: 1313\n" +"Language: vi_VN\n" + +#: ../../install/docker.rst:5 +msgid "Installing Locally using Docker" +msgstr "" + +#: ../../install/docker.rst:7 +msgid "Is this the best install method for you?" +msgstr "" + +#: ../../install/docker.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/docker.rst:12 +#, python-format +msgid "If you need an offline copy of Tabbycat, installing using Docker should be simpler and quicker than using the \"Install Locally on…\" instructions for your operating system. However if a Docker installation doesn't work as outlined below, it's harder to address what isn't working. If you encounter any problems with Docker, we recommend using the \"Install Locally on…\" option as a fallback, but if you need to do so, `please also report the issue you're having on GitHub `_ or :ref:`contact the developers `." +msgstr "" + +#: ../../install/docker.rst:14 +msgid "Docker is an application that makes it very easy to load and run a specific collection of software. It allows us to bundle everything necessary to run Tabbycat into a single package rather than have users install everything needed step-by-step. Once set up, Docker will allow you to start and stop a webserver (that in turn runs Tabbycat) on your computer whenever you want and without the need for internet access." +msgstr "" + +#: ../../install/docker.rst:18 +msgid "1. Download Tabbycat" +msgstr "" + +#: ../../install/docker.rst:20 +msgid "`Go to the page for our latest release `_." +msgstr "" + +#: ../../install/docker.rst:22 +msgid "Download the zip or tar.gz file." +msgstr "" + +#: ../../install/docker.rst:24 +msgid "Extract all files in it to a folder of your choice." +msgstr "" + +#: ../../install/docker.rst:28 +msgid "2. Install Docker" +msgstr "" + +#: ../../install/docker.rst:31 +msgid "If using macOS or Linux" +msgstr "" + +#: ../../install/docker.rst:33 +msgid "Install the **Docker Community Edition (stable)** from the `Docker store page `_." +msgstr "" + +#: ../../install/docker.rst:36 +msgid "If using Windows 10 Pro, Enterprise, or Education Edition" +msgstr "" + +#: ../../install/docker.rst:40 +msgid "Install the ****Docker Community Edition (stable)*** from the `Docker store page `_." +msgstr "" + +#: ../../install/docker.rst:41 +msgid "Before or shortly after installing it, Docker may ask you to enable hypervisor and restart your PC. If it asks you this follow the prompts and restart as asked." +msgstr "" + +#: ../../install/docker.rst:42 +msgid "Once Docker has finished installing, open up the newly-installed Docker application, then right-click the app's icon (the whale) in the Taskbar." +msgstr "" + +#: ../../install/docker.rst:43 +msgid "From there, hit *Settings* in the menu and *Shared Drives* in the sidebar. Tick the checkbox next to your hardrive and then click *Apply*. After that has applied exit and reopen the docker app (ie right-click the taskbar icon and hit exit) and verify that the checkbox is still there." +msgstr "" + +#: ../../install/docker.rst:49 +msgid "If using Windows 7, Windows 8, or Windows 10 Home Edition" +msgstr "" + +#: ../../install/docker.rst:51 +msgid "Install the **Docker Toolbox** from the `Docker Toolbox downloads page `_." +msgstr "" + +#: ../../install/docker.rst:53 +msgid "Not sure which edition of Windows you have? Click Start, search for \"System\", and open the Control Panel item \"System\"." +msgstr "" + +#: ../../install/docker.rst:57 +msgid "3. Run Tabbycat in Docker" +msgstr "" + +#: ../../install/docker.rst:60 +msgid "If using the Docker App" +msgstr "" + +#: ../../install/docker.rst:62 +msgid "*These instructions apply if you installed the Docker App, i.e., if you are using macOS, Linux or Windows Pro/Enterprise/Education.*" +msgstr "" + +#: ../../install/docker.rst:66 +msgid "Ensure that Docker application is open (there should be a whale icon in your menu/task bar) and that it says that Docker is running." +msgstr "" + +#: ../../install/docker.rst:68 +msgid "Browse to the location where you extracted Tabbycat to. Open up the **bin** folder there. Within that folder:" +msgstr "" + +#: ../../install/docker.rst:70 +msgid "If you're on macOS, press the Control key, click the icon for **osx_docker_start.command**, then choose Open from the shortcut menu." +msgstr "" + +#: ../../install/docker.rst:71 +msgid "If you're on Windows, open **windows_docker_start.bat**." +msgstr "" + +#: ../../install/docker.rst:72 +msgid "If you're on Linux, open up a terminal in the Tabbycat folder (*i.e.* the folder containing ``README.md``) and run ``docker-compose up``." +msgstr "" + +#: ../../install/docker.rst:74 +msgid "A terminal window should popup and bunch of text scroll by. If this is your first time running Docker it may take a while (30 minutes or more) to download the virtual machine. When the text has stopped scrolling by you should see a `Finished building Tabbycat!` message." +msgstr "" + +#: ../../install/docker.rst:76 +msgid "Open up http://localhost:8000/ (Windows) or http://0.0.0.0:8000 (OSX/Linux) in a browser of your choice!" +msgstr "" + +#: ../../install/docker.rst:78 ../../install/docker.rst:100 +msgid "If you want to reopen Tabbycat at a later time (say after restarting) repeat steps 1 through 4 here." +msgstr "" + +#: ../../install/docker.rst:81 +msgid "If using the Docker Toolbox" +msgstr "" + +#: ../../install/docker.rst:83 +msgid "*These instructions apply if you installed the Docker Toolbox, i.e., if you are using Windows 7, Windows 8 or Windows 10 Home.*" +msgstr "" + +#: ../../install/docker.rst:87 +msgid "Start the **Docker Quickstart Terminal**." +msgstr "" + +#: ../../install/docker.rst:89 +msgid "Run the command ``docker-machine ip``. Take note of the IP address it shows, for example::" +msgstr "" + +#: ../../install/docker.rst:94 +msgid "Navigate to the Tabbycat folder (*i.e.* the folder containing ``README.md``) and run ``docker-compose up``." +msgstr "" + +#: ../../install/docker.rst:96 +msgid "Open a browser and go to http://192.168.99.100:8000/, replacing \"192.168.99.100\" with whatever IP address was shown in step 2." +msgstr "" + +#: ../../install/docker.rst:98 +msgid "Once you're done and want to stop the Tabbycat server, press Ctrl+C, wait until the next prompt appears, and then run ``docker-machine stop``." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/install/heroku.po b/docs/locale/vi/LC_MESSAGES/install/heroku.po new file mode 100644 index 00000000000..c13646ea604 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/install/heroku.po @@ -0,0 +1,445 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/heroku.po\n" +"X-Crowdin-File-ID: 1315\n" +"Language: vi_VN\n" + +#: ../../install/heroku.rst:5 +msgid "Installing on Heroku" +msgstr "" + +#: ../../install/heroku.rst:7 +msgid "When running Tabbycat on the internet, we set it up on `Heroku `_. The project is set up to be good to go on Heroku, and it works well for us, so if you'd like to run it online, we recommend that you do the same. Naturally, this requires you to have a Heroku account." +msgstr "" + +#: ../../install/heroku.rst:9 +msgid "There are two ways to do this: a **short way** and a **long way**. Most people should use the short way. The long way requires some familiarity with command-line interfaces and Git, and requires a :ref:`local installation ` as a prerequisite, but makes it easier to :ref:`upgrade versions ` later on and (unlike the short way) allows you to import data from CSV files." +msgstr "" + +#: ../../install/heroku.rst:12 +msgid "The short way" +msgstr "" + +#: ../../install/heroku.rst:13 +msgid "Click this button:" +msgstr "" + +#: ../../install/heroku.rst:18 +msgid "This is the easiest way to deploy an instance of Tabbycat online. It requires no technical background." +msgstr "" + +#: ../../install/heroku.rst:20 +msgid "If you don't already have a Heroku account, it'll prompt you to create one. Once you're logged in to Heroku, choose a name for your installation, then scroll down and click **Deploy**. Once it's finished, click **View** and follow the prompts. Once finished, open the site and from there you can easily set up a demo data set (if you just want to learn Tabbycat) or use the data importer to set up a real tournament." +msgstr "" + +#: ../../install/heroku.rst:22 +msgid "During the setup process, Heroku will ask you to verify your account by adding a credit card. A standard Tabbycat site *will not charge* your card — charges only accrue if you deliberately add a paid service in the Heroku dashboard." +msgstr "" + +#: ../../install/heroku.rst:24 +msgid "If you can't access a credit card, you can instead install a limited version, which we call \"Tabbykitten\". However, Tabbykitten cannot send any e-mails or handle as much public traffic. We therefore strongly recommend it only as a last resort, and even then only for small tournaments. `Use this link to set up a Tabbykitten site `_." +msgstr "" + +#: ../../install/heroku.rst:27 +msgid "The long way" +msgstr "" + +#: ../../install/heroku.rst:28 +msgid "The long way sets you up with more control over your environment. Because you'll clone `our GitHub repository`_, it'll be easier for you to :ref:`upgrade your app ` when a new version is released. You'll also have the flexibility to make and contribute updates to the source code. We recommend it if you have experience with Git. It's also easier with this method to import CSV files using the command-line importer, so if you have a very large tournament, this might make importing initial data easier." +msgstr "" + +#: ../../install/heroku.rst:30 +msgid "We've tested these instructions successfully on Windows, Linux and macOS." +msgstr "" + +#: ../../install/heroku.rst:33 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/heroku.rst:35 +msgid "You need to have at least a passing familiarity with command-line interfaces to get through the longer traditional method. We'll talk you through the rest." +msgstr "" + +#: ../../install/heroku.rst:37 +msgid "When we say \"command shell\", on Windows we mean **Command Prompt**, and on Linux and macOS we mean **Terminal** (or your favourite command shell)." +msgstr "" + +#: ../../install/heroku.rst:39 ../../install/heroku.rst:100 +msgid "Advanced users" +msgstr "" + +#: ../../install/heroku.rst:42 +msgid "Tabbycat is a `Django `_ project. As such, it can be installed on any web platform that supports Django, using any SQL system that Django supports. Just be aware that we haven't tried any other platform." +msgstr "" + +#: ../../install/heroku.rst:45 +msgid "Short version of the long way" +msgstr "" + +#: ../../install/heroku.rst:47 +msgid "We provide a \"short version\" for experienced users. Don't just copy and paste these commands before you understand what they do! If things aren't set up perfectly they can fail, so it's important to supervise them the first time you do them. If this is all new to you, read the long version of the instructions below." +msgstr "" + +#: ../../install/heroku.rst:56 +msgid "If you want to :ref:`import tournament data ` from CSV files, :ref:`install Tabbycat locally `, put your CSV files in ``data/yourtournamentname``, then::" +msgstr "" + +#: ../../install/heroku.rst:68 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/heroku.rst:70 +msgid "Install the `Heroku Command Line Interface (CLI) `_, then log in with the command ``heroku login``." +msgstr "" + +#: ../../install/heroku.rst:72 +msgid "If you don't already have **Git**, follow the `instructions on the GitHub website `_ to set up Git." +msgstr "" + +#: ../../install/heroku.rst:75 +msgid "2. Set up a local installation" +msgstr "" + +#: ../../install/heroku.rst:77 +msgid "If you don't already have a local installation, follow the instructions on the page for your operating system, listed below, to set up a local installation." +msgstr "" + +#: ../../install/heroku.rst:79 +msgid "When downloading the source code, you **must** take the option involving cloning the GitHub repository using Git. In the macOS and Windows instructions, this means the option described in the \"Advanced users\" box. To do so, use these commands:" +msgstr "" + +#: ../../install/heroku.rst:86 +msgid "Do not download the .tar.gz or .zip file and extract it." +msgstr "" + +#: ../../install/heroku.rst:88 +msgid ":ref:`install-linux`" +msgstr "" + +#: ../../install/heroku.rst:89 +msgid ":ref:`install-osx`" +msgstr "" + +#: ../../install/heroku.rst:90 +msgid ":ref:`install-wsl`" +msgstr "" + +#: ../../install/heroku.rst:91 +msgid ":ref:`install-windows`" +msgstr "" + +#: ../../install/heroku.rst:93 +msgid "If you do already have a local installation, update to the latest version using:" +msgstr "" + +#: ../../install/heroku.rst:103 +msgid "It's not *strictly* necessary to have a fully functional local installation if you don't want to import data from CSV files. But it certainly helps." +msgstr "" + +#: ../../install/heroku.rst:106 +msgid "3. Deploy to Heroku" +msgstr "" + +#: ../../install/heroku.rst:110 +msgid "Navigate to your Tabbycat directory::" +msgstr "" + +#: ../../install/heroku.rst:114 +msgid "Run the script to deploy the app to Heroku. Replace ``yourappname`` with your preferred URL. Your website will be at ``yourappname.herokuapp.com``." +msgstr "" + +#: ../../install/heroku.rst:120 +msgid "This script has other options that you might find useful. Run ``python deploy_heroku.py --help`` for details." +msgstr "" + +#: ../../install/heroku.rst:122 +msgid "When this script finishes, it will open the app in your browser. It should look something like this:" +msgstr "" + +#: ../../install/heroku.rst:127 +msgid "4. Import tournament data locally" +msgstr "" + +#: ../../install/heroku.rst:129 +msgid "Steps 4 and 5 are optional; there are other methods of :ref:`importing data `. However the following method is most useful for large tournaments where manual entry would be tedious." +msgstr "" + +#: ../../install/heroku.rst:131 +msgid "Step 4 is the same as the process described in :ref:`importtournament-command`." +msgstr "" + +#: ../../install/heroku.rst:135 +msgid "Place your CSV files in ``data/yourtournamentname``, as described in :ref:`importing-initial-data`." +msgstr "" + +#: ../../install/heroku.rst:137 +msgid "Create a new, blank local database::" +msgstr "" + +#: ../../install/heroku.rst:141 +msgid "It's normally easiest to name your local database after your app name, so that if you have multiple sites, you know which one relates to which." +msgstr "" + +#: ../../install/heroku.rst:143 +msgid "Reconfigure ``DATABASES`` in your settings_local.py file to point to this new database." +msgstr "" + +#: ../../install/heroku.rst:145 +msgid "Activate your virtual environment::" +msgstr "" + +#: ../../install/heroku.rst:149 +msgid "Run initial migrations on your blank local database::" +msgstr "" + +#: ../../install/heroku.rst:154 +msgid "Import your tournament data into your blank local database::" +msgstr "" + +#: ../../install/heroku.rst:158 +msgid "If your data's not clean, it might take a few attempts to get this right. We recommend either destroying and recreating the database (``dropdb``, ``createdb``), or wiping it using ``dj flush``, before retrying." +msgstr "" + +#: ../../install/heroku.rst:160 +msgid "Check it looks like how you expect it to look, by starting your local installation::" +msgstr "" + +#: ../../install/heroku.rst:165 +msgid "5. Push the local database to Heroku" +msgstr "" + +#: ../../install/heroku.rst:167 +msgid "Once you're happy with how your local import went, you can push the local database to Heroku." +msgstr "" + +#: ../../install/heroku.rst:169 +msgid "This step wipes the Heroku database clean, and replaces it with the contents of your local database. If you have any data on the Heroku site that isn't also in your local database, **that data will be lost** and will not be recoverable." +msgstr "" + +#: ../../install/heroku.rst:171 +msgid "If you have multiple Heroku sites, you may find that the ``heroku`` commands refuse to run, prompting you to specify an app. If so, add ``--app yourappname`` to each ``heroku`` command." +msgstr "" + +#: ../../install/heroku.rst:173 +msgid "Enable maintenance mode. This takes the site offline, to ensure that no-one can possibly create or change any data on the site while you're pushing a new database up::" +msgstr "" + +#: ../../install/heroku.rst:177 +msgid "Reset the database. (Caution: This permanently deletes all information on your Heroku database!)" +msgstr "" + +#: ../../install/heroku.rst:183 +msgid "Push your local database to Heroku::" +msgstr "" + +#: ../../install/heroku.rst:187 +msgid "You might need to specify your local PostgreSQL credentials by adding ``PGUSER=yourusername PGPASSWORD=******** PGHOST=localhost`` to the *beginning* of that command. (This sets environment variables to those values for the duration of that one command.)" +msgstr "" + +#: ../../install/heroku.rst:189 +msgid "Disable maintenance mode::" +msgstr "" + +#: ../../install/heroku.rst:195 +msgid "Heroku options you may want to change" +msgstr "" + +#: ../../install/heroku.rst:197 +msgid "If you have a large tournament, you may want to customize your Heroku app. This section provides some guidance on upgrades and settings you may wish to consider. Some of these configurations require you to have the `Heroku Command Line Interface (CLI) `_ installed." +msgstr "" + +#: ../../install/heroku.rst:202 +msgid "Upgrading your database size" +msgstr "" + +#: ../../install/heroku.rst:204 +msgid "The free plan of `Heroku Postgres `_, \"Hobby Dev\", should work for most small tournaments. For large tournaments, however, you may find that you exceed the 10,000-row limit of this plan. It's difficult to give general guidance on how many rows you're likely to use, because it depends on which features of Tabbycat you use (*e.g.*, if you use adjudicator feedback). But to give some idea:" +msgstr "" + +#: ../../install/heroku.rst:206 +msgid "Australs 2016, which had 74 teams, 8 preliminary rounds and heavily used adjudicator feedback, ended up at around 30,000 rows." +msgstr "" + +#: ../../install/heroku.rst:207 +#, python-format +msgid "The Asia BP championships 2017 had 100 teams, 6 preliminary rounds, and mandatory feedback (i.e. 100% return rates) used 15,000 rows." +msgstr "" + +#: ../../install/heroku.rst:208 +msgid "A 3 vs 3 tournament with 54 teams, 5 preliminary rounds, and which only lightly used adjudicator feedback ended up using around 4,500 rows" +msgstr "" + +#: ../../install/heroku.rst:210 +msgid "If you need more than 10,000 rows, you'll need to upgrade to a paid Heroku Postgres Plan. The 10,000,000 rows allowed in the lowest paid plan, \"Hobby Basic\", should certainly be more than sufficient." +msgstr "" + +#: ../../install/heroku.rst:212 +msgid "If you're not sure, you can always start at Hobby Dev—just be prepared to `upgrade `_ during the tournament if you run close to capacity." +msgstr "" + +#: ../../install/heroku.rst:215 +msgid "Custom domain names" +msgstr "" + +#: ../../install/heroku.rst:217 +msgid "Your Heroku app will be available at ``yourappname.herokuapp.com``. You may want it to be a subdomain of your tournament's website, like ``tab.australasians2015.org``. If so, you'll need to configure your custom domain and SSL. Instructions for both are in the Heroku Dev Center:" +msgstr "" + +#: ../../install/heroku.rst:219 +msgid "`Custom Domain Names for Apps `_" +msgstr "" + +#: ../../install/heroku.rst:220 +msgid "`Heroku SSL `_" +msgstr "" + +#: ../../install/heroku.rst:222 +msgid "The custom domain name basically requires two things: a DNS ``CNAME`` entry on your website targeting ``yourappname.herokuapp.com``, and the custom domain configured on Heroku using ``heroku domains:add tab.yourwebsite.com``. You'll also need to provide an SSL certificate for your custom domain and add it using the ``heroku certs:add`` command." +msgstr "" + +#: ../../install/heroku.rst:225 +msgid "HTTPS" +msgstr "" + +#: ../../install/heroku.rst:227 +msgid "All Tabbycat sites deployed to Heroku redirect all traffic to HTTPS by default." +msgstr "" + +#: ../../install/heroku.rst:229 +msgid "For a myriad of reasons, we strongly advise against disabling this. But if for some reason you need to run on plain HTTP, you can do this by setting the ``DISABLE_HTTPS_REDIRECTS`` config variable in Heroku to ``disable`` (see `Heroku documentation on config vars `_). The value of the config var must be ``disable``; if it's anything else, HTTPS redirects will remain in place." +msgstr "" + +#: ../../install/heroku.rst:231 +msgid "Most modern browsers, after having been redirected by a site to HTTPS once, remember that that site requires HTTPS and go there for all subsequent visits even if the user typed in a plain http\\:// address. It may do this because it cached the HTTP 301 permanent redirect, stored an HSTS entry and/or tagged its session cookie to require HTTPS. If, after disabling HTTPS on your Tabbycat site, you find that you're still being redirected to HTTPS, first try a browser or computer that *hasn't* visited the site before. If that works, then remove the relevant entry from your (original) browser's cache, HSTS set and cookies, and try again." +msgstr "" + +#: ../../install/heroku.rst:234 +msgid "Time zone" +msgstr "" + +#: ../../install/heroku.rst:236 +msgid "If you want to change the time zone you nominated during deployment, you can do so by going to the `Heroku Dashboard `_, clicking on your app, going to the **Settings** tab, clicking **Reveal Config Vars** and changing the value of the ``TIME_ZONE`` variable. This value must be one of the names in the IANA tz database, *e.g.* ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``. You can find a `list of these on Wikipedia `_ in the 'TZ\\*' column." +msgstr "" + +#: ../../install/heroku.rst:239 +msgid "SendGrid account details" +msgstr "" + +#: ../../install/heroku.rst:241 +msgid "By default, Heroku will automatically create a SendGrid account for you. For small tournaments, this should work fine. For larger ones, though, SendGrid typically doesn't allow new accounts to send so many emails without additional vetting. This vetting is separate to the verification you did for your Heroku account, and as far as we're aware, it can't be done until you send your first email, by which time it's probably too late." +msgstr "" + +#: ../../install/heroku.rst:243 +msgid "If you're running a large tournament, you may wish to use your own SendGrid account instead. The free tier probably won't suffice after the trial period, but the Essentials tier should be more than adequate. If you're a student and have the `GitHub Education Pack `_, you might find the SendGrid plan here useful." +msgstr "" + +#: ../../install/heroku.rst:245 +msgid "If you set up and use your own SendGrid account, you can remove the SendGrid add-on from your Heroku app. The SendGrid add-on is only necessary if you wish to use Heroku's auto-created SendGrid account." +msgstr "" + +#: ../../install/heroku.rst:247 +msgid "To set up your app to use your own SendGrid account:" +msgstr "" + +#: ../../install/heroku.rst:251 +msgid "`Sign up for a SendGrid account `_, if you don't already have one." +msgstr "" + +#: ../../install/heroku.rst:253 +msgid "`Create an API key `_ in your SendGrid account." +msgstr "" + +#: ../../install/heroku.rst:255 +msgid "There are `instructions for how to do this in the SendGrid documentation `_. The only permission that is needed is the \"Mail Send\" permission, so you can turn off all others if you want to be safe." +msgstr "" + +#: ../../install/heroku.rst:257 +msgid "Set the following config vars in Heroku Dashboard (or using the Heroku CLI, if you have it):" +msgstr "" + +#: ../../install/heroku.rst:259 +msgid "``SENDGRID_USERNAME`` should be set to ``apikey`` (not your username)." +msgstr "" + +#: ../../install/heroku.rst:260 +msgid "``SENDGRID_PASSWORD`` should be set to your API key, which will start with ``SG*******``." +msgstr "" + +#: ../../install/heroku.rst:262 +msgid "The `Heroku SendGrid instructions `_ to do something with ``SENDGRID_API_KEY`` are **incorrect**. We figured this out by contacting SendGrid support staff. Use the above config vars instead." +msgstr "" + +#: ../../install/heroku.rst:268 +msgid "Upgrading an existing Heroku app" +msgstr "" + +#: ../../install/heroku.rst:270 +msgid "For most users, we recommend starting a new site for every tournament, when you set up the tab for that tournament. There's generally not a pressing need to upgrade Tabbycat after a tournament is concluded, and every time you deploy a new site, you'll be using the latest version at the time of deployment." +msgstr "" + +#: ../../install/heroku.rst:272 +msgid "To upgrade an existing Heroku-based Tabbycat app to the latest version, you need to *deploy* the current version of Tabbycat to your Heroku app. There are several ways to do this. We list one below, primarily targeted at users with some background in Git." +msgstr "" + +#: ../../install/heroku.rst:274 +msgid "The essence of it is that you need to `create a Git remote `_ for your Heroku app (if you don't already have one), then `push to it `_." +msgstr "" + +#: ../../install/heroku.rst:276 +msgid "You should **always** :ref:`back up your database ` before upgrading Tabbycat." +msgstr "" + +#: ../../install/heroku.rst:278 +msgid "You'll need both Git and the Heroku CLI, and you'll need to be logged in to the Heroku CLI already." +msgstr "" + +#: ../../install/heroku.rst:280 +msgid "Take a backup of your database::" +msgstr "" + +#: ../../install/heroku.rst:284 +msgid "If you haven't already, clone our Git repository and check out the master branch::" +msgstr "" + +#: ../../install/heroku.rst:289 +msgid "If you've already cloned our Git repository, don't forget to pull so you're up to date::" +msgstr "" + +#: ../../install/heroku.rst:294 +msgid "Check to see if you have a Git remote already in place::" +msgstr "" + +#: ../../install/heroku.rst:300 +msgid "If you do, the name of the remote will be on the left (``heroku`` in the above example), and the URL of your Git repository will be on the right. In the example above, our Tabbycat site URL would be ``mytournament2018.herokuapp.com``; the Git remote URL is then ``https://git.heroku.com/mytournament2018.git``." +msgstr "" + +#: ../../install/heroku.rst:302 +msgid "If a Git remote URL for your Tabbycat site *doesn't* appear, then create one::" +msgstr "" + +#: ../../install/heroku.rst:307 +msgid "If you tab many tournaments, it'll probably be helpful to use a name other than ``heroku`` (say, ``mytournament2018``), so that you can manage multiple tournaments." +msgstr "" + +#: ../../install/heroku.rst:309 +msgid "Push to Heroku::" +msgstr "" + +#: ../../install/heroku.rst:313 +msgid "This will take a while to complete." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/install/linux.po b/docs/locale/vi/LC_MESSAGES/install/linux.po new file mode 100644 index 00000000000..4b6d5132dff --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/install/linux.po @@ -0,0 +1,249 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/linux.po\n" +"X-Crowdin-File-ID: 1317\n" +"Language: vi_VN\n" + +#: ../../install/linux.rst:5 +msgid "Installing Locally on Linux" +msgstr "" + +#: ../../install/linux.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/linux.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/linux.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on Linux, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/linux.rst:14 +msgid "The instructions apply to both Linux, and :ref:`Linux on Windows `." +msgstr "" + +#: ../../install/linux.rst:17 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/linux.rst:19 +msgid "You need to be familiar with command-line interfaces to get through this comfortably. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest." +msgstr "" + +#: ../../install/linux.rst:21 ../../install/linux.rst:56 +#: ../../install/linux.rst:130 +msgid "Advanced users" +msgstr "" + +#: ../../install/linux.rst:24 +msgid "If you wish to use an SQL engine other that PostgreSQL, most of Tabbycat should work, but a few features rely on SQL functions that aren't supported by all engines. To configure Tabbycat to use a different engine, set the ``DATABASES`` `Django setting `_ accordingly." +msgstr "" + +#: ../../install/linux.rst:27 +msgid "Short version" +msgstr "" + +#: ../../install/linux.rst:38 +msgid "Then create **settings/local.py** as described :ref:`below `, then::" +msgstr "" + +#: ../../install/linux.rst:53 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/linux.rst:54 +msgid "First, you need to install all of the software on which Tabbycat depends, if you don't already have it installed." +msgstr "" + +#: ../../install/linux.rst:59 +msgid "These instructions are for Ubuntu, and are targeted at Ubuntu 18.04. If you have another distribution of Linux, we trust you'll know how to navigate the package manager for your distribution to install the dependencies." +msgstr "" + +#: ../../install/linux.rst:64 +msgid "1(a). Python" +msgstr "" + +#: ../../install/linux.rst:65 +msgid "Tabbycat requires Python 3.6 or later. You probably already have Python 3.6, but you'll also need the development package in order to install Psycopg2 later. The ``venv`` module will come in handy too. Install::" +msgstr "" + +#: ../../install/linux.rst:69 +msgid "Check the version::" +msgstr "" + +#: ../../install/linux.rst:74 +msgid "Tabbycat does not support Python 2. You must use Python 3.6 or later." +msgstr "" + +#: ../../install/linux.rst:77 +msgid "1(b). PostgreSQL" +msgstr "" + +#: ../../install/linux.rst:78 +msgid "*PostgreSQL is a database management system.*" +msgstr "" + +#: ../../install/linux.rst:80 +msgid "Install PostgreSQL using the `PostgreSQL installation instructions here `_." +msgstr "" + +#: ../../install/linux.rst:82 +msgid "Normally, installing the latest stable version should be best, but if you're having issues, install the same version as the current `default version on Heroku `_, as that will be what is currently most commonly used with Tabbycat. If you're planning on pushing data between your local installation and a Heroku site, it's best to match the Heroku's current default version." +msgstr "" + +#: ../../install/linux.rst:84 +msgid "You'll also need the ``libpq-dev`` package in order to install Psycopg2 later::" +msgstr "" + +#: ../../install/linux.rst:91 +msgid "1(c). Node.js/NPM" +msgstr "" + +#: ../../install/linux.rst:92 +msgid "*Node.js is a JavaScript runtime.*" +msgstr "" + +#: ../../install/linux.rst:94 +msgid "Tabbycat requires Node and its package manager to compile front-end dependencies. Install using:" +msgstr "" + +#: ../../install/linux.rst:104 +msgid "1(d). Other development tools" +msgstr "" + +#: ../../install/linux.rst:105 +msgid "Some of the Python packages require GCC, G++ and Make in order to install::" +msgstr "" + +#: ../../install/linux.rst:112 +msgid "2. Get the source code" +msgstr "" + +#: ../../install/linux.rst:114 +msgid "Choose either of the following two methods." +msgstr "" + +#: ../../install/linux.rst:117 +msgid "Method 1 (Git clone)" +msgstr "" + +#: ../../install/linux.rst:119 +msgid "If you have Git, life will be easier if you clone `our GitHub repository`_:" +msgstr "" + +#: ../../install/linux.rst:126 +msgid "(You can find out if you have Git using ``git --version``. If you don't, you can install it using ``sudo apt install git``.)" +msgstr "" + +#: ../../install/linux.rst:128 +msgid "The default branch is ``develop``, so you need to explicitly change the branch to ``master``, which is what the ``git checkout master`` line does." +msgstr "" + +#: ../../install/linux.rst:133 +msgid "You might like to fork the repository first, to give yourself a little more freedom to make code changes on the fly (and potentially :ref:`contribute ` them to the project)." +msgstr "" + +#: ../../install/linux.rst:136 +msgid "Method 2 (tarball)" +msgstr "" + +#: ../../install/linux.rst:138 +msgid "If you don't want to use Git, simply download and extract:" +msgstr "" + +#: ../../install/linux.rst:147 +msgid "3. Set up a new database" +msgstr "" + +#: ../../install/linux.rst:149 +msgid "You can skip step 1 if this is not your first installation. Every Tabbycat installation requires its own database, but they can use the same login role if you like." +msgstr "" + +#: ../../install/linux.rst:151 +msgid "Create a new user account with a password, replacing ``myusername`` with whatever name you prefer. If you don't know what username to pick, use ``tabbycat``. Grant this user the ability to create databases, since this'll make it easier to spin up new instances of Tabbycat in the future." +msgstr "" + +#: ../../install/linux.rst:157 +msgid "If you'll be running multiple instances of Tabbycat, developing, or diving into the database yourself, you might find it convenient to set up client authentication so that you don't need to do all manual operations from ``sudo -u postgres``. See the `PostgreSQL documentation on client authentication `_ for more information. For example, you could add a ``local all myusername md5`` line to the *pg_hba.conf* file, or you could define a mapping in *pg_ident.conf* and append the ``map=`` option to the ``local all all peer`` line in *pg_hba.conf*." +msgstr "" + +#: ../../install/linux.rst:159 +msgid "Create a new database, replacing ``mydatabasename`` with whatever name you prefer, probably the name of the tournament you're running::" +msgstr "" + +#: ../../install/linux.rst:167 +msgid "4. Install Tabbycat" +msgstr "" + +#: ../../install/linux.rst:168 +msgid "Almost there!" +msgstr "" + +#: ../../install/linux.rst:170 +msgid "Navigate to your Tabbycat directory::" +msgstr "" + +#: ../../install/linux.rst:176 +msgid "Start a new virtual environment. We suggest the name ``venv``, though it can be any name you like:" +msgstr "" + +#: ../../install/linux.rst:182 +msgid "Run the ``activate`` script. This puts you \"into\" the virtual environment::" +msgstr "" + +#: ../../install/linux.rst:186 +msgid "Install Tabbycat's requirements into your virtual environment::" +msgstr "" + +#: ../../install/linux.rst:192 +msgid "Navigate to the **tabbycat/settings** sub folder and copy **local.example** to **local.py**. Find this part in your new **local.py**, and fill in the blanks as indicated:" +msgstr "" + +#: ../../install/linux.rst:207 +msgid "Optionally, replace the value in this line in the same file with your own time zone, as defined in the `IANA time zone database `_ (*e.g.*, ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``)::" +msgstr "" + +#: ../../install/linux.rst:211 +msgid "Navigate to the **tabbycat** sub-directory, initialize the database, compile the assets, and create a user account for yourself::" +msgstr "" + +#: ../../install/linux.rst:219 +msgid "Start Tabbycat!" +msgstr "" + +#: ../../install/linux.rst:225 +msgid "It should show something like this::" +msgstr "" + +#: ../../install/linux.rst:229 +msgid "Open your browser and go to the URL printed above. (In the above example, it's http://127.0.0.1:8000.) It should look something like the screenshot below. If it does, great! You've successfully installed Tabbycat." +msgstr "" + +#: ../../install/linux.rst:234 +msgid "Naturally, your database is currently empty, so proceed to :ref:`importing initial data `." +msgstr "" + +#: ../../install/linux.rst:237 +msgid "Starting up an existing Tabbycat instance" +msgstr "" + +#: ../../install/linux.rst:238 +msgid "To start your Tabbycat instance up again next time you use your computer::" +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/install/local.po b/docs/locale/vi/LC_MESSAGES/install/local.po new file mode 100644 index 00000000000..2e4c00d6b62 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/install/local.po @@ -0,0 +1,156 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/local.po\n" +"X-Crowdin-File-ID: 1319\n" +"Language: vi_VN\n" + +#: ../../install/local.rst:5 +msgid "Local Installations" +msgstr "" + +#: ../../install/local.rst:8 +msgid "What is a local installation?" +msgstr "" + +#: ../../install/local.rst:10 +msgid "Tabbycat is a web-based system: it's designed to run as a web site. However, instead of installing it on a web server, you can install it on your computer, serving web pages to yourself. This is called a local installation." +msgstr "" + +#: ../../install/local.rst:12 +msgid "Then, when you open your browser, you can use Tabbycat like any other web site. The only difference is that this one is on **your** computer, not some computer in a data centre in a far-away land. In effect, you are getting your computer to behave like a web server." +msgstr "" + +#: ../../install/local.rst:17 +msgid "Should I use a local installation?" +msgstr "" + +#: ../../install/local.rst:19 +msgid "In most cases, you should make an online Tabbycat installation by :ref:`setting up an instance on Heroku `. This has a number of major advantages:" +msgstr "" + +#: ../../install/local.rst:21 +msgid "The installation process is easier." +msgstr "" + +#: ../../install/local.rst:22 +msgid "You can enter ballots and manage your tournament from multiple computers." +msgstr "" + +#: ../../install/local.rst:23 +msgid "Participants can access the draw, motions, results and more online." +msgstr "" + +#: ../../install/local.rst:24 +msgid "Heroku's data centers are less likely to fail than your computer is." +msgstr "" + +#: ../../install/local.rst:25 +msgid "Heroku e-mails Tabbycat's developers error reports to help us fix bugs." +msgstr "" + +#: ../../install/local.rst:27 +msgid "In some cases, you might have a good reason to use a local installation. We can think of just one such reason: If you won't have access to the internet at your tournament, or if internet access will be flaky, then you should use a local installation." +msgstr "" + +#: ../../install/local.rst:32 +msgid "You'll need internet access to download dependencies during the local installation process. So if you're not expecting to have reliable internet access at your tournament, be sure to have Tabbycat installed *before* you get there!" +msgstr "" + +#: ../../install/local.rst:37 +msgid "Advanced users" +msgstr "" + +#: ../../install/local.rst:40 +msgid "Tabbycat is a `Django `_ project, so if you have your own preferred method of running Django projects, you can also do that. Just be aware that we haven't tried it." +msgstr "" + +#: ../../install/local.rst:45 +msgid "Okay, so how do I do it?" +msgstr "" + +#: ../../install/local.rst:47 +msgid "The easiest option is to :ref:`install Tabbycat using Docker `. This method should work across all operating systems and is by far the easiest way to get a local copy running." +msgstr "" + +#: ../../install/local.rst:49 +msgid "If installing using Docker does not work, or if you want to be able to modify Tabbycat's code we also have a number of instructions for manually setting up a copy of Tabbycat. There instructions are here:" +msgstr "" + +#: ../../install/local.rst:51 +msgid ":ref:`install-linux`" +msgstr "" + +#: ../../install/local.rst:52 +msgid ":ref:`install-osx`" +msgstr "" + +#: ../../install/local.rst:53 +msgid ":ref:`install-wsl`" +msgstr "" + +#: ../../install/local.rst:54 +msgid ":ref:`install-windows`" +msgstr "" + +#: ../../install/local.rst:57 +msgid "Advanced uses" +msgstr "" + +#: ../../install/local.rst:60 +msgid "Can others access my local install?" +msgstr "" + +#: ../../install/local.rst:62 +msgid "Local installations can also take advantage of multiple-computer site access, including data entry---it's just takes more work than a Heroku installation to set up." +msgstr "" + +#: ../../install/local.rst:64 +msgid "Since a local installation is just having your computer run a web server, it can serve other computers too. You can make this work even if you don't have internet access: all you need is a router that you can use to connect a few computers together. Then other computers on your local network can access the Tabbycat site hosted on your computer. We did this at Victoria Australs 2012." +msgstr "" + +#: ../../install/local.rst:66 +msgid "We don't provide detailed instructions for this; we leave it for advanced users to set up themselves. As a rough guide:" +msgstr "" + +#: ../../install/local.rst:68 +msgid "You need to pass in your computer's IP address and port to the `runserver` command, for example, if your computer (the one acting as a server) is 196.168.0.2 and you want to run it on port 8000: ``dj runserver 192.168.0.2:8000``" +msgstr "" + +#: ../../install/local.rst:69 +msgid "You need to configure your firewall settings to allow incoming connections on the IP address and port you specified in that command." +msgstr "" + +#: ../../install/local.rst:70 +msgid "Be aware that local installs use the Django development server, whose **security is not tested**. Therefore, it's a good idea to make sure your firewall **only lets in computers on your local network** (or, if you're really paranoid, isolate the network from the internet completely)." +msgstr "" + +#: ../../install/local.rst:73 +msgid "Can I run an internet-accessible website from a local installation?" +msgstr "" + +#: ../../install/local.rst:75 +msgid "Probably not. Even if you disable your firewall, chances are your home router (or university router) will block any connections from the outside world to you. Even if you can though, **you really shouldn't**. The local installation uses the *Django development server*, which is a lightweight server designed for developers. Specifically, Django **does not test the security of its development server** in the way that proper web servers do. That is: It's a security risk to run a local installation as an internet-accessible site. Don't do it. `Install Tabbycat on Heroku `_ instead." +msgstr "" + +#: ../../install/local.rst:77 +msgid "Alternatively, if you have a background in web development, you might choose to install Tabbycat on your own production server. It's a Django project, so any means of supporting Django projects should work fine." +msgstr "" + +#: ../../install/local.rst:79 +msgid "It's safe to run on a small, isolated network (see above) with your firewall correctly configured because you presumably trust everyone you let on the network!" +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/install/osx.po b/docs/locale/vi/LC_MESSAGES/install/osx.po new file mode 100644 index 00000000000..535b24bc3c6 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/install/osx.po @@ -0,0 +1,216 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/osx.po\n" +"X-Crowdin-File-ID: 1321\n" +"Language: vi_VN\n" + +#: ../../install/osx.rst:5 +msgid "Installing Locally on macOS" +msgstr "" + +#: ../../install/osx.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/osx.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/osx.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on macOS, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/osx.rst:15 +msgid "Requisite technical knowledge" +msgstr "" + +#: ../../install/osx.rst:17 +msgid "You need to be familiar with command-line interfaces to get through this comfortably. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest. You just need to be prepared to bear with us. It'll take a while the first time, but it gets easier after that." +msgstr "" + +#: ../../install/osx.rst:19 +msgid "Every line in the instructions that begins with ``$`` is a command that you need to run in a **Terminal**, but without the ``$``: that sign is a convention used in instructions to make it clear that it is a command you need to run." +msgstr "" + +#: ../../install/osx.rst:21 ../../install/osx.rst:42 ../../install/osx.rst:68 +msgid "Advanced users" +msgstr "" + +#: ../../install/osx.rst:24 +msgid "If you wish to use an SQL engine other that PostgreSQL, most of Tabbycat should work, but a few features rely on SQL functions that aren't supported by all engines. To configure Tabbycat to use a different engine, set the ``DATABASES`` `Django setting `_ accordingly." +msgstr "" + +#: ../../install/osx.rst:27 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/osx.rst:29 +msgid "First, you need to install all of the software on which Tabbycat depends, if you don't already have it installed." +msgstr "" + +#: ../../install/osx.rst:32 +msgid "1(a). Python" +msgstr "" + +#: ../../install/osx.rst:33 +msgid "Tabbycat requires Python 3.6 or later. macOS only comes with Python 2.7, so you'll need to install this. You can download the latest version from the `Python website `_." +msgstr "" + +#: ../../install/osx.rst:35 +msgid "The executable will probably be called ``python3``, rather than ``python``. Check::" +msgstr "" + +#: ../../install/osx.rst:40 +msgid "Tabbycat does not support Python 2. You must use Python 3.6 or later." +msgstr "" + +#: ../../install/osx.rst:45 +msgid "These instructions will use the ``venv`` module. If you prefer, you can use `Virtualenv `_ instead." +msgstr "" + +#: ../../install/osx.rst:48 +msgid "1(b). Postgres.app" +msgstr "" + +#: ../../install/osx.rst:50 +msgid "Download `Postgres.app `_, move it to your Applications folder, and open it. This should place an icon in your menu bar, showing that the postgres database is running. Whenever you are running Tabbycat you'll need to have this app running." +msgstr "" + +#: ../../install/osx.rst:52 +msgid "You'll need to use the PostgreSQL command-line tools, so run the command that the Postgres.app suggests in its `installation instructions `_ for adding them to your ``$PATH``. As of February 2018, it was::" +msgstr "" + +#: ../../install/osx.rst:57 +msgid "1(c). Node.js/NPM" +msgstr "" + +#: ../../install/osx.rst:59 +msgid "Download and run the `node.js 8 macOS Installer (.pkg) `_" +msgstr "" + +#: ../../install/osx.rst:62 +msgid "2. Get the source code" +msgstr "" + +#: ../../install/osx.rst:64 +msgid "`Go to the page for our latest release `_." +msgstr "" + +#: ../../install/osx.rst:65 +msgid "Download the zip or tar.gz file." +msgstr "" + +#: ../../install/osx.rst:66 +msgid "Extract all files in it to a folder of your choice." +msgstr "" + +#: ../../install/osx.rst:71 +msgid "If you've used Git before, you might prefer to clone `our GitHub repository`_ instead. Don't forget to check out the |vrelease| tag or the master branch." +msgstr "" + +#: ../../install/osx.rst:73 +msgid "Even better, you might like to fork the repository first, to give yourself a little more freedom to make code changes on the fly (and potentially :ref:`contribute ` them to the project)." +msgstr "" + +#: ../../install/osx.rst:76 +msgid "3. Set up a new database" +msgstr "" + +#: ../../install/osx.rst:78 +msgid "You can skip steps 1--3 if this is not your first installation. Every Tabbycat installation requires its own database, but they can use the same login role if you like." +msgstr "" + +#: ../../install/osx.rst:80 +msgid "Open up a copy of the Terminal app, then copy/paste or type in::" +msgstr "" + +#: ../../install/osx.rst:84 +msgid "Hit enter then quit and reopen the Terminal app." +msgstr "" + +#: ../../install/osx.rst:86 +msgid "Create a new user account with a password, replacing ``myusername`` with whatever name you prefer. If you don't know what username to pick, use ``tabbycat``." +msgstr "" + +#: ../../install/osx.rst:92 +msgid "Create a new database, replacing ``mydatabasename`` with whatever name you prefer, probably the name of the tournament you're running::" +msgstr "" + +#: ../../install/osx.rst:96 +msgid "In terminal type in::" +msgstr "" + +#: ../../install/osx.rst:101 +msgid "4. Install Tabbycat" +msgstr "" + +#: ../../install/osx.rst:102 +msgid "Almost there!" +msgstr "" + +#: ../../install/osx.rst:104 +msgid "Navigate to your Tabbycat directory::" +msgstr "" + +#: ../../install/osx.rst:108 +msgid "Copy **settings/local.example** to **settings/local.py**. Find this part in your new **local.py**, and fill in the blanks as indicated:" +msgstr "" + +#: ../../install/osx.rst:123 +msgid "Optionally, replace the value in this line in the same file with your own time zone, as defined in the `IANA time zone database `_ (*e.g.*, ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``)::" +msgstr "" + +#: ../../install/osx.rst:127 +msgid "Ensure you are in the main Tabbycat directory (not the config folder where **settings_local.py** is and start a new virtual environment. We suggest the name ``venv``, though it can be any name you like::" +msgstr "" + +#: ../../install/osx.rst:131 +msgid "Run the ``activate`` script. This puts you \"into\" the virtual environment::" +msgstr "" + +#: ../../install/osx.rst:135 +msgid "Install Tabbycat's requirements into your virtual environment::" +msgstr "" + +#: ../../install/osx.rst:141 +msgid "Navigate to the **tabbycat** sub folder, initialize the database, compile the assets, and create a user account for yourself::" +msgstr "" + +#: ../../install/osx.rst:149 +msgid "Start Tabbycat!" +msgstr "" + +#: ../../install/osx.rst:155 +msgid "It should show something like this::" +msgstr "" + +#: ../../install/osx.rst:159 +msgid "Open your browser and go to the URL printed above. (In the above example, it's http://127.0.0.1:8000.) It should look something like the screenshot below. If it does, great! You've successfully installed Tabbycat." +msgstr "" + +#: ../../install/osx.rst:164 +msgid "Naturally, your database is currently empty, so proceed to :ref:`importing initial data `." +msgstr "" + +#: ../../install/osx.rst:167 +msgid "Starting up an existing Tabbycat instance" +msgstr "" + +#: ../../install/osx.rst:168 +msgid "To start your Tabbycat instance up again next time you use your computer::" +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/install/windows.po b/docs/locale/vi/LC_MESSAGES/install/windows.po new file mode 100644 index 00000000000..b455240dde0 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/install/windows.po @@ -0,0 +1,317 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/windows.po\n" +"X-Crowdin-File-ID: 1323\n" +"Language: vi_VN\n" + +#: ../../install/windows.rst:5 +msgid "Installing Locally on Windows" +msgstr "" + +#: ../../install/windows.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/windows.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/windows.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on Windows, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/windows.rst:14 +msgid "If you have Windows 10 and any experience with Linux, we recommend installing it on :ref:`Linux on Windows (WSL) ` instead, which is much easier than the process below." +msgstr "" + +#: ../../install/windows.rst:17 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/windows.rst:19 +msgid "You need to be familiar with command-line interfaces to get through this comfortably. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest. You just need to be prepared to bear with us. It'll take a while the first time, but it gets easier after that." +msgstr "" + +#: ../../install/windows.rst:21 +msgid "In these instructions, we'll use **Windows PowerShell**, a command-line interface that comes with every installation of Windows (since XP). The easiest way to find it (on Windows 7 and later) is to search for it in your Start Menu. Every line in the instructions that begins with ``>`` is a command that you need to run in PowerShell, but without the ``>``: that sign is a convention used in instructions to make it clear that it is a command you need to run." +msgstr "" + +#: ../../install/windows.rst:23 ../../install/windows.rst:81 +#: ../../install/windows.rst:104 +msgid "Advanced users" +msgstr "" + +#: ../../install/windows.rst:26 +msgid "If you wish to use an SQL engine other that PostgreSQL, most of Tabbycat should work, but a few features rely on SQL functions that aren't supported by all engines. To configure Tabbycat to use a different engine, set the ``DATABASES`` `Django setting `_ accordingly." +msgstr "" + +#: ../../install/windows.rst:29 +msgid "1. Install dependencies" +msgstr "" + +#: ../../install/windows.rst:31 +msgid "First, you need to install all of the software on which Tabbycat depends, if you don't already have it installed." +msgstr "" + +#: ../../install/windows.rst:36 +msgid "1(a). Python" +msgstr "" + +#: ../../install/windows.rst:37 +msgid "*Python is a popular programming language, and the language in which the core of Tabbycat is coded.*" +msgstr "" + +#: ../../install/windows.rst:39 +msgid "Download and install the latest version of Python 3.6 from the `Python website `_. In the installer, check the box to add Python to your PATH (see box below)." +msgstr "" + +#: ../../install/windows.rst:42 +msgid "Which file should I download?" +msgstr "" + +#: ../../install/windows.rst:44 +msgid "Regardless of if you have 64-bit or 32-bit Windows, choose the \"Windows x86 executable installer\"." +msgstr "" + +#: ../../install/windows.rst:46 +msgid "**Please take note:** Just after you open the installer, **check the \"Add Python 3.6 to PATH\" box**:" +msgstr "" + +#: ../../install/windows.rst:51 +msgid "To check that Python is installed correctly, open Windows PowerShell, type ``python`` and press Enter. It should look something like this. If you installed the 32-bit version, it will say ``32 bit`` instead of ``64 bit``." +msgstr "" + +#: ../../install/windows.rst:55 +msgid "(To exit Python, type ``exit()`` then press Enter.)" +msgstr "" + +#: ../../install/windows.rst:57 +msgid "**If you already have Python**, great! Some things to double-check:" +msgstr "" + +#: ../../install/windows.rst:59 +msgid "You must have at least Python 3.6 (Python 2 is not supported.)" +msgstr "" + +#: ../../install/windows.rst:60 +msgid "Your installation path must not have any spaces in it." +msgstr "" + +#: ../../install/windows.rst:61 +msgid "If that doesn't work, note that the following must be part of your ``PATH`` environment variable: ``C:\\Python36;C:\\Python36\\Scripts`` (or as appropriate for your installation directory). Follow `the instructions here `_ to add this to your path." +msgstr "" + +#: ../../install/windows.rst:66 +msgid "1(b). PostgreSQL" +msgstr "" + +#: ../../install/windows.rst:67 +msgid "*PostgreSQL is a database management system.*" +msgstr "" + +#: ../../install/windows.rst:69 +msgid "Go to the `PostgreSQL downloads page `_, then follow the link through to EnterpriseDB to download and install the latest version of PostgreSQL." +msgstr "" + +#: ../../install/windows.rst:71 +msgid "Once PostgreSQL is installed, the PostgreSQL service will run on your computer whenever you are using it. You might prefer to configure it so that it only runs when you want to run Tabbycat. To do this, open \"Services\" in your Control Panel on Windows, find the PostgreSQL service, and change its startup type to \"Manual\". This will tell it not to start whenever you log in. Then, if you want to run the server (so you can use Tabbycat), you can do so from \"Services\" by selecting the PostgreSQL service and clicking \"Start the service\"." +msgstr "" + +#: ../../install/windows.rst:74 +msgid "1(c). Git" +msgstr "" + +#: ../../install/windows.rst:75 +msgid "*Git is a version control system.*" +msgstr "" + +#: ../../install/windows.rst:77 +msgid "We won't use Git directly, but Node.js (which we install in the next step) requires Git to work. So, install the latest version for Windows from the `Git website `_." +msgstr "" + +#: ../../install/windows.rst:84 +msgid "If you already have `GitHub Desktop `_ installed, you might think that this would be good enough. Unfortunately, it's not---GitHub Desktop installs a portable version of Git. Node.js, on the other hand, requires the ``git`` to be in the ``PATH``, so it can call it directly. The easiest (but not only) way to do this is just to install Git from the link above." +msgstr "" + +#: ../../install/windows.rst:92 +msgid "1(d). Node.js/NPM" +msgstr "" + +#: ../../install/windows.rst:93 +msgid "*Node.js is a JavaScript runtime.*" +msgstr "" + +#: ../../install/windows.rst:95 +msgid "Download and run the node.js 8 Installer (.msi) for either `x64 versions `_ of Windows or `x86 versions `_." +msgstr "" + +#: ../../install/windows.rst:98 +msgid "2. Get the source code" +msgstr "" + +#: ../../install/windows.rst:100 +msgid "`Go to the page for our latest release `_." +msgstr "" + +#: ../../install/windows.rst:101 +msgid "Download the zip file." +msgstr "" + +#: ../../install/windows.rst:102 +msgid "Extract all files in it to a folder of your choice." +msgstr "" + +#: ../../install/windows.rst:107 +msgid "If you've used Git before, you might prefer to clone `our GitHub repository`_ instead. Don't forget to check out the |vrelease| tag or the master branch." +msgstr "" + +#: ../../install/windows.rst:109 +msgid "Even better, you might like to fork the repository first, to give yourself a little more freedom to make code changes on the fly (and potentially :ref:`contribute ` them to the project)." +msgstr "" + +#: ../../install/windows.rst:114 +msgid "3. Set up a new database" +msgstr "" + +#: ../../install/windows.rst:116 +msgid "You can skip steps 2 and 3 if this is not your first installation. Every Tabbycat installation requires its own database, but they can use the same login role if you like." +msgstr "" + +#: ../../install/windows.rst:118 +msgid "Open the **pgAdmin** tool, which you installed as part of installing PostgreSQL. In the object browser on the left, double-click the server marked \"(localhost:5432)\". Log in using the password you set during installation." +msgstr "" + +#: ../../install/windows.rst:120 +msgid "Right-click Login Roles, and click \"New Login Role…\"" +msgstr "" + +#: ../../install/windows.rst:124 +msgid "Fill in the New Login Role box as follows (everything not listed below can be left as-is):" +msgstr "" + +#: ../../install/windows.rst:126 +msgid "In the **Properties** tab, in **Role Name**, choose a user account name. (If you don't know what to pick, we suggest \"tabbycat\".)" +msgstr "" + +#: ../../install/windows.rst:127 +msgid "In the **Definition** tab, choose a **Password** and type it in **Password (again)**." +msgstr "" + +#: ../../install/windows.rst:129 +msgid "Then click OK. (Remember this user name and password, you'll need it later.)" +msgstr "" + +#: ../../install/windows.rst:131 +msgid "Right-click Databases, and click \"New Database…\"" +msgstr "" + +#: ../../install/windows.rst:135 +msgid "Fill in the New Database box as follows (everything not listed below can be left as-is):" +msgstr "" + +#: ../../install/windows.rst:137 +msgid "In the **Properties** tab, in **Name**, choose a database name (with no spaces in it)." +msgstr "" + +#: ../../install/windows.rst:138 +msgid "In the **Properties** tab, in **Owner**, type the name of the login role you just created." +msgstr "" + +#: ../../install/windows.rst:140 +msgid "Then click OK. (Remember the database name, you'll need it later.)" +msgstr "" + +#: ../../install/windows.rst:143 +msgid "4. Install Tabbycat" +msgstr "" + +#: ../../install/windows.rst:145 +msgid "Almost there!" +msgstr "" + +#: ../../install/windows.rst:147 +msgid "Open a Windows PowerShell. Navigate to the folder where you cloned/extracted Tabbycat. For example, if you installed it in ``C:\\Users\\myusername\\Documents\\GitHub\\tabbycat``, then run::" +msgstr "" + +#: ../../install/windows.rst:151 +msgid "Make a copy of **settings\\\\local.example** and rename it to **settings\\\\local.py**. Open your new **local.py** file. Find this part, and fill in the blanks (the empty quotation marks) as indicated:" +msgstr "" + +#: ../../install/windows.rst:166 +msgid "Optionally, replace the value in this line in the same file with your own time zone, as defined in the `IANA time zone database `_ (*e.g.*, ``Pacific/Auckland``, ``America/Mexico_City``, ``Asia/Kuala_Lumpur``)::" +msgstr "" + +#: ../../install/windows.rst:170 +msgid "Start a new virtual environment. We suggest the name `venv`, though it can be any name you like::" +msgstr "" + +#: ../../install/windows.rst:174 +msgid "Run the `Activate.ps1` script. This puts you \"into\" the virtual environment::" +msgstr "" + +#: ../../install/windows.rst:178 +msgid "If you get an error message saying that the script isn't digitally signed, open a PowerShell with administrator privileges by right-clicking PowerShell in the Start meny and clicking \"Run as administrator\". Then run this command::" +msgstr "" + +#: ../../install/windows.rst:182 +msgid "Read the warning message, then type ``y`` to confirm. By default, the execution policy on Windows is ``Restricted``, which does not permit scripts like ``activate`` to be run. Changing it to ``RemoteSigned`` relaxes it to allow local scripts to be run without checking the signature." +msgstr "" + +#: ../../install/windows.rst:184 +msgid "Install Tabbycat's requirements." +msgstr "" + +#: ../../install/windows.rst:186 +msgid "If you installed **32-bit Python**::" +msgstr "" + +#: ../../install/windows.rst:192 +msgid "You might be wondering: I thought I already installed the requirements. Why am I installing more? And the answer is: Before, you were installing the requirements to create a Python virtual environment for Tabbycat to live in. Now, you're *in* the virtual environment, and you're installing everything required for *Tabbycat* to operate." +msgstr "" + +#: ../../install/windows.rst:194 +msgid "Initialize the database and create a user account for yourself::" +msgstr "" + +#: ../../install/windows.rst:202 +msgid "Start Tabbycat!" +msgstr "" + +#: ../../install/windows.rst:208 +msgid "It should show something like this::" +msgstr "" + +#: ../../install/windows.rst:212 +msgid "Open your browser and go to the URL printed above. (In the above example, it's http://127.0.0.1:8000/). It should look something like this:" +msgstr "" + +#: ../../install/windows.rst:216 +msgid "If it does, great! You've successfully installed Tabbycat." +msgstr "" + +#: ../../install/windows.rst:218 +msgid "Naturally, your database is currently empty, so proceed to :ref:`importing initial data `." +msgstr "" + +#: ../../install/windows.rst:221 +msgid "Starting up an existing Tabbycat instance" +msgstr "" + +#: ../../install/windows.rst:223 +msgid "To start your Tabbycat instance up again next time you use your computer, open a PowerShell and::" +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/install/wsl.po b/docs/locale/vi/LC_MESSAGES/install/wsl.po new file mode 100644 index 00000000000..fca38d19294 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/install/wsl.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/install/wsl.po\n" +"X-Crowdin-File-ID: 1325\n" +"Language: vi_VN\n" + +#: ../../install/wsl.rst:5 +msgid "Installing Locally on Linux on Windows (WSL)" +msgstr "" + +#: ../../install/wsl.rst:7 +msgid "Is this the best installation method for you?" +msgstr "" + +#: ../../install/wsl.rst:10 +msgid "In most cases, we recommend doing an :ref:`internet-based installation on Heroku ` instead. If you decide to do a local installation, be sure to read our page on :ref:`local installations ` to help you understand what's going on, particularly this section: :ref:`install-decision`" +msgstr "" + +#: ../../install/wsl.rst:12 +msgid "If you just want to quickly set up a copy of Tabbycat to run locally on Windows, consider :ref:`installing using Docker`, which is a shorter process than the one below." +msgstr "" + +#: ../../install/wsl.rst:14 +msgid "Windows Subsystem for Linux is only available on Windows 10. If you have an older version of Windows, :ref:`install Tabbycat locally on Windows ` instead." +msgstr "" + +#: ../../install/wsl.rst:18 +msgid "Windows Subsystem for Linux (WSL) was taken out of beta in the `Windows 10 Fall Creators Update `_, which was released in October 2017. On Windows 10 computers, we now recommend this local installation method over :ref:`installing it directly on Windows `." +msgstr "" + +#: ../../install/wsl.rst:21 +msgid "Requisite technical background" +msgstr "" + +#: ../../install/wsl.rst:23 +msgid "It will help a lot if you have some experience with Linux, but mainly you need to be familiar with command-line interfaces, and you should be willing to install and work with the `Windows Subsystem for Linux `_. You might need to be prepared to familiarise yourself with aspects of WSL not covered in these instructions. While a background in the specific tools Tabbycat uses (Python, PostgreSQL, *etc.*) will make things easier, it's not necessary: we'll talk you through the rest." +msgstr "" + +#: ../../install/wsl.rst:27 +msgid "A. Install Ubuntu on Windows" +msgstr "" + +#: ../../install/wsl.rst:29 +msgid "*If you already have a Linux distribution installed on your PC, skip to* :ref:`part B `." +msgstr "" + +#: ../../install/wsl.rst:31 +msgid "First, `check that you have the Fall Creators Update (build 1709) `_. If you don't, update Windows." +msgstr "" + +#: ../../install/wsl.rst:33 +msgid "Then, install the Windows Subsystem for Linux. For most people, this involves the following:" +msgstr "" + +#: ../../install/wsl.rst:35 +msgid "Enable the Windows Subsystem for Linux feature, by finding **Turn Windows features on or off** on the Start Menu, then checking the box for **Windows Subsystem for Linux** and clicking **OK**. You'll be prompted to restart your computer to make the changes take effect." +msgstr "" + +#: ../../install/wsl.rst:39 +msgid "Install Ubuntu by finding it on the Microsoft Store. For your convenience, `here's a direct link to Ubuntu on the Microsoft Store `_." +msgstr "" + +#: ../../install/wsl.rst:41 +msgid "Launch Ubuntu and follow the instructions. You'll be prompted to create a user account for your Ubuntu system." +msgstr "" + +#: ../../install/wsl.rst:43 +msgid "Some more detailed instructions, including some troubleshooting, are `available on Microsoft's website `_." +msgstr "" + +#: ../../install/wsl.rst:45 +msgid "Advanced users" +msgstr "" + +#: ../../install/wsl.rst:48 +msgid "You can, of course, use any Linux distribution that Windows supports. We just suggest Ubuntu because it's the most well-known (and the one that we use)." +msgstr "" + +#: ../../install/wsl.rst:53 +msgid "B. Install Tabbycat" +msgstr "" + +#: ../../install/wsl.rst:55 +msgid "You now have a Linux subsystem running on your computer, so head over to the :ref:`instructions to install Tabbycat locally on Linux ` and follow those (in full)." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/use/finishing-a-tournament.po b/docs/locale/vi/LC_MESSAGES/use/finishing-a-tournament.po new file mode 100644 index 00000000000..07f26c7d636 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/use/finishing-a-tournament.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/finishing-a-tournament.po\n" +"X-Crowdin-File-ID: 1327\n" +"Language: vi_VN\n" + +#: ../../use/finishing-a-tournament.rst:5 +msgid "Finishing a Tournament" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:7 +msgid "This page outlines some final steps to take after the conclusion of outrounds." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:10 +msgid "Tab Release" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:12 +msgid "Tabs can be released using the *Tab released* option under **Setup** > **Configuration**. Tabbycat offers the following system tabs:" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:14 +msgid "Team Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:15 +msgid "Speakers Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:16 +msgid "Replies Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:17 +msgid "Motions Tab" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:19 +msgid "You can configure the team, speakers and replies tab to display only a certain number of speakers, *e.g.*, to show only a \"Top 10 Speakers\" tab." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:21 +msgid "If you defined any speaker categories (for example, Novice, ESL or EFL), a tab for each category marked \"public\" can also be released using the **Release speaker category tabs to public**. You can similarly limit each of these tabs to display just the top few speakers, in the definition of the speaker categories. The speaker categories not marked public are *not* released by this option." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:23 +msgid "You can also redact individual speaker's identifying details (name, team, and institution) from the public individual tabs. You can do so by going into the **Edit Database** area, going to *Participants > Speakers*, finding the speaker and clicking the **Anonymous** box (and saving)." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:25 +msgid "Public tab pages are cached for performance reasons. This means that any changes that affect a tab page (say redacting a speaker or changing a speaker score) may not show up on the public site for up to an hour." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:28 +msgid "Wrapping Up" +msgstr "" + +#: ../../use/finishing-a-tournament.rst:30 +msgid "You probably want to turn off the *Public ballots*, *Public feedback*, *Feedback progress*, and *Public draw* features under **Configuration** at this stage as they no longer have any use." +msgstr "" + +#: ../../use/finishing-a-tournament.rst:32 +msgid "You also want to go into the **Edit Database** area, find the tournament and hit \"release all\" so that the results for the final round can be released." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/use/importing-data.po b/docs/locale/vi/LC_MESSAGES/use/importing-data.po new file mode 100644 index 00000000000..d2b39c003ed --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/use/importing-data.po @@ -0,0 +1,236 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/importing-data.po\n" +"X-Crowdin-File-ID: 1329\n" +"Language: vi_VN\n" + +#: ../../use/importing-data.rst:5 +msgid "Importing Initial Data" +msgstr "" + +#: ../../use/importing-data.rst:7 +msgid "Once you've got Tabbycat installed, the next step is to import data for the tournament: that is, import details of teams, speakers, adjudicators and rounds. There are a few ways to do this, each with their advantages and disadvantages." +msgstr "" + +#: ../../use/importing-data.rst:9 +msgid "To help you decide which to choose, here's a summary:" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Method" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Best for" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Drawcard" +msgstr "" + +#: ../../use/importing-data.rst:12 +msgid "Drawback" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "**Demonstration data**" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "Trying out Tabbycat" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "Loads sample data in one click" +msgstr "" + +#: ../../use/importing-data.rst:14 +msgid "Not for use with real tournaments" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "**Simple importer**" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "Small and medium-sized tournaments" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "Easy to use" +msgstr "" + +#: ../../use/importing-data.rst:18 +msgid "Only deals with basic data" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "**Edit database**" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "Adding data not handled by the simple importer or editing existing data" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "Can handle all types of information" +msgstr "" + +#: ../../use/importing-data.rst:22 +msgid "Adding large amounts of data is time consuming" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "``importtournament`` **command**" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "Large tournaments" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "Easier to repeat, can handle most formats of information" +msgstr "" + +#: ../../use/importing-data.rst:28 +msgid "Requires basic knowledge of how to use a command line interface" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "**Developing your own importer**" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "Large tournaments with custom needs" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "Easier to repeat, will take information in whatever format it is already in" +msgstr "" + +#: ../../use/importing-data.rst:33 +msgid "Requires background in Python and and learning about the importer classes" +msgstr "" + +#: ../../use/importing-data.rst:41 +msgid "Demonstration data" +msgstr "" + +#: ../../use/importing-data.rst:42 +msgid "If you're just learning or experimenting with Tabbycat, there are two demonstration datasets available, each with a sample set of teams, adjudicators, *etc.*, so that you can immediately start running rounds. Just be aware that these probably won't relate to anyone at your real-life tournament." +msgstr "" + +#: ../../use/importing-data.rst:44 +msgid "To load a demonstration dataset, click **New Tournament** link on the home page (once logged in as admin). You'll see a page titled \"Create New Tournament\". Scroll to the bottom of this page and click on one of the links at the bottom." +msgstr "" + +#: ../../use/importing-data.rst:47 +msgid "Simple importer" +msgstr "" + +#: ../../use/importing-data.rst:48 +msgid "The simple importer is the easiest way to get a tournament going, and we recommend it for small- and medium-sized tournaments. It allows you to add institutions, teams, adjudicators, venues, venue categories and venue constraints. (If you need to add anything else, use the :ref:`Edit Database area ` instead.)" +msgstr "" + +#: ../../use/importing-data.rst:50 +msgid "To get started, create a new tournament using the **New Tournament** link on the home page (once logged in as admin). It'll ask you for a few basic pieces of information." +msgstr "" + +#: ../../use/importing-data.rst:54 +msgid "Then, once you're in your tournament, click **Setup** in the left-hand menu, then **Import Data**, to open the simple importer." +msgstr "" + +#: ../../use/importing-data.rst:58 +msgid "You first need to add institutions. Once institutions are added, you can then add teams and adjudicators in the relevant sections. Each of these is a two-step process:" +msgstr "" + +#: ../../use/importing-data.rst:60 +msgid "For **institutions** and **venues**, it will first ask you to copy-paste a list of names and properties in a comma-separated table format. The second step is to confirm individual fiels." +msgstr "" + +#: ../../use/importing-data.rst:61 +msgid "For **teams** and **adjudicators**, it will first ask you how many teams/adjudicators to add for each institution (or who lack an institutional affiliation). The second step is to fill in their details, for example, names." +msgstr "" + +#: ../../use/importing-data.rst:69 +msgid "Finally, if you would like to use venue categories and/or :ref:`venue constraints `, you can do so using the two last sections of the simple importer." +msgstr "" + +#: ../../use/importing-data.rst:71 +msgid "If copying and pasting from a spreadsheet, an easy way to make a comma-separated table is to save a spreadsheet with the relevant information as a \\*.csv file, then open this file in a plain text editor (such as Notepad or TextEdit), and copying it from there." +msgstr "" + +#: ../../use/importing-data.rst:76 +msgid "Editing the database" +msgstr "" + +#: ../../use/importing-data.rst:77 +msgid "Sometimes, the simple importer just isn't enough---whether because you need more customization than the simple importer handles (*e.g.* adjudicator feedback questions), or because some participants changed their details after you imported the inital data. In this case, the easiest thing to do is to edit the database via the Django administrative interface (under Setup > Edit Database)." +msgstr "" + +#: ../../use/importing-data.rst:79 +msgid "The general pattern goes like this: Go to **Setup > Edit Database**, find the type of object you wish to add/change, and click \"Add\" or \"Change\". Then, fill in what you need to and save the object." +msgstr "" + +#: ../../use/importing-data.rst:81 +msgid "The Edit Database area is very powerful, and naturally if you mess things up, you can insert potentially catastrophic inconsistencies into the database. For participant information this is hard to do, but it's worth keeping in mind." +msgstr "" + +#: ../../use/importing-data.rst:86 +msgid "The ``importtournament`` command on local installations" +msgstr "" + +#: ../../use/importing-data.rst:88 +msgid "We've written a management command called ``importtournament`` to help automate the tournament set-up. The script, however, is neither foolproof nor comprehensive, so you might find you need to modify things slightly if your tournament structure is different from ours. Be prepared to try this a few times to get it to work. Nonetheless, this is probably the fastest way to set up a tournament." +msgstr "" + +#: ../../use/importing-data.rst:90 +msgid "Copy and rename the ``data/demo`` folder" +msgstr "" + +#: ../../use/importing-data.rst:91 +msgid "See the CSV files in the new folder, and add/replace the data as per your tournament. Note that the institutions (*i.e.* first column) in the ``speakers.csv`` and ``adjudicators.csv`` files must match the institutions in the second column of the ``institutions.csv`` file. And that all CSV files must end with a blank line." +msgstr "" + +#: ../../use/importing-data.rst:92 +msgid "Use this command, replacing ``YOUR_DATA_DIR`` with your new folder's name. (Square brackets indicate optional arguments; if you use them, omit the square brackets. All of them relate to the name of your tournament.)" +msgstr "" + +#: ../../use/importing-data.rst:98 +msgid "This script has a number of options. They're worth taking a look at before you run the script. For details, see::" +msgstr "" + +#: ../../use/importing-data.rst:102 +msgid "Assuming the command completes successfully without errors, you should double check the data in the Django interface, as described above in :ref:`import-edit-database`. In particular you should check that the *Rounds* have the correct draw types and that silent rounds have been marked correctly." +msgstr "" + +#: ../../use/importing-data.rst:105 +msgid "``importtournament`` on Heroku installs" +msgstr "" + +#: ../../use/importing-data.rst:107 +msgid "Instructions for using the ``importtournament`` command on Heroku installations are in steps 4 and 5 of :ref:`install-heroku`. The recommended procedure is first to import the tournament into a local installation, :ref:`as described above `, and then to push the local database to Heroku using the ``heroku pg:push`` command." +msgstr "" + +#: ../../use/importing-data.rst:110 +msgid "Developing your own importer" +msgstr "" + +#: ../../use/importing-data.rst:112 +msgid "If our suggested file formats cause you headaches, it might be easier to write your own importer. We have a generic importer framework that should make this easier, so for some tournaments it might (very conceivably) be faster to write your own importer to conform to your data, than it is to make your data conform to our importer. You need a background in Python in order to do this. For more details, see :ref:`tournament-data-importers`." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/use/running-a-tournament.po b/docs/locale/vi/LC_MESSAGES/use/running-a-tournament.po new file mode 100644 index 00000000000..c48aa928c46 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/use/running-a-tournament.po @@ -0,0 +1,196 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-12-22 03:12\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/running-a-tournament.po\n" +"X-Crowdin-File-ID: 1331\n" +"Language: vi_VN\n" + +#: ../../use/running-a-tournament.rst:5 +msgid "Running a Tournament" +msgstr "" + +#: ../../use/running-a-tournament.rst:7 +msgid "Once you've finished the steps in :ref:`starting-a-tournament`, you're ready to go! This page outlines what you would do for each round during the tournament. After the tournament, proceed to :ref:`finishing-a-tournament`." +msgstr "" + +#: ../../use/running-a-tournament.rst:9 +msgid "This is all done from the admin area (*i.e.*, by the tab director or adjudication core member). In the admin area, tournament-wide pages (feedback, standings, and break) are at the top of the left-hand menu, while round-specific pages (availability, draw, display, motions, and results) are in dropdown's organised by each round's abbreviation." +msgstr "" + +#: ../../use/running-a-tournament.rst:11 +msgid "The basic workflow for each round is:" +msgstr "" + +#: ../../use/running-a-tournament.rst:13 +msgid ":ref:`Mark the teams, adjudicators, and venues present as available `" +msgstr "" + +#: ../../use/running-a-tournament.rst:14 +msgid ":ref:`Generate the draw ` and allocate the adjudicators" +msgstr "" + +#: ../../use/running-a-tournament.rst:15 +msgid ":ref:`Show/release the draw `" +msgstr "" + +#: ../../use/running-a-tournament.rst:16 +msgid ":ref:`Release/enter ` the motions" +msgstr "" + +#: ../../use/running-a-tournament.rst:17 +msgid "Have the debates" +msgstr "" + +#: ../../use/running-a-tournament.rst:18 +msgid ":ref:`Enter results `" +msgstr "" + +#: ../../use/running-a-tournament.rst:19 +msgid ":ref:`Advance to the next round `" +msgstr "" + +#: ../../use/running-a-tournament.rst:24 +msgid "Availability" +msgstr "Tính khả dụng" + +#: ../../use/running-a-tournament.rst:26 +msgid "**Set availability.** For each round, you need to set the venue, team and adjudicator availability. If any of those are not marked as available they will not be used within the draw; so this feature is mostly useful for when adjudicators or venues are only available for certain rounds." +msgstr "" + +#: ../../use/running-a-tournament.rst:28 +msgid "To do this, click the round in the menu, then click **Check-Ins**. Here you can then go to the availability pages for venue, teams, and adjudicators, or check in everything at once. When you've set everything appropriately use the **Generate Draw** button in the top right to advance." +msgstr "" + +#: ../../use/running-a-tournament.rst:34 +msgid "You can set availabilities in advance of the current round — ie if you know the venue/adjudicator schedules their availabilities can be set ahead of time." +msgstr "" + +#: ../../use/running-a-tournament.rst:37 +msgid "Generating the draw" +msgstr "" + +#: ../../use/running-a-tournament.rst:39 +msgid "**Confirm the draft draw**. After advancing from availability section you will first be shown a draft draw that details how the draw was formulated, pointing out pull-ups and conflict swaps and the like." +msgstr "" + +#: ../../use/running-a-tournament.rst:43 +msgid "The draft draw is for you to double-check. While there are some basic tests on the draw algorithm, it never hurts to sanity-check it again." +msgstr "" + +#: ../../use/running-a-tournament.rst:45 +msgid "If you *do* find something wrong with a draft draw, you can edit the match-ups, but please also let us know what the problem was! You can find our contact details in the :ref:`authors` section." +msgstr "" + +#: ../../use/running-a-tournament.rst:47 +msgid "Once on the confirmed draw page you can click **Edit Adjudicators**." +msgstr "" + +#: ../../use/running-a-tournament.rst:51 +msgid "**Allocate the adjudicators**. Changes here will auto-save; feel free to return to the **Draw** when needed. See :ref:`adjudicator allocation ` for more details about the allocation process." +msgstr "" + +#: ../../use/running-a-tournament.rst:55 +msgid "If you are using venue constraints the **Draw** page may prompt you to Auto Allocate the venues used to satisfy those constraints; see :ref:`venue-constraints ` for more details. Regardless of whether you are using venue constraints or not you can change the Venues per-debate in the **Edit Venues** area." +msgstr "" + +#: ../../use/running-a-tournament.rst:60 +msgid "Releasing the draw" +msgstr "" + +#: ../../use/running-a-tournament.rst:62 +msgid "Once you're happy with your adjudicator allocation, you're ready to start the round." +msgstr "" + +#: ../../use/running-a-tournament.rst:64 +msgid "**Release to general assembly.** From the *Display* page for that round, go to **Show by Venue** or **Show by Team** (whichever you prefer). Then put it up on the projector. There are automatic scroll buttons and buttons for changing text sizing." +msgstr "" + +#: ../../use/running-a-tournament.rst:68 +msgid "**Release to public.** If you're using the public draw function (where the draw is posted publicly to your Tabbycat website) use the **Release to Public** button to allow the page to display." +msgstr "" + +#: ../../use/running-a-tournament.rst:72 +msgid "To avoid the site from being overloaded by anxious refreshers, we recommend that large tournaments not release the draw to the public until after it's been seen by general assembly. That said, note that due to caching there can be a delay of up to 1 minute between when a draw is released and when it first shows up on the public site." +msgstr "" + +#: ../../use/running-a-tournament.rst:73 +msgid "Tabbycat can be set to send emails once the draw is released to adjudicators informing them of their assignments for convenience." +msgstr "" + +#: ../../use/running-a-tournament.rst:78 +msgid "Entering and Releasing Motions" +msgstr "" + +#: ../../use/running-a-tournament.rst:80 +msgid "Tabbycat is agnostic as to whether you enter motions into Tabbycat before or after they are shown publicly. However, they must be entered *at some point* before ballots are entered." +msgstr "" + +#: ../../use/running-a-tournament.rst:82 +msgid "**Enter the motion text.** Either before or after their public release motions can be entered in the **Motions** section for that round." +msgstr "" + +#: ../../use/running-a-tournament.rst:84 +msgid "**Release to general assembly.** If you are entering motions *before* they are publicly revealed note that there is a *Display Motions* button in the **Display** area that allows you to do a Power Point style motion release." +msgstr "" + +#: ../../use/running-a-tournament.rst:86 +msgid "**Release to public.** As with draws, if you have the *enable public view of motions* setting configured your Tabbycat website will display a running list of motions from the tournament. When this is on, using the **Release Motions to Public** button on the **Motions** page will mark the current set of motions as able to be displayed on this page." +msgstr "" + +#: ../../use/running-a-tournament.rst:91 +msgid "Entering Results" +msgstr "" + +#: ../../use/running-a-tournament.rst:93 +msgid "Enter debate results and feedback as they come in (and/or allow online entry of results and feedback)." +msgstr "" + +#: ../../use/running-a-tournament.rst:95 +msgid "Both results and feedback entered in the tab room or online need to be confirmed before the results are counted. To confirm a debate ballot and the debate as a whole, the confirmed checkbox under *Ballot Status* should be ticket in addition to the *Debate Status* being set to Confirmed." +msgstr "" + +#: ../../use/running-a-tournament.rst:97 +msgid "Note that you can track data entry progress from the **Overview** page for the tournament." +msgstr "" + +#: ../../use/running-a-tournament.rst:99 +msgid "See :ref:`data-entry` for more details about the data entry process." +msgstr "" + +#: ../../use/running-a-tournament.rst:101 +msgid "We strongly recommend entering all data using the assistant area, not the admin area. This is because the admin area (intentionally) does not enforce the data confirmation procedure." +msgstr "" + +#: ../../use/running-a-tournament.rst:106 +msgid "Advancing to the next round" +msgstr "" + +#: ../../use/running-a-tournament.rst:108 +msgid "Once you've got all the results entered and confirmed, you're ready to progress to the next round. This can be done by going to the **Results** area, and then using the **Advance to Next Round** button." +msgstr "" + +#: ../../use/running-a-tournament.rst:112 +msgid "When you advance to the next round, if you've enabled public results, the results for the current round (which is now the previous round) will be released to the public **unless** the round is marked as \"silent\" in the database. So if you're careful about when results should be released, don't change the current round until you're ready to release those results." +msgstr "" + +#: ../../use/running-a-tournament.rst:114 +msgid "There is a design assumption that you will always want to release results for non-silent rounds before you start working on the draw for the next round. If this isn't true for you, please get in touch with us so that we know. The workaround is to make all rounds silent, then unsilent them when you're ready to release results." +msgstr "" + +#: ../../use/running-a-tournament.rst:116 +msgid "Emails can be sent to speakers informing them of their team's win/loss/points record before advancing rounds. This is independent from whether the whole round's results are released to the public." +msgstr "" + diff --git a/docs/locale/vi/LC_MESSAGES/use/starting-a-tournament.po b/docs/locale/vi/LC_MESSAGES/use/starting-a-tournament.po new file mode 100644 index 00000000000..e76cc26abb7 --- /dev/null +++ b/docs/locale/vi/LC_MESSAGES/use/starting-a-tournament.po @@ -0,0 +1,196 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-31 10:38-0400\n" +"PO-Revision-Date: 2022-11-20 17:42\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/docs/locale/en/LC_MESSAGES/use/starting-a-tournament.po\n" +"X-Crowdin-File-ID: 1333\n" +"Language: vi_VN\n" + +#: ../../use/starting-a-tournament.rst:5 +msgid "Starting a Tournament" +msgstr "" + +#: ../../use/starting-a-tournament.rst:7 +msgid "This page outlines a few things you should do at the start of a tournament, after you've :ref:`imported the initial data `. Once you've done these, proceed to :ref:`running a tournament `." +msgstr "" + +#: ../../use/starting-a-tournament.rst:9 +msgid "Tabbycat is developed for — and tested on — modern web browsers. If you are using **Internet Explorer versions 8, 7, or 6** the interface may look odd or not function properly. Switch to a newer browser if possible." +msgstr "" + +#: ../../use/starting-a-tournament.rst:13 +msgid "Tournament configuration" +msgstr "" + +#: ../../use/starting-a-tournament.rst:15 +msgid "After importing all your data you can log into the site as an administrator by loading up the homepage and then using the **Login** button in the lower-right. From there you should go to the administration section of your tournament, and then go to the tournament configuration page by clicking **Setup** then **Configuration** in the menu." +msgstr "" + +#: ../../use/starting-a-tournament.rst:17 +msgid "Here you can adjust the debate rules and interface options to your liking then hit **Save** when finished. We also offer a number of presets that apply particular rule sets (such as the Australs rules) or feature sets (such as displaying information normally released during briefs on the website)." +msgstr "" + +#: ../../use/starting-a-tournament.rst:20 +msgid "Special data types and options" +msgstr "" + +#: ../../use/starting-a-tournament.rst:22 +msgid "There are a few optional fields that are not covered in the initial data templates, in the visual importer, or that may only be relevant in particular scenarios. It's worth going over these quickly to see if they are needed for your tournament. You can view and edit these fields in the **Edit Database** area (link is in the menu under **Setup**)." +msgstr "" + +#: ../../use/starting-a-tournament.rst:25 +msgid "Adjudicator Feedback > Adj Feedback Questions" +msgstr "" + +#: ../../use/starting-a-tournament.rst:25 +msgid "As described in :ref:`adjudicator-feedback`, the types of questions that can be posed for adjudicator feedback are able to be heavily customised. If you are customising your feedback form it should be done here, and before the tournament starts." +msgstr "" + +#: ../../use/starting-a-tournament.rst:30 +msgid "Authentication and Authorisation > Users" +msgstr "" + +#: ../../use/starting-a-tournament.rst:28 +msgid "Here you can add new admin users (those with full access) as well as new assistant users those (who can only do common data-entry tasks but not edit or view the full tab interface). See :ref:`user-accounts` for information on how to do this." +msgstr "" + +#: ../../use/starting-a-tournament.rst:30 +msgid "The people you're adding accounts for should be physically present when you do this, so that they can enter their password." +msgstr "" + +#: ../../use/starting-a-tournament.rst:33 +msgid "Participants > Regions" +msgstr "" + +#: ../../use/starting-a-tournament.rst:33 +msgid "Optionally, each institution may belong to a *Region*. An institution's region is used within the adjudicator allocation process to visually identify teams and adjudicators for the purposes of highlighting diversity issues. These have traditionally been used for geographic regions (such as Oceania), although could be repurposed as arbitrary markers of information — for example they could be used to denote teams from a particular State, institutional size, or circuit." +msgstr "" + +#: ../../use/starting-a-tournament.rst:41 +msgid "Participants > Adjudicators" +msgstr "" + +#: ../../use/starting-a-tournament.rst:36 +msgid "An adjudicators *Base Score* represents their relative ability to judge important rooms, where adjudicators with higher numbers will, relative to the other adjudicators, be placed in better roles (ie as Chairs) and in the rooms you deem most important in each round. If you are running a small tournament, and plan to do your allocations manually, you can set everyone's number to the same amount." +msgstr "" + +#: ../../use/starting-a-tournament.rst:37 +msgid "For larger tournaments, particularly those that collect feedback, see the :ref:`adjudicator-feedback` section for more information on how base scores and other variables influence the automated allocation process." +msgstr "" + +#: ../../use/starting-a-tournament.rst:38 +msgid "Regardless of how you score the adjs, if you have changed the minimimum chairing score in settings, you'll want to make sure there are enough adjudicators that meet this minimum threshold or the automated allocator may not function effectively." +msgstr "" + +#: ../../use/starting-a-tournament.rst:39 +msgid "All types of conflicts are assigned to the relevant adjudicator. Adjudicator's can be conflicted against particular teams, particular institutions, and other adjudicators. Each of these is a located in a tab at the top of the page." +msgstr "" + +#: ../../use/starting-a-tournament.rst:40 +msgid "Each adjudicator's gender is optional and is not displayed publicly; it is only shown in the adjudicator allocation interface" +msgstr "" + +#: ../../use/starting-a-tournament.rst:41 +msgid "Each adjudicator's pronoun is optional, and is only displayed if you use tabbycat to print the ballots and feedback sheets for each round." +msgstr "" + +#: ../../use/starting-a-tournament.rst:48 +msgid "Participants > Teams" +msgstr "" + +#: ../../use/starting-a-tournament.rst:44 +msgid "Note the distinction here between full name and short name. The latter is used on pages where space is tight, such as the draw displays or the adjudicator allocation interface." +msgstr "" + +#: ../../use/starting-a-tournament.rst:45 +msgid "Note that \"Uses institutional prefix\" option. With this option on, a team from the 'MUDS' insttution named '1' or 'Gold' would be displayed as 'MUDS 1' or 'MUDS Gold'." +msgstr "" + +#: ../../use/starting-a-tournament.rst:46 +msgid "At present, setting a team's type to Bye, Swing, or Composite only affects very particular circumstances, and should be considered unnecessary." +msgstr "" + +#: ../../use/starting-a-tournament.rst:47 +msgid "If you do have composite teams, and wish to have them be conflicted by adjudicators from each respective instutution, you'll need to add a new team conflict to each adjudicator from each institution." +msgstr "" + +#: ../../use/starting-a-tournament.rst:48 +msgid "If you do have swing teams, or teams that are otherwise ineligible for breaking, this is typically handled through the breaks interface in the main site" +msgstr "" + +#: ../../use/starting-a-tournament.rst:52 +msgid "Participants > Speakers" +msgstr "" + +#: ../../use/starting-a-tournament.rst:51 +msgid "Each speaker's gender is optional and is not displayed publicly; it is only shown in the adjudicator allocation interface" +msgstr "" + +#: ../../use/starting-a-tournament.rst:52 +msgid "Each speaker's pronoun is optional, and is only displayed if you use tabbycat to print the ballots and feedback sheets for each round." +msgstr "" + +#: ../../use/starting-a-tournament.rst:55 +msgid "Tournaments > Divisions" +msgstr "" + +#: ../../use/starting-a-tournament.rst:55 +msgid "At the moment divisions are only useful for running tournaments that use round-robin style draws. Here, each division represents a draw pool within a round. Division support here is under development and not tested in many scenarios." +msgstr "" + +#: ../../use/starting-a-tournament.rst:58 +msgid "Tournaments > Tournaments" +msgstr "" + +#: ../../use/starting-a-tournament.rst:58 +msgid "Note that tournaments can have a welcome message (useful for displaying maps and other information on the homepage)." +msgstr "" + +#: ../../use/starting-a-tournament.rst:61 +msgid "Venues > Venues" +msgstr "" + +#: ../../use/starting-a-tournament.rst:61 +msgid "A venue's priority determines its priority in being allocated. If there are 20 debates, and 30 rooms, the 20 rooms with the highest priorities will be chosen. Furthermore, if particular debates are marked as important during the draw process, those debates will receive the rooms with the highest priorities. In this way you can give close rooms to members of the adj core, or give larger rooms to debates that will draw a large audience." +msgstr "" + +#: ../../use/starting-a-tournament.rst:64 +msgid "Venues > Venue Categories" +msgstr "" + +#: ../../use/starting-a-tournament.rst:64 +msgid "Venue categories are not needed for most kinds of tournaments. Their purpose is to classify particular venues, such as venues all within one building or venues that are accessible. Once assigned these categories can display in the venue's name — ie \"Red 01.01\" or be used to assign Venue Constraints that match particular teams, institutions, or adjudicators to particular types of venues." +msgstr "" + +#: ../../use/starting-a-tournament.rst:67 +msgid "Information for the briefing" +msgstr "" + +#: ../../use/starting-a-tournament.rst:69 +msgid "If you're using the online submissions feature, some things you should probably mention in the briefing:" +msgstr "" + +#: ../../use/starting-a-tournament.rst:71 +msgid "Adjudicators must fill out ballots completely, including motions and venues—they are entered into the system." +msgstr "" + +#: ../../use/starting-a-tournament.rst:72 +msgid "There is a static URL for each person's ballots and feedback forms. It can be bookmarked, or the page can refreshed after each round." +msgstr "" + +#: ../../use/starting-a-tournament.rst:73 +msgid "If people submit a result or feedback online, they should indicate that they have done so on the paper copy of their ballot." +msgstr "" + diff --git a/tabbycat/actionlog/locale/vi/LC_MESSAGES/django.po b/tabbycat/actionlog/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..53094a14bc8 --- /dev/null +++ b/tabbycat/actionlog/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,323 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/actionlog/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 920\n" + +#: actionlog/apps.py +msgid "Action Log" +msgstr "" + +#: actionlog/models.py +msgid "Discarded ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Checked in ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Created ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Edited ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Confirmed ballot set" +msgstr "" + +#: actionlog/models.py +msgid "Submitted ballot set from the public form" +msgstr "" + +#: actionlog/models.py +msgid "Submitted feedback from the public form" +msgstr "" + +#: actionlog/models.py +msgid "Saved feedback" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator base score" +msgstr "" + +#: actionlog/models.py +msgid "Set adjudicator note" +msgstr "" + +#: actionlog/models.py +msgid "Saved adjudicator allocation" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated adjudicators" +msgstr "" + +#: actionlog/models.py +msgid "Saved a room manual edit" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated rooms" +msgstr "" + +#: actionlog/models.py +msgid "Edited room categories" +msgstr "" + +#: actionlog/models.py +msgid "Edited room constraints" +msgstr "" + +#: actionlog/models.py +msgid "Created draw" +msgstr "" + +#: actionlog/models.py +msgid "Confirmed draw" +msgstr "" + +#: actionlog/models.py +msgid "Regenerated draw" +msgstr "" + +#: actionlog/models.py +msgid "Released draw" +msgstr "" + +#: actionlog/models.py +msgid "Unreleased draw" +msgstr "" + +#: actionlog/models.py +msgid "Saved a matchup manual edit" +msgstr "" + +#: actionlog/models.py +msgid "Saved the sides status of a matchup" +msgstr "" + +#: actionlog/models.py +msgid "Saved divisions" +msgstr "" + +#: actionlog/models.py +msgid "Added/edited motion" +msgstr "" + +#: actionlog/models.py +msgid "Released motions" +msgstr "" + +#: actionlog/models.py +msgid "Unreleased motions" +msgstr "" + +#: actionlog/models.py +msgid "Auto-prioritized debate importance" +msgstr "" + +#: actionlog/models.py +msgid "Edited debate importance" +msgstr "" + +#: actionlog/models.py +msgid "Changed adjudicator breaking status" +msgstr "" + +#: actionlog/models.py +msgid "Edited break eligibility" +msgstr "" + +#: actionlog/models.py +msgid "Edited break categories" +msgstr "" + +#: actionlog/models.py +msgid "Generated the team break for all categories" +msgstr "" + +#: actionlog/models.py +msgid "Edited breaking team remarks and updated all team breaks" +msgstr "" + +#: actionlog/models.py +msgid "Edited breaking team remarks and updated this team break" +msgstr "" + +#: actionlog/models.py +msgid "Edited breaking team remarks" +msgstr "" + +#: actionlog/models.py +msgid "Set start time" +msgstr "" + +#: actionlog/models.py +msgid "Advanced the current round to" +msgstr "" + +#: actionlog/models.py +msgid "Marked round as completed" +msgstr "" + +#: actionlog/models.py +msgid "Edited teams availability" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicators availability" +msgstr "" + +#: actionlog/models.py +msgid "Edited room availability" +msgstr "" + +#: actionlog/models.py +msgid "Edited tournament options" +msgstr "" + +#: actionlog/models.py +msgid "Edited speaker category eligibility" +msgstr "" + +#: actionlog/models.py +msgid "Edited speaker categories" +msgstr "" + +#: actionlog/models.py +msgid "Imported institutions using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Imported rooms using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Imported teams using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Imported adjudicators using the simple importer" +msgstr "" + +#: actionlog/models.py +msgid "Updated adjudicator scores in bulk" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator-team conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator-adjudicator conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Edited adjudicator-institution conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Edited team-institution conflicts" +msgstr "" + +#: actionlog/models.py +msgid "Generated check in identifiers for speakers" +msgstr "" + +#: actionlog/models.py +msgid "Generated check in identifiers for adjudicators" +msgstr "" + +#: actionlog/models.py +msgid "Generated check in identifiers for rooms" +msgstr "" + +#: actionlog/models.py +msgid "Created preformed panels" +msgstr "" + +#: actionlog/models.py +msgid "Auto-prioritized preformed panels" +msgstr "" + +#: actionlog/models.py +msgid "Edited preformed panel importance" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated adjudicators to preformed panels" +msgstr "" + +#: actionlog/models.py +msgid "Edited preformed panel adjudicator" +msgstr "" + +#: actionlog/models.py +msgid "Auto-allocated preformed panels to debates" +msgstr "" + +#: actionlog/models.py +msgid "type" +msgstr "" + +#: actionlog/models.py +msgid "timestamp" +msgstr "" + +#: actionlog/models.py +msgid "user" +msgstr "" + +#: actionlog/models.py +msgid "IP address" +msgstr "" + +#: actionlog/models.py +msgid "tournament" +msgstr "" + +#: actionlog/models.py +msgid "round" +msgstr "" + +#: actionlog/models.py +msgid "content type" +msgstr "" + +#: actionlog/models.py +msgid "object ID" +msgstr "" + +#: actionlog/models.py +msgid "action log" +msgstr "" + +#: actionlog/models.py +msgid "action log entries" +msgstr "" + +#: actionlog/models.py +msgid "All log entries require at least one of a user and an IP address." +msgstr "" + +#: actionlog/models.py +msgid "anonymous" +msgstr "" + diff --git a/tabbycat/adjallocation/locale/vi/LC_MESSAGES/django.po b/tabbycat/adjallocation/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..d8fd2fd507b --- /dev/null +++ b/tabbycat/adjallocation/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,439 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:56\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/adjallocation/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 922\n" + +#: adjallocation/allocators/base.py +msgid "There are no available adjudicators. Ensure there are adjudicators who have been marked as available for this round before auto-allocating." +msgstr "Hiện tại không có giám khảo nào sẵn sàng. Hãy chắc chắn rằng có giám khảo được đánh dấu sẵn sàng trong vòng này trước khi phân bổ tự động." + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "%(count)s score is larger than the maximum permitted adjudicator score (%(score).1f)." +msgid_plural "%(count)s scores are larger than the maximum permitted adjudicator score (%(score).1f)." +msgstr[0] "%(count)s điểm lớn hớn điểm cho phép của giám khảo (%(score).1f)." + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "%(count)s score is smaller than the minimum permitted adjudicator score (%(score).1f)." +msgid_plural "%(count)s scores are smaller than the minimum permitted adjudicator score (%(score).1f)." +msgstr[0] "%(count)s điểm nhỏ hơn điểm cho phép của giám khảo (%(score).1f)." + +#: adjallocation/allocators/hungarian.py +msgid "There are no adjudicators eligible to be a chair or panellist. Try changing the \"Minimum feedback score required to be allocated as chair or panellist\" setting to something lower than at least some adjudicators' current scores, and try again." +msgstr "Không có giám khảo nào hợp lệ để làm giám khảo chính hay giám khảo phụ. Hãy thử chỉnh \"điểm phản hồi thấp nhất để được phân bổ làm giám khảo chính hoặc giám khảo phụ\" xuống thấp hơn điểm của một số giám khảo hiện tại, rồi quay lại." + +#: adjallocation/allocators/hungarian.py +msgid "There are no debates for this round. Maybe you haven't created a draw yet?" +msgstr "Hiện tại chưa có trận debate nào trong vòng này. Có thể tại vì bạn chưa tạo bảng đấu?" + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "There are %(debate_count)s debates but only %(adj_count)s voting adjudicators." +msgstr "Có %(debate_count)s trận tranh biện nhưng chỉ có %(adj_count)s giám khảo có khả năng bầu." + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "There are %(panel_debates)s panel debates but only %(panellists)s available panellists (less than %(needed)s)." +msgstr "Hiện tại có %(panel_debates)s bàn giám khảo nhưng chỉ có %(panellists)s giám khảo phụ sẵn sàng (ít hơn %(needed)s)." + +#: adjallocation/allocators/hungarian.py +#, python-format +msgid "There are %(debates_count)s debates but only %(voting_count)s voting adjudicators." +msgstr "Có %(debates_count)s trận tranh biện nhưng chỉ có %(voting_count)s giám khảo có khả năng bầu." + +#: adjallocation/apps.py +msgid "Adjudicator Allocation" +msgstr "Phân bổ giám khảo" + +#: adjallocation/consumers.py +msgid "Draw is already released, unrelease draw to redo auto-allocations." +msgstr "Bảng đấu đã được công bố, hủy công bố bảng đấu để tự động phân bổ lại." + +#: adjallocation/consumers.py +msgid "Draw is not confirmed, confirm draw to run auto-allocations." +msgstr "Bảng đấu chưa được xác nhận, xác nhận bảng đấu để tự động phân bổ." + +#: adjallocation/consumers.py +msgid "There are no preformed panels available to allocate." +msgstr "Hiện tại không có bàn giám khảo được chỉ định trước nào sẵn sàng để phân bổ." + +#: adjallocation/consumers.py +msgid "Successfully auto-allocated preformed panels to debates." +msgstr "Đã tự động phân bổ thành công bàn giám khảo cho các trận tranh biện." + +#: adjallocation/consumers.py +#, python-format +msgid "Successfully auto-allocated adjudicators to debates. However, there was a warning:" +msgid_plural "Successfully auto-allocated adjudicators to debates. However, there were %(count)d warnings:" +msgstr[0] "Tự động phân bổ các giám khảo cho các trận tranh biện thành công. Tuy nhiên, có %(count)d cảnh báo:" + +#: adjallocation/consumers.py +msgid "Successfully auto-allocated adjudicators to debates." +msgstr "Tự động phân bổ các giám khảo cho các trận tranh biện thành công." + +#: adjallocation/consumers.py +msgid "There aren't any panels to fill. Create panels first." +msgstr "Hiện tại không có bàn giám khảo nào để điền. Tạo các bàn giám khảo trước." + +#: adjallocation/consumers.py +#, python-format +msgid "Successfully auto-allocated adjudicators to preformed panels. However, there was a warning:" +msgid_plural "Successfully auto-allocated adjudicators to preformed panels. However, there were %(count)d warnings:" +msgstr[0] "Đã tự động phân bổ các giám khảo cho các trận tranh biện thành công. Tuy nhiên, có %(count)d cảnh báo:" + +#: adjallocation/consumers.py +msgid "Successfully auto-allocated adjudicators to preformed panels." +msgstr "Đã tự động phân bổ giám khảo cho các bàn giám khảo thành công." + +#: adjallocation/consumers.py +msgid "You have no break category set as 'is general' so debate importances can't be calculated." +msgstr "" + +#: adjallocation/consumers.py +msgid "Succesfully auto-prioritised debates." +msgstr "Đã tự động ưu tiên các trận tranh biện thành công." + +#: adjallocation/consumers.py +msgid "You have no break category set as 'is general' so panel importances can't be calculated." +msgstr "" + +#: adjallocation/consumers.py +msgid "Succesfully auto-prioritised preformed panels." +msgstr "Đã tự động ưu tiên các bàn giám khảo thành công." + +#: adjallocation/consumers.py +msgid "Since this is the first round, the preformed panels aren't annotated with brackets and liveness." +msgstr "" + +#: adjallocation/consumers.py +msgid "The previous round's draw doesn't exist, so preformed panels can't be annotated with brackets and liveness." +msgstr "" + +#: adjallocation/consumers.py +msgid "Succesfully created new preformed panels for this round." +msgstr "Đã tạo thành công bàn giám khảo cho vòng này." + +#: adjallocation/models.py +msgid "chair" +msgstr "giám khảo chính" + +#: adjallocation/models.py +msgid "panellist" +msgstr "giám khảo phụ" + +#: adjallocation/models.py +msgid "trainee" +msgstr "giám khảo thực tập" + +#: adjallocation/models.py +msgid "debate" +msgstr "trận tranh biện" + +#: adjallocation/models.py +msgid "adjudicator" +msgstr "giám khảo" + +#: adjallocation/models.py +msgid "type" +msgstr "loại" + +#: adjallocation/models.py +msgid "available?" +msgstr "sẵn sàng?" + +#: adjallocation/models.py +msgid "debate adjudicator" +msgstr "giám khảo tranh biện" + +#: adjallocation/models.py +msgid "debate adjudicators" +msgstr "các giám khảo tranh biện" + +#: adjallocation/models.py +msgid "team" +msgstr "đội" + +#: adjallocation/models.py +msgid "adjudicator-team conflict" +msgstr "xung đột giữa giám khảo và đội" + +#: adjallocation/models.py +msgid "adjudicator-team conflicts" +msgstr "xung đột giữa giám khảo và đội" + +#: adjallocation/models.py +msgid "adjudicator 1" +msgstr "giám khảo 1" + +#: adjallocation/models.py +msgid "adjudicator 2" +msgstr "giám khảo 2" + +#: adjallocation/models.py +msgid "adjudicator-adjudicator conflict" +msgstr "xung đột giữa các giám khảo" + +#: adjallocation/models.py +msgid "adjudicator-adjudicator conflicts" +msgstr "xung đột giữa các giám khảo" + +#: adjallocation/models.py +msgid "institution" +msgstr "tổ chức" + +#: adjallocation/models.py +msgid "adjudicator-institution conflict" +msgstr "xung đột giữa giám khảo và tổ chức" + +#: adjallocation/models.py +msgid "adjudicator-institution conflicts" +msgstr "xung đột giữa giám khảo và tổ chức" + +#: adjallocation/models.py +msgid "team-institution conflict" +msgstr "xung đột giữa đội và tổ chức" + +#: adjallocation/models.py +msgid "team-institution conflicts" +msgstr "xung đột giữa đội và tổ chức" + +#: adjallocation/models.py +msgid "round" +msgstr "vòng" + +#: adjallocation/models.py +msgid "importance" +msgstr "mức độ quan trọng" + +#: adjallocation/models.py +msgid "minimum bracket" +msgstr "bảng dưới" + +#: adjallocation/models.py +msgid "Estimate of the lowest bracket for which this panel might be" +msgstr "" + +#: adjallocation/models.py +msgid "maximum bracket" +msgstr "bảng trên" + +#: adjallocation/models.py +msgid "Estimate of the highest bracket for which this panel might be" +msgstr "" + +#: adjallocation/models.py +msgid "room rank" +msgstr "xếp hạng phòng" + +#: adjallocation/models.py +msgid "Sequential number of panel, not used in any algorithms" +msgstr "Số thứ tự của bàn giám khảo không được dùng trong bất cứ thuật toán nào" + +#: adjallocation/models.py +msgid "liveness" +msgstr "khả năng bước tiếp" + +#: adjallocation/models.py +msgid "Number of categories this room is expected to be live for" +msgstr "" + +#: adjallocation/models.py +msgid "preformed panel" +msgstr "bàn giám khảo chỉ định" + +#: adjallocation/models.py +msgid "preformed panels" +msgstr "bàn giám khảo được chỉ định trước" + +#: adjallocation/models.py +msgid "panel" +msgstr "bàn giám khảo" + +#: adjallocation/models.py +msgid "preformed panel adjudicator" +msgstr "giám khảo của bàn giám khảo được chỉ định trước" + +#: adjallocation/models.py +msgid "preformed panel adjudicators" +msgstr "giám khảo của bàn giám khảo được chỉ định trước" + +#: adjallocation/preformed/base.py +msgid "There are no preformed panels to use. Have you allocated preformed panels for this round? If not, try just auto-allocating adjudicators instead." +msgstr "Hiện tại không có bàn giám khảo nào được chỉ định trước để dùng. Bạn đã phân bổ bàn giám khảo đươc chỉ định trước cho vòng này chưa? Nếu chưa, hãy thử phân bổ giám khảo tự động." + +#: adjallocation/templates/preformed_index.html adjallocation/views.py +msgid "Preformed Panels" +msgstr "Bàn giám khảo chỉ định" + +#: adjallocation/templates/preformed_index.html +msgid "A preformed panel is a defined group of adjudicators that is specified for a round before its draw has been generated. You can then manually or automatically apply these panels during the normal adjudicator allocation process. This can make allocations faster or allow you to create more considered panels of adjudicators." +msgstr "Một bàn giám khảo được chỉ định trước là một nhóm các giám khảo được chỉ định chấm một vòng trước khi bảng đấu được tạo. Bạn có thể chọn bàn giám khảo bằng tay hoặc tự động trong quá trình phân bố giám khảo. Việc này có thể khiến việc phân bổ nhanh hơn hoặc khiến bạn cân nhắc hơn trong việc phân bổ giám khảo." + +#: adjallocation/templates/preformed_index.html +msgid "Note that only adjudicators who have been marked as 'available' for that round will be able to be allocated for that round, so you may need to set their availability in advance." +msgstr "Chú ý rằng chỉ có những giám khảo đã được đánh dấu 'sẵn sàng' cho vòng đó mới có thể được phân bổ cho vòng đó, nên bạn cần phải đánh dấu trước." + +#: adjallocation/templates/preformed_index.html +#, python-format +msgid "Edit Preformed Panels for %(round)s" +msgstr "Chỉnh sửa bàn giám khảo cho vòng %(round)s" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator)s & %(team)s (personal)" +msgstr "Xung đột: %(adjudicator)s & %(team)s (cá nhân)" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator)s & %(team)s via institution %(institution)s" +msgstr "Xung đột: %(adjudicator)s & %(team)s với tổ chức %(institution)s" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s (personal)" +msgstr "Xung đột: %(adjudicator1)s & %(adjudicator2)s (cá nhân)" + +#: adjallocation/utils.py +#, python-format +msgid "Conflict: %(adjudicator1)s & %(adjudicator2)s via institution %(institution)s" +msgstr "Xung đột: %(adjudicator1)s & %(adjudicator2)s với tổ chức %(institution)s" + +#: adjallocation/views.py +msgid "Male" +msgstr "Nam" + +#: adjallocation/views.py +msgid "Female" +msgstr "Nữ" + +#: adjallocation/views.py +msgid "Other" +msgstr "Khác" + +#: adjallocation/views.py +msgid "Unknown" +msgstr "Không xác định" + +#: adjallocation/views.py +msgid "Edit Allocation" +msgstr "Chỉnh sửa phân bổ" + +#: adjallocation/views.py +msgid "Edit Panels" +msgstr "Chỉnh sửa bàn giám khảo" + +#: adjallocation/views.py +msgid "Return to Panels Overview" +msgstr "Quay trở lại tổng quan bảng giám khảo" + +#: adjallocation/views.py +msgid "Adjudicator-Team Conflicts" +msgstr "Xung đột giữa giám khảo và đội" + +#: adjallocation/views.py +msgid "Save Adjudicator-Team Conflicts" +msgstr "Lưu xung đột giữa giám khảo và đội" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d adjudicator-team conflict." +msgid_plural "Saved %(count)d adjudicator-team conflicts." +msgstr[0] "Đã lưu %(count)d xung đột giữa giám khảo và đội." + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d adjudicator-team conflict." +msgid_plural "Deleted %(count)d adjudicator-team conflicts." +msgstr[0] "Đã xóa %(count)d xung đột giữa giám khảo và đội." + +#: adjallocation/views.py +msgid "No changes were made to adjudicator-team conflicts." +msgstr "Không có thay đổi nào được thực hiện với xung đột giữa giám khảo và đội." + +#: adjallocation/views.py +msgid "Adjudicator-Adjudicator Conflicts" +msgstr "Xung đột giữa các giám khảo" + +#: adjallocation/views.py +msgid "Save Adjudicator-Adjudicator Conflicts" +msgstr "Lưu xung đột giữa các giám khảo" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d adjudicator-adjudicator conflict." +msgid_plural "Saved %(count)d adjudicator-adjudicator conflicts." +msgstr[0] "Đã lưu %(count)d xung đột giữa các giám khảo." + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d adjudicator-adjudicator conflict." +msgid_plural "Deleted %(count)d adjudicator-adjudicator conflicts." +msgstr[0] "Đã xóa %(count)d xung đột giữa các giám khảo." + +#: adjallocation/views.py +msgid "No changes were made to adjudicator-adjudicator conflicts." +msgstr "Không có thay đổi nào được thực hiện với xung đột giữa các giám khảo." + +#: adjallocation/views.py +msgid "Adjudicator-Institution Conflicts" +msgstr "Xung đột giữa giám khảo và tổ chức" + +#: adjallocation/views.py +msgid "Save Adjudicator-Institution Conflicts" +msgstr "Lưu xung đột giữa giám khảo và tổ chức" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d adjudicator-institution conflict." +msgid_plural "Saved %(count)d adjudicator-institution conflicts." +msgstr[0] "Đã lưu %(count)d xung đột giữa giám khảo và tổ chức." + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d adjudicator-institution conflict." +msgid_plural "Deleted %(count)d adjudicator-institution conflicts." +msgstr[0] "Đã xóa %(count)d xung đột giữa giám khảo và tổ chức." + +#: adjallocation/views.py +msgid "No changes were made to adjudicator-institution conflicts." +msgstr "Không có thay đổi nào được thực hiện với xung đột giữa giám khảo và tổ chức." + +#: adjallocation/views.py +msgid "Team-Institution Conflicts" +msgstr "Xung đột giữa đội và tổ chức" + +#: adjallocation/views.py +msgid "Save Team-Institution Conflicts" +msgstr "Lưu xung đột giữa đội và tổ chức" + +#: adjallocation/views.py +#, python-format +msgid "Saved %(count)d team-institution conflict." +msgid_plural "Saved %(count)d team-institution conflicts." +msgstr[0] "Đã lưu %(count)d xung đột giữa đội và tổ chức." + +#: adjallocation/views.py +#, python-format +msgid "Deleted %(count)d team-institution conflict." +msgid_plural "Deleted %(count)d team-institution conflicts." +msgstr[0] "Đã xóa %(count)d xung đột giữa đội và tổ chức." + +#: adjallocation/views.py +msgid "No changes were made to team-institution conflicts." +msgstr "Không có thay đổi nào được thực hiện với xung đột giữa đội và tổ chức." + diff --git a/tabbycat/adjfeedback/locale/vi/LC_MESSAGES/django.po b/tabbycat/adjfeedback/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..db5f2f6a388 --- /dev/null +++ b/tabbycat/adjfeedback/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,950 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-22 12:33\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/adjfeedback/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 924\n" + +#: adjfeedback/admin.py +msgid "Integer scales must have a minimum and maximum" +msgstr "" + +#: adjfeedback/admin.py +msgid "target" +msgstr "mục tiêu" + +#: adjfeedback/admin.py adjfeedback/models.py +msgid "source adjudicator" +msgstr "" + +#: adjfeedback/admin.py adjfeedback/models.py +msgid "source team" +msgstr "" + +#: adjfeedback/admin.py +msgid "Target" +msgstr "Mục tiêu" + +#: adjfeedback/admin.py +msgid "Source" +msgstr "Nguồn" + +#: adjfeedback/admin.py +msgid "Feedback timestamp and version" +msgstr "" + +#: adjfeedback/admin.py +#, python-format +msgid "%(timestamp)s (version %(version)s)" +msgstr "" + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission was marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." +msgid_plural "%(count)d feedback submissions were marked as confirmed. Note that this may have caused other feedback submissions to be marked as unconfirmed." +msgstr[0] "Có %(count)d lượt gửi phản hồi đã được đánh dấu xác nhận. Chú ý rằng điều này có thể hủy đánh dấu xác nhận các lượt gửi phản hồi khác." + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission was not marked as confirmed, probably because other feedback submissions that conflict with it were also marked as confirmed." +msgid_plural "%(count)d feedback submissions were not marked as confirmed, probably because other feedback submissions that conflict with them were also marked as confirmed." +msgstr[0] "Có %(count)d lượt gửi phản hồi chưa được đánh dấu xác nhận, có thể bởi vì các lượt gửi phản hồi khác không trùng khớp đã được đánh dấu là xác nhận." + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission was marked as unconfirmed." +msgid_plural "%(count)d feedback submissions were marked as unconfirmed." +msgstr[0] "Có %(count)d lượt gửi phản hồi đã được đánh dấu là không xác nhận." + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission is now ignored." +msgid_plural "%(count)d feedback submissions are now ignored." +msgstr[0] "Đã bỏ qua %(count)d lượt gửi phản hồi." + +#: adjfeedback/admin.py +#, python-format +msgid "1 feedback submission is now recognized." +msgid_plural "%(count)d feedback submissions are now recognized." +msgstr[0] "" + +#: adjfeedback/apps.py +msgid "Adjudicator Feedback" +msgstr "Phản hồi của giám khảo" + +#: adjfeedback/forms.py +msgid "chair" +msgstr "giám khảo chính" + +#: adjfeedback/forms.py +msgid "solo" +msgstr "đơn" + +#: adjfeedback/forms.py +msgid "panellist" +msgstr "giám khảo phụ" + +#: adjfeedback/forms.py +msgid "trainee" +msgstr "giám khảo thực tập" + +#. Translators: Please leave this blank, it should be left for the base Django translations. +#: adjfeedback/forms.py +msgid "Yes" +msgstr "" + +#. Translators: Please leave this blank, it should be left for the base Django translations. +#: adjfeedback/forms.py +msgid "No" +msgstr "" + +#. Translators: Please leave this blank, it should be left for the base Django translations. +#: adjfeedback/forms.py +msgid "This field is required." +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "Overall score (%(min)d=worst; %(max)d=best)*" +msgstr "Điểm tổng kết (%(min)d=tệ nhất; %(max)d=tốt nhất)*" + +#: adjfeedback/forms.py +msgid "Ignored" +msgstr "Bỏ qua" + +#. Translators: e.g. "Megan Pearson (chair)", with adjpos="chair" +#: adjfeedback/forms.py +msgid "Submitted - " +msgstr "Đã gửi - " + +#. Translators: e.g. "Megan Pearson (panellist)", with round="Round 3", adjpos="panellist" +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s (%(adjpos)s)" +msgstr "%(name)s (%(adjpos)s)" + +#: adjfeedback/forms.py +msgid "-- Adjudicators --" +msgstr "-- Giám khảo --" + +#: adjfeedback/forms.py +msgid "Adjudicator this feedback is about" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s (chair gave oral)" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "%(name)s (panellist gave oral as chair rolled)" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "This line (for %(adjudicator)s) didn't have a score" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "This line (for %(adjudicator)s) had too many columns" +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "There are several adjudicators called \"%(adjudicator)s\", so you can't use the bulk importer to update their score. Please do so in the Feedback Overview page instead." +msgstr "" + +#: adjfeedback/forms.py +#, python-format +msgid "There is no adjudicator in this tournament with the name \"%(adjudicator)s\"" +msgstr "Không có giám khảo nào trong giải này mang tên \"%(adjudicator)s\"" + +#: adjfeedback/forms.py +#, python-format +msgid "The score for %(adjudicator)s, \"%(score)s\", isn't a number" +msgstr "" + +#: adjfeedback/forms.py +msgid "There were no scores to import." +msgstr "Không có điểm nào để đưa vào." + +#: adjfeedback/models.py +msgid "adjudicator" +msgstr "giám khảo" + +#: adjfeedback/models.py +msgid "round" +msgstr "vòng" + +#: adjfeedback/models.py +msgid "score" +msgstr "điểm" + +#: adjfeedback/models.py +msgid "timestamp" +msgstr "mốc thời gian" + +#: adjfeedback/models.py +msgid "adjudicator base score history" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator base score histories" +msgstr "" + +#: adjfeedback/models.py +msgid "question" +msgstr "câu hỏi" + +#: adjfeedback/models.py +msgid "feedback" +msgstr "phản hồi" + +#: adjfeedback/models.py +msgid "answer" +msgstr "trả lời" + +#: adjfeedback/models.py +msgid "adjudicator feedback boolean answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback boolean answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback integer answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback integer answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback float answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback float answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback string answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback string answers" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answer" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback multiple select answers" +msgstr "" + +#: adjfeedback/models.py +msgid "checkbox" +msgstr "" + +#: adjfeedback/models.py +msgid "yes/no (dropdown)" +msgstr "" + +#: adjfeedback/models.py +msgid "integer (textbox)" +msgstr "" + +#: adjfeedback/models.py +msgid "integer scale" +msgstr "" + +#: adjfeedback/models.py +msgid "float" +msgstr "" + +#: adjfeedback/models.py +msgid "text" +msgstr "" + +#: adjfeedback/models.py +msgid "long text" +msgstr "" + +#: adjfeedback/models.py +msgid "select one" +msgstr "" + +#: adjfeedback/models.py +msgid "select multiple" +msgstr "" + +#: adjfeedback/models.py +msgid "tournament" +msgstr "" + +#: adjfeedback/models.py +msgid "sequence number" +msgstr "" + +#: adjfeedback/models.py +msgid "The question displayed to participants, e.g., \"Did you agree with the decision?\"" +msgstr "" + +#: adjfeedback/models.py +msgid "name" +msgstr "" + +#: adjfeedback/models.py +msgid "A short name for the question, e.g., \"Agree with decision\"" +msgstr "" + +#: adjfeedback/models.py +msgid "reference" +msgstr "" + +#: adjfeedback/models.py +msgid "Code-compatible reference, e.g., \"agree_with_decision\"" +msgstr "" + +#: adjfeedback/models.py +msgid "from adjudicator" +msgstr "từ giám khảo" + +#: adjfeedback/models.py +msgid "Adjudicators should be asked this question (about other adjudicators)" +msgstr "" + +#: adjfeedback/models.py +msgid "from team" +msgstr "" + +#: adjfeedback/models.py +msgid "Teams should be asked this question" +msgstr "" + +#: adjfeedback/models.py +msgid "answer type" +msgstr "" + +#: adjfeedback/models.py +msgid "required" +msgstr "" + +#: adjfeedback/models.py +msgid "Whether participants are required to fill out this field" +msgstr "" + +#: adjfeedback/models.py +msgid "minimum value" +msgstr "" + +#: adjfeedback/models.py +msgid "Minimum allowed value for numeric fields (ignored for text or boolean fields)" +msgstr "" + +#: adjfeedback/models.py +msgid "maximum value" +msgstr "" + +#: adjfeedback/models.py +msgid "Maximum allowed value for numeric fields (ignored for text or boolean fields)" +msgstr "" + +#: adjfeedback/models.py +msgid "choices" +msgstr "" + +#: adjfeedback/models.py +msgid "Permissible choices for select one/multiple fields (ignored for other fields)" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback question" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback questions" +msgstr "" + +#: adjfeedback/models.py adjfeedback/views.py +msgid "ignored" +msgstr "bỏ qua" + +#: adjfeedback/models.py +msgid "Whether the feedback should affect the adjudicator's score" +msgstr "" + +#: adjfeedback/models.py +msgid "adjudicator feedback" +msgstr "phản hồi của giám khảo" + +#: adjfeedback/models.py +msgid "adjudicator feedbacks" +msgstr "các phản hồi của giám khảo" + +#: adjfeedback/models.py +msgid "Either the source adjudicator or source team wasn't specified." +msgstr "" + +#: adjfeedback/models.py +msgid "There was both a source adjudicator and a source team." +msgstr "" + +#: adjfeedback/models.py +msgid "There is no adjudicator specified as the target for this feedback. Perhaps they were deleted?" +msgstr "" + +#: adjfeedback/models.py +msgid "Adjudicator did not see this debate." +msgstr "" + +#: adjfeedback/tables.py +msgid "Whether the adj is marked as breaking (click to mark)" +msgstr "" + +#: adjfeedback/tables.py +msgid "N/A" +msgstr "Không xác định" + +#: adjfeedback/tables.py +msgid "Current weighted score" +msgstr "" + +#: adjfeedback/tables.py +msgid "This adjudicator's current rating." +msgstr "" + +#: adjfeedback/tables.py +msgid "Base score result" +msgstr "" + +#: adjfeedback/tables.py +msgid "Click to edit base score" +msgstr "" + +#: adjfeedback/tables.py +msgid "Assigned base score" +msgstr "" + +#: adjfeedback/tables.py +msgid "The current difference between an adjudicator's base score and current score" +msgstr "" + +#: adjfeedback/tables.py +msgid "The difference between this adjudicator's base score and current score" +msgstr "" + +#: adjfeedback/tables.py +msgid "The standard deviation of this adjudicator's current scores; with larger numbers meaning less consistent feedback scores." +msgstr "" + +#: adjfeedback/tables.py +msgid "The standard deviation of this adjudicator's current scores" +msgstr "" + +#: adjfeedback/tables.py +msgid "Feedback Per Round" +msgstr "" + +#: adjfeedback/tables.py +msgid "Hover over the data points to show the average score received in that round" +msgstr "" + +#: adjfeedback/tables.py +#, python-format +msgid "View %(count)s
    feedback" +msgid_plural "View %(count)s
    feedbacks" +msgstr[0] "" + +#: adjfeedback/tables.py +msgid "Unsubmitted feedback ballots" +msgstr "" + +#: adjfeedback/tables.py +msgid "View Missing Feedback" +msgstr "" + +#: adjfeedback/templates/add_feedback.html +msgid "Who is the feedback from?" +msgstr "" + +#: adjfeedback/templates/add_feedback.html +#: adjfeedback/templates/enter_feedback.html +msgid "Enter Feedback" +msgstr "Nhập phản hồi" + +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/public_add_feedback.html +#, python-format +msgid "Add Feedback from %(name)s" +msgstr "Thêm phản hồi từ %(name)s" + +#: adjfeedback/templates/enter_feedback.html +#: adjfeedback/templates/feedback_base.html +msgid "Add Feedback" +msgstr "Thêm phản hồi" + +#: adjfeedback/templates/enter_feedback.html +msgid "There are no feedback options because no rounds have been released to the public yet. Check back when they have!" +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "This tournament expects you to submit feedback only on the adjudicator who delivered the adjudication. Do not submit feedback on other adjudicators." +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "This tournament expects you to submit feedback on all of the adjudicators on the panel (including trainees)." +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "There are some problems with this feedback submission. Please review and correct them." +msgstr "" + +#: adjfeedback/templates/enter_feedback.html +msgid "When submitting this form your IP address will be stored for logging purposes." +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Overview" +msgstr "Tổng quan" + +#: adjfeedback/templates/feedback_base.html +msgid "Latest" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Unsubmitted" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Important" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Comments" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "By Source" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "By Target" +msgstr "" + +#: adjfeedback/templates/feedback_base.html +msgid "Bulk Update Scores" +msgstr "" + +#: adjfeedback/templates/feedback_by_source.html +#, python-format +msgid "Feedback %(source_type)s %(source_name)s" +msgstr "" + +#: adjfeedback/templates/feedback_by_source.html +#, python-format +msgid "%(source_name)s hasn't submitted any feedback yet." +msgstr "" + +#: adjfeedback/templates/feedback_by_source.html +#, python-format +msgid "%(source_name)s hasn't received any feedback yet." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "This is most likely because the team or adjudicator who submitted this feedback has submitted several times on the same person; or because a team has submitted feedback on multiple panellists (rather than just the orallist)." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Unconfirmed; will not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "The feedback is counted for the adjudicator, but is not taken into account when calculating scores." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Ignored; will not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "This feedback is submitted on an adjudicator but it looks like they have been since been removed from the debate. You should probably go to the Edit Database area and delete this feedback." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "The score given in this piece of feedback." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "%(round)s %(score)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "On %(adjudicator)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "Received as %(as_type)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "Base %(base)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "From %(source)s (their %(relationship)s)" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "From %(source)s (%(relationship)s from %(side)s)" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "From unknown" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +#, python-format +msgid "%(time)s" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Unconfirmed feedback is not counted as having been submitted and does not affect this adjudicator's score." +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Un-confirm" +msgstr "Hủy xác nhận" + +#: adjfeedback/templates/feedback_card.html +msgid "Confirm" +msgstr "Xác nhận" + +#: adjfeedback/templates/feedback_card.html +msgid "Ignored feedback is counted as having been submitted, but does not affect this adjudicator's score." +msgstr "Phản hồi bị bỏ qua được tính là đã nộp, nhưng không ảnh hưởng đến điểm của giám khảo." + +#: adjfeedback/templates/feedback_card.html +msgid "Un-ignore" +msgstr "" + +#: adjfeedback/templates/feedback_card.html +msgid "Ignore" +msgstr "Bỏ qua" + +#: adjfeedback/templates/feedback_cards_list.html +msgid "No feedback has been submitted yet" +msgstr "Không có phản hồi nào đã được nộp" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "%(c_breaking)s marked as breaking" +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects only chairs to submit feedback (on their panellists and trainees)." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects both chairs and panellists to submit feedback on each other, and also chairs to submit feedback on trainees." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects both panellists and trainees to submit feedback on chairs, and chairs to submit feedback on every other member of the panel (including trainees)." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "The current feedback configuration allows and expects all adjudicators (including trainees) to submit feedback on every other member of the panel (including trainees)." +msgstr "" + +#: adjfeedback/templates/feedback_overview.html +#, python-format +msgid "There is %(nadjs_outside_range)s adjudicator with a score outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." +msgid_plural "There are %(nadjs_outside_range)s adjudicators with scores outside the permitted range of adjudicator scores, which is currently set as %(min_score)s to %(max_score)s. This can cause adjudicator auto-allocation to behave in unexpected ways. If you'd like to use a wider score range, you can configure this in feedback settings." +msgstr[0] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(count)s adjudicator currently has a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." +msgid_plural "%(count)s adjudicators currently have a score equal to or above %(min)s and below %(max)s. That is %(percent)s%% of the adjudicator pool." +msgstr[0] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "Score Distributions (range is %(min_score)s–%(max_score)s)" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "Base" +msgstr "Sàn" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "Feedback" +msgstr "Phản hồi" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "The proportion of an adjudicator's score determined by feedback vs the test is set on a per-round basis. Click this link and edit the 'Feedback weight' field to modify this ratio for %(round)s." +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "Score Ratio" +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "There is %(c_chairs)s debate per round, so there needs to be %(c_chairs)s chair." +msgid_plural "There are %(c_chairs)s debates per round, so there need to be %(c_chairs)s chairs." +msgstr[0] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "There is %(c_debates)s debate per round, but only %(c_chairs)s above the minimum voting score." +msgid_plural "There are %(c_debates)s debates per round, but only %(c_chairs)s above the minimum voting score." +msgstr[0] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(c_chairs)s chair" +msgid_plural "%(c_chairs)s chairs" +msgstr[0] "" + +#: adjfeedback/templates/overview_breakdowns.html +msgid "All adjudicators with a score high enough to vote, but who aren't allocated as chairs, are allocated as panellists by the auto-allocator." +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(c_panellists)s panellist" +msgid_plural "%(c_panellists)s panellists" +msgstr[0] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "Adjudicators are allocated as trainees by the auto-allocator if their score is less than the 'minimum voting score' (currently %(min_voting)s) set in this tournament's Draw Rules configuration." +msgstr "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "%(c_trainees)s trainee" +msgid_plural "%(c_trainees)s trainees" +msgstr[0] "" + +#: adjfeedback/templates/overview_breakdowns.html +#, python-format +msgid "Auto-Allocate Distributions (%(min_voting_score)s+ to vote)" +msgstr "" + +#: adjfeedback/templates/overview_modals.html +msgid "Change Base Score" +msgstr "" + +#: adjfeedback/templates/overview_modals.html +#, python-format +msgid "The score range for adjudicators is between %(pref.adj_min_score)s and %(pref.adj_max_score)s. Decimals are permitted. This can be configured in Feedback settings." +msgstr "" + +#: adjfeedback/templates/overview_modals.html +#, python-format +msgid "The minimum score require to be allocated as a panellist or chair (when using the auto-allocator) is %(min_voting_score)s. This can be configured in Draw settings." +msgstr "" + +#: adjfeedback/templates/overview_modals.html +msgid "Base score" +msgstr "" + +#: adjfeedback/templates/overview_modals.html +msgid "Save Base Score" +msgstr "" + +#: adjfeedback/templates/public_add_feedback.html +msgid "Who are you?" +msgstr "" + +#: adjfeedback/templates/public_add_feedback.html +msgid "click your name or your team on this list" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgctxt "page title" +msgid "Update Adjudicator Scores" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +#, python-format +msgid "There aren't any adjudicators in this tournament, so you can't update any scores. You might want to import some adjudicators first." +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "Paste a list of adjudicators' names and their new scores, in the format: adjudicator,score. For example:" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "The adjudicators' names must match their names in the tab system exactly." +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "There are some problems with the data on this form:" +msgstr "" + +#: adjfeedback/templates/update_adjudicator_scores.html +msgid "Submit" +msgstr "" + +#: adjfeedback/views.py +msgid "Feedback Overview" +msgstr "" + +#: adjfeedback/views.py +msgid "Find Feedback on Adjudicator" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "%(count)d feedback" +msgid_plural "%(count)d feedbacks" +msgstr[0] "" + +#: adjfeedback/views.py +msgid "Feedbacks" +msgstr "" + +#: adjfeedback/views.py +msgid "Find Feedback" +msgstr "" + +#: adjfeedback/views.py +msgid "From Teams" +msgstr "" + +#: adjfeedback/views.py +msgid "From Adjudicators" +msgstr "" + +#: adjfeedback/views.py +msgid "Latest Feedback" +msgstr "" + +#: adjfeedback/views.py +msgid "(30 most recent)" +msgstr "" + +#: adjfeedback/views.py +msgid "Only Comments" +msgstr "" + +#: adjfeedback/views.py +msgid "(250 most recent)" +msgstr "" + +#: adjfeedback/views.py +msgid "Important Feedback" +msgstr "" + +#: adjfeedback/views.py +msgid "(rating was much higher/lower than expected)" +msgstr "" + +#: adjfeedback/views.py +msgid "A Team" +msgstr "" + +#: adjfeedback/views.py +msgid "Team" +msgstr "Đội" + +#: adjfeedback/views.py +msgid "Institution" +msgstr "Tổ chức" + +#: adjfeedback/views.py +msgid "An Adjudicator" +msgstr "" + +#: adjfeedback/views.py +msgid "Adjudicator" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Feedback from %(source)s on %(target)s added." +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Thanks, %(source)s! Your feedback on %(target)s has been recorded." +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Whoops! I didn't recognise that adjudicator: %(adjudicator)s" +msgstr "" + +#: adjfeedback/views.py +msgid "Whoops! The value isn't a valid base score." +msgstr "" + +#: adjfeedback/views.py +msgid "Feedback Progress" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "%(nmissing)d missing feedback submission (%(fulfilled).1f%% returned)" +msgid_plural "%(nmissing)d missing feedback submissions (%(fulfilled).1f%% returned)" +msgstr[0] "" + +#: adjfeedback/views.py +#, python-format +msgid "Feedback for %(adjudicator)s from %(source)s is now %(result)s." +msgstr "" + +#: adjfeedback/views.py +msgid "confirmed" +msgstr "đã xác nhận" + +#: adjfeedback/views.py +msgid "un-confirmed" +msgstr "" + +#: adjfeedback/views.py +msgid "un-ignored" +msgstr "" + +#: adjfeedback/views.py +#, python-format +msgid "Updated base score for %(count)d adjudicator." +msgid_plural "Updated base scores for %(count)d adjudicators." +msgstr[0] "" + diff --git a/tabbycat/availability/locale/vi/LC_MESSAGES/django.po b/tabbycat/availability/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..6e1acdd6410 --- /dev/null +++ b/tabbycat/availability/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,375 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-25 04:12\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/availability/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 926\n" + +#: availability/apps.py availability/views.py +msgid "Availability" +msgstr "Tính khả dụng" + +#: availability/models.py +msgid "content type" +msgstr "" + +#: availability/models.py +msgid "object id" +msgstr "" + +#: availability/models.py +msgid "round" +msgstr "vòng" + +#: availability/models.py +msgid "round availability" +msgstr "" + +#: availability/models.py +msgid "round availabilities" +msgstr "" + +#: availability/templates/availability_index.html +msgid "Mark All Breaking Adjs as Available" +msgstr "" + +#: availability/templates/availability_index.html +msgid "Mark Everything as Available" +msgstr "Đánh dấu tất cả là khả dụng" + +#: availability/templates/availability_index.html +#, python-format +msgid "Copy Availability from %(prev_round)s" +msgstr "Sao chép tính khả dụng từ vòng %(prev_round)s" + +#: availability/templates/availability_index.html +msgid "View Draw" +msgstr "Hiển thị bảng đấu" + +#: availability/templates/availability_index.html +#, python-format +msgid "%(previous_unconfirmed)s debates from %(round)s do not have a completed ballot — this may lead to a draw that fails or is incorrect" +msgstr "" + +#: availability/templates/availability_index.html +msgid "Generate Draw" +msgstr "Tạo bảng đấu" + +#: availability/templates/availability_index.html +msgid "The draw cannot be generated until some teams have been marked as available." +msgstr "" + +#: availability/templates/availability_index.html +msgid "The draw cannot be generated until some adjudicators have been marked as available." +msgstr "Không thể tạo bảng đấu cho tới khi vài giám khảo được đánh dấu là khả dụng." + +#: availability/templates/availability_index.html +msgid "The draw cannot be generated until some rooms have been marked as available." +msgstr "Không thể tạo bảng đấu cho tới khi vài phòng được đánh dấu là khả dụng." + +#: availability/templates/availability_index.html +msgid "There aren't enough rooms marked as available for the number of debates — the draw may not generate properly." +msgstr "Không có đủ phòng khả dụng cho các trận tranh biện - có thể có lỗi trong việc tạo bảng đấu." + +#: availability/templates/availability_index.html +msgid "There aren't enough adjudicators marked as available for the number of debates — the draw may not generate properly." +msgstr "Không có đủ giám khảo khả dụng cho các trận tranh biện - có thể có lỗi trong việc tạo bảng đấu." + +#: availability/templates/availability_index.html +msgid "There is an uneven number of teams marked as available — the draw may not generate properly." +msgstr "Số đội khả dụng là số lẻ - có thể có lỗi trong việc tạo bảng đấu." + +#: availability/templates/availability_index.html +msgid "The number of teams marked as available is not a multiple of 4 — the draw may not generate properly." +msgstr "Số đội khả dụng không chia hết cho 4 - có thể có lỗi trong việc tạo bảng đấu." + +#: availability/templates/availability_index.html +#, python-format +msgid "One debate from %(prev_round)s does not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " +msgid_plural "%(previous_unconfirmed)s debates from %(prev_round)s do not have a completed ballot. This may lead to a draw that fails or is incorrect, depending on your draw rules. Enter results from %(prev_round)s. " +msgstr[0] "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is a page for %(round)s, but the previous round is still not marked as completed. Did you forget to mark %(prev_round)s as completed? " +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is an elimination round, but it doesn't have a break category. Elimination rounds must be associated with a break category. Please set this round's break category in the Edit Database area." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "This is an elimination round, but its draw type is %(draw_type)s. The draw type of all elimination rounds must be \"Elimination\". Please change this round's draw type in the Edit Database area." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "There don't appear to be any teams breaking in the %(break_category)s Break. Have you generated the break for the %(break_category)s Break yet?" +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "There's only one team breaking in the %(break_category)s Break. You can't generate an elimination round draw with only one team — you might like to review the break for the %(break_category)s Break." +msgstr "" + +#: availability/templates/availability_index.html +#, python-format +msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams will be in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration before creating the draw. In most tournaments, the first metric should be points or wins." +msgstr "" + +#: availability/templates/base_availability.html +msgid "Select All" +msgstr "Chọn tất cả" + +#: availability/templates/base_availability.html +msgid "Select None" +msgstr "Bỏ chọn tất cả" + +#: availability/templates/base_availability.html +msgid "Check-Ins" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Check In All Breaking" +msgstr "" + +#: availability/templates/base_availability.html +msgid "Copy from Previous" +msgstr "Sao chép từ phần trước" + +#: availability/templates/base_availability.html +msgid "Save Selected" +msgstr "Lưu mục đã chọn" + +#: availability/templates/checkin_progress.html +msgid "Teams" +msgstr "Đội" + +#: availability/templates/checkin_progress.html +msgid "Adjudicators" +msgstr "Giám khảo" + +#: availability/templates/checkin_progress.html +msgid "Rooms" +msgstr "Phòng" + +#: availability/templates/checkin_progress.html +msgid "Mark teams as available" +msgstr "Đánh dấu khả dụng cho các đội" + +#: availability/templates/checkin_progress.html +msgid "No need to set team availability" +msgstr "Không cần phải đánh dấu khả dụng cho các đội" + +#: availability/templates/checkin_progress.html +msgid "There is an uneven number of teams marked as available for this round." +msgstr "Số đội khả dụng trong vòng này là số lẻ." + +#: availability/templates/checkin_progress.html +msgid "The number of teams marked as available for this round is not a multiple of 4." +msgstr "Số đội khả dụng trong vòng này không chia hết cho 4." + +#: availability/templates/checkin_progress.html +msgid "Edit team availability" +msgstr "Chỉnh sửa tính khả dụng của các đội" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "One adjudicator does not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." +msgid_plural "%(count)s adjudicators do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." +msgstr[0] "" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s adjudicator who was not available last round, is available this round." +msgid_plural "%(count)s adjudicators who were not available last round, are available this round." +msgstr[0] "%(count)s giám khảo không khả dụng ở vòng trước khả dụng ở vòng này." + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s adjudicator, who was not available last round, is available this round: %(adjs_list)s" +msgid_plural "The following %(count)s adjudicators, who were not available last round, are available this round: %(adjs_list)s" +msgstr[0] "%(count)s giám khảo không khả dụng ở vòng trước khả dụng ở vòng này: %(adjs_list)s" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s adjudicator who was available last round, is not available this round." +msgid_plural "%(count)s adjudicators who were available last round, are not available this round." +msgstr[0] "%(count)s giám khảo khả dụng vòng trước không khả dụng ở vòng này." + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s adjudicator, who was available last round, is not available this round: %(adjs_list)s" +msgid_plural "The following %(count)s adjudicators, who were available last round, are not available this round: %(adjs_list)s" +msgstr[0] "%(count)s giám khảo khả dụng vòng trước không khả dụng ở vòng này: %(adjs_list)s" + +#: availability/templates/checkin_progress.html +msgid "Mark adjudicators as available" +msgstr "Đánh dấu khả dụng cho các giám khảo" + +#. Translators: required_count is a word for a number (e.g. "two", "three", etc.) +#: availability/templates/checkin_progress.html +#, python-format +msgid "There needs to be at least one adjudicator marked as available, given the number of debates." +msgid_plural "There need to be at least %(required_count)s adjudicators marked as available, given the number of debates." +msgstr[0] "" + +#: availability/templates/checkin_progress.html +msgid "Edit adjudicator availability" +msgstr "Chỉnh sửa tính khả dụng của giám khảo" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s room that was not available last round, is available this round." +msgid_plural "%(count)s rooms that were not available last round, are available this round." +msgstr[0] "%(count)s phòng không khả dụng vòng trước khả dụng ở vòng này." + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s room, which was not available last round, is available this round: %(rooms_list)s" +msgid_plural "The following %(count)s rooms, which were not available last round, are available this round: %(rooms_list)s" +msgstr[0] "%(count)s phòng không khả dụng vòng trước khả dụng ở vòng này: %(rooms_list)s" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "%(count)s room that was available last round, is not available this round." +msgid_plural "%(count)s rooms that were available last round, are not available this round." +msgstr[0] "%(count)s phòng không khả dụng vòng trước khả dụng ở vòng này." + +#: availability/templates/checkin_progress.html +#, python-format +msgid "The following %(count)s room, which was available last round, is not available this round: %(rooms_list)s" +msgid_plural "The following %(count)s rooms, which were available last round, are not available this round: %(rooms_list)s" +msgstr[0] "%(count)s phòng khả dụng vòng trước không khả dụng ở vòng này: %(rooms_list)s" + +#: availability/templates/checkin_progress.html +#, python-format +msgid "One room does not have an associated tournament. Set its 'Tournament' field in the Edit Database area if you want it to be marked as available." +msgid_plural "%(count)s rooms do not have an associated tournament. Set their 'Tournament' field in the Edit Database area if you want them to be marked as available." +msgstr[0] "" + +#: availability/templates/checkin_progress.html +msgid "Mark rooms as available" +msgstr "Đánh dấu phòng phòng là khả dụng" + +#. Translators: required_count is a word for a number (e.g. "two", "three", etc.) +#: availability/templates/checkin_progress.html +#, python-format +msgid "There needs to be at least one room marked as available, given the number of debates." +msgid_plural "There need to be at least %(required_count)s rooms marked as available, given the number of debates." +msgstr[0] "" + +#: availability/templates/checkin_progress.html +msgid "Edit room availability" +msgstr "Chỉnh sửa tính khả dụng của các phòng" + +#: availability/views.py +msgid "no teams are debating" +msgstr "không có đội nào đang tranh biện" + +#. Translators: nteams in this string can only be 0 or 1 +#: availability/views.py +#, python-format +msgid "%(nteams)d breaking team — no debates can happen" +msgid_plural "%(nteams)d breaking teams — no debates can happen" +msgstr[0] "" + +#. Translators: ndebating in this string is always at least 2 +#: availability/views.py +#, python-format +msgid "%(ndebating)d breaking team is debating this round" +msgid_plural "%(ndebating)d breaking teams are debating this round" +msgstr[0] "" + +#. Translators: This gets appended to the previous string (the one with +#. ndebating in it) if (and only if) nbypassing is greater than 0. +#. "It" refers to this round. +#: availability/views.py +#, python-format +msgid "; %(nbypassing)d team is bypassing it" +msgid_plural "; %(nbypassing)d teams are bypassing it" +msgstr[0] "" + +#. Translators: nadvancing in this string is always at least 2 +#: availability/views.py +#, python-format +msgid "%(nadvancing)s advancing team is debating this round" +msgid_plural "%(nadvancing)s advancing teams are debating this round" +msgstr[0] "" + +#: availability/views.py +msgid "Active Now" +msgstr "Đang hoạt động" + +#: availability/views.py +#, python-format +msgid "Active in %(prev_round)s" +msgstr "Hoạt động ở %(prev_round)s" + +#: availability/views.py +msgid "Checked-In" +msgstr "" + +#: availability/views.py +msgid "Team Availability" +msgstr "Tính khả dụng của đội" + +#: availability/views.py +msgid "Adjudicator Availability" +msgstr "Tính khả dụng của giám khảo" + +#: availability/views.py +msgid "Room Availability" +msgstr "Tính khả dụng của phòng" + +#: availability/views.py +msgid "Room" +msgstr "Phòng" + +#: availability/views.py +msgid "Display Name (for the draw)" +msgstr "Hiển thị tên (cho bảng đấu)" + +#: availability/views.py +msgid "Categories" +msgstr "Bảng" + +#: availability/views.py +msgid "Priority" +msgstr "Ưu tiên" + +#: availability/views.py +msgid "Failed to update some or all availabilities due to an integrityerror. You should retry this action or make individual updates." +msgstr "" + +#: availability/views.py +msgid "Checked in all teams, adjudicators and rooms." +msgstr "" + +#: availability/views.py +msgid "Checked in all breaking adjudicators." +msgstr "" + +#: availability/views.py +msgid "Checked in all teams, adjudicators and rooms from previous round." +msgstr "" + diff --git a/tabbycat/breakqual/locale/vi/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..2d2831b40a1 --- /dev/null +++ b/tabbycat/breakqual/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,523 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-02-12 06:12\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 928\n" + +#: breakqual/apps.py +msgid "Break Qualification" +msgstr "" + +#: breakqual/base.py +#, python-format +msgid "The %(rule)s break qualification rule is missing the following required metric in the team standings precedence: %(missing)s" +msgid_plural "The %(rule)s break qualification rule is missing the following required metrics in the team standings precedence: %(missing)s" +msgstr[0] "" + +#: breakqual/models.py +msgid "tournament" +msgstr "" + +#: breakqual/models.py +msgid "name" +msgstr "" + +#: breakqual/models.py +msgid "Name to be displayed, e.g., \"ESL\"" +msgstr "" + +#: breakqual/models.py +msgid "slug" +msgstr "" + +#: breakqual/models.py +msgid "Slug for URLs, e.g., \"esl\"" +msgstr "" + +#: breakqual/models.py +msgid "sequence number" +msgstr "" + +#: breakqual/models.py +msgid "The order in which the categories are displayed" +msgstr "" + +#: breakqual/models.py +msgid "break size" +msgstr "" + +#: breakqual/models.py +msgid "Number of breaking teams in this category" +msgstr "" + +#: breakqual/models.py +msgid "is general" +msgstr "" + +#: breakqual/models.py +msgid "True if most teams eligible for this category, e.g. Open, False otherwise" +msgstr "" + +#: breakqual/models.py +msgid "priority" +msgstr "" + +#: breakqual/models.py +msgid "If a team breaks in multiple categories, higher priority numbers take precedence; teams can break into multiple categories if and only if they all have the same priority" +msgstr "" + +#: breakqual/models.py +msgid "limit" +msgstr "" + +#: breakqual/models.py +msgid "At most this many teams will be shown on the public tab for this category, or use 0 for no limit" +msgstr "" + +#: breakqual/models.py +msgid "Standard" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 1996" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 2016 (Easters)" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 2016 (Australs)" +msgstr "" + +#: breakqual/models.py +msgid "AIDA 2019 (Australs, Dynamic Cap)" +msgstr "" + +#: breakqual/models.py +msgid "rule" +msgstr "" + +#: breakqual/models.py +msgid "Rule for how the break is calculated (most tournaments should use \"Standard\")" +msgstr "" + +#: breakqual/models.py +msgid "breaking teams" +msgstr "" + +#: breakqual/models.py +msgid "break category" +msgstr "" + +#: breakqual/models.py +msgid "break categories" +msgstr "" + +#: breakqual/models.py +msgid "team" +msgstr "đội" + +#: breakqual/models.py +msgid "rank" +msgstr "" + +#: breakqual/models.py +msgid "break rank" +msgstr "" + +#: breakqual/models.py +msgid "Capped" +msgstr "" + +#: breakqual/models.py +msgid "Ineligible" +msgstr "" + +#: breakqual/models.py +msgid "Different break" +msgstr "" + +#: breakqual/models.py +msgid "Disqualified" +msgstr "" + +#: breakqual/models.py +msgid "Lost coin toss" +msgstr "" + +#: breakqual/models.py +msgid "Withdrawn" +msgstr "" + +#: breakqual/models.py +msgid "remark" +msgstr "" + +#: breakqual/models.py +msgid "Used to explain why an otherwise-qualified team didn't break" +msgstr "" + +#: breakqual/models.py +msgid "breaking team" +msgstr "" + +#: breakqual/templates/break_categories_edit.html +#: breakqual/templates/breaking_index.html +msgid "Break Categories" +msgstr "" + +#: breakqual/templates/break_categories_edit.html +#, python-format +msgid "Break categories allow category-specific break rounds, e.g., for novice or ESL categories. On this page, you can define what break categories exist. After you've defined the categories, the break rounds will be automatically generated, and you can set team eligibility on the Eligibility page." +msgstr "" + +#: breakqual/templates/break_categories_edit.html +#, python-format +msgid "If you want to delete break categories, use the Edit Database area." +msgstr "" + +#: breakqual/templates/break_categories_edit.html +msgid "Save Break Categories" +msgstr "" + +#: breakqual/templates/breaking_adjs.html +#, python-format +msgid "Adjudicators can be marked as breaking in the Feedback Overview section." +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Breaks" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "This tournament does not have any break categories set up. You can read about how to create breaks at our documentation. " +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Team Eligibility" +msgstr "" + +#: breakqual/templates/breaking_index.html +#: breakqual/templates/breaking_teams.html +#: breakqual/templates/breakqual_subnav.html +#: breakqual/templates/public_break_index.html breakqual/views.py +#, python-format +msgid "%(category)s Break" +msgstr "" + +#: breakqual/templates/breaking_index.html +#, python-format +msgid " %(size)s Spots " +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Teams Eligible" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Breaking" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Excluded" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Eligible" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Mark teams as eligible" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "Generate this break" +msgstr "" + +#: breakqual/templates/breaking_index.html +msgid "View this break" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "publicly visible" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "not publicly visible" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Delete and Regenerate All Breaks" +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Generate the Break for All Categories" +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "There are 0 teams marked as eligible for this category — you will need to add some eligible teams for this break to generate correctly." +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "This break uses the %(category)s rule — if you intended to use a different rule, you should edit the rule for this break category in the Edit Database area, then delete and regenerate all breaks. Please double-check this before announcing the break or releasing it to the public. The code that generates the break is not robustly tested for corner cases." +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "To edit the break use the remarks in the right-hand column. Any team with a remark will be excluded from this break (the break generator will sometimes insert its own remarks). Then, click the appropriate Save Remarks and Update button below. If you have complicated break rules (for example, if some teams are allowed to choose their preferred category) then you may have to update remarks a few times to get the correct break. As a last resort, you can edit the breaking teams list directly in the Edit Database area." +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "The public breaking teams configuration setting is enabled. As soon as you click the button, the breaking teams list will be visible on the public site, before you have a chance to double-check it! It is strongly recommended that you disable this setting on the tournament configuration page before generating the team breaks." +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "The break hasn't yet been generated. Would you like to generate the break for all categories? It's safe to generate the break before all preliminary rounds are complete, if you're curious — you can regenerate it later." +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Caution! The \"public breaking teams\" option is turned on, so the break is publicly visible. If you update the break(s), the changes will become visible immediately, without a chance for you to review them." +msgstr "" + +#: breakqual/templates/breaking_teams.html +msgid "Save Remarks and Update All Breaks" +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "Save Remarks and Update the %(category)s Break" +msgstr "" + +#: breakqual/templates/breaking_teams.html +#, python-format +msgid "There are %(count)s teams marked as eligible for this category. Would you like to add more eligible teams?" +msgstr "" + +#: breakqual/templates/breakqual_subnav.html +msgid "Overview" +msgstr "Tổng quan" + +#: breakqual/templates/breakqual_subnav.html +msgid "Adjudicators' Break" +msgstr "" + +#: breakqual/templates/edit_break_eligibility.html +#, python-format +msgid "It looks like there aren't any break categories are defined. If you'd like to create new break categories you'll need to first add them in the Edit Database area, then return to this page to set team's eligibility." +msgstr "" + +#: breakqual/templates/public_break_index.html breakqual/views.py +msgid "Break" +msgstr "" + +#: breakqual/templates/public_break_index.html +msgid "Adjudicators" +msgstr "Giám khảo" + +#. Translators: abbreviation for "grand final" +#: breakqual/utils.py +msgid "Grand Final" +msgstr "" + +#: breakqual/utils.py +msgid "GF" +msgstr "" + +#. Translators: abbreviation for "semifinals" +#: breakqual/utils.py +msgid "Semifinals" +msgstr "" + +#: breakqual/utils.py +msgid "SF" +msgstr "" + +#. Translators: abbreviation for "quarterfinals" +#: breakqual/utils.py +msgid "Quarterfinals" +msgstr "" + +#: breakqual/utils.py +msgid "QF" +msgstr "" + +#. Translators: abbreviation for "octofinals" +#: breakqual/utils.py +msgid "Octofinals" +msgstr "" + +#: breakqual/utils.py +msgid "OF" +msgstr "" + +#. Translators: abbreviation for "double-octofinals" +#: breakqual/utils.py +msgid "Double-Octofinals" +msgstr "" + +#: breakqual/utils.py +msgid "DOF" +msgstr "" + +#. Translators: abbreviation for "triple-octofinals" +#: breakqual/utils.py +msgid "Triple-Octofinals" +msgstr "" + +#: breakqual/utils.py +msgid "TOF" +msgstr "" + +#. Translators: abbreviation for "finals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Finals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sF" +msgstr "" + +#. Translators: abbreviation for "semifinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Semifinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sSF" +msgstr "" + +#. Translators: abbreviation for "quarterfinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Quarterfinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sQF" +msgstr "" + +#. Translators: abbreviation for "octofinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Octofinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sOF" +msgstr "" + +#. Translators: abbreviation for "double-octofinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Double-Octofinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sDOF" +msgstr "" + +#. Translators: abbreviation for "triple-octofinals" - first character of category name +#: breakqual/utils.py +#, python-format +msgid "%s Triple-Octofinals" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "%sTOF" +msgstr "" + +#. Translators: "UBR" stands for "unknown break round" (used as a fallback when we don't know what it's called) +#: breakqual/utils.py +#, python-format +msgid "Unknown %s break round" +msgstr "" + +#: breakqual/utils.py +#, python-format +msgid "U%sBR" +msgstr "" + +#: breakqual/utils.py +msgid "Unknown break round" +msgstr "" + +#: breakqual/utils.py +msgid "UBR" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "There was an error generating the break for category %(category)s: %(message)s" +msgstr "" + +#: breakqual/views.py +msgid "Eligible for" +msgstr "" + +#: breakqual/views.py +msgid "Edit Remark" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Changes to breaking team remarks saved and teams break updated for the following break categories: %(categories)s." +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Changes to breaking team remarks saved and teams break updated for break category %(category)s." +msgstr "" + +#: breakqual/views.py +msgid "Changes to breaking team remarks saved." +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Teams break generated for the following break categories: %(categories)s." +msgstr "" + +#: breakqual/views.py +msgid "Breaking Adjudicators" +msgstr "" + +#: breakqual/views.py +msgid "Break Eligibility" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "%s Speakers" +msgstr "" + +#: breakqual/views.py +#, python-format +msgid "Team has %(nspeakers)s speaker with the %(category)s speaker category assigned" +msgid_plural "Team has %(nspeakers)s speakers with the %(category)s speaker category assigned" +msgstr[0] "" + diff --git a/tabbycat/draw/locale/vi/LC_MESSAGES/django.po b/tabbycat/draw/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..a8ce81f8b4e --- /dev/null +++ b/tabbycat/draw/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,1094 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-03-25 13:46\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/draw/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 930\n" + +#: draw/admin.py +#, python-format +msgid "%(count)d debate was marked as having its sides confirmed." +msgid_plural "%(count)d debates were marked as having their sides confirmed." +msgstr[0] "" + +#: draw/admin.py +msgid "Mark sides as not confirmed" +msgstr "" + +#: draw/admin.py +#, python-format +msgid "%(count)d debate was marked as having its sides not confirmed." +msgid_plural "%(count)d debates were marked as having their sides not confirmed." +msgstr[0] "" + +#: draw/apps.py draw/views.py +msgid "Draw" +msgstr "Bảng đấu" + +#: draw/generator/__init__.py +msgid "Too many swaps" +msgstr "" + +#: draw/generator/__init__.py +msgid "One-up-one-down (history)" +msgstr "" + +#: draw/generator/__init__.py +msgid "One-up-one-down (institution)" +msgstr "" + +#: draw/generator/__init__.py +msgid "One-up-one-down (to accommodate)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble up (history)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble down (history)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble up (institution)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble down (institution)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble up (to accommodate)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Bubble down (to accommodate)" +msgstr "" + +#: draw/generator/__init__.py +msgid "Can't bubble up/down" +msgstr "" + +#: draw/generator/__init__.py +msgid "Pull-up team" +msgstr "" + +#: draw/generator/bpelimination.py draw/generator/elimination.py +#, python-format +msgid "%d debates in the previous round don't have a result." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "%d debates in the previous round don't have exactly two teams advancing." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "The room ranks of the partial elimination round indicate that an odd number of teams (%(nbypassing)d) bypassed it." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "The room ranks of the partial elimination round indicate that %(nbypassing)d teams bypassed it, but %(nadvancing)d teams advanced from it." +msgstr "" + +#: draw/generator/bpelimination.py +#, python-format +msgid "The number of debates (%d) in the last round is not a power of two." +msgstr "" + +#: draw/generator/bphungarian.py +#, python-format +msgid "The Rényi order can't be negative, and it's currently set to %(alpha)f." +msgstr "" + +#: draw/generator/common.py +#, python-format +msgid "The number of teams presented for the draw was not a multiple of %(num)d." +msgstr "" + +#: draw/generator/common.py +msgid "There were no teams for the draw." +msgstr "" + +#: draw/generator/elimination.py +#, python-format +msgid "There are only %d teams breaking in this category; there need to be at least two to generate an elimination round draw." +msgstr "" + +#: draw/generator/elimination.py +#, python-format +msgid "The number of teams (%d) in this round is not a power of two." +msgstr "" + +#: draw/generator/powerpair.py +#, python-format +msgid "%(noninteger)d out of %(total)d teams have a noninteger first metric in the team standings. Intermediate brackets require the first team standings metric to be an integer (typically points or wins)." +msgstr "" + +#: draw/generator/random.py +#, python-format +msgid "There were %(aff_count)d affirmative teams but %(neg_count)d negative teams." +msgstr "" + +#: draw/generator/random.py +msgid "One or more teams had an allocated side that wasn't affirmative or negative." +msgstr "" + +#: draw/manager.py +#, python-format +msgid "The draw type %(type)s can't be used with two-team formats." +msgstr "" + +#: draw/manager.py +#, python-format +msgid "The draw type %(type)s can't be used with British Parliamentary." +msgstr "" + +#: draw/manager.py +#, python-format +msgid "Unrecognised \"teams in debate\" option: %(option)s" +msgstr "" + +#: draw/manager.py +#, python-format +msgid "The break size (%(size)d) for this break category was invalid. It must be either six times or four times a power of two." +msgstr "" + +#: draw/models.py +msgid "none" +msgstr "" + +#: draw/models.py +msgid "postponed" +msgstr "" + +#: draw/models.py +msgid "draft" +msgstr "" + +#: draw/models.py +msgid "confirmed" +msgstr "đã xác nhận" + +#: draw/models.py +msgid "round" +msgstr "vòng" + +#: draw/models.py +msgid "room" +msgstr "phòng" + +#: draw/models.py +msgid "bracket" +msgstr "" + +#: draw/models.py +msgid "room rank" +msgstr "xếp hạng phòng" + +#: draw/models.py +msgid "importance" +msgstr "mức độ quan trọng" + +#: draw/models.py +msgid "result status" +msgstr "" + +#: draw/models.py +msgid "sides confirmed" +msgstr "" + +#: draw/models.py +msgid "If unchecked, the sides assigned to teams in this debate are just placeholders." +msgstr "" + +#: draw/models.py +msgid "debate" +msgstr "trận tranh biện" + +#: draw/models.py +msgid "debates" +msgstr "các trận tranh biện" + +#. Translators: This is appended to a list of teams, e.g. "Auckland +#. 1, Vic Wellington 1 (sides not confirmed)". Mind the leading +#. space. +#: draw/models.py +msgid " (sides not confirmed)" +msgstr "" + +#. Translators: This goes between teams in a debate, e.g. "Auckland 1 +#. vs Vic Wellington 1". Mind the leading and trailing spaces. +#: draw/models.py +msgid " vs " +msgstr " đối đầu với " + +#: draw/models.py +msgid "affirmative" +msgstr "" + +#: draw/models.py +msgid "negative" +msgstr "" + +#: draw/models.py +msgid "opening government" +msgstr "ủng hộ thượng viện" + +#: draw/models.py +msgid "opening opposition" +msgstr "phản đối thượng viện" + +#: draw/models.py +msgid "closing government" +msgstr "ủng hộ hạ viện" + +#: draw/models.py +msgid "closing opposition" +msgstr "phản đối hạ viện" + +#: draw/models.py +msgid "team" +msgstr "đội" + +#: draw/models.py +msgid "side" +msgstr "" + +#: draw/models.py +msgid "debate team" +msgstr "đội" + +#: draw/models.py +msgid "debate teams" +msgstr "các đội" + +#: draw/models.py +#, python-format +msgid "placed %(place)s" +msgstr "" + +#: draw/models.py +msgid "result unknown" +msgstr "" + +#: draw/models.py +msgid "won" +msgstr "thắng" + +#: draw/models.py +msgid "lost" +msgstr "thua" + +#: draw/models.py +msgid "team side allocation" +msgstr "" + +#: draw/models.py +msgid "team side allocations" +msgstr "" + +#. Translators: e.g. "Affirmative: Rank", "Government: Draw strength", +#. "Opening government: Total speaker score", "Closing opposition: Number of firsts" +#: draw/tables.py +#, python-format +msgid "%(side)s: %(metric)s" +msgstr "" + +#: draw/tables.py +#, python-format +msgid "Team %(num)d" +msgstr "Đội %(num)d" + +#: draw/tables.py +msgid "Room rank of this debate" +msgstr "Xếp hạng phòng của trận tranh biện này" + +#: draw/tables.py +msgid "Bracket of this debate" +msgstr "" + +#: draw/tables.py +msgid "side history
    \n" +"(number of times the team has been on each side before this round)" +msgstr "" + +#. Translators: Abbreviation for "side history" +#: draw/tables.py +msgid "SH" +msgstr "" + +#: draw/tables.py +msgid "Went from balanced to imbalanced" +msgstr "" + +#: draw/tables.py +msgid "Went from imbalanced to balanced" +msgstr "" + +#: draw/tables.py +msgid "Best improvement possible, still imbalanced" +msgstr "" + +#: draw/tables.py +msgid "Was imbalanced and still imbalanced" +msgstr "" + +#: draw/tables.py +msgid "No metrics in the team standings precedence" +msgstr "" + +#: draw/tables.py +msgid "Side" +msgstr "Phe" + +#: draw/tables.py +msgid "Position this round" +msgstr "Vị trí trong vòng này" + +#: draw/tables.py +msgid "Before" +msgstr "Trước" + +#: draw/tables.py +msgid "Side history before this round" +msgstr "" + +#: draw/tables.py +msgid "After" +msgstr "Sau" + +#: draw/tables.py +msgid "Side history after this round" +msgstr "" + +#: draw/tables.py +msgid "Cost" +msgstr "Chi phí" + +#: draw/tables.py +msgid "Position cost" +msgstr "" + +#: draw/tables.py +msgid "Status" +msgstr "Trạng thái" + +#: draw/tables.py +msgid "Teams with this many points are permitted in this debate
    \n" +"(bracket in bold)" +msgstr "" + +#: draw/tables.py +#, python-format +msgid "%(team)s: %(metric)s" +msgstr "" + +#: draw/tables.py +msgid "side history before this round" +msgstr "" + +#: draw/tables.py +msgid "Sides" +msgstr "" + +#: draw/tables.py +msgid "position cost" +msgstr "" + +#: draw/templates/admin/draw/debateteam/delete_warning.html +msgid "STOP!!! Read this first! Deleting debate teams from the database may crash Tabbycat!" +msgstr "CHÚ Ý: Xóa các đội trong trận tranh biện trong dữ liệu có thể khiến Tabbycat gặp sự cố." + +#: draw/templates/admin/draw/debateteam/delete_warning.html +msgid "Tabbycat requires that all debates have exactly one debate team for each side, and no other debate teams, at all times. If you delete any debate teams, you must then either replace each one with a new debate team in the same debate, or delete the associated debate objects. If you don't do this correctly, many pages will crash." +msgstr "" + +#: draw/templates/admin/draw/debateteam/delete_warning.html +#: draw/templates/admin/draw/debateteam/edit_warning.html +msgid "This is a common source of errors. If it happens to you, check the debates (under the Draw section in this Edit Database area) and ensure that all of them have exactly one affirmative and one negative team." +msgstr "" + +#: draw/templates/admin/draw/debateteam/edit_warning.html +msgid "WARNING!!! If you are editing debate teams, read this first!" +msgstr "CHÚ Ý: Nếu như bạn đang chỉnh sửa các đội, đọc" + +#: draw/templates/admin/draw/debateteam/edit_warning.html +msgid "Tabbycat requires that there be exactly one debate team for each side, and no other debate teams, in each debate. If you edit debate teams in the database, you must ensure that this remains the case. If you don't do this correctly, many pages will crash." +msgstr "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 debate does not have a chair." +msgid_plural "%(ndebates)s debates do not have a chair." +msgstr[0] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "%(adjudicators)s is adjudicating multiple debates." +msgid_plural "The following %(nadjs)s adjudicators are adjudicating multiple debates: %(adjudicators)s" +msgstr[0] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 debate has a panel with an even number of adjudicators." +msgid_plural "%(ndebates)s debates have panels with an even number of adjudicators." +msgstr[0] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 debate has an adjudicator conflict." +msgid_plural "%(ndebates)s debates have adjudicator conflicts." +msgstr[0] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "%(adjudicators)s is unavailable this round, but is assigned to a debate." +msgid_plural "The following %(nadjs)s adjudicators are unavailable this round, but are assigned to debates: %(adjudicators)s" +msgstr[0] "" + +#: draw/templates/draw_alerts_adjudicators.html +#, python-format +msgid "1 adjudicator is available but not assigned to a debate." +msgid_plural "%(ndebates)s adjudicators are available but not assigned to a debate." +msgstr[0] "" + +#: draw/templates/draw_alerts_teams.html +#, python-format +msgid "%(teams)s is competing in multiple debates." +msgid_plural "The following %(nteams)s teams are competing in multiple debates: %(teams)s" +msgstr[0] "" + +#: draw/templates/draw_alerts_venues.html +#, python-format +msgid "1 debate does not have a room." +msgid_plural "%(ndebates)s debates do not have a room." +msgstr[0] "Có %(ndebates)s trận tranh biện không có phòng." + +#: draw/templates/draw_alerts_venues.html +#, python-format +msgid "There are multiple debates in %(rooms)s." +msgid_plural "The following %(ndebates)s rooms have multiple debates in them: %(rooms)s" +msgstr[0] "" + +#: draw/templates/draw_alerts_venues.html +#, python-format +msgid "1 debate has a room constraint violation." +msgid_plural "%(ndebates)s debates have room constraint violations." +msgstr[0] "" + +#: draw/templates/draw_base.html +msgid "Availability" +msgstr "Tính khả dụng" + +#: draw/templates/draw_base.html draw/templates/draw_status_draft.html +msgid "Edit Sides/Matchups" +msgstr "" + +#: draw/templates/draw_base.html +msgid "Redo Draw" +msgstr "" + +#: draw/templates/draw_base.html +msgid "Draw Details" +msgstr "Chi tiết bảng đấu" + +#: draw/templates/draw_base.html +msgid "Position Balance" +msgstr "" + +#: draw/templates/draw_base.html draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draw" +msgstr "Hiện thị bảng đấu" + +#: draw/templates/draw_confirm_regeneration.html +msgid "Confirm draw regeneration" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#: draw/templates/draw_subpage.html +msgid "Back to Draw" +msgstr "Quay lại bảng đấu" + +#: draw/templates/draw_confirm_regeneration.html +#, python-format +msgid "Confirm Draw Deletion for %(round)s" +msgstr "Xác nhận xóa bảng đấu ở vòng %(round)s" + +#: draw/templates/draw_confirm_regeneration.html +#, python-format +msgid "Do you really want to regenerate the draw for %(round)s? This will delete all the debates in the current draw — including their ballots and adjudicator allocations — and cannot be undone. You probably don't want to do this if any results have been entered!" +msgstr "" + +#: draw/templates/draw_confirm_regeneration.html +#, python-format +msgid "Yes, I want to delete the current draw for %(round)s" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "View Draw" +msgstr "Xem bảng đấu" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "Debates start at %(start_time)s" +msgstr "Trận tranh biện bắt đầu từ %(start_time)s" + +#: draw/templates/draw_display_admin.html +msgid "Add Start Time" +msgstr "Thêm thời gian bắt đầu" + +#: draw/templates/draw_display_admin.html +msgid "Enter Results" +msgstr "Nhập kết quả" + +#: draw/templates/draw_display_admin.html +msgid "Motion Details" +msgstr "Chi tiết kiến nghị" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "%(motions_count)s motion has been entered." +msgid_plural "%(motions_count)s motions have been entered." +msgstr[0] "Có %(motions_count)s kiến nghị đã được nhập." + +#: draw/templates/draw_display_admin.html +msgid "Edit the motion" +msgid_plural "Edit motions" +msgstr[0] "" + +#: draw/templates/draw_display_admin.html +msgid "Your configuration/format requires motions to be specified as part of ballot entry. Make sure they are added before results come in!" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "A motion should be added if you want to display it during announcements, print it on your ballots, or to display it (later) on the public motions/statistics pages." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Enter a motion" +msgid_plural "Enter motions" +msgstr[0] "" + +#: draw/templates/draw_display_admin.html +msgid "Release Draw" +msgstr "Công bố bảng đấu" + +#: draw/templates/draw_display_admin.html +msgid "You have not generated a draw for this round yet. There is nothing to release." +msgstr "Bạn chưa tạo bảng đấu cho vòng này. Không có gì để công bố." + +#: draw/templates/draw_display_admin.html +msgid "The draw for this round is still in a draft state. Confirm the draw before releasing it." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Unrelease draw to public" +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "The draw has been released publicly." +msgstr "Bảng đấu đã được công khai." + +#: draw/templates/draw_display_admin.html +msgid "View public draw page" +msgstr "Xem bảng đấu công khai" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "You have released the draw, so ballots and/or feedback can be submitted from the public forms (if enabled). However, the draw itself will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." +msgstr "" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "You have released the draw, but it will not show to the public unless the \"public view of draw\" setting is enabled in this tournament's configuration." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Release draw to public" +msgstr "Công khai bảng đấu" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament allows ballots and feedback to be submitted online by adjudicators. The draw must be released before they can do so." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament allows ballots to be submitted online by adjudicators. The draw must be released before they can do so." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament allows feedback to be submitted online by participants. The draw must be released before they can do so." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the draw publicly. Releasing a draw will allow it to show it on the public page." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your configuration doesn't have a public draw page or feedback/ballot submissions. There's no reason to release the draw." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Release motion to public" +msgid_plural "Release motions to public" +msgstr[0] "" + +#: draw/templates/draw_display_admin.html +msgid "Unrelease motion to public" +msgid_plural "Unrelease motions to public" +msgstr[0] "" + +#: draw/templates/draw_display_admin.html +msgid "Release Motion" +msgid_plural "Release Motions" +msgstr[0] "" + +#: draw/templates/draw_display_admin.html +msgid "No motion is currently set for this round." +msgid_plural "No motions are currently set for this round." +msgstr[0] "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to require motions to be selected in ballots and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to be submitted." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to allow motions to be vetoed and to allow ballots to be submitted by adjudicators. Ensure that you release the motions before debates finish, otherwise ballots will not be able to nominate vetoes." +msgstr "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is configured to show the motion for each round on the public site. You'll need to first release the motion for it to show there." +msgid_plural "Your tournament is configured to show the motions for each round on the public site. You'll need to first release the motions for it to show there." +msgstr[0] "" + +#: draw/templates/draw_display_admin.html +msgid "Your tournament is not configured to show the motion for each round on the public site. There's no need to release the motion." +msgid_plural "Your tournament is not configured to show the motions for each round on the public site. There's no need to release the motions." +msgstr[0] "" + +#: draw/templates/draw_display_admin.html +msgid "The motion has been released publicly." +msgid_plural "Motions have been released publicly." +msgstr[0] "" + +#: draw/templates/draw_display_admin.html +msgid "View public motions page" +msgstr "Xem trang công khai kiến nghị" + +#: draw/templates/draw_display_admin.html +#, python-format +msgid "You have released the motions, but they will not show to the public unless the \"public view of motions\" setting is enabled in this tournament's configuration." +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "(for the briefing room)" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draw ordered by Room" +msgstr "Hiển thị bảng đấu xắp xếp theo phòng" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draw ordered by Team" +msgstr "Hiển thị bảng đấu xắp xếp theo đội" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draws for All Current Rounds ordered by Room" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Draws for All Current Rounds ordered by Team" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +#, python-format +msgid "Display Draw for %(round)s ordered by Room" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +#, python-format +msgid "Display Draw for %(round)s ordered by Team" +msgstr "" + +#: draw/templates/draw_display_admin.html +#: draw/templates/draw_display_assistant.html +msgid "Display Motions" +msgstr "Hiển thị các kiến nghị" + +#: draw/templates/draw_display_admin.html +msgid "Email Motions" +msgstr "Email các kiến nghị" + +#: draw/templates/draw_display_admin.html +msgid "Email Motion" +msgstr "Email kiến nghị" + +#: draw/templates/draw_display_admin.html +msgid "Start at" +msgstr "Bắt đầu từ" + +#: draw/templates/draw_display_assistant.html +msgid "(for printing)" +msgstr "(cho in ấn)" + +#: draw/templates/draw_display_assistant.html +msgid "View Ballot Forms" +msgstr "" + +#: draw/templates/draw_display_assistant.html +msgid "View Feedback Forms" +msgstr "" + +#: draw/templates/draw_display_by.html +msgid "Scroll Speed" +msgstr "Tốc độ cuộn" + +#: draw/templates/draw_display_by.html +msgid "Fast" +msgstr "Nhanh" + +#: draw/templates/draw_display_by.html +msgid "Medium" +msgstr "Vừa" + +#: draw/templates/draw_display_by.html +msgid "Slow" +msgstr "Chậm" + +#: draw/templates/draw_display_by.html +msgid "Extra Slow" +msgstr "Rất chậm" + +#: draw/templates/draw_display_by.html +msgid "Hide Adjudicators" +msgstr "Ẩn giám khảo" + +#: draw/templates/draw_display_by.html +msgid "Show Adjudicators" +msgstr "Hiện giám khảo" + +#: draw/templates/draw_display_by.html +msgid "Text Size" +msgstr "Cỡ chữ" + +#: draw/templates/draw_display_by.html +msgid "Tiny" +msgstr "Rất nhỏ" + +#: draw/templates/draw_display_by.html +msgid "Small" +msgstr "Nhỏ" + +#: draw/templates/draw_display_by.html +msgid "Large" +msgstr "Lớn" + +#: draw/templates/draw_display_by.html +msgid "Huge" +msgstr "Rất lớn" + +#: draw/templates/draw_display_by.html +msgid "Stop Scroll" +msgstr "Dừng cuộn" + +#: draw/templates/draw_not_released.html +#, python-format +msgid "The draw for %(round)s has yet to be released." +msgstr "Bảng đấu cho vòng %(round)s chưa được công bố." + +#: draw/templates/draw_not_released.html +msgid "The draw for the next round has yet to be released." +msgstr "Bảng đấu cho vòng sau chưa được công bố." + +#: draw/templates/draw_status_confirmed.html +msgid "Adjudicator Allocations" +msgstr "Phân bổ giám khảo" + +#: draw/templates/draw_status_confirmed.html +msgid "There are currently fewer adjudicators checked in than there are rooms." +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Allocate adjudicators" +msgstr "Phân bổ giám khảo" + +#: draw/templates/draw_status_confirmed.html +msgid "Edit adjudicator allocation" +msgstr "Chỉnh sửa phân bổ giám khảo" + +#: draw/templates/draw_status_confirmed.html +msgid "Room Allocations" +msgstr "Phân bổ phòng" + +#: draw/templates/draw_status_confirmed.html +msgid "Allocate rooms" +msgstr "Phân bổ phòng" + +#: draw/templates/draw_status_confirmed.html +msgid "Edit room allocation" +msgstr "Chỉnh sửa phân bổ phòng" + +#: draw/templates/draw_status_confirmed.html +msgid "Preformed Panels" +msgstr "Bàn giám khảo chỉ định" + +#: draw/templates/draw_status_confirmed.html +#, python-format +msgid "There is %(npanels)s preformed panel available for this round." +msgid_plural "There are %(npanels)s preformed panels available for this round." +msgstr[0] "" + +#: draw/templates/draw_status_confirmed.html +msgid "There are no preformed panels available for this round" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +#, python-format +msgid "Edit preformed panels for %(round)s" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +msgid "Side Allocations" +msgstr "" + +#: draw/templates/draw_status_confirmed.html +#, python-format +msgid "1 debate does not have its sides confirmed." +msgid_plural "%(ndebates)s debates do not have their sides confirmed." +msgstr[0] "" + +#: draw/templates/draw_status_draft.html +msgid "Delete Draw" +msgstr "Xóa bảng đấu" + +#: draw/templates/draw_status_draft.html +msgid "Confirm Draw" +msgstr "Xác nhận bảng đấu" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so all teams are in a single bracket containing everyone. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration, then delete and recreate the draw. In most tournaments, the first metric should be points or wins." +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "Brackets are formed using the first metric in the team standings precedence, which is currently set to %(metric)s, rather than team points, which is the more usual convention. If this isn't what you wanted, you can change the team standings precedence in the standings configuration page." +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "The draw type for this round is set to manual, so Tabbycat has just made a blank draw. Head on over to Edit Sides/Matchups to fill it in." +msgstr "" + +#: draw/templates/draw_status_draft.html +#, python-format +msgid "The adjudicator score range is 0, and so adjudicator scores will be ignored when allocating. You can change the adjudicator score range in the feedback configuration page." +msgstr "" + +#: draw/templates/draw_status_draft.html +msgid "Tabbycat assigns sides in elimination rounds randomly. However, because in elimination rounds, many tournaments draw lots for sides in front of an audience, the sides are marked as \"unconfirmed\", so that it doesn't look like sides have been pre-assigned. After you confirm the draw, you'll need to confirm sides on the \"Edit Sides/Matchups\" page, even if you wish to accept Tabbycat's random assignment." +msgstr "" + +#: draw/templates/draw_status_draft.html +msgid "Highlighted cells relate to changes in position balance, as follows:
    • Red cells indicates that the team could not be allocated a position that maintains position balance.
    • Yellow cells indicate that the team was previously imbalanced, and is given the best position possible in this draw, but is nonetheless still imbalanced.
    • Green cells indicate that the team's previous imbalance is resolved with this draw.
    " +msgstr "" + +#: draw/templates/draw_status_none.html +#, python-format +msgid "A draw for %(round)s hasn't yet been generated. To generate one, go to the Availability section." +msgstr "" + +#: draw/templates/position_balance.html +msgid "It looks like sides aren't confirmed for some debates in this round. This position balance report is generated using the \"unconfirmed sides\" in the database, and as a consequence, may not make much sense. It's best to confirm sides in all debates before looking at this report." +msgstr "" + +#: draw/templates/position_balance.html +#, python-format +msgid "Your current position cost function is %(cost_func)s, raised to an exponent of %(exponent)s. Read more about how position cost functions work in our documentation." +msgstr "" + +#: draw/templates/position_balance_break.html +msgid "Position balance reports aren't computed for elimination rounds." +msgstr "" + +#: draw/templates/position_balance_nonbp.html +msgid "Position balance reports are only available for British Parliamentary tournaments." +msgstr "" + +#: draw/templates/position_balance_round1.html +msgid "Position balance reports aren't computed for the first round of a tournament." +msgstr "" + +#: draw/views.py +msgid "No debates in this round" +msgstr "Không có trận tranh biện nào trong vòng này" + +#: draw/views.py +#, python-format +msgid "Draw for %(round)s" +msgstr "Bảng đấu cho vòng %(round)s" + +#: draw/views.py +msgid "Draws for Current Rounds" +msgstr "Bảng đấu cho các vòng hiện tại" + +#: draw/views.py +#, python-format +msgid "debates start at %(time)s (in %(time_zone)s)" +msgstr "trận tranh biện bắt đầu từ %(time)s (ở %(time_zone)s)" + +#: draw/views.py +#, python-format +msgid "start times in time zone: %(time_zone)s" +msgstr "" + +#: draw/views.py +#, python-format +msgid "debate starts at %(time)s" +msgid_plural "debates start at %(time)s" +msgstr[0] "trận tranh biện bắt đầu từ %(time)s" + +#: draw/views.py +msgid "The draw for this round hasn't been released." +msgstr "Bảng đấu cho vòng này chưa được công bố." + +#: draw/views.py +#, python-format +msgid "All Debates for All Rounds of %(tournament)s" +msgstr "" + +#: draw/views.py +msgid "Adjudicator Assignments" +msgstr "" + +#: draw/views.py +msgid "Position" +msgstr "Vị trí" + +#: draw/views.py +msgid "Team Pairings" +msgstr "" + +#: draw/views.py +msgid "No Draw" +msgstr "" + +#: draw/views.py +msgid "Draft Draw" +msgstr "" + +#. Translators: e.g. "Affirmative: Break rank" +#: draw/views.py +#, python-format +msgid "%(side)s: Break rank" +msgstr "" + +#. Translators: "BR" stands for "Break rank" +#: draw/views.py +msgid "BR" +msgstr "" + +#: draw/views.py +msgid "Draw with Details" +msgstr "" + +#: draw/views.py +msgid "Position Balance Report" +msgstr "" + +#: draw/views.py +#, python-format +msgid "Rényi entropy of order %(order)s" +msgstr "" + +#. Translators: This is appended to the string "Rényi entropy of order 1.0" +#: draw/views.py +msgid " (i.e., Shannon entropy)" +msgstr "" + +#: draw/views.py +msgid "Teams with position imbalances" +msgstr "" + +#: draw/views.py +msgid "No teams with position imbalances! Hooray!" +msgstr "" + +#: draw/views.py +msgid "Annotated draw" +msgstr "" + +#: draw/views.py +#, python-format +msgid "Could not create draw for %(round)s, there was already a draw!" +msgstr "Không thể tạo bảng đấu cho vòng %(round)s, đã có bảng đấu có sẵn!" + +#: draw/views.py +#, python-format +msgid "

    The draw could not be created, for the following reason: %(message)s

    \n" +"

    Please fix this issue before attempting to create the draw.

    " +msgstr "" + +#: draw/views.py +#, python-format +msgid "

    The draw could not be created, because the following error occurred: %(message)s

    \n" +"

    If this issue persists and you're not sure how to resolve it, please contact the developers.

    " +msgstr "" + +#: draw/views.py +#, python-format +msgid "

    The team standings could not be generated, because the following error occurred: %(message)s

    \n" +"

    Because generating the draw uses the current team standings, this prevents the draw from being generated.

    " +msgstr "" + +#: draw/views.py +msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." +msgstr "" + +#: draw/views.py +msgid "Deleted the draw. You can now recreate it as normal." +msgstr "" + +#: draw/views.py +msgid "Released the draw." +msgstr "Công bố bảng đấu." + +#: draw/views.py +msgid "Unreleased the draw." +msgstr "" + +#: draw/views.py +#, python-format +msgid "Sorry, \"%(input)s\" isn't a valid time. It must be in 24-hour format, with a colon, for example: \"13:57\"." +msgstr "" + +#: draw/views.py +msgid "Side Pre-Allocations" +msgstr "" + +#: draw/views.py +msgid "Edit Matchups" +msgstr "" + diff --git a/tabbycat/importer/locale/vi/LC_MESSAGES/django.po b/tabbycat/importer/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..64e0931d1dd --- /dev/null +++ b/tabbycat/importer/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,413 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 00:58\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/importer/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 932\n" + +#: importer/forms.py +#, python-format +msgid "line %(lineno)d: %(message)s" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "This line (for %(institution)s) didn't have a code" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "This line (for %(institution)s) had too many columns" +msgstr "" + +#: importer/forms.py +msgid "There were no institutions to import." +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d institution at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d institutions at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" + +#: importer/forms.py +msgid "There were no rooms to import." +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d room at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d rooms at a time. (You currently have %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" + +#: importer/forms.py +msgid "Speakers' names" +msgstr "" + +#: importer/forms.py +msgid "Speakers' email addresses" +msgstr "" + +#: importer/forms.py +msgid "Optional, useful to include if distributing private URLs, list in same order as speakers' names" +msgstr "" + +#: importer/forms.py +msgid "Name (excluding institution name)" +msgstr "" + +#: importer/forms.py +msgid "Prefix team name with institution name?" +msgstr "" + +#: importer/forms.py +msgid "Do not include institution name (check the \"Prefix team name with institution name?\" field instead)" +msgstr "" + +#: importer/forms.py +msgid "(Not applicable to unaffiliated teams)" +msgstr "" + +#: importer/forms.py +msgid "One speaker's name per line" +msgstr "" + +#: importer/forms.py +msgid "Can be separated by newlines, tabs or commas" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Speaker %d" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "speaker%d@example.edu" +msgstr "" + +#: importer/forms.py +msgid "There must be at least one speaker." +msgstr "" + +#: importer/forms.py +#, python-format +msgid "%(email)s is not a valid email address." +msgstr "" + +#: importer/forms.py +msgid "There are more email addresses than speakers." +msgstr "" + +#: importer/forms.py +msgid "Every team in a single tournament from the same institution must have a different name. Please correct the duplicate data." +msgstr "" + +#: importer/forms.py +msgid "Rating" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "This value must be between %(min)d and %(max)d." +msgstr "" + +#: importer/forms.py +msgid "Unaffiliated (no institution)" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "%(name)s (%(code)s)" +msgstr "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d team at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d teams at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" + +#: importer/forms.py +#, python-format +msgid "Sorry, you can only import up to %(max_allowed)d adjudicator at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgid_plural "Sorry, you can only import up to %(max_allowed)d adjudicators at a time. (These numbers currently add to %(given)d.) Try splitting your import into smaller chunks." +msgstr[0] "" + +#: importer/forms.py +msgid "XML" +msgstr "" + +#: importer/forms.py +msgid "The Debate XML archive to parse" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export Tournament Archive" +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Tournaments can be exported in an XML format for use outside Tabbycat." +msgstr "" + +#: importer/templates/archive_export_index.html +msgid "Export all data" +msgstr "" + +#: importer/templates/archive_importer.html +msgctxt "page title" +msgid "Import Tournament Archive" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "This form will create a tournament with the data provided as a Debate XML format." +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Import" +msgstr "" + +#: importer/templates/archive_importer.html +msgid "Go back to the site home page" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +msgctxt "page title" +msgid "Add Adjudicators" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html +#, python-format +msgid "(Step %(step)s of %(count)s)" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_venues_details.html +msgid "Previous Step" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#, python-format +msgid "As per this tournament's configuration, an adjudicator's rating must be between %(min)s and %(max)s. Providing email addresses is optional but can be useful if using private URLs for feedback or ballots." +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +#, python-format +msgid "Adjudicators for %(institution)s" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +msgid "Unaffiliated Adjudicators" +msgstr "" + +#: importer/templates/simple_import_adjudicators_details.html +msgid "Save All Adjudicators" +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +#, python-format +msgid "You need to add institutions before adding adjudicators." +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "Specify the number of new adjudicators to add per institution. In the next step you can specify their names and ratings." +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +msgid "You can add up to 198 adjudicators at a time. If you have more than 198 adjudicators, split them into chunks. (Please don't try to add more than 198 in one go; the system will crash, and you will lose data.)" +msgstr "" + +#: importer/templates/simple_import_adjudicators_numbers.html +#: importer/templates/simple_import_teams_numbers.html +msgctxt "button" +msgid "Next Step" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Simple Importer" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "There are several ways to import data into Tabbycat. Which one is best depends on the size of your tournament and your technical background. This simple importer is the easiest to use and works well for small- and medium-sized tournaments." +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Institutions" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Teams" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Adjudicators" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add Rooms" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Room Categories" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Room Constraints" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Adjudicator-Team Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Adjudicator-Adjudicator Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Adjudicator-Institution Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Team-Institution Conflicts" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Break Categories" +msgstr "" + +#: importer/templates/simple_import_index.html +msgid "Add/Edit Speaker Categories" +msgstr "" + +#: importer/templates/simple_import_institutions_details.html +#: importer/templates/simple_import_institutions_raw.html +msgctxt "page title" +msgid "Add Institutions" +msgstr "" + +#: importer/templates/simple_import_institutions_details.html +msgid "Save All Institutions" +msgstr "" + +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html +msgid "There are some problems with the data on this form:" +msgstr "" + +#: importer/templates/simple_import_institutions_raw.html +#: importer/templates/simple_import_venues_raw.html +msgid "Next Step" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +#: importer/templates/simple_import_teams_numbers.html +msgctxt "page title" +msgid "Add Teams" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +#, python-format +msgid "Teams for %(institution)s" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +msgid "Unaffiliated Teams" +msgstr "" + +#: importer/templates/simple_import_teams_details.html +msgid "Save All Teams" +msgstr "" + +#: importer/templates/simple_import_teams_numbers.html +#, python-format +msgid "You need to add institutions before adding teams." +msgstr "" + +#: importer/templates/simple_import_teams_numbers.html +msgid "Specify the number of new teams to add per institution. In the next step you can specify team and speaker names." +msgstr "" + +#: importer/templates/simple_import_teams_numbers.html +msgid "You can add up to 141 teams at a time. If you have more than 141 teams, split them into chunks. (Please don't try to add more than 141 in one go; the system will crash, and you will lose data.)" +msgstr "" + +#: importer/templates/simple_import_venues_details.html +#: importer/templates/simple_import_venues_raw.html +msgctxt "page title" +msgid "Add Rooms" +msgstr "" + +#: importer/templates/simple_import_venues_details.html +msgid "Priorities indicate how much you want to use the room. Larger numbers indicate higher priority. If you have more rooms than debates, the rooms with the lowest priorities will not be used." +msgstr "" + +#: importer/templates/simple_import_venues_details.html +msgid "Save All Rooms" +msgstr "" + +#: importer/templates/simple_import_venues_raw.html +msgid "Paste a list of rooms with one room per line and following the format of: name,priority. For example:" +msgstr "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d institution." +msgid_plural "Added %(count)d institutions." +msgstr[0] "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d room." +msgid_plural "Added %(count)d rooms." +msgstr[0] "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d team." +msgid_plural "Added %(count)d teams." +msgstr[0] "" + +#: importer/views.py +#, python-format +msgid "Adjudicator %(number)d" +msgstr "" + +#: importer/views.py +#, python-format +msgid "Added %(count)d adjudicator." +msgid_plural "Added %(count)d adjudicators." +msgstr[0] "" + +#: importer/views.py +msgid "

    There were one or more errors creating the demo tournament. Before retrying, please delete the existing demo tournament and the institutions in the Edit Database Area.

    Technical information: The errors are as follows:

    " +msgstr "" + +#: importer/views.py +msgid "Created new demo tournament. You can now configure it below." +msgstr "" + +#: importer/views.py +msgid "Tournament archive has been imported." +msgstr "" + diff --git a/tabbycat/locale/vi/LC_MESSAGES/django.po b/tabbycat/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..4be760a206d --- /dev/null +++ b/tabbycat/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,956 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-25 13:45\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 934\n" + +#: api/apps.py +msgid "Application Programming Interface" +msgstr "" + +#: checkins/admin.py +msgid "Type" +msgstr "" + +#: checkins/admin.py +msgid "Checkin time" +msgstr "" + +#: checkins/apps.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html templates/nav/public_nav.html +msgid "Check-Ins" +msgstr "" + +#: checkins/consumers.py +msgid "Sent checkin identifier doesn't exist" +msgstr "" + +#: checkins/consumers.py +msgid "Checkins" +msgstr "" + +#: checkins/consumers.py +msgid "No checkin identifiers exist for sent barcodes" +msgstr "" + +#: checkins/models.py +msgid "The barcode must contain exactly six digits." +msgstr "" + +#: checkins/models.py +msgid "barcode" +msgstr "" + +#: checkins/models.py +msgid "" +msgstr "" + +#: checkins/models.py +#, python-format +msgid "%(classname)s %(barcode)s" +msgstr "" + +#: checkins/models.py +msgid "person" +msgstr "" + +#: checkins/models.py +msgid "person identifier" +msgstr "" + +#: checkins/models.py +msgid "person identifiers" +msgstr "" + +#: checkins/models.py +msgid "debate" +msgstr "trận tranh biện" + +#: checkins/models.py +msgid "debate identifier" +msgstr "" + +#: checkins/models.py +msgid "debate identifiers" +msgstr "" + +#: checkins/models.py +msgid "room identifier" +msgstr "" + +#: checkins/models.py +msgid "room identifiers" +msgstr "" + +#: checkins/models.py +msgid "identifier" +msgstr "" + +#: checkins/models.py +msgid "check-in time" +msgstr "" + +#: checkins/models.py +msgid "tournament" +msgstr "" + +#: checkins/models.py +msgid "check-in event" +msgstr "" + +#: checkins/models.py +msgid "check-in events" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "With identifiers" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "View as barcodes" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "Generate missing identifiers" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "Generate all identifiers" +msgstr "" + +#: checkins/templates/checkin_ids.html +msgid "There are no identifiers available to view. An admin will need to generate them." +msgstr "" + +#: checkins/templates/checkin_printables.html +msgid "Each of the barcodes below is also an image file that can be downloaded individually. If you want to download them all at once try using a 'bulk downloader' extension/plugin for your browser, such as this one (for Chrome). To download them as a list you can go to Check-Ins section of the Edit Database area and copy/paste from the relevant table." +msgstr "" + +#: checkins/templates/checkin_printables.html +msgid "You can use Ctrl+P for printing or saving the barcodes PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." +msgstr "" + +#: checkins/templates/checkin_scan.html +msgid "To scan an identifier type the number below (it will auto-submit). You can also use a barcode scanner (configured to work as a keyboard) or scan from a webcam or phone camera using the button below." +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "Not checked in (barcode %(barcode)s)" +msgstr "" + +#: checkins/utils.py +msgid "Not checked in; no barcode assigned" +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "checked in at %(time)s" +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "%(speaker)s checked in at %(time)s." +msgstr "" + +#: checkins/utils.py +#, python-format +msgid "%(speaker)s is missing." +msgstr "" + +#: checkins/views.py templates/nav/admin_nav.html +#: templates/nav/assistant_nav.html +msgid "Scan Identifiers" +msgstr "" + +#: checkins/views.py +msgid "People's Check-In Statuses" +msgstr "" + +#: checkins/views.py +msgid "Rooms' Check-In Statuses" +msgstr "" + +#: checkins/views.py templates/nav/admin_nav.html +msgid "Make Identifiers" +msgstr "" + +#: checkins/views.py templates/nav/admin_nav.html +msgid "Speakers" +msgstr "Tranh biện viên" + +#: checkins/views.py templates/nav/public_nav.html +msgid "Adjudicators" +msgstr "Giám khảo" + +#: checkins/views.py +msgid "Rooms" +msgstr "Phòng" + +#: checkins/views.py +#, python-format +msgid "Generated identifiers for %s" +msgstr "" + +#: checkins/views.py +msgid "Identifiers" +msgstr "" + +#: checkins/views.py +msgid "Could not check you in as you do not have an identifying code — your tab director may need to make you an identifier." +msgstr "" + +#: checkins/views.py +msgid "You have revoked your check-in." +msgstr "" + +#: checkins/views.py +msgid "Whoops! Looks like your check-in was already revoked." +msgstr "" + +#: checkins/views.py +msgid "Whoops! Looks like you're already checked in." +msgstr "" + +#: checkins/views.py +msgid "You are now checked in." +msgstr "" + +#: settings/core.py +msgid "Arabic" +msgstr "" + +#: settings/core.py +msgid "Bengali" +msgstr "" + +#: settings/core.py +msgid "English" +msgstr "" + +#: settings/core.py +msgid "Spanish" +msgstr "" + +#: settings/core.py +msgid "French" +msgstr "" + +#: settings/core.py +msgid "Indonesian" +msgstr "" + +#: settings/core.py +msgid "Japanese" +msgstr "" + +#: settings/core.py +msgid "Malay" +msgstr "" + +#: settings/core.py +msgid "Portuguese" +msgstr "" + +#: settings/core.py +msgid "Russian" +msgstr "" + +#: settings/core.py +msgid "Simplified Chinese" +msgstr "" + +#: settings/core.py +msgid "Translation" +msgstr "" + +#: templates/admin/delete_protected_message.html +msgid "You need to delete the above objects first." +msgstr "" + +#: templates/admin/style_guide.html +msgid "This style of info card announces critical information. Link." +msgstr "" + +#: templates/admin/style_guide.html +msgid "This style of info card announces general information." +msgstr "" + +#: templates/admin/style_guide.html +msgctxt "page title" +msgid "Form Title" +msgstr "" + +#: templates/admin/style_guide.html +msgid "Sub Title Title" +msgstr "" + +#: templates/admin/style_guide.html templates/registration/login.html +msgctxt "button" +msgid "Log In" +msgstr "" + +#: templates/admin/style_guide.html templates/registration/login.html +msgctxt "button" +msgid "I forgot my password" +msgstr "" + +#: templates/base.html +msgid "Tabbycat" +msgstr "" + +#: templates/base.html +#, python-format +msgid "The tab for %(tournament)s runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" +msgstr "" + +#: templates/base.html +msgid "This tab runs on Tabbycat, a source-available tab system for a variety of parliamentary debating formats" +msgstr "" + +#: templates/components/form-errors.html +msgid "Whoops! There was an error with one or more fields." +msgstr "" + +#: templates/components/formset.html +msgid "Save and Add More" +msgstr "" + +#: templates/errors/assistant_403.html templates/errors/public_403.html +msgid "Permission Denied (403)" +msgstr "" + +#: templates/errors/assistant_403.html +#, python-format +msgid "This assistant page isn't enabled for this tournament. Back to the assistant home page." +msgstr "" + +#: templates/errors/database_limit_warning.html +#, python-format +msgid "You're currently using %(nrows)s row in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." +msgid_plural "You're currently using %(nrows)s rows in your database. If you haven't already upgraded your Heroku database to a paid tier, it's limited to a maximum of 10,000 rows. As you're close to this limit, you should not create new tournaments on this site unless and until you've upgraded your database to a paid tier." +msgstr[0] "" + +#: templates/errors/legacy_sendgrid_warning.html +msgid "It looks like you're using the old SendGrid config vars on Heroku, SENDGRID_USERNAME and SENDGRID_PASSWORD. These are now deprecated (as of version 2.6), and will stop working in a future version of Tabbycat. Please change your config vars to use SENDGRID_API_KEY instead. For more information, please see our documentation on this topic." +msgstr "" + +#: templates/errors/public_403.html +#, python-format +msgid "Whoops! This page isn't enabled for this tournament. Back to the tournament home page." +msgstr "" + +#: templates/errors/public_403.html +#, python-format +msgid "Whoops! This page isn't enabled for this tournament. Back to the home page." +msgstr "" + +#: templates/footer.html +#, python-format +msgid "%(tournament)s runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" +msgstr "%(tournament)s đang chạy trên Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" + +#: templates/footer.html +#, python-format +msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" +msgstr "" + +#: templates/footer.html +msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." +msgstr "" + +#: templates/footer.html +#, python-format +msgid "For a tournament of this size, we suggest a donation of $%(amount)s." +msgstr "" + +#: templates/footer.html +msgid "Learn more about donating." +msgstr "Tìm hiểu về donate." + +#: templates/footer.html +msgid "Donations to Tabbycat from individuals or organisations are much appreciated." +msgstr "" + +#: templates/footer.html +msgid "Still timing debates with the stopwatch app?" +msgstr "" + +#: templates/footer.html +#, python-format +msgid "Using an app designed for debate timekeeping makes speaking and adjudicating easier! Check out Timekept (iPhone/iPad) or Debatekeeper (Android)." +msgstr "" + +#: templates/footer.html +msgid "Our Organisation" +msgstr "" + +#: templates/footer.html +msgid "Tabbycat is supported by the Tabbycat Debate Association, a non-profit for advancing open debate technology." +msgstr "" + +#: templates/footer.html +msgid "Language" +msgstr "Ngôn ngữ" + +#: templates/footer.html +msgid "GitHub" +msgstr "" + +#: templates/footer.html +msgid "Documentation" +msgstr "Tài liệu hướng dẫn" + +#: templates/footer.html +msgid "Support" +msgstr "Hỗ trợ" + +#: templates/footer.html +msgid "Facebook" +msgstr "" + +#: templates/footer.html +msgid "Set Up A Copy" +msgstr "" + +#: templates/footer.html +msgid "Change Language" +msgstr "Thay đổi ngôn ngữ" + +#: templates/footer.html +msgid "Use this language" +msgstr "Dùng ngôn ngữ" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Tabbycat Logo" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Site Home" +msgstr "Trang chủ" + +#: templates/nav/admin_nav.html +msgid "New Tournament" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Edit Database" +msgstr "Chỉnh sửa dữ liệu" + +#: templates/nav/admin_nav.html +msgid "Admin Area" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Assistant Area" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Public Area" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Overview" +msgstr "Tổng quan" + +#: templates/nav/admin_nav.html +msgid "Setup" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Configuration" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Import Data" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +#: templates/nav/public_nav.html +msgid "Participants" +msgstr "Người tham dự" + +#: templates/nav/admin_nav.html +msgid "Private URLs" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Emails" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Preformed Panels" +msgstr "Bàn giám khảo chỉ định" + +#: templates/nav/admin_nav.html +msgid "Export XML" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Sides" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/assistant_nav.html +msgid "People's Status" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Rooms' Status" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Feedback" +msgstr "Phản hồi" + +#: templates/nav/admin_nav.html +msgid "Latest" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Important" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Comments" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Find by Source" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Find by Target" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Unsubmitted" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Add Feedback" +msgstr "Thêm phản hồi" + +#: templates/nav/admin_nav.html +msgid "Bulk Update" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Standings" +msgstr "Xếp hạng" + +#: templates/nav/admin_nav.html +msgid "All Teams" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Teams" +msgstr "Đội" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +#, python-format +msgid "%(category)s Teams" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "All Speakers" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +#, python-format +msgid "%(category)s Speakers" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Replies" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Motions" +msgstr "Kiến nghị" + +#: templates/nav/admin_nav.html templates/nav/public_nav.html +msgid "Diversity" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Breaks" +msgstr "" + +#: templates/nav/admin_nav.html +#, python-format +msgid "%(category)s" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Adjudicators'" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Edit Categories" +msgstr "" + +#: templates/nav/admin_nav.html +msgid "Edit Eligibility" +msgstr "" + +#: templates/nav/admin_nav.html templates/nav/top_nav_base.html +msgid "Log Out" +msgstr "Đăng xuất" + +#: templates/nav/assistant_nav.html +msgid "Enter Results" +msgstr "Nhập kết quả" + +#: templates/nav/assistant_nav.html templates/nav/public_nav.html +msgid "Enter Feedback" +msgstr "Nhập phản hồi" + +#: templates/nav/assistant_nav.html +msgid "Participants List" +msgstr "" + +#: templates/nav/assistant_nav.html templates/nav/public_nav.html +msgid "Institutions" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Code Names" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "View Identifiers" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Room's Status" +msgstr "" + +#: templates/nav/assistant_nav.html +msgid "Display/Print Draw" +msgstr "Hiển thị/In bảng đấu" + +#: templates/nav/public_nav.html +msgid "Team Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Speaker Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Replies Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Adjudicator Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Motions Tab" +msgstr "" + +#: templates/nav/public_nav.html +msgid "By round" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Globally" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Draws" +msgstr "" + +#: templates/nav/public_nav.html +msgid "No Draws Available" +msgstr "" + +#: templates/nav/public_nav.html +#, python-format +msgid "Draw for %(round)s" +msgstr "Bảng đấu cho %(round)s" + +#: templates/nav/public_nav.html +msgid "Current Draws" +msgstr "" + +#: templates/nav/public_nav.html templates/nav/round_panel.html +msgid "Results" +msgstr "Kết quả" + +#: templates/nav/public_nav.html +msgid "Break" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Feedback Progress" +msgstr "" + +#: templates/nav/public_nav.html +msgid "Enter Ballot" +msgstr "" + +#: templates/nav/round_panel.html +msgid "Availability" +msgstr "Tính khả dụng" + +#: templates/nav/round_panel.html +msgid "Draw" +msgstr "Bảng đấu" + +#: templates/nav/round_panel.html +msgid "Display" +msgstr "" + +#: templates/nav/top_nav_base.html +#, python-format +msgid "Administrator area for %(tournament)s" +msgstr "" + +#: templates/nav/top_nav_base.html +#, python-format +msgid "Assistant area for %(tournament)s" +msgstr "" + +#: templates/nav/top_nav_base.html +#, python-format +msgid "Public area for %(tournament)s" +msgstr "" + +#: templates/nav/top_nav_base.html +msgid "Login" +msgstr "Đăng nhập" + +#: templates/registration/logged_out.html +msgid "Goodbye" +msgstr "" + +#: templates/registration/logged_out.html +#, python-format +msgid "You have been logged out. Log in again?" +msgstr "" + +#: templates/registration/login.html +msgctxt "page title" +msgid "Login" +msgstr "Đăng nhập" + +#: templates/registration/login.html +msgctxt "page title" +msgid "Log in to Tabbycat" +msgstr "" + +#: templates/registration/login.html +msgid "Your username and password didn't match." +msgstr "" + +#: templates/registration/login.html +msgid "Your account doesn't have access to this page. To proceed, please log in with an account that has access." +msgstr "" + +#: templates/registration/login.html +msgid "Please log in to see this page." +msgstr "" + +#: templates/registration/password_change_done.html +msgctxt "page title" +msgid "Password changed" +msgstr "" + +#: templates/registration/password_change_done.html +msgid "Your password has been changed." +msgstr "" + +#: templates/registration/password_change_done.html +msgid "Go to the home page" +msgstr "" + +#: templates/registration/password_change_form.html +msgctxt "page title" +msgid "Password Change" +msgstr "" + +#: templates/registration/password_change_form.html +#, python-format +msgid "API Token: %(api_token)s" +msgstr "" + +#: templates/registration/password_change_form.html +msgid "The API token will allow you to authorize external applications to access the site as staff." +msgstr "" + +#: templates/registration/password_change_form.html +msgid "Please enter your old password, then enter a new one." +msgstr "" + +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html +msgctxt "button" +msgid "Change my password" +msgstr "" + +#: templates/registration/password_change_form.html +#: templates/registration/password_reset_confirm.html +msgid "Cancel and go back to the site home page" +msgstr "" + +#: templates/registration/password_reset_complete.html +msgctxt "page title" +msgid "Password reset complete" +msgstr "" + +#: templates/registration/password_reset_complete.html +msgid "Your password has been reset." +msgstr "" + +#: templates/registration/password_reset_complete.html +#: templates/registration/password_reset_done.html +msgid "Go to the login page" +msgstr "" + +#: templates/registration/password_reset_confirm.html +msgctxt "page title" +msgid "Password Reset Confirmation" +msgstr "" + +#: templates/registration/password_reset_confirm.html +#: templates/registration/password_reset_form.html +msgctxt "page title" +msgid "Password Reset" +msgstr "" + +#: templates/registration/password_reset_confirm.html +msgid "Please enter a new password (twice):" +msgstr "" + +#: templates/registration/password_reset_confirm.html +msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." +msgstr "" + +#: templates/registration/password_reset_done.html +msgctxt "page title" +msgid "Password reset email sent" +msgstr "" + +#: templates/registration/password_reset_done.html +msgid "We've emailed you instructions for setting your password, if an account exists with the email address you entered. You should receive them shortly." +msgstr "" + +#: templates/registration/password_reset_done.html +msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." +msgstr "" + +#: templates/registration/password_reset_email.html +#, python-format +msgid "Hi, %(user)s!" +msgstr "" + +#: templates/registration/password_reset_email.html +#, python-format +msgid "Someone asked for a password reset for the email address %(email)s on the Tabbycat site at %(protocol)s://%(domain)s." +msgstr "" + +#: templates/registration/password_reset_email.html +msgid "If this was you, follow the link below to reset your password:" +msgstr "" + +#: templates/registration/password_reset_email.html +#, python-format +msgid "If this wasn't you, that probably means someone else typed your email address into the password reset form on the Tabbycat site at %(protocol)s://%(domain)s." +msgstr "" + +#: templates/registration/password_reset_form.html +msgid "Enter your email address below, and we'll email you a password reset link." +msgstr "" + +#: templates/registration/password_reset_form.html +msgid "Please enter a valid email address." +msgstr "" + +#: templates/registration/password_reset_form.html users/forms.py +msgid "Email address" +msgstr "" + +#: templates/registration/password_reset_form.html +msgctxt "button" +msgid "Reset my password" +msgstr "" + +#: templates/registration/password_reset_form.html +msgid "Back to the login page" +msgstr "" + +#: templates/registration/password_reset_subject.txt +#, python-format +msgid "Password reset on Tabbycat site at %(domain)s" +msgstr "" + +#: urls.py +#, python-format +msgid "Hi, %(user)s — you just logged in!" +msgstr "" + +#: urls.py +msgid "Welcome! You just logged in!" +msgstr "" + +#: users/admin.py +msgid "Users with staff status can view and edit the Edit Database area. This is potentially dangerous and should be reserved for the actual tab director(s)." +msgstr "" + +#: users/admin.py +msgid "Superusers have full access all areas of Tabbycat necessary to run a tournament. Users who are not superusers are still able to perform data entry tasks such as adding results and feedback but can't access confidential areas such as the Breaks and Feedback sections. Chief adjudicators and their deputies are generally given superuser status if they know what they are doing." +msgstr "" + +#: users/templates/admin/auth/delete_user_warning.html +msgid "Warning: You shouldn't delete users from the database once they've done something, because the database logs actions taken by those users, and deleting the users also deletes the related logs. If you wish to deactivate a user account, go back to edit the user, click on the “Permissions” tab, unchecked the “Active” box, and save the user." +msgstr "" + +#: users/templates/signup.html +msgid "Sign-Up" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Administrator Account" +msgstr "" + +#: users/templates/signup.html +msgctxt "page title" +msgid "Create a New Assistant Account" +msgstr "" + +#: users/templates/signup.html +msgid "Create Account" +msgstr "" + +#: users/views.py +msgid "You have successfully created a new administrator account." +msgstr "" + +#: users/views.py +msgid "You have successfully created a new assistant account." +msgstr "" + +#: users/views.py +msgid "Whoops! It looks like someone's already created the first user account. Please log in." +msgstr "" + +#: users/views.py +#, python-format +msgid "Welcome! You've created an account for %s." +msgstr "" + diff --git a/tabbycat/locale/vi/LC_MESSAGES/djangojs.po b/tabbycat/locale/vi/LC_MESSAGES/djangojs.po new file mode 100644 index 00000000000..40f8b612008 --- /dev/null +++ b/tabbycat/locale/vi/LC_MESSAGES/djangojs.po @@ -0,0 +1,554 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-14 04:50+1100\n" +"PO-Revision-Date: 2023-02-16 22:34\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/locale/en/LC_MESSAGES/djangojs.po\n" +"X-Crowdin-File-ID: 962\n" + +#: checkins/templates/CheckInScanContainer.vue: +msgid "Scan Using Camera" +msgstr "" + +#: checkins/templates/CheckInScanContainer.vue: +msgid "Stop Camera Scan" +msgstr "" + +#: checkins/templates/CheckInScanContainer.vue: +msgid "Turn On Sounds" +msgstr "" + +#. Translators: %1: Time of checkin, %2: Barcode number, %3: Name of "owner" +#: checkins/templates/CheckInScanContainer.vue: +msgid "%1 checked in %2: %3" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "All" +msgstr "" + +#. Translators: %1: Option name +#: checkins/templates/CheckInStatusContainer.vue: +msgid "By %1" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "No matching rooms found." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "No matching people found." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "This page will live-update with new check-ins as they occur although the initial list may be up to a minute old." +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid " All" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid " All" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "Click to check-in manually" +msgstr "" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "saving..." +msgstr "đang lưu..." + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "This person does not have a check-in identifier so they can't be checked in" +msgstr "Người này không có mã điểm danh nên họ không thể được điểm danh" + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "If you want to view this page without the sidebar (i.e. for displaying to an auditorium) you can use the assistant version." +msgstr "Nếu bạn muốn hiển thị trang này mà không có thanh cuộn (ví dụ: để hiển thị ở khán phòng), bạn có thể dùng phiên bản của trợ lý." + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "Open the assistant version." +msgstr "Mở phiên bản của trợ lý." + +#: checkins/templates/CheckInStatusContainer.vue: +msgid "Click to undo a check-in" +msgstr "Nhấn để hoàn tác điểm danh" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 of no institutional affiliation with identifier of %3" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 of no institutional affiliation with no assigned identifier" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 from %3 with identifier of %4" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2 from %3 with no assigned identifier" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1 (Present; id=%2)" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1 (Absent; id=%2)" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a team with speakers %2" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "%1, a %2" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "Anonymous (due to team codes)" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "Anon" +msgstr "" + +#: checkins/templates/PeopleStatusMixin.vue: +msgid "Independent" +msgstr "Độc lập" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (%2) with identifier of %3" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (no category) with identifier of %2" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (%2) with no assigned identifier" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "%1 (no category) with no assigned identifier" +msgstr "" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "Uncategorised" +msgstr "Chưa phân loại" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "No Category" +msgstr "Không có phân loại" + +#: checkins/templates/VenuesStatusMixin.vue: +msgid "Priority %1" +msgstr "Ưu tiên %1" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 %4" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 on %4 (Chair)" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 on %4 (Panellist)" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "%1 %2 from %3 on %4 (Trainee)" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "ID %1," +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "Room:" +msgstr "Phòng:" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "Chair for Panel of %1" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: +msgid "Solo Chair" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: +msgid "Panellist" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: printing/templates/PrintableDebateInfo.vue: +msgid "Trainee" +msgstr "" + +#: printing/templates/PrintableBallotHeader.vue: +msgid "Team" +msgstr "Đội" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Mark speeches %1 to %2; %3." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Mark replies %1 to %2; %3." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Return ballots to %1." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "The motion is %1" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Debated" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Circle %1" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "%1: %2" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Aff Veto" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Neg Veto" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: printing/templates/PrintableTeamScores.vue: +msgid "%1:" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "tab entry" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "tab check" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: checkins/templates/PeopleStatusMixin.vue: +msgid "Unaffiliated" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "no ½ marks" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "½ marks are allowed" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "decimal marks are allowed" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "%1 (%2, %3)" +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "Adjudicating with %1." +msgstr "" + +#: printing/templates/PrintableDebateInfo.vue: +msgid "; " +msgstr "" + +#: printing/templates/PrintableFeedback.vue: +msgid "Did %1 deliver the adjudication?" +msgstr "" + +#: printing/templates/PrintableFeedback.vue: printing/templates/PrintableFeedbackQuestion.vue: +msgid "Yes" +msgstr "" + +#: printing/templates/PrintableFeedback.vue: +msgid "No, I am submitting feedback on:" +msgstr "" + +#: printing/templates/PrintableFeedbackQuestion.vue: +msgid "Unsure" +msgstr "" + +#: printing/templates/PrintableFeedbackQuestion.vue: +msgid "No" +msgstr "" + +#: printing/templates/PrintableScoresheet.vue: +msgid "Which team won the debate:" +msgstr "" + +#: printing/templates/PrintableScoresheet.vue: +msgid "By how many points did they win:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "%1, %2" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "IMPORTANT: Check and explicitly note if a speaker gives multiple speeches" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Score:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Circle the last digit of the %1's score:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Circle Rank:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Total:" +msgstr "" + +#: printing/templates/PrintableTeamScores.vue: +msgid "Circle the last digit of the team's total:" +msgstr "" + +#: templates/tables/TablesContainer.vue:8 +msgid "Find in Table" +msgstr "Tìm trong Bảng" + +#: templates/tables/CheckboxTables.vue:30 +msgid "Set All Breaking as Available" +msgstr "" + +#: templates/tables/CheckboxTables.vue:36 +msgid "Set all the availabilities to exactly match what they were in the previous round." +msgstr "" + +#: templates/tables/CheckboxTables.vue:37 +msgid "Match" +msgstr "" + +#: templates/tables/CheckboxTables.vue:41 +msgid "Set all availabilities to exactly match check-ins." +msgstr "" + +#: templates/tables/CheckboxTables.vue:44 +msgid "Match Check-Ins" +msgstr "" + +#: templates/tables/CheckboxTables.vue: +msgid "Set people as available only if they have a check-in and are currently unavailable — i.e. it will not overwrite any existing availabilities." +msgstr "" + +#: templates/tables/CheckboxTables.vue:47 +msgid "Copy From Check-Ins" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "Ballots Status" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "Latest Actions" +msgstr "Hành động gần đây nhất" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "No Actions Yet" +msgstr "" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "Latest Results" +msgstr "Kết quả gần đây nhất" + +#: tournaments/templates/TournamentOverviewContainer.vue: +msgid "No Confirmed Results Yet" +msgstr "" + +#: participants/templates/DiversityContainer.vue:6 +msgid "Speaker Demographics" +msgstr "" + +#: participants/templates/DiversityContainer.vue:11 +msgid "No Gender Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:18 +msgid "No Speaker Categories Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:33 +msgid "Speaker Results" +msgstr "" + +#: participants/templates/DiversityContainer.vue:36 +msgid "speakers with gender data" +msgstr "" + +#: participants/templates/DiversityContainer.vue:38 +msgid "speaker scores total" +msgstr "" + +#: participants/templates/DiversityContainer.vue:49 +msgid "No Region Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:56 +msgid "Adjudicator Demographics" +msgstr "" + +#: participants/templates/DiversityContainer.vue:68 +msgid "No Position Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:83 +msgid "Adjudicator Results" +msgstr "" + +#: participants/templates/DiversityContainer.vue:86 +msgid "adjudicators with gender data" +msgstr "" + +#: participants/templates/DiversityContainer.vue:88 +msgid "feedback scores total" +msgstr "" + +#: participants/templates/DiversityContainer.vue:94 +msgid "No Adjudicator Ratings Information" +msgstr "" + +#: participants/templates/DiversityContainer.vue:99 +msgid "No Adjudicator-Adjudicator Feedback Information" +msgstr "" + +#: results/templates/ResultsStats.vue:10 +msgid "Checked-In" +msgstr "" + +#: results/templates/ResultsStats.vue:15 +msgid "Not Checked-In" +msgstr "" + +#: results/templates/ResultsStats.vue:19 +msgid "Ballot Check-Ins" +msgstr "" + +#: results/templates/ResultsStats.vue:26 +msgid "Unknown" +msgstr "Không xác định" + +#: results/templates/ResultsStats.vue:31 +msgid "Unconfirmed" +msgstr "" + +#: results/templates/ResultsStats.vue:36 +msgid "Confirmed" +msgstr "" + +#: results/templates/ResultsStats.vue:40 +msgid "Ballot Statuses" +msgstr "" + +#: results/templates/BallotsCell.vue:18 +msgid "You cannot confirm this ballot because you entered it" +msgstr "" + +#: results/templates/BallotsCell.vue:34 +msgid "Add Ballot" +msgstr "" + +#: results/templates/BallotsCell.vue:79 +msgid "Re-Edit" +msgstr "" + +#: results/templates/BallotsCell.vue:81 +msgid "Review" +msgstr "" + +#: utils/templates/AutoSaveCounter.vue:4 +msgid "No changes" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:8 +msgid "Return to Draw" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:15 +msgid "Auto-Prioritise" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:17 +msgid "Auto-Allocate" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Break" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Gender" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Rank" +msgstr "" + +#: utils/templates/DragAndDropActions.vue:65 +msgid "Region" +msgstr "" + +#. Translators: Short for "Venue Category" +#: utils/templates/DragAndDropActions.vue:65 +msgid "Category" +msgstr "Thể loại" + +#: utils/templates/DragAndDropDebate.vue:5 +msgid "The debate's bracket" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:9 +msgid "The bracket range of the hypothetical debate" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:20 +msgid "The total number of live break categories across all teams" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:26 +msgid "The estimated total number of live break categories across all teams of the hypothetical debate" +msgstr "" + +#: utils/templates/DragAndDropDebate.vue:33 +msgid "This debate's priority" +msgstr "" + +#: draw/templates/InlineTeam.vue:41 +msgid "No code name set" +msgstr "" + diff --git a/tabbycat/motions/locale/vi/LC_MESSAGES/django.po b/tabbycat/motions/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..6ee85757779 --- /dev/null +++ b/tabbycat/motions/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,382 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"PO-Revision-Date: 2023-03-22 12:33\n" +"Last-Translator: \n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/motions/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 936\n" + +#: motions/apps.py motions/templates/public_motions.html +msgid "Motions" +msgstr "Kiến nghị" + +#: motions/models.py +msgid "text" +msgstr "" + +#: motions/models.py +msgid "The full motion e.g., \"This House would straighten all bananas\"" +msgstr "Bản đầy đủ của kiến nghị, ví dụ: \"Chúng tôi sẽ làm thẳng mọi quả chuối\"" + +#: motions/models.py +msgid "reference" +msgstr "" + +#: motions/models.py +msgid "Shortcode for the motion, e.g., \"Bananas\"" +msgstr "Vắn tắt nội dung của kiến nghị, ví dụ: \"Chuối\"" + +#: motions/models.py +msgid "info slide" +msgstr "" + +#: motions/models.py +msgid "The information slide for this topic; if it has one" +msgstr "" + +#: motions/models.py +msgid "tournament" +msgstr "giải" + +#: motions/models.py +msgid "rounds" +msgstr "vòng" + +#: motions/models.py +msgid "motion" +msgstr "kiến nghị" + +#: motions/models.py +msgid "motions" +msgstr "kiến nghị" + +#: motions/models.py +msgid "debate team" +msgstr "đội" + +#: motions/models.py +msgid "preferences" +msgstr "" + +#: motions/models.py +msgid "ballot submission" +msgstr "" + +#: motions/models.py +msgid "debate team motion preference" +msgstr "" + +#: motions/models.py +msgid "debate team motion preferences" +msgstr "" + +#: motions/models.py +msgid "round" +msgstr "vòng" + +#: motions/models.py +msgid "sequence number" +msgstr "" + +#: motions/models.py +msgid "The order in which motions are displayed" +msgstr "" + +#: motions/models.py +msgid "round motion" +msgstr "kiến nghị của vòng" + +#: motions/models.py +msgid "round motions" +msgstr "kiến nghị của vòng" + +#: motions/statistics.py +msgid "extremely strong evidence" +msgstr "" + +#: motions/statistics.py +msgid "strong evidence" +msgstr "" + +#: motions/statistics.py +msgid "moderate evidence" +msgstr "" + +#: motions/statistics.py +msgid "weak evidence" +msgstr "" + +#: motions/statistics.py +msgid "very weak evidence" +msgstr "" + +#: motions/statistics.py +msgid "extremely weak evidence" +msgstr "" + +#: motions/statistics.py +msgid "balance inconclusive" +msgstr "" + +#: motions/statistics.py +msgid "too few debates to get a meaningful statistic" +msgstr "" + +#: motions/statistics.py +#, python-format +msgid "imbalanced at %(level)s level" +msgstr "" + +#: motions/statistics.py +#, python-format +msgid "χ² statistic is %(chisq).3f, providing %(evidence)s to suggest that this motion was imbalanced — at a %(level)s level of significance." +msgstr "" + +#: motions/statistics.py +msgid "probably balanced" +msgstr "" + +#: motions/statistics.py +#, python-format +msgid "χ² statistic is %(chisq).3f, providing insufficient evidence to suggest that this motion was imbalanced at any level of significance." +msgstr "" + +#: motions/templates/motion_global_statistics.html +#: motions/templates/motion_round_statistics.html +#: motions/templates/public_motions.html +msgid "View Info Slide" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "results from %(ndebates)s debate" +msgid_plural "results from %(ndebates)s debates" +msgstr[0] "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "%(advancing)s of %(ndebates)s team on %(side)s (%(percentage)s%%) advanced" +msgid_plural "%(advancing)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) advanced" +msgstr[0] "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "%(eliminated)s of %(ndebates)s team on %(side)s (%(percentage)s%%) were eliminated" +msgid_plural "%(eliminated)s of %(ndebates)s teams on %(side)s (%(percentage)s%%) were eliminated" +msgstr[0] "" + +#: motions/templates/motion_statistics_bp_elim.html +msgid "advanced" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +msgctxt "abbreviation for 'advanced', used when not enough space" +msgid "adv." +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +msgid "eliminated" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +msgctxt "abbreviation for 'eliminated', used when not enough space" +msgid "elim." +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +#, python-format +msgid "%(side)s results distribution" +msgstr "" + +#: motions/templates/motion_statistics_bp_elim.html +#: motions/templates/motion_statistics_bp_prelim.html +msgid "No results for this motion" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Government" +msgstr "Ủng hộ" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Opposition" +msgstr "Phản đối" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Average Points per bench" +msgstr "Điểm trung bình của từng phe" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Opening" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Closing" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +msgid "Average Points per half" +msgstr "" + +#: motions/templates/motion_statistics_bp_prelim.html +#, python-format +msgid "average points per position (%(ndebates)s debate)" +msgid_plural "average points per position (%(ndebates)s debates)" +msgstr[0] "" + +#: motions/templates/motion_statistics_bp_prelim.html +#, python-format +msgid "%(count)s result for %(side)s (%(percentage)s%%) were for %(points)s points" +msgid_plural "%(count)s results for %(side)s (%(percentage)s%%) were for %(points)s points" +msgstr[0] "" + +#: motions/templates/motion_statistics_bp_prelim.html +#, python-format +msgid "%(side)s results" +msgstr "" + +#: motions/templates/motion_statistics_twoteam.html +#, python-format +msgid "%(count)s %(side)s win" +msgid_plural "%(count)s %(side)s wins" +msgstr[0] "" + +#: motions/templates/motion_statistics_twoteam.html +msgid "No teams debated this motion" +msgstr "" + +#: motions/templates/motion_statistics_twoteam.html +#, python-format +msgid "%(count)s %(side)s veto" +msgid_plural "%(count)s %(side)s vetoes" +msgstr[0] "" + +#: motions/templates/motion_statistics_twoteam.html +msgid "No teams vetoed this motion" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Edit Motion" +msgid_plural "Edit Motions" +msgstr[0] "" + +#: motions/templates/motions_edit.html +msgid "Display Draw" +msgstr "Hiện thị bảng đấu" + +#: motions/templates/motions_edit.html +msgid "This will replace all existing motions for this round. The motions themselves will still be in the database." +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Reuse Motions from Last Round" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "Use Existing Motions" +msgstr "" + +#: motions/templates/motions_edit.html +msgid "The motion for this round is currently publicly displayed because it was released. Any changes made here will be publicly visible as well as soon as they are saved." +msgid_plural "The motions for this round are currently publicly displayed because they were released. Any changes made here will be publicly visible as well as soon as they are saved." +msgstr[0] "" + +#: motions/templates/motions_edit.html +msgid "Save Motion" +msgid_plural "Save Motions" +msgstr[0] "" + +#: motions/templates/motions_info.html +msgid "Info Slide" +msgstr "" + +#: motions/templates/public_motions.html +msgid "There are no motions available for this round." +msgstr "" + +#: motions/templates/public_motions.html +msgid "The motions for this round have not been released." +msgstr "" + +#: motions/templates/public_motions.html +msgid "The motion for this round has not been released." +msgstr "Kiến nghị cho vòng này chưa được công bố." + +#: motions/templates/show.html +#, python-format +msgid "Reveal Info Slide for %(round)s" +msgid_plural "Reveal Info Slides for %(round)s" +msgstr[0] "" + +#: motions/templates/show.html +#, python-format +msgid "Reveal Motion for %(round)s" +msgid_plural "Reveal Motions for %(round)s" +msgstr[0] "" + +#: motions/templates/show.html +msgid "There are no motions for this round entered into Tabbycat." +msgstr "" + +#: motions/utils.py +msgid "Not all latest ballots list the same motion, so could not be merged." +msgstr "" + +#: motions/utils.py +msgid "Motion vetos are inconsistent, so could not be merged." +msgstr "" + +#: motions/views.py +msgid "The motion has been saved." +msgstr "" + +#: motions/views.py +#, python-format +msgid "%(count)d motion has been saved." +msgid_plural "%(count)d motions have been saved." +msgstr[0] "" + +#: motions/views.py +#, python-format +msgid "%(count)d motion has been deleted." +msgid_plural "%(count)d motions have been deleted." +msgstr[0] "" + +#: motions/views.py +msgid "Motions cannot be copied to the first round." +msgstr "" + +#: motions/views.py +#, python-format +msgid "Reused the motion from the previous round." +msgid_plural "Reused the %(count)d motions from the previous round." +msgstr[0] "" + +#: motions/views.py +msgid "Released the motion." +msgid_plural "Released the motions." +msgstr[0] "" + +#: motions/views.py +msgid "Unreleased the motion." +msgid_plural "Unreleased the motions." +msgstr[0] "" + +#: motions/views.py +msgid "Round Motions" +msgstr "" + +#: motions/views.py +msgid "Motion Statistics" +msgstr "" + diff --git a/tabbycat/notifications/locale/vi/LC_MESSAGES/django.po b/tabbycat/notifications/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..6fc59fe29ba --- /dev/null +++ b/tabbycat/notifications/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,415 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-06-22 12:42\n" +"Last-Translator: philip_tc\n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/notifications/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 938\n" + +#: notifications/apps.py +msgid "Notifications" +msgstr "" + +#: notifications/forms.py +msgid "Recipient email address" +msgstr "" + +#: notifications/forms.py +#, python-format +msgid "Test email from %(host)s" +msgstr "" + +#: notifications/forms.py +#, python-format +msgid "Congratulations! If you're reading this message, your email backend on %(host)s looks all good to go!" +msgstr "" + +#: notifications/forms.py +msgid "Subject" +msgstr "" + +#: notifications/forms.py +msgid "Message" +msgstr "" + +#: notifications/models.py +msgid "email" +msgstr "" + +#: notifications/models.py +msgid "SMS" +msgstr "" + +#: notifications/models.py +msgid "recipient" +msgstr "" + +#: notifications/models.py +msgid "method" +msgstr "" + +#: notifications/models.py +msgid "context" +msgstr "" + +#: notifications/models.py +msgid "notification" +msgstr "" + +#: notifications/models.py +msgid "timestamp" +msgstr "" + +#: notifications/models.py +msgid "sent message" +msgstr "" + +#: notifications/models.py +msgid "sent messages" +msgstr "" + +#: notifications/models.py +msgid "team points" +msgstr "" + +#: notifications/models.py +msgid "ballot confirmed" +msgstr "" + +#: notifications/models.py +msgid "feedback URL" +msgstr "" + +#: notifications/models.py +msgid "ballot URL" +msgstr "" + +#: notifications/models.py +msgid "landing page URL" +msgstr "" + +#: notifications/models.py +msgid "adjudicator draw released" +msgstr "" + +#: notifications/models.py +msgid "team registration" +msgstr "" + +#: notifications/models.py +msgid "adjudicator registration" +msgstr "" + +#: notifications/models.py +msgid "motion(s) released" +msgstr "" + +#: notifications/models.py +msgid "team draw released" +msgstr "" + +#: notifications/models.py +msgid "custom message" +msgstr "" + +#: notifications/models.py +msgid "event" +msgstr "" + +#: notifications/models.py +msgid "tournament" +msgstr "" + +#: notifications/models.py +msgid "round" +msgstr "" + +#: notifications/models.py +msgid "subject template" +msgstr "" + +#: notifications/models.py +msgid "body template" +msgstr "" + +#: notifications/models.py +msgid "bulk notification" +msgstr "" + +#: notifications/models.py +msgid "bulk notifications" +msgstr "" + +#: notifications/models.py +msgid "Processed" +msgstr "" + +#: notifications/models.py +msgid "Dropped" +msgstr "" + +#: notifications/models.py +msgid "Deferred" +msgstr "" + +#: notifications/models.py +msgid "Delivered" +msgstr "" + +#: notifications/models.py +msgid "Bounced" +msgstr "" + +#: notifications/models.py +msgid "Opened" +msgstr "" + +#: notifications/models.py +msgid "Clicked" +msgstr "" + +#: notifications/models.py +msgid "Unsubscribed" +msgstr "" + +#: notifications/models.py +msgid "Marked as spam" +msgstr "" + +#: notifications/models.py +msgid "Unsubscribed from group" +msgstr "" + +#: notifications/models.py +msgid "Resubscribed to group" +msgstr "" + +#: notifications/models.py +msgid "email message" +msgstr "" + +#: notifications/models.py +msgid "email status" +msgstr "" + +#: notifications/models.py +msgid "email statuses" +msgstr "" + +#: notifications/templates/email_participants.html +#, python-format +msgid "You have not specified a reply-to address. This means that participants may not reply to the message if they have questions. Please set one in the Notifications section of the preferences." +msgstr "" + +#: notifications/templates/email_participants.html +#, python-format +msgid "The webhook URL for use in SendGrid is %(notifications_webhook_url)s. Please point the HTTP POST URL in SendGrid to that." +msgstr "" + +#: notifications/templates/email_participants.html +msgid "Send Message(s)" +msgstr "" + +#: notifications/templates/email_statuses.html +msgid "Emails can be sent by Tabbycat for a variety of purposes. Emails are sent when specific preferences are enabled (i.e. enabling Ballot Receipts) or through actions available on specific pages (i.e. the Draw Display page for matchups; or the Participants page for team registration). This page shows the status of previously-sent emails." +msgstr "" + +#: notifications/templates/notifications_nav.html notifications/views.py +msgid "Email Statuses" +msgstr "" + +#: notifications/templates/notifications_nav.html +#: notifications/templates/test_email.html +msgid "Send Test Email" +msgstr "" + +#: notifications/templates/notifications_nav.html +msgid "Send Custom Email" +msgstr "" + +#: notifications/templates/test_email.html +msgctxt "page title" +msgid "Send Test Email" +msgstr "" + +#: notifications/templates/test_email.html +msgid "You can use this form to send a test email, to check that your email backend settings are working, before you try to send email notifications to participants." +msgstr "" + +#: notifications/templates/test_email.html +#, python-format +msgid "The email will be sent from: %(default_from_email)s. If this doesn't look right, change the DEFAULT_FROM_EMAIL config var in Heroku (or environment variable)." +msgstr "" + +#: notifications/templates/test_email.html +msgid "Go back to the site home page" +msgstr "" + +#: notifications/utils.py +msgid "the chair" +msgstr "" + +#: notifications/utils.py +msgid "the only" +msgstr "" + +#: notifications/utils.py +msgid "a panellist" +msgstr "" + +#: notifications/utils.py +msgid "a trainee" +msgstr "" + +#: notifications/utils.py +msgid "TBA" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "%(tournament)s %(round)s @ %(room)s" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(side)s: %(team)s (%(points)d points with %(speaks)s total speaks)" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(side)s: %(team)s (%(points)s - %(speaks)s total speaks)" +msgstr "" + +#: notifications/utils.py +msgid "Win" +msgstr "" + +#: notifications/utils.py +msgid "Loss" +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(pos)s: %(speaker)s (%(score)s)
  • " +msgstr "" + +#: notifications/utils.py +#, python-format +msgid "
  • %(text)s (%(ref)s)
  • " +msgstr "" + +#: notifications/utils.py +msgid ", " +msgstr "" + +#: notifications/views.py +#, python-format +msgid "The email (SMTP) server returned an error sending the test email: [SMTP code %(code)d] %(error)s" +msgstr "" + +#: notifications/views.py +msgid "Hint: If the error is about sender identity verification in SendGrid, and you've already completed the steps in SendGrid, it may be that you need to update the DEFAULT_FROM_EMAIL config var in Heroku to match your verified sender identity." +msgstr "" + +#: notifications/views.py +#, python-format +msgid "There was an error sending the test email: %(error)s" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "A test email has been sent to %(recipient)s." +msgstr "" + +#: notifications/views.py +msgid "N/A" +msgstr "" + +#: notifications/views.py +msgid "Not known" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "%(status)s @ %(time)s" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "@ %s" +msgstr "" + +#: notifications/views.py +msgid "Timeline" +msgstr "" + +#: notifications/views.py +msgid "Participant" +msgstr "" + +#: notifications/views.py +msgid "Email address" +msgstr "" + +#: notifications/views.py +msgid "Status" +msgstr "Trạng thái" + +#: notifications/views.py +msgid "Time" +msgstr "" + +#: notifications/views.py +msgid "Email Participants" +msgstr "" + +#: notifications/views.py +#, python-format +msgid "%(email_count)s email has been queued for sending." +msgid_plural "%(email_count)s emails have been queued for sending." +msgstr[0] "" + +#: notifications/views.py +msgid "No emails were sent — likely because no recipients were selected." +msgstr "" + +#: notifications/views.py +msgid "Send Email" +msgstr "" + +#: notifications/views.py +msgid "Not Provided" +msgstr "" + +#: notifications/views.py +msgid "Role" +msgstr "" + +#: notifications/views.py +msgid "Adjudicator" +msgstr "" + +#: notifications/views.py +msgid "Speaker" +msgstr "" + +#: notifications/views.py +msgid "Speakers" +msgstr "Tranh biện viên" + +#: notifications/views.py +msgid "Adjudicators" +msgstr "Giám khảo" + diff --git a/tabbycat/options/locale/vi/LC_MESSAGES/django.po b/tabbycat/options/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..7ebef77eaf0 --- /dev/null +++ b/tabbycat/options/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,1618 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-25 13:46\n" +"Last-Translator: philip_tc\n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/options/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 940\n" + +#: options/apps.py +msgid "Tournament Options" +msgstr "" + +#: options/models.py +msgid "instance" +msgstr "" + +#: options/models.py +msgid "tournament preference" +msgstr "" + +#: options/models.py +msgid "tournament preferences" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Score Rules" +msgstr "" + +#: options/preferences.py +msgid "Minimum allowed score for substantive speeches" +msgstr "" + +#: options/preferences.py +msgid "Minimum speaker score" +msgstr "" + +#: options/preferences.py +msgid "Maximum speaker score" +msgstr "" + +#: options/preferences.py +msgid "Maximum allowed score for substantive speeches" +msgstr "" + +#: options/preferences.py +msgid "Speaker score step" +msgstr "" + +#: options/preferences.py +msgid "Score steps allowed for substantive speeches, e.g. full points (1) or half points (0.5)" +msgstr "" + +#: options/preferences.py +msgid "The largest amount by which one team can beat another (0 means no limit)" +msgstr "" + +#: options/preferences.py +msgid "Maximum margin" +msgstr "" + +#: options/preferences.py +msgid "Minimum allowed score for reply speeches" +msgstr "" + +#: options/preferences.py +msgid "Minimum reply score" +msgstr "" + +#: options/preferences.py +msgid "Maximum allowed score for reply speeches" +msgstr "" + +#: options/preferences.py +msgid "Maximum reply score" +msgstr "" + +#: options/preferences.py +msgid "Score steps allowed for reply speeches, e.g. full points (1) or half points (0.5)" +msgstr "" + +#: options/preferences.py +msgid "Reply score step" +msgstr "" + +#: options/preferences.py +msgid "If checked, a team's winning margin includes dissenting adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Margin includes dissenters" +msgstr "" + +#: options/preferences.py +msgid "If checked, all speaker scores, including for duplicate speeches, will be counted for team scores" +msgstr "" + +#: options/preferences.py +msgid "Team score includes ghosts" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Draw Rules" +msgstr "" + +#: options/preferences.py +msgid "The auto-allocator will only take adjudicators at or above this score as voting panellists" +msgstr "" + +#: options/preferences.py +msgid "Minimum adjudicator score to vote" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by adjudicator auto-allocator for conflicts" +msgstr "" + +#: options/preferences.py +msgid "Adjudicator conflict penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by adjudicator auto-allocator for history" +msgstr "" + +#: options/preferences.py +msgid "Adjudicator history penalty" +msgstr "" + +#: options/preferences.py +msgid "Penality applied by preformed panel auto-allocator for priority mismatch" +msgstr "" + +#: options/preferences.py +msgid "Importance mismatch penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by conflict avoidance method for teams seeing their own institution" +msgstr "" + +#: options/preferences.py +msgid "Team institution penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by conflict avoidance method for teams seeing each other twice or more" +msgstr "" + +#: options/preferences.py +msgid "Team history penalty" +msgstr "" + +#: options/preferences.py +msgid "If checked, the draw will try to avoid pairing teams against their own institution" +msgstr "" + +#: options/preferences.py +msgid "Avoid same institution" +msgstr "" + +#: options/preferences.py +msgid "If checked, the draw will try to avoid having teams see each other twice" +msgstr "" + +#: options/preferences.py +msgid "Avoid team history" +msgstr "" + +#: options/preferences.py +msgid "How odd brackets are resolved (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Odd bracket resolution method" +msgstr "" + +#: options/preferences.py +msgid "Pull up from top" +msgstr "" + +#: options/preferences.py +msgid "Pull up from bottom" +msgstr "" + +#: options/preferences.py +msgid "Pull up from middle" +msgstr "" + +#: options/preferences.py +msgid "Pull up at random" +msgstr "" + +#: options/preferences.py +msgid "Intermediate brackets" +msgstr "" + +#: options/preferences.py +msgid "Intermediate brackets with bubble-up-bubble-down" +msgstr "" + +#: options/preferences.py +msgid "Intermediate 1 (pre-allocated sides)" +msgstr "" + +#: options/preferences.py +msgid "Intermediate 2 (pre-allocated sides)" +msgstr "" + +#: options/preferences.py +msgid "How affirmative/negative positions are assigned (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Side allocations method" +msgstr "" + +#: options/preferences.py +msgid "Random" +msgstr "" + +#: options/preferences.py +msgid "Balance" +msgstr "" + +#: options/preferences.py +msgid "Pre-allocated" +msgstr "" + +#: options/preferences.py +msgid "Manually enter from ballot" +msgstr "" + +#: options/preferences.py +msgid "Slide: 1 vs 6, 2 vs 7, …. Fold: 1 vs 10, 2 vs 9, …. Adjacent: 1 vs 2, 3 vs 4, …." +msgstr "" + +#: options/preferences.py +msgid "Pairing method" +msgstr "" + +#: options/preferences.py +msgid "Slide" +msgstr "" + +#: options/preferences.py +msgid "Fold" +msgstr "" + +#: options/preferences.py +msgid "Adjacent" +msgstr "" + +#: options/preferences.py +msgid "Fold top, adjacent rest" +msgstr "" + +#: options/preferences.py +msgid "Method used to try to avoid teams facing each other multiple times or their own institution (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Conflict avoidance method" +msgstr "" + +#: options/preferences.py +msgid "Off" +msgstr "" + +#: options/preferences.py +msgid "One-up-one-down" +msgstr "" + +#: options/preferences.py +msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." +msgstr "" + +#: options/preferences.py +msgid "Pullup restriction" +msgstr "" + +#: options/preferences.py +msgid "No restriction" +msgstr "" + +#: options/preferences.py +msgid "Choose from teams who have been pulled up the fewest times so far" +msgstr "" + +#: options/preferences.py +msgid "Choose from teams with the lowest draw strength by wins so far" +msgstr "" + +#: options/preferences.py +msgid "Choose from teams with the lowest draw strength by speaks so far" +msgstr "" + +#: options/preferences.py +msgid "In BP, how pullups are distributed. Only \"Anywhere\" is WUDC-compliant." +msgstr "" + +#: options/preferences.py +msgid "BP pullup distribution" +msgstr "" + +#: options/preferences.py +msgid "Anywhere in bracket" +msgstr "" + +#: options/preferences.py +msgid "All in the same room (not WUDC-compliant)" +msgstr "" + +#: options/preferences.py +msgid "In BP, which position cost function to use (see documentation for details)" +msgstr "" + +#: options/preferences.py +msgid "BP position cost" +msgstr "" + +#: options/preferences.py +msgid "Simple" +msgstr "" + +#: options/preferences.py +msgid "Rényi entropy" +msgstr "" + +#: options/preferences.py +msgid "Population variance" +msgstr "" + +#: options/preferences.py +msgid "Rényi order α, if BP position cost uses Rényi entropy. Shannon is α = 1, Hartley is α = 0, collision is α = 2. See documentation for details." +msgstr "" + +#: options/preferences.py +msgid "Rényi order (BP)" +msgstr "" + +#: options/preferences.py +msgid "The BP position cost is raised to this power; higher exponents bias towards resolving fewer large position imbalances over more small ones. See documentation for details." +msgstr "" + +#: options/preferences.py +msgid "BP position cost exponent" +msgstr "" + +#: options/preferences.py +msgid "In BP, which method to use to solve the assignment problem. Only Hungarian with preshuffling is WUDC-compliant." +msgstr "" + +#: options/preferences.py +msgid "BP assignment method" +msgstr "" + +#: options/preferences.py +msgid "Hungarian algorithm (not WUDC-compliant)" +msgstr "" + +#: options/preferences.py +msgid "Hungarian algorithm with preshuffling" +msgstr "" + +#: options/preferences.py +msgid "Automatically make all adjudicators available for all rounds" +msgstr "" + +#: options/preferences.py +msgid "Skip adjudicator check-ins" +msgstr "" + +#: options/preferences.py +msgid "Hide panellist positions in the UI (and don't allocate them)" +msgstr "" + +#: options/preferences.py +msgid "No panellist adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Hide trainee positions in the UI (and don't allocate them)" +msgstr "" + +#: options/preferences.py +msgid "No trainee adjudicators" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Feedback" +msgstr "Phản hồi" + +#: options/preferences.py +msgid "Minimum possible adjudicator score that can be given" +msgstr "" + +#: options/preferences.py +msgid "Minimum adjudicator score" +msgstr "" + +#: options/preferences.py +msgid "Maximum possible adjudicator score that can be given" +msgstr "" + +#: options/preferences.py +msgid "Maximum adjudicator score" +msgstr "" + +#: options/preferences.py +msgid "Used to inform available choices in the feedback forms for adjudicators (both online and printed) and feedback progress" +msgstr "" + +#: options/preferences.py +msgid "Allow and expect feedback to be submitted by" +msgstr "" + +#: options/preferences.py +msgid "Chairs on panellists and trainees" +msgstr "" + +#: options/preferences.py +msgid "Panellists on chairs, chairs on panellists and trainees" +msgstr "" + +#: options/preferences.py +msgid "Panellists and trainees on chairs, vice-versa" +msgstr "" + +#: options/preferences.py +msgid "All adjudicators (including trainees) on each other" +msgstr "" + +#: options/preferences.py +msgid "Expect feedback to be submitted by teams on" +msgstr "" + +#: options/preferences.py +msgid "Used to inform available choices in the feedback forms for teams (both online and printed) and feedback progress; this option is used by, e.g., UADC" +msgstr "" + +#: options/preferences.py +msgid "Orallist only (voting panellists permitted, with prompts to select orallist)" +msgstr "" + +#: options/preferences.py +msgid "All adjudicators in their panels (including trainees)" +msgstr "" + +#: options/preferences.py +msgid "Show unexpected feedback submissions in participants pages" +msgstr "" + +#: options/preferences.py +msgid "Displays unexpected feedback with a question mark symbol; only relevant if public participants and feedback progress are both enabled" +msgstr "" + +#: options/preferences.py +msgid "Show if an adjudicator is a trainee (unaccredited)" +msgstr "" + +#: options/preferences.py +msgid "Show unaccredited" +msgstr "" + +#: options/preferences.py +msgid "Any explanatory text needed to introduce the feedback form" +msgstr "" + +#: options/preferences.py +msgid "Feedback introduction/explanation" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Debate Rules" +msgstr "" + +#: options/preferences.py +msgid "Two-team format (e.g. Australs, WSDC) or British Parliamentary" +msgstr "" + +#: options/preferences.py +msgid "Teams in debate" +msgstr "" + +#: options/preferences.py +msgid "Two-team format" +msgstr "" + +#: options/preferences.py +msgid "British Parliamentary (four teams)" +msgstr "" + +#: options/preferences.py +msgid "Whether panels submit a ballot each or a single ballot for a debate during the preliminary rounds. Note: BP must use one per debate." +msgstr "" + +#: options/preferences.py +msgid "Ballots per debate, preliminary rounds" +msgstr "" + +#: options/preferences.py +msgid "One ballot per voting adjudicator" +msgstr "" + +#: options/preferences.py +msgid "Consensus ballot (one ballot per debate)" +msgstr "" + +#: options/preferences.py +msgid "Whether panels submit a ballot each or a single ballot for a debate during the elimination rounds. Note: BP must use one per debate." +msgstr "" + +#: options/preferences.py +msgid "Ballots per debate, elimination rounds" +msgstr "" + +#: options/preferences.py +msgid "Whether adjudicator(s) must select the winning team in their ballot, and how it should be treated. Note: Not supported in BP." +msgstr "" + +#: options/preferences.py +msgid "Winner Declaration in ballot(s)" +msgstr "" + +#: options/preferences.py +msgid "Do not require separate winner selection" +msgstr "" + +#: options/preferences.py +msgid "Require separate winner selection as a check on correct scores" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection to break tied-point debates" +msgstr "" + +#: options/preferences.py +msgid "Require winner selection, overriding scores" +msgstr "" + +#: options/preferences.py +msgid "When ballots should ask for speaker scores." +msgstr "" + +#: options/preferences.py +msgid "Require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Always require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "Only require speaker scores in preliminary rounds" +msgstr "" + +#: options/preferences.py +msgid "Never require speaker scores" +msgstr "" + +#: options/preferences.py +msgid "How many substantive speakers on a team" +msgstr "" + +#: options/preferences.py +msgid "Substantive speakers" +msgstr "" + +#: options/preferences.py +msgid "What to call the teams" +msgstr "" + +#: options/preferences.py +msgid "Side names" +msgstr "" + +#: options/preferences.py +msgid "Whether this style features scored reply speeches" +msgstr "" + +#: options/preferences.py +msgid "Reply scores" +msgstr "" + +#: options/preferences.py +msgid "Whether to limit reply speeches to speakers who gave a substantive speech in the debate" +msgstr "" + +#: options/preferences.py +msgid "Require reply speaker to have given a substantive speech" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Standings" +msgstr "Xếp hạng" + +#: options/preferences.py +msgid "The number of substantive speeches a speaker can miss and still be on the speaker tab (-1 means no limit)" +msgstr "" + +#: options/preferences.py +msgid "Speeches missable for standings eligibility" +msgstr "" + +#: options/preferences.py +msgid "The number of reply speeches a speaker can miss and still be on the replies tab (-1 means no limit)" +msgstr "" + +#: options/preferences.py +msgid "Replies missable for standings eligibility" +msgstr "" + +#: options/preferences.py +msgid "Metrics to use to rank teams (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Team standings precedence" +msgstr "" + +#: options/preferences.py +#, python-format +msgid "The following metrics can't be listed twice: %(duplicates)s" +msgstr "" + +#: options/preferences.py +msgid "Metrics to calculate, but not used to rank teams" +msgstr "" + +#: options/preferences.py +msgid "Team standings extra metrics" +msgstr "" + +#: options/preferences.py +msgid "Metrics to use to rank speakers (see documentation for further details)" +msgstr "" + +#: options/preferences.py +msgid "Speaker standings precedence" +msgstr "" + +#: options/preferences.py +msgid "Metrics to calculate, but not used to rank speakers" +msgstr "" + +#: options/preferences.py +msgid "Speaker standings extra metrics" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Tab Release" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the team tab. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release team tab to public" +msgstr "" + +#: options/preferences.py +msgid "Only show scores for the top X teams in the public tab (set to 0 to show all teams)." +msgstr "" + +#: options/preferences.py +msgid "Top teams cutoff" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the speaker tab. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release speaker tab to public" +msgstr "" + +#: options/preferences.py +msgid "Only show scores for the top X speakers in the public tab (set to 0 to show all speakers)." +msgstr "" + +#: options/preferences.py +msgid "Top speakers cutoff" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the replies tab. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release replies tab to public" +msgstr "" + +#: options/preferences.py +msgid "Only show scores for the top X repliers in the public tab (set to 0 to show all repliers)." +msgstr "" + +#: options/preferences.py +msgid "Top replies cutoff" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of all motions and win/loss/selection information. This includes all motions — whether they have been marked as released or not. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release motions tab to public" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of the feedback scores of all adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Release adjudicator tab to public" +msgstr "" + +#: options/preferences.py +msgid "What (if released) the adjudicator tab shows" +msgstr "" + +#: options/preferences.py +msgid "Adjudicator tab displays" +msgstr "" + +#: options/preferences.py +msgid "Only shows base score" +msgstr "" + +#: options/preferences.py +msgid "Only shows final score" +msgstr "" + +#: options/preferences.py +msgid "Shows base, final, and per-round scores" +msgstr "" + +#: options/preferences.py +msgid "Enables public display of every adjudicator's ballot. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release ballots to public" +msgstr "" + +#: options/preferences.py +msgid "This releases all the results for all rounds (including silent and break rounds). Do so only after the tournament is finished!" +msgstr "" + +#: options/preferences.py +msgid "Release all round results to public" +msgstr "" + +#: options/preferences.py +msgid "Enables display of confirmed ballots through private URLs. Intended for use after the tournament." +msgstr "" + +#: options/preferences.py +msgid "Release ballots through private URLs" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Data Entry" +msgstr "" + +#: options/preferences.py +msgid "Whether adjudicators can submit ballots themselves, and how they do so" +msgstr "" + +#: options/preferences.py +msgid "Ballot submissions from adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Disabled (tab staff only)" +msgstr "" + +#: options/preferences.py +msgid "Use private URLs" +msgstr "" + +#: options/preferences.py +msgid "Use publicly accessible form" +msgstr "" + +#: options/preferences.py +msgid "Whether participants can submit feedback themselves, and how they do so" +msgstr "" + +#: options/preferences.py +msgid "Feedback submissions from participants" +msgstr "" + +#: options/preferences.py +msgid "If checked, users must enter a password when submitting public feedback and ballots" +msgstr "" + +#: options/preferences.py +msgid "Require password for submission" +msgstr "" + +#: options/preferences.py +msgid "Value of the password required for public submissions, if passwords are required" +msgstr "" + +#: options/preferences.py +msgid "Password for public submission" +msgstr "" + +#: options/preferences.py +msgid "Bypasses double checking by setting ballots to be automatically confirmed" +msgstr "" + +#: options/preferences.py +msgid "Bypass double checking" +msgstr "" + +#: options/preferences.py +msgid "Requires scores of draft ballots to be re-entered as part of the confirmation stage (to create more stringent check). Only applies to BP formats." +msgstr "" + +#: options/preferences.py +msgid "Enforce blind confirmations" +msgstr "" + +#: options/preferences.py +msgid "Whether assistants can access pages that can reveal matchups and motions ahead of public release (these pages are useful for displaying draws/motions to the public and for printing ballots)." +msgstr "" + +#: options/preferences.py +msgid "Assistant user access" +msgstr "" + +#: options/preferences.py +msgid "All areas (results entry, draw display, and motions)" +msgstr "" + +#: options/preferences.py +msgid "Just results entry and draw display" +msgstr "" + +#: options/preferences.py +msgid "Only results entry" +msgstr "" + +#: options/preferences.py +msgid "Whether participants can check themselves in/out through their private URL." +msgstr "" + +#: options/preferences.py +msgid "Participant self-checkin" +msgstr "" + +#: options/preferences.py +msgid "The amount of time (in hours) before a speaker or adjudicator's check-in event expires" +msgstr "" + +#: options/preferences.py +msgid "Check-In Window (People)" +msgstr "" + +#: options/preferences.py +msgid "The amount of time (in hours) before a room's check-in event expires" +msgstr "" + +#: options/preferences.py +msgid "Check-In Window (Rooms)" +msgstr "" + +#: options/preferences.py +msgid "Whether the printed scoresheets should show the 'circle digits' prompt to help check bad handwriting" +msgstr "" + +#: options/preferences.py +msgid "Ballot Digit Checks" +msgstr "" + +#: options/preferences.py +msgid "The location to return scoresheets to, printed on pre-printed ballots. Set to 'TBA' to hide." +msgstr "" + +#: options/preferences.py +msgid "Score return location" +msgstr "" + +#: options/preferences.py +msgid "The location to return feedback to, printed on pre-printed feedback forms. Set to 'TBA' to hide." +msgstr "" + +#: options/preferences.py +msgid "Feedback return location" +msgstr "" + +#: options/preferences.py +msgid "Lets debates have their status as postponed, as to not block draw generation." +msgstr "" + +#: options/preferences.py +msgid "Enable postponements" +msgstr "" + +#: options/preferences.py +msgid "Have each voting adjudicator submit a separate ballot." +msgstr "" + +#: options/preferences.py +msgid "Individual voting ballots" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Public Features" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing all participants in the tournament" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of participants list" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing all institutions in the tournament" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of institutions list" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing diversity statistics" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of diversity info" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing checkin statuses for individuals, institutions, and teams. Note that this page can be slow when used at very large tournaments." +msgstr "" + +#: options/preferences.py +msgid "Enable public view of the checkin statuses" +msgstr "" + +#: options/preferences.py +msgid "If the participants list is enabled, displays break category eligibility on that page" +msgstr "" + +#: options/preferences.py +msgid "Show break categories on participants page" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page listing pre-allocated sides" +msgstr "" + +#: options/preferences.py +msgid "Show pre-allocated sides to public" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing released draws" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of draw" +msgstr "" + +#: options/preferences.py +msgid "Disabled" +msgstr "" + +#: options/preferences.py +msgid "Show a single page for the current round's draw" +msgstr "" + +#: options/preferences.py +msgid "Show individual pages for all released draws" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing results of non-silent rounds" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of results" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing motions that have been explicitly released to the public" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of motions" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing team standings, showing wins only (not speaker scores or ranking)" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of team standings" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page for each team and adjudicator showing their records" +msgstr "" + +#: options/preferences.py +msgid "Enable public record pages" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing the team breaks. Intended for use after the break announcement." +msgstr "" + +#: options/preferences.py +msgid "Release team breaks to public" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page showing breaking adjudicators. Intended for use after the break announcement." +msgstr "" + +#: options/preferences.py +msgid "Release adjudicators break to public" +msgstr "" + +#: options/preferences.py +msgid "Enables the public page detailing who has unsubmitted feedback" +msgstr "" + +#: options/preferences.py +msgid "Enable public view of unsubmitted feedback" +msgstr "" + +#: options/preferences.py +msgid "List of tournament staff, to be displayed on the tournament home page. Leave this blank or with the default text if you want to not show this information." +msgstr "" + +#: options/preferences.py +msgid "Tournament staff" +msgstr "" + +#: options/preferences.py +msgid "Message to be displayed on the tournament home page" +msgstr "" + +#: options/preferences.py +msgid "Welcome message" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "UI Options" +msgstr "" + +#: options/preferences.py +msgid "If showing results to public, show splitting adjudicators in them" +msgstr "" + +#: options/preferences.py +msgid "Show splitting adjudicators" +msgstr "" + +#: options/preferences.py +msgid "Whether and how to use code names for teams" +msgstr "" + +#: options/preferences.py +msgid "Team code names" +msgstr "" + +#: options/preferences.py +msgid "Do not use code names" +msgstr "" + +#: options/preferences.py +msgid "Use real names everywhere, and show code names in tooltips" +msgstr "" + +#: options/preferences.py +msgid "Use code names for public; real names with code names in tooltips for admins" +msgstr "" + +#: options/preferences.py +msgid "Use code names for public; code names with real names in tooltips for admins" +msgstr "" + +#: options/preferences.py +msgid "Use code names everywhere; do not use tooltips (real names show in some admin views)" +msgstr "" + +#: options/preferences.py +msgid "Whether and how to use code names for participants" +msgstr "" + +#: options/preferences.py +msgid "Participant code names" +msgstr "" + +#: options/preferences.py +msgid "Display team emoji in the public and admin interfaces" +msgstr "" + +#: options/preferences.py +msgid "Show emoji" +msgstr "" + +#: options/preferences.py +msgid "In tables listing teams, adds a column showing their institutions" +msgstr "" + +#: options/preferences.py +msgid "Show team institutions" +msgstr "" + +#: options/preferences.py +msgid "Hide the institutions of adjudicators on public pages and on printed ballots" +msgstr "" + +#: options/preferences.py +msgid "Show adjudicator institutions" +msgstr "" + +#: options/preferences.py +msgid "Enables a hover element on every team's name showing that team's speakers" +msgstr "" + +#: options/preferences.py +msgid "Show speakers in draw" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Notifications" +msgstr "" + +#: options/preferences.py +msgid "The name of the organizer tasked with managing emails (in case of replies)" +msgstr "" + +#: options/preferences.py +msgid "Reply-to name" +msgstr "" + +#: options/preferences.py +msgid "The email address for handling replies" +msgstr "" + +#: options/preferences.py +msgid "Reply-to address" +msgstr "" + +#: options/preferences.py +msgid "A secret key to accept email status events" +msgstr "" + +#: options/preferences.py +msgid "Email status secret key" +msgstr "" + +#: options/preferences.py +msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" +msgstr "" + +#: options/preferences.py +msgid "Ballot receipts" +msgstr "" + +#: options/preferences.py +msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" +msgstr "" + +#: options/preferences.py +msgid "Ballot receipt subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to adjudicators with their submitted ballot." +msgstr "" + +#: options/preferences.py +msgid "Ballot receipt message" +msgstr "" + +#: options/preferences.py +msgid "The subject line for emails sent to speakers with their team points." +msgstr "" + +#: options/preferences.py +msgid "Team points subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to speakers with their team points." +msgstr "" + +#: options/preferences.py +msgid "Team points message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to adjudicators with their assignments." +msgstr "" + +#: options/preferences.py +msgid "Adjudicator draw subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to adjudicators with their assignments." +msgstr "" + +#: options/preferences.py +msgid "Adjudicator draw message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to teams with their draw." +msgstr "" + +#: options/preferences.py +msgid "Team draw subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to participants with their private URLs." +msgstr "" + +#: options/preferences.py +msgid "Private URL notification message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to participants with their private URLs." +msgstr "" + +#: options/preferences.py +msgid "Private URL notification subject line" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to participants on motion release." +msgstr "" + +#: options/preferences.py +msgid "Motion release notification subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to participants on motion release." +msgstr "" + +#: options/preferences.py +msgid "Motion release notification message" +msgstr "" + +#: options/preferences.py +msgid "The subject-line for emails sent to participants informing them of their team registration." +msgstr "" + +#: options/preferences.py +msgid "Team registration notification subject line" +msgstr "" + +#: options/preferences.py +msgid "The message body for emails sent to participants informing them of their team registration." +msgstr "" + +#: options/preferences.py +msgid "Team registration notification message" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Motions" +msgstr "Kiến nghị" + +#: options/preferences.py +msgid "If checked, ballots require a motion to be entered" +msgstr "" + +#: options/preferences.py +msgid "Enable motions" +msgstr "" + +#: options/preferences.py +msgid "Whether the printed scoresheets should hide the text of motions (even if they have been entered and released)" +msgstr "" + +#: options/preferences.py +msgid "Ballot Hide Motions" +msgstr "" + +#: options/preferences.py +msgid "Enables the motion veto field on ballots, to track veto statistics" +msgstr "" + +#: options/preferences.py +msgid "Motion vetoes" +msgstr "" + +#: options/preferences.py +msgid "If showing results to public, show which motions were selected in the record" +msgstr "" + +#: options/preferences.py +msgid "Show motions in results" +msgstr "" + +#: options/preferences.py +msgid "Order in which are listed by round in the public view" +msgstr "" + +#: options/preferences.py +msgid "Order to display motions" +msgstr "" + +#: options/preferences.py +msgid "Earliest round first" +msgstr "" + +#: options/preferences.py +msgid "Latest round first" +msgstr "" + +#: options/preferences.py +msgid "Whether motions can be reused from one round to another." +msgstr "" + +#: options/preferences.py +msgid "Allow motion reuse" +msgstr "" + +#: options/preferences.py options/templates/preferences_index.html +msgid "Global Settings" +msgstr "" + +#: options/preferences.py +msgid "Enables external applications to access the site through a dedicated interface, subject to public information settings." +msgstr "" + +#: options/preferences.py +msgid "Enable API access" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own assistant user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Assistant account creation key" +msgstr "" + +#: options/preferences.py +msgid "A key that enables a secret URL that lets visitors create their own administrator user accounts. The URL takes the form of: YOUR_SITE'S_BASE_URL/accounts/signup/KEY/" +msgstr "" + +#: options/preferences.py +msgid "Administrator account creation key" +msgstr "" + +#: options/presets.py +msgid "Public Information Options" +msgstr "" + +#: options/presets.py +msgid "Enable Public Information" +msgstr "" + +#: options/presets.py +msgid "Disable Public Information" +msgstr "" + +#: options/presets.py +msgid "Australs Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with replies, chosen motions, intermediate brackets, one-up-one-down. Compliant with AIDA rules." +msgstr "" + +#: options/presets.py +msgid "British Parliamentary Rules" +msgstr "" + +#: options/presets.py +msgid "2 vs 2 vs 2 vs 2. Compliant with WUDC rules." +msgstr "" + +#: options/presets.py +msgid "Canadian Parliamentary Rules" +msgstr "" + +#: options/presets.py +msgid "2 vs 2 with replies (unscored) and POIs. May require additional configuration depending on regional variations." +msgstr "" + +#: options/presets.py +msgid "Australian Easters Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 without replies, set motions, novices, intermediate bubbles, one-up-one-down. Compliant with AIDA rules." +msgstr "" + +#: options/presets.py +msgid "2 vs 2 Impromptu" +msgstr "" + +#: options/presets.py +msgid "2 vs 2 with replies, chosen motions, chosen sides, and novice statuses." +msgstr "" + +#: options/presets.py +msgid "3 vs 3 Prepared" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with preallocated sides, publicly displayed sides and motions, and novice statuses." +msgstr "" + +#: options/presets.py +msgid "UADC Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with replies, chosen motions, and all adjudicators can receive feedback from teams." +msgstr "" + +#: options/presets.py +msgid "WSDC Rules" +msgstr "" + +#: options/presets.py +msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." +msgstr "" + +#: options/presets.py +msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." +msgstr "" + +#: options/presets.py +msgid "Tab Release Options" +msgstr "" + +#: options/presets.py +msgid "For when a tab is ready to be released. This will publicly display the results of all rounds, the team tab, the speaker tab, etc" +msgstr "" + +#: options/presets.py +msgid "Use Private URLs" +msgstr "" + +#: options/presets.py +msgid "Enables participant data entry through private URLs." +msgstr "" + +#: options/templates/preferences_index.html +msgid "Configuration" +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." +msgstr "" + +#: options/templates/preferences_index.html +msgid "The range of scores that can awarded to speeches, replies, and teams" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How teams are paired in the draw and how adjudicators are auto-allocated" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How many speeches in a debate, how motions are decided, and whether reply speeches are used" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How teams and speakers are ranked in the released tabs" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How adjudicators are ranked and who can submit feedback" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How and where are motions used" +msgstr "" + +#: options/templates/preferences_index.html +msgid "When to release a public tab is made visible and what data it shows" +msgstr "" + +#: options/templates/preferences_index.html +msgid "How ballots, feedback, and check-ins are entered, including online submission options" +msgstr "" + +#: options/templates/preferences_index.html +msgid "What information the site displays on the publicly accessible pages" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Small tweaks in what information is presented by the interface" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Configures sending notifications, such as emails confirming ballot submissions or team points" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Settings which can affect all tournaments on the site" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Manually Set Current Round" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Tabbycat will prompt you to advance the current round on each round's results page. However, if there are special circumstances that require you to override this and set the current round to something else, use this page." +msgstr "" + +#: options/templates/preferences_index.html +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: options/templates/preferences_index.html +msgid "Rounds can be weighted so that certain rounds are worth more team points." +msgstr "" + +#: options/templates/preferences_index.html +msgid "Presets" +msgstr "" + +#: options/templates/preferences_index.html +msgid "These modify common settings for basic rules; double check our documentation to ensure they are correct for your tournament. Each links will display what settings it changes before applying them." +msgstr "" + +#: options/templates/preferences_index.html +#, python-format +msgid "Apply %(preset)s" +msgstr "" + +#: options/templates/preferences_presets_complete.html +#, python-format +msgid "Presets Applied: %(preset_title)s" +msgstr "" + +#: options/templates/preferences_presets_complete.html +#: options/templates/preferences_presets_confirm.html +#: options/templates/preferences_section_set.html +msgid "Back to Configuration" +msgstr "" + +#: options/templates/preferences_presets_complete.html +msgid "Preferences that were changed" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +#, python-format +msgid "Confirm Presets: %(preset_title)s" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +msgid "Preferences that will not change" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +msgid "Preferences that will change" +msgstr "" + +#: options/templates/preferences_presets_confirm.html +#, python-format +msgid "Apply Presets: %(preset_title)s" +msgstr "" + +#: options/templates/preferences_section_set.html +#, python-format +msgid "Configuration: %(section)s" +msgstr "" + +#: options/templates/preferences_section_set.html +#, python-format +msgid "Edit Configuration: %(section)s" +msgstr "" + +#: options/views.py +#, python-format +msgid "Tournament options (%(section)s) saved." +msgstr "" + +#: options/views.py +#, python-format +msgid "Tournament options saved according to preset %(name)s." +msgstr "" + diff --git a/tabbycat/participants/locale/vi/LC_MESSAGES/django.po b/tabbycat/participants/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..f5b1004e8da --- /dev/null +++ b/tabbycat/participants/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,957 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-25 13:45\n" +"Last-Translator: philip_tc\n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/participants/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 942\n" + +#: participants/admin.py +#, python-format +msgid "The team can't be in a break category of a different tournament. Please remove: %(category)s" +msgstr "" + +#: participants/admin.py +msgid "Emoji & Code" +msgstr "" + +#: participants/admin.py +msgid "Delete URL Key" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d speaker had their URL key removed." +msgid_plural "%(count)d speakers had their URL keys removed." +msgstr[0] "" + +#: participants/admin.py +msgid "Reset emoji" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d team had their emoji reset." +msgid_plural "%(count)d teams had their emojis reset." +msgstr[0] "" + +#: participants/admin.py +msgid "Reset code name" +msgstr "" + +#: participants/admin.py +#, python-format +msgid "%(count)d team had their code name reset." +msgid_plural "%(count)d teams had their code names reset." +msgstr[0] "" + +#: participants/admin.py +#, python-format +msgid "%(count)d adjudicator had their URL key removed." +msgid_plural "%(count)d adjudicators had their URL keys removed." +msgstr[0] "" + +#: participants/apps.py participants/views.py +msgid "Participants" +msgstr "Người tham dự" + +#: participants/models.py +msgid "name" +msgstr "" + +#: participants/models.py +msgid "region" +msgstr "" + +#: participants/models.py +msgid "regions" +msgstr "" + +#. Translators: Change the examples to institutions native to your language; keep consistent between strings +#: participants/models.py +msgid "The institution's full name, e.g., \"University of Cambridge\", \"Victoria University of Wellington\"" +msgstr "" + +#: participants/models.py +msgid "code" +msgstr "" + +#. Translators: Change the examples to institutions native to your language; keep consistent between strings +#: participants/models.py +msgid "What the institution is typically called for short, e.g., \"Cambridge\", \"Vic Wellington\"" +msgstr "" + +#: participants/models.py +msgid "institution" +msgstr "tổ chức" + +#: participants/models.py +msgid "institutions" +msgstr "" + +#: participants/models.py +msgid "tournament" +msgstr "" + +#. Translators: Translate ESL to the acronym for " as a second/foreign language", not "English" +#: participants/models.py +msgid "Name to be displayed, e.g., \"Novice\", \"ESL\"" +msgstr "" + +#: participants/models.py +msgid "slug" +msgstr "" + +#. Translators: Translate esl to the acronym for " as a second/foreign language", not "English" +#: participants/models.py +msgid "Slug for URLs, e.g., \"novice\", \"esl\"" +msgstr "" + +#: participants/models.py +msgid "sequence number" +msgstr "" + +#: participants/models.py +msgid "The order in which the categories are displayed" +msgstr "" + +#: participants/models.py +msgid "limit" +msgstr "" + +#: participants/models.py +msgid "At most this many speakers will be shown on the public tab for this category, or use 0 for no limit" +msgstr "" + +#: participants/models.py +msgid "public" +msgstr "" + +#: participants/models.py +msgid "If checked, this category will be included in the speaker category tabs shown to the public" +msgstr "" + +#: participants/models.py +msgid "speaker category" +msgstr "" + +#: participants/models.py +msgid "speaker categories" +msgstr "" + +#: participants/models.py +msgid "email address" +msgstr "" + +#: participants/models.py +msgid "phone" +msgstr "" + +#: participants/models.py +msgid "anonymous" +msgstr "" + +#: participants/models.py +msgid "Anonymous persons will have their name and team redacted on public tab releases" +msgstr "" + +#: participants/models.py +msgid "code name" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure real name on public-facing pages" +msgstr "" + +#: participants/models.py +msgid "URL key" +msgstr "" + +#: participants/models.py +msgid "male" +msgstr "" + +#: participants/models.py +msgid "female" +msgstr "" + +#: participants/models.py +msgid "other" +msgstr "" + +#: participants/models.py +msgid "gender" +msgstr "" + +#: participants/models.py +msgid "Gender is displayed in the adjudicator allocation interface, and nowhere else" +msgstr "" + +#: participants/models.py +msgid "pronoun" +msgstr "" + +#: participants/models.py +msgid "If printing ballots using Tabbycat, there is the option to pre-print pronouns" +msgstr "" + +#: participants/models.py +msgid "person" +msgstr "" + +#: participants/models.py +msgid "persons" +msgstr "" + +#: participants/models.py +msgid "full name/suffix" +msgstr "" + +#: participants/models.py +msgid "Do not include institution name (see \"uses institutional prefix\" below)" +msgstr "" + +#: participants/models.py +msgid "short name/suffix" +msgstr "" + +#: participants/models.py +msgid "The decoded name shown in the draw, not including institution name (see \"uses institutional prefix\" below)" +msgstr "" + +#: participants/models.py +msgid "Name used to obscure institutional identity on public-facing pages" +msgstr "" + +#: participants/models.py +msgid "short name" +msgstr "" + +#: participants/models.py +msgid "The decoded name shown in the draw, including institution name. (This is autogenerated.)" +msgstr "" + +#: participants/models.py +msgid "long name" +msgstr "" + +#: participants/models.py +msgid "The full name of the team, including institution name. (This is autogenerated.)" +msgstr "" + +#: participants/models.py +msgid "Uses institutional prefix" +msgstr "" + +#: participants/models.py +msgid "If ticked, a team called \"1\" from Victoria will be shown as \"Victoria 1\"" +msgstr "" + +#: participants/models.py +msgid "break categories" +msgstr "" + +#: participants/models.py +msgid "institution conflicts" +msgstr "" + +#: participants/models.py +msgid "none" +msgstr "" + +#: participants/models.py +msgid "swing" +msgstr "đội thay thế" + +#: participants/models.py +msgid "composite" +msgstr "" + +#: participants/models.py +msgid "bye" +msgstr "" + +#: participants/models.py +msgid "type" +msgstr "" + +#: participants/models.py +msgid "emoji" +msgstr "" + +#: participants/models.py +msgid "team" +msgstr "đội" + +#: participants/models.py +msgid "teams" +msgstr "" + +#: participants/models.py +msgid "Teams must have an institution if they are using the institutional prefix." +msgstr "" + +#: participants/models.py +msgid "Teams must have a full name if they don't use the institutional prefix." +msgstr "" + +#: participants/models.py +msgid "Teams must have a short name if they don't use the institutional prefix." +msgstr "" + +#: participants/models.py +msgid "speaker" +msgstr "" + +#: participants/models.py +msgid "speakers" +msgstr "" + +#: participants/models.py +msgid "Adjudicators not assigned to any tournament can be shared between tournaments" +msgstr "" + +#: participants/models.py +msgid "base score" +msgstr "điểm sàn" + +#: participants/models.py +msgid "team conflicts" +msgstr "" + +#: participants/models.py +msgid "adjudicator conflicts" +msgstr "" + +#: participants/models.py +msgid "always trainee" +msgstr "" + +#: participants/models.py +msgid "If checked, this adjudicator will never be auto-allocated a voting position, regardless of their score" +msgstr "" + +#: participants/models.py +msgid "breaking" +msgstr "" + +#: participants/models.py +msgid "independent" +msgstr "" + +#: participants/models.py +msgid "adjudication core" +msgstr "" + +#: participants/models.py +msgid "adjudicator" +msgstr "giám khảo" + +#: participants/models.py +msgid "adjudicators" +msgstr "" + +#: participants/tables.py +msgid "Points after this debate" +msgstr "Điểm sau mỗi trận" + +#: participants/tables.py +msgid "Wins after this debate" +msgstr "" + +#: participants/tables.py +msgid "Speaker scores
    (in speaking order)" +msgstr "" + +#: participants/tables.py +msgid "Speaks" +msgstr "" + +#: participants/templates/adjudicator_record.html +#: participants/templates/team_record.html +#, python-format +msgid "About %(name)s" +msgstr "Về %(name)s" + +#: participants/templates/adjudicator_registration_card.html +msgid "Independent adjudicator" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +msgid "Member of the adjudication core" +msgstr "Thành viên của ban chuyên môn" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Institution:" +msgstr "Tổ chức:" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Unaffiliated" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Region:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +msgid "The institutional affiliations of adjudicators are not public at this tournament." +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Institutional Conflicts:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "; " +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "None" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +msgid "Team Conflicts:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid ", " +msgstr ", " + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Adjudicator Conflicts:" +msgstr "" + +#: participants/templates/adjudicator_registration_card.html +#: participants/templates/team_registration_card.html +msgid "Room Constraints:" +msgstr "" + +#: participants/templates/admin/participants/adjudicator/change_form.html +msgid "Don't forget: If this adjudicator should be conflicted against their own institution, you should add this conflict now in the Adjudicator-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete this %(object_name)s." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "Warning: If there are “debate team” objects in the above list, you probably shouldn't delete the selected %(objects_name)s." +msgstr "" + +#. Translators: This follows the above sentence in the same paragraph. +#: participants/templates/admin/participants/delete_debateteam_warning.html +msgid "This is especially the case if any team that would be deleted has already participated in a debate. If a team already has a result entered for it, deleting the team also deletes those results, which normally breaks the tab, even if you think you don't need those results anymore. If a team has debated and is withdrawing from the tournament, you should not delete it. Just mark the team inactive under the “Availability” section of the Tabbycat admin area." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +msgid "Note that deleting an institution also deletes all teams from that institution." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "If you're very sure about deleting this %(object_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." +msgstr "" + +#: participants/templates/admin/participants/delete_debateteam_warning.html +#, python-format +msgid "If you're very sure about deleting these %(objects_name)s, please delete the above objects first, and be sure to heed the warning that you will see on the “debate team” objects page before proceeding." +msgstr "" + +#: participants/templates/admin/participants/team/change_form.html +msgid "Don't forget: If this team should be conflicted against its own institution, you should add this conflict now in the Team-institution conflicts tab above, because the own-institution conflict is not automatically created when using this form." +msgstr "" + +#: participants/templates/current_round/common.html +#, python-format +msgid "The round begins at %(start_time)s" +msgstr "" + +#: participants/templates/current_round/common.html +msgid "Teams:" +msgstr "Đội:" + +#: participants/templates/current_round/common.html +msgid "Adjudicator:" +msgid_plural "Adjudicators:" +msgstr[0] "Giám khảo:" + +#: participants/templates/current_round/common.html +msgctxt "chair icon" +msgid "Ⓒ" +msgstr "Ⓒ" + +#: participants/templates/current_round/common.html +msgctxt "trainee icon" +msgid "Ⓣ" +msgstr "Ⓣ" + +#: participants/templates/current_round/common.html +msgid "There are no panellists or trainees assigned to this debate." +msgstr "Không có giám khảo phụ hay giám khảo thực tập được phân công trong trận tranh biện này." + +#: participants/templates/current_round/common.html +msgid "Motions are not released to public." +msgstr "" + +#: participants/templates/current_round/common.html +msgid "Motion:" +msgstr "Kiến nghị:" + +#: participants/templates/current_round/common.html +#, python-format +msgid "Motion %(seq)s:" +msgstr "" + +#: participants/templates/current_round/common.html +msgid "The motion(s) for this round haven't yet been released." +msgstr "(Các) kiến nghị cho vòng này chưa được công bố." + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating %(aff)s vs %(neg)s in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is the chair adjudicating in %(room)s." +msgstr "%(adjudicator)s là giám khảo chính chấm ở %(room)s." + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are the chair adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is a %(type)s adjudicating in %(room)s." +msgstr "%(adjudicator)s là %(type)s chấm ở %(room)s." + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are a %(type)s adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "%(adjudicator)s is adjudicating in %(room)s." +msgstr "%(adjudicator)s đang chấm ở %(room)s." + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_adj.html +#, python-format +msgid "You are adjudicating in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating as the %(side)s team against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating against %(opponent)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s is debating as the %(side)s team." +msgstr "%(team)s đang tranh biện trong vị trí %(side)s." + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "You are debating as the %(side)s team." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s's debate is in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "%(team)s's debate is in %(room)s." +msgstr "Trận tranh biện của %(team)s ở %(room)s." + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "Your debate is in %(room)s." +msgstr "" + +#: participants/templates/current_round/round_team.html +#, python-format +msgid "Your debate is in %(room)s." +msgstr "" + +#: participants/templates/edit_speaker_eligibility.html +#, python-format +msgid "It looks like there aren't any speaker categories are defined. If you'd like to produce category-specific speaker tabs, such as a novice or ESL tab, use the Speaker Categories page to define them, then return to this page to set speaker eligibility." +msgstr "" + +#: participants/templates/feedback_progress_panel.html +msgid "Feedback Returns" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Has submitted feedback for %(adjudicator)s" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Has not submitted feedback for one of: %(adjudicators)s (whoever gave the oral adjudication)" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Has not submitted feedback for %(adjudicator)s" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +msgid "More feedback submissions than expected for this debate:" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "Unexpected feedback submission for %(adjudicator)s" +msgstr "" + +#: participants/templates/feedback_progress_panel.html +#, python-format +msgid "%(name)s doesn't have any feedback to submit." +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "In This Round (%(round)s)" +msgstr "Trong vòng này (%(round)s)" + +#: participants/templates/in_this_round.html +msgid "In This Round" +msgstr "" + +#: participants/templates/in_this_round.html +msgid "(Not Released to Public)" +msgstr "" + +#: participants/templates/in_this_round.html +msgid "Room TBA" +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "%(adjudicator)s is not adjudicating this round." +msgstr "" + +#: participants/templates/in_this_round.html +msgid "You are not adjudicating this round." +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "It looks like %(team)s is competing in %(ndebates)s debate this round." +msgid_plural "It looks like %(team)s is competing in %(ndebates)s debates this round." +msgstr[0] "" + +#: participants/templates/in_this_round.html +msgid "If this is an error, please contact a tab director immediately." +msgstr "" + +#: participants/templates/in_this_round.html +#, python-format +msgid "%(team)s does not have a debate this round." +msgstr "" + +#: participants/templates/in_this_round.html +msgid "You do not have a debate this round." +msgstr "" + +#: participants/templates/in_this_round.html +msgid "The draw for this round hasn't yet been released." +msgstr "Bảng đấu cho vòng này chưa được công bố." + +#: participants/templates/participants_subnav.html +msgid "Participants List" +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Institutions List" +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Emails have already been sent." +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Email Team Registrations" +msgstr "" + +#: participants/templates/participants_subnav.html participants/views.py +msgid "Code Names" +msgstr "" + +#: participants/templates/participants_subnav.html +#: participants/templates/speaker_categories_edit.html +msgid "Speaker Categories" +msgstr "" + +#: participants/templates/participants_subnav.html +msgid "Speaker Eligibility" +msgstr "" + +#: participants/templates/speaker_categories_edit.html +msgid "Speaker categories allow category-specific speaker tabs to be produced, e.g., for novice or ESL categories. On this page, you can define what speaker categories exist. After you've defined the categories, you can set speaker eligibility on the Speaker Eligibility page." +msgstr "" + +#: participants/templates/speaker_categories_edit.html +#, python-format +msgid "If you want to delete speaker categories, use the Edit Database area." +msgstr "" + +#: participants/templates/speaker_categories_edit.html +msgid "Save Speaker Categories" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Team name:" +msgstr "Tên đội:" + +#: participants/templates/team_registration_card.html +msgid "Full team name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Short team name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Code name:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "No code name assigned" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Emoji:" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "No emoji assigned" +msgstr "" + +#: participants/templates/team_registration_card.html +msgid "Speakers:" +msgstr "Thành viên:" + +#: participants/templates/team_registration_card.html +msgid "Eligible for break categories:" +msgstr "Có tư cách break trong bảng:" + +#: participants/templates/team_registration_card.html +msgid "Speaker categories:" +msgstr "" + +#: participants/templatetags/team_name_for_data_entry.py +#, python-format +msgid "%(code_name)s (%(real_name)s)" +msgstr "" + +#: participants/views.py +msgid "Adjudicators" +msgstr "Giám khảo" + +#: participants/views.py +msgid "Speakers" +msgstr "Tranh biện viên" + +#: participants/views.py +msgid "Institutions" +msgstr "" + +#: participants/views.py +msgid "Code" +msgstr "" + +#: participants/views.py +msgid "Full name" +msgstr "" + +#: participants/views.py +msgid "Region" +msgstr "" + +#: participants/views.py +msgid "Teams" +msgstr "Đội" + +#: participants/views.py +msgid "Number of teams" +msgstr "" + +#: participants/views.py +msgid "Adjs" +msgstr "" + +#: participants/views.py +msgid "Number of adjudicators, excluding independents" +msgstr "" + +#: participants/views.py +msgid "IAs" +msgstr "" + +#: participants/views.py +msgid "Number of independent adjudicators" +msgstr "" + +#: participants/views.py +msgid "Code name" +msgstr "" + +#: participants/views.py +msgid "Team Registration" +msgstr "" + +#: participants/views.py +msgid "Results" +msgstr "Kết quả" + +#: participants/views.py +#, python-format +msgid "Record for %(name)s" +msgstr "Hồ sơ của %(name)s" + +#: participants/views.py +msgid "Previous Rounds" +msgstr "" + +#: participants/views.py +#, python-format +msgid "Saved category: %(list)s" +msgid_plural "Saved categories: %(list)s" +msgstr[0] "" + +#: participants/views.py +msgid "No changes were made to the categories." +msgstr "" + +#: participants/views.py +msgid "Speaker Category Eligibility" +msgstr "" + diff --git a/tabbycat/printing/locale/vi/LC_MESSAGES/django.po b/tabbycat/printing/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..24bd7ddc7e2 --- /dev/null +++ b/tabbycat/printing/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-25 04:12\n" +"Last-Translator: philip_tc\n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/printing/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 944\n" + +#: printing/templates/feedback_list.html +msgid "Feedback Forms" +msgstr "" + +#: printing/templates/feedback_list.html +#, python-format +msgid "Printable Feedback Forms for %(round)s" +msgstr "" + +#: printing/templates/feedback_list.html +msgid "No feedback questions have been added for either teams or adjudicators to answer." +msgstr "" + +#: printing/templates/feedback_list.html +msgid "No feedback questions have been added for teams to answer." +msgstr "" + +#: printing/templates/feedback_list.html +msgid "No feedback questions have been added for adjudicators to answer." +msgstr "" + +#: printing/templates/feedback_list.html +#, python-format +msgid "%(first_sentence)s Check the documentation for information on how to add these (otherwise these forms will be quite bare)." +msgstr "" + +#: printing/templates/feedback_list.html +msgid "There are no feedback sheets available — perhaps adjudicators have not been allocated?" +msgstr "" + +#: printing/templates/printables_list.html +msgid "Use Ctrl+P for printing or saving to PDF. Be sure to set the appropriate page orientation, to turn off headers/footers and turn on background graphics. Works best in Chrome." +msgstr "" + +#: printing/templates/randomised_url_sheets.html +#, python-format +msgid "Printable %(sheet)s URLs" +msgstr "" + +#: printing/templates/randomised_url_sheets.html +msgid "This page is designed to be printed as double-sided A4 sheets, with the outside facing side showing the participant name and the inside facing side showing the URL. Use CTRL-P to print; for best results use Chrome." +msgstr "" + +#: printing/templates/randomised_url_sheets.html +#, python-format +msgid "Private URL for %(name)s (%(group)s)" +msgstr "" + +#: printing/templates/randomised_url_sheets.html +msgid "Please bookmark the following URL, you will use it to submit forms throughout the tournament:" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Printable Scoresheets" +msgstr "" + +#: printing/templates/scoresheet_list.html +#, python-format +msgid "for %(round)s" +msgstr "cho %(round)s" + +#: printing/templates/scoresheet_list.html +msgid "Edit Motion(s)" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "There are no scoresheets available — perhaps the round has not been drawn?" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Edit Ballot Motions" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "×" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Editing motions here will not save them permanently — it will only update the text used in the printed ballots below. This can be useful if using placeholder motions (to ensure confidentiality) in Tabbycat, but you still want to print ballots with correct motions." +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Motion" +msgstr "Kiến nghị" + +#: printing/templates/scoresheet_list.html +msgid "Changes to motions will update in the displayed ballots automatically" +msgstr "" + +#: printing/templates/scoresheet_list.html +msgid "Speeches are x minutes, the speaker score range is from x to x. You have x minutes to form an adjudication." +msgstr "" + +#: printing/views.py +msgid "Overall Score" +msgstr "" + +#: printing/views.py +msgid "Unaffiliated" +msgstr "" + +#: printing/views.py +msgid "Team" +msgstr "Đội" + diff --git a/tabbycat/privateurls/locale/vi/LC_MESSAGES/django.po b/tabbycat/privateurls/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..d3ab4b4f86c --- /dev/null +++ b/tabbycat/privateurls/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-06-22 12:42\n" +"Last-Translator: philip_tc\n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/privateurls/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 946\n" + +#: privateurls/apps.py +msgid "Private URL Management" +msgstr "" + +#: privateurls/templates/private_urls.html privateurls/views.py +msgid "Private URLs" +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "The private URLs for ballot and/or feedback submission from participants are given below." +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "Private URLs are used to allow participants to submit ballots and/or feedback online. You should use them if you have a means of distributing crazy-looking URLs to participants, and are too worried about fraud to use a publicly accessible page where anyone can enter any submission. The URLs will look something like this:" +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "Anyone with the URL can access the relevant data entry page. The idea is that it's hard to guess another key (the random-looking string), so you should make each URL accessible only to the participant in question. Read more about private URLs." +msgstr "" + +#: privateurls/templates/private_urls.html +#, python-format +msgid "Neither participant ballot submissions, participant feedback submissions, nor participant self-checkins are configured to be from private URLs. Any generated URLs will not be useful unless you configure those settings accordingly on the tournament configuration page." +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "There are no private URLs assigned." +msgstr "" + +#: privateurls/templates/private_urls.html +msgid "Generate Private URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "View URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "Print Teams' URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "Print Adjudicators' URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "All reachable participants have already been sent their private URLs." +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "Email URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "This button only generates private URLs for participants who do not already have one." +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "Generate URLs" +msgstr "" + +#: privateurls/templates/private_urls_nav.html +msgid "All participants already have private URLs." +msgstr "" + +#: privateurls/templates/public_url_landing.html +msgid "Private URL" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "for %(name)s" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "(%(team)s)" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Revoke check-in from %(check_time)s" +msgstr "" + +#: privateurls/templates/public_url_landing.html +msgid "Check in" +msgstr "" + +#. Translators: Include the full-stop; English doesn't because "a.m." already has a full stop. +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "You have been checked in at %(check_time)s" +msgstr "" + +#: privateurls/templates/public_url_landing.html +msgid "You are not currently checked in." +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Submit Ballot for %(round)s" +msgstr "" + +#: privateurls/templates/public_url_landing.html +msgid "Submit Feedback" +msgstr "" + +#: privateurls/templates/public_url_landing.html +#, python-format +msgid "Registration (%(name)s)" +msgstr "" + +#: privateurls/views.py +msgid "no URL" +msgstr "" + +#: privateurls/views.py +msgid "URL" +msgstr "" + +#: privateurls/views.py +msgid "Speakers" +msgstr "Tranh biện viên" + +#: privateurls/views.py +msgid "Adjudicators" +msgstr "Giám khảo" + +#: privateurls/views.py +msgid "All participants already have private URLs. If you want to delete them, use the Edit Database area." +msgstr "" + +#: privateurls/views.py +#, python-format +msgid "A private URL was generated for %(nblank_people)d person." +msgid_plural "Private URLs were generated for all %(nblank_people)d people." +msgstr[0] "" + +#: privateurls/views.py +#, python-format +msgid "The already-existing private URL for %(nexisting_people)d person was left intact." +msgid_plural "The already-existing private URLs for %(nexisting_people)d people were left intact." +msgstr[0] "" + +#: privateurls/views.py +msgid "URL Key" +msgstr "" + +#: privateurls/views.py +msgid "Debates" +msgstr "" + diff --git a/tabbycat/results/locale/vi/LC_MESSAGES/django.po b/tabbycat/results/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..e5f51a24baa --- /dev/null +++ b/tabbycat/results/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,1083 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-03-25 13:45\n" +"Last-Translator: philip_tc\n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/results/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 948\n" + +#: results/admin.py +msgid "Resave results" +msgstr "" + +#: results/admin.py +#, python-format +msgid "Resaved results for %(count)d ballot submission." +msgid_plural "Resaved results for %(count)d ballot submissions." +msgstr[0] "" + +#: results/apps.py results/templates/public_results_index.html results/views.py +msgid "Results" +msgstr "Kết quả" + +#: results/forms.py +msgid "Tournament password" +msgstr "" + +#: results/forms.py +msgid "That password isn't correct." +msgstr "" + +#: results/forms.py +msgid "Please enter a whole number." +msgstr "" + +#: results/forms.py +#, python-format +msgid "Please enter a multiple of %s." +msgstr "" + +#: results/forms.py +msgid "The ballot set can't be both discarded and confirmed." +msgstr "" + +#: results/forms.py +msgid "The debate status can't be confirmed unless one of the ballot sets is confirmed." +msgstr "" + +#: results/forms.py +msgid "---------" +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(aff_team)s affirmed, %(neg_team)s negated" +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(side)s's motion veto" +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(team)s (%(side)s)" +msgstr "%(team)s (%(side)s)" + +#: results/forms.py +msgid "Winner" +msgstr "" + +#: results/forms.py +msgid "Mark as a duplicate speech" +msgstr "" + +#: results/forms.py +#, python-format +msgid "The speaker %(speaker)s doesn't appear to be on team %(team)s." +msgstr "" + +#: results/forms.py +#, python-format +msgid "%(speaker)s appears to have given %(count)d substantive speech." +msgid_plural "%(speaker)s appears to have given %(count)d substantive speeches." +msgstr[0] "" + +#: results/forms.py +msgid "The last substantive speaker and reply speaker can't be the same." +msgstr "" + +#: results/forms.py +msgid "The reply speaker for this team did not give a substantive speech." +msgstr "" + +#: results/forms.py +msgid "The total scores for the teams are the same (i.e. a draw)." +msgstr "" + +#: results/forms.py +msgid "The declared winner does not correspond to the team with the highest score." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The total scores for the following teams are the same: %(teams)s" +msgstr "" + +#: results/forms.py +#, python-format +msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The declared winner does not correspond to the team with the highest score for adjudicator %(adjudicator)s." +msgstr "" + +#: results/forms.py +#, python-format +msgid "The margin (%(margin).1f) in the ballot of adjudicator %(adjudicator)s exceeds the maximum allowable margin (%(max_margin).1f)." +msgstr "" + +#: results/forms.py +msgid "Sides for this debate are not confirmed. You can't save a result for this debate until the sides have been confirmed in the draw." +msgstr "" + +#: results/forms.py +#, python-format +msgid "There must be exactly %(n)d team advancing." +msgid_plural "There must be exactly %(n)d teams advancing." +msgstr[0] "" + +#: results/forms.py +msgid "There must be exactly 1 team advancing." +msgstr "" + +#: results/models.py +msgid "Tab room" +msgstr "" + +#: results/models.py +msgid "Public" +msgstr "" + +#: results/models.py +msgid "timestamp" +msgstr "" + +#: results/models.py +msgid "version" +msgstr "" + +#: results/models.py +msgid "submitter type" +msgstr "" + +#: results/models.py +msgid "confirmed" +msgstr "đã xác nhận" + +#: results/models.py +msgid "from private URL" +msgstr "" + +#: results/models.py +msgid "from participant" +msgstr "" + +#: results/models.py +msgid "submitter" +msgstr "" + +#: results/models.py +msgid "confirmer" +msgstr "" + +#: results/models.py +msgid "confirm timestamp" +msgstr "" + +#: results/models.py +msgid "IP address" +msgstr "" + +#: results/models.py +msgid "A tab room ballot must have a user associated." +msgstr "" + +#: results/models.py +msgid "debate" +msgstr "trận tranh biện" + +#: results/models.py +msgid "motion" +msgstr "kiến nghị" + +#: results/models.py +msgid "discarded" +msgstr "" + +#: results/models.py +msgid "single adjudicator" +msgstr "" + +#: results/models.py +msgid "Whether this submission represents only the submitting adjudicator on a panel, when individual adjudicator ballots are enabled." +msgstr "" + +#: results/models.py +msgid "ballot submission" +msgstr "" + +#: results/models.py +msgid "ballot submissions" +msgstr "" + +#: results/models.py +#, python-format +msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" +msgstr "" + +#: results/models.py +msgid "A ballot can't be both confirmed and discarded!" +msgstr "" + +#: results/models.py +msgid "debate adjudicator" +msgstr "giám khảo tranh biện" + +#: results/models.py +msgid "debate team" +msgstr "đội" + +#: results/models.py +msgid "win" +msgstr "" + +#: results/models.py +msgid "margin" +msgstr "" + +#: results/models.py +msgid "score" +msgstr "điểm" + +#: results/models.py +msgid "team score by adjudicator" +msgstr "" + +#: results/models.py +msgid "team scores by adjudicator" +msgstr "" + +#: results/models.py +msgid "The debate team, debate adjudicator and ballot submission must all relate to the same debate." +msgstr "" + +#: results/models.py +msgid "position" +msgstr "" + +#: results/models.py +msgid "speaker score by adjudicator" +msgstr "" + +#: results/models.py +msgid "speaker scores by adjudicator" +msgstr "" + +#: results/models.py +msgid "points" +msgstr "" + +#: results/models.py +msgid "votes given" +msgstr "" + +#: results/models.py +msgid "votes possible" +msgstr "" + +#: results/models.py +msgid "has ghost score" +msgstr "" + +#: results/models.py +msgid "team score" +msgstr "" + +#: results/models.py +msgid "team scores" +msgstr "" + +#: results/models.py +msgid "speaker" +msgstr "" + +#: results/models.py +msgid "ghost" +msgstr "" + +#: results/models.py +msgid "If checked, this score does not count towards the speaker tab. This is typically checked for speeches where someone spoke twice to make up for an absent teammate (sometimes known as \"iron-person\" or \"iron-man\" speeches)." +msgstr "" + +#: results/models.py +msgid "speaker score" +msgstr "" + +#: results/models.py +msgid "speaker scores" +msgstr "" + +#: results/models.py +msgid "The debate team and speaker must be from the same team." +msgstr "" + +#: results/models.py +msgid "The ballot submission and debate team must relate to the same debate." +msgstr "" + +#: results/tables.py +msgid "Whether this debate's ballot has been checked in" +msgstr "" + +#: results/tables.py +msgid "Status of this debate's ballot" +msgstr "" + +#: results/templates/admin_results.html +msgid "Display Draw" +msgstr "Hiện thị bảng đấu" + +#: results/templates/admin_results.html +msgid "Check-In Ballots" +msgstr "" + +#: results/templates/admin_results.html +msgid "Recent 'Iron-Persons'" +msgstr "" + +#: results/templates/admin_results.html +msgid "Teams who have recently missed a speaker" +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "A speaker from %(team)s gave multiple speeches in the previous round" +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "A speaker from %(team)s gave multiple speeches in the current round" +msgstr "" + +#: results/templates/admin_results.html +msgid "No known cases in the current or previous round" +msgstr "" + +#: results/templates/admin_results.html +msgid "Complete Round" +msgstr "" + +#: results/templates/admin_results.html +msgid "This page automatically updates with the new ballot entries and checkins as they occur. You will, however, need to reload it once all ballots are completed in order to advance the round." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "The following debate appears to have scoresheets from trainees: %(debates_list)s." +msgid_plural "The following %(ndebates)s debates appear to have scoresheets from trainees: %(debates_list)s." +msgstr[0] "" + +#: results/templates/admin_results.html +#, python-format +msgid "This can happen if you demote a panellist to trainee after a result has been submitted for that debate. This may indicate that there is an inconsistency in results data, which may cause unexpected results (or crashes). Please consider going to the Edit Database area and deleting the offending \"speaker scores by adj\" objects, and then opening and resaving the result here." +msgstr "" + +#: results/templates/admin_results.html +msgid "One or more debates in this round appear to have more than one confirmed ballot submission. This can cause unexpected results (or crashes), because Tabbycat assumes that each debate has at most one confirmed ballot submission. This inconsistency can generally only arise if you manipulate the database with SQL queries directly. You'll need to find the offending debate(s) and ballot submissions yourself in the Edit Database area, or if that doesn't work, you might need to find them using SQL queries directly." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please revise this tournament's configuration before you try to enter results." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Add Motions." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "Your tournament configuration allows ballots to be submitted online by adjudicators. The draw must be released before they can do so for this round." +msgstr "" + +#: results/templates/admin_results.html +#, python-format +msgid "Your tournament configuration allows feedback to be submitted online by participants. The draw must be released before they can do so for this round." +msgstr "" + +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html +msgid "Back to All Results" +msgstr "" + +#: results/templates/assistant_enter_results.html +#: results/templates/ballot_entry_base.html +msgid "Create a new ballot set for this debate" +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because you entered it." +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "You can't confirm this ballot set because it is for a single adjudicator. Use the merge function." +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "Confirm results" +msgstr "" + +#: results/templates/assistant_enter_results.html +msgid "Results are incorrect" +msgstr "" + +#: results/templates/assistant_enter_results.html +#: results/templates/enter_results.html +#: results/templates/public_enter_results.html +msgid "Emails will be sent to adjudicators when the ballot is confirmed." +msgstr "" + +#: results/templates/assistant_results.html results/views.py +msgid "Enter Results" +msgstr "Nhập kết quả" + +#: results/templates/assistant_results.html +msgid "This page automatically updates with the new ballot entries and checkins as they occur." +msgstr "" + +#: results/templates/assistant_results.html +msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." +msgstr "" + +#: results/templates/assistant_results.html +msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." +msgstr "" + +#: results/templates/assistant_results.html +#, python-format +msgid "One debate does not have its sides confirmed. Results for this debate cannot be entered until its side allocations are marked as confirmed." +msgid_plural "%(ndebates)s debate do not have their sides confirmed. Results for these debates cannot be entered until their side allocations are marked as confirmed." +msgstr[0] "" + +#: results/templates/assistant_results.html +#, python-format +msgid "One debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." +msgid_plural "%(num_even_panel)s debates have panels with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." +msgstr[0] "" + +#: results/templates/ballot/ballot_debate_info.html +msgid "Debate Information" +msgstr "" + +#: results/templates/ballot/ballot_debate_info.html +msgid "No speakers spoke twice (no 'iron-person' speeches)" +msgstr "" + +#: results/templates/ballot/ballot_debate_info.html +msgid "A speaker spoke twice (an 'iron-person' speech)" +msgstr "" + +#: results/templates/ballot/ballot_scoresheet.html +msgid "Result" +msgstr "Kết quả" + +#: results/templates/ballot/ballot_scoresheet.html +msgid "Rank" +msgstr "" + +#: results/templates/ballot/ballot_scoresheet.html +msgid "Margin" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "There are some problems with this scoresheet. Please review and correct them." +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s (%(institution)s)" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Ballot from %(name)s" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/public_ballot_set.html +msgid "Scoresheet" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Solo Chair" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Chair" +msgstr "" + +#: results/templates/ballot/ballot_set.html +#: results/templates/ballot_entry_form.html +msgid "Panellist" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Trainee" +msgstr "" + +#: results/templates/ballot/ballot_set.html +msgid "Assign sides before entering scores" +msgstr "" + +#: results/templates/ballot/ballot_speaks.html +msgid "Duplicate speeches are hidden from the speaker tab. If a speaker is 'iron-personing' you would typically mark only the lesser of their scores as a duplicate." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "There is %(number)s existing ballot set for this debate." +msgid_plural "There are %(number)s existing ballot sets for this debate." +msgstr[0] "" + +#: results/templates/ballot/other_ballots_list.html +msgid "This ballot set is confirmed." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "This ballot set is discarded." +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "CURRENTLY VIEWING" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "MERGING" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "Version %(version)s," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "entered by %(submitter)s," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "submitted from %(adjudicator)s's private URL," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "submitted from the public form on %(ip_address)s," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "%(timestamp)s (%(timeago)s ago)," +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "unknown" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "confirmed by %(confirmer)s" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "unconfirmed" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +msgid "(discarded)" +msgstr "" + +#: results/templates/ballot/other_ballots_list.html +#, python-format +msgid "(identical to version %(others)s)" +msgid_plural "(identical to versions %(others)s)" +msgstr[0] "" + +#: results/templates/ballot_entry.html +#, python-format +msgid "This ballot entry interface is in beta, if you encounter any problems the older version of the interface is available here." +msgstr "" + +#: results/templates/ballot_entry_base.html +msgid "This debate has a panel with an even number of voting adjudicators. If the adjudicators split evenly, the debate will be awarded to the team for which the chair voted." +msgstr "" + +#: results/templates/ballot_entry_base.html +#, python-format +msgid "%(team)s had speakers who spoke multiple times in the last round — i.e. an 'iron' person speech. Please carefully check the ballot to see if that is still the case for this round. If it is, ensure the speakers selected below reflect this." +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Scoresheet from chair %(chair)s" +msgstr "" + +#: results/templates/ballot_entry_form.html +msgid "Scoresheet, no chair set" +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Error with %(pos)s's speaker field: %(error)s" +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Error with %(pos)s's duplicate speaker field: %(error)s" +msgstr "" + +#: results/templates/ballot_entry_form.html +#, python-format +msgid "Error with %(pos)s's score field: %(error)s" +msgstr "" + +#: results/templates/debate_postponement_form.html +msgid "Postponed" +msgstr "" + +#: results/templates/debate_postponement_form.html +msgid "Postpone" +msgstr "" + +#: results/templates/enter_results.html +msgid "Ballot Status" +msgstr "" + +#: results/templates/enter_results.html +msgid "only the confirmed ballot set will affect this debate's result" +msgstr "" + +#: results/templates/enter_results.html +msgid "Debate Status" +msgstr "" + +#: results/templates/enter_results.html +msgid "all debates must be confirmed to complete the round" +msgstr "" + +#: results/templates/enter_results.html +msgid "Save Ballot" +msgstr "" + +#: results/templates/enter_results.html +msgid "Cancel Entry" +msgstr "" + +#: results/templates/includes/public_enter_results_info.html +#, python-format +msgid "The URL of this page is personalised to you, %(name)s. Do not share it with anyone; anyone who knows this URL can submit results and/or feedback for your debates. You may bookmark this page and return here after each debate for the available actions." +msgstr "" + +#: results/templates/privateurl_ballot_set.html +#: results/templates/privateurl_ballot_set_error.html +#, python-format +msgid "The page is provided to allow you, %(name)s, to verify your own scoresheet. You must not share this URL with anyone. Sharing the URL will allow others to access all actions from your personal landing page." +msgstr "" + +#: results/templates/privateurl_ballot_set_error.html +#: results/templates/public_ballot_set_error.html +msgid "Ballot Not Available" +msgstr "" + +#: results/templates/privateurl_ballot_set_error.html +#, python-format +msgid "Back to your private landing page." +msgstr "" + +#: results/templates/public_add_ballot.html +#: results/templates/public_add_ballot_unreleased.html +msgid "Enter Ballot" +msgstr "" + +#: results/templates/public_add_ballot.html +msgid "Who are you?" +msgstr "" + +#: results/templates/public_add_ballot.html +msgid "(click your name on this list)" +msgstr "" + +#: results/templates/public_add_ballot_unreleased.html +#, python-format +msgid "The draw and/or motions for %(round)s have yet to be released." +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "Ballot for %(matchup)s" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "%(round)s @ %(room)s" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Return to landing page" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "Return to Results for %(round)s" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Motion" +msgstr "Kiến nghị" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "From %(name)s (%(institution)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "Total for %(name)s (%(side)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +#, python-format +msgid "%(name)s (%(side)s)" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Won" +msgstr "" + +#: results/templates/public_ballot_set.html +msgid "Lost" +msgstr "" + +#: results/templates/public_ballot_set_error.html +#, python-format +msgid "Back to the tournament home page." +msgstr "" + +#: results/templates/public_enter_results.html +#, python-format +msgid "%(adjudicator)s, note that you must enter all of the ballots from your panel, not just your own!" +msgstr "" + +#: results/templates/public_enter_results.html +msgid "Some information, such as speaker order, shown is based on a previous ballot. If anything is incorrect, please correct it and contact the tab team." +msgstr "" + +#: results/templates/public_enter_results.html +#, python-format +msgid "This form has already been submitted once. Please contact a tab official after submitting your form." +msgid_plural "This form has already been submitted %(nsubmissions)s times. Please contact a tab official after submitting your form." +msgstr[0] "" + +#: results/templates/public_enter_results.html +msgid "Submit Ballot" +msgid_plural "Submit Ballots" +msgstr[0] "" + +#: results/templates/public_enter_results.html +msgid "When submitting this form your IP address will be stored for logging purposes." +msgstr "" + +#: results/templates/public_enter_results_error.html +#, python-format +msgid "No Result to Enter (%(adjudicator)s)" +msgstr "" + +#: results/templates/public_enter_results_error.html +msgid "No Result to Enter" +msgstr "" + +#: results/templates/public_results_for_round.html +msgid "View by Team" +msgstr "Xem theo đội" + +#: results/templates/public_results_for_round.html +msgid "View by Debate" +msgstr "Xem theo trận" + +#: results/templates/public_results_index.html +#, python-format +msgid "Results for %(round)s" +msgstr "" + +#: results/templates/public_results_not_available.html +#: results/templates/public_results_silent.html +msgid "Results Not Available" +msgstr "" + +#: results/templates/public_results_not_available.html +#, python-format +msgid "The results for %(round)s aren't yet available." +msgstr "" + +#: results/templates/public_results_silent.html +#, python-format +msgid "%(round)s is a silent round." +msgstr "" + +#: results/utils.py +msgid "No Ballot" +msgstr "" + +#: results/utils.py +msgid "Debate was Postponed" +msgstr "" + +#: results/utils.py +msgid "Ballot is Unconfirmed" +msgstr "" + +#: results/utils.py +msgid "Ballot is Confirmed" +msgstr "" + +#. Translators: e.g. "{Melbourne 1} as {OG}", "{Cape Town 1} as {CO}" +#: results/utils.py +#, python-format +msgid "%(team)s as %(side)s" +msgstr "" + +#: results/utils.py +#, python-format +msgid "%(team)s (%(side)s) won" +msgstr "" + +#. Translators: The team here is the losing team +#: results/utils.py +#, python-format +msgid "vs %(team)s (%(side)s)" +msgstr "" + +#: results/utils.py +#, python-format +msgid "Advancing: %(advancing_list)s
    " +msgstr "" + +#: results/utils.py +#, python-format +msgid "Eliminated: %(eliminated_list)s" +msgstr "" + +#: results/utils.py +#, python-format +msgid "1st: %(first_team)s
    " +msgstr "" + +#: results/utils.py +#, python-format +msgid "2nd: %(second_team)s
    \n" +"3rd: %(third_team)s
    \n" +"4th: %(fourth_team)s" +msgstr "" + +#: results/utils.py +#, python-format +msgid "Error with result for %(debate)s" +msgstr "" + +#. Translators: Abbreviation for Prime Minister +#: results/utils.py +msgid "PM" +msgstr "" + +#. Translators: Abbreviation for Deputy Prime Minister +#: results/utils.py +msgid "DPM" +msgstr "" + +#. Translators: Abbreviation for Leader of the Opposition +#: results/utils.py +msgid "LO" +msgstr "" + +#. Translators: Abbreviation for Deputy Leader of the Opposition +#: results/utils.py +msgid "DLO" +msgstr "" + +#. Translators: Abbreviation for Member for the Government +#: results/utils.py +msgid "MG" +msgstr "" + +#. Translators: Abbreviation for Government Whip +#: results/utils.py +msgid "GW" +msgstr "" + +#. Translators: Abbreviation for Member for the Opposition +#: results/utils.py +msgid "MO" +msgstr "" + +#. Translators: Abbreviation for Opposition Whip +#: results/utils.py +msgid "OW" +msgstr "" + +#: results/utils.py +msgid "Reply" +msgstr "" + +#: results/views.py +msgid " vs " +msgstr " đối đầu với " + +#: results/views.py +#, python-format +msgid "%(matchup)s: %(round)s @ %(room)s" +msgstr "" + +#: results/views.py +msgid "N/A" +msgstr "" + +#: results/views.py +msgid "New Ballot Set" +msgstr "" + +#: results/views.py +#, python-format +msgid "Ballot set for %(debate)s added." +msgstr "" + +#: results/views.py +msgid " Email receipts queued to be sent." +msgstr "" + +#: results/views.py +#, python-format +msgid "Whoops! The debate %(debate)s doesn't have a chair, so you can't enter results for it." +msgstr "" + +#: results/views.py +#, python-format +msgid "Whoops! The debate %(debate)s doesn't have its sides confirmed, so you can't enter results for it." +msgstr "" + +#: results/views.py +msgid "Edit Ballot Set" +msgstr "" + +#: results/views.py +#, python-format +msgid "Ballot set for %(matchup)s discarded." +msgstr "" + +#: results/views.py +#, python-format +msgid "Ballot set for %(matchup)s confirmed." +msgstr "" + +#: results/views.py +#, python-format +msgid "Edits to ballot set for %(matchup)s saved." +msgstr "" + +#: results/views.py +#, python-format +msgid "Thanks, %(user)s! Your ballot for %(debate)s has been recorded." +msgstr "" + +#: results/views.py +msgid "The draw for this round hasn't been released yet." +msgstr "" + +#: results/views.py +msgid "The motions for this round haven't been released yet." +msgstr "" + +#: results/views.py +msgid "It looks like you don't have a debate this round." +msgstr "" + +#: results/views.py +msgid "It looks like you're assigned to two or more debates this round. Please contact a tab room official." +msgstr "" + +#: results/views.py +msgid "Your debate doesn't have a chair, so you can't enter results for it. Please contact a tab room official." +msgstr "" + +#: results/views.py +msgid "It looks like the sides for this debate haven't yet been confirmed, so you can't enter results for it. Please contact a tab room official." +msgstr "" + +#: results/views.py +msgid "It looks like you were assigned to two or more debates. Please contact a tab room official." +msgstr "" + +#: results/views.py +#, python-format +msgid "This debate is in %s, which is a silent round." +msgstr "" + +#: results/views.py +#, python-format +msgid "This debate is in %s, the results for which aren't available yet." +msgstr "" + +#: results/views.py +#, python-format +msgid "The result for debate %s is not confirmed." +msgstr "" + +#: results/views.py +#, python-format +msgid "The debate %s does not have a confirmed ballot." +msgstr "" + +#: results/views.py +#, python-format +msgid "There is no result yet for debate %s." +msgstr "" + +#: results/views.py +#, python-format +msgid "Add result from %(adjudicator)s" +msgstr "" + +#: results/views.py +msgid "Adjudicator" +msgstr "" + +#: results/views.py +msgid "Merge Ballots" +msgstr "" + +#: results/views.py +msgid "The speaking order in the ballots is inconsistent, so could not be merged." +msgstr "" + +#: results/views.py +msgid "Duplicate speeches are marked inconsistently, so could not be merged." +msgstr "" + +#: results/views.py +#, python-format +msgid " This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s)." +msgstr "" + diff --git a/tabbycat/standings/locale/vi/LC_MESSAGES/django.po b/tabbycat/standings/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..30442a6f48c --- /dev/null +++ b/tabbycat/standings/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,612 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-03-25 13:45\n" +"Last-Translator: philip_tc\n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/standings/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 950\n" + +#: standings/base.py +msgid "The same metric would be added twice:" +msgstr "" + +#: standings/base.py +msgid "The same ranking would be added twice:" +msgstr "" + +#: standings/base.py +#, python-format +msgid "Unrecognized metric code: \"%(code)s\"" +msgstr "" + +#: standings/diversity.py +msgid "All" +msgstr "" + +#: standings/diversity.py +msgid "Breaking" +msgstr "" + +#: standings/diversity.py +#, python-format +msgid "Not %(category)s" +msgstr "" + +#: standings/diversity.py +msgid "All Speakers" +msgstr "" + +#: standings/diversity.py +msgid "IAs" +msgstr "" + +#: standings/diversity.py +msgid "Chairs" +msgstr "" + +#: standings/diversity.py +msgid "Panellists" +msgstr "" + +#: standings/diversity.py +msgid "Trainees" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating" +msgstr "" + +#: standings/diversity.py +msgid "Median Rating" +msgstr "" + +#: standings/diversity.py +msgid "Upper Quartile Rating" +msgstr "" + +#: standings/diversity.py +msgid "Lower Quartile Rating" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Teams" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Chairs" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Panellists" +msgstr "" + +#: standings/diversity.py +msgid "Average Rating From Trainees" +msgstr "" + +#: standings/diversity.py +msgid "Average Score" +msgstr "" + +#: standings/diversity.py +msgid "Median Score" +msgstr "" + +#: standings/diversity.py +msgid "Upper Quartile Score" +msgstr "" + +#: standings/diversity.py +msgid "Lower Quartile Score" +msgstr "" + +#: standings/diversity.py +msgid "Reply Speaker Average" +msgstr "" + +#: standings/diversity.py +#, python-format +msgid "Speaker %(num)d Average" +msgstr "" + +#: standings/diversity.py +msgid "Average Finals Score" +msgstr "" + +#: standings/speakers.py +msgid "total" +msgstr "" + +#: standings/speakers.py +msgid "Total" +msgstr "" + +#: standings/speakers.py +msgid "average" +msgstr "" + +#: standings/speakers.py +msgid "Avg" +msgstr "" + +#: standings/speakers.py +msgid "team points" +msgstr "" + +#: standings/speakers.py +msgid "Team" +msgstr "Đội" + +#: standings/speakers.py +msgid "standard deviation" +msgstr "" + +#: standings/speakers.py +msgid "Stdev" +msgstr "" + +#: standings/speakers.py +msgid "number of speeches given" +msgstr "" + +#: standings/speakers.py +msgid "Num" +msgstr "" + +#: standings/speakers.py +msgid "replies given" +msgstr "" + +#: standings/speakers.py +msgid "trimmed mean (high-low drop)" +msgstr "" + +#: standings/speakers.py +msgid "Trim" +msgstr "" + +#: standings/teams.py +msgid "points" +msgstr "" + +#: standings/teams.py +msgid "Pts" +msgstr "" + +#: standings/teams.py +msgid "wins" +msgstr "" + +#: standings/teams.py standings/views.py +msgid "Wins" +msgstr "" + +#: standings/teams.py +msgid "total speaker score" +msgstr "" + +#: standings/teams.py +msgid "Spk" +msgstr "" + +#: standings/teams.py +msgid "average total speaker score" +msgstr "" + +#: standings/teams.py +msgid "ATSS" +msgstr "" + +#: standings/teams.py +msgid "speaker score standard deviation" +msgstr "" + +#: standings/teams.py +msgid "SSD" +msgstr "" + +#: standings/teams.py +msgid "sum of margins" +msgstr "" + +#: standings/teams.py +msgid "Marg" +msgstr "" + +#: standings/teams.py +msgid "average margin" +msgstr "" + +#: standings/teams.py +msgid "AWM" +msgstr "" + +#: standings/teams.py +msgid "average individual speaker score" +msgstr "" + +#: standings/teams.py +msgid "AISS" +msgstr "" + +#: standings/teams.py +msgid "draw strength by wins" +msgstr "" + +#: standings/teams.py +msgid "DS" +msgstr "" + +#: standings/teams.py +msgid "draw strength by total speaker score" +msgstr "" + +#: standings/teams.py +msgid "DSS" +msgstr "" + +#: standings/teams.py +msgid "number of pullups before this round" +msgstr "" + +#: standings/teams.py +msgid "PU" +msgstr "" + +#: standings/teams.py +msgid "number of adjudicators who voted for this team" +msgstr "" + +#: standings/teams.py +msgid "Ballots" +msgstr "" + +#: standings/teams.py +msgid "votes/ballots carried" +msgstr "" + +#: standings/teams.py +msgid "number of firsts" +msgstr "" + +#: standings/teams.py +msgid "1sts" +msgstr "" + +#: standings/teams.py +msgid "number of seconds" +msgstr "" + +#: standings/teams.py +msgid "2nds" +msgstr "" + +#: standings/teams.py +msgid "number of thirds" +msgstr "" + +#: standings/teams.py +msgid "3rds" +msgstr "" + +#: standings/teams.py +msgid "number of times ironed" +msgstr "" + +#: standings/teams.py +msgid "Irons" +msgstr "" + +#: standings/teams.py +msgid "Who-beat-whom" +msgstr "" + +#: standings/teams.py +msgid "WBW" +msgstr "" + +#: standings/teams.py +msgid "who-beat-whom" +msgstr "" + +#: standings/templates/current_standings.html +msgid "It also excludes results from silent rounds (if any) and from the current round." +msgstr "Bảng xếp hạng cũng sẽ không hiển thị kết quả của vòng im lặng và vòng hiện tại." + +#: standings/templates/current_standings.html +#, python-format +msgid "This list is sorted by team points, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" +msgstr "Bàng được sắp xếp dựa trên điểm của mỗi đội, rồi theo bảng chữ cái của mỗi đội. Bảng xếp hạng không hiển thị chính xác thứ hạng của mỗi đội trong mỗi khung điểm. %(silent_round_sentence)s" + +#: standings/templates/current_standings.html +#, python-format +msgid "This list is sorted by number of wins, then alphabetically by team name. It does not indicate each team's ranking within each bracket. %(silent_round_sentence)s" +msgstr "" + +#: standings/templates/current_standings_no_round.html +msgid "There aren't any rounds for which results are available." +msgstr "" + +#: standings/templates/reply_standings.html +msgid "Reply speakers are ranked by their average reply score." +msgstr "" + +#: standings/templates/reply_standings.html +#, python-format +msgid "Speakers can miss up to %(count)s reply speeches before they are omitted from the replies tab." +msgstr "" + +#: standings/templates/reply_standings.html +msgid "All reply speakers appear in these standings, no matter how many replies they've missed." +msgstr "" + +#: standings/templates/reply_standings.html +#: standings/templates/speaker_standings.html +#, python-format +msgid "These settings can be changed in the Standings section of this tournament's configuration." +msgstr "" + +#: standings/templates/speaker_standings.html +#, python-format +msgid "The speaker standings precedence is empty. This means that speakers aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the speaker standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be total or average." +msgstr "" + +#: standings/templates/speaker_standings.html +msgid "Speakers are ranked by their average score." +msgstr "" + +#: standings/templates/speaker_standings.html +msgid "Speakers are ranked by their total score. Any speaker who misses a single debate will be severely punished in these rankings." +msgstr "" + +#: standings/templates/speaker_standings.html +#, python-format +msgid "Speakers can miss up to %(count)s debates before they are omitted from the speaker tab." +msgstr "" + +#: standings/templates/speaker_standings.html +msgid "All speakers appear in these standings, no matter how many debates they've missed." +msgstr "" + +#: standings/templates/speaker_standings.html +#, python-format +msgid "Enforcing the limit on the number of missed debates requires the \"number of speeches given\" metric to be included in the speaker standings calculations, so it's been automatically added. To remove this warning message, add Number of speeches given to the Speaker standings extra metrics in the Standings section of this tournament's configuration." +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Diversity Overview" +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "The results data displayed here is presented without tests for statistical significance. Correlations should not be automatically considered reliable; particularly at small tournaments. A 'region' is a customisable category assigned to a set of institutions, and counted using the number of participants assigned to those institutions." +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Non-cis male identifying" +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Cis-male identifying" +msgstr "" + +#: standings/templates/standings_diversity.html +msgid "Unspecified/unrecorded" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Standings" +msgstr "Xếp hạng" + +#: standings/templates/standings_index.html +msgid "Top Speaks" +msgstr "" + +#: standings/templates/standings_index.html +#, python-format +msgid "%(speaker)s in %(round)s" +msgstr "" + +#: standings/templates/standings_index.html +msgid "No data yet" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Bottom Speaks" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Largest Margins" +msgstr "" + +#: standings/templates/standings_index.html +#, python-format +msgid "%(team)s vs %(opp)s in %(round)s" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Closest Margins" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Top Team Scores" +msgstr "" + +#: standings/templates/standings_index.html +#, python-format +msgid "%(team)s in %(round)s" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Bottom Team Scores" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Most/Least Popular Motions" +msgstr "" + +#: standings/templates/standings_index.html +msgid "Average Speaks" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Overview" +msgstr "Tổng quan" + +#: standings/templates/standings_menu.html +msgid "Teams" +msgstr "Đội" + +#: standings/templates/standings_menu.html +msgctxt "All [Teams]" +msgid "All" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Speakers" +msgstr "Tranh biện viên" + +#: standings/templates/standings_menu.html +msgctxt "Substantive speeches" +msgid "Substantives" +msgstr "" + +#: standings/templates/standings_menu.html +msgctxt "All [Speakers]" +msgid "All" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Speakers " +msgstr "" + +#: standings/templates/standings_menu.html +#, python-format +msgid "%(category)s" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Replies" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Motions" +msgstr "Kiến nghị" + +#: standings/templates/standings_menu.html +msgid "By Round" +msgstr "" + +#: standings/templates/standings_menu.html +msgid "Diversity" +msgstr "" + +#: standings/templates/team_standings.html +#, python-format +msgid "The team standings precedence is empty. This means that teams aren't ranked according to any metrics, so everyone is first equal. If this isn't what you intended, set the team standings precedence in the Standings section of this tournament's configuration. In most tournaments, the first metric should be points or wins." +msgstr "" + +#: standings/views.py +#, python-format +msgid "

    There was an error generating the standings: %(message)s

    " +msgstr "" + +#: standings/views.py +#, python-format +msgid "

    You may need to double-check the standings configuration under the Setup section. If this issue persists and you're not sure how to fix it, please contact the developers.

    " +msgstr "" + +#: standings/views.py +msgid "

    The tab director will need to resolve this issue.

    " +msgstr "" + +#: standings/views.py +#, python-format +msgid "as of %(round)s" +msgstr "" + +#. Translators: 'title' is the main title; "(Top 15 Only)" is just a suffix +#: standings/views.py +#, python-format +msgid "%(title)s (Top %(limit)d Only)" +msgstr "" + +#: standings/views.py +msgid "The tab can't be displayed because all rounds so far in this tournament are silent." +msgstr "" + +#: standings/views.py +msgid "Speaker Standings" +msgstr "" + +#: standings/views.py +msgid "Speaker Tab" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Speaker Standings" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Speaker Tab" +msgstr "" + +#: standings/views.py +msgid "Reply Speaker Standings" +msgstr "" + +#: standings/views.py +msgid "Reply speeches aren't enabled in this tournament." +msgstr "" + +#: standings/views.py +msgid "Reply Speaker Tab" +msgstr "" + +#: standings/views.py +msgid "Team Standings" +msgstr "" + +#: standings/views.py +msgid "Team Tab" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Team Standings" +msgstr "" + +#: standings/views.py +#, python-format +msgid "%(category)s Team Tab" +msgstr "" + +#: standings/views.py +msgid "Current Team Standings" +msgstr "Bảng xếp hạng đội hiện tại" + +#: standings/views.py +msgid "Points" +msgstr "Điểm" + +#: standings/views.py +msgid "Feedback Overview" +msgstr "" + +#: standings/views.py +msgid "An adjudicator's score is determined by a customisable mix of their base score and their feedback ratings. The current mix is specified below as the 'Score Components.' Feedback ratings are determined by averaging the results of all individual pieces of feedback across all rounds. Read more." +msgstr "" + diff --git a/tabbycat/tournaments/locale/vi/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..bb6bc12bb69 --- /dev/null +++ b/tabbycat/tournaments/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,1031 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-03-25 13:46\n" +"Last-Translator: philip_tc\n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/tournaments/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 952\n" + +#: tournaments/apps.py +msgid "Tournaments" +msgstr "" + +#: tournaments/forms.py +msgid "Number of preliminary rounds" +msgstr "" + +#: tournaments/forms.py +msgid "Number of teams in the open break" +msgstr "" + +#: tournaments/forms.py +msgid "Leave blank if there are no break rounds." +msgstr "" + +#: tournaments/forms.py +msgid "Did you agree with their decision?" +msgstr "" + +#: tournaments/forms.py +msgid "Agree?" +msgstr "" + +#: tournaments/forms.py +msgid "Comments" +msgstr "" + +#. Translators: This is the name given to the 'Open Break'. +#: tournaments/forms.py +msgid "Open" +msgstr "" + +#: tournaments/forms.py +msgid "Format Configuration" +msgstr "" + +#: tournaments/forms.py +msgid "Apply a standard set of settings to match a common debate format" +msgstr "" + +#: tournaments/forms.py +msgid "Public Configuration" +msgstr "" + +#: tournaments/forms.py +msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" +msgstr "" + +#: tournaments/forms.py +msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" +msgstr "" + +#: tournaments/forms.py +msgid "Current preliminary round" +msgstr "" + +#: tournaments/forms.py +msgid "All preliminary rounds have been completed" +msgstr "" + +#: tournaments/forms.py +#, python-format +msgid "Current elimination round in %(category)s (only if all preliminary rounds have been completed)" +msgstr "" + +#: tournaments/forms.py +#, python-format +msgid "All elimination rounds in %(category)s have been completed" +msgstr "" + +#: tournaments/forms.py +msgid "If the current round is a preliminary round, this field must be blank." +msgstr "" + +#: tournaments/forms.py +msgid "If all preliminary rounds have been completed, this field is required." +msgstr "" + +#: tournaments/forms.py +#, python-format +msgid "%(name)s (%(abbreviation)s)" +msgstr "" + +#: tournaments/mixins.py +#, python-format +msgid "You've been redirected to this page because tournament %(tournament)s has no rounds. Please create some before returning to the admin site." +msgstr "" + +#: tournaments/mixins.py +#, python-format +msgid "There's a problem with the data for the tournament %(tournament)s. Please contact a tab director and ask them to investigate." +msgstr "" + +#: tournaments/mixins.py +msgid "You've been redirected to this page because of a problem with how teams are assigned to sides in a debate." +msgstr "" + +#: tournaments/mixins.py +msgid "There's a problem with how teams are assigned to sides in a debate. The tab director will need to resolve this issue." +msgstr "" + +#: tournaments/mixins.py tournaments/templates/round_complete_check.html +#, python-format +msgid "for %(round)s" +msgstr "cho %(round)s" + +#: tournaments/mixins.py +msgid "Return to Draw" +msgstr "" + +#: tournaments/models.py +msgid "You can't use this as a tournament slug, because it's reserved for a Tabbycat system URL. Please try another one." +msgstr "" + +#: tournaments/models.py +msgid "name" +msgstr "" + +#: tournaments/models.py +msgid "The full name, e.g. \"Australasian Intervarsity Debating Championships 2016\"" +msgstr "" + +#: tournaments/models.py +msgid "short name" +msgstr "" + +#: tournaments/models.py +msgid "The name used in the menu, e.g. \"Australs 2016\"" +msgstr "" + +#: tournaments/models.py +msgid "sequence number" +msgstr "" + +#: tournaments/models.py +msgid "A number that determines the relative order in which tournaments are displayed on the homepage." +msgstr "" + +#: tournaments/models.py +msgid "slug" +msgstr "" + +#: tournaments/models.py +msgid "The sub-URL of the tournament, cannot have spaces, e.g. \"australs2016\"" +msgstr "" + +#: tournaments/models.py +msgid "active" +msgstr "" + +#: tournaments/models.py +msgid "tournament" +msgstr "" + +#: tournaments/models.py +msgid "tournaments" +msgstr "" + +#: tournaments/models.py +msgid "Random" +msgstr "" + +#: tournaments/models.py +msgid "Manual" +msgstr "" + +#: tournaments/models.py +msgid "Round-robin" +msgstr "" + +#: tournaments/models.py +msgid "Power-paired" +msgstr "" + +#: tournaments/models.py +msgid "Elimination" +msgstr "" + +#: tournaments/models.py +msgid "Preliminary" +msgstr "" + +#: tournaments/models.py +msgid "None" +msgstr "" + +#: tournaments/models.py +msgid "Draft" +msgstr "" + +#: tournaments/models.py +msgid "Confirmed" +msgstr "" + +#: tournaments/models.py +msgid "Released" +msgstr "" + +#: tournaments/models.py +msgid "A number that determines the order of the round, should count consecutively from 1 for the first round" +msgstr "" + +#: tournaments/models.py +msgid "completed" +msgstr "" + +#: tournaments/models.py +msgid "True if the round is over, which normally means all results have been entered and confirmed" +msgstr "" + +#: tournaments/models.py +msgid "e.g. \"Round 1\"" +msgstr "" + +#: tournaments/models.py +msgid "abbreviation" +msgstr "" + +#: tournaments/models.py +msgid "e.g. \"R1\"" +msgstr "" + +#: tournaments/models.py +msgid "stage" +msgstr "" + +#: tournaments/models.py +msgid "Preliminary = inrounds, elimination = outrounds" +msgstr "" + +#: tournaments/models.py +msgid "draw type" +msgstr "" + +#: tournaments/models.py +msgid "Which draw method to use" +msgstr "" + +#: tournaments/models.py +msgid "break category" +msgstr "" + +#: tournaments/models.py +msgid "If elimination round, which break category" +msgstr "" + +#: tournaments/models.py +msgid "draw status" +msgstr "" + +#: tournaments/models.py +msgid "The status of this round's draw" +msgstr "" + +#: tournaments/models.py +msgid "feedback weight" +msgstr "" + +#: tournaments/models.py +#, no-python-format +msgid "The extent to which each adjudicator's overall score depends on feedback vs their base score. At 0, it is 100% drawn from their base score, at 1 it is 100% drawn from feedback." +msgstr "" + +#. Translators: A silent round is a round for which results are not disclosed once the round is over. +#: tournaments/models.py +msgid "silent" +msgstr "" + +#: tournaments/models.py +msgid "If marked silent, information about this round (such as its results) will not be shown publicly." +msgstr "" + +#: tournaments/models.py +msgid "motions released" +msgstr "" + +#: tournaments/models.py +msgid "Whether motions will appear on the public website, assuming that feature is turned on" +msgstr "" + +#: tournaments/models.py +msgid "starts at" +msgstr "" + +#: tournaments/models.py +msgid "weight" +msgstr "" + +#: tournaments/models.py +msgid "A factor for the points received in the round. For example, if 2, all points are doubled." +msgstr "" + +#: tournaments/models.py +msgid "round" +msgstr "" + +#: tournaments/models.py +msgid "rounds" +msgstr "" + +#: tournaments/models.py +msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." +msgstr "" + +#: tournaments/models.py +msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." +msgstr "" + +#: tournaments/models.py +msgid "Elimination rounds must have a break category." +msgstr "" + +#: tournaments/templates/assistant_tournament_index.html +msgid "Dashboard" +msgstr "" + +#: tournaments/templates/assistant_tournament_index.html +msgid "Overview" +msgstr "Tổng quan" + +#: tournaments/templates/assistant_tournament_index.html +#, python-format +msgid "current round: %(round)s, status: %(status)s" +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "Welcome to Tabbycat!" +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "To get started, you'll need to create the first user account. This account is a \"superuser\" account: it will be able to edit anything on the site. Therefore, you should use a strong password." +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "You can only create this account once, but if you like, you can change the username and password after it's created, or add new superusers afterwards." +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "The email address is used for password resets. You don't have to provide one, but if you don't, you won't be able to reset your password if you forget it." +msgstr "" + +#: tournaments/templates/blank_site_start.html +msgid "Create Account" +msgstr "" + +#: tournaments/templates/configure_tournament.html +#, python-format +msgid "Configure Tournament %(tournament)s" +msgstr "" + +#: tournaments/templates/configure_tournament.html +#: tournaments/templates/create_tournament.html +msgid "Tabbycat" +msgstr "" + +#: tournaments/templates/configure_tournament.html +msgid "To finish creating your tournament select a basic configuration options. Note that these can always be changed later (and with more precise control) if needed." +msgstr "" + +#: tournaments/templates/configure_tournament.html +msgid "Configure Tournament" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Create New Tournament" +msgstr "" + +#: tournaments/templates/create_tournament.html +#, python-format +msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Just trying out Tabbycat?" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "If you're learning or playing around with Tabbycat, it's easiest to create a demo tournament that is prepopulated with a fake (but typical) set of teams, adjudicators, rooms, and the like. You can then delete this demo tournament later on, or deploy a new instance for your real tournament." +msgstr "" + +#: tournaments/templates/create_tournament.html +#, python-format +msgid "Load %(demo)s" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "You already have a tournament set up using this data set. Reloading the data will delete all data from that tournament." +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Create Tournament" +msgstr "" + +#: tournaments/templates/create_tournament.html +msgid "Cancel and go back to the site home page" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Debate Team Missing" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Tabbycat always requires that, in every debate, one and only one team is assigned to each side. When that is not the case, this error occurs. Usually, this is the result of debates having been manually edited." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "A list of offending debates is presented below. To fix them, you'll need to do the following:" +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Click the Fix this debate button for that debate." +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Ensure that every side that should be present in the debate is present and has a team assigned. If a team is missing, find an empty row and use the magnifying glass to select a team. Then set the new team's side accordingly." +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Ensure that no side appears more than once in the debate." +msgstr "" + +#. Translators: This is in a list of instructions. +#: tournaments/templates/fix_debate_teams.html +msgid "Save the changes." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Once you've fixed all the debates, you should then be able to return to whatever page you were originally on without the error reoccurring." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +#, python-format +msgid "You can also see all the debates in the Debates section of the Edit Database Area." +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Debate ID" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +#, python-format +msgid "Teams on %(side)s" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Link to fix this debate" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "No teams" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "Multiple teams" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgctxt "button label" +msgid "Fix this debate" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "It looks like all debates are in good shape!" +msgstr "" + +#: tournaments/templates/fix_debate_teams.html +msgid "If you keep getting redirected to this page and you're not sure why, please contact the developers of Tabbycat." +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Welcome to %(tournament)s" +msgstr "Chào mừng đến với %(tournament)s" + +#: tournaments/templates/public_tournament_index.html +msgid "There is currently no public information available for this tournament." +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Team Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(category)s Team Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Speaker Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(category)s Speaker Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Replies Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Adjudicator Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Motions Tab" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Sides" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Draw for %(round)s" +msgstr "Bảng đấu cho vòng %(round)s" + +#: tournaments/templates/public_tournament_index.html +msgid "Draws for Current Rounds" +msgstr "Bảng đấu cho các vòng hiện tại" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(round)s's draw has yet to be released" +msgstr "Bảng đấu của vòng %(round)s chưa được công bố" + +#: tournaments/templates/public_tournament_index.html +msgid "The draw for the next round has yet to be released" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Check-Ins" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Results" +msgstr "Kết quả" + +#: tournaments/templates/public_tournament_index.html +msgid "Motions" +msgstr "Kiến nghị" + +#: tournaments/templates/public_tournament_index.html +msgid "Team Standings" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "%(category)s Break" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Breaking Adjudicators" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Diversity" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Participants" +msgstr "Người tham dự" + +#: tournaments/templates/public_tournament_index.html +msgid "Institutions" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Feedback Progress" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +#, python-format +msgid "Enter Ballot for %(round)s" +msgstr "" + +#: tournaments/templates/public_tournament_index.html +msgid "Enter Feedback" +msgstr "Nhập phản hồi" + +#: tournaments/templates/public_tournament_index.html +msgid "Tournament Staff" +msgstr "Đội ngũ quản lý giải" + +#: tournaments/templates/round_complete_check.html +msgid "Confirm Round Completion" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Enter Results" +msgstr "Nhập kết quả" + +#: tournaments/templates/round_complete_check.html +msgid "Emails have already been sent." +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Email Team Wins/Losses" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Email Team Points" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "Mark %(round)s as Completed" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "Mark %(round)s as Completed Anyway" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "Go to %(round)s" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "%(round)s has already been marked as completed!" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "The following prior round has not yet been completed: %(prior_rounds_not_completed)s. You should complete it before marking this round as completed." +msgid_plural "The following prior rounds have not yet been completed: %(prior_rounds_not_completed)s. You should complete those before marking this round as completed." +msgstr[0] "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "All ballots from %(round)s are confirmed. You should be good to go!" +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "There is still %(num_unconfirmed)s ballot that is not confirmed. You should not proceed to the next round until all ballots are confirmed." +msgid_plural "There are still %(num_unconfirmed)s ballots that are not confirmed. You should not proceed to the next round until all ballots are confirmed." +msgstr[0] "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " +msgstr "" + +#: tournaments/templates/round_complete_check.html +#, python-format +msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " +msgstr "" + +#: tournaments/templates/set_current_round.html +msgid "Set Current Round" +msgstr "" + +#: tournaments/templates/set_current_round.html +msgid "Back to Configuration" +msgstr "" + +#: tournaments/templates/set_current_round.html +#, python-format +msgid "No round is currently set. In order for Tabbycat to work, please set the current round of the tournament %(tournament)s." +msgstr "" + +#: tournaments/templates/set_current_round.html +#, python-format +msgid "On this page, you can set the current round of the tournament %(tournament)s." +msgstr "" + +#: tournaments/templates/set_current_round.html +#, python-format +msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgctxt "page title" +msgid "Set Round Weights for Tapered Scoring" +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgid "Round weights are coefficients for the points received in each round. A team would get triple their team points obtained in a round with a weight of 3." +msgstr "" + +#: tournaments/templates/set_round_weights.html +msgctxt "button" +msgid "Set weights" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Welcome!" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "It looks like there aren't any tournaments on this site. Would you like to create one?" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "There are currently no active tournaments set up on this site." +msgstr "" + +#: tournaments/templates/site_index.html +msgid "There are currently no tournaments set up on this site." +msgstr "" + +#: tournaments/templates/site_index.html +msgid "(inactive)" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "New Tournament" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Edit Database Area" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Send a Test Email" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Import DebateXML" +msgstr "" + +#: tournaments/templates/site_index.html +#, python-format +msgid "Get API Token / Change Password (%(user)s)" +msgstr "" + +#: tournaments/templates/site_index.html +#, python-format +msgid "Log Out (%(user)s)" +msgstr "" + +#: tournaments/templates/site_index.html +msgid "Log In as Admin" +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "Welcome to your new tournament!" +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "The next step is to import your initial tournament data: the institutions, teams, adjudicators and rooms that are in your tournament. There are a number of ways to do this. For small-to-medium tournaments, the simple importer is your best bet." +msgstr "" + +#. Translators: The documentation where the link goes to is in English; translations should mention this with "(in English)" after the link. +#: tournaments/templates/tournament_index.html +#, python-format +msgid "For more information, please consult our documentation on importing initial data." +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "Use the simple importer to add your initial data." +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "Mark participants as available to prepare a draw for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "Go to the draw area to allocate adjudicators for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +#, python-format +msgid "Go to the results area to enter ballots for %(round)s" +msgstr "" + +#: tournaments/templates/tournament_index.html +msgid "You have enabled a URL that allows users to create new accounts. You should disable it once the tournament starts." +msgstr "" + +#: tournaments/templates/tournament_index_links.html +#, python-format +msgid "Administrator area for %(tn)s" +msgstr "" + +#: tournaments/templates/tournament_index_links.html +#, python-format +msgid "Assistant area for %(tn)s" +msgstr "" + +#: tournaments/templates/tournament_index_links.html +#, python-format +msgid "Public area for %(tn)s" +msgstr "" + +#: tournaments/utils.py +msgid "affirmative" +msgstr "" + +#: tournaments/utils.py +msgid "negative" +msgstr "" + +#: tournaments/utils.py +msgid "affirmative team" +msgstr "" + +#: tournaments/utils.py +msgid "negative team" +msgstr "" + +#: tournaments/utils.py +msgid "Aff" +msgstr "" + +#: tournaments/utils.py +msgid "Neg" +msgstr "" + +#: tournaments/utils.py +msgid "government" +msgstr "" + +#: tournaments/utils.py +msgid "opposition" +msgstr "" + +#: tournaments/utils.py +msgid "government team" +msgstr "" + +#: tournaments/utils.py +msgid "opposition team" +msgstr "" + +#: tournaments/utils.py +msgid "Gov" +msgstr "" + +#: tournaments/utils.py +msgid "Opp" +msgstr "" + +#: tournaments/utils.py +msgid "proposition" +msgstr "" + +#: tournaments/utils.py +msgid "proposition team" +msgstr "" + +#: tournaments/utils.py +msgid "Prop" +msgstr "" + +#: tournaments/utils.py +msgid "pro" +msgstr "" + +#: tournaments/utils.py +msgid "con" +msgstr "" + +#: tournaments/utils.py +msgid "pro team" +msgstr "" + +#: tournaments/utils.py +msgid "con team" +msgstr "" + +#: tournaments/utils.py +msgid "Pro" +msgstr "" + +#: tournaments/utils.py +msgid "Con" +msgstr "" + +#: tournaments/utils.py +msgid "appellant" +msgstr "" + +#: tournaments/utils.py +msgid "respondent" +msgstr "" + +#: tournaments/utils.py +msgid "appellant team" +msgstr "" + +#: tournaments/utils.py +msgid "respondent team" +msgstr "" + +#: tournaments/utils.py +msgid "App" +msgstr "" + +#: tournaments/utils.py +msgid "Res" +msgstr "" + +#: tournaments/utils.py +msgid "opening government" +msgstr "ủng hộ thượng viện" + +#: tournaments/utils.py +msgid "opening opposition" +msgstr "phản đối thượng viện" + +#: tournaments/utils.py +msgid "closing government" +msgstr "ủng hộ hạ viện" + +#: tournaments/utils.py +msgid "closing opposition" +msgstr "phản đối hạ viện" + +#: tournaments/utils.py +msgid "opening government team" +msgstr "" + +#: tournaments/utils.py +msgid "opening opposition team" +msgstr "" + +#: tournaments/utils.py +msgid "closing government team" +msgstr "" + +#: tournaments/utils.py +msgid "closing opposition team" +msgstr "" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "OG" +msgstr "" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "OO" +msgstr "" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "CG" +msgstr "" + +#: tournaments/utils.py +msgctxt "BP position" +msgid "CO" +msgstr "" + +#: tournaments/utils.py +#, python-format +msgid "Round %(number)d" +msgstr "" + +#. Translators: This stands for "Round %(number)d". +#: tournaments/utils.py +#, python-format +msgid "R%(number)d" +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. That's the last round in that sequence! Going back to the first round that hasn't been marked as completed." +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. You've made it to the end of the preliminary rounds! Congratulations! The next step is to generate the break." +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as completed. That was the last preliminary round, but one or more preliminary rounds are still not completed. Going back to the first incomplete preliminary round." +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(this_round)s has been marked as completed. Moving on to %(next_round)s! Woohoo! Keep it up!" +msgstr "" + +#: tournaments/views.py +msgid "8-team generic dataset" +msgstr "" + +#: tournaments/views.py +msgid "24-team Australs dataset" +msgstr "" + +#: tournaments/views.py +msgid "88-team BP dataset" +msgstr "" + +#: tournaments/views.py +msgid "Successfully set round weights for tapered scoring." +msgstr "" + diff --git a/tabbycat/utils/locale/vi/LC_MESSAGES/django.po b/tabbycat/utils/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..b274fe3e0d8 --- /dev/null +++ b/tabbycat/utils/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"PO-Revision-Date: 2023-03-25 04:12\n" +"Last-Translator: philip_tc\n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/utils/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 954\n" + +#: utils/admin.py utils/tables.py +msgid "Round" +msgstr "Vòng" + +#: utils/admin.py utils/tables.py +msgid "Team" +msgstr "Đội" + +#: utils/admin.py +msgid "Speaker" +msgstr "" + +#: utils/admin.py utils/tables.py +msgid "Tournament" +msgstr "Giải" + +#: utils/admin.py utils/tables.py +msgid "Side" +msgstr "Phe" + +#: utils/admin.py utils/tables.py +msgid "Motion" +msgstr "Kiến nghị" + +#: utils/admin.py +msgid "Confirmed" +msgstr "" + +#: utils/admin.py +msgid "Adjudicator" +msgstr "" + +#: utils/tables.py +msgid "No Data Available" +msgstr "Không có dữ liệu khả dụng" + +#: utils/tables.py +msgid "Ⓒ" +msgstr "Ⓒ" + +#: utils/tables.py +msgid "Ⓣ" +msgstr "Ⓣ" + +#: utils/tables.py +msgid "chair" +msgstr "giám khảo chính" + +#: utils/tables.py +msgid "panellist" +msgstr "giám khảo phụ" + +#: utils/tables.py +msgid "trainee" +msgstr "giám khảo thực tập" + +#: utils/tables.py +msgid "—" +msgstr "" + +#: utils/tables.py +msgid "Redacted" +msgstr "Ẩn bớt" + +#: utils/tables.py +#, python-format +msgid "View %(a)s's %(d)s Record" +msgstr "Xem %(d)s hồ sơ của %(a)s" + +#: utils/tables.py +#, python-format +msgid "View %(team)s's Record" +msgstr "Xem hồ sơ của %(team)s" + +#: utils/tables.py +#, python-format +msgid "Code name: %(name)s" +msgstr "Tên ký hiệu: %(name)s" + +#: utils/tables.py +#, python-format +msgid "Real name: %(name)s" +msgstr "Tên thật: %(name)s" + +#: utils/tables.py +#, python-format +msgid "%(team)s won" +msgstr "%(team)s thắng" + +#: utils/tables.py +#, python-format +msgid "%(team)s lost" +msgstr "%(team)s thua" + +#: utils/tables.py +#, python-format +msgid "%(team)s—no result" +msgstr "%(team)s không có kết quả" + +#: utils/tables.py +#, python-format +msgid "%(team)s placed %(place)s" +msgstr "Đội %(team)s xếp thứ %(place)s" + +#: utils/tables.py +#, python-format +msgid "%(team)s is advancing" +msgstr "Đội %(team)s được đi tiếp" + +#: utils/tables.py +#, python-format +msgid "%(team)s was eliminated" +msgstr "Đội %(team)s đã bị loại" + +#: utils/tables.py +msgid "View/edit debate ballot" +msgstr "Xem/chỉnh sửa phiếu kết quả" + +#: utils/tables.py +msgid "View debate ballot" +msgstr "Xem phiếu kết quả của trận tranh biện" + +#: utils/tables.py +#, python-format +msgid " vs %(opposition)s" +msgstr " đấu với %(opposition)s" + +#: utils/tables.py +#, python-format +msgid "Won against %(team)s" +msgstr "Thắng %(team)s" + +#: utils/tables.py +#, python-format +msgid "Lost to %(team)s" +msgstr "Thua %(team)s" + +#: utils/tables.py +#, python-format +msgid "No result for debate against %(team)s" +msgstr "Không có kết quả cho trận tranh biện nào với đội %(team)s" + +#: utils/tables.py +#, python-format +msgid "Total speaker score: %s" +msgstr "Tổng điểm lượt nói: %s" + +#: utils/tables.py +msgid "Teams in debate:" +msgstr "Các đội trong trận tranh biện:" + +#: utils/tables.py +#, python-format +msgid "%(team)s (%(side)s)" +msgstr "%(team)s (%(side)s)" + +#: utils/tables.py +msgid "??" +msgstr "??" + +#: utils/tables.py +msgid "advancing" +msgstr "đi tiếp" + +#: utils/tables.py +msgid "Advancing" +msgstr "Đi tiếp" + +#: utils/tables.py +msgid "eliminated" +msgstr "loại" + +#: utils/tables.py +msgid "Eliminated" +msgstr "Loại" + +#: utils/tables.py +msgid "No result for debate" +msgstr "Không có kết quả cho trận tranh biện" + +#: utils/tables.py +#, python-format +msgid "Placed %(place)s" +msgstr "Xếp thứ %(place)s" + +#: utils/tables.py +msgid "Name" +msgstr "Tên" + +#: utils/tables.py +msgid "Institution" +msgstr "Tổ chức" + +#: utils/tables.py +msgid "Member of the Adjudication Core" +msgstr "Thành viên của ban chuyên môn" + +#: utils/tables.py +msgid "Independent Adjudicator" +msgstr "Giám khảo độc lập" + +#: utils/tables.py +msgid "Always Trainee" +msgstr "Luôn là giám khảo thực tập" + +#: utils/tables.py +msgid "in minority" +msgstr "là thiểu số" + +#: utils/tables.py +msgid "Debate Adjudicators" +msgstr "Giám khảo tranh biện" + +#: utils/tables.py +msgid "Categories" +msgstr "Các thể loại" + +#: utils/tables.py +msgid "Category" +msgstr "Thể loại" + +#: utils/tables.py +#, python-format +msgid "This room %(predicate)s." +msgstr "Phòng này %(predicate)s." + +#: utils/tables.py +#, python-format +msgid "This room %(predicates)s, and %(last_predicate)s." +msgstr "Phòng này %(predicates)s và %(last_predicate)s." + +#: utils/tables.py +msgid "Room" +msgstr "Phòng" + +#: utils/tables.py +#, python-format +msgid "Teams have met once" +msgid_plural "Teams have met %(count)d times" +msgstr[0] "Các đội đã gặp %(count)d lần" + +#: utils/tables.py +msgid "Teams are from the same institution" +msgstr "Hai đội có chung tổ chức" + +#: utils/tables.py +msgid "Conflicts/Flags" +msgstr "Xung đột/Chú ý" + +#: utils/tables.py +msgid "The confirmed ballot" +msgstr "Phiếu kết quả được xác nhận" + +#: utils/tables.py +msgid "No ballot" +msgstr "Không có phiếu kết quả" + +#: utils/tables.py +msgid "No scores" +msgstr "Không có điểm" + +#: utils/tables.py +msgid "View Ballot" +msgstr "Xem phiếu kết quả" + +#: utils/tables.py +msgid "The ballot you submitted" +msgstr "Phiếu kết quả mà bạn đã gửi" + +#: utils/tables.py +msgid "View/Edit Ballot" +msgstr "Xem/chỉnh sửa phiếu kết quả" + +#: utils/tables.py +msgid "Result" +msgstr "Kết quả" + +#. Translators: "TBC" stands for "to be confirmed". +#: utils/tables.py +msgid "TBC" +msgstr "đang xác nhận" + +#: utils/tables.py +msgid "Team iron-personed this round and the last." +msgstr "" + +#: utils/tables.py +msgid "Team iron-personed this round." +msgstr "" + +#: utils/tables.py +msgid "Team iron-personed last round." +msgstr "" + +#: utils/tables.py +#, python-format +msgid "Team %(num)d" +msgstr "Đội %(num)d" + +#: utils/tables.py +msgid "Postpone" +msgstr "Tạm hoãn" + +#: utils/views.py +msgid "Whoops! You're not meant to type that URL into your browser." +msgstr "Bạn không được nhập URL đó vào trình duyệt của bạn." + diff --git a/tabbycat/venues/locale/vi/LC_MESSAGES/django.po b/tabbycat/venues/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 00000000000..fb89ecd4b92 --- /dev/null +++ b/tabbycat/venues/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,220 @@ +msgid "" +msgstr "" +"Project-Id-Version: tabbycat\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"PO-Revision-Date: 2023-02-05 01:02\n" +"Last-Translator: philip_tc\n" +"Language-Team: Vietnamese\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: tabbycat\n" +"X-Crowdin-Language: vi\n" +"X-Crowdin-File: /develop/tabbycat/venues/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-Project-ID: 364715\n" +"X-Crowdin-File-ID: 956\n" + +#: venues/apps.py +msgid "Rooms" +msgstr "Phòng" + +#: venues/consumers.py +msgid "Draw is already released, unrelease draw to assign rooms." +msgstr "" + +#: venues/consumers.py +msgid "Draw is not confirmed, confirm draw to assign rooms." +msgstr "" + +#: venues/consumers.py +msgid "Successfully auto-allocated rooms to debates." +msgstr "" + +#: venues/models.py +msgid "name" +msgstr "" + +#: venues/models.py +msgid "priority" +msgstr "" + +#: venues/models.py +msgid "Rooms with a higher priority number will be preferred when allocating rooms to debates" +msgstr "" + +#: venues/models.py +msgid "tournament" +msgstr "" + +#: venues/models.py +msgid "URL" +msgstr "" + +#: venues/models.py +msgid "A URL that contains extra information about this room, e.g. a map or a meeting link (for online tournaments)" +msgstr "" + +#: venues/models.py +msgid "room" +msgstr "" + +#: venues/models.py +msgid "rooms" +msgstr "" + +#: venues/models.py +msgid "Don't display in room name" +msgstr "" + +#: venues/models.py +msgid "Display as prefix" +msgstr "" + +#: venues/models.py +msgid "Display as suffix" +msgstr "" + +#: venues/models.py +msgid "Name of category, e.g., \"Purple\", \"Step-free access\", \"Close to tab room\". This name is shown when the category is prefixed or suffixed to a room name in the draw, e.g., \"Purple – G05\"." +msgstr "" + +#: venues/models.py +msgid "description" +msgstr "" + +#: venues/models.py +msgid "Description, as the predicate of a sentence, e.g. \"has step-free access\", \"is close to the briefing hall\". This description follows \"This room\" when shown in tooltips, e.g., \"This room is close to the briefing hall.\"." +msgstr "" + +#: venues/models.py +msgid "display in room name" +msgstr "" + +#: venues/models.py +msgid "Prefix: \"Purple – G05\", Suffix: \"G05 – Purple\"" +msgstr "" + +#: venues/models.py +msgid "display in public tooltip" +msgstr "" + +#: venues/models.py +msgid "Displays the description in the tooltip for the room on public pages. The description, if not blank, will always show on admin pages." +msgstr "" + +#: venues/models.py +msgid "room category" +msgstr "" + +#: venues/models.py +msgid "room categories" +msgstr "" + +#: venues/models.py +msgid "category" +msgstr "" + +#: venues/models.py +msgid "subject content type" +msgstr "" + +#: venues/models.py +msgid "subject ID" +msgstr "" + +#: venues/models.py +msgid "room constraint" +msgstr "" + +#: venues/models.py +msgid "room constraints" +msgstr "" + +#: venues/templates/venue_categories_edit.html +msgid "Room Categories" +msgstr "" + +#: venues/templates/venue_categories_edit.html +msgid "Room categories allow you to group rooms together into \"zones\" to display in the draw and make navigation easier for participants, and/or specify constraints on room allocation that require teams, adjudicators or institutions to be put in a room in a particular category." +msgstr "" + +#: venues/templates/venue_categories_edit.html +#, python-format +msgid "If you want to delete room categories, use the Edit Database area." +msgstr "" + +#: venues/templates/venue_categories_edit.html +msgid "Save Room Categories" +msgstr "" + +#: venues/templates/venue_constraints_edit.html +msgid "Room Constraints" +msgstr "" + +#: venues/templates/venue_constraints_edit.html +msgid "Room constraints tell the room allocator to try to keep the specified team or adjudicator, or all teams (but not adjudicators) from the specified institution, in a room in the given category. The \"priority\" field resolves conflicting constraints: the higher priority takes precedence. You can also use the priority field to specify \"lower-preference\" constraints, which are taken if a higher-priority constraint couldn't be met." +msgstr "" + +#: venues/templates/venue_constraints_edit.html +msgid "Save Room Constraints" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room constraint of %(name)s met (%(category)s)" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room does not meet any constraint of %(name)s" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room constraint of %(team)s met (%(category)s, via institution %(institution)s)" +msgstr "" + +#: venues/utils.py +#, python-format +msgid "Room does not meet any constraint of institution %(institution)s (%(team)s)" +msgstr "" + +#: venues/views.py +msgid "Edit Rooms" +msgstr "" + +#: venues/views.py +#, python-format +msgid "Saved room category: %(list)s" +msgid_plural "Saved venue categories: %(list)s" +msgstr[0] "" + +#: venues/views.py +msgid "No changes were made to the room categories." +msgstr "" + +#: venues/views.py +#, python-format +msgid "%s (Adjudicator)" +msgstr "" + +#: venues/views.py +#, python-format +msgid "%s (Team)" +msgstr "" + +#: venues/views.py +#, python-format +msgid "%s (Institution)" +msgstr "" + +#: venues/views.py +#, python-format +msgid "Saved %(count)d room constraint." +msgid_plural "Saved %(count)d room constraints." +msgstr[0] "" + From 6fc4a66ab7dc49d649c1d352cd6dff08f2cdff80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Tue, 4 Jul 2023 18:33:31 -0300 Subject: [PATCH 224/255] Compile translations --- .../actionlog/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 1023 bytes .../actionlog/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 1155 bytes .../actionlog/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 582 bytes .../actionlog/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 514 bytes .../actionlog/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 1447 bytes .../actionlog/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 510 bytes .../locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 520 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 9294 bytes .../locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 646 bytes .../locale/it/LC_MESSAGES/django.mo | Bin 0 -> 14350 bytes .../locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 3127 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 13626 bytes .../locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 518 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 2460 bytes .../locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 761 bytes .../locale/it/LC_MESSAGES/django.mo | Bin 0 -> 28600 bytes .../locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 815 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 4391 bytes .../locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 519 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 630 bytes .../locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 618 bytes .../locale/it/LC_MESSAGES/django.mo | Bin 0 -> 517 bytes .../locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 555 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 6725 bytes .../breakqual/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 516 bytes .../breakqual/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 841 bytes .../breakqual/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 648 bytes .../breakqual/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 672 bytes .../breakqual/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 589 bytes .../breakqual/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 625 bytes tabbycat/draw/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 511 bytes tabbycat/draw/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 3591 bytes tabbycat/draw/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 721 bytes tabbycat/draw/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 630 bytes tabbycat/draw/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 710 bytes tabbycat/draw/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 6532 bytes .../importer/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 515 bytes .../importer/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 513 bytes .../importer/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 538 bytes .../importer/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 13354 bytes .../importer/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 512 bytes .../importer/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 509 bytes tabbycat/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 506 bytes tabbycat/locale/bg/LC_MESSAGES/djangojs.mo | Bin 0 -> 508 bytes tabbycat/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 3192 bytes tabbycat/locale/ca/LC_MESSAGES/djangojs.mo | Bin 0 -> 825 bytes tabbycat/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 754 bytes tabbycat/locale/cs/LC_MESSAGES/djangojs.mo | Bin 0 -> 695 bytes tabbycat/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 977 bytes tabbycat/locale/it/LC_MESSAGES/djangojs.mo | Bin 0 -> 645 bytes tabbycat/locale/jsi18n/ar/djangojs.js | 50 ++-- tabbycat/locale/jsi18n/bg/djangojs.js | 216 ++++++++++++++++ tabbycat/locale/jsi18n/bn/djangojs.js | 40 +-- tabbycat/locale/jsi18n/ca/djangojs.js | 217 ++++++++++++++++ tabbycat/locale/jsi18n/cs/djangojs.js | 232 ++++++++++++++++++ tabbycat/locale/jsi18n/de/djangojs.js | 216 ++++++++++++++++ tabbycat/locale/jsi18n/en/djangojs.js | 32 +-- tabbycat/locale/jsi18n/es/djangojs.js | 70 ++++-- tabbycat/locale/jsi18n/fr/djangojs.js | 68 +++-- tabbycat/locale/jsi18n/he/djangojs.js | 222 +++++++++++++++++ tabbycat/locale/jsi18n/hi/djangojs.js | 173 +++++++++++++ tabbycat/locale/jsi18n/id/djangojs.js | 57 +++-- tabbycat/locale/jsi18n/it/djangojs.js | 226 +++++++++++++++++ tabbycat/locale/jsi18n/ja/djangojs.js | 60 +++-- tabbycat/locale/jsi18n/kk/djangojs.js | 165 +++++++++++++ tabbycat/locale/jsi18n/ms/djangojs.js | 136 +++++++--- tabbycat/locale/jsi18n/pt/djangojs.js | 40 +-- tabbycat/locale/jsi18n/ro/djangojs.js | 199 +++++++++++++++ tabbycat/locale/jsi18n/ru/djangojs.js | 49 ++-- tabbycat/locale/jsi18n/tr/djangojs.js | 221 +++++++++++++++++ tabbycat/locale/jsi18n/tzl/djangojs.js | 40 +-- tabbycat/locale/jsi18n/vi/djangojs.js | 228 +++++++++++++++++ tabbycat/locale/jsi18n/zh-hans/djangojs.js | 53 ++-- tabbycat/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 678 bytes tabbycat/locale/kk/LC_MESSAGES/djangojs.mo | Bin 0 -> 554 bytes tabbycat/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 2208 bytes tabbycat/locale/vi/LC_MESSAGES/djangojs.mo | Bin 0 -> 1767 bytes .../motions/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 514 bytes .../motions/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 1953 bytes .../motions/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 674 bytes .../motions/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 8447 bytes .../motions/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 590 bytes .../motions/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1576 bytes .../locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 554 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 666 bytes .../locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 699 bytes .../locale/it/LC_MESSAGES/django.mo | Bin 0 -> 8942 bytes .../locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 630 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 679 bytes .../options/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 548 bytes .../options/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 671 bytes .../options/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 608 bytes .../options/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 10178 bytes .../options/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 545 bytes .../options/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 665 bytes .../locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 553 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 3442 bytes .../locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 1021 bytes .../locale/it/LC_MESSAGES/django.mo | Bin 0 -> 829 bytes .../locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 794 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 3116 bytes .../printing/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 549 bytes .../printing/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 612 bytes .../printing/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 634 bytes .../printing/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 581 bytes .../printing/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 546 bytes .../printing/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 660 bytes .../locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 552 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 3332 bytes .../locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 653 bytes .../locale/it/LC_MESSAGES/django.mo | Bin 0 -> 5577 bytes .../locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 549 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 640 bytes .../results/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 548 bytes .../results/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 3422 bytes .../results/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 789 bytes .../results/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 1638 bytes .../results/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 658 bytes .../results/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1275 bytes .../standings/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 550 bytes .../standings/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 2894 bytes .../standings/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 865 bytes .../standings/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 14442 bytes .../standings/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 547 bytes .../standings/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1558 bytes .../locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 552 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 7860 bytes .../locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 788 bytes .../locale/it/LC_MESSAGES/django.mo | Bin 0 -> 1019 bytes .../locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 628 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1593 bytes .../utils/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 546 bytes .../utils/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 4217 bytes .../utils/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 762 bytes .../utils/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 4494 bytes .../utils/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 707 bytes .../utils/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 4650 bytes .../venues/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 547 bytes .../venues/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 602 bytes .../venues/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 649 bytes .../venues/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 603 bytes .../venues/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 592 bytes .../venues/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 578 bytes 143 files changed, 2748 insertions(+), 262 deletions(-) create mode 100644 tabbycat/actionlog/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/actionlog/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/actionlog/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/actionlog/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/actionlog/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/actionlog/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/adjallocation/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/adjallocation/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/adjallocation/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/adjallocation/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/adjallocation/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/adjallocation/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/adjfeedback/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/adjfeedback/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/adjfeedback/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/adjfeedback/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/adjfeedback/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/adjfeedback/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/availability/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/availability/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/availability/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/availability/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/availability/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/availability/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/breakqual/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/breakqual/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/breakqual/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/breakqual/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/breakqual/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/breakqual/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/draw/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/draw/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/draw/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/draw/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/draw/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/draw/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/importer/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/importer/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/importer/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/importer/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/importer/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/importer/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/locale/bg/LC_MESSAGES/djangojs.mo create mode 100644 tabbycat/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/locale/ca/LC_MESSAGES/djangojs.mo create mode 100644 tabbycat/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/locale/cs/LC_MESSAGES/djangojs.mo create mode 100644 tabbycat/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/locale/it/LC_MESSAGES/djangojs.mo create mode 100644 tabbycat/locale/jsi18n/bg/djangojs.js create mode 100644 tabbycat/locale/jsi18n/ca/djangojs.js create mode 100644 tabbycat/locale/jsi18n/cs/djangojs.js create mode 100644 tabbycat/locale/jsi18n/de/djangojs.js create mode 100644 tabbycat/locale/jsi18n/he/djangojs.js create mode 100644 tabbycat/locale/jsi18n/hi/djangojs.js create mode 100644 tabbycat/locale/jsi18n/it/djangojs.js create mode 100644 tabbycat/locale/jsi18n/kk/djangojs.js create mode 100644 tabbycat/locale/jsi18n/ro/djangojs.js create mode 100644 tabbycat/locale/jsi18n/tr/djangojs.js create mode 100644 tabbycat/locale/jsi18n/vi/djangojs.js create mode 100644 tabbycat/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/locale/kk/LC_MESSAGES/djangojs.mo create mode 100644 tabbycat/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/locale/vi/LC_MESSAGES/djangojs.mo create mode 100644 tabbycat/motions/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/motions/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/motions/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/motions/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/motions/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/motions/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/notifications/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/notifications/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/notifications/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/notifications/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/notifications/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/notifications/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/options/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/options/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/options/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/options/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/options/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/options/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/participants/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/participants/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/participants/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/participants/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/participants/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/participants/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/printing/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/printing/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/printing/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/printing/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/printing/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/printing/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/privateurls/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/privateurls/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/privateurls/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/privateurls/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/privateurls/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/privateurls/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/results/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/results/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/results/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/results/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/results/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/results/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/standings/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/standings/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/standings/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/standings/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/standings/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/standings/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/tournaments/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/tournaments/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/tournaments/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/tournaments/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/tournaments/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/tournaments/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/utils/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/utils/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/utils/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/utils/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/utils/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/utils/locale/vi/LC_MESSAGES/django.mo create mode 100644 tabbycat/venues/locale/bg/LC_MESSAGES/django.mo create mode 100644 tabbycat/venues/locale/ca/LC_MESSAGES/django.mo create mode 100644 tabbycat/venues/locale/cs/LC_MESSAGES/django.mo create mode 100644 tabbycat/venues/locale/it/LC_MESSAGES/django.mo create mode 100644 tabbycat/venues/locale/kk/LC_MESSAGES/django.mo create mode 100644 tabbycat/venues/locale/vi/LC_MESSAGES/django.mo diff --git a/tabbycat/actionlog/locale/bg/LC_MESSAGES/django.mo b/tabbycat/actionlog/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..768171f775481eed2ee85a9b465c568968c92f7c GIT binary patch literal 1023 zcmah`%Wl&^6dj--VI&p^!G^`K;UO_~n$icZvS`}0s+5ST36EVhi6^d$B& zNJ!n34Pps9V3(Fw4Sl3*SdD)GA%1{g;Mh$`1q((xI-YyaJ@?-6_X~Y*2+kSc3XliR z0ndQ=d;|>O6L1mO1TFzzf%Cu*;5zUN_;!Mj%fK~!|2#>^DERCtLPo$@@GbCD@B{D% zFr>-p>vBB9X#lC@z@m4?E6SBV%}a-jHwDRLQ>>Q zkW_`R%e?Z46dUE5t773%h*kqxqiR9WdZX;Q6wBDK^^E#eJ(HU^%}cZP#}!I$Cy>G3zw~?y)KC9a_|{C)Y5O z9;1h!nHxU6nxO+X$Bc(;B9M{b5Bv6)GW4i4WQ85lZNc(ic5*Rk-F>tPAg z7E8jDb@S-0O`iOAPdaA&yFFnF-^@?U7jnho_;jvl+KYHV*egnf5kbM9E literal 0 HcmV?d00001 diff --git a/tabbycat/actionlog/locale/ca/LC_MESSAGES/django.mo b/tabbycat/actionlog/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2832b73482e98ffc011e20b245e94110bc322020 GIT binary patch literal 1155 zcmZXSJ8#rL5XTLKmwDuY03m_2G(3upFBc$*qbuOzM3HhLy1PVl(VV?;9M-$mdM_az zAAp8}o`MfRNl!yTP081w<-g~<?h2PnRA|Z z6PyLFgABX}@*y|C8TbU=0L{>U54yUK;57IdoCCjtKVaWscj14y;CZ*eFW>|48_2+4 zpv(UO?|{=&RsAFIHvARPo%c29@)AVL!N7DdF5-KBIKKk=u&Xe4SG4sm!Q8l9q53wp z+Rscb5|$V`_L@eJ9XU~wxw+MSqbL{3GF{kAtI}(cd5etEeU&gOS*-Iy3M}^8A{9!Q zvnFjJ1(lZE<34hg3OWxHX^S58~wm8b%V!np6g{)qyFY?+FuhlUP7nl7lDlP9CQl%uT z4T`o%rF}{T?+VI8)+9@k)M+?mG3`YizqQ$l&Q7v0U-R*%7O%y-Ck1x0;++i&Nts$@ z@d24q*v3wGoiCrQbGz;f!y^^zBvWa~mV24?w`Jdu%eT-T@e4ep4`7g&e*Fv`V;@Q%|^RdFwb=|$j!t0sDC4xj838{-<^wI&v z?gvVp22#f)MIcnL)!b`EozBaRs1qcIcs@N}=!sr~%~$F*-;45s@V8|pt+)~**~z$5 zq_;~-;)_syu6vwk^6Ou2v=E7G9Bo0YK%fKZ}BWw0oiL}i`XOH5+_7s6M_++iJz~6;EL7_;*Ex4Dn*(#TwonvjRhp{WG0?wADgUkrdCZFIOZ>#1p z^rT0@<0w9WD2AxRqeyfP*+@DMnU&fp>5ZkJk<{fPC(VqH*Y*kYokM};Tm8^7^=Qq+i^vRcO07uX7nwsCxLSN^msB|g#(X8@p zqLx-F7#O>7g6sP6=#qAq|K27$I!Ri){5_Aj;5+&>iTU<6*C$E4akj{L&}A2pT60Hf z;g4=>V*Pgq!yW}4w%@fnYk^NXG$XIM2bH4v!UAtmnL2#>f>7q3WLBmOmC2>T5Op|8 iugCrA^ux#gG%V(%tJ$y3Ke--@AIA|3eDl|H41NL7o2S44 literal 0 HcmV?d00001 diff --git a/tabbycat/actionlog/locale/it/LC_MESSAGES/django.mo b/tabbycat/actionlog/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c0461fb08569fc40559ae5159cdf6efbb9985f2c GIT binary patch literal 514 zcmZWl-A=+V7{%ySFTM7nCSGXb$HowZ5-t>mS;8WLX}lw4tFxrEOIuJL#CP&3d=@(t zA$pRNw%>2h`8+;)uQ(hyo;aR49y(q+mS{PCxMbU%Wz8=}TFqH%A#3N%VOwL%LoqqpbmZjegpeHX*AK08ViZ0(gQi+pjjS{FC5p zfNh6efo*}khne&1GD0k{4>bN9xD^}$H-i_zP2e@~NAPcOBRB(^n$JNKr@?jLYj73# z7BqF=fh)le;0xG_<%I0S{pAWm(%>6#AGiZS2f*w+FN3>qe-8cxz6SSz>rs3+*a2<> zU2rXU5&QxC12ps81ksM59a#fw9y9ZLn8`8onVm2~lDir-$LxXhg@e|FbQdB|2DD!m zNw@0?*A}i9373|n@sl1I411~sN1pq>jA$q#(xU`7F)gl4Bdf(TBz(a`M7fHeB@4Gk z-H>GY7`_b);pTZ^lpGIKGrk$Y0~w5$WF;g@RsxqqvZ4ZB5B@BbHM<2z?$&g`|ES6f3+aSWfVgLyz(Ed~{^N>(J5B)5lI(1APOT#X;Kk zrYvX|VOo|OFQZW;&P8_F=U&iB3nN@X$gbnLUe>V~XPOQR#WF!bx?WIpXh+_QtUkCN_W!6YuC>K-PJ|ge(AJMvK}SRBA3mp(;~@|Z>;Z#L)#DRJJ`0r zC9%1!*{j9f>-kv1cEyEdsm0=k!1(o9#ZD$=dE2s3-T9 zq3~?dM?Y&M)^EhqEq(M|beyfHr-jo>@m`6fr*7d3RBdED@loE^Z6!W z)*EB4w1voIJcYYeW*}CSc%w%cHFmLbH*mXu66TFI7ZaIa9Z=CkR87Y(A`VVFue@H$Fbl&;_=cg-xmTR#_!%N9vq znKo$KPjMd_hq$8g3u@@eM5SD2lr-ktdLyyYOh8}hrJ+RT+ox$)TIA>24qDzbbhLVN zN$_jUkstpw7<4JA)~|0WwWGw{s>MP_-+eCJ^nQwK6e{<3F8eI8&Pky%U#Nr$^ilf5 d&MfLpCb##!iJvZi3zD(J93;t55l!L0%u`T z=tnTplV?0{e(&q-^y3Ka7;%ocM4TXQ5T!K{pO|dnTXJ?b(Q3gX1EUz8xXx20DKRVz z*AX+;lxIpC@be^%p;II|1d0-C@&Hr5N=q{InBkPTj#~rA1*c9Nht?a`nB@in&15c^ zQ5uWJOeO_OI0T$6Dd`jUGhknflXjvp~yrt)p-00G$T_ literal 0 HcmV?d00001 diff --git a/tabbycat/adjallocation/locale/ca/LC_MESSAGES/django.mo b/tabbycat/adjallocation/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..60015d66f669f5469823eaad311ebe85158441f5 GIT binary patch literal 9294 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 literal 0 HcmV?d00001 diff --git a/tabbycat/adjallocation/locale/cs/LC_MESSAGES/django.mo b/tabbycat/adjallocation/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..202d29a29e20274cbdd43d816a42e9e19a0893ee GIT binary patch literal 646 zcmZXR&2AGh5P%I74(7(0gHKgCOn0+QN^!cNvQ1E=L_|$M2q9I@uGwtm*jw8vG!h3S zE*yI7WAF%^%5!kzJs2mHMqugl*z;@8{Cu!+NpNi-50QQ3F7gfut48i4r^r3z6B2yC zAir)A@)adT% z(z?oM&b*jR&e4?~$=X;C16NiBJfD{i#)dOGdh?zJ`;$#Qn1mYHpW8T`O zec?Qet zW4fi&wDE{NV=?1wOFvB$wzis|z>_4Q#G1v_6hAJmzO9BYh`;(iBfkOk?zgi5 literal 0 HcmV?d00001 diff --git a/tabbycat/adjallocation/locale/it/LC_MESSAGES/django.mo b/tabbycat/adjallocation/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..60db05a2317a4f5926c89cdf6dcb9a0fc99bc70b GIT binary patch literal 14350 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 TBRqQf)u=`iG*(n@I*IyU_#-eg literal 0 HcmV?d00001 diff --git a/tabbycat/adjallocation/locale/kk/LC_MESSAGES/django.mo b/tabbycat/adjallocation/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b26dd71607e82277a5b6d4fce1977b5e725bb4e GIT binary patch literal 3127 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 literal 0 HcmV?d00001 diff --git a/tabbycat/adjfeedback/locale/bg/LC_MESSAGES/django.mo b/tabbycat/adjfeedback/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e0d453fd1c11463981b4dbcab24ca773de9f4a93 GIT binary patch literal 518 zcmZWlO;5r=5XI=JN6#MC#DgXdEfo-#a1aDS0+C2H-psTeYjN3awp*1S;=l4Y_*>kf zAkmk+?Cj3R+j*b+d+!yC9m@mDBgy>xB{?$~ zhRXWZ1}1ru#?UR290J9eGrfizdP&P-xI#mm`JR6Uo)2Dwc^+>xoiXMH0*x{k zXq2{1W0XmO2|+-(;H+DS1a*pXli(~&9=bzkGMe;%|5B@ZPEScg(#~6ER?Etmg4k*K+_l#(#`8y_ oIK=4L6)HkOE=hOXdzkcRv&&(B=Eietp{i!;&$N~Ng7)B6vtgCp==9*LJJgV9ZFzVXtGI~Hf5tor1>H!X+yFgI2G@VGjW))r?w|) zZgAiThe}8wE*v<3pyCjTN(jVZ#es5wBT^-V#EnDGNJxnPo1INpNv*MeB(F`LDqH(7yrFIX{38fIoqx z$FJr1@8$TP;DZ?dyW~G0KGug#NbWF5a>vU4$+BMs@v#v!{opuQ0q4v93P^gjK-y20 z^BN?*w!xe5>3bmAv53Jstp~}E*FduKTae^`0cro=z-Pf*AU^gV8uDWwl%#bPkk<8s zr1uFlID(x9t6&Wzy;i`dz_&n(Zw}&P*U(U$J_X7C>mZ$TqwN1!&i`DF-va5pzd(xL z?UMh3q}L&ALi-#+gCTYtq&S``$6o|V{w(+~_%iqq_!@W|d>bUWEs*Sc7bJb&2Wj00 zAlz8U0>v7NCzU}|@?~#%6dm$6l>yZ9Iu|<782RKGREjCxV=AQYeZ;B+BELFOvN3Ld>&@xGs^Xy6vKf-y; z$~73HVY8K2az%b9tYS_kGW0yn6R)yFcKb%tFT^3jb)L4Mw(mHo(80rjbe8taTcNa+ z436HwR>49PywM3+gL~0xZ6idL6-kZ@mRzi&;6fg|plKSsvV196k(-L*8_WnV8+>$l z^h_{39t@B2;o-*Exyqt&K4@CFE}>9EXi?}m7qJW|R1H2Yyhw!J9d7VYT%KL6EG;a} z-qB=aXt*+Mw1>t)6OM;&@MS$qp!@_!6s(he^7ZCiaQ@CZIu(8kW_4&HrQ-%a-%`G^ zoaDHu!JM(FYjB+vT{k&8!8^Z`Rm}$``ABV|@@6n?%@$;X(mg#s**6y~%ry9!b7SKp zXL|&@=8|1K!*eQu5%oxJ%EV;#uBYp`n%%ooPfREhS(m!LIDL6(c6D`Xes;AUZNPzM zC^LI@D~^9@bga^ooOe&z%qktKOeDC2JTh8XZl$+IBuHHCMX1_4chBSY&b~aJw|T}R z$zRQVj4bQPWZKFqM>i|B?JpgdnkQJY=PaYkLg5Az_yaY^}wDSNU{{_pe zjA5X_uDHnUFAz4tw8UHE;9Ax-zP-bw3v)agJW}-F8rOLVNIAiC4WagTskDa7z{Ak~ YzTC@nom)N&R!bFkT*n1Y*9ZdpAG=*rPyhe` literal 0 HcmV?d00001 diff --git a/tabbycat/adjfeedback/locale/cs/LC_MESSAGES/django.mo b/tabbycat/adjfeedback/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0831e2eadd0b1d9210fc6492401f272f9e099868 GIT binary patch literal 761 zcmZXSy>1gh5XTn?ARQ7C)D&AqcCop$W0P>^h?0wqEZM@c4}@r<_3g$!bKW`a?Ik$k z6)1TJC=eA55>@!9p`oLIj;CPOaj*p={q(wibRiux1vI_hs!OedERYqqvE4A1TI zLTz7j+ZB^SBr!LjNhJA{@RfjpLMuL%%8;4NT?MoxG-LvfRhjfOOk`|WTd+q`=LsmE z8a^D(u$a@A8EC`0`6v-=uNdVl0-rj)2dpoT5}VBSxsg7tdeu$lRhd_(p6A!MoDRrq5fn)_5`b2kra4SMz& zlvEH@%5;Z%)TbqNFR0S>b*kZTC$RJu~Ro$#RB91M2vHwUhm;ACMV ugMX^cx4%=ZIiwFKV-O!-oW3E^>4z!NOW)Y1F_DBTaFxV|0qLi=W%38)j?`2D literal 0 HcmV?d00001 diff --git a/tabbycat/adjfeedback/locale/it/LC_MESSAGES/django.mo b/tabbycat/adjfeedback/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0b6edfa8332f3b8887eb21601fa19c37f1c06a63 GIT binary patch literal 28600 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�Jt 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 literal 0 HcmV?d00001 diff --git a/tabbycat/adjfeedback/locale/vi/LC_MESSAGES/django.mo b/tabbycat/adjfeedback/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fee783d4dd28e279076a9a7ad99f2ad3e08640ee GIT binary patch literal 4391 zcmchYTWlOx8OIOwlCq^h(+igZ{Rq9p!L#d2p*ScIJ5Z*fVFg zGiQ8xKov>^MMb0*vMPkCCXJ$slt>BmrQTM37|Sn3Do?yrLRtY2JQaAPJn;W!cD%Fc zx{kzUG-rNu`ObH~>zP09zi~t0C}VsPh#Ej^}@XpTzS6`yd03gLi^+AVh@&;uK9>J_WYGTfk?*o5ANmoZ>7l z4)`K?EBFBj6U06U9{_I!hru$)^Pj?n=er=UztnwR1$o_P!S8}+zBp%fAbbfPVrf!8<>leLn@JeuG#_EOy_o zg6!WJkmLP4I0XIyydC7A@%sBgw)0-_KJeQhuj_)mZVSXI&fvoG8z9er1!TKl2ifnp zK+fauL5}x(AludHKK~VDz3+oO{{!&z;B9z7xCP7-4`A@Ydh&y9<`(!02K&RhEe!Vc zOBnZKaD4grEC$=e2kX8EBlQ(z8xLY|ZE-&w!eD>CjPW%Lu4VQ=KREX&fz)PxSLO>2 z_K6RUO@4e8H{7#?F^s_n$MivryD>h8!99c2rLhEH_(5&^awwvM_aC&~#a0jvMMJ`} zXwqGbUFFy&2qUsAF-i+kx^>%GqA0HWDvDH~NkycC6;cfygwicTofE{`47r1(BeFx; zFF#o8iXD+}hfC5W+&O_>P@xa?G#402rfC~ou(WTlQPWIAcb3IY{4;<*5y8Bu>FoV1vrdAl#?Yg&yh^B%6$hdQ|IMkkU46P{B zBn5IrZ7&K2EwE=5rL+H6)}e&_z3iKGT{_n722p&Vg)s0b?7kzdQ9F`iDywNR ztqm%6N7v5HOxjQ)gPXHg+9>|C(XtLf4=CM0I;75;(-`RvQ$05129jIUkiD=Vk%6>t z(CB$@KNwNupm)n+Mn^`O*r2V&TxC+s1-<2(Xv2Q(v?h&sd|8IJ=Vcmr2l162awk@> zWtbxfgKw|mu`VMsbSM>GR&qtm2XW{~G0(dQ8%h?5njJQvuqJI^)X>B-+gYe!DJh*< zZ!n)XE#0jrWQ_Qk4y0RH?%7aupsT7|FPWJUVJlF6D+o>~Mm!TEKpgcDTc<11bciVM0%5YK80AC4 z_FKY)w$f6H6JfB3Y+5s}bxMZ36IaRD_4*q2>(UdFowH`6hH|Z=aU-&7L6u4;9=D#5 z%Zi1qM{FajG&V9eZjFpvV`DTrRvjNN9k(N6)k65>@xG5q$8Ft+?S`~CGgUgJq~TCU za_38xmetdz=1Q|Ov(r6eM$025)VM*CtlC-&iy66UDlHH8A0b35jHH=3SvzJO?#c1O z3o^8(u{XOY=qeqqD^oh*#i%mtSP=SAm2@k8j3!2pP0CJ`?S>TY+eZX=ezYna)Iid_E~x+ zw$WJmPuAPM(rI5X)abM?D{8U4re>%8b5#~o$#1VqlD5{Nd}}>bHd zRG`FwVdq-xt;5~BmvZCeW*VpH0Zl4L0H((|b-u`8agST5k z*rz^cYR%-5-V2N+)#wN85jJ4~njD@S~qf9kBIv%bauZ?@CE=#Wv#r5Ilj2vxMR zn4Qc{69!P&PzaC8I?%^vLngVT2mA)RVPKc@$aTHtj^%vVsM&KtSv;0@Z=u3Oac$8T zumP2mcK2RF1{=r)@;dF8RG)SvjSE7g#ZWY%s8ArZul1K}zAyGG!=&~_;Uurbyd|Ag pVmbMZZa{gOOmO?W7Jeb@xL-#KApDZT0!UTS_4LD4eCJLO{{~K?vqk^_ literal 0 HcmV?d00001 diff --git a/tabbycat/availability/locale/bg/LC_MESSAGES/django.mo b/tabbycat/availability/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3e2e048abc9015c760e07d1cb013e19b3f148fb3 GIT binary patch literal 519 zcmZWl%T59@6vgOjmabjY#DykaW*FpE!a|-Qfk*(2J91~HjwPj?bUG*>;%E5_ev2KH zNAx5oz3qLR-t%>S_EE4nvAnRnvOKlCwaihs{Ito2J@cA9CR#07XkZw@6VoYIk`jYK zunEyPQHEsD#@)NeMCAn;o z(oNHOhK^QmwikX4I&$S-4u)My%GJACsdCh~TR7kA=(*2@UBZpnnhBM-JFi__BNrHO n!Og}MDn!9tCf!kIG49P~_k-Tdjh5C!RZP^Maa;X{Uv&!KNrjxT literal 0 HcmV?d00001 diff --git a/tabbycat/availability/locale/ca/LC_MESSAGES/django.mo b/tabbycat/availability/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..68d325ba1fae442781b45e3b9966711527168412 GIT binary patch literal 630 zcmZXR&2G~`5XToN5?F`>XAa8^4qH2JNsB`c#dWGwiHPEWKtie}_TX&T?7F+_KrWoQ zaO_j{9r`Sc3#Ac^^wZe$v9t5vt0y}bjBJN^O1viS6Q79IYT^-bPCO*O6K(Ae;_?n- zKgmBPKHg>Q0r>^_Hh)f@((E45S{tJfV@Kt(DP;lPSjW-@7GK0rJ2o|D#U|D)vG8J8 ziuY)pG&T*7sI{pvZ3g%KtzX_EoKw*eF9HnRDEYFWlvOFx8q@dZY%|FLo&wmwn19oDYnwQ8= R8($&4FILidi!3Ll*)N5Hvn2ok literal 0 HcmV?d00001 diff --git a/tabbycat/availability/locale/cs/LC_MESSAGES/django.mo b/tabbycat/availability/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..089499c3f56a0a04d6e1c93eff8538d777405470 GIT binary patch literal 618 zcmZXR&u$Yj5XN077mE{T4n9@o;O=Idw8ddtwc7+mN<@@w5pXHa+H4#-_R4kw={s=b zF?a+{EzeJ`C?)-V$IWU_)PJd%}l zfew7B1U*}np5~SjJbXt-a;fTKdd`DnB#D!K8YeVvkvL|pL)_;+(A;t3b?pXCeQwGH zFD0#g8Og3>F})WVDg0&j2@iUM&ck;!_F|k_6QqGzs|tLA{1&20b7k73m~!W3NH6j( zJ$k6CJ-+;%QMRh%VW!H%K}ZyPn&Gnv#8l&q}80o27&~hn9jM9lo*`N z)-f7q%rd17gn7ynxLc+w zrESv?WxB+aLBw!DNnlWLl)Eq`+)RVW34^e||4F6nIb9_UlXluVvzrWiH*O}7%QlH$ zQRmEb9-{#?_jSeA7p9>vW0i23Qqr7pJwpK+W0Ex+!Rz5x=EoEQKA literal 0 HcmV?d00001 diff --git a/tabbycat/availability/locale/kk/LC_MESSAGES/django.mo b/tabbycat/availability/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..293b1fa33da50b69e70ce1ecff8fdb8e415a73c8 GIT binary patch literal 555 zcmZWlOHLy(5N*&Pp`=fWiG&3s1Cmfp7dl_xn7m)J%0Ui?-AyS--v6(1>zntN1K?(C&Yhqo_9g#B5|1n z6i$(A-(by9$6ni-zK9$&VmKEzlSXsqu-6+$==@WW8tb5yB{GJCVUj`DaOSs<;Z%%d zUJQrm1ZQC(EJ2|J;WjJm@^H&4&gS7DC&Wt6W-k@>FS!ruy zySONhRGlP$ohp0-=Lu^}1E-boRg3Izikg Z1I>DBKD3+8-zCev$=}Jt|KF28-V*}Iq_6-0 literal 0 HcmV?d00001 diff --git a/tabbycat/availability/locale/vi/LC_MESSAGES/django.mo b/tabbycat/availability/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..584a54da11c8216281f6634cc3f5c38690b7f0d0 GIT binary patch literal 6725 zcmchaUu+yl9mj`KN;v|BKm!E|12oj8S)b#iX}Dlf$8pjK+gLdhQCeZ`?T+sz-P<|s z?%CW6e-xDpp{fbAw5SgxG9ltmL;I7x=3)eeuX6#$w9fm&xpTXF9 zUCdX&9L7)Gg0#w5xnmWG528e3mE^?@YfKsi17xTUIqUSu7M9inF4=*bN1785CMqUN)0rOBk z4n71sE|At80cqbuUr z$sVLb*9oBO8fnn}W1F^{Y`qJg58y)=%8%WR55<(^B`>(3b<#bGCDj|%dgr3JQ7vby~oD9=<2o)GK+0wI1p5UGxMm)e$cORD__f?dbj4HUL zCnp9A3}cBR5Q$w$kv3*-P-fT2^uDB2SheNBjTo6Nk_^3`%s{Csk1BSw^B9t-(8$_( z^wNf9J2^z$dJW4KmL0JfCz5M|FRFEBeoCM39jgUmZADkpc*tfFRXGz^qx59dNKRl? za%R?!L|Fw=gltyT8az44R|DjxM~7aeCzhaEs(Q$d$*|_x4Zdhs1s_|*k%%gSyMetv z&gNW+;!oIR>LIpE&+0(;-;RV`?Nm>^`h@UB0DJi{h-M3R@Cct<6F~#T>X$iApfTPP z@nk|RYCBQh@pPP({`;i3XZ@n$z7Q^t6c0tj`%PO4B!Y-YpF$1luZ}UX>2y0}MH?9` z3QstZa9R9=&v;(v=c4ijTPDAgY0!5y(axy>ef-51D)q-z*D|2-m_DPlo8g+Vtya3yr$b zdcg<^x7^D<;Ti2>1Z_$8vh`(klwlQ8>d7zZR7UI2q)6A#^)jaybyba?w4s%Cb>UEC z2XLE&4XsJ1N=J~~%GR}Avig+y^=e53T&?PU6b?G!JZ{EtK|dn8FC)BK_aa%t>BH`W zaUU2)90Y0O)BE{LUwE?H@?l0pFX}WWUJF!B1YSd{p*Mm+_;*KK_^Mv6q}$biCS_be z)Vl7vqJ*bFxFfYXn%jhI=lZB_d^BdUhVHv%eEf9DcC?eLPPA@V%&^HgEya5LB=wc4 zASyo{Tr_Z|D~2rv>I@!N)=AeoErL)gzrZ8ARBGVeH+M?ZR1jGUVOhG?(Rw+wmQ{i0 zmOf#f!m9x-wvHiF1wJ)7b-Wnt0t zufSnl&Xlw0!Zf$dqxRZtBJ+^^|jIKBS}kAF^29?5;m znhn%CHd!V#iFowQStpMb_<=(Q@7sTGVq?cuawu{8xb$Fs-bKN9s+R9WIiGwr%6rPO zJ&_lFetvdkVXj!5IWbqvyJrwRHBnPN;tL?+V~q96&XRWXn`W8cx_}d%DR#T92@Npf`l4$UZP*}t`b_?R z3cPv_QRfxa-nktWu^g&l>b zP*=1SioErm8jt$LM(yVJOuBk(NNl4uHB`f8zngmYfNVF_PemxHaS+r*+YRRh0K()#xoc3z97(B|YY{tLIu5VXRBG z^9bJ&cc@yt)`e6u(hF17PchJHQkhB#HnnOnifrS;$K%rn6OkCo&xSW7tS$sKN;;F!QJ5Lm}H?L5qw$aNF=f_5%2$r=FAZHWr>b7o-gOQ o*WPSylbh7Kkt33N?xmh~tdo3`ER+|jNFj0b4vnsxny^$V4WlehB537t2EL@k8sEW$Et8@cI;a^XZpE!a#RbPDl^S(iYlxW!U!ll2 zYN<@q5JjA0%)n>3prn=a7*&E|o1i3!XRW?98jQNTzc}TJ)s{jtVdkw;qovuqwo{IY zXp-<5RmQY;@Asg-t1EP$n1ZedWt51Rl6sJ6Ys_?RBKl^&h=j7X5nJ5z2{!S%@TIRmW<2P-gs>Xis8#^ mj@;%lM9yp`>|uL0>Q1M({qEF`=Egu-PUW9jYw?C#w@Tks<(p^# literal 0 HcmV?d00001 diff --git a/tabbycat/breakqual/locale/ca/LC_MESSAGES/django.mo b/tabbycat/breakqual/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6457bbeab1c1bbe8d445fa9e3de4801ba8f2be4f GIT binary patch literal 841 zcmZXS&rcLF6vwNAKSqO*L=%mP^|z6zrlFh3;qwrv!1+r^4moOw3$!8)7QTD+Sh)Y9DC2uE`z(^CAbPcfY1)XB=`cZ zfv;d3`~Ww>PcR0?&oOo#8bQPO4)hS*12-`Kex9)j=r3rPzjA@G+t3LpJ~oB!7W5%B z#BV|2I%*fuhc(9yA=o7l_B_fRCLTuv_ zPRju?M|&0Nl(?=2eX`7x9I!2Gb}98@BNNZby29v$d)ekv(agv>|}PP7PXA_q!I0)L?%z~d|WD7=p~-Mme!GPKI^TC#>u*n z^%Yss)~U%*ii9`%g^#vWWu+2p#tvMZ%txz~boY6ihQ^v=Yj{D(0_bRDkWm2gqCLM3K zb~^2DcX_?tjk8^p&&-tOpID>hkL!)-?DObJrP#WyN}dsaQu&-58`+NjIUWKprE{b? gDcm1t z@)h}gi;(YE=j!&Q{}bAKsC_|;?qv=datA?)kiC3f=Viv7HkLTS7sTn>D83NNk&)4J zkvZt+@Jbk4YQ?DI)9DGudt*^)<6vluGKc-Tu#jp-z0nI8i{r8hh6C;dqfroTK@dS0 z(O{c}kvHJhL29_NvZ;$n1Fnji7Xni3fYIbsWV62_qnSNS-gv|QuzS--xEXkfRu21w z^rXT%PJDEJC3&ejG@Ef_g^ORNJ!s#=H8tM}16`Hryi^6F?P=+}k*p1u(9>pN8CBKt zXyaCgUT)(J702Ntx=RDf=!SY0M|6Fis-3vih#`tw9q%4UHTnb+(e~=swyOYV@^X|mY m=QvlrS?Pc7S{8pAwLLP{r!$?Oe>?k0+}SVu{O0fHg8TuE8o1K{ literal 0 HcmV?d00001 diff --git a/tabbycat/breakqual/locale/it/LC_MESSAGES/django.mo b/tabbycat/breakqual/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..72ef39633839448395163be6d0fcd0cd42437824 GIT binary patch literal 672 zcmZXR&2G~`5P%mb0{Mc}Gl%5{hpl55N^q0|K7!$V$MRf9sxJ`T}c8D*;9pc-C z{e$$cYmEIQ9T4sHP2304yJUYP-PQX}n!?u7)gg1;^Tx)-*x?H8O5z#QP$P4A+M+Iy z>$c9(GLKNRg*7Kwc#)RkC0ZwqPPm6WKQF)sN7xwa#oSf06wlhqiOeKCSR9HYT*)q2 zjKO2V<6gWkda;ON-aAO5IGBO+BD0{K0&grO%|KTzR46iPoAA_wlA!;(6E6L6ng#Q8 zKDqjnXs;KHjP|Ih+Id5rJihZ`qd@8bFW!K4=!Y+|spwzDbzNVh6%$>UQtB$<{apHB zp;`+{OpUEw!gaGY-7p^T&2xBP^Ls-cJs1S9#K@X6$`u#u+1kl}-$Xi2`2NAe$I+v$ z#LIEJxwhO>sc49>#1$&jgqNERbBplyv;`F^Q-Hz{bvPRx&nL^})8~_ASf0@O%wA*u mskLtYB<=@n0oquoWdTeZx;7mdt>K%azn4^#IciW^V1EF8+r3!; literal 0 HcmV?d00001 diff --git a/tabbycat/breakqual/locale/kk/LC_MESSAGES/django.mo b/tabbycat/breakqual/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c3d4c7085d7dedbaa80aeb2d4df720a1fad44868 GIT binary patch literal 589 zcmZXQ&2AGh5P%IW9IT!=b1*kJOgGt-HgOcGkS0~sL`2Pk5SKF9b+_9%_SWkyw5JN5 zq3_ZQaO9f20MEiC&^CgRK8 zL^OdE2Y88-lRK{zlgZJ+2R`TxI`@NAH!Hktji*5&y2z=KSD$^5Ys^ej#3$$qWe0S4{c{Z zQ7-(w&dN#t`-9$|6t(TGo$AY##M^Bbd#$*;nWiOzM4c;b^WgT-!PqIBoRz2pZDZ6b yP$uZNj|QF5=+%B_6eOo~J-eCPe`+n8H^Mq+^DndSvmd19U*}h|Z?l{E75fc1H?J-L literal 0 HcmV?d00001 diff --git a/tabbycat/breakqual/locale/vi/LC_MESSAGES/django.mo b/tabbycat/breakqual/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9549c9b20334e8954ee8284ef8a6186e5f554362 GIT binary patch literal 625 zcmZXQ&2AGh5XTJ^gceSmIrs(K{V0^+kV8q6DpEp2vqT&am9sl+ojUf`_HOBgD;F*t zdf7T@(j6+yg?c(k^9IAau@l4G_fC% z%NvAzLT&snZxV73^)2ch)Hy1;S9S~6CI_zw*~#ZsE;Hecb!5K=TT3`49>ju-t(imS z*&t_AuudAysTZ@^8Ab;OP#Wvm$Q3eY&#S_*)NmS%_t^o|vI%Cp!ULyClx(pmVR1sE zZ5}7VP&m(0E3{KhS4qp$28j z@M_B8%z`*Rse}rZ$%KLsbU5rDj(U^H&R%a4=5rjK*(}XJwN}laCar+%$sb=A^!RA` W{hJ}_^5R?<6bou{`FVNqMUr1|>$i^p literal 0 HcmV?d00001 diff --git a/tabbycat/draw/locale/bg/LC_MESSAGES/django.mo b/tabbycat/draw/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d51d7872782a146e70e398c3e4ba9ffdf3eac47c GIT binary patch literal 511 zcmZWlNlwEs6fJ^PmaJJAi3LdfW+-%Ul?5GDsS#Bh5WC7rOi1P0k?pkfARLKna2A|G z2f>q`{OvzH|Mzu%_E9l7F}yImGCVcBH7wCI{4~jyIm?YDtYMVEGnFb693xGl zXcH4{O=&KqhCroR0-YjN5DJW}$sNIAbG#Zj9=INI>ey>oW1=*Kl5oX{ z7Sc402~P`>QV1zoV$>;EN@Pa(K7mn`&O1XZ7zO>qU)-u=bp_Xyn|YhuXleSc?VOQ} zw^95?q@vn?3J1_U)RnrgR6?J}BFT7)Q8UW4HDQG$34jf|j$HYdgHaEoTK%r!-XAsY7B2TXdLCrVEMX^fMVZL$o!53E$=YTj iCXCvY+vDy$=+9;k!~V=p7REbK&BdQFTisU8u`1s({+U<+ literal 0 HcmV?d00001 diff --git a/tabbycat/draw/locale/ca/LC_MESSAGES/django.mo b/tabbycat/draw/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c5a109e1c0058ca05d8a1c4e62a5b16dc44c82e0 GIT binary patch literal 3591 zcmZ{lO>87b6~`aRLdd{E2mzMxkxJMP8@BDSceA@0uUW?S><4&=@i?nQ0!205<=Nit zsp@oB+iNZXaRDKYD+EfU4Tl7T5C{~36gYs95C@V2LI{)~aX?%mIKU+$Lj3_U?mlosa4leb7~}YDB9DP*58#ID=37NLeFnS-d=|t{Ucl|0;4i_q zfiHsG_lJ7@&$aw_ka}OOc_%hEARh&}e+GOHc&e5!g4ilu@Izn^#7`VVFxey?=nz|F2qpt(N}_QvZQFM)nSZ?|^&{NIeRq z{s^R=(;)M47UaIqf%wT6aHD-w^E$})z7E2K+yJ@%DUf=<3*slw<3_)J0Wv?^Anm*e z(y!mw^2;Fg|F!17LB@XvHqp)@kokE4d>7aRspnk%du@{=I#eHEnsZ-TV@G)O()sh|H0IfJZ&b0E)U1!R5<$a=9L^Ymqq ze%%16_uC--cn+lAAAsEVe7*i#kmvUj$oT&T;)vvR5akdq+L^^TJQ9N+4`BY$TAl{ww|+p@H&I>5e)jnOJOkfDGd6?{EuIss)Z&vfpM;u zPk?O<#yy9DP~_tnpTL;L;Pn9v=IucY*3}V=dogA(7(cK15yG8k!Mw8e9>QR5d7iu? z4A#geDd4&f<5-x9oCH6J!82=NoW|hAetbVCYNJ$gWTH$HGg-FOk%^)4MH)|*(q8wb zkoJa7Gu=2_1>Z}BLG%uxNp-t)C zXF=S3c-nM#g%DrVP}FZP`fMnD`}|;SJ^~X3dV$Y)rz(zD`nLrZWPq2$&4=XgfS%u zb4q$~;j&Eiasy+%D{gbYmpynTyp2YQ{MYM*Wx=@&Y_X1v51;1%If1m)qv_`IwIu+ZyX(qZljuWf7ucDz_K7@4=u8gaR?x7glU8ncZ`iIK=76Jdhl zf>%Dr`-v2$tTM04QEqCfve&HJv{E=X3^!G1dkr%l8P7i4%CVCVQScT@Lm}@DrNc6O zv&B+2@nofNS554rOG$Lu6eTvdl-K?K7T#>E8ipNp%R!n%3)P^E)?7<9RvwO4%|^=2 z(Gs%QQnSt36H)VY)SOk#X6xjs#xhDcT7$!7#^S|G%i0bqJuuN49BipY?RBQ@?s7}T z`teS$(Y@5|?0GUX)od&}d?yy#wsKhVsE=u6Ftu|kzM_lL`1wcH&PQkV_R;FPDWZ;z zU4nCIsWbi5H&(K$&{=dIm5z_x=0PmyXXn&tIzM66{qt&Oa<1`cv{<-Jyc^Z&8OzBV zo<*0ITI$59lc#4M9D8vmT*fuFd_K((#B^ddOy=_GolH;j)0*aSWoFvg>E*@8yPaOI zeWBBvPOc(zZYp=Ts0nr-I?-$hOMuPe&3o9ADf43cdu8ZW&ZeP{;Y)1yk*84~>!K11 zjnz) zwWtfBjqb?D9^OrE-9h11Xq{q$6L@1x3^^Xj;a-X<`>wz_Z`GZ2`=*UkEgLvBQzZC1 z9W~TS7IiM|3@5hd!${ocLiVelhSs*fnZif7#q;K2WNOq$v9vS6Y6<_%pz>0p`v^Q5 w(9%cW?~HeL|J+@B=b+s}?jb$o4)PYU_8zhE2gGVF zklV;7WF7g2tRX*<-`5=H7kZmNzh3Jb&7Fbp}cv^Tg0@N?&rNb14`xFdm;JVB7;R4Iti(QspBk?$AQvr?9D&l@L@!1ix_hOw zJtthzwn$`}i;R)oacVs0zL`frVP_i@v9b0>JPvT->Fd*qdLCok}PUdrdZkfpc0 z0xwl?;uSK1f_q$ez4)--9uA*8YY)Bj7)L6%O8HNjs_(;w?>bODf@E>`P``xg0btI2 I{XBL40(oY^-2eap literal 0 HcmV?d00001 diff --git a/tabbycat/draw/locale/it/LC_MESSAGES/django.mo b/tabbycat/draw/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c33631fe1bd41f8a401b0515e3a01b1dd784b963 GIT binary patch literal 630 zcmZXR&2AGh5XTJ^5PJg79Lx<4?rt{F7Ka?#G^tifM3gLu15!0vPZw9Ny|uk9y>jEi zjVIzgcot?;N+YoJ)89LukDZxcPq%(BI$Oju;w^EX_(XK4As!Rw!~^0h(fNKOe%@j1 zJLwZ*ahI`2q>A(*sU@Z7wJ!;~N05oJxyKXd&rtC>STuntTtP$@5zgq*onjS5p~MID zK|3pXgw^V*f|x9@aXyM!sI?LYZ5>4EBv0n=!~!pL=PV8>ljM1p_eGYAUe2=}neQf3 z2vL+CY%ma=r=Tg=x`i4=No6H3A{Y(!uUT>(kBc&y6|?c}pY*n~WaMl_OWCd(sub}{ zOdA8*4tVt$e84z-Urxl{tzTF51icvB$|-GY$@f+|CUetzFk(WZ2$I`o{TYV&fL~vS zFD!pPU4x^Mbf!j5$7HS*?q&)sU3rVU3O L9Si3zP;&Mg@Qt)3 literal 0 HcmV?d00001 diff --git a/tabbycat/draw/locale/kk/LC_MESSAGES/django.mo b/tabbycat/draw/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..40f09d0eed586f6e1ae1f896aa760398c14885b2 GIT binary patch literal 710 zcmZXQId2m|6o3Z^hqgk9l48=4VzTQsv-_vBWQ!%@5$W@Wv2g!IM6{W8N|E{k$>t3V~b(ZUI%`D!>6N&w=Z} z3*ZXy8nC%Xz!dNn_;CTDcc2S^yok_E&_|%Jf&K*A){Q_z8oC5nv9%By_p&}}E4C`t z28(c;3dS=Ou^!b7DLD`k(u{6Eid<)*CXI+ZW-3dh2(YHT-cCrhv&>SdG-+jV5|R6Z zI3rydV5j|%EVIqTCX*`k3$X9`MdB5SKaah|z@KxPG}EN3sK_|gQbAFZig-X{M!GOI zz)SQQ?XUff2Dsl}S$gWU8m-#-M+&o^Q;|Y50nK(&7^K;@c2iChQNrOGRT$=DRh_5as(|j?gbwGv;;x literal 0 HcmV?d00001 diff --git a/tabbycat/draw/locale/vi/LC_MESSAGES/django.mo b/tabbycat/draw/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3f534d37c99eca3b7ae8d3d24f990a7bd2d0fb95 GIT binary patch literal 6532 zcmbuCZHydc9l#$diXNcyBCmqaA%#2W?zMM)<7$C>YkSf=uD8okW3#-MPCO zh?9HfH_tq8|M%JZO%M!lsVsmpM+=OPWaEb zzy0G%T}^*Cl%)mu8Mq(H{D_{?ky_zX)aCNq9M|!)xH%@OpR_UJ2K9Mf0wPm(ssEW|r9=`x3W&Pza z3vY)q|6wTSABG~&v6w%ABF9Tm&N~G~p4TCN>I^qo|7(cK>Rp(Ie}V(>G6qv{4BiX_ zDEmJRW&U$e{P+SCx!!ksro%6bkte6 z4!#F5fw~?e%K5iI+4uICcgFAcK-qr=ir!y~-_OF2(4T{6E>OyYB6lA~zXOgzj!+N5 zE$}eB5&jZN-2NHL`uF3$7+dUp4L6bFHYoaUhhpa$crDxq`{6?T{$(h6@+#a2FJ-Z; zALe!)ybt!nYRuzM;`<#a^8E|SITsQ%-S7t33-5w!p#x?9laN1kikr-DLYAsOK(X)N zpxEbqh$w0e!7lc{63TlW^A;%U*TIc&42pdpgd*=Zp`3RN%Dgi%--V+8-=XY(F~;tP zH^2wr6cl-W0TDs{7K(lU0wpf~3Pp~8Kw1B9DEePQQV6euxKQ;#iHj{z;%*pjh7UpU z<7@C%_#PDfuELqJ-%U{J!$x=$+yjST2&dp{kR|FOloCB|gt%U9g(B}bOvA50k@pEG z`+pbmr;c$OhOfu{|3Hb`E7?ry%e7GAYZH|9St$E{8H(Os{JsVy5555jTXSuWDe_27 z6nn@e>t#==iz34aO?-V9O|ESb)V**ZeimfnXOT-{cbtZ~)gY~Xjq-3CO>B-R#^=E3 zEcTRZGJ=seel%FmUDI~Z#0FbwYiT_+v9b8)7Mj>oY&J$q(Ime6XmU-^B+hY*x$fY; zi6%a8UlLDpiC^WCdcVOukyr3;n%K5|t!Y0%!c^TJ_a(mNx}SD~d5U8F=J;9sbrWq1 zO=9+ov@A`oY1%#JiEka;6+a8M(xI!8OZ%Qzk*(cmJV1c>iK#0m4iySI6Iy<#vrffULxugdf|IvG4jU?$J)T4t zH8hLNDt=>Y>)bTPqItGCn(n;il&zdocESZUY~|;4=;=}4I-rJabgOF-**lRs@8I4C*Ph^5MLYLrj@uN z5v}HhZ@F{Yn~e^PQb1+0_fBhd7x>J3L>86HCVJzCN?Nc!daWODfJQt%H6Q(sbV|&zQMM(ky zqsBU=RlZCZ^RDR4+rC>NE0P08)d(d+!YQ4&-R6Rem+`O$&Ayi(~c9$vAe$}CfR1#&%iR2JZ zlF3G*1Cq(Ux8Kf(sqsQ;#`Xh}dr*@dCKZ8TLRu&HBVTUAl0t9IN}KEFVysWtMQDZ)kyOdf+xw zCSc%_&N;2dBd(q+HGfJvyI*I;M1v9BjT~C3n!R#xXrF+F@9eL-JFmtj3QJDDmTG?+W4h5nwze@;#nB%?urq zul$N3eGs2j<$k6r-%UQ+#=ReEiG=4-C%GgqK1c+k8t$}~v1=&7%BLzZkeIfbQIi{) z8RoRebEVh}5+EGXYCJ{&1+B(OOH^AmB+ol5wng+)EU8TNZWS#jO_J$3quB#BR8!N0 zXNa8mxuPaZq?KybUv!gs5lt!+z^>YD?lbt^>a8qGG3sKg{6_zNx+Wcb2{;sZ+=@6i`cIIu9n zhhHXv^}*LAKS_~T5;6Q!VA6z-6n5HcSC+-riZ}R6K1s6HOqcJKe4*MemsOvo7@5Si zHNJ&!ot6_8U2J3)CQ3y|3`q@dH4f*+Y|M@f^uO!BSR}1G613QS+3a#CmQQjgtq5u) z=G>#)>Wlo6kP5DXv4|8K2( zT6|BJ{l2ZV8ZWgI=YbkO8aStMn9q7xs#%>D32_j=S}@S6W?5xeKHMt$k|nB#GO3|r LMal5`DJK3G#-2Y;j`GG z{6tT3(y#q~PQUYYdh$^-I5Iplyf8dAyf&=h8Gf2%+niO+4ihC8G|@0h;fbn(Nr90j zalB55wx%?fN<&y=EQM~F6%a{`tjPmR>55gw&?lN=92cAxava?9tT8DxM2d)l z6D^f#8WWL~B%=^fvc#xc@{A}(#4dqRoXxvKD;$Nv{x6NXWA&uaRG4||+-Pa~uI-!? zCORm2C90s>e~bp;?dvMt7pfo-iArK?kn<%fYCRQS?IbVa$$?XA}~TUK6E lWpkMjPHigeac>?5v)TPHnAz#V_$TYR{4;8!-EO*8?Hj`Jn<4-J literal 0 HcmV?d00001 diff --git a/tabbycat/importer/locale/ca/LC_MESSAGES/django.mo b/tabbycat/importer/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..926a85ef843e7d93d0328e5ade664648a3c4f669 GIT binary patch literal 513 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 literal 0 HcmV?d00001 diff --git a/tabbycat/importer/locale/kk/LC_MESSAGES/django.mo b/tabbycat/importer/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..793cdfe634a0545316b8ee5e1096fc8e194e16e2 GIT binary patch literal 512 zcmZWl-A=+V7{%ySFTM7nCSGXbXW1qSCA&}oJGwBJtZeR)Xhnx04SpUc5!}w>90Ex(>fJ-1FOs4dnoM(w?XvAa*#WD9Er(hT>atuzpqR*0 zrlm4XT_)l=i#Y_G%_#1$cQzewq7+Z3!_G7E+rGE`h;>m$4JkAiX4o<_i!^`JBuiN$ z>Np%Tm2>Sr1TCm;>x!i>T!AM-86_g7xH?KS>ZNnVQfNsv%PAJw>Y2NC9sgY2Q-P0N zY@OB76Eu{3HNEib&W|9-5Ta}&0wc0}0PPmn%Mg)oYf~PVgYokdrD~#rf kq%veFCtQ$jW9WN>!OfjFAkoB_CoeMjXVhwU&9PDG8`LS97XSbN literal 0 HcmV?d00001 diff --git a/tabbycat/importer/locale/vi/LC_MESSAGES/django.mo b/tabbycat/importer/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..97e3b7839a77eba48efbf59446143383d5497b60 GIT binary patch literal 509 zcmZWl%TB^T6vgPOOV=)D;nGV>5iLVlC>BFPl|Uu#$k1Nvkanh-8BjjNFY-V97N;nW z=t)lIaqjbcot}KuERHPCEYB^EEiWu91eTvxY}>Pn*Gb5Ev z8ZwbBS%wfJD=3+AG=deVai>tS;xMktr7$CBd8D?4pn9I`Ly6p0zav7DI%Y^0VqHu@3 cSrkqtH}~PhO&8WVSuf?EQk&lGrtj3g0XQC-fB*mh literal 0 HcmV?d00001 diff --git a/tabbycat/locale/bg/LC_MESSAGES/django.mo b/tabbycat/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6a31ee9534aaaa9c36a5c9bb45efd8ecc587ce30 GIT binary patch literal 506 zcmZWl-A=+V7}e<2F1_}mCSGXb$Ho91CA$z9goH%`(|AX^tGyF8kwmGYs9VSvNXrf`1!V{G$7aSu^ z;&`19ZB1z*q=rysc?#V!QxFM^tjPmR=_;>^p-(i$$aUNXI4(FXJSw>_|_%4A_oXxvKD;$Nv{x9{KWAy~rl$&|$!f0vwuI+-6 zoOe+2N~EINe~bp;?dvMt7b+p(iAZyvVdTZRwkE8Uguy__rNW38o2&BO4*CiGD~>LF zRKM<6&(M?N&Gf>rK?kn<%fYCRQRB9GS8p9OZWpfhI(Q!B%q(H2bVZpc?5)=}6A59| grraL)=3y|K-4BDAoi2=RqE?7M6E>3VM$_u8Gf2%+niO+4ihOBG|@0h;fYF>3yzT{ zalB55wx+ZYQbVY+JcVwVDTo9{*5m=Ebd^`d&?lN=<2jwws<+`vy!(m{9-# literal 0 HcmV?d00001 diff --git a/tabbycat/locale/ca/LC_MESSAGES/django.mo b/tabbycat/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a2929855323b91555c87c870e409f8b4db6fb004 GIT binary patch literal 3192 zcmZXVPmCN#6~>FiF<}VA2?PiMQz4kK4ZX9wUfao7J~+Fx&Y<0Rv@;F}2}L#CgArcWmLZHbh;$(4ya6sV_aSjSO!1s0cY}QL@YkpnT zRj=NA_4?btKX~i~fp!7?Gw6T*fDl9QJ9py;?Wf0tcnEwEybpX8{0R6u*a2^Y9|hlR z-~S7|2jh3at6#u4gLw_d4B`(C*Hyj?Y`a4zX#IJ-Ppu2APi+LGJrC$a7w8=l=-O&KvFgZSWC{ z{|eIXzd`(od$8!U;C&#^ISc*)cXtVt82<-G8OI|yj64f|0(=5wo=5F`3^M;7q@R0W zonMgmdkf^b-v?n@`~;-EpMyOAw;=QK7m)Vf0zVGE*YX66@SaYAp9e33-2Ziuc{L#8 znSu4W;A0ry0=e#2AmjTTNWb3z>BpPx{69hF@g0!s@4|p~9{@iIo&>)LUH}=#H$bl2 z1>vIjHb}eAgP#I_0K$}b3FJAy2f2O@GS1uW{6E_Hw?UrwZaY4X!AXoC0vY!j$h>ZX ztivsk@uVQGtB!pIWMkYBI`i~pbT*#Nyztv(qs?XXhta=)PG7%-zJ$(CmNBwkPNDN0 z#?H9TqqFhOK8MabV%%)>kG?TJw!6^J)lZEsoW(P1Wo_{ch0v@RY_F9slUzGyu@oH`w=pi}4f&y;dpXtk?-DXt_ptHj`qJ2L3v zRc@@j;iU+0YJW%4BM4G86X2lUT6Z{FY+tw3p-Gc`?@-FqdEX6P{oDY&F1pEpnRCJ^iTgs-DN;MvWE`!+8%3GN`ucey0D#*lH z_-xZ9vE@>Et-=zQ8Y{MuIXO%aoVj6`!)@1CY$+#dDxTJRa^fm)6|*3&&9t8xy(dP> z2NRnDxh%yDXS6J$eS6wlh=2)FsP=PiJKeP(Pfpv!j5x! z*JMtC@#a-RhafpUV z^bGQe+v!VOc)hx_qv=evU8W|9o~+U`nz+8~jIKpHdS`>v-x7?W2K>9kbe(k55hLj52%&S+t2uF8k6J z^{~9WdPz2qmrq;y=w-Qb=2GWt(Ykkg*c-L!Ih2$CdlwBi`tsa`wTmm~4{cn8%eW3r zZ<-82^b$SOnJapWO!qPut4#N_?QN|;yFD0>uUs9Bd&y0FCvK^5M=aDwK5=fXBPOcK zluWd|=2Ze2;p1Vk5m$XxaPlivNKuGKhV$=1KxEQYlpCmwSFxGDA`Yf&>8X{3+Tm>T z>7$M&D$D90dN=(MV&wpc0Oh1EnDl@f{wO_SP&3}n? zR%W`C{>~K?sz$+-Z%=DQEUratm>8EUG5=8(U=&hBQ^rz7>NLvIO(AH!AE+5mTtdoh z3~MFSk%=C{Gs9pO6Pw5a6r+~6xV}*+TyxyPRp;%*)2_m|?X5Pccm`kN{1usMt5M{4 zD%}A8J)o%2G)TuG1!OJM1=G|96((1qlq#P}NTkl1Vxa!Xf?~*gH>FX`U!xu>B$Zl- zU1D)coyii#%qeK1zKM8`gfvnfHGrC7rO-Phy3Ir;Gkgn+y6(EBtVLViVm*WSLHgsy zx8{H2{1-Mxg|rFk4!&8Lq7+YQ>EL97*l`89o}ro`B_8Et_xb+_sjmxak^5Ren|WO= QZUi-XAf5{!7w^RX0EW31MF0Q* literal 0 HcmV?d00001 diff --git a/tabbycat/locale/ca/LC_MESSAGES/djangojs.mo b/tabbycat/locale/ca/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..0421a4f242a5bd3fe3f1d8209323a3758d83f01f GIT binary patch literal 825 zcmZXSO-~dt7{{yP+eD4=;z1AfhKDlCqJTs80L!i+*^Pu9j5qS^Oc@K^c5J&KAH<8F z!4F~L_b__!V2l^z(HQ?7K!`rcFaLJ>y!7cjAMeb(VX*7qJ}ALW@D4=#1TKNk;4=6E zu7PhL#{2})|2Mb=Zd_n&26_*A70RLS!7PY*zFs^&{|=4uKTh-)^fvZa;1u;PG}fDi zCeS%3QZyFp!@a2!b40^&W3lEH5Mvu#)taq2N&BozK~~lsv92|{%1va+`pT4C8J^Qv zOE!Rm4}7%<${NpdNfWkh_KiI>Y}462Sp>0Bis#aKIAlD~czje)NVa5cT@XWGsZy*> zD=%`J@nrLv*pde-I*WDW&Um}kUJ$J%(Q0FvEi5Mk@8H<_PnCFm+hgKS4NDh2sEq_rkxR(SD}oR^`qo%hA^nP05B zE1l?>!j{TZ8DAc&kZkIyBQ5&YO?<{p-E4iQy~2-|oms;lbol(kmE?u!I(vv%aq>Lp z-sHbCv9X@5UU^!tJPR2md=^PLaoE;MDgtAmS5hVs8n$yN!90zCD+Fc(cp8-lf z20av1hoD5FIhvz^iiWSiY#v+$BmFd<@yvf`AK$NTy+L3XfonhnTn1hN*4_bEfcL;9 z;1ghLzX0cfW8eaC0$|`LaC`=#->dlZ*=5~V@LQ1kwu(={+rA&*t==#2(1y+dRu{sB z*?()Z_13Ho+Dj&7lEutOrBRQGv}7qqp){Ek8bzE z8cp0|+R#Wbp>sPBG_5D1b`p;Sa~_ZXCOs1CgWxF+yJ7ouj>@i!11Sv5NuyZ->lpsh zI7QAf(IWAfDb0=lDC*GWX`Nm38CSF|Vwq$j^+ n>KF~=d@PfXuaDlM2W&oj4i8|?QFQcSI$OR1hKzj#6OR4>9UIJH literal 0 HcmV?d00001 diff --git a/tabbycat/locale/cs/LC_MESSAGES/djangojs.mo b/tabbycat/locale/cs/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..4a4c2cd9c586b5cb872de484183486e7145a81e2 GIT binary patch literal 695 zcmZXR&2AGh5XTJ^DlIq89DJcF2Y2Hoq{U&W$|gaPk`grw0xp%aJER+J?3L{Vig*o9 z91u4Uf(t_8(gW&KaN$`Pmxe?z($62`|IFCqU)R>&5VR}Eb)<(}MP4J`J|LHnkH|Xm z8M%mjL)MV*h(A9;eqJEt$NBy(ihQ1TID7pk9K8Mu&R+i&XOxr6$g25!c%6?~nAejV zT#y!wq=TI7Ym$PTlBZzFz~~8Nj&*bP7>q5n64c4j=s1%uIDkqU$NF|$Pa=8$uTfrTF~SbWJiCU zf@bzGc^34${r2)6e5)2DS~*ad>$t)?4qm#jDrKRXG&_>Uf{P!e9k#R7`I^tcu(rx{ zUZ}C4JEOt{gK}nM$vWCht)Qwp+uFF^q<@z2rix>JlkU;p+pPo`uK*S`THp|wl^ literal 0 HcmV?d00001 diff --git a/tabbycat/locale/it/LC_MESSAGES/django.mo b/tabbycat/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..706c8e85592022cfcf7c654908b125999c7976e5 GIT binary patch literal 977 zcmZXSO>Yx15QYtuuLYsDXN1fR4(_JuCtKxE+N7+M(5OxMI91N>baC0(k?o}P#I1J@ zT)FcT5E2&-T=)(A7G9@G6TwKM$79dDUeC^-#ktQ6b`Sm#?%@mY-|%4b*BHAGE`Sff zN8lY$fFW-kybHbnZ-EEn^S9tU;w~7p-T3??_yc|c5B2pMj4gt%!JvCOjvW{wz5v7h zpT_YQFw}hogYI`Q-2V%Ne`c?hFANO1#eqZSaOb~y}q$tYR{U|lk;qUNOq{`jI}MD7~7+qx22}iu_NsU-JbHE za+XsU>BupslzEZn;uTq^j83?h-R^lNeRM!UTC`lDa`AjnIMFc)kJ|gAdJzsa+|(u_$UvT?}MFqC>Km@YKsvNqx1QaOIEFPSi?U z_34)^FIA!)gH~v$o%eB*rw=~vms061p1qUSk*^(f8e(&r7j8WvE9yEkxza_#H@nJ5 z?Q&pcDH`aAOStZjLRYJ9@yliHiRO=MeEI2C^hWGhbB0W7Ehd-cOOKSk5bQs4ZeFuL;D z%4)>6i$V=_p{A3PYDZSNY-VdRGvQ~CX2#5pniVimNGP3F-(lHvZpf1_SC>C Z;{D5M3PbbKXs+~7;n%WUVUE1Q>Mt&F{x$#r literal 0 HcmV?d00001 diff --git a/tabbycat/locale/it/LC_MESSAGES/djangojs.mo b/tabbycat/locale/it/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..3c4f7f76ec29805915e0bd0e7b4cceada98ecdf2 GIT binary patch literal 645 zcmZXR&5qMB5XTKH0>X_m2XljiH%)fC6jwbg{XmggQEjt`+saK$aPfK~d$LR401h1C z!jTu@Nq80}EoCbh>8HOvnUBo)*Q0~4jO;G)m>3cF2url~iMT_2Chikohy&sq(Z+oz ze%@m22WeZQyv^7H(iLeNholcl*Q6A-snz=Fx``**+Nrf{s8Cnn*DTlSlAXH`4z3-W zdsyiLMOKP8+6Mzpa#YLZx=kU>pShm*cDJ3S4rMm8jR+)@ydz`_{$)< zt2fs$Nc((y96WXW$$%%%`q5i4^l(kN;?H{acJkjhk&PrjIyruxboUZ>n;j#5DL>Eu-_GKvC9Ae literal 0 HcmV?d00001 diff --git a/tabbycat/locale/jsi18n/ar/djangojs.js b/tabbycat/locale/jsi18n/ar/djangojs.js index 68afce04cd0..c56bb483bb7 100644 --- a/tabbycat/locale/jsi18n/ar/djangojs.js +++ b/tabbycat/locale/jsi18n/ar/djangojs.js @@ -1,8 +1,9 @@ -(function(globals) { - - var django = globals.django || (globals.django = {}); +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); django.pluralidx = function(count) { return (count == 1) ? 0 : 1; }; @@ -12,7 +13,7 @@ django.catalog = django.catalog || {}; - var newcatalog = { + const newcatalog = { "%(sel)s of %(cnt)s selected": [ "\u0644\u0627 \u0634\u064a \u0645\u062d\u062f\u062f", "%(sel)s \u0645\u0646 %(cnt)s \u0645\u062d\u062f\u062f" @@ -42,7 +43,7 @@ "December": "\u062f\u064a\u0633\u0645\u0628\u0631", "Delete": "\u062d\u0630\u0641", "February": "\u0641\u0628\u0631\u0627\u064a\u0631", - "Filter": "\u0627\u0646\u062a\u0642\u0627\u0621", + "Filter": "\u062a\u0635\u0641\u064a\u0629", "Find in Table": "\u0627\u0644\u0628\u062d\u062b \u0641\u064a \u0627\u0644\u062c\u062f\u0648\u0644", "General": "\u0639\u0627\u0645", "Hide": "\u0627\u062e\u0641", @@ -97,6 +98,18 @@ "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "\u0644\u0642\u062f \u062d\u062f\u062f\u062a \u0625\u062c\u0631\u0627\u0621 \u060c \u0648\u0644\u0645 \u062a\u0642\u0645 \u0628\u0625\u062c\u0631\u0627\u0621 \u0623\u064a \u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0639\u0644\u0649 \u0627\u0644\u062d\u0642\u0648\u0644 \u0627\u0644\u0641\u0631\u062f\u064a\u0629. \u0645\u0646 \u0627\u0644\u0645\u062d\u062a\u0645\u0644 \u0623\u0646\u0643 \u062a\u0628\u062d\u062b \u0639\u0646 \u0627\u0644\u0632\u0631 \u0623\u0630\u0647\u0628 \u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u0627\u0644\u0632\u0631 \u062d\u0641\u0638.", "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "\u0644\u0642\u062f \u062d\u062f\u062f\u062a \u0625\u062c\u0631\u0627\u0621\u064b \u060c \u0644\u0643\u0646\u0643 \u0644\u0645 \u062a\u062d\u0641\u0638 \u062a\u063a\u064a\u064a\u0631\u0627\u062a\u0643 \u0641\u064a \u0627\u0644\u062d\u0642\u0648\u0644 \u0627\u0644\u0641\u0631\u062f\u064a\u0629 \u062d\u062a\u0649 \u0627\u0644\u0622\u0646. \u064a\u0631\u062c\u0649 \u0627\u0644\u0646\u0642\u0631 \u0641\u0648\u0642 \u0645\u0648\u0627\u0641\u0642 \u0644\u0644\u062d\u0641\u0638. \u0633\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0625\u0639\u0627\u062f\u0629 \u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0625\u062c\u0631\u0627\u0621.", "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "\u0644\u062f\u064a\u0643 \u062a\u0639\u062f\u064a\u0644\u0627\u062a \u063a\u064a\u0631 \u0645\u062d\u0641\u0648\u0638\u0629 \u0639\u0644\u0649 \u0628\u0639\u0636 \u0627\u0644\u062d\u0642\u0648\u0644 \u0627\u0644\u0642\u0627\u0628\u0644\u0629 \u0644\u0644\u062a\u0639\u062f\u064a\u0644. \u0625\u0646 \u0646\u0641\u0630\u062a \u0623\u064a \u0625\u062c\u0631\u0627\u0621 \u0641\u0633\u0648\u0641 \u062a\u062e\u0633\u0631 \u062a\u0639\u062f\u064a\u0644\u0627\u062a\u0643.", + "abbrev. month April\u0004Apr": "\u0625\u0628\u0631\u064a\u0644", + "abbrev. month August\u0004Aug": "\u0623\u063a\u0633\u0637\u0633", + "abbrev. month December\u0004Dec": "\u062f\u064a\u0633\u0645\u0628\u0631", + "abbrev. month February\u0004Feb": "\u0641\u0628\u0631\u0627\u064a\u0631", + "abbrev. month January\u0004Jan": "\u064a\u0646\u0627\u064a\u0631", + "abbrev. month July\u0004Jul": "\u064a\u0648\u0644\u064a\u0648", + "abbrev. month June\u0004Jun": "\u064a\u0648\u0646\u064a\u0648", + "abbrev. month March\u0004Mar": "\u0645\u0627\u0631\u0633", + "abbrev. month May\u0004May": "\u0645\u0627\u064a\u0648", + "abbrev. month November\u0004Nov": "\u0646\u0648\u0641\u0645\u0628\u0631", + "abbrev. month October\u0004Oct": "\u0623\u0643\u062a\u0648\u0628\u0631", + "abbrev. month September\u0004Sep": "\u0633\u0628\u062a\u0645\u0628\u0631", "adjudicators with gender data": "\u0627\u0644\u062d\u0643\u0627\u0645 \u0645\u0639 \u0628\u064a\u0627\u0646\u0627\u062a \u062c\u0646\u0633\u0647\u0645", "deselect all": "\u0625\u0644\u063a\u0627\u0621 \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0643\u0644", "feedback scores total": "\u0645\u062c\u0645\u0648\u0639 \u062f\u0631\u062c\u0627\u062a \u0627\u0644\u062a\u063a\u0630\u064a\u0629 \u0627\u0644\u0631\u0627\u062c\u0639\u0629 ", @@ -111,24 +124,24 @@ "speaker scores total": "\u0645\u062c\u0645\u0648\u0639 \u062f\u0631\u062c\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u062b ", "speakers with gender data": "\u0627\u0644\u0645\u062a\u062d\u062f\u062b\u0648\u0646 \u0645\u0639 \u0628\u064a\u0627\u0646\u0627\u062a \u062c\u0646\u0633\u0647\u0645" }; - for (var key in newcatalog) { + for (const key in newcatalog) { django.catalog[key] = newcatalog[key]; } if (!django.jsi18n_initialized) { django.gettext = function(msgid) { - var value = django.catalog[msgid]; - if (typeof(value) == 'undefined') { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { return msgid; } else { - return (typeof(value) == 'string') ? value : value[0]; + return (typeof value === 'string') ? value : value[0]; } }; django.ngettext = function(singular, plural, count) { - var value = django.catalog[singular]; - if (typeof(value) == 'undefined') { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { return (count == 1) ? singular : plural; } else { return value.constructor === Array ? value[django.pluralidx(count)] : value; @@ -138,16 +151,16 @@ django.gettext_noop = function(msgid) { return msgid; }; django.pgettext = function(context, msgid) { - var value = django.gettext(context + '\x04' + msgid); - if (value.indexOf('\x04') != -1) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { value = msgid; } return value; }; django.npgettext = function(context, singular, plural, count) { - var value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); - if (value.indexOf('\x04') != -1) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { value = django.ngettext(singular, plural, count); } return value; @@ -208,8 +221,8 @@ }; django.get_format = function(format_type) { - var value = django.formats[format_type]; - if (typeof(value) == 'undefined') { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { return format_type; } else { return value; @@ -228,6 +241,5 @@ django.jsi18n_initialized = true; } - -}(this)); +}; diff --git a/tabbycat/locale/jsi18n/bg/djangojs.js b/tabbycat/locale/jsi18n/bg/djangojs.js new file mode 100644 index 00000000000..3e15cf3f1e3 --- /dev/null +++ b/tabbycat/locale/jsi18n/bg/djangojs.js @@ -0,0 +1,216 @@ + + +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); + + + django.pluralidx = function(n) { + const v = (n != 1); + if (typeof v === 'boolean') { + return v ? 1 : 0; + } else { + return v; + } + }; + + + /* gettext library */ + + django.catalog = django.catalog || {}; + + const newcatalog = { + "%(sel)s of %(cnt)s selected": [ + "%(sel)s \u043d\u0430 %(cnt)s \u0435 \u0438\u0437\u0431\u0440\u0430\u043d", + "%(sel)s \u043d\u0430 %(cnt)s \u0441\u0430 \u0438\u0437\u0431\u0440\u0430\u043d\u0438" + ], + "6 a.m.": "6 \u0441\u0443\u0442\u0440\u0438\u043d\u0442\u0430", + "6 p.m.": "6 \u0441\u043b\u0435\u0434 \u043e\u0431\u044f\u0434", + "April": "\u0410\u043f\u0440\u0438\u043b", + "August": "\u0410\u0432\u0433\u0443\u0441\u0442", + "Available %s": "\u041d\u0430\u043b\u0438\u0447\u043d\u0438 %s", + "Cancel": "\u041e\u0442\u043a\u0430\u0437", + "Choose": "\u0418\u0437\u0431\u0435\u0440\u0438", + "Choose a Date": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u0430\u0442\u0430", + "Choose a Time": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0432\u0440\u0435\u043c\u0435", + "Choose a time": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0432\u0440\u0435\u043c\u0435", + "Choose all": "\u0418\u0437\u0431\u0435\u0440\u0438 \u0432\u0441\u0438\u0447\u043a\u0438", + "Chosen %s": "\u0418\u0437\u0431\u0440\u0430\u0445\u043c\u0435 %s", + "Click to choose all %s at once.": "\u041a\u043b\u0438\u043a\u043d\u0435\u0442\u0435, \u0437\u0430 \u0434\u0430 \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0432\u0441\u0438\u0447\u043a\u0438 %s \u043d\u0430\u0432\u0435\u0434\u043d\u044a\u0436.", + "Click to remove all chosen %s at once.": "\u041a\u043b\u0438\u043a\u043d\u0435\u0442\u0435, \u0437\u0430 \u0434\u0430 \u043f\u0440\u0435\u043c\u0430\u0445\u043d\u0435\u0442\u0435 \u0432\u0441\u0438\u0447\u043a\u0438 \u0438\u0437\u0431\u0440\u0430\u043d\u0438 %s \u043d\u0430\u0432\u0435\u0434\u043d\u044a\u0436.", + "December": "\u0414\u0435\u043a\u0435\u043c\u0432\u0440\u0438", + "February": "\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438", + "Filter": "\u0424\u0438\u043b\u0442\u044a\u0440", + "Hide": "\u0421\u043a\u0440\u0438\u0439", + "January": "\u042f\u043d\u0443\u0430\u0440\u0438", + "July": "\u042e\u043b\u0438", + "June": "\u042e\u043d\u0438", + "March": "\u041c\u0430\u0440\u0442", + "May": "\u041c\u0430\u0439", + "Midnight": "\u041f\u043e\u043b\u0443\u043d\u043e\u0449", + "Noon": "\u041f\u043e \u043e\u0431\u044f\u0434", + "Note: You are %s hour ahead of server time.": [ + "\u0411\u0435\u043b\u0435\u0436\u043a\u0430: \u0412\u0438\u0435 \u0441\u0442\u0435 %s \u0447\u0430\u0441 \u043d\u0430\u043f\u0440\u0435\u0434 \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u0442\u043e \u043d\u0430 \u0441\u044a\u0440\u0432\u044a\u0440\u0430.", + "\u0411\u0435\u043b\u0435\u0436\u043a\u0430: \u0412\u0438\u0435 \u0441\u0442\u0435 \u0441 %s \u0447\u0430\u0441\u0430 \u043d\u0430\u043f\u0440\u0435\u0434 \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u0442\u043e \u043d\u0430 \u0441\u044a\u0440\u0432\u044a\u0440\u0430" + ], + "Note: You are %s hour behind server time.": [ + "\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u0412\u0438\u0435 \u0441\u0442\u0435 %s \u0447\u0430\u0441 \u043d\u0430\u0437\u0430\u0434 \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u0442\u043e \u043d\u0430 \u0441\u044a\u0440\u0432\u044a\u0440\u0430.", + "\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u0412\u0438\u0435 \u0441\u0442\u0435 \u0441 %s \u0447\u0430\u0441\u0430 \u043d\u0430\u0437\u0430\u0434 \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u0442\u043e \u043d\u0430 \u0441\u044a\u0440\u0432\u044a\u0440\u0430." + ], + "November": "\u041d\u043e\u0435\u043c\u0432\u0440\u0438", + "Now": "\u0421\u0435\u0433\u0430", + "October": "\u041e\u043a\u0442\u043e\u043c\u0432\u0440\u0438", + "Remove": "\u041f\u0440\u0435\u043c\u0430\u0445\u043d\u0438", + "Remove all": "\u041f\u0440\u0435\u043c\u0430\u0445\u0432\u0430\u043d\u0435 \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u0438", + "September": "\u0421\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438", + "Show": "\u041f\u043e\u043a\u0430\u0436\u0438", + "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes.": "\u0422\u043e\u0432\u0430 \u0435 \u0441\u043f\u0438\u0441\u044a\u043a \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u043d\u0438\u0442\u0435 %s . \u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u043d\u044f\u043a\u043e\u0438, \u043a\u0430\u0442\u043e \u0433\u0438 \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0432 \u043f\u043e\u043b\u0435\u0442\u043e \u043f\u043e-\u0434\u043e\u043b\u0443 \u0438 \u0441\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u043a\u043b\u0438\u043a\u043d\u0435\u0442\u0435 \u0432\u044a\u0440\u0445\u0443 \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u0442\u0430 \"\u0418\u0437\u0431\u0435\u0440\u0438\" \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0435\u0442\u0435 \u043f\u043e\u043b\u0435\u0442\u0430.", + "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes.": "\u0422\u043e\u0432\u0430 \u0435 \u0441\u043f\u0438\u0441\u044a\u043a \u043d\u0430 \u0438\u0437\u0431\u0440\u0430\u043d\u0438\u0442\u0435 %s. \u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043f\u0440\u0435\u043c\u0430\u0445\u043d\u0435\u0442\u0435 \u043d\u044f\u043a\u043e\u0438, \u043a\u0430\u0442\u043e \u0433\u0438 \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0432 \u043f\u043e\u043b\u0435\u0442\u043e \u043f\u043e-\u0434\u043e\u043b\u0443 \u0438 \u0441\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u0449\u0440\u0430\u043a\u043d\u0435\u0442\u0435 \u0432\u044a\u0440\u0445\u0443 \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u0442\u0430 \"\u041f\u0440\u0435\u043c\u0430\u0445\u043d\u0438\" \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0435\u0442\u0435 \u043f\u043e\u043b\u0435\u0442\u0430.", + "Today": "\u0414\u043d\u0435\u0441", + "Tomorrow": "\u0423\u0442\u0440\u0435", + "Type into this box to filter down the list of available %s.": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u0432 \u0442\u043e\u0432\u0430 \u043f\u043e\u043b\u0435, \u0437\u0430 \u0434\u0430 \u0444\u0438\u043b\u0442\u0440\u0438\u0440\u0430\u0442\u0435 \u0441\u043f\u0438\u0441\u044a\u043a\u0430 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u043d\u0438\u0442\u0435 %s.", + "Yesterday": "\u0412\u0447\u0435\u0440\u0430", + "You have already submitted this form. Are you sure you want to submit it again?": "\u0412\u0435\u0447\u0435 \u0441\u0442\u0435 \u0438\u0437\u043f\u0440\u0430\u0442\u0438\u043b\u0438 \u0442\u043e\u0437\u0438 \u0444\u043e\u0440\u043c\u0443\u043b\u044f\u0440. \u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u0433\u043e \u0438\u0437\u043f\u0440\u0430\u0442\u0438\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e?", + "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "\u0412\u0438\u0435 \u0441\u0442\u0435 \u0438\u0437\u0431\u0440\u0430\u043b\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043d\u043e \u043d\u0435 \u0441\u0442\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u043f\u0440\u043e\u043c\u0435\u043d\u0438 \u043f\u043e \u043f\u043e\u043b\u0435\u0442\u0430\u0442\u0430. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0442\u044a\u0440\u0441\u0438\u0442\u0435 \u0418\u0437\u043f\u044a\u043b\u043d\u0438 \u0431\u0443\u0442\u043e\u043d\u0430, \u0430 \u043d\u0435 \u0431\u0443\u0442\u043e\u043d\u0430 \u0417\u0430\u043f\u0438\u0441.", + "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "\u0412\u0438\u0435 \u0441\u0442\u0435 \u0438\u0437\u0431\u0440\u0430\u043b\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043d\u043e \u043d\u0435 \u0441\u0442\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043f\u0440\u043e\u043c\u0435\u043d\u0438\u0442\u0435 \u043f\u043e \u043f\u043e\u043b\u0435\u0442\u0430. \u041c\u043e\u043b\u044f, \u043a\u043b\u0438\u043a\u043d\u0435\u0442\u0435 \u041e\u041a, \u0437\u0430 \u0434\u0430 \u0441\u0435 \u0437\u0430\u043f\u0438\u0448\u0430\u0442. \u0422\u0440\u044f\u0431\u0432\u0430 \u043e\u0442\u043d\u043e\u0432\u043e \u0434\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u0438\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u0442\u043e.", + "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "\u0418\u043c\u0430\u0442\u0435 \u043d\u0435\u0437\u0430\u043f\u0430\u0437\u0435\u043d\u0438 \u043f\u0440\u043e\u043c\u0435\u043d\u0438 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u043d\u0438 \u043f\u043e\u043b\u0435\u0442\u0430 \u0437\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u043d\u0435. \u0410\u043a\u043e \u0438\u0437\u043f\u044a\u043b\u043d\u0438\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043d\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0442\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438 \u0449\u0435 \u0431\u044a\u0434\u0430\u0442 \u0437\u0430\u0433\u0443\u0431\u0435\u043d\u0438.", + "abbrev. month April\u0004Apr": "\u0430\u043f\u0440.", + "abbrev. month August\u0004Aug": "\u0430\u0432\u0433.", + "abbrev. month December\u0004Dec": "\u0434\u0435\u043a.", + "abbrev. month February\u0004Feb": "\u0444\u0435\u0432\u0440.", + "abbrev. month January\u0004Jan": "\u044f\u043d.", + "abbrev. month July\u0004Jul": "\u044e\u043b\u0438", + "abbrev. month June\u0004Jun": "\u044e\u043d\u0438", + "abbrev. month March\u0004Mar": "\u043c\u0430\u0440\u0442", + "abbrev. month May\u0004May": "\u043c\u0430\u0439", + "abbrev. month November\u0004Nov": "\u043d\u043e\u0435\u043c.", + "abbrev. month October\u0004Oct": "\u043e\u043a\u0442.", + "abbrev. month September\u0004Sep": "\u0441\u0435\u043f\u0442.", + "one letter Friday\u0004F": "\u041f", + "one letter Monday\u0004M": "\u041f", + "one letter Saturday\u0004S": "\u0421", + "one letter Sunday\u0004S": "\u041d", + "one letter Thursday\u0004T": "\u0427", + "one letter Tuesday\u0004T": "\u0412", + "one letter Wednesday\u0004W": "\u0421" + }; + for (const key in newcatalog) { + django.catalog[key] = newcatalog[key]; + } + + + if (!django.jsi18n_initialized) { + django.gettext = function(msgid) { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { + return msgid; + } else { + return (typeof value === 'string') ? value : value[0]; + } + }; + + django.ngettext = function(singular, plural, count) { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { + return (count == 1) ? singular : plural; + } else { + return value.constructor === Array ? value[django.pluralidx(count)] : value; + } + }; + + django.gettext_noop = function(msgid) { return msgid; }; + + django.pgettext = function(context, msgid) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { + value = msgid; + } + return value; + }; + + django.npgettext = function(context, singular, plural, count) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { + value = django.ngettext(singular, plural, count); + } + return value; + }; + + django.interpolate = function(fmt, obj, named) { + if (named) { + return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])}); + } else { + return fmt.replace(/%s/g, function(match){return String(obj.shift())}); + } + }; + + + /* formatting library */ + + django.formats = { + "DATETIME_FORMAT": "N j, Y, P", + "DATETIME_INPUT_FORMATS": [ + "%Y-%m-%d %H:%M:%S", + "%Y-%m-%d %H:%M:%S.%f", + "%Y-%m-%d %H:%M", + "%m/%d/%Y %H:%M:%S", + "%m/%d/%Y %H:%M:%S.%f", + "%m/%d/%Y %H:%M", + "%m/%d/%y %H:%M:%S", + "%m/%d/%y %H:%M:%S.%f", + "%m/%d/%y %H:%M" + ], + "DATE_FORMAT": "d F Y", + "DATE_INPUT_FORMATS": [ + "%Y-%m-%d", + "%m/%d/%Y", + "%m/%d/%y", + "%b %d %Y", + "%b %d, %Y", + "%d %b %Y", + "%d %b, %Y", + "%B %d %Y", + "%B %d, %Y", + "%d %B %Y", + "%d %B, %Y" + ], + "DECIMAL_SEPARATOR": ",", + "FIRST_DAY_OF_WEEK": 0, + "MONTH_DAY_FORMAT": "j F", + "NUMBER_GROUPING": 0, + "SHORT_DATETIME_FORMAT": "m/d/Y P", + "SHORT_DATE_FORMAT": "d.m.Y", + "THOUSAND_SEPARATOR": "\u00a0", + "TIME_FORMAT": "H:i", + "TIME_INPUT_FORMATS": [ + "%H:%M:%S", + "%H:%M:%S.%f", + "%H:%M" + ], + "YEAR_MONTH_FORMAT": "F Y" + }; + + django.get_format = function(format_type) { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { + return format_type; + } else { + return value; + } + }; + + /* add to global namespace */ + globals.pluralidx = django.pluralidx; + globals.gettext = django.gettext; + globals.ngettext = django.ngettext; + globals.gettext_noop = django.gettext_noop; + globals.pgettext = django.pgettext; + globals.npgettext = django.npgettext; + globals.interpolate = django.interpolate; + globals.get_format = django.get_format; + + django.jsi18n_initialized = true; + } +}; + diff --git a/tabbycat/locale/jsi18n/bn/djangojs.js b/tabbycat/locale/jsi18n/bn/djangojs.js index a4643ae4dc2..16ef9a4d62f 100644 --- a/tabbycat/locale/jsi18n/bn/djangojs.js +++ b/tabbycat/locale/jsi18n/bn/djangojs.js @@ -1,13 +1,14 @@ -(function(globals) { - - var django = globals.django || (globals.django = {}); +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); django.pluralidx = function(n) { - var v=(n != 1); - if (typeof(v) == 'boolean') { + const v = (n != 1); + if (typeof v === 'boolean') { return v ? 1 : 0; } else { return v; @@ -19,7 +20,7 @@ django.catalog = django.catalog || {}; - var newcatalog = { + const newcatalog = { "6 a.m.": "\u09ec \u09aa\u09c2\u09b0\u09cd\u09ac\u09be\u09b9\u09cd\u09a8", "Available %s": "%s \u09ac\u09bf\u09a6\u09cd\u09af\u09ae\u09be\u09a8", "Break": "\u09ac\u09cd\u09b0\u09c7\u0995", @@ -53,24 +54,24 @@ "Unknown": "\u0985\u099c\u09cd\u099e\u09be\u09a4", "Yesterday": "\u0997\u09a4\u0995\u09be\u09b2" }; - for (var key in newcatalog) { + for (const key in newcatalog) { django.catalog[key] = newcatalog[key]; } if (!django.jsi18n_initialized) { django.gettext = function(msgid) { - var value = django.catalog[msgid]; - if (typeof(value) == 'undefined') { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { return msgid; } else { - return (typeof(value) == 'string') ? value : value[0]; + return (typeof value === 'string') ? value : value[0]; } }; django.ngettext = function(singular, plural, count) { - var value = django.catalog[singular]; - if (typeof(value) == 'undefined') { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { return (count == 1) ? singular : plural; } else { return value.constructor === Array ? value[django.pluralidx(count)] : value; @@ -80,16 +81,16 @@ django.gettext_noop = function(msgid) { return msgid; }; django.pgettext = function(context, msgid) { - var value = django.gettext(context + '\x04' + msgid); - if (value.indexOf('\x04') != -1) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { value = msgid; } return value; }; django.npgettext = function(context, singular, plural, count) { - var value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); - if (value.indexOf('\x04') != -1) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { value = django.ngettext(singular, plural, count); } return value; @@ -141,8 +142,8 @@ }; django.get_format = function(format_type) { - var value = django.formats[format_type]; - if (typeof(value) == 'undefined') { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { return format_type; } else { return value; @@ -161,6 +162,5 @@ django.jsi18n_initialized = true; } - -}(this)); +}; diff --git a/tabbycat/locale/jsi18n/ca/djangojs.js b/tabbycat/locale/jsi18n/ca/djangojs.js new file mode 100644 index 00000000000..94bd458686d --- /dev/null +++ b/tabbycat/locale/jsi18n/ca/djangojs.js @@ -0,0 +1,217 @@ + + +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); + + + django.pluralidx = function(n) { + const v = (n != 1); + if (typeof v === 'boolean') { + return v ? 1 : 0; + } else { + return v; + } + }; + + + /* gettext library */ + + django.catalog = django.catalog || {}; + + const newcatalog = { + "%(sel)s of %(cnt)s selected": [ + "%(sel)s de %(cnt)s seleccionat", + "%(sel)s of %(cnt)s seleccionats" + ], + "6 a.m.": "6 a.m.", + "6 p.m.": "6 p.m.", + "All": "Tot", + "April": "Abril", + "August": "Agost", + "Available %s": "%s Disponibles", + "Break": "Tall", + "Cancel": "Cancel\u00b7lar", + "Category": "Categoria", + "Choose": "Escollir", + "Choose a Date": "Escolliu una data", + "Choose a Time": "Escolliu una hora", + "Choose a time": "Escolliu una hora", + "Choose all": "Escollir-los tots", + "Chosen %s": "Escollit %s", + "Click to choose all %s at once.": "Feu clic per escollir tots els %s d'un cop.", + "Click to remove all chosen %s at once.": "Feu clic per eliminar tots els %s escollits d'un cop.", + "Confirmed": "Confirmat", + "December": "Desembre", + "February": "Febrer", + "Filter": "Filtre", + "Find in Table": "Troba a la taula", + "Hide": "Ocultar", + "January": "Gener", + "July": "Juliol", + "June": "Juny", + "Latest Actions": "\u00daltimes accions", + "March": "Mar\u00e7", + "May": "Maig", + "Midnight": "Mitjanit", + "Noon": "Migdia", + "Note: You are %s hour ahead of server time.": [ + "Nota: Aneu %s hora avan\u00e7ats respecte la hora del servidor.", + "Nota: Aneu %s hores avan\u00e7ats respecte la hora del servidor." + ], + "Note: You are %s hour behind server time.": [ + "Nota: Aneu %s hora endarrerits respecte la hora del servidor.", + "Nota: Aneu %s hores endarrerits respecte la hora del servidor." + ], + "November": "Novembre", + "Now": "Ara", + "October": "Octubre", + "Remove": "Eliminar", + "Remove all": "Esborrar-los tots", + "September": "Setembre", + "Show": "Mostrar", + "Team": "Equip", + "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes.": "Aquesta \u00e9s la llista de %s disponibles. En podeu escollir alguns seleccionant-los a la caixa de sota i fent clic a la fletxa \"Escollir\" entre les dues caixes.", + "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes.": "Aquesta \u00e9s la llista de %s escollits. En podeu eliminar alguns seleccionant-los a la caixa de sota i fent clic a la fletxa \"Eliminar\" entre les dues caixes.", + "Today": "Avui", + "Tomorrow": "Dem\u00e0", + "Type into this box to filter down the list of available %s.": "Escriviu en aquesta caixa per a filtrar la llista de %s disponibles.", + "Unknown": "Desconegut", + "Yesterday": "Ahir", + "You have already submitted this form. Are you sure you want to submit it again?": "Ja ha enviat aquest formulari. Est\u00e0s segur que vols enviar-ho de nou?", + "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "Has seleccionat una acci\u00f3 i no has fet cap canvi als camps individuals. Probablement est\u00e0s cercant el bot\u00f3 Anar enlloc del bot\u00f3 de Desar.", + "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "Has seleccionat una acci\u00f3, per\u00f2 encara no l'has desat els canvis dels camps individuals. Si us plau clica OK per desar. Necessitar\u00e0s tornar a executar l'acci\u00f3.", + "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "Teniu canvis sense desar a camps editables individuals. Si executeu una acci\u00f3, es perdran aquests canvis no desats.", + "abbrev. month April\u0004Apr": "Abr", + "abbrev. month August\u0004Aug": "Ago", + "abbrev. month December\u0004Dec": "Des", + "abbrev. month February\u0004Feb": "Feb", + "abbrev. month January\u0004Jan": "Gen", + "abbrev. month July\u0004Jul": "Jul", + "abbrev. month June\u0004Jun": "Jun", + "abbrev. month March\u0004Mar": "Mar", + "abbrev. month May\u0004May": "Mai", + "abbrev. month November\u0004Nov": "Nov", + "abbrev. month October\u0004Oct": "Oct", + "abbrev. month September\u0004Sep": "Sep", + "one letter Friday\u0004F": "V", + "one letter Monday\u0004M": "L", + "one letter Saturday\u0004S": "S", + "one letter Sunday\u0004S": "D", + "one letter Thursday\u0004T": "J", + "one letter Tuesday\u0004T": "M", + "one letter Wednesday\u0004W": "X" + }; + for (const key in newcatalog) { + django.catalog[key] = newcatalog[key]; + } + + + if (!django.jsi18n_initialized) { + django.gettext = function(msgid) { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { + return msgid; + } else { + return (typeof value === 'string') ? value : value[0]; + } + }; + + django.ngettext = function(singular, plural, count) { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { + return (count == 1) ? singular : plural; + } else { + return value.constructor === Array ? value[django.pluralidx(count)] : value; + } + }; + + django.gettext_noop = function(msgid) { return msgid; }; + + django.pgettext = function(context, msgid) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { + value = msgid; + } + return value; + }; + + django.npgettext = function(context, singular, plural, count) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { + value = django.ngettext(singular, plural, count); + } + return value; + }; + + django.interpolate = function(fmt, obj, named) { + if (named) { + return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])}); + } else { + return fmt.replace(/%s/g, function(match){return String(obj.shift())}); + } + }; + + + /* formatting library */ + + django.formats = { + "DATETIME_FORMAT": "j E \\d\\e Y \\a \\l\\e\\s G:i", + "DATETIME_INPUT_FORMATS": [ + "%d/%m/%Y %H:%M:%S", + "%d/%m/%Y %H:%M:%S.%f", + "%d/%m/%Y %H:%M", + "%d/%m/%y %H:%M:%S", + "%d/%m/%y %H:%M:%S.%f", + "%d/%m/%y %H:%M", + "%Y-%m-%d %H:%M:%S", + "%Y-%m-%d %H:%M:%S.%f", + "%Y-%m-%d %H:%M", + "%Y-%m-%d" + ], + "DATE_FORMAT": "j E \\d\\e Y", + "DATE_INPUT_FORMATS": [ + "%d/%m/%Y", + "%d/%m/%y", + "%Y-%m-%d" + ], + "DECIMAL_SEPARATOR": ",", + "FIRST_DAY_OF_WEEK": 1, + "MONTH_DAY_FORMAT": "j E", + "NUMBER_GROUPING": 3, + "SHORT_DATETIME_FORMAT": "d/m/Y G:i", + "SHORT_DATE_FORMAT": "d/m/Y", + "THOUSAND_SEPARATOR": ".", + "TIME_FORMAT": "G:i", + "TIME_INPUT_FORMATS": [ + "%H:%M:%S", + "%H:%M:%S.%f", + "%H:%M" + ], + "YEAR_MONTH_FORMAT": "F \\d\\e\\l Y" + }; + + django.get_format = function(format_type) { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { + return format_type; + } else { + return value; + } + }; + + /* add to global namespace */ + globals.pluralidx = django.pluralidx; + globals.gettext = django.gettext; + globals.ngettext = django.ngettext; + globals.gettext_noop = django.gettext_noop; + globals.pgettext = django.pgettext; + globals.npgettext = django.npgettext; + globals.interpolate = django.interpolate; + globals.get_format = django.get_format; + + django.jsi18n_initialized = true; + } +}; + diff --git a/tabbycat/locale/jsi18n/cs/djangojs.js b/tabbycat/locale/jsi18n/cs/djangojs.js new file mode 100644 index 00000000000..78dfac9f572 --- /dev/null +++ b/tabbycat/locale/jsi18n/cs/djangojs.js @@ -0,0 +1,232 @@ + + +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); + + + django.pluralidx = function(n) { + const v = (n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3; + if (typeof v === 'boolean') { + return v ? 1 : 0; + } else { + return v; + } + }; + + + /* gettext library */ + + django.catalog = django.catalog || {}; + + const newcatalog = { + "%(sel)s of %(cnt)s selected": [ + "Vybr\u00e1na je %(sel)s polo\u017eka z celkem %(cnt)s.", + "Vybr\u00e1ny jsou %(sel)s polo\u017eky z celkem %(cnt)s.", + "Vybran\u00fdch je %(sel)s polo\u017eek z celkem %(cnt)s.", + "Vybran\u00fdch je %(sel)s polo\u017eek z celkem %(cnt)s." + ], + "%1:": "%1:", + "6 a.m.": "6h r\u00e1no", + "6 p.m.": "6h ve\u010der", + "Add": "P\u0159idat", + "April": "duben", + "August": "srpen", + "Available %s": "Dostupn\u00e9 polo\u017eky: %s", + "Cancel": "Zru\u0161it", + "Choose": "Vybrat", + "Choose a Date": "Vyberte datum", + "Choose a Time": "Vyberte \u010das", + "Choose a time": "Vyberte \u010das", + "Choose all": "Vybrat v\u0161e", + "Chosen %s": "Vybran\u00e9 polo\u017eky %s", + "Click to choose all %s at once.": "Chcete-li najednou vybrat v\u0161echny polo\u017eky %s, klepn\u011bte sem.", + "Click to remove all chosen %s at once.": "Chcete-li najednou odebrat v\u0161echny vybran\u00e9 polo\u017eky %s, klepn\u011bte sem.", + "Debated": "Debatov\u00e1no", + "December": "prosinec", + "Delete": "Smazat", + "February": "\u00fanor", + "Filter": "Filtr", + "General": "Obecn\u00e9", + "Hide": "Skr\u00fdt", + "January": "leden", + "July": "\u010dervenec", + "June": "\u010derven", + "March": "b\u0159ezen", + "May": "kv\u011bten", + "Midnight": "P\u016flnoc", + "No": "Ne", + "Noon": "Poledne", + "Note: You are %s hour ahead of server time.": [ + "Pozn\u00e1mka: V\u00e1\u0161 \u010das o %s hodinu p\u0159edstihuje \u010das na serveru.", + "Pozn\u00e1mka: V\u00e1\u0161 \u010das o %s hodiny p\u0159edstihuje \u010das na serveru.", + "Pozn\u00e1mka: V\u00e1\u0161 \u010das o %s hodiny p\u0159edstihuje \u010das na serveru.", + "Pozn\u00e1mka: V\u00e1\u0161 \u010das o %s hodin p\u0159edstihuje \u010das na serveru." + ], + "Note: You are %s hour behind server time.": [ + "Pozn\u00e1mka: V\u00e1\u0161 \u010das se o %s hodinu zpo\u017e\u010fuje za \u010dasem na serveru.", + "Pozn\u00e1mka: V\u00e1\u0161 \u010das se o %s hodiny zpo\u017e\u010fuje za \u010dasem na serveru.", + "Pozn\u00e1mka: V\u00e1\u0161 \u010das se o %s hodiny zpo\u017e\u010fuje za \u010dasem na serveru.", + "Pozn\u00e1mka: V\u00e1\u0161 \u010das se o %s hodin zpo\u017e\u010fuje za \u010dasem na serveru." + ], + "November": "listopad", + "Now": "Nyn\u00ed", + "October": "\u0159\u00edjen", + "Remove": "Odebrat", + "Remove all": "Odebrat v\u0161e", + "September": "z\u00e1\u0159\u00ed", + "Show": "Zobrazit", + "Team": "T\u00fdm", + "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes.": "Seznam dostupn\u00fdch polo\u017eek %s. Jednotliv\u011b je lze vybrat tak, \u017ee na n\u011b v r\u00e1me\u010dku klepnete a pak klepnete na \u0161ipku \"Vybrat\" mezi r\u00e1me\u010dky.", + "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes.": "Seznam vybran\u00fdch polo\u017eek %s. Jednotliv\u011b je lze odebrat tak, \u017ee na n\u011b v r\u00e1me\u010dku klepnete a pak klepnete na \u0161ipku \"Odebrat mezi r\u00e1me\u010dky.", + "Today": "Dnes", + "Tomorrow": "Z\u00edtra", + "Type into this box to filter down the list of available %s.": "Chcete-li filtrovat ze seznamu dostupn\u00fdch polo\u017eek %s, za\u010dn\u011bte ps\u00e1t do tohoto pole.", + "Warning: you have unsaved changes": "Varov\u00e1n\u00ed: m\u00e1te neulo\u017een\u00e9 zm\u011bny", + "Yes": "Ano", + "Yesterday": "V\u010dera", + "You have already submitted this form. Are you sure you want to submit it again?": "Tento formul\u00e1\u0159 jste ji\u017e odeslali. Opravdu jej chcete odeslat znovu?", + "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "Byla vybr\u00e1na operace, ale dosud nedo\u0161lo k ulo\u017een\u00ed zm\u011bn jednotliv\u00fdch pol\u00ed. Patrn\u011b vyu\u017eijete tla\u010d\u00edtko Prov\u00e9st sp\u00ed\u0161e ne\u017e tla\u010d\u00edtko Ulo\u017eit.", + "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "Byla vybr\u00e1na operace, ale dosud nedo\u0161lo k ulo\u017een\u00ed zm\u011bn jednotliv\u00fdch pol\u00ed. Ulo\u017e\u00edte klepnut\u00edm na tla\u010d\u00edtko OK. Pak bude t\u0159eba operaci spustit znovu.", + "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "V jednotliv\u00fdch pol\u00edch jsou neulo\u017een\u00e9 zm\u011bny, kter\u00e9 budou ztraceny, pokud operaci provedete.", + "abbrev. month April\u0004Apr": "Dub", + "abbrev. month August\u0004Aug": "Srp", + "abbrev. month December\u0004Dec": "Pro", + "abbrev. month February\u0004Feb": "\u00dano", + "abbrev. month January\u0004Jan": "Led", + "abbrev. month July\u0004Jul": "\u010cvc", + "abbrev. month June\u0004Jun": "\u010cvn", + "abbrev. month March\u0004Mar": "B\u0159e", + "abbrev. month May\u0004May": "Kv\u011b", + "abbrev. month November\u0004Nov": "Lis", + "abbrev. month October\u0004Oct": "\u0158\u00edj", + "abbrev. month September\u0004Sep": "Z\u00e1\u0159", + "deselect all": "odzna\u010dit v\u0161e", + "one letter Friday\u0004F": "P", + "one letter Monday\u0004M": "P", + "one letter Saturday\u0004S": "S", + "one letter Sunday\u0004S": "N", + "one letter Thursday\u0004T": "\u010c", + "one letter Tuesday\u0004T": "\u00da", + "one letter Wednesday\u0004W": "S", + "select all": "ozna\u010dit v\u0161e" + }; + for (const key in newcatalog) { + django.catalog[key] = newcatalog[key]; + } + + + if (!django.jsi18n_initialized) { + django.gettext = function(msgid) { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { + return msgid; + } else { + return (typeof value === 'string') ? value : value[0]; + } + }; + + django.ngettext = function(singular, plural, count) { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { + return (count == 1) ? singular : plural; + } else { + return value.constructor === Array ? value[django.pluralidx(count)] : value; + } + }; + + django.gettext_noop = function(msgid) { return msgid; }; + + django.pgettext = function(context, msgid) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { + value = msgid; + } + return value; + }; + + django.npgettext = function(context, singular, plural, count) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { + value = django.ngettext(singular, plural, count); + } + return value; + }; + + django.interpolate = function(fmt, obj, named) { + if (named) { + return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])}); + } else { + return fmt.replace(/%s/g, function(match){return String(obj.shift())}); + } + }; + + + /* formatting library */ + + django.formats = { + "DATETIME_FORMAT": "j. E Y G:i", + "DATETIME_INPUT_FORMATS": [ + "%d.%m.%Y %H:%M:%S", + "%d.%m.%Y %H:%M:%S.%f", + "%d.%m.%Y %H.%M", + "%d.%m.%Y %H:%M", + "%d. %m. %Y %H:%M:%S", + "%d. %m. %Y %H:%M:%S.%f", + "%d. %m. %Y %H.%M", + "%d. %m. %Y %H:%M", + "%Y-%m-%d %H.%M", + "%Y-%m-%d %H:%M:%S", + "%Y-%m-%d %H:%M:%S.%f", + "%Y-%m-%d %H:%M", + "%Y-%m-%d" + ], + "DATE_FORMAT": "j. E Y", + "DATE_INPUT_FORMATS": [ + "%d.%m.%Y", + "%d.%m.%y", + "%d. %m. %Y", + "%d. %m. %y", + "%Y-%m-%d" + ], + "DECIMAL_SEPARATOR": ",", + "FIRST_DAY_OF_WEEK": 1, + "MONTH_DAY_FORMAT": "j. F", + "NUMBER_GROUPING": 3, + "SHORT_DATETIME_FORMAT": "d.m.Y G:i", + "SHORT_DATE_FORMAT": "d.m.Y", + "THOUSAND_SEPARATOR": "\u00a0", + "TIME_FORMAT": "G:i", + "TIME_INPUT_FORMATS": [ + "%H:%M:%S", + "%H.%M", + "%H:%M", + "%H:%M:%S.%f" + ], + "YEAR_MONTH_FORMAT": "F Y" + }; + + django.get_format = function(format_type) { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { + return format_type; + } else { + return value; + } + }; + + /* add to global namespace */ + globals.pluralidx = django.pluralidx; + globals.gettext = django.gettext; + globals.ngettext = django.ngettext; + globals.gettext_noop = django.gettext_noop; + globals.pgettext = django.pgettext; + globals.npgettext = django.npgettext; + globals.interpolate = django.interpolate; + globals.get_format = django.get_format; + + django.jsi18n_initialized = true; + } +}; + diff --git a/tabbycat/locale/jsi18n/de/djangojs.js b/tabbycat/locale/jsi18n/de/djangojs.js new file mode 100644 index 00000000000..e7b00edfe74 --- /dev/null +++ b/tabbycat/locale/jsi18n/de/djangojs.js @@ -0,0 +1,216 @@ + + +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); + + + django.pluralidx = function(count) { return (count == 1) ? 0 : 1; }; + + + /* gettext library */ + + django.catalog = django.catalog || {}; + + const newcatalog = { + "%(sel)s of %(cnt)s selected": [ + "%(sel)s von %(cnt)s ausgew\u00e4hlt", + "%(sel)s von %(cnt)s ausgew\u00e4hlt" + ], + "%s selected option not visible": [ + "%s ausgew\u00e4hlte Option nicht sichtbar", + "%s ausgew\u00e4hlte Optionen nicht sichtbar" + ], + "6 a.m.": "6 Uhr", + "6 p.m.": "18 Uhr", + "April": "April", + "August": "August", + "Available %s": "Verf\u00fcgbare %s", + "Break": "Break", + "Cancel": "Abbrechen", + "Category": "Kategorie", + "Choose": "Ausw\u00e4hlen", + "Choose a Date": "Datum w\u00e4hlen", + "Choose a Time": "Uhrzeit w\u00e4hlen", + "Choose a time": "Uhrzeit", + "Choose all": "Alle ausw\u00e4hlen", + "Chosen %s": "Ausgew\u00e4hlte %s", + "Click to choose all %s at once.": "Klicken, um alle %s auf einmal auszuw\u00e4hlen.", + "Click to remove all chosen %s at once.": "Klicken, um alle ausgew\u00e4hlten %s auf einmal zu entfernen.", + "December": "Dezember", + "February": "Februar", + "Filter": "Filter", + "Gender": "Geschlecht", + "General": "Allgemein", + "Hide": "Ausblenden", + "January": "Januar", + "July": "Juli", + "June": "Juni", + "March": "M\u00e4rz", + "May": "Mai", + "Midnight": "Mitternacht", + "Noon": "Mittag", + "Note: You are %s hour ahead of server time.": [ + "Achtung: Sie sind %s Stunde der Serverzeit vorraus.", + "Achtung: Sie sind %s Stunden der Serverzeit vorraus." + ], + "Note: You are %s hour behind server time.": [ + "Achtung: Sie sind %s Stunde hinter der Serverzeit.", + "Achtung: Sie sind %s Stunden hinter der Serverzeit." + ], + "November": "November", + "Now": "Jetzt", + "October": "Oktober", + "Rank": "Rang", + "Region": "Region", + "Remove": "Entfernen", + "Remove all": "Alle entfernen", + "September": "September", + "Show": "Einblenden", + "Team": "Team", + "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes.": "Dies ist die Liste der verf\u00fcgbaren %s. Einfach im unten stehenden Feld markieren und mithilfe des \u201eAusw\u00e4hlen\u201c-Pfeils ausw\u00e4hlen.", + "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes.": "Dies ist die Liste der ausgew\u00e4hlten %s. Einfach im unten stehenden Feld markieren und mithilfe des \u201eEntfernen\u201c-Pfeils wieder entfernen.", + "Today": "Heute", + "Tomorrow": "Morgen", + "Total:": "Gesamt:", + "Trainee": "Jurierlehrling", + "Type into this box to filter down the list of available %s.": "Durch Eingabe in diesem Feld l\u00e4sst sich die Liste der verf\u00fcgbaren %s eingrenzen.", + "Type into this box to filter down the list of selected %s.": "In diesem Feld tippen, um die Liste der ausgew\u00e4hlten %s einzuschr\u00e4nken.", + "Venue:": "Raum:", + "Warning: you have unsaved changes": "Warnung: es gibt ungesicherte \u00c4nderungen", + "Yesterday": "Gestern", + "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "Sie haben eine Aktion ausgew\u00e4hlt, aber keine \u00c4nderungen an bearbeitbaren Feldern vorgenommen. Sie wollten wahrscheinlich auf \u201eAusf\u00fchren\u201c und nicht auf \u201eSpeichern\u201c klicken.", + "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "Sie haben eine Aktion ausgew\u00e4hlt, aber Ihre vorgenommenen \u00c4nderungen nicht gespeichert. Klicken Sie OK, um dennoch zu speichern. Danach m\u00fcssen Sie die Aktion erneut ausf\u00fchren.", + "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "Sie haben \u00c4nderungen an bearbeitbaren Feldern vorgenommen und nicht gespeichert. Wollen Sie die Aktion trotzdem ausf\u00fchren und Ihre \u00c4nderungen verwerfen?", + "abbrev. month April\u0004Apr": "Apr", + "abbrev. month August\u0004Aug": "Aug", + "abbrev. month December\u0004Dec": "Dez", + "abbrev. month February\u0004Feb": "Feb", + "abbrev. month January\u0004Jan": "Jan", + "abbrev. month July\u0004Jul": "Jul", + "abbrev. month June\u0004Jun": "Jun", + "abbrev. month March\u0004Mar": "Mrz", + "abbrev. month May\u0004May": "Mai", + "abbrev. month November\u0004Nov": "Nov", + "abbrev. month October\u0004Oct": "Okt", + "abbrev. month September\u0004Sep": "Sep", + "deselect all": "Alle abw\u00e4hlen", + "one letter Friday\u0004F": "Fr", + "one letter Monday\u0004M": "Mo", + "one letter Saturday\u0004S": "Sa", + "one letter Sunday\u0004S": "So", + "one letter Thursday\u0004T": "Do", + "one letter Tuesday\u0004T": "Di", + "one letter Wednesday\u0004W": "Mi", + "select all": "Alle ausw\u00e4hlen" + }; + for (const key in newcatalog) { + django.catalog[key] = newcatalog[key]; + } + + + if (!django.jsi18n_initialized) { + django.gettext = function(msgid) { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { + return msgid; + } else { + return (typeof value === 'string') ? value : value[0]; + } + }; + + django.ngettext = function(singular, plural, count) { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { + return (count == 1) ? singular : plural; + } else { + return value.constructor === Array ? value[django.pluralidx(count)] : value; + } + }; + + django.gettext_noop = function(msgid) { return msgid; }; + + django.pgettext = function(context, msgid) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { + value = msgid; + } + return value; + }; + + django.npgettext = function(context, singular, plural, count) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { + value = django.ngettext(singular, plural, count); + } + return value; + }; + + django.interpolate = function(fmt, obj, named) { + if (named) { + return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])}); + } else { + return fmt.replace(/%s/g, function(match){return String(obj.shift())}); + } + }; + + + /* formatting library */ + + django.formats = { + "DATETIME_FORMAT": "j. F Y H:i", + "DATETIME_INPUT_FORMATS": [ + "%d.%m.%Y %H:%M:%S", + "%d.%m.%Y %H:%M:%S.%f", + "%d.%m.%Y %H:%M", + "%Y-%m-%d %H:%M:%S", + "%Y-%m-%d %H:%M:%S.%f", + "%Y-%m-%d %H:%M", + "%Y-%m-%d" + ], + "DATE_FORMAT": "j. F Y", + "DATE_INPUT_FORMATS": [ + "%d.%m.%Y", + "%d.%m.%y", + "%Y-%m-%d" + ], + "DECIMAL_SEPARATOR": ",", + "FIRST_DAY_OF_WEEK": 1, + "MONTH_DAY_FORMAT": "j. F", + "NUMBER_GROUPING": 3, + "SHORT_DATETIME_FORMAT": "d.m.Y H:i", + "SHORT_DATE_FORMAT": "d.m.Y", + "THOUSAND_SEPARATOR": ".", + "TIME_FORMAT": "H:i", + "TIME_INPUT_FORMATS": [ + "%H:%M:%S", + "%H:%M:%S.%f", + "%H:%M" + ], + "YEAR_MONTH_FORMAT": "F Y" + }; + + django.get_format = function(format_type) { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { + return format_type; + } else { + return value; + } + }; + + /* add to global namespace */ + globals.pluralidx = django.pluralidx; + globals.gettext = django.gettext; + globals.ngettext = django.ngettext; + globals.gettext_noop = django.gettext_noop; + globals.pgettext = django.pgettext; + globals.npgettext = django.npgettext; + globals.interpolate = django.interpolate; + globals.get_format = django.get_format; + + django.jsi18n_initialized = true; + } +}; + diff --git a/tabbycat/locale/jsi18n/en/djangojs.js b/tabbycat/locale/jsi18n/en/djangojs.js index e2dc3dea4d5..8d96dae9c89 100644 --- a/tabbycat/locale/jsi18n/en/djangojs.js +++ b/tabbycat/locale/jsi18n/en/djangojs.js @@ -1,8 +1,9 @@ -(function(globals) { - - var django = globals.django || (globals.django = {}); +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); django.pluralidx = function(count) { return (count == 1) ? 0 : 1; }; @@ -15,17 +16,17 @@ if (!django.jsi18n_initialized) { django.gettext = function(msgid) { - var value = django.catalog[msgid]; - if (typeof(value) == 'undefined') { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { return msgid; } else { - return (typeof(value) == 'string') ? value : value[0]; + return (typeof value === 'string') ? value : value[0]; } }; django.ngettext = function(singular, plural, count) { - var value = django.catalog[singular]; - if (typeof(value) == 'undefined') { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { return (count == 1) ? singular : plural; } else { return value.constructor === Array ? value[django.pluralidx(count)] : value; @@ -35,16 +36,16 @@ django.gettext_noop = function(msgid) { return msgid; }; django.pgettext = function(context, msgid) { - var value = django.gettext(context + '\x04' + msgid); - if (value.indexOf('\x04') != -1) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { value = msgid; } return value; }; django.npgettext = function(context, singular, plural, count) { - var value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); - if (value.indexOf('\x04') != -1) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { value = django.ngettext(singular, plural, count); } return value; @@ -98,8 +99,8 @@ }; django.get_format = function(format_type) { - var value = django.formats[format_type]; - if (typeof(value) == 'undefined') { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { return format_type; } else { return value; @@ -118,6 +119,5 @@ django.jsi18n_initialized = true; } - -}(this)); +}; diff --git a/tabbycat/locale/jsi18n/es/djangojs.js b/tabbycat/locale/jsi18n/es/djangojs.js index cdf1fc3d37c..45a96f19139 100644 --- a/tabbycat/locale/jsi18n/es/djangojs.js +++ b/tabbycat/locale/jsi18n/es/djangojs.js @@ -1,18 +1,26 @@ -(function(globals) { - - var django = globals.django || (globals.django = {}); +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); - django.pluralidx = function(count) { return (count == 1) ? 0 : 1; }; + django.pluralidx = function(n) { + const v = (n != 1); + if (typeof v === 'boolean') { + return v ? 1 : 0; + } else { + return v; + } + }; /* gettext library */ django.catalog = django.catalog || {}; - var newcatalog = { + const newcatalog = { "%(sel)s of %(cnt)s selected": [ "%(sel)s de %(cnt)s seleccionado", "%(sel)s de %(cnt)s seleccionados" @@ -26,8 +34,8 @@ "Available %s": "%s Disponibles", "Cancel": "Cancelar", "Choose": "Elegir", - "Choose a Date": "Elija una fecha", - "Choose a Time": "Elija una hora", + "Choose a Date": "Elija una Fecha", + "Choose a Time": "Elija una Hora", "Choose a time": "Elija una hora", "Choose all": "Selecciona todos", "Chosen %s": "%s elegidos", @@ -39,7 +47,7 @@ "February": "Febrero", "Filter": "Filtro", "General": "General", - "Hide": "Esconder", + "Hide": "Ocultar", "January": "Enero", "July": "Julio", "June": "Junio", @@ -67,12 +75,25 @@ "Today": "Hoy", "Tomorrow": "Ma\u00f1ana", "Type into this box to filter down the list of available %s.": "Escriba en este cuadro para filtrar la lista de %s disponibles", + "Type into this box to filter down the list of selected %s.": "Escriba en este cuadro para filtrar la lista de %s seleccionados.", "Warning: you have unsaved changes": "Advertencia: Tiene cambios que no ha guardado", "Yes": "S\u00ed", "Yesterday": "Ayer", - "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button.": "Ha seleccionado una acci\u00f3n y no hs hecho ning\u00fan cambio en campos individuales. Probablemente est\u00e9 buscando el bot\u00f3n Ejecutar en lugar del bot\u00f3n Guardar.", - "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.": "Ha seleccionado una acci\u00f3n, pero no ha guardado los cambios en los campos individuales todav\u00eda. Pulse OK para guardar. Tendr\u00e1 que volver a ejecutar la acci\u00f3n.", + "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "Ha seleccionado una acci\u00f3n y no ha realizado ning\u00fan cambio en campos individuales. Probablemente est\u00e9 buscando el bot\u00f3n 'Ir' en lugar del bot\u00f3n 'Guardar'.", + "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "Ha seleccionado una acci\u00f3n, pero a\u00fan no ha guardado los cambios en los campos individuales. Haga clic en Aceptar para guardar. Deber\u00e1 volver a ejecutar la acci\u00f3n.", "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "Tiene cambios sin guardar en campos editables individuales. Si ejecuta una acci\u00f3n, los cambios no guardados se perder\u00e1n.", + "abbrev. month April\u0004Apr": "Abr", + "abbrev. month August\u0004Aug": "Ago", + "abbrev. month December\u0004Dec": "Dic", + "abbrev. month February\u0004Feb": "Feb", + "abbrev. month January\u0004Jan": "Ene", + "abbrev. month July\u0004Jul": "Jul", + "abbrev. month June\u0004Jun": "Jun", + "abbrev. month March\u0004Mar": "Mar", + "abbrev. month May\u0004May": "May", + "abbrev. month November\u0004Nov": "Nov", + "abbrev. month October\u0004Oct": "Oct", + "abbrev. month September\u0004Sep": "Sep", "deselect all": "deseleccionar todos", "one letter Friday\u0004F": "V", "one letter Monday\u0004M": "L", @@ -83,24 +104,24 @@ "one letter Wednesday\u0004W": "M", "select all": "seleccionar todos" }; - for (var key in newcatalog) { + for (const key in newcatalog) { django.catalog[key] = newcatalog[key]; } if (!django.jsi18n_initialized) { django.gettext = function(msgid) { - var value = django.catalog[msgid]; - if (typeof(value) == 'undefined') { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { return msgid; } else { - return (typeof(value) == 'string') ? value : value[0]; + return (typeof value === 'string') ? value : value[0]; } }; django.ngettext = function(singular, plural, count) { - var value = django.catalog[singular]; - if (typeof(value) == 'undefined') { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { return (count == 1) ? singular : plural; } else { return value.constructor === Array ? value[django.pluralidx(count)] : value; @@ -110,16 +131,16 @@ django.gettext_noop = function(msgid) { return msgid; }; django.pgettext = function(context, msgid) { - var value = django.gettext(context + '\x04' + msgid); - if (value.indexOf('\x04') != -1) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { value = msgid; } return value; }; django.npgettext = function(context, singular, plural, count) { - var value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); - if (value.indexOf('\x04') != -1) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { value = django.ngettext(singular, plural, count); } return value; @@ -162,7 +183,7 @@ "NUMBER_GROUPING": 3, "SHORT_DATETIME_FORMAT": "d/m/Y H:i", "SHORT_DATE_FORMAT": "d/m/Y", - "THOUSAND_SEPARATOR": ".", + "THOUSAND_SEPARATOR": "\u00a0", "TIME_FORMAT": "H:i", "TIME_INPUT_FORMATS": [ "%H:%M:%S", @@ -173,8 +194,8 @@ }; django.get_format = function(format_type) { - var value = django.formats[format_type]; - if (typeof(value) == 'undefined') { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { return format_type; } else { return value; @@ -193,6 +214,5 @@ django.jsi18n_initialized = true; } - -}(this)); +}; diff --git a/tabbycat/locale/jsi18n/fr/djangojs.js b/tabbycat/locale/jsi18n/fr/djangojs.js index 35a96e90046..2e6390229a2 100644 --- a/tabbycat/locale/jsi18n/fr/djangojs.js +++ b/tabbycat/locale/jsi18n/fr/djangojs.js @@ -1,18 +1,26 @@ -(function(globals) { - - var django = globals.django || (globals.django = {}); +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); - django.pluralidx = function(count) { return (count == 1) ? 0 : 1; }; + django.pluralidx = function(n) { + const v = (n > 1); + if (typeof v === 'boolean') { + return v ? 1 : 0; + } else { + return v; + } + }; /* gettext library */ django.catalog = django.catalog || {}; - var newcatalog = { + const newcatalog = { "%(sel)s of %(cnt)s selected": [ "%(sel)s sur %(cnt)s s\u00e9lectionn\u00e9", "%(sel)s sur %(cnt)s s\u00e9lectionn\u00e9s" @@ -38,13 +46,16 @@ "%1, a %2 of no institutional affiliation with no assigned identifier": "%1, un %2 sans affiliation ni identifiant", "%1, a team with speakers %2": "%1, un \u00e9quipe avec orateurs %2", "%1:": "%1\u00a0:", + "%s selected option not visible": [ + "%s option s\u00e9lectionn\u00e9e invisible", + "%s options s\u00e9lectionn\u00e9es invisibles" + ], "6 a.m.": "6:00", "6 p.m.": "18:00", "; ": " ; ", "%1: %2": "%1\u00a0: %2", "\u2613 All": "\u2613 Tous", "\u2713 All": "\u2713 Tous", - "Add": "Ajouter", "Add Ballot": "Ajouter feuille", "Adjudicating with %1.": "Jugeant avec %1.", "Adjudicator Demographics": "D\u00e9mographiques des juges", @@ -86,13 +97,11 @@ "Copy From Check-Ins": "Copier \u00e0 partir des enregistrements", "Debated": "D\u00e9battu", "December": "D\u00e9cembre", - "Delete": "\u00c9ffacer", "Did %1 deliver the adjudication?": "%1 a-t-il livr\u00e9 le jugement\u00a0?", "February": "F\u00e9vrier", "Filter": "Filtrer", "Find in Table": "Trouver dans la table", "Gender": "Genre", - "General": "G\u00e9n\u00e9ral", "Hide": "Masquer", "ID %1,": "ID %1,", "IMPORTANT: Check and explicitly note if a speaker gives multiple speeches": "IMPORTANT\u00a0: Cochez et notez explicitement si un orateur a donn\u00e9 plusieurs discours", @@ -180,12 +189,12 @@ "Trainee": "Stagiaire", "Turn On Sounds": "Activer les sons", "Type into this box to filter down the list of available %s.": "\u00c9crivez dans cette zone pour filtrer la liste des \u00ab\u00a0%s\u00a0\u00bb disponibles.", + "Type into this box to filter down the list of selected %s.": "\u00c9crivez dans cette zone pour filtrer la liste des \u00ab\u00a0%s\u00a0\u00bb s\u00e9lectionn\u00e9\u00b7e\u00b7s.", "Unaffiliated": "Non-affili\u00e9", "Uncategorised": "Non cat\u00e9goris\u00e9", "Unconfirmed": "Non-confirm\u00e9", "Unknown": "Inconnu", "Unsure": "Incertain", - "Warning: you have unsaved changes": "Attention: vous avez des modifications non sauvegard\u00e9es", "Which team won the debate:": "Quelle \u00e9quipe \u00e0 gagn\u00e9 le d\u00e9bat\u00a0:", "Yes": "Oui", "Yesterday": "Hier", @@ -193,9 +202,20 @@ "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "Vous avez s\u00e9lectionn\u00e9 une action, et vous n'avez fait aucune modification sur des champs. Vous cherchez probablement le bouton Envoyer et non le bouton Enregistrer.", "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "Vous avez s\u00e9lectionn\u00e9 une action, mais vous n'avez pas encore enregistr\u00e9 certains champs modifi\u00e9s. Cliquez sur OK pour enregistrer. Vous devrez r\u00e9appliquer l'action.", "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "Vous avez des modifications non sauvegard\u00e9es sur certains champs \u00e9ditables. Si vous lancez une action, ces modifications vont \u00eatre perdues.", + "abbrev. month April\u0004Apr": "avr", + "abbrev. month August\u0004Aug": "ao\u00fb", + "abbrev. month December\u0004Dec": "d\u00e9c", + "abbrev. month February\u0004Feb": "f\u00e9v", + "abbrev. month January\u0004Jan": "jan", + "abbrev. month July\u0004Jul": "jui", + "abbrev. month June\u0004Jun": "jun", + "abbrev. month March\u0004Mar": "mar", + "abbrev. month May\u0004May": "mai", + "abbrev. month November\u0004Nov": "nov", + "abbrev. month October\u0004Oct": "oct", + "abbrev. month September\u0004Sep": "sep", "adjudicators with gender data": "juges avec donn\u00e9es de genre", "decimal marks are allowed": "demi-scores sont permises", - "deselect all": "d\u00e9s\u00e9lectionner tout", "feedback scores total": "totale des scores d\u2019\u00e9valuation", "no \u00bd marks": "pas de demi-points", "one letter Friday\u0004F": "V", @@ -206,31 +226,30 @@ "one letter Tuesday\u0004T": "M", "one letter Wednesday\u0004W": "M", "saving...": "enregistrement en cours...", - "select all": "s\u00e9lectionner tout", "speaker scores total": "total des scores d\u2019orateur", "speakers with gender data": "orateurs avec donn\u00e9es de genre", "tab check": "v\u00e9rification tab", "tab entry": "saisie tab", "\u00bd marks are allowed": "demi-points sont permises" }; - for (var key in newcatalog) { + for (const key in newcatalog) { django.catalog[key] = newcatalog[key]; } if (!django.jsi18n_initialized) { django.gettext = function(msgid) { - var value = django.catalog[msgid]; - if (typeof(value) == 'undefined') { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { return msgid; } else { - return (typeof(value) == 'string') ? value : value[0]; + return (typeof value === 'string') ? value : value[0]; } }; django.ngettext = function(singular, plural, count) { - var value = django.catalog[singular]; - if (typeof(value) == 'undefined') { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { return (count == 1) ? singular : plural; } else { return value.constructor === Array ? value[django.pluralidx(count)] : value; @@ -240,16 +259,16 @@ django.gettext_noop = function(msgid) { return msgid; }; django.pgettext = function(context, msgid) { - var value = django.gettext(context + '\x04' + msgid); - if (value.indexOf('\x04') != -1) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { value = msgid; } return value; }; django.npgettext = function(context, singular, plural, count) { - var value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); - if (value.indexOf('\x04') != -1) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { value = django.ngettext(singular, plural, count); } return value; @@ -305,8 +324,8 @@ }; django.get_format = function(format_type) { - var value = django.formats[format_type]; - if (typeof(value) == 'undefined') { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { return format_type; } else { return value; @@ -325,6 +344,5 @@ django.jsi18n_initialized = true; } - -}(this)); +}; diff --git a/tabbycat/locale/jsi18n/he/djangojs.js b/tabbycat/locale/jsi18n/he/djangojs.js new file mode 100644 index 00000000000..9a89975d0b7 --- /dev/null +++ b/tabbycat/locale/jsi18n/he/djangojs.js @@ -0,0 +1,222 @@ + + +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); + + + django.pluralidx = function(n) { + const v = n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3; + if (typeof v === 'boolean') { + return v ? 1 : 0; + } else { + return v; + } + }; + + + /* gettext library */ + + django.catalog = django.catalog || {}; + + const newcatalog = { + "%(sel)s of %(cnt)s selected": [ + "%(sel)s \u05de %(cnt)s \u05e0\u05d1\u05d7\u05e8\u05d5\u05ea", + "%(sel)s \u05de %(cnt)s \u05e0\u05d1\u05d7\u05e8\u05d5\u05ea", + "%(sel)s \u05de %(cnt)s \u05e0\u05d1\u05d7\u05e8\u05d5\u05ea", + "%(sel)s \u05de %(cnt)s \u05e0\u05d1\u05d7\u05e8\u05d5\u05ea" + ], + "6 a.m.": "6 \u05d1\u05d1\u05d5\u05e7\u05e8", + "6 p.m.": "6 \u05d0\u05d7\u05e8 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd", + "April": "\u05d0\u05e4\u05e8\u05d9\u05dc", + "August": "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8", + "Available %s": "\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea %s \u05d6\u05de\u05d9\u05e0\u05d5\u05ea", + "Cancel": "\u05d1\u05d9\u05d8\u05d5\u05dc", + "Choose": "\u05d1\u05d7\u05e8", + "Choose a Date": "\u05d1\u05d7\u05d9\u05e8\u05ea \u05ea\u05d0\u05e8\u05d9\u05da", + "Choose a Time": "\u05d1\u05d7\u05d9\u05e8\u05ea \u05e9\u05e2\u05d4", + "Choose a time": "\u05d1\u05d7\u05d9\u05e8\u05ea \u05e9\u05e2\u05d4", + "Choose all": "\u05d1\u05d7\u05d9\u05e8\u05ea \u05d4\u05db\u05dc", + "Chosen %s": "%s \u05d0\u05e9\u05e8 \u05e0\u05d1\u05d7\u05e8\u05d5", + "Click to choose all %s at once.": "\u05d1\u05d7\u05d9\u05e8\u05ea \u05db\u05dc \u05d4%s \u05d1\u05d1\u05ea \u05d0\u05d7\u05ea.", + "Click to remove all chosen %s at once.": "\u05d4\u05e1\u05e8\u05ea \u05db\u05dc %s \u05d0\u05e9\u05e8 \u05e0\u05d1\u05d7\u05e8\u05d5 \u05d1\u05d1\u05ea \u05d0\u05d7\u05ea.", + "December": "\u05d3\u05e6\u05de\u05d1\u05e8", + "February": "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8", + "Filter": "\u05e1\u05d9\u05e0\u05d5\u05df", + "Hide": "\u05d4\u05e1\u05ea\u05e8", + "January": "\u05d9\u05e0\u05d5\u05d0\u05e8", + "July": "\u05d9\u05d5\u05dc\u05d9", + "June": "\u05d9\u05d5\u05e0\u05d9", + "March": "\u05de\u05e8\u05e5", + "May": "\u05de\u05d0\u05d9", + "Midnight": "\u05d7\u05e6\u05d5\u05ea", + "Noon": "12 \u05d1\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd", + "Note: You are %s hour ahead of server time.": [ + "\u05d4\u05e2\u05e8\u05d4: \u05d0\u05ea/\u05d4 %s \u05e9\u05e2\u05d4 \u05dc\u05e4\u05e0\u05d9 \u05d6\u05de\u05df \u05d4\u05e9\u05e8\u05ea.", + "\u05d4\u05e2\u05e8\u05d4: \u05d0\u05ea/\u05d4 %s \u05e9\u05e2\u05d5\u05ea \u05dc\u05e4\u05e0\u05d9 \u05d6\u05de\u05df \u05d4\u05e9\u05e8\u05ea.", + "\u05d4\u05e2\u05e8\u05d4: \u05d0\u05ea/\u05d4 %s \u05e9\u05e2\u05d5\u05ea \u05dc\u05e4\u05e0\u05d9 \u05d6\u05de\u05df \u05d4\u05e9\u05e8\u05ea.", + "\u05d4\u05e2\u05e8\u05d4: \u05d0\u05ea/\u05d4 %s \u05e9\u05e2\u05d5\u05ea \u05dc\u05e4\u05e0\u05d9 \u05d6\u05de\u05df \u05d4\u05e9\u05e8\u05ea." + ], + "Note: You are %s hour behind server time.": [ + "\u05d4\u05e2\u05e8\u05d4: \u05d0\u05ea/\u05d4 %s \u05e9\u05e2\u05d4 \u05d0\u05d7\u05e8\u05d9 \u05d6\u05de\u05df \u05d4\u05e9\u05e8\u05ea.", + "\u05d4\u05e2\u05e8\u05d4: \u05d0\u05ea/\u05d4 %s \u05e9\u05e2\u05d5\u05ea \u05d0\u05d7\u05e8\u05d9 \u05d6\u05de\u05df \u05d4\u05e9\u05e8\u05ea.", + "\u05d4\u05e2\u05e8\u05d4: \u05d0\u05ea/\u05d4 %s \u05e9\u05e2\u05d5\u05ea \u05d0\u05d7\u05e8\u05d9 \u05d6\u05de\u05df \u05d4\u05e9\u05e8\u05ea.", + "\u05d4\u05e2\u05e8\u05d4: \u05d0\u05ea/\u05d4 %s \u05e9\u05e2\u05d5\u05ea \u05d0\u05d7\u05e8\u05d9 \u05d6\u05de\u05df \u05d4\u05e9\u05e8\u05ea." + ], + "November": "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8", + "Now": "\u05db\u05e2\u05ea", + "October": "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8", + "Remove": "\u05d4\u05e1\u05e8\u05d4", + "Remove all": "\u05d4\u05e1\u05e8\u05ea \u05d4\u05db\u05dc", + "September": "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8", + "Show": "\u05d4\u05e6\u05d2", + "Team": "\u05e7\u05d1\u05d5\u05e6\u05d4", + "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes.": "\u05d6\u05d5 \u05e8\u05e9\u05d9\u05de\u05ea %s \u05d4\u05d6\u05de\u05d9\u05e0\u05d9\u05dd \u05dc\u05d1\u05d7\u05d9\u05e8\u05d4. \u05e0\u05d9\u05ea\u05df \u05dc\u05d1\u05d7\u05d5\u05e8 \u05d7\u05dc\u05e7 \u05e2\"\u05d9 \u05e1\u05d9\u05de\u05d5\u05df \u05d1\u05ea\u05d9\u05d1\u05d4 \u05de\u05ea\u05d7\u05ea \u05d5\u05dc\u05d7\u05d9\u05e6\u05d4 \u05e2\u05dc \u05d7\u05e5 \"\u05d1\u05d7\u05e8\" \u05d1\u05d9\u05df \u05e9\u05ea\u05d9 \u05d4\u05ea\u05d9\u05d1\u05d5\u05ea.", + "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes.": "\u05d6\u05d5 \u05e8\u05e9\u05d9\u05de\u05ea %s \u05d0\u05e9\u05e8 \u05e0\u05d1\u05d7\u05e8\u05d5. \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e1\u05d9\u05e8 \u05d7\u05dc\u05e7 \u05e2\"\u05d9 \u05d1\u05d7\u05d9\u05e8\u05d4 \u05d1\u05ea\u05d9\u05d1\u05d4 \u05de\u05ea\u05d7\u05ea \u05d5\u05dc\u05d7\u05d9\u05e6\u05d4 \u05e2\u05dc \u05d7\u05e5 \"\u05d4\u05e1\u05e8\u05d4\" \u05d1\u05d9\u05df \u05e9\u05ea\u05d9 \u05d4\u05ea\u05d9\u05d1\u05d5\u05ea.", + "Today": "\u05d4\u05d9\u05d5\u05dd", + "Tomorrow": "\u05de\u05d7\u05e8", + "Type into this box to filter down the list of available %s.": "\u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e7\u05dc\u05d9\u05d3 \u05d1\u05ea\u05d9\u05d1\u05d4 \u05d6\u05d5 \u05db\u05d3\u05d9 \u05dc\u05e1\u05e0\u05df %s.", + "Yesterday": "\u05d0\u05ea\u05de\u05d5\u05dc", + "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "\u05d1\u05d7\u05e8\u05ea \u05e4\u05e2\u05d5\u05dc\u05d4, \u05d0\u05da \u05dc\u05d0 \u05d1\u05d9\u05e6\u05e2\u05ea \u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05d1\u05e9\u05d3\u05d5\u05ea. \u05db\u05e0\u05e8\u05d0\u05d4 \u05d7\u05d9\u05e4\u05e9\u05ea \u05d0\u05ea \u05db\u05e4\u05ea\u05d5\u05e8 \u05d1\u05e6\u05e2 \u05d1\u05de\u05e7\u05d5\u05dd \u05db\u05e4\u05ea\u05d5\u05e8 \u05e9\u05de\u05d9\u05e8\u05d4.", + "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "\u05d1\u05d7\u05e8\u05ea \u05e4\u05e2\u05d5\u05dc\u05d4, \u05d0\u05da \u05dc\u05d0 \u05e9\u05de\u05e8\u05ea \u05e2\u05d3\u05d9\u05d9\u05df \u05d0\u05ea \u05d4\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05dc\u05e9\u05d3\u05d5\u05ea \u05d1\u05d5\u05d3\u05d3\u05d9\u05dd. \u05e0\u05d0 \u05dc\u05dc\u05d7\u05d5\u05e5 \u05e2\u05dc \u05d0\u05d9\u05e9\u05d5\u05e8 \u05db\u05d3\u05d9 \u05dc\u05e9\u05de\u05d5\u05e8. \u05d9\u05d4\u05d9\u05d4 \u05e2\u05dc\u05d9\u05da \u05dc\u05d4\u05e4\u05e2\u05d9\u05dc \u05d0\u05ea \u05d4\u05e4\u05e2\u05d5\u05dc\u05d4 \u05e2\u05d5\u05d3 \u05e4\u05e2\u05dd.", + "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "\u05d9\u05e9 \u05dc\u05da \u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05e9\u05dc\u05d0 \u05e0\u05e9\u05de\u05e8\u05d5 \u05e2\u05dc \u05e9\u05d3\u05d5\u05ea \u05d9\u05d7\u05d9\u05d3\u05d5\u05ea. \u05d0\u05dd \u05d0\u05ea\u05d4 \u05de\u05e4\u05e2\u05d9\u05dc \u05e4\u05e2\u05d5\u05dc\u05d4, \u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05e9\u05dc\u05d0 \u05e0\u05e9\u05de\u05e8\u05d5 \u05d9\u05d0\u05d1\u05d3\u05d5.", + "abbrev. month April\u0004Apr": "\u05d0\u05e4\u05e8\u05f3", + "abbrev. month August\u0004Aug": "\u05d0\u05d5\u05d2\u05f3", + "abbrev. month December\u0004Dec": "\u05d3\u05e6\u05de\u05f3", + "abbrev. month February\u0004Feb": "\u05e4\u05d1\u05e8\u05f3", + "abbrev. month January\u0004Jan": "\u05d9\u05e0\u05d5\u05f3", + "abbrev. month July\u0004Jul": "\u05d9\u05d5\u05dc\u05f3", + "abbrev. month June\u0004Jun": "\u05d9\u05d5\u05e0\u05f3", + "abbrev. month March\u0004Mar": "\u05de\u05e8\u05e5", + "abbrev. month May\u0004May": "\u05de\u05d0\u05d9", + "abbrev. month November\u0004Nov": "\u05e0\u05d5\u05d1\u05f3", + "abbrev. month October\u0004Oct": "\u05d0\u05d5\u05e7\u05f3", + "abbrev. month September\u0004Sep": "\u05e1\u05e4\u05d8\u05f3", + "one letter Friday\u0004F": "\u05e9", + "one letter Monday\u0004M": "\u05e9", + "one letter Saturday\u0004S": "\u05e9", + "one letter Sunday\u0004S": "\u05e8", + "one letter Thursday\u0004T": "\u05d7", + "one letter Tuesday\u0004T": "\u05e9", + "one letter Wednesday\u0004W": "\u05e8" + }; + for (const key in newcatalog) { + django.catalog[key] = newcatalog[key]; + } + + + if (!django.jsi18n_initialized) { + django.gettext = function(msgid) { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { + return msgid; + } else { + return (typeof value === 'string') ? value : value[0]; + } + }; + + django.ngettext = function(singular, plural, count) { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { + return (count == 1) ? singular : plural; + } else { + return value.constructor === Array ? value[django.pluralidx(count)] : value; + } + }; + + django.gettext_noop = function(msgid) { return msgid; }; + + django.pgettext = function(context, msgid) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { + value = msgid; + } + return value; + }; + + django.npgettext = function(context, singular, plural, count) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { + value = django.ngettext(singular, plural, count); + } + return value; + }; + + django.interpolate = function(fmt, obj, named) { + if (named) { + return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])}); + } else { + return fmt.replace(/%s/g, function(match){return String(obj.shift())}); + } + }; + + + /* formatting library */ + + django.formats = { + "DATETIME_FORMAT": "j \u05d1F Y H:i", + "DATETIME_INPUT_FORMATS": [ + "%Y-%m-%d %H:%M:%S", + "%Y-%m-%d %H:%M:%S.%f", + "%Y-%m-%d %H:%M", + "%m/%d/%Y %H:%M:%S", + "%m/%d/%Y %H:%M:%S.%f", + "%m/%d/%Y %H:%M", + "%m/%d/%y %H:%M:%S", + "%m/%d/%y %H:%M:%S.%f", + "%m/%d/%y %H:%M" + ], + "DATE_FORMAT": "j \u05d1F Y", + "DATE_INPUT_FORMATS": [ + "%Y-%m-%d", + "%m/%d/%Y", + "%m/%d/%y", + "%b %d %Y", + "%b %d, %Y", + "%d %b %Y", + "%d %b, %Y", + "%B %d %Y", + "%B %d, %Y", + "%d %B %Y", + "%d %B, %Y" + ], + "DECIMAL_SEPARATOR": ".", + "FIRST_DAY_OF_WEEK": 0, + "MONTH_DAY_FORMAT": "j \u05d1F", + "NUMBER_GROUPING": 0, + "SHORT_DATETIME_FORMAT": "d/m/Y H:i", + "SHORT_DATE_FORMAT": "d/m/Y", + "THOUSAND_SEPARATOR": ",", + "TIME_FORMAT": "H:i", + "TIME_INPUT_FORMATS": [ + "%H:%M:%S", + "%H:%M:%S.%f", + "%H:%M" + ], + "YEAR_MONTH_FORMAT": "F Y" + }; + + django.get_format = function(format_type) { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { + return format_type; + } else { + return value; + } + }; + + /* add to global namespace */ + globals.pluralidx = django.pluralidx; + globals.gettext = django.gettext; + globals.ngettext = django.ngettext; + globals.gettext_noop = django.gettext_noop; + globals.pgettext = django.pgettext; + globals.npgettext = django.npgettext; + globals.interpolate = django.interpolate; + globals.get_format = django.get_format; + + django.jsi18n_initialized = true; + } +}; + diff --git a/tabbycat/locale/jsi18n/hi/djangojs.js b/tabbycat/locale/jsi18n/hi/djangojs.js new file mode 100644 index 00000000000..670295321e4 --- /dev/null +++ b/tabbycat/locale/jsi18n/hi/djangojs.js @@ -0,0 +1,173 @@ + + +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); + + + django.pluralidx = function(n) { + const v = (n != 1); + if (typeof v === 'boolean') { + return v ? 1 : 0; + } else { + return v; + } + }; + + + /* gettext library */ + + django.catalog = django.catalog || {}; + + const newcatalog = { + "%(sel)s of %(cnt)s selected": [ + "%(cnt)s \u092e\u0947\u0902 \u0938\u0947 %(sel)s \u091a\u0941\u0928\u093e \u0917\u092f\u093e \u0939\u0948\u0902", + "%(cnt)s \u092e\u0947\u0902 \u0938\u0947 %(sel)s \u091a\u0941\u0928\u0947 \u0917\u090f \u0939\u0948\u0902" + ], + "6 a.m.": "\u0938\u0941\u092c\u0939 6 \u092c\u091c\u0947", + "Available %s": "\u0909\u092a\u0932\u092c\u094d\u0927 %s", + "Cancel": "\u0930\u0926\u094d\u0926 \u0915\u0930\u0947\u0902", + "Choose": "\u091a\u0941\u0928\u0947\u0902", + "Choose a time": "\u090f\u0915 \u0938\u092e\u092f \u091a\u0941\u0928\u0947\u0902", + "Choose all": "\u0938\u092d\u0940 \u091a\u0941\u0928\u0947\u0902", + "Chosen %s": "\u091a\u0941\u0928\u0947\u0902 %s", + "Click to choose all %s at once.": "\u090f\u0915 \u0939\u0940 \u092c\u093e\u0930 \u092e\u0947\u0902 \u0938\u092d\u0940 %s \u0915\u094b \u091a\u0941\u0928\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0915\u094d\u0932\u093f\u0915 \u0915\u0930\u0947\u0902.", + "Click to remove all chosen %s at once.": "\u090f\u0915 \u0939\u0940 \u092c\u093e\u0930 \u092e\u0947\u0902 \u0938\u092d\u0940 %s \u0915\u094b \u0939\u091f\u093e\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0915\u094d\u0932\u093f\u0915 \u0915\u0930\u0947\u0902.", + "Filter": "\u091b\u093e\u0928\u0928\u093e", + "Hide": " \u091b\u093f\u092a\u093e\u0913", + "Midnight": "\u092e\u0927\u094d\u092f\u0930\u093e\u0924\u094d\u0930\u0940", + "Noon": "\u0926\u094b\u092a\u0939\u0930", + "Now": "\u0905\u092c", + "Remove": "\u0939\u091f\u093e\u0928\u093e", + "Remove all": "\u0938\u092d\u0940 \u0915\u094b \u0939\u091f\u093e\u090f\u0901", + "Show": "\u0926\u093f\u0916\u093e\u0913", + "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes.": "\u092f\u0939 \u0909\u092a\u0932\u092c\u094d\u0927 %s \u0915\u0940 \u0938\u0942\u091a\u0940 \u0939\u0948. \u0906\u092a \u0909\u0928\u094d\u0939\u0947\u0902 \u0928\u0940\u091a\u0947 \u0926\u093f\u090f \u0917\u090f \u092c\u0949\u0915\u094d\u0938 \u092e\u0947\u0902 \u0938\u0947 \u091a\u092f\u0928 \u0915\u0930\u0915\u0947 \u0915\u0941\u091b \u0915\u094b \u091a\u0941\u0928 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902 \u0914\u0930 \u0909\u0938\u0915\u0947 \u092c\u093e\u0926 \u0926\u094b \u092c\u0949\u0915\u094d\u0938 \u0915\u0947 \u092c\u0940\u091a \"\u091a\u0941\u0928\u0947\u0902\" \u0924\u0940\u0930 \u092a\u0930 \u0915\u094d\u0932\u093f\u0915 \u0915\u0930\u0947\u0902.", + "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes.": "\u092f\u0939 \u0909\u092a\u0932\u092c\u094d\u0927 %s \u0915\u0940 \u0938\u0942\u091a\u0940 \u0939\u0948. \u0906\u092a \u0909\u0928\u094d\u0939\u0947\u0902 \u0928\u0940\u091a\u0947 \u0926\u093f\u090f \u0917\u090f \u092c\u0949\u0915\u094d\u0938 \u092e\u0947\u0902 \u0938\u0947 \u091a\u092f\u0928 \u0915\u0930\u0915\u0947 \u0915\u0941\u091b \u0915\u094b \u0939\u091f\u093e \u0938\u0915\u0924\u0947 \u0939\u0948\u0902 \u0914\u0930 \u0909\u0938\u0915\u0947 \u092c\u093e\u0926 \u0926\u094b \u092c\u0949\u0915\u094d\u0938 \u0915\u0947 \u092c\u0940\u091a \"\u0939\u091f\u093e\u092f\u0947\u0902\" \u0924\u0940\u0930 \u092a\u0930 \u0915\u094d\u0932\u093f\u0915 \u0915\u0930\u0947\u0902.", + "Today": "\u0906\u091c", + "Tomorrow": "\u0915\u0932", + "Type into this box to filter down the list of available %s.": "\u0907\u0938 \u092c\u0949\u0915\u094d\u0938 \u092e\u0947\u0902 \u091f\u093e\u0907\u092a \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0928\u0940\u091a\u0947 \u0909\u092a\u0932\u092c\u094d\u0927 %s \u0915\u0940 \u0938\u0942\u091a\u0940 \u0915\u094b \u092b\u093c\u093f\u0932\u094d\u091f\u0930 \u0915\u0930\u0947\u0902.", + "Yesterday": "\u0915\u0932 (\u092c\u0940\u0924\u093e)", + "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button.": "\u0906\u092a \u0928\u0947 \u0915\u093e\u0930\u094d\u0930\u0935\u093e\u0908 \u091a\u0941\u0928\u0940 \u0939\u0948\u0902, \u0914\u0930 \u0906\u092a \u0928\u0947 \u0938\u094d\u0935\u0924\u0902\u0924\u094d\u0930 \u0938\u092e\u094d\u092a\u093e\u0926\u0928\u0915\u094d\u0937\u092e \u0915\u094d\u0937\u0947\u0924\u094d\u0930/\u0938\u094d\u0924\u092e\u094d\u092d \u092e\u0947\u0902 \u092c\u0926\u0932 \u0928\u0939\u0940\u0902 \u0915\u093f\u092f\u0947 \u0939\u0948\u0902| \u0938\u0902\u092d\u0935\u0924\u0903 '\u0938\u0947\u0935' \u092c\u091f\u0928 \u0915\u0947 \u092c\u091c\u093e\u092f \u0906\u092a '\u0917\u094b' \u092c\u091f\u0928 \u0922\u0942\u0928\u094d\u0922 \u0930\u0939\u0947 \u0939\u094b |", + "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.": "\u0906\u092a \u0928\u0947 \u0915\u093e\u0930\u094d\u0930\u0935\u093e\u0908 \u0924\u094b \u091a\u0941\u0928\u0940 \u0939\u0948\u0902, \u092a\u0930 \u0938\u094d\u0935\u0924\u0902\u0924\u094d\u0930 \u0938\u092e\u094d\u092a\u093e\u0926\u0928\u0915\u094d\u0937\u092e \u0915\u094d\u0937\u0947\u0924\u094d\u0930/\u0938\u094d\u0924\u092e\u094d\u092d \u092e\u0947\u0902 \u0915\u093f\u092f\u0947 \u0939\u0941\u090f \u092c\u0926\u0932 \u0905\u092d\u0940 \u0938\u0941\u0930\u0915\u094d\u0937\u093f\u0924 \u0928\u0939\u0940\u0902 \u0915\u093f\u092f\u0947 \u0939\u0948\u0902| \u0909\u0928\u094d\u0939\u0947\u0902 \u0938\u0941\u0930\u0915\u094d\u0937\u093f\u0924 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0915\u0943\u092a\u092f\u093e '\u0913\u0915\u0947' \u0915\u094d\u0932\u093f\u0915 \u0915\u0930\u0947 | \u0906\u092a \u0915\u094b \u091a\u0941\u0928\u0940 \u0939\u0941\u0908 \u0915\u093e\u0930\u094d\u0930\u0935\u093e\u0908 \u0926\u094b\u092c\u093e\u0930\u093e \u091a\u0932\u093e\u0928\u0940 \u0939\u094b\u0917\u0940 |", + "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "\u0938\u094d\u0935\u0924\u0902\u0924\u094d\u0930 \u0938\u092e\u094d\u092a\u093e\u0926\u0928\u0915\u094d\u0937\u092e \u0915\u094d\u0937\u0947\u0924\u094d\u0930/\u0938\u094d\u0924\u092e\u094d\u092d \u092e\u0947\u0902 \u0915\u093f\u092f\u0947 \u0939\u0941\u090f \u092c\u0926\u0932 \u0905\u092d\u0940 \u0930\u0915\u094d\u0937\u093f\u0924 \u0928\u0939\u0940\u0902 \u0939\u0948\u0902 | \u0905\u0917\u0930 \u0906\u092a \u0915\u0941\u091b \u0915\u093e\u0930\u094d\u0930\u0935\u093e\u0908 \u0915\u0930\u0924\u0947 \u0939\u094b \u0924\u094b \u0935\u0947 \u0916\u094b \u091c\u093e\u092f\u0947\u0902\u0917\u0947 |" + }; + for (const key in newcatalog) { + django.catalog[key] = newcatalog[key]; + } + + + if (!django.jsi18n_initialized) { + django.gettext = function(msgid) { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { + return msgid; + } else { + return (typeof value === 'string') ? value : value[0]; + } + }; + + django.ngettext = function(singular, plural, count) { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { + return (count == 1) ? singular : plural; + } else { + return value.constructor === Array ? value[django.pluralidx(count)] : value; + } + }; + + django.gettext_noop = function(msgid) { return msgid; }; + + django.pgettext = function(context, msgid) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { + value = msgid; + } + return value; + }; + + django.npgettext = function(context, singular, plural, count) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { + value = django.ngettext(singular, plural, count); + } + return value; + }; + + django.interpolate = function(fmt, obj, named) { + if (named) { + return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])}); + } else { + return fmt.replace(/%s/g, function(match){return String(obj.shift())}); + } + }; + + + /* formatting library */ + + django.formats = { + "DATETIME_FORMAT": "N j, Y, P", + "DATETIME_INPUT_FORMATS": [ + "%Y-%m-%d %H:%M:%S", + "%Y-%m-%d %H:%M:%S.%f", + "%Y-%m-%d %H:%M", + "%m/%d/%Y %H:%M:%S", + "%m/%d/%Y %H:%M:%S.%f", + "%m/%d/%Y %H:%M", + "%m/%d/%y %H:%M:%S", + "%m/%d/%y %H:%M:%S.%f", + "%m/%d/%y %H:%M" + ], + "DATE_FORMAT": "j F Y", + "DATE_INPUT_FORMATS": [ + "%Y-%m-%d", + "%m/%d/%Y", + "%m/%d/%y", + "%b %d %Y", + "%b %d, %Y", + "%d %b %Y", + "%d %b, %Y", + "%B %d %Y", + "%B %d, %Y", + "%d %B %Y", + "%d %B, %Y" + ], + "DECIMAL_SEPARATOR": ".", + "FIRST_DAY_OF_WEEK": 0, + "MONTH_DAY_FORMAT": "j F", + "NUMBER_GROUPING": 0, + "SHORT_DATETIME_FORMAT": "m/d/Y P", + "SHORT_DATE_FORMAT": "d-m-Y", + "THOUSAND_SEPARATOR": ",", + "TIME_FORMAT": "g:i A", + "TIME_INPUT_FORMATS": [ + "%H:%M:%S", + "%H:%M:%S.%f", + "%H:%M" + ], + "YEAR_MONTH_FORMAT": "F Y" + }; + + django.get_format = function(format_type) { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { + return format_type; + } else { + return value; + } + }; + + /* add to global namespace */ + globals.pluralidx = django.pluralidx; + globals.gettext = django.gettext; + globals.ngettext = django.ngettext; + globals.gettext_noop = django.gettext_noop; + globals.pgettext = django.pgettext; + globals.npgettext = django.npgettext; + globals.interpolate = django.interpolate; + globals.get_format = django.get_format; + + django.jsi18n_initialized = true; + } +}; + diff --git a/tabbycat/locale/jsi18n/id/djangojs.js b/tabbycat/locale/jsi18n/id/djangojs.js index 0d60f711286..ff901866de3 100644 --- a/tabbycat/locale/jsi18n/id/djangojs.js +++ b/tabbycat/locale/jsi18n/id/djangojs.js @@ -1,13 +1,14 @@ -(function(globals) { - - var django = globals.django || (globals.django = {}); +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); django.pluralidx = function(n) { - var v=0; - if (typeof(v) == 'boolean') { + const v = 0; + if (typeof v === 'boolean') { return v ? 1 : 0; } else { return v; @@ -19,7 +20,7 @@ django.catalog = django.catalog || {}; - var newcatalog = { + const newcatalog = { "%(sel)s of %(cnt)s selected": [ "%(sel)s dari %(cnt)s terpilih" ], @@ -73,9 +74,22 @@ "Type into this box to filter down the list of available %s.": "Ketik pada kotak ini untuk menyaring daftar %s yang tersedia.", "Unknown": "Tak diketahui", "Yesterday": "Kemarin", - "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button.": "Anda telah memilih sebuah aksi, tetapi belum mengubah bidang apapun. Kemungkinan Anda mencari tombol Buka dan bukan tombol Simpan.", - "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.": "Anda telah memilih sebuah aksi, tetapi belum menyimpan perubahan ke bidang yang ada. Klik OK untuk menyimpan perubahan ini. Anda akan perlu mengulangi aksi tersebut kembali.", + "You have already submitted this form. Are you sure you want to submit it again?": "Anda telah mengajukan formulir ini. Apakah anda yakin ingin mengajukannya kembali?", + "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "Anda telah memilih tindakan, dan Anda belum membuat perubahan apa pun di setiap bidang. Anda mungkin mencari tombol Buka daripada tombol Simpan.", + "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "Anda telah memilih tindakan, tetapi Anda belum menyimpan perubahan ke masing-masing bidang. Silakan klik OK untuk menyimpan. Anda harus menjalankan kembali tindakan tersebut.", "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "Beberapa perubahan bidang yang Anda lakukan belum tersimpan. Perubahan yang telah dilakukan akan hilang.", + "abbrev. month April\u0004Apr": "Apr", + "abbrev. month August\u0004Aug": "Agu", + "abbrev. month December\u0004Dec": "Des", + "abbrev. month February\u0004Feb": "Feb", + "abbrev. month January\u0004Jan": "Jan", + "abbrev. month July\u0004Jul": "Jul", + "abbrev. month June\u0004Jun": "Jun", + "abbrev. month March\u0004Mar": "Mar", + "abbrev. month May\u0004May": "Mei", + "abbrev. month November\u0004Nov": "Nov", + "abbrev. month October\u0004Oct": "Okt", + "abbrev. month September\u0004Sep": "Sep", "one letter Friday\u0004F": "J", "one letter Monday\u0004M": "S", "one letter Saturday\u0004S": "S", @@ -84,24 +98,24 @@ "one letter Tuesday\u0004T": "S", "one letter Wednesday\u0004W": "R" }; - for (var key in newcatalog) { + for (const key in newcatalog) { django.catalog[key] = newcatalog[key]; } if (!django.jsi18n_initialized) { django.gettext = function(msgid) { - var value = django.catalog[msgid]; - if (typeof(value) == 'undefined') { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { return msgid; } else { - return (typeof(value) == 'string') ? value : value[0]; + return (typeof value === 'string') ? value : value[0]; } }; django.ngettext = function(singular, plural, count) { - var value = django.catalog[singular]; - if (typeof(value) == 'undefined') { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { return (count == 1) ? singular : plural; } else { return value.constructor === Array ? value[django.pluralidx(count)] : value; @@ -111,16 +125,16 @@ django.gettext_noop = function(msgid) { return msgid; }; django.pgettext = function(context, msgid) { - var value = django.gettext(context + '\x04' + msgid); - if (value.indexOf('\x04') != -1) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { value = msgid; } return value; }; django.npgettext = function(context, singular, plural, count) { - var value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); - if (value.indexOf('\x04') != -1) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { value = django.ngettext(singular, plural, count); } return value; @@ -188,8 +202,8 @@ }; django.get_format = function(format_type) { - var value = django.formats[format_type]; - if (typeof(value) == 'undefined') { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { return format_type; } else { return value; @@ -208,6 +222,5 @@ django.jsi18n_initialized = true; } - -}(this)); +}; diff --git a/tabbycat/locale/jsi18n/it/djangojs.js b/tabbycat/locale/jsi18n/it/djangojs.js new file mode 100644 index 00000000000..842a40cf2be --- /dev/null +++ b/tabbycat/locale/jsi18n/it/djangojs.js @@ -0,0 +1,226 @@ + + +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); + + + django.pluralidx = function(n) { + const v = (n != 1); + if (typeof v === 'boolean') { + return v ? 1 : 0; + } else { + return v; + } + }; + + + /* gettext library */ + + django.catalog = django.catalog || {}; + + const newcatalog = { + "%(sel)s of %(cnt)s selected": [ + "%(sel)s di %(cnt)s selezionato", + "%(sel)s di %(cnt)s selezionati" + ], + "%s selected option not visible": [ + "%s opzione selezionata non visibile", + "%s opzioni selezionate non visibili" + ], + "6 a.m.": "6 del mattino", + "6 p.m.": "6 del pomeriggio", + "All": "Tutti", + "April": "Aprile", + "August": "Agosto", + "Available %s": "%s disponibili", + "Cancel": "Annulla", + "Category": "Categoria", + "Choose": "Scegli", + "Choose a Date": "Scegli una data", + "Choose a Time": "Scegli un orario", + "Choose a time": "Scegli un orario", + "Choose all": "Scegli tutto", + "Chosen %s": "%s scelti", + "Click to choose all %s at once.": "Fai clic per scegliere tutti i %s in una volta.", + "Click to remove all chosen %s at once.": "Fai clic per eliminare tutti i %s in una volta.", + "December": "Dicembre", + "February": "Febbraio", + "Filter": "Filtro", + "Hide": "Nascondi", + "January": "Gennaio", + "July": "Luglio", + "June": "Giugno", + "March": "Marzo", + "May": "Maggio", + "Midnight": "Mezzanotte", + "Noon": "Mezzogiorno", + "Note: You are %s hour ahead of server time.": [ + "Nota: Sei %s ora in anticipo rispetto al server.", + "Nota: Sei %s ore in anticipo rispetto al server." + ], + "Note: You are %s hour behind server time.": [ + "Nota: Sei %s ora in ritardo rispetto al server.", + "Nota: Sei %s ore in ritardo rispetto al server." + ], + "November": "Novembre", + "Now": "Adesso", + "October": "Ottobre", + "Remove": "Elimina", + "Remove all": "Elimina tutti", + "September": "Settembre", + "Show": "Mostra", + "Team": "Team", + "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes.": "Questa \u00e8 la lista dei %s disponibili. Puoi sceglierne alcuni selezionandoli nella casella qui sotto e poi facendo clic sulla freccia \"Scegli\" tra le due caselle.", + "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes.": "Questa \u00e8 la lista dei %s scelti. Puoi eliminarne alcuni selezionandoli nella casella qui sotto e poi facendo clic sulla freccia \"Elimina\" tra le due caselle.", + "Today": "Oggi", + "Tomorrow": "Domani", + "Type into this box to filter down the list of available %s.": "Scrivi in questa casella per filtrare l'elenco dei %s disponibili.", + "Type into this box to filter down the list of selected %s.": "Scrivi in questa casella per filtrare l'elenco dei %s selezionati.", + "Unknown": "Sconosciuto", + "Yesterday": "Ieri", + "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "Hai selezionato un'azione e non hai ancora apportato alcuna modifica ai campi singoli. Probabilmente stai cercando il pulsante Vai, invece di Salva.", + "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "Hai selezionato un'azione, ma non hai ancora salvato le modifiche apportate a campi singoli. Fai clic su OK per salvare. Poi dovrai rieseguire l'azione.", + "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "Ci sono aggiornamenti non salvati su singoli campi modificabili. Se esegui un'azione, le modifiche non salvate andranno perse.", + "abbrev. month April\u0004Apr": "Apr", + "abbrev. month August\u0004Aug": "Ago", + "abbrev. month December\u0004Dec": "Dic", + "abbrev. month February\u0004Feb": "Feb", + "abbrev. month January\u0004Jan": "Gen", + "abbrev. month July\u0004Jul": "Lug", + "abbrev. month June\u0004Jun": "Giu", + "abbrev. month March\u0004Mar": "Mar", + "abbrev. month May\u0004May": "Mag", + "abbrev. month November\u0004Nov": "Nov", + "abbrev. month October\u0004Oct": "Ott", + "abbrev. month September\u0004Sep": "Set", + "one letter Friday\u0004F": "V", + "one letter Monday\u0004M": "L", + "one letter Saturday\u0004S": "S", + "one letter Sunday\u0004S": "D", + "one letter Thursday\u0004T": "G", + "one letter Tuesday\u0004T": "Ma", + "one letter Wednesday\u0004W": "Me" + }; + for (const key in newcatalog) { + django.catalog[key] = newcatalog[key]; + } + + + if (!django.jsi18n_initialized) { + django.gettext = function(msgid) { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { + return msgid; + } else { + return (typeof value === 'string') ? value : value[0]; + } + }; + + django.ngettext = function(singular, plural, count) { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { + return (count == 1) ? singular : plural; + } else { + return value.constructor === Array ? value[django.pluralidx(count)] : value; + } + }; + + django.gettext_noop = function(msgid) { return msgid; }; + + django.pgettext = function(context, msgid) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { + value = msgid; + } + return value; + }; + + django.npgettext = function(context, singular, plural, count) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { + value = django.ngettext(singular, plural, count); + } + return value; + }; + + django.interpolate = function(fmt, obj, named) { + if (named) { + return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])}); + } else { + return fmt.replace(/%s/g, function(match){return String(obj.shift())}); + } + }; + + + /* formatting library */ + + django.formats = { + "DATETIME_FORMAT": "l d F Y H:i", + "DATETIME_INPUT_FORMATS": [ + "%d/%m/%Y %H:%M:%S", + "%d/%m/%Y %H:%M:%S.%f", + "%d/%m/%Y %H:%M", + "%d/%m/%y %H:%M:%S", + "%d/%m/%y %H:%M:%S.%f", + "%d/%m/%y %H:%M", + "%Y-%m-%d %H:%M:%S", + "%Y-%m-%d %H:%M:%S.%f", + "%Y-%m-%d %H:%M", + "%d-%m-%Y %H:%M:%S", + "%d-%m-%Y %H:%M:%S.%f", + "%d-%m-%Y %H:%M", + "%d-%m-%y %H:%M:%S", + "%d-%m-%y %H:%M:%S.%f", + "%d-%m-%y %H:%M", + "%Y-%m-%d" + ], + "DATE_FORMAT": "d F Y", + "DATE_INPUT_FORMATS": [ + "%d/%m/%Y", + "%Y/%m/%d", + "%d-%m-%Y", + "%Y-%m-%d", + "%d-%m-%y", + "%d/%m/%y" + ], + "DECIMAL_SEPARATOR": ",", + "FIRST_DAY_OF_WEEK": 1, + "MONTH_DAY_FORMAT": "j F", + "NUMBER_GROUPING": 3, + "SHORT_DATETIME_FORMAT": "d/m/Y H:i", + "SHORT_DATE_FORMAT": "d/m/Y", + "THOUSAND_SEPARATOR": ".", + "TIME_FORMAT": "H:i", + "TIME_INPUT_FORMATS": [ + "%H:%M:%S", + "%H:%M:%S.%f", + "%H:%M" + ], + "YEAR_MONTH_FORMAT": "F Y" + }; + + django.get_format = function(format_type) { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { + return format_type; + } else { + return value; + } + }; + + /* add to global namespace */ + globals.pluralidx = django.pluralidx; + globals.gettext = django.gettext; + globals.ngettext = django.ngettext; + globals.gettext_noop = django.gettext_noop; + globals.pgettext = django.pgettext; + globals.npgettext = django.npgettext; + globals.interpolate = django.interpolate; + globals.get_format = django.get_format; + + django.jsi18n_initialized = true; + } +}; + diff --git a/tabbycat/locale/jsi18n/ja/djangojs.js b/tabbycat/locale/jsi18n/ja/djangojs.js index 79daa9677e8..dc5ea57fc80 100644 --- a/tabbycat/locale/jsi18n/ja/djangojs.js +++ b/tabbycat/locale/jsi18n/ja/djangojs.js @@ -1,13 +1,14 @@ -(function(globals) { - - var django = globals.django || (globals.django = {}); +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); django.pluralidx = function(n) { - var v=0; - if (typeof(v) == 'boolean') { + const v = 0; + if (typeof v === 'boolean') { return v ? 1 : 0; } else { return v; @@ -19,10 +20,13 @@ django.catalog = django.catalog || {}; - var newcatalog = { + const newcatalog = { "%(sel)s of %(cnt)s selected": [ "%(cnt)s\u500b\u4e2d%(sel)s\u500b\u9078\u629e" ], + "%s selected option not visible": [ + "\u9078\u629e\u3055\u308c\u305f%s\u4ef6\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u975e\u8868\u793a\u3067\u3059\u3002" + ], "6 a.m.": "\u5348\u524d 6 \u6642", "6 p.m.": "\u5348\u5f8c 6 \u6642", "All": "\u3059\u3079\u3066", @@ -73,12 +77,25 @@ "Today": "\u4eca\u65e5", "Tomorrow": "\u660e\u65e5", "Type into this box to filter down the list of available %s.": "\u4f7f\u7528\u53ef\u80fd\u306a %s \u306e\u30ea\u30b9\u30c8\u3092\u7d5e\u308a\u8fbc\u3080\u306b\u306f\u3001\u3053\u306e\u30dc\u30c3\u30af\u30b9\u306b\u5165\u529b\u3057\u307e\u3059\u3002", + "Type into this box to filter down the list of selected %s.": "\u9078\u629e\u3055\u308c\u305f%s\u306e\u30ea\u30b9\u30c8\u3092\u7d5e\u308a\u8fbc\u3080\u306b\u306f\u3001\u3053\u306e\u30dc\u30c3\u30af\u30b9\u306b\u5165\u529b\u3057\u307e\u3059\u3002", "Unknown": "\u4e0d\u660e", "Yes": "\u306f\u3044", "Yesterday": "\u6628\u65e5", - "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button.": "\u64cd\u4f5c\u3092\u9078\u629e\u3057\u307e\u3057\u305f\u304c\u3001\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u5909\u66f4\u306f\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3082\u3057\u304b\u3057\u3066\u4fdd\u5b58\u30dc\u30bf\u30f3\u3067\u306f\u306a\u304f\u3066\u5b9f\u884c\u30dc\u30bf\u30f3\u3092\u304a\u63a2\u3057\u3067\u3059\u304b\u3002", - "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.": "\u64cd\u4f5c\u3092\u9078\u629e\u3057\u307e\u3057\u305f\u304c\u3001\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u672a\u4fdd\u5b58\u306e\u5909\u66f4\u304c\u3042\u308a\u307e\u3059\u3002OK\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305d\u306e\u5f8c\u3001\u64cd\u4f5c\u3092\u518d\u5ea6\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002", + "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "\u64cd\u4f5c\u3092\u9078\u629e\u3057\u307e\u3057\u305f\u304c\u3001\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u5909\u66f4\u306f\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3082\u3057\u304b\u3057\u3066\u4fdd\u5b58\u30dc\u30bf\u30f3\u3067\u306f\u306a\u304f\u3066\u5b9f\u884c\u30dc\u30bf\u30f3\u3092\u304a\u63a2\u3057\u3067\u3059\u304b\u3002", + "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "\u64cd\u4f5c\u3092\u9078\u629e\u3057\u307e\u3057\u305f\u304c\u3001\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u672a\u4fdd\u5b58\u306e\u5909\u66f4\u304c\u3042\u308a\u307e\u3059\u3002OK\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305d\u306e\u5f8c\u3001\u64cd\u4f5c\u3092\u518d\u5ea6\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002", "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u672a\u4fdd\u5b58\u306e\u5909\u66f4\u304c\u3042\u308a\u307e\u3059\u3002\u64cd\u4f5c\u3092\u5b9f\u884c\u3059\u308b\u3068\u672a\u4fdd\u5b58\u306e\u5909\u66f4\u306f\u5931\u308f\u308c\u307e\u3059\u3002", + "abbrev. month April\u0004Apr": "4\u6708", + "abbrev. month August\u0004Aug": "8\u6708", + "abbrev. month December\u0004Dec": "12\u6708", + "abbrev. month February\u0004Feb": "2\u6708", + "abbrev. month January\u0004Jan": "1\u6708", + "abbrev. month July\u0004Jul": "7\u6708", + "abbrev. month June\u0004Jun": "6\u6708", + "abbrev. month March\u0004Mar": "3\u6708", + "abbrev. month May\u0004May": "5\u6708", + "abbrev. month November\u0004Nov": "11\u6708", + "abbrev. month October\u0004Oct": "10\u6708", + "abbrev. month September\u0004Sep": "9\u6708", "one letter Friday\u0004F": "\u91d1", "one letter Monday\u0004M": "\u6708", "one letter Saturday\u0004S": "\u571f", @@ -87,24 +104,24 @@ "one letter Tuesday\u0004T": "\u706b", "one letter Wednesday\u0004W": "\u6c34" }; - for (var key in newcatalog) { + for (const key in newcatalog) { django.catalog[key] = newcatalog[key]; } if (!django.jsi18n_initialized) { django.gettext = function(msgid) { - var value = django.catalog[msgid]; - if (typeof(value) == 'undefined') { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { return msgid; } else { - return (typeof(value) == 'string') ? value : value[0]; + return (typeof value === 'string') ? value : value[0]; } }; django.ngettext = function(singular, plural, count) { - var value = django.catalog[singular]; - if (typeof(value) == 'undefined') { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { return (count == 1) ? singular : plural; } else { return value.constructor === Array ? value[django.pluralidx(count)] : value; @@ -114,16 +131,16 @@ django.gettext_noop = function(msgid) { return msgid; }; django.pgettext = function(context, msgid) { - var value = django.gettext(context + '\x04' + msgid); - if (value.indexOf('\x04') != -1) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { value = msgid; } return value; }; django.npgettext = function(context, singular, plural, count) { - var value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); - if (value.indexOf('\x04') != -1) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { value = django.ngettext(singular, plural, count); } return value; @@ -184,8 +201,8 @@ }; django.get_format = function(format_type) { - var value = django.formats[format_type]; - if (typeof(value) == 'undefined') { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { return format_type; } else { return value; @@ -204,6 +221,5 @@ django.jsi18n_initialized = true; } - -}(this)); +}; diff --git a/tabbycat/locale/jsi18n/kk/djangojs.js b/tabbycat/locale/jsi18n/kk/djangojs.js new file mode 100644 index 00000000000..fa792afa411 --- /dev/null +++ b/tabbycat/locale/jsi18n/kk/djangojs.js @@ -0,0 +1,165 @@ + + +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); + + + django.pluralidx = function(n) { + const v = (n != 1); + if (typeof v === 'boolean') { + return v ? 1 : 0; + } else { + return v; + } + }; + + + /* gettext library */ + + django.catalog = django.catalog || {}; + + const newcatalog = { + "%(sel)s of %(cnt)s selected": [ + "%(cnt)s-\u04a3 %(sel)s-\u044b(\u0456) \u0442\u0430\u04a3\u0434\u0430\u043b\u0434\u044b", + "%(cnt)s-\u04a3 %(sel)s-\u044b(\u0456) \u0442\u0430\u04a3\u0434\u0430\u043b\u0434\u044b" + ], + "6 a.m.": "06", + "Available %s": "%s \u0431\u0430\u0440", + "Cancel": "\u0411\u043e\u043b\u0434\u044b\u0440\u043c\u0430\u0443", + "Choose a time": "\u0423\u0430\u049b\u044b\u0442\u0442\u044b \u0442\u0430\u04a3\u0434\u0430", + "Filter": "\u0421\u04af\u0437\u0433\u0456\u0448", + "Hide": "\u0416\u0430\u0441\u044b\u0440\u0443", + "Midnight": "\u0422\u04af\u043d \u0436\u0430\u0440\u044b\u043c", + "Noon": "\u0422\u0430\u043b\u0442\u04af\u0441", + "Now": "\u049a\u0430\u0437\u0456\u0440", + "Remove": "\u04e8\u0448\u0456\u0440\u0443(\u0436\u043e\u044e)", + "Show": "\u041a\u04e9\u0440\u0441\u0435\u0442\u0443", + "Today": "\u0411\u04af\u0433\u0456\u043d", + "Tomorrow": "\u0415\u0440\u0442\u0435\u04a3", + "Unknown": "\u0411\u0435\u043b\u0433\u0456\u0441\u0456\u0437", + "Yesterday": "\u041a\u0435\u0448\u0435", + "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button.": "\u0421\u0456\u0437 \u0421\u0430\u049b\u0442\u0430\u0443 \u0431\u0430\u0442\u044b\u0440\u043c\u0430\u0441\u044b\u043d\u0430 \u049b\u0430\u0440\u0430\u0493\u0430\u043d\u0434\u0430, Go(\u0410\u043b\u0493\u0430) \u0431\u0430\u0442\u044b\u0440\u043c\u0430\u0441\u044b\u043d \u0456\u0437\u0434\u0435\u043f \u043e\u0442\u044b\u0440\u0493\u0430\u043d \u0431\u043e\u043b\u0430\u0440\u0441\u044b\u0437, \u0441\u0435\u0431\u0435\u0431\u0456 \u0435\u0448\u049b\u0430\u043d\u0434\u0430\u0439 \u04e9\u0437\u0433\u0435\u0440\u0456\u0441 \u0436\u0430\u0441\u0430\u043c\u0430\u0439, \u04d9\u0440\u0435\u043a\u0435\u0442 \u0436\u0430\u0441\u0430\u0434\u044b\u04a3\u044b\u0437.", + "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.": "\u0421\u0456\u0437 \u04e9\u0437 \u04e9\u0437\u0433\u0435\u0440\u0456\u0441\u0442\u0435\u0440\u0456\u04a3\u0456\u0437\u0434\u0456 \u0441\u0430\u049b\u0442\u0430\u043c\u0430\u0439, \u04d9\u0440\u0435\u043a\u0435\u0442 \u0436\u0430\u0441\u0430\u0434\u044b\u04a3\u044b\u0437. \u04e8\u0442\u0456\u043d\u0456\u0448, \u0441\u0430\u049b\u0442\u0430\u0443 \u04af\u0448\u0456\u043d \u041e\u041a \u0431\u0430\u0442\u044b\u0440\u043c\u0430\u0441\u044b\u043d \u0431\u0430\u0441\u044b\u04a3\u044b\u0437 \u0436\u04d9\u043d\u0435 \u04e9\u0437 \u04d9\u0440\u0435\u043a\u0435\u0442\u0456\u04a3\u0456\u0437\u0434\u0456 \u049b\u0430\u0439\u0442\u0430 \u0436\u0430\u0441\u0430\u043f \u043a\u04e9\u0440\u0456\u04a3\u0456\u0437. ", + "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "\u0421\u0456\u0437\u0434\u0456\u04a3 \u0442\u04e9\u043c\u0435\u043d\u0434\u0435\u0433\u0456 \u04e9\u0437\u0433\u0435\u0440\u043c\u0435\u043b\u0456 \u0430\u043b\u0430\u04a3\u0434\u0430\u0440\u0434\u0430(fields) \u04e9\u0437\u0433\u0435\u0440\u0456\u0441\u0442\u0435\u0440\u0456\u04a3\u0456\u0437 \u0431\u0430\u0440. \u0415\u0433\u0435\u0440 \u0430\u0440\u0442\u044b\u049b \u04d9\u0440\u0435\u043a\u0435\u0442 \u0436\u0430\u0441\u0430\u0441\u0430\u04a3\u044b\u0437\u0431 \u0441\u0456\u0437 \u04e9\u0437\u0433\u0435\u0440\u0456\u0441\u0442\u0435\u0440\u0456\u04a3\u0456\u0437\u0434\u0456 \u0436\u043e\u0493\u0430\u043b\u0442\u0430\u0441\u044b\u0437." + }; + for (const key in newcatalog) { + django.catalog[key] = newcatalog[key]; + } + + + if (!django.jsi18n_initialized) { + django.gettext = function(msgid) { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { + return msgid; + } else { + return (typeof value === 'string') ? value : value[0]; + } + }; + + django.ngettext = function(singular, plural, count) { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { + return (count == 1) ? singular : plural; + } else { + return value.constructor === Array ? value[django.pluralidx(count)] : value; + } + }; + + django.gettext_noop = function(msgid) { return msgid; }; + + django.pgettext = function(context, msgid) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { + value = msgid; + } + return value; + }; + + django.npgettext = function(context, singular, plural, count) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { + value = django.ngettext(singular, plural, count); + } + return value; + }; + + django.interpolate = function(fmt, obj, named) { + if (named) { + return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])}); + } else { + return fmt.replace(/%s/g, function(match){return String(obj.shift())}); + } + }; + + + /* formatting library */ + + django.formats = { + "DATETIME_FORMAT": "N j, Y, P", + "DATETIME_INPUT_FORMATS": [ + "%Y-%m-%d %H:%M:%S", + "%Y-%m-%d %H:%M:%S.%f", + "%Y-%m-%d %H:%M", + "%m/%d/%Y %H:%M:%S", + "%m/%d/%Y %H:%M:%S.%f", + "%m/%d/%Y %H:%M", + "%m/%d/%y %H:%M:%S", + "%m/%d/%y %H:%M:%S.%f", + "%m/%d/%y %H:%M" + ], + "DATE_FORMAT": "N j, Y", + "DATE_INPUT_FORMATS": [ + "%Y-%m-%d", + "%m/%d/%Y", + "%m/%d/%y", + "%b %d %Y", + "%b %d, %Y", + "%d %b %Y", + "%d %b, %Y", + "%B %d %Y", + "%B %d, %Y", + "%d %B %Y", + "%d %B, %Y" + ], + "DECIMAL_SEPARATOR": ".", + "FIRST_DAY_OF_WEEK": 0, + "MONTH_DAY_FORMAT": "F j", + "NUMBER_GROUPING": 0, + "SHORT_DATETIME_FORMAT": "m/d/Y P", + "SHORT_DATE_FORMAT": "m/d/Y", + "THOUSAND_SEPARATOR": ",", + "TIME_FORMAT": "P", + "TIME_INPUT_FORMATS": [ + "%H:%M:%S", + "%H:%M:%S.%f", + "%H:%M" + ], + "YEAR_MONTH_FORMAT": "F Y" + }; + + django.get_format = function(format_type) { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { + return format_type; + } else { + return value; + } + }; + + /* add to global namespace */ + globals.pluralidx = django.pluralidx; + globals.gettext = django.gettext; + globals.ngettext = django.ngettext; + globals.gettext_noop = django.gettext_noop; + globals.pgettext = django.pgettext; + globals.npgettext = django.npgettext; + globals.interpolate = django.interpolate; + globals.get_format = django.get_format; + + django.jsi18n_initialized = true; + } +}; + diff --git a/tabbycat/locale/jsi18n/ms/djangojs.js b/tabbycat/locale/jsi18n/ms/djangojs.js index 0f60bbb4227..5d1471ed05d 100644 --- a/tabbycat/locale/jsi18n/ms/djangojs.js +++ b/tabbycat/locale/jsi18n/ms/djangojs.js @@ -1,13 +1,14 @@ -(function(globals) { - - var django = globals.django || (globals.django = {}); +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); django.pluralidx = function(n) { - var v=0; - if (typeof(v) == 'boolean') { + const v = 0; + if (typeof v === 'boolean') { return v ? 1 : 0; } else { return v; @@ -19,27 +20,96 @@ django.catalog = django.catalog || {}; - var newcatalog = { - "Unknown": "Tidak diketahui" + const newcatalog = { + "%(sel)s of %(cnt)s selected": [ + "%(sel)s daripada %(cnt)s dipilih" + ], + "6 a.m.": "6 pagi", + "6 p.m.": "6 malam", + "April": "Arpil", + "August": "Ogos", + "Available %s": "%s tersedia", + "Cancel": "Batal", + "Choose": "Pilih", + "Choose a Date": "Pilih Tarikh", + "Choose a Time": "Pilih Masa", + "Choose a time": "Pilih masa", + "Choose all": "Pilih semua", + "Chosen %s": "%s dipilh", + "Click to choose all %s at once.": "Klik untuk memlih semua %s serentak.", + "Click to remove all chosen %s at once.": "Klik untuk membuang serentak semua %s yang dipilih.", + "December": "Disember", + "February": "Februari", + "Filter": "Tapis", + "Hide": "Sorok", + "January": "Januari", + "July": "Julai", + "June": "Jun", + "March": "Mac", + "May": "Mei", + "Midnight": "Tengah malam", + "Noon": "Tengahari", + "Note: You are %s hour ahead of server time.": [ + "Nota: Anda %s jam ke depan daripada masa pelayan." + ], + "Note: You are %s hour behind server time.": [ + "Nota: Anda %s jam ke belakang daripada masa pelayan." + ], + "November": "November", + "Now": "Sekarang", + "October": "Oktober", + "Remove": "Buang", + "Remove all": "Buang semua", + "September": "September", + "Show": "Tunjuk", + "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes.": "Ini adalah senarai %s yang tersedia. Anda boleh memilih beberapa dengan memilihnya di dalam kotak dibawah dan kemudian klik pada anak panah \"Pilih\" diantara dua kotak itu.", + "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes.": "Ini adalah senarai %s yang dipilih. Anda boleh membuangnya dengan memilihnya pada kotak dibawah dan kemudian klik pada anak panah \"Buang\" diantara dua kotak itu.", + "Today": "Hari ini", + "Tomorrow": "Esok", + "Type into this box to filter down the list of available %s.": "Taip didalam kotak untuk menapis senarai %s yang tersedia.", + "Unknown": "Tidak diketahui", + "Yesterday": "Semalam", + "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "Anda telah memilih sesuatu tindakan, dan belum membuat perubahan pada medan-medan individu. Anda mungkin sedang mencari butang Pergi dan bukannya butang Simpan.", + "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "Anda telah memlih tindakan, tetapi anda belum menyimpan perubahan yang dilakukan pada medan-medan individu. Sila klik OK to untuk simpan. Anda perlu melakukan semula tindakan tersebut.", + "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "Anda mempunyai perubahan yang belum disimpan pada medan-medan individu yang boleh di-edit. Sekiranya anda melakukan sebarang tindakan, penukaran yang tidak disimpan akan hilang.", + "abbrev. month April\u0004Apr": "Apr", + "abbrev. month August\u0004Aug": "Ogo", + "abbrev. month December\u0004Dec": "Dis", + "abbrev. month February\u0004Feb": "Feb", + "abbrev. month January\u0004Jan": "Jan", + "abbrev. month July\u0004Jul": "Jul", + "abbrev. month June\u0004Jun": "Jun", + "abbrev. month March\u0004Mar": "Mar", + "abbrev. month May\u0004May": "Mei", + "abbrev. month November\u0004Nov": "Nov", + "abbrev. month October\u0004Oct": "Okt", + "abbrev. month September\u0004Sep": "Sep", + "one letter Friday\u0004F": "J", + "one letter Monday\u0004M": "I", + "one letter Saturday\u0004S": "Sa", + "one letter Sunday\u0004S": "A", + "one letter Thursday\u0004T": "K", + "one letter Tuesday\u0004T": "Se", + "one letter Wednesday\u0004W": "R" }; - for (var key in newcatalog) { + for (const key in newcatalog) { django.catalog[key] = newcatalog[key]; } if (!django.jsi18n_initialized) { django.gettext = function(msgid) { - var value = django.catalog[msgid]; - if (typeof(value) == 'undefined') { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { return msgid; } else { - return (typeof(value) == 'string') ? value : value[0]; + return (typeof value === 'string') ? value : value[0]; } }; django.ngettext = function(singular, plural, count) { - var value = django.catalog[singular]; - if (typeof(value) == 'undefined') { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { return (count == 1) ? singular : plural; } else { return value.constructor === Array ? value[django.pluralidx(count)] : value; @@ -49,16 +119,16 @@ django.gettext_noop = function(msgid) { return msgid; }; django.pgettext = function(context, msgid) { - var value = django.gettext(context + '\x04' + msgid); - if (value.indexOf('\x04') != -1) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { value = msgid; } return value; }; django.npgettext = function(context, singular, plural, count) { - var value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); - if (value.indexOf('\x04') != -1) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { value = django.ngettext(singular, plural, count); } return value; @@ -81,31 +151,28 @@ "%Y-%m-%d %H:%M:%S", "%Y-%m-%d %H:%M:%S.%f", "%Y-%m-%d %H:%M", - "%m/%d/%Y %H:%M:%S", - "%m/%d/%Y %H:%M:%S.%f", - "%m/%d/%Y %H:%M", - "%m/%d/%y %H:%M:%S", - "%m/%d/%y %H:%M:%S.%f", - "%m/%d/%y %H:%M" + "%d/%m/%Y %H:%M:%S", + "%d/%m/%Y %H:%M:%S.%f", + "%d/%m/%Y %H:%M", + "%d/%m/%y %H:%M:%S", + "%d/%m/%y %H:%M:%S.%f", + "%d/%m/%y %H:%M", + "%Y-%m-%d" ], "DATE_FORMAT": "d/m/Y", "DATE_INPUT_FORMATS": [ "%Y-%m-%d", - "%m/%d/%Y", - "%m/%d/%y", - "%b %d %Y", - "%b %d, %Y", + "%d/%m/%Y", + "%d/%m/%y", "%d %b %Y", "%d %b, %Y", - "%B %d %Y", - "%B %d, %Y", "%d %B %Y", "%d %B, %Y" ], "DECIMAL_SEPARATOR": ".", "FIRST_DAY_OF_WEEK": 0, - "MONTH_DAY_FORMAT": "F j", - "NUMBER_GROUPING": 0, + "MONTH_DAY_FORMAT": "j F", + "NUMBER_GROUPING": 3, "SHORT_DATETIME_FORMAT": "g:i A d/m/Y", "SHORT_DATE_FORMAT": "d/m/Y", "THOUSAND_SEPARATOR": ",", @@ -119,8 +186,8 @@ }; django.get_format = function(format_type) { - var value = django.formats[format_type]; - if (typeof(value) == 'undefined') { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { return format_type; } else { return value; @@ -139,6 +206,5 @@ django.jsi18n_initialized = true; } - -}(this)); +}; diff --git a/tabbycat/locale/jsi18n/pt/djangojs.js b/tabbycat/locale/jsi18n/pt/djangojs.js index 14c59fc25ef..e4b7401704d 100644 --- a/tabbycat/locale/jsi18n/pt/djangojs.js +++ b/tabbycat/locale/jsi18n/pt/djangojs.js @@ -1,13 +1,14 @@ -(function(globals) { - - var django = globals.django || (globals.django = {}); +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); django.pluralidx = function(n) { - var v=(n != 1); - if (typeof(v) == 'boolean') { + const v = (n != 1); + if (typeof v === 'boolean') { return v ? 1 : 0; } else { return v; @@ -19,7 +20,7 @@ django.catalog = django.catalog || {}; - var newcatalog = { + const newcatalog = { "%(sel)s of %(cnt)s selected": [ "%(sel)s de %(cnt)s selecionado", "%(sel)s de %(cnt)s selecionados" @@ -87,24 +88,24 @@ "one letter Tuesday\u0004T": "T", "one letter Wednesday\u0004W": "Q" }; - for (var key in newcatalog) { + for (const key in newcatalog) { django.catalog[key] = newcatalog[key]; } if (!django.jsi18n_initialized) { django.gettext = function(msgid) { - var value = django.catalog[msgid]; - if (typeof(value) == 'undefined') { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { return msgid; } else { - return (typeof(value) == 'string') ? value : value[0]; + return (typeof value === 'string') ? value : value[0]; } }; django.ngettext = function(singular, plural, count) { - var value = django.catalog[singular]; - if (typeof(value) == 'undefined') { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { return (count == 1) ? singular : plural; } else { return value.constructor === Array ? value[django.pluralidx(count)] : value; @@ -114,16 +115,16 @@ django.gettext_noop = function(msgid) { return msgid; }; django.pgettext = function(context, msgid) { - var value = django.gettext(context + '\x04' + msgid); - if (value.indexOf('\x04') != -1) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { value = msgid; } return value; }; django.npgettext = function(context, singular, plural, count) { - var value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); - if (value.indexOf('\x04') != -1) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { value = django.ngettext(singular, plural, count); } return value; @@ -177,8 +178,8 @@ }; django.get_format = function(format_type) { - var value = django.formats[format_type]; - if (typeof(value) == 'undefined') { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { return format_type; } else { return value; @@ -197,6 +198,5 @@ django.jsi18n_initialized = true; } - -}(this)); +}; diff --git a/tabbycat/locale/jsi18n/ro/djangojs.js b/tabbycat/locale/jsi18n/ro/djangojs.js new file mode 100644 index 00000000000..53771f7a74e --- /dev/null +++ b/tabbycat/locale/jsi18n/ro/djangojs.js @@ -0,0 +1,199 @@ + + +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); + + + django.pluralidx = function(n) { + const v = (n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2); + if (typeof v === 'boolean') { + return v ? 1 : 0; + } else { + return v; + } + }; + + + /* gettext library */ + + django.catalog = django.catalog || {}; + + const newcatalog = { + "%(sel)s of %(cnt)s selected": [ + "%(sel)s din %(cnt)s selectate", + "%(sel)s din %(cnt)s selectate", + "de %(sel)s din %(cnt)s selectate" + ], + "6 a.m.": "6 a.m.", + "6 p.m.": "6 p.m.", + "April": "Aprilie", + "August": "August", + "Available %s": "%s disponibil", + "Cancel": "Anuleaz\u0103", + "Choose": "Alege", + "Choose a Date": "Alege o dat\u0103", + "Choose a Time": "Alege o or\u0103", + "Choose a time": "Alege o or\u0103", + "Choose all": "Alege toate", + "Chosen %s": "%s alese", + "Click to choose all %s at once.": "Click pentru a alege toate %s.", + "Click to remove all chosen %s at once.": "Click pentru a elimina toate %s alese.", + "December": "Decembrie", + "February": "Februarie", + "Filter": "Filtru", + "Hide": "Ascunde", + "January": "Ianuarie", + "July": "Iulie", + "June": "Iunie", + "March": "Martie", + "May": "Mai", + "Midnight": "Miezul nop\u021bii", + "Noon": "Amiaz\u0103", + "Note: You are %s hour ahead of server time.": [ + "Not\u0103: Sunte\u021bi cu %s or\u0103 \u00eenaintea orei serverului.", + "Not\u0103: Sunte\u021bi cu %s ore \u00eenaintea orei serverului.", + "Not\u0103: Sunte\u021bi cu %s de ore \u00eenaintea orei serverului." + ], + "Note: You are %s hour behind server time.": [ + "Not\u0103: Sunte\u021bi cu %s or\u0103 \u00een urma orei serverului.", + "Not\u0103: Sunte\u021bi cu %s ore \u00een urma orei serverului.", + "Not\u0103: Sunte\u021bi cu %s de ore \u00een urma orei serverului." + ], + "November": "Noiembrie", + "Now": "Acum", + "October": "Octombrie", + "Remove": "Elimin\u0103", + "Remove all": "Elimin\u0103 toate", + "September": "Septembrie", + "Show": "Arat\u0103", + "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes.": "Aceasta este o list\u0103 cu %s disponibile. Le pute\u021bi alege select\u00e2nd mai multe in chenarul de mai jos \u0219i ap\u0103s\u00e2nd pe s\u0103geata \"Alege\" dintre cele dou\u0103 chenare.", + "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes.": "Aceasta este lista de %s alese. Pute\u021bi elimina din ele select\u00e2ndu-le in chenarul de mai jos \u0219i apasand pe s\u0103geata \"Elimin\u0103\" dintre cele dou\u0103 chenare.", + "Today": "Ast\u0103zi", + "Tomorrow": "M\u00e2ine", + "Type into this box to filter down the list of available %s.": "Scrie \u00een acest chenar pentru a filtra lista de %s disponibile.", + "Yesterday": "Ieri", + "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "Ai selectat o ac\u021biune \u0219i nu ai f\u0103cut modific\u0103ri. Probabil c\u0103 dore\u0219ti butonul de Go mai putin cel de Salveaz\u0103.", + "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "Ai selectat o ac\u021biune dar nu ai salvat modific\u0103rile f\u0103cute \u00een c\u00e2mpuri individuale. Te rug\u0103m apasa Ok pentru a salva. Va trebui sa reiei ac\u021biunea.", + "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "Ave\u0163i modific\u0103ri nesalvate \u00een c\u00eempuri individuale editabile. Dac\u0103 executa\u0163i o ac\u021biune, modific\u0103rile nesalvate vor fi pierdute.", + "one letter Friday\u0004F": "V", + "one letter Monday\u0004M": "L", + "one letter Saturday\u0004S": "S", + "one letter Sunday\u0004S": "D", + "one letter Thursday\u0004T": "J", + "one letter Tuesday\u0004T": "M", + "one letter Wednesday\u0004W": "M" + }; + for (const key in newcatalog) { + django.catalog[key] = newcatalog[key]; + } + + + if (!django.jsi18n_initialized) { + django.gettext = function(msgid) { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { + return msgid; + } else { + return (typeof value === 'string') ? value : value[0]; + } + }; + + django.ngettext = function(singular, plural, count) { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { + return (count == 1) ? singular : plural; + } else { + return value.constructor === Array ? value[django.pluralidx(count)] : value; + } + }; + + django.gettext_noop = function(msgid) { return msgid; }; + + django.pgettext = function(context, msgid) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { + value = msgid; + } + return value; + }; + + django.npgettext = function(context, singular, plural, count) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { + value = django.ngettext(singular, plural, count); + } + return value; + }; + + django.interpolate = function(fmt, obj, named) { + if (named) { + return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])}); + } else { + return fmt.replace(/%s/g, function(match){return String(obj.shift())}); + } + }; + + + /* formatting library */ + + django.formats = { + "DATETIME_FORMAT": "j F Y, H:i", + "DATETIME_INPUT_FORMATS": [ + "%d.%m.%Y, %H:%M", + "%d.%m.%Y, %H:%M:%S", + "%d.%B.%Y, %H:%M", + "%d.%B.%Y, %H:%M:%S", + "%Y-%m-%d %H:%M:%S", + "%Y-%m-%d %H:%M:%S.%f", + "%Y-%m-%d %H:%M", + "%Y-%m-%d" + ], + "DATE_FORMAT": "j F Y", + "DATE_INPUT_FORMATS": [ + "%d.%m.%Y", + "%d.%b.%Y", + "%d %B %Y", + "%A, %d %B %Y", + "%Y-%m-%d" + ], + "DECIMAL_SEPARATOR": ",", + "FIRST_DAY_OF_WEEK": 1, + "MONTH_DAY_FORMAT": "j F", + "NUMBER_GROUPING": 3, + "SHORT_DATETIME_FORMAT": "d.m.Y, H:i", + "SHORT_DATE_FORMAT": "d.m.Y", + "THOUSAND_SEPARATOR": ".", + "TIME_FORMAT": "H:i", + "TIME_INPUT_FORMATS": [ + "%H:%M", + "%H:%M:%S", + "%H:%M:%S.%f" + ], + "YEAR_MONTH_FORMAT": "F Y" + }; + + django.get_format = function(format_type) { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { + return format_type; + } else { + return value; + } + }; + + /* add to global namespace */ + globals.pluralidx = django.pluralidx; + globals.gettext = django.gettext; + globals.ngettext = django.ngettext; + globals.gettext_noop = django.gettext_noop; + globals.pgettext = django.pgettext; + globals.npgettext = django.npgettext; + globals.interpolate = django.interpolate; + globals.get_format = django.get_format; + + django.jsi18n_initialized = true; + } +}; + diff --git a/tabbycat/locale/jsi18n/ru/djangojs.js b/tabbycat/locale/jsi18n/ru/djangojs.js index 4d62bf11fa2..9c343ad7db0 100644 --- a/tabbycat/locale/jsi18n/ru/djangojs.js +++ b/tabbycat/locale/jsi18n/ru/djangojs.js @@ -1,8 +1,9 @@ -(function(globals) { - - var django = globals.django || (globals.django = {}); +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); django.pluralidx = function(count) { return (count == 1) ? 0 : 1; }; @@ -12,7 +13,7 @@ django.catalog = django.catalog || {}; - var newcatalog = { + const newcatalog = { "%(sel)s of %(cnt)s selected": [ "\u0412\u044b\u0431\u0440\u0430\u043d %(sel)s \u0438\u0437 %(cnt)s", "\u0412\u044b\u0431\u0440\u0430\u043d\u043e %(sel)s \u0438\u0437 %(cnt)s" @@ -190,9 +191,22 @@ "Yes": "\u0414\u0430", "Yesterday": "\u0412\u0447\u0435\u0440\u0430", "You cannot confirm this ballot because you entered it": "\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0431\u044d\u043b\u043b\u043e\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0430\u043c\u0438 \u0432\u0432\u0435\u043b\u0438 \u0435\u0433\u043e", + "You have already submitted this form. Are you sure you want to submit it again?": "\u0412\u044b \u0443\u0436\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u044d\u0442\u0443 \u0444\u043e\u0440\u043c\u0443. \u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0451 \u0435\u0449\u0451 \u0440\u0430\u0437?", "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "\u0412\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0438 \u043d\u0435 \u0432\u043d\u0435\u0441\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0434\u0430\u043d\u043d\u044b\u0435. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \"\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c\", \u0430 \u043d\u0435 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c\". \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0430\u043a, \u0442\u043e \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \"\u041e\u0442\u043c\u0435\u043d\u0430\", \u0447\u0442\u043e\u0431\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.", "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "\u0412\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043d\u043e \u0435\u0449\u0435 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0432\u043d\u0435\u0441\u0435\u043d\u043d\u044b\u0435 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u043b\u044f\u0445 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 OK, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437.", "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "\u0418\u043c\u0435\u044e\u0442\u0441\u044f \u043d\u0435\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u043b\u044f\u0445 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043d\u0435\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u044b.", + "abbrev. month April\u0004Apr": "\u0410\u043f\u0440", + "abbrev. month August\u0004Aug": "\u0410\u0432\u0433", + "abbrev. month December\u0004Dec": "\u0414\u0435\u043a", + "abbrev. month February\u0004Feb": "\u0424\u0435\u0432", + "abbrev. month January\u0004Jan": "\u042f\u043d\u0432", + "abbrev. month July\u0004Jul": "\u0418\u044e\u043b", + "abbrev. month June\u0004Jun": "\u0418\u044e\u043d", + "abbrev. month March\u0004Mar": "\u041c\u0430\u0440", + "abbrev. month May\u0004May": "\u041c\u0430\u0439", + "abbrev. month November\u0004Nov": "\u041d\u043e\u044f", + "abbrev. month October\u0004Oct": "\u041e\u043a\u0442", + "abbrev. month September\u0004Sep": "\u0421\u0435\u043d", "adjudicators with gender data": "\u0441\u0443\u0434\u044c\u0438 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043e \u0433\u0435\u043d\u0434\u0435\u0440\u0435", "decimal marks are allowed": "\u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0435 \u043e\u0446\u0435\u043d\u043a\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b", "deselect all": "\u0443\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435", @@ -213,24 +227,24 @@ "tab entry": "\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u044d\u0431\u0430", "\u00bd marks are allowed": "\u043e\u0446\u0435\u043d\u043a\u0438 1/2 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b" }; - for (var key in newcatalog) { + for (const key in newcatalog) { django.catalog[key] = newcatalog[key]; } if (!django.jsi18n_initialized) { django.gettext = function(msgid) { - var value = django.catalog[msgid]; - if (typeof(value) == 'undefined') { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { return msgid; } else { - return (typeof(value) == 'string') ? value : value[0]; + return (typeof value === 'string') ? value : value[0]; } }; django.ngettext = function(singular, plural, count) { - var value = django.catalog[singular]; - if (typeof(value) == 'undefined') { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { return (count == 1) ? singular : plural; } else { return value.constructor === Array ? value[django.pluralidx(count)] : value; @@ -240,16 +254,16 @@ django.gettext_noop = function(msgid) { return msgid; }; django.pgettext = function(context, msgid) { - var value = django.gettext(context + '\x04' + msgid); - if (value.indexOf('\x04') != -1) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { value = msgid; } return value; }; django.npgettext = function(context, singular, plural, count) { - var value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); - if (value.indexOf('\x04') != -1) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { value = django.ngettext(singular, plural, count); } return value; @@ -303,8 +317,8 @@ }; django.get_format = function(format_type) { - var value = django.formats[format_type]; - if (typeof(value) == 'undefined') { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { return format_type; } else { return value; @@ -323,6 +337,5 @@ django.jsi18n_initialized = true; } - -}(this)); +}; diff --git a/tabbycat/locale/jsi18n/tr/djangojs.js b/tabbycat/locale/jsi18n/tr/djangojs.js new file mode 100644 index 00000000000..eee6bce2d53 --- /dev/null +++ b/tabbycat/locale/jsi18n/tr/djangojs.js @@ -0,0 +1,221 @@ + + +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); + + + django.pluralidx = function(n) { + const v = (n != 1); + if (typeof v === 'boolean') { + return v ? 1 : 0; + } else { + return v; + } + }; + + + /* gettext library */ + + django.catalog = django.catalog || {}; + + const newcatalog = { + "%(sel)s of %(cnt)s selected": [ + "%(sel)s / %(cnt)s se\u00e7ildi", + "%(sel)s / %(cnt)s se\u00e7ildi" + ], + "%1 (%2, %3)": "%1 (%2, %3)", + "%1:": "%1:", + "%s selected option not visible": [ + "%s se\u00e7ilen se\u00e7enek g\u00f6r\u00fcn\u00fcr de\u011fil", + "%s se\u00e7ilen se\u00e7enek g\u00f6r\u00fcn\u00fcr de\u011fil" + ], + "6 a.m.": "Sabah 6", + "6 p.m.": "6 \u00f6.s.", + "; ": "; ", + "%1: %2": "%1: %2", + "April": "Nisan", + "August": "A\u011fustos", + "Available %s": "Mevcut %s", + "Cancel": "\u0130ptal", + "Category": "Kategori", + "Choose": "Se\u00e7in", + "Choose a Date": "Bir Tarih Se\u00e7in", + "Choose a Time": "Bir Saat Se\u00e7in", + "Choose a time": "Bir saat se\u00e7in", + "Choose all": "T\u00fcm\u00fcn\u00fc se\u00e7in", + "Chosen %s": "Se\u00e7ilen %s", + "Click to choose all %s at once.": "Bir kerede t\u00fcm %s se\u00e7ilmesi i\u00e7in t\u0131klay\u0131n.", + "Click to remove all chosen %s at once.": "Bir kerede t\u00fcm se\u00e7ilen %s kald\u0131r\u0131lmas\u0131 i\u00e7in t\u0131klay\u0131n.", + "December": "Aral\u0131k", + "February": "\u015eubat", + "Filter": "S\u00fczge\u00e7", + "Gender": "Cinsiyet", + "Hide": "Gizle", + "January": "Ocak", + "July": "Temmuz", + "June": "Haziran", + "March": "Mart", + "May": "May\u0131s", + "Midnight": "Geceyar\u0131s\u0131", + "Noon": "\u00d6\u011fle", + "Note: You are %s hour ahead of server time.": [ + "Not: Sunucu saatinin %s saat ilerisindesiniz.", + "Not: Sunucu saatinin %s saat ilerisindesiniz." + ], + "Note: You are %s hour behind server time.": [ + "Not: Sunucu saatinin %s saat gerisindesiniz.", + "Not: Sunucu saatinin %s saat gerisindesiniz." + ], + "November": "Kas\u0131m", + "Now": "\u015eimdi", + "October": "Ekim", + "Rank": "S\u0131ralama", + "Region": "B\u00f6lge", + "Remove": "Kald\u0131r", + "Remove all": "T\u00fcm\u00fcn\u00fc kald\u0131r", + "September": "Eyl\u00fcl", + "Show": "G\u00f6ster", + "Team": "Tak\u0131m", + "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes.": "Bu mevcut %s listesidir. A\u015fa\u011f\u0131daki kutudan baz\u0131lar\u0131n\u0131 i\u015faretleyerek ve ondan sonra iki kutu aras\u0131ndaki \"Se\u00e7in\" okuna t\u0131klayarak se\u00e7ebilirsiniz.", + "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes.": "Bu se\u00e7ilen %s listesidir. A\u015fa\u011f\u0131daki kutudan baz\u0131lar\u0131n\u0131 i\u015faretleyerek ve ondan sonra iki kutu aras\u0131ndaki \"Kald\u0131r\" okuna t\u0131klayarak kald\u0131rabilirsiniz.", + "Today": "Bug\u00fcn", + "Tomorrow": "Yar\u0131n", + "Total:": "Toplam:", + "Type into this box to filter down the list of available %s.": "Mevcut %s listesini s\u00fczmek i\u00e7in bu kutu i\u00e7ine yaz\u0131n.", + "Type into this box to filter down the list of selected %s.": "Se\u00e7ilen %s listesini s\u00fczmek i\u00e7in bu kutu i\u00e7ine yaz\u0131n.", + "Yesterday": "D\u00fcn", + "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "Bir eylem se\u00e7tiniz, ancak tek tek alanlarda herhangi bir de\u011fi\u015fiklik yapmad\u0131n\u0131z. Muhtemelen Kaydet d\u00fc\u011fmesi yerine Git d\u00fc\u011fmesini ar\u0131yorsunuz.", + "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "Bir eylem se\u00e7tiniz, ancak de\u011fi\u015fikliklerinizi tek tek alanlara kaydetmediniz. Kaydetmek i\u00e7in l\u00fctfen TAMAM d\u00fc\u011fmesine t\u0131klay\u0131n. Eylemi yeniden \u00e7al\u0131\u015ft\u0131rman\u0131z gerekecek.", + "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "Bireysel d\u00fczenlenebilir alanlarda kaydedilmemi\u015f de\u011fi\u015fiklikleriniz var. E\u011fer bir eylem \u00e7al\u0131\u015ft\u0131r\u0131rsan\u0131z, kaydedilmemi\u015f de\u011fi\u015fiklikleriniz kaybolacakt\u0131r.", + "abbrev. month April\u0004Apr": "Nis", + "abbrev. month August\u0004Aug": "A\u011fu", + "abbrev. month December\u0004Dec": "Ara", + "abbrev. month February\u0004Feb": "\u015eub", + "abbrev. month January\u0004Jan": "Oca", + "abbrev. month July\u0004Jul": "Tem", + "abbrev. month June\u0004Jun": "Haz", + "abbrev. month March\u0004Mar": "Mar", + "abbrev. month May\u0004May": "May", + "abbrev. month November\u0004Nov": "Kas", + "abbrev. month October\u0004Oct": "Eki", + "abbrev. month September\u0004Sep": "Eyl", + "one letter Friday\u0004F": "C", + "one letter Monday\u0004M": "Pt", + "one letter Saturday\u0004S": "Ct", + "one letter Sunday\u0004S": "P", + "one letter Thursday\u0004T": "Pe", + "one letter Tuesday\u0004T": "S", + "one letter Wednesday\u0004W": "\u00c7" + }; + for (const key in newcatalog) { + django.catalog[key] = newcatalog[key]; + } + + + if (!django.jsi18n_initialized) { + django.gettext = function(msgid) { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { + return msgid; + } else { + return (typeof value === 'string') ? value : value[0]; + } + }; + + django.ngettext = function(singular, plural, count) { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { + return (count == 1) ? singular : plural; + } else { + return value.constructor === Array ? value[django.pluralidx(count)] : value; + } + }; + + django.gettext_noop = function(msgid) { return msgid; }; + + django.pgettext = function(context, msgid) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { + value = msgid; + } + return value; + }; + + django.npgettext = function(context, singular, plural, count) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { + value = django.ngettext(singular, plural, count); + } + return value; + }; + + django.interpolate = function(fmt, obj, named) { + if (named) { + return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])}); + } else { + return fmt.replace(/%s/g, function(match){return String(obj.shift())}); + } + }; + + + /* formatting library */ + + django.formats = { + "DATETIME_FORMAT": "d F Y H:i", + "DATETIME_INPUT_FORMATS": [ + "%d/%m/%Y %H:%M:%S", + "%d/%m/%Y %H:%M:%S.%f", + "%d/%m/%Y %H:%M", + "%Y-%m-%d %H:%M:%S", + "%Y-%m-%d %H:%M:%S.%f", + "%Y-%m-%d %H:%M", + "%Y-%m-%d" + ], + "DATE_FORMAT": "d F Y", + "DATE_INPUT_FORMATS": [ + "%d/%m/%Y", + "%d/%m/%y", + "%y-%m-%d", + "%Y-%m-%d" + ], + "DECIMAL_SEPARATOR": ",", + "FIRST_DAY_OF_WEEK": 1, + "MONTH_DAY_FORMAT": "d F", + "NUMBER_GROUPING": 3, + "SHORT_DATETIME_FORMAT": "d M Y H:i", + "SHORT_DATE_FORMAT": "d M Y", + "THOUSAND_SEPARATOR": ".", + "TIME_FORMAT": "H:i", + "TIME_INPUT_FORMATS": [ + "%H:%M:%S", + "%H:%M:%S.%f", + "%H:%M" + ], + "YEAR_MONTH_FORMAT": "F Y" + }; + + django.get_format = function(format_type) { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { + return format_type; + } else { + return value; + } + }; + + /* add to global namespace */ + globals.pluralidx = django.pluralidx; + globals.gettext = django.gettext; + globals.ngettext = django.ngettext; + globals.gettext_noop = django.gettext_noop; + globals.pgettext = django.pgettext; + globals.npgettext = django.npgettext; + globals.interpolate = django.interpolate; + globals.get_format = django.get_format; + + django.jsi18n_initialized = true; + } +}; + diff --git a/tabbycat/locale/jsi18n/tzl/djangojs.js b/tabbycat/locale/jsi18n/tzl/djangojs.js index 4f81fb8c67f..31be8fe40f6 100644 --- a/tabbycat/locale/jsi18n/tzl/djangojs.js +++ b/tabbycat/locale/jsi18n/tzl/djangojs.js @@ -1,13 +1,14 @@ -(function(globals) { - - var django = globals.django || (globals.django = {}); +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); django.pluralidx = function(n) { - var v=(n != 1); - if (typeof(v) == 'boolean') { + const v = (n != 1); + if (typeof v === 'boolean') { return v ? 1 : 0; } else { return v; @@ -19,7 +20,7 @@ django.catalog = django.catalog || {}; - var newcatalog = { + const newcatalog = { "%1 %2 from %3": "crwdns34816:0%1crwdnd34816:0%2crwdnd34816:0%3crwdne34816:0", "%1 %2 from %3 %4": "crwdns34818:0%1crwdnd34818:0%2crwdnd34818:0%3crwdnd34818:0%4crwdne34818:0", "%1 %2 from %3 on %4 (Chair)": "crwdns34820:0%1crwdnd34820:0%2crwdnd34820:0%3crwdnd34820:0%4crwdne34820:0", @@ -154,24 +155,24 @@ "tab entry": "crwdns34866:0crwdne34866:0", "\u00bd marks are allowed": "crwdns34874:0crwdne34874:0" }; - for (var key in newcatalog) { + for (const key in newcatalog) { django.catalog[key] = newcatalog[key]; } if (!django.jsi18n_initialized) { django.gettext = function(msgid) { - var value = django.catalog[msgid]; - if (typeof(value) == 'undefined') { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { return msgid; } else { - return (typeof(value) == 'string') ? value : value[0]; + return (typeof value === 'string') ? value : value[0]; } }; django.ngettext = function(singular, plural, count) { - var value = django.catalog[singular]; - if (typeof(value) == 'undefined') { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { return (count == 1) ? singular : plural; } else { return value.constructor === Array ? value[django.pluralidx(count)] : value; @@ -181,16 +182,16 @@ django.gettext_noop = function(msgid) { return msgid; }; django.pgettext = function(context, msgid) { - var value = django.gettext(context + '\x04' + msgid); - if (value.indexOf('\x04') != -1) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { value = msgid; } return value; }; django.npgettext = function(context, singular, plural, count) { - var value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); - if (value.indexOf('\x04') != -1) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { value = django.ngettext(singular, plural, count); } return value; @@ -244,8 +245,8 @@ }; django.get_format = function(format_type) { - var value = django.formats[format_type]; - if (typeof(value) == 'undefined') { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { return format_type; } else { return value; @@ -264,6 +265,5 @@ django.jsi18n_initialized = true; } - -}(this)); +}; diff --git a/tabbycat/locale/jsi18n/vi/djangojs.js b/tabbycat/locale/jsi18n/vi/djangojs.js new file mode 100644 index 00000000000..e249fb3f0e1 --- /dev/null +++ b/tabbycat/locale/jsi18n/vi/djangojs.js @@ -0,0 +1,228 @@ + + +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); + + + django.pluralidx = function(n) { + const v = 0; + if (typeof v === 'boolean') { + return v ? 1 : 0; + } else { + return v; + } + }; + + + /* gettext library */ + + django.catalog = django.catalog || {}; + + const newcatalog = { + "%(sel)s of %(cnt)s selected": [ + " %(sel)s c\u1ee7a %(cnt)s \u0111\u01b0\u1ee3c ch\u1ecdn" + ], + "6 a.m.": "6 gi\u1edd s\u00e1ng", + "6 p.m.": "6 gi\u1edd chi\u1ec1u", + "April": "Th\u00e1ng T\u01b0", + "August": "Th\u00e1ng T\u00e1m", + "Available %s": "C\u00f3 s\u1eb5n %s", + "Cancel": "H\u1ee7y b\u1ecf", + "Category": "Th\u1ec3 lo\u1ea1i", + "Choose": "Ch\u1ecdn", + "Choose a Date": "Ch\u1ecdn Ng\u00e0y", + "Choose a Time": "Ch\u1ecdn Th\u1eddi gian", + "Choose a time": "Ch\u1ecdn gi\u1edd", + "Choose all": "Ch\u1ecdn t\u1ea5t c\u1ea3", + "Chosen %s": "Ch\u1ecdn %s", + "Click to choose all %s at once.": "Click \u0111\u1ec3 ch\u1ecdn t\u1ea5t c\u1ea3 %s .", + "Click to remove all chosen %s at once.": "Click \u0111\u1ec3 b\u1ecf ch\u1ecdn t\u1ea5t c\u1ea3 %s", + "Click to undo a check-in": "Nh\u1ea5n \u0111\u1ec3 ho\u00e0n t\u00e1c \u0111i\u1ec3m danh", + "December": "Th\u00e1ng M\u01b0\u1eddi Hai", + "February": "Th\u00e1ng Hai", + "Filter": "L\u1ecdc", + "Find in Table": "T\u00ecm trong B\u1ea3ng", + "Hide": "D\u1ea5u \u0111i", + "If you want to view this page without the sidebar (i.e. for displaying to an auditorium) you can use the assistant version.": "N\u1ebfu b\u1ea1n mu\u1ed1n hi\u1ec3n th\u1ecb trang n\u00e0y m\u00e0 kh\u00f4ng c\u00f3 thanh cu\u1ed9n (v\u00ed d\u1ee5: \u0111\u1ec3 hi\u1ec3n th\u1ecb \u1edf kh\u00e1n ph\u00f2ng), b\u1ea1n c\u00f3 th\u1ec3 d\u00f9ng phi\u00ean b\u1ea3n c\u1ee7a tr\u1ee3 l\u00fd.", + "Independent": "\u0110\u1ed9c l\u1eadp", + "January": "Th\u00e1ng M\u1ed9t", + "July": "Th\u00e1ng B\u1ea3y", + "June": "Th\u00e1ng S\u00e1u", + "Latest Actions": "H\u00e0nh \u0111\u1ed9ng g\u1ea7n \u0111\u00e2y nh\u1ea5t", + "Latest Results": "K\u1ebft qu\u1ea3 g\u1ea7n \u0111\u00e2y nh\u1ea5t", + "March": "Th\u00e1ng Ba", + "May": "Th\u00e1ng N\u0103m", + "Midnight": "N\u1eeda \u0111\u00eam", + "No Category": "Kh\u00f4ng c\u00f3 ph\u00e2n lo\u1ea1i", + "Noon": "Bu\u1ed5i tr\u01b0a", + "Note: You are %s hour ahead of server time.": [ + "L\u01b0u \u00fd: Hi\u1ec7n t\u1ea1i b\u1ea1n \u0111ang th\u1ea5y th\u1eddi gian tr\u01b0\u1edbc %s gi\u1edd so v\u1edbi th\u1eddi gian m\u00e1y ch\u1ee7." + ], + "Note: You are %s hour behind server time.": [ + "L\u01b0u \u00fd: Hi\u1ec7n t\u1ea1i b\u1ea1n \u0111ang th\u1ea5y th\u1eddi gian sau %s gi\u1edd so v\u1edbi th\u1eddi gian m\u00e1y ch\u1ee7." + ], + "November": "Th\u00e1ng M\u01b0\u1eddi M\u1ed9t", + "Now": "B\u00e2y gi\u1edd", + "October": "Th\u00e1ng M\u01b0\u1eddi", + "Open the assistant version.": "M\u1edf phi\u00ean b\u1ea3n c\u1ee7a tr\u1ee3 l\u00fd.", + "Priority %1": "\u01afu ti\u00ean %1", + "Remove": "X\u00f3a", + "Remove all": "Xo\u00e1 t\u1ea5t c\u1ea3", + "Room:": "Ph\u00f2ng:", + "September": "Th\u00e1ng Ch\u00edn", + "Show": "Hi\u1ec7n ra", + "Team": "\u0110\u1ed9i", + "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes.": "Danh s\u00e1ch c\u00e1c l\u1ef1a ch\u1ecdn \u0111ang c\u00f3 %s. B\u1ea1n c\u00f3 th\u1ec3 ch\u1ecdn b\u1eb1ng b\u00e1ch click v\u00e0o m\u0169i t\u00ean \"Ch\u1ecdn\" n\u1eb1m gi\u1eefa hai h\u1ed9p.", + "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes.": "Danh s\u00e1ch b\u1ea1n \u0111\u00e3 ch\u1ecdn %s. B\u1ea1n c\u00f3 th\u1ec3 b\u1ecf ch\u1ecdn b\u1eb1ng c\u00e1ch click v\u00e0o m\u0169i t\u00ean \"Xo\u00e1\" n\u1eb1m gi\u1eefa hai \u00f4.", + "This person does not have a check-in identifier so they can't be checked in": "Ng\u01b0\u1eddi n\u00e0y kh\u00f4ng c\u00f3 m\u00e3 \u0111i\u1ec3m danh n\u00ean h\u1ecd kh\u00f4ng th\u1ec3 \u0111\u01b0\u1ee3c \u0111i\u1ec3m danh", + "Today": "H\u00f4m nay", + "Tomorrow": "Ng\u00e0y mai", + "Type into this box to filter down the list of available %s.": "B\u1ea1n h\u00e3y nh\u1eadp v\u00e0o \u00f4 n\u00e0y \u0111\u1ec3 l\u1ecdc c\u00e1c danh s\u00e1ch sau %s.", + "Uncategorised": "Ch\u01b0a ph\u00e2n lo\u1ea1i", + "Unknown": "Kh\u00f4ng x\u00e1c \u0111\u1ecbnh", + "Yesterday": "H\u00f4m qua", + "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "B\u1ea1n \u0111\u00e3 ch\u1ecdn m\u1ed9t h\u00e0nh \u0111\u1ed9ng v\u00e0 b\u1ea1n \u0111\u00e3 kh\u00f4ng th\u1ef1c hi\u1ec7n b\u1ea5t k\u1ef3 thay \u0111\u1ed5i n\u00e0o tr\u00ean c\u00e1c tr\u01b0\u1eddng. C\u00f3 l\u1ebd b\u1ea1n n\u00ean b\u1ea5m n\u00fat \u0110i \u0111\u1ebfn h\u01a1n l\u00e0 n\u00fat L\u01b0u l\u1ea1i.", + "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "B\u1ea1n \u0111\u00e3 ch\u1ecdn m\u1ed9t h\u00e0nh \u0111\u1ed9ng, nh\u01b0ng b\u1ea1n ch\u01b0a l\u01b0u c\u00e1c thay \u0111\u1ed5i tr\u00ean c\u00e1c tr\u01b0\u1eddng. Vui l\u00f2ng b\u1ea5m OK \u0111\u1ec3 l\u01b0u l\u1ea1i. B\u1ea1n s\u1ebd c\u1ea7n ch\u1ea1y l\u1ea1i h\u00e0nh d\u1ed9ng.", + "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "B\u1ea1n ch\u01b0a l\u01b0u nh\u1eefng tr\u01b0\u1eddng \u0111\u00e3 ch\u1ec9nh s\u1eeda. N\u1ebfu b\u1ea1n ch\u1ecdn h\u00e0nh \u0111\u1ed9ng n\u00e0y, nh\u1eefng ch\u1ec9nh s\u1eeda ch\u01b0a \u0111\u01b0\u1ee3c l\u01b0u s\u1ebd b\u1ecb m\u1ea5t.", + "abbrev. month April\u0004Apr": "Th\u00e1ng T\u01b0", + "abbrev. month August\u0004Aug": "Th\u00e1ng T\u00e1m", + "abbrev. month December\u0004Dec": "Th\u00e1ng M\u01b0\u1eddi Hai", + "abbrev. month February\u0004Feb": "Th\u00e1ng Hai", + "abbrev. month January\u0004Jan": "Th\u00e1ng M\u1ed9t", + "abbrev. month July\u0004Jul": "Th\u00e1ng B\u1ea3y", + "abbrev. month June\u0004Jun": "Th\u00e1ng S\u00e1u", + "abbrev. month March\u0004Mar": "Th\u00e1ng Ba", + "abbrev. month May\u0004May": "Th\u00e1ng N\u0103m", + "abbrev. month November\u0004Nov": "Th\u00e1ng M\u01b0\u1eddi M\u1ed9t", + "abbrev. month October\u0004Oct": "Th\u00e1ng M\u01b0\u1eddi", + "abbrev. month September\u0004Sep": "Th\u00e1ng Ch\u00edn", + "one letter Friday\u0004F": "6", + "one letter Monday\u0004M": "2", + "one letter Saturday\u0004S": "7", + "one letter Sunday\u0004S": "CN", + "one letter Thursday\u0004T": "5", + "one letter Tuesday\u0004T": "3", + "one letter Wednesday\u0004W": "4", + "saving...": "\u0111ang l\u01b0u..." + }; + for (const key in newcatalog) { + django.catalog[key] = newcatalog[key]; + } + + + if (!django.jsi18n_initialized) { + django.gettext = function(msgid) { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { + return msgid; + } else { + return (typeof value === 'string') ? value : value[0]; + } + }; + + django.ngettext = function(singular, plural, count) { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { + return (count == 1) ? singular : plural; + } else { + return value.constructor === Array ? value[django.pluralidx(count)] : value; + } + }; + + django.gettext_noop = function(msgid) { return msgid; }; + + django.pgettext = function(context, msgid) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { + value = msgid; + } + return value; + }; + + django.npgettext = function(context, singular, plural, count) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { + value = django.ngettext(singular, plural, count); + } + return value; + }; + + django.interpolate = function(fmt, obj, named) { + if (named) { + return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])}); + } else { + return fmt.replace(/%s/g, function(match){return String(obj.shift())}); + } + }; + + + /* formatting library */ + + django.formats = { + "DATETIME_FORMAT": "H:i \\N\\g\u00e0\\y d \\t\\h\u00e1\\n\\g n \\n\u0103\\m Y", + "DATETIME_INPUT_FORMATS": [ + "%Y-%m-%d %H:%M:%S", + "%Y-%m-%d %H:%M:%S.%f", + "%Y-%m-%d %H:%M", + "%m/%d/%Y %H:%M:%S", + "%m/%d/%Y %H:%M:%S.%f", + "%m/%d/%Y %H:%M", + "%m/%d/%y %H:%M:%S", + "%m/%d/%y %H:%M:%S.%f", + "%m/%d/%y %H:%M" + ], + "DATE_FORMAT": "\\N\\g\u00e0\\y d \\t\\h\u00e1\\n\\g n \\n\u0103\\m Y", + "DATE_INPUT_FORMATS": [ + "%Y-%m-%d", + "%m/%d/%Y", + "%m/%d/%y", + "%b %d %Y", + "%b %d, %Y", + "%d %b %Y", + "%d %b, %Y", + "%B %d %Y", + "%B %d, %Y", + "%d %B %Y", + "%d %B, %Y" + ], + "DECIMAL_SEPARATOR": ",", + "FIRST_DAY_OF_WEEK": 0, + "MONTH_DAY_FORMAT": "j F", + "NUMBER_GROUPING": 0, + "SHORT_DATETIME_FORMAT": "H:i d-m-Y", + "SHORT_DATE_FORMAT": "d-m-Y", + "THOUSAND_SEPARATOR": ".", + "TIME_FORMAT": "H:i", + "TIME_INPUT_FORMATS": [ + "%H:%M:%S", + "%H:%M:%S.%f", + "%H:%M" + ], + "YEAR_MONTH_FORMAT": "F Y" + }; + + django.get_format = function(format_type) { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { + return format_type; + } else { + return value; + } + }; + + /* add to global namespace */ + globals.pluralidx = django.pluralidx; + globals.gettext = django.gettext; + globals.ngettext = django.ngettext; + globals.gettext_noop = django.gettext_noop; + globals.pgettext = django.pgettext; + globals.npgettext = django.npgettext; + globals.interpolate = django.interpolate; + globals.get_format = django.get_format; + + django.jsi18n_initialized = true; + } +}; + diff --git a/tabbycat/locale/jsi18n/zh-hans/djangojs.js b/tabbycat/locale/jsi18n/zh-hans/djangojs.js index 00824447f01..24adfac3686 100644 --- a/tabbycat/locale/jsi18n/zh-hans/djangojs.js +++ b/tabbycat/locale/jsi18n/zh-hans/djangojs.js @@ -1,13 +1,14 @@ -(function(globals) { - - var django = globals.django || (globals.django = {}); +'use strict'; +{ + const globals = this; + const django = globals.django || (globals.django = {}); django.pluralidx = function(n) { - var v=0; - if (typeof(v) == 'boolean') { + const v = 0; + if (typeof v === 'boolean') { return v ? 1 : 0; } else { return v; @@ -19,7 +20,7 @@ django.catalog = django.catalog || {}; - var newcatalog = { + const newcatalog = { "%(sel)s of %(cnt)s selected": [ "\u9009\u4e2d\u4e86 %(cnt)s \u4e2a\u4e2d\u7684 %(sel)s \u4e2a" ], @@ -94,12 +95,25 @@ "Tomorrow": "\u660e\u5929", "Trainee": "\u5b9e\u4e60\u751f", "Type into this box to filter down the list of available %s.": "\u5728\u6b64\u6846\u4e2d\u952e\u5165\u4ee5\u8fc7\u6ee4\u53ef\u7528\u7684%s\u5217\u8868", + "Type into this box to filter down the list of selected %s.": "\u5728\u8be5\u6846\u4e2d\u952e\u5165\u4ee5\u8fc7\u6ee4\u6240\u9009%s\u7684\u5217\u8868\u3002", "Unknown": "\u672a\u77e5", "Yes": "\u662f", "Yesterday": "\u6628\u5929", "You have selected an action, and you haven\u2019t made any changes on individual fields. You\u2019re probably looking for the Go button rather than the Save button.": "\u4f60\u5df2\u7ecf\u9009\u62e9\u4e00\u4e2a\u52a8\u4f5c\uff0c\u4f46\u662f\u6ca1\u6709\u5355\u72ec\u4fee\u6539\u4efb\u4f55\u4e00\u5904\u3002\u4f60\u53ef\u4ee5\u9009\u62e9'Go'\u6309\u952e\u800c\u4e0d\u662f'Save'\u6309\u952e\u3002", "You have selected an action, but you haven\u2019t saved your changes to individual fields yet. Please click OK to save. You\u2019ll need to re-run the action.": "\u4f60\u5df2\u7ecf\u9009\u62e9\u4e00\u4e2a\u52a8\u4f5c\uff0c\u4f46\u662f\u4f60\u6ca1\u6709\u4fdd\u5b58\u4f60\u5355\u72ec\u4fee\u6539\u7684\u5730\u65b9\u3002\u8bf7\u70b9\u51fbOK\u4fdd\u5b58\u3002\u4f60\u9700\u8981\u518d\u91cd\u65b0\u8dd1\u8fd9\u4e2a\u52a8\u4f5c\u3002", "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.": "\u4f60\u5c1a\u672a\u4fdd\u5b58\u4e00\u4e2a\u53ef\u7f16\u8f91\u680f\u4f4d\u7684\u53d8\u66f4. \u5982\u679c\u4f60\u8fdb\u884c\u522b\u7684\u52a8\u4f5c, \u672a\u4fdd\u5b58\u7684\u53d8\u66f4\u5c06\u4f1a\u4e22\u5931.", + "abbrev. month April\u0004Apr": "\u56db\u6708", + "abbrev. month August\u0004Aug": "\u516b\u6708", + "abbrev. month December\u0004Dec": "\u5341\u4e8c\u6708", + "abbrev. month February\u0004Feb": "\u4e8c\u6708", + "abbrev. month January\u0004Jan": "\u4e00\u6708", + "abbrev. month July\u0004Jul": "\u4e03\u6708", + "abbrev. month June\u0004Jun": "\u516d\u6708", + "abbrev. month March\u0004Mar": "\u4e09\u6708", + "abbrev. month May\u0004May": "\u4e94\u6708", + "abbrev. month November\u0004Nov": "\u5341\u4e00\u6708", + "abbrev. month October\u0004Oct": "\u5341\u6708", + "abbrev. month September\u0004Sep": "\u4e5d\u6708", "one letter Friday\u0004F": "F", "one letter Monday\u0004M": "M", "one letter Saturday\u0004S": "S", @@ -109,24 +123,24 @@ "one letter Wednesday\u0004W": "W", "saving...": "\u5728\u4fdd\u5b58..." }; - for (var key in newcatalog) { + for (const key in newcatalog) { django.catalog[key] = newcatalog[key]; } if (!django.jsi18n_initialized) { django.gettext = function(msgid) { - var value = django.catalog[msgid]; - if (typeof(value) == 'undefined') { + const value = django.catalog[msgid]; + if (typeof value === 'undefined') { return msgid; } else { - return (typeof(value) == 'string') ? value : value[0]; + return (typeof value === 'string') ? value : value[0]; } }; django.ngettext = function(singular, plural, count) { - var value = django.catalog[singular]; - if (typeof(value) == 'undefined') { + const value = django.catalog[singular]; + if (typeof value === 'undefined') { return (count == 1) ? singular : plural; } else { return value.constructor === Array ? value[django.pluralidx(count)] : value; @@ -136,16 +150,16 @@ django.gettext_noop = function(msgid) { return msgid; }; django.pgettext = function(context, msgid) { - var value = django.gettext(context + '\x04' + msgid); - if (value.indexOf('\x04') != -1) { + let value = django.gettext(context + '\x04' + msgid); + if (value.includes('\x04')) { value = msgid; } return value; }; django.npgettext = function(context, singular, plural, count) { - var value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); - if (value.indexOf('\x04') != -1) { + let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count); + if (value.includes('\x04')) { value = django.ngettext(singular, plural, count); } return value; @@ -199,8 +213,8 @@ }; django.get_format = function(format_type) { - var value = django.formats[format_type]; - if (typeof(value) == 'undefined') { + const value = django.formats[format_type]; + if (typeof value === 'undefined') { return format_type; } else { return value; @@ -219,6 +233,5 @@ django.jsi18n_initialized = true; } - -}(this)); +}; diff --git a/tabbycat/locale/kk/LC_MESSAGES/django.mo b/tabbycat/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6449ea3464a5d135183f8ed1e90af93db20b37d8 GIT binary patch literal 678 zcmZXQ%Wl&^6ov;VEG!lXv1BpqU@>*#lwKUNfHXl-6A>i_A%s*-?5XRqPjk!@8Nlh-pArA%f1RuC`jX&r8&A+Nk`~CH` zM^>xRs-1qMIA5@;N*a8Wc{>Rj8S%{6Nz5Zzrv4_^sW6rMUY#wU#!Z@T2+eBJS3x90 zmoE1rW3}U<<}s^dAE`@aGJU2Mr%ZoeE7v8xR-wfkW$PiUYV{Pk?9X;)R`Q>ZHCA0( zT3lEv-keE1nRYVQj9iam3}FXiTf{1{PZn**%IC4Lg|wU1^;WIhy?wXVwSz6}OwA|i zp9<5KE2RaCWUsSt*~ff88?)>X*F%~eWuLOI`9Z#yA3*qk*O(r^KR(Jwi1<#jAJ8ZM WQN9b|OTM4)5(K}1f1G{JN8}eqJK(GU literal 0 HcmV?d00001 diff --git a/tabbycat/locale/kk/LC_MESSAGES/djangojs.mo b/tabbycat/locale/kk/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..c523e43121cf1e0944830797ee795a49ec950032 GIT binary patch literal 554 zcmZXQ&2Abo5XU!Bqe^>}5=|~Dn3>ypo5x7cp7Tx zOG@m{33T}^%95eV45!3%y#lxe@D7Pvr0%}mV%k7oF`;8-q(V`PiEzq74t>rhlr-57 zHXc4kDH)G1n&0epqg{LYNIvJ<6)6lCSZtACBf~F^lf*0%CE^d6(%h6!`*kQj`pvYEQY#N6HSRo)~+slC31HyzZK+7ndIM<>@%n+IY%wrZ)amA z&)%R>rKE7Mf0+NUA$*uNn`<%k>!J6q}rr4gUrmK2j zFGNG4A;d&fVu&$e1H=T~AjFH)2Tf*U^x|JYNcv(tc=V((@%x+US!VHOCDos<>R3eK7jT0j4kjvtlQxI;4Sc8@V9LJ2T1mRf|Soc;NxHp!N`6KNcLO7 z2f+c5>_@Wo8z9+Df@C)XJ^_}&`@o|h`D=hJXmJXB3+vtZNcEiqDemQLeI0xn>s9at z@Fqz4{{@l`n-FXZxD|XBd=q>Ud>bTx4Uqi32R;OT1U>^^0O|aVj6Y`l6(qZxAf5jm zd5t_XMlHDLkb_I~)6u}($4oG$qr1}Gp@;U`l+)qH1-?0HY8j>zl%Zr#~ zL;BHp3X^gszZ8qE4$|rPBWh&MFiZQsdWSr1h6TQ$q@!M2x%Q>No9f8IOs+Up zoVcCL@ZeBx%%C3{4wpg%bMmCiqsvO~;nli`taPJ?%9Gx%+jbQAsEoV`jXMQ>3Vc^Z zxm+oTBN2F$5ZM;E4m(RbI=qK>Uq^@b5~O^p}$$ZI=ZAKuw_ zuvaP-)VDpU0%V`}Wm5(w%=c8z2c{|lnU^|0J$9rxF+aa||HORWKZe$s!O+~{p%ZfV z$d25d|J&+09DpEcYk7&gsD1VS{(9wl`)Y%SaCAxYdYXKy*nZVsZtz9gGOXNQ(e>_v z`)P7T*I2nOmiX$qG&!%huC>3@c&5oUc0i@cX^pFxCTH_gnpenYjVxPNVmP{}cmR_R zV_yI1+cfzC-~6=owPyR)8LnHQMAP@8^z93(58t)7B4; zACD1*mHG>v=}W%c{-(j}R6)#}Y4U#eua<*s_2bpk$n+$RUva&a?nGk;68c| zLIP@BHFTUE#)%M3Yc0d}K$?7xn~)}#kYt)%P;9*YJx=#`2%lRk=n&lYT-{O8zXX$e AA^-pY literal 0 HcmV?d00001 diff --git a/tabbycat/locale/vi/LC_MESSAGES/djangojs.mo b/tabbycat/locale/vi/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..77ce95bf998f0ae5b78b3a24a9051bcc8de59201 GIT binary patch literal 1767 zcmaKrNpBoQ7={Zl+k`b7Kq5k)5Qs!d&v;2pXv;#*#0JYtEPG-haja39QYgP^z=Qz*z@2q(4Bh~bakdd{ILpt7Qr{cqu?#@DeyFu6E~(dtCorjc!urR@8LTV&zx{D`YjLD%8X& zh(xgBNyR3l3P~!e@MI1cep9VD%nUHYVew%RcRxgVkZ)0WGJdUq2sbB zinOc~3Z-epyd_o5g>pqa4W-qIOzS7QSp%%4Ms&luG16F9rYRC5wJNen6^e$ykFsnU zeH%+-fyI{Do6ZZ9#@4V|P5Z*mBjmp_&LtA%ZHrzUVDnnneO3{?&MI9&D618PS{PE= zQpB6$kS_#z%F1Oa5;EEqXc78<$x>DH%oENwc0mO_i=`1EW-CgsDrR^SHWZ6RHkas& zBCy_M=q>hy`eb>v+Co@iUNm%Ky%|%Jp?5Z|8Ly&!D$Jet=0#IFSG;q`?$coZ;E>lp z=nV|h;GjQrsxZxs^(qNhCg!jhLDO8-Qe2YfB>J={g;l&RjM(4tah*$xvxS+-nel^W z28#WKvQ`#qy-KTrVpd$TCETP`BT&i{Bkbsf%7l03;G8SGED~>A1v-RMpUzaJEzHGf z!eehjCw1eKYILV&bYO&f|Bm*L6yEU4iC#sJw`uM7_s z@S^0M%M|OpeMPd_C~sd=w7urmBAspEwacyqSddt$Q^-}sD%n?cvWdnwa5ismsv4Wk z+drgKMG8grH1Dh_id=wuY4gteIE+3>Wg9K3XB)HPWVf-8j1(YdUD5Goc9X)q zbIsrD;Bb<>^SO&eiAI#&QneE&cPsYtxQ@f@4)Qi4nSH6;=BA<`?_B3-An$BaoPA$p z+aIDoqGq3PW1#_>RmGK3irFc=58zA*-G8V{TH6oK^p)7 literal 0 HcmV?d00001 diff --git a/tabbycat/motions/locale/bg/LC_MESSAGES/django.mo b/tabbycat/motions/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6a55e6e1a80207d0522f00637165da3cb095d2ea GIT binary patch literal 514 zcmZWl-A=+V7{%z-F1_}mCSGXb$JkIDCA$z9goH%`(|AX^t3yzT{ zalB55wx+ZYQbVY+JcVwVDTo9{*5m=Ebd^`d&?lN=7V!|DmHDL3=hh0)UVUE2jC zIq#t4l}JUk{}>Ix+t*dPFH}On6OraT!^n$sZB1Ay34?)rK?kn<%fYCRQL}Y(=iDANZWpfhI(Q!B%q(H2bVZpc?5)@KQfT9+ lvYAK-qc-LCxHk`j+3bE8%=X4u{F$_oZZ}(2?HeJ)n!Nx3 literal 0 HcmV?d00001 diff --git a/tabbycat/motions/locale/ca/LC_MESSAGES/django.mo b/tabbycat/motions/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..01d53ab263969d635537579aea90c4fdaa1b0d9d GIT binary patch literal 1953 zcmZ{k&u<(x6vqve0t>XX{Qe=;jRa{?Cz~H7EgMBB*=*WKS(0{_P!6c_&N#cSy!OQQ zWE&*Jy+=fmI3U4^9Fe%7DhH&Mdg={?IG|n-fp zy2;R9Lw^JP9{QW;dyim1TYr?XC%{YKGvG(yE8r$r0zWHw10=bdAnE!Vd>#C;SpNki z`QO3Q;9uZ-;IYRTI|W_>kAk0oPlGo=lK&Ds41Noe{@r5#d+;fI?}3klw?UG-1CpMf z!9(C5AnExVyp5Rt0ZINAh8Mw~z$4(VAf5jcd=R|k zU>mG~pM!6Kzkw&fe?iiJ0?J751c)Ve5yU@R!|*KlAxLpc5T@By!5;V$zCQ)Y?iV2b z*;g3oiYPXuGH(?33+N<&937#u=g^1kWlYG2Cx;8*^TnKO(!G&y4>qz#wy9ApEQXMbv$&G=iPx8Yy~O0o^Q)wWpdx%S}F~>u$HFqB{$mWSQlcO$U>1U z^qk>xqCIhjk1Yy=KR?Er9mr%_7XrimCfUAdGcS41W;)?MIHB5|APpCgZjGL|E|HEa z!+RYScM46O3nzIpNQ+F^hLSx#5_BS4BFH={rYILa&qWdM0G_2zZb~OjEIr$wGG{ZB z3`Wnq+{#FRo2=WCjs9S0bsi^MT zDv1`ewvU>&!b|IG(Pg={Mx0_z*RnFkXvb9S*Gu z)6PU&MorvQg;zxoTA2Oi3XjFrTBB57sn-rXnVOg^Rjol@p=~FHCGx+Fx1`J*k2}J7 z8RkD|E=T7N_nc1`FrrsGjI1HEK8d+Xe8bOp3xh=I#%fn2UiyJL# z8w)MV(v(-LSL?M#W8p%rQBJNQd3GYT4`|9wzdJKqVv9mu7bq2ah>nXCuS@IvhJ9XR zSnS$Z^?zVRm7yfXpdhvdPsZtuxvt11>JYRhFSw549Z{5>K;fl$$$|?!DIdg8V^yRa zuS}&Js!)OC!2J>nItUaX>Mu7?3kv&CFi@w5n)d5&UH88UxWzHHI^5&2?WURz6*an0 zn5YU*9wtuqzY|Ug9xNP{8qOYQ8AlPK-cX)fS$~&H`sF~X@U8RtAm9y|LFnO$83c)+ zjl4Qp^3V(xsU}b&2W8sdHL)5NYW^Wmq$U}Trhls|orQ9aqV4Y$B1OSEBUPLI2XG|} A8~^|S literal 0 HcmV?d00001 diff --git a/tabbycat/motions/locale/cs/LC_MESSAGES/django.mo b/tabbycat/motions/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9aec4972d833ea35ec08713aa34cb75a2a12fd74 GIT binary patch literal 674 zcmZXR&5qMB5XTKHAo<9dgHNmF;LS%%DJfY5X^Sc~qS^+8xUAe{$fio|$aeSZ2|!%n zuoB|Lop*v)Vcd3U1tb0Zk0&!8d*;`Jy=#JY7kP;Ek^4xEIQxjW{U_ue@^!QShDwni z$nRT({6yVDKHpyJmyKSdy8Q2`7)DT5b_Z7%@66REsj`)lhAdXP5kst6YAF^VEtzOF zhurc}!QX;57#%SyX0yv&Sb7YN(w3*DtP1{eSsI?Hh|$Swehg=o3+8=cA!4B)wzwbi zAY^_g3cGYHjOCdY($vB#jY(r6%cUrRXCM|4ORgY4{p*ZaZcdW-G##ab?LC4+pC(FL zyeH2t8?0mD!g@_DD%oTCsn7;&{3aXn?l#WV`~aE{WUh)zmJ#dDDoZEzQj3}om0p;L z$!4`Ral6OXpYef=%%Arf)mV`tKhf z^)ac_eiA(1NxbQUd-9HZSk?GGuYfbCRpZ@^z*|qwc(uw!4IW5uoSdYC>GZ{`!PG0} c*j07dsDDmcm44dlP?EtF5W8L6;O9X803i~&v;Y7A literal 0 HcmV?d00001 diff --git a/tabbycat/motions/locale/it/LC_MESSAGES/django.mo b/tabbycat/motions/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8739118f6da6636c618f88466b2fc8e81615e4f5 GIT binary patch literal 8447 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 literal 0 HcmV?d00001 diff --git a/tabbycat/motions/locale/kk/LC_MESSAGES/django.mo b/tabbycat/motions/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bc1c39f69f8d2970597ac9a5d48115f3a980cb5c GIT binary patch literal 590 zcmZXQ%}yIJ5Xapwsj@h6=HTAi!?4K)LU5D=4M`P|h=^<}#DzM$?y_WKuWT8J6GJu{yF-RjFLg7yMgLpG3C$PlUQGg8F@p-7C}J|o1S ze~q-B6S9JS2R)`2hR20fJ&Dn|iip#>QDQEYBV(gaW$0iK!6#{Kq7`ROOsD6eaP&ZC z+Bg{5IEmnW9$N@BXLP&|2l6bb9>cD1k~6>NH=x!4e~Z<&x!cMUH~5gKL<l)tb+4*G4>!Bf%k$I zbbjxG_kia?7xx1AF!(9x?5=<=&o$7+{uX=z^57_A&w!tSPX8U~{Pqj}3cCD%fC3~W znFrqkUECi)Xa94--$49XhU01Q&w@u_?Czfho!|2~P)0r{AYYH-L>l%OwzIh(+r@VM zIbXM2jc&OaJc9jz6R^-u-nVWPHfLUkgxB26#m16oP=4m+t~ zrn*8|*3edJW!ULnPaEl;*=D2@+tGobZJm&f1a)(xSrX;2JWDf6T;XSCSPQ!CG>!{{ z1AQx!hED0!2-?wU9FVaImtkauA`a{JwErY_kqUl^PE|k=H>9*h@$gAREVvOtnFXTF ztspCSmrWcC7?%4@&Z3+{LSbN-)oG%5-g`6A=S0VP>w&i=5`*4-vb^0Mbhs^@5j~8- zYnV_5-clMGucdt|HBWnIL|-~%Zw0mZRIAqNUbXJkYBX2#>-EwGH`Z$ zt1!iD@meU{r!6V0E5V3=G(Pp^*{#=0jrGRr?PBK2)zY$7m>U8PdPru)JGO!sDb)gX zBAysw7vE^DdB<!Rc~O-w`QK{Yw2+3-37;IyP*EGcmLCYj!vcATaD_$vys(N&*jmZQ|U&#PB2 zVaGQmnQZty#pBE96J>pa>uxssNYdLW;^I3fvK;CF*BZ5a4P!OFJb-xX21o8&H?q-g lhdSe%(6murnYkt}Np`4@JET0&;k%-P|I$qKA!f8I+23}0^@{)i literal 0 HcmV?d00001 diff --git a/tabbycat/notifications/locale/bg/LC_MESSAGES/django.mo b/tabbycat/notifications/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1318d508b323adeaf9424f0d341fb7827fcdf618 GIT binary patch literal 554 zcmYjOO-}+b5XI!i_~c`=`V z#=-|<%#8Igbg4|BwMrdK4QIjV5yrTdc`4zu4ida(i=EsveN}Fc=V1 IuhfFVF9j2-2LJ#7 literal 0 HcmV?d00001 diff --git a/tabbycat/notifications/locale/ca/LC_MESSAGES/django.mo b/tabbycat/notifications/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f06649f882c05b6559a5283ac3e780a749fe0178 GIT binary patch literal 666 zcmYk4&2AGh5P%JoAFU7v&K%4Q4$f|p(gued+H?~IHEPrZ!~rRCcBfmXj_umsLJx4| zf;hqJ@d!KvV?vvZ^l9vw@r-Be-%odb5tJR|8S)0Xk9K#N1KPM94w8tV>ylV4NpY3*rLeB8X6XGI3@JMPQ?n zy+^Y&n$sW_i))NePQe-%*w|OHWQTR-+01a7OitJ-T*(;Bjzj=XTUo2kvVE4dXqNHa zz2sQEyO&ZCgagK-(0EL$dbO% z0W_w)wpcR2=a5<@r0&w|olRUUe+G`_x-g~G6{nqr49P^*PAE1oZsj@E z_TSd`T3xzc_FicEyhocayU7PO1PyN8LgCCOOw%aL3LX9Rj{P6t*3>q>n^t2_TSo>` zVFPIiSD=hdZ^oT!6XaQZC>*R$l_`XR6m)vrpO5qD^kA4z({hR9GYxCD^4-4S5vT3F n-TmgPEoUsoM(BCn?j&UBYD-I?Z|hKjCnrvn@mJ&?e*^godI7=e literal 0 HcmV?d00001 diff --git a/tabbycat/notifications/locale/cs/LC_MESSAGES/django.mo b/tabbycat/notifications/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f8190729bc2a6ccdc2727ded3b6c464b7c0c1648 GIT binary patch literal 699 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 literal 0 HcmV?d00001 diff --git a/tabbycat/notifications/locale/kk/LC_MESSAGES/django.mo b/tabbycat/notifications/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0a76ee3e131539259b6560ed734b416f55020366 GIT binary patch literal 630 zcmYk3&2AGh5Xa4zge*>+IhY$9oJ}^RO&#R`X;MW^MAR$@aY>zBcjLyfSGKnwoGN;$M{4qzY!{ysv; zf`1O2JVxjRcnKc1R|d>iaC*#Y65qjV#wrac?Xm z*<31_O??b0o#s3hG!lHt$Pxd>7xRZ*Miz_d(N{bgjCz|FHEMO-HQK|AX>^rAM=vgY zkSQ*8o5XW&o$#GcQJ=Op=c?|f!qT3OO(J#5NNXlN9;@7PMf=7s9V0qhg{~8}$$Hs& zqsi+IX}oRYFZ57oVb>GH)?7fDT5Oh(=&mFBU%xHUHo5yrtC_a0^reCUf<&APWwPL2 z?LZqZPbKIMy1GD_m@5$o9SpnEQExJNf7qJ@$r-3;YMI%p_wa=Wj5K$5_8RZDl2tQ0 efXsfgg;DXl_*LE(cc}bc-jvtHUGcNLM*jd_dcZ6I literal 0 HcmV?d00001 diff --git a/tabbycat/notifications/locale/vi/LC_MESSAGES/django.mo b/tabbycat/notifications/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0659f2dec712d7194af99864133b6650d7f131ac GIT binary patch literal 679 zcmYk3!EO^V5QYsDgjR6rnS)=z*<@2n*pNe;CQ+mYq9#NfkRoSyy6be;UTkk57moDC zjRVJs8;?+qc@Lyqc?!maHnH?+?D@wt-(-9_vcReqK3TuWxR6a6rCb}Zt+(SYYwY4&2bZ8(M@A|ZG6`v8CagEi zO3gFYRXR5zmBqiKY1Nu^yKPmQ-aFO<33}Upq}4~fUx`$XLVJ5+|A)6Xv7L7NO!t_* zD_xOc=Y9+e$W-Cqj@p;Xic9xNI8@_jD&iUVApP_9bkG@%PI{e@AJ1`gs#2)Ee0TqM z7Sj6h(Tm#iJ<%0oeNE`B#BJOWeIun~;*AhEi|CH$3+^l3mZMt3w F@)y}c%~AjW literal 0 HcmV?d00001 diff --git a/tabbycat/options/locale/bg/LC_MESSAGES/django.mo b/tabbycat/options/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0feaab6a513b28cc8312e91d25282b22784f60f8 GIT binary patch literal 548 zcmYjOO-}+b5Y^~ukDfi$#DgXdyPznPaFEZCKqP?18!5ZvT2tDlEq?qE|DHdKD56IACbCXvQL~A$GcTA17-aB(&P$^?3u3YO zNJWSyXpIXn^0~~QwaPur3}?~!4kq|2i(=@AfSgs5$|WQfNUAJJc(oo4g%2=uLVG2G zah%y_sid8Ulqj9AM2;{+vE;0^Qn_$a=ncWyBA>VV(P%L0ZkH;TlBjKTKuwK5EDa6# z9%8G6)D4zC3+FL3?`J)zZR?5!p3p&8rzVp+=d8AnAsVZd6AF69Ej?%2{-(ZJX|VOR zd8XM(la6vn9IVS7I6PN%p1?ljI`$U0N9W~bBU|2mvqUSHjmt2<;d1_s2`uaao* E2hc*Ni~s-t literal 0 HcmV?d00001 diff --git a/tabbycat/options/locale/ca/LC_MESSAGES/django.mo b/tabbycat/options/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..64cbaed26c4769dc4e1119a930ba3976c7acfbd9 GIT binary patch literal 671 zcmYk4!EO^V5QY~hLR|?CoH>{qJvh5b3Jnf9z;;tb>WZiv5C^1a;&ryJ9NXAVpr=nm2>blV(JX7p0lYX?CZ9TlcAJ}Lv~O6uB2Q)ey& z4|Gz|x59Z;840jhTyY5TnXtwMTKHO4^wqldbY>Wdr?2UmxRlLhdJI7@(o1`NnjX=# zhg;Sk#HZi`ojK56K`@RHdoGo<^T1Kk^%`nHX98A?WDr1szBy)u!#pqJVp8PWU+Q+! z7)uF4W7sQ;DTDYF601P!A>rrXya=N=voRfP?=|U{!qHrF(^SjIU?D?1RoD(i$HuKZ zBigpEAN7W0vmHIr4mT?lvW-XoH*lwGTkX2krly@w z#!_JcNhL0YGB&wxcVcY&I*BqIlt_e5PP2KDm*vZoyiBSKY@F#>vlHp&^^O_oKRZ0? jKHU+UG<1T>^TRaW4g#0If8ikTb`UZJ-pi%r&>sH-&y2;p literal 0 HcmV?d00001 diff --git a/tabbycat/options/locale/cs/LC_MESSAGES/django.mo b/tabbycat/options/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c1c99e5c7eda591ad751bdfe068b55f1203f39b9 GIT binary patch literal 608 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 literal 0 HcmV?d00001 diff --git a/tabbycat/options/locale/kk/LC_MESSAGES/django.mo b/tabbycat/options/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d6ea04ae5631ca95341379b1f493d5b2eaef2cd2 GIT binary patch literal 545 zcmYjOO;0K@6xHZzmabjY#DykahGG1`5*CVJh>}MHjd4TD%yp=gwrPuB|Kt6=xAkv$ z=b^w&PTJdZdvDL_zn$&B8x)&_UBW(Li*Q6JqfYoD@|@PPW*L2FUN8&L&EWx^mqv3I z#CZIXi4fhPH7-EU7cz&-dEsGbIE(s!;0|A9SqxVqAZN8|Ern_d$q7qRo}|&O@BxNS zXs<*tjx#%vO4?D#h|;MDbkNqB$)zqhtB+-f`fBckf{t-B&zZLWQ{SvL z*kao}&}^^ClEX&y2-m35Efi$VyiuDD0+TBqgbU2&G49-k#AYh*bFy2P9x HSEG$@yF;dc literal 0 HcmV?d00001 diff --git a/tabbycat/options/locale/vi/LC_MESSAGES/django.mo b/tabbycat/options/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c9c91cb016465dd0d9923c986cb795c528856aa1 GIT binary patch literal 665 zcmYk3&2AGh5XTJ^0V}w0=HM4_cJt9v9CCm(sUo@%H6iK&DROp)joXdw+D@PxIB=ym z!~-DSA{=-Vq)0pn8J7dZ;xlje;)6ACulp!6XZE^7kP&SGsu199Jz;lLLMMr zkiWMGxkUdEIloQFBlMrqhxigb%H$3batFgLLb?F?L}X_q)n01l$iNGgOI0}1xB3(^ z&w4ocwPokqI9igVENr)D<#kFXx40L(OT_f5VPpA;V#IAUtqdOKNqN)LCtp zR_na67aa-b+0Y8*O5wHT)J$b5&DdussbVe)U_%fyPDc{F5;Jgcqj0*ALfXhh4V6ITtE;50-UQrbEM=?oXtT`sLh; zl6AG6IZl!I?jkwm0FT`hkqI$izxCdn(gTK-m46&QXcCm0x1mOoTM{sEwp$k6}* literal 0 HcmV?d00001 diff --git a/tabbycat/participants/locale/bg/LC_MESSAGES/django.mo b/tabbycat/participants/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cdb599dce370153e3db9dc27b1ba6f82a2a12206 GIT binary patch literal 553 zcmYjO%T6OP5Cp+#j+{Aor9FT|XC?z#5=S|Zry>z;L;~7dZ{O{!W?*YXj;gs-`a74HuRM8}S5ZR)$s@cZW+h>#!#sxf}56T+O zqF659rHIKLI_o1$La7SquFC*(%ULr04R`pWs$%Gih@9nFehFC)S%YO6Z?uwI5hBdJ zFhPrGJ!kGoY2_AC5@pJ@C=uo;R-AR$x)fdsvn4oNmW%EvnT#ic-BR^hmh`NNXsGeK zqoEPsV(PR|rp@G&@Bw4zem;ceuC7|(5j_lyw1qMyXU(OG$yBes&@i-q6*x2Qe;PV@ zn{BS0GsAv#SpB@6{DBb~^cxY<+gEB+lXgW!Z=IbmW*wUt6+iYC47EhdB6>}E8WrNuM(XKT*xwcCDTpR>zfSJ(B%9$C$T LF)^*HJURFTP)4bl literal 0 HcmV?d00001 diff --git a/tabbycat/participants/locale/ca/LC_MESSAGES/django.mo b/tabbycat/participants/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0c1e47717d813e6a576d3751d53d6cbc32df42f7 GIT binary patch literal 3442 zcma);O^g&p6vs=%ukjndMX^Aaok4qMcL0G|mbmOL>l#+p-9_<)HQhBcz4TNyRn-fa z7!SG!6HlO?jL{p!cp@>za4@c3JSkU=BCi@GbBT@FQ>w z_$hb~_#M~=e*|fs*_#-<6I=x!0ndRCfuDgi{@aX~K@4G6GW%EXVc36w_ko3*8M_7C z0+PKQ90F_Lt>A0mZD0uEAG7!=fUjrvD!2#syCC`f27C(qA>*Im?XWk)35^>DX}?vF z-cNwEzPXGG;N7ra$?PUb`;WlipzRyr66_OL)CBkySOYg;a?*1gr1_r%9|VtNb_0AG zb^>zn6Yx#&Yw#d=5Q`x{t02Yk1Mpt(BADu#@iK@|vMZVW3-~zf-$9DQUFb}D6~X(# zDoFFqfLJ;UK+-h=X`Km3`+Yn6{vNm!_J<&*WZ#1v{0SsKe}RycZAS2Ef7?J>&pwd) zk7xF5#yODsy#ylUtd+f2Amn75(a1l=p5jKapgejKjUMtzc}a87vk8s%0ol?#0rF=% z{vr)9b^1^|ifEK?^pO7&+AtbN+ltnGXzfp+k#>~#JJ3j#Z*gl2ywvv}S&R81bLyxUOG zXx%Q^yl0sW6`d4#MKcDnE*uRJgR>76Z5YVDVVuVF#tvsgB~5aDch7J(QP+v%Lq#Rp zn3GNP_EqaQ?4ZS_qp%s)Bgq@u@Vb%W1cw;1sZA)+_mGr9UHB*Xf^>;dmOYP6DDAjS z>g~`u8SqB83(cUFv`7(@2v}6;zF%z{f1>PVwY@Q7#I3s zER?fsUWWh|4TlXm@|p%+vIXgD1C1a}9-0MdlL&(rW2lY({d#xbSqzhQf887?BJ!4c zQU+lzX-eIZ`4k9LI?%EuWDutmsHK16!xHkjt!WoUTS^y_t}op_Z$W!C?D!e!cwI`x zjf|wQGAOg7N;Dc_6e1Y{_Nq>}FfxsN9#C3PZ?1CMDbQ&jnwN`Agn>@^XeeBVC!X$< zr6-MtzE&Hrp8bM_J?$CohAEQV%9DvyK9-TR>(VefF3cGbDv2|ajy?Adn>Tt{`p%mT zyqBf16h7`my?zEd7Zzl!jq~PgGYq_gNz-~uy2cChN4y2O5>jVx3Olax>PU5`H?qeY zsq*S*ZTCpwu&~ZsGD6viibajbEvOS8cRoI;W+Ix>BlT;1QaBL_mA|eb!pEl<3v;t` z)4e5)mPZPcS~;Yhw{#|kOD9jeN*rN3V;p)IE8Y0fr9NuNGg%`MIoS2zjtOUzY zPnToeH(egWsT$w;?5;hdyZb(pFK-rK_U)<`P-y!ys$}`v1)CS2*o2BsXp|QPzMMGt zb377xuj^HBY2Dh#SsG&$bmGx4vM`MCvTufUg}jWi%BQI8Q@8vsu!-+W8J@<;=vA+4 zt`5}lMU6__D;O^%u89LZW0KTuYT{%M+HfgR$&r%|Ze!FHR8u5kL`#UI9VjzXaz#gp zAFf@buSVj!6H(YkE(#xKfJz){1D9$A=YRco3`(cxiNfgrRqIbCBC_O@;{;>oX2=7r z{&8x$1*q`G{pG3;*e@C225w9!% z3040<+SpM31;ZW3c!Lz^+yO>5aXoi*TXz!(+y$r^*`15gkRU*XVe_47GdsNuP@-`M z7+GRR(oVL^UhmEaM6gY<&C<2TrYUQYHHQVRgHGhLWoG(7a9<05+v%F}9W<*E$J^MV>~LSM2J!)qdSk i_S=vqW@_!rwltbHgiB!U(%N|(Y{Al#$gZCKoc#^L$*~y# literal 0 HcmV?d00001 diff --git a/tabbycat/participants/locale/cs/LC_MESSAGES/django.mo b/tabbycat/participants/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ecbc91511367ecfadf8c89fbc0321d4fedb06daa GIT binary patch literal 1021 zcmZ{izi$&U6vqve0tZ5Z5iyvhDua7TnnHW+fl8WIks49j@Iwr(+&hz8bg@rorzI5< z3lkD!H~s^}$^;8#VP{0JvoNvqeM#DcfhXA?KfkY^pMU(gI&sKgm(Z@Gy+FHy_8pCk zpJMD9cmpKO5_k@*foH)7;3W7Mya;ZCq-%qu+XpAWmmuk1fgbo8oIK6gA$S@7+cSgt zcOdCL4EYhH{GW&MuS0$t@+V07e}S~_H%R;b0g;*keY=33bYzr|Y9u`w)lEk0P*T4> z^3PMZ9Jjl15=m$BVBE3)daQ0-VsyY7N_Om^511S+9v@qlsoWZEnS;9DVQ9L!mK~)X z+sI8@MNZUW@d!f7%bnca?V${BQ)MQ1qHdc>EbeuiRy0h&y^Z@~Q|%=r7Aw-JfR_rT zSy3p7!W=IYg1H56U0Np^xzsl8ABShHBu%m%7a^pZUD;HE$`5$uKt-*S$$&?8r}EUR z*Xq?#LB*MZS25b5VA1Gh*wCrx&d*Yr=tUm2WNwuUA2wFS{76TeKU2A=>d3^2ZU%gQ zH*wxZ+RbGuR!!cq0oPgIwPAUY4~F5i4#VP2ewP<`z^C<{u*9dPxLyj&G+D&t?4tKX ztSPPX!P%nR>|=+S$aD~>3_LNs*|F;!#g6ZQjytwwHA!(cKURAxHJN|>4t^$cmqbY> zwX=R|BAF^*X@9-4Q?G7qEw5F#{J4#4H8YtROLy|NE2#Na`F3$`EJ%Ba8X^njlE*g9 sLCeHn-Wb%7 literal 0 HcmV?d00001 diff --git a/tabbycat/participants/locale/it/LC_MESSAGES/django.mo b/tabbycat/participants/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f54133a321feb2cfebd9cdcc4c5981ae845ff341 GIT binary patch literal 829 zcmYjP%We}f6g8#11_?yhAQ@I5;m#y&piGqoq-hnY5mg%y3#7=Ixt%(i*i+k6X#ay9 z9|RH~z={oP#0Ck86~{^2#L}5F_u>2U{jswAiQ(J??gQ_E+rVcaoG-u<@D&L9Z$Jcm zKbL=kmx15FUEt5TynKbRU%)LO-2aQu4e&qk9q`iCS-gATaQ^{#1^fsc{90gKou2FX zLY(S@BKTheLe1fX`0OcXG9TBu%A_}zjie*)GGmD;?Y#1}S4J}}C&U~b*Q7Jzx}J>4 zGEZ{C_N*CG=0z_TZ^=41r`*fY=oImyeX5N0qVEcoi&u5w#K5FH+Iubb=|lx*u_ZmF zyqPrDMA8&VizkgVNupipyck%iT^Z_1d3B^pRSkUxlP+pmkQg9;%6ndxO6p5>%9S7X z22sD)@6JnVtR_*%XipkpPb;MK^wGyvDV5&j*^#u4eEZE{TWrkzLi$6pqN_8LD_x{~ zW2AhvSJqaRV%yk>OS!J5qH8xd`Rup-So4Q%-gvSZy%Rg6$3>H>0pEg$m0;tg121qELp1ondOaEN6I9 ZV%lI^uq0#+pDoRqLM_Z4*D|+~{RjIH;-CNk literal 0 HcmV?d00001 diff --git a/tabbycat/participants/locale/kk/LC_MESSAGES/django.mo b/tabbycat/participants/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5ce7cef68716b35362092e304d9f23030024499d GIT binary patch literal 794 zcmYjOJ&zJW7#{V!#8n#$6BCQE(_&ay&ihzGp&WN12az0Tj13ufM;KUUHnX#*7z@P4 zgj$>X174+t7z@v9O>A~CRwn)e6aRwm0(bBx&pz|c^UnLVf3B^(MPRFdn}9OlGTN{V7wVC>-f>(X#PolWU{u zg^GG)N2*?6W8qKTAaCXH?3lkT@U1+~+{qb_$u1L2%_eY^d6@q9Hhrozceqc54opuv)MF+SX1UO)6l=A6yTzL6c3^oj z<;$gXXMb?p#@Y3?jm+I8F{wpLplq#K28xG2kK#czj^D)ZQ1m(a7{7`~@gN>W$2cBN nK7jTq8l%Y}D6ir6E4WF_Fdj_~;dS&aIspQ05FJNf;sN>(RtWlB literal 0 HcmV?d00001 diff --git a/tabbycat/participants/locale/vi/LC_MESSAGES/django.mo b/tabbycat/participants/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fe466adeb71ecd7aafe623dc47facc2579e9d37b GIT binary patch literal 3116 zcmbW2TWB0r7{^a-y{(sOYrS7iE3q5s?B>$gI!Ov?n#9nih9rg-#4=V=NE$-GDE&-@wD*6|f(iT+i4cZ~^QEe+0Y0CpIuf zOAdo~g3o~ug0tZ5;LG5n;7RZS@M6;cIrtc!zXopxuO$8JZe;9!Jl_d!2DgJW-V5FW z4uZFW2fz$C4dTNbeBA_=z)nzsyTH?6ANUn`8@L6NXx&zj^zHzuzZb+5HUdHl8w2kG zC%_-zjSEgvKSWUei{SI%H{dYX2T=pyaghA@6ublcEa8_R`SBgN75o__-#0@H^>=`e zgZ&`sa==ZX50W3p!TZ3sK+=0D8UF;N_k00ToCt(e_7h0H{R)x~zk_?g9xV1j1JeBO z6aE6Cr0fq6AGRKYcY_;2inkS{@hk{C;@I>|4WVPLbkA{7{i#uY)F>V`syEVR58!zGx5o@<|78PL`^~rAo~Vw63IP=KePF>Z`76 zwJD3{``of4gX@%Kgaf6NX;Bm$Lt31Wr=z!JLs?vtH?5(R8f&*FO9ch_cNcbWHc-%2 z!`rgTsURjBST#WhcKRV)`^1JkS&{`$@EINOLLi)3jv|SY4y3@`QN^dqc>RQ~sv^&} zWdpit58E*k8fmIVYGt!AQ7MRk>zO#gR{6Bzt_}nn(~WuKPGF=feMgy)jcW;TXU1Tu zp|`|N2{s|Hs2D41<})F}s)t3BJ|v2ubz`$BxW*~%#%&mPK>HLbSqz+GaiBPUES{I0 zP;EDSUKm~wLh(R&!U;t&7q6(qQnO+E)yw9@Kd%b}cW^1qk(}^686q`UY63?pA&_Pm z%90XAZge`?9BaCz16F_z9>$i%dyh+3s|}Z5|A@(!-7GwY-Na~b#%Y>3L7PjwkX$Md3$={}DbH z)lT5HelC^aUrt#3#Di$*9IZ$#cca>S4vx;`1=sKhXYF)Ud#QEQj--;aS^9|$)<5KC z7bF%&cPSsd) z!NFa*I!`^7`X$Bo%V_Ci#Z?JwPT1^VY2|!Wdt2hb!4X-EY8Tk@Yq0Eig@;a+SEAY* z7>gZYPe-+rJX~2!LN^cI{fKDz3svZa*pzFrkTt5Hk(4YiM71}ijaLy9*lcf{F^w*r ztwOfubFHl1^2&J!W2ED2zm^8MvFmWxWP*@ZqVI*b2; z`L*2!-4|SLuuJ@w9=}|F7gooS8ue?qwss#;{cQ*p1pTI>$|`q!=WFs5tZZ Mg3n10yNrYUPjs)qGXMYp literal 0 HcmV?d00001 diff --git a/tabbycat/printing/locale/bg/LC_MESSAGES/django.mo b/tabbycat/printing/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..47b54a1ea1ebb69a3ac4f9d4e4ce29c5168899e7 GIT binary patch literal 549 zcmYjO+fD*85XI=zKKkrKO?=SAVV8>vB|OMABoc|B@r{(-aVaTn(=DhU;_vwb{)Dq4 zmq||A$(hc~IsHC8`6^Hx5zYt~gk!=rA&(m2hsZjedCe|H&MYwYFi7A9T_%m@%!}FV zGZsF0LTj9dVV24STB|gJiQz05J;D>NWnK&&;gPd)RIWf&hUkVxB_2h=gUCEgoY0vP z-Z;+eTq`HNn`=6F(vyk=gbA)u85?d5 z53Q5h)1IL+u}~PI4jus%cQ9H}#2x~SC?g~{D<4SzO&`@0R2+QS-f|y*QcOim7?M7ugB#b!B#%OrVKk9>6vRq6?Dyl{VThq9V!G8>msV z{Uskl1OxUVEV+V3F-yvES?r(G?PST&*@%|P-gs&m@mEZ}0d4zStspcQ2OsAnakkHE z+keL(3aebDZ7uoPQpaR!HUW$nxv*{|w|;wU2E9JteGXn({&K*(ulvatae)@YZUhzF zPb$+c(Ap-c0X!6)4`RIHZ(w5;WZlP)BAO&K4=^1ovCpO45nz)$#78? yv)Q|gVwP4{v^m%D?x57e?>m?L_)UJ=Jvk8DK4MJD+dNNL>6HF`$BG{t?b$!vPO>`y literal 0 HcmV?d00001 diff --git a/tabbycat/printing/locale/cs/LC_MESSAGES/django.mo b/tabbycat/printing/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4a586ece7cfb886489974b7167ce531363714d50 GIT binary patch literal 634 zcmYk4!BX2W5Qbf#J^0AE2b~ytP;3X&Ql+NTnuN(rJk1cd)9EEuCI-3%HVgGd<%D80p9TBO3Q{ouj4Ys%yB@mJzd*jWly7P*U}Z*Fb%J zM)F$_%a zKVa!l30+B5Gjg(!E}S+i%Nsh`-M{@{W8aF=6CToo0P`Y%@K3EiTQuRZ!S*{yMIwC5T4cDH^R$p(9iD!771o9Ou- zB4ed;*h183!5fG`MU#A93}>@1=fhc4UE)Y}&*-gGFZX(e=Y5}kNRGEeUx$uS`Ix35 NzJpr`%7^a7L(XK-eJM5x&=g;PKZ#rv!56d2}o-MKK8m&b(sg zA<5wpT`7&`%!~2(BNINnM{Asiep$#IE~iBaso^Xf+`>K1WEBio!XsymxN!h+1L8v# z*LfU=H=^{AI-yG?ym6e_7pbHj`HU!COhtiE_2(?{LP??jpE;9$l%!!l>35eS)oXFs zG1{Z1vLBXOdVKehRYK|(%U*;l(YGJc9-J)Ws`k(5psO>JOI>hwGL}9ZsHqbQdd5vk z&a|DoWxLU0i)(vVvz<1p@3q1wxJHd`At7_-jmp$AGa;h0@ZfiWD_dJ~e^M(=D=9sx zNI;b143)9b-?}5~r1mstq)a9hMyR8k&ZyrV4lk~|!zh2H&6%1tE2aLw?~1d7qvmn_ SaD}Y;KtjxEvl#~S@BRU;hO0#Y literal 0 HcmV?d00001 diff --git a/tabbycat/printing/locale/kk/LC_MESSAGES/django.mo b/tabbycat/printing/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bd002b5b75f59cfcb064647582ca4da39946a45a GIT binary patch literal 546 zcmYjOO-}+b5Y^~ukDfi$#DgXd%d)6g!a?~kM2SSu7%!ykj!UJqO}F^1{Ta@R z0+YP7(>I;zd;Qwk{@kG0B8>H<4$w7B$Q0JM)Z*hi(e@=yGW^XI_lQ z?}_liEn4F|^zuxma52wv7#hxk{tevXi!6$vB|LIgDOX}B#}FN}DCSWdT#MYp&?WPNb4{%^o|XPni>(g%GtcS1qOxLMAbw!dlKsMOhF z+c?l{ufd|jdhh_3sL?GHB+k52n^IzCL^Kx}{Q0+L+KT&ET4-9k(vgY;gektDGB*5o zJG4$}PwxzsNrb`>b$Hzz_1c5M`DJ?$rq5)YDOt1DYWaID&f=5mX>`0s7IUCW%vrS> GZ2SOe%%Hb9epr6mJ z$XQq0nd4NMRq9&RCS7k^Q8W0$4ncuk+fS_ihW(X9&roQuGj=z;(!@5}{WFWllv=tn zN9SP*3&^zz??)XPE0srsVXhOALkKE7YLDa2VDRp+GYHdDoSLo}T{`OF(;aYHf7N(h o-7AU3J*({~l=MKd#;gE1l*dv?~%4ib4iM*n-tXap{nO95$3^RB{=cUn{1u>t0 zq#{K3XpIXn^0~~QQ{*0|hO=mV2lu#?Wii}{fSlEm+BqaONE$4u@+66Fg%2=wLVG2G zah%x~sid8Slqj7SB1f2_Sa8-UR4$wpdQEUP&u5)MG#ZY2o29CiB24hO_gF`en7TMV6yrNX%9J HBHH-@kF2Ra literal 0 HcmV?d00001 diff --git a/tabbycat/privateurls/locale/ca/LC_MESSAGES/django.mo b/tabbycat/privateurls/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6026a4ba6d4ebf63d88e125bffdb8baca3080dcd GIT binary patch literal 3332 zcmZ`*NpBoQ6t0l4O+pgF8a7oxcnS23?W~NGh{Un8npj>UkdUmJ?($68Jyo5m>Y14T zKqL@Ihyx@N93q4Sf&=2}LnO{QaN-x_0C$l1UUfS&9!$&aZ)$(Q-@NXbJw;y4w3%mo|13b8svA2Ljz-iz-@Co1-z{i1ifED0f;B&yAflmQ{ z1HK6S9r!fxFW_$A&RvW>58MZ&{fB@r0FMCQ0A2yo{s#Cm@Fs8{@H60U*!T^Q=Kb&} zV@tsMKy1wpKUUaN1wM)Pao{1~yTHT129VDC7>GaiCH_6Yes_Qt?OQl>FK`DIN5K8S zdEgl!t@{K>>%Ib#AKwDW-yh5IdqDEzK9Kx-01W;j3muYpUj?-$_fXzzs)9|FgLAdlfG|WIH|N>$Blkao&OQH=RlLQ;g^wdgxs8VL#r3c!`Jp z2O$d&X^Uo%@N&5gm%TYIq z{*GCbJSNK{rTL0AZ4eyV%U;nWwvb7&hWN0BywO&kpFd5T9GkTck>{;-%%Jm~wg84x-?qgO~>yiI~`iy1)f3!K=*{$#CJE zYHFF#9FWt7qqb=aso@5yYrya&#WqQ|A+76Gx)46Vcc>pO~m0Jyy9Y zoR1c*&@QDEuk);>Qk5`gW?4{Z1o=M}?vC5Ru z9{xv*>lu#p@}{q4sZe?ndl>t_qDvTg=jibYThfApUdS{NydzK{ZK+?hk@5d6*^s7|F37Q5h*pP^ zwzm{L|Fiaj%`@a3znuG~bZpTey=6*8rmx(u3WQUmUcmwZdIIlK-;>mEY7p!b?d(%X@wfK8wVWTa~mqaP~I8gtuS&`6% zT6(l7@>I~&qOb~ZUxaD%Dk$fnTv~%dPnVI1VIaF&2qhU7H*%t%XB)Sh3i3f?<96?A z@E?g%H;Br%*TZ{;!v^FGMO>sux zdI057`sia314Lw@m)wV@V!nPzKsCODzN2>`4>fG(Axk2 literal 0 HcmV?d00001 diff --git a/tabbycat/privateurls/locale/cs/LC_MESSAGES/django.mo b/tabbycat/privateurls/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a7404713c75fbf42b7a8c08eeb43999080dcd716 GIT binary patch literal 653 zcmYk4&5qMB5P-wa3Mt~mnS)QO<=`giW|ze!i_1N){s>SWAWxALIYNd=BOj5+2uB_v8acWj1RK;L z@)g%j{5RD1Q17J4ho&I7DpqwN1^33fpbHD`!3AS$RvHA$>SjwdIQTja@rNboFoRvb00C%j`sFS@Mj$ zA~9j)L|h0%g1=rdy_Em} literal 0 HcmV?d00001 diff --git a/tabbycat/privateurls/locale/it/LC_MESSAGES/django.mo b/tabbycat/privateurls/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1e5c35f9931ce64de12cd7c57e93cc37e8572faa GIT binary patch literal 5577 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 ToXO;TK+&h>XvHF@!+QS%z#`@d literal 0 HcmV?d00001 diff --git a/tabbycat/privateurls/locale/kk/LC_MESSAGES/django.mo b/tabbycat/privateurls/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4c266d402d326f7299aece34db373c2893a6c22d GIT binary patch literal 549 zcmYjOO>Y`85KWbw_Ska{u9QP6by$`qDKX-Z@DU+EML?pe7i4y)i-WN(+t8-}qkk`d zAb+B>p#esEvd3>c-8T|L}$g~6ZuC&y2bfqU135avt zqB1sqcRRLDZpqD!Q$AKE6AEM0@vuD~b*IzY`|dQ(pU68?vF51T{sTLlrPuYZ$<+~A Nj)FchH}&i2StDTDIb1+*SO#PttS5fF15j@ literal 0 HcmV?d00001 diff --git a/tabbycat/results/locale/bg/LC_MESSAGES/django.mo b/tabbycat/results/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6812942f08169ecfe1e7314e814014c46dc32ad0 GIT binary patch literal 548 zcmYjOO-}+b5XIE_#v`IXIZm}i8Zg7co?Pdh}KD?IrCz% z_)LTk?lCvk!`Njqg>I2Km>JH3$sOF|n=FgrMtI~buEiHniy?|xt-+&ua4VdLnHAb8 z;f>`if00V&bDt2UvqEGDGZahCx`oPwl|pX_&KB9cI}FC7aeup1RILR)qdjVB{F&2G zj~_nFm5{p4k{4ke`p&~_0L^V(xxh18=Ryrt`nlb>cQ# zT|1|m9d}rC)()Ovh#KumL}JZ5wW%g%Nkngz!M}w&zHPa+*izHZlYvwuAWZQMmC3`k z;h{xWDDOgL5}`0e9p3ily+F#F<@3u|2zs(Qdrj9ovb7WYu)n&Xl*i zs$Eq*n}rJki36OF$bnlfh~xlL#3e-Bh8yBaqzFag0tg{a{7Cr|-|McK-NfdS($;)k zRj*#X_q|uI_RR;6ydcmXMgIzV{t+RTfWQ4He$ZaJM~EZ9mw}%H{tEb6-~@OI_&Tr+ zd=GdGm_Qhxq8IU-!22;?2eQiNB7QsK&4>fwm$0tl_-#Q#J_Gzd@Il~Dfu8{W0*F8HN}PWc zcogH`19|;*AXJGz1Mw&R8u6b%KL6i9UVjhBb{@eG@4Fw!<74>w8|*p`Wchos$b3Ek zWIj&<=YUTFp8*blUkAPdWIq2G@eSZZ7{3W*KK~W*zY*Vx_%86PSZ9)0?l_R`I05AI z=YbFri$FeS8OXdyAoJpZ$ALctUW45~2Yw6Vw?Rq|xQd|i{vQJ$0lonI8t~OP|0f{x z@fYByf&T!03iu8Xs>IPxHg+5Xf->Gf7u3ZC(*xLe>FdBJ5s4WllkGsdB% zTmw0VUqokLrfnV{oJ$->Zl6adbk28fkD{MO=eRzAehQr%sHz*sN6^@lI63ERWwLos zPZNLJV%}piD2Wf6J2~fdrsn;;SXRYTeH&y>JJvze$O7|+B$hjn5Em)P0kIw$$UL`! zipmEX$+03yl~<0W_cqlssH`n6H8PFLLWXoyl`x>UepU1~H$+eSGMD?*b8=6t-4K}G zSQ8ugm2MY`pfank-kc5uF{jed#-gHYTkB+ZD2%j++)zP=O69yYGS^;ZeB8dR z9-A@Nrezl4jo;wY1!cLUDrjMwWJs-Sf>+d~7NW`D##L zE9{1+pu=PxL}y2-Y#`I!+CiM|C{qJa>Y=)wmqmhD1awi~K zN~WW@y;c|Cv>Z#F%R!E>G-zvl!$mF;X;|cgG(jWah=|jpL4DG9()gS$?@~F^xh`*p6ia4UAv2Rc-00F}i90OKY`Tj)y1BC5 z+PJc@a$wRz`%LSyH9;Au-7j%uP|t@BE~7R}lpRSCjJxa(w)ba>$VGw1+g!qSx!v*>9YCV&U;ai+oIS1uIXUJKqv06DBzMp(-p22r~Tt*4S%?`m)MV z`&7L75_ca1OnC&CKj9=KQa$-KYHvNEjCNER)Zj`wJ*&dFcz5cW8c@tC@^zHn>!`>Z z$bBbaUWuxe=eW6?{_AU8npf7uN?n?9QQ&^T)fu;@axgAdX%^d@ymqKO%V~jz52A0K zVdc5M!?D>zC046Ef1m4O`wpkYx{Lwv%Ir&;yzEIME$hlH+q}#rG&?PCSA0XMoV+;H zMiK^-7Y{0U_>Ro5SjQvWwTeGunRa*!LW0uIqyEccKnD3gdF@agzg@vAHMaRwIpJgq z5UUW3G-V4VHRjZ|m3SMJ8Ef#-Bq|44cP!UvXYsl)^-Y9p`@mUH73Tp;Ju3aC%~XXV zu7-%aq#Zf7PV*b_0gpAFsD}01)#R7h?n}qUAc<0TzSdV$;1o^;BaU(fJ!y)9bt+yHt+1iAh9&?j}49 z7pdEoE_v@5j$tFxdYWkmN4CXUh3AwF5jBxa7`ugd&2oOLemOb!W+Kz8bQhWUXdq{6 zR>Z9;;K|QmcQbD6!V%4|r})hX68|gg;7OFeka#!vQi`&gJ{z-PRR>cvBndpuX}q{a K>6`Zh`~C;hsHI5& literal 0 HcmV?d00001 diff --git a/tabbycat/results/locale/cs/LC_MESSAGES/django.mo b/tabbycat/results/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..df3576353ff66963176b42ff43f2d52a63bd68a9 GIT binary patch literal 789 zcmYjPv5pfl5cNR-vDYAK3RkD2a5kF@N7%5SBbS^aT||^DCqxrDyF;>JW3O!IAo&I; z`3!m}s17yDScY4R1a9C%DgJA9Qt0(Ipx~0P;sGC z+lf!JNs=bn&_w7G<2fG#3xUsk+FU|3S&Kf6^sxED>2|uUO+#L};xwf&ATa47!-59h z7&l9KA{sQBaHYWn&%!pVZ{lq6m!McnL^4jq*r)YTVw_$&S3G5Hsb<=zB3o^BP;1b9 z8SIN7@b1#bv_gHlFCGO|y0=Hg!=PqG55jzmaAK@FlJSE4 E2b5CQng9R* literal 0 HcmV?d00001 diff --git a/tabbycat/results/locale/it/LC_MESSAGES/django.mo b/tabbycat/results/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cdbc359b4e90edd66fd7a410efc1b15f9ba221fd GIT binary patch literal 1638 zcmZux%Wfn!6fIzQH7uBs*a5n;Krn)w+Eo_f{8~bnU zu-i_3-~hR zUv4#ie**@;e*nM4`3)|=0(=L~g8zHKSApxmH-S%p!G171{|X56>78H~VuclQ4hwD< ztA#IwpVkbssh@>%JHM!Nl?l%_I!?BuK_Thc=^^oue4!jwVk9Y`w2qC?%E_EO(}e5y z=-vB9l=6XV(_`l?o6(b9Cc~awAuP;1T`6CXFcUU%^Kmk}G&`WHg6Y!mm1{zUu$eIA z>a>KZm9Ey_;c}j^rJu1vREi0u%$KFGmn)gW7>;~x4HXh8 ziJ_O4q{xby`P7|9(PAu=7OBQp<`o;)jy@~oJR7gfsBw$%WfQ-DLL$$RrbC%pQ!2@! zjp$EEQS)dNjH=pJ?2snhF@?4u`KM7Tv<{65wK|7*QB%$g;CcBjC5MC}m%({-V);U5 zKJMr7r+5=6dgMi#PVk1UQ(3X~@sS&;JpQO2xp=@mYMp!>pUSZcm*ZXZtVi9o?!$Pk z8+W?2_NdocZygHfSw4wtQh$+F!-RSUMAV;p~>smT50xOjfbo29)m)F-Q zI*4fW|1tBJ4P|U{HCDN_nu9S)i=MAGGi5H*s4HI z;T6e*m)s2D75SPKk_9`x@~TZ|LXT&z7O4jpqOzbI{qq*9g~j^=F&tQrU3bE>wZokEe5 l>S+|pWNJ7X%`4$()I14(9ePn8M@9c6NI#9o|MASu?4O;RpAgs$;2ux|ZUH?Yw^zVzfB`$e z4ETEup?Bc#0O56n?t(uB57!r#*MhLHh)bK0PR(Q_U;(v8S-ZmiIX zV#g+vGmyPw9&6)B-%dqDo+MLCMw()8@RS_$6OkvA1E@=JrCh0!a+L(TIH=KJ&+9Sk z$jC5dW!{G3cqXKX$1Vg(O%pcdWW?E$;v@E!EoN7@6fYLzqnBR4+i!2aC@7V^mR61{ zsCpJdN5@Z{A4?`w1BWwaEO*UkqYkNW^78Jlxgl*8>PV<5#r27B-asaXNz&0~X(?9m zMQEFq1}=`x2MXVB;^1M!dqEDl;-;7&H2MvcDTR6oLaT_#|NU((ZKGXIn$NWLq$4B@ z;79y~OC9@{+x88&iFDSNI%JajT=~7$xZfTQ_Yd1cKbphdbSc(bm9Bo?0maq5+M{51 zOU&DlE+~&{bq}S#vUU1BTW9ClD*cjv%RXi+l>W>Q=?|Q}|NS{TPrqg#AY+xS(LaRs B(iH#z literal 0 HcmV?d00001 diff --git a/tabbycat/results/locale/vi/LC_MESSAGES/django.mo b/tabbycat/results/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b8c03f9a3073975778af7a7a719d56723465060f GIT binary patch literal 1275 zcmZvaJ#Q387{`a#ge8QC2v88kG)T74`1~5oS}uZpCKeo6wy{WM?d=YGWADx^GjnIV zNeYS-DUgvU5J(7FQ7R;gRK6mG{R#L0pp!_EE)rjW|8slT7b%Z4_uFTmxBonQ@6H{6 z%3$B%T*i5UbCI5p;0Lw|9tXF;Z^56zufQkZ8So`|5`5j`pWqkp+u+yW9!U9b!BgOS zkn;Zl&w>Afr@>=K%lBu&6Ywv99}v3?o`-(~B53|a@Dg|xr209Kbo>NTpR`8@o`wHQ zkB>pR<4chGyaB%h_d(M04x~PRgQWi>i1A&c_f$(pcli?M7!Ku;1vqp!GRW;3%_gI} zkS^K<%^^c;#(2wdc4ffJC?9lu;L3ngi5zr;Y*x7heyZ6 z@R%5#;3H$<_(X6!a$YRkNV|;YhrDR0Ockp>Mo6d4D3yZ5ha5NaI?AP!2a%As)auHe zpf+Et9;zA{8V+U*cBRpItH4w*H+=~0{QhsdB2I_}mlOr%wdZM?yzKtEm zK3|hA(^oR5GAOSkvL!Q9R6eh|V$088$xIw&vLbcm_RMOny0rAe&FWGmS;NxIP+|Hy z9elajkdJ*oer;r;FGyp=JR;Y}Cj-X!w>#}^McDnL$y=TFbM^m!%pX;!{j27_(P{t2 z>z&;lop!5!Z?Zd$&hG1iuXlF;^88^FF?LJA(OjpL&TjQb`kwF091W%6-lBtM2R^BK zrr7@W-VWc~dlhp{BQz`XkRIs<{9 literal 0 HcmV?d00001 diff --git a/tabbycat/standings/locale/bg/LC_MESSAGES/django.mo b/tabbycat/standings/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..37b9aad0eafcc59502e6aa8b1434963e7b16522f GIT binary patch literal 550 zcmYjOO-}+b5XIcV1=rWl?Yn3^e8qR{z1B`Jki(=>qkDOJaN)@6CL^T%0Jc@&R;XF*O&`t?& zENA(vR5G9WgeaY@M20X$vE;0^Qkk$)=qp=s|)Pbv}+rnp9B^6=mA z(0QSYJzc0wA{2(G!~6DZ*qu!7`rS#GF33Dn&dpx0?GJW1t6pE-#I-%L7z6`iZfj9c F`T-oes6qe$ literal 0 HcmV?d00001 diff --git a/tabbycat/standings/locale/ca/LC_MESSAGES/django.mo b/tabbycat/standings/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b5d3fcc6b7de9747958165a8e96e534444633fa7 GIT binary patch literal 2894 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 G*!Te$zo$X~ literal 0 HcmV?d00001 diff --git a/tabbycat/standings/locale/vi/LC_MESSAGES/django.mo b/tabbycat/standings/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c0114b2da96bf4973faef061dd5fd4c1b67232e9 GIT binary patch literal 1558 zcmaKr&ub(_6vta#U7b~Ma}Wd%?;@Lp?U~6hT|4ApvdI$Mafh8T>_Hf6x+~MQ(^J*k zRXxcZ#e<+1gDj#TY*;}eNK^!22JtXa5WIU68o`VIf{5Sho=N5qwxIgc)%EJV@Aq~0 zpK});I2e~OU%@n(mob0GwByAm9OotQGFS)a!HeJkd=`8UdYW7eK@oGVx_BPasj1z!Mv1Fe=nKwIZ8a1Q(jd>;G{wDm3_spTB_FZeQu zw0TV+AGYpvpq%p*W_}j5xvkC;=5$y;&PJLfTpDU})}w}DG7z$(ooz!b(u(-LAEg1; zlyIF!M$>MhdZa~U&m=09fu?z}OH2-~;t~}5CgkK#66Zl>r>2ZhQaiW%Jn0L*=hT&u zMmvp|vo23?b6VRf(}HU2+#!Xkp1)UMbyT+PF<<(h)N%@hA>OB;uCwu_Zex>u}e$$D5fNz z(b{>tRNJm?o~c?WS4$hp3P%{S)#dFd#AbOUO$Vo3U+zoZc1O- zufn72ZDC6FC{0-8ZmFcFJ(6+0)N2c?RNSsrS4(%@n_TjwknbmI59iCi>S1G}Shab?=-ik^Ntl}O?J^9q-hTN|y~W~1@u&CNz7xQDi> za;#=@oxZyp9xc7L{QAPm%%&~mZe!<-m1@aZ&xViiaqMTqpJNKM;UN|$2ifQ|L7~V- zA4oEID9(-Ze>p<5&W1lxHyr z8_QYtCY8))J|;@1xkwSFC>ESGbCn7!h29dJ&C^-47YzHu&Tgq{xe~OD_Nb}xDx;wu zKYf@fA$6U_Z^AnCji+fBYP-5(fmgK9(XmOSPC2X1r4L3bw?aYJ*oEUvXMd?{M0K{l zHqJFWZLsP^J$Qj0YP4$+u{9smrW~6E5v_Fw{}%4~w&ONp3r%}Zx>AvVFu^4%lZ6|@ zLvM1c#ey`tP?=aL3{i)J)@<0BOdfijNtnEoeWsk5y>8n-Y;$&Xdwoa#?=~n#L7$lW Inves1ZO6{b#&)t^uZ>f0cDuVtO5N6(y?6HR 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 literal 0 HcmV?d00001 diff --git a/tabbycat/tournaments/locale/cs/LC_MESSAGES/django.mo b/tabbycat/tournaments/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bcf177f59c131998e571312af9504ca4fee30dd0 GIT binary patch literal 788 zcmYjPv2qhJ5EYOBb5K!JsLF&wKKtT?aL&O5$If^r22XM@42?&Y*JpXo(v2h=l5e2p zU!b6*-~(vWQ&G@RP_XjZv3KUpleBNO((YbA+WJh;?jar{Qp5wqCxo{zh&za{2(S6J z+%GBo`7(yGh}bUSd5FQ zX-(-*X$hT(u>&%cM#L48tt)a#A*?(9>lf%;EY?x zQp1(axzi@5#aQOD=sSTfmCbktECoJ|Y4Zxi_~tOC!uFf*gKnqWT0f{(sRm8096p$( zmjxzt@X>`u&ZTNlG3LgCOWveycDUC01+CJU?yBcWM0a+mI!fyPu!e_wjo=+S1qG)3n=twVW~c}~MMtyT zv1Mg9%DMKfYT&=S5z>}9{w*BB9CBTRt3HJ5e%UbBg69x|3eTGTZtLRW__TEq4kuVu wT`Ba&Z8xnw!6zTopJH3qFYu{Y2R+aBqhK*LDO|yFWc%YKA#jXOOeyAPdgM{}XHppe*CV=pfJYGnpr@pagi;lN*lE-9uM|Rl- zM~CF#+*;Qj{svL6E7M~(`QW?O^es8Zc7|k!icZ;{)IBp`=P%nHiqd_@v>Xs~bW)H` ziR)s}CCl*mh*B?_J@J~XQ${D;%Wn4!twnp38|y{O^;J(iFZxb&Ov0nx9kEA46@tYk zCP;XtR9P0KiYQljX*DUYMBCDN(XmpyOnPGzo*$}A<@-K`OZN-eClT69c+<;FN&VlP zaOL-#ov77p)u%0$mr7C1U;!Fw&vKOX^v=h5CY4_2>7lfaeDzhQA=ajGq5J_^QP-&n zD@gcSSNUi+E3C{!!`OjKxX#a2SFNn`(Pwo*^G8))UR;mfh%M4&M$-(=J<)6A2G$}m9OqakG`k0|JxOt$}ja5Le{t52R{`_m3WDba-I*-9n4cvmhxq@Lt%baxkhI704D3fZ%g zHMJwFT&kw0H@P@7W0KlfIZ&x&HR%fU&T5%-P94BB&P7ZcoFFcbtl^_ee6K?2Kd#9c A>;M1& literal 0 HcmV?d00001 diff --git a/tabbycat/tournaments/locale/kk/LC_MESSAGES/django.mo b/tabbycat/tournaments/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3e49521de896772493643441975e954b110f0c11 GIT binary patch literal 628 zcmYk3&2AGh5Xa4zgsh%8b1*kJIGb$x=_m(ClPYSWM$Li{2ZFO}Hf|hyWqbQ|s^G|( zccF*!47)GD3-A)mCbY>&KiM;Xd&V>V^Wy1G1oi}Y32Xz;fB{h17ohSvfPobF`v@Tm z>vQ1qV}!P9*wLy6S1fLgnkg#NuwF@d^){~xyPp> zGuG3gOJzde<*B2QVFZs(=&3lD)nR(byX*+Z0(`FwKx2@m_j?)pWIS{-+c_V8jFU1d5y_O$Dn&CIOR zoHznPLIhN#3Lz1N3L%8lB2HeR9-Q{nGdGa-#sMMD91#DpH;x-R()hRYz2^J=yZ-(7 z(W?aO8SIy_zr}tY`_u#Y!TJb134RP72XBHy;2!uS_#5~H_$T-X_z(Cfc;pBnkAufR zXCDHe1}XRgSOQ(Wg`Dq$uFgh&{vhY);2)@Y9h`>$)1!pE2Hpinz`wv}!J&tG^-h7V z&YR#du#(%~%g+(`3hYq^spLf2%vwsN91mzFNOQijY*%Qc$I*=QM#1A zNyRaI?mlvF>ni5*P|m(-AZJOdOFXdNeCVxmZBWLimep!o0kef=9xH9Vim8jxJD1dr zS5-bOEM4@Lc}uupZ-!a!)A6zK32$t|8=s`53IFt&!UblmSJh0Kh*_n58aG5F;x!w< zCF=>RbFa!-)2FL~Tc?8IeUDFDVr_M?P?@jH9&}Y29V?U-WS6MC72{URuh?Q7F(IdD z&|undJN#D+MAVu3ZaHi&(?%3EJcZCkvFGw)A&@z-J_W^B=C?0frF&7j)+f4HA}CenT>== zvRHQwel4hNuqF+&^d?ytNZk7@ORote-u}K}RJfJuvoD$9nM}#Xv5p}{hkqtVFnr)1&dBfPlFo9>ZP8!Xb7xVc# z7Cv~y%vcX2m&yd%dFo(lI19!P@Q5o}6hl{dL!a9!aDS=r)eMRySie5SG3U6u}P#(Ijhg555_9DLP6iyrQ=Lzzo~0QO}4qV zE;Ku9vC3sLc!2?Gv>OqzHSg4>6q_XxolORR7Vi1Bjr$=#qg36nQ6&Xh8<*Jt~CUCyp=s<-6)Zgw#QhQu^#)!^U< DVr-_c literal 0 HcmV?d00001 diff --git a/tabbycat/utils/locale/ca/LC_MESSAGES/django.mo b/tabbycat/utils/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..34b56ab554bedb634b661d86a66b0ae6a068e9ef GIT binary patch literal 4217 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 CC^JF; literal 0 HcmV?d00001 diff --git a/tabbycat/utils/locale/cs/LC_MESSAGES/django.mo b/tabbycat/utils/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d7eb032247c91eaec811c5db2ba0211739700ff7 GIT binary patch literal 762 zcmYjPy>1gh5MCgFI67*It)ft@&vu*;&KyzV*pVe$SoRSi8f$$w*ypTwPrG}8SiAxy z?*IiQ9jQz~pFRyW4KDz*_;;jFv)|0@&fnfV+WJIL?jar{T8M{;4+tlp5srUBxR`GX z{T=ldVutV#KM{X#5puoY*SF{X8`KZb_G`g^qrQ*)4{8i2cMwZ)@1uDo?)|$G5dqCcsYtWF zjnO5CIUfRZr3AD#g?O|w1~fMP+8eLkY}eNXl?p|#rliG!S#+6ULJRM$p9!AIDvd{6 z8?fQ4sKE}_aW45=(5xC)jP~kh}8rgwK-#p$!?5u?OV>kwYzbp zkqYe1Pv8QC%KYUX{M@F(_(H{8fDh7d)%xvvuXl7>@A=6X=cx*r+IVNR)DtXrzw#6p uvd-<2uqJw*?NvO|Rnw75etevL#ji01ayGj%0uneU(d-I;iu)*IApZb+z0?{2 literal 0 HcmV?d00001 diff --git a/tabbycat/utils/locale/it/LC_MESSAGES/django.mo b/tabbycat/utils/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8d4ff8a342e6af662e45899aad9e7b77b3f63962 GIT binary patch literal 4494 zcmb7`Uu+yl8NjEI0x`6KKnpE|PM~gl(DOOYpQab5spB}olARdaX~_c$>)Y{plD(bF z&fGc9QzQ`3iYG!5j|g5s0zrh3K)^$RhrWP#AQD1=+B_gs38eCXkf;Q|Z*SMPsS`zv zZtizGGduIm_xJv?d&f(PHbegi{ovb_IuGY}@J0LK{YveIH{ko>ui-=R5AXr_5BLat z6Mhgr{0^nw1IOV9;8DnyY7xF0F2kMh0(=l!I0CQ0cfrrY$KhAtE_egVxi3RmcN5Av zuR_`H-|)R~$2*mJ3_b)IQiq^iVG6zvPD43&8H!w=g`+Sl#=ik&pKn2t<3~{B_<8aC z8kBushqCV*kSnWy70+)%KI%SRemmR=W!(c%^syU$96kmo;S7}X`tU>WOHkzcX7T)E zxS!|W!Z9eq%l&Im^nDOM49`H(gMnhF%TV_H0u(*H1gGHlq3r)UlzJA*dHcAW*ry3|d7$Xqzz@TXg4c`j9~93oL-C70 zLpkSFDChnS%D(?Bp6|!WWPBH_!AGF%KLf=N&lU5RpxmzqQJH!Xie9fnk>h(%&Upoj zU492eKQ|#C^>@DZ!v8?g`yQNA^mrD^IiG_fM<0qku0h%FyT$koDE{#?D0=-RlyhEz zvhFv<{LNzgPf+~(HTX&R20RD%FevAFD0Y6K;J2Z~=P%#^_(xcW4` zDEIm@{22T?d=&l^%6Y$shoC4^^mG`?{mw#>_k8gjK}?}872{W+-0vC`zxZOo7a?wu z-J#*Fx-`-Cv-D@^qVIilXzV6WeL}1pP_6*g%@-UfR(CSk(7=bj)?T z&f8#JTJvgjESRWM^LlJ_%-h)1d~G;py^i93l(uZz9*!o?hv8EW&+c z*Cw$Yn?}LJ!#6fuy7h4D+SgL2Gvj+nP{)s}>G)zVwyh|*jNj$a)5%7(>Get$+0+;{ z!+vd-S>wx}n`*|zMyFB7H1(7ZnM>QxjE>23%}+Io0T!ieiERbnIF&?guTGj(w$hbD zy_y|LJeS6%Yxqh-b&Z-!eXyY?8dUQrLkGwG2YOTsrn71??bdWyuWZd)J>xQ?7F_<` z8AMZOoIV+aNKf}8n?$QgKC&7mi3>6}P>Wu3nT~Tw?>MNVHflkNEfILtw>ZnI#kU$~ z5plaNHEPL3$vyS8Wa6kLwp$t)Xvw*bT5`QKR?GN`TJD6O7sII3{+n6zKY+ixLzi{mWOew& zz$fyT2d+?FM}``+u?@PiropvBp`UW$^Xtxa{a$_E_4Z+s)CDvi;n_HE*z6kY69s*4 zX&(D9geEh+nz;>cvT^l1-n-4shN+>o9@$J)Vjb%c_JnBIRNW{wNn*(vp@`pGU;T-? zb^Qgkn7NCl73y6<{@CPEJ@|QSEY*9D>HW2%BcG|C zHmS)5S7>1gwi$1^4ihtjr+T5liq?j6IChHcE9j$YzOeB(4=D zreV^?{LF=g+2!Tw)3eKs_#$d^<6T$TXUldcoBF`vgHNIN;n{LXeU6!@4;>u&zpIWX zBSxhDtHhmCWmY3e=q_GT8R^>S>Q(eZ9BnH;zxs}5ALdH0th~ogeR1-wy`>5n?|Z4v ztW+Z2lVWt*N-Z*q^jrwDY&v8B5>e);i9}DO7?riiMx^OH&5?ZM{Yp-_OGOI7HkM60 z#T$!5Ezz6k*ixU!m2Rslxl$;iG`2-?GHPy+QJwl!p(M$BR6#T|$R~MO;#qcWxg;@d z>vTK6pQR*SC7h)ANKG0jg4m)sSx>RBtC+JKFS2N{YD-;W8f~i*-*d$_5sNpvBzx0F zK1H#zBH8UGmJ()Lwp*x~i0CFJkQ?q^_oa>nw79fo-Q^%AEo#}k*t@J{CnNcnkXISC ze7P6JS%ek`6>Z*VpAQ+`&0OCQ75saNB{}15D9&l}oYXd_Dr>#fUKUz%0ahVv>0XKt zIy~(j>xRWoR#S0{Qq@!bFUr5tx+u(wboTx GP5%ev+JA=t literal 0 HcmV?d00001 diff --git a/tabbycat/utils/locale/kk/LC_MESSAGES/django.mo b/tabbycat/utils/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..454ba9d2673243f63185ede9338d6ab99a1b5106 GIT binary patch literal 707 zcmY*Wzi$&U6gE(VxCybsV3rC7=Po}=!-WixCRNl%L`^^lAw|x`T--SJVLL5lBCr%? zCJQ4I69tI@iS}=}3p*SC2k#o%1WVsNKY!2PyYKn;^_33@)(YSz;6C6o;5i^&5g^T9 z0DG zI$O`2M!iv8{82XJITa->lc0JKK}XA8SvL}3qJ+VlHq4eEw`-)hs7t%QV475Apn6<} zJ}!2-b(&(NsUS6_hsMV;I!#SESHkmc`L@Kj$~b$cHf?ugxiGF!0Ts+;(%r6f8r4?o!DhAP_I6=v zDif(Co%5&L@NxcbVLiLHM5awh9hiG-1qa0^@sDH@AIHbZWcCTiU*n@>jFY#&J|}PD l@5x~@O~%O-%|6B_u$ja^lf(GvKOW7#fCLnS#JltY`U@h}Nu literal 0 HcmV?d00001 diff --git a/tabbycat/utils/locale/vi/LC_MESSAGES/django.mo b/tabbycat/utils/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f1f87b4fcbd7e5b4c2f35377a09d6aaec23e4102 GIT binary patch literal 4650 zcmb7`ZEPGz8OH|*keHH`LU>6EOiP{kO3vq(q)jhzQ`@nF6+2k=HF1$p*xMc7ZM-+L z?95(b@dZ?&s;Y!yN{~Xo#F(hGA_|Zcsyn58xKN3loLMops#Q&Mw zyIUuQ!szCHH*e28Z!>dm-L>f)Lm5TA8}+{TGWHm_XA{0q&c2_qyTBFjqu>v~?cj^x zhr!=~p922~egga_cn7%k1B`tP+zCP?8vwU}!{AnM1ndE)!Oh?a@ILS>;5P7^AnkV! zqyV-A@DWuPVi0ev*2GreAt!`GDfQ334R3J4${86LDFXs>;)&2{s1I7Rgm;} z0wg`oChZqMlKT=!a(@ZJMD|M3ejR)t+HWN7--BfTTj1xwzkx&GHVCJE#=uX4^C0OH zB<*j2gJ^#b>;qo|$?ms7@-G?jabO2X_78#-ml2TU&VuA02RsNagCzfFAU^C>e39O7 zfF$=1Aj!E2;=}%dFR04i0m+_Cm_*zR-gpme0x3WKjztugJ76T)$3e=2!yx%}4&>k& zkn}naQhc5VDGy!&Y5!k?wEj(y;`9!P58Dc1_k%k@+Gi3Z`@aNI98A*w8c6z|1My+2 z_#%0illE^xidQq~zX^T@?H(jwKbQfhzy*-}_3)I2KrgvtOa<>4c!yHP2Y zq))r-Z~p+T-;*|-)e%%26I;lpEb3lVI%l6p{WL1vYyG_kq(VM?7?sY-AZojiuSQWR z7F6I4>u1W%ebj++2=zf!if;~;;xdFvCDQ^M2FcHqQ&jFnrE}1aO8HG^jSA%&m4{kD zvQ#zi?Nec>v~PSRGn)1G8R1kin)mhgY2OnWo$2=Znmbnhw6m;vA#!{v1RIBp zl8Stx+dr4txbg&-PDSMTL2V)>OAq(O-sCO#% zeAh85(rluu<&^Y9DDWjsdJdbC+W00Wud!)3fExvyTfSp6qEZwQSBu<~Q=&1KkE=+q z8D-ZUgKF%U;)fmM@X@N{2Tn1tJw+!7l%cVfEBK;{xMwxpu#-C_xCL5tRKQa0VlT~R zZw<&S)D4vsY)&}AyZUQRc#cc)nrj7RPN@o;Q?c~eJo1AT#>QCzDPzB|zlHDws#rH@Sj$Ptw%cfx=4GcUctselqzh^5`+ECa>|`UXuR2)$bO2dx(;xvRg8NHj%orhC4ClDmBJ!0(9!(h65td$FP zaVrJd=1^B|!t)JJ&B?(mllZ4S@kCjvP~XEJQ}J$uL@EQ1JIH7xtyvBQ;^P?p=-f2o zgD!Y7;>Adv)*|X>Cy=$brC0YFaLbM#vDCRnba2FRG|e Vvpq$NgZEb9>|4FR~j? zKgnhzbxODWv7XBvUZ;*O9yprf4UVc8G-@T74uBulYV5?M;3JcsiP z#YKzGNS;^ylgE$s%uLNpbhR4nALzlQVGzM=0nUP+;*81Rdh_K04)Y@|%*dmK$?X2_ zJknrMMA-@HDi611p6@UEre`*YBPYmCs;Hv#T!yx(M+Oh@*3XfF13e4bBSMO(rM`WL{7-u^!Uk{ ziTU}_BNOvE?-X37`a_kH(}~;RJRg2w?}LN;QiHTfb_yd8?c3YK`1O@$?PAQU&H6Jw z^8H=knd@hp_472dbq=up-tJ#jTf8sr+A>6wN*bYv{}2He%qGHjjOW6-NqHZ1lfjvHE!0{=w-TowxiQ@j7dCb zT;L_Yv0C9vWz50Jf*L<@xoOreg>1aBil69tyuE2*U8C{59`-Q z#svtf`lOrNtUv4EKEbbYyi7e67|o7SR3w)r2zZJW(9e!`UFJ3Gmw8|U?*|K2QS8(e18Oj$)LS>TW-DGb) zv0rffRvP#=JrNcxGpT6WluInMDPL;VejXye?Kc$(@T_cQW-`tGY1+ugc{Y1{oR9(+ zU{P&VLJ=IPQnP-^-*95*B&W@4Sx(_tro)Mu-qOD8#W%;tHVJ0 z6+ab~)WduPdAH`X1wsD?=q*MHKh5>at4XfghuRL`Hqg4C?AS)>OCmSuPvmZt!B~-_ zGx#LVn}!#ijn>nC|HG^?8<3^eDeO4jrc!9%c*N=oxseW2<44%hi zUWM>YVr}XYUU$v8<;EphX314bx1ga*>~Z`XYt~oTy15~2ytuxL?!?Y5+5UI%ZviZA A;s5{u literal 0 HcmV?d00001 diff --git a/tabbycat/venues/locale/bg/LC_MESSAGES/django.mo b/tabbycat/venues/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dfa8a065a5adf5a52a43750c9627a978459b2b20 GIT binary patch literal 547 zcmYjOO-}+b5Y^~ukDfi$#DgXdyDXwu!a+VmB9Q2`1ic~FPs$x zCV6QmZ#pyY_3P;HbB|)5a7;KQ91t!DWi$xiMBdO@)@)*I%_}AzhABLvb<$|gyjUzg z65)dh=Eiy$xlE?eE;0u*!&xxChY7A^Sqxp_k+V38YY@c{)mc>KQ5@U}=V4}rc1n0- zIm=(9lKI>xMCq&$8Nv+3lCyT9GGV3A8-lY%Hg6At(Qwq;E>*2WLC0v1ni_xPG}Pm} z4|64?ZnES>Scks#FzZ8OTURddj23!2F{#uUXN`sQ!B`bmDCirzbe!q@H+8MJ$=27_ znPw*~Ry}V9PcT4@b}b^Y=8f7^60;|uY$cF D2l=NF literal 0 HcmV?d00001 diff --git a/tabbycat/venues/locale/ca/LC_MESSAGES/django.mo b/tabbycat/venues/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..23b135858af5fd224f274760c44f7961b82d40fd GIT binary patch literal 602 zcmYk3!E)L#5Qd#Lz4+L359+Nw2!jJjDuzQ#OokblFhDZBkwxA*Vr0o93DP`BUN6_a zM%OqA?94ao-Cx@Eu3kQ$K1XC9i7!N#_(V*I+U|*31LBlG;@?RWZOGU8`G>~ek*DO6&w-OeYGffA#cvm2Cwk8^&9&MRvK3$R{4NeJ;AE9(NE`aA-jm!8*aJ2c=cD3X&vKY@tBDL?{ItLI4fs zJuR4oRknzy<7syIrB16I53LDksO(ckEd%}yNu@!VK9djNJchyTa>OqW=j!%<(DBSj zn=4ZYcDYs|p6RUv%}3UiUNBSbLqACStoa;#Gwkbtb-wrG-~1X4x@H9F>?4(FNn4UI zY$E=;z@x1lw6{^~nU1cEl%@fa9CxT~mAtJx*`e8@PqdYwF+r0|hO23|Sp2-s7D>LL lz1db}j|#m%-j!fy=iQ4=??|k>@G&VrdgpPpe{fqy{{hwetsnpZ literal 0 HcmV?d00001 diff --git a/tabbycat/venues/locale/cs/LC_MESSAGES/django.mo b/tabbycat/venues/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d240b156de67e629468c8138598b547352385390 GIT binary patch literal 649 zcmYjP%We}f6dhhd%#t+=Z>Z9RGmj>vI2}+sO{z$Vh?)T*Ho@^+CKD$1$o8bPyM6?p z!>a$$Z{eDdCRaMT_Bpoi!}sC!^WPrYGsGK22k`%q* z`X%~1^iR;cceaL<=e;$gl>uKJdR8@B@)bzyO|)8quymNyFQ84SBqNs3=Qn~|{|aiQ zEghSp%;|Yk7@8?Y{K+SJ1?$osrWf1-BXJlX(J-cAmxK`uV}HbrrJ3f^RNN}fNWCbl zvYuIik}Mit0Cl-AlHP(?Jd%tEGfThuwjC5bb4g7OjjvwQ8_Y1a#%y9>R|g1!5U-(Ca9F)6$BuIQ92vf&U40XRQKJL7OdfN_+9k=N^1v#|&C=4WMkhn!}nPPLU0!1<;C0l>U{$8*B z8>8d434sTR?@^>kzJ59V7m%G0z7j48XM{1KwqJx=6NFO&65fu2U`1!m&yE}Zkxrs_ zR`cXG_Ana93Lt4NiS|^R>%!}pnB^N%NVP&j`i7RCRx0}*IW;hF{_b|h) ztb<`7JaU%A$pyp-#2ps5d7Ok};XGtkXs3iXmb2$#DOrb}J71Mtjth_NAhd9{>8NQbOu3%b$gH=z9;@2(I^Wb@|_DVW@Lc zNL_Mvy_7zjs*M#2M#iokXS&+Cu9tLKbM1Z8?7YX?-@D-x+@VI>w2)i#htjlivnHY6 zcFDAqJ{N`>rkBSw| k&9o|Wkmz%H1I{k4E`PK;2Vz|XQc`|)uEJoqa6=3K55AeLzyJUM literal 0 HcmV?d00001 diff --git a/tabbycat/venues/locale/kk/LC_MESSAGES/django.mo b/tabbycat/venues/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..45e83702e2f765103a52d5d70796017dfa95a9b3 GIT binary patch literal 592 zcmY+B!EO^V5QZ02E*2-w9LxQbmWX(Ay9tJ6VKjxrgu~X?h#8zsjq&HUZVwS7CnD~Swos}{}h*2&C zKat<%e0F~-_p!zJnxU8qbV6^5w8)9z&0 z8;=id`N#JzmWgv zr9aYjNPwMrBkerx?%SuopHBY-6dwrZgbTtM;R~UPgiz%VgnuVN@I>cFLWc?{-A7gb z8e?M$7bMoKF!eCZV20L7qdD_pvDl`_^)Pa|%;4KPcQ7@ag~>gPaU-k8a3ef& z)`%NTh#L^MSX}3EBfJyN!_*4xl<>xKRxYKI<=m%4>3l76gei)GvzbJ%MS%|Y3}+iT zpM4KU!%_dBs$Pr3p3xpPb>5aV)#Gm;l}bq6Vd+v>hratb9l-VBU8UeBTIlQ4WK!px zT`!~$6ScNN!NAzUai+`H)OG6}w!3!YPWS_EQKQ|-Pp$by^|jO#MD%tUyqS08*nxXr zvs&h;WFQqOk22h#GG+8`b+kdfMi(iQ3WX8s=&m;(^(T|BxBW?!t;jP|E6q`({m0#K b)@)y1)mukoH3f#md~UVFAX&aV>pb`mH(so5 literal 0 HcmV?d00001 From 027ab6fd7899e151ccd9c1f9a619ef4a9ab4151a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Tue, 4 Jul 2023 18:34:13 -0300 Subject: [PATCH 225/255] Add all languages from Crowdin --- tabbycat/settings/core.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tabbycat/settings/core.py b/tabbycat/settings/core.py index 12ec1053d8d..25f6dba6663 100644 --- a/tabbycat/settings/core.py +++ b/tabbycat/settings/core.py @@ -60,14 +60,25 @@ LANGUAGES = [ ('ar', _('Arabic')), ('bn', _('Bengali')), + ('bg', _('Bulgarian')), + ('ca', _('Catalan')), + ('cs', _('Czech')), + ('de', _('German')), ('en', _('English')), ('es', _('Spanish')), ('fr', _('French')), + ('he', _('Hebrew')), + ('hi', _('Hindi')), ('id', _('Indonesian')), + ('it', _('Italian')), ('ja', _('Japanese')), + ('kk', _('Kazakh')), ('ms', _('Malay')), ('pt', _('Portuguese')), + ('ro', _('Romanian')), ('ru', _('Russian')), + ('tr', _('Turkish')), + ('vi', _('Vietnamese')), ('zh-hans', _('Simplified Chinese')), ('tzl', _('Translation')), ] From a1ca1a390866199e1884db12c215ddaa867a98dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Tue, 4 Jul 2023 18:39:44 -0300 Subject: [PATCH 226/255] Add new messages for translation --- .../locale/en/LC_MESSAGES/django.po | 4 +- .../breakqual/locale/en/LC_MESSAGES/django.po | 8 +- tabbycat/draw/locale/en/LC_MESSAGES/django.po | 22 +- .../importer/locale/en/LC_MESSAGES/django.po | 26 ++- tabbycat/locale/en/LC_MESSAGES/django.po | 50 ++++- .../motions/locale/en/LC_MESSAGES/django.po | 9 +- .../options/locale/en/LC_MESSAGES/django.po | 199 ++++++++---------- .../locale/en/LC_MESSAGES/django.po | 10 +- .../results/locale/en/LC_MESSAGES/django.po | 20 +- .../standings/locale/en/LC_MESSAGES/django.po | 20 +- .../locale/en/LC_MESSAGES/django.po | 61 ++++-- 11 files changed, 285 insertions(+), 144 deletions(-) diff --git a/tabbycat/availability/locale/en/LC_MESSAGES/django.po b/tabbycat/availability/locale/en/LC_MESSAGES/django.po index 36a470d5378..b6eb2bb1343 100644 --- a/tabbycat/availability/locale/en/LC_MESSAGES/django.po +++ b/tabbycat/availability/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"POT-Creation-Date: 2023-07-05 07:37+1000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -109,7 +109,7 @@ msgstr "" #: availability/templates/availability_index.html #, python-format -msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random instead? You can edit this round's draw type in the Edit Database area." +msgid "This is the first round, but its draw type is %(draw_type)s. Did you intend for it to be Random or Seeded instead? You can edit this round's draw type in the Edit Database area." msgstr "" #: availability/templates/availability_index.html diff --git a/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po b/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po index a4cf79b2421..876026e4447 100644 --- a/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po +++ b/tabbycat/breakqual/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"POT-Creation-Date: 2023-07-05 07:37+1000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -69,7 +69,7 @@ msgid "is general" msgstr "" #: breakqual/models.py -msgid "True if most teams eligible for this category, e.g. Open, False otherwise" +msgid "Are teams eligible for this break by default" msgstr "" #: breakqual/models.py @@ -507,6 +507,10 @@ msgstr "" msgid "Breaking Adjudicators" msgstr "" +#: breakqual/views.py +msgid "Four-team formats require the break size to be either six times or four times a power of two." +msgstr "" + #: breakqual/views.py msgid "Break Eligibility" msgstr "" diff --git a/tabbycat/draw/locale/en/LC_MESSAGES/django.po b/tabbycat/draw/locale/en/LC_MESSAGES/django.po index e6aa8dd36c6..36934450837 100644 --- a/tabbycat/draw/locale/en/LC_MESSAGES/django.po +++ b/tabbycat/draw/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"POT-Creation-Date: 2023-07-05 07:37+1000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1097,14 +1097,34 @@ msgstr "" msgid "Rooms were not auto-allocated because there are one or more adjudicator room constraints. You should run room allocations after allocating adjudicators." msgstr "" +#: draw/views.py +msgid "There is no draw." +msgstr "" + +#: draw/views.py +msgid "The draw had already been confirmed." +msgstr "" + #: draw/views.py msgid "Deleted the draw. You can now recreate it as normal." msgstr "" +#: draw/views.py +msgid "The draw has already been released." +msgstr "" + +#: draw/views.py +msgid "The draw must be confirmed before being released." +msgstr "" + #: draw/views.py msgid "Released the draw." msgstr "" +#: draw/views.py +msgid "The draw had been unreleased." +msgstr "" + #: draw/views.py msgid "Unreleased the draw." msgstr "" diff --git a/tabbycat/importer/locale/en/LC_MESSAGES/django.po b/tabbycat/importer/locale/en/LC_MESSAGES/django.po index e09039871a1..a19c5fda34d 100644 --- a/tabbycat/importer/locale/en/LC_MESSAGES/django.po +++ b/tabbycat/importer/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"POT-Creation-Date: 2023-07-05 07:37+1000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -58,6 +58,10 @@ msgstr[1] "" msgid "Speakers' names" msgstr "" +#: importer/forms.py +msgid "Can be separated by newlines, tabs or commas" +msgstr "" + #: importer/forms.py msgid "Speakers' email addresses" msgstr "" @@ -86,10 +90,6 @@ msgstr "" msgid "One speaker's name per line" msgstr "" -#: importer/forms.py -msgid "Can be separated by newlines, tabs or commas" -msgstr "" - #: importer/forms.py #, python-format msgid "Speaker %d" @@ -100,6 +100,22 @@ msgstr "" msgid "speaker%d@example.edu" msgstr "" +#: importer/forms.py +msgid "Unseeded" +msgstr "" + +#: importer/forms.py +msgid "Free seed" +msgstr "" + +#: importer/forms.py +msgid "Half seed" +msgstr "" + +#: importer/forms.py +msgid "Full seed" +msgstr "" + #: importer/forms.py msgid "There must be at least one speaker." msgstr "" diff --git a/tabbycat/locale/en/LC_MESSAGES/django.po b/tabbycat/locale/en/LC_MESSAGES/django.po index cc6201ca960..a8af88a8254 100644 --- a/tabbycat/locale/en/LC_MESSAGES/django.po +++ b/tabbycat/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"POT-Creation-Date: 2023-07-05 07:37+1000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -237,6 +237,22 @@ msgstr "" msgid "Bengali" msgstr "" +#: settings/core.py +msgid "Bulgarian" +msgstr "" + +#: settings/core.py +msgid "Catalan" +msgstr "" + +#: settings/core.py +msgid "Czech" +msgstr "" + +#: settings/core.py +msgid "German" +msgstr "" + #: settings/core.py msgid "English" msgstr "" @@ -249,14 +265,30 @@ msgstr "" msgid "French" msgstr "" +#: settings/core.py +msgid "Hebrew" +msgstr "" + +#: settings/core.py +msgid "Hindi" +msgstr "" + #: settings/core.py msgid "Indonesian" msgstr "" +#: settings/core.py +msgid "Italian" +msgstr "" + #: settings/core.py msgid "Japanese" msgstr "" +#: settings/core.py +msgid "Kazakh" +msgstr "" + #: settings/core.py msgid "Malay" msgstr "" @@ -265,10 +297,22 @@ msgstr "" msgid "Portuguese" msgstr "" +#: settings/core.py +msgid "Romanian" +msgstr "" + #: settings/core.py msgid "Russian" msgstr "" +#: settings/core.py +msgid "Turkish" +msgstr "" + +#: settings/core.py +msgid "Vietnamese" +msgstr "" + #: settings/core.py msgid "Simplified Chinese" msgstr "" @@ -370,7 +414,7 @@ msgid "This site runs on Tabbycat %(tabbycat_version)s (%(tabbycat_codename)s)" msgstr "" #: templates/footer.html -msgid "Tabbycat is a source-available project developed by volunteers, and is free to use for tabbing non-profit, non-fundraising tournaments." +msgid "Tabbycat is an open-source project developed by volunteers and is free to use." msgstr "" #: templates/footer.html @@ -383,7 +427,7 @@ msgid "Learn more about donating." msgstr "" #: templates/footer.html -msgid "Donations to Tabbycat from individuals or organisations are much appreciated." +msgid "Donations to Tabbycat from individuals or organisations are much appreciated and help us to continue to develop, support, and maintain Tabbycat." msgstr "" #: templates/footer.html diff --git a/tabbycat/motions/locale/en/LC_MESSAGES/django.po b/tabbycat/motions/locale/en/LC_MESSAGES/django.po index 9d5640a7005..2d26ead27c9 100644 --- a/tabbycat/motions/locale/en/LC_MESSAGES/django.po +++ b/tabbycat/motions/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-12 02:25-0400\n" +"POT-Creation-Date: 2023-07-05 07:37+1000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -322,6 +322,13 @@ msgstr "" msgid "The motion for this round has not been released." msgstr "" +#: motions/templates/show.html +#, python-format +msgid "Motion for %(round)s" +msgid_plural "Motions for %(round)s" +msgstr[0] "" +msgstr[1] "" + #: motions/templates/show.html #, python-format msgid "Reveal Info Slide for %(round)s" diff --git a/tabbycat/options/locale/en/LC_MESSAGES/django.po b/tabbycat/options/locale/en/LC_MESSAGES/django.po index caed0ba0250..2fa6e701437 100644 --- a/tabbycat/options/locale/en/LC_MESSAGES/django.po +++ b/tabbycat/options/locale/en/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"POT-Creation-Date: 2023-07-05 07:37+1000\n" "PO-Revision-Date: 2019-07-11 23:49\n" "Last-Translator: philip_tc\n" "Language-Team: English\n" @@ -20,6 +20,26 @@ msgstr "" msgid "Tournament Options" msgstr "" +#: options/forms.py +msgid "Mininum score must be less than maximum score" +msgstr "" + +#: options/forms.py +msgid "Intermediate 1 or 2 require preallocated sides" +msgstr "" + +#: options/forms.py +msgid "Four-team formats require consensus ballots" +msgstr "" + +#: options/forms.py +msgid "Must set a password if using a password is enabled" +msgstr "" + +#: options/forms.py +msgid "Showing team institutions defeats the purpose of code names" +msgstr "" + #: options/models.py msgid "instance" msgstr "" @@ -176,6 +196,30 @@ msgstr "" msgid "Avoid team history" msgstr "" +#: options/preferences.py +msgid "Penalty applied by conflict avoidance method for teams being in a pullup many times. Leave 0 for no penalty." +msgstr "" + +#: options/preferences.py +msgid "Previously saw pullup penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by minimum cost matching to prefer pairings that balance sides." +msgstr "" + +#: options/preferences.py +msgid "Side balance penalty" +msgstr "" + +#: options/preferences.py +msgid "Penalty applied by minimum cost matching to prefer pairings that follow the draw pairing method." +msgstr "" + +#: options/preferences.py +msgid "Pairing deviation penalty" +msgstr "" + #: options/preferences.py msgid "How odd brackets are resolved (see documentation for further details)" msgstr "" @@ -280,6 +324,10 @@ msgstr "" msgid "One-up-one-down" msgstr "" +#: options/preferences.py +msgid "Minimum cost matching" +msgstr "" + #: options/preferences.py msgid "If using pull-ups, restrict which teams can be pulled up. Two-team formats only. Has no effect on BP or intermediate brackets." msgstr "" @@ -440,6 +488,10 @@ msgstr "" msgid "All adjudicators (including trainees) on each other" msgstr "" +#: options/preferences.py +msgid "Panellists on eachother and chairs, trainees on chairs, chairs on everyone" +msgstr "" + #: options/preferences.py msgid "Expect feedback to be submitted by teams on" msgstr "" @@ -600,6 +652,14 @@ msgstr "" msgid "Require reply speaker to have given a substantive speech" msgstr "" +#: options/preferences.py +msgid "Whether and how to use speech ranks within a debate" +msgstr "" + +#: options/preferences.py +msgid "Use of speech ranks" +msgstr "" + #: options/preferences.py options/templates/preferences_index.html msgid "Standings" msgstr "" @@ -781,15 +841,15 @@ msgstr "" msgid "Ballot submissions from adjudicators" msgstr "" -#: options/preferences.py +#: options/preferences.py options/presets.py msgid "Disabled (tab staff only)" msgstr "" -#: options/preferences.py +#: options/preferences.py options/presets.py msgid "Use private URLs" msgstr "" -#: options/preferences.py +#: options/preferences.py options/presets.py msgid "Use publicly accessible form" msgstr "" @@ -1141,144 +1201,76 @@ msgstr "" msgid "Show speakers in draw" msgstr "" -#: options/preferences.py options/templates/preferences_index.html -msgid "Notifications" -msgstr "" - -#: options/preferences.py -msgid "The name of the organizer tasked with managing emails (in case of replies)" -msgstr "" - -#: options/preferences.py -msgid "Reply-to name" -msgstr "" - -#: options/preferences.py -msgid "The email address for handling replies" -msgstr "" - -#: options/preferences.py -msgid "Reply-to address" -msgstr "" - -#: options/preferences.py -msgid "A secret key to accept email status events" -msgstr "" - -#: options/preferences.py -msgid "Email status secret key" -msgstr "" - #: options/preferences.py -msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" -msgstr "" - -#: options/preferences.py -msgid "Ballot receipts" -msgstr "" - -#: options/preferences.py -msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" -msgstr "" - -#: options/preferences.py -msgid "Ballot receipt subject line" -msgstr "" - -#: options/preferences.py -msgid "The message body for emails sent to adjudicators with their submitted ballot." -msgstr "" - -#: options/preferences.py -msgid "Ballot receipt message" -msgstr "" - -#: options/preferences.py -msgid "The subject line for emails sent to speakers with their team points." -msgstr "" - -#: options/preferences.py -msgid "Team points subject line" -msgstr "" - -#: options/preferences.py -msgid "The message body for emails sent to speakers with their team points." -msgstr "" - -#: options/preferences.py -msgid "Team points message" -msgstr "" - -#: options/preferences.py -msgid "The subject-line for emails sent to adjudicators with their assignments." +msgid "Input team seed in simple team importer" msgstr "" #: options/preferences.py -msgid "Adjudicator draw subject line" +msgid "Enable team seed in importer" msgstr "" #: options/preferences.py -msgid "The message body for emails sent to adjudicators with their assignments." +msgid "Do not ask for team seed" msgstr "" #: options/preferences.py -msgid "Adjudicator draw message" +msgid "Ask for numeric team seed" msgstr "" #: options/preferences.py -msgid "The subject-line for emails sent to teams with their draw." +msgid "Ask for descriptive team seed name" msgstr "" -#: options/preferences.py -msgid "Team draw subject line" +#: options/preferences.py options/templates/preferences_index.html +msgid "Notifications" msgstr "" #: options/preferences.py -msgid "The message body for emails sent to participants with their private URLs." +msgid "The name of the organizer tasked with managing emails (in case of replies)" msgstr "" #: options/preferences.py -msgid "Private URL notification message" +msgid "Reply-to name" msgstr "" #: options/preferences.py -msgid "The subject-line for emails sent to participants with their private URLs." +msgid "The email address for handling replies" msgstr "" #: options/preferences.py -msgid "Private URL notification subject line" +msgid "Reply-to address" msgstr "" #: options/preferences.py -msgid "The subject-line for emails sent to participants on motion release." +msgid "A secret key to accept email status events" msgstr "" #: options/preferences.py -msgid "Motion release notification subject line" +msgid "Email status secret key" msgstr "" #: options/preferences.py -msgid "The message body for emails sent to participants on motion release." +msgid "Enables a copy of adjudicators' ballots to be automatically sent to them (by email) after they are entered in Tabbycat (for confirmation or checking)" msgstr "" #: options/preferences.py -msgid "Motion release notification message" +msgid "Ballot receipts" msgstr "" #: options/preferences.py -msgid "The subject-line for emails sent to participants informing them of their team registration." +msgid "The subject line for emails sent to adjudicators with their submitted ballot. Use '{{ DEBATE }}' as a placeholder for the associated debate" msgstr "" #: options/preferences.py -msgid "Team registration notification subject line" +msgid "Ballot receipt subject line" msgstr "" #: options/preferences.py -msgid "The message body for emails sent to participants informing them of their team registration." +msgid "The message body for emails sent to adjudicators with their submitted ballot." msgstr "" #: options/preferences.py -msgid "Team registration notification message" +msgid "Ballot receipt message" msgstr "" #: options/preferences.py options/templates/preferences_index.html @@ -1369,10 +1361,6 @@ msgstr "" msgid "Administrator account creation key" msgstr "" -#: options/presets.py -msgid "Public Information Options" -msgstr "" - #: options/presets.py msgid "Enable Public Information" msgstr "" @@ -1445,6 +1433,10 @@ msgstr "" msgid "3 vs 3 with replies, chosen motions, prop/opp side labels, and all adjudicators can receive feedback from teams." msgstr "" +#: options/presets.py +msgid "Public Information Options" +msgstr "" + #: options/presets.py msgid "For tournaments hosted online: this sets it up so that people can access the draw and other generally useful information via the tab site." msgstr "" @@ -1465,23 +1457,16 @@ msgstr "" msgid "Enables participant data entry through private URLs." msgstr "" -#: options/templates/preferences_index.html -msgid "Configuration" -msgstr "" - -#: options/templates/preferences_index.html -#, python-format -msgid "Your draw rules specify four teams per-debate but your ballot setting specifies that adjudicators submit independent ballots. These settings are not compatible and will cause results entry to crash. You need to go back to the Debate Rules section and change your configuration to use consensus ballots." +#: options/presets.py +msgid "Use Public Forms" msgstr "" -#: options/templates/preferences_index.html -#, python-format -msgid "You do not use preallocated side allocation yet the odd bracket resolution method uses preallocated sides. This will cause draw generation to fail. You need to edit odd bracket resolution, avoiding Intermediate 1 and Intermediate 2 in the Draw Rules section." +#: options/presets.py +msgid "Enables participant data entry through public forms." msgstr "" #: options/templates/preferences_index.html -#, python-format -msgid "You both have team code names enabled, and team institutions showing on public pages. If your objective in enabling team code names is to obscure team institutions, this probably defeats the purpose of code names. You can edit these settings in the UI Options section." +msgid "Configuration" msgstr "" #: options/templates/preferences_index.html diff --git a/tabbycat/participants/locale/en/LC_MESSAGES/django.po b/tabbycat/participants/locale/en/LC_MESSAGES/django.po index 23256f13e47..82ed19a0435 100644 --- a/tabbycat/participants/locale/en/LC_MESSAGES/django.po +++ b/tabbycat/participants/locale/en/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"POT-Creation-Date: 2023-07-05 07:37+1000\n" "PO-Revision-Date: 2019-07-11 23:49\n" "Last-Translator: philip_tc\n" "Language-Team: English\n" @@ -265,6 +265,14 @@ msgstr "" msgid "break categories" msgstr "" +#: participants/models.py +msgid "seed" +msgstr "" + +#: participants/models.py +msgid "Used as initial ranking to power-pair the first round" +msgstr "" + #: participants/models.py msgid "institution conflicts" msgstr "" diff --git a/tabbycat/results/locale/en/LC_MESSAGES/django.po b/tabbycat/results/locale/en/LC_MESSAGES/django.po index b7b93ff7def..9790c36a9e3 100644 --- a/tabbycat/results/locale/en/LC_MESSAGES/django.po +++ b/tabbycat/results/locale/en/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"POT-Creation-Date: 2023-07-05 07:37+1000\n" "PO-Revision-Date: 2019-07-11 23:48\n" "Last-Translator: philip_tc\n" "Language-Team: English\n" @@ -121,6 +121,14 @@ msgstr "" msgid "The margin (%(margin).1f) exceeds the maximum allowable margin (%(max_margin).1f)." msgstr "" +#: results/forms.py +msgid "Ranks cannot be tied." +msgstr "" + +#: results/forms.py +msgid "Ranks must correspond to speaker scores" +msgstr "" + #: results/forms.py #, python-format msgid "The total scores for the teams are the same (i.e. a draw) for adjudicator %(adjudicator)s." @@ -233,7 +241,7 @@ msgstr "" #: results/models.py #, python-format -msgid "Debate is in round %(round)d but motion (%(motion)s) is from round %(motion_round)d" +msgid "Debate is in round %(round)d but motion (%(motion)s) is not in round" msgstr "" #: results/models.py @@ -312,6 +320,10 @@ msgstr "" msgid "speaker" msgstr "" +#: results/models.py +msgid "rank" +msgstr "" + #: results/models.py msgid "ghost" msgstr "" @@ -458,10 +470,6 @@ msgstr "" msgid "This page automatically updates with the new ballot entries and checkins as they occur." msgstr "" -#: results/templates/assistant_results.html -msgid "This tournament's configuration is set to British Parliamentary with one ballot per voting adjudicator. This combination isn't allowed: BP tournaments must use consensus ballots. Results can't be entered while this configuration is in place. Please ask an administrator to change this configuration." -msgstr "" - #: results/templates/assistant_results.html msgid "Currently there are no motions entered for this round, so debate results cannot be entered. Please ask an administrator to add motions." msgstr "" diff --git a/tabbycat/standings/locale/en/LC_MESSAGES/django.po b/tabbycat/standings/locale/en/LC_MESSAGES/django.po index 026ffd63fd8..9ba8bd58c69 100644 --- a/tabbycat/standings/locale/en/LC_MESSAGES/django.po +++ b/tabbycat/standings/locale/en/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-28 12:44-0400\n" +"POT-Creation-Date: 2023-07-05 07:37+1000\n" "PO-Revision-Date: 2019-07-11 23:48\n" "Last-Translator: philip_tc\n" "Language-Team: English\n" @@ -175,6 +175,14 @@ msgstr "" msgid "Trim" msgstr "" +#: standings/speakers.py +msgid "speech ranks" +msgstr "" + +#: standings/speakers.py +msgid "SRank" +msgstr "" + #: standings/teams.py msgid "points" msgstr "" @@ -256,13 +264,21 @@ msgid "DSS" msgstr "" #: standings/teams.py -msgid "number of pullups before this round" +msgid "number of pullups" msgstr "" #: standings/teams.py msgid "PU" msgstr "" +#: standings/teams.py +msgid "number of times in pullup debates" +msgstr "" + +#: standings/teams.py +msgid "SPu" +msgstr "" + #: standings/teams.py msgid "number of adjudicators who voted for this team" msgstr "" diff --git a/tabbycat/tournaments/locale/en/LC_MESSAGES/django.po b/tabbycat/tournaments/locale/en/LC_MESSAGES/django.po index 2d83157996b..652adc6e7a2 100644 --- a/tabbycat/tournaments/locale/en/LC_MESSAGES/django.po +++ b/tabbycat/tournaments/locale/en/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: tabbycat\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-12 02:04-0400\n" +"POT-Creation-Date: 2023-07-05 07:37+1000\n" "PO-Revision-Date: 2019-07-11 23:48\n" "Last-Translator: philip_tc\n" "Language-Team: English\n" @@ -65,6 +65,14 @@ msgstr "" msgid "Show non-sensitive information on the public-facing side of this site, like draws (once released) and the motions of previous rounds" msgstr "" +#: tournaments/forms.py +msgid "Participant Data Entry" +msgstr "" + +#: tournaments/forms.py +msgid "Whether participants can submit ballots and feedback themselves, and how they do so" +msgstr "" + #: tournaments/forms.py msgid "Tabulation: [list tabulation staff here]
    Equity: [list equity members here]
    Organisation: [list organising committee members here]
    Adjudication: [list chief adjudicators here]" msgstr "" @@ -195,6 +203,10 @@ msgstr "" msgid "Elimination" msgstr "" +#: tournaments/models.py +msgid "Seeded" +msgstr "" + #: tournaments/models.py msgid "Preliminary" msgstr "" @@ -318,15 +330,15 @@ msgid "rounds" msgstr "" #: tournaments/models.py -msgid "A round in the elimination stage must have its draw type set to \"Elimination\"." +msgid "The \"Elimination\" draw type is only for elimination rounds, where it is mandatory." msgstr "" #: tournaments/models.py -msgid "A round in the preliminary stage cannot have its draw type set to \"Elimination\"." +msgid "An elimination round must have a break category and preliminary round must not." msgstr "" #: tournaments/models.py -msgid "Elimination rounds must have a break category." +msgid "Break category must be for the same tournament." msgstr "" #: tournaments/templates/assistant_tournament_index.html @@ -385,8 +397,7 @@ msgid "Create New Tournament" msgstr "" #: tournaments/templates/create_tournament.html -#, python-format -msgid "Tabbycat is free to use for non-profit and non-fundraising tournaments (although donations are encouraged). If your tournament is run for profit or for fundraising, please note that there is a required payment. For more details, see the Tabbycat licence agreement." +msgid "Tabbycat is free to use, although donations are encouraged." msgstr "" #: tournaments/templates/create_tournament.html @@ -624,6 +635,14 @@ msgstr "" msgid "Email Team Points" msgstr "" +#: tournaments/templates/round_complete_check.html +msgid "Unmark as Silent" +msgstr "" + +#: tournaments/templates/round_complete_check.html +msgid "Mark as Silent" +msgstr "" + #: tournaments/templates/round_complete_check.html #, python-format msgid "Mark %(round)s as Completed" @@ -664,17 +683,12 @@ msgstr[0] "" msgstr[1] "" #: tournaments/templates/round_complete_check.html -#, python-format -msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change which rounds are silent in the Edit Database area.

    " +msgid "

    This round is a silent round.

    Even though public view of results is enabled, results for this round will still be hidden from public view after completing this round.

    You can change whether this round is silent using the button above.

    " msgstr "" #: tournaments/templates/round_complete_check.html #, python-format -msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent in the Edit Database area.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " -msgstr "" - -#: tournaments/templates/set_current_round.html -msgid "Set Current Round" +msgid "

    Results for %(round)s will be published online once you mark this round as complete!

    This round is not a silent round, and public view of results is enabled.

    If you want to keep the results for just this round hidden, you can mark this round as silent using the button above.

    If you want to disable the public view of results, you can do so in the tournament configuration.

    " msgstr "" #: tournaments/templates/set_current_round.html @@ -696,6 +710,11 @@ msgstr "" msgid "The tournament %(tournament)s has no rounds. You'll need to add rounds and associate them with this tournament before you can set the current round." msgstr "" +#: tournaments/templates/set_current_round.html +msgctxt "button" +msgid "Set Current Rounds" +msgstr "" + #: tournaments/templates/set_round_weights.html msgctxt "page title" msgid "Set Round Weights for Tapered Scoring" @@ -762,7 +781,7 @@ msgstr "" #: tournaments/templates/tournament_index.html #, python-format -msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Note that if your tournament is run for profit, or for fundraising, making this payment is a mandatory condition of Tabbycat's software license. Learn more about donating." +msgid "We hope you've enjoyed using Tabbycat for your tournament. We would appreciate if you would make a donation to the project in order to support its ongoing development and maintenance. For a tournament of this size, we suggest a donation of $%(amount)s. Learn more about donating." msgstr "" #: tournaments/templates/tournament_index.html @@ -988,6 +1007,16 @@ msgstr "" msgid "R%(number)d" msgstr "" +#: tournaments/views.py +#, python-format +msgid "%(round)s has been marked as silent." +msgstr "" + +#: tournaments/views.py +#, python-format +msgid "%(round)s has been unmarked as silent." +msgstr "" + #: tournaments/views.py #, python-format msgid "%(round)s has been marked as completed. All rounds are now completed, so you're done with the tournament! Congratulations!" @@ -1025,6 +1054,10 @@ msgstr "" msgid "88-team BP dataset" msgstr "" +#: tournaments/views.py +msgid "Set Current Round" +msgstr "" + #: tournaments/views.py msgid "Successfully set round weights for tapered scoring." msgstr "" From c2c6a66bdd200af5c1de9f9000ccdb062311b813 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miha=20Frange=C5=BE?= Date: Sat, 8 Jul 2023 16:00:46 +0200 Subject: [PATCH 227/255] Fixed simple room importer crash --- tabbycat/importer/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tabbycat/importer/forms.py b/tabbycat/importer/forms.py index ef31dd6fca5..d10329280ba 100644 --- a/tabbycat/importer/forms.py +++ b/tabbycat/importer/forms.py @@ -153,7 +153,7 @@ class Meta: fields = ('name', 'priority') def save(self, commit=True): - venue = super().save(commit=False) + venue = super().save(commit=commit) if commit: VenueIdentifier.objects.create(venue=venue) return venue From 5991e7c0191803928e91016e3c89b72a78417dc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 22 Jul 2023 19:02:25 -0500 Subject: [PATCH 228/255] Use proper exception test format --- .../options/tests/management/commands/test_applypreset.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tabbycat/options/tests/management/commands/test_applypreset.py b/tabbycat/options/tests/management/commands/test_applypreset.py index b32d92d2166..3c87903dc11 100644 --- a/tabbycat/options/tests/management/commands/test_applypreset.py +++ b/tabbycat/options/tests/management/commands/test_applypreset.py @@ -24,14 +24,14 @@ class ApplyPresetTests(TestCase): def test_preset_options(self, mock_all_presets): with self.assertRaises(CommandError) as cm: Command().create_parser('', '').parse_args(['notvalidpreset']) - self.assertEqual(str(cm), "Error: argument preset: invalid choice: 'notvalidpreset' (choose from 'testpreset')") + self.assertEqual(str(cm.exception), "Error: argument preset: invalid choice: 'notvalidpreset' (choose from 'testpreset')") @patch('options.management.commands.applypreset.all_presets', return_value=[TestPreset]) def test_set_invalid_preset(self, mock_all_presets): tournament = Tournament.objects.create(slug="command", name="Command Testing") with self.assertRaises(CommandError) as cm: call_command('applypreset', ['-t', 'command', 'notvalidpreset']) - self.assertEqual(str(cm), "Error: argument preset: invalid choice: 'notvalidpreset' (choose from 'testpreset')") + self.assertEqual(str(cm.exception), "Error: argument preset: invalid choice: 'notvalidpreset' (choose from 'testpreset')") tournament.delete() @patch('options.management.commands.applypreset.all_presets', return_value=[TestPreset]) From d2a2d04fcffcd354f4b94f007bbb398192cf1845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 22 Jul 2023 19:20:04 -0500 Subject: [PATCH 229/255] Improve messaging --- tabbycat/options/templates/preset_edit.html | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/tabbycat/options/templates/preset_edit.html b/tabbycat/options/templates/preset_edit.html index dee80b7aec7..3fc15d95d84 100644 --- a/tabbycat/options/templates/preset_edit.html +++ b/tabbycat/options/templates/preset_edit.html @@ -15,21 +15,22 @@ {% endif %}
    + {% csrf_token %} {% regroup form.visible_fields|dictsort:"changed" by changed as preferences_grouped %} {% for changed, preferences in preferences_grouped reversed %} {% if preferences|length > 0 %} {% if changed %} {% blocktranslate trimmed count counter=preferences|length asvar title %} - Preference that will change ({{ counter }}) + This preference will be changed {% plural %} - Preferences that will change ({{ counter }}) + These {{ counter }} preferences will be changed {% endblocktranslate %} {% else %} {% blocktranslate trimmed count counter=preferences|length asvar title %} - Preference that will not change ({{ counter }}) + This preference will not change {% plural %} - Preferences that will not change ({{ counter }}) + These {{ counter }} preferences will not change {% endblocktranslate %} {% endif %} {% include "preferences_state.html" %} @@ -43,12 +44,9 @@
    -
      -
    • - {% csrf_token %} - -
    • -
    + {% trans "Apply Changes" as title %} + {% trans "Presets are provided as a convenience only and may not be up to date with a debating format's rules or the expectations of your circuit. Please double-check everything to ensure it matches your needs." as subtitle %} + {% include "components/form-submit.html" %}
    {% endblock content %} From 9ae92a730a4cd7fc5e0d4fc62c32b23637321f72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 23 Jul 2023 09:44:44 -0500 Subject: [PATCH 230/255] Add tests for preference validations --- tabbycat/options/tests/test_forms.py | 39 ++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tabbycat/options/tests/test_forms.py b/tabbycat/options/tests/test_forms.py index 096908ccc6c..c50bfb8900d 100644 --- a/tabbycat/options/tests/test_forms.py +++ b/tabbycat/options/tests/test_forms.py @@ -1,9 +1,12 @@ import unittest from unittest.mock import patch +from django.core.exceptions import ValidationError +from django.test import TestCase from dynamic_preferences.forms import GlobalPreferenceForm from options.forms import tournament_preference_form_builder +from tournaments.models import Tournament class FormBuilderTest(unittest.TestCase): @@ -12,3 +15,39 @@ class FormBuilderTest(unittest.TestCase): def test_create_global_form(self, mock_builder): tournament_preference_form_builder(None, section='global') mock_builder.assert_called_with(GlobalPreferenceForm, [], section='global') + + +class TournamentPreferenceFormTests(TestCase): + + def setUp(self): + self.tournament = Tournament.objects.create() + + def tearDown(self): + self.tournament.delete() + + def test_falsy_preference_change(self): + # Test that get_pref() doesn't get the current value if falsy in the posted data + form = tournament_preference_form_builder(self.tournament, section='data_entry')() + self.tournament.preferences['data_entry__public_use_password'] = False + form.cleaned_data = {'data_entry__public_use_password': True, 'data_entry__public_password': ''} + with self.assertRaises(ValidationError) as cm: + form.clean() + self.assertIsNotNone(cm.exception.args[0].get('data_entry__public_password')) + + def test_validation_between_prefs(self): + tests = [ + ('scoring', (('score_min', 100), ('score_max', 0))), + ('scoring', (('reply_score_min', 100), ('reply_score_max', 0))), + ('feedback', (('adj_min_score', 100), ('adj_max_score', 0))), + ('draw_rules', (('draw_side_allocations', 'balance'), ('draw_odd_bracket', 'intermediate1'))), + ('debate_rules', (('ballots_per_debate_prelim', 'per-adj'), ('teams_in_debate', 'bp'))), + ('data_entry', (('public_use_password', True), ('public_password', ''))), + ('ui_options', (('team_code_names', 'everywhere'), ('show_team_institutions', True))), + ] + for section, prefs in tests: + with self.subTest(section=section, prefs=[p[0] for p in prefs]): + form = tournament_preference_form_builder(self.tournament, section=section)() + form.cleaned_data = {section + "__" + pref: val for pref, val in prefs} + with self.assertRaises(ValidationError) as cm: + form.clean() + self.assertIsNotNone(cm.exception.args[0].get(section + "__" + prefs[-1][0])) From 88662b6aff033e047d0fd8f73408a53be42ea01e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 2 Jul 2023 16:17:33 -0300 Subject: [PATCH 231/255] Support merging consensus ballots This commit implements a merging strategy for consensus ballots, making sure that speaker order, ghosts, as well as declared winners and speaker scores, are identical, lest an error be raised. Now, rather than aborting the merge when an error is detected, the error(s) are applied to the new ballot, blanking the fields that were errored. It also shows more general errors of the detected divergences, rather than pointing out where it thinks the error was made. That wasn't needed anymore as the specific fields are now obvious. If the speaker order is inconsistent, should also throw out the scores since they may have been assigned to the wrong speaker. --- tabbycat/motions/utils.py | 4 +- tabbycat/results/result.py | 94 ++++++++++++++++++++++++++++++++------ tabbycat/results/views.py | 28 ++++-------- 3 files changed, 90 insertions(+), 36 deletions(-) diff --git a/tabbycat/motions/utils.py b/tabbycat/motions/utils.py index 3bcf4f94f48..c710f57f487 100644 --- a/tabbycat/motions/utils.py +++ b/tabbycat/motions/utils.py @@ -8,7 +8,7 @@ def merge_motions(new_bs, bses): n_motions = bses.aggregate(n_motions=Count('motion', distinct=True))['n_motions'] if n_motions > 1: - raise ValidationError(_("Not all latest ballots list the same motion, so could not be merged.")) + raise ValidationError(_("Not all latest ballots have the same motion. The correct motion must be set manually.")) elif n_motions == 1: new_bs.motion = bses[0].motion @@ -26,7 +26,7 @@ def merge_motion_vetos(new_bs, bses): if len({p[0] for p in preferences}) != len(preferences): # If a team is repeated, means different values were given and the length of both sets would # be different. First term could just be "2" (expected to be {'aff', 'neg'}). - raise ValidationError(_("Motion vetos are inconsistent, so could not be merged.")) + raise ValidationError(_("Motion vetos are inconsistent; they must be set manually.")) for dt, side, motion, preference in preferences: vetos[side] = DebateTeamMotionPreference( diff --git a/tabbycat/results/result.py b/tabbycat/results/result.py index 63d024e48a4..7d11f8abb7c 100644 --- a/tabbycat/results/result.py +++ b/tabbycat/results/result.py @@ -42,6 +42,7 @@ from functools import wraps from itertools import product from statistics import mean +from typing import TYPE_CHECKING from adjallocation.allocation import AdjudicatorAllocation from adjallocation.models import DebateAdjudicator @@ -51,6 +52,9 @@ ResultOnlyScoresheet, TiedPointWinsAllowedScoresheet) from .utils import side_and_position_names +if TYPE_CHECKING: + from participants.models import Adjudicator + logger = logging.getLogger(__name__) @@ -445,13 +449,27 @@ def load_scoresheets(self): for tsba in teamscorebyadjs: self.add_winner(tsba.debate_adjudicator.adjudicator, tsba.debate_team.side) - def populate_from_merge(self, *results): + def populate_from_merge(self, *results) -> list[ResultError]: + errors = [] for result in results: adj = result.ballotsub.participant_submitter.adjudicator - self.merge_speaker_result(result, adj) + errors.extend(self.merge_speaker_result(result, adj)) if self.get_scoresheet_class().uses_declared_winners: self.set_winners(adj, result.scoresheet.winners()) + for error in errors: + key, side, pos = error.args[1:] + + # Clear ghosts for speaker order problems too + self.set_ghost(side, pos, False) + + if key == 'speaker': + self.set_speaker(side, pos, None) + for adj in self.debateadjs: + self.set_score(adj, side, pos, None) + + return errors + def merge_speaker_result(self, result, adj): pass @@ -680,6 +698,23 @@ def identical(self, other): return False return True + def merge_speaker_order(self, result: BaseDebateResult) -> list[ResultError]: + errors = [] + for side, pos in product(self.sides, self.positions): + cur_speaker = self.get_speaker(side, pos) + if cur_speaker is None: + self.set_speaker(side, pos, result.get_speaker(side, pos)) + elif result.get_speaker(side, pos) != cur_speaker: + errors.append(ResultError("Inconsistent speaker order", "speaker", side, pos)) + continue # Don't care about setting ghost/score if can't attribute to the correct speaker + + if not self.get_ghost(side, pos) and result.get_ghost(side, pos): + self.set_ghost(side, pos, result.get_ghost(side, pos)) + elif self.get_ghost(side, pos) and not result.get_ghost(side, pos): + errors.append(ResultError("Inconsistent ghost order", "ghost", side, pos)) + + return errors + # -------------------------------------------------------------------------- # Load and save methods # -------------------------------------------------------------------------- @@ -724,7 +759,7 @@ def set_speaker(self, side, position, speaker): if self.debateteams[side] is None: raise TypeError("Set sides using self.set_sides() before setting speakers") team = self.debateteams[side].team - if speaker not in team.speakers: + if speaker is not None and speaker not in team.speakers: logger.error("Speaker %s isn't in team %s", speaker.name, team.short_name) return self.speakers[side][position] = speaker @@ -883,6 +918,35 @@ def get_ranked_dt(self): def identical(self, other): return super().identical(other) and hasattr(other, 'scoresheet') and self.scoresheet.identical(other.scoresheet) + def populate_from_merge(self, *results) -> list[ResultError]: + errors = [] + for result in results: + errors.extend(self.merge_speaker_result(result)) + if self.get_scoresheet_class().uses_declared_winners: + if self.get_winner() is None: + self.set_winners(result.scoresheet.winners()) + elif self.get_winner() != result.scoresheet.winners(): + errors.append(ResultError("Winners are not identical", "winners", result.scoresheet.winners(), None)) + + for error in errors: + key, side, pos = error.args[1:] + + if key == 'winners': + self.set_winners(set()) + + # Clear ghosts for speaker order problems too + if key in ('ghost', 'speaker', 'scores'): + self.set_ghost(side, pos, False) + + if key in ('speaker', 'scores'): + self.set_speaker(side, pos, None) + self.set_score(side, pos, None) + + return errors + + def merge_speaker_result(self, result): + pass + # -------------------------------------------------------------------------- # Team score fields # -------------------------------------------------------------------------- @@ -928,6 +992,15 @@ def load_scoresheets(self): def set_score(self, side, position, score): self.scoresheet.set_score(side, position, score) + def merge_speaker_result(self, result: BaseDebateResult) -> list[ResultError]: + errors = self.merge_speaker_order(result) + for side, pos in product(self.sides, self.positions): + if self.get_score(side, pos) is None: + self.set_score(side, pos, result.get_score(side, pos)) + elif self.get_score(side, pos) != result.get_score(side, pos): + errors.append(ResultError('Scores are not identical', 'scores', side, pos)) + return errors + # -------------------------------------------------------------------------- # Model fields # -------------------------------------------------------------------------- @@ -969,20 +1042,11 @@ def load_scoresheets(self): self.set_score(ssba.debate_adjudicator.adjudicator, ssba.debate_team.side, ssba.position, ssba.score) - def merge_speaker_result(self, result, adj): + def merge_speaker_result(self, result: BaseDebateResult, adj: 'Adjudicator') -> list[ResultError]: + errors = self.merge_speaker_order(result) for side, pos in product(self.sides, self.positions): - cur_speaker = self.get_speaker(side, pos) - if cur_speaker is None: - self.set_speaker(side, pos, result.get_speaker(side, pos)) - elif result.get_speaker(side, pos) != cur_speaker: - raise ResultError("Inconsistent speaker order", "speaker", adj, result.ballotsub, side, cur_speaker) - - if not self.get_ghost(side, pos): - self.set_ghost(side, pos, result.get_ghost(side, pos)) - elif not result.get_ghost(side, pos): - raise ResultError("Inconsistent ghost order", "ghost", adj, result.ballotsub, side, cur_speaker) - self.set_score(adj, side, pos, result.get_score(side, pos)) + return errors def save(self): super().save() diff --git a/tabbycat/results/views.py b/tabbycat/results/views.py index 1d6d189db19..abdfa59a074 100644 --- a/tabbycat/results/views.py +++ b/tabbycat/results/views.py @@ -1,4 +1,5 @@ import logging +from itertools import groupby from asgiref.sync import async_to_sync from channels.layers import get_channel_layer @@ -40,7 +41,7 @@ SingleEliminationBallotSetForm) from .models import BallotSubmission, TeamScore from .prefetch import populate_confirmed_ballots, populate_results -from .result import DebateResult, get_class_name, ResultError +from .result import DebateResult, get_class_name from .tables import ResultsTableBuilder from .utils import get_status_meta, populate_identical_ballotsub_lists @@ -864,7 +865,6 @@ def get_form_kwargs(self): def populate_objects(self, prefill=True): super().populate_objects() - use_code_names = use_team_code_names_data_entry(self.tournament, True) self.round = self.debate.round bses = BallotSubmission.objects.filter( @@ -875,23 +875,15 @@ def populate_objects(self, prefill=True): # Handle result conflicts self.result = DebateResult(self.ballotsub, tournament=self.tournament) - try: - self.result.populate_from_merge(*[b.result for b in bses]) - except ResultError as e: - msg, t, adj, bs, side, speaker = e.args - args = { - 'ballot_url': reverse_tournament(self.edit_ballot_url, self.tournament, kwargs={'pk': bs.id}), - 'adjudicator': adj.name, - 'speaker': speaker.name, - 'team': team_name_for_data_entry(self.debate.get_team(side), use_code_names), - } + errors = self.result.populate_from_merge(*[b.result for b in bses]) + for t, errors in groupby(errors, key=lambda e: e.args[1]): if t == 'speaker': - msg = _("The speaking order in the ballots is inconsistent, so could not be merged.") + msg = _("The speaking order in the ballots is inconsistent. Affected speakers are blanked. Make sure the speaker order and scores are correct.") elif t == 'ghost': - msg = _("Duplicate speeches are marked inconsistently, so could not be merged.") - msg += _(" This error was caught in %(adjudicator)s's ballot for %(speaker)s (%(team)s).") - messages.error(self.request, msg % args) - return HttpResponseRedirect(self.get_list_url()) + msg = _("Duplicate speeches are marked inconsistently, so could not be consolidated. Make sure speeches are marked according to the tournament's rules.") + elif t == 'scores': + msg = _("Some scores were not identical, and so are left blank. Make sure the speaker order and scores are correct.") + messages.error(self.request, msg) # Handle motion conflicts bs_motions = BallotSubmission.objects.filter( @@ -902,14 +894,12 @@ def populate_objects(self, prefill=True): merge_motions(self.ballotsub, bs_motions) except ValidationError as e: messages.error(self.request, e) - return HttpResponseRedirect(self.get_list_url()) # Vetos try: self.vetos = merge_motion_vetos(self.ballotsub, bs_motions) except ValidationError as e: messages.error(self.request, e) - return HttpResponseRedirect(self.get_list_url()) def get_all_ballotsubs(self): q = super().get_all_ballotsubs() From 77432c339783280e9c2a8e0b908bb68c40d4e7a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Mon, 24 Jul 2023 14:27:03 -0400 Subject: [PATCH 232/255] Convert TeamScore by adjudicator migration to SQL This commit changes the Python script for populating the TeamScoreByAdj table into a SQL query which uses GROUP BY to combine the SpeakerScore- ByAdj records into DebateTeam. --- .../migrations/0004_create_teamscorebyadj.py | 37 ++----------------- 1 file changed, 3 insertions(+), 34 deletions(-) diff --git a/tabbycat/results/migrations/0004_create_teamscorebyadj.py b/tabbycat/results/migrations/0004_create_teamscorebyadj.py index cd900266858..daa3e20e446 100644 --- a/tabbycat/results/migrations/0004_create_teamscorebyadj.py +++ b/tabbycat/results/migrations/0004_create_teamscorebyadj.py @@ -5,37 +5,6 @@ import results.models -def populate_teamscorebyadj(apps, schema_editor): - SpeakerScoreByAdj = apps.get_model("results", "speakerscorebyadj") - TeamScoreByAdj = apps.get_model("results", "teamscorebyadj") - - ss_query = SpeakerScoreByAdj.objects.all().order_by( - 'ballot_submission_id', 'debate_adjudicator_id', 'debate_team_id' - ).values() - - # Create nested dicts {ballot: {adj: {team: score, ...}, ...}, ...} - ss_by_ballot = {} - for key, group in itertools.groupby(ss_query, lambda ss: ss["ballot_submission_id"]): - ss_by_adj = {} - for adj_key, adj_group in itertools.groupby(group, lambda ss: ss["debate_adjudicator_id"]): - s = {team_key: sum(t["score"] for t in team_group) for team_key, team_group in itertools.groupby(adj_group, lambda ss: ss["debate_team_id"])} - ss_by_adj[adj_key] = s - ss_by_ballot[key] = ss_by_adj - - # Calculate win/margin (2-team formats only) & add TSA object - teamscores = [] - for ballot, adjs_scores in ss_by_ballot.items(): - for adj, teams in adjs_scores.items(): - winner = max(teams.items(), key=(lambda v: v[1]))[0] - margin = max(teams.values()) - min(teams.values()) - for team, score in teams.items(): - tsa = TeamScoreByAdj(ballot_submission_id=ballot, debate_adjudicator_id=adj, debate_team_id=team, score=score) - tsa.win = team == winner - tsa.margin = margin if tsa.win else -margin - teamscores.append(tsa) - TeamScoreByAdj.objects.bulk_create(teamscores) - - class Migration(migrations.Migration): dependencies = [ @@ -69,8 +38,8 @@ class Migration(migrations.Migration): name='teamscorebyadj', index_together={('ballot_submission', 'debate_adjudicator')}, ), - migrations.RunPython( - populate_teamscorebyadj, - lambda apps, schema_editor: apps.get_model("results", "teamscorebyadj").objects.all().delete(), + migrations.RunSQL( + "WITH tadj AS (SELECT SUM(score) score, ballot_submission_id, debate_adjudicator_id, debate_team_id FROM results_speakerscorebyadj GROUP BY ballot_submission_id, debate_adjudicator_id, debate_team_id) INSERT INTO results_teamscorebyadj (win, margin, score, ballot_submission_id, debate_adjudicator_id, debate_team_id) SELECT score = max_score, CASE WHEN score = max_score THEN max_score - min_score ELSE min_score - max_score END, t.score, t.ballot_submission_id, t.debate_adjudicator_id, debate_team_id FROM tadj t INNER JOIN (SELECT MAX(score) max_score, MIN(score) min_score, ballot_submission_id, debate_adjudicator_id FROM tadj GROUP BY ballot_submission_id, debate_adjudicator_id) b ON t.ballot_submission_id=b.ballot_submission_id AND t.debate_adjudicator_id=b.debate_adjudicator_id;", + migrations.RunSQL.noop, ), ] From 6273e800d57e2aaae3d84da02890ac34847749e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Mon, 7 Aug 2023 14:24:51 -0300 Subject: [PATCH 233/255] API: PATCH for conflicts keep existing ones This commit changes the behaviour when using PATCH to change conflicts on the /adjudicators and /teams endpoints. Rather than deleting existing conflicts, PATCH should merely add the new ones to the object. This also makes the behaviour more consistent with speaker/team categories and other M2Ms. --- tabbycat/api/serializers.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tabbycat/api/serializers.py b/tabbycat/api/serializers.py index 33c1c1278f6..f26688b7a96 100644 --- a/tabbycat/api/serializers.py +++ b/tabbycat/api/serializers.py @@ -579,6 +579,11 @@ def update(self, instance, validated_data): vc._validated_data = venue_constraints # Data was already validated vc.save(adjudicator=instance) + if self.partial: + # Avoid removing conflicts if merely PATCHing + for field in ['institution_conflicts', 'adjudicator_conflicts', 'team_conflicts']: + validated_data[field] = list(getattr(instance, field).all()) + validated_data.get(field, []) + return super().update(instance, validated_data) @@ -712,6 +717,10 @@ def update(self, instance, validated_data): vc._validated_data = venue_constraints # Data was already validated vc.save(institution=instance) + if self.partial: + # Avoid removing conflicts if merely PATCHing + validated_data['institution_conflicts'] = list(instance.institution_conflicts.all()) + validated_data.get('institution_conflicts', []) + return super().update(instance, validated_data) From f0ed2b272de4d15834d3cd505e5406e579c4b7e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 3 Sep 2023 16:03:19 -0300 Subject: [PATCH 234/255] Add missing key to draw options --- tabbycat/draw/generator/common.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tabbycat/draw/generator/common.py b/tabbycat/draw/generator/common.py index 2a61de6ea3c..6b31bf373ee 100644 --- a/tabbycat/draw/generator/common.py +++ b/tabbycat/draw/generator/common.py @@ -167,6 +167,7 @@ class BasePairDrawGenerator(BaseDrawGenerator): "side_penalty" : 0, "pullup_debates_penalty": 0, "pairing_penalty" : 0, + "avoid_conflicts" : "off", } TEAMS_PER_DEBATE = 2 From 6cd5eed15c6bf0a4aebfa2a9fd7d6628e756c11b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Wed, 30 Aug 2023 21:00:00 -0300 Subject: [PATCH 235/255] API: Create new endpoints for User objects --- tabbycat/api/serializers.py | 17 +++++++++++++++++ tabbycat/api/tests/test_views.py | 1 + tabbycat/api/urls.py | 10 ++++++++-- tabbycat/api/views.py | 15 +++++++++++++++ 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/tabbycat/api/serializers.py b/tabbycat/api/serializers.py index 33c1c1278f6..4675b1504fe 100644 --- a/tabbycat/api/serializers.py +++ b/tabbycat/api/serializers.py @@ -2,6 +2,7 @@ from collections.abc import Mapping from functools import partialmethod +from django.contrib.auth import get_user_model from django.core.exceptions import ValidationError as DjangoValidationError from django.db import IntegrityError from django.db.models import QuerySet @@ -55,6 +56,7 @@ class V1RootSerializer(serializers.Serializer): class V1LinksSerializer(serializers.Serializer): tournaments = serializers.HyperlinkedIdentityField(view_name='api-tournament-list') institutions = serializers.HyperlinkedIdentityField(view_name='api-global-institution-list') + users = serializers.HyperlinkedIdentityField(view_name='api-users-list') _links = V1LinksSerializer(source='*', read_only=True) @@ -1367,3 +1369,18 @@ class Meta: class Meta: model = Team fields = ('team', 'rounds') + + +class UserSerializer(serializers.ModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='api-users-detail') + + class Meta: + model = get_user_model() + fields = ('url', 'id', 'username', 'password', 'email', 'is_staff', 'is_superuser', 'is_active') + + def create(self, validated_data): + user = self.Meta.model(**validated_data) + user.set_password(validated_data['password']) + user.save() + + return user diff --git a/tabbycat/api/tests/test_views.py b/tabbycat/api/tests/test_views.py index 0862d5d2285..96ea48589b8 100644 --- a/tabbycat/api/tests/test_views.py +++ b/tabbycat/api/tests/test_views.py @@ -32,6 +32,7 @@ def test_get_v1_root(self): "_links": { "tournaments": "http://testserver/api/v1/tournaments", "institutions": "http://testserver/api/v1/institutions", + "users": "http://testserver/api/v1/users", }, }) diff --git a/tabbycat/api/urls.py b/tabbycat/api/urls.py index f2acc5f5c8a..5fc195e9e0b 100644 --- a/tabbycat/api/urls.py +++ b/tabbycat/api/urls.py @@ -227,8 +227,6 @@ path('/', include(pref_router.urls)), # Preferences ])), - - ])), path('/institutions', include([ path('', @@ -238,5 +236,13 @@ views.GlobalInstitutionViewSet.as_view(detail_methods), name='api-global-institution-detail'), ])), + path('/users', include([ + path('', + views.UserViewSet.as_view(list_methods), + name='api-users-list'), + path('/', + views.UserViewSet.as_view({'get': 'retrieve', 'delete': 'destroy'}), + name='api-users-detail'), + ])), ])), ] diff --git a/tabbycat/api/views.py b/tabbycat/api/views.py index 05407294d58..20319d2dfff 100644 --- a/tabbycat/api/views.py +++ b/tabbycat/api/views.py @@ -82,10 +82,12 @@ def get(self, request, format=None): """Entrypoint for version 1 of the API""" tournaments_create_url = reverse('api-tournament-list', request=request, format=format) institution_create_url = reverse('api-global-institution-list', request=request, format=format) + users_create_url = reverse('api-users-list', request=request, format=format) return Response({ "_links": { "tournaments": tournaments_create_url, "institutions": institution_create_url, + "users": users_create_url, }, }) @@ -1091,3 +1093,16 @@ def add_blank(self, request, *args, **kwargs): }) return self.get(request, *args, **kwargs) + + +@extend_schema(tags=['users']) +@extend_schema_view( + list=extend_schema(summary="Get users"), + create=extend_schema(summary="Create user"), + retrieve=extend_schema(summary="Get user", parameters=[id_parameter]), +) +class UserViewSet(AdministratorAPIMixin, ModelViewSet): + serializer_class = serializers.UserSerializer + + def get_queryset(self): + return self.get_serializer_class().Meta.model.objects.all() From 0b2a1612cba94385c356e37fc1e4753a61e61d1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 2 Sep 2023 22:28:18 -0300 Subject: [PATCH 236/255] Create new type for automated submissions This commit creates a new submission type for when Tabbycat creates ballots or feedback automatically. This is in view of creating ballots automatically for byes. This is required for creating TeamScore objects, as they would get a win. It also updates the choices list to be an enumeration (as TextChoices), which is Django's new style. --- tabbycat/adjfeedback/dbutils.py | 2 +- .../management/commands/generatefeedback.py | 4 ++-- ...lter_adjudicatorfeedback_submitter_type.py | 21 +++++++++++++++++++ tabbycat/adjfeedback/tests/test_progress.py | 2 +- tabbycat/importer/archive.py | 4 ++-- tabbycat/results/dbutils.py | 2 +- .../management/commands/generateresults.py | 4 ++-- ...5_alter_ballotsubmission_submitter_type.py | 21 +++++++++++++++++++ tabbycat/results/mixins.py | 4 ++-- tabbycat/results/models.py | 14 ++++++------- .../templates/ballot/other_ballots_list.html | 4 ++-- tabbycat/results/tests/test_result.py | 2 +- tabbycat/results/views.py | 4 ++-- 13 files changed, 64 insertions(+), 24 deletions(-) create mode 100644 tabbycat/adjfeedback/migrations/0014_alter_adjudicatorfeedback_submitter_type.py create mode 100644 tabbycat/results/migrations/0015_alter_ballotsubmission_submitter_type.py diff --git a/tabbycat/adjfeedback/dbutils.py b/tabbycat/adjfeedback/dbutils.py index 8261f47b6e3..1fedf3f2bd2 100644 --- a/tabbycat/adjfeedback/dbutils.py +++ b/tabbycat/adjfeedback/dbutils.py @@ -115,7 +115,7 @@ def add_feedback(debate, submitter_type, user, probability=1.0, discarded=False, continue fb = fm.AdjudicatorFeedback(submitter_type=submitter_type) - if submitter_type == fm.AdjudicatorFeedback.SUBMITTER_TABROOM: + if submitter_type == fm.AdjudicatorFeedback.Submitter.TABROOM: fb.submitter = user fb.adjudicator = adj diff --git a/tabbycat/adjfeedback/management/commands/generatefeedback.py b/tabbycat/adjfeedback/management/commands/generatefeedback.py index e902f542238..bb045b94614 100644 --- a/tabbycat/adjfeedback/management/commands/generatefeedback.py +++ b/tabbycat/adjfeedback/management/commands/generatefeedback.py @@ -11,8 +11,8 @@ OBJECT_TYPE_CHOICES = ["round", "debate"] SUBMITTER_TYPE_MAP = { - 'tabroom': AdjudicatorFeedback.SUBMITTER_TABROOM, - 'public': AdjudicatorFeedback.SUBMITTER_PUBLIC, + 'tabroom': AdjudicatorFeedback.Submitter.TABROOM, + 'public': AdjudicatorFeedback.Submitter.PUBLIC, } User = get_user_model() diff --git a/tabbycat/adjfeedback/migrations/0014_alter_adjudicatorfeedback_submitter_type.py b/tabbycat/adjfeedback/migrations/0014_alter_adjudicatorfeedback_submitter_type.py new file mode 100644 index 00000000000..3d89c917ecb --- /dev/null +++ b/tabbycat/adjfeedback/migrations/0014_alter_adjudicatorfeedback_submitter_type.py @@ -0,0 +1,21 @@ +# Generated by Django 4.1.7 on 2023-09-03 01:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("adjfeedback", "0013_alter_adjudicatorfeedback_confirmer_and_more"), + ] + + operations = [ + migrations.AlterField( + model_name="adjudicatorfeedback", + name="submitter_type", + field=models.CharField( + choices=[("T", "Tab room"), ("P", "Public"), ("A", "Automation")], + max_length=1, + verbose_name="submitter type", + ), + ), + ] diff --git a/tabbycat/adjfeedback/tests/test_progress.py b/tabbycat/adjfeedback/tests/test_progress.py index 24e9314f51b..61a1b80d91e 100644 --- a/tabbycat/adjfeedback/tests/test_progress.py +++ b/tabbycat/adjfeedback/tests/test_progress.py @@ -89,7 +89,7 @@ def _create_debate(self, teams, adjs, votes, trainees=[], venue=None): DebateAdjudicator.objects.create(debate=debate, adjudicator=trainee, type=DebateAdjudicator.TYPE_TRAINEE) - ballotsub = BallotSubmission(debate=debate, submitter_type=BallotSubmission.SUBMITTER_TABROOM) + ballotsub = BallotSubmission(debate=debate, submitter_type=BallotSubmission.Submitter.TABROOM) result = DebateResultByAdjudicatorWithScores(ballotsub) for t, side in zip(teams, ('aff', 'neg')): diff --git a/tabbycat/importer/archive.py b/tabbycat/importer/archive.py index 603bb22e3ab..8044850051b 100644 --- a/tabbycat/importer/archive.py +++ b/tabbycat/importer/archive.py @@ -621,7 +621,7 @@ def import_results(self): for debate in round.findall('debate'): bs_obj = BallotSubmission( - version=1, submitter_type=Submission.SUBMITTER_TABROOM, confirmed=True, + version=1, submitter_type=Submission.Submitter.TABROOM, confirmed=True, debate=self.debates[debate.get('id')], motion=self.motions.get(debate.get('motion'))) bs_obj.save() dr = DebateResult(bs_obj) @@ -668,7 +668,7 @@ def import_feedback(self): d_team = self.debateteams.get((feedback.get('debate'), feedback.get('source-team'))) feedback_obj = AdjudicatorFeedback(adjudicator=adj_obj, score=feedback.get('score'), version=1, source_adjudicator=d_adj, source_team=d_team, - submitter_type=Submission.SUBMITTER_TABROOM, confirmed=True) + submitter_type=Submission.Submitter.TABROOM, confirmed=True) feedback_obj.save() for answer in feedback.findall('answer'): diff --git a/tabbycat/results/dbutils.py b/tabbycat/results/dbutils.py index bf7095d6c22..0ce37695bd3 100644 --- a/tabbycat/results/dbutils.py +++ b/tabbycat/results/dbutils.py @@ -90,7 +90,7 @@ def add_result(debate, submitter_type, user, discarded=False, confirmed=False, r # Create a new BallotSubmission bsub = BallotSubmission(submitter_type=submitter_type, debate=debate) - if submitter_type == BallotSubmission.SUBMITTER_TABROOM: + if submitter_type == BallotSubmission.Submitter.TABROOM: bsub.submitter = user bsub.save() diff --git a/tabbycat/results/management/commands/generateresults.py b/tabbycat/results/management/commands/generateresults.py index 59250c11ea8..68a00820370 100644 --- a/tabbycat/results/management/commands/generateresults.py +++ b/tabbycat/results/management/commands/generateresults.py @@ -9,8 +9,8 @@ OBJECT_TYPE_CHOICES = ["round", "debate"] SUBMITTER_TYPE_MAP = { - 'tabroom': BallotSubmission.SUBMITTER_TABROOM, - 'public': BallotSubmission.SUBMITTER_PUBLIC, + 'tabroom': BallotSubmission.Submitter.TABROOM, + 'public': BallotSubmission.Submitter.PUBLIC, } User = get_user_model() diff --git a/tabbycat/results/migrations/0015_alter_ballotsubmission_submitter_type.py b/tabbycat/results/migrations/0015_alter_ballotsubmission_submitter_type.py new file mode 100644 index 00000000000..fdd5464e00c --- /dev/null +++ b/tabbycat/results/migrations/0015_alter_ballotsubmission_submitter_type.py @@ -0,0 +1,21 @@ +# Generated by Django 4.1.7 on 2023-09-03 01:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("results", "0014_speakerscore_rank"), + ] + + operations = [ + migrations.AlterField( + model_name="ballotsubmission", + name="submitter_type", + field=models.CharField( + choices=[("T", "Tab room"), ("P", "Public"), ("A", "Automation")], + max_length=1, + verbose_name="submitter type", + ), + ), + ] diff --git a/tabbycat/results/mixins.py b/tabbycat/results/mixins.py index b0c24d87da0..74451e3bd65 100644 --- a/tabbycat/results/mixins.py +++ b/tabbycat/results/mixins.py @@ -15,7 +15,7 @@ def get_submitter_fields(self): request = self.get_request() return { 'submitter': request.user, - 'submitter_type': Submission.SUBMITTER_TABROOM, + 'submitter_type': Submission.Submitter.TABROOM, 'ip_address': get_ip_address(request), } @@ -27,6 +27,6 @@ class PublicSubmissionFieldsMixin: def get_submitter_fields(self): return { - 'submitter_type': Submission.SUBMITTER_PUBLIC, + 'submitter_type': Submission.Submitter.PUBLIC, 'ip_address': get_ip_address(self.request), } diff --git a/tabbycat/results/models.py b/tabbycat/results/models.py index ff59d82373d..4dcac686239 100644 --- a/tabbycat/results/models.py +++ b/tabbycat/results/models.py @@ -27,18 +27,16 @@ class Submission(models.Model): The unique_together class attribute of the Meta class MUST be set in all subclasses.""" - SUBMITTER_TABROOM = 'T' - SUBMITTER_PUBLIC = 'P' - SUBMITTER_TYPE_CHOICES = ( - (SUBMITTER_TABROOM, _("Tab room")), - (SUBMITTER_PUBLIC, _("Public")), - ) + class Submitter(models.TextChoices): + TABROOM = 'T', _("Tab room") + PUBLIC = 'P', _("Public") + AUTOMATION = 'A', _("Automation") timestamp = models.DateTimeField(auto_now_add=True, verbose_name=_("timestamp")) version = models.PositiveIntegerField( verbose_name=_("version")) - submitter_type = models.CharField(max_length=1, choices=SUBMITTER_TYPE_CHOICES, + submitter_type = models.CharField(max_length=1, choices=Submitter.choices, verbose_name=_("submitter type")) confirmed = models.BooleanField(default=False, verbose_name=_("confirmed")) @@ -99,7 +97,7 @@ def save(self, *args, **kwargs): def clean(self): super().clean() - if self.submitter_type == self.SUBMITTER_TABROOM and self.submitter is None: + if self.submitter_type == self.Submitter.TABROOM and self.submitter is None: raise ValidationError(_("A tab room ballot must have a user associated.")) diff --git a/tabbycat/results/templates/ballot/other_ballots_list.html b/tabbycat/results/templates/ballot/other_ballots_list.html index 39134f75b52..4a3f955081b 100644 --- a/tabbycat/results/templates/ballot/other_ballots_list.html +++ b/tabbycat/results/templates/ballot/other_ballots_list.html @@ -49,11 +49,11 @@

    Version {{ version }}, {% endblocktrans %} - {% if other.submitter_type == ballotsub.SUBMITTER_TABROOM %} + {% if other.submitter_type == ballotsub.Submitter.TABROOM %} {% blocktrans trimmed with submitter=other.submitter %} entered by {{ submitter }}, {% endblocktrans %} - {% elif other.submitter_type == ballotsub.SUBMITTER_PUBLIC %} + {% elif other.submitter_type == ballotsub.Submitter.PUBLIC %} {% if other.participant_submitter %} {% blocktrans trimmed with adjudicator=other.participant_submitter %} submitted from {{ adjudicator }}'s private URL, diff --git a/tabbycat/results/tests/test_result.py b/tabbycat/results/tests/test_result.py index f7de0b66561..0b5a81a8d10 100644 --- a/tabbycat/results/tests/test_result.py +++ b/tabbycat/results/tests/test_result.py @@ -141,7 +141,7 @@ def save_blank_result(self, nadjs=3, nspeakers=3): self.debate.ballotsubmission_set.update(confirmed=False) ballotsub = BallotSubmission.objects.create(debate=self.debate, confirmed=True, - submitter_type=BallotSubmission.SUBMITTER_TABROOM) + submitter_type=BallotSubmission.Submitter.TABROOM) return self.debate_result_class(ballotsub) diff --git a/tabbycat/results/views.py b/tabbycat/results/views.py index abdfa59a074..4272c672599 100644 --- a/tabbycat/results/views.py +++ b/tabbycat/results/views.py @@ -429,7 +429,7 @@ def get_error_url(self): def populate_objects(self, prefill=True): self.debate = self.object = self.get_object() self.ballotsub = BallotSubmission(debate=self.debate, submitter=self.request.user, - submitter_type=BallotSubmission.SUBMITTER_TABROOM, + submitter_type=BallotSubmission.Submitter.TABROOM, ip_address=get_ip_address(self.request)) if self.debate.round.ballots_per_debate == 'per-adj' and \ @@ -558,7 +558,7 @@ def populate_objects(self, prefill=True): self.debate = self.debateadj.debate self.ballotsub = BallotSubmission(debate=self.debate, ip_address=get_ip_address(self.request), - submitter_type=BallotSubmission.SUBMITTER_PUBLIC, single_adj=self.tournament.pref('individual_ballots'), + submitter_type=BallotSubmission.Submitter.PUBLIC, single_adj=self.tournament.pref('individual_ballots'), private_url=self.private_url, participant_submitter=self.object) self.round_motions = {} From 050fa110a38259297dbcadd5913b0dafcee897f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 2 Sep 2023 22:32:44 -0300 Subject: [PATCH 237/255] Create new debateteam side type This commit creates a new side type for DebateTeam objects for "Bye teams," which would be a single-team "debate". This is required to create fake results for that team. It also updates the choices list to be an enumeration (as TextChoices), which is Django's new style. --- tabbycat/adjfeedback/tests/test_progress.py | 4 +- tabbycat/api/serializers.py | 2 +- .../commands/generatesideallocations.py | 4 +- ...team_side_alter_teamsideallocation_side.py | 46 +++++++++++++++++++ tabbycat/draw/models.py | 29 ++++++------ tabbycat/draw/tests/test_views.py | 4 +- tabbycat/importer/archive.py | 2 +- tabbycat/importer/importers/anorak.py | 4 +- tabbycat/motions/tests/test_statistics.py | 4 +- tabbycat/results/tests/test_result.py | 2 +- tabbycat/standings/tests/test_standings.py | 10 ++-- .../tournaments/tests/test_round_checks.py | 4 +- tabbycat/tournaments/utils.py | 4 +- 13 files changed, 84 insertions(+), 35 deletions(-) create mode 100644 tabbycat/draw/migrations/0008_alter_debateteam_side_alter_teamsideallocation_side.py diff --git a/tabbycat/adjfeedback/tests/test_progress.py b/tabbycat/adjfeedback/tests/test_progress.py index 61a1b80d91e..b1b57e3f40b 100644 --- a/tabbycat/adjfeedback/tests/test_progress.py +++ b/tabbycat/adjfeedback/tests/test_progress.py @@ -73,9 +73,9 @@ def _create_debate(self, teams, adjs, votes, trainees=[], venue=None): aff, neg = teams aff_team = self._team(aff) - DebateTeam.objects.create(debate=debate, team=aff_team, side=DebateTeam.SIDE_AFF) + DebateTeam.objects.create(debate=debate, team=aff_team, side=DebateTeam.Side.AFF) neg_team = self._team(neg) - DebateTeam.objects.create(debate=debate, team=neg_team, side=DebateTeam.SIDE_NEG) + DebateTeam.objects.create(debate=debate, team=neg_team, side=DebateTeam.Side.NEG) chair = self._adj(adjs[0]) DebateAdjudicator.objects.create(debate=debate, adjudicator=chair, diff --git a/tabbycat/api/serializers.py b/tabbycat/api/serializers.py index ce06954d0b5..9b0813e315a 100644 --- a/tabbycat/api/serializers.py +++ b/tabbycat/api/serializers.py @@ -1087,7 +1087,7 @@ class ResultSerializer(serializers.Serializer): class SheetSerializer(serializers.Serializer): class TeamResultSerializer(serializers.Serializer): - side = serializers.ChoiceField(choices=DebateTeam.SIDE_CHOICES) + side = serializers.ChoiceField(choices=DebateTeam.Side.choices) points = serializers.IntegerField(required=False) win = serializers.BooleanField(required=False) score = serializers.FloatField(required=False, allow_null=True) diff --git a/tabbycat/draw/management/commands/generatesideallocations.py b/tabbycat/draw/management/commands/generatesideallocations.py index eb2b718ec2f..58147eb15d4 100644 --- a/tabbycat/draw/management/commands/generatesideallocations.py +++ b/tabbycat/draw/management/commands/generatesideallocations.py @@ -35,6 +35,6 @@ def handle_round(self, round, **options): self.stdout.write("{0:30} {1:30}".format(aff.short_name, neg.short_name)) for team in affs: - team.teamsideallocation_set.create(round=round, side=DebateTeam.SIDE_AFF) + team.teamsideallocation_set.create(round=round, side=DebateTeam.Side.AFF) for team in negs: - team.teamsideallocation_set.create(round=round, side=DebateTeam.SIDE_NEG) + team.teamsideallocation_set.create(round=round, side=DebateTeam.Side.NEG) diff --git a/tabbycat/draw/migrations/0008_alter_debateteam_side_alter_teamsideallocation_side.py b/tabbycat/draw/migrations/0008_alter_debateteam_side_alter_teamsideallocation_side.py new file mode 100644 index 00000000000..8f7c567308b --- /dev/null +++ b/tabbycat/draw/migrations/0008_alter_debateteam_side_alter_teamsideallocation_side.py @@ -0,0 +1,46 @@ +# Generated by Django 4.1.7 on 2023-09-03 01:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("draw", "0007_auto_20201003_0205"), + ] + + operations = [ + migrations.AlterField( + model_name="debateteam", + name="side", + field=models.CharField( + choices=[ + ("aff", "affirmative"), + ("neg", "negative"), + ("og", "opening government"), + ("oo", "opening opposition"), + ("cg", "closing government"), + ("co", "closing opposition"), + ("bye", "bye"), + ], + max_length=3, + verbose_name="side", + ), + ), + migrations.AlterField( + model_name="teamsideallocation", + name="side", + field=models.CharField( + choices=[ + ("aff", "affirmative"), + ("neg", "negative"), + ("og", "opening government"), + ("oo", "opening opposition"), + ("cg", "closing government"), + ("co", "closing opposition"), + ("bye", "bye"), + ], + max_length=3, + verbose_name="side", + ), + ), + ] diff --git a/tabbycat/draw/models.py b/tabbycat/draw/models.py index bea4301ab39..bee843165e3 100644 --- a/tabbycat/draw/models.py +++ b/tabbycat/draw/models.py @@ -253,18 +253,15 @@ def get_queryset(self): class DebateTeam(models.Model): - SIDE_AFF = 'aff' - SIDE_NEG = 'neg' - SIDE_OG = 'og' - SIDE_OO = 'oo' - SIDE_CG = 'cg' - SIDE_CO = 'co' - SIDE_CHOICES = ((SIDE_AFF, _("affirmative")), - (SIDE_NEG, _("negative")), - (SIDE_OG, _("opening government")), - (SIDE_OO, _("opening opposition")), - (SIDE_CG, _("closing government")), - (SIDE_CO, _("closing opposition"))) + + class Side(models.TextChoices): + AFF = 'aff', _("affirmative") + NEG = 'neg', _("negative") + OG = 'og', _("opening government") + OO = 'oo', _("opening opposition") + CG = 'cg', _("closing government") + CO = 'co', _("closing opposition") + BYE = 'bye', _("bye") objects = DebateTeamManager() @@ -272,7 +269,7 @@ class DebateTeam(models.Model): verbose_name=_("debate")) team = models.ForeignKey('participants.Team', models.PROTECT, verbose_name=_("team")) - side = models.CharField(max_length=3, choices=SIDE_CHOICES, + side = models.CharField(max_length=3, choices=Side.choices, verbose_name=_("side")) flags = ChoiceArrayField(base_field=models.CharField(max_length=15, choices=DRAW_FLAG_DESCRIPTIONS), blank=True, default=list) @@ -289,6 +286,10 @@ def opponent(self): try: return self._opponent except AttributeError: + if self.side == self.Side.BYE: + self._opponent = None + return self._opponent + try: self._opponent = DebateTeam.objects.exclude(side=self.side).select_related( 'team', 'team__institution').get(debate=self.debate) @@ -375,7 +376,7 @@ class TeamSideAllocation(models.Model): verbose_name=_("round")) team = models.ForeignKey('participants.Team', models.CASCADE, verbose_name=_("team")) - side = models.CharField(max_length=3, choices=DebateTeam.SIDE_CHOICES, + side = models.CharField(max_length=3, choices=DebateTeam.Side.choices, verbose_name=_("side")) class Meta: diff --git a/tabbycat/draw/tests/test_views.py b/tabbycat/draw/tests/test_views.py index 3ab59bbdee2..76d6f358e9b 100644 --- a/tabbycat/draw/tests/test_views.py +++ b/tabbycat/draw/tests/test_views.py @@ -172,8 +172,8 @@ def test_all_three_released(self): ngf_debate = self.ngf.debate_set.create() aff = self.tournament.team_set.get(id=4) neg = self.tournament.team_set.get(id=6) - ngf_debate.debateteam_set.create(team=aff, side=DebateTeam.SIDE_AFF) - ngf_debate.debateteam_set.create(team=neg, side=DebateTeam.SIDE_NEG) + ngf_debate.debateteam_set.create(team=aff, side=DebateTeam.Side.AFF) + ngf_debate.debateteam_set.create(team=neg, side=DebateTeam.Side.NEG) response = self.get_response('draw-public-current-rounds') self.assertResponseTableRowCountsEqual(response, [4, 2, 1]) diff --git a/tabbycat/importer/archive.py b/tabbycat/importer/archive.py index 8044850051b..080fc0ebc3b 100644 --- a/tabbycat/importer/archive.py +++ b/tabbycat/importer/archive.py @@ -576,7 +576,7 @@ def import_debates(self): # Debate-teams for j, side in enumerate(debate.findall('side'), side_start): - position = DebateTeam.SIDE_CHOICES[j][0] + position = list(DebateTeam.Side)[j][0] debateteam_obj = DebateTeam(debate=debate_obj, team=self.teams[side.get('team')], side=position) debateteam_obj.save() self.debateteams[(debate.get('id'), side.get('team'))] = debateteam_obj diff --git a/tabbycat/importer/importers/anorak.py b/tabbycat/importer/importers/anorak.py index f6e5d9c1bfb..551af1d0100 100644 --- a/tabbycat/importer/importers/anorak.py +++ b/tabbycat/importer/importers/anorak.py @@ -53,8 +53,8 @@ class AnorakTournamentDataImporter(BaseTournamentDataImporter): }) lookup_team_position = make_lookup("team position", { - ("affirmative", "aff", "a"): dm.DebateTeam.SIDE_AFF, - ("negative", "neg", "n"): dm.DebateTeam.SIDE_NEG, + ("affirmative", "aff", "a"): dm.DebateTeam.Side.AFF, + ("negative", "neg", "n"): dm.DebateTeam.Side.NEG, }) lookup_feedback_answer_type = make_lookup("feedback answer type", { diff --git a/tabbycat/motions/tests/test_statistics.py b/tabbycat/motions/tests/test_statistics.py index 477566f97ce..4c92ccdb5b2 100644 --- a/tabbycat/motions/tests/test_statistics.py +++ b/tabbycat/motions/tests/test_statistics.py @@ -21,8 +21,8 @@ def setUp(self): rd = Round.objects.create(tournament=self.tournament, seq=1) motion = Motion.objects.create(text="Motion", reference="Motion", tournament=self.tournament) debate = Debate.objects.create(round=rd) - dt1 = DebateTeam.objects.create(debate=debate, team=team1, side=DebateTeam.SIDE_AFF) - dt2 = DebateTeam.objects.create(debate=debate, team=team2, side=DebateTeam.SIDE_NEG) + dt1 = DebateTeam.objects.create(debate=debate, team=team1, side=DebateTeam.Side.AFF) + dt2 = DebateTeam.objects.create(debate=debate, team=team2, side=DebateTeam.Side.NEG) ballotsub = BallotSubmission.objects.create(debate=debate, motion=motion, confirmed=True) TeamScore.objects.create(debate_team=dt1, ballot_submission=ballotsub, margin=+2, points=1, score=101, win=True, votes_given=1, votes_possible=1) diff --git a/tabbycat/results/tests/test_result.py b/tabbycat/results/tests/test_result.py index 0b5a81a8d10..b4b53268d42 100644 --- a/tabbycat/results/tests/test_result.py +++ b/tabbycat/results/tests/test_result.py @@ -105,7 +105,7 @@ def setUp(self): rd = Round.objects.create(tournament=self.tournament, seq=1, abbreviation="R1") self.debate = Debate.objects.create(round=rd, venue=venue) - sides = [DebateTeam.SIDE_AFF, DebateTeam.SIDE_NEG] + sides = [DebateTeam.Side.AFF, DebateTeam.Side.NEG] for team, side in zip(Team.objects.all(), sides): DebateTeam.objects.create(debate=self.debate, team=team, side=side) diff --git a/tabbycat/standings/tests/test_standings.py b/tabbycat/standings/tests/test_standings.py index 23f850e84e9..4634e1535f1 100644 --- a/tabbycat/standings/tests/test_standings.py +++ b/tabbycat/standings/tests/test_standings.py @@ -30,8 +30,8 @@ def setUp(self): for i in [1, 2]: rd = Round.objects.create(tournament=self.tournament, seq=i) debate = Debate.objects.create(round=rd, flags=['pullup']) - dt1 = DebateTeam.objects.create(debate=debate, team=self.team1, side=DebateTeam.SIDE_AFF, flags=['pullup']) - dt2 = DebateTeam.objects.create(debate=debate, team=self.team2, side=DebateTeam.SIDE_NEG) + dt1 = DebateTeam.objects.create(debate=debate, team=self.team1, side=DebateTeam.Side.AFF, flags=['pullup']) + dt2 = DebateTeam.objects.create(debate=debate, team=self.team2, side=DebateTeam.Side.NEG) DebateAdjudicator.objects.create(debate=debate, adjudicator=adj, type=DebateAdjudicator.TYPE_CHAIR) ballotsub = BallotSubmission.objects.create(debate=debate, confirmed=True) TeamScore.objects.create(debate_team=dt1, ballot_submission=ballotsub, @@ -213,8 +213,8 @@ def set_up_ignorable_debate(self): adj = Adjudicator.objects.get() rd = Round.objects.create(tournament=self.tournament, seq=3) debate = Debate.objects.create(round=rd) - dt1 = DebateTeam.objects.create(debate=debate, team=self.team1, side=DebateTeam.SIDE_AFF) - dt2 = DebateTeam.objects.create(debate=debate, team=self.team2, side=DebateTeam.SIDE_NEG) + dt1 = DebateTeam.objects.create(debate=debate, team=self.team1, side=DebateTeam.Side.AFF) + dt2 = DebateTeam.objects.create(debate=debate, team=self.team2, side=DebateTeam.Side.NEG) DebateAdjudicator.objects.create(debate=debate, adjudicator=adj, type=DebateAdjudicator.TYPE_CHAIR) ballotsub = BallotSubmission.objects.create(debate=debate, confirmed=True) TeamScore.objects.create(debate_team=dt1, ballot_submission=ballotsub, @@ -319,7 +319,7 @@ def setup_testdata(self, testdata): Venue.objects.create(name="Venue {:d}".format(i), priority=10) adjs = list(Adjudicator.objects.all()) venues = list(Venue.objects.all()) - sides = [DebateTeam.SIDE_AFF, DebateTeam.SIDE_NEG] + sides = [DebateTeam.Side.AFF, DebateTeam.Side.NEG] for r, debatedict in enumerate(testdata["teamscores"]): rd = Round.objects.create(tournament=tournament, seq=r, abbreviation="R{:d}".format(r)) diff --git a/tabbycat/tournaments/tests/test_round_checks.py b/tabbycat/tournaments/tests/test_round_checks.py index 788ad06386d..168dcfdab10 100644 --- a/tabbycat/tournaments/tests/test_round_checks.py +++ b/tabbycat/tournaments/tests/test_round_checks.py @@ -24,8 +24,8 @@ def setUp(self): team1 = Team.objects.create(tournament=self.tournament, reference=f"Team {i}A", use_institution_prefix=False) team2 = Team.objects.create(tournament=self.tournament, reference=f"Team {i}B", use_institution_prefix=False) adj = Adjudicator.objects.create(tournament=self.tournament, name=f"Adjudicator {i}") - DebateTeam.objects.create(debate=debate, team=team1, side=DebateTeam.SIDE_AFF) - DebateTeam.objects.create(debate=debate, team=team2, side=DebateTeam.SIDE_NEG) + DebateTeam.objects.create(debate=debate, team=team1, side=DebateTeam.Side.AFF) + DebateTeam.objects.create(debate=debate, team=team2, side=DebateTeam.Side.NEG) DebateAdjudicator.objects.create(debate=debate, adjudicator=adj, type=DebateAdjudicator.TYPE_CHAIR) self.debates.append(debate) self.venues.append(venue) diff --git a/tabbycat/tournaments/utils.py b/tabbycat/tournaments/utils.py index ad02a4a06c9..5173bd791b8 100644 --- a/tabbycat/tournaments/utils.py +++ b/tabbycat/tournaments/utils.py @@ -108,8 +108,10 @@ def get_side_name(tournament, side, name_type): return force_str(names["%s_%s" % (side, name_type)]) elif side in ('og', 'oo', 'cg', 'co'): return force_str(BP_SIDE_NAMES["%s_%s" % (side, name_type)]) + elif side == 'bye': + return 'bye' else: - raise ValueError("get_side_name() side must be one of: 'aff', 'neg', 'og', 'oo', 'cg', 'co', not: %r" % (side,)) + raise ValueError("get_side_name() side must be one of: 'aff', 'neg', 'og', 'oo', 'cg', 'co', 'bye', not: %r" % (side,)) def _get_side_name(name_type): From 67d6d90a91d054b1f1d14c11d909248ab1ccdb5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Mon, 4 Sep 2023 13:38:56 -0300 Subject: [PATCH 238/255] Implement team byes in draws This commit implements teams being marked as being given a bye for a round. To support this, placeholder debates and ballots are created for them, which bypass results. Rather, they are treated as not a debate when getting their ballot, and links to them are hidden. In draw tables, their situation is highlighted, and by default moved to the bottom of the table. The creation of bye teams and debates is handled by the draw manager, which is now given a couple more options from the (draw rules) preferences for how to select byes and how to treat them: - Bye selection: How teams are chosen to get the bye - Random: Any team could get the bye, - Lowest: The lowest-ranking team (if supported by the draw) is excluded. - Bye results: What type of results would we give bye teams - None: Skip creating ballots for them, equivalent to a loss - Points: Give them a winning TeamScore without speaks As to not tank bye teams within their bracket, average speaks should be used rather than sum of speaks as a tiebreaker. --- tabbycat/draw/manager.py | 95 ++++++++++++++++--- tabbycat/draw/models.py | 8 ++ tabbycat/draw/tables.py | 13 ++- tabbycat/draw/views.py | 4 + tabbycat/options/preferences.py | 29 ++++++ tabbycat/results/views.py | 12 ++- .../templates/tables/SortableTableMixin.vue | 7 +- tabbycat/tournaments/mixins.py | 2 +- tabbycat/tournaments/models.py | 14 +-- tabbycat/utils/tables.py | 49 +++++++--- 10 files changed, 190 insertions(+), 43 deletions(-) diff --git a/tabbycat/draw/manager.py b/tabbycat/draw/manager.py index b59216797f2..f002ddafaae 100644 --- a/tabbycat/draw/manager.py +++ b/tabbycat/draw/manager.py @@ -1,10 +1,13 @@ import logging import random +from operator import add +from typing import List, Tuple, TYPE_CHECKING from django.utils.translation import gettext as _ from draw.generator.powerpair import BasePowerPairedDrawGenerator from participants.utils import get_side_history +from results.models import BallotSubmission, TeamScore from standings.teams import TeamStandingsGenerator from tournaments.models import Round @@ -12,6 +15,10 @@ from .generator.utils import ispow2 from .models import Debate, DebateTeam +if TYPE_CHECKING: + from participants.models import Team + from .generator.pairing import BasePairing + logger = logging.getLogger(__name__) OPTIONS_TO_CONFIG_MAPPING = { @@ -62,18 +69,38 @@ def __init__(self, round, active_only=True): def get_relevant_options(self): if self.teams_in_debate == 'two': - return ["avoid_institution", "avoid_history", "history_penalty", "institution_penalty", "pullup_debates_penalty", "side_penalty", "pairing_penalty", "avoid_conflicts"] + return [ + "avoid_institution", + "avoid_history", + "history_penalty", + "institution_penalty", + "pullup_debates_penalty", + "side_penalty", + "pairing_penalty", + "avoid_conflicts", + ] else: return [] + def n_byes(self, n_teams): + if self.round.tournament.pref('bye_team_selection') != 'off': + return n_teams % len(self.round.tournament.sides) + return 0 + def get_generator_type(self): return self.generator_type - def get_teams(self): + def get_teams(self) -> Tuple[List['Team'], List['Team']]: if self.active_only: - return self.round.active_teams.all() + teams = self.round.active_teams.all() else: - return self.round.tournament.team_set.all() + teams = self.round.tournament.team_set.all() + + teams = list(teams) + n_byes = self.n_byes(len(teams)) + if n_byes: + return teams[:-n_byes], teams[-n_byes:] + return teams, [] def get_results(self): # Only needed for EliminationDrawManager @@ -103,7 +130,7 @@ def _populate_team_side_allocations(self, teams): if team in tsas: team.allocated_side = tsas[team] - def _make_debates(self, pairings): + def _make_debates(self, pairings: List['BasePairing']) -> None: random.shuffle(pairings) # to avoid IDs indicating room ranks debates = {} @@ -127,6 +154,20 @@ def _make_debates(self, pairings): DebateTeam.objects.bulk_create(debateteams) logger.debug("Created %d debate teams", len(debateteams)) + def _make_bye_debates(self, byes: List['Team'], room_rank: int) -> None: + """We'd want the room rank as to always show byes at the bottom""" + for i, bye in enumerate(byes, start=room_rank + 1): + debate = Debate(round=self.round, bracket=-1, room_rank=i) + debate.save() + + dt = DebateTeam(debate=debate, team=bye, side=DebateTeam.Side.BYE) + dt.save() + + if self.round.tournament.pref('bye_team_results') == 'points': + bs = BallotSubmission(submitter_type=BallotSubmission.Submitter.AUTOMATION, confirmed=True, debate=debate) + bs.save() + TeamScore.objects.create(ballot_submission=bs, debate_team=dt, points=1, win=True) + def delete(self): self.round.debate_set.all().delete() @@ -144,7 +185,7 @@ def create(self): if options.get("side_allocations") == "manual-ballot": options["side_allocations"] = "balance" - teams = self.get_teams() + teams, byes = self.get_teams() results = self.get_results() rrseq = self.get_rrseq() @@ -158,6 +199,9 @@ def create(self): results=results, rrseq=rrseq, **options) pairings = drawer.generate() self._make_debates(pairings) + + self._make_bye_debates(byes, max([p.room_rank for p in pairings])) + self.round.draw_status = Round.Status.DRAFT self.round.save() @@ -193,9 +237,10 @@ def get_relevant_options(self): options.extend(["pullup", "position_cost", "assignment_method", "renyi_order", "exponent"]) return options - def get_teams(self): + def get_teams(self) -> Tuple[List['Team'], List['Team']]: """Get teams in ranked order.""" - teams = super().get_teams() + teams = add(*super().get_teams()) + teams = self.round.tournament.team_set.filter(id__in=[t.id for t in teams]) metrics = self.round.tournament.pref('team_standings_precedence') pullup_metric = BasePowerPairedDrawGenerator.PULLUP_RESTRICTION_METRICS[self.round.tournament.pref('draw_pullup_restriction')] @@ -220,7 +265,16 @@ def get_teams(self): setattr(team, pullup_metric, standing.metrics[pullup_metric]) ranked.append(team) - return ranked + n_byes = self.n_byes(len(ranked)) + if n_byes: + if self.round.tournament.pref('bye_team_selection') == 'random': + byes = [] + for i in range(n_byes): + byes.append(ranked.pop(random.randrange(len(ranked)))) + return ranked, byes + return ranked[:-n_byes], ranked[-n_byes:] + + return ranked, [] class SeededDrawManager(BaseDrawManager): @@ -234,12 +288,25 @@ def get_relevant_options(self): options.extend(["assignment_method"]) return options - def get_teams(self): + def get_teams(self) -> Tuple[List['Team'], List['Team']]: """Get teams in seeded order.""" - teams = super().get_teams().order_by('-seed') + teams = add(*super().get_teams()) + random.shuffle(teams) + teams.sort(key=lambda t: -t.seed) + + byes = [] + n_byes = self.n_byes(len(teams)) + if n_byes: + if self.round.tournament.pref('bye_team_selection') == 'lowest': + teams, byes = teams[:-n_byes], teams[-n_byes:] + else: + for i in range(n_byes): + byes.append(teams.pop(random.randrange(len(teams)))) + for team in teams: team.points = 0 - return teams + + return teams, byes class RoundRobinDrawManager(BaseDrawManager): @@ -258,10 +325,10 @@ def get_rrseq(self): class BaseEliminationDrawManager(BaseDrawManager): result_pairing_class = None - def get_teams(self): + def get_teams(self) -> Tuple[List['Team'], List['Team']]: breaking_teams = self.round.break_category.breakingteam_set_competing.order_by( 'break_rank').select_related('team') - return [bt.team for bt in breaking_teams] + return [bt.team for bt in breaking_teams], [] def get_results(self): if self.round.prev is not None and self.round.prev.is_break_round: diff --git a/tabbycat/draw/models.py b/tabbycat/draw/models.py index bee843165e3..7b40c420413 100644 --- a/tabbycat/draw/models.py +++ b/tabbycat/draw/models.py @@ -185,12 +185,14 @@ def debateteams_ordered(self): aff_team = _team_property('aff_team') neg_team = _team_property('neg_team') + bye_team = _team_property('bye_team') og_team = _team_property('og_team') oo_team = _team_property('oo_team') cg_team = _team_property('cg_team') co_team = _team_property('co_team') aff_dt = _team_property('aff_dt') neg_dt = _team_property('neg_dt') + bye_dt = _team_property('bye_dt') og_dt = _team_property('og_dt') oo_dt = _team_property('oo_dt') cg_dt = _team_property('cg_dt') @@ -244,6 +246,12 @@ def adjudicators(self): self._adjudicators = AdjudicatorAllocation(self, from_db=True) return self._adjudicators + @property + def is_bye(self): + if not hasattr(self, '_team_properties'): + self._populate_teams() + return 'bye_dt' in self._team_properties + class DebateTeamManager(models.Manager): use_for_related_fields = True diff --git a/tabbycat/draw/tables.py b/tabbycat/draw/tables.py index 63f49e66ffd..86f4808e08f 100644 --- a/tabbycat/draw/tables.py +++ b/tabbycat/draw/tables.py @@ -69,9 +69,16 @@ def add_debate_team_columns(self, debates, highlight=[]): team_data = [] for debate, hl in zip_longest(debates, highlight): - team = debate.get_team(side) - subtext = None if (all_sides_confirmed or not debate.sides_confirmed) else side_name - team_data.append(self._team_cell(team, subtext=subtext, show_emoji=True, highlight=team == hl)) + if debate.is_bye: + if i == 1: # 1-indexed loop + team = debate.get_team('bye') + team_data.append(self._team_cell(team, subtext=_("Bye"), show_emoji=True, highlight=team == hl)) + else: + team_data.append({'text': self.BLANK_TEXT}) + else: + team = debate.get_team(side) + subtext = None if (all_sides_confirmed or not debate.sides_confirmed) else side_name + team_data.append(self._team_cell(team, subtext=subtext, show_emoji=True, highlight=team == hl)) title = side_name if all_sides_confirmed else _("Team %(num)d") % {'num': i} header = {'key': side, 'title': title} diff --git a/tabbycat/draw/views.py b/tabbycat/draw/views.py index e10b737b1d0..4859ae37d5e 100644 --- a/tabbycat/draw/views.py +++ b/tabbycat/draw/views.py @@ -266,7 +266,11 @@ class BriefingRoomDrawByTeamTableMixin(BriefingRoomDrawTableMixin): def populate_table(self, debates, table): # unicodedata.normalize gets accented characters (e.g. "Éothéod") to sort correctly + byes = [d for d in debates if d.is_bye] + debates = [d for d in debates if not d.is_bye] + draw_by_team = [(debate, debate.get_team(side)) for debate, side in product(debates, self.tournament.sides)] + draw_by_team.extend([(debate, debate.get_team('bye')) for debate in byes]) draw_by_team.sort(key=lambda x: unicodedata.normalize('NFKD', table._team_short_name(x[1]))) if len(draw_by_team) == 0: diff --git a/tabbycat/options/preferences.py b/tabbycat/options/preferences.py index 7102154ba48..f217c2ac2b4 100644 --- a/tabbycat/options/preferences.py +++ b/tabbycat/options/preferences.py @@ -378,6 +378,35 @@ class HideTraineePosition(BooleanPreference): default = False +@tournament_preferences_registry.register +class ByeTeamResults(ChoicePreference): + help_text = _("How to handle teams who were marked available yet excluded from" + "a round (a bye)") + verbose_name = _("Bye team results") + section = draw_rules + name = 'bye_team_results' + choices = ( + ('none', _("Treat bye teams as absent")), + ('points', _("Attribute a win to bye teams, without speaks")), + ) + default = 'none' + + +@tournament_preferences_registry.register +class ByeTeamSelection(ChoicePreference): + help_text = _("If creating a draw with an uneven number of teams, how to " + "decide who gets the bye (won't be allocated)") + verbose_name = _("Bye team selection method") + section = draw_rules + name = 'bye_team_selection' + choices = ( + ('off', _("Don't choose bye teams")), + ('random', _("Choose bye teams randomly")), + ('lowest', _("Choose lowest ranking teams")), + ) + default = 'off' + + # ============================================================================== feedback = Section('feedback', verbose_name=_("Feedback")) # ============================================================================== diff --git a/tabbycat/results/views.py b/tabbycat/results/views.py index 4272c672599..fb679c70163 100644 --- a/tabbycat/results/views.py +++ b/tabbycat/results/views.py @@ -19,7 +19,7 @@ from actionlog.mixins import LogActionMixin from actionlog.models import ActionLogEntry from adjallocation.models import DebateAdjudicator -from draw.models import Debate +from draw.models import Debate, DebateTeam from draw.prefetch import populate_opponents from motions.models import RoundMotion from motions.utils import merge_motion_vetos, merge_motions @@ -69,7 +69,7 @@ class BaseResultsEntryForRoundView(RoundMixin, VueTableTemplateView): def _get_draw(self): if not hasattr(self, '_draw'): self._draw = self.round.debate_set_with_prefetches( - ordering=('room_rank',), results=True, wins=True, check_ins=True, iron=True) + filter_args=[~Q(debateteam__side=DebateTeam.Side.BYE)], ordering=('room_rank',), results=True, wins=True, check_ins=True, iron=True) return self._draw def get_table(self): @@ -426,6 +426,9 @@ def add_success_message(self): def get_error_url(self): return self.get_success_url() + def get_queryset(self): + return super().get_queryset().exclude(debateteam__side=DebateTeam.Side.BYE) + def populate_objects(self, prefill=True): self.debate = self.object = self.get_object() self.ballotsub = BallotSubmission(debate=self.debate, submitter=self.request.user, @@ -478,6 +481,9 @@ def get_action_log_type(self): def get_success_url(self): return reverse_round('results-round-list', self.ballotsub.debate.round) + def get_queryset(self): + return super().get_queryset().exclude(debate__debateteam__side=DebateTeam.Side.BYE) + def add_success_message(self): if self.ballotsub.discarded: message = _("Ballot set for %(matchup)s discarded.") @@ -679,7 +685,7 @@ def matchup_description(self): return self.object.matchup def get_queryset(self): - return self.model.objects.select_related( + return super().get_queryset().exclude(debateteam__side=DebateTeam.Side.BYE).select_related( 'round', ).prefetch_related('debateteam_set__team') diff --git a/tabbycat/templates/tables/SortableTableMixin.vue b/tabbycat/templates/tables/SortableTableMixin.vue index b7814de290f..1d179e62fa0 100644 --- a/tabbycat/templates/tables/SortableTableMixin.vue +++ b/tabbycat/templates/tables/SortableTableMixin.vue @@ -64,9 +64,12 @@ export default { } // Sort the array of rows based on the value of the cell index // For DrawContainer row is the debate dictionary - const self = this return _.orderBy(this.sortableData, (row) => { - const cellData = self.getSortableProperty(row, orderedHeaderIndex) + const cellData = this.getSortableProperty(row, orderedHeaderIndex) + if (cellData === '') { + // Nulls last + return -1 + } if (_.isString(cellData)) { return _.lowerCase(cellData) } diff --git a/tabbycat/tournaments/mixins.py b/tabbycat/tournaments/mixins.py index 30ac986ffc6..ab9eff66607 100644 --- a/tabbycat/tournaments/mixins.py +++ b/tabbycat/tournaments/mixins.py @@ -497,7 +497,7 @@ def get_draw_or_panels_objects(self): )), ) - draw = self.round.debate_set.select_related(*selects).prefetch_related(*prefetches) + draw = self.round.debate_set.exclude(debateteam__side=DebateTeam.Side.BYE).select_related(*selects).prefetch_related(*prefetches) if self.prefetch_teams: populate_win_counts([dt.team for debate in draw for dt in debate.debateteam_set.all()]) diff --git a/tabbycat/tournaments/models.py b/tabbycat/tournaments/models.py index 134c460a4fe..4fe96becab5 100644 --- a/tabbycat/tournaments/models.py +++ b/tabbycat/tournaments/models.py @@ -2,7 +2,7 @@ from django.core.exceptions import ValidationError from django.db import models -from django.db.models import Count, Prefetch, Q +from django.db.models import Count, F, Prefetch, Q from django.urls import reverse from django.utils.functional import cached_property from django.utils.translation import gettext_lazy as _ @@ -395,8 +395,9 @@ def duplicate_team_names(self): def num_debates_without_chair(self): """Returns the number of debates in the round that lack a chair, or have more than one chair.""" + from draw.models import DebateTeam from adjallocation.models import DebateAdjudicator - debates_in_round = self.debate_set.count() + debates_in_round = self.debate_set.exclude(debateteam__side=DebateTeam.Side.BYE).count() debates_with_one_chair = self.debate_set.filter(debateadjudicator__type=DebateAdjudicator.TYPE_CHAIR).annotate( num_chairs=Count('debateadjudicator')).filter(num_chairs=1).count() return debates_in_round - debates_with_one_chair @@ -415,7 +416,8 @@ def num_debates_with_even_panel(self): @cached_property def num_debates_without_venue(self): - return self.debate_set.filter(venue__isnull=True).count() + from draw.models import DebateTeam + return self.debate_set.filter(venue__isnull=True).exclude(debateteam__side=DebateTeam.Side.BYE).count() @cached_property def num_debates_with_sides_unconfirmed(self): @@ -439,7 +441,7 @@ def num_available_adjudicators_not_allocated(self): # Draw retrieval methods # -------------------------------------------------------------------------- - def debate_set_with_prefetches(self, filter_kwargs=None, ordering=('venue__name',), + def debate_set_with_prefetches(self, filter_args=[], filter_kwargs={}, ordering=(F('venue__name').asc(nulls_last=True),), teams=True, adjudicators=True, speakers=True, wins=False, results=False, venues=True, institutions=False, check_ins=False, iron=False): """Returns the debate set, with aff_team and neg_team populated. @@ -450,9 +452,7 @@ def debate_set_with_prefetches(self, filter_kwargs=None, ordering=('venue__name' from participants.models import Speaker from results.prefetch import populate_confirmed_ballots, populate_wins, populate_checkins - debates = self.debate_set.all() - if filter_kwargs: - debates = debates.filter(**filter_kwargs) + debates = self.debate_set.filter(*filter_args, **filter_kwargs) if results: debates = debates.prefetch_related('ballotsubmission_set', 'ballotsubmission_set__submitter', 'ballotsubmission_set__participant_submitter') diff --git a/tabbycat/utils/tables.py b/tabbycat/utils/tables.py index 98e1b3daef2..3b085c7e8c4 100644 --- a/tabbycat/utils/tables.py +++ b/tabbycat/utils/tables.py @@ -742,10 +742,11 @@ def add_draw_conflicts_columns(self, debates, venue_conflicts, adjudicator_confl for debate in debates: # conflicts is a list of (level, message) tuples conflicts = [("secondary", _draw_flags_dict.get(flag, flag)) for flag in debate.flags] - conflicts += [("secondary", "%(team)s: %(flag)s" % { - 'team': self._team_short_name(debate.get_team(side)), - 'flag': _draw_flags_dict.get(flag, flag), - }) for side in self.tournament.sides for flag in debate.get_dt(side).flags] + if not debate.is_bye: + conflicts += [("secondary", "%(team)s: %(flag)s" % { + 'team': self._team_short_name(debate.get_team(side)), + 'flag': _draw_flags_dict.get(flag, flag), + }) for side in self.tournament.sides for flag in debate.get_dt(side).flags] if self.tournament.pref('avoid_team_history'): history = debate.history @@ -838,12 +839,13 @@ def add_speaker_debate_ballot_link_column(self, debates): def add_debate_ballot_link_column(self, debates, show_ballot=False): ballot_links_header = {'key': "ballot", 'icon': 'search', 'tooltip': _("The ballot you submitted")} + no_ballot = _("No Ballot") if self.admin: ballot_links_data = [{ - 'text': _("View/Edit Ballot"), - 'link': reverse_tournament('old-results-ballotset-edit', self.tournament, kwargs={'pk': debate.confirmed_ballot.id}), - } if debate.confirmed_ballot else "" for debate in debates] + 'text': no_ballot if debate.is_bye else _("View/Edit Ballot"), + 'link': None if debate.is_bye else reverse_tournament('old-results-ballotset-edit', self.tournament, kwargs={'pk': debate.confirmed_ballot.id}), + } if debate.confirmed_ballot else "" for debate in debates if not debate.is_bye] self.add_column(ballot_links_header, ballot_links_data) elif self.private_url: @@ -854,13 +856,13 @@ def add_debate_ballot_link_column(self, debates, show_ballot=False): ballot_links_data = [] for debate in debates: if not debate.has_ballot: - ballot_links_data.append(_("No ballot")) + ballot_links_data.append(no_ballot) elif not get_result_class(debate.nondiscard_ballots[0], debate.round, self.tournament).uses_speakers: ballot_links_data.append(_("No scores")) else: ballot_links_data.append({ - 'text': _("View Ballot"), - 'link': reverse_round( + 'text': no_ballot if debate.is_bye else _("View Ballot"), + 'link': None if debate.is_bye else reverse_round( 'results-privateurl-scoresheet-view', debate.round, kwargs={'url_key': self.private_url_key}), }) self.add_column(ballot_links_header, ballot_links_data) @@ -870,6 +872,8 @@ def add_debate_ballot_link_column(self, debates, show_ballot=False): for debate in debates: if self.tournament.pref('teams_in_debate') == 'bp' and debate.round.is_break_round: ballot_links_data.append("") + elif debate.is_bye: + ballot_links_data.append(no_ballot) else: ballot_links_data.append({ 'text': _("View Ballot"), @@ -884,9 +888,18 @@ def add_debate_result_by_team_column(self, teamscores): self.add_column(header, results_data) def add_debate_side_by_team_column(self, teamscores, tournament=None): - sides_data = [ts.debate_team.get_side_name(tournament).title() - # Translators: "TBC" stands for "to be confirmed". - if ts.debate_team.debate.sides_confirmed else _("TBC") for ts in teamscores] + sides_data = [] + for ts in teamscores: + if not ts.debate_team.debate.sides_confirmed: + # Translators: "TBC" stands for "to be confirmed". + side = _("TBC") + side = ts.debate_team.get_side_name(tournament).title() + + if ts.debate_team.side == 'bye': + side = {'text': f"{side}"} + + sides_data.append(side) + header = {'key': 'side', 'title': _("Side")} self.add_column(header, sides_data) @@ -907,6 +920,16 @@ def add_debate_results_columns(self, debates, iron=False): results_data = [] for debate in debates: row = [] + + if debate.is_bye: + cell = self._team_cell(debate.get_team('bye'), show_emoji=False, subtext=_("Bye")) + cell['popover']['content'].append({'text': "%s" + % ('text-info', _("Team was given a bye this round"))}) + row.append(cell) + row += [{'text': self.BLANK_TEXT} for i in range(len(self.tournament.sides) - 1)] + results_data.append(row) + continue + for side in self.tournament.sides: debateteam = debate.get_dt(side) team = debate.get_team(side) From 0264073aba3abfdd81cc1bfa938bcb074ac8898a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 9 Sep 2023 18:07:27 -0300 Subject: [PATCH 239/255] Add missing get_speaker_rank methods to Results This commit adds the missing `get_speaker_rank()` methods for score- based results in order to show speaker ranks in the API and ballots. --- tabbycat/results/result.py | 6 ++++++ tabbycat/results/scoresheet.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/tabbycat/results/result.py b/tabbycat/results/result.py index 7d11f8abb7c..39e144e3424 100644 --- a/tabbycat/results/result.py +++ b/tabbycat/results/result.py @@ -770,6 +770,9 @@ def get_ghost(self, side, position): def set_ghost(self, side, position, is_ghost): self.ghosts[side][position] = is_ghost + def get_speaker_rank(self, side: str, position: int) -> int: + return self.scoresheet.get_speaker_rank(side, position) + def set_speaker_rank(self, side, position, rank): self.scoresheet.set_speaker_rank(side, position, rank) @@ -1068,6 +1071,9 @@ def set_score(self, adjudicator, side, position, score): "doesn't have a scoresheet.", adjudicator) return + def get_speaker_rank(self, adjudicator: 'Adjudicator', side: str, position: int) -> int: + return self.scoresheets[adjudicator].get_speaker_rank(side, position) + # -------------------------------------------------------------------------- # Model fields # -------------------------------------------------------------------------- diff --git a/tabbycat/results/scoresheet.py b/tabbycat/results/scoresheet.py index e9e01cfc69e..33f6de291aa 100644 --- a/tabbycat/results/scoresheet.py +++ b/tabbycat/results/scoresheet.py @@ -73,7 +73,7 @@ def get_score(self, side, position): def set_speaker_rank(self, side, position, score): self.speaker_ranks[side][position] = score - def get_speaker_rank(self, side, position): + def get_speaker_rank(self, side: str, position: int) -> int: return self.speaker_ranks[side][position] def get_total(self, side): From 9d043ad4bedf4763a43e3a63eef4f25ef628d6d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 10 Sep 2023 15:38:31 -0300 Subject: [PATCH 240/255] Use proper key for institutional rankings in AIDA This commit fixes a bug which prevented the generation of breaks using AIDA rules for institutional caps. The name of the ranking key was re- named as part of the switch to SQL-based rankings, but had not been up- dated here. Fixes BACKEND-BM8 --- tabbycat/breakqual/aida.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tabbycat/breakqual/aida.py b/tabbycat/breakqual/aida.py index 682b725a0fa..6a7a6218cdb 100644 --- a/tabbycat/breakqual/aida.py +++ b/tabbycat/breakqual/aida.py @@ -41,7 +41,7 @@ def exclude_capped_teams(self): self.capped_teams = [] for tsi in self.eligible_teams: - institution_rank = tsi.get_ranking("institution") + institution_rank = tsi.get_ranking("institution_rank") if institution_rank > self.institution_cap: logger.info("Capped out, institution rank %d, cap %d: %s", institution_rank, self.institution_cap, tsi.team) self.capped_teams.append(tsi) @@ -71,7 +71,7 @@ def exclude_capped_teams(self): # iii. Set aside teams that are capped out for tsi in self.eligible_teams: - institution_rank = tsi.get_ranking("institution") + institution_rank = tsi.get_ranking("institution_rank") if institution_rank is None: continue elif institution_rank > 1 and tsi.get_ranking("rank") > natural_break_cutoff: @@ -131,7 +131,7 @@ class Aida2016EastersBreakGenerator(BaseAida2016BreakGenerator): def reinsert_capped_teams(self): # Easters rules give teams capped out post-cutoff priority post_cutoff_capped_teams = [tsi for tsi in self.capped_teams - if tsi.get_ranking("institution") <= self.institution_cap] + if tsi.get_ranking("institution_rank") <= self.institution_cap] self._reinsert_capped_teams(post_cutoff_capped_teams) self._reinsert_capped_teams(self.capped_teams) From 1aeeba66d339e5b7b1311679364eb1dc5a88a5bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 28 Jan 2023 16:34:58 -0400 Subject: [PATCH 241/255] Add APDA preset --- tabbycat/options/presets.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tabbycat/options/presets.py b/tabbycat/options/presets.py index 36031e573e9..fa4ed1d748d 100644 --- a/tabbycat/options/presets.py +++ b/tabbycat/options/presets.py @@ -330,6 +330,37 @@ class WSDCPreferences(AustralsPreferences): ui_options__show_adjudicator_institutions = False +class APDAPreferences(PreferencesPreset): + name = _("APDA Rules") + show_in_list = True + description = _("2 vs 2 with speech rankings and byes") + + scoring__score_min = 15 + scoring__score_max = 40 + motions__motion_vetoes_enabled = False # Single motions per round + motions__enable_motions = False + draw_rules__draw_odd_bracket = 'pullup_bottom' + draw_rules__team_institution_penalty = 1000 + draw_rules__team_history_penalty = 100000 + draw_rules__draw_pairing_method = 'fold' + draw_rules__draw_pullup_restriction = 'least_to_date' + draw_rules__bye_team_results = 'points' + draw_rules__bye_team_selection = 'lowest' + draw_rules__draw_avoid_conflicts = 'graph' + draw_rules__pullup_debates_penalty = 10000 + draw_rules__side_penalty = 100 + draw_rules__pairing_penalty = 1 + debate_rules__ballots_per_debate_prelim = 'per-debate' + debate_rules__ballots_per_debate_elim = 'per-debate' + debate_rules__winners_in_ballots = 'tied-points' + debate_rules__speakers_in_ballots = 'prelim' + debate_rules__substantive_speakers = 2 + debate_rules__side_names = 'gov-opp' + debate_rules__reply_scores_enabled = False + debate_rules__speaker_ranks = 'any' + standings__speaker_standings_precedence = ['average', 'srank', 'trimmed_mean'] + + class PublicInformation(PreferencesPreset): name = _("Public Information Options") show_in_list = False From 589a84930201994bdd70de9909a4b01fae97eabf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Fri, 29 Sep 2023 19:43:46 -0300 Subject: [PATCH 242/255] Use speaker ranks as part of scoresheet This commit consolidates the handling of speaker ranks as part of the result scoresheet rather than the result itself, as both methods were being used and led to confusion, with the ranks not displaying nor saving. It also fixes a typo with how the feature showing is determined and simplifies some duplicated methods. --- tabbycat/results/forms.py | 2 +- tabbycat/results/prefetch.py | 2 +- tabbycat/results/result.py | 16 +++++----------- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/tabbycat/results/forms.py b/tabbycat/results/forms.py index 2f4c23c3906..4032a58ff18 100644 --- a/tabbycat/results/forms.py +++ b/tabbycat/results/forms.py @@ -278,7 +278,7 @@ def get_preferences_options(self): self.max_margin = self.tournament.pref('maximum_margin') self.choosing_sides = (self.tournament.pref('draw_side_allocations') == 'manual-ballot' and self.tournament.pref('teams_in_debate') == 'two') - self.uses_speaker_ranks = self.tournament.pref('speaker_ranks') != 'none' + self.using_speaker_ranks = self.tournament.pref('speaker_ranks') != 'none' # -------------------------------------------------------------------------- # Field names and field convenience functions diff --git a/tabbycat/results/prefetch.py b/tabbycat/results/prefetch.py index 2f4c34e7204..0784473abd7 100644 --- a/tabbycat/results/prefetch.py +++ b/tabbycat/results/prefetch.py @@ -126,10 +126,10 @@ def populate_results(ballotsubs, tournament=None): if result.uses_speakers: result.speakers[ss.debate_team.side][ss.position] = ss.speaker result.ghosts[ss.debate_team.side][ss.position] = ss.ghost - result.speaker_ranks[ss.debate_team.side][ss.position] = ss.rank if not result.is_voting: result.set_score(ss.debate_team.side, ss.position, ss.score) + result.set_speaker_rank(ss.debate_team.side, ss.position, ss.rank) # Populate scoresheets (load_scoresheets) diff --git a/tabbycat/results/result.py b/tabbycat/results/result.py index 39e144e3424..1643d9c852b 100644 --- a/tabbycat/results/result.py +++ b/tabbycat/results/result.py @@ -674,17 +674,14 @@ def init_blank_buffer(self): super().init_blank_buffer() self.speakers = {side: dict.fromkeys(self.positions, None) for side in self.sides} self.ghosts = {side: dict.fromkeys(self.positions, False) for side in self.sides} - self.speaker_ranks = {side: dict.fromkeys(self.positions, None) for side in self.sides} def assert_loaded(self): super().assert_loaded() assert set(self.speakers) == set(self.sides) assert set(self.ghosts) == set(self.sides) - assert set(self.speaker_ranks) == set(self.sides) for side in self.sides: assert set(self.speakers[side]) == set(self.positions) assert set(self.ghosts[side]) == set(self.positions) - assert set(self.speaker_ranks[side]) == set(self.positions) def is_complete(self): return super().is_complete() and not any(self.speakers[s][p] is None for s in self.sides for p in self.positions) @@ -737,7 +734,6 @@ def load_speakers(self): for ss in speakerscores: self.speakers[ss.debate_team.side][ss.position] = ss.speaker self.ghosts[ss.debate_team.side][ss.position] = ss.ghost - self.speaker_ranks[ss.debate_team.side][ss.position] = ss.rank def save(self): super().save() @@ -764,8 +760,8 @@ def set_speaker(self, side, position, speaker): return self.speakers[side][position] = speaker - def get_ghost(self, side, position): - return self.ghosts[side].get(position) + def get_ghost(self, side: str, position: int) -> bool: + return self.ghosts[side].get(position, False) def set_ghost(self, side, position, is_ghost): self.ghosts[side][position] = is_ghost @@ -783,11 +779,8 @@ def set_speaker_rank(self, side, position, rank): def speakerscore_field_speaker(self, side, position): return self.speakers[side][position] - def speakerscore_field_ghost(self, side, position): - return self.ghosts[side][position] - - def speakerscore_field_rank(self, side, position): - return self.speaker_ranks[side][position] + speakerscore_field_ghost = get_ghost + speakerscore_field_rank = get_speaker_rank def teamscore_field_margin(self, side): return self.calculate_full_margin(side) @@ -991,6 +984,7 @@ def load_scoresheets(self): for ss in speakerscore: self.set_score(ss.debate_team.side, ss.position, ss.score) + self.set_speaker_rank(ss.debate_team.side, ss.position, ss.rank) def set_score(self, side, position, score): self.scoresheet.set_score(side, position, score) From 652324528b24a556879655f9301b4f62c3bf94c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 30 Sep 2023 15:17:10 -0300 Subject: [PATCH 243/255] Re-use scoresheets for speaker ranks This commit partially rolls back 589a849302 as to use the result score- sheets for speaker ranks, analogously to scores, which is closer in meaning to scoresheets than the speaker info like ghost. --- tabbycat/results/result.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/tabbycat/results/result.py b/tabbycat/results/result.py index 1643d9c852b..8fc1a4df7e8 100644 --- a/tabbycat/results/result.py +++ b/tabbycat/results/result.py @@ -766,21 +766,12 @@ def get_ghost(self, side: str, position: int) -> bool: def set_ghost(self, side, position, is_ghost): self.ghosts[side][position] = is_ghost - def get_speaker_rank(self, side: str, position: int) -> int: - return self.scoresheet.get_speaker_rank(side, position) - - def set_speaker_rank(self, side, position, rank): - self.scoresheet.set_speaker_rank(side, position, rank) - # -------------------------------------------------------------------------- # Model fields # -------------------------------------------------------------------------- - def speakerscore_field_speaker(self, side, position): - return self.speakers[side][position] - + speakerscore_field_speaker = get_speaker speakerscore_field_ghost = get_ghost - speakerscore_field_rank = get_speaker_rank def teamscore_field_margin(self, side): return self.calculate_full_margin(side) @@ -998,6 +989,12 @@ def merge_speaker_result(self, result: BaseDebateResult) -> list[ResultError]: errors.append(ResultError('Scores are not identical', 'scores', side, pos)) return errors + def get_speaker_rank(self, side: str, position: int) -> int: + return self.scoresheet.get_speaker_rank(side, position) + + def set_speaker_rank(self, side, position, rank): + self.scoresheet.set_speaker_rank(side, position, rank) + # -------------------------------------------------------------------------- # Model fields # -------------------------------------------------------------------------- @@ -1006,6 +1003,7 @@ def speakerscore_field_score(self, side, position): return self.scoresheet.get_score(side, position) get_score = speakerscore_field_score + speakerscore_field_rank = get_speaker_rank def teamscore_field_score(self, side): if self.tournament.pref('teamscore_includes_ghosts'): From 7e9b4d8d1977978b36a3ca2bdcf00ba052450614 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sun, 1 Oct 2023 15:33:51 -0300 Subject: [PATCH 244/255] API: Fix couple problems when creating results This commit fixes adding vetos to a ballot through the API and now allows for voting ballots to be created, single_adj or full. We can then use the proper score-setting method signature with[out] adjudicator. Tests are also now provided for this POST endpoint, silencing the logger as the tests do not expect any. --- tabbycat/api/serializers.py | 37 +- tabbycat/api/tests/test_serializers.py | 741 ++++++++++++++++++++++++- 2 files changed, 763 insertions(+), 15 deletions(-) diff --git a/tabbycat/api/serializers.py b/tabbycat/api/serializers.py index 9b0813e315a..0501d8b99d0 100644 --- a/tabbycat/api/serializers.py +++ b/tabbycat/api/serializers.py @@ -23,7 +23,7 @@ from privateurls.utils import populate_url_keys from results.mixins import TabroomSubmissionFieldsMixin from results.models import BallotSubmission, SpeakerScore, TeamScore -from results.result import DebateResult +from results.result import DebateResult, ResultError from standings.speakers import SpeakerStandingsGenerator from standings.teams import TeamStandingsGenerator from tournaments.models import Round, Tournament @@ -1149,8 +1149,8 @@ def save(self, **kwargs): if result.get_scoresheet_class().uses_declared_winners and self.validated_data.get('win', False): args = [self.validated_data['side']] - if self.validated_data.get('adjudicator') is not None: - args.insert(0, self.validated_data['adjudicator']) + if kwargs.get('adjudicator') is not None and not result.ballotsub.single_adj: + args.insert(0, kwargs.get('adjudicator')) result.add_winner(*args) speech_serializer = self.SpeechSerializer(context=self.context) @@ -1217,7 +1217,11 @@ def create(self, validated_data): sheets._validated_data = sheet sheets.save(result=result) - result.save() + try: + result.save() + except ResultError as e: + raise serializers.ValidationError(str(e)) + return result class VetoSerializer(serializers.ModelSerializer): @@ -1230,8 +1234,9 @@ class Meta: exclude = ('id', 'ballot_submission', 'preference', 'debate_team') def create(self, validated_data): + team = validated_data.pop('debate_team').pop('team') try: - validated_data['debate_team'] = DebateTeam.objects.get(debate=self.context['debate'], team=validated_data.pop('team')) + validated_data['debate_team'] = DebateTeam.objects.get(debate=self.context['debate'], team=team) except (DebateTeam.DoesNotExist, DebateTeam.MultipleObjectsReturned): raise serializers.ValidationError('Team is not in debate') return super().create(validated_data) @@ -1239,7 +1244,7 @@ def create(self, validated_data): result = ResultSerializer(source='result.get_result_info') motion = fields.TournamentHyperlinkedRelatedField(view_name='api-motion-detail', required=False, queryset=Motion.objects.all()) url = fields.DebateHyperlinkedIdentityField(view_name='api-ballot-detail') - participant_submitter = fields.ParticipantSourceField(allow_null=True) + participant_submitter = fields.ParticipantSourceField(allow_null=True, required=False) vetos = VetoSerializer(many=True, source='debateteammotionpreference_set', required=False, allow_null=True) class Meta: @@ -1247,14 +1252,14 @@ class Meta: exclude = ('debate',) read_only_fields = ('timestamp', 'version', 'submitter_type', 'submitter', 'participant_submitter', - 'confirmer', 'confirm_timestamp', 'ip_address', 'single_adj', 'private_url') + 'confirmer', 'confirm_timestamp', 'ip_address', 'private_url') def get_request(self): return self.context['request'] def create(self, validated_data): result_data = validated_data.pop('result').pop('get_result_info') - veto_data = validated_data.pop('vetos', None) + veto_data = validated_data.pop('debateteammotionpreference_set', None) validated_data.update(self.get_submitter_fields()) if validated_data.get('confirmed', False): @@ -1263,12 +1268,19 @@ def create(self, validated_data): stage = 'elim' if self.context['round'].stage == Round.Stage.ELIMINATION else 'prelim' if self.context['tournament'].pref('ballots_per_debate_' + stage) == 'per-adj': - if self.context['debate'].debateadjudicator_set.all().count() > 1: + debateadj_count = self.context['debate'].debateadjudicator_set.exclude(type=DebateAdjudicator.TYPE_TRAINEE).count() + if debateadj_count > 1: if len(result_data['sheets']) == 1: validated_data['participant_submitter'] = result_data['sheets'][0]['adjudicator'] validated_data['single_adj'] = True - else: - raise serializers.ValidationError('Single-adjudicator ballots must have only one scoresheet') + elif validated_data.get('single_adj', False): + raise serializers.ValidationError({'single_adj': 'Single-adjudicator ballots can only have one scoresheet'}) + elif len(result_data['sheets']) != debateadj_count: + raise serializers.ValidationError({ + 'result': 'Voting ballots must either have one scoresheet or ballots from all voting adjudicators', + }) + elif len(result_data['sheets']) > 1: + raise serializers.ValidationError({'result': 'Consensus ballots can only have one scoresheet'}) ballot = super().create(validated_data) @@ -1278,8 +1290,9 @@ def create(self, validated_data): result.save(ballot=ballot) if veto_data: - vetos = self.VetoSerializer(context=self.context) + vetos = self.VetoSerializer(context=self.context, many=True) vetos._validated_data = veto_data + vetos._errors = [] vetos.save(ballot_submission=ballot, preference=3) return ballot diff --git a/tabbycat/api/tests/test_serializers.py b/tabbycat/api/tests/test_serializers.py index bc298d98b9a..ee8fa7267c4 100644 --- a/tabbycat/api/tests/test_serializers.py +++ b/tabbycat/api/tests/test_serializers.py @@ -1,13 +1,21 @@ +import logging + +from django.contrib.auth import get_user_model from rest_framework.test import APIClient, APITestCase -from tournaments.models import Round +from adjallocation.models import DebateAdjudicator +from draw.models import Debate, DebateTeam +from motions.models import Motion, RoundMotion +from options.presets import CanadianParliamentaryPreferences +from participants.models import Adjudicator, Speaker, Team +from tournaments.models import Round, Tournament from utils.misc import reverse_round, reverse_tournament from utils.tests import CompletedTournamentTestMixin +User = get_user_model() -class RoundSerializerTests(CompletedTournamentTestMixin, APITestCase): - # user = User.objects.get(username='admin') +class RoundSerializerTests(CompletedTournamentTestMixin, APITestCase): def test_exclude_motions_if_list(self): response = self.client.get(reverse_tournament('api-round-list', self.tournament)) @@ -134,3 +142,730 @@ def test_create_adj_null_institution(self): "url_key": "laZzBPo6FsGEr12VtB8LSHM8", }) self.assertEqual(response.status_code, 201) + + +class BallotSerializerTests(APITestCase): + + def setUp(self): + logging.disable(logging.CRITICAL) + self.user = User.objects.create_superuser(username='admin1', password='admin', is_active=True) + self.tournament = Tournament.objects.create(slug='apitest') + self.round = Round.objects.create(seq=1, tournament=self.tournament) + self.debate = Debate.objects.create(round=self.round) + + CanadianParliamentaryPreferences.save(self.tournament) + + self.t1 = Team.objects.create(tournament=self.tournament, reference='A') + self.s1 = Speaker.objects.create(name='1', team=self.t1) + self.s2 = Speaker.objects.create(name='2', team=self.t1) + + self.t2 = Team.objects.create(tournament=self.tournament, reference='B') + self.s3 = Speaker.objects.create(name='3', team=self.t2) + self.s4 = Speaker.objects.create(name='4', team=self.t2) + + self.t3 = Team.objects.create(tournament=self.tournament, reference='C') + + self.a1 = Adjudicator.objects.create(name='A1', tournament=self.tournament) + self.a2 = Adjudicator.objects.create(name='A2', tournament=self.tournament) + self.a3 = Adjudicator.objects.create(name='A3', tournament=self.tournament) + + DebateTeam.objects.bulk_create([DebateTeam(side=side, team=team, debate=self.debate) for side, team in zip(['aff', 'neg'], [self.t1, self.t2])]) + DebateAdjudicator.objects.bulk_create([ + DebateAdjudicator(adjudicator=self.a1, debate=self.debate, type='C'), DebateAdjudicator(adjudicator=self.a2, debate=self.debate, type='P'), + ]) + + self.m1 = Motion.objects.create(tournament=self.tournament) + self.m2 = Motion.objects.create(tournament=self.tournament) + self.m3 = Motion.objects.create(tournament=self.tournament) + RoundMotion.objects.bulk_create([RoundMotion(seq=i, motion=motion, round=self.round) for i, motion in enumerate([self.m1, self.m2])]) + + def tearDown(self): + self.debate.delete() + self.tournament.delete() + self.user.delete() + logging.disable(logging.NOTSET) + + def test_can_create_consensus_ballot_scores(self): + client = APIClient() + client.force_authenticate(user=self.user) + response = client.post(reverse_round('api-ballot-list', self.round, kwargs={'debate_pk': self.debate.pk}), { + 'result': { + 'sheets': [{ + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'speeches': [ + { + 'ghost': False, + 'score': 80, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s1.pk}), + }, + { + 'ghost': False, + 'score': 80, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s2.pk}), + }, + ], + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'speeches': [ + { + 'ghost': False, + 'score': 79, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s3.pk}), + }, + { + 'ghost': False, + 'score': 79, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s4.pk}), + }, + ], + }, + ], + }], + }, + }) + self.assertEqual(response.status_code, 201) + + def test_can_create_voting_ballot_scores(self): + self.tournament.preferences['debate_rules__ballots_per_debate_prelim'] = 'per-adj' + + client = APIClient() + client.force_authenticate(user=self.user) + response = client.post(reverse_round('api-ballot-list', self.round, kwargs={'debate_pk': self.debate.pk}), { + 'result': { + 'sheets': [ + { + 'adjudicator': reverse_tournament('api-adjudicator-detail', self.tournament, kwargs={'pk': self.a1.pk}), + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'speeches': [ + { + 'ghost': False, + 'score': 80, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s1.pk}), + }, + { + 'ghost': False, + 'score': 80, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s2.pk}), + }, + ], + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'speeches': [ + { + 'ghost': False, + 'score': 79, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s3.pk}), + }, + { + 'ghost': False, + 'score': 79, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s4.pk}), + }, + ], + }, + ], + }, + { + 'adjudicator': reverse_tournament('api-adjudicator-detail', self.tournament, kwargs={'pk': self.a2.pk}), + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'speeches': [ + { + 'ghost': False, + 'score': 79, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s1.pk}), + }, + { + 'ghost': False, + 'score': 79, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s2.pk}), + }, + ], + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'speeches': [ + { + 'ghost': False, + 'score': 80, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s3.pk}), + }, + { + 'ghost': False, + 'score': 80, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s4.pk}), + }, + ], + }, + ], + }, + ], + }, + }) + self.assertEqual(response.status_code, 201) + + def test_can_create_consensus_ballot_winner(self): + self.tournament.preferences['debate_rules__speakers_in_ballots'] = 'never' + + client = APIClient() + client.force_authenticate(user=self.user) + response = client.post(reverse_round('api-ballot-list', self.round, kwargs={'debate_pk': self.debate.pk}), { + 'result': { + 'sheets': [{ + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'win': True, + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': False, + }, + ], + }], + }, + }) + self.assertEqual(response.status_code, 201) + + def test_can_create_voting_ballot_winner(self): + self.tournament.preferences['debate_rules__ballots_per_debate_prelim'] = 'per-adj' + self.tournament.preferences['debate_rules__speakers_in_ballots'] = 'never' + + client = APIClient() + client.force_authenticate(user=self.user) + response = client.post(reverse_round('api-ballot-list', self.round, kwargs={'debate_pk': self.debate.pk}), { + 'result': { + 'sheets': [ + { + 'adjudicator': reverse_tournament('api-adjudicator-detail', self.tournament, kwargs={'pk': self.a1.pk}), + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'win': True, + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': False, + }, + ], + }, + { + 'adjudicator': reverse_tournament('api-adjudicator-detail', self.tournament, kwargs={'pk': self.a2.pk}), + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'win': False, + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': True, + }, + ], + }, + ], + }, + }) + self.assertEqual(response.status_code, 201) + + def test_voting_motion_vetos(self): + self.tournament.preferences['debate_rules__speakers_in_ballots'] = 'never' + self.tournament.preferences['motions__motion_vetoes_enabled'] = True + + client = APIClient() + client.force_authenticate(user=self.user) + response = client.post(reverse_round('api-ballot-list', self.round, kwargs={'debate_pk': self.debate.pk}), { + 'result': { + 'sheets': [{ + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'win': True, + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': False, + }, + ], + }], + }, + 'vetos': [ + { + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'motion': reverse_tournament('api-motion-detail', self.tournament, kwargs={'pk': self.m1.pk}), + }, + { + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'motion': reverse_tournament('api-motion-detail', self.tournament, kwargs={'pk': self.m2.pk}), + }, + ], + }) + self.assertEqual(response.status_code, 201) + + def test_single_adj_ballot(self): + self.tournament.preferences['debate_rules__ballots_per_debate_prelim'] = 'per-adj' + self.tournament.preferences['debate_rules__speakers_in_ballots'] = 'never' + + client = APIClient() + client.force_authenticate(user=self.user) + response = client.post(reverse_round('api-ballot-list', self.round, kwargs={'debate_pk': self.debate.pk}), { + 'result': { + 'sheets': [{ + 'adjudicator': reverse_tournament('api-adjudicator-detail', self.tournament, kwargs={'pk': self.a1.pk}), + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'win': True, + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': False, + }, + ], + }], + }, + }) + self.assertEqual(response.status_code, 201) + + def test_team_not_in_debate(self): + self.tournament.preferences['debate_rules__speakers_in_ballots'] = 'never' + + client = APIClient() + client.force_authenticate(user=self.user) + response = client.post(reverse_round('api-ballot-list', self.round, kwargs={'debate_pk': self.debate.pk}), { + 'result': { + 'sheets': [{ + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': True, + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t3.pk}), + 'win': False, + }, + ], + }], + }, + }) + self.assertEqual(response.status_code, 400) + self.assertEqual(str(response.data['result']['sheets'][0]['teams'][0]), 'Inconsistent team') + + def test_team_not_in_correct_side(self): + self.tournament.preferences['debate_rules__speakers_in_ballots'] = 'never' + + client = APIClient() + client.force_authenticate(user=self.user) + response = client.post(reverse_round('api-ballot-list', self.round, kwargs={'debate_pk': self.debate.pk}), { + 'result': { + 'sheets': [{ + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': True, + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'win': False, + }, + ], + }], + }, + }) + self.assertEqual(response.status_code, 400) + self.assertEqual(str(response.data['result']['sheets'][0]['teams'][0]), 'Inconsistent team') + + def test_team_not_in_debate_veto(self): + self.tournament.preferences['debate_rules__speakers_in_ballots'] = 'never' + self.tournament.preferences['motions__motion_vetoes_enabled'] = True + + client = APIClient() + client.force_authenticate(user=self.user) + response = client.post(reverse_round('api-ballot-list', self.round, kwargs={'debate_pk': self.debate.pk}), { + 'result': { + 'sheets': [{ + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'win': True, + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': False, + }, + ], + }], + }, + 'vetos': [ + { + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t3.pk}), + 'motion': reverse_tournament('api-motion-detail', self.tournament, kwargs={'pk': self.m1.pk}), + }, + { + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'motion': reverse_tournament('api-motion-detail', self.tournament, kwargs={'pk': self.m2.pk}), + }, + ], + }) + self.assertEqual(response.status_code, 400) + self.assertEqual(str(response.data[0]), 'Team is not in debate') + + def test_adj_not_in_debate(self): + self.tournament.preferences['debate_rules__ballots_per_debate_prelim'] = 'per-adj' + self.tournament.preferences['debate_rules__speakers_in_ballots'] = 'never' + + client = APIClient() + client.force_authenticate(user=self.user) + response = client.post(reverse_round('api-ballot-list', self.round, kwargs={'debate_pk': self.debate.pk}), { + 'result': { + 'sheets': [{ + 'adjudicator': reverse_tournament('api-adjudicator-detail', self.tournament, kwargs={'pk': self.a3.pk}), + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'win': True, + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': False, + }, + ], + }], + }, + }) + self.assertEqual(response.status_code, 400) + self.assertEqual(str(response.data['result']['sheets'][0]['adjudicator'][0]), 'Adjudicator must be in debate') + + def test_single_adj_many_ballots_fail(self): + self.tournament.preferences['debate_rules__ballots_per_debate_prelim'] = 'per-adj' + self.tournament.preferences['debate_rules__speakers_in_ballots'] = 'never' + + client = APIClient() + client.force_authenticate(user=self.user) + response = client.post(reverse_round('api-ballot-list', self.round, kwargs={'debate_pk': self.debate.pk}), { + 'single_adj': True, + 'result': { + 'sheets': [ + { + 'adjudicator': reverse_tournament('api-adjudicator-detail', self.tournament, kwargs={'pk': self.a1.pk}), + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'win': True, + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': False, + }, + ], + }, + { + 'adjudicator': reverse_tournament('api-adjudicator-detail', self.tournament, kwargs={'pk': self.a2.pk}), + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'win': False, + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': True, + }, + ], + }, + ], + }, + }) + self.assertEqual(response.status_code, 400) + self.assertEqual(str(response.data['single_adj']), 'Single-adjudicator ballots can only have one scoresheet') + + def test_incomplete_ballots_fail(self): + self.tournament.preferences['debate_rules__ballots_per_debate_prelim'] = 'per-adj' + self.tournament.preferences['debate_rules__speakers_in_ballots'] = 'never' + DebateAdjudicator.objects.create(adjudicator=self.a3, type=DebateAdjudicator.TYPE_PANEL, debate=self.debate) + + client = APIClient() + client.force_authenticate(user=self.user) + response = client.post(reverse_round('api-ballot-list', self.round, kwargs={'debate_pk': self.debate.pk}), { + 'result': { + 'sheets': [ + { + 'adjudicator': reverse_tournament('api-adjudicator-detail', self.tournament, kwargs={'pk': self.a1.pk}), + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'win': True, + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': False, + }, + ], + }, + { + 'adjudicator': reverse_tournament('api-adjudicator-detail', self.tournament, kwargs={'pk': self.a2.pk}), + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'win': False, + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': True, + }, + ], + }, + ], + }, + }) + self.assertEqual(response.status_code, 400) + self.assertEqual(str(response.data['result']), 'Voting ballots must either have one scoresheet or ballots from all voting adjudicators') + + def test_many_ballots_consensus_fail(self): + self.tournament.preferences['debate_rules__speakers_in_ballots'] = 'never' + + client = APIClient() + client.force_authenticate(user=self.user) + response = client.post(reverse_round('api-ballot-list', self.round, kwargs={'debate_pk': self.debate.pk}), { + 'result': { + 'sheets': [ + { + 'adjudicator': reverse_tournament('api-adjudicator-detail', self.tournament, kwargs={'pk': self.a1.pk}), + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'win': True, + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': False, + }, + ], + }, + { + 'adjudicator': reverse_tournament('api-adjudicator-detail', self.tournament, kwargs={'pk': self.a2.pk}), + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'win': False, + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': True, + }, + ], + }, + ], + }, + }) + self.assertEqual(response.status_code, 400) + self.assertEqual(str(response.data['result']), 'Consensus ballots can only have one scoresheet') + + def test_inconsistent_speaker_order(self): + self.tournament.preferences['debate_rules__ballots_per_debate_prelim'] = 'per-adj' + + client = APIClient() + client.force_authenticate(user=self.user) + response = client.post(reverse_round('api-ballot-list', self.round, kwargs={'debate_pk': self.debate.pk}), { + 'result': { + 'sheets': [ + { + 'adjudicator': reverse_tournament('api-adjudicator-detail', self.tournament, kwargs={'pk': self.a1.pk}), + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'speeches': [ + { + 'ghost': False, + 'score': 80, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s1.pk}), + }, + { + 'ghost': False, + 'score': 80, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s2.pk}), + }, + ], + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'speeches': [ + { + 'ghost': False, + 'score': 79, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s3.pk}), + }, + { + 'ghost': False, + 'score': 79, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s4.pk}), + }, + ], + }, + ], + }, + { + 'adjudicator': reverse_tournament('api-adjudicator-detail', self.tournament, kwargs={'pk': self.a2.pk}), + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'speeches': [ + { + 'ghost': False, + 'score': 79, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s2.pk}), + }, + { + 'ghost': False, + 'score': 79, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s1.pk}), + }, + ], + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'speeches': [ + { + 'ghost': False, + 'score': 80, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s3.pk}), + }, + { + 'ghost': False, + 'score': 80, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s4.pk}), + }, + ], + }, + ], + }, + ], + }, + }) + self.assertEqual(response.status_code, 400) + self.assertEqual(str(response.data['result']['non_field_errors'][0]), 'Inconsistant speaker order') + + def test_speaks_without_scores(self): + self.tournament.preferences['debate_rules__speakers_in_ballots'] = 'never' + + client = APIClient() + client.force_authenticate(user=self.user) + response = client.post(reverse_round('api-ballot-list', self.round, kwargs={'debate_pk': self.debate.pk}), { + 'result': { + 'sheets': [{ + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'win': True, + 'score': 1, + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': False, + 'score': 0, + }, + ], + }], + }, + }) + self.assertEqual(response.status_code, 400) + self.assertEqual(str(response.data['result']['sheets'][0]['teams'][0]['non_field_errors'][0]), 'Speeches are required to assign scores.') + + def test_inconsistent_speaks(self): + self.tournament.preferences['debate_rules__speakers_in_ballots'] = 'never' + + client = APIClient() + client.force_authenticate(user=self.user) + response = client.post(reverse_round('api-ballot-list', self.round, kwargs={'debate_pk': self.debate.pk}), { + 'result': { + 'sheets': [{ + 'teams': [ + { + 'side': 'aff', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t1.pk}), + 'win': True, + 'score': 1, + 'speeches': [ + { + 'ghost': False, + 'score': 80, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s1.pk}), + }, + { + 'ghost': False, + 'score': 80, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s2.pk}), + }, + ], + }, + { + 'side': 'neg', + 'team': reverse_tournament('api-team-detail', self.tournament, kwargs={'pk': self.t2.pk}), + 'win': False, + 'score': 0, + 'speeches': [ + { + 'ghost': False, + 'score': 79, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s3.pk}), + }, + { + 'ghost': False, + 'score': 79, + 'speaker': reverse_tournament('api-speaker-detail', self.tournament, kwargs={'pk': self.s4.pk}), + }, + ], + }, + ], + }], + }, + }) + self.assertEqual(response.status_code, 400) + self.assertEqual(str(response.data['result']['sheets'][0]['teams'][0]['non_field_errors'][0]), 'Score must be the sum of speech scores.') From 3079279ab163858b2a0d5a06e0cfd81eaed49e20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 30 Sep 2023 15:27:20 -0300 Subject: [PATCH 245/255] Correct graph pairing penalties This commit corrects the slide and fold penalty calculations to be absolute, to prevent bad pairings from being preferred due to the coefficient being negative. Tests are also added to this, and imports re-ordered to make sure all the applicable penalties are being calculated. --- tabbycat/draw/generator/powerpair.py | 19 +-- tabbycat/draw/tests/test_graph_allocations.py | 139 ++++++++++++++++++ 2 files changed, 149 insertions(+), 9 deletions(-) create mode 100644 tabbycat/draw/tests/test_graph_allocations.py diff --git a/tabbycat/draw/generator/powerpair.py b/tabbycat/draw/generator/powerpair.py index db800e3857d..777a21111b5 100644 --- a/tabbycat/draw/generator/powerpair.py +++ b/tabbycat/draw/generator/powerpair.py @@ -1,5 +1,6 @@ import random from collections import OrderedDict +from typing import Optional from django.utils.translation import gettext as _ @@ -297,23 +298,23 @@ def assignment_cost(self, t1, t2, size, bracket=None): return penalty @staticmethod - def _pairings_slide(teams, size, bracket=None): - return abs(teams[0].subrank - teams[1].subrank) - size // 2 + def _pairings_slide(teams, size: int, bracket: Optional[int] = None) -> int: + return abs(abs(teams[0].subrank - teams[1].subrank) - size // 2) @staticmethod - def _pairings_fold(teams, size, bracket=None): - return teams[0].subrank + teams[1].subrank - 1 - size + def _pairings_fold(teams, size: int, bracket: Optional[int] = None) -> int: + return abs(teams[0].subrank + teams[1].subrank - 1 - size) @staticmethod - def _pairings_random(teams, size, bracket=None): + def _pairings_random(teams, size: int, bracket: Optional[int] = None) -> int: return 0 @staticmethod - def _pairings_adjacent(teams, size, bracket=None): + def _pairings_adjacent(teams, size: int, bracket: Optional[int] = None) -> int: return abs(teams[0].subrank - teams[1].subrank) - 1 @classmethod - def _pairings_fold_top_adjacent_rest(cls, teams, size, bracket=None): + def _pairings_fold_top_adjacent_rest(cls, teams, size: int, bracket: Optional[int] = None) -> int: if bracket == 0: return cls._pairings_fold(teams, size) return cls._pairings_adjacent(teams, size) @@ -443,7 +444,7 @@ def _one_up_one_down(self, pairings): pairing.teams = list(new) -class GraphPowerPairedDrawGenerator(GraphGeneratorMixin, GraphCostMixin, BasePowerPairedDrawGenerator): +class GraphPowerPairedDrawGenerator(GraphCostMixin, GraphGeneratorMixin, BasePowerPairedDrawGenerator): pass @@ -719,7 +720,7 @@ def _intermediate_brackets_with_up_down(): raise NotImplementedError("Intermediate brackets with conflict avoidance isn't supported with allocated sides.") -class GraphPowerPairedWithAllocatedSidesDrawGenerator(GraphAllocatedSidesMixin, GraphCostMixin, PowerPairedWithAllocatedSidesDrawGenerator): +class GraphPowerPairedWithAllocatedSidesDrawGenerator(GraphCostMixin, GraphAllocatedSidesMixin, PowerPairedWithAllocatedSidesDrawGenerator): pass diff --git a/tabbycat/draw/tests/test_graph_allocations.py b/tabbycat/draw/tests/test_graph_allocations.py new file mode 100644 index 00000000000..01c93b43d4b --- /dev/null +++ b/tabbycat/draw/tests/test_graph_allocations.py @@ -0,0 +1,139 @@ +import unittest + +from .utils import TestTeam +from ..generator.powerpair import GraphCostMixin, GraphPowerPairedDrawGenerator + +DUMMY_TEAMS = [TestTeam(1, 'A', allocated_side="aff"), TestTeam(2, 'B', allocated_side="neg")] + + +class TestPowerPairedDrawGeneratorParts(unittest.TestCase): + + def test_pairings_slide_deviation_top(self): + teams = [TestTeam(i+1, chr(ord('A') + i), subrank=i+1) for i in range(8)] + + for i, team in enumerate(teams): + """Expected: + (A-A): 4 + A - B: 3 + A - C: 2 + A - D: 1 + A - E: 0 + A - F: 1 + A - G: 2 + A - H: 3""" + with self.subTest(i=i): + self.assertEqual(GraphCostMixin._pairings_slide([teams[0], team], 8), abs(i - 4)) + + def test_pairings_slide_deviation(self): + teams = [TestTeam(i+1, chr(ord('A') + i), subrank=i+1) for i in range(8)] + + for i, team in enumerate(teams): + """Expected: + D - A: 1 + D - B: 2 + D - C: 3 + (D-D): 4 + D - E: 3 + D - F: 2 + D - G: 1 + D - H: 0""" + with self.subTest(i=i): + self.assertEqual(GraphCostMixin._pairings_slide([teams[3], team], 8), 4 - abs(i - 3)) + + def test_pairings_fold_deviation_top(self): + teams = [TestTeam(i+1, chr(ord('A') + i), subrank=i+1) for i in range(8)] + + for i, team in enumerate(teams): + """Expected: + (A-A): 7 + A - B: 6 + A - C: 5 + A - D: 4 + A - E: 3 + A - F: 2 + A - G: 1 + A - H: 0""" + with self.subTest(i=i): + self.assertEqual(GraphCostMixin._pairings_fold([teams[0], team], 8), 7-i) + + def test_pairings_fold_deviation(self): + teams = [TestTeam(i+1, chr(ord('A') + i), subrank=i+1) for i in range(8)] + + for i, team in enumerate(teams): + """Expected: + D - A: 4 + D - B: 3 + D - C: 2 + (D-D): 1 + D - E: 0 + D - F: 1 + D - G: 2 + D - H: 3""" + with self.subTest(i=i): + self.assertEqual(GraphCostMixin._pairings_fold([teams[3], team], 8), abs(4-i)) + return [abs(4-i) for i in range(8)] + + def test_pairings_random_deviation_zero(self): + teams = [TestTeam(i+1, chr(ord('A') + i), subrank=i+1) for i in range(8)] + # Always 0 + self.assertEqual(GraphCostMixin._pairings_random([teams[0], teams[1]], 8), 0) + + def test_pairings_adjacent_deviation_top(self): + teams = [TestTeam(i+1, chr(ord('A') + i), subrank=i+1) for i in range(8)] + + for i, team in enumerate(teams): + """Expected: + (A-A): -1 + A - B: 0 + A - C: 1 + A - D: 2 + A - E: 3 + A - F: 4 + A - G: 5 + A - H: 6""" + with self.subTest(i=i): + self.assertEqual(GraphCostMixin._pairings_adjacent([teams[0], team], 8), i-1) + + def test_pairings_adjacent_deviation(self): + teams = [TestTeam(i+1, chr(ord('A') + i), subrank=i+1) for i in range(8)] + + for i, team in enumerate(teams): + """Expected: + D - A: 2 + D - B: 1 + D - C: 0 + (D-D): -1 + D - E: 0 + D - F: 1 + D - G: 2 + D - H: 3""" + with self.subTest(i=i): + self.assertEqual(GraphCostMixin._pairings_adjacent([teams[3], team], 8), abs(i - 3) - 1) + return [abs(i - 3) - 1 for i in range(8)] + + def test_pairings_fold_adj_deviation(self): + teams = [TestTeam(i+1, chr(ord('A') + i), subrank=i+1) for i in range(8)] + methods = [self.test_pairings_fold_deviation, self.test_pairings_adjacent_deviation] + for i, method in enumerate(methods): + for j, (team, expected) in enumerate(zip(teams, method())): + self.assertEqual(GraphCostMixin._pairings_fold_top_adjacent_rest([teams[3], team], 8, bracket=i), expected) + + def test_add_pullup_penalty(self): + teams = [TestTeam(i+1, chr(ord('A') + i), subrank=i+1, pullup_debates=i+1) for i in range(2)] + gcm = GraphPowerPairedDrawGenerator(teams) + gcm.options = {'pullup_debates_penalty': 1, 'pairing_method': 'random', 'avoid_history': False, 'avoid_institution': False, 'side_allocations': False} + gcm.team_flags = {teams[0]: ['pullup']} + self.assertEqual(gcm.assignment_cost(*teams, 2), 2) + + def test_add_subrank_pullup(self): + teams = [TestTeam(i+1, chr(ord('A') + i), subrank=(None if i else 1)) for i in range(2)] + gcm = GraphPowerPairedDrawGenerator(teams) + gcm.options = {'pullup_debates_penalty': 1, 'pairing_method': 'fold', 'avoid_history': False, 'avoid_institution': False, 'side_allocations': False, 'pairing_penalty': 1} + self.assertEqual(gcm.assignment_cost(*teams, 2), 0) + self.assertEqual(teams[1].subrank, 2) + + def test_none_self_penalty(self): + team = TestTeam(1, 'A') + gcm = GraphPowerPairedDrawGenerator([team, team]) + gcm.options = {'pullup_debates_penalty': 1, 'pairing_method': 'fold', 'avoid_history': False, 'avoid_institution': False, 'side_allocations': False, 'pairing_penalty': 1} + self.assertEqual(gcm.assignment_cost(team, team, 2), None) From d4c003ac0e949794dd848de3a762b878b55d668d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 7 Oct 2023 09:55:35 -0400 Subject: [PATCH 246/255] API: Mark some fields as not required --- tabbycat/api/serializers.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tabbycat/api/serializers.py b/tabbycat/api/serializers.py index 9b0813e315a..f206d524493 100644 --- a/tabbycat/api/serializers.py +++ b/tabbycat/api/serializers.py @@ -602,17 +602,20 @@ class Meta: allow_null=True, view_name='api-global-institution-detail', queryset=Institution.objects.all(), + required=False, ) break_categories = fields.TournamentHyperlinkedRelatedField( many=True, view_name='api-breakcategory-detail', queryset=BreakCategory.objects.all(), + required=False, ) institution_conflicts = serializers.HyperlinkedRelatedField( many=True, view_name='api-global-institution-detail', queryset=Institution.objects.all(), + required=False, ) venue_constraints = VenueConstraintSerializer(many=True, required=False) @@ -668,8 +671,8 @@ def create(self, validated_data): 3. Create the speakers. 4. Add institution conflict""" - if len(validated_data.get('short_reference', "")) == 0: - validated_data['short_reference'] = validated_data['reference'][:34] + if validated_data.get('short_reference') is None: + validated_data['short_reference'] = validated_data.get('reference', '')[:34] speakers_data = validated_data.pop('speakers', []) break_categories = validated_data.pop('break_categories', []) From c242bffcc88cec2e5bcfe5cda94a691a67c1310a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Mon, 9 Oct 2023 13:37:43 -0400 Subject: [PATCH 247/255] Avoid auto-allocating rooms to bye debates Not necessary as there wouldn't be a debate, and it is hidden from the allocations screen. --- tabbycat/venues/allocator.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tabbycat/venues/allocator.py b/tabbycat/venues/allocator.py index a6cd7f8f7d8..7f2452b7e7c 100644 --- a/tabbycat/venues/allocator.py +++ b/tabbycat/venues/allocator.py @@ -2,7 +2,9 @@ import logging import random -from draw.models import Debate +from django.db.models import Q + +from draw.models import Debate, DebateTeam from .models import VenueConstraint @@ -27,7 +29,7 @@ class VenueAllocator: def allocate(self, round, debates=None): if debates is None: - debates = round.debate_set_with_prefetches(speakers=False, institutions=True) + debates = round.debate_set_with_prefetches(speakers=False, institutions=True, filter_args=[~Q(debateteam__side=DebateTeam.Side.BYE)]) self._all_venues = list(round.active_venues.order_by('-priority')) self._preferred_venues = self._all_venues[:len(debates)] From 84849fcf574bc3870fbe819ac3b50b7198863435 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Mon, 9 Oct 2023 13:43:01 -0400 Subject: [PATCH 248/255] Add checks for bye teams in tables --- tabbycat/draw/manager.py | 5 ++++- tabbycat/draw/tables.py | 26 +++++++++++++++----------- tabbycat/utils/tables.py | 2 +- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/tabbycat/draw/manager.py b/tabbycat/draw/manager.py index f002ddafaae..71b7565e904 100644 --- a/tabbycat/draw/manager.py +++ b/tabbycat/draw/manager.py @@ -272,7 +272,10 @@ def get_teams(self) -> Tuple[List['Team'], List['Team']]: for i in range(n_byes): byes.append(ranked.pop(random.randrange(len(ranked)))) return ranked, byes - return ranked[:-n_byes], ranked[-n_byes:] + elif self.round.tournament.pref('bye_team_selection') == 'lowest': + return ranked[:-n_byes], ranked[-n_byes:] + else: + raise RuntimeError("Bye team(s) created without recognized selection option") return ranked, [] diff --git a/tabbycat/draw/tables.py b/tabbycat/draw/tables.py index 86f4808e08f..7626fe2f1a5 100644 --- a/tabbycat/draw/tables.py +++ b/tabbycat/draw/tables.py @@ -51,7 +51,7 @@ def _side_history_by_team(self, side_histories, teams): returns cells that can be used to show the side history for each team in `teams`.""" # Note that the spaces used in the separator are nonbreaking spaces, not normal spaces - return [{'text': self.side_history_separator.join(map(str, side_histories[team.id]))} + return [{'text': self.side_history_separator.join(map(str, side_histories[team.id])) if team is not None else self.BLANK_TEXT} for team in teams] @@ -121,18 +121,22 @@ def _debate_standings_headers(self, standings, info_method, limit=None): def _add_debate_standing_columns(self, debates, standings, itermethod, infomethod, formattext, formatsort, limit=None): standings_by_debate = [standings.get_standings( - [d.get_team(side) for side in self.tournament.sides]) for d in debates] + [d.get_team(side) for side in self.tournament.sides]) if not d.is_bye else None for d in debates] cells = [] + ncols = len(list(getattr(standings, infomethod)())) * len(self.tournament.sides) for debate in standings_by_debate: - row = [] - iterators = [islice(getattr(standing, itermethod)(), limit) for standing in debate] - for metrics in zip(*iterators): - for i, metric in enumerate(metrics): - cell = {'text': formattext(metric), 'sort': formatsort(metric)} - if i == 0: - cell['class'] = 'highlight-col' - row.append(cell) + if debate is None: + row = [self.BLANK_TEXT] * ncols + else: + row = [] + iterators = [islice(getattr(standing, itermethod)(), limit) for standing in debate] + for metrics in zip(*iterators): + for i, metric in enumerate(metrics): + cell = {'text': formattext(metric), 'sort': formatsort(metric)} + if i == 0: + cell['class'] = 'highlight-col' + row.append(cell) cells.append(row) headers = self._debate_standings_headers(standings, infomethod, limit) @@ -164,7 +168,7 @@ def formatsort(x): def add_debate_side_history_columns(self, debates, round): # Teams should be prefetched in debates, so don't use a new Team queryset to collate teams - teams_by_side = [[d.get_team(side) for d in debates] for side in self.tournament.sides] + teams_by_side = [[d.get_team(side) if not d.is_bye else None for d in debates] for side in self.tournament.sides] all_teams = [team for d in debates for team in d.teams] side_histories = get_side_history(all_teams, self.tournament.sides, round.seq) diff --git a/tabbycat/utils/tables.py b/tabbycat/utils/tables.py index 3b085c7e8c4..8824da134ae 100644 --- a/tabbycat/utils/tables.py +++ b/tabbycat/utils/tables.py @@ -845,7 +845,7 @@ def add_debate_ballot_link_column(self, debates, show_ballot=False): ballot_links_data = [{ 'text': no_ballot if debate.is_bye else _("View/Edit Ballot"), 'link': None if debate.is_bye else reverse_tournament('old-results-ballotset-edit', self.tournament, kwargs={'pk': debate.confirmed_ballot.id}), - } if debate.confirmed_ballot else "" for debate in debates if not debate.is_bye] + } if debate.confirmed_ballot else "" for debate in debates] self.add_column(ballot_links_header, ballot_links_data) elif self.private_url: From 9c2da668c0e77db7b75bfc4e401340688d7805dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=CC=81bastien=20Dunne=20Fulmer?= Date: Mon, 13 Nov 2023 17:56:38 +0000 Subject: [PATCH 249/255] Handle appname suffixes in deploy_heroku.py --- deploy_heroku.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy_heroku.py b/deploy_heroku.py index 4bfcc80d92f..bbf5ea24163 100644 --- a/deploy_heroku.py +++ b/deploy_heroku.py @@ -165,7 +165,7 @@ def get_git_push_spec(): if args.urlname != "-": command.append(args.urlname) output = get_output_from_command(command) -match = re.search(r"https://([\w_-]+)\.herokuapp\.com/\s+\|\s+(https://git.heroku.com/[\w_-]+.git)", output) +match = re.search(r"https://([\w_-]+?)(?:-\w{12})?\.herokuapp\.com/\s+\|\s+(https://git.heroku.com/[\w_-]+.git)", output) urlname = match.group(1) heroku_url = match.group(2) From a1629c260d58fd73319d2702c73a0924d8b8925b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=CC=81bastien=20Dunne=20Fulmer?= Date: Tue, 14 Nov 2023 10:05:39 +0000 Subject: [PATCH 250/255] Wait for redis provisioning in deploy_heroku.py --- deploy_heroku.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/deploy_heroku.py b/deploy_heroku.py index bbf5ea24163..de1f32c1fb3 100644 --- a/deploy_heroku.py +++ b/deploy_heroku.py @@ -8,6 +8,7 @@ import shutil import subprocess import sys +import time try: from django.core.management.utils import get_random_secret_key @@ -207,6 +208,18 @@ def get_git_push_spec(): else: remote_name = heroku_url +# Wait for Redis provisioning, which can take a significant amount of time +redis_provisioned = False +redis_status_command = make_heroku_command(["redis:info"]) +print_yellow("Waiting for Heroku Redis to provision (may take up to 5 minutes)...") + +while not redis_provisioned: + time.sleep(30) + redis_output = subprocess.check_output(redis_status_command).decode().split("\n") + redis_provisioned = "available" in redis_output[2] + +print("Heroku Redis is available, starting deployment") + # Push source code to Heroku push_spec = get_git_push_spec() run_command(["git", "push", remote_name, push_spec]) From eac34cea4041483697893a3cf9338fdd7db979be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=CC=81bastien=20Dunne=20Fulmer?= Date: Tue, 14 Nov 2023 10:56:03 +0000 Subject: [PATCH 251/255] Deploy default dyno type and add info to Heroku docs --- deploy_heroku.py | 4 ++-- docs/install/heroku.rst | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/deploy_heroku.py b/deploy_heroku.py index de1f32c1fb3..8aa1e0d5515 100644 --- a/deploy_heroku.py +++ b/deploy_heroku.py @@ -43,8 +43,8 @@ def get_random_secret_key(): help="Heroku Postgres plan (default mini)") parser.add_argument( - "--web-dynos", type=str, default="1:eco", - help="Web dyno specification, passed to heroku ps:scale web=[], e.g. 1:eco, 1:hobby, 2:Standard-1X") + "--web-dynos", type=str, default="1", + help="Web dyno specification, passed to heroku ps:scale web=[], e.g. 1:eco, 1:basic, 2:Standard-1X") parser.add_argument( "--import-tournament", type=str, metavar="IMPORT_DIR", diff --git a/docs/install/heroku.rst b/docs/install/heroku.rst index 3430b7aefd2..3ff747f923c 100644 --- a/docs/install/heroku.rst +++ b/docs/install/heroku.rst @@ -107,6 +107,8 @@ b. Run the script to deploy the app to Heroku. Replace ``yourappname`` with your python deploy_heroku.py yourappname + The script uses the default dyno type for your Heroku account. If you have a paid Heroku Eco plan, the script will use Eco dynos. If you do not have an Eco plan, it will use Basic dynos which are billed based on usage. You can use the ``--web-dynos`` option to use a specific type, such as ``--web-dynos 1:basic`` if you have an Eco plan but wish to use Basic dynos. + This script has other options that you might find useful. Run ``python deploy_heroku.py --help`` for details. The script may work away on its own for 10-30 minutes before it asks you some questions to answer. When finished, it will open the app in your browser. It should look something like this: @@ -122,6 +124,8 @@ TLDR commands .. warning:: We provide a "short version" for experienced users. Don't just copy and paste these commands before you understand what they do! If things aren't set up perfectly they can fail, so it's important to supervise them the first time you do them. If this is all new to you, read the long version of the instructions below. +The script uses the default dyno type for your Heroku account. If you have a paid Heroku Eco plan, the script will use Eco dynos. If you do not have an Eco plan, it will use Basic dynos which are billed based on usage. You can use the ``--web-dynos`` option with the last command to use a specific type, such as ``--web-dynos 1:basic`` if you have an Eco plan but wish to use Basic dynos. + .. parsed-literal:: git clone https://github.com/TabbycatDebate/tabbycat.git From eeb0d8406707ca174556eb52197fb6273f0a646f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=CC=81bastien=20Dunne=20Fulmer?= Date: Tue, 14 Nov 2023 11:04:27 +0000 Subject: [PATCH 252/255] Fix out of date Heroku deploy information --- docs/install/heroku.rst | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/docs/install/heroku.rst b/docs/install/heroku.rst index 3ff747f923c..f43c1a5c60b 100644 --- a/docs/install/heroku.rst +++ b/docs/install/heroku.rst @@ -74,7 +74,7 @@ Account Setup `Heroku `_ is a platform as a service on which Tabbycat can be installed to be available on the internet. Naturally, this requires you to have a Heroku account. Head to the site and sign-up for one. -.. note:: During the setup process, Heroku will ask you to verify your account by adding a credit card. A standard Tabbycat site *will not charge* your card — charges only accrue if you deliberately add a paid service in the Heroku dashboard. +.. note:: During the setup process, Heroku will ask you to verify your account by adding a credit card. A standard Tabbycat site *may charge* your card. If you have a paid Heroku Eco plan Tabbycat will use your Eco hours and you will not be charged, otherwise Tabbycat will use 2 Basic dynos which cost roughly $0.25/day or $7/month each. 1. Install dependencies ----------------------- @@ -101,7 +101,9 @@ a. Navigate on the command-line your Tabbycat directory. If you have not changed cd tabbycat -b. Run the script to deploy the app to Heroku. Replace ``yourappname`` with your preferred URL. Your website will be at ``yourappname.herokuapp.com``. +b. Run the script to deploy the app to Heroku. Replace ``yourappname`` with your preferred URL. Your website will be at ``yourappname-suffix.herokuapp.com``. + + .. warning:: On June 14th, 2023, Heroku started appending 12-character random suffixes to subdomains to prevent domain takeover when an app is renamed or deleted. Tabs created before this point will keep their ``yourappname.herokuapp.com`` domain, but new tabs will have the random suffix after ``yourappname``. :: @@ -143,20 +145,20 @@ If you have a large tournament, you may want to customize your Heroku app. This Upgrading your database size ---------------------------- -The free plan of `Heroku Postgres `_, "Hobby Dev", should work for most small tournaments. For large tournaments, however, you may find that you exceed the 10,000-row limit of this plan. It's difficult to give general guidance on how many rows you're likely to use, because it depends on which features of Tabbycat you use (*e.g.*, if you use adjudicator feedback). But to give some idea: +The Mini plan of `Heroku Postgres `_, should work for most small tournaments. For large tournaments, however, you may find that you exceed the 10,000-row limit of this plan. It's difficult to give general guidance on how many rows you're likely to use, because it depends on which features of Tabbycat you use (*e.g.*, if you use adjudicator feedback). But to give some idea: - Australs 2016, which had 74 teams, 8 preliminary rounds and heavily used adjudicator feedback, ended up at around 30,000 rows. - The Asia BP championships 2017 had 100 teams, 6 preliminary rounds, and mandatory feedback (i.e. 100% return rates) used 15,000 rows. - A 3 vs 3 tournament with 54 teams, 5 preliminary rounds, and which only lightly used adjudicator feedback ended up using around 4,500 rows -If you need more than 10,000 rows, you'll need to upgrade to a paid Heroku Postgres Plan. The 10,000,000 rows allowed in the lowest paid plan, "Hobby Basic", should certainly be more than sufficient. +If you need more than 10,000 rows, you'll need to upgrade to a larger Heroku Postgres Plan. The 10,000,000 rows allowed in the lowest paid plan, "Basic", should certainly be more than sufficient. -If you're not sure, you can always start at Hobby Dev—just be prepared to `upgrade `_ during the tournament if you run close to capacity. +If you're not sure, you can always start at Mini—just be prepared to `upgrade `_ during the tournament if you run close to capacity. Custom domain names ------------------- -Your Heroku app will be available at ``yourappname.herokuapp.com``. You may want it to be a subdomain of your tournament's website, like ``tab.australasians2015.org``. If so, you'll need to configure your custom domain and SSL. Instructions for both are in the Heroku Dev Center: +Your Heroku app will be available at ``yourappname-suffix.herokuapp.com``. You may want it to be a subdomain of your tournament's website, like ``tab.australasians2015.org``. If so, you'll need to configure your custom domain and SSL. Instructions for both are in the Heroku Dev Center: - `Custom Domain Names for Apps `_ - `Heroku SSL `_ @@ -219,17 +221,17 @@ You'll need both Git and the Heroku CLI, and you'll need to be logged in to the 3. Check to see if you have a Git remote already in place:: $ git remote -v - heroku https://git.heroku.com/mytournament2018.git (fetch) - heroku https://git.heroku.com/mytournament2018.git (push) + heroku https://git.heroku.com/yourappname.git (fetch) + heroku https://git.heroku.com/yourappname.git (push) - If you do, the name of the remote will be on the left (``heroku`` in the above example), and the URL of your Git repository will be on the right. In the example above, our Tabbycat site URL would be ``mytournament2018.herokuapp.com``; the Git remote URL is then ``https://git.heroku.com/mytournament2018.git``. + If you do, the name of the remote will be on the left (``heroku`` in the above example), and the URL of your Git repository will be on the right. In the example above, our Tabbycat site URL would be ``yourappname-suffix.herokuapp.com``; the Git remote URL is then ``https://git.heroku.com/yourappname.git``. If a Git remote URL for your Tabbycat site *doesn't* appear, then create one:: - $ heroku git:remote --app mytournament2018 --remote heroku - set git remote heroku to https://git.heroku.com/mytournament2018.git + $ heroku git:remote --app yourappname --remote heroku + set git remote heroku to https://git.heroku.com/yourappname.git - .. tip:: If you tab many tournaments, it'll probably be helpful to use a name other than ``heroku`` (say, ``mytournament2018``), so that you can manage multiple tournaments. + .. tip:: If you tab many tournaments, it'll probably be helpful to use a name other than ``heroku`` (say, ``yourappname``), so that you can manage multiple tournaments. 4. Push to Heroku:: From 56e606837f507750fa1099bb116e271f01436c9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Sat, 18 Nov 2023 14:21:10 -0400 Subject: [PATCH 253/255] Tests: Correct expected values for draw strength This commit places back the tests for draw strength when faced with a unconfirmed ballot. Contrary to other metrics, the values should change as they include the new draw. However, they should not contain the scores from the unconfirmed ballot. This test shows that this behaviour is current, and is expected. --- tabbycat/standings/tests/test_standings.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tabbycat/standings/tests/test_standings.py b/tabbycat/standings/tests/test_standings.py index 4634e1535f1..3ea5a2dd473 100644 --- a/tabbycat/standings/tests/test_standings.py +++ b/tabbycat/standings/tests/test_standings.py @@ -1,5 +1,4 @@ import logging -from unittest import expectedFailure from django.test import TestCase @@ -253,13 +252,15 @@ def setUp(self): debate = self.set_up_ignorable_debate() debate.ballotsubmission_set.update(confirmed=False) - @expectedFailure def test_draw_strength(self): - super().test_draw_strength() + # The ignorable debate still counts as an opponent (because they definitely faced each + # other) but does not count as a win (because it's unconfirmed). So the losing team has + # faced the winning team 3 times (including ignorable debate), and the winning team has 2 + # wins (excluding ignorable debate), for a losing team draw strength of 3 * 2 = 6. + self._base_metric_test({'draw_strength': [0, 6]}) - @expectedFailure def test_draw_strength_speaks(self): - super().test_draw_strength_speaks() + self._base_metric_test({'draw_strength_speaks': [591, 609]}) class TestBasicStandings(TestCase): From ee572b227b211eea4eb9ce929a291b5d0eb929c0 Mon Sep 17 00:00:00 2001 From: Jalaj Kumar <96870071+jalaj711@users.noreply.github.com> Date: Mon, 27 Nov 2023 02:13:41 +0530 Subject: [PATCH 254/255] Support selecting multiple scroll speeds on draws page (Fixes #2360) (#2365) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit fixes #2360 where selecting multiple scroll speeds on the draws page would cause the stop scrolling to not work. Signed-off-by: Jalaj <96870071+jalaj711@users.noreply.github.com> Co-authored-by: Étienne Beaulé --- tabbycat/draw/templates/draw_display_by.html | 1 + 1 file changed, 1 insertion(+) diff --git a/tabbycat/draw/templates/draw_display_by.html b/tabbycat/draw/templates/draw_display_by.html index 448efc365e6..2da69f50111 100644 --- a/tabbycat/draw/templates/draw_display_by.html +++ b/tabbycat/draw/templates/draw_display_by.html @@ -94,6 +94,7 @@ $('#stop_scrolling').hide(); $(".scroll-speeds .btn").click(function(event){ var speed = $(document).height() / $(this).attr('data-target'); + stopScrolling() startScrolling() $('html, body').animate( { scrollTop: $(document).height() - $(window).height()}, From 107b0c201a19c64e21f4d71e5583bf53ec8f479d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Mon, 27 Nov 2023 16:10:06 -0400 Subject: [PATCH 255/255] Prepare for 2.8 release --- .github/CHANGELOG.rst | 24 +++++++++++++----------- docs/conf.py | 2 +- tabbycat/settings/core.py | 2 +- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/.github/CHANGELOG.rst b/.github/CHANGELOG.rst index 16307b9e45c..e1691cfafa8 100644 --- a/.github/CHANGELOG.rst +++ b/.github/CHANGELOG.rst @@ -4,23 +4,25 @@ Change Log 2.8.0 (Quokka) --------- -*Release date: TBD* +*Release date: 28 November 2023* +- The term "iron person" is now used throughout the platform for consistency and inclusivity. Thanks to @dcorks for the pull request! + - The number of times a team has had an iron-speaker is now tracked as a team metric. - Added new emoji from Unicode 12 and 13. Thank you to Daan Koning for the pull request! (`#2143 `_) - Info Slides can now use rich-text formatting (e.g. bold, links, etc). Thanks to Trần Trang Linh for adding this feature! - Speaker and break category forms have better validation and fewer fields. -- The number of times a team has had an iron-speaker is now tracked. +- Tournaments can be created specifying private URL use directly. Thanks to Sébastien Dunne Fulmer! - Implemented support for APDA-style tournaments with: - - Avoidance for a team to repeatedly meet pulled-up teams, - - A new two-team draw generator to minimize penalties globally within brackets, - - Team seeding for the first round, - - The ability to give ranks to speeches in addition to speaker scores, and - - A preset to enable these options. + - Avoidance for a team to repeatedly meet pulled-up teams, + - A new two-team draw generator to minimize penalties globally within brackets, + - Team seeding for the first round, + - The ability to give ranks to speeches in addition to speaker scores, and + - A preset to enable these options. - API Updates: - - Documentation is now automatically generated and available under the ``/api/schema/redoc/`` path on all sites. - - Preformed panels are now accessible using the API. - - Team and speaker scores by round has a new endpoint. Thanks to Ido Wolf for the feature! - - The site's timezone is shown in the root endpoint. + - Documentation is now automatically generated and available under the ``/api/schema/redoc/`` path on all sites. + - Preformed panels are now accessible using the API. + - Team and speaker scores by round has a new endpoint. Thanks to Ido Wolf for the feature! + - The site's timezone is shown in the root endpoint. Thanks to Daan Koning! - \+ so many more little improvements and fixes! diff --git a/docs/conf.py b/docs/conf.py index bba3854f8c2..cbad7ad5b09 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -60,7 +60,7 @@ # The short X.Y version. version = '2.8' # The full version, including alpha/beta/rc tags. -release = '2.8.0-dev' +release = '2.8.0' rst_epilog = """ .. |vrelease| replace:: v{release} diff --git a/tabbycat/settings/core.py b/tabbycat/settings/core.py index 25f6dba6663..66289041675 100644 --- a/tabbycat/settings/core.py +++ b/tabbycat/settings/core.py @@ -22,7 +22,7 @@ # Version # ============================================================================== -TABBYCAT_VERSION = '2.8.0-dev' +TABBYCAT_VERSION = '2.8.0' TABBYCAT_CODENAME = 'Quokka' READTHEDOCS_VERSION = 'v2.8.0'